@bingine/cemem 0.0.0-stage → 0.1.1
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/PORT-SCOPE.md +169 -0
- package/README.md +451 -2
- package/dist/cjs/addr/expression.js +650 -0
- package/dist/cjs/addr/expression.js.map +1 -0
- package/dist/cjs/addresslist/memory-record.js +612 -0
- package/dist/cjs/addresslist/memory-record.js.map +1 -0
- package/dist/cjs/asm/assembler.js +354 -0
- package/dist/cjs/asm/assembler.js.map +1 -0
- package/dist/cjs/asm/autoassembler-directives.js +362 -0
- package/dist/cjs/asm/autoassembler-directives.js.map +1 -0
- package/dist/cjs/asm/autoassembler.js +2163 -0
- package/dist/cjs/asm/autoassembler.js.map +1 -0
- package/dist/cjs/asm/backend.js +394 -0
- package/dist/cjs/asm/backend.js.map +1 -0
- package/dist/cjs/asm/disassembler.js +715 -0
- package/dist/cjs/asm/disassembler.js.map +1 -0
- package/dist/cjs/backend/dbk-backend.js +683 -0
- package/dist/cjs/backend/dbk-backend.js.map +1 -0
- package/dist/cjs/backend/native-ce-backend.js +667 -0
- package/dist/cjs/backend/native-ce-backend.js.map +1 -0
- package/dist/cjs/backend/self-backend.js +449 -0
- package/dist/cjs/backend/self-backend.js.map +1 -0
- package/dist/cjs/backend/types.js +48 -0
- package/dist/cjs/backend/types.js.map +1 -0
- package/dist/cjs/cheattable/ct-format.js +533 -0
- package/dist/cjs/cheattable/ct-format.js.map +1 -0
- package/dist/cjs/index.js +219 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lua/aa.js +230 -0
- package/dist/cjs/lua/aa.js.map +1 -0
- package/dist/cjs/lua/addressing.js +118 -0
- package/dist/cjs/lua/addressing.js.map +1 -0
- package/dist/cjs/lua/api.js +736 -0
- package/dist/cjs/lua/api.js.map +1 -0
- package/dist/cjs/lua/asm.js +220 -0
- package/dist/cjs/lua/asm.js.map +1 -0
- package/dist/cjs/lua/bridge.js +526 -0
- package/dist/cjs/lua/bridge.js.map +1 -0
- package/dist/cjs/lua/marshal.js +562 -0
- package/dist/cjs/lua/marshal.js.map +1 -0
- package/dist/cjs/lua/memory.js +213 -0
- package/dist/cjs/lua/memory.js.map +1 -0
- package/dist/cjs/lua/objects.js +1070 -0
- package/dist/cjs/lua/objects.js.map +1 -0
- package/dist/cjs/lua/scan.js +543 -0
- package/dist/cjs/lua/scan.js.map +1 -0
- package/dist/cjs/lua/types.js +103 -0
- package/dist/cjs/lua/types.js.map +1 -0
- package/dist/cjs/scanner/matcher.js +781 -0
- package/dist/cjs/scanner/matcher.js.map +1 -0
- package/dist/cjs/scanner/pointer-scan.js +546 -0
- package/dist/cjs/scanner/pointer-scan.js.map +1 -0
- package/dist/cjs/scanner/scanner.js +513 -0
- package/dist/cjs/scanner/scanner.js.map +1 -0
- package/dist/cjs/scanner/shared-layout.js +207 -0
- package/dist/cjs/scanner/shared-layout.js.map +1 -0
- package/dist/cjs/types.js +190 -0
- package/dist/cjs/types.js.map +1 -0
- package/dist/cjs/value-codec.js +515 -0
- package/dist/cjs/value-codec.js.map +1 -0
- package/dist/cjs/win/process.js +475 -0
- package/dist/cjs/win/process.js.map +1 -0
- package/dist/cjs/win/scan-worker.js +84 -0
- package/dist/cjs/win/scan-worker.js.map +1 -0
- package/dist/cjs/win/winapi.js +403 -0
- package/dist/cjs/win/winapi.js.map +1 -0
- package/dist/types/addr/expression.d.ts +98 -0
- package/dist/types/addr/expression.d.ts.map +1 -0
- package/dist/types/addresslist/memory-record.d.ts +218 -0
- package/dist/types/addresslist/memory-record.d.ts.map +1 -0
- package/dist/types/asm/assembler.d.ts +106 -0
- package/dist/types/asm/assembler.d.ts.map +1 -0
- package/dist/types/asm/autoassembler-directives.d.ts +118 -0
- package/dist/types/asm/autoassembler-directives.d.ts.map +1 -0
- package/dist/types/asm/autoassembler.d.ts +434 -0
- package/dist/types/asm/autoassembler.d.ts.map +1 -0
- package/dist/types/asm/backend.d.ts +167 -0
- package/dist/types/asm/backend.d.ts.map +1 -0
- package/dist/types/asm/disassembler.d.ts +194 -0
- package/dist/types/asm/disassembler.d.ts.map +1 -0
- package/dist/types/backend/dbk-backend.d.ts +353 -0
- package/dist/types/backend/dbk-backend.d.ts.map +1 -0
- package/dist/types/backend/native-ce-backend.d.ts +213 -0
- package/dist/types/backend/native-ce-backend.d.ts.map +1 -0
- package/dist/types/backend/self-backend.d.ts +64 -0
- package/dist/types/backend/self-backend.d.ts.map +1 -0
- package/dist/types/backend/types.d.ts +176 -0
- package/dist/types/backend/types.d.ts.map +1 -0
- package/dist/types/cheattable/ct-format.d.ts +100 -0
- package/dist/types/cheattable/ct-format.d.ts.map +1 -0
- package/dist/types/index.d.ts +54 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/lua/aa.d.ts +107 -0
- package/dist/types/lua/aa.d.ts.map +1 -0
- package/dist/types/lua/addressing.d.ts +41 -0
- package/dist/types/lua/addressing.d.ts.map +1 -0
- package/dist/types/lua/api.d.ts +46 -0
- package/dist/types/lua/api.d.ts.map +1 -0
- package/dist/types/lua/asm.d.ts +42 -0
- package/dist/types/lua/asm.d.ts.map +1 -0
- package/dist/types/lua/bridge.d.ts +129 -0
- package/dist/types/lua/bridge.d.ts.map +1 -0
- package/dist/types/lua/marshal.d.ts +244 -0
- package/dist/types/lua/marshal.d.ts.map +1 -0
- package/dist/types/lua/memory.d.ts +61 -0
- package/dist/types/lua/memory.d.ts.map +1 -0
- package/dist/types/lua/objects.d.ts +210 -0
- package/dist/types/lua/objects.d.ts.map +1 -0
- package/dist/types/lua/scan.d.ts +106 -0
- package/dist/types/lua/scan.d.ts.map +1 -0
- package/dist/types/lua/types.d.ts +146 -0
- package/dist/types/lua/types.d.ts.map +1 -0
- package/dist/types/scanner/matcher.d.ts +122 -0
- package/dist/types/scanner/matcher.d.ts.map +1 -0
- package/dist/types/scanner/pointer-scan.d.ts +187 -0
- package/dist/types/scanner/pointer-scan.d.ts.map +1 -0
- package/dist/types/scanner/scanner.d.ts +150 -0
- package/dist/types/scanner/scanner.d.ts.map +1 -0
- package/dist/types/scanner/shared-layout.d.ts +96 -0
- package/dist/types/scanner/shared-layout.d.ts.map +1 -0
- package/dist/types/types.d.ts +239 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/types/value-codec.d.ts +134 -0
- package/dist/types/value-codec.d.ts.map +1 -0
- package/dist/types/win/process.d.ts +190 -0
- package/dist/types/win/process.d.ts.map +1 -0
- package/dist/types/win/scan-worker.d.ts +51 -0
- package/dist/types/win/scan-worker.d.ts.map +1 -0
- package/dist/types/win/winapi.d.ts +144 -0
- package/dist/types/win/winapi.d.ts.map +1 -0
- package/docs/assembler.md +371 -0
- package/docs/autoassembler.md +423 -0
- package/docs/backend-dbk.md +305 -0
- package/docs/backends.md +273 -0
- package/docs/evidence/atomics-wait-io.js +20 -0
- package/docs/evidence/mini-repro.js +98 -0
- package/docs/lua-api.md +718 -0
- package/package.json +60 -4
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"matcher.js","sourceRoot":"","sources":["../../../src/scanner/matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,546 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* 指针扫描 —— 对齐 Cheat Engine `pointerscancontroller.pas` / `pointerscanstructures.pas`。
|
|
4
|
+
*
|
|
5
|
+
* 目标:找出 "基址 + 多级偏移" 表达式,使得
|
|
6
|
+
* `[ [ [base + off[N]] + off[N-1] ] ... + off[1] ] == targetAddress`
|
|
7
|
+
*
|
|
8
|
+
* CE 的做法分两步(本实现一致):
|
|
9
|
+
* 1. 建立**指针映射**(pointermap):遍历目标进程所有可扫描段,
|
|
10
|
+
* 把每个"看起来像指针"的槽位记为 (存放地址 storeAddr, 指向值 ptrValue)。
|
|
11
|
+
* 只收对齐槽位,且 ptrValue 必须落在某个已提交区域内(否则不可能是有效指针)。
|
|
12
|
+
* 2. **逐级回溯**:第 0 级的"待匹配地址集合"只有 targetAddress。
|
|
13
|
+
* 对每一级,在指针映射里找那些 ptrValue ∈ 当前集合的槽位;
|
|
14
|
+
* 于是 storeAddr 成为上一级的待匹配地址,偏移 = 当前地址 − ptrValue。
|
|
15
|
+
* 重复 maxLevel 次,得到 基址 → 偏移链。
|
|
16
|
+
* 最后按 maxOffset / maxDifferentOffsets / 是否允许负偏移做剪枝。
|
|
17
|
+
*
|
|
18
|
+
* 与 CE 的差异:
|
|
19
|
+
* - CE 把指针映射缓存为 .scandata 二进制文件(PSCAN 格式)可跨会话复用;
|
|
20
|
+
* 本实现提供内存缓存,并支持导出为 JSON(格式见 docs/pscan-format.md),
|
|
21
|
+
* 与 CE 的二进制格式不兼容。
|
|
22
|
+
* - CE 的 "Only find static addresses" 用模块列表判定;这里用 MEM_IMAGE 判定。
|
|
23
|
+
*/
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.PointerScanner = void 0;
|
|
26
|
+
exports.formatPointerPath = formatPointerPath;
|
|
27
|
+
exports.applyPointerPath = applyPointerPath;
|
|
28
|
+
const process_1 = require("../win/process");
|
|
29
|
+
const types_1 = require("../types");
|
|
30
|
+
/**
|
|
31
|
+
* 指针扫描器。
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* const ps = new PointerScanner(proc, { maxLevel: 5, maxOffset: 2048 });
|
|
35
|
+
* const paths = ps.scan(targetAddress);
|
|
36
|
+
* for (const p of paths) console.log(formatPointerPath(p));
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
class PointerScanner {
|
|
40
|
+
proc;
|
|
41
|
+
opts;
|
|
42
|
+
/** 缓存的指针映射(同一进程可复用) */
|
|
43
|
+
pointerMap = null;
|
|
44
|
+
/** 记录静态区范围,用于 staticOnly 判定 */
|
|
45
|
+
staticRanges = [];
|
|
46
|
+
/** 已提交区域范围(升序),用于判定某值是否可能是有效指针 */
|
|
47
|
+
committedRanges = [];
|
|
48
|
+
lastStats = null;
|
|
49
|
+
constructor(process, options = {}) {
|
|
50
|
+
if (!process.isOpen)
|
|
51
|
+
throw new Error('指针扫描需要一个已打开的进程');
|
|
52
|
+
this.proc = process;
|
|
53
|
+
const pointerSize = options.pointerSize ?? (process.isWow64() ? 4 : 8);
|
|
54
|
+
this.opts = {
|
|
55
|
+
...options,
|
|
56
|
+
maxLevel: options.maxLevel ?? 5,
|
|
57
|
+
maxOffset: options.maxOffset ?? 2048,
|
|
58
|
+
preferShallow: options.preferShallow === true,
|
|
59
|
+
maxDifferentOffsets: options.maxDifferentOffsets ?? 0,
|
|
60
|
+
allowNegativeOffsets: options.allowNegativeOffsets === true,
|
|
61
|
+
staticOnly: options.staticOnly === true,
|
|
62
|
+
pointerSize,
|
|
63
|
+
maxResults: options.maxResults ?? 0,
|
|
64
|
+
maxSegments: options.maxSegments ?? 0,
|
|
65
|
+
};
|
|
66
|
+
if (this.opts.maxLevel < 1)
|
|
67
|
+
throw new RangeError('maxLevel 必须 ≥ 1');
|
|
68
|
+
if (this.opts.maxOffset < 0)
|
|
69
|
+
throw new RangeError('maxOffset 不能为负');
|
|
70
|
+
}
|
|
71
|
+
get stats() {
|
|
72
|
+
return this.lastStats;
|
|
73
|
+
}
|
|
74
|
+
/** 指针映射是否已建好(可跳过一次全量建档)。 */
|
|
75
|
+
get hasPointerMap() {
|
|
76
|
+
return this.pointerMap !== null;
|
|
77
|
+
}
|
|
78
|
+
/** 丢弃已建好的指针映射。 */
|
|
79
|
+
clearPointerMap() {
|
|
80
|
+
this.pointerMap = null;
|
|
81
|
+
}
|
|
82
|
+
/** 执行指针扫描。 */
|
|
83
|
+
scan(targetAddress) {
|
|
84
|
+
const started = Date.now();
|
|
85
|
+
const map = this.ensurePointerMap();
|
|
86
|
+
const levelCounts = [];
|
|
87
|
+
// 第 0 级:只有目标地址
|
|
88
|
+
let current = [{ address: targetAddress, offsets: [] }];
|
|
89
|
+
const results = [];
|
|
90
|
+
const preferShallow = this.opts.preferShallow === true;
|
|
91
|
+
/**
|
|
92
|
+
* 把某一层的候选收进结果。
|
|
93
|
+
*
|
|
94
|
+
* 偏移链顺序修正:回溯时每级是"由目标往基址方向"追加,
|
|
95
|
+
* 而应用方向是"由基址往目标",因此这里反转。
|
|
96
|
+
*/
|
|
97
|
+
const collect = (level, paths) => {
|
|
98
|
+
for (const p of paths) {
|
|
99
|
+
if (this.opts.staticOnly && !this.isStatic(p.address))
|
|
100
|
+
continue;
|
|
101
|
+
const entry = {
|
|
102
|
+
baseAddress: p.address,
|
|
103
|
+
offsets: p.offsets.slice().reverse(),
|
|
104
|
+
targetAddress,
|
|
105
|
+
};
|
|
106
|
+
// 只在汇总模式下填 depth:默认模式保持原有的对象形状不变
|
|
107
|
+
if (preferShallow)
|
|
108
|
+
entry.depth = level;
|
|
109
|
+
results.push(entry);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
for (let level = 1; level <= this.opts.maxLevel; level++) {
|
|
113
|
+
const next = this.expandLevel(map, current, level);
|
|
114
|
+
levelCounts.push(next.length);
|
|
115
|
+
if (preferShallow) {
|
|
116
|
+
// 汇总模式:每一层都收,等全部层跑完再统一排序/截断。
|
|
117
|
+
// 这里**不能**提前按 maxResults 截断,否则浅层噪声会把深层的有效路径挤掉。
|
|
118
|
+
collect(level, next);
|
|
119
|
+
if (next.length === 0)
|
|
120
|
+
break;
|
|
121
|
+
current = next;
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
if (level === this.opts.maxLevel) {
|
|
125
|
+
collect(level, next);
|
|
126
|
+
if (this.opts.maxResults > 0 && results.length >= this.opts.maxResults)
|
|
127
|
+
break;
|
|
128
|
+
break;
|
|
129
|
+
}
|
|
130
|
+
if (next.length === 0)
|
|
131
|
+
break;
|
|
132
|
+
current = next;
|
|
133
|
+
if (this.opts.maxResults > 0 && current.length > this.opts.maxResults * 64) {
|
|
134
|
+
// 防护:中间层候选爆炸时截断(CE 也有类似上限)
|
|
135
|
+
current = current.slice(0, this.opts.maxResults * 64);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
let finalResults = results;
|
|
139
|
+
if (preferShallow && results.length > 0) {
|
|
140
|
+
// 排序:**层数浅优先为主**,同层内静态基址优先。
|
|
141
|
+
//
|
|
142
|
+
// 为什么以层数为主:层数越少越稳定、越不容易断链,而且结果呈现为
|
|
143
|
+
// 「1 级全部 → 2 级全部 → 3 级全部」这种可直接阅读的分组顺序。
|
|
144
|
+
// 反之若以静态为主,序列会变成 3级静态 → 1级动态 → 2级动态 这种跳跃,
|
|
145
|
+
// 使用者看到的第一条未必是最浅的,且难以按层数解读。
|
|
146
|
+
const staticCache = new Map();
|
|
147
|
+
const isStaticCached = (address) => {
|
|
148
|
+
let v = staticCache.get(address);
|
|
149
|
+
if (v === undefined) {
|
|
150
|
+
v = this.isStatic(address);
|
|
151
|
+
staticCache.set(address, v);
|
|
152
|
+
}
|
|
153
|
+
return v;
|
|
154
|
+
};
|
|
155
|
+
finalResults = results
|
|
156
|
+
.map((path, index) => ({ path, index }))
|
|
157
|
+
.sort((a, b) => {
|
|
158
|
+
const da = a.path.depth ?? 0;
|
|
159
|
+
const db = b.path.depth ?? 0;
|
|
160
|
+
if (da !== db)
|
|
161
|
+
return da - db;
|
|
162
|
+
const sa = isStaticCached(a.path.baseAddress) ? 0 : 1;
|
|
163
|
+
const sb = isStaticCached(b.path.baseAddress) ? 0 : 1;
|
|
164
|
+
if (sa !== sb)
|
|
165
|
+
return sa - sb;
|
|
166
|
+
return a.index - b.index;
|
|
167
|
+
})
|
|
168
|
+
.map((entry) => entry.path);
|
|
169
|
+
// ⚠️ **不要在这里截断**。上限统一放在下面的"返回值验证之后"应用。
|
|
170
|
+
//
|
|
171
|
+
// 早先这里按 maxResults 先截断,而验证会丢弃一部分路径(值巧合、
|
|
172
|
+
// 页已回收),于是"请求 10 条"可能只返回 3 条甚至 0 条 ——
|
|
173
|
+
// 明明还有可用的路径,却因为先截断、后丢弃而没机会进入结果。
|
|
174
|
+
// 先验证、再截断,才能保证"最多 N 条"是**上限**而不是**目标值**。
|
|
175
|
+
}
|
|
176
|
+
// ── 返回值验证:丢掉**解析不通**的路径 ──────────────────────────────
|
|
177
|
+
//
|
|
178
|
+
// 为什么需要这一步(这是一个真实缺陷的修复):
|
|
179
|
+
//
|
|
180
|
+
// 指针扫描是按**值匹配**找候选槽的 —— 只要某个 8 字节位置的值恰好落在
|
|
181
|
+
// 目标地址 ±maxOffset 内,它就会被当成"指针槽"。这在真实进程里会大量命中
|
|
182
|
+
// **动态内存**(V8 堆、临时缓冲):里面常常恰好存着某个页基址、或者
|
|
183
|
+
// 由 `base + offset` 这种算式留下的裸 8 字节。
|
|
184
|
+
//
|
|
185
|
+
// 问题在于这些槽**随时可能失效**:目标进程一空闲,GC 就回收那一页,
|
|
186
|
+
// 于是"沿路径读指针"的中间步骤会失败(Win32 998 / 读指针失败),
|
|
187
|
+
// 或者解析出来的地址根本不是原来那个目标。
|
|
188
|
+
//
|
|
189
|
+
// 而调用方对返回值的期望是"**可直接使用**"(`ce_pointer_scan` 会把
|
|
190
|
+
// `expression` 直接交给 `ce_read`)。把验证不通的路径交出去,
|
|
191
|
+
// 等于把这个不确定性转嫁给使用者 —— 实测表现为:
|
|
192
|
+
// · 工具返回的第一条路径 `ce_read` 报 998;
|
|
193
|
+
// · 内核自己的测试偶发失败(`路径 … 解析结果不对` / `读取指针失败`)。
|
|
194
|
+
//
|
|
195
|
+
// 所以这里在返回前**逐条解析一遍**,只保留能真正走通、且解析结果
|
|
196
|
+
// 等于目标地址的路径。验证成本是每条路径几次读内存,相对整张指针映射的
|
|
197
|
+
// 构建成本可以忽略。
|
|
198
|
+
//
|
|
199
|
+
// ⚠️ **失败必须重试,不能一次读失败就丢掉整条路径**。
|
|
200
|
+
// 这是踩过的坑:目标进程是活的,验证那一瞬间某个中间页可能刚好处于
|
|
201
|
+
// 正在被回收/迁移的状态,于是**本来有效的路径**读失败一次。
|
|
202
|
+
// 若据此丢弃,就会出现"本该找到却返回 0 条"的偶发失败
|
|
203
|
+
// (实测:e2e 的指针扫描用例约 4/6 失败)。
|
|
204
|
+
//
|
|
205
|
+
// 区分两种失败:
|
|
206
|
+
// · **地址无效**(算错、段不存在)→ 稳定失败,重试也不会好;
|
|
207
|
+
// · **瞬时读失败**(页正在回收)→ 重试通常立刻成功。
|
|
208
|
+
// 所以"重试若干次仍失败"才丢弃 —— 前者被快速淘汰(每次都失败),
|
|
209
|
+
// 后者被救回来,代价只是极小概率多读几次内存。
|
|
210
|
+
//
|
|
211
|
+
// 注意:这不改变"按值匹配"的召回语义(那与 CE 一致),只是不再把
|
|
212
|
+
// **已经证明不可用**的候选当成结果交付。
|
|
213
|
+
const VERIFY_ATTEMPTS = 3;
|
|
214
|
+
const verified = [];
|
|
215
|
+
let droppedUnresolvable = 0;
|
|
216
|
+
for (const path of finalResults) {
|
|
217
|
+
let ok = false;
|
|
218
|
+
for (let attempt = 0; attempt < VERIFY_ATTEMPTS && !ok; attempt += 1) {
|
|
219
|
+
try {
|
|
220
|
+
ok = this.resolvePath(path) === targetAddress;
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
// 读不通:可能是页面正在回收(瞬时失败),下一次多半就好
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (ok)
|
|
227
|
+
verified.push(path);
|
|
228
|
+
else
|
|
229
|
+
droppedUnresolvable += 1;
|
|
230
|
+
}
|
|
231
|
+
// ── 应用结果上限(**必须在验证之后**)──────────────────────────────
|
|
232
|
+
//
|
|
233
|
+
// 两种模式都要遵守 maxResults:
|
|
234
|
+
// · `preferShallow`(汇总模式);
|
|
235
|
+
// · 默认模式(只返回恰好达到 maxLevel 的路径)。
|
|
236
|
+
//
|
|
237
|
+
// ⚠️ 早先**只有汇总模式**遵守上限,默认模式完全无视它 ——
|
|
238
|
+
// 实测 `maxResults=3` 时默认模式返回了 **896 条**。
|
|
239
|
+
// 而 `preferShallow` 那侧又把截断放在了验证**之前**,于是验证丢掉一些
|
|
240
|
+
// 路径后,"最多 N 条"会变成"不足 N 条"(明明还有可用路径没被取到)。
|
|
241
|
+
//
|
|
242
|
+
// 现在统一:先验证(只看有效性)→ 再截断(只看上限)。
|
|
243
|
+
const capped = this.opts.maxResults > 0 ? verified.slice(0, this.opts.maxResults) : verified;
|
|
244
|
+
const elapsedMs = Date.now() - started;
|
|
245
|
+
this.lastStats = {
|
|
246
|
+
segmentsScanned: this.lastSegmentCount,
|
|
247
|
+
bytesIndexed: this.lastBytesIndexed,
|
|
248
|
+
pointerEntries: map.entries.length,
|
|
249
|
+
levelCounts,
|
|
250
|
+
elapsedMs,
|
|
251
|
+
resultCount: capped.length,
|
|
252
|
+
droppedUnresolvable,
|
|
253
|
+
// 候选总数(未按上限截断前)。调用方据此判断"是否触及上限"。
|
|
254
|
+
candidateCount: verified.length,
|
|
255
|
+
};
|
|
256
|
+
return capped;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* 沿着一条路径解析出最终地址(用于验证结果)。
|
|
260
|
+
* `readPtr` 由调用方提供,便于在测试中注入。
|
|
261
|
+
*/
|
|
262
|
+
resolvePath(path, readPtr) {
|
|
263
|
+
const read = readPtr ?? ((addr) => this.readPointer(addr));
|
|
264
|
+
let addr = path.baseAddress;
|
|
265
|
+
for (const off of path.offsets) {
|
|
266
|
+
addr = read(addr) + BigInt(off);
|
|
267
|
+
}
|
|
268
|
+
return addr;
|
|
269
|
+
}
|
|
270
|
+
/** 读取目标进程中的一个指针值。 */
|
|
271
|
+
readPointer(address) {
|
|
272
|
+
const size = this.opts.pointerSize;
|
|
273
|
+
const buf = this.proc.readMemory(address, size);
|
|
274
|
+
if (buf.length < size) {
|
|
275
|
+
throw new Error(`读取指针失败:0x${address.toString(16)}`);
|
|
276
|
+
}
|
|
277
|
+
return size === 8 ? buf.readBigUInt64LE(0) : BigInt(buf.readUInt32LE(0));
|
|
278
|
+
}
|
|
279
|
+
/* ---------------------------------------------------------------- *
|
|
280
|
+
* 指针映射建档
|
|
281
|
+
* ---------------------------------------------------------------- */
|
|
282
|
+
lastSegmentCount = 0;
|
|
283
|
+
lastBytesIndexed = 0n;
|
|
284
|
+
/** 建立(或复用)指针映射。 */
|
|
285
|
+
ensurePointerMap() {
|
|
286
|
+
if (this.pointerMap)
|
|
287
|
+
return this.pointerMap;
|
|
288
|
+
const pointerSize = this.opts.pointerSize;
|
|
289
|
+
const regions = this.proc.regions();
|
|
290
|
+
// ── 预扫一遍:先确定"哪些地址是有效地址" ──
|
|
291
|
+
// 这一步必须在使用 isCommittedAddress 之前完成,
|
|
292
|
+
// 否则建档时的有效性判定会全部落空(早期版本的顺序错误就出在这里)。
|
|
293
|
+
const committedRanges = [];
|
|
294
|
+
for (const r of regions) {
|
|
295
|
+
if (!r.committed || r.memorySize <= 0n)
|
|
296
|
+
continue;
|
|
297
|
+
committedRanges.push({ start: r.baseAddress, end: r.baseAddress + r.memorySize });
|
|
298
|
+
}
|
|
299
|
+
committedRanges.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
|
|
300
|
+
this.committedRanges = committedRanges;
|
|
301
|
+
// ── 选出要建档的段 ──
|
|
302
|
+
const segments = [];
|
|
303
|
+
const staticRanges = [];
|
|
304
|
+
for (const r of regions) {
|
|
305
|
+
if (!r.committed)
|
|
306
|
+
continue;
|
|
307
|
+
if ((r.protect & types_1.PAGE_GUARD) !== 0)
|
|
308
|
+
continue;
|
|
309
|
+
if (!(0, process_1.isReadable)(r.protect))
|
|
310
|
+
continue;
|
|
311
|
+
if (r.memorySize <= 0n)
|
|
312
|
+
continue;
|
|
313
|
+
// 过大的段跳过(CE 也会限制单段大小,避免一次性读入几十 GB)
|
|
314
|
+
if (r.memorySize > 0x40000000n)
|
|
315
|
+
continue;
|
|
316
|
+
const end = r.baseAddress + r.memorySize;
|
|
317
|
+
if (this.isExcludedRange(r.baseAddress, end))
|
|
318
|
+
continue;
|
|
319
|
+
segments.push({ start: r.baseAddress, end });
|
|
320
|
+
if (r.type === types_1.MEM_IMAGE)
|
|
321
|
+
staticRanges.push({ start: r.baseAddress, end });
|
|
322
|
+
}
|
|
323
|
+
// isCommittedAddress 依赖二分查找,因此必须按地址升序排序
|
|
324
|
+
segments.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
|
|
325
|
+
staticRanges.sort((a, b) => (a.start < b.start ? -1 : a.start > b.start ? 1 : 0));
|
|
326
|
+
if (this.opts.maxSegments > 0)
|
|
327
|
+
segments.length = Math.min(segments.length, this.opts.maxSegments);
|
|
328
|
+
// ── 收集条目 ──
|
|
329
|
+
// 关键剪枝(对齐 CE 的指针映射语义):只有"指向已提交内存"的值才可能是有效指针。
|
|
330
|
+
// 不做这层过滤时,任意 8 字节随机数据都会被当成指针,条目数会膨胀到几千万,
|
|
331
|
+
// 既浪费内存也让后续匹配充满噪声。
|
|
332
|
+
const entries = [];
|
|
333
|
+
let bytesIndexed = 0n;
|
|
334
|
+
const CHUNK = 4 * 1024 * 1024;
|
|
335
|
+
const maxPtr = pointerSize === 4 ? 0xffffffffn : 0x7fffffffffffn;
|
|
336
|
+
for (const seg of segments) {
|
|
337
|
+
let addr = seg.start;
|
|
338
|
+
while (addr < seg.end) {
|
|
339
|
+
const take = Number(seg.end - addr > BigInt(CHUNK) ? BigInt(CHUNK) : seg.end - addr);
|
|
340
|
+
const buf = this.proc.readMemory(addr, take);
|
|
341
|
+
bytesIndexed += BigInt(buf.length);
|
|
342
|
+
if (buf.length < pointerSize) {
|
|
343
|
+
addr += BigInt(take);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
// 只在指针对齐的槽位取值 —— 对齐 CE 的指针映射行为,也大幅减少条目数
|
|
347
|
+
const limit = buf.length - pointerSize;
|
|
348
|
+
for (let off = 0; off <= limit; off += pointerSize) {
|
|
349
|
+
const v = pointerSize === 8 ? buf.readBigUInt64LE(off) : BigInt(buf.readUInt32LE(off));
|
|
350
|
+
if (v < 0x10000n || v > maxPtr)
|
|
351
|
+
continue;
|
|
352
|
+
if (!this.isCommittedAddress(v))
|
|
353
|
+
continue;
|
|
354
|
+
entries.push({ store: addr + BigInt(off), value: v });
|
|
355
|
+
}
|
|
356
|
+
addr += BigInt(take);
|
|
357
|
+
}
|
|
358
|
+
this.opts.onProgress?.('建立指针映射', entries.length, 0);
|
|
359
|
+
}
|
|
360
|
+
// 按 value 排序,供二分查找(用显式比较器,避免 BigUint64Array.sort 的数值语义差异)
|
|
361
|
+
const n = entries.length;
|
|
362
|
+
const valuesForSort = new Array(n);
|
|
363
|
+
for (let i = 0; i < n; i++)
|
|
364
|
+
valuesForSort[i] = entries[i].value;
|
|
365
|
+
const sortedIdx = Array.from({ length: n }, (_, i) => i).sort((a, b) => {
|
|
366
|
+
const x = valuesForSort[a];
|
|
367
|
+
const y = valuesForSort[b];
|
|
368
|
+
return x < y ? -1 : x > y ? 1 : 0;
|
|
369
|
+
});
|
|
370
|
+
const sortedValues = new BigUint64Array(n);
|
|
371
|
+
const sortedOrder = new Uint32Array(n);
|
|
372
|
+
for (let i = 0; i < n; i++) {
|
|
373
|
+
sortedValues[i] = valuesForSort[sortedIdx[i]];
|
|
374
|
+
sortedOrder[i] = sortedIdx[i];
|
|
375
|
+
}
|
|
376
|
+
this.staticRanges = staticRanges;
|
|
377
|
+
this.lastSegmentCount = segments.length;
|
|
378
|
+
this.lastBytesIndexed = bytesIndexed;
|
|
379
|
+
this.pointerMap = { entries, sortedValues, order: sortedOrder };
|
|
380
|
+
return this.pointerMap;
|
|
381
|
+
}
|
|
382
|
+
/** 该值是否落在某个已提交区域(有效指针的基本条件)。 */
|
|
383
|
+
isCommittedAddress(addr) {
|
|
384
|
+
const ranges = this.committedRanges;
|
|
385
|
+
// 线性扫描对每次调用都太慢,这里用二分(ranges 已按地址升序)
|
|
386
|
+
let lo = 0;
|
|
387
|
+
let hi = ranges.length - 1;
|
|
388
|
+
while (lo <= hi) {
|
|
389
|
+
const mid = (lo + hi) >>> 1;
|
|
390
|
+
const r = ranges[mid];
|
|
391
|
+
if (addr < r.start)
|
|
392
|
+
hi = mid - 1;
|
|
393
|
+
else if (addr >= r.end)
|
|
394
|
+
lo = mid + 1;
|
|
395
|
+
else
|
|
396
|
+
return true;
|
|
397
|
+
}
|
|
398
|
+
return false;
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* 二分查找"落在 [lo, hi] 区间内"的条目下标范围 `[from, to)`。
|
|
402
|
+
*
|
|
403
|
+
* 这是指针扫描的关键索引操作:`expandLevel` 需要拿到**所有在 maxOffset 窗口内**
|
|
404
|
+
* 指向当前层地址的槽位,再由调用方逐条算出精确偏移。
|
|
405
|
+
*
|
|
406
|
+
* ⚠️ 曾经的严重缺陷:这里原来做的是"值**恰好等于** target"的精确查找,
|
|
407
|
+
* 于是 `expandLevel` 里 `offset = path.address - entry.value` **恒为 0**,
|
|
408
|
+
* `maxOffset` 成了死代码 —— 表现为"只要偏移不为 0 就永远找不到指针路径",
|
|
409
|
+
* 而真实游戏里指针几乎总带偏移,等于指针扫描功能基本失效。
|
|
410
|
+
* 回归测试见 `test/pointer-scan.test.js` 的 "maxOffset 必须真正生效"。
|
|
411
|
+
*/
|
|
412
|
+
findValueRange(map, target, maxOffset) {
|
|
413
|
+
const offset = BigInt(Math.max(0, Math.trunc(maxOffset)));
|
|
414
|
+
const lo = target - offset < 0n ? 0n : target - offset;
|
|
415
|
+
const hi = target + offset;
|
|
416
|
+
return [this.lowerBound(map, lo), this.upperBound(map, hi)];
|
|
417
|
+
}
|
|
418
|
+
/** 第一个 `value >= bound` 的下标(标准 lower_bound)。 */
|
|
419
|
+
lowerBound(map, bound) {
|
|
420
|
+
const arr = map.sortedValues;
|
|
421
|
+
let lo = 0;
|
|
422
|
+
let hi = arr.length;
|
|
423
|
+
while (lo < hi) {
|
|
424
|
+
const mid = (lo + hi) >>> 1;
|
|
425
|
+
if (arr[mid] < bound)
|
|
426
|
+
lo = mid + 1;
|
|
427
|
+
else
|
|
428
|
+
hi = mid;
|
|
429
|
+
}
|
|
430
|
+
return lo;
|
|
431
|
+
}
|
|
432
|
+
/** 第一个 `value > bound` 的下标(标准 upper_bound)。 */
|
|
433
|
+
upperBound(map, bound) {
|
|
434
|
+
const arr = map.sortedValues;
|
|
435
|
+
let lo = 0;
|
|
436
|
+
let hi = arr.length;
|
|
437
|
+
while (lo < hi) {
|
|
438
|
+
const mid = (lo + hi) >>> 1;
|
|
439
|
+
if (arr[mid] <= bound)
|
|
440
|
+
lo = mid + 1;
|
|
441
|
+
else
|
|
442
|
+
hi = mid;
|
|
443
|
+
}
|
|
444
|
+
return lo;
|
|
445
|
+
}
|
|
446
|
+
/**
|
|
447
|
+
* 展开一级:对当前每个"待匹配地址",找出所有指向它的槽位,
|
|
448
|
+
* 生成新的候选(存放地址 + 偏移)。
|
|
449
|
+
*/
|
|
450
|
+
expandLevel(map, current, level) {
|
|
451
|
+
const out = [];
|
|
452
|
+
const seen = new Set();
|
|
453
|
+
const { maxOffset, allowNegativeOffsets, maxDifferentOffsets } = this.opts;
|
|
454
|
+
for (const path of current) {
|
|
455
|
+
const [from, to] = this.findValueRange(map, path.address, maxOffset);
|
|
456
|
+
if (from === to)
|
|
457
|
+
continue;
|
|
458
|
+
// 同一个 store 可能有多个偏移(若它指向当前层多个地址)
|
|
459
|
+
const perStore = new Map();
|
|
460
|
+
for (let i = from; i < to; i++) {
|
|
461
|
+
const entry = map.entries[map.order[i]];
|
|
462
|
+
const offset = Number(path.address - entry.value);
|
|
463
|
+
if (offset === 0 && !allowNegativeOffsets) {
|
|
464
|
+
// 偏移 0 是合法的(指针直接指向目标),允许保留
|
|
465
|
+
}
|
|
466
|
+
if (Math.abs(offset) > maxOffset)
|
|
467
|
+
continue;
|
|
468
|
+
if (offset < 0 && !allowNegativeOffsets)
|
|
469
|
+
continue;
|
|
470
|
+
const key = entry.store.toString();
|
|
471
|
+
let arr = perStore.get(key);
|
|
472
|
+
if (!arr) {
|
|
473
|
+
arr = [];
|
|
474
|
+
perStore.set(key, arr);
|
|
475
|
+
}
|
|
476
|
+
if (!arr.includes(offset))
|
|
477
|
+
arr.push(offset);
|
|
478
|
+
}
|
|
479
|
+
for (const [storeKey, offsets] of perStore) {
|
|
480
|
+
const store = BigInt(storeKey);
|
|
481
|
+
if (this.isExcludedRange(store, store + 1n))
|
|
482
|
+
continue;
|
|
483
|
+
const list = maxDifferentOffsets > 0 && offsets.length > maxDifferentOffsets
|
|
484
|
+
? offsets.slice(0, maxDifferentOffsets)
|
|
485
|
+
: offsets;
|
|
486
|
+
for (const off of list) {
|
|
487
|
+
// 新路径:把"本级的偏移"补到偏移链末尾(靠近基址的一端先不加,
|
|
488
|
+
// 因为回溯方向是从目标往基址走,所以这里用 unshift 的逆序语义)
|
|
489
|
+
const newOffsets = path.offsets.slice();
|
|
490
|
+
newOffsets.push(off);
|
|
491
|
+
const dedupKey = storeKey + '|' + newOffsets.join(',');
|
|
492
|
+
if (seen.has(dedupKey))
|
|
493
|
+
continue;
|
|
494
|
+
seen.add(dedupKey);
|
|
495
|
+
out.push({ address: store, offsets: newOffsets });
|
|
496
|
+
}
|
|
497
|
+
}
|
|
498
|
+
}
|
|
499
|
+
void level;
|
|
500
|
+
return out;
|
|
501
|
+
}
|
|
502
|
+
isStatic(addr) {
|
|
503
|
+
for (const r of this.staticRanges) {
|
|
504
|
+
if (addr >= r.start && addr < r.end)
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
isExcludedRange(start, end) {
|
|
510
|
+
const ex = this.opts.excludeSegments;
|
|
511
|
+
if (!ex)
|
|
512
|
+
return false;
|
|
513
|
+
for (const r of ex) {
|
|
514
|
+
if (start < r.end && end > r.start)
|
|
515
|
+
return true;
|
|
516
|
+
}
|
|
517
|
+
return false;
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
exports.PointerScanner = PointerScanner;
|
|
521
|
+
/**
|
|
522
|
+
* 把偏移链渲染成 CE 风格的表达式。
|
|
523
|
+
*
|
|
524
|
+
* CE 显示顺序是"从基址到目标":
|
|
525
|
+
* `"game.exe"+00123ABC -> 0x10 -> 0x2C -> 0x8`
|
|
526
|
+
* 本实现的 offsets 数组即该顺序。
|
|
527
|
+
*/
|
|
528
|
+
function formatPointerPath(path, moduleOf) {
|
|
529
|
+
const mod = moduleOf?.(path.baseAddress);
|
|
530
|
+
const baseStr = mod
|
|
531
|
+
? `"${mod.name}"+${(path.baseAddress - mod.base).toString(16).toUpperCase().padStart(8, '0')}`
|
|
532
|
+
: `0x${path.baseAddress.toString(16).toUpperCase()}`;
|
|
533
|
+
const offs = path.offsets
|
|
534
|
+
.map((o) => (o < 0 ? `-${Math.abs(o).toString(16).toUpperCase()}` : o.toString(16).toUpperCase()))
|
|
535
|
+
.join(' -> ');
|
|
536
|
+
return offs ? `${baseStr} -> ${offs}` : baseStr;
|
|
537
|
+
}
|
|
538
|
+
/** 应用一条路径得到最终地址(便捷函数)。 */
|
|
539
|
+
function applyPointerPath(path, readPointer) {
|
|
540
|
+
let addr = path.baseAddress;
|
|
541
|
+
for (const off of path.offsets) {
|
|
542
|
+
addr = readPointer(addr) + BigInt(off);
|
|
543
|
+
}
|
|
544
|
+
return addr;
|
|
545
|
+
}
|
|
546
|
+
//# sourceMappingURL=pointer-scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pointer-scan.js","sourceRoot":"","sources":["../../../src/scanner/pointer-scan.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;;;AA6mBH,8CAYC;AAGD,4CASC;AAnoBD,4CAAqD;AACrD,oCAAiD;AAiHjD;;;;;;;;GAQG;AACH,MAAa,cAAc;IACR,IAAI,CAAU;IACd,IAAI,CAGA;IAErB,uBAAuB;IACf,UAAU,GAAsB,IAAI,CAAC;IAC7C,+BAA+B;IACvB,YAAY,GAA0C,EAAE,CAAC;IACjE,kCAAkC;IAC1B,eAAe,GAA0C,EAAE,CAAC;IAC5D,SAAS,GAA4B,IAAI,CAAC;IAElD,YAAY,OAAgB,EAAE,UAA8B,EAAE;QAC5D,IAAI,CAAC,OAAO,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACpB,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,IAAI,GAAG;YACV,GAAG,OAAO;YACV,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC;YAC/B,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI;YACpC,aAAa,EAAE,OAAO,CAAC,aAAa,KAAK,IAAI;YAC7C,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,CAAC;YACrD,oBAAoB,EAAE,OAAO,CAAC,oBAAoB,KAAK,IAAI;YAC3D,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI;YACvC,WAAW;YACX,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,CAAC;YACnC,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,CAAC;SACtC,CAAC;QACF,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC;QACpE,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC;YAAE,MAAM,IAAI,UAAU,CAAC,gBAAgB,CAAC,CAAC;IACtE,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,4BAA4B;IAC5B,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC;IAClC,CAAC;IAED,kBAAkB;IAClB,eAAe;QACb,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IACzB,CAAC;IAED,cAAc;IACd,IAAI,CAAC,aAAqB;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;QAEpC,MAAM,WAAW,GAAa,EAAE,CAAC;QACjC,eAAe;QACf,IAAI,OAAO,GAAkB,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACvE,MAAM,OAAO,GAAkB,EAAE,CAAC;QAClC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;QAEvD;;;;;WAKG;QACH,MAAM,OAAO,GAAG,CAAC,KAAa,EAAE,KAAoB,EAAQ,EAAE;YAC5D,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAChE,MAAM,KAAK,GAAgB;oBACzB,WAAW,EAAE,CAAC,CAAC,OAAO;oBACtB,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE;oBACpC,aAAa;iBACd,CAAC;gBACF,iCAAiC;gBACjC,IAAI,aAAa;oBAAE,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC;gBACvC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACtB,CAAC;QACH,CAAC,CAAC;QAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC;YACzD,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;YACnD,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAE9B,IAAI,aAAa,EAAE,CAAC;gBAClB,6BAA6B;gBAC7B,+CAA+C;gBAC/C,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,MAAM;gBAC7B,OAAO,GAAG,IAAI,CAAC;gBACf,SAAS;YACX,CAAC;YAED,IAAI,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACrB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU;oBAAE,MAAM;gBAC9E,MAAM;YACR,CAAC;YAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;gBAAE,MAAM;YAC7B,OAAO,GAAG,IAAI,CAAC;YACf,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,EAAE,CAAC;gBAC3E,2BAA2B;gBAC3B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;QAED,IAAI,YAAY,GAAG,OAAO,CAAC;QAC3B,IAAI,aAAa,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxC,4BAA4B;YAC5B,EAAE;YACF,kCAAkC;YAClC,uCAAuC;YACvC,0CAA0C;YAC1C,4BAA4B;YAC5B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAmB,CAAC;YAC/C,MAAM,cAAc,GAAG,CAAC,OAAe,EAAW,EAAE;gBAClD,IAAI,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACjC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBACpB,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAC3B,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC9B,CAAC;gBACD,OAAO,CAAC,CAAC;YACX,CAAC,CAAC;YACF,YAAY,GAAG,OAAO;iBACnB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;iBACvC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACb,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7B,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;gBAC7B,IAAI,EAAE,KAAK,EAAE;oBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBAC9B,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtD,IAAI,EAAE,KAAK,EAAE;oBAAE,OAAO,EAAE,GAAG,EAAE,CAAC;gBAC9B,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YAC3B,CAAC,CAAC;iBACD,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC9B,uCAAuC;YACvC,EAAE;YACF,wCAAwC;YACxC,sCAAsC;YACtC,gCAAgC;YAChC,yCAAyC;QAC3C,CAAC;QAED,wDAAwD;QACxD,EAAE;QACF,yBAAyB;QACzB,EAAE;QACF,0CAA0C;QAC1C,6CAA6C;QAC7C,uCAAuC;QACvC,mCAAmC;QACnC,EAAE;QACF,uCAAuC;QACvC,yCAAyC;QACzC,uBAAuB;QACvB,EAAE;QACF,+CAA+C;QAC/C,4CAA4C;QAC5C,4BAA4B;QAC5B,kCAAkC;QAClC,6CAA6C;QAC7C,EAAE;QACF,oCAAoC;QACpC,qCAAqC;QACrC,YAAY;QACZ,EAAE;QACF,gCAAgC;QAChC,mCAAmC;QACnC,kCAAkC;QAClC,+BAA+B;QAC/B,4BAA4B;QAC5B,EAAE;QACF,UAAU;QACV,sCAAsC;QACtC,kCAAkC;QAClC,qCAAqC;QACrC,yBAAyB;QACzB,EAAE;QACF,qCAAqC;QACrC,wBAAwB;QACxB,MAAM,eAAe,GAAG,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAkB,EAAE,CAAC;QACnC,IAAI,mBAAmB,GAAG,CAAC,CAAC;QAC5B,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,IAAI,EAAE,GAAG,KAAK,CAAC;YACf,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,eAAe,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;gBACrE,IAAI,CAAC;oBACH,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC;gBAChD,CAAC;gBAAC,MAAM,CAAC;oBACP,8BAA8B;gBAChC,CAAC;YACH,CAAC;YACD,IAAI,EAAE;gBAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBACvB,mBAAmB,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,uDAAuD;QACvD,EAAE;QACF,uBAAuB;QACvB,6BAA6B;QAC7B,kCAAkC;QAClC,EAAE;QACF,mCAAmC;QACnC,wCAAwC;QACxC,+CAA+C;QAC/C,yCAAyC;QACzC,EAAE;QACF,8BAA8B;QAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;QAC7F,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QACvC,IAAI,CAAC,SAAS,GAAG;YACf,eAAe,EAAE,IAAI,CAAC,gBAAgB;YACtC,YAAY,EAAE,IAAI,CAAC,gBAAgB;YACnC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;YAClC,WAAW;YACX,SAAS;YACT,WAAW,EAAE,MAAM,CAAC,MAAM;YAC1B,mBAAmB;YACnB,iCAAiC;YACjC,cAAc,EAAE,QAAQ,CAAC,MAAM;SAChC,CAAC;QACF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,IAAiB,EAAE,OAAkC;QAC/D,MAAM,IAAI,GAAG,OAAO,IAAI,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACnE,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;QAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB;IACrB,WAAW,CAAC,OAAe;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QACnC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChD,IAAI,GAAG,CAAC,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,YAAY,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,CAAC;IAED;;0EAEsE;IAE9D,gBAAgB,GAAG,CAAC,CAAC;IACrB,gBAAgB,GAAG,EAAE,CAAC;IAE9B,mBAAmB;IACX,gBAAgB;QACtB,IAAI,IAAI,CAAC,UAAU;YAAE,OAAO,IAAI,CAAC,UAAU,CAAC;QAE5C,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAEpC,4BAA4B;QAC5B,oCAAoC;QACpC,oCAAoC;QACpC,MAAM,eAAe,GAA0C,EAAE,CAAC;QAClE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAAE,SAAS;YACjD,eAAe,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,eAAe,GAAG,eAAe,CAAC;QAEvC,gBAAgB;QAChB,MAAM,QAAQ,GAA0C,EAAE,CAAC;QAC3D,MAAM,YAAY,GAA0C,EAAE,CAAC;QAE/D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,CAAC,CAAC,SAAS;gBAAE,SAAS;YAC3B,IAAI,CAAC,CAAC,CAAC,OAAO,GAAG,kBAAU,CAAC,KAAK,CAAC;gBAAE,SAAS;YAC7C,IAAI,CAAC,IAAA,oBAAU,EAAC,CAAC,CAAC,OAAO,CAAC;gBAAE,SAAS;YACrC,IAAI,CAAC,CAAC,UAAU,IAAI,EAAE;gBAAE,SAAS;YACjC,mCAAmC;YACnC,IAAI,CAAC,CAAC,UAAU,GAAG,WAAW;gBAAE,SAAS;YACzC,MAAM,GAAG,GAAG,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC;YACzC,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC;gBAAE,SAAS;YACvD,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;YAC7C,IAAI,CAAC,CAAC,IAAI,KAAK,iBAAS;gBAAE,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,CAAC;QAED,wCAAwC;QACxC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC9E,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAClF,IAAI,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC;YAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAElG,aAAa;QACb,6CAA6C;QAC7C,yCAAyC;QACzC,mBAAmB;QACnB,MAAM,OAAO,GAAmB,EAAE,CAAC;QACnC,IAAI,YAAY,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,eAAe,CAAC;QAEjE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;YACrB,OAAO,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;gBACtB,MAAM,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;gBACrF,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAC7C,YAAY,IAAI,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBACnC,IAAI,GAAG,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC;oBAC7B,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;oBACrB,SAAS;gBACX,CAAC;gBAED,wCAAwC;gBACxC,MAAM,KAAK,GAAG,GAAG,CAAC,MAAM,GAAG,WAAW,CAAC;gBACvC,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,IAAI,KAAK,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;oBACnD,MAAM,CAAC,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC;oBACvF,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,MAAM;wBAAE,SAAS;oBACzC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC;wBAAE,SAAS;oBAC1C,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;gBACxD,CAAC;gBAED,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACtD,CAAC;QAED,0DAA0D;QAC1D,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;QACzB,MAAM,aAAa,GAAG,IAAI,KAAK,CAAS,CAAC,CAAC,CAAC;QAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE;YAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;QAChE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACrE,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;YAC3B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3B,YAAY,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9C,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,YAAY,GAAG,YAAY,CAAC;QACjC,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;QACxC,IAAI,CAAC,gBAAgB,GAAG,YAAY,CAAC;QACrC,IAAI,CAAC,UAAU,GAAG,EAAE,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,gCAAgC;IACxB,kBAAkB,CAAC,IAAY;QACrC,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,CAAC;QACpC,oCAAoC;QACpC,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;YAChB,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,MAAM,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YACtB,IAAI,IAAI,GAAG,CAAC,CAAC,KAAK;gBAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;iBAC5B,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG;gBAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;gBAChC,OAAO,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;;;;;;;;OAWG;IACK,cAAc,CAAC,GAAe,EAAE,MAAc,EAAE,SAAiB;QACvE,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC1D,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;QACvD,MAAM,EAAE,GAAG,MAAM,GAAG,MAAM,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,gDAAgD;IACxC,UAAU,CAAC,GAAe,EAAE,KAAa;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK;gBAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;gBAC9B,EAAE,GAAG,GAAG,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,+CAA+C;IACvC,UAAU,CAAC,GAAe,EAAE,KAAa;QAC/C,MAAM,GAAG,GAAG,GAAG,CAAC,YAAY,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC,CAAC;QACX,IAAI,EAAE,GAAG,GAAG,CAAC,MAAM,CAAC;QACpB,OAAO,EAAE,GAAG,EAAE,EAAE,CAAC;YACf,MAAM,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,KAAK;gBAAE,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC;;gBAC/B,EAAE,GAAG,GAAG,CAAC;QAChB,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAED;;;OAGG;IACK,WAAW,CAAC,GAAe,EAAE,OAAsB,EAAE,KAAa;QACxE,MAAM,GAAG,GAAkB,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,MAAM,EAAE,SAAS,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;QAE3E,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;YAC3B,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YACrE,IAAI,IAAI,KAAK,EAAE;gBAAE,SAAS;YAE1B,iCAAiC;YACjC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAoB,CAAC;YAE7C,KAAK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,MAAM,KAAK,CAAC,IAAI,CAAC,oBAAoB,EAAE,CAAC;oBAC1C,2BAA2B;gBAC7B,CAAC;gBACD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS;oBAAE,SAAS;gBAC3C,IAAI,MAAM,GAAG,CAAC,IAAI,CAAC,oBAAoB;oBAAE,SAAS;gBAElD,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;gBACnC,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;oBACT,GAAG,GAAG,EAAE,CAAC;oBACT,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzB,CAAC;gBACD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC9C,CAAC;YAED,KAAK,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,IAAI,QAAQ,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;gBAC/B,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,EAAE,CAAC;oBAAE,SAAS;gBACtD,MAAM,IAAI,GACR,mBAAmB,GAAG,CAAC,IAAI,OAAO,CAAC,MAAM,GAAG,mBAAmB;oBAC7D,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,mBAAmB,CAAC;oBACvC,CAAC,CAAC,OAAO,CAAC;gBAEd,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,kCAAkC;oBAClC,sCAAsC;oBACtC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;oBACxC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACrB,MAAM,QAAQ,GAAG,QAAQ,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACvD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;wBAAE,SAAS;oBACjC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACnB,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,KAAK,CAAC;QACX,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,QAAQ,CAAC,IAAY;QAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,IAAI,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,GAAG,CAAC,CAAC,GAAG;gBAAE,OAAO,IAAI,CAAC;QACnD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,eAAe,CAAC,KAAa,EAAE,GAAW;QAChD,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;QACrC,IAAI,CAAC,EAAE;YAAE,OAAO,KAAK,CAAC;QACtB,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACnB,IAAI,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,CAAC,KAAK;gBAAE,OAAO,IAAI,CAAC;QAClD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAveD,wCAueC;AAED;;;;;;GAMG;AACH,SAAgB,iBAAiB,CAC/B,IAAiB,EACjB,QAAkE;IAElE,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;QAC9F,CAAC,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO;SACtB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;SACjG,IAAI,CAAC,MAAM,CAAC,CAAC;IAChB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAClD,CAAC;AAED,0BAA0B;AAC1B,SAAgB,gBAAgB,CAC9B,IAAiB,EACjB,WAAqC;IAErC,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/B,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;IACzC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|