@samlab-corp/sfm-node 0.2.0 → 0.4.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.
Files changed (54) hide show
  1. package/dist/commands/data.d.ts +4 -4
  2. package/dist/commands/data.js +12 -12
  3. package/dist/commands/data.js.map +1 -1
  4. package/dist/commands/fingerprint.d.ts +23 -23
  5. package/dist/commands/fingerprint.d.ts.map +1 -1
  6. package/dist/commands/fingerprint.js +114 -114
  7. package/dist/commands/fingerprint.js.map +1 -1
  8. package/dist/commands/firmware.d.ts +5 -5
  9. package/dist/commands/firmware.d.ts.map +1 -1
  10. package/dist/commands/firmware.js +32 -32
  11. package/dist/commands/firmware.js.map +1 -1
  12. package/dist/commands/freescan.d.ts +16 -16
  13. package/dist/commands/freescan.d.ts.map +1 -1
  14. package/dist/commands/freescan.js +41 -41
  15. package/dist/commands/freescan.js.map +1 -1
  16. package/dist/commands/index.d.ts +12 -12
  17. package/dist/commands/index.d.ts.map +1 -1
  18. package/dist/commands/index.js +14 -14
  19. package/dist/commands/index.js.map +1 -1
  20. package/dist/commands/system.d.ts +12 -12
  21. package/dist/commands/system.d.ts.map +1 -1
  22. package/dist/commands/system.js +14 -14
  23. package/dist/commands/system.js.map +1 -1
  24. package/dist/constants/protocol.d.ts +25 -0
  25. package/dist/constants/protocol.d.ts.map +1 -1
  26. package/dist/constants/protocol.js +26 -1
  27. package/dist/constants/protocol.js.map +1 -1
  28. package/dist/core/client.d.ts +33 -21
  29. package/dist/core/client.d.ts.map +1 -1
  30. package/dist/core/client.js +72 -52
  31. package/dist/core/client.js.map +1 -1
  32. package/dist/core/crypto.d.ts +19 -19
  33. package/dist/core/crypto.js +26 -26
  34. package/dist/core/crypto.js.map +1 -1
  35. package/dist/core/errors.d.ts +6 -6
  36. package/dist/core/errors.d.ts.map +1 -1
  37. package/dist/core/errors.js +46 -32
  38. package/dist/core/errors.js.map +1 -1
  39. package/dist/core/index.d.ts +3 -3
  40. package/dist/core/index.d.ts.map +1 -1
  41. package/dist/core/index.js +5 -2
  42. package/dist/core/index.js.map +1 -1
  43. package/dist/core/packet.d.ts +81 -41
  44. package/dist/core/packet.d.ts.map +1 -1
  45. package/dist/core/packet.js +256 -60
  46. package/dist/core/packet.js.map +1 -1
  47. package/dist/core/serial.d.ts +37 -27
  48. package/dist/core/serial.d.ts.map +1 -1
  49. package/dist/core/serial.js +91 -62
  50. package/dist/core/serial.js.map +1 -1
  51. package/dist/core/tcp.d.ts +14 -14
  52. package/dist/core/tcp.js +17 -17
  53. package/dist/core/tcp.js.map +1 -1
  54. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"serial.d.ts","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serial.d.ts","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  /**
3
- * SFM Serial Port Communication Module
3
+ * SFM 시리얼 포트 통신 모듈
4
4
  *
5
- * Based on Ghidra decompilation analysis - FUN_140010350 (Open), FUN_140010280 (Close),
5
+ * Ghidra 디컴파일 분석 기반 - FUN_140010350 (Open), FUN_140010280 (Close),
6
6
  * FUN_140010420 (Read), FUN_140010770 (Write)
7
7
  *
8
- * Serial settings:
8
+ * 시리얼 설정:
9
9
  * BaudRate: 115200 (0x1C200)
10
10
  * ByteSize: 8
11
11
  * Parity: None
@@ -16,16 +16,16 @@ Object.defineProperty(exports, "__esModule", { value: true });
16
16
  exports.SfmSerial = void 0;
17
17
  const serialport_1 = require("serialport");
18
18
  const DEFAULT_BAUD_RATE = 115200;
19
- const WRITE_CHUNK_SIZE = 0x40; // 64 bytes per write chunk (from FUN_140010770)
19
+ const WRITE_CHUNK_SIZE = 0x40; // 64바이트 쓰기 청크 (FUN_140010770 기반)
20
20
  const READ_TIMEOUT_MS = 3000;
21
21
  const INTER_CHAR_TIMEOUT_MS = 50; // ReadIntervalTimeout (FUN_140010630 line 862)
