appium-mcp 1.75.5 → 1.75.7

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 (32) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/tests/tools/gestures/ai-element.test.js +13 -1
  3. package/dist/tests/tools/gestures/ai-element.test.js.map +1 -1
  4. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts +2 -0
  5. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.d.ts.map +1 -0
  6. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js +86 -0
  7. package/dist/tests/tools/interactions/webdriver-ai-element-rejection.test.js.map +1 -0
  8. package/dist/tests/tools/llm-wording.test.d.ts +2 -0
  9. package/dist/tests/tools/llm-wording.test.d.ts.map +1 -0
  10. package/dist/tests/tools/llm-wording.test.js +85 -0
  11. package/dist/tests/tools/llm-wording.test.js.map +1 -0
  12. package/dist/tools/documentation/uploads/embeddings-Xenova-bge-small-en-v1.5.json +1 -1
  13. package/dist/tools/gestures/handlers/ai-element.d.ts +3 -0
  14. package/dist/tools/gestures/handlers/ai-element.d.ts.map +1 -1
  15. package/dist/tools/gestures/handlers/ai-element.js +12 -0
  16. package/dist/tools/gestures/handlers/ai-element.js.map +1 -1
  17. package/dist/tools/interactions/get-element-attribute.d.ts.map +1 -1
  18. package/dist/tools/interactions/get-element-attribute.js +5 -0
  19. package/dist/tools/interactions/get-element-attribute.js.map +1 -1
  20. package/dist/tools/interactions/get-text.d.ts.map +1 -1
  21. package/dist/tools/interactions/get-text.js +5 -0
  22. package/dist/tools/interactions/get-text.js.map +1 -1
  23. package/dist/tools/interactions/set-value.d.ts.map +1 -1
  24. package/dist/tools/interactions/set-value.js +7 -0
  25. package/dist/tools/interactions/set-value.js.map +1 -1
  26. package/package.json +2 -2
  27. package/server.json +2 -2
  28. package/src/resources/submodules.zip +0 -0
  29. package/src/tools/gestures/handlers/ai-element.ts +18 -0
  30. package/src/tools/interactions/get-element-attribute.ts +6 -0
  31. package/src/tools/interactions/get-text.ts +6 -0
  32. package/src/tools/interactions/set-value.ts +10 -0
