@creezio/mcp-facade 0.22.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 (174) hide show
  1. package/README.md +420 -0
  2. package/dist/.creezio-src-hash.json +4 -0
  3. package/dist/admin/adapters.d.ts +10 -0
  4. package/dist/admin/adapters.d.ts.map +1 -0
  5. package/dist/admin/adapters.js +21 -0
  6. package/dist/admin/adapters.js.map +1 -0
  7. package/dist/admin/http-routes.d.ts +11 -0
  8. package/dist/admin/http-routes.d.ts.map +1 -0
  9. package/dist/admin/http-routes.js +66 -0
  10. package/dist/admin/http-routes.js.map +1 -0
  11. package/dist/admin/index.d.ts +12 -0
  12. package/dist/admin/index.d.ts.map +1 -0
  13. package/dist/admin/index.js +8 -0
  14. package/dist/admin/index.js.map +1 -0
  15. package/dist/admin/mcp-admin.d.ts +165 -0
  16. package/dist/admin/mcp-admin.d.ts.map +1 -0
  17. package/dist/admin/mcp-admin.js +419 -0
  18. package/dist/admin/mcp-admin.js.map +1 -0
  19. package/dist/admin/tool-policy-guard.d.ts +106 -0
  20. package/dist/admin/tool-policy-guard.d.ts.map +1 -0
  21. package/dist/admin/tool-policy-guard.js +187 -0
  22. package/dist/admin/tool-policy-guard.js.map +1 -0
  23. package/dist/admin/types.d.ts +62 -0
  24. package/dist/admin/types.d.ts.map +1 -0
  25. package/dist/admin/types.js +6 -0
  26. package/dist/admin/types.js.map +1 -0
  27. package/dist/brand-facade.d.ts +41 -0
  28. package/dist/brand-facade.d.ts.map +1 -0
  29. package/dist/brand-facade.js +67 -0
  30. package/dist/brand-facade.js.map +1 -0
  31. package/dist/core-tools.d.ts +22 -0
  32. package/dist/core-tools.d.ts.map +1 -0
  33. package/dist/core-tools.js +93 -0
  34. package/dist/core-tools.js.map +1 -0
  35. package/dist/dyn-import.d.ts +13 -0
  36. package/dist/dyn-import.d.ts.map +1 -0
  37. package/dist/dyn-import.js +2 -0
  38. package/dist/dyn-import.js.map +1 -0
  39. package/dist/facade.d.ts +40 -0
  40. package/dist/facade.d.ts.map +1 -0
  41. package/dist/facade.js +334 -0
  42. package/dist/facade.js.map +1 -0
  43. package/dist/hono-bind.d.ts +48 -0
  44. package/dist/hono-bind.d.ts.map +1 -0
  45. package/dist/hono-bind.js +70 -0
  46. package/dist/hono-bind.js.map +1 -0
  47. package/dist/hono-proxy.d.ts +63 -0
  48. package/dist/hono-proxy.d.ts.map +1 -0
  49. package/dist/hono-proxy.js +185 -0
  50. package/dist/hono-proxy.js.map +1 -0
  51. package/dist/index.d.ts +32 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +23 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/jwt.d.ts +20 -0
  56. package/dist/jwt.d.ts.map +1 -0
  57. package/dist/jwt.js +84 -0
  58. package/dist/jwt.js.map +1 -0
  59. package/dist/module-ops-tools.d.ts +43 -0
  60. package/dist/module-ops-tools.d.ts.map +1 -0
  61. package/dist/module-ops-tools.js +301 -0
  62. package/dist/module-ops-tools.js.map +1 -0
  63. package/dist/namespace.d.ts +23 -0
  64. package/dist/namespace.d.ts.map +1 -0
  65. package/dist/namespace.js +51 -0
  66. package/dist/namespace.js.map +1 -0
  67. package/dist/oauth/cors-policy.d.ts +3 -0
  68. package/dist/oauth/cors-policy.d.ts.map +1 -0
  69. package/dist/oauth/cors-policy.js +25 -0
  70. package/dist/oauth/cors-policy.js.map +1 -0
  71. package/dist/oauth/hono-app.d.ts +18 -0
  72. package/dist/oauth/hono-app.d.ts.map +1 -0
  73. package/dist/oauth/hono-app.js +175 -0
  74. package/dist/oauth/hono-app.js.map +1 -0
  75. package/dist/oauth/index.d.ts +9 -0
  76. package/dist/oauth/index.d.ts.map +1 -0
  77. package/dist/oauth/index.js +6 -0
  78. package/dist/oauth/index.js.map +1 -0
  79. package/dist/oauth/rate-limit.d.ts +11 -0
  80. package/dist/oauth/rate-limit.d.ts.map +1 -0
  81. package/dist/oauth/rate-limit.js +32 -0
  82. package/dist/oauth/rate-limit.js.map +1 -0
  83. package/dist/oauth/routes.d.ts +8 -0
  84. package/dist/oauth/routes.d.ts.map +1 -0
  85. package/dist/oauth/routes.js +671 -0
  86. package/dist/oauth/routes.js.map +1 -0
  87. package/dist/oauth/store.d.ts +113 -0
  88. package/dist/oauth/store.d.ts.map +1 -0
  89. package/dist/oauth/store.js +390 -0
  90. package/dist/oauth/store.js.map +1 -0
  91. package/dist/oauth/types.d.ts +97 -0
  92. package/dist/oauth/types.d.ts.map +1 -0
  93. package/dist/oauth/types.js +5 -0
  94. package/dist/oauth/types.js.map +1 -0
  95. package/dist/open-external-tab-host-tools.d.ts +67 -0
  96. package/dist/open-external-tab-host-tools.d.ts.map +1 -0
  97. package/dist/open-external-tab-host-tools.js +92 -0
  98. package/dist/open-external-tab-host-tools.js.map +1 -0
  99. package/dist/policy.d.ts +59 -0
  100. package/dist/policy.d.ts.map +1 -0
  101. package/dist/policy.js +88 -0
  102. package/dist/policy.js.map +1 -0
  103. package/dist/runtime.d.ts +22 -0
  104. package/dist/runtime.d.ts.map +1 -0
  105. package/dist/runtime.js +20 -0
  106. package/dist/runtime.js.map +1 -0
  107. package/dist/types.d.ts +163 -0
  108. package/dist/types.d.ts.map +1 -0
  109. package/dist/types.js +2 -0
  110. package/dist/types.js.map +1 -0
  111. package/dist-cjs/admin/adapters.js +27 -0
  112. package/dist-cjs/admin/adapters.js.map +1 -0
  113. package/dist-cjs/admin/http-routes.js +69 -0
  114. package/dist-cjs/admin/http-routes.js.map +1 -0
  115. package/dist-cjs/admin/index.js +40 -0
  116. package/dist-cjs/admin/index.js.map +1 -0
  117. package/dist-cjs/admin/mcp-admin.js +441 -0
  118. package/dist-cjs/admin/mcp-admin.js.map +1 -0
  119. package/dist-cjs/admin/tool-policy-guard.js +193 -0
  120. package/dist-cjs/admin/tool-policy-guard.js.map +1 -0
  121. package/dist-cjs/admin/types.js +7 -0
  122. package/dist-cjs/admin/types.js.map +1 -0
  123. package/dist-cjs/brand-facade.js +70 -0
  124. package/dist-cjs/brand-facade.js.map +1 -0
  125. package/dist-cjs/core-tools.js +97 -0
  126. package/dist-cjs/core-tools.js.map +1 -0
  127. package/dist-cjs/dyn-import.js +5 -0
  128. package/dist-cjs/dyn-import.js.map +1 -0
  129. package/dist-cjs/facade.js +337 -0
  130. package/dist-cjs/facade.js.map +1 -0
  131. package/dist-cjs/hono-bind.js +74 -0
  132. package/dist-cjs/hono-bind.js.map +1 -0
  133. package/dist-cjs/hono-proxy.js +189 -0
  134. package/dist-cjs/hono-proxy.js.map +1 -0
  135. package/dist-cjs/index.js +120 -0
  136. package/dist-cjs/index.js.map +1 -0
  137. package/dist-cjs/jwt.js +91 -0
  138. package/dist-cjs/jwt.js.map +1 -0
  139. package/dist-cjs/module-ops-tools.js +308 -0
  140. package/dist-cjs/module-ops-tools.js.map +1 -0
  141. package/dist-cjs/namespace.js +56 -0
  142. package/dist-cjs/namespace.js.map +1 -0
  143. package/dist-cjs/oauth/cors-policy.js +29 -0
  144. package/dist-cjs/oauth/cors-policy.js.map +1 -0
  145. package/dist-cjs/oauth/hono-app.js +178 -0
  146. package/dist-cjs/oauth/hono-app.js.map +1 -0
  147. package/dist-cjs/oauth/index.js +48 -0
  148. package/dist-cjs/oauth/index.js.map +1 -0
  149. package/dist-cjs/oauth/rate-limit.js +37 -0
  150. package/dist-cjs/oauth/rate-limit.js.map +1 -0
  151. package/dist-cjs/oauth/routes.js +674 -0
  152. package/dist-cjs/oauth/routes.js.map +1 -0
  153. package/dist-cjs/oauth/store.js +418 -0
  154. package/dist-cjs/oauth/store.js.map +1 -0
  155. package/dist-cjs/oauth/types.js +6 -0
  156. package/dist-cjs/oauth/types.js.map +1 -0
  157. package/dist-cjs/open-external-tab-host-tools.js +96 -0
  158. package/dist-cjs/open-external-tab-host-tools.js.map +1 -0
  159. package/dist-cjs/package.json +3 -0
  160. package/dist-cjs/policy.js +93 -0
  161. package/dist-cjs/policy.js.map +1 -0
  162. package/dist-cjs/runtime.js +24 -0
  163. package/dist-cjs/runtime.js.map +1 -0
  164. package/dist-cjs/types.js +3 -0
  165. package/dist-cjs/types.js.map +1 -0
  166. package/package.json +92 -0
  167. package/ui/index.ts +5 -0
  168. package/ui/mcp-admin-client.tsx +270 -0
  169. package/ui/primitives/badge.tsx +37 -0
  170. package/ui/primitives/button.tsx +44 -0
  171. package/ui/primitives/card.tsx +44 -0
  172. package/ui/primitives/cn.ts +6 -0
  173. package/ui/primitives/input.tsx +19 -0
  174. package/ui/primitives/tabs.tsx +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ /**
3
+ * Injection host pour mcp-admin (évite imports `@/` marque).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.configureMcpAdmin = configureMcpAdmin;
7
+ exports.getMcpAdminAdapters = getMcpAdminAdapters;
8
+ exports.isMcpAdminConfigured = isMcpAdminConfigured;
9
+ exports.resetMcpAdminAdaptersForTests = resetMcpAdminAdaptersForTests;
10
+ let adapters = null;
11
+ function configureMcpAdmin(next) {
12
+ adapters = next;
13
+ }
14
+ function getMcpAdminAdapters() {
15
+ if (!adapters) {
16
+ throw new Error("@creezio/mcp-admin: configureMcpAdmin({ getDb, getWriteDb, … }) requis avant usage");
17
+ }
18
+ return adapters;
19
+ }
20
+ /** True si `configureMcpAdmin` a été câblé (garde opt-in non cassante). */
21
+ function isMcpAdminConfigured() {
22
+ return adapters !== null;
23
+ }
24
+ function resetMcpAdminAdaptersForTests() {
25
+ adapters = null;
26
+ }
27
+ //# sourceMappingURL=adapters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapters.js","sourceRoot":"","sources":["../../src/admin/adapters.ts"],"names":[],"mappings":";AAAA;;GAEG;;AAMH,8CAEC;AAED,kDAOC;AAGD,oDAEC;AAED,sEAEC;AAtBD,IAAI,QAAQ,GAA4B,IAAI,CAAC;AAE7C,SAAgB,iBAAiB,CAAC,IAAsB;IACtD,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC;AAED,SAAgB,mBAAmB;IACjC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CACb,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,2EAA2E;AAC3E,SAAgB,oBAAoB;IAClC,OAAO,QAAQ,KAAK,IAAI,CAAC;AAC3B,CAAC;AAED,SAAgB,6BAA6B;IAC3C,QAAQ,GAAG,IAAI,CAAC;AAClB,CAAC"}
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMcpAdminRoutes = createMcpAdminRoutes;
4
+ /**
5
+ * Routes Hono Admin MCP (port TempoFlow — N6).
6
+ * Auth owner reste côté marque (montage sous /admin).
7
+ */
8
+ const hono_1 = require("hono");
9
+ const mcp_admin_js_1 = require("./mcp-admin.js");
10
+ const adapters_js_1 = require("./adapters.js");
11
+ function createMcpAdminRoutes(opts = {}) {
12
+ const app = new hono_1.Hono();
13
+ app.get("/mcp/status", (c) => c.json((0, mcp_admin_js_1.mcpAdminStatus)()));
14
+ app.get("/mcp/tools", (c) => c.json({ tools: (0, mcp_admin_js_1.listMcpToolPolicies)() }));
15
+ app.get("/mcp/clients", (c) => c.json({ clients: (0, mcp_admin_js_1.listMcpClients)() }));
16
+ app.get("/mcp/diagnostics", (c) => c.json((0, mcp_admin_js_1.mcpDiagnostics)()));
17
+ app.get("/mcp/metrics", (c) => c.json((0, mcp_admin_js_1.mcpMetrics)()));
18
+ app.get("/mcp/audit-logs", (c) => c.json({ logs: (0, mcp_admin_js_1.listMcpAuditLogs)(Number(c.req.query("limit")) || 200) }));
19
+ app.get("/mcp/diagnostics/export", (c) => {
20
+ const prefix = opts.diagnosticFilenamePrefix ||
21
+ (0, adapters_js_1.getMcpAdminAdapters)().diagnosticFilenamePrefix ||
22
+ "creezio";
23
+ c.header("Content-Disposition", `attachment; filename="${prefix}-mcp-diagnostic-${new Date().toISOString().slice(0, 10)}.json"`);
24
+ return c.json((0, mcp_admin_js_1.exportMcpDiagnostics)());
25
+ });
26
+ app.patch("/mcp/policies/:tool", async (c) => {
27
+ let body;
28
+ try {
29
+ body = await c.req.json();
30
+ }
31
+ catch {
32
+ return c.json({ error: "JSON attendu" }, 400);
33
+ }
34
+ const policy = (0, mcp_admin_js_1.updateMcpToolPolicy)(c.req.param("tool"), body);
35
+ if (!policy)
36
+ return c.json({ error: "Tool inconnu" }, 404);
37
+ return c.json({ policy });
38
+ });
39
+ app.patch("/mcp/clients/:clientId", async (c) => {
40
+ let body;
41
+ try {
42
+ body = await c.req.json();
43
+ }
44
+ catch {
45
+ return c.json({ error: "JSON attendu" }, 400);
46
+ }
47
+ if (typeof body.enabled !== "boolean") {
48
+ return c.json({ error: "enabled booléen requis" }, 400);
49
+ }
50
+ const ok = (0, mcp_admin_js_1.setMcpClientEnabled)(c.req.param("clientId"), body.enabled);
51
+ return ok ? c.json({ ok: true }) : c.json({ error: "Client introuvable" }, 404);
52
+ });
53
+ app.delete("/mcp/clients/:clientId", (c) => {
54
+ const ok = (0, mcp_admin_js_1.revokeMcpClient)(c.req.param("clientId"));
55
+ return ok ? c.json({ ok: true }) : c.json({ error: "Client introuvable" }, 404);
56
+ });
57
+ app.post("/mcp/clients/:clientId/rotate-secret", (c) => {
58
+ const result = (0, mcp_admin_js_1.rotateMcpClientSecret)(c.req.param("clientId"));
59
+ if (!result) {
60
+ return c.json({ error: "Client introuvable, révoqué ou public (sans secret)" }, 400);
61
+ }
62
+ return c.json({
63
+ clientSecret: result.clientSecret,
64
+ warning: "Ce secret ne sera plus affiché. Les refresh tokens précédents sont révoqués.",
65
+ });
66
+ });
67
+ return app;
68
+ }
69
+ //# sourceMappingURL=http-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http-routes.js","sourceRoot":"","sources":["../../src/admin/http-routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ /**
3
+ * MCP admin — policies, clients OAuth, diagnostics, routes Hono (N6).
4
+ */
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.registerGuardedMcpTool = exports.getStoredMcpToolPolicy = exports.createToolPolicyAuthorize = exports.checkToolPolicy = exports.createMcpAdminRoutes = exports.exportMcpDiagnostics = exports.pruneMcpAuditLogs = exports.listMcpAuditLogs = exports.auditMcpAdmin = exports.mcpMetrics = exports.mcpDiagnostics = exports.mcpAdminStatus = exports.touchMcpClient = exports.clientCanAuthenticate = exports.rotateMcpClientSecret = exports.revokeMcpClient = exports.setMcpClientEnabled = exports.listMcpClients = exports.updateMcpToolPolicy = exports.filterListedToolsByEnabledPolicy = exports.disabledMcpToolPolicyNames = exports.getMcpToolPolicy = exports.listMcpToolPolicies = exports.seedMcpToolPolicies = exports.ensureMcpAdminSchema = exports.resetMcpAdminAdaptersForTests = exports.isMcpAdminConfigured = exports.getMcpAdminAdapters = exports.configureMcpAdmin = void 0;
7
+ var adapters_js_1 = require("./adapters.js");
8
+ Object.defineProperty(exports, "configureMcpAdmin", { enumerable: true, get: function () { return adapters_js_1.configureMcpAdmin; } });
9
+ Object.defineProperty(exports, "getMcpAdminAdapters", { enumerable: true, get: function () { return adapters_js_1.getMcpAdminAdapters; } });
10
+ Object.defineProperty(exports, "isMcpAdminConfigured", { enumerable: true, get: function () { return adapters_js_1.isMcpAdminConfigured; } });
11
+ Object.defineProperty(exports, "resetMcpAdminAdaptersForTests", { enumerable: true, get: function () { return adapters_js_1.resetMcpAdminAdaptersForTests; } });
12
+ var mcp_admin_js_1 = require("./mcp-admin.js");
13
+ Object.defineProperty(exports, "ensureMcpAdminSchema", { enumerable: true, get: function () { return mcp_admin_js_1.ensureMcpAdminSchema; } });
14
+ Object.defineProperty(exports, "seedMcpToolPolicies", { enumerable: true, get: function () { return mcp_admin_js_1.seedMcpToolPolicies; } });
15
+ Object.defineProperty(exports, "listMcpToolPolicies", { enumerable: true, get: function () { return mcp_admin_js_1.listMcpToolPolicies; } });
16
+ Object.defineProperty(exports, "getMcpToolPolicy", { enumerable: true, get: function () { return mcp_admin_js_1.getMcpToolPolicy; } });
17
+ Object.defineProperty(exports, "disabledMcpToolPolicyNames", { enumerable: true, get: function () { return mcp_admin_js_1.disabledMcpToolPolicyNames; } });
18
+ Object.defineProperty(exports, "filterListedToolsByEnabledPolicy", { enumerable: true, get: function () { return mcp_admin_js_1.filterListedToolsByEnabledPolicy; } });
19
+ Object.defineProperty(exports, "updateMcpToolPolicy", { enumerable: true, get: function () { return mcp_admin_js_1.updateMcpToolPolicy; } });
20
+ Object.defineProperty(exports, "listMcpClients", { enumerable: true, get: function () { return mcp_admin_js_1.listMcpClients; } });
21
+ Object.defineProperty(exports, "setMcpClientEnabled", { enumerable: true, get: function () { return mcp_admin_js_1.setMcpClientEnabled; } });
22
+ Object.defineProperty(exports, "revokeMcpClient", { enumerable: true, get: function () { return mcp_admin_js_1.revokeMcpClient; } });
23
+ Object.defineProperty(exports, "rotateMcpClientSecret", { enumerable: true, get: function () { return mcp_admin_js_1.rotateMcpClientSecret; } });
24
+ Object.defineProperty(exports, "clientCanAuthenticate", { enumerable: true, get: function () { return mcp_admin_js_1.clientCanAuthenticate; } });
25
+ Object.defineProperty(exports, "touchMcpClient", { enumerable: true, get: function () { return mcp_admin_js_1.touchMcpClient; } });
26
+ Object.defineProperty(exports, "mcpAdminStatus", { enumerable: true, get: function () { return mcp_admin_js_1.mcpAdminStatus; } });
27
+ Object.defineProperty(exports, "mcpDiagnostics", { enumerable: true, get: function () { return mcp_admin_js_1.mcpDiagnostics; } });
28
+ Object.defineProperty(exports, "mcpMetrics", { enumerable: true, get: function () { return mcp_admin_js_1.mcpMetrics; } });
29
+ Object.defineProperty(exports, "auditMcpAdmin", { enumerable: true, get: function () { return mcp_admin_js_1.auditMcpAdmin; } });
30
+ Object.defineProperty(exports, "listMcpAuditLogs", { enumerable: true, get: function () { return mcp_admin_js_1.listMcpAuditLogs; } });
31
+ Object.defineProperty(exports, "pruneMcpAuditLogs", { enumerable: true, get: function () { return mcp_admin_js_1.pruneMcpAuditLogs; } });
32
+ Object.defineProperty(exports, "exportMcpDiagnostics", { enumerable: true, get: function () { return mcp_admin_js_1.exportMcpDiagnostics; } });
33
+ var http_routes_js_1 = require("./http-routes.js");
34
+ Object.defineProperty(exports, "createMcpAdminRoutes", { enumerable: true, get: function () { return http_routes_js_1.createMcpAdminRoutes; } });
35
+ var tool_policy_guard_js_1 = require("./tool-policy-guard.js");
36
+ Object.defineProperty(exports, "checkToolPolicy", { enumerable: true, get: function () { return tool_policy_guard_js_1.checkToolPolicy; } });
37
+ Object.defineProperty(exports, "createToolPolicyAuthorize", { enumerable: true, get: function () { return tool_policy_guard_js_1.createToolPolicyAuthorize; } });
38
+ Object.defineProperty(exports, "getStoredMcpToolPolicy", { enumerable: true, get: function () { return tool_policy_guard_js_1.getStoredMcpToolPolicy; } });
39
+ Object.defineProperty(exports, "registerGuardedMcpTool", { enumerable: true, get: function () { return tool_policy_guard_js_1.registerGuardedMcpTool; } });
40
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAUH,6CAKuB;AAJrB,gHAAA,iBAAiB,OAAA;AACjB,kHAAA,mBAAmB,OAAA;AACnB,mHAAA,oBAAoB,OAAA;AACpB,4HAAA,6BAA6B,OAAA;AAQ/B,+CAqBwB;AApBtB,oHAAA,oBAAoB,OAAA;AACpB,mHAAA,mBAAmB,OAAA;AACnB,mHAAA,mBAAmB,OAAA;AACnB,gHAAA,gBAAgB,OAAA;AAChB,0HAAA,0BAA0B,OAAA;AAC1B,gIAAA,gCAAgC,OAAA;AAChC,mHAAA,mBAAmB,OAAA;AACnB,8GAAA,cAAc,OAAA;AACd,mHAAA,mBAAmB,OAAA;AACnB,+GAAA,eAAe,OAAA;AACf,qHAAA,qBAAqB,OAAA;AACrB,qHAAA,qBAAqB,OAAA;AACrB,8GAAA,cAAc,OAAA;AACd,8GAAA,cAAc,OAAA;AACd,8GAAA,cAAc,OAAA;AACd,0GAAA,UAAU,OAAA;AACV,6GAAA,aAAa,OAAA;AACb,gHAAA,gBAAgB,OAAA;AAChB,iHAAA,iBAAiB,OAAA;AACjB,oHAAA,oBAAoB,OAAA;AAItB,mDAAwD;AAA/C,sHAAA,oBAAoB,OAAA;AAe7B,+DAKgC;AAJ9B,uHAAA,eAAe,OAAA;AACf,iIAAA,yBAAyB,OAAA;AACzB,8HAAA,sBAAsB,OAAA;AACtB,8HAAA,sBAAsB,OAAA"}
@@ -0,0 +1,441 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ensureMcpAdminSchema = ensureMcpAdminSchema;
4
+ exports.seedMcpToolPolicies = seedMcpToolPolicies;
5
+ exports.listMcpToolPolicies = listMcpToolPolicies;
6
+ exports.getMcpToolPolicy = getMcpToolPolicy;
7
+ exports.disabledMcpToolPolicyNames = disabledMcpToolPolicyNames;
8
+ exports.filterListedToolsByEnabledPolicy = filterListedToolsByEnabledPolicy;
9
+ exports.updateMcpToolPolicy = updateMcpToolPolicy;
10
+ exports.listMcpClients = listMcpClients;
11
+ exports.setMcpClientEnabled = setMcpClientEnabled;
12
+ exports.revokeMcpClient = revokeMcpClient;
13
+ exports.rotateMcpClientSecret = rotateMcpClientSecret;
14
+ exports.clientCanAuthenticate = clientCanAuthenticate;
15
+ exports.touchMcpClient = touchMcpClient;
16
+ exports.mcpAdminStatus = mcpAdminStatus;
17
+ exports.mcpDiagnostics = mcpDiagnostics;
18
+ exports.mcpMetrics = mcpMetrics;
19
+ exports.auditMcpAdmin = auditMcpAdmin;
20
+ exports.listMcpAuditLogs = listMcpAuditLogs;
21
+ exports.pruneMcpAuditLogs = pruneMcpAuditLogs;
22
+ exports.exportMcpDiagnostics = exportMcpDiagnostics;
23
+ const node_crypto_1 = require("node:crypto");
24
+ const adapters_js_1 = require("./adapters.js");
25
+ function getDb() {
26
+ return (0, adapters_js_1.getMcpAdminAdapters)().getDb();
27
+ }
28
+ function getWriteDb() {
29
+ return (0, adapters_js_1.getMcpAdminAdapters)().getWriteDb();
30
+ }
31
+ function tableExists(name) {
32
+ return (0, adapters_js_1.getMcpAdminAdapters)().tableExists(name);
33
+ }
34
+ function MCP_TOOL_REGISTRY() {
35
+ return (0, adapters_js_1.getMcpAdminAdapters)().listTools();
36
+ }
37
+ function mcpOauthReady() {
38
+ return (0, adapters_js_1.getMcpAdminAdapters)().mcpOauthReady();
39
+ }
40
+ function resolveMcpPublicUrl() {
41
+ return (0, adapters_js_1.getMcpAdminAdapters)().resolveMcpPublicUrl();
42
+ }
43
+ function listRequestLogs(opts) {
44
+ const fn = (0, adapters_js_1.getMcpAdminAdapters)().listRequestLogs;
45
+ return fn ? fn(opts) : { logs: [] };
46
+ }
47
+ let schemaEnsured = false;
48
+ /** Rôles acceptés dans les policies (adapters, défaut historique). */
49
+ function policyRoleNames() {
50
+ return (0, adapters_js_1.getMcpAdminAdapters)().policyRoleNames || ["owner", "collaborator"];
51
+ }
52
+ /** Scopes acceptés dans les policies (adapters, défaut historique). */
53
+ function policyScopeNames() {
54
+ return ((0, adapters_js_1.getMcpAdminAdapters)().policyScopeNames || [
55
+ "crm",
56
+ "crm:read",
57
+ "crm:write",
58
+ "full",
59
+ ]);
60
+ }
61
+ function hasColumn(table, column) {
62
+ if (!tableExists(table))
63
+ return false;
64
+ return getDb()
65
+ .prepare(`PRAGMA table_info("${table.replaceAll('"', '""')}")`)
66
+ .all().some((item) => item.name === column);
67
+ }
68
+ function ensureMcpAdminSchema() {
69
+ if (schemaEnsured)
70
+ return;
71
+ const db = getWriteDb();
72
+ if (tableExists("mcp_oauth_clients")) {
73
+ if (!hasColumn("mcp_oauth_clients", "enabled")) {
74
+ db.exec(`ALTER TABLE mcp_oauth_clients ADD COLUMN enabled INTEGER NOT NULL DEFAULT 1`);
75
+ }
76
+ if (!hasColumn("mcp_oauth_clients", "revoked_at")) {
77
+ db.exec(`ALTER TABLE mcp_oauth_clients ADD COLUMN revoked_at TEXT`);
78
+ }
79
+ if (!hasColumn("mcp_oauth_clients", "last_used_at")) {
80
+ db.exec(`ALTER TABLE mcp_oauth_clients ADD COLUMN last_used_at TEXT`);
81
+ }
82
+ }
83
+ if (tableExists("mcp_tool_policies") &&
84
+ !hasColumn("mcp_tool_policies", "admin_override")) {
85
+ db.exec(`ALTER TABLE mcp_tool_policies ADD COLUMN admin_override INTEGER NOT NULL DEFAULT 0`);
86
+ }
87
+ db.exec(`
88
+ CREATE TABLE IF NOT EXISTS mcp_tool_policies (
89
+ tool_name TEXT PRIMARY KEY,
90
+ enabled INTEGER NOT NULL DEFAULT 1,
91
+ allowed_roles TEXT NOT NULL DEFAULT 'owner,collaborator',
92
+ allowed_scopes TEXT NOT NULL DEFAULT '',
93
+ -- 1 si l'admin a explicitement fixé enabled (updateMcpToolPolicy) —
94
+ -- distingue une désactivation admin du seed par défaut
95
+ -- (mcpPublishDefault=false → enabled=0 « non publié par défaut »).
96
+ admin_override INTEGER NOT NULL DEFAULT 0,
97
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
98
+ );
99
+ CREATE TABLE IF NOT EXISTS mcp_audit_logs (
100
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
101
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
102
+ event TEXT NOT NULL,
103
+ actor TEXT,
104
+ client_id TEXT,
105
+ tool_name TEXT,
106
+ outcome TEXT NOT NULL DEFAULT 'ok',
107
+ detail_json TEXT
108
+ );
109
+ CREATE INDEX IF NOT EXISTS idx_mcp_audit_created ON mcp_audit_logs(created_at);
110
+ `);
111
+ const insert = db.prepare(`INSERT OR IGNORE INTO mcp_tool_policies
112
+ (tool_name, enabled, allowed_roles, allowed_scopes)
113
+ VALUES (?, ?, ?, ?)`);
114
+ const seedFn = () => {
115
+ for (const tool of MCP_TOOL_REGISTRY()) {
116
+ const roles = (tool.defaultRoles || policyRoleNames()).join(",");
117
+ const enabled = tool.mcpPublishDefault === false ? 0 : 1;
118
+ insert.run(tool.name, enabled, roles, tool.requiredScope);
119
+ }
120
+ };
121
+ if (db.transaction)
122
+ db.transaction(seedFn)();
123
+ else
124
+ seedFn();
125
+ pruneMcpAuditLogs();
126
+ schemaEnsured = true;
127
+ }
128
+ /**
129
+ * Seed permissif (INSERT OR IGNORE) de policies pour des tools hors registre
130
+ * adapters — ex. tools de `facade.listTools()` quand la garde M2 est activée
131
+ * sur une façade marque. Ne modifie JAMAIS une policy existante.
132
+ */
133
+ function seedMcpToolPolicies(tools) {
134
+ ensureMcpAdminSchema();
135
+ const db = getWriteDb();
136
+ const insert = db.prepare(`INSERT OR IGNORE INTO mcp_tool_policies
137
+ (tool_name, enabled, allowed_roles, allowed_scopes)
138
+ VALUES (?, ?, ?, ?)`);
139
+ const run = () => {
140
+ for (const tool of tools) {
141
+ if (!tool?.name)
142
+ continue;
143
+ const roles = (tool.defaultRoles || policyRoleNames()).join(",");
144
+ const enabled = tool.mcpPublishDefault === false ? 0 : 1;
145
+ insert.run(tool.name, enabled, roles, tool.requiredScope || "");
146
+ }
147
+ };
148
+ if (db.transaction)
149
+ db.transaction(run)();
150
+ else
151
+ run();
152
+ }
153
+ function listMcpToolPolicies() {
154
+ ensureMcpAdminSchema();
155
+ const rows = getDb()
156
+ .prepare(`SELECT tool_name, enabled, allowed_roles, allowed_scopes, updated_at
157
+ FROM mcp_tool_policies`)
158
+ .all();
159
+ const policy = new Map(rows.map((row) => [row.tool_name, row]));
160
+ return MCP_TOOL_REGISTRY().map((tool) => {
161
+ const row = policy.get(tool.name);
162
+ const defaultEnabled = tool.mcpPublishDefault !== false;
163
+ return {
164
+ ...tool,
165
+ enabled: row ? row.enabled !== 0 : defaultEnabled,
166
+ allowedRoles: (row?.allowed_roles || policyRoleNames().join(","))
167
+ .split(",")
168
+ .filter(Boolean),
169
+ allowedScopes: (row?.allowed_scopes || tool.requiredScope).split(/[\s,]+/).filter(Boolean),
170
+ updatedAt: row?.updated_at || null,
171
+ };
172
+ });
173
+ }
174
+ function getMcpToolPolicy(name) {
175
+ return listMcpToolPolicies().find((tool) => tool.name === name) || null;
176
+ }
177
+ /**
178
+ * Noms désactivés PAR L'ADMIN (`enabled=0` ET `admin_override=1`).
179
+ *
180
+ * Les lignes `enabled=0` seedées par défaut (`mcpPublishDefault=false` —
181
+ * ex. toute op module sans opt-in publish, cf.
182
+ * `generateModuleToolsFromOperations`) ne comptent PAS : elles signifient
183
+ * « non publié par défaut aux clients MCP externes », pas « désactivé » —
184
+ * les masquer vidait `listTools`/`GET /mcp` des tools métier (régression
185
+ * 0.17.1, vue par les gates module des marques). Admin non câblé / erreur
186
+ * DB → ensemble vide (pas de filtre).
187
+ */
188
+ function disabledMcpToolPolicyNames() {
189
+ try {
190
+ ensureMcpAdminSchema();
191
+ const rows = getDb()
192
+ .prepare(`SELECT tool_name FROM mcp_tool_policies
193
+ WHERE enabled = 0 AND admin_override = 1`)
194
+ .all();
195
+ return new Set(rows.map((row) => row.tool_name));
196
+ }
197
+ catch {
198
+ return new Set();
199
+ }
200
+ }
201
+ /** Retire de `listTools` les tools (et alias) désactivés en admin MCP. */
202
+ function filterListedToolsByEnabledPolicy(tools, aliases = {}) {
203
+ const disabled = disabledMcpToolPolicyNames();
204
+ if (disabled.size === 0)
205
+ return tools;
206
+ for (const [alias, canonical] of Object.entries(aliases)) {
207
+ if (disabled.has(alias))
208
+ disabled.add(canonical);
209
+ if (disabled.has(canonical))
210
+ disabled.add(alias);
211
+ }
212
+ return tools.filter((tool) => !disabled.has(tool.name) &&
213
+ !(tool.aliasOf && disabled.has(tool.aliasOf)));
214
+ }
215
+ function updateMcpToolPolicy(name, input) {
216
+ ensureMcpAdminSchema();
217
+ if (!MCP_TOOL_REGISTRY().some((tool) => tool.name === name))
218
+ return null;
219
+ const current = getMcpToolPolicy(name);
220
+ // Rôles/scopes acceptés : injectés par la marque via les adapters
221
+ // (défauts = comportement historique TempoFlow, zéro breaking change).
222
+ const roles = (input.allowedRoles || current.allowedRoles).filter((role) => policyRoleNames().includes(role));
223
+ const scopes = (input.allowedScopes || current.allowedScopes).filter((scope) => policyScopeNames().includes(scope));
224
+ // `admin_override` ne se pose QUE sur une action explicite sur `enabled`
225
+ // (une édition rôles/scopes ne requalifie pas un seed par défaut en
226
+ // désactivation admin) — consommé par disabledMcpToolPolicyNames().
227
+ getWriteDb()
228
+ .prepare(`UPDATE mcp_tool_policies
229
+ SET enabled = ?, allowed_roles = ?, allowed_scopes = ?,
230
+ admin_override = MAX(admin_override, ?),
231
+ updated_at = datetime('now')
232
+ WHERE tool_name = ?`)
233
+ .run((input.enabled ?? current.enabled) ? 1 : 0, roles.join(","), scopes.join(","), input.enabled === undefined ? 0 : 1, name);
234
+ auditMcpAdmin("tool_policy_updated", {
235
+ toolName: name,
236
+ detail: { enabled: input.enabled ?? current.enabled, roles, scopes },
237
+ });
238
+ return getMcpToolPolicy(name);
239
+ }
240
+ function listMcpClients() {
241
+ ensureMcpAdminSchema();
242
+ if (!mcpOauthReady())
243
+ return [];
244
+ const rows = getDb()
245
+ .prepare(`SELECT c.client_id, c.client_name, c.redirect_uris,
246
+ c.token_endpoint_auth_method, c.scope, c.created_at,
247
+ c.enabled, c.revoked_at, c.last_used_at,
248
+ SUM(CASE WHEN r.revoked_at IS NULL AND r.expires_at > unixepoch() THEN 1 ELSE 0 END)
249
+ AS active_refresh_tokens
250
+ FROM mcp_oauth_clients c
251
+ LEFT JOIN mcp_oauth_refresh_tokens r ON r.client_id = c.client_id
252
+ GROUP BY c.client_id
253
+ ORDER BY c.created_at DESC`)
254
+ .all();
255
+ return rows.map((row) => ({
256
+ ...row,
257
+ enabled: row.enabled !== 0 && !row.revoked_at,
258
+ redirect_uris: safeStringArray(row.redirect_uris),
259
+ active_refresh_tokens: Number(row.active_refresh_tokens || 0),
260
+ }));
261
+ }
262
+ function safeStringArray(raw) {
263
+ try {
264
+ const parsed = JSON.parse(raw);
265
+ return Array.isArray(parsed) ? parsed.map(String) : [];
266
+ }
267
+ catch {
268
+ return [];
269
+ }
270
+ }
271
+ function setMcpClientEnabled(clientId, enabled) {
272
+ ensureMcpAdminSchema();
273
+ const result = getWriteDb()
274
+ .prepare(`UPDATE mcp_oauth_clients SET enabled = ? WHERE client_id = ? AND revoked_at IS NULL`)
275
+ .run(enabled ? 1 : 0, clientId);
276
+ if (result.changes) {
277
+ if (!enabled)
278
+ revokeClientTokens(clientId);
279
+ auditMcpAdmin(enabled ? "client_enabled" : "client_disabled", { clientId });
280
+ }
281
+ return result.changes > 0;
282
+ }
283
+ function revokeMcpClient(clientId) {
284
+ ensureMcpAdminSchema();
285
+ const result = getWriteDb()
286
+ .prepare(`UPDATE mcp_oauth_clients
287
+ SET enabled = 0, revoked_at = COALESCE(revoked_at, datetime('now'))
288
+ WHERE client_id = ?`)
289
+ .run(clientId);
290
+ revokeClientTokens(clientId);
291
+ if (result.changes)
292
+ auditMcpAdmin("client_revoked", { clientId });
293
+ return result.changes > 0;
294
+ }
295
+ function rotateMcpClientSecret(clientId) {
296
+ ensureMcpAdminSchema();
297
+ const client = getDb()
298
+ .prepare(`SELECT token_endpoint_auth_method, revoked_at
299
+ FROM mcp_oauth_clients WHERE client_id = ?`)
300
+ .get(clientId);
301
+ if (!client || client.revoked_at || client.token_endpoint_auth_method === "none")
302
+ return null;
303
+ const clientSecret = (0, node_crypto_1.randomBytes)(32).toString("base64url");
304
+ const hash = (0, node_crypto_1.createHash)("sha256").update(clientSecret, "utf8").digest("hex");
305
+ getWriteDb()
306
+ .prepare(`UPDATE mcp_oauth_clients SET client_secret_hash = ? WHERE client_id = ?`)
307
+ .run(hash, clientId);
308
+ revokeClientTokens(clientId);
309
+ auditMcpAdmin("client_secret_rotated", { clientId });
310
+ return { clientSecret };
311
+ }
312
+ function revokeClientTokens(clientId) {
313
+ getWriteDb()
314
+ .prepare(`UPDATE mcp_oauth_refresh_tokens
315
+ SET revoked_at = COALESCE(revoked_at, unixepoch())
316
+ WHERE client_id = ?`)
317
+ .run(clientId);
318
+ }
319
+ function clientCanAuthenticate(clientId) {
320
+ ensureMcpAdminSchema();
321
+ const row = getDb()
322
+ .prepare(`SELECT enabled, revoked_at FROM mcp_oauth_clients WHERE client_id = ?`)
323
+ .get(clientId);
324
+ return Boolean(row && row.enabled !== 0 && !row.revoked_at);
325
+ }
326
+ function touchMcpClient(clientId) {
327
+ ensureMcpAdminSchema();
328
+ getWriteDb()
329
+ .prepare(`UPDATE mcp_oauth_clients SET last_used_at = datetime('now') WHERE client_id = ?`)
330
+ .run(clientId);
331
+ }
332
+ function mcpAdminStatus() {
333
+ const publicUrl = resolveMcpPublicUrl();
334
+ const clients = listMcpClients();
335
+ const tools = listMcpToolPolicies();
336
+ return {
337
+ ready: mcpOauthReady(),
338
+ publicUrl,
339
+ mcpUrl: publicUrl ? `${publicUrl}/mcp` : null,
340
+ oauthReady: mcpOauthReady(),
341
+ jwtConfigured: Boolean(process.env.MCP_JWT_SECRET),
342
+ toolCount: tools.length,
343
+ enabledToolCount: tools.filter((tool) => tool.enabled).length,
344
+ clientCount: clients.length,
345
+ enabledClientCount: clients.filter((client) => client.enabled).length,
346
+ };
347
+ }
348
+ function mcpDiagnostics() {
349
+ const status = mcpAdminStatus();
350
+ const checks = [
351
+ { id: "oauth_schema", ok: status.oauthReady, message: "Tables OAuth MCP" },
352
+ { id: "jwt_secret", ok: status.jwtConfigured, message: "Secret JWT MCP configuré" },
353
+ { id: "public_url", ok: Boolean(status.publicUrl), message: "URL publique / tunnel" },
354
+ { id: "tools", ok: status.enabledToolCount > 0, message: "Au moins un tool actif" },
355
+ ];
356
+ return { status, checks, healthy: checks.every((check) => check.ok) };
357
+ }
358
+ function mcpMetrics() {
359
+ const logs = listRequestLogs({ source: "mcp", limit: 1000 }).logs;
360
+ const errors = logs.filter((log) => log.status >= 400 || log.detail.ok === false);
361
+ const durations = logs.map((log) => log.durationMs).sort((a, b) => a - b);
362
+ return {
363
+ window: "process",
364
+ requests: logs.length,
365
+ errors: errors.length,
366
+ errorRate: logs.length ? errors.length / logs.length : 0,
367
+ averageDurationMs: logs.length
368
+ ? Math.round(logs.reduce((sum, log) => sum + log.durationMs, 0) / logs.length)
369
+ : 0,
370
+ p95DurationMs: durations.length
371
+ ? durations[Math.min(durations.length - 1, Math.floor(durations.length * 0.95))]
372
+ : 0,
373
+ byTool: Object.fromEntries(MCP_TOOL_REGISTRY().map((tool) => [
374
+ tool.name,
375
+ logs.filter((log) => log.detail.tool === tool.name).length,
376
+ ])),
377
+ };
378
+ }
379
+ function auditMcpAdmin(event, options = {}) {
380
+ ensureMcpAdminSchema();
381
+ getWriteDb()
382
+ .prepare(`INSERT INTO mcp_audit_logs
383
+ (event, actor, client_id, tool_name, outcome, detail_json)
384
+ VALUES (?, ?, ?, ?, ?, ?)`)
385
+ .run(event, options.actor || null, options.clientId || null, options.toolName || null, options.outcome || "ok", options.detail == null ? null : JSON.stringify(options.detail));
386
+ }
387
+ function listMcpAuditLogs(limit = 200) {
388
+ ensureMcpAdminSchema();
389
+ return getDb()
390
+ .prepare(`SELECT id, created_at, event, actor, client_id, tool_name, outcome, detail_json
391
+ FROM mcp_audit_logs ORDER BY id DESC LIMIT ?`)
392
+ .all(Math.min(1000, Math.max(1, limit)));
393
+ }
394
+ function pruneMcpAuditLogs(retentionDays = Number(process.env.MCP_AUDIT_RETENTION_DAYS || 30)) {
395
+ if (!tableExists("mcp_audit_logs"))
396
+ return 0;
397
+ const days = Number.isFinite(retentionDays)
398
+ ? Math.min(365, Math.max(1, Math.floor(retentionDays)))
399
+ : 30;
400
+ return getWriteDb()
401
+ .prepare(`DELETE FROM mcp_audit_logs WHERE created_at < datetime('now', ?)`)
402
+ .run(`-${days} days`).changes;
403
+ }
404
+ function exportMcpDiagnostics() {
405
+ const clients = listMcpClients().map((client) => ({
406
+ idPrefix: client.client_id.slice(0, 12),
407
+ name: client.client_name,
408
+ redirectHosts: client.redirect_uris.map((uri) => {
409
+ try {
410
+ return new URL(uri).host;
411
+ }
412
+ catch {
413
+ return "invalid";
414
+ }
415
+ }),
416
+ scope: client.scope,
417
+ enabled: client.enabled,
418
+ revoked: Boolean(client.revoked_at),
419
+ lastUsedAt: client.last_used_at,
420
+ }));
421
+ return {
422
+ generatedAt: new Date().toISOString(),
423
+ diagnostics: mcpDiagnostics(),
424
+ metrics: mcpMetrics(),
425
+ tools: listMcpToolPolicies().map((tool) => ({
426
+ name: tool.name,
427
+ enabled: tool.enabled,
428
+ requiredScope: tool.requiredScope,
429
+ allowedRoles: tool.allowedRoles,
430
+ allowedScopes: tool.allowedScopes,
431
+ })),
432
+ clients,
433
+ auditRetentionDays: Number(process.env.MCP_AUDIT_RETENTION_DAYS || 30),
434
+ configuration: {
435
+ corsConfigured: Boolean(process.env.MCP_CORS_ORIGINS?.trim()),
436
+ publicUrlConfigured: Boolean(resolveMcpPublicUrl()),
437
+ jwtConfigured: Boolean(process.env.MCP_JWT_SECRET),
438
+ },
439
+ };
440
+ }
441
+ //# sourceMappingURL=mcp-admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-admin.js","sourceRoot":"","sources":["../../src/admin/mcp-admin.ts"],"names":[],"mappings":";;AAyDA,oDA8DC;AAOD,kDA4BC;AASD,kDA4BC;AAED,4CAEC;AAaD,gEAaC;AAGD,4EAcC;AAED,kDAsCC;AAeD,wCAyBC;AAWD,kDAUC;AAED,0CAYC;AAED,sDAqBC;AAYD,sDAQC;AAED,wCAKC;AAED,wCAeC;AAED,wCASC;AAED,gCAsBC;AAED,sCAyBC;AAED,4CAQC;AAED,8CAUC;AAED,oDAmCC;AA7hBD,6CAAsD;AACtD,+CAAoD;AAKpD,SAAS,KAAK;IACZ,OAAO,IAAA,iCAAmB,GAAE,CAAC,KAAK,EAAE,CAAC;AACvC,CAAC;AACD,SAAS,UAAU;IACjB,OAAO,IAAA,iCAAmB,GAAE,CAAC,UAAU,EAAE,CAAC;AAC5C,CAAC;AACD,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,IAAA,iCAAmB,GAAE,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AACjD,CAAC;AACD,SAAS,iBAAiB;IACxB,OAAO,IAAA,iCAAmB,GAAE,CAAC,SAAS,EAAE,CAAC;AAC3C,CAAC;AACD,SAAS,aAAa;IACpB,OAAO,IAAA,iCAAmB,GAAE,CAAC,aAAa,EAAE,CAAC;AAC/C,CAAC;AACD,SAAS,mBAAmB;IAC1B,OAAO,IAAA,iCAAmB,GAAE,CAAC,mBAAmB,EAAE,CAAC;AACrD,CAAC;AACD,SAAS,eAAe,CAAC,IAAuC;IAC9D,MAAM,EAAE,GAAG,IAAA,iCAAmB,GAAE,CAAC,eAAe,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAoF,EAAE,CAAC;AACxH,CAAC;AAED,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,sEAAsE;AACtE,SAAS,eAAe;IACtB,OAAO,IAAA,iCAAmB,GAAE,CAAC,eAAe,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC;AAC5E,CAAC;AAED,uEAAuE;AACvE,SAAS,gBAAgB;IACvB,OAAO,CACL,IAAA,iCAAmB,GAAE,CAAC,gBAAgB,IAAI;QACxC,KAAK;QACL,UAAU;QACV,WAAW;QACX,MAAM;KACP,CACF,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,KAAa,EAAE,MAAc;IAC9C,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,OACE,KAAK,EAAE;SACJ,OAAO,CAAC,sBAAsB,KAAK,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC;SAC9D,GAAG,EACP,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAI,aAAa;QAAE,OAAO;IAC1B,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,IAAI,WAAW,CAAC,mBAAmB,CAAC,EAAE,CAAC;QACrC,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAAE,CAAC;YAC/C,EAAE,CAAC,IAAI,CAAC,6EAA6E,CAAC,CAAC;QACzF,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,YAAY,CAAC,EAAE,CAAC;YAClD,EAAE,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,mBAAmB,EAAE,cAAc,CAAC,EAAE,CAAC;YACpD,EAAE,CAAC,IAAI,CAAC,4DAA4D,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;IACD,IACE,WAAW,CAAC,mBAAmB,CAAC;QAChC,CAAC,SAAS,CAAC,mBAAmB,EAAE,gBAAgB,CAAC,EACjD,CAAC;QACD,EAAE,CAAC,IAAI,CACL,oFAAoF,CACrF,CAAC;IACJ,CAAC;IACD,EAAE,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;GAuBP,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;;yBAEqB,CACtB,CAAC;IACF,MAAM,MAAM,GAAG,GAAG,EAAE;QAClB,KAAK,MAAM,IAAI,IAAI,iBAAiB,EAAE,EAAE,CAAC;YACvC,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,WAAW;QAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;;QACxC,MAAM,EAAE,CAAC;IACd,iBAAiB,EAAE,CAAC;IACpB,aAAa,GAAG,IAAI,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,SAAgB,mBAAmB,CACjC,KAQC;IAED,oBAAoB,EAAE,CAAC;IACvB,MAAM,EAAE,GAAG,UAAU,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,CAAC,OAAO,CACvB;;yBAEqB,CACtB,CAAC;IACF,MAAM,GAAG,GAAG,GAAG,EAAE;QACf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,EAAE,IAAI;gBAAE,SAAS;YAC1B,MAAM,KAAK,GAAG,CAAC,IAAI,CAAC,YAAY,IAAI,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;QAClE,CAAC;IACH,CAAC,CAAC;IACF,IAAI,EAAE,CAAC,WAAW;QAAE,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;;QACrC,GAAG,EAAE,CAAC;AACb,CAAC;AASD,SAAgB,mBAAmB;IACjC,oBAAoB,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,KAAK,EAAE;SACjB,OAAO,CACN;8BACwB,CACzB;SACA,GAAG,EAMJ,CAAC;IACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAChE,OAAO,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACtC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,KAAK,KAAK,CAAC;QACxD,OAAO;YACL,GAAG,IAAI;YACP,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc;YACjD,YAAY,EAAE,CAAC,GAAG,EAAE,aAAa,IAAI,eAAe,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;iBAC9D,KAAK,CAAC,GAAG,CAAC;iBACV,MAAM,CAAC,OAAO,CAAC;YAClB,aAAa,EAAE,CAAC,GAAG,EAAE,cAAc,IAAI,IAAI,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YAC1F,SAAS,EAAE,GAAG,EAAE,UAAU,IAAI,IAAI;SACnC,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,gBAAgB,CAAC,IAAY;IAC3C,OAAO,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,CAAC;AAC1E,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAgB,0BAA0B;IACxC,IAAI,CAAC;QACH,oBAAoB,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,KAAK,EAAE;aACjB,OAAO,CACN;kDAC0C,CAC3C;aACA,GAAG,EAAkC,CAAC;QACzC,OAAO,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;AACH,CAAC;AAED,0EAA0E;AAC1E,SAAgB,gCAAgC,CAE9C,KAAU,EAAE,UAAkC,EAAE;IAChD,MAAM,QAAQ,GAAG,0BAA0B,EAAE,CAAC;IAC9C,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,KAAK,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzD,IAAI,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,KAAK,CAAC,MAAM,CACjB,CAAC,IAAI,EAAE,EAAE,CACP,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,IAAI,CAAC,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAChD,CAAC;AACJ,CAAC;AAED,SAAgB,mBAAmB,CACjC,IAAY,EACZ,KAA+E;IAE/E,oBAAoB,EAAE,CAAC;IACvB,IAAI,CAAC,iBAAiB,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzE,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAE,CAAC;IACxC,kEAAkE;IAClE,uEAAuE;IACvE,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CACzE,eAAe,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CACjC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,aAAa,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC7E,gBAAgB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CACnC,CAAC;IACF,yEAAyE;IACzE,oEAAoE;IACpE,oEAAoE;IACpE,UAAU,EAAE;SACT,OAAO,CACN;;;;2BAIqB,CACtB;SACA,GAAG,CACF,CAAC,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAC1C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EACf,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAChB,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACnC,IAAI,CACL,CAAC;IACJ,aAAa,CAAC,qBAAqB,EAAE;QACnC,QAAQ,EAAE,IAAI;QACd,MAAM,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE;KACrE,CAAC,CAAC;IACH,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC;AAeD,SAAgB,cAAc;IAC5B,oBAAoB,EAAE,CAAC;IACvB,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,KAAK,EAAE;SACjB,OAAO,CACN;;;;;;;;kCAQ4B,CAC7B;SACA,GAAG,EAGJ,CAAC;IACH,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACxB,GAAG,GAAG;QACN,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU;QAC7C,aAAa,EAAE,eAAe,CAAC,GAAG,CAAC,aAAa,CAAC;QACjD,qBAAqB,EAAE,MAAM,CAAC,GAAG,CAAC,qBAAqB,IAAI,CAAC,CAAC;KAC9D,CAAC,CAAC,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAgB,mBAAmB,CAAC,QAAgB,EAAE,OAAgB;IACpE,oBAAoB,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE;SACxB,OAAO,CAAC,qFAAqF,CAAC;SAC9F,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IAClC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACnB,IAAI,CAAC,OAAO;YAAE,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QAC3C,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,iBAAiB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,eAAe,CAAC,QAAgB;IAC9C,oBAAoB,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,UAAU,EAAE;SACxB,OAAO,CACN;;2BAEqB,CACtB;SACA,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjB,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,IAAI,MAAM,CAAC,OAAO;QAAE,aAAa,CAAC,gBAAgB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC;AAC5B,CAAC;AAED,SAAgB,qBAAqB,CACnC,QAAgB;IAEhB,oBAAoB,EAAE,CAAC;IACvB,MAAM,MAAM,GAAG,KAAK,EAAE;SACnB,OAAO,CACN;kDAC4C,CAC7C;SACA,GAAG,CAAC,QAAQ,CAEF,CAAC;IACd,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,IAAI,MAAM,CAAC,0BAA0B,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC9F,MAAM,YAAY,GAAG,IAAA,yBAAW,EAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,IAAA,wBAAU,EAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC7E,UAAU,EAAE;SACT,OAAO,CAAC,yEAAyE,CAAC;SAClF,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvB,kBAAkB,CAAC,QAAQ,CAAC,CAAC;IAC7B,aAAa,CAAC,uBAAuB,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;IACrD,OAAO,EAAE,YAAY,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,kBAAkB,CAAC,QAAgB;IAC1C,UAAU,EAAE;SACT,OAAO,CACN;;2BAEqB,CACtB;SACA,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnB,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAAgB;IACpD,oBAAoB,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,KAAK,EAAE;SAChB,OAAO,CACN,uEAAuE,CACxE;SACA,GAAG,CAAC,QAAQ,CAA+D,CAAC;IAC/E,OAAO,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAC9D,CAAC;AAED,SAAgB,cAAc,CAAC,QAAgB;IAC7C,oBAAoB,EAAE,CAAC;IACvB,UAAU,EAAE;SACT,OAAO,CAAC,iFAAiF,CAAC;SAC1F,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;IACxC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,mBAAmB,EAAE,CAAC;IACpC,OAAO;QACL,KAAK,EAAE,aAAa,EAAE;QACtB,SAAS;QACT,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC,IAAI;QAC7C,UAAU,EAAE,aAAa,EAAE;QAC3B,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;QAClD,SAAS,EAAE,KAAK,CAAC,MAAM;QACvB,gBAAgB,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM;QAC7D,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM;KACtE,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG;QACb,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,OAAO,EAAE,kBAAkB,EAAE;QAC1E,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,CAAC,aAAa,EAAE,OAAO,EAAE,0BAA0B,EAAE;QACnF,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,OAAO,EAAE,uBAAuB,EAAE;QACrF,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,gBAAgB,GAAG,CAAC,EAAE,OAAO,EAAE,wBAAwB,EAAE;KACpF,CAAC;IACF,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;AACxE,CAAC;AAED,SAAgB,UAAU;IACxB,MAAM,IAAI,GAAG,eAAe,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC;IAClE,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC;IAClF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1E,OAAO;QACL,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,IAAI,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QACxD,iBAAiB,EAAE,IAAI,CAAC,MAAM;YAC5B,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC9E,CAAC,CAAC,CAAC;QACL,aAAa,EAAE,SAAS,CAAC,MAAM;YAC7B,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,CAAC;QACL,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,iBAAiB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;SAC3D,CAAC,CACH;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,aAAa,CAC3B,KAAa,EACb,UAMI,EAAE;IAEN,oBAAoB,EAAE,CAAC;IACvB,UAAU,EAAE;SACT,OAAO,CACN;;iCAE2B,CAC5B;SACA,GAAG,CACF,KAAK,EACL,OAAO,CAAC,KAAK,IAAI,IAAI,EACrB,OAAO,CAAC,QAAQ,IAAI,IAAI,EACxB,OAAO,CAAC,QAAQ,IAAI,IAAI,EACxB,OAAO,CAAC,OAAO,IAAI,IAAI,EACvB,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAC/D,CAAC;AACN,CAAC;AAED,SAAgB,gBAAgB,CAAC,KAAK,GAAG,GAAG;IAC1C,oBAAoB,EAAE,CAAC;IACvB,OAAO,KAAK,EAAE;SACX,OAAO,CACN;oDAC8C,CAC/C;SACA,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,SAAgB,iBAAiB,CAC/B,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC;IAElE,IAAI,CAAC,WAAW,CAAC,gBAAgB,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,EAAE,CAAC;IACP,OAAO,UAAU,EAAE;SAChB,OAAO,CAAC,kEAAkE,CAAC;SAC3E,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC,OAAO,CAAC;AAClC,CAAC;AAED,SAAgB,oBAAoB;IAClC,MAAM,OAAO,GAAG,cAAc,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAChD,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;QACvC,IAAI,EAAE,MAAM,CAAC,WAAW;QACxB,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,IAAI,CAAC;gBACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC,CAAC;QACF,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC;QACnC,UAAU,EAAE,MAAM,CAAC,YAAY;KAChC,CAAC,CAAC,CAAC;IACJ,OAAO;QACL,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,WAAW,EAAE,cAAc,EAAE;QAC7B,OAAO,EAAE,UAAU,EAAE;QACrB,KAAK,EAAE,mBAAmB,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAC;QACH,OAAO;QACP,kBAAkB,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,wBAAwB,IAAI,EAAE,CAAC;QACtE,aAAa,EAAE;YACb,cAAc,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;YAC7D,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACnD,aAAa,EAAE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC;SACnD;KACF,CAAC;AACJ,CAAC"}