myagent-ai 1.2.0 → 1.2.2
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.
- package/config.py +2 -1
- package/core/version.py +1 -1
- package/docs//351/205/215/347/275/256/344/275/277/347/224/250/350/257/264/346/230/216.md +797 -0
- package/install/install.sh +1 -1
- package/main.py +5 -5
- package/package.json +3 -2
- package/start.sh +65 -8
- package/web/api_server.py +15 -11
- package/agents/__pycache__/main_agent.cpython-312.pyc +0 -0
- package/departments/__pycache__/__init__.cpython-312.pyc +0 -0
- package/departments/__pycache__/manager.cpython-312.pyc +0 -0
- package/executor/__pycache__/engine.cpython-312.pyc +0 -0
- package/organization/__pycache__/manager.cpython-312.pyc +0 -0
- package/skills/aminer-open-academic/scripts/__pycache__/aminer_client.cpython-312.pyc +0 -0
- package/skills/blog-writer/__pycache__/manage_examples.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
- package/skills/docx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/add_toc_placeholders.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/document.cpython-312.pyc +0 -0
- package/skills/docx/scripts/__pycache__/utilities.cpython-312.pyc +0 -0
- package/skills/market-research-reports/scripts/__pycache__/generate_market_visuals.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/add_zai_metadata.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_bounding_boxes.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_bounding_boxes_test.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/check_fillable_fields.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/convert_pdf_to_images.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/create_validation_image.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/extract_form_field_info.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/fill_fillable_fields.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/fill_pdf_form_with_annotations.cpython-312.pyc +0 -0
- package/skills/pdf/scripts/__pycache__/sanitize_code.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/__pycache__/pack.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/__pycache__/unpack.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/__pycache__/validate.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/base.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/docx.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/pptx.cpython-312.pyc +0 -0
- package/skills/pptx/ooxml/scripts/validation/__pycache__/redlining.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/inventory.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/inventory.cpython-313.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/rearrange.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/replace.cpython-312.pyc +0 -0
- package/skills/pptx/scripts/__pycache__/thumbnail.cpython-312.pyc +0 -0
- package/skills/qingyan-research/__pycache__/generate_html.cpython-312.pyc +0 -0
- package/skills/skill-creator/eval-viewer/__pycache__/generate_review.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/aggregate_benchmark.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/generate_report.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/improve_description.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/package_skill.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_eval.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/run_loop.cpython-312.pyc +0 -0
- package/skills/skill-creator/scripts/__pycache__/utils.cpython-312.pyc +0 -0
- package/skills/storyboard-manager/scripts/__pycache__/consistency_checker.cpython-312.pyc +0 -0
- package/skills/storyboard-manager/scripts/__pycache__/timeline_tracker.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/__init__.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/core.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/design_system.cpython-312.pyc +0 -0
- package/skills/ui-ux-pro-max/scripts/__pycache__/search.cpython-312.pyc +0 -0
- package/skills/xlsx/__pycache__/recalc.cpython-312.pyc +0 -0
- package/web/__pycache__/api_server.cpython-312.pyc +0 -0
package/install/install.sh
CHANGED
package/main.py
CHANGED
|
@@ -586,7 +586,7 @@ class MyAgentApp:
|
|
|
586
586
|
# 系统托盘
|
|
587
587
|
# ==============================================================================
|
|
588
588
|
|
|
589
|
-
def create_tray_icon(app: MyAgentApp, web_port: int =
|
|
589
|
+
def create_tray_icon(app: MyAgentApp, web_port: int = 8767):
|
|
590
590
|
"""
|
|
591
591
|
创建系统托盘图标。
|
|
592
592
|
|
|
@@ -838,7 +838,7 @@ def create_tray_icon(app: MyAgentApp, web_port: int = 8765):
|
|
|
838
838
|
return tray_icon
|
|
839
839
|
|
|
840
840
|
|
|
841
|
-
def run_with_tray(app: MyAgentApp, web_port: int =
|
|
841
|
+
def run_with_tray(app: MyAgentApp, web_port: int = 8767):
|
|
842
842
|
"""在系统托盘中运行 MyAgent"""
|
|
843
843
|
tray = create_tray_icon(app, web_port)
|
|
844
844
|
if tray is None:
|
|
@@ -979,9 +979,9 @@ def main():
|
|
|
979
979
|
|
|
980
980
|
parser = argparse.ArgumentParser(description="MyAgent - 本地桌面端执行型AI助手")
|
|
981
981
|
parser.add_argument("--tray", action="store_true", help="以系统托盘模式运行")
|
|
982
|
-
parser.add_argument("--web", type=int, nargs="?", const=
|
|
983
|
-
help="启动管理后台 Web UI (可选端口,默认
|
|
984
|
-
parser.add_argument("--port", type=int, default=
|
|
982
|
+
parser.add_argument("--web", type=int, nargs="?", const=8767, default=None,
|
|
983
|
+
help="启动管理后台 Web UI (可选端口,默认8767)")
|
|
984
|
+
parser.add_argument("--port", type=int, default=8767, help="Web UI 端口")
|
|
985
985
|
parser.add_argument("--autostart", action="store_true", help="设置开机自启")
|
|
986
986
|
parser.add_argument("--no-autostart", action="store_true", help="取消开机自启")
|
|
987
987
|
parser.add_argument("--config", type=str, help="指定配置文件路径")
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "myagent-ai",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.2",
|
|
4
4
|
"description": "本地桌面端执行型AI助手 - Open Interpreter 风格 | Local Desktop Execution-Oriented AI Assistant",
|
|
5
5
|
"main": "main.py",
|
|
6
6
|
"bin": {
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"start:web": "python main.py --web",
|
|
12
12
|
"start:tray": "python main.py --tray",
|
|
13
13
|
"start:server": "python main.py --server",
|
|
14
|
-
"install:deps": "pip install -r requirements.txt",
|
|
14
|
+
"install:deps": "pip install -r requirements.txt --break-system-packages 2>/dev/null || pip install -r requirements.txt",
|
|
15
15
|
"test": "python -m pytest tests/"
|
|
16
16
|
},
|
|
17
17
|
"keywords": [
|
|
@@ -50,6 +50,7 @@
|
|
|
50
50
|
"requirements.txt",
|
|
51
51
|
"start.sh",
|
|
52
52
|
"install/",
|
|
53
|
+
"docs/",
|
|
53
54
|
"core/",
|
|
54
55
|
"memory/",
|
|
55
56
|
"executor/",
|
package/start.sh
CHANGED
|
@@ -1,9 +1,42 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# MyAgent Unix/macOS 启动脚本
|
|
3
3
|
# 用法: ./start.sh [cli|web|tray|server|setup]
|
|
4
|
+
# 支持 npm 全局安装后从任意目录运行
|
|
4
5
|
|
|
5
6
|
set -euo pipefail
|
|
6
7
|
|
|
8
|
+
# ── 解析脚本真实路径(兼容 symlink) ─────────
|
|
9
|
+
# npm 全局安装时 start.sh 会被 symlink 到 /usr/local/bin/myagent-ai
|
|
10
|
+
# 需要解析 symlink 找到实际的包目录
|
|
11
|
+
resolve_script_dir() {
|
|
12
|
+
local src="${BASH_SOURCE[0]}"
|
|
13
|
+
# 循环解析所有 symlink
|
|
14
|
+
while [ -L "$src" ]; do
|
|
15
|
+
local dir="$(cd -P "$(dirname "$src")" && pwd)"
|
|
16
|
+
src="$(readlink "$src")"
|
|
17
|
+
# 如果是相对路径,拼接上目录
|
|
18
|
+
[[ "$src" != /* ]] && src="$dir/$src"
|
|
19
|
+
done
|
|
20
|
+
cd -P "$(dirname "$src")" && pwd
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
SCRIPT_DIR="$(resolve_script_dir)"
|
|
24
|
+
PROJECT_DIR="$SCRIPT_DIR"
|
|
25
|
+
|
|
26
|
+
# 如果 main.py 不在脚本目录(npm link 等场景),向上查找
|
|
27
|
+
if [ ! -f "$PROJECT_DIR/main.py" ]; then
|
|
28
|
+
# 尝试 npm global prefix 方式
|
|
29
|
+
NPM_PKG_DIR="$(npm root -g 2>/dev/null)/myagent-ai"
|
|
30
|
+
if [ -f "$NPM_PKG_DIR/main.py" ]; then
|
|
31
|
+
PROJECT_DIR="$NPM_PKG_DIR"
|
|
32
|
+
else
|
|
33
|
+
echo -e "\033[31m[✗]\033[0m 错误: 找不到 main.py"
|
|
34
|
+
echo " 脚本目录: $SCRIPT_DIR"
|
|
35
|
+
echo " 请确保从正确位置运行,或重新安装: npm install -g myagent-ai"
|
|
36
|
+
exit 1
|
|
37
|
+
fi
|
|
38
|
+
fi
|
|
39
|
+
|
|
7
40
|
BOLD='\033[1m'
|
|
8
41
|
ACCENT='\033[36m'
|
|
9
42
|
INFO='\033[90m'
|
|
@@ -38,6 +71,8 @@ if [ -z "$PY" ]; then
|
|
|
38
71
|
echo " macOS: brew install python@3.12"
|
|
39
72
|
echo " Linux: sudo apt install python3.12 python3-pip"
|
|
40
73
|
echo " Windows: https://www.python.org/downloads/"
|
|
74
|
+
echo ""
|
|
75
|
+
echo " 一键安装: curl -fsSL https://raw.githubusercontent.com/ctz168/myagent/main/install/install.sh | bash"
|
|
41
76
|
exit 1
|
|
42
77
|
fi
|
|
43
78
|
|
|
@@ -55,6 +90,29 @@ check_python_version() {
|
|
|
55
90
|
}
|
|
56
91
|
check_python_version
|
|
57
92
|
|
|
93
|
+
# ── pip install (处理 PEP668) ──────────────────────
|
|
94
|
+
pip_install() {
|
|
95
|
+
local req_file="$1"
|
|
96
|
+
$PY -m pip install -r "$req_file" --break-system-packages 2>/dev/null || \
|
|
97
|
+
$PY -m pip install -r "$req_file" 2>/dev/null || \
|
|
98
|
+
{
|
|
99
|
+
warn "pip install 失败 (可能受 PEP668 限制)"
|
|
100
|
+
info "尝试使用 venv 安装..."
|
|
101
|
+
local venv_dir="$HOME/.myagent/venv"
|
|
102
|
+
$PY -m venv "$venv_dir" 2>/dev/null
|
|
103
|
+
if [ -f "$venv_dir/bin/pip" ]; then
|
|
104
|
+
"$venv_dir/bin/pip" install -r "$req_file"
|
|
105
|
+
success "已安装到虚拟环境 $venv_dir"
|
|
106
|
+
info "启动时请使用: $venv_dir/bin/python main.py --web"
|
|
107
|
+
return 0
|
|
108
|
+
fi
|
|
109
|
+
err "所有安装方式均失败"
|
|
110
|
+
info "请手动安装: pip3 install -r $req_file --break-system-packages"
|
|
111
|
+
info "或使用虚拟环境: python3 -m venv venv && source venv/bin/activate && pip install -r $req_file"
|
|
112
|
+
return 1
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
58
116
|
# ── 检查核心依赖 ─────────────────────────────────
|
|
59
117
|
check_deps() {
|
|
60
118
|
local missing=0
|
|
@@ -82,18 +140,14 @@ check_deps() {
|
|
|
82
140
|
echo ""
|
|
83
141
|
warn "部分核心依赖缺失,正在自动安装..."
|
|
84
142
|
local req_file=""
|
|
85
|
-
#
|
|
86
|
-
if [ -f "$
|
|
87
|
-
req_file="$
|
|
143
|
+
# 优先查找项目目录 requirements.txt
|
|
144
|
+
if [ -f "$PROJECT_DIR/requirements.txt" ]; then
|
|
145
|
+
req_file="$PROJECT_DIR/requirements.txt"
|
|
88
146
|
elif [ -f "requirements.txt" ]; then
|
|
89
147
|
req_file="requirements.txt"
|
|
90
148
|
fi
|
|
91
149
|
if [ -n "$req_file" ]; then
|
|
92
|
-
|
|
93
|
-
pip3 install -r "$req_file" 2>/dev/null || \
|
|
94
|
-
pip install -r "$req_file" --break-system-packages 2>/dev/null || \
|
|
95
|
-
pip install -r "$req_file" 2>/dev/null || \
|
|
96
|
-
warn "自动安装失败,请手动运行: pip3 install -r requirements.txt"
|
|
150
|
+
pip_install "$req_file" || warn "依赖安装失败,请手动处理"
|
|
97
151
|
else
|
|
98
152
|
warn "未找到 requirements.txt,请手动安装依赖"
|
|
99
153
|
fi
|
|
@@ -134,6 +188,9 @@ if [ -z "$MODE" ]; then
|
|
|
134
188
|
esac
|
|
135
189
|
fi
|
|
136
190
|
|
|
191
|
+
# 切换到项目目录(确保 main.py 的相对路径正确)
|
|
192
|
+
cd "$PROJECT_DIR"
|
|
193
|
+
|
|
137
194
|
case "$MODE" in
|
|
138
195
|
cli)
|
|
139
196
|
check_deps
|
package/web/api_server.py
CHANGED
|
@@ -92,14 +92,14 @@ class ApiServer:
|
|
|
92
92
|
|
|
93
93
|
def _setup_routes(self):
|
|
94
94
|
r = self.app.router
|
|
95
|
+
# ── 系统状态 ──
|
|
95
96
|
r.add_get("/api/status", self.handle_status)
|
|
96
97
|
r.add_post("/api/shutdown", self.handle_shutdown)
|
|
98
|
+
# ── Agent 列表/创建 ──
|
|
97
99
|
r.add_get("/api/agents", self.handle_list_agents)
|
|
98
100
|
r.add_get("/api/agents/tree", self.handle_agents_tree)
|
|
99
101
|
r.add_post("/api/agents", self.handle_create_agent)
|
|
100
|
-
|
|
101
|
-
r.add_put("/api/agents/{name:[a-zA-Z0-9_/-]+}", self.handle_update_agent)
|
|
102
|
-
r.add_delete("/api/agents/{name:.+}", self.handle_delete_agent)
|
|
102
|
+
# ── Agent 子资源路由(必须在通用 {name} 路由之前注册) ──
|
|
103
103
|
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/soul", self.handle_get_soul)
|
|
104
104
|
r.add_put("/api/agents/{name:[a-zA-Z0-9_/-]+}/soul", self.handle_set_soul)
|
|
105
105
|
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/identity", self.handle_get_identity)
|
|
@@ -109,6 +109,15 @@ class ApiServer:
|
|
|
109
109
|
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/sessions", self.handle_agent_sessions)
|
|
110
110
|
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/children", self.handle_list_children)
|
|
111
111
|
r.add_post("/api/agents/{name:[a-zA-Z0-9_/-]+}/children", self.handle_create_child)
|
|
112
|
+
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/bindings", self.handle_agent_bindings)
|
|
113
|
+
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge", self.handle_list_agent_knowledge)
|
|
114
|
+
r.add_post("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge/upload", self.handle_upload_agent_knowledge)
|
|
115
|
+
r.add_delete("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge", self.handle_delete_agent_knowledge)
|
|
116
|
+
# ── Agent 通用 CRUD(放在子资源之后,name 不含斜杠避免吞掉子路由) ──
|
|
117
|
+
r.add_get("/api/agents/{name:[a-zA-Z0-9_\\-]+}", self.handle_get_agent)
|
|
118
|
+
r.add_put("/api/agents/{name:[a-zA-Z0-9_\\-]+}", self.handle_update_agent)
|
|
119
|
+
r.add_delete("/api/agents/{name:.+}", self.handle_delete_agent)
|
|
120
|
+
# ── 平台管理 ──
|
|
112
121
|
r.add_get("/api/platforms", self.handle_list_platforms)
|
|
113
122
|
r.add_post("/api/platforms", self.handle_add_platform)
|
|
114
123
|
r.add_get("/api/platforms/{name}", self.handle_get_platform)
|
|
@@ -122,8 +131,7 @@ class ApiServer:
|
|
|
122
131
|
r.add_post("/api/models", self.handle_add_model)
|
|
123
132
|
r.add_put("/api/models/{model_id}", self.handle_update_model)
|
|
124
133
|
r.add_delete("/api/models/{model_id}", self.handle_delete_model)
|
|
125
|
-
# ──
|
|
126
|
-
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/bindings", self.handle_agent_bindings)
|
|
134
|
+
# ── 会话管理 ──
|
|
127
135
|
r.add_get("/api/sessions", self.handle_list_sessions)
|
|
128
136
|
r.add_get("/api/sessions/{sid}/messages", self.handle_get_messages)
|
|
129
137
|
r.add_delete("/api/sessions/{sid}", self.handle_clear_session)
|
|
@@ -165,10 +173,6 @@ class ApiServer:
|
|
|
165
173
|
r.add_get("/api/organization/knowledge/file", self.handle_read_org_knowledge)
|
|
166
174
|
r.add_post("/api/organization/knowledge/upload", self.handle_upload_org_knowledge)
|
|
167
175
|
r.add_delete("/api/organization/knowledge", self.handle_delete_org_knowledge)
|
|
168
|
-
# ── Agent 知识库 ──
|
|
169
|
-
r.add_get("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge", self.handle_list_agent_knowledge)
|
|
170
|
-
r.add_post("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge/upload", self.handle_upload_agent_knowledge)
|
|
171
|
-
r.add_delete("/api/agents/{name:[a-zA-Z0-9_/-]+}/knowledge", self.handle_delete_agent_knowledge)
|
|
172
176
|
# ── 知识库 RAG 搜索 ──
|
|
173
177
|
r.add_post("/api/knowledge/search", self.handle_knowledge_search)
|
|
174
178
|
# ── 配置管理 (热重载/导入/导出) ──
|
|
@@ -1044,7 +1048,7 @@ class ApiServer:
|
|
|
1044
1048
|
return web.json_response({"ok": True})
|
|
1045
1049
|
|
|
1046
1050
|
async def handle_get_soul(self, request):
|
|
1047
|
-
path = request.match_info
|
|
1051
|
+
path = request.match_info.get("name", "")
|
|
1048
1052
|
p = self._agent_dir(path) / "soul.md"
|
|
1049
1053
|
if not p.parent.exists() or not (p.parent / "config.json").exists():
|
|
1050
1054
|
return web.json_response({"error": "not found"}, status=404)
|
|
@@ -2804,7 +2808,7 @@ class ApiServer:
|
|
|
2804
2808
|
ok = mgr.clear_messages(gid)
|
|
2805
2809
|
return web.json_response({"ok": ok})
|
|
2806
2810
|
|
|
2807
|
-
async def start(self, port: int =
|
|
2811
|
+
async def start(self, port: int = 8767):
|
|
2808
2812
|
# 加载禁用技能列表
|
|
2809
2813
|
self._load_disabled_skills()
|
|
2810
2814
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/skills/market-research-reports/scripts/__pycache__/generate_market_visuals.cpython-312.pyc
DELETED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|