package/CHANGELOG.md CHANGED
@@ -1,3 +1,15 @@
1
+ ## [1.75.7](https://github.com/appium/appium-mcp/compare/v1.75.6...v1.75.7) (2026-05-23)
2
+
3
+ ### Bug Fixes
4
+
5
+ * apply npm pkg fix to tweak package.json ([#362](https://github.com/appium/appium-mcp/issues/362)) ([412cae1](https://github.com/appium/appium-mcp/commit/412cae1f722d64ee3b73a2f3f050e022607fe0c1))
6
+
7
+ ## [1.75.6](https://github.com/appium/appium-mcp/compare/v1.75.5...v1.75.6) (2026-05-23)
8
+
9
+ ### Bug Fixes
10
+
11
+ * **interactions:** reject ai-element tokens in get and set tools ([#358](https://github.com/appium/appium-mcp/issues/358)) ([ac630a3](https://github.com/appium/appium-mcp/commit/ac630a3881bc58e262bac73e8fc687e13e57c286))
12
+
1
13
  ## [1.75.5](https://github.com/appium/appium-mcp/compare/v1.75.4...v1.75.5) (2026-05-23)
2
14
 
3
15
  ### Bug Fixes
@@ -7,7 +7,7 @@ jest.unstable_mockModule('../../../session-store', () => ({
7
7
  jest.unstable_mockModule('../../../command', () => ({
8
8
  getElementRect: jest.fn(),
9
9
  }));
10
- const { AI_ELEMENT_PREFIX, isAiElementUUID, parseAiElement, resolveTargetRect, } = await import('../../../tools/gestures/handlers/ai-element.js');
10
+ const { AI_ELEMENT_PREFIX, AI_WEBDRIVER_REJECTION, isAiElementUUID, parseAiElement, resolveTargetRect, aiElementWebDriverRejectionIfNeeded, } = await import('../../../tools/gestures/handlers/ai-element.js');
11
11
  const fakeDriver = {};
12
12
  describe('isAiElementUUID', () => {
13
13
  test('returns true for ai-element UUIDs', () => {
@@ -20,6 +20,18 @@ describe('isAiElementUUID', () => {
20
20
  expect(isAiElementUUID(undefined)).toBe(false);
21
21
  });
22
22
  });
23
+ describe('aiElementWebDriverRejectionIfNeeded', () => {
24
+ test('returns isError for ai-element UUIDs', () => {
25
+ const result = aiElementWebDriverRejectionIfNeeded('ai-element:100,200:50,150,150,250');
26
+ expect(result?.isError).toBe(true);
27
+ const block = result?.content[0];
28
+ expect(block && 'text' in block && block.text).toBe(AI_WEBDRIVER_REJECTION);
29
+ });
30
+ test('returns undefined for real element ids and missing values', () => {
31
+ expect(aiElementWebDriverRejectionIfNeeded('aaaaaaaa-bbbb-cccc-dddd')).toBeUndefined();
32
+ expect(aiElementWebDriverRejectionIfNeeded(undefined)).toBeUndefined();
33
+ });
34
+ });
23
35
  describe('parseAiElement', () => {
24
36
  test('parses centre + bbox into a rect that spans the bbox', () => {
25
37
  const result = parseAiElement('ai-element:200,300:100,200,300,400');
@@ -1 +1 @@
1
- {"version":3,"file":"ai-element.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/ai-element.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-element.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/gestures/ai-element.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=webdriver-ai-element-rejection.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdriver-ai-element-rejection.test.d.ts","sourceRoot":"","sources":["../../../../src/tests/tools/interactions/webdriver-ai-element-rejection.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,86 @@
1
+ import { describe, test, expect, jest, beforeEach } from '@jest/globals';
2
+ jest.unstable_mockModule('../../../session-store.js', () => ({
3
+ getDriver: jest.fn(),
4
+ }));
5
+ jest.unstable_mockModule('../../../command.js', () => ({
6
+ getElementRect: jest.fn(),
7
+ setValue: jest.fn(),
8
+ getElementText: jest.fn(),
9
+ getElementAttribute: jest.fn(),
10
+ }));
11
+ const { getDriver } = await import('../../../session-store.js');
12
+ const { setValue, getElementText, getElementAttribute } = await import('../../../command.js');
13
+ const { AI_WEBDRIVER_REJECTION } = await import('../../../tools/gestures/handlers/ai-element.js');
14
+ const mockGetDriver = getDriver;
15
+ const mockSetValue = setValue;
16
+ const mockGetElementText = getElementText;
17
+ const mockGetElementAttribute = getElementAttribute;
18
+ const AI_UUID = 'ai-element:100,200:50,150,150,250';
19
+ const REAL_UUID = '11111111-2222-3333-4444-555555555555';
20
+ function textFromResult(result) {
21
+ const block = result.content[0];
22
+ return block && 'text' in block ? block.text : undefined;
23
+ }
24
+ describe('interaction tools and ai-element tokens', () => {
25
+ const mockServer = { addTool: jest.fn() };
26
+ beforeEach(() => {
27
+ mockGetDriver.mockReturnValue({});
28
+ mockSetValue.mockReset();
29
+ mockGetElementText.mockReset();
30
+ mockGetElementAttribute.mockReset();
31
+ });
32
+ async function loadTool(modulePath) {
33
+ const mod = await import(modulePath);
34
+ mod.default(mockServer);
35
+ return mockServer.addTool.mock.calls.at(-1)?.[0];
36
+ }
37
+ async function runTool(tool, args) {
38
+ return tool.execute(args, undefined);
39
+ }
40
+ test('set_value rejects ai-element without w3cActions', async () => {
41
+ const tool = await loadTool('../../../tools/interactions/set-value.js');
42
+ const result = await runTool(tool, { elementUUID: AI_UUID, text: 'hello' });
43
+ expect(result.isError).toBe(true);
44
+ expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
45
+ expect(mockSetValue).not.toHaveBeenCalled();
46
+ });
47
+ test('set_value still works with w3cActions', async () => {
48
+ const tool = await loadTool('../../../tools/interactions/set-value.js');
49
+ mockSetValue.mockResolvedValueOnce(undefined);
50
+ const result = await runTool(tool, {
51
+ elementUUID: AI_UUID,
52
+ text: 'hello',
53
+ w3cActions: true,
54
+ });
55
+ expect(result.isError).toBeUndefined();
56
+ expect(mockSetValue).toHaveBeenCalled();
57
+ });
58
+ test('set_value accepts a normal element id', async () => {
59
+ const tool = await loadTool('../../../tools/interactions/set-value.js');
60
+ mockSetValue.mockResolvedValueOnce(undefined);
61
+ const result = await runTool(tool, {
62
+ elementUUID: REAL_UUID,
63
+ text: 'hello',
64
+ });
65
+ expect(result.isError).toBeUndefined();
66
+ expect(mockSetValue).toHaveBeenCalledWith(expect.anything(), REAL_UUID, 'hello', undefined);
67
+ });
68
+ test('get_text rejects ai-element', async () => {
69
+ const tool = await loadTool('../../../tools/interactions/get-text.js');
70
+ const result = await runTool(tool, { elementUUID: AI_UUID });
71
+ expect(result.isError).toBe(true);
72
+ expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
73
+ expect(mockGetElementText).not.toHaveBeenCalled();
74
+ });
75
+ test('get_element_attribute rejects ai-element', async () => {
76
+ const tool = await loadTool('../../../tools/interactions/get-element-attribute.js');
77
+ const result = await runTool(tool, {
78
+ elementUUID: AI_UUID,
79
+ attribute: 'enabled',
80
+ });
81
+ expect(result.isError).toBe(true);
82
+ expect(textFromResult(result)).toBe(AI_WEBDRIVER_REJECTION);
83
+ expect(mockGetElementAttribute).not.toHaveBeenCalled();
84
+ });
85
+ });
86
+ //# sourceMappingURL=webdriver-ai-element-rejection.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webdriver-ai-element-rejection.test.js","sourceRoot":"","sources":["../../../../src/tests/tools/interactions/webdriver-ai-element-rejection.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=llm-wording.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-wording.test.d.ts","sourceRoot":"","sources":["../../../src/tests/tools/llm-wording.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,85 @@
1
+ import { describe, expect, jest, test } from '@jest/globals';
2
+ jest.unstable_mockModule('../../tools/tool-response', () => ({
3
+ errorResult: jest.fn((text) => ({
4
+ content: [{ type: 'text', text }],
5
+ isError: true,
6
+ })),
7
+ readWebElementId: jest.fn(),
8
+ resolveDriver: jest.fn(),
9
+ textResultWithPrimaryElementId: jest.fn(),
10
+ toolErrorMessage: jest.fn((err) => err instanceof Error ? err.message : String(err)),
11
+ }));
12
+ jest.unstable_mockModule('../../tools/session/attach-session', () => ({
13
+ attachSessionAction: jest.fn(),
14
+ }));
15
+ jest.unstable_mockModule('../../tools/session/create-session', () => ({
16
+ createSessionAction: jest.fn(),
17
+ }));
18
+ jest.unstable_mockModule('../../tools/session/delete-session', () => ({
19
+ deleteSessionAction: jest.fn(),
20
+ }));
21
+ jest.unstable_mockModule('../../tools/session/detach-session', () => ({
22
+ detachSessionAction: jest.fn(),
23
+ }));
24
+ jest.unstable_mockModule('../../tools/session/list-sessions', () => ({
25
+ listSessionsAction: jest.fn(),
26
+ }));
27
+ jest.unstable_mockModule('../../tools/session/select-session', () => ({
28
+ selectSessionAction: jest.fn(),
29
+ }));
30
+ function normalizeText(text) {
31
+ return text.replace(/\s+/g, ' ').trim();
32
+ }
33
+ async function registerTool(modulePath) {
34
+ const server = { addTool: jest.fn() };
35
+ const { default: register } = await import(modulePath);
36
+ register(server);
37
+ return server.addTool.mock.calls.at(-1)?.[0];
38
+ }
39
+ function paramDescription(tool, name) {
40
+ return tool.parameters.shape[name]?.description ?? '';
41
+ }
42
+ describe('LLM-facing MCP tool wording', () => {
43
+ test('appium_find_element guides models away from brittle or wrong find modes', async () => {
44
+ const tool = await registerTool('../../tools/interactions/find.js');
45
+ const description = normalizeText(tool.description);
46
+ const strategyDescription = normalizeText(paramDescription(tool, 'strategy'));
47
+ const selectorDescription = normalizeText(paramDescription(tool, 'selector'));
48
+ expect(tool.name).toBe('appium_find_element');
49
+ expect(description).toMatch(/strategy and selector/i);
50
+ expect(description).toMatch(/accessibility id .* id .* xpath/i);
51
+ expect(description).toMatch(/xpath.*last resort/i);
52
+ expect(description).toMatch(/appium_gesture.*scroll_to_element/i);
53
+ expect(description).toMatch(/appium_ai.*find_element/i);
54
+ expect(strategyDescription).toMatch(/cross-platform.*fastest.*stable/i);
55
+ expect(strategyDescription).toMatch(/iOS prefer/i);
56
+ expect(strategyDescription).toMatch(/Android prefer/i);
57
+ expect(strategyDescription).toMatch(/xpath last/i);
58
+ expect(selectorDescription).toMatch(/Do not pass natural-language descriptions/i);
59
+ });
60
+ test('appium_session_management explains local vs remote session creation', async () => {
61
+ const tool = await registerTool('../../tools/session/session.js');
62
+ const description = normalizeText(tool.description);
63
+ const actionDescription = normalizeText(paramDescription(tool, 'action'));
64
+ const platformDescription = normalizeText(paramDescription(tool, 'platform'));
65
+ const remoteServerUrlDescription = normalizeText(paramDescription(tool, 'remoteServerUrl'));
66
+ const sessionIdDescription = normalizeText(paramDescription(tool, 'sessionId'));
67
+ expect(tool.name).toBe('appium_session_management');
68
+ expect(description).toMatch(/create.*attach.*detach.*delete.*list.*select/i);
69
+ expect(actionDescription).toMatch(/DEFAULT MODE/i);
70
+ expect(actionDescription).toMatch(/no separate Appium process is needed/i);
71
+ expect(actionDescription).toMatch(/select_device tool FIRST/i);
72
+ expect(actionDescription).toMatch(/do NOT pass remoteServerUrl/i);
73
+ expect(actionDescription).toMatch(/NEVER invent a localhost URL/i);
74
+ expect(actionDescription).toMatch(/REMOTE SERVER MODE/i);
75
+ expect(actionDescription).toMatch(/only when user explicitly provides/i);
76
+ expect(actionDescription).toMatch(/without taking ownership/i);
77
+ expect(actionDescription).toMatch(/without deleting the real remote session/i);
78
+ expect(platformDescription).toMatch(/Required for create/i);
79
+ expect(platformDescription).toMatch(/general.*non-Android\/iOS/i);
80
+ expect(remoteServerUrlDescription).toMatch(/Omit to use local server/i);
81
+ expect(sessionIdDescription).toMatch(/Required for attach and select/i);
82
+ expect(tool.annotations?.destructiveHint).toBe(true);
83
+ });
84
+ });
85
+ //# sourceMappingURL=llm-wording.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm-wording.test.js","sourceRoot":"","sources":["../../../src/tests/tools/llm-wording.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAE7D,IAAI,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3D,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,IAAY,EAAE,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;QACjC,OAAO,EAAE,IAAI;KACd,CAAC,CAAC;IACH,gBAAgB,EAAE,IAAI,CAAC,EAAE,EAAE;IAC3B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;IACxB,8BAA8B,EAAE,IAAI,CAAC,EAAE,EAAE;IACzC,gBAAgB,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,GAAY,EAAE,EAAE,CACzC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CACjD;CACF,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,mCAAmC,EAAE,GAAG,EAAE,CAAC,CAAC;IACnE,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC9B,CAAC,CAAC,CAAC;AAEJ,IAAI,CAAC,mBAAmB,CAAC,oCAAoC,EAAE,GAAG,EAAE,CAAC,CAAC;IACpE,mBAAmB,EAAE,IAAI,CAAC,EAAE,EAAE;CAC/B,CAAC,CAAC,CAAC;AAWJ,SAAS,aAAa,CAAC,IAAY;IACjC,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,UAAkB;IAC5C,MAAM,MAAM,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC;IACtC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;IAEvD,QAAQ,CAAC,MAAa,CAAC,CAAC;IAExB,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAmB,CAAC;AACjE,CAAC;AAED,SAAS,gBAAgB,CAAC,IAAoB,EAAE,IAAY;IAC1D,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,WAAW,IAAI,EAAE,CAAC;AACxD,CAAC;AAED,QAAQ,CAAC,6BAA6B,EAAE,GAAG,EAAE;IAC3C,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;QACzF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,kCAAkC,CAAC,CAAC;QACpE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,mBAAmB,GAAG,aAAa,CACvC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CACnC,CAAC;QACF,MAAM,mBAAmB,GAAG,aAAa,CACvC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CACnC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC9C,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,wBAAwB,CAAC,CAAC;QACtD,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QAChE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACnD,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;QAClE,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,0BAA0B,CAAC,CAAC;QAExD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,kCAAkC,CAAC,CAAC;QACxE,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QACvD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnD,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CACjC,4CAA4C,CAC7C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACrF,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,gCAAgC,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACpD,MAAM,iBAAiB,GAAG,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC;QAC1E,MAAM,mBAAmB,GAAG,aAAa,CACvC,gBAAgB,CAAC,IAAI,EAAE,UAAU,CAAC,CACnC,CAAC;QACF,MAAM,0BAA0B,GAAG,aAAa,CAC9C,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAC1C,CAAC;QACF,MAAM,oBAAoB,GAAG,aAAa,CACxC,gBAAgB,CAAC,IAAI,EAAE,WAAW,CAAC,CACpC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,CACzB,+CAA+C,CAChD,CAAC;QAEF,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;QACnD,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QAC3E,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,8BAA8B,CAAC,CAAC;QAClE,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;QACnE,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;QACzD,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;QACzE,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QAC/D,MAAM,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAC/B,2CAA2C,CAC5C,CAAC;QAEF,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC;QAC5D,MAAM,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,4BAA4B,CAAC,CAAC;QAClE,MAAM,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACxE,MAAM,CAAC,oBAAoB,CAAC,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC;QACxE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}