@eko-ai/eko 1.0.8 → 1.0.10

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 (300) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +139 -131
  3. package/dist/core/eko.d.ts +3 -2
  4. package/dist/extension/script/bing.js +0 -0
  5. package/dist/extension/script/build_dom_tree.js +661 -661
  6. package/dist/extension/script/common.js +0 -0
  7. package/dist/extension/script/duckduckgo.js +0 -0
  8. package/dist/extension/script/google.js +0 -0
  9. package/dist/extension/tools/cancel_workflow.d.ts +9 -0
  10. package/dist/extension/tools/get_all_tabs.d.ts +9 -0
  11. package/dist/extension/tools/index.d.ts +3 -1
  12. package/dist/extension/tools/tab_management.d.ts +1 -1
  13. package/dist/extension/utils.d.ts +1 -1
  14. package/dist/extension.cjs.js +749 -278
  15. package/dist/extension.esm.js +749 -278
  16. package/dist/extension_content_script.js +55 -55
  17. package/dist/fellou.cjs.js +18 -18
  18. package/dist/fellou.esm.js +18 -18
  19. package/dist/index.cjs.js +2034 -1609
  20. package/dist/index.d.ts +3 -1
  21. package/dist/index.esm.js +2033 -1610
  22. package/dist/jest.config.js +10 -0
  23. package/dist/jest.config.js.map +1 -0
  24. package/dist/models/action.d.ts +8 -4
  25. package/dist/models/workflow.d.ts +8 -3
  26. package/dist/nodejs/tools/index.d.ts +1 -0
  27. package/dist/nodejs.cjs.js +1832 -1623
  28. package/dist/nodejs.esm.js +1832 -1623
  29. package/dist/rollup.config.js +171 -0
  30. package/dist/rollup.config.js.map +1 -0
  31. package/dist/schemas/workflow.schema.d.ts +2 -13
  32. package/dist/script.js +10 -0
  33. package/dist/script.js.map +1 -0
  34. package/dist/services/llm/claude-provider.d.ts +2 -1
  35. package/dist/services/llm/deepseek-provider.d.ts +13 -0
  36. package/dist/services/llm/openai-provider.d.ts +2 -1
  37. package/dist/services/llm/provider-factory.d.ts +4 -0
  38. package/dist/services/llm/siliconflow-provider.d.ts +13 -0
  39. package/dist/services/parser/workflow-parser.d.ts +0 -7
  40. package/dist/services/workflow/generator.d.ts +1 -0
  41. package/dist/src/core/eko.js +99 -0
  42. package/dist/src/core/eko.js.map +1 -0
  43. package/dist/src/core/tool-registry.js +51 -0
  44. package/dist/src/core/tool-registry.js.map +1 -0
  45. package/dist/src/extension/content/index.js +409 -0
  46. package/dist/src/extension/content/index.js.map +1 -0
  47. package/dist/src/extension/core.js +29 -0
  48. package/dist/src/extension/core.js.map +1 -0
  49. package/dist/src/extension/index.js +12 -0
  50. package/dist/src/extension/index.js.map +1 -0
  51. package/dist/src/extension/script/bing.js +25 -0
  52. package/dist/src/extension/script/bing.js.map +1 -0
  53. package/dist/src/extension/script/build_dom_tree.js +585 -0
  54. package/dist/src/extension/script/build_dom_tree.js.map +1 -0
  55. package/dist/src/extension/script/common.js +203 -0
  56. package/dist/src/extension/script/common.js.map +1 -0
  57. package/dist/src/extension/script/duckduckgo.js +25 -0
  58. package/dist/src/extension/script/duckduckgo.js.map +1 -0
  59. package/dist/src/extension/script/google.js +26 -0
  60. package/dist/src/extension/script/google.js.map +1 -0
  61. package/dist/src/extension/tools/browser.js +174 -0
  62. package/dist/src/extension/tools/browser.js.map +1 -0
  63. package/dist/src/extension/tools/browser_use.js +186 -0
  64. package/dist/src/extension/tools/browser_use.js.map +1 -0
  65. package/dist/src/extension/tools/element_click.js +123 -0
  66. package/dist/src/extension/tools/element_click.js.map +1 -0
  67. package/dist/src/extension/tools/export_file.js +93 -0
  68. package/dist/src/extension/tools/export_file.js.map +1 -0
  69. package/dist/src/extension/tools/extract_content.js +38 -0
  70. package/dist/src/extension/tools/extract_content.js.map +1 -0
  71. package/dist/src/extension/tools/find_element_position.js +125 -0
  72. package/dist/src/extension/tools/find_element_position.js.map +1 -0
  73. package/dist/src/extension/tools/html_script.js +219 -0
  74. package/dist/src/extension/tools/html_script.js.map +1 -0
  75. package/dist/src/extension/tools/index.js +12 -0
  76. package/dist/src/extension/tools/index.js.map +1 -0
  77. package/dist/src/extension/tools/open_url.js +68 -0
  78. package/dist/src/extension/tools/open_url.js.map +1 -0
  79. package/dist/src/extension/tools/request_login.js +87 -0
  80. package/dist/src/extension/tools/request_login.js.map +1 -0
  81. package/dist/src/extension/tools/screenshot.js +26 -0
  82. package/dist/src/extension/tools/screenshot.js.map +1 -0
  83. package/dist/src/extension/tools/tab_management.js +160 -0
  84. package/dist/src/extension/tools/tab_management.js.map +1 -0
  85. package/dist/src/extension/tools/web_search.js +281 -0
  86. package/dist/src/extension/tools/web_search.js.map +1 -0
  87. package/dist/src/extension/utils.js +244 -0
  88. package/dist/src/extension/utils.js.map +1 -0
  89. package/dist/src/fellou/computer.js +104 -0
  90. package/dist/src/fellou/computer.js.map +1 -0
  91. package/dist/src/fellou/index.js +7 -0
  92. package/dist/src/fellou/index.js.map +1 -0
  93. package/dist/src/fellou/tools/computer_use.js +111 -0
  94. package/dist/src/fellou/tools/computer_use.js.map +1 -0
  95. package/dist/src/index.js +9 -0
  96. package/dist/src/index.js.map +1 -0
  97. package/dist/src/models/action.js +364 -0
  98. package/dist/src/models/action.js.map +1 -0
  99. package/dist/src/models/workflow.js +120 -0
  100. package/dist/src/models/workflow.js.map +1 -0
  101. package/dist/src/nodejs/core.js +18 -0
  102. package/dist/src/nodejs/core.js.map +1 -0
  103. package/dist/src/nodejs/index.js +6 -0
  104. package/dist/src/nodejs/index.js.map +1 -0
  105. package/dist/src/nodejs/script/build_dom_tree.js +586 -0
  106. package/dist/src/nodejs/script/build_dom_tree.js.map +1 -0
  107. package/dist/src/nodejs/tools/browser_use.js +458 -0
  108. package/dist/src/nodejs/tools/browser_use.js.map +1 -0
  109. package/dist/src/nodejs/tools/command_execute.js +65 -0
  110. package/dist/src/nodejs/tools/command_execute.js.map +1 -0
  111. package/dist/src/nodejs/tools/file_read.js +45 -0
  112. package/dist/src/nodejs/tools/file_read.js.map +1 -0
  113. package/dist/src/nodejs/tools/file_write.js +95 -0
  114. package/dist/src/nodejs/tools/file_write.js.map +1 -0
  115. package/dist/src/nodejs/tools/index.js +5 -0
  116. package/dist/src/nodejs/tools/index.js.map +1 -0
  117. package/dist/src/schemas/workflow.schema.js +64 -0
  118. package/dist/src/schemas/workflow.schema.js.map +1 -0
  119. package/dist/src/services/llm/claude-provider.js +140 -0
  120. package/dist/src/services/llm/claude-provider.js.map +1 -0
  121. package/dist/src/services/llm/deepseek-provider.js +432 -0
  122. package/dist/src/services/llm/deepseek-provider.js.map +1 -0
  123. package/dist/src/services/llm/glm-provider.js +317 -0
  124. package/dist/src/services/llm/glm-provider.js.map +1 -0
  125. package/dist/src/services/llm/openai-provider copy.js +317 -0
  126. package/dist/src/services/llm/openai-provider copy.js.map +1 -0
  127. package/dist/src/services/llm/openai-provider.js +317 -0
  128. package/dist/src/services/llm/openai-provider.js.map +1 -0
  129. package/dist/src/services/parser/workflow-parser.js +208 -0
  130. package/dist/src/services/parser/workflow-parser.js.map +1 -0
  131. package/dist/src/services/workflow/generator.js +105 -0
  132. package/dist/src/services/workflow/generator.js.map +1 -0
  133. package/dist/src/services/workflow/templates.js +42 -0
  134. package/dist/src/services/workflow/templates.js.map +1 -0
  135. package/dist/src/types/action.types.js +2 -0
  136. package/dist/src/types/action.types.js.map +1 -0
  137. package/dist/src/types/eko.types.js +2 -0
  138. package/dist/src/types/eko.types.js.map +1 -0
  139. package/dist/src/types/index.js +6 -0
  140. package/dist/src/types/index.js.map +1 -0
  141. package/dist/src/types/llm.types.js +2 -0
  142. package/dist/src/types/llm.types.js.map +1 -0
  143. package/dist/src/types/parser.types.js +2 -0
  144. package/dist/src/types/parser.types.js.map +1 -0
  145. package/dist/src/types/tools.types.js +2 -0
  146. package/dist/src/types/tools.types.js.map +1 -0
  147. package/dist/src/types/workflow.types.js +3 -0
  148. package/dist/src/types/workflow.types.js.map +1 -0
  149. package/dist/src/web/core.js +18 -0
  150. package/dist/src/web/core.js.map +1 -0
  151. package/dist/src/web/index.js +9 -0
  152. package/dist/src/web/index.js.map +1 -0
  153. package/dist/src/web/script/build_dom_tree.js +584 -0
  154. package/dist/src/web/script/build_dom_tree.js.map +1 -0
  155. package/dist/src/web/tools/browser.js +249 -0
  156. package/dist/src/web/tools/browser.js.map +1 -0
  157. package/dist/src/web/tools/browser_use.js +176 -0
  158. package/dist/src/web/tools/browser_use.js.map +1 -0
  159. package/dist/src/web/tools/element_click.js +121 -0
  160. package/dist/src/web/tools/element_click.js.map +1 -0
  161. package/dist/src/web/tools/export_file.js +74 -0
  162. package/dist/src/web/tools/export_file.js.map +1 -0
  163. package/dist/src/web/tools/extract_content.js +24 -0
  164. package/dist/src/web/tools/extract_content.js.map +1 -0
  165. package/dist/src/web/tools/find_element_position.js +121 -0
  166. package/dist/src/web/tools/find_element_position.js.map +1 -0
  167. package/dist/src/web/tools/html_script.js +219 -0
  168. package/dist/src/web/tools/html_script.js.map +1 -0
  169. package/dist/src/web/tools/index.js +8 -0
  170. package/dist/src/web/tools/index.js.map +1 -0
  171. package/dist/src/web/tools/screenshot.js +24 -0
  172. package/dist/src/web/tools/screenshot.js.map +1 -0
  173. package/dist/test/integration/claude-provider.test.js +170 -0
  174. package/dist/test/integration/claude-provider.test.js.map +1 -0
  175. package/dist/test/integration/deepseek-provider.test.js +171 -0
  176. package/dist/test/integration/deepseek-provider.test.js.map +1 -0
  177. package/dist/test/integration/glm-provider.test.js +173 -0
  178. package/dist/test/integration/glm-provider.test.js.map +1 -0
  179. package/dist/test/integration/openai-provider.test copy.js +170 -0
  180. package/dist/test/integration/openai-provider.test copy.js.map +1 -0
  181. package/dist/test/integration/openai-provider.test.js +170 -0
  182. package/dist/test/integration/openai-provider.test.js.map +1 -0
  183. package/dist/test/integration/qwen-provider.js +170 -0
  184. package/dist/test/integration/qwen-provider.js.map +1 -0
  185. package/dist/test/integration/qwen-provider.test copy.js +170 -0
  186. package/dist/test/integration/qwen-provider.test copy.js.map +1 -0
  187. package/dist/test/integration/qwen-provider.test.js +170 -0
  188. package/dist/test/integration/qwen-provider.test.js.map +1 -0
  189. package/dist/test/integration/workflow.execution.test.js +152 -0
  190. package/dist/test/integration/workflow.execution.test.js.map +1 -0
  191. package/dist/test/integration/workflow.generation-and-execution.test.js +131 -0
  192. package/dist/test/integration/workflow.generation-and-execution.test.js.map +1 -0
  193. package/dist/test/integration/workflow.generator.test.js +207 -0
  194. package/dist/test/integration/workflow.generator.test.js.map +1 -0
  195. package/dist/test/unit/action.test.js +186 -0
  196. package/dist/test/unit/action.test.js.map +1 -0
  197. package/dist/test/unit/tool-registry.test.js +99 -0
  198. package/dist/test/unit/tool-registry.test.js.map +1 -0
  199. package/dist/test/unit/workflow-parser.test.js +189 -0
  200. package/dist/test/unit/workflow-parser.test.js.map +1 -0
  201. package/dist/test/unit/workflow.test.js +102 -0
  202. package/dist/test/unit/workflow.test.js.map +1 -0
  203. package/dist/types/action.types.d.ts +8 -3
  204. package/dist/types/jest.config.d.ts +10 -0
  205. package/dist/types/rollup.config.d.ts +16 -0
  206. package/dist/types/script.d.ts +1 -0
  207. package/dist/types/src/core/eko.d.ts +20 -0
  208. package/dist/types/src/core/tool-registry.d.ts +13 -0
  209. package/dist/types/src/extension/content/index.d.ts +16 -0
  210. package/dist/types/src/extension/core.d.ts +11 -0
  211. package/dist/types/src/extension/index.d.ts +7 -0
  212. package/dist/types/src/extension/script/bing.d.ts +0 -0
  213. package/dist/types/src/extension/script/build_dom_tree.d.ts +38 -0
  214. package/dist/types/src/extension/script/common.d.ts +0 -0
  215. package/dist/types/src/extension/script/duckduckgo.d.ts +0 -0
  216. package/dist/types/src/extension/script/google.d.ts +0 -0
  217. package/dist/types/src/extension/tools/browser.d.ts +22 -0
  218. package/dist/types/src/extension/tools/browser_use.d.ts +19 -0
  219. package/dist/types/src/extension/tools/element_click.d.ts +12 -0
  220. package/dist/types/src/extension/tools/export_file.d.ts +18 -0
  221. package/dist/types/src/extension/tools/extract_content.d.ts +18 -0
  222. package/dist/types/src/extension/tools/find_element_position.d.ts +12 -0
  223. package/dist/types/src/extension/tools/html_script.d.ts +10 -0
  224. package/dist/types/src/extension/tools/index.d.ts +11 -0
  225. package/dist/types/src/extension/tools/open_url.d.ts +18 -0
  226. package/dist/{extension/tools/form_autofill.d.ts → types/src/extension/tools/request_login.d.ts} +3 -4
  227. package/dist/types/src/extension/tools/screenshot.d.ts +18 -0
  228. package/dist/types/src/extension/tools/tab_management.d.ts +19 -0
  229. package/dist/types/src/extension/tools/web_search.d.ts +18 -0
  230. package/dist/types/src/extension/utils.d.ts +31 -0
  231. package/dist/types/src/fellou/computer.d.ts +20 -0
  232. package/dist/types/src/fellou/index.d.ts +6 -0
  233. package/dist/types/src/fellou/tools/computer_use.d.ts +18 -0
  234. package/dist/types/src/index.d.ts +8 -0
  235. package/dist/types/src/models/action.d.ts +22 -0
  236. package/dist/types/src/models/workflow.d.ts +16 -0
  237. package/dist/types/src/nodejs/core.d.ts +2 -0
  238. package/dist/types/src/nodejs/index.d.ts +3 -0
  239. package/dist/types/src/nodejs/script/build_dom_tree.d.ts +1 -0
  240. package/dist/types/src/nodejs/tools/browser_use.d.ts +28 -0
  241. package/dist/types/src/nodejs/tools/command_execute.d.ts +12 -0
  242. package/dist/types/src/nodejs/tools/file_read.d.ts +11 -0
  243. package/dist/types/src/nodejs/tools/file_write.d.ts +15 -0
  244. package/dist/types/src/nodejs/tools/index.d.ts +4 -0
  245. package/dist/types/src/schemas/workflow.schema.d.ts +88 -0
  246. package/dist/types/src/services/llm/claude-provider.d.ts +11 -0
  247. package/dist/types/src/services/llm/deepseek-provider.d.ts +15 -0
  248. package/dist/types/src/services/llm/glm-provider.d.ts +11 -0
  249. package/dist/types/src/services/llm/openai-provider copy.d.ts +11 -0
  250. package/dist/types/src/services/llm/openai-provider.d.ts +11 -0
  251. package/dist/types/src/services/parser/workflow-parser.d.ts +29 -0
  252. package/dist/types/src/services/workflow/generator.d.ts +13 -0
  253. package/dist/types/src/services/workflow/templates.d.ts +8 -0
  254. package/dist/types/src/types/action.types.d.ts +38 -0
  255. package/dist/types/src/types/eko.types.d.ts +21 -0
  256. package/dist/types/src/types/index.d.ts +5 -0
  257. package/dist/types/src/types/llm.types.d.ts +54 -0
  258. package/dist/types/src/types/parser.types.d.ts +9 -0
  259. package/dist/types/src/types/tools.types.d.ts +88 -0
  260. package/dist/types/src/types/workflow.types.d.ts +39 -0
  261. package/dist/types/src/web/core.d.ts +2 -0
  262. package/dist/types/src/web/index.d.ts +5 -0
  263. package/dist/types/src/web/script/build_dom_tree.d.ts +10 -0
  264. package/dist/types/src/web/tools/browser.d.ts +21 -0
  265. package/dist/types/src/web/tools/browser_use.d.ts +19 -0
  266. package/dist/types/src/web/tools/element_click.d.ts +12 -0
  267. package/dist/types/src/web/tools/export_file.d.ts +18 -0
  268. package/dist/types/src/web/tools/extract_content.d.ts +17 -0
  269. package/dist/types/src/web/tools/find_element_position.d.ts +12 -0
  270. package/dist/types/src/web/tools/html_script.d.ts +10 -0
  271. package/dist/types/src/web/tools/index.d.ts +7 -0
  272. package/dist/types/src/web/tools/screenshot.d.ts +18 -0
  273. package/dist/types/test/integration/claude-provider.test.d.ts +1 -0
  274. package/dist/types/test/integration/deepseek-provider.test.d.ts +1 -0
  275. package/dist/types/test/integration/glm-provider.test.d.ts +1 -0
  276. package/dist/types/test/integration/openai-provider.test copy.d.ts +1 -0
  277. package/dist/types/test/integration/openai-provider.test.d.ts +1 -0
  278. package/dist/types/test/integration/qwen-provider.d.ts +1 -0
  279. package/dist/types/test/integration/qwen-provider.test copy.d.ts +1 -0
  280. package/dist/types/test/integration/qwen-provider.test.d.ts +1 -0
  281. package/dist/types/test/integration/workflow.execution.test.d.ts +1 -0
  282. package/dist/types/test/integration/workflow.generation-and-execution.test.d.ts +1 -0
  283. package/dist/types/test/integration/workflow.generator.test.d.ts +1 -0
  284. package/dist/types/test/unit/action.test.d.ts +1 -0
  285. package/dist/types/test/unit/tool-registry.test.d.ts +1 -0
  286. package/dist/types/test/unit/workflow-parser.test.d.ts +1 -0
  287. package/dist/types/test/unit/workflow.test.d.ts +1 -0
  288. package/dist/types/tools.types.d.ts +44 -1
  289. package/dist/types/workflow.types.d.ts +22 -9
  290. package/dist/universal_tools/cancel_workflow.d.ts +9 -0
  291. package/dist/universal_tools/human/text.d.ts +9 -0
  292. package/dist/universal_tools/human.d.ts +30 -0
  293. package/dist/universal_tools/index.d.ts +4 -0
  294. package/dist/universal_tools/summary_workflow.d.ts +9 -0
  295. package/dist/utils/execution-logger.d.ts +69 -0
  296. package/dist/web.cjs.js +117 -117
  297. package/dist/web.esm.js +117 -117
  298. package/package.json +106 -107
  299. package/dist/fellou/tools/index.d.ts +0 -2
  300. package/dist/types/framework.types.d.ts +0 -11
