@joohw/boss-cli 0.4.0 → 0.5.0
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/README.md +170 -172
- package/dist/browser/agent_operating_indicator.js +51 -51
- package/dist/browser/human_delay.d.ts +2 -0
- package/dist/browser/human_delay.d.ts.map +1 -1
- package/dist/browser/human_delay.js +4 -0
- package/dist/browser/human_delay.js.map +1 -1
- package/dist/cli/cliRouter.d.ts.map +1 -1
- package/dist/cli/cliRouter.js +56 -43
- package/dist/cli/cliRouter.js.map +1 -1
- package/dist/cli/version.d.ts +22 -0
- package/dist/cli/version.d.ts.map +1 -1
- package/dist/cli/version.js +127 -6
- package/dist/cli/version.js.map +1 -1
- package/dist/common/auth.js +49 -49
- package/dist/common/boss_paywall_popup.js +87 -87
- package/dist/common/boss_session_lock.d.ts.map +1 -1
- package/dist/common/boss_session_lock.js +7 -1
- package/dist/common/boss_session_lock.js.map +1 -1
- package/dist/common/boss_session_page.d.ts +2 -2
- package/dist/common/boss_session_page.d.ts.map +1 -1
- package/dist/common/boss_session_page.js +18 -29
- package/dist/common/boss_session_page.js.map +1 -1
- package/dist/common/boss_sidebar_nav.js +25 -26
- package/dist/common/boss_sidebar_nav.js.map +1 -1
- package/dist/common/c_resume_capture.d.ts +1 -0
- package/dist/common/c_resume_capture.d.ts.map +1 -1
- package/dist/common/c_resume_capture.js +69 -32
- package/dist/common/c_resume_capture.js.map +1 -1
- package/dist/ocr/resume_ocr.d.ts.map +1 -1
- package/dist/ocr/resume_ocr.js +4 -1
- package/dist/ocr/resume_ocr.js.map +1 -1
- package/dist/toolset/action.d.ts.map +1 -1
- package/dist/toolset/action.js +11 -7
- package/dist/toolset/action.js.map +1 -1
- package/dist/toolset/chat.d.ts.map +1 -1
- package/dist/toolset/chat.js +246 -230
- package/dist/toolset/chat.js.map +1 -1
- package/dist/toolset/deep-search.d.ts.map +1 -1
- package/dist/toolset/deep-search.js +289 -265
- package/dist/toolset/deep-search.js.map +1 -1
- package/dist/toolset/greet.d.ts.map +1 -1
- package/dist/toolset/greet.js +1 -6
- package/dist/toolset/greet.js.map +1 -1
- package/dist/toolset/jd.d.ts.map +1 -1
- package/dist/toolset/jd.js +132 -136
- package/dist/toolset/jd.js.map +1 -1
- package/dist/toolset/list.d.ts.map +1 -1
- package/dist/toolset/list.js +52 -45
- package/dist/toolset/list.js.map +1 -1
- package/dist/toolset/preview.d.ts.map +1 -1
- package/dist/toolset/preview.js +6 -8
- package/dist/toolset/preview.js.map +1 -1
- package/dist/toolset/recommend.d.ts.map +1 -1
- package/dist/toolset/recommend.js +222 -196
- package/dist/toolset/recommend.js.map +1 -1
- package/dist/toolset/send.d.ts.map +1 -1
- package/dist/toolset/send.js +6 -9
- package/dist/toolset/send.js.map +1 -1
- package/package.json +65 -65
- package/dist/browser/auth.d.ts +0 -33
- package/dist/browser/auth.d.ts.map +0 -1
- package/dist/browser/auth.js +0 -137
- package/dist/browser/auth.js.map +0 -1
- package/dist/browser/c_resume_capture.d.ts +0 -11
- package/dist/browser/c_resume_capture.d.ts.map +0 -1
- package/dist/browser/c_resume_capture.js +0 -76
- package/dist/browser/c_resume_capture.js.map +0 -1
- package/dist/browser/chat.d.ts +0 -7
- package/dist/browser/chat.d.ts.map +0 -1
- package/dist/browser/chat.js +0 -155
- package/dist/browser/chat.js.map +0 -1
- package/dist/browser/withLoggedInPage.d.ts +0 -7
- package/dist/browser/withLoggedInPage.d.ts.map +0 -1
- package/dist/browser/withLoggedInPage.js +0 -19
- package/dist/browser/withLoggedInPage.js.map +0 -1
- package/dist/facebook-cli/index.d.ts +0 -2
- package/dist/facebook-cli/index.d.ts.map +0 -1
- package/dist/facebook-cli/index.js +0 -2
- package/dist/facebook-cli/index.js.map +0 -1
- package/dist/toolset/c_resume_capture.d.ts +0 -11
- package/dist/toolset/c_resume_capture.d.ts.map +0 -1
- package/dist/toolset/c_resume_capture.js +0 -76
- package/dist/toolset/c_resume_capture.js.map +0 -1
- package/dist/toolset/chat_action.d.ts +0 -7
- package/dist/toolset/chat_action.d.ts.map +0 -1
- package/dist/toolset/chat_action.js +0 -355
- package/dist/toolset/chat_action.js.map +0 -1
- package/dist/toolset/list_candidates.d.ts +0 -4
- package/dist/toolset/list_candidates.d.ts.map +0 -1
- package/dist/toolset/list_candidates.js +0 -120
- package/dist/toolset/list_candidates.js.map +0 -1
- package/dist/toolset/list_positions.d.ts +0 -9
- package/dist/toolset/list_positions.d.ts.map +0 -1
- package/dist/toolset/list_positions.js +0 -41
- package/dist/toolset/list_positions.js.map +0 -1
- package/dist/toolset/open_chat.d.ts +0 -3
- package/dist/toolset/open_chat.d.ts.map +0 -1
- package/dist/toolset/open_chat.js +0 -423
- package/dist/toolset/open_chat.js.map +0 -1
- package/dist/toolset/recommend_greet.d.ts +0 -2
- package/dist/toolset/recommend_greet.d.ts.map +0 -1
- package/dist/toolset/recommend_greet.js +0 -27
- package/dist/toolset/recommend_greet.js.map +0 -1
- package/dist/toolset/search.d.ts +0 -24
- package/dist/toolset/search.d.ts.map +0 -1
- package/dist/toolset/search.js +0 -682
- package/dist/toolset/search.js.map +0 -1
- package/dist/toolset/send_message.d.ts +0 -12
- package/dist/toolset/send_message.d.ts.map +0 -1
- package/dist/toolset/send_message.js +0 -214
- package/dist/toolset/send_message.js.map +0 -1
- package/dist/toolset/skill.d.ts +0 -13
- package/dist/toolset/skill.d.ts.map +0 -1
- package/dist/toolset/skill.js +0 -85
- package/dist/toolset/skill.js.map +0 -1
package/dist/toolset/list.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { LIST_MIN_BEFORE_EMPTY_OK_MS, LIST_POLL_MS, sleepRandom } from '../browser/index.js';
|
|
2
|
+
import { isBossChatIndexUrl } from '../common/auth.js';
|
|
3
3
|
import { withBossSessionPage } from '../common/boss_session_page.js';
|
|
4
4
|
import { clickBossSidebarMenuToPath } from '../common/boss_sidebar_nav.js';
|
|
5
5
|
async function waitForCandidateListSettled(page, opts) {
|
|
@@ -28,18 +28,33 @@ async function waitForCandidateListSettled(page, opts) {
|
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
async function clickChatFilterTabAll(page) {
|
|
31
|
-
await page.evaluate(`(() => {
|
|
32
|
-
const targetText = "全部";
|
|
33
|
-
const container = document.querySelector(".chat-message-filter-left");
|
|
34
|
-
if (!container) return;
|
|
35
|
-
const spans = Array.from(container.querySelectorAll("span"));
|
|
36
|
-
const norm = (v) => (v ?? "").replace(/\\s+/g, "");
|
|
37
|
-
const target = spans.find((el) => norm(el.textContent).includes(targetText));
|
|
38
|
-
if (!target) return;
|
|
39
|
-
target.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true }));
|
|
40
|
-
target.click();
|
|
31
|
+
await page.evaluate(`(() => {
|
|
32
|
+
const targetText = "全部";
|
|
33
|
+
const container = document.querySelector(".chat-message-filter-left");
|
|
34
|
+
if (!container) return;
|
|
35
|
+
const spans = Array.from(container.querySelectorAll("span"));
|
|
36
|
+
const norm = (v) => (v ?? "").replace(/\\s+/g, "");
|
|
37
|
+
const target = spans.find((el) => norm(el.textContent).includes(targetText));
|
|
38
|
+
if (!target) return;
|
|
39
|
+
target.dispatchEvent(new MouseEvent("click", { bubbles: true, cancelable: true }));
|
|
40
|
+
target.click();
|
|
41
41
|
})()`);
|
|
42
42
|
}
|
|
43
|
+
async function waitForChatFilterAllSelected(page) {
|
|
44
|
+
await page.waitForFunction(`(() => {
|
|
45
|
+
const container = document.querySelector(".chat-message-filter-left");
|
|
46
|
+
if (!container) return false;
|
|
47
|
+
const norm = (v) => (v ?? "").replace(/\\s+/g, "");
|
|
48
|
+
const tabs = Array.from(container.querySelectorAll("span"));
|
|
49
|
+
const allTab = tabs.find((el) => norm(el.textContent).includes("全部"));
|
|
50
|
+
if (!allTab) return false;
|
|
51
|
+
const cls = String(allTab.className || "");
|
|
52
|
+
const selectedByClass = /active|selected|current|checked/.test(cls);
|
|
53
|
+
const selectedByAria = allTab.getAttribute("aria-selected") === "true";
|
|
54
|
+
const selectedByAncestor = !!allTab.closest(".active, .selected, .current, .checked");
|
|
55
|
+
return selectedByClass || selectedByAria || selectedByAncestor;
|
|
56
|
+
})()`, { timeout: 6_000 });
|
|
57
|
+
}
|
|
43
58
|
/**
|
|
44
59
|
* 与 `list` 一致:若当前不在沟通列表则点侧栏「沟通」进入 `/web/chat/index`,
|
|
45
60
|
* 再点左侧筛选「全部」并等待列表稳定。`chat` 在按姓名找人前需处于该状态。
|
|
@@ -48,25 +63,21 @@ export async function ensureChatIndexAllFilter(page) {
|
|
|
48
63
|
const currentUrl = page.url();
|
|
49
64
|
if (!isBossChatIndexUrl(currentUrl)) {
|
|
50
65
|
await clickBossSidebarMenuToPath(page, '沟通', '/web/chat/index');
|
|
51
|
-
await sleepRandom(CHAT_GOTO_SETTLE_MS.min, CHAT_GOTO_SETTLE_MS.max);
|
|
52
66
|
}
|
|
53
67
|
if (!isBossChatIndexUrl(page.url())) {
|
|
54
68
|
throw new Error('通过侧边栏“沟通”进入聊天列表页失败,请确认已登录并可访问 /web/chat/index。');
|
|
55
69
|
}
|
|
56
|
-
await page.waitForFunction(`(() => {
|
|
57
|
-
const filter = document.querySelector(".chat-message-filter-left");
|
|
58
|
-
if (!filter) return false;
|
|
59
|
-
const tabs = Array.from(filter.querySelectorAll("span"));
|
|
60
|
-
if (tabs.length < 2) return false;
|
|
61
|
-
const list = document.querySelector(".chat-list, .chat-item-list, .geek-list");
|
|
62
|
-
const hasItems = document.querySelectorAll(".geek-item").length > 0;
|
|
63
|
-
return !!list || hasItems;
|
|
70
|
+
await page.waitForFunction(`(() => {
|
|
71
|
+
const filter = document.querySelector(".chat-message-filter-left");
|
|
72
|
+
if (!filter) return false;
|
|
73
|
+
const tabs = Array.from(filter.querySelectorAll("span"));
|
|
74
|
+
if (tabs.length < 2) return false;
|
|
75
|
+
const list = document.querySelector(".chat-list, .chat-item-list, .geek-list");
|
|
76
|
+
const hasItems = document.querySelectorAll(".geek-item").length > 0;
|
|
77
|
+
return !!list || hasItems;
|
|
64
78
|
})()`, { timeout: 12_000 });
|
|
65
79
|
await clickChatFilterTabAll(page);
|
|
66
|
-
await
|
|
67
|
-
await sleepRandom(LIST_FILTER_GAP_MS.min, LIST_FILTER_GAP_MS.max);
|
|
68
|
-
await clickChatFilterTabAll(page);
|
|
69
|
-
await sleepRandom(LIST_FILTER_GAP_MS.min, LIST_FILTER_GAP_MS.max);
|
|
80
|
+
await waitForChatFilterAllSelected(page);
|
|
70
81
|
await waitForCandidateListSettled(page, {
|
|
71
82
|
timeoutMs: 14_000,
|
|
72
83
|
pollMsMin: LIST_POLL_MS.min,
|
|
@@ -79,21 +90,21 @@ export async function runGetCandidateList(opts = {}) {
|
|
|
79
90
|
try {
|
|
80
91
|
return await withBossSessionPage(async (page) => {
|
|
81
92
|
await ensureChatIndexAllFilter(page);
|
|
82
|
-
const items = (await page.evaluate(`(() => {
|
|
83
|
-
const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
|
|
84
|
-
return Array.from(document.querySelectorAll(".geek-item")).map((el) => {
|
|
85
|
-
const name = norm(el.querySelector(".geek-name")?.textContent);
|
|
86
|
-
const job = norm(el.querySelector(".source-job")?.textContent);
|
|
87
|
-
const time = norm(el.querySelector(".time")?.textContent);
|
|
88
|
-
const message = norm(el.querySelector(".push-text")?.textContent);
|
|
89
|
-
const badge = el.querySelector(".badge-count");
|
|
90
|
-
let unreadCount = 0;
|
|
91
|
-
if (badge) {
|
|
92
|
-
const digits = norm(badge.textContent).replace(/\\D/g, "");
|
|
93
|
-
if (digits) unreadCount = parseInt(digits, 10) || 0;
|
|
94
|
-
}
|
|
95
|
-
return { name, job, time, message, unreadCount };
|
|
96
|
-
});
|
|
93
|
+
const items = (await page.evaluate(`(() => {
|
|
94
|
+
const norm = (v) => (v ?? "").replace(/\\s+/g, " ").trim();
|
|
95
|
+
return Array.from(document.querySelectorAll(".geek-item")).map((el) => {
|
|
96
|
+
const name = norm(el.querySelector(".geek-name")?.textContent);
|
|
97
|
+
const job = norm(el.querySelector(".source-job")?.textContent);
|
|
98
|
+
const time = norm(el.querySelector(".time")?.textContent);
|
|
99
|
+
const message = norm(el.querySelector(".push-text")?.textContent);
|
|
100
|
+
const badge = el.querySelector(".badge-count");
|
|
101
|
+
let unreadCount = 0;
|
|
102
|
+
if (badge) {
|
|
103
|
+
const digits = norm(badge.textContent).replace(/\\D/g, "");
|
|
104
|
+
if (digits) unreadCount = parseInt(digits, 10) || 0;
|
|
105
|
+
}
|
|
106
|
+
return { name, job, time, message, unreadCount };
|
|
107
|
+
});
|
|
97
108
|
})()`));
|
|
98
109
|
const candidates = items.filter((it) => it.name);
|
|
99
110
|
const withUnread = candidates.filter((it) => it.unreadCount > 0).length;
|
|
@@ -121,14 +132,10 @@ export async function runGetCandidateList(opts = {}) {
|
|
|
121
132
|
});
|
|
122
133
|
}
|
|
123
134
|
catch (e) {
|
|
124
|
-
const message = e instanceof Error ? e.message : String(e);
|
|
125
135
|
if (e instanceof Error) {
|
|
126
|
-
if (e.message.includes('浏览器会话尚未初始化')) {
|
|
127
|
-
throw new Error(createWaitManualLoginRequiredText('获取候选人列表'));
|
|
128
|
-
}
|
|
129
136
|
throw e;
|
|
130
137
|
}
|
|
131
|
-
throw new Error(`获取候选人列表失败:${
|
|
138
|
+
throw new Error(`获取候选人列表失败:${String(e)}`);
|
|
132
139
|
}
|
|
133
140
|
}
|
|
134
141
|
//# sourceMappingURL=list.js.map
|
package/dist/toolset/list.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/toolset/list.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/toolset/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/toolset/preview.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"preview.d.ts","sourceRoot":"","sources":["../../src/toolset/preview.ts"],"names":[],"mappings":"AAiCA,MAAM,MAAM,cAAc,GAAG;IAC3B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,wBAAsB,UAAU,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAyFzE"}
|
package/dist/toolset/preview.js
CHANGED
|
@@ -2,11 +2,10 @@
|
|
|
2
2
|
* 在线简历预览:须在「推荐」页或「深度搜索 aiform」页且列表已加载;不自动跳转,否则报错。
|
|
3
3
|
*/
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import {
|
|
6
|
-
import { createWaitManualLoginRequiredText } from '../common/auth.js';
|
|
5
|
+
import { ONLINE_RESUME_IFRAME_WAIT_MAX_MS, snapshotBossPageViewport } from '../browser/index.js';
|
|
7
6
|
import { withBossSessionPage } from '../common/boss_session_page.js';
|
|
8
7
|
import { closeBossPaywallPopupIfPresent, describeBossPaywallPopupIfPresent, waitForCResumeIframeOrPaywall, } from '../common/boss_paywall_popup.js';
|
|
9
|
-
import { captureCResumeIframeToFile, closeCResumePanel, safeResumeScreenshotFileBase, } from '../common/c_resume_capture.js';
|
|
8
|
+
import { captureCResumeIframeToFile, closeCResumePanel, safeResumeScreenshotFileBase, waitForVisibleCResumeIframeReady, } from '../common/c_resume_capture.js';
|
|
10
9
|
import { ensureAppDataLayout, RESUME_SCREENSHOTS_DIR } from '../config.js';
|
|
11
10
|
import { isResumeOcrEnabled, ocrResumePngToTextFile } from '../ocr/index.js';
|
|
12
11
|
import { ensureInDeepSearchPage, isBossChatAiFormUrl, openDeepSearchResumePreview, readAiFormSelectedJobLabel, selectAiFormJob, } from './deep-search.js';
|
|
@@ -50,7 +49,6 @@ export async function runPreview(options) {
|
|
|
50
49
|
if (!opened) {
|
|
51
50
|
throw new Error('未在列表中找到该候选人,或点击未能打开简历预览。');
|
|
52
51
|
}
|
|
53
|
-
await sleepRandom(ONLINE_RESUME_IFRAME_APPEAR_MS.min, ONLINE_RESUME_IFRAME_APPEAR_MS.max);
|
|
54
52
|
const outcome = await waitForCResumeIframeOrPaywall(page, ONLINE_RESUME_IFRAME_WAIT_MAX_MS);
|
|
55
53
|
if (outcome !== 'iframe') {
|
|
56
54
|
const paywall = await describeBossPaywallPopupIfPresent(page);
|
|
@@ -60,7 +58,10 @@ export async function runPreview(options) {
|
|
|
60
58
|
}
|
|
61
59
|
throw new Error('点击后未出现在线简历 iframe(c-resume)。');
|
|
62
60
|
}
|
|
63
|
-
await
|
|
61
|
+
const ready = await waitForVisibleCResumeIframeReady(page);
|
|
62
|
+
if (!ready) {
|
|
63
|
+
throw new Error('在线简历 iframe 已出现,但内容未在预期时间内渲染完成。');
|
|
64
|
+
}
|
|
64
65
|
ensureAppDataLayout();
|
|
65
66
|
const fileName = `preview-${safeResumeScreenshotFileBase(target)}-${Date.now()}.png`;
|
|
66
67
|
const absPath = join(RESUME_SCREENSHOTS_DIR, fileName);
|
|
@@ -94,9 +95,6 @@ export async function runPreview(options) {
|
|
|
94
95
|
}
|
|
95
96
|
catch (e) {
|
|
96
97
|
const message = e instanceof Error ? e.message : String(e);
|
|
97
|
-
if (e instanceof Error && e.message.includes('浏览器会话尚未初始化')) {
|
|
98
|
-
throw new Error(createWaitManualLoginRequiredText('简历预览截图'));
|
|
99
|
-
}
|
|
100
98
|
throw new Error(`简历预览失败:${message}`);
|
|
101
99
|
}
|
|
102
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/toolset/preview.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,
|
|
1
|
+
{"version":3,"file":"preview.js","sourceRoot":"","sources":["../../src/toolset/preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend.d.ts","sourceRoot":"","sources":["../../src/toolset/recommend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAMlD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;IAClB,cAAc,EAAE,OAAO,CAAC;IACxB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAWF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAW3D;AAuFD,wBAAsB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyDvF;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAUtE;AAED;;GAEG;AACH,wBAAsB,kCAAkC,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAOnF;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAmEnF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAkD5E;AAED,wBAAsB,UAAU,CAC9B,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,MAAM,GACb,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAmE9B;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,kBAAkB,EAAE,EAC5B,KAAK,EAAE,kBAAkB,EAAE,GAC1B,IAAI,CAON;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CA+C/F;AAED,wBAAsB,YAAY,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAavE"}
|