@squidcloud/local-backend 1.0.33 → 1.0.34
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/dist/common/src/ai-assistant.schemas.d.ts +0 -3
- package/dist/common/src/ai-assistant.schemas.js +1 -4
- package/dist/common/src/ai-assistant.schemas.js.map +1 -1
- package/dist/common/src/ai-assistant.types.d.ts +1 -2
- package/dist/common/src/api.types.d.ts +1 -2
- package/dist/common/src/application.schemas.d.ts +36 -0
- package/dist/common/src/application.schemas.js +15 -0
- package/dist/common/src/application.schemas.js.map +1 -1
- package/dist/common/src/backend-function.schemas.js +1 -2
- package/dist/common/src/backend-function.schemas.js.map +1 -1
- package/dist/common/src/backend-function.types.d.ts +1 -2
- package/dist/common/src/context.types.d.ts +3 -1
- package/dist/common/src/integrations/auth.types.d.ts +7 -0
- package/dist/common/src/integrations/index.d.ts +4 -2
- package/dist/common/src/integrations/index.js +2 -0
- package/dist/common/src/integrations/index.js.map +1 -1
- package/dist/common/src/mutation.context.d.ts +3 -1
- package/dist/common/src/mutation.context.js +8 -2
- package/dist/common/src/mutation.context.js.map +1 -1
- package/dist/common/src/mutation.schemas.js +1 -2
- package/dist/common/src/mutation.schemas.js.map +1 -1
- package/dist/common/src/mutation.types.d.ts +1 -2
- package/dist/common/src/mutation.types.js.map +1 -1
- package/dist/common/src/named-query.schemas.js +1 -2
- package/dist/common/src/named-query.schemas.js.map +1 -1
- package/dist/common/src/named-query.types.d.ts +1 -2
- package/dist/common/src/query.schemas.js +3 -6
- package/dist/common/src/query.schemas.js.map +1 -1
- package/dist/common/src/query.types.d.ts +0 -3
- package/dist/common/src/query.types.js.map +1 -1
- package/dist/common/src/utils/serialization.d.ts +1 -1
- package/dist/common/src/utils/serialization.js +14 -10
- package/dist/common/src/utils/serialization.js.map +1 -1
- package/dist/internal-common/src/index.d.ts +2 -1
- package/dist/internal-common/src/index.js +4 -1
- package/dist/internal-common/src/index.js.map +1 -1
- package/dist/internal-common/src/kafka-observability-publisher.d.ts +11 -0
- package/dist/internal-common/src/kafka-observability-publisher.js +21 -0
- package/dist/internal-common/src/kafka-observability-publisher.js.map +1 -0
- package/dist/internal-common/src/observability-publisher.d.ts +6 -11
- package/dist/internal-common/src/observability-publisher.js +1 -13
- package/dist/internal-common/src/observability-publisher.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.recodeValue = exports.decodeValueForMapping = exports.encodeValueForMapping = exports.deserializeObj = exports.serializeObj = exports.normalizeJsonAsString = void 0;
|
|
4
|
-
const
|
|
4
|
+
const _ = require("lodash");
|
|
5
5
|
function sortKeys(json) {
|
|
6
6
|
if (Array.isArray(json)) {
|
|
7
7
|
return json.map((o) => sortKeys(o));
|
|
@@ -21,17 +21,21 @@ function normalizeJsonAsString(json) {
|
|
|
21
21
|
}
|
|
22
22
|
exports.normalizeJsonAsString = normalizeJsonAsString;
|
|
23
23
|
function serializeObj(obj) {
|
|
24
|
-
|
|
25
|
-
return
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
}
|
|
24
|
+
if (obj === undefined)
|
|
25
|
+
return null;
|
|
26
|
+
const objWithReplacedDates = _.cloneDeepWith(obj, (value) => {
|
|
27
|
+
return _.isDate(value) ? { $date: value.toISOString() } : undefined;
|
|
28
|
+
});
|
|
29
|
+
return JSON.stringify(objWithReplacedDates);
|
|
31
30
|
}
|
|
32
31
|
exports.serializeObj = serializeObj;
|
|
33
|
-
function deserializeObj(
|
|
34
|
-
|
|
32
|
+
function deserializeObj(str) {
|
|
33
|
+
const deserializedObj = JSON.parse(str);
|
|
34
|
+
return _.cloneDeepWith(deserializedObj, (value) => {
|
|
35
|
+
return _.isObject(value) && _.has(value, '$date') && Object.keys(value).length === 1
|
|
36
|
+
? new Date(value['$date'])
|
|
37
|
+
: undefined;
|
|
38
|
+
});
|
|
35
39
|
}
|
|
36
40
|
exports.deserializeObj = deserializeObj;
|
|
37
41
|
function encodeValueForMapping(value) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../../../../common/src/utils/serialization.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"serialization.js","sourceRoot":"","sources":["../../../../../common/src/utils/serialization.ts"],"names":[],"mappings":";;;AAAA,4BAA4B;AAE5B,SAAS,QAAQ,CAAC,IAAS;IACzB,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACvB,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC;IACD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI,YAAY,IAAI,EAAE;QACrE,OAAO,IAAI,CAAC;KACb;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,MAAM,GAAG,EAAS,CAAC;IACzB,IAAI,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;QAC1B,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACpC,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAS;IAC7C,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACtC,CAAC;AAFD,sDAEC;AAED,SAAgB,YAAY,CAAC,GAAQ;IACnC,IAAI,GAAG,KAAK,SAAS;QAAE,OAAO,IAAW,CAAC;IAC1C,MAAM,oBAAoB,GAAG,CAAC,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE;QAC1D,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACtE,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;AAC9C,CAAC;AAND,oCAMC;AAED,SAAgB,cAAc,CAAU,GAAW;IACjD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,OAAO,CAAC,CAAC,aAAa,CAAC,eAAe,EAAE,CAAC,KAAK,EAAE,EAAE;QAChD,OAAO,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,CAAC;YAClF,CAAC,CAAC,IAAI,IAAI,CAAE,KAAa,CAAC,OAAO,CAAC,CAAC;YACnC,CAAC,CAAC,SAAS,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAPD,wCAOC;AAED,SAAgB,qBAAqB,CAAC,KAAU;IAC9C,IAAI,KAAK,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACjE,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACnC,CAAC;AAHD,sDAGC;AAED,SAAgB,qBAAqB,CAAC,aAAqB;IACzD,OAAO,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;AAC7C,CAAC;AAFD,sDAEC;AAED,SAAgB,WAAW,CAAC,KAAU;IACpC,OAAO,qBAAqB,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC7D,CAAC;AAFD,kCAEC"}
|
|
@@ -2,8 +2,9 @@ export * from './environment';
|
|
|
2
2
|
export * from './kafka/kafka.manager';
|
|
3
3
|
export * from './kafka/kafka.types';
|
|
4
4
|
export * from './local-dev.types';
|
|
5
|
-
export * from './observability-publisher';
|
|
5
|
+
export * from './kafka-observability-publisher';
|
|
6
6
|
export * from './observability.types';
|
|
7
7
|
export * from './shutdown.manager';
|
|
8
8
|
export * from './utils';
|
|
9
9
|
export * from './code-executor.types';
|
|
10
|
+
export { ObservabilityPublisher } from './observability-publisher';
|
|
@@ -14,13 +14,16 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
14
14
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
15
|
};
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ObservabilityPublisher = void 0;
|
|
17
18
|
__exportStar(require("./environment"), exports);
|
|
18
19
|
__exportStar(require("./kafka/kafka.manager"), exports);
|
|
19
20
|
__exportStar(require("./kafka/kafka.types"), exports);
|
|
20
21
|
__exportStar(require("./local-dev.types"), exports);
|
|
21
|
-
__exportStar(require("./observability-publisher"), exports);
|
|
22
|
+
__exportStar(require("./kafka-observability-publisher"), exports);
|
|
22
23
|
__exportStar(require("./observability.types"), exports);
|
|
23
24
|
__exportStar(require("./shutdown.manager"), exports);
|
|
24
25
|
__exportStar(require("./utils"), exports);
|
|
25
26
|
__exportStar(require("./code-executor.types"), exports);
|
|
27
|
+
var observability_publisher_1 = require("./observability-publisher");
|
|
28
|
+
Object.defineProperty(exports, "ObservabilityPublisher", { enumerable: true, get: function () { return observability_publisher_1.ObservabilityPublisher; } });
|
|
26
29
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../internal-common/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../internal-common/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,gDAA8B;AAC9B,wDAAsC;AACtC,sDAAoC;AACpC,oDAAkC;AAClC,kEAAgD;AAChD,wDAAsC;AACtC,qDAAmC;AACnC,0CAAwB;AACxB,wDAAsC;AACtC,qEAAmE;AAA1D,iIAAA,sBAAsB,OAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { LogEvent, MetricEvent } from './observability.types';
|
|
2
|
+
import { KafkaManager } from './kafka/kafka.manager';
|
|
3
|
+
import { ObservabilityPublisher } from './observability-publisher';
|
|
4
|
+
export declare class KafkaObservabilityPublisher extends ObservabilityPublisher {
|
|
5
|
+
private readonly kafkaManager;
|
|
6
|
+
private readonly metricsTopicId;
|
|
7
|
+
private readonly logsTopicId;
|
|
8
|
+
constructor(kafkaManager: KafkaManager, metricsTopicId: string, logsTopicId: string);
|
|
9
|
+
reportMetric(event: Omit<MetricEvent, 'timestamp'>): Promise<void>;
|
|
10
|
+
reportLog(event: LogEvent): Promise<void>;
|
|
11
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.KafkaObservabilityPublisher = void 0;
|
|
4
|
+
const observability_publisher_1 = require("./observability-publisher");
|
|
5
|
+
class KafkaObservabilityPublisher extends observability_publisher_1.ObservabilityPublisher {
|
|
6
|
+
constructor(kafkaManager, metricsTopicId, logsTopicId) {
|
|
7
|
+
super();
|
|
8
|
+
this.kafkaManager = kafkaManager;
|
|
9
|
+
this.metricsTopicId = metricsTopicId;
|
|
10
|
+
this.logsTopicId = logsTopicId;
|
|
11
|
+
}
|
|
12
|
+
async reportMetric(event) {
|
|
13
|
+
const modifiedEvent = Object.assign(Object.assign({}, event), { timestamp: new Date(), name: `squid_${event.name}` });
|
|
14
|
+
await this.kafkaManager.sendMessage(this.metricsTopicId, modifiedEvent);
|
|
15
|
+
}
|
|
16
|
+
async reportLog(event) {
|
|
17
|
+
await this.kafkaManager.sendMessage(this.logsTopicId, event);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
exports.KafkaObservabilityPublisher = KafkaObservabilityPublisher;
|
|
21
|
+
//# sourceMappingURL=kafka-observability-publisher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kafka-observability-publisher.js","sourceRoot":"","sources":["../../../../internal-common/src/kafka-observability-publisher.ts"],"names":[],"mappings":";;;AAEA,uEAAmE;AAEnE,MAAa,2BAA4B,SAAQ,gDAAsB;IACrE,YACmB,YAA0B,EAC1B,cAAsB,EACtB,WAAmB;QAEpC,KAAK,EAAE,CAAC;QAJS,iBAAY,GAAZ,YAAY,CAAc;QAC1B,mBAAc,GAAd,cAAc,CAAQ;QACtB,gBAAW,GAAX,WAAW,CAAQ;IAGtC,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,KAAqC;QACtD,MAAM,aAAa,mCAAqB,KAAK,KAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,KAAK,CAAC,IAAI,EAAE,GAAE,CAAC;QACpG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAC1E,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,KAAe;QAC7B,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;IAC/D,CAAC;CACF;AAjBD,kEAiBC"}
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
import { LogEvent, MetricEvent } from './observability.types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
private readonly metricsTopicId;
|
|
6
|
-
private readonly logsTopicId;
|
|
7
|
-
constructor(kafkaManager: KafkaManager, metricsTopicId: string, logsTopicId: string);
|
|
8
|
-
reportMetric(event: Omit<MetricEvent, 'timestamp'>): Promise<void>;
|
|
2
|
+
export declare abstract class ObservabilityPublisher {
|
|
3
|
+
abstract reportMetric(event: Omit<MetricEvent, 'timestamp'>): Promise<void>;
|
|
4
|
+
abstract reportLog(event: LogEvent): Promise<void>;
|
|
9
5
|
timeFunction(event: Omit<MetricEvent, 'type' | 'timestamp' | 'value'>, timedFunction: () => Promise<any>): Promise<any>;
|
|
10
|
-
measureMetric<T extends (...args: any[]) => any>(func: T, name: string, tags
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
reportLog(event: LogEvent): Promise<void>;
|
|
6
|
+
measureMetric<T extends (...args: any[]) => any>(func: T, name: string, tags: Record<string, string> | undefined, isExposedToUser: boolean, reportTime: boolean): ReturnType<T>;
|
|
7
|
+
reportTimeMetric(name: string, isExposedToUser: boolean, startTime: number, tags: Record<string, string>): void;
|
|
8
|
+
reportCountMetric(name: string, isExposedToUser: boolean, tags: Record<string, string>, success: boolean): void;
|
|
14
9
|
}
|
|
@@ -2,22 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ObservabilityPublisher = void 0;
|
|
4
4
|
class ObservabilityPublisher {
|
|
5
|
-
constructor(kafkaManager, metricsTopicId, logsTopicId) {
|
|
6
|
-
this.kafkaManager = kafkaManager;
|
|
7
|
-
this.metricsTopicId = metricsTopicId;
|
|
8
|
-
this.logsTopicId = logsTopicId;
|
|
9
|
-
}
|
|
10
|
-
async reportMetric(event) {
|
|
11
|
-
const modifiedEvent = Object.assign(Object.assign({}, event), { timestamp: new Date(), name: `squid_${event.name}` });
|
|
12
|
-
await this.kafkaManager.sendMessage(this.metricsTopicId, modifiedEvent);
|
|
13
|
-
}
|
|
14
5
|
async timeFunction(event, timedFunction) {
|
|
15
6
|
const startTime = Date.now();
|
|
16
7
|
const result = await timedFunction();
|
|
17
8
|
this.reportMetric(Object.assign(Object.assign({}, event), { type: 'gauge', value: Date.now() - startTime })).then();
|
|
18
9
|
return result;
|
|
19
10
|
}
|
|
20
|
-
measureMetric(func, name, tags = {}, isExposedToUser
|
|
11
|
+
measureMetric(func, name, tags = {}, isExposedToUser, reportTime) {
|
|
21
12
|
try {
|
|
22
13
|
const startTime = Date.now();
|
|
23
14
|
const result = func();
|
|
@@ -63,9 +54,6 @@ class ObservabilityPublisher {
|
|
|
63
54
|
type: 'count',
|
|
64
55
|
}).then();
|
|
65
56
|
}
|
|
66
|
-
async reportLog(event) {
|
|
67
|
-
await this.kafkaManager.sendMessage(this.logsTopicId, event);
|
|
68
|
-
}
|
|
69
57
|
}
|
|
70
58
|
exports.ObservabilityPublisher = ObservabilityPublisher;
|
|
71
59
|
//# sourceMappingURL=observability-publisher.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"observability-publisher.js","sourceRoot":"","sources":["../../../../internal-common/src/observability-publisher.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"observability-publisher.js","sourceRoot":"","sources":["../../../../internal-common/src/observability-publisher.ts"],"names":[],"mappings":";;;AAGA,MAAsB,sBAAsB;IAK1C,KAAK,CAAC,YAAY,CAChB,KAAwD,EACxD,aAAiC;QAEjC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,aAAa,EAAE,CAAC;QACrC,IAAI,CAAC,YAAY,iCAAM,KAAK,KAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,IAAG,CAAC,IAAI,EAAE,CAAC;QACrF,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,aAAa,CACX,IAAO,EACP,IAAY,EACZ,OAA+B,EAAE,EACjC,eAAwB,EACxB,UAAmB;QAEnB,IAAI;YACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,EAAE,CAAC;YACtB,IAAI,MAAM,YAAY,OAAO,EAAE;gBAC7B,OAAO,MAAM;qBACV,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;oBACV,IAAI,UAAU;wBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;oBAC9E,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC1D,OAAO,CAAC,CAAC;gBACX,CAAC,CAAC;qBACD,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE;oBACX,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;oBAC3D,MAAM,CAAC,CAAC;gBACV,CAAC,CAAkB,CAAC;aACvB;YACD,IAAI,UAAU;gBAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,eAAe,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YAC9E,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC1D,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,CAAC,CAAC;SACT;IACH,CAAC;IAED,gBAAgB,CAAC,IAAY,EAAE,eAAwB,EAAE,SAAiB,EAAE,IAA4B;QACtG,IAAI,CAAC,YAAY,CAAC;YAChB,IAAI,EAAE,GAAG,IAAI,OAAO;YACpB,eAAe;YACf,IAAI;YACJ,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAC7B,IAAI,EAAE,OAAO;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;IAED,iBAAiB,CAAC,IAAY,EAAE,eAAwB,EAAE,IAA4B,EAAE,OAAgB;QACtG,IAAI,mCAAQ,IAAI,KAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,GAAE,CAAC;QACxD,IAAI,CAAC,YAAY,CAAC;YAChB,IAAI,EAAE,GAAG,IAAI,QAAQ;YACrB,eAAe;YACf,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,IAAI,EAAE,OAAO;SACd,CAAC,CAAC,IAAI,EAAE,CAAC;IACZ,CAAC;CACF;AAlED,wDAkEC"}
|