@taskmagic/apps-roe-ai 0.0.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/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # apps-roe-ai
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Building
6
+
7
+ Run `nx build apps-roe-ai` to build the library.
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@taskmagic/apps-roe-ai",
3
+ "version": "0.0.1",
4
+ "dependencies": {
5
+ "@anthropic-ai/sdk": "0.33.1",
6
+ "@sinclair/typebox": "0.34.11",
7
+ "axios": "1.17.0",
8
+ "axios-retry": "4.4.1",
9
+ "deepmerge-ts": "7.1.0",
10
+ "mime-types": "2.1.35",
11
+ "nanoid": "3.3.8",
12
+ "openai": "4.67.1",
13
+ "replicate": "0.34.1",
14
+ "semver": "7.6.0",
15
+ "zod": "3.25.76",
16
+ "@taskmagic/pieces-common": "0.4.4",
17
+ "@taskmagic/pieces-framework": "0.7.46",
18
+ "@taskmagic/shared": "0.10.171",
19
+ "tslib": "1.14.1"
20
+ },
21
+ "overrides": {
22
+ "cross-spawn": "7.0.6",
23
+ "elliptic": "^6.6.1",
24
+ "fast-xml-parser": "^4.4.1",
25
+ "protobufjs": "^7.5.5",
26
+ "tmp": "^0.2.4",
27
+ "koa": "^2.16.4",
28
+ "picomatch": "^4.0.4",
29
+ "langsmith": "^0.6.0",
30
+ "serialize-javascript": "^6.0.2",
31
+ "elevenlabs": {
32
+ "form-data": "^4.0.4"
33
+ },
34
+ "@tryfabric/martian": {
35
+ "@notionhq/client": "$@notionhq/client"
36
+ },
37
+ "vite": {
38
+ "rollup": "npm:@rollup/wasm-node@^4.61.1"
39
+ }
40
+ },
41
+ "resolutions": {
42
+ "rollup": "npm:@rollup/wasm-node@^4.61.1"
43
+ },
44
+ "types": "./src/index.d.ts",
45
+ "main": "./src/index.js",
46
+ "type": "commonjs"
47
+ }
package/src/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export declare const roeAi: import("@taskmagic/pieces-framework").Piece<import("@taskmagic/pieces-framework").CustomAuthProperty<{
2
+ apiKey: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ organization_id: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
4
+ }>>;
package/src/index.js ADDED
@@ -0,0 +1,35 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roeAi = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const shared_1 = require("@taskmagic/shared");
7
+ const pieces_common_1 = require("@taskmagic/pieces-common");
8
+ const auth_1 = require("./lib/common/auth");
9
+ const run_agent_1 = require("./lib/actions/run-agent");
10
+ const run_query_1 = require("./lib/actions/run-query");
11
+ exports.roeAi = (0, pieces_framework_1.createPiece)({
12
+ displayName: 'Roe AI',
13
+ description: 'Run Roe AI agents and execute queries against the Roe AI platform.',
14
+ auth: auth_1.roeAiAuth,
15
+ minimumSupportedRelease: '0.30.0',
16
+ logoUrl: 'https://cdn.activepieces.com/pieces/roe-ai.png',
17
+ categories: [shared_1.PieceCategory.ARTIFICIAL_INTELLIGENCE],
18
+ authors: ['sanket-a11y'],
19
+ actions: [
20
+ run_agent_1.runAgent,
21
+ run_query_1.runQuery,
22
+ (0, pieces_common_1.createCustomApiCallAction)({
23
+ auth: auth_1.roeAiAuth,
24
+ baseUrl: () => 'https://api.roe-ai.com/v1',
25
+ authMapping: (auth) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
26
+ const authValue = auth;
27
+ return {
28
+ Authorization: `Bearer ${authValue.apiKey}`,
29
+ };
30
+ }),
31
+ }),
32
+ ],
33
+ triggers: [],
34
+ });
35
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../packages/pieces/community/roe-ai/src/index.ts"],"names":[],"mappings":";;;;AAAA,kEAA0D;AAC1D,8CAAkD;AAClD,4DAAqE;AACrE,4CAA8C;AAC9C,uDAAmD;AACnD,uDAAmD;AAEtC,QAAA,KAAK,GAAG,IAAA,8BAAW,EAAC;IAC/B,WAAW,EAAE,QAAQ;IACrB,WAAW,EACT,oEAAoE;IACtE,IAAI,EAAE,gBAAS;IACf,uBAAuB,EAAE,QAAQ;IACjC,OAAO,EAAE,gDAAgD;IACzD,UAAU,EAAE,CAAC,sBAAa,CAAC,uBAAuB,CAAC;IACnD,OAAO,EAAE,CAAC,aAAa,CAAC;IACxB,OAAO,EAAE;QACP,oBAAQ;QACR,oBAAQ;QACR,IAAA,yCAAyB,EAAC;YACxB,IAAI,EAAE,gBAAS;YACf,OAAO,EAAE,GAAG,EAAE,CAAC,2BAA2B;YAC1C,WAAW,EAAE,CAAO,IAAI,EAAE,EAAE;gBAC1B,MAAM,SAAS,GAAG,IAAmD,CAAC;gBACtE,OAAO;oBACL,aAAa,EAAE,UAAU,SAAS,CAAC,MAAM,EAAE;iBAC5C,CAAC;YACJ,CAAC,CAAA;SACF,CAAC;KACH;IACD,QAAQ,EAAE,EAAE;CACb,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const runAgent: import("@taskmagic/pieces-framework").IAction<import("@taskmagic/pieces-framework").CustomAuthProperty<{
2
+ apiKey: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ organization_id: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
4
+ }>, {
5
+ agent_id: import("@taskmagic/pieces-framework").DropdownProperty<string, true>;
6
+ agent_input: import("@taskmagic/pieces-framework").ObjectProperty<true>;
7
+ metadata: import("@taskmagic/pieces-framework").ObjectProperty<false>;
8
+ }>;
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runAgent = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const auth_1 = require("../common/auth");
7
+ const pieces_common_1 = require("@taskmagic/pieces-common");
8
+ const props_1 = require("../common/props");
9
+ exports.runAgent = (0, pieces_framework_1.createAction)({
10
+ auth: auth_1.roeAiAuth,
11
+ name: 'runAgent',
12
+ displayName: 'Run Agent',
13
+ description: 'Execute an agent with provided inputs and return results immediately',
14
+ props: {
15
+ agent_id: props_1.agentIdDropdown,
16
+ agent_input: pieces_framework_1.Property.Object({
17
+ displayName: 'Agent Input',
18
+ description: 'Dynamic input fields based on agent configuration. Can include text or file inputs.',
19
+ required: true,
20
+ }),
21
+ metadata: pieces_framework_1.Property.Object({
22
+ displayName: 'Metadata',
23
+ description: 'Optional metadata as JSON object',
24
+ required: false,
25
+ }),
26
+ },
27
+ run(context) {
28
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
29
+ const { agent_id, agent_input, metadata } = context.propsValue;
30
+ const { apiKey, organization_id } = context.auth;
31
+ const payload = {
32
+ organization_id,
33
+ };
34
+ if (agent_input) {
35
+ payload['agent_input'] = agent_input;
36
+ }
37
+ if (metadata) {
38
+ payload['metadata'] = metadata;
39
+ }
40
+ const response = yield pieces_common_1.httpClient.sendRequest({
41
+ method: pieces_common_1.HttpMethod.POST,
42
+ url: `https://api.roe-ai.com/v1/agents/run/${agent_id}`,
43
+ headers: {
44
+ 'Content-Type': 'application/json',
45
+ Authorization: `Bearer ${apiKey}`,
46
+ },
47
+ body: payload,
48
+ });
49
+ return response.body;
50
+ });
51
+ },
52
+ });
53
+ //# sourceMappingURL=run-agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-agent.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/roe-ai/src/lib/actions/run-agent.ts"],"names":[],"mappings":";;;;AAAA,kEAAqE;AACrE,yCAA2C;AAC3C,4DAAkE;AAClE,2CAAkD;AAErC,QAAA,QAAQ,GAAG,IAAA,+BAAY,EAAC;IACnC,IAAI,EAAE,gBAAS;IACf,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,WAAW;IACxB,WAAW,EACT,sEAAsE;IACxE,KAAK,EAAE;QACL,QAAQ,EAAE,uBAAe;QACzB,WAAW,EAAE,2BAAQ,CAAC,MAAM,CAAC;YAC3B,WAAW,EAAE,aAAa;YAC1B,WAAW,EACT,qFAAqF;YACvF,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,QAAQ,EAAE,2BAAQ,CAAC,MAAM,CAAC;YACxB,WAAW,EAAE,UAAU;YACvB,WAAW,EAAE,kCAAkC;YAC/C,QAAQ,EAAE,KAAK;SAChB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAC/D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAEjD,MAAM,OAAO,GAA4B;gBACvC,eAAe;aAChB,CAAC;YACF,IAAI,WAAW,EAAE,CAAC;gBAChB,OAAO,CAAC,aAAa,CAAC,GAAG,WAAW,CAAC;YACvC,CAAC;YACD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC;YACjC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,GAAG,EAAE,wCAAwC,QAAQ,EAAE;gBACvD,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;gBACD,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ export declare const runQuery: import("@taskmagic/pieces-framework").IAction<import("@taskmagic/pieces-framework").CustomAuthProperty<{
2
+ apiKey: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ organization_id: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
4
+ }>, {
5
+ query: import("@taskmagic/pieces-framework").LongTextProperty<true>;
6
+ worksheet_id: import("@taskmagic/pieces-framework").ShortTextProperty<false>;
7
+ use_admin: import("@taskmagic/pieces-framework").CheckboxProperty<false>;
8
+ }>;
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runQuery = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const auth_1 = require("../common/auth");
7
+ const pieces_common_1 = require("@taskmagic/pieces-common");
8
+ exports.runQuery = (0, pieces_framework_1.createAction)({
9
+ auth: auth_1.roeAiAuth,
10
+ name: 'runQuery',
11
+ displayName: 'Run Query',
12
+ description: 'Execute a query synchronously and return results',
13
+ props: {
14
+ query: pieces_framework_1.Property.LongText({
15
+ displayName: 'SQL Query',
16
+ description: 'SQL query to execute',
17
+ required: true,
18
+ }),
19
+ worksheet_id: pieces_framework_1.Property.ShortText({
20
+ displayName: 'Worksheet ID',
21
+ description: 'Optional worksheet ID',
22
+ required: false,
23
+ }),
24
+ use_admin: pieces_framework_1.Property.Checkbox({
25
+ displayName: 'Use Admin Privileges',
26
+ description: 'Use admin privileges for the query',
27
+ required: false,
28
+ defaultValue: false,
29
+ }),
30
+ },
31
+ run(context) {
32
+ return tslib_1.__awaiter(this, void 0, void 0, function* () {
33
+ const { query, worksheet_id, use_admin } = context.propsValue;
34
+ const { apiKey, organization_id } = context.auth;
35
+ const payload = {
36
+ query,
37
+ organization_id,
38
+ };
39
+ if (worksheet_id) {
40
+ payload['worksheet_id'] = worksheet_id;
41
+ }
42
+ if (use_admin) {
43
+ payload['use_admin'] = use_admin;
44
+ }
45
+ const response = yield pieces_common_1.httpClient.sendRequest({
46
+ method: pieces_common_1.HttpMethod.POST,
47
+ url: 'https://api.roe-ai.com/v1/database/query',
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ Authorization: `Bearer ${apiKey}`,
51
+ },
52
+ body: payload,
53
+ });
54
+ return response.body;
55
+ });
56
+ },
57
+ });
58
+ //# sourceMappingURL=run-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-query.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/roe-ai/src/lib/actions/run-query.ts"],"names":[],"mappings":";;;;AAAA,kEAAqE;AACrE,yCAA2C;AAC3C,4DAAkE;AAErD,QAAA,QAAQ,GAAG,IAAA,+BAAY,EAAC;IACnC,IAAI,EAAE,gBAAS;IACf,IAAI,EAAE,UAAU;IAChB,WAAW,EAAE,WAAW;IACxB,WAAW,EAAE,kDAAkD;IAC/D,KAAK,EAAE;QACL,KAAK,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YACvB,WAAW,EAAE,WAAW;YACxB,WAAW,EAAE,sBAAsB;YACnC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,YAAY,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAC/B,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,uBAAuB;YACpC,QAAQ,EAAE,KAAK;SAChB,CAAC;QACF,SAAS,EAAE,2BAAQ,CAAC,QAAQ,CAAC;YAC3B,WAAW,EAAE,sBAAsB;YACnC,WAAW,EAAE,oCAAoC;YACjD,QAAQ,EAAE,KAAK;YACf,YAAY,EAAE,KAAK;SACpB,CAAC;KACH;IACK,GAAG,CAAC,OAAO;;YACf,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC;YAC9D,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAEjD,MAAM,OAAO,GAA4B;gBACvC,KAAK;gBACL,eAAe;aAChB,CAAC;YACF,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,cAAc,CAAC,GAAG,YAAY,CAAC;YACzC,CAAC;YACD,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,WAAW,CAAC,GAAG,SAAS,CAAC;YACnC,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC5C,MAAM,EAAE,0BAAU,CAAC,IAAI;gBACvB,GAAG,EAAE,0CAA0C;gBAC/C,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;gBACD,IAAI,EAAE,OAAO;aACd,CAAC,CAAC;YAEH,OAAO,QAAQ,CAAC,IAAI,CAAC;QACvB,CAAC;KAAA;CACF,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare const roeAiAuth: import("@taskmagic/pieces-framework").CustomAuthProperty<{
2
+ apiKey: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
3
+ organization_id: import("@taskmagic/pieces-framework").ShortTextProperty<true>;
4
+ }>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.roeAiAuth = void 0;
4
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
5
+ exports.roeAiAuth = pieces_framework_1.PieceAuth.CustomAuth({
6
+ description: 'Authenticate with Roe AI using your API key',
7
+ props: {
8
+ apiKey: pieces_framework_1.Property.ShortText({
9
+ displayName: 'API Key',
10
+ description: 'Enter your Roe AI API key',
11
+ required: true,
12
+ }),
13
+ organization_id: pieces_framework_1.Property.ShortText({
14
+ displayName: 'Organization ID',
15
+ description: 'Enter your Roe AI Organization ID',
16
+ required: true,
17
+ }),
18
+ },
19
+ required: true,
20
+ });
21
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/roe-ai/src/lib/common/auth.ts"],"names":[],"mappings":";;;AAAA,kEAAkE;AAErD,QAAA,SAAS,GAAG,4BAAS,CAAC,UAAU,CAAC;IAC5C,WAAW,EAAE,6CAA6C;IAC1D,KAAK,EAAE;QACL,MAAM,EAAE,2BAAQ,CAAC,SAAS,CAAC;YACzB,WAAW,EAAE,SAAS;YACtB,WAAW,EAAE,2BAA2B;YACxC,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,eAAe,EAAE,2BAAQ,CAAC,SAAS,CAAC;YAClC,WAAW,EAAE,iBAAiB;YAC9B,WAAW,EAAE,mCAAmC;YAChD,QAAQ,EAAE,IAAI;SACf,CAAC;KACH;IACD,QAAQ,EAAE,IAAI;CACf,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export declare const agentIdDropdown: import("@taskmagic/pieces-framework").DropdownProperty<string, true>;
@@ -0,0 +1,45 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.agentIdDropdown = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const pieces_framework_1 = require("@taskmagic/pieces-framework");
6
+ const pieces_common_1 = require("@taskmagic/pieces-common");
7
+ exports.agentIdDropdown = pieces_framework_1.Property.Dropdown({
8
+ displayName: 'Agent',
9
+ description: 'Select Agent ',
10
+ refreshers: [],
11
+ required: true,
12
+ options: (_a) => tslib_1.__awaiter(void 0, [_a], void 0, function* ({ auth }) {
13
+ const authValue = auth;
14
+ const apiKey = authValue === null || authValue === void 0 ? void 0 : authValue.apiKey;
15
+ const organization_id = authValue === null || authValue === void 0 ? void 0 : authValue.organization_id;
16
+ if (!apiKey) {
17
+ return {
18
+ disabled: true,
19
+ options: [],
20
+ };
21
+ }
22
+ const agents = [];
23
+ let nextUrl = `https://api.roe-ai.com/v1/agents?organization_id=${organization_id}`;
24
+ while (nextUrl) {
25
+ const response = yield pieces_common_1.httpClient.sendRequest({
26
+ method: pieces_common_1.HttpMethod.GET,
27
+ url: nextUrl,
28
+ headers: {
29
+ Authorization: `Bearer ${apiKey}`,
30
+ },
31
+ });
32
+ const pageAgents = response.body.results;
33
+ agents.push(...pageAgents);
34
+ nextUrl = response.body.next || null;
35
+ }
36
+ return {
37
+ disabled: false,
38
+ options: agents.map((agent) => ({
39
+ label: agent.name,
40
+ value: agent.id,
41
+ })),
42
+ };
43
+ }),
44
+ });
45
+ //# sourceMappingURL=props.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"props.js","sourceRoot":"","sources":["../../../../../../../../packages/pieces/community/roe-ai/src/lib/common/props.ts"],"names":[],"mappings":";;;;AAAA,kEAAuD;AACvD,4DAAkE;AAErD,QAAA,eAAe,GAAG,2BAAQ,CAAC,QAAQ,CAAC;IAC/C,WAAW,EAAE,OAAO;IACpB,WAAW,EAAE,eAAe;IAC5B,UAAU,EAAE,EAAE;IACd,QAAQ,EAAE,IAAI;IACd,OAAO,EAAE,KAAiB,EAAE,oDAAZ,EAAE,IAAI,EAAE;QACtB,MAAM,SAAS,GAAG,IAEL,CAAC;QACd,MAAM,MAAM,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,CAAC;QACjC,MAAM,eAAe,GAAG,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,eAAe,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO;gBACL,QAAQ,EAAE,IAAI;gBACd,OAAO,EAAE,EAAE;aACZ,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAwC,EAAE,CAAC;QACvD,IAAI,OAAO,GAEA,oDAAoD,eAAe,EAAE,CAAC;QAEjF,OAAO,OAAO,EAAE,CAAC;YACf,MAAM,QAAQ,GAKV,MAAM,0BAAU,CAAC,WAAW,CAAC;gBAC/B,MAAM,EAAE,0BAAU,CAAC,GAAG;gBACtB,GAAG,EAAE,OAAO;gBACZ,OAAO,EAAE;oBACP,aAAa,EAAE,UAAU,MAAM,EAAE;iBAClC;aACF,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC;YAC3B,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC;QACvC,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,KAAK;YACf,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;gBAC9B,KAAK,EAAE,KAAK,CAAC,IAAI;gBACjB,KAAK,EAAE,KAAK,CAAC,EAAE;aAChB,CAAC,CAAC;SACJ,CAAC;IACJ,CAAC,CAAA;CACF,CAAC,CAAC"}