@n8n/telemetry 1.6.1 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/build.tsbuildinfo +1 -1
- package/dist/events/agents.d.ts +3 -1
- package/dist/events/agents.js +6 -1
- package/dist/events/agents.js.map +1 -1
- package/dist/events/context.d.ts +52 -0
- package/dist/events/context.js +49 -0
- package/dist/events/context.js.map +1 -0
- package/dist/events/instance-ai.d.ts +69 -12
- package/dist/events/instance-ai.js +57 -12
- package/dist/events/instance-ai.js.map +1 -1
- package/dist/events/mcp.d.ts +75 -0
- package/dist/events/mcp.js +38 -0
- package/dist/events/mcp.js.map +1 -1
- package/dist/events/node-type-policies.d.ts +93 -0
- package/dist/events/node-type-policies.js +94 -0
- package/dist/events/node-type-policies.js.map +1 -0
- package/dist/events/workflow.d.ts +11 -0
- package/dist/events/workflow.js +9 -0
- package/dist/events/workflow.js.map +1 -1
- package/dist/telemetry-events.d.ts +301 -13
- package/dist/telemetry-events.js +4 -0
- package/dist/telemetry-events.js.map +1 -1
- package/package.json +7 -7
package/dist/events/mcp.js
CHANGED
|
@@ -8,7 +8,45 @@ const clientBrand = v4_1.z
|
|
|
8
8
|
.nullable()
|
|
9
9
|
.describe('Client brand, mirroring MCP_CLIENT_BRAND_MATCHERS in @n8n/api-types');
|
|
10
10
|
const clientType = v4_1.z.enum(['cli', 'ide', 'editor', 'assistant']).nullable();
|
|
11
|
+
const nudgeSurface = v4_1.z
|
|
12
|
+
.enum(['export', 'import_file', 'import_url', 'copy', 'paste'])
|
|
13
|
+
.describe('The action that opened the nudge: the Export JSON menu item, Import from file, Import from URL, copying nodes, or pasting workflow JSON onto the canvas');
|
|
11
14
|
exports.MCP_TELEMETRY = (0, define_1.defineTelemetryEvents)({
|
|
15
|
+
MCP_NUDGE_VIEWED: {
|
|
16
|
+
name: 'User viewed MCP nudge',
|
|
17
|
+
description: 'The MCP nudge modal opened after the user exported a workflow as JSON, imported one from a file or URL, copied nodes, or pasted workflow JSON onto the canvas. Fires only when the modal opens, so a trigger that the flag, the two-impression cap, an opt-out, or instance-level MCP access suppresses emits nothing. Each fire consumes one impression.',
|
|
18
|
+
properties: v4_1.z.object({
|
|
19
|
+
surface: nudgeSurface,
|
|
20
|
+
}),
|
|
21
|
+
},
|
|
22
|
+
MCP_NUDGE_CONNECT_CLICKED: {
|
|
23
|
+
name: 'User clicked connect in MCP nudge',
|
|
24
|
+
description: 'The user clicked "Connect n8n" in the MCP nudge. The app navigates to the MCP settings page and abandons the export or import that opened the nudge. Kept separate from the skip and dismiss events so the connect-to-export click ratio stays computable.',
|
|
25
|
+
properties: v4_1.z.object({
|
|
26
|
+
surface: nudgeSurface,
|
|
27
|
+
}),
|
|
28
|
+
},
|
|
29
|
+
MCP_NUDGE_SKIPPED: {
|
|
30
|
+
name: 'User skipped MCP nudge',
|
|
31
|
+
description: 'The user clicked "Skip" in the MCP nudge. The export or import that opened the nudge completes unchanged. Closing with × or Escape is "User dismissed MCP nudge" instead.',
|
|
32
|
+
properties: v4_1.z.object({
|
|
33
|
+
surface: nudgeSurface,
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
MCP_NUDGE_DISMISSED: {
|
|
37
|
+
name: 'User dismissed MCP nudge',
|
|
38
|
+
description: 'The user closed the MCP nudge with × or Escape without choosing an action. The export or import that opened the nudge completes unchanged.',
|
|
39
|
+
properties: v4_1.z.object({
|
|
40
|
+
surface: nudgeSurface,
|
|
41
|
+
}),
|
|
42
|
+
},
|
|
43
|
+
MCP_NUDGE_OPTED_OUT: {
|
|
44
|
+
name: 'User opted out of MCP nudge',
|
|
45
|
+
description: 'The user checked "Don\'t show this again" in the MCP nudge. Fires when the checkbox is checked, independent of which button later closes the modal. The nudge never shows again for this user.',
|
|
46
|
+
properties: v4_1.z.object({
|
|
47
|
+
surface: nudgeSurface,
|
|
48
|
+
}),
|
|
49
|
+
},
|
|
12
50
|
USER_GAVE_MCP_ACCESS_TO_WORKFLOW: {
|
|
13
51
|
name: 'User gave MCP access to workflow',
|
|
14
52
|
description: 'A workflow was exposed over MCP.',
|
package/dist/events/mcp.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/events/mcp.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAE3B,sCAAkD;AAOlD,MAAM,WAAW,GAAG,MAAC;KACnB,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;KAC9C,QAAQ,EAAE;KACV,QAAQ,CAAC,qEAAqE,CAAC,CAAC;AAElF,MAAM,UAAU,GAAG,MAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/events/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { z } from 'zod/v4';
|
|
2
|
+
export declare const NODE_TYPE_POLICIES_TELEMETRY: {
|
|
3
|
+
readonly USER_SAVED_NODE_TYPE_POLICY: {
|
|
4
|
+
readonly name: "User saved node type policy";
|
|
5
|
+
readonly description: "A node type availability policy was saved for one scope through the composed write that the policy UI uses. One event per save, covering both the scope default action and its rules. Rule-level edits through the advanced document and attachment APIs report separately. The type counts and list report what this scope decides on its own, so at project scope they are the project layer before it composes with the instance policy.";
|
|
6
|
+
readonly properties: z.ZodObject<{
|
|
7
|
+
rule_count: z.ZodNumber;
|
|
8
|
+
allow_rule_count: z.ZodNumber;
|
|
9
|
+
deny_rule_count: z.ZodNumber;
|
|
10
|
+
delegate_rule_count: z.ZodNumber;
|
|
11
|
+
user_id: z.ZodOptional<z.ZodString>;
|
|
12
|
+
source: z.ZodEnum<{
|
|
13
|
+
environment: "environment";
|
|
14
|
+
user: "user";
|
|
15
|
+
}>;
|
|
16
|
+
scope: z.ZodEnum<{
|
|
17
|
+
instance: "instance";
|
|
18
|
+
project: "project";
|
|
19
|
+
}>;
|
|
20
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
21
|
+
default_action: z.ZodEnum<{
|
|
22
|
+
allow: "allow";
|
|
23
|
+
delegate: "delegate";
|
|
24
|
+
deny: "deny";
|
|
25
|
+
}>;
|
|
26
|
+
previous_default_action: z.ZodNullable<z.ZodEnum<{
|
|
27
|
+
allow: "allow";
|
|
28
|
+
delegate: "delegate";
|
|
29
|
+
deny: "deny";
|
|
30
|
+
}>>;
|
|
31
|
+
is_first_write: z.ZodBoolean;
|
|
32
|
+
name_selector_count: z.ZodNumber;
|
|
33
|
+
package_selector_count: z.ZodNumber;
|
|
34
|
+
evaluated_type_count: z.ZodNumber;
|
|
35
|
+
blocked_type_count: z.ZodNumber;
|
|
36
|
+
allowed_type_count: z.ZodNumber;
|
|
37
|
+
delegated_type_count: z.ZodNumber;
|
|
38
|
+
blocked_types: z.ZodArray<z.ZodString>;
|
|
39
|
+
allowed_types: z.ZodArray<z.ZodString>;
|
|
40
|
+
previous_rule_count: z.ZodNullable<z.ZodNumber>;
|
|
41
|
+
shadow_warning_count: z.ZodNumber;
|
|
42
|
+
version: z.ZodNumber;
|
|
43
|
+
}, z.core.$strip>;
|
|
44
|
+
} & import("../define").TelemetryEventInput & {
|
|
45
|
+
readonly getValidationError: (properties: unknown) => string | null;
|
|
46
|
+
};
|
|
47
|
+
readonly USER_UPDATED_NODE_TYPE_POLICY_DOCUMENT: {
|
|
48
|
+
readonly name: "User updated node type policy document";
|
|
49
|
+
readonly description: "A policy document was created, edited, or deleted through the advanced instance-only document API. The composed save that the policy UI uses reports as \"User saved node type policy\" instead. Rule counts describe the document after the operation, so a delete reports 0 and carries the deleted size in previous_rule_count.";
|
|
50
|
+
readonly properties: z.ZodObject<{
|
|
51
|
+
rule_count: z.ZodNumber;
|
|
52
|
+
allow_rule_count: z.ZodNumber;
|
|
53
|
+
deny_rule_count: z.ZodNumber;
|
|
54
|
+
delegate_rule_count: z.ZodNumber;
|
|
55
|
+
user_id: z.ZodOptional<z.ZodString>;
|
|
56
|
+
source: z.ZodEnum<{
|
|
57
|
+
environment: "environment";
|
|
58
|
+
user: "user";
|
|
59
|
+
}>;
|
|
60
|
+
operation: z.ZodEnum<{
|
|
61
|
+
created: "created";
|
|
62
|
+
deleted: "deleted";
|
|
63
|
+
updated: "updated";
|
|
64
|
+
}>;
|
|
65
|
+
policy_id: z.ZodString;
|
|
66
|
+
previous_rule_count: z.ZodNullable<z.ZodNumber>;
|
|
67
|
+
}, z.core.$strip>;
|
|
68
|
+
} & import("../define").TelemetryEventInput & {
|
|
69
|
+
readonly getValidationError: (properties: unknown) => string | null;
|
|
70
|
+
};
|
|
71
|
+
readonly USER_UPDATED_NODE_TYPE_POLICY_ATTACHMENTS: {
|
|
72
|
+
readonly name: "User updated node type policy attachments";
|
|
73
|
+
readonly description: "The set of policy documents attached to one scope was replaced through the advanced instance-only attachment API. Reports the resulting set, not the individual add or remove.";
|
|
74
|
+
readonly properties: z.ZodObject<{
|
|
75
|
+
user_id: z.ZodOptional<z.ZodString>;
|
|
76
|
+
source: z.ZodEnum<{
|
|
77
|
+
environment: "environment";
|
|
78
|
+
user: "user";
|
|
79
|
+
}>;
|
|
80
|
+
scope: z.ZodEnum<{
|
|
81
|
+
instance: "instance";
|
|
82
|
+
project: "project";
|
|
83
|
+
}>;
|
|
84
|
+
project_id: z.ZodOptional<z.ZodString>;
|
|
85
|
+
scope_id: z.ZodString;
|
|
86
|
+
attachment_count: z.ZodNumber;
|
|
87
|
+
floor_attachment_count: z.ZodNumber;
|
|
88
|
+
previous_attachment_count: z.ZodNumber;
|
|
89
|
+
}, z.core.$strip>;
|
|
90
|
+
} & import("../define").TelemetryEventInput & {
|
|
91
|
+
readonly getValidationError: (properties: unknown) => string | null;
|
|
92
|
+
};
|
|
93
|
+
};
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NODE_TYPE_POLICIES_TELEMETRY = void 0;
|
|
4
|
+
const v4_1 = require("zod/v4");
|
|
5
|
+
const define_1 = require("../define");
|
|
6
|
+
const userId = v4_1.z.string().optional();
|
|
7
|
+
const source = v4_1.z
|
|
8
|
+
.enum(['user', 'environment'])
|
|
9
|
+
.describe("'environment' is a bootstrap write from configuration, with no acting user");
|
|
10
|
+
const scope = v4_1.z
|
|
11
|
+
.enum(['instance', 'project'])
|
|
12
|
+
.describe('Which scope the policy was written at; project policies compose under instance');
|
|
13
|
+
const projectId = v4_1.z.string().optional().describe('Absent at instance scope');
|
|
14
|
+
const ruleCounts = {
|
|
15
|
+
rule_count: v4_1.z.number(),
|
|
16
|
+
allow_rule_count: v4_1.z.number(),
|
|
17
|
+
deny_rule_count: v4_1.z.number(),
|
|
18
|
+
delegate_rule_count: v4_1.z
|
|
19
|
+
.number()
|
|
20
|
+
.describe('Always 0 at project scope, which rejects the delegate action'),
|
|
21
|
+
};
|
|
22
|
+
exports.NODE_TYPE_POLICIES_TELEMETRY = (0, define_1.defineTelemetryEvents)({
|
|
23
|
+
USER_SAVED_NODE_TYPE_POLICY: {
|
|
24
|
+
name: 'User saved node type policy',
|
|
25
|
+
description: 'A node type availability policy was saved for one scope through the composed write that the policy UI uses. One event per save, covering both the scope default action and its rules. Rule-level edits through the advanced document and attachment APIs report separately. The type counts and list report what this scope decides on its own, so at project scope they are the project layer before it composes with the instance policy.',
|
|
26
|
+
properties: v4_1.z.object({
|
|
27
|
+
user_id: userId,
|
|
28
|
+
source,
|
|
29
|
+
scope,
|
|
30
|
+
project_id: projectId,
|
|
31
|
+
default_action: v4_1.z
|
|
32
|
+
.enum(['allow', 'deny', 'delegate'])
|
|
33
|
+
.describe('What the scope decides for a type that no rule matches'),
|
|
34
|
+
previous_default_action: v4_1.z
|
|
35
|
+
.enum(['allow', 'deny', 'delegate'])
|
|
36
|
+
.nullable()
|
|
37
|
+
.describe('Null on the first write to this scope, which had no stored default'),
|
|
38
|
+
is_first_write: v4_1.z
|
|
39
|
+
.boolean()
|
|
40
|
+
.describe('Whether this write created the scope; an unwritten scope allows every type'),
|
|
41
|
+
...ruleCounts,
|
|
42
|
+
name_selector_count: v4_1.z.number().describe('Rules that target one exact node type name'),
|
|
43
|
+
package_selector_count: v4_1.z.number().describe('Rules that target a whole node package'),
|
|
44
|
+
evaluated_type_count: v4_1.z
|
|
45
|
+
.number()
|
|
46
|
+
.describe('Node types this instance knows, and so the denominator for the counts below'),
|
|
47
|
+
blocked_type_count: v4_1.z.number(),
|
|
48
|
+
allowed_type_count: v4_1.z.number(),
|
|
49
|
+
delegated_type_count: v4_1.z
|
|
50
|
+
.number()
|
|
51
|
+
.describe('Types a project can opt into; always 0 at project scope'),
|
|
52
|
+
blocked_types: v4_1.z
|
|
53
|
+
.array(v4_1.z.string())
|
|
54
|
+
.describe('The node types this policy makes unavailable, capped at 100. Node type names, not user data. Compare the length against blocked_type_count to see whether the cap dropped any'),
|
|
55
|
+
allowed_types: v4_1.z
|
|
56
|
+
.array(v4_1.z.string())
|
|
57
|
+
.describe('The node types this policy leaves available, capped at 100 the same way'),
|
|
58
|
+
previous_rule_count: v4_1.z.number().nullable().describe('Null on the first write to this scope'),
|
|
59
|
+
shadow_warning_count: v4_1.z
|
|
60
|
+
.number()
|
|
61
|
+
.describe('Saved rules that can never match, because an earlier rule already covers them'),
|
|
62
|
+
version: v4_1.z.number().describe('The scope version after the write'),
|
|
63
|
+
}),
|
|
64
|
+
},
|
|
65
|
+
USER_UPDATED_NODE_TYPE_POLICY_DOCUMENT: {
|
|
66
|
+
name: 'User updated node type policy document',
|
|
67
|
+
description: 'A policy document was created, edited, or deleted through the advanced instance-only document API. The composed save that the policy UI uses reports as "User saved node type policy" instead. Rule counts describe the document after the operation, so a delete reports 0 and carries the deleted size in previous_rule_count.',
|
|
68
|
+
properties: v4_1.z.object({
|
|
69
|
+
user_id: userId,
|
|
70
|
+
source,
|
|
71
|
+
operation: v4_1.z.enum(['created', 'updated', 'deleted']),
|
|
72
|
+
policy_id: v4_1.z.string(),
|
|
73
|
+
...ruleCounts,
|
|
74
|
+
previous_rule_count: v4_1.z.number().nullable().describe('Null on a created document'),
|
|
75
|
+
}),
|
|
76
|
+
},
|
|
77
|
+
USER_UPDATED_NODE_TYPE_POLICY_ATTACHMENTS: {
|
|
78
|
+
name: 'User updated node type policy attachments',
|
|
79
|
+
description: 'The set of policy documents attached to one scope was replaced through the advanced instance-only attachment API. Reports the resulting set, not the individual add or remove.',
|
|
80
|
+
properties: v4_1.z.object({
|
|
81
|
+
user_id: userId,
|
|
82
|
+
source,
|
|
83
|
+
scope,
|
|
84
|
+
project_id: projectId,
|
|
85
|
+
scope_id: v4_1.z.string(),
|
|
86
|
+
attachment_count: v4_1.z.number(),
|
|
87
|
+
floor_attachment_count: v4_1.z
|
|
88
|
+
.number()
|
|
89
|
+
.describe('Attachments that a narrower scope cannot override'),
|
|
90
|
+
previous_attachment_count: v4_1.z.number(),
|
|
91
|
+
}),
|
|
92
|
+
},
|
|
93
|
+
});
|
|
94
|
+
//# sourceMappingURL=node-type-policies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"node-type-policies.js","sourceRoot":"","sources":["../../src/events/node-type-policies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
import { z } from 'zod/v4';
|
|
2
2
|
export declare const WORKFLOW_TELEMETRY: {
|
|
3
|
+
readonly MULTIPLE_NODES_SELECTED: {
|
|
4
|
+
readonly name: "User selected multiple nodes";
|
|
5
|
+
readonly description: "The user has two or more nodes selected on the workflow canvas. Fires once the selection settles (debounced), covering all selection paths — rubber-band drag, shift-click, and select-all — so intermediate states during a drag are not reported. Groups are excluded from the count.";
|
|
6
|
+
readonly properties: z.ZodObject<{
|
|
7
|
+
workflow_id: z.ZodString;
|
|
8
|
+
node_count: z.ZodNumber;
|
|
9
|
+
push_ref: z.ZodString;
|
|
10
|
+
}, z.core.$strip>;
|
|
11
|
+
} & import("../define").TelemetryEventInput & {
|
|
12
|
+
readonly getValidationError: (properties: unknown) => string | null;
|
|
13
|
+
};
|
|
3
14
|
readonly NODE_IDS_HEALED: {
|
|
4
15
|
readonly name: "Workflow node ids healed";
|
|
5
16
|
readonly description: "A published version about to be activated carried duplicate or missing node ids, so a corrected system-authored version was published in its place. `superseded` means the corrected version lost against a concurrent publish or unpublish and was discarded.";
|
package/dist/events/workflow.js
CHANGED
|
@@ -4,6 +4,15 @@ exports.WORKFLOW_TELEMETRY = void 0;
|
|
|
4
4
|
const v4_1 = require("zod/v4");
|
|
5
5
|
const define_1 = require("../define");
|
|
6
6
|
exports.WORKFLOW_TELEMETRY = (0, define_1.defineTelemetryEvents)({
|
|
7
|
+
MULTIPLE_NODES_SELECTED: {
|
|
8
|
+
name: 'User selected multiple nodes',
|
|
9
|
+
description: 'The user has two or more nodes selected on the workflow canvas. Fires once the selection settles (debounced), covering all selection paths — rubber-band drag, shift-click, and select-all — so intermediate states during a drag are not reported. Groups are excluded from the count.',
|
|
10
|
+
properties: v4_1.z.object({
|
|
11
|
+
workflow_id: v4_1.z.string(),
|
|
12
|
+
node_count: v4_1.z.number().describe('Number of nodes selected once the selection settled'),
|
|
13
|
+
push_ref: v4_1.z.string().describe('Editor session ref, to join with other canvas events'),
|
|
14
|
+
}),
|
|
15
|
+
},
|
|
7
16
|
NODE_IDS_HEALED: {
|
|
8
17
|
name: 'Workflow node ids healed',
|
|
9
18
|
description: 'A published version about to be activated carried duplicate or missing node ids, so a corrected system-authored version was published in its place. `superseded` means the corrected version lost against a concurrent publish or unpublish and was discarded.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/events/workflow.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAE3B,sCAAkD;AAErC,QAAA,kBAAkB,GAAG,IAAA,8BAAqB,EAAC;IACvD,eAAe,EAAE;QAChB,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACV,gQAAgQ;QACjQ,UAAU,EAAE,MAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE;YACvB,YAAY,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAClF,gBAAgB,EAAE,MAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;YACnF,aAAa,EAAE,MAAC;iBACd,MAAM,EAAE;iBACR,QAAQ,CAAC,sEAAsE,CAAC;YAClF,UAAU,EAAE,MAAC;iBACX,OAAO,EAAE;iBACT,QAAQ,CAAC,uEAAuE,CAAC;SACnF,CAAC;KACF;CACD,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/events/workflow.ts"],"names":[],"mappings":";;;AAAA,+BAA2B;AAE3B,sCAAkD;AAErC,QAAA,kBAAkB,GAAG,IAAA,8BAAqB,EAAC;IACvD,uBAAuB,EAAE;QACxB,IAAI,EAAE,8BAA8B;QACpC,WAAW,EACV,yRAAyR;QAC1R,UAAU,EAAE,MAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE;YACvB,UAAU,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;YACtF,QAAQ,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;SACrF,CAAC;KACF;IACD,eAAe,EAAE;QAChB,IAAI,EAAE,0BAA0B;QAChC,WAAW,EACV,gQAAgQ;QACjQ,UAAU,EAAE,MAAC,CAAC,MAAM,CAAC;YACpB,WAAW,EAAE,MAAC,CAAC,MAAM,EAAE;YACvB,YAAY,EAAE,MAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC;YAClF,gBAAgB,EAAE,MAAC;iBACjB,MAAM,EAAE;iBACR,QAAQ,CAAC,uEAAuE,CAAC;YACnF,aAAa,EAAE,MAAC;iBACd,MAAM,EAAE;iBACR,QAAQ,CAAC,sEAAsE,CAAC;YAClF,UAAU,EAAE,MAAC;iBACX,OAAO,EAAE;iBACT,QAAQ,CAAC,uEAAuE,CAAC;SACnF,CAAC;KACF;CACD,CAAC,CAAC"}
|