22
- const WRITE_STALL_LIMIT = 30; // 0x1e retries before abort (FUN_140010770 lines 773-775)
22
+ const WRITE_STALL_LIMIT = 30; // 0x1e 재시도 중단 (FUN_140010770 lines 773-775)
23
23
  class SfmSerial {
24
24
  constructor(options = {}) {
25
25
  this._reconnecting = false;
26
26
  this._reconnectTimer = null;
27
27
  this.port = null;
28
- this.portPath = options.path || '';
28
+ this.portPath = options.path || "";
29
29
  this.baudRate = options.baudRate || DEFAULT_BAUD_RATE;
30
30
  this.isOpen = false;
31
31
  this._readBuffer = Buffer.alloc(0);
@@ -34,47 +34,49 @@ class SfmSerial {
34
34
  this._readTimer = null;
35
35
  this._interCharTimer = null;
36
36
  this._onDisconnect = null;
37
- this._autoReconnect = options.autoReconnect?.enabled ? options.autoReconnect : null;
38
- // CommTimeouts detail settings (FUN_140010630 lines 860-868)
37
+ this._autoReconnect = options.autoReconnect?.enabled
38
+ ? options.autoReconnect
39
+ : null;
40
+ // CommTimeouts 상세 설정 (FUN_140010630 lines 860-868)
39
41
  this.interCharTimeout = options.interCharTimeout ?? INTER_CHAR_TIMEOUT_MS;
40
42
  }
41
- /** Set auto-reconnect options (constructor/internal use) */
43
+ /** 자동 재연결 옵션 설정 (생성자/내부 사용) */
42
44
  setAutoReconnect(options) {
43
45
  this._autoReconnect = options?.enabled ? options : null;
44
46
  if (!options?.enabled) {
45
47
  this._stopReconnect();
46
48
  }
47
49
  }
48
- /** Set auto-reconnect callbacks only (preserves existing enabled/maxRetries/interval) */
50
+ /** 자동 재연결 콜백만 설정 (기존 enabled/maxRetries/interval 유지) */
49
51
  setAutoReconnectCallbacks(callbacks) {
50
52
  if (this._autoReconnect) {
51
53
  Object.assign(this._autoReconnect, callbacks);
52
54
  }
53
55
  }
54
- /** Whether reconnection is in progress */
56
+ /** 재연결 진행 여부 */
55
57
  get isReconnecting() {
56
58
  return this._reconnecting;
57
59
  }
58
- /** Set disconnect callback */
60
+ /** 연결 해제 콜백 설정 */
59
61
  setOnDisconnect(callback) {
60
62
  this._onDisconnect = callback;
61
63
  }
62
64
  /**
63
- * List available serial ports
64
- * (corresponds to registry HARDWARE\DEVICEMAP\SERIALCOMM)
65
+ * 사용 가능한 시리얼 포트 목록 조회
66
+ * (레지스트리 HARDWARE\DEVICEMAP\SERIALCOMM 대응)
65
67
  */
66
68
  static async listPorts() {
67
69
  const ports = await serialport_1.SerialPort.list();
68
- return ports.map(p => ({
70
+ return ports.map((p) => ({
69
71
  path: p.path,
70
- manufacturer: p.manufacturer || '',
71
- serialNumber: p.serialNumber || '',
72
- vendorId: p.vendorId || '',
73
- productId: p.productId || '',
72
+ manufacturer: p.manufacturer || "",
73
+ serialNumber: p.serialNumber || "",
74
+ vendorId: p.vendorId || "",
75
+ productId: p.productId || "",
74
76
  }));
75
77
  }
76
78
  /**
77
- * Open serial port
79
+ * 시리얼 포트 열기
78
80
  * (FUN_140010350: CreateFileA + SetCommState + SetCommTimeouts)
79
81
  */
80
82
  async open(path) {
@@ -83,25 +85,25 @@ class SfmSerial {
83
85
  }
84
86
  this.portPath = path || this.portPath;
85
87
  if (!this.portPath) {
86
- throw new Error('Port path must be specified');
88
+ throw new Error("Port path must be specified");
87
89
  }
88
90
  return new Promise((resolve, reject) => {
89
91
  this.port = new serialport_1.SerialPort({
90
92
  path: this.portPath,
91
93
  baudRate: this.baudRate,
92
94
  dataBits: 8,
93
- parity: 'none',
95
+ parity: "none",
94
96
  stopBits: 1,
95
- rtscts: true, // RTS/CTS flow control (DCB bits 0xfffffcff | 3)
97
+ rtscts: true, // RTS/CTS 흐름 제어 (DCB bits 0xfffffcff | 3)
96
98
  autoOpen: false,
97
99
  });
98
- this.port.on('data', (data) => {
100
+ this.port.on("data", (data) => {
99
101
  this._readBuffer = Buffer.concat([this._readBuffer, data]);
100
102
  if (this._readResolve) {
101
103
  this._resolveRead();
102
104
  }
103
105
  });
104
- this.port.on('error', (err) => {
106
+ this.port.on("error", (err) => {
105
107
  if (this._readReject) {
106
108
  this._readReject(err);
107
109
  this._readResolve = null;
@@ -113,12 +115,12 @@ class SfmSerial {
113
115
  this._handleUnexpectedDisconnect(err);
114
116
  }
115
117
  });
116
- this.port.on('close', () => {
118
+ this.port.on("close", () => {
117
119
  if (this.isOpen) {
118
120
  this.isOpen = false;
119
121
  this._readBuffer = Buffer.alloc(0);
120
122
  if (this._readReject) {
121
- this._readReject(new Error('Serial port disconnected'));
123
+ this._readReject(new Error("Serial port disconnected"));
122
124
  this._readResolve = null;
123
125
  this._readReject = null;
124
126
  }
@@ -133,24 +135,26 @@ class SfmSerial {
133
135
  return;
134
136
  }
135
137
  this.isOpen = true;
136
- // DTR signal setup (FUN_140010630 line 886: EscapeCommFunction(handle, 5) = SETDTR)
138
+ // DTR 신호 설정 (FUN_140010630 line 886: EscapeCommFunction(handle, 5) = SETDTR)
137
139
  this.port.set({ dtr: true }, () => {
138
- // PurgeComm(hFile, 0xF) - Clear both TX/RX
139
- this.purgeAll().then(() => resolve()).catch(() => resolve());
140
+ // PurgeComm(hFile, 0xF) - TX/RX 모두 클리어
141
+ this.purgeAll()
142
+ .then(() => resolve())
143
+ .catch(() => resolve());
140
144
  });
141
145
  });
142
146
  });
143
147
  }
144
148
  /**
145
- * Close serial port
149
+ * 시리얼 포트 닫기
146
150
  * (FUN_140010280: PurgeComm + CloseHandle)
147
151
  */
148
152
  async close() {
149
153
  if (!this.isOpen || !this.port)
150
154
  return;
151
- this.isOpen = false; // Prevent _onDisconnect call from close event
152
- this._stopReconnect(); // Clean up reconnect timer
153
- // Clean up pending read timer/promise
155
+ this.isOpen = false; // close 이벤트에서 _onDisconnect 호출 방지
156
+ this._stopReconnect(); // 재연결 타이머 정리
157
+ // 대기 중인 읽기 타이머/프로미스 정리
154
158
  if (this._readTimer) {
155
159
  clearTimeout(this._readTimer);
156
160
  this._readTimer = null;
@@ -160,31 +164,43 @@ class SfmSerial {
160
164
  this._interCharTimer = null;
161
165
  }
162
166
  if (this._readReject) {
163
- this._readReject(new Error('Port closed'));
167
+ this._readReject(new Error("Port closed"));
164
168
  this._readResolve = null;
165
169
  this._readReject = null;
166
170
  }
167
171
  try {
168
172
  await this.purgeAll();
169
173
  }
170
- catch { /* port may already be in error state */ }
174
+ catch {
175
+ /* 포트가 이미 에러 상태일 수 있음 */
176
+ }
171
177
  return new Promise((resolve) => {
172
- this.port.removeAllListeners(); // Clean up event listeners
178
+ this.port.removeAllListeners(); // 이벤트 리스너 정리
173
179
  this.port.close(() => {
174
180
  this._readBuffer = Buffer.alloc(0);
175
- this.port = null; // Release reference
176
- // Allow time for OS to fully release fd lock
181
+ this.port = null; // 참조 해제
182
+ // OS가 fd 잠금을 완전히 해제할 시간 확보
177
183
  setTimeout(resolve, 100);
178
184
  });
179
185
  });
180
186
  }
181
187
  /**
182
- * Write data (chunked)
183
- * (FUN_140010770: 64-byte chunk WriteFile)
188
+ * 데이터 쓰기 (청크 분할)
189
+ * (FUN_140010770: 64바이트 청크 WriteFile)
190
+ *
191
+ * 시리얼 포트에 데이터를 한 번에 보내지 않고 64바이트(WRITE_CHUNK_SIZE)씩
192
+ * 쪼개서 전송한다. 각 청크 전송 후 drain()으로 하드웨어 전송 완료를 대기한다.
193
+ *
194
+ * 64바이트 단위로 분할하는 이유:
195
+ * - USB-Serial 변환기(FTDI, CH340 등)의 USB bulk transfer 단위가 64바이트
196
+ * - 시리얼 TX FIFO 버퍼 크기 제한으로 큰 데이터를 한 번에 넣으면 overflow 가능
197
+ *
198
+ * 일반 패킷(13바이트)은 1회로 끝나지만, 템플릿 데이터(지문 등) 전송 시
199
+ * 수백~수천 바이트가 될 수 있어 분할 전송이 필요하다.
184
200
  */
185
201
  async write(data) {
186
202
  if (!this.isOpen)
187
- throw new Error('Port is not open');
203
+ throw new Error("Port is not open");
188
204
  const buf = Buffer.isBuffer(data) ? data : Buffer.from(data);
189
205
  let offset = 0;
190
206
  while (offset < buf.length) {
@@ -216,13 +232,13 @@ class SfmSerial {
216
232
  }
217
233
  }
218
234
  /**
219
- * Read data
220
- * (FUN_140010420: ReadFile with timeout)
235
+ * 데이터 읽기
236
+ * (FUN_140010420: 타임아웃 포함 ReadFile)
221
237
  */
222
238
  async read(expectedLength, timeoutMs = READ_TIMEOUT_MS) {
223
239
  if (!this.isOpen)
224
- throw new Error('Port is not open');
225
- // Return immediately if buffer already has enough data
240
+ throw new Error("Port is not open");
241
+ // 버퍼에 충분한 데이터가 이미 있으면 즉시 반환
226
242
  if (this._readBuffer.length >= expectedLength) {
227
243
  const result = this._readBuffer.subarray(0, expectedLength);
228
244
  this._readBuffer = this._readBuffer.subarray(expectedLength);
@@ -243,6 +259,7 @@ class SfmSerial {
243
259
  this._readResolve = () => {
244
260
  if (settled)
245
261
  return;
262
+ // 예상되는 문자
246
263
  if (this._readBuffer.length >= expectedLength) {
247
264
  settled = true;
248
265
  cleanup();
@@ -251,15 +268,27 @@ class SfmSerial {
251
268
  resolve(Buffer.from(result));
252
269
  return;
253
270
  }
254
- // Inter-char timeout: if partial data arrived and no more data
255
- // for interCharTimeout ms, return available data (ReadIntervalTimeout behavior)
271
+ // 문자 타임아웃 (Windows ReadIntervalTimeout 재현)
272
+ //
273
+ // 목적: 요청한 바이트 수(expectedLength)보다 적은 데이터만 도착하고
274
+ // 디바이스가 나머지를 보내지 않는 비정상 상황에서,
275
+ // 전체 타임아웃(3초)까지 기다리지 않고 빠르게 부분 데이터를 반환한다.
276
+ //
277
+ // 동작: data 이벤트가 올 때마다 타이머를 리셋(50ms)하고,
278
+ // 50ms 동안 추가 데이터가 없으면 "더 이상 안 온다"고 판단하여
279
+ // 현재까지 쌓인 버퍼를 그대로 반환한다.
280
+ //
281
+ // 발생 시나리오: 패킷 손상, 디바이스 오류, 통신 중 연결 불안정 등
282
+ // 정상 통신에서는 expectedLength를 충족하여 위 블록에서 즉시 반환되므로
283
+ // 이 경로를 타지 않는다.
256
284
  if (this._readBuffer.length > 0 && this.interCharTimeout > 0) {
257
285
  if (this._interCharTimer)
258
286
  clearTimeout(this._interCharTimer);
259
287
  this._interCharTimer = setTimeout(() => {
260
288
  if (settled)
261
289
  return;
262
- if (this._readBuffer.length > 0 && this._readBuffer.length < expectedLength) {
290
+ if (this._readBuffer.length > 0 &&
291
+ this._readBuffer.length < expectedLength) {
263
292
  settled = true;
264
293
  cleanup();
265
294
  const available = Buffer.from(this._readBuffer);
@@ -276,7 +305,7 @@ class SfmSerial {
276
305
  cleanup();
277
306
  reject(err);
278
307
  };
279
- // Overall timeout
308
+ // 전체 타임아웃
280
309
  this._readTimer = setTimeout(() => {
281
310
  if (settled)
282
311
  return;
@@ -291,23 +320,23 @@ class SfmSerial {
291
320
  reject(new Error(`Read timeout (${timeoutMs}ms)`));
292
321
  }
293
322
  }, timeoutMs);
294
- // Check if data already arrived
323
+ // 이미 도착한 데이터 확인
295
324
  this._readResolve();
296
325
  });
297
326
  }
298
327
  /**
299
- * Read single byte (for handshake)
328
+ * 단일 바이트 읽기 (핸드셰이크용)
300
329
  */
301
330
  async readByte(timeoutMs = READ_TIMEOUT_MS) {
302
331
  const buf = await this.read(1, timeoutMs);
303
332
  return buf[0];
304
333
  }
305
334
  /**
306
- * Read until specific string (for firmware upgrade handshake)
335
+ * 특정 문자열까지 읽기 (펌웨어 업그레이드 핸드셰이크용)
307
336
  */
308
337
  async readUntil(marker, timeoutMs = 5000) {
309
338
  const startTime = Date.now();
310
- let accumulated = '';
339
+ let accumulated = "";
311
340
  while (Date.now() - startTime < timeoutMs) {
312
341
  try {
313
342
  const byte = await this.readByte(100);
@@ -317,13 +346,13 @@ class SfmSerial {
317
346
  }
318
347
  }
319
348
  catch {
320
- // timeout on single byte, continue
349
+ // 단일 바이트 타임아웃, 계속
321
350
  }
322
351
  }
323
352
  throw new Error(`Marker wait timeout: "${marker}" (${timeoutMs}ms)`);
324
353
  }
325
354
  /**
326
- * Clear RX buffer (PurgeComm(hFile, 0xA) - PURGE_RXABORT | PURGE_RXCLEAR)
355
+ * RX 버퍼 클리어 (PurgeComm(hFile, 0xA) - PURGE_RXABORT | PURGE_RXCLEAR)
327
356
  * (FUN_1400101f0)
328
357
  */
329
358
  async purgeRX() {
@@ -337,7 +366,7 @@ class SfmSerial {
337
366
  }
338
367
  }
339
368
  /**
340
- * Clear TX buffer (PurgeComm(hFile, 0x5) - PURGE_TXABORT | PURGE_TXCLEAR)
369
+ * TX 버퍼 클리어 (PurgeComm(hFile, 0x5) - PURGE_TXABORT | PURGE_TXCLEAR)
341
370
  * (FUN_140010230)
342
371
  */
343
372
  async purgeTX() {
@@ -350,7 +379,7 @@ class SfmSerial {
350
379
  }
351
380
  }
352
381
  /**
353
- * Clear both TX/RX (PurgeComm(hFile, 0xF))
382
+ * TX/RX 모두 클리어 (PurgeComm(hFile, 0xF))
354
383
  */
355
384
  async purgeAll() {
356
385
  await this.purgeTX();
@@ -371,7 +400,7 @@ class SfmSerial {
371
400
  let attempt = 0;
372
401
  const tryReconnect = async () => {
373
402
  if (!this._reconnecting)
374
- return; // stopReconnect called
403
+ return; // stopReconnect 호출됨
375
404
  const maxRetries = this._autoReconnect?.maxRetries ?? 5;
376
405
  const interval = this._autoReconnect?.interval ?? 2000;
377
406
  attempt++;
@@ -379,7 +408,7 @@ class SfmSerial {
379
408
  try {
380
409
  await this.open();
381
410
  if (!this._reconnecting)
382
- return; // stopReconnect called during open()
411
+ return; // open() stopReconnect 호출됨
383
412
  this._reconnecting = false;
384
413
  if (this._reconnectTimer) {
385
414
  clearTimeout(this._reconnectTimer);
@@ -389,14 +418,14 @@ class SfmSerial {
389
418
  }
390
419
  catch (err) {
391
420
  if (!this._reconnecting)
392
- return; // stopReconnect called during open()
421
+ return; // open() stopReconnect 호출됨
393
422
  if (maxRetries > 0 && attempt >= maxRetries) {
394
423
  this._reconnecting = false;
395
424
  if (this._reconnectTimer) {
396
425
  clearTimeout(this._reconnectTimer);
397
426
  this._reconnectTimer = null;
398
427
  }
399
- const failError = new Error(`Reconnect failed: gave up after ${maxRetries} attempts (cause: ${originalError?.message || 'unknown'})`);
428
+ const failError = new Error(`Reconnect failed: gave up after ${maxRetries} attempts (cause: ${originalError?.message || "unknown"})`);
400
429
  this._autoReconnect?.onFailed?.(failError);
401
430
  this._onDisconnect?.(originalError);
402
431
  }
@@ -1 +1 @@
1
- {"version":3,"file":"serial.js","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"serial.js","sourceRoot":"","sources":["../../src/core/serial.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;GAYG;;;AAEH,2CAAwC;AAExC,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,gBAAgB,GAAG,IAAI,CAAC,CAAC,iCAAiC;AAChE,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,qBAAqB,GAAG,EAAE,CAAC,CAAC,+CAA+C;AACjF,MAAM,iBAAiB,GAAG,EAAE,CAAC,CAAC,8CAA8C;AAsC5E,MAAa,SAAS;IAiBpB,YAAY,UAA4B,EAAE;QAHlC,kBAAa,GAAG,KAAK,CAAC;QACtB,oBAAe,GAAyC,IAAI,CAAC;QAGnE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,iBAAiB,CAAC;QACtD,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC5B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,EAAE,OAAO;YAClD,CAAC,CAAC,OAAO,CAAC,aAAa;YACvB,CAAC,CAAC,IAAI,CAAC;QAET,mDAAmD;QACnD,IAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,IAAI,qBAAqB,CAAC;IAC5E,CAAC;IAED,+BAA+B;IAC/B,gBAAgB,CAAC,OAAoC;QACnD,IAAI,CAAC,cAAc,GAAG,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,EAAE,CAAC;QACxB,CAAC;IACH,CAAC;IAED,wDAAwD;IACxD,yBAAyB,CAAC,SAAiC;QACzD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,kBAAkB;IAClB,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,kBAAkB;IAClB,eAAe,CAAC,QAA0C;QACxD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,KAAK,CAAC,SAAS;QACpB,MAAM,KAAK,GAAG,MAAM,uBAAU,CAAC,IAAI,EAAE,CAAC;QACtC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACvB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;YAClC,YAAY,EAAE,CAAC,CAAC,YAAY,IAAI,EAAE;YAClC,QAAQ,EAAE,CAAC,CAAC,QAAQ,IAAI,EAAE;YAC1B,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,EAAE;SAC7B,CAAC,CAAC,CAAC;IACN,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CAAC,IAAa;QACtB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,IAAI,GAAG,IAAI,uBAAU,CAAC;gBACzB,IAAI,EAAE,IAAI,CAAC,QAAQ;gBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;gBACvB,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,CAAC;gBACX,MAAM,EAAE,IAAI,EAAE,0CAA0C;gBACxD,QAAQ,EAAE,KAAK;aAChB,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;gBACpC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC;gBAC3D,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;oBACtB,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAU,EAAE,EAAE;gBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;oBACrB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;oBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;gBAC1B,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;oBACpB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAI,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC;gBACxC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACzB,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBAChB,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;oBACpB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;oBACnC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;wBACrB,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC,CAAC;wBACxD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;wBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;oBAC1B,CAAC;oBACD,IAAI,CAAC,2BAA2B,EAAE,CAAC;gBACrC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,IAAI,GAAG,EAAE,CAAC;oBACR,IAAI,CAAC,IAAI,EAAE,kBAAkB,EAAE,CAAC;oBAChC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;oBACjB,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACzD,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;gBAEnB,6EAA6E;gBAC7E,IAAI,CAAC,IAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE;oBACjC,uCAAuC;oBACvC,IAAI,CAAC,QAAQ,EAAE;yBACZ,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;yBACrB,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5B,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI;YAAE,OAAO;QAEvC,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,kCAAkC;QACvD,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,aAAa;QAEpC,uBAAuB;QACvB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;QACD,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;YAC3C,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxB,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,CAAC,IAAK,CAAC,kBAAkB,EAAE,CAAC,CAAC,aAAa;YAC9C,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,QAAQ;gBAC1B,2BAA2B;gBAC3B,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC3B,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,KAAK,CAAC,IAAyB;QACnC,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAEtD,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,OAAO,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC;YAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5D,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YACxC,IAAI,OAAO,GAAG,CAAC,CAAC;YAEhB,OAAO,OAAO,GAAG,iBAAiB,EAAE,CAAC;gBACnC,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,EAAE;oBACrD,IAAI,CAAC,IAAI,CAAC,IAAI;wBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;oBACtC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE;wBAC7B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;4BACtB,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;wBACxB,CAAC;wBACD,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,EAAE;4BAC3B,OAAO,CAAC,CAAC,QAAQ,CAAC,CAAC;wBACrB,CAAC,CAAC,CAAC;oBACL,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBAEH,IAAI,OAAO,EAAE,CAAC;oBACZ,MAAM;gBACR,CAAC;gBAED,OAAO,EAAE,CAAC;gBACV,IAAI,OAAO,IAAI,iBAAiB,EAAE,CAAC;oBACjC,MAAM,IAAI,KAAK,CACb,yBAAyB,iBAAiB,mCAAmC,MAAM,EAAE,CACtF,CAAC;gBACJ,CAAC;YACH,CAAC;YAED,MAAM,GAAG,GAAG,CAAC;QACf,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,IAAI,CACR,cAAsB,EACtB,SAAS,GAAG,eAAe;QAE3B,IAAI,CAAC,IAAI,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QAEtD,4BAA4B;QAC5B,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;YAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,OAAO,GAAG,KAAK,CAAC;YAEpB,MAAM,OAAO,GAAG,GAAG,EAAE;gBACnB,IAAI,IAAI,CAAC,UAAU;oBAAE,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,eAAe;oBAAE,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBAC7D,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YAC1B,CAAC,CAAC;YAEF,IAAI,CAAC,YAAY,GAAG,GAAG,EAAE;gBACvB,IAAI,OAAO;oBAAE,OAAO;gBACpB,UAAU;gBACV,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;oBAC9C,OAAO,GAAG,IAAI,CAAC;oBACf,OAAO,EAAE,CAAC;oBACV,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC;oBAC5D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;oBAC7D,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;oBAC7B,OAAO;gBACT,CAAC;gBAED,6CAA6C;gBAC7C,EAAE;gBACF,+CAA+C;gBAC/C,oCAAoC;gBACpC,gDAAgD;gBAChD,EAAE;gBACF,uCAAuC;gBACvC,8CAA8C;gBAC9C,8BAA8B;gBAC9B,EAAE;gBACF,yCAAyC;gBACzC,gDAAgD;gBAChD,gBAAgB;gBAChB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,EAAE,CAAC;oBAC7D,IAAI,IAAI,CAAC,eAAe;wBAAE,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBAC7D,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,GAAG,EAAE;wBACrC,IAAI,OAAO;4BAAE,OAAO;wBACpB,IACE,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;4BAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,cAAc,EACxC,CAAC;4BACD,OAAO,GAAG,IAAI,CAAC;4BACf,OAAO,EAAE,CAAC;4BACV,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;4BAChD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;4BACnC,OAAO,CAAC,SAAS,CAAC,CAAC;wBACrB,CAAC;oBACH,CAAC,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC,CAAC;YAEF,IAAI,CAAC,WAAW,GAAG,CAAC,GAAU,EAAE,EAAE;gBAChC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,OAAO,EAAE,CAAC;gBACV,MAAM,CAAC,GAAG,CAAC,CAAC;YACd,CAAC,CAAC;YAEF,UAAU;YACV,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,IAAI,OAAO;oBAAE,OAAO;gBACpB,OAAO,GAAG,IAAI,CAAC;gBACf,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;gBAChD,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnC,OAAO,EAAE,CAAC;gBACV,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,SAAS,CAAC,CAAC;gBACrB,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,SAAS,KAAK,CAAC,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC,EAAE,SAAS,CAAC,CAAC;YAEd,gBAAgB;YAChB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ,CAAC,SAAS,GAAG,eAAe;QACxC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;QAC1C,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;IAChB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,SAAS,CAAC,MAAc,EAAE,SAAS,GAAG,IAAI;QAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,IAAI,WAAW,GAAG,EAAE,CAAC;QAErB,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,GAAG,SAAS,EAAE,CAAC;YAC1C,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACtC,WAAW,IAAI,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;gBACzC,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACjC,OAAO,WAAW,CAAC;gBACrB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kBAAkB;YACpB,CAAC;QACH,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,yBAAyB,MAAM,MAAM,SAAS,KAAK,CAAC,CAAC;IACvE,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YAC7B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,IAAI,CAAC,IAAK,CAAC,KAAK,CAAC,GAAG,EAAE;oBACpB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,QAAQ;QACZ,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;QACrB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;IAEO,2BAA2B,CAAC,KAAa;QAC/C,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACxB,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,aAAqB;QACnD,IAAI,IAAI,CAAC,aAAa;YAAE,OAAO;QAC/B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;QAE1B,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,MAAM,YAAY,GAAG,KAAK,IAAI,EAAE;YAC9B,IAAI,CAAC,IAAI,CAAC,aAAa;gBAAE,OAAO,CAAC,oBAAoB;YAErD,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,UAAU,IAAI,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,IAAI,CAAC;YAEvD,OAAO,EAAE,CAAC;YACV,IAAI,CAAC,cAAc,EAAE,OAAO,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YAEpD,IAAI,CAAC;gBACH,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAE,OAAO,CAAC,6BAA6B;gBAC9D,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;gBAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;oBACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBAC9B,CAAC;gBACD,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE,CAAC;YACzC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,IAAI,CAAC,aAAa;oBAAE,OAAO,CAAC,6BAA6B;gBAC9D,IAAI,UAAU,GAAG,CAAC,IAAI,OAAO,IAAI,UAAU,EAAE,CAAC;oBAC5C,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;oBAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;wBACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;wBACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;oBAC9B,CAAC;oBACD,MAAM,SAAS,GAAG,IAAI,KAAK,CACzB,mCAAmC,UAAU,qBAAqB,aAAa,EAAE,OAAO,IAAI,SAAS,GAAG,CACzG,CAAC;oBACF,IAAI,CAAC,cAAc,EAAE,QAAQ,EAAE,CAAC,SAAS,CAAC,CAAC;oBAC3C,IAAI,CAAC,aAAa,EAAE,CAAC,aAAa,CAAC,CAAC;gBACtC,CAAC;qBAAM,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;oBAC9B,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC,CAAC;QAEF,MAAM,eAAe,GAAG,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,IAAI,CAAC;QAC9D,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACnE,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;QAC3B,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,YAAY,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACnC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;QAC9B,CAAC;IACH,CAAC;IAEO,YAAY;QAClB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,IAAI,CAAC,YAAY,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;CACF;AAjeD,8BAieC"}
@@ -1,13 +1,13 @@
1
1
  /**
2
- * SFM TCP/IP Communication Module
2
+ * SFM TCP/IP 통신 모듈
3
3
  *
4
- * Transmits the same packet protocol as serial port over TCP socket.
5
- * Provides the same interface as SfmSerial (open, close, read, write)
6
- * for transparent substitution in SfmClient.
4
+ * 시리얼 포트와 동일한 패킷 프로토콜을 TCP 소켓으로 전송한다.
5
+ * SfmSerial과 동일한 인터페이스(open, close, read, write)를 제공하여
6
+ * SfmClient에서 투명하게 대체 가능하다.
7
7
  *
8
- * Decompilation analysis:
9
- * - "TCP Port" @ 14004f280: TCP port configuration string
10
- * - Protocol packet structure is identical to serial (13/15/35 bytes)
8
+ * 디컴파일 분석:
9
+ * - "TCP Port" @ 14004f280: TCP 포트 설정 문자열
10
+ * - 프로토콜 패킷 구조는 시리얼과 동일 (13/15/35바이트)
11
11
  */
12
12
  export interface SfmTcpOptions {
13
13
  host?: string;
@@ -24,31 +24,31 @@ export declare class SfmTcp {
24
24
  private _readTimer;
25
25
  constructor(options?: SfmTcpOptions);
26
26
  /**
27
- * Open TCP connection
27
+ * TCP 연결 열기
28
28
  */
29
29
  open(hostOrPath?: string): Promise<void>;
30
30
  /**
31
- * Close TCP connection
31
+ * TCP 연결 닫기
32
32
  */
33
33
  close(): Promise<void>;
34
34
  /**
35
- * Write data (TCP doesn't need chunking, but interface-compatible)
35
+ * 데이터 쓰기 (TCP 청크 분할 불필요, 인터페이스 호환용)
36
36
  */
37
37
  write(data: Buffer | Uint8Array): Promise<void>;
38
38
  /**
39
- * Read data (same interface as SfmSerial.read)
39
+ * 데이터 읽기 (SfmSerial.read와 동일한 인터페이스)
40
40
  */
41
41
  read(expectedLength: number, timeoutMs?: number): Promise<Buffer>;
42
42
  /**
43
- * Read single byte
43
+ * 단일 바이트 읽기
44
44
  */
45
45
  readByte(timeoutMs?: number): Promise<number>;
46
46
  /**
47
- * Read until specific string
47
+ * 특정 문자열까지 읽기
48
48
  */
49
49
  readUntil(marker: string, timeoutMs?: number): Promise<string>;
50
50
  /**
51
- * Clear RX buffer
51
+ * RX 버퍼 클리어
52
52
  */
53
53
  purgeRX(): Promise<void>;
54
54
  purgeTX(): Promise<void>;
package/dist/core/tcp.js CHANGED
@@ -1,14 +1,14 @@
1
1
  "use strict";
2
2
  /**
3
- * SFM TCP/IP Communication Module
3
+ * SFM TCP/IP 통신 모듈
4
4
  *
5
- * Transmits the same packet protocol as serial port over TCP socket.
6
- * Provides the same interface as SfmSerial (open, close, read, write)
7
- * for transparent substitution in SfmClient.
5
+ * 시리얼 포트와 동일한 패킷 프로토콜을 TCP 소켓으로 전송한다.
6
+ * SfmSerial과 동일한 인터페이스(open, close, read, write)를 제공하여
7
+ * SfmClient에서 투명하게 대체 가능하다.
8
8
  *
9
- * Decompilation analysis:
10
- * - "TCP Port" @ 14004f280: TCP port configuration string
11
- * - Protocol packet structure is identical to serial (13/15/35 bytes)
9
+ * 디컴파일 분석:
10
+ * - "TCP Port" @ 14004f280: TCP 포트 설정 문자열
11
+ * - 프로토콜 패킷 구조는 시리얼과 동일 (13/15/35바이트)
12
12
  */
13
13
  var __importDefault = (this && this.__importDefault) || function (mod) {
14
14
  return (mod && mod.__esModule) ? mod : { "default": mod };
@@ -31,13 +31,13 @@ class SfmTcp {
31
31
  this._readTimer = null;
32
32
  }
33
33
  /**
34
- * Open TCP connection
34
+ * TCP 연결 열기
35
35
  */
36
36
  async open(hostOrPath) {
37
37
  if (this.isOpen) {
38
38
  await this.close();
39
39
  }
40
- // Support host:port format
40
+ // host:port 형식 지원
41
41
  if (hostOrPath) {
42
42
  const parts = hostOrPath.split(':');
43
43
  this.host = parts[0];
@@ -94,7 +94,7 @@ class SfmTcp {
94
94
  });
95
95
  }
96
96
  /**
97
- * Close TCP connection
97
+ * TCP 연결 닫기
98
98
  */
99
99
  async close() {
100
100
  if (!this.isOpen || !this.socket)
@@ -108,7 +108,7 @@ class SfmTcp {
108
108
  });
109
109
  }
110
110
  /**
111
- * Write data (TCP doesn't need chunking, but interface-compatible)
111
+ * 데이터 쓰기 (TCP 청크 분할 불필요, 인터페이스 호환용)
112
112
  */
113
113
  async write(data) {
114
114
  if (!this.isOpen)
@@ -123,7 +123,7 @@ class SfmTcp {
123
123
  });
124
124
  }
125
125
  /**
126
- * Read data (same interface as SfmSerial.read)
126
+ * 데이터 읽기 (SfmSerial.read와 동일한 인터페이스)
127
127
  */
128
128
  async read(expectedLength, timeoutMs = READ_TIMEOUT_MS) {
129
129
  if (!this.isOpen)
@@ -178,14 +178,14 @@ class SfmTcp {
178
178
  });
179
179
  }
180
180
  /**
181
- * Read single byte
181
+ * 단일 바이트 읽기
182
182
  */
183
183
  async readByte(timeoutMs = READ_TIMEOUT_MS) {
184
184
  const buf = await this.read(1, timeoutMs);
185
185
  return buf[0];
186
186
  }
187
187
  /**
188
- * Read until specific string
188
+ * 특정 문자열까지 읽기
189
189
  */
190
190
  async readUntil(marker, timeoutMs = 5000) {
191
191
  const startTime = Date.now();
@@ -199,19 +199,19 @@ class SfmTcp {
199
199
  }
200
200
  }
201
201
  catch {
202
- // timeout on single byte, continue
202
+ // 단일 바이트 타임아웃, 계속
203
203
  }
204
204
  }
205
205
  throw new Error(`Marker wait timeout: "${marker}" (${timeoutMs}ms)`);
206
206
  }
207
207
  /**
208
- * Clear RX buffer
208
+ * RX 버퍼 클리어
209
209
  */
210
210
  async purgeRX() {
211
211
  this._readBuffer = Buffer.alloc(0);
212
212
  }
213
213
  async purgeTX() {
214
- // TCP doesn't need separate TX purge
214
+ // TCP 별도 TX 퍼지 불필요
215
215
  }
216
216
  async purgeAll() {
217
217
  await this.purgeRX();