npcsh 1.0.31__py3-none-any.whl → 1.0.32__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.
- npcsh/alicanto.py +1001 -1015
- npcsh/corca.py +61 -21
- npcsh/routes.py +16 -15
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/METADATA +1 -1
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/RECORD +35 -35
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/alicanto.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/alicanto.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/bash_executer.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/corca.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/corca.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/edit_file.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/foreman.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/frederic.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/frederic4.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/guac.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/image_generation.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/internet_search.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/kadiefa.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/kadiefa.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/npcsh.ctx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/npcsh_sibiji.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonk.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonk.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonkjr.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/plonkjr.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/python_executor.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/screen_cap.jinx +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/sibiji.npc +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/sibiji.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/spool.png +0 -0
- {npcsh-1.0.31.data → npcsh-1.0.32.data}/data/npcsh/npc_team/yap.png +0 -0
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/WHEEL +0 -0
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/entry_points.txt +0 -0
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/licenses/LICENSE +0 -0
- {npcsh-1.0.31.dist-info → npcsh-1.0.32.dist-info}/top_level.txt +0 -0
npcsh/corca.py
CHANGED
|
@@ -7,6 +7,7 @@ from contextlib import AsyncExitStack
|
|
|
7
7
|
from typing import Optional, Callable, Dict, Any, Tuple, List
|
|
8
8
|
import shutil
|
|
9
9
|
import traceback
|
|
10
|
+
from litellm.exceptions import Timeout, ContextWindowExceededError, RateLimitError
|
|
10
11
|
|
|
11
12
|
try:
|
|
12
13
|
from mcp import ClientSession, StdioServerParameters
|
|
@@ -250,6 +251,7 @@ def process_mcp_stream(stream_response, active_npc):
|
|
|
250
251
|
|
|
251
252
|
|
|
252
253
|
|
|
254
|
+
|
|
253
255
|
def execute_command_corca(command: str, state: ShellState, command_history, selected_mcp_tools_names: Optional[List[str]] = None) -> Tuple[ShellState, Any]:
|
|
254
256
|
mcp_tools_for_llm = []
|
|
255
257
|
|
|
@@ -270,27 +272,63 @@ def execute_command_corca(command: str, state: ShellState, command_history, sele
|
|
|
270
272
|
|
|
271
273
|
active_npc = state.npc if isinstance(state.npc, NPC) else NPC(name="default")
|
|
272
274
|
|
|
273
|
-
if len(state.messages) >
|
|
274
|
-
compressed_state = active_npc.compress_planning_state(
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
275
|
+
if len(state.messages) > 50:
|
|
276
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
277
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
278
|
+
print(compressed_state)
|
|
279
|
+
|
|
280
|
+
try:
|
|
281
|
+
response_dict = get_llm_response(
|
|
282
|
+
prompt=command,
|
|
283
|
+
npc=state.npc,
|
|
284
|
+
messages=state.messages,
|
|
285
|
+
tools=mcp_tools_for_llm,
|
|
286
|
+
auto_process_tool_calls=False,
|
|
287
|
+
stream=state.stream_output,
|
|
288
|
+
team=state.team
|
|
289
|
+
)
|
|
290
|
+
except Timeout:
|
|
291
|
+
response_dict = get_llm_response(
|
|
292
|
+
prompt=command,
|
|
293
|
+
npc=state.npc,
|
|
294
|
+
messages=state.messages,
|
|
295
|
+
tools=mcp_tools_for_llm,
|
|
296
|
+
auto_process_tool_calls=False,
|
|
297
|
+
stream=state.stream_output,
|
|
298
|
+
team=state.team
|
|
299
|
+
)
|
|
300
|
+
except ContextWindowExceededError:
|
|
301
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
302
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
303
|
+
|
|
304
|
+
response_dict = get_llm_response(
|
|
305
|
+
prompt=command,
|
|
306
|
+
npc=state.npc,
|
|
307
|
+
messages=state.messages,
|
|
308
|
+
tools=mcp_tools_for_llm,
|
|
309
|
+
auto_process_tool_calls=False,
|
|
310
|
+
stream=state.stream_output,
|
|
311
|
+
team=state.team
|
|
312
|
+
)
|
|
313
|
+
except RateLimitError:
|
|
314
|
+
import time
|
|
315
|
+
print('rate limit hit... waiting 60 seconds')
|
|
316
|
+
time.sleep(60)
|
|
317
|
+
print('compressing..... ')
|
|
318
|
+
compressed_state = active_npc.compress_planning_state(state.messages)
|
|
319
|
+
state.messages = [{"role": "system", "content": compressed_state}]
|
|
320
|
+
|
|
321
|
+
response_dict = get_llm_response(
|
|
322
|
+
prompt=command,
|
|
323
|
+
npc=state.npc,
|
|
324
|
+
messages=state.messages,
|
|
325
|
+
tools=mcp_tools_for_llm,
|
|
326
|
+
auto_process_tool_calls=False,
|
|
327
|
+
stream=state.stream_output,
|
|
328
|
+
team=state.team
|
|
329
|
+
)
|
|
330
|
+
|
|
331
|
+
|
|
294
332
|
stream_response = response_dict.get('response')
|
|
295
333
|
messages = response_dict.get('messages', state.messages)
|
|
296
334
|
|
|
@@ -308,6 +346,8 @@ def execute_command_corca(command: str, state: ShellState, command_history, sele
|
|
|
308
346
|
"tool_calls": tool_calls,
|
|
309
347
|
"messages": state.messages
|
|
310
348
|
}
|
|
349
|
+
|
|
350
|
+
|
|
311
351
|
def _resolve_and_copy_mcp_server_path(
|
|
312
352
|
explicit_path: Optional[str],
|
|
313
353
|
current_path: Optional[str],
|
npcsh/routes.py
CHANGED
|
@@ -1130,18 +1130,11 @@ def yap_handler(command: str, **kwargs):
|
|
|
1130
1130
|
@router.route("alicanto", "Conduct deep research with multiple perspectives, identifying gold insights and cliff warnings")
|
|
1131
1131
|
def alicanto_handler(command: str, **kwargs):
|
|
1132
1132
|
messages = safe_get(kwargs, "messages", [])
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
1133
|
parts = shlex.split(command)
|
|
1136
|
-
|
|
1137
1134
|
|
|
1138
1135
|
query = ""
|
|
1139
1136
|
num_npcs = safe_get(kwargs, 'num_npcs', 5)
|
|
1140
1137
|
depth = safe_get(kwargs, 'depth', 3)
|
|
1141
|
-
exploration_factor = safe_get(kwargs, 'exploration', 0.3)
|
|
1142
|
-
creativity_factor = safe_get(kwargs, 'creativity', 0.5)
|
|
1143
|
-
output_format = safe_get(kwargs, 'format', 'report')
|
|
1144
|
-
|
|
1145
1138
|
|
|
1146
1139
|
i = 1
|
|
1147
1140
|
while i < len(parts):
|
|
@@ -1217,17 +1210,25 @@ def alicanto_handler(command: str, **kwargs):
|
|
|
1217
1210
|
|
|
1218
1211
|
try:
|
|
1219
1212
|
logging.info(f"Starting Alicanto research on: {query}")
|
|
1213
|
+
model = safe_get(kwargs, 'model')
|
|
1214
|
+
if len(model) == 0 :
|
|
1215
|
+
model = NPCSH_CHAT_MODEL
|
|
1216
|
+
provider = safe_get(kwargs, 'provider')
|
|
1217
|
+
if len(provider) == 0 :
|
|
1218
|
+
provider = NPCSH_CHAT_PROVIDER
|
|
1219
|
+
|
|
1220
|
+
|
|
1221
|
+
print('model: ', model)
|
|
1222
|
+
print('provider: ', provider)
|
|
1223
|
+
|
|
1220
1224
|
result = alicanto(
|
|
1221
|
-
|
|
1225
|
+
query,
|
|
1222
1226
|
num_npcs=num_npcs,
|
|
1223
1227
|
depth=depth,
|
|
1224
|
-
|
|
1225
|
-
|
|
1226
|
-
|
|
1227
|
-
|
|
1228
|
-
exploration_factor=exploration_factor,
|
|
1229
|
-
creativity_factor=creativity_factor,
|
|
1230
|
-
output_format=output_format
|
|
1228
|
+
model=model,
|
|
1229
|
+
provider=provider,
|
|
1230
|
+
max_steps = safe_get(kwargs, 'max_steps', 20),
|
|
1231
|
+
|
|
1231
1232
|
)
|
|
1232
1233
|
|
|
1233
1234
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
npcsh/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
npcsh/_state.py,sha256=sntRSm9DKthandawaLCf-semAm_1CNx3AUh-066G248,86498
|
|
3
|
-
npcsh/alicanto.py,sha256=
|
|
4
|
-
npcsh/corca.py,sha256=
|
|
3
|
+
npcsh/alicanto.py,sha256=ZftzxfQPQuuj9VB9V2FCTQN5NIE9Rvsg4iNiNqOUE6U,38118
|
|
4
|
+
npcsh/corca.py,sha256=iX_20JYYak_KKEKgG-S5buKkBc-1iZ-k2YdPr1FDG2A,49141
|
|
5
5
|
npcsh/guac.py,sha256=sVdLYVkzkQw6TE7crtLUX0QJZFkzQthWZTe1p7IfAQE,80412
|
|
6
6
|
npcsh/mcp_helpers.py,sha256=9TsCfcquGu_vX4WaKlY3J3P13-uxruQKrXng-jJ5YyY,11176
|
|
7
7
|
npcsh/mcp_server.py,sha256=krc1rhiSU9gI76w99Ph3Mk7OyUVzfiEXKMvVid-7-Ik,5201
|
|
@@ -9,7 +9,7 @@ npcsh/npc.py,sha256=OjCDu03hAcXyqPbzMeBBr1cBnmQsB1FBhd7kLNsWALc,8330
|
|
|
9
9
|
npcsh/npcsh.py,sha256=3WLkZxHGzRekVGxHiJUA4VFyhC3A1jwX11aB0kgzE9s,8818
|
|
10
10
|
npcsh/plonk.py,sha256=IfOuiE5FBvk-EIsrWFjGy0SrNywDpn4a49E7seBtEmY,14246
|
|
11
11
|
npcsh/pti.py,sha256=UciiiH2Kz4ERQFy0-FX6BQEU2VxYQEUril-_Cvj76Y0,7853
|
|
12
|
-
npcsh/routes.py,sha256=
|
|
12
|
+
npcsh/routes.py,sha256=ulQMLrNwOAQqfbHC1Nijr8lkn9v4efviCdkgZe9T0iY,44106
|
|
13
13
|
npcsh/spool.py,sha256=oCive2dbn1o3UGUJnFMzfON6g4bOnauuzyyQBgul6RI,9839
|
|
14
14
|
npcsh/wander.py,sha256=8WOX8az8BXjizXGraEvu-ZVphi6PECKZzo9alTK4gmA,21730
|
|
15
15
|
npcsh/yap.py,sha256=QU-j9eg8zixXG6nyjoIYXsanJ4FjPnzhS4aJ241HLxw,18467
|
|
@@ -39,35 +39,35 @@ npcsh/npc_team/jinxs/image_generation.jinx,sha256=bQxZdEm0_eqvf_OJSHw3qarp8Klp3L
|
|
|
39
39
|
npcsh/npc_team/jinxs/internet_search.jinx,sha256=s8zVxwKFUAof_VzQrwB5dpAQdeJ6hUBkbIdRsT-I5mo,1267
|
|
40
40
|
npcsh/npc_team/jinxs/python_executor.jinx,sha256=vZz3pZaj1BnPFHMs_wpyjRc0b32JR4rLhZfulCMDF1s,398
|
|
41
41
|
npcsh/npc_team/jinxs/screen_cap.jinx,sha256=-4DG0EiEe61N_kMhVqqHKhLVGOLuZQT9ax6IZk20NjI,960
|
|
42
|
-
npcsh-1.0.
|
|
43
|
-
npcsh-1.0.
|
|
44
|
-
npcsh-1.0.
|
|
45
|
-
npcsh-1.0.
|
|
46
|
-
npcsh-1.0.
|
|
47
|
-
npcsh-1.0.
|
|
48
|
-
npcsh-1.0.
|
|
49
|
-
npcsh-1.0.
|
|
50
|
-
npcsh-1.0.
|
|
51
|
-
npcsh-1.0.
|
|
52
|
-
npcsh-1.0.
|
|
53
|
-
npcsh-1.0.
|
|
54
|
-
npcsh-1.0.
|
|
55
|
-
npcsh-1.0.
|
|
56
|
-
npcsh-1.0.
|
|
57
|
-
npcsh-1.0.
|
|
58
|
-
npcsh-1.0.
|
|
59
|
-
npcsh-1.0.
|
|
60
|
-
npcsh-1.0.
|
|
61
|
-
npcsh-1.0.
|
|
62
|
-
npcsh-1.0.
|
|
63
|
-
npcsh-1.0.
|
|
64
|
-
npcsh-1.0.
|
|
65
|
-
npcsh-1.0.
|
|
66
|
-
npcsh-1.0.
|
|
67
|
-
npcsh-1.0.
|
|
68
|
-
npcsh-1.0.
|
|
69
|
-
npcsh-1.0.
|
|
70
|
-
npcsh-1.0.
|
|
71
|
-
npcsh-1.0.
|
|
72
|
-
npcsh-1.0.
|
|
73
|
-
npcsh-1.0.
|
|
42
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/alicanto.npc,sha256=y9yDY3lq8ZwxQxpnrgle8w5IJwZqvxDepZFU4OaZCtg,148
|
|
43
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/alicanto.png,sha256=A7xeMbcoKGjlkELxJEVifCEZLVWbOKZarTN5ZFJG-FM,3519858
|
|
44
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/bash_executer.jinx,sha256=C_oQccOY8cKevMMPLRdznlMOccQvLgyzyOIThXvmrD8,692
|
|
45
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/corca.npc,sha256=HI3Bs6KlUBPMz7icF1TRE8-V3f3EdU_VxvQxEpru3L4,662
|
|
46
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/corca.png,sha256=0lF70hKu6tY-37YmIPVF2cuaPzvnQ4-UtQOzuAbKEf4,1666776
|
|
47
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/edit_file.jinx,sha256=4PaJs8g_cdeDpbQwQSBycU5RDA0rczEC_NpLfLjo74Y,3490
|
|
48
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/foreman.npc,sha256=WqB8jLfBToGmr8c1vip1KOnTHxfXlGXwDUGnZoDMQr0,327
|
|
49
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/frederic.npc,sha256=EE2dOUItp-VKuW3ZMSHffmIEO4evjPcU2W_C4P3WXbY,362
|
|
50
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/frederic4.png,sha256=ll8uoV0npnPp5HVJWv7h0xDSeuq4pqsk_gYGBHLS0VY,1590744
|
|
51
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/guac.png,sha256=MCE7eJuEJwLJEzc9FS7lL62Mm-38jQRHkxXogPfOTuw,211470
|
|
52
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/image_generation.jinx,sha256=bQxZdEm0_eqvf_OJSHw3qarp8Klp3LlBDv1_HY3COo4,1307
|
|
53
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/internet_search.jinx,sha256=s8zVxwKFUAof_VzQrwB5dpAQdeJ6hUBkbIdRsT-I5mo,1267
|
|
54
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/kadiefa.npc,sha256=Yl5a4wrfe4F2f6Ndw_ukzlVVX7NE9g_mG-3QqJSkg_o,381
|
|
55
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/kadiefa.png,sha256=3CAwL8crKIwJko6o75Z6OYYEEM9Rk--yGzCJg7zoszg,3062528
|
|
56
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/npcsh.ctx,sha256=-jKYaPm2YbZHAGgWAXhyPIwhiNe1H1ZRFg1Zc7tHSxk,1049
|
|
57
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/npcsh_sibiji.png,sha256=9fUqgYMsSHmaH-kBTBQ7N5UCS5-eLZF94Log0O3mtFg,4544
|
|
58
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonk.npc,sha256=u1m2a1D512XGQ2kC3eWDAY8Y2IvpkNU73DI_CPE65UE,90
|
|
59
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonk.png,sha256=IU5ey-Dl4HEKlwnf75RSWNSHpF8rVqGmdbsa0deL4rQ,2727773
|
|
60
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonkjr.npc,sha256=It-i-BEuG0XddKk0d85onk2aJr9Pe5pLnJzNaCWaQIM,87
|
|
61
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/plonkjr.png,sha256=MqLEGwsyECUeODZIti0HQQrMMVxA6XERpW01R06NbpY,2606710
|
|
62
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/python_executor.jinx,sha256=vZz3pZaj1BnPFHMs_wpyjRc0b32JR4rLhZfulCMDF1s,398
|
|
63
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/screen_cap.jinx,sha256=-4DG0EiEe61N_kMhVqqHKhLVGOLuZQT9ax6IZk20NjI,960
|
|
64
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/sibiji.npc,sha256=Hb4wXKIObKKgibwnio5hLec9yd_9bKDCA87Nm2zijFA,216
|
|
65
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/sibiji.png,sha256=1dlZb7J3E62FcVo9CVOzLb8nu1bIUV7cr97nsFocHCM,35615
|
|
66
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/spool.png,sha256=LWTLkwDxXBfLuSUCX32_lo5yAmLYGsA67Xpsz-7MmWU,2876725
|
|
67
|
+
npcsh-1.0.32.data/data/npcsh/npc_team/yap.png,sha256=_l7UbWnXJdsy4Mx-x5l9DT0R6ize3HTnkwQQnOFlI18,1548649
|
|
68
|
+
npcsh-1.0.32.dist-info/licenses/LICENSE,sha256=IKBvAECHP-aCiJtE4cHGCE5Yl0tozYz02PomGeWS3y4,1070
|
|
69
|
+
npcsh-1.0.32.dist-info/METADATA,sha256=FmgUyMW-g9qkavXUoHlMl9juRc-b1Jka6yyDzj8kN1s,25486
|
|
70
|
+
npcsh-1.0.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
71
|
+
npcsh-1.0.32.dist-info/entry_points.txt,sha256=S5yIuGm8ZXQ4siHYgN5gs0J7bxgobSEULXf8L5HaW5o,206
|
|
72
|
+
npcsh-1.0.32.dist-info/top_level.txt,sha256=kHSNgKMCkfjV95-DH0YSp1LLBi0HXdF3w57j7MQON3E,6
|
|
73
|
+
npcsh-1.0.32.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|