Files
meeting-room/frontend/node_modules/.cache/default-development/2.pack

1137 lines
66 KiB
Plaintext
Raw Normal View History

wpc<00><10>webpack/lib/cache/PackFileCacheStrategy<67>PackContentItems <10><01>SourceMapDevToolPlugin|main.896fc3ce6f8fb82fd3af.hot-update.js<10><10><02>assets<74>assetsInfo<10><03>main.896fc3ce6f8fb82fd3af.hot-update.js<6A>main.896fc3ce6f8fb82fd3af.hot-update.js.map<12>webpack/lib/util/registerExternalSerializer<65>webpack-sources/ConcatSource<10>webpack/lib/util/registerExternalSerializer<65>webpack-sources/RawSourceۧ"use strict";
globalThis["webpackHotUpdatemeeting_room_frontend"]("main",{
/***/ "./src/App.js"
/*!********************!*\
!*** ./src/App.js ***!
\********************/
(module, __webpack_exports__, __webpack_require__) {
__webpack_require__.r(__webpack_exports__);
/* harmony export */ __webpack_require__.d(__webpack_exports__, {
/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__)
/* harmony export */ });
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "./node_modules/react/index.js");
/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router-dom/dist/index.js");
/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! react-router-dom */ "./node_modules/react-router/dist/index.js");
/* harmony import */ var axios__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! axios */ "./node_modules/axios/lib/axios.js");
/* harmony import */ var react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! react/jsx-dev-runtime */ "./node_modules/react/jsx-dev-runtime.js");
/* provided dependency */ var __react_refresh_utils__ = __webpack_require__(/*! ./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js */ "./node_modules/@pmmmwh/react-refresh-webpack-plugin/lib/runtime/RefreshUtils.js");
__webpack_require__.$Refresh$.runtime = __webpack_require__(/*! ./node_modules/react-refresh/runtime.js */ "./node_modules/react-refresh/runtime.js");
var _jsxFileName = "/home/node/.openclaw/workspace/flying-hero/projects/meeting-room/frontend/src/App.js",
_s = __webpack_require__.$Refresh$.signature(),
_s2 = __webpack_require__.$Refresh$.signature(),
_s3 = __webpack_require__.$Refresh$.signature();
const API_BASE = 'http://localhost:8000/api/v1';
axios__WEBPACK_IMPORTED_MODULE_3__["default"].interceptors.request.use(config => {
const token = localStorage.getItem('token');
if (token) config.headers.Authorization = `Bearer ${token}`;
return config;
});
// ============ 登录页面 ============
function LoginPage() {
_s();
const [username, setUsername] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('test');
const [password, setPassword] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('test123');
const [loginMode, setLoginMode] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('human_only');
const [agents, setAgents] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
const [selectedAgent, setSelectedAgent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
// 扫描本机龙虾
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
scanAgents();
}, []);
const scanAgents = async () => {
try {
var _res$data$agents;
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/user/scan-local-agents/`);
setAgents(res.data.agents || []);
if (((_res$data$agents = res.data.agents) === null || _res$data$agents === void 0 ? void 0 : _res$data$agents.length) > 0) {
setSelectedAgent(res.data.agents[0].agent_id);
}
} catch (error) {
console.error('扫描龙虾失败:', error);
}
};
const handleLogin = async e => {
e.preventDefault();
try {
const payload = {
username,
password,
login_mode: loginMode
};
if (loginMode !== 'human_only' && selectedAgent) {
payload.selected_agent_id = selectedAgent;
}
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/auth/login/`, payload);
localStorage.setItem('token', res.data.token);
localStorage.setItem('user', JSON.stringify(res.data.user));
localStorage.setItem('sessions', JSON.stringify(res.data.sessions));
localStorage.setItem('login_mode', res.data.login_mode);
navigate('/meetings');
} catch (error) {
var _error$response, _error$response$data, _error$response2, _error$response2$data;
alert('登录失败:' + (((_error$response = error.response) === null || _error$response === void 0 ? void 0 : (_error$response$data = _error$response.data) === null || _error$response$data === void 0 ? void 0 : _error$response$data.detail) || ((_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : (_error$response2$data = _error$response2.data) === null || _error$response2$data === void 0 ? void 0 : _error$response2$data.error) || error.message));
}
};
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.center,
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.card,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h1", {
style: styles.title,
children: "\uD83C\uDFDB\uFE0F \u9F99\u867E\u8BAE\u4E8B\u5385"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 66,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("form", {
onSubmit: handleLogin,
style: {
...styles.form,
flexDirection: 'column'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "text",
placeholder: "\u7528\u6237\u540D",
value: username,
onChange: e => setUsername(e.target.value),
style: styles.input,
required: true
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 68,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "password",
placeholder: "\u5BC6\u7801",
value: password,
onChange: e => setPassword(e.target.value),
style: styles.input,
required: true
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 69,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: {
margin: '15px 0'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
style: {
display: 'block',
marginBottom: '10px',
fontWeight: '600'
},
children: "\u767B\u5F55\u8EAB\u4EFD\uFF1A"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 73,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
style: {
display: 'block',
marginBottom: '8px',
cursor: 'pointer'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "radio",
name: "loginMode",
value: "human_only",
checked: loginMode === 'human_only',
onChange: e => setLoginMode(e.target.value)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 75,
columnNumber: 15
}, this), ' ', "\uD83D\uDC64 \u4EBA\u7C7B\u8EAB\u4EFD\uFF08\u7EAF\u4EBA\u7C7B\u53C2\u4F1A\uFF09"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 74,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
style: {
display: 'block',
marginBottom: '8px',
cursor: 'pointer'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "radio",
name: "loginMode",
value: "agent_only",
checked: loginMode === 'agent_only',
onChange: e => setLoginMode(e.target.value)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 85,
columnNumber: 15
}, this), ' ', "\uD83E\uDD9E \u9F99\u867E\u8EAB\u4EFD\uFF08Agent \u53C2\u4F1A\uFF09"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 84,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
style: {
display: 'block',
marginBottom: '8px',
cursor: 'pointer'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "radio",
name: "loginMode",
value: "both",
checked: loginMode === 'both',
onChange: e => setLoginMode(e.target.value)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 95,
columnNumber: 15
}, this), ' ', "\uD83D\uDC64+ \u53CC\u91CD\u8EAB\u4EFD\uFF08\u4EBA\u7C7B + \u9F99\u867E\uFF09"]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 94,
columnNumber: 13
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 72,
columnNumber: 11
}, this), loginMode !== 'human_only' && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: {
margin: '15px 0'
},
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("label", {
style: {
display: 'block',
marginBottom: '8px',
fontWeight: '600'
},
children: "\u9009\u62E9\u9F99\u867E\uFF1A"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 109,
columnNumber: 15
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("select", {
value: selectedAgent,
onChange: e => setSelectedAgent(e.target.value),
style: styles.input,
children: agents.length === 0 ? /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("option", {
value: "",
children: "\u672A\u627E\u5230\u9F99\u867E"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 116,
columnNumber: 19
}, this) : agents.map(a => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("option", {
value: a.agent_id,
children: [a.agent_id, " (", a.instance_name, ")"]
}, a.agent_id, true, {
fileName: _jsxFileName,
lineNumber: 119,
columnNumber: 21
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 110,
columnNumber: 15
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 108,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
type: "submit",
style: styles.btn,
children: "\u767B\u5F55"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 128,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 67,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 65,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 64,
columnNumber: 5
}, this);
}
// ============ 会议列表 ============
_s(LoginPage, "Y04LEWGXtNdY4iG+V3odPj4+f2U=", false, function () {
return [react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useNavigate];
});
_c = LoginPage;
function MeetingList() {
_s2();
const [meetings, setMeetings] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
const [topic, setTopic] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
const [autoAddAgents, setAutoAddAgents] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(true);
const navigate = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useNavigate)();
const token = localStorage.getItem('token');
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
if (!token) {
navigate('/login');
return;
}
fetchMeetings();
}, []);
const fetchMeetings = async () => {
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/meetings/`);
setMeetings(res.data);
} catch (error) {
console.error(error);
}
};
const createMeeting = async e => {
e.preventDefault();
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/meetings/`, {
topic,
auto_add_virtual_agents: autoAddAgents
});
navigate(`/meeting/${res.data.id}`);
} catch (error) {
var _error$response3, _error$response3$data;
alert('创建失败:' + (((_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : (_error$response3$data = _error$response3.data) === null || _error$response3$data === void 0 ? void 0 : _error$response3$data.detail) || error.message));
}
};
const logout = () => {
localStorage.removeItem('token');
navigate('/login');
};
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.container,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.header,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h1", {
children: "\uD83D\uDCCB \u6211\u7684\u4F1A\u8BAE\u5BA4"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 173,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
onClick: logout,
style: styles.smallBtn,
children: "\u9000\u51FA"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 174,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 172,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.card,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h2", {
children: "\u521B\u5EFA\u4F1A\u8BAE"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 177,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("form", {
onSubmit: createMeeting,
style: styles.form,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "text",
placeholder: "\u4F1A\u8BAE\u4E3B\u9898",
value: topic,
onChange: e => setTopic(e.target.value),
style: styles.input,
required: true
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 179,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
type: "submit",
style: styles.btn,
children: "\u521B\u5EFA"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 180,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 178,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 176,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.list,
children: meetings.map(m => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.item,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h3", {
children: m.topic
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 187,
columnNumber: 15
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("p", {
children: ["\u72B6\u6001\uFF1A", m.status, " | \u9080\u8BF7\u7801\uFF1A", m.invite_code]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 188,
columnNumber: 15
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 186,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
onClick: () => navigate(`/meeting/${m.id}`),
style: styles.smallBtn,
children: "\u8FDB\u5165"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 190,
columnNumber: 13
}, this)]
}, m.id, true, {
fileName: _jsxFileName,
lineNumber: 185,
columnNumber: 11
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 183,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 171,
columnNumber: 5
}, this);
}
// ============ 会议室 ============
_s2(MeetingList, "uNteAZxXgR2pMaYhX5ze9khr1nw=", false, function () {
return [react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useNavigate];
});
_c2 = MeetingList;
function MeetingRoom() {
_s3();
const {
id
} = (0,react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useParams)();
const [messages, setMessages] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
const [content, setContent] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)('');
const [participants, setParticipants] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)([]);
const [meeting, setMeeting] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
const [hoveredSeat, setHoveredSeat] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);
const token = localStorage.getItem('token');
(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(() => {
if (!token) return;
fetchMeeting();
fetchParticipants();
fetchMessages();
const interval = setInterval(fetchMessages, 1000);
return () => clearInterval(interval);
}, [id]);
const fetchMeeting = async () => {
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/meetings/${id}/`);
setMeeting(res.data);
} catch (error) {
console.error(error);
}
};
const fetchParticipants = async () => {
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/meetings/${id}/participants/`);
setParticipants(res.data);
} catch (error) {
console.error(error);
}
};
const fetchMessages = async () => {
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/meetings/${id}/messages/?last_id=0`);
setMessages(res.data.messages || []);
} catch (error) {
console.error(error);
}
};
const sendMessage = async e => {
e.preventDefault();
if (!content.trim()) return;
try {
await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/meetings/${id}/send_message/`, {
content
});
setContent('');
fetchMessages();
} catch (error) {
var _error$response4, _error$response4$data;
alert('发送失败:' + (((_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : (_error$response4$data = _error$response4.data) === null || _error$response4$data === void 0 ? void 0 : _error$response4$data.detail) || error.message));
}
};
const mentionAgent = async (targetAgentId, agentName) => {
const target = targetAgentId || prompt('@哪个 Agent输入 agent_id:');
if (!target || !content.trim()) return;
const name = agentName || target;
try {
await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/meetings/${id}/mention_agent/`, {
target_agent_id: target,
content,
sender_name: localStorage.getItem('user') ? JSON.parse(localStorage.getItem('user')).username : 'User'
});
setContent('');
fetchMessages();
alert(`✅ 已 @${name}`);
} catch (error) {
var _error$response5, _error$response5$data;
alert('发送失败:' + (((_error$response5 = error.response) === null || _error$response5 === void 0 ? void 0 : (_error$response5$data = _error$response5.data) === null || _error$response5$data === void 0 ? void 0 : _error$response5$data.error) || error.message));
}
};
const startMeeting = async () => {
try {
await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/meetings/${id}/start/`);
fetchMeeting();
alert('✅ 会议已开始');
} catch (error) {
var _error$response6, _error$response6$data;
alert('开始失败:' + (((_error$response6 = error.response) === null || _error$response6 === void 0 ? void 0 : (_error$response6$data = _error$response6.data) === null || _error$response6$data === void 0 ? void 0 : _error$response6$data.error) || error.message));
}
};
const endMeeting = async () => {
if (!confirm('确定结束会议?')) return;
try {
await axios__WEBPACK_IMPORTED_MODULE_3__["default"].post(`${API_BASE}/meetings/${id}/end/`);
fetchMeeting();
alert('✅ 会议已结束');
} catch (error) {
var _error$response7, _error$response7$data;
alert('结束失败:' + (((_error$response7 = error.response) === null || _error$response7 === void 0 ? void 0 : (_error$response7$data = _error$response7.data) === null || _error$response7$data === void 0 ? void 0 : _error$response7$data.error) || error.message));
}
};
const generateMinutes = async () => {
try {
const res = await axios__WEBPACK_IMPORTED_MODULE_3__["default"].get(`${API_BASE}/meetings/${id}/minutes/?output=markdown`);
const blob = new Blob([res.data.markdown], {
type: 'text/markdown'
});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = `meeting-${id.slice(0, 8)}.md`;
a.click();
URL.revokeObjectURL(url);
alert('✅ 纪要已导出');
} catch (error) {
alert('导出失败:' + error.message);
}
};
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.container,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.header,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_1__.Link, {
to: "/meetings",
style: styles.link,
children: "\u2190 \u8FD4\u56DE"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 307,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h1", {
children: (meeting === null || meeting === void 0 ? void 0 : meeting.topic) || '会议室'
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 308,
columnNumber: 9
}, this), meeting && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("span", {
style: styles.badge,
children: meeting.status
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 309,
columnNumber: 21
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 306,
columnNumber: 7
}, this), meeting && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.infoCard,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("p", {
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("strong", {
children: "ID:"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 314,
columnNumber: 14
}, this), " ", meeting.id]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 314,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("p", {
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("strong", {
children: "\u9080\u8BF7\u7801:"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 315,
columnNumber: 14
}, this), " ", meeting.invite_code]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 315,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.btnGroup,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
onClick: startMeeting,
style: styles.btnGreen,
children: "\u25B6\uFE0F \u5F00\u59CB"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 317,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
onClick: endMeeting,
style: styles.btnRed,
children: "\u23F9\uFE0F \u7ED3\u675F"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 318,
columnNumber: 13
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
onClick: generateMinutes,
style: styles.btnBlue,
children: "\uD83D\uDCCB \u7EAA\u8981"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 319,
columnNumber: 13
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 316,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 313,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.card,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h2", {
children: ["\uD83E\uDE91 \u5EA7\u4F4D\u56FE ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("span", {
style: styles.badge,
children: participants.length
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 326,
columnNumber: 20
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 326,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.seats,
children: participants.map(p => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: {
...styles.seat,
...(hoveredSeat === p.id ? styles.seatHover : {})
},
onClick: () => {
if (p.agent_id) {
var _document$querySelect;
setContent(`@${p.nickname} `);
(_document$querySelect = document.querySelector('input[placeholder="输入消息..."]')) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.focus();
}
},
onMouseEnter: () => setHoveredSeat(p.id),
onMouseLeave: () => setHoveredSeat(null),
title: p.agent_id ? '点击 @ 此人' : '',
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.seatEmoji,
children: p.agent_emoji || '👤'
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 342,
columnNumber: 15
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.seatName,
children: p.nickname
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 343,
columnNumber: 15
}, this), p.is_host && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.hostBadge,
children: "\uD83D\uDC51"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 344,
columnNumber: 29
}, this)]
}, p.id, true, {
fileName: _jsxFileName,
lineNumber: 329,
columnNumber: 13
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 327,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 325,
columnNumber: 7
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.card,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("h2", {
children: ["\uD83D\uDCAC \u804A\u5929 ", /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("span", {
style: styles.badge,
children: messages.length
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 352,
columnNumber: 19
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 352,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.messages,
children: messages.map(msg => /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.msg,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.msgHeader,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("strong", {
children: [msg.sender_emoji, " ", msg.sender_name]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 357,
columnNumber: 17
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("span", {
style: styles.msgTime,
children: new Date(msg.created_at).toLocaleTimeString()
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 358,
columnNumber: 17
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 356,
columnNumber: 15
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("p", {
style: styles.msgContent,
children: msg.content
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 360,
columnNumber: 15
}, this), msg.in_reply_to && /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("div", {
style: styles.replyTag,
children: ["\u21A9\uFE0F \u56DE\u590D #", msg.in_reply_to]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 361,
columnNumber: 35
}, this)]
}, msg.id, true, {
fileName: _jsxFileName,
lineNumber: 355,
columnNumber: 13
}, this))
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 353,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("form", {
onSubmit: sendMessage,
style: styles.form,
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("input", {
type: "text",
placeholder: "\u8F93\u5165\u6D88\u606F...",
value: content,
onChange: e => setContent(e.target.value),
style: styles.input
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 366,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
type: "submit",
style: styles.btn,
children: "\u53D1\u9001"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 367,
columnNumber: 11
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)("button", {
type: "button",
onClick: mentionAgent,
style: styles.btnPink,
children: "\uD83D\uDCCD @Agent"
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 368,
columnNumber: 11
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 365,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 351,
columnNumber: 7
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 305,
columnNumber: 5
}, this);
}
// ============ App ============
_s3(MeetingRoom, "fh+UC+M8I83D9S4VTUsmF3cRwwg=", false, function () {
return [react_router_dom__WEBPACK_IMPORTED_MODULE_2__.useParams];
});
_c3 = MeetingRoom;
function App() {
return /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_1__.BrowserRouter, {
children: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Routes, {
children: [/*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Route, {
path: "/login",
element: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(LoginPage, {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 380,
columnNumber: 39
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 380,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Route, {
path: "/meetings",
element: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(MeetingList, {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 381,
columnNumber: 42
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 381,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Route, {
path: "/meeting/:id",
element: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(MeetingRoom, {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 382,
columnNumber: 45
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 382,
columnNumber: 9
}, this), /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(react_router_dom__WEBPACK_IMPORTED_MODULE_2__.Route, {
path: "/",
element: /*#__PURE__*/(0,react_jsx_dev_runtime__WEBPACK_IMPORTED_MODULE_4__.jsxDEV)(LoginPage, {}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 383,
columnNumber: 34
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 383,
columnNumber: 9
}, this)]
}, void 0, true, {
fileName: _jsxFileName,
lineNumber: 379,
columnNumber: 7
}, this)
}, void 0, false, {
fileName: _jsxFileName,
lineNumber: 378,
columnNumber: 5
}, this);
}
// ============ 样式 ============
_c4 = App;
const styles = {
center: {
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
minHeight: '100vh',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)'
},
container: {
maxWidth: '900px',
margin: '0 auto',
padding: '20px',
fontFamily: '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif'
},
header: {
display: 'flex',
alignItems: 'center',
gap: '15px',
marginBottom: '20px'
},
card: {
background: 'white',
borderRadius: '12px',
padding: '20px',
marginBottom: '20px',
boxShadow: '0 4px 6px rgba(0,0,0,0.1)'
},
infoCard: {
background: '#e7f3ff',
border: '1px solid #2196f3',
borderRadius: '12px',
padding: '15px',
marginBottom: '20px'
},
title: {
margin: '0 0 20px',
color: '#1a365d',
textAlign: 'center'
},
form: {
display: 'flex',
gap: '10px'
},
input: {
flex: 1,
padding: '12px',
border: '2px solid #e2e8f0',
borderRadius: '8px',
fontSize: '14px'
},
btn: {
padding: '12px 20px',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
color: 'white',
border: 'none',
borderRadius: '8px',
cursor: 'pointer',
fontWeight: '600'
},
btnGreen: {
padding: '8px 16px',
background: 'linear-gradient(135deg, #11998e 0%, #38ef7d 100%)',
color: 'white',
border: 'none',
borderRadius: '6px',
cursor: 'pointer',
marginRight: '8px'
},
btnRed: {
padding: '8px 16px',
background: 'linear-gradient(135deg, #eb3349 0%, #f45c43 100%)',
color: 'white',
border: 'none',
borderRadius: '6px',
cursor: 'pointer',
marginRight: '8px'
},
btnBlue: {
padding: '8px 16px',
background: 'linear-gradient(135deg, #4facfe 0%, #00f2fe 100%)',
color: 'white',
border: 'none',
borderRadius: '6px',
cursor: 'pointer'
},
btnPink: {
padding: '8px 16px',
background: 'linear-gradient(135deg, #f093fb 0%, #f5576c 100%)',
color: 'white',
border: 'none',
borderRadius: '6px',
cursor: 'pointer'
},
smallBtn: {
padding: '8px 16px',
background: '#edf2f7',
border: 'none',
borderRadius: '6px',
cursor: 'pointer'
},
list: {
display: 'flex',
flexDirection: 'column',
gap: '15px'
},
item: {
background: 'white',
borderRadius: '12px',
padding: '20px',
display: 'flex',
justifyContent: 'space-between',
alignItems: 'center',
boxShadow: '0 4px 6px rgba(0,0,0,0.1)'
},
link: {
color: '#4299e1',
textDecoration: 'none',
fontSize: '16px'
},
badge: {
background: '#667eea',
color: 'white',
padding: '4px 10px',
borderRadius: '20px',
fontSize: '12px',
fontWeight: '600'
},
btnGroup: {
display: 'flex',
marginTop: '10px'
},
seats: {
display: 'flex',
flexWrap: 'wrap',
gap: '15px',
justifyContent: 'center'
},
seat: {
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
color: 'white',
padding: '15px',
borderRadius: '50%',
width: '90px',
height: '90px',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
justifyContent: 'center',
textAlign: 'center',
cursor: 'pointer',
transition: 'transform 0.2s',
':hover': {
transform: 'scale(1.1)'
}
},
seatHover: {
transform: 'scale(1.05)'
},
seatEmoji: {
fontSize: '28px',
marginBottom: '5px'
},
seatName: {
fontSize: '12px',
fontWeight: '600'
},
hostBadge: {
fontSize: '10px',
opacity: '0.8'
},
messages: {
maxHeight: '400px',
overflowY: 'auto',
marginBottom: '15px'
},
msg: {
padding: '12px',
background: '#f7fafc',
borderRadius: '8px',
marginBottom: '10px'
},
msgHeader: {
display: 'flex',
justifyContent: 'space-between',
marginBottom: '5px'
},
msgContent: {
margin: '5px 0',
color: '#4a5568'
},
msgTime: {
fontSize: '12px',
color: '#a0aec0'
},
replyTag: {
fontSize: '11px',
color: '#a0aec0',
marginTop: '5px'
}
};
/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (App);
var _c, _c2, _c3, _c4;
__webpack_require__.$Refresh$.register(_c, "LoginPage");
__webpack_require__.$Refresh$.register(_c2, "MeetingList");
__webpack_require__.$Refresh$.register(_c3, "MeetingRoom");
__webpack_require__.$Refresh$.register(_c4, "App");
const $ReactRefreshModuleId$ = __webpack_require__.$Refresh$.moduleId;
const $ReactRefreshCurrentExports$ = __react_refresh_utils__.getModuleExports(
$ReactRefreshModuleId$
);
function $ReactRefreshModuleRuntime$(exports) {
if (true) {
let errorOverlay;
if (true) {
errorOverlay = false;
}
let testMode;
if (typeof __react_refresh_test__ !== 'undefined') {
testMode = __react_refresh_test__;
}
return __react_refresh_utils__.executeRuntime(
exports,
$ReactRefreshModuleId$,
module.hot,
errorOverlay,
testMode
);
}
}
if (typeof Promise !== 'undefined' && $ReactRefreshCurrentExports$ instanceof Promise) {
$ReactRefreshCurrentExports$.then($ReactRefreshModuleRuntime$);
} else {
$ReactRefreshModuleRuntime$($ReactRefreshCurrentExports$);
}
/***/ }
},
/******/ function(__webpack_require__) { // webpackRuntimeModules
/******/ /* webpack/runtime/getFullHash */
/******/ (() => {
/******/ __webpack_require__.h = () => ("75e4f19768e9a8bab8a3")
/******/ })();
/******/
/******/ }
); A
//# sourceMappingURL=main.896fc3ce6f8fb82fd3af.hot-update.js.map \{"version":3,"file":"main.896fc3ce6f8fb82fd3af.hot-update.js","mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AAAA;AAEA;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AACA;AACA;AAAA;AAGA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA;AAAA;AAEA;AAFA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AAAA;AAzHA;AAMA;AAAA;AAoHA;AAAA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AAAA;AAAA;AAAA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AALA;AAAA;AAAA;AAAA;AAOA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAGA;;AAEA;AAAA;AA9DA;AAIA;AAAA;AA2DA;AAAA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AAEA;AACA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAKA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAIA;AAAA;AAAA;AAAA;AACA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAdA;AAAA;AAAA;AAAA;AAgBA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAIA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAEA;AAAA;AACA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AANA;AAAA;AAAA;AAAA;AAQA;AAAA;AAAA;AAAA;AAAA;AAEA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AAAA;AAAA;AAAA;A