@@ -0,0 +1,584 @@
1
+ /**
2
+ * Get clickable elements on the page
3
+ *
4
+ * @param {*} doHighlightElements Is highlighted
5
+ * @param {*} includeAttributes [attr_names...]
6
+ * @returns { element_str, selector_map }
7
+ */
8
+ export function get_clickable_elements(doHighlightElements = true, includeAttributes) {
9
+ window.clickable_elements = {};
10
+ let page_tree = build_dom_tree(doHighlightElements);
11
+ let element_tree = parse_node(page_tree);
12
+ let selector_map = create_selector_map(element_tree);
13
+ let element_str = clickable_elements_to_string(element_tree, includeAttributes);
14
+ return { element_str, selector_map };
15
+ }
16
+ export function get_highlight_element(highlightIndex) {
17
+ return window.clickable_elements[highlightIndex];
18
+ }
19
+ export function remove_highlight() {
20
+ let highlight = document.getElementById('playwright-highlight-container');
21
+ if (highlight) {
22
+ highlight.remove();
23
+ }
24
+ }
25
+ function clickable_elements_to_string(element_tree, includeAttributes) {
26
+ if (!includeAttributes) {
27
+ includeAttributes = [
28
+ 'id',
29
+ 'title',
30
+ 'type',
31
+ 'name',
32
+ 'role',
33
+ // 'href',
34
+ 'tabindex',
35
+ 'aria-label',
36
+ 'placeholder',
37
+ 'value',
38
+ 'alt',
39
+ 'aria-expanded',
40
+ ];
41
+ }
42
+ function get_all_text_till_next_clickable_element(element_node) {
43
+ let text_parts = [];
44
+ function collect_text(node) {
45
+ if (node.tagName && node != element_node && node.highlightIndex != null) {
46
+ return;
47
+ }
48
+ if (!node.tagName && node.text) {
49
+ text_parts.push(node.text);
50
+ }
51
+ else if (node.tagName) {
52
+ for (let i = 0; i < node.children.length; i++) {
53
+ collect_text(node.children[i]);
54
+ }
55
+ }
56
+ }
57
+ collect_text(element_node);
58
+ return text_parts.join('\n').trim().replace(/\n+/g, ' ');
59
+ }
60
+ function has_parent_with_highlight_index(node) {
61
+ let current = node.parent;
62
+ while (current) {
63
+ if (current.highlightIndex != null) {
64
+ return true;
65
+ }
66
+ current = current.parent;
67
+ }
68
+ return false;
69
+ }
70
+ let formatted_text = [];
71
+ function process_node(node, depth) {
72
+ if (node.text == null) {
73
+ if (node.highlightIndex != null) {
74
+ let attributes_str = '';
75
+ if (includeAttributes) {
76
+ for (let i = 0; i < includeAttributes.length; i++) {
77
+ let key = includeAttributes[i];
78
+ let value = node.attributes[key];
79
+ if (key && value) {
80
+ attributes_str += ` ${key}="${value}"`;
81
+ }
82
+ }
83
+ attributes_str = attributes_str.replace(/\n+/g, ' ');
84
+ }
85
+ let text = get_all_text_till_next_clickable_element(node);
86
+ formatted_text.push(`[${node.highlightIndex}]:<${node.tagName}${attributes_str}>${text}</${node.tagName}>`);
87
+ }
88
+ for (let i = 0; i < node.children.length; i++) {
89
+ let child = node.children[i];
90
+ process_node(child, depth + 1);
91
+ }
92
+ }
93
+ else if (!has_parent_with_highlight_index(node)) {
94
+ formatted_text.push(`[]:${node.text}`);
95
+ }
96
+ }
97
+ process_node(element_tree, 0);
98
+ return formatted_text.join('\n');
99
+ }
100
+ function create_selector_map(element_tree) {
101
+ let selector_map = {};
102
+ function process_node(node) {
103
+ if (node.tagName) {
104
+ if (node.highlightIndex != null) {
105
+ selector_map[node.highlightIndex] = node;
106
+ }
107
+ for (let i = 0; i < node.children.length; i++) {
108
+ process_node(node.children[i]);
109
+ }
110
+ }
111
+ }
112
+ process_node(element_tree);
113
+ return selector_map;
114
+ }
115
+ function parse_node(node_data, parent) {
116
+ if (!node_data) {
117
+ return;
118
+ }
119
+ if (node_data.type == 'TEXT_NODE') {
120
+ return {
121
+ text: node_data.text || '',
122
+ isVisible: node_data.isVisible || false,
123
+ parent: parent,
124
+ };
125
+ }
126
+ let element_node = {
127
+ tagName: node_data.tagName,
128
+ xpath: node_data.xpath,
129
+ highlightIndex: node_data.highlightIndex,
130
+ attributes: node_data.attributes || {},
131
+ isVisible: node_data.isVisible || false,
132
+ isInteractive: node_data.isInteractive || false,
133
+ isTopElement: node_data.isTopElement || false,
134
+ shadowRoot: node_data.shadowRoot || false,
135
+ children: [],
136
+ parent: parent,
137
+ };
138
+ if (node_data.children) {
139
+ let children = [];
140
+ for (let i = 0; i < node_data.children.length; i++) {
141
+ let child = node_data.children[i];
142
+ if (child) {
143
+ let child_node = parse_node(child, element_node);
144
+ if (child_node) {
145
+ children.push(child_node);
146
+ }
147
+ }
148
+ }
149
+ element_node.children = children;
150
+ }
151
+ return element_node;
152
+ }
153
+ function build_dom_tree(doHighlightElements) {
154
+ let highlightIndex = 0; // Reset highlight index
155
+ function highlightElement(element, index, parentIframe = null) {
156
+ // Create or get highlight container
157
+ let container = document.getElementById('playwright-highlight-container');
158
+ if (!container) {
159
+ container = document.createElement('div');
160
+ container.id = 'playwright-highlight-container';
161
+ container.style.position = 'fixed';
162
+ container.style.pointerEvents = 'none';
163
+ container.style.top = '0';
164
+ container.style.left = '0';
165
+ container.style.width = '100%';
166
+ container.style.height = '100%';
167
+ container.style.zIndex = '2147483647'; // Maximum z-index value
168
+ document.documentElement.appendChild(container);
169
+ }
170
+ // Generate a color based on the index
171
+ const colors = [
172
+ '#FF0000',
173
+ '#00FF00',
174
+ '#0000FF',
175
+ '#FFA500',
176
+ '#800080',
177
+ '#008080',
178
+ '#FF69B4',
179
+ '#4B0082',
180
+ '#FF4500',
181
+ '#2E8B57',
182
+ '#DC143C',
183
+ '#4682B4',
184
+ ];
185
+ const colorIndex = index % colors.length;
186
+ const baseColor = colors[colorIndex];
187
+ const backgroundColor = `${baseColor}1A`; // 10% opacity version of the color
188
+ // Create highlight overlay
189
+ const overlay = document.createElement('div');
190
+ overlay.style.position = 'absolute';
191
+ overlay.style.border = `2px solid ${baseColor}`;
192
+ overlay.style.pointerEvents = 'none';
193
+ overlay.style.boxSizing = 'border-box';
194
+ // Position overlay based on element
195
+ const rect = element.getBoundingClientRect();
196
+ let top = rect.top;
197
+ let left = rect.left;
198
+ if (rect.width < window.innerWidth / 2 || rect.height < window.innerHeight / 2) {
199
+ overlay.style.backgroundColor = backgroundColor;
200
+ }
201
+ // Adjust position if element is inside an iframe
202
+ if (parentIframe) {
203
+ const iframeRect = parentIframe.getBoundingClientRect();
204
+ top += iframeRect.top;
205
+ left += iframeRect.left;
206
+ }
207
+ overlay.style.top = `${top}px`;
208
+ overlay.style.left = `${left}px`;
209
+ overlay.style.width = `${rect.width}px`;
210
+ overlay.style.height = `${rect.height}px`;
211
+ // Create label
212
+ const label = document.createElement('div');
213
+ label.className = 'playwright-highlight-label';
214
+ label.style.position = 'absolute';
215
+ label.style.background = baseColor;
216
+ label.style.color = 'white';
217
+ label.style.padding = '1px 4px';
218
+ label.style.borderRadius = '4px';
219
+ label.style.fontSize = `${Math.min(12, Math.max(8, rect.height / 2))}px`; // Responsive font size
220
+ label.textContent = index;
221
+ // Calculate label position
222
+ const labelWidth = 20; // Approximate width
223
+ const labelHeight = 16; // Approximate height
224
+ // Default position (top-right corner inside the box)
225
+ let labelTop = top + 2;
226
+ let labelLeft = left + rect.width - labelWidth - 2;
227
+ // Adjust if box is too small
228
+ if (rect.width < labelWidth + 4 || rect.height < labelHeight + 4) {
229
+ // Position outside the box if it's too small
230
+ labelTop = top - labelHeight - 2;
231
+ labelLeft = left + rect.width - labelWidth;
232
+ }
233
+ // Ensure label stays within viewport
234
+ if (labelTop < 0)
235
+ labelTop = top + 2;
236
+ if (labelLeft < 0)
237
+ labelLeft = left + 2;
238
+ if (labelLeft + labelWidth > window.innerWidth) {
239
+ labelLeft = left + rect.width - labelWidth - 2;
240
+ }
241
+ label.style.top = `${labelTop}px`;
242
+ label.style.left = `${labelLeft}px`;
243
+ // Add to container
244
+ container.appendChild(overlay);
245
+ container.appendChild(label);
246
+ // Store reference for cleanup
247
+ element.setAttribute('browser-user-highlight-id', `playwright-highlight-${index}`);
248
+ return index + 1;
249
+ }
250
+ // Helper function to generate XPath as a tree
251
+ function getXPathTree(element, stopAtBoundary = true) {
252
+ const segments = [];
253
+ let currentElement = element;
254
+ while (currentElement && currentElement.nodeType === Node.ELEMENT_NODE) {
255
+ // Stop if we hit a shadow root or iframe
256
+ if (stopAtBoundary &&
257
+ (currentElement.parentNode instanceof ShadowRoot ||
258
+ currentElement.parentNode instanceof HTMLIFrameElement)) {
259
+ break;
260
+ }
261
+ let index = 0;
262
+ let sibling = currentElement.previousSibling;
263
+ while (sibling) {
264
+ if (sibling.nodeType === Node.ELEMENT_NODE &&
265
+ sibling.nodeName === currentElement.nodeName) {
266
+ index++;
267
+ }
268
+ sibling = sibling.previousSibling;
269
+ }
270
+ const tagName = currentElement.nodeName.toLowerCase();
271
+ const xpathIndex = index > 0 ? `[${index + 1}]` : '';
272
+ segments.unshift(`${tagName}${xpathIndex}`);
273
+ currentElement = currentElement.parentNode;
274
+ }
275
+ return segments.join('/');
276
+ }
277
+ // Helper function to check if element is accepted
278
+ function isElementAccepted(element) {
279
+ const leafElementDenyList = new Set(['svg', 'script', 'style', 'link', 'meta']);
280
+ return !leafElementDenyList.has(element.tagName.toLowerCase());
281
+ }
282
+ // Helper function to check if element is interactive
283
+ function isInteractiveElement(element) {
284
+ var _a, _b, _c, _d, _e;
285
+ // Base interactive elements and roles
286
+ const interactiveElements = new Set([
287
+ 'a',
288
+ 'button',
289
+ 'details',
290
+ 'embed',
291
+ 'input',
292
+ 'label',
293
+ 'menu',
294
+ 'menuitem',
295
+ 'object',
296
+ 'select',
297
+ 'textarea',
298
+ 'summary',
299
+ ]);
300
+ const interactiveRoles = new Set([
301
+ 'button',
302
+ 'menu',
303
+ 'menuitem',
304
+ 'link',
305
+ 'checkbox',
306
+ 'radio',
307
+ 'slider',
308
+ 'tab',
309
+ 'tabpanel',
310
+ 'textbox',
311
+ 'combobox',
312
+ 'grid',
313
+ 'listbox',
314
+ 'option',
315
+ 'progressbar',
316
+ 'scrollbar',
317
+ 'searchbox',
318
+ 'switch',
319
+ 'tree',
320
+ 'treeitem',
321
+ 'spinbutton',
322
+ 'tooltip',
323
+ 'a-button-inner',
324
+ 'a-dropdown-button',
325
+ 'click',
326
+ 'menuitemcheckbox',
327
+ 'menuitemradio',
328
+ 'a-button-text',
329
+ 'button-text',
330
+ 'button-icon',
331
+ 'button-icon-only',
332
+ 'button-text-icon-only',
333
+ 'dropdown',
334
+ 'combobox',
335
+ ]);
336
+ const tagName = element.tagName.toLowerCase();
337
+ const role = element.getAttribute('role');
338
+ const ariaRole = element.getAttribute('aria-role');
339
+ const tabIndex = element.getAttribute('tabindex');
340
+ // Basic role/attribute checks
341
+ const hasInteractiveRole = interactiveElements.has(tagName) ||
342
+ interactiveRoles.has(role) ||
343
+ interactiveRoles.has(ariaRole) ||
344
+ (tabIndex !== null && tabIndex !== '-1') ||
345
+ element.getAttribute('data-action') === 'a-dropdown-select' ||
346
+ element.getAttribute('data-action') === 'a-dropdown-button';
347
+ if (hasInteractiveRole)
348
+ return true;
349
+ // Get computed style
350
+ const style = window.getComputedStyle(element);
351
+ // Check if element has click-like styling
352
+ // const hasClickStyling = style.cursor === 'pointer' ||
353
+ // element.style.cursor === 'pointer' ||
354
+ // style.pointerEvents !== 'none';
355
+ // Check for event listeners
356
+ const hasClickHandler = element.onclick !== null ||
357
+ element.getAttribute('onclick') !== null ||
358
+ element.hasAttribute('ng-click') ||
359
+ element.hasAttribute('@click') ||
360
+ element.hasAttribute('v-on:click');
361
+ // Helper function to safely get event listeners
362
+ function getEventListeners(el) {
363
+ var _a;
364
+ try {
365
+ // Try to get listeners using Chrome DevTools API
366
+ return ((_a = window.getEventListeners) === null || _a === void 0 ? void 0 : _a.call(window, el)) || {};
367
+ }
368
+ catch (e) {
369
+ // Fallback: check for common event properties
370
+ const listeners = {};
371
+ // List of common event types to check
372
+ const eventTypes = [
373
+ 'click',
374
+ 'mousedown',
375
+ 'mouseup',
376
+ 'touchstart',
377
+ 'touchend',
378
+ 'keydown',
379
+ 'keyup',
380
+ 'focus',
381
+ 'blur',
382
+ ];
383
+ for (const type of eventTypes) {
384
+ const handler = el[`on${type}`];
385
+ if (handler) {
386
+ listeners[type] = [
387
+ {
388
+ listener: handler,
389
+ useCapture: false,
390
+ },
391
+ ];
392
+ }
393
+ }
394
+ return listeners;
395
+ }
396
+ }
397
+ // Check for click-related events on the element itself
398
+ const listeners = getEventListeners(element);
399
+ const hasClickListeners = listeners &&
400
+ (((_a = listeners.click) === null || _a === void 0 ? void 0 : _a.length) > 0 ||
401
+ ((_b = listeners.mousedown) === null || _b === void 0 ? void 0 : _b.length) > 0 ||
402
+ ((_c = listeners.mouseup) === null || _c === void 0 ? void 0 : _c.length) > 0 ||
403
+ ((_d = listeners.touchstart) === null || _d === void 0 ? void 0 : _d.length) > 0 ||
404
+ ((_e = listeners.touchend) === null || _e === void 0 ? void 0 : _e.length) > 0);
405
+ // Check for ARIA properties that suggest interactivity
406
+ const hasAriaProps = element.hasAttribute('aria-expanded') ||
407
+ element.hasAttribute('aria-pressed') ||
408
+ element.hasAttribute('aria-selected') ||
409
+ element.hasAttribute('aria-checked');
410
+ // Check for form-related functionality
411
+ const isFormRelated = element.form !== undefined ||
412
+ element.hasAttribute('contenteditable') ||
413
+ style.userSelect !== 'none';
414
+ // Check if element is draggable
415
+ const isDraggable = element.draggable || element.getAttribute('draggable') === 'true';
416
+ return (hasAriaProps ||
417
+ // hasClickStyling ||
418
+ hasClickHandler ||
419
+ hasClickListeners ||
420
+ // isFormRelated ||
421
+ isDraggable);
422
+ }
423
+ // Helper function to check if element is visible
424
+ function isElementVisible(element) {
425
+ const style = window.getComputedStyle(element);
426
+ return (element.offsetWidth > 0 &&
427
+ element.offsetHeight > 0 &&
428
+ style.visibility !== 'hidden' &&
429
+ style.display !== 'none');
430
+ }
431
+ // Helper function to check if element is the top element at its position
432
+ function isTopElement(element) {
433
+ // Find the correct document context and root element
434
+ let doc = element.ownerDocument;
435
+ // If we're in an iframe, elements are considered top by default
436
+ if (doc !== window.document) {
437
+ return true;
438
+ }
439
+ // For shadow DOM, we need to check within its own root context
440
+ const shadowRoot = element.getRootNode();
441
+ if (shadowRoot instanceof ShadowRoot) {
442
+ const rect = element.getBoundingClientRect();
443
+ const point = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };
444
+ try {
445
+ // Use shadow root's elementFromPoint to check within shadow DOM context
446
+ const topEl = shadowRoot.elementFromPoint(point.x, point.y);
447
+ if (!topEl)
448
+ return false;
449
+ // Check if the element or any of its parents match our target element
450
+ let current = topEl;
451
+ while (current && current !== shadowRoot) {
452
+ if (current === element)
453
+ return true;
454
+ current = current.parentElement;
455
+ }
456
+ return false;
457
+ }
458
+ catch (e) {
459
+ return true; // If we can't determine, consider it visible
460
+ }
461
+ }
462
+ // Regular DOM elements
463
+ const rect = element.getBoundingClientRect();
464
+ const point = { x: rect.left + rect.width / 2, y: rect.top + rect.height / 2 };
465
+ try {
466
+ const topEl = document.elementFromPoint(point.x, point.y);
467
+ if (!topEl)
468
+ return false;
469
+ let current = topEl;
470
+ while (current && current !== document.documentElement) {
471
+ if (current === element)
472
+ return true;
473
+ current = current.parentElement;
474
+ }
475
+ return false;
476
+ }
477
+ catch (e) {
478
+ return true;
479
+ }
480
+ }
481
+ // Helper function to check if text node is visible
482
+ function isTextNodeVisible(textNode) {
483
+ var _a;
484
+ const range = document.createRange();
485
+ range.selectNodeContents(textNode);
486
+ const rect = range.getBoundingClientRect();
487
+ return (rect.width !== 0 &&
488
+ rect.height !== 0 &&
489
+ rect.top >= 0 &&
490
+ rect.top <= window.innerHeight &&
491
+ ((_a = textNode.parentElement) === null || _a === void 0 ? void 0 : _a.checkVisibility({
492
+ checkOpacity: true,
493
+ checkVisibilityCSS: true,
494
+ })));
495
+ }
496
+ // Function to traverse the DOM and create nested JSON
497
+ function buildDomTree(node, parentIframe = null) {
498
+ var _a;
499
+ if (!node)
500
+ return null;
501
+ // Special case for text nodes
502
+ if (node.nodeType === Node.TEXT_NODE) {
503
+ const textContent = node.textContent.trim();
504
+ if (textContent && isTextNodeVisible(node)) {
505
+ return {
506
+ type: 'TEXT_NODE',
507
+ text: textContent,
508
+ isVisible: true,
509
+ };
510
+ }
511
+ return null;
512
+ }
513
+ // Check if element is accepted
514
+ if (node.nodeType === Node.ELEMENT_NODE && !isElementAccepted(node)) {
515
+ return null;
516
+ }
517
+ const nodeData = {
518
+ tagName: node.tagName ? node.tagName.toLowerCase() : null,
519
+ attributes: {},
520
+ xpath: node.nodeType === Node.ELEMENT_NODE ? getXPathTree(node, true) : null,
521
+ children: [],
522
+ };
523
+ // Copy all attributes if the node is an element
524
+ if (node.nodeType === Node.ELEMENT_NODE && node.attributes) {
525
+ // Use getAttributeNames() instead of directly iterating attributes
526
+ const attributeNames = ((_a = node.getAttributeNames) === null || _a === void 0 ? void 0 : _a.call(node)) || [];
527
+ for (const name of attributeNames) {
528
+ nodeData.attributes[name] = node.getAttribute(name);
529
+ }
530
+ }
531
+ if (node.nodeType === Node.ELEMENT_NODE) {
532
+ const isInteractive = isInteractiveElement(node);
533
+ const isVisible = isElementVisible(node);
534
+ const isTop = isTopElement(node);
535
+ nodeData.isInteractive = isInteractive;
536
+ nodeData.isVisible = isVisible;
537
+ nodeData.isTopElement = isTop;
538
+ // Highlight if element meets all criteria and highlighting is enabled
539
+ if (isInteractive && isVisible && isTop) {
540
+ nodeData.highlightIndex = highlightIndex++;
541
+ window.clickable_elements[nodeData.highlightIndex] = node;
542
+ if (doHighlightElements) {
543
+ highlightElement(node, nodeData.highlightIndex, parentIframe);
544
+ }
545
+ }
546
+ }
547
+ // Only add iframeContext if we're inside an iframe
548
+ // if (parentIframe) {
549
+ // nodeData.iframeContext = `iframe[src="${parentIframe.src || ''}"]`;
550
+ // }
551
+ // Only add shadowRoot field if it exists
552
+ if (node.shadowRoot) {
553
+ nodeData.shadowRoot = true;
554
+ }
555
+ // Handle shadow DOM
556
+ if (node.shadowRoot) {
557
+ const shadowChildren = Array.from(node.shadowRoot.childNodes).map((child) => buildDomTree(child, parentIframe));
558
+ nodeData.children.push(...shadowChildren);
559
+ }
560
+ // Handle iframes
561
+ if (node.tagName === 'IFRAME') {
562
+ try {
563
+ const iframeDoc = node.contentDocument || node.contentWindow.document;
564
+ if (iframeDoc) {
565
+ const iframeChildren = Array.from(iframeDoc.body.childNodes).map((child) => buildDomTree(child, node));
566
+ nodeData.children.push(...iframeChildren);
567
+ }
568
+ }
569
+ catch (e) {
570
+ console.warn('Unable to access iframe:', node);
571
+ }
572
+ }
573
+ else {
574
+ const children = Array.from(node.childNodes).map((child) => buildDomTree(child, parentIframe));
575
+ nodeData.children.push(...children);
576
+ }
577
+ return nodeData;
578
+ }
579
+ return buildDomTree(document.body);
580
+ }
581
+ window.get_clickable_elements = get_clickable_elements;
582
+ window.get_highlight_element = get_highlight_element;
583
+ window.remove_highlight = remove_highlight;
584
+ //# sourceMappingURL=build_dom_tree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build_dom_tree.js","sourceRoot":"","sources":["../../../../src/web/script/build_dom_tree.js"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CAAC,mBAAmB,GAAG,IAAI,EAAE,iBAAiB;IAClF,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,IAAI,SAAS,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;IACpD,IAAI,YAAY,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACrD,IAAI,WAAW,GAAG,4BAA4B,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC;IAChF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,cAAc;IAClD,OAAO,MAAM,CAAC,kBAAkB,CAAC,cAAc,CAAC,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB;IAC9B,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC;IAC1E,IAAI,SAAS,EAAE,CAAC;QACd,SAAS,CAAC,MAAM,EAAE,CAAC;IACrB,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,YAAY,EAAE,iBAAiB;IACnE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACvB,iBAAiB,GAAG;YAClB,IAAI;YACJ,OAAO;YACP,MAAM;YACN,MAAM;YACN,MAAM;YACN,UAAU;YACV,UAAU;YACV,YAAY;YACZ,aAAa;YACb,OAAO;YACP,KAAK;YACL,eAAe;SAChB,CAAC;IACJ,CAAC;IAED,SAAS,wCAAwC,CAAC,YAAY;QAC5D,IAAI,UAAU,GAAG,EAAE,CAAC;QACpB,SAAS,YAAY,CAAC,IAAI;YACxB,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,YAAY,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBACxE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC/B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC9C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QACD,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,SAAS,+BAA+B,CAAC,IAAI;QAC3C,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,OAAO,OAAO,EAAE,CAAC;YACf,IAAI,OAAO,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBACnC,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,SAAS,YAAY,CAAC,IAAI,EAAE,KAAK;QAC/B,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;YACtB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAChC,IAAI,cAAc,GAAG,EAAE,CAAC;gBACxB,IAAI,iBAAiB,EAAE,CAAC;oBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBAClD,IAAI,GAAG,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;wBAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;wBACjC,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;4BACjB,cAAc,IAAI,IAAI,GAAG,KAAK,KAAK,GAAG,CAAC;wBACzC,CAAC;oBACH,CAAC;oBACD,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBACvD,CAAC;gBACD,IAAI,IAAI,GAAG,wCAAwC,CAAC,IAAI,CAAC,CAAC;gBAC1D,cAAc,CAAC,IAAI,CACjB,IAAI,IAAI,CAAC,cAAc,MAAM,IAAI,CAAC,OAAO,GAAG,cAAc,IAAI,IAAI,KAAK,IAAI,CAAC,OAAO,GAAG,CACvF,CAAC;YACJ,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBAC7B,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC;YAClD,cAAc,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IACD,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9B,OAAO,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAS,mBAAmB,CAAC,YAAY;IACvC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,SAAS,YAAY,CAAC,IAAI;QACxB,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE,CAAC;gBAChC,YAAY,CAAC,IAAI,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;YAC3C,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9C,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;IACH,CAAC;IACD,YAAY,CAAC,YAAY,CAAC,CAAC;IAC3B,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,UAAU,CAAC,SAAS,EAAE,MAAM;IACnC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IACD,IAAI,SAAS,CAAC,IAAI,IAAI,WAAW,EAAE,CAAC;QAClC,OAAO;YACL,IAAI,EAAE,SAAS,CAAC,IAAI,IAAI,EAAE;YAC1B,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,KAAK;YACvC,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC;IACD,IAAI,YAAY,GAAG;QACjB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,cAAc,EAAE,SAAS,CAAC,cAAc;QACxC,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,EAAE;QACtC,SAAS,EAAE,SAAS,CAAC,SAAS,IAAI,KAAK;QACvC,aAAa,EAAE,SAAS,CAAC,aAAa,IAAI,KAAK;QAC/C,YAAY,EAAE,SAAS,CAAC,YAAY,IAAI,KAAK;QAC7C,UAAU,EAAE,SAAS,CAAC,UAAU,IAAI,KAAK;QACzC,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,MAAM;KACf,CAAC;IACF,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;QACvB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACnD,IAAI,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,IAAI,UAAU,GAAG,UAAU,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBACjD,IAAI,UAAU,EAAE,CAAC;oBACf,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC5B,CAAC;YACH,CAAC;QACH,CAAC;QACD,YAAY,CAAC,QAAQ,GAAG,QAAQ,CAAC;IACnC,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,SAAS,cAAc,CAAC,mBAAmB;IACzC,IAAI,cAAc,GAAG,CAAC,CAAC,CAAC,wBAAwB;IAEhD,SAAS,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,GAAG,IAAI;QAC3D,oCAAoC;QACpC,IAAI,SAAS,GAAG,QAAQ,CAAC,cAAc,CAAC,gCAAgC,CAAC,CAAC;QAC1E,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC1C,SAAS,CAAC,EAAE,GAAG,gCAAgC,CAAC;YAChD,SAAS,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;YACnC,SAAS,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;YACvC,SAAS,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC;YAC1B,SAAS,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC;YAC3B,SAAS,CAAC,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC;YAC/B,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC;YAChC,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,YAAY,CAAC,CAAC,wBAAwB;YAC/D,QAAQ,CAAC,eAAe,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClD,CAAC;QAED,sCAAsC;QACtC,MAAM,MAAM,GAAG;YACb,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;YACT,SAAS;SACV,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;QACzC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,eAAe,GAAG,GAAG,SAAS,IAAI,CAAC,CAAC,mCAAmC;QAE7E,2BAA2B;QAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QACpC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,SAAS,EAAE,CAAC;QAChD,OAAO,CAAC,KAAK,CAAC,aAAa,GAAG,MAAM,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,SAAS,GAAG,YAAY,CAAC;QAEvC,oCAAoC;QACpC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACnB,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAErB,IAAI,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC;YAC/E,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;QAClD,CAAC;QAED,iDAAiD;QACjD,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,UAAU,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC;YACxD,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC;YACtB,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC;QAC1B,CAAC;QAED,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;QAC/B,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,IAAI,IAAI,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC;QACxC,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC;QAE1C,eAAe;QACf,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC5C,KAAK,CAAC,SAAS,GAAG,4BAA4B,CAAC;QAC/C,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,UAAU,GAAG,SAAS,CAAC;QACnC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,OAAO,GAAG,SAAS,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC;QACjC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,uBAAuB;QACjG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC;QAE1B,2BAA2B;QAC3B,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,oBAAoB;QAC3C,MAAM,WAAW,GAAG,EAAE,CAAC,CAAC,qBAAqB;QAE7C,qDAAqD;QACrD,IAAI,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QACvB,IAAI,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC;QAEnD,6BAA6B;QAC7B,IAAI,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,EAAE,CAAC;YACjE,6CAA6C;YAC7C,QAAQ,GAAG,GAAG,GAAG,WAAW,GAAG,CAAC,CAAC;YACjC,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC;QAC7C,CAAC;QAED,qCAAqC;QACrC,IAAI,QAAQ,GAAG,CAAC;YAAE,QAAQ,GAAG,GAAG,GAAG,CAAC,CAAC;QACrC,IAAI,SAAS,GAAG,CAAC;YAAE,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC;QACxC,IAAI,SAAS,GAAG,UAAU,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;YAC/C,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,UAAU,GAAG,CAAC,CAAC;QACjD,CAAC;QAED,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,QAAQ,IAAI,CAAC;QAClC,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,SAAS,IAAI,CAAC;QAEpC,mBAAmB;QACnB,SAAS,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/B,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAE7B,8BAA8B;QAC9B,OAAO,CAAC,YAAY,CAAC,2BAA2B,EAAE,wBAAwB,KAAK,EAAE,CAAC,CAAC;QAEnF,OAAO,KAAK,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,8CAA8C;IAC9C,SAAS,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI;QAClD,MAAM,QAAQ,GAAG,EAAE,CAAC;QACpB,IAAI,cAAc,GAAG,OAAO,CAAC;QAE7B,OAAO,cAAc,IAAI,cAAc,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACvE,yCAAyC;YACzC,IACE,cAAc;gBACd,CAAC,cAAc,CAAC,UAAU,YAAY,UAAU;oBAC9C,cAAc,CAAC,UAAU,YAAY,iBAAiB,CAAC,EACzD,CAAC;gBACD,MAAM;YACR,CAAC;YAED,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,OAAO,GAAG,cAAc,CAAC,eAAe,CAAC;YAC7C,OAAO,OAAO,EAAE,CAAC;gBACf,IACE,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY;oBACtC,OAAO,CAAC,QAAQ,KAAK,cAAc,CAAC,QAAQ,EAC5C,CAAC;oBACD,KAAK,EAAE,CAAC;gBACV,CAAC;gBACD,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC;YACpC,CAAC;YAED,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;YACtD,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACrD,QAAQ,CAAC,OAAO,CAAC,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC;YAE5C,cAAc,GAAG,cAAc,CAAC,UAAU,CAAC;QAC7C,CAAC;QAED,OAAO,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAED,kDAAkD;IAClD,SAAS,iBAAiB,CAAC,OAAO;QAChC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACjE,CAAC;IAED,qDAAqD;IACrD,SAAS,oBAAoB,CAAC,OAAO;;QACnC,sCAAsC;QACtC,MAAM,mBAAmB,GAAG,IAAI,GAAG,CAAC;YAClC,GAAG;YACH,QAAQ;YACR,SAAS;YACT,OAAO;YACP,OAAO;YACP,OAAO;YACP,MAAM;YACN,UAAU;YACV,QAAQ;YACR,QAAQ;YACR,UAAU;YACV,SAAS;SACV,CAAC,CAAC;QAEH,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC;YAC/B,QAAQ;YACR,MAAM;YACN,UAAU;YACV,MAAM;YACN,UAAU;YACV,OAAO;YACP,QAAQ;YACR,KAAK;YACL,UAAU;YACV,SAAS;YACT,UAAU;YACV,MAAM;YACN,SAAS;YACT,QAAQ;YACR,aAAa;YACb,WAAW;YACX,WAAW;YACX,QAAQ;YACR,MAAM;YACN,UAAU;YACV,YAAY;YACZ,SAAS;YACT,gBAAgB;YAChB,mBAAmB;YACnB,OAAO;YACP,kBAAkB;YAClB,eAAe;YACf,eAAe;YACf,aAAa;YACb,aAAa;YACb,kBAAkB;YAClB,uBAAuB;YACvB,UAAU;YACV,UAAU;SACX,CAAC,CAAC;QAEH,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QAElD,8BAA8B;QAC9B,MAAM,kBAAkB,GACtB,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC;YAChC,gBAAgB,CAAC,GAAG,CAAC,IAAI,CAAC;YAC1B,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC;YAC9B,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,CAAC;YACxC,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,mBAAmB;YAC3D,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,KAAK,mBAAmB,CAAC;QAE9D,IAAI,kBAAkB;YAAE,OAAO,IAAI,CAAC;QAEpC,qBAAqB;QACrB,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE/C,0CAA0C;QAC1C,wDAAwD;QACxD,4CAA4C;QAC5C,sCAAsC;QAEtC,4BAA4B;QAC5B,MAAM,eAAe,GACnB,OAAO,CAAC,OAAO,KAAK,IAAI;YACxB,OAAO,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,IAAI;YACxC,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC;YAChC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC;YAC9B,OAAO,CAAC,YAAY,CAAC,YAAY,CAAC,CAAC;QAErC,gDAAgD;QAChD,SAAS,iBAAiB,CAAC,EAAE;;YAC3B,IAAI,CAAC;gBACH,iDAAiD;gBACjD,OAAO,CAAA,MAAA,MAAM,CAAC,iBAAiB,uDAAG,EAAE,CAAC,KAAI,EAAE,CAAC;YAC9C,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,8CAA8C;gBAC9C,MAAM,SAAS,GAAG,EAAE,CAAC;gBAErB,sCAAsC;gBACtC,MAAM,UAAU,GAAG;oBACjB,OAAO;oBACP,WAAW;oBACX,SAAS;oBACT,YAAY;oBACZ,UAAU;oBACV,SAAS;oBACT,OAAO;oBACP,OAAO;oBACP,MAAM;iBACP,CAAC;gBAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;oBAC9B,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;oBAChC,IAAI,OAAO,EAAE,CAAC;wBACZ,SAAS,CAAC,IAAI,CAAC,GAAG;4BAChB;gCACE,QAAQ,EAAE,OAAO;gCACjB,UAAU,EAAE,KAAK;6BAClB;yBACF,CAAC;oBACJ,CAAC;gBACH,CAAC;gBAED,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,uDAAuD;QACvD,MAAM,SAAS,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,iBAAiB,GACrB,SAAS;YACT,CAAC,CAAA,MAAA,SAAS,CAAC,KAAK,0CAAE,MAAM,IAAG,CAAC;gBAC1B,CAAA,MAAA,SAAS,CAAC,SAAS,0CAAE,MAAM,IAAG,CAAC;gBAC/B,CAAA,MAAA,SAAS,CAAC,OAAO,0CAAE,MAAM,IAAG,CAAC;gBAC7B,CAAA,MAAA,SAAS,CAAC,UAAU,0CAAE,MAAM,IAAG,CAAC;gBAChC,CAAA,MAAA,SAAS,CAAC,QAAQ,0CAAE,MAAM,IAAG,CAAC,CAAC,CAAC;QAEpC,uDAAuD;QACvD,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;YACrC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC;YACpC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;YACrC,OAAO,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QAEvC,uCAAuC;QACvC,MAAM,aAAa,GACjB,OAAO,CAAC,IAAI,KAAK,SAAS;YAC1B,OAAO,CAAC,YAAY,CAAC,iBAAiB,CAAC;YACvC,KAAK,CAAC,UAAU,KAAK,MAAM,CAAC;QAE9B,gCAAgC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,MAAM,CAAC;QAEtF,OAAO,CACL,YAAY;YACZ,qBAAqB;YACrB,eAAe;YACf,iBAAiB;YACjB,mBAAmB;YACnB,WAAW,CACZ,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,SAAS,gBAAgB,CAAC,OAAO;QAC/B,MAAM,KAAK,GAAG,MAAM,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CACL,OAAO,CAAC,WAAW,GAAG,CAAC;YACvB,OAAO,CAAC,YAAY,GAAG,CAAC;YACxB,KAAK,CAAC,UAAU,KAAK,QAAQ;YAC7B,KAAK,CAAC,OAAO,KAAK,MAAM,CACzB,CAAC;IACJ,CAAC;IAED,yEAAyE;IACzE,SAAS,YAAY,CAAC,OAAO;QAC3B,qDAAqD;QACrD,IAAI,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC;QAEhC,gEAAgE;QAChE,IAAI,GAAG,KAAK,MAAM,CAAC,QAAQ,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+DAA+D;QAC/D,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,IAAI,UAAU,YAAY,UAAU,EAAE,CAAC;YACrC,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;YAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAE/E,IAAI,CAAC;gBACH,wEAAwE;gBACxE,MAAM,KAAK,GAAG,UAAU,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC5D,IAAI,CAAC,KAAK;oBAAE,OAAO,KAAK,CAAC;gBAEzB,sEAAsE;gBACtE,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,OAAO,OAAO,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;oBACzC,IAAI,OAAO,KAAK,OAAO;wBAAE,OAAO,IAAI,CAAC;oBACrC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;gBAClC,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,IAAI,CAAC,CAAC,6CAA6C;YAC5D,CAAC;QACH,CAAC;QAED,uBAAuB;QACvB,MAAM,IAAI,GAAG,OAAO,CAAC,qBAAqB,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAE/E,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YAC1D,IAAI,CAAC,KAAK;gBAAE,OAAO,KAAK,CAAC;YAEzB,IAAI,OAAO,GAAG,KAAK,CAAC;YACpB,OAAO,OAAO,IAAI,OAAO,KAAK,QAAQ,CAAC,eAAe,EAAE,CAAC;gBACvD,IAAI,OAAO,KAAK,OAAO;oBAAE,OAAO,IAAI,CAAC;gBACrC,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC;YAClC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,mDAAmD;IACnD,SAAS,iBAAiB,CAAC,QAAQ;;QACjC,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC;QACnC,MAAM,IAAI,GAAG,KAAK,CAAC,qBAAqB,EAAE,CAAC;QAE3C,OAAO,CACL,IAAI,CAAC,KAAK,KAAK,CAAC;YAChB,IAAI,CAAC,MAAM,KAAK,CAAC;YACjB,IAAI,CAAC,GAAG,IAAI,CAAC;YACb,IAAI,CAAC,GAAG,IAAI,MAAM,CAAC,WAAW;aAC9B,MAAA,QAAQ,CAAC,aAAa,0CAAE,eAAe,CAAC;gBACtC,YAAY,EAAE,IAAI;gBAClB,kBAAkB,EAAE,IAAI;aACzB,CAAC,CAAA,CACH,CAAC;IACJ,CAAC;IAED,sDAAsD;IACtD,SAAS,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;;QAC7C,IAAI,CAAC,IAAI;YAAE,OAAO,IAAI,CAAC;QAEvB,8BAA8B;QAC9B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YACrC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,WAAW,IAAI,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3C,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,IAAI,EAAE,WAAW;oBACjB,SAAS,EAAE,IAAI;iBAChB,CAAC;YACJ,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QAED,+BAA+B;QAC/B,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC;YACpE,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,QAAQ,GAAG;YACf,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI;YACzD,UAAU,EAAE,EAAE;YACd,KAAK,EAAE,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI;YAC5E,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,gDAAgD;QAChD,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YAC3D,mEAAmE;YACnE,MAAM,cAAc,GAAG,CAAA,MAAA,IAAI,CAAC,iBAAiB,oDAAI,KAAI,EAAE,CAAC;YACxD,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YACtD,CAAC;QACH,CAAC;QAED,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,EAAE,CAAC;YACxC,MAAM,aAAa,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACjD,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;YAEjC,QAAQ,CAAC,aAAa,GAAG,aAAa,CAAC;YACvC,QAAQ,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,QAAQ,CAAC,YAAY,GAAG,KAAK,CAAC;YAE9B,sEAAsE;YACtE,IAAI,aAAa,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;gBACxC,QAAQ,CAAC,cAAc,GAAG,cAAc,EAAE,CAAC;gBAC3C,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;gBAC1D,IAAI,mBAAmB,EAAE,CAAC;oBACxB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;gBAChE,CAAC;YACH,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,sBAAsB;QACtB,0EAA0E;QAC1E,IAAI;QAEJ,yCAAyC;QACzC,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,UAAU,GAAG,IAAI,CAAC;QAC7B,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1E,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAClC,CAAC;YACF,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;QAC5C,CAAC;QAED,iBAAiB;QACjB,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACtE,IAAI,SAAS,EAAE,CAAC;oBACd,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACzE,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAC1B,CAAC;oBACF,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,CAAC;gBAC5C,CAAC;YACH,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,0BAA0B,EAAE,IAAI,CAAC,CAAC;YACjD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACzD,YAAY,CAAC,KAAK,EAAE,YAAY,CAAC,CAClC,CAAC;YACF,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtC,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,CAAC,sBAAsB,GAAG,sBAAsB,CAAC;AACvD,MAAM,CAAC,qBAAqB,GAAG,qBAAqB,CAAC;AACrD,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC"}