@vuu-ui/vuu-data-test 0.13.9 → 0.13.11

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 (205) hide show
  1. package/cjs/ArrayProxy.js +72 -0
  2. package/cjs/ArrayProxy.js.map +1 -0
  3. package/cjs/RuntimeVisualLink.js +89 -0
  4. package/cjs/RuntimeVisualLink.js.map +1 -0
  5. package/cjs/Table.js +184 -0
  6. package/cjs/Table.js.map +1 -0
  7. package/cjs/TickingArrayDataSource.js +208 -0
  8. package/cjs/TickingArrayDataSource.js.map +1 -0
  9. package/cjs/UpdateGenerator.js +94 -0
  10. package/cjs/UpdateGenerator.js.map +1 -0
  11. package/cjs/VuuModule.js +370 -0
  12. package/cjs/VuuModule.js.map +1 -0
  13. package/cjs/basket/basket-module.js +255 -0
  14. package/cjs/basket/basket-module.js.map +1 -0
  15. package/cjs/basket/basket-schemas.js +123 -0
  16. package/cjs/basket/basket-schemas.js.map +1 -0
  17. package/cjs/basket/reference-data/constituents.js +40 -0
  18. package/cjs/basket/reference-data/constituents.js.map +1 -0
  19. package/cjs/basket/reference-data/ftse100.js +105 -0
  20. package/cjs/basket/reference-data/ftse100.js.map +1 -0
  21. package/cjs/basket/reference-data/hsi.js +87 -0
  22. package/cjs/basket/reference-data/hsi.js.map +1 -0
  23. package/cjs/basket/reference-data/nasdaq100.js +108 -0
  24. package/cjs/basket/reference-data/nasdaq100.js.map +1 -0
  25. package/cjs/basket/reference-data/prices.js +54 -0
  26. package/cjs/basket/reference-data/prices.js.map +1 -0
  27. package/cjs/basket/reference-data/sp500.js +46 -0
  28. package/cjs/basket/reference-data/sp500.js.map +1 -0
  29. package/cjs/data-utils.js +57 -0
  30. package/cjs/data-utils.js.map +1 -0
  31. package/cjs/index.js +46 -3047
  32. package/cjs/index.js.map +1 -1
  33. package/cjs/local-datasource-provider/LocalDatasourceProvider.js +84 -0
  34. package/cjs/local-datasource-provider/LocalDatasourceProvider.js.map +1 -0
  35. package/cjs/makeSuggestions.js +43 -0
  36. package/cjs/makeSuggestions.js.map +1 -0
  37. package/cjs/schemas.js +28 -0
  38. package/cjs/schemas.js.map +1 -0
  39. package/cjs/simul/SimulModule.js +24 -0
  40. package/cjs/simul/SimulModule.js.map +1 -0
  41. package/cjs/simul/reference-data/accounts.js +27 -0
  42. package/cjs/simul/reference-data/accounts.js.map +1 -0
  43. package/cjs/simul/reference-data/algos.js +6 -0
  44. package/cjs/simul/reference-data/algos.js.map +1 -0
  45. package/cjs/simul/reference-data/currencies.js +6 -0
  46. package/cjs/simul/reference-data/currencies.js.map +1 -0
  47. package/cjs/simul/reference-data/instruments-extended.js +18 -0
  48. package/cjs/simul/reference-data/instruments-extended.js.map +1 -0
  49. package/cjs/simul/reference-data/instruments.js +77 -0
  50. package/cjs/simul/reference-data/instruments.js.map +1 -0
  51. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +6 -0
  52. package/cjs/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +1 -0
  53. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js +31 -0
  54. package/cjs/simul/reference-data/isin-generator/fixtures/alphabet.js.map +1 -0
  55. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +9 -0
  56. package/cjs/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +1 -0
  57. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +17 -0
  58. package/cjs/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +1 -0
  59. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js +24 -0
  60. package/cjs/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +1 -0
  61. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +13 -0
  62. package/cjs/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +1 -0
  63. package/cjs/simul/reference-data/isin-generator/generate-cusip.js +13 -0
  64. package/cjs/simul/reference-data/isin-generator/generate-cusip.js.map +1 -0
  65. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js +8 -0
  66. package/cjs/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +1 -0
  67. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js +6 -0
  68. package/cjs/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +1 -0
  69. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +14 -0
  70. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +1 -0
  71. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +14 -0
  72. package/cjs/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +1 -0
  73. package/cjs/simul/reference-data/isin-generator/index.js +295 -0
  74. package/cjs/simul/reference-data/isin-generator/index.js.map +1 -0
  75. package/cjs/simul/reference-data/isin-generator/is-odd.js +6 -0
  76. package/cjs/simul/reference-data/isin-generator/is-odd.js.map +1 -0
  77. package/cjs/simul/reference-data/locations.js +17 -0
  78. package/cjs/simul/reference-data/locations.js.map +1 -0
  79. package/cjs/simul/reference-data/lotsizes.js +28 -0
  80. package/cjs/simul/reference-data/lotsizes.js.map +1 -0
  81. package/cjs/simul/reference-data/orderStatus.js +6 -0
  82. package/cjs/simul/reference-data/orderStatus.js.map +1 -0
  83. package/cjs/simul/reference-data/orders.js +54 -0
  84. package/cjs/simul/reference-data/orders.js.map +1 -0
  85. package/cjs/simul/reference-data/parent-child-orders.js +122 -0
  86. package/cjs/simul/reference-data/parent-child-orders.js.map +1 -0
  87. package/cjs/simul/reference-data/prices.js +71 -0
  88. package/cjs/simul/reference-data/prices.js.map +1 -0
  89. package/cjs/simul/reference-data/sides.js +6 -0
  90. package/cjs/simul/reference-data/sides.js.map +1 -0
  91. package/cjs/simul/simul-module.js +126 -0
  92. package/cjs/simul/simul-module.js.map +1 -0
  93. package/cjs/simul/simul-schemas.js +142 -0
  94. package/cjs/simul/simul-schemas.js.map +1 -0
  95. package/cjs/test/test-module.js +26 -0
  96. package/cjs/test/test-module.js.map +1 -0
  97. package/cjs/test/test-schemas.js +17 -0
  98. package/cjs/test/test-schemas.js.map +1 -0
  99. package/cjs/vuu-modules.js +15 -0
  100. package/cjs/vuu-modules.js.map +1 -0
  101. package/cjs/vuu-row-generator.js +74 -0
  102. package/cjs/vuu-row-generator.js.map +1 -0
  103. package/esm/ArrayProxy.js +70 -0
  104. package/esm/ArrayProxy.js.map +1 -0
  105. package/esm/RuntimeVisualLink.js +87 -0
  106. package/esm/RuntimeVisualLink.js.map +1 -0
  107. package/esm/Table.js +179 -0
  108. package/esm/Table.js.map +1 -0
  109. package/esm/TickingArrayDataSource.js +206 -0
  110. package/esm/TickingArrayDataSource.js.map +1 -0
  111. package/esm/UpdateGenerator.js +92 -0
  112. package/esm/UpdateGenerator.js.map +1 -0
  113. package/esm/VuuModule.js +366 -0
  114. package/esm/VuuModule.js.map +1 -0
  115. package/esm/basket/basket-module.js +251 -0
  116. package/esm/basket/basket-module.js.map +1 -0
  117. package/esm/basket/basket-schemas.js +120 -0
  118. package/esm/basket/basket-schemas.js.map +1 -0
  119. package/esm/basket/reference-data/constituents.js +38 -0
  120. package/esm/basket/reference-data/constituents.js.map +1 -0
  121. package/esm/basket/reference-data/ftse100.js +103 -0
  122. package/esm/basket/reference-data/ftse100.js.map +1 -0
  123. package/esm/basket/reference-data/hsi.js +85 -0
  124. package/esm/basket/reference-data/hsi.js.map +1 -0
  125. package/esm/basket/reference-data/nasdaq100.js +106 -0
  126. package/esm/basket/reference-data/nasdaq100.js.map +1 -0
  127. package/esm/basket/reference-data/prices.js +52 -0
  128. package/esm/basket/reference-data/prices.js.map +1 -0
  129. package/esm/basket/reference-data/sp500.js +44 -0
  130. package/esm/basket/reference-data/sp500.js.map +1 -0
  131. package/esm/data-utils.js +52 -0
  132. package/esm/data-utils.js.map +1 -0
  133. package/esm/index.js +14 -3019
  134. package/esm/index.js.map +1 -1
  135. package/esm/local-datasource-provider/LocalDatasourceProvider.js +82 -0
  136. package/esm/local-datasource-provider/LocalDatasourceProvider.js.map +1 -0
  137. package/esm/makeSuggestions.js +41 -0
  138. package/esm/makeSuggestions.js.map +1 -0
  139. package/esm/schemas.js +24 -0
  140. package/esm/schemas.js.map +1 -0
  141. package/esm/simul/SimulModule.js +22 -0
  142. package/esm/simul/SimulModule.js.map +1 -0
  143. package/esm/simul/reference-data/accounts.js +25 -0
  144. package/esm/simul/reference-data/accounts.js.map +1 -0
  145. package/esm/simul/reference-data/algos.js +4 -0
  146. package/esm/simul/reference-data/algos.js.map +1 -0
  147. package/esm/simul/reference-data/currencies.js +4 -0
  148. package/esm/simul/reference-data/currencies.js.map +1 -0
  149. package/esm/simul/reference-data/instruments-extended.js +16 -0
  150. package/esm/simul/reference-data/instruments-extended.js.map +1 -0
  151. package/esm/simul/reference-data/instruments.js +72 -0
  152. package/esm/simul/reference-data/instruments.js.map +1 -0
  153. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js +4 -0
  154. package/esm/simul/reference-data/isin-generator/convert-string-to-base-ten-number.js.map +1 -0
  155. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js +29 -0
  156. package/esm/simul/reference-data/isin-generator/fixtures/alphabet.js.map +1 -0
  157. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js +7 -0
  158. package/esm/simul/reference-data/isin-generator/fixtures/alphanumeric-values.js.map +1 -0
  159. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js +15 -0
  160. package/esm/simul/reference-data/isin-generator/fixtures/base-ten-numbers.js.map +1 -0
  161. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js +22 -0
  162. package/esm/simul/reference-data/isin-generator/generate-cusip-check-code.js.map +1 -0
  163. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js +11 -0
  164. package/esm/simul/reference-data/isin-generator/generate-cusip-without-check-code.js.map +1 -0
  165. package/esm/simul/reference-data/isin-generator/generate-cusip.js +11 -0
  166. package/esm/simul/reference-data/isin-generator/generate-cusip.js.map +1 -0
  167. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js +6 -0
  168. package/esm/simul/reference-data/isin-generator/generate-random-alphanumeric.js.map +1 -0
  169. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js +4 -0
  170. package/esm/simul/reference-data/isin-generator/generate-random-base-ten-number.js.map +1 -0
  171. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js +12 -0
  172. package/esm/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.js.map +1 -0
  173. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js +12 -0
  174. package/esm/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.js.map +1 -0
  175. package/esm/simul/reference-data/isin-generator/index.js +293 -0
  176. package/esm/simul/reference-data/isin-generator/index.js.map +1 -0
  177. package/esm/simul/reference-data/isin-generator/is-odd.js +4 -0
  178. package/esm/simul/reference-data/isin-generator/is-odd.js.map +1 -0
  179. package/esm/simul/reference-data/locations.js +14 -0
  180. package/esm/simul/reference-data/locations.js.map +1 -0
  181. package/esm/simul/reference-data/lotsizes.js +26 -0
  182. package/esm/simul/reference-data/lotsizes.js.map +1 -0
  183. package/esm/simul/reference-data/orderStatus.js +4 -0
  184. package/esm/simul/reference-data/orderStatus.js.map +1 -0
  185. package/esm/simul/reference-data/orders.js +51 -0
  186. package/esm/simul/reference-data/orders.js.map +1 -0
  187. package/esm/simul/reference-data/parent-child-orders.js +117 -0
  188. package/esm/simul/reference-data/parent-child-orders.js.map +1 -0
  189. package/esm/simul/reference-data/prices.js +68 -0
  190. package/esm/simul/reference-data/prices.js.map +1 -0
  191. package/esm/simul/reference-data/sides.js +4 -0
  192. package/esm/simul/reference-data/sides.js.map +1 -0
  193. package/esm/simul/simul-module.js +124 -0
  194. package/esm/simul/simul-module.js.map +1 -0
  195. package/esm/simul/simul-schemas.js +139 -0
  196. package/esm/simul/simul-schemas.js.map +1 -0
  197. package/esm/test/test-module.js +24 -0
  198. package/esm/test/test-module.js.map +1 -0
  199. package/esm/test/test-schemas.js +15 -0
  200. package/esm/test/test-schemas.js.map +1 -0
  201. package/esm/vuu-modules.js +13 -0
  202. package/esm/vuu-modules.js.map +1 -0
  203. package/esm/vuu-row-generator.js +68 -0
  204. package/esm/vuu-row-generator.js.map +1 -0
  205. package/package.json +6 -6
package/cjs/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/ArrayProxy.ts","../src/basket/basket-schemas.ts","../src/simul/simul-schemas.ts","../src/vuu-row-generator.ts","../src/test/test-schemas.ts","../src/schemas.ts","../src/makeSuggestions.ts","../src/TickingArrayDataSource.ts","../src/Table.ts","../src/data-utils.ts","../src/UpdateGenerator.ts","../src/basket/reference-data/ftse100.ts","../src/basket/reference-data/nasdaq100.ts","../src/basket/reference-data/sp500.ts","../src/basket/reference-data/hsi.ts","../src/basket/reference-data/constituents.ts","../src/basket/reference-data/prices.ts","../src/RuntimeVisualLink.ts","../src/VuuModule.ts","../src/basket/basket-module.ts","../src/simul/SimulModule.ts","../src/simul/reference-data/isin-generator/convert-string-to-base-ten-number.ts","../src/simul/reference-data/isin-generator/is-odd.ts","../src/simul/reference-data/isin-generator/generate-cusip-check-code.ts","../src/simul/reference-data/isin-generator/fixtures/alphabet.ts","../src/simul/reference-data/isin-generator/fixtures/base-ten-numbers.ts","../src/simul/reference-data/isin-generator/fixtures/alphanumeric-values.ts","../src/simul/reference-data/isin-generator/generate-random-alphanumeric.ts","../src/simul/reference-data/isin-generator/generate-random-string-of-alphanumeric-chars.ts","../src/simul/reference-data/isin-generator/generate-random-base-ten-number.ts","../src/simul/reference-data/isin-generator/generate-random-string-of-base-ten-chars.ts","../src/simul/reference-data/isin-generator/generate-cusip-without-check-code.ts","../src/simul/reference-data/isin-generator/generate-cusip.ts","../src/simul/reference-data/isin-generator/index.ts","../src/simul/reference-data/currencies.ts","../src/simul/reference-data/locations.ts","../src/simul/reference-data/lotsizes.ts","../src/simul/reference-data/instruments.ts","../src/simul/reference-data/instruments-extended.ts","../src/simul/reference-data/sides.ts","../src/simul/reference-data/orders.ts","../src/simul/reference-data/prices.ts","../src/simul/reference-data/accounts.ts","../src/simul/reference-data/orderStatus.ts","../src/simul/reference-data/algos.ts","../src/simul/reference-data/parent-child-orders.ts","../src/simul/simul-module.ts","../src/test/test-module.ts","../src/vuu-modules.ts","../src/local-datasource-provider/LocalDatasourceProvider.tsx"],"sourcesContent":["export type RowAtIndexFunc<T = unknown> = (index: number) => T | undefined;\n\nexport class ArrayProxy<T = string> {\n #getItem: RowAtIndexFunc;\n public length = 0;\n\n constructor(size: number, getRow: RowAtIndexFunc) {\n this.#getItem = getRow;\n this.length = size;\n\n const handler = {\n get: (target: ArrayProxy<T>, prop: string | symbol): any => {\n if (prop === \"length\") {\n return target.length;\n } else if (prop === \"slice\") {\n return target.slice;\n } else if (prop === \"map\") {\n return target.map;\n } else if (prop === \"toString\") {\n return \"[ArrayProxy]\";\n }\n if (typeof prop === \"string\") {\n const index = parseInt(prop, 10);\n if (!isNaN(index)) {\n if (index < this.length) {\n return target.#getItem(index);\n } else {\n return undefined;\n }\n }\n }\n throw Error(`unsupported property ${String(prop)} on ArrayProxy`);\n },\n set: (target: ArrayProxy<T>, prop: string, newVal: unknown) => {\n if (prop === \"length\") {\n target.length = newVal as number;\n return true;\n }\n throw Error(`ArrayProxy is immutable except for length`);\n },\n };\n return new Proxy(this, handler);\n }\n\n map = (func: (item: T, i: number) => unknown) => {\n return new ArrayProxy(this.length, (i: number) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n return func(this.#getItem(i), i);\n });\n };\n slice = (from: number, to: number) => {\n const out = [];\n const end = Math.min(this.length, to);\n for (let i = from; i < end; i++) {\n out.push(this.#getItem(i));\n }\n return out;\n };\n}\n","import { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nexport type BasketsTableName =\n | \"algoType\"\n | \"basket\"\n | \"basketConstituent\"\n | \"basketTrading\"\n | \"basketTradingConstituent\"\n | \"basketTradingConstituentJoin\"\n | \"priceStrategyType\";\n\nexport const schemas: Readonly<\n Record<BasketsTableName, Readonly<TableSchema>>\n> = {\n algoType: {\n columns: [\n { name: \"algoType\", serverDataType: \"string\" },\n { name: \"id\", serverDataType: \"int\" },\n ],\n key: \"id\",\n table: { module: \"BASKET\", table: \"algoType\" },\n },\n basket: {\n columns: [\n { name: \"id\", serverDataType: \"string\" },\n { name: \"name\", serverDataType: \"string\" },\n { name: \"notionalValue\", serverDataType: \"double\" },\n { name: \"notionalValueUsd\", serverDataType: \"double\" },\n ],\n key: \"id\",\n table: { module: \"BASKET\", table: \"basket\" },\n },\n basketConstituent: {\n columns: [\n { name: \"basketId\", serverDataType: \"string\" },\n { name: \"change\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"lastTrade\", serverDataType: \"string\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"ricBasketId\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"volume\", serverDataType: \"string\" },\n { name: \"weighting\", serverDataType: \"double\" },\n ],\n key: \"ricBasketId\",\n table: { module: \"BASKET\", table: \"basketConstituent\" },\n },\n basketTrading: {\n columns: [\n { name: \"basketId\", serverDataType: \"string\" },\n { name: \"basketName\", serverDataType: \"string\" },\n { name: \"filledPct\", serverDataType: \"double\" },\n { name: \"fxRateToUsd\", serverDataType: \"double\" },\n { name: \"instanceId\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"status\", serverDataType: \"string\" },\n { name: \"totalNotional\", serverDataType: \"double\" },\n { name: \"totalNotionalUsd\", serverDataType: \"double\" },\n { name: \"units\", serverDataType: \"int\" },\n ],\n key: \"instanceId\",\n table: { module: \"BASKET\", table: \"basketTrading\" },\n },\n basketTradingConstituent: {\n columns: [\n { name: \"algo\", serverDataType: \"string\" },\n { name: \"algoParams\", serverDataType: \"string\" },\n { name: \"basketId\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"instanceId\", serverDataType: \"string\" },\n { name: \"instanceIdRic\", serverDataType: \"string\" },\n { name: \"limitPrice\", serverDataType: \"double\" },\n { name: \"notionalLocal\", serverDataType: \"double\" },\n { name: \"notionalUsd\", serverDataType: \"double\" },\n { name: \"pctFilled\", serverDataType: \"double\" },\n { name: \"priceSpread\", serverDataType: \"int\" },\n { name: \"priceStrategyId\", serverDataType: \"int\" },\n { name: \"quantity\", serverDataType: \"long\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"status\", serverDataType: \"string\" },\n { name: \"venue\", serverDataType: \"string\" },\n { name: \"weighting\", serverDataType: \"double\" },\n ],\n key: \"instanceIdRic\",\n table: { module: \"BASKET\", table: \"basketTradingConstituent\" },\n },\n\n basketTradingConstituentJoin: {\n columns: [\n { name: \"algo\", serverDataType: \"string\" },\n { name: \"algoParams\", serverDataType: \"string\" },\n { name: \"ask\", serverDataType: \"double\" },\n { name: \"askSize\", serverDataType: \"double\" },\n { name: \"basketId\", serverDataType: \"string\" },\n { name: \"bid\", serverDataType: \"double\" },\n { name: \"bidSize\", serverDataType: \"double\" },\n { name: \"close\", serverDataType: \"double\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"instanceId\", serverDataType: \"string\" },\n { name: \"instanceIdRic\", serverDataType: \"string\" },\n { name: \"last\", serverDataType: \"double\" },\n { name: \"limitPrice\", serverDataType: \"double\" },\n { name: \"notionalLocal\", serverDataType: \"double\" },\n { name: \"notionalUsd\", serverDataType: \"double\" },\n { name: \"open\", serverDataType: \"double\" },\n { name: \"pctFilled\", serverDataType: \"double\" },\n { name: \"phase\", serverDataType: \"string\" },\n { name: \"priceSpread\", serverDataType: \"int\" },\n { name: \"priceStrategyId\", serverDataType: \"int\" },\n { name: \"quantity\", serverDataType: \"long\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"scenario\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"status\", serverDataType: \"string\" },\n { name: \"venue\", serverDataType: \"string\" },\n { name: \"weighting\", serverDataType: \"double\" },\n ],\n key: \"instanceIdRic\",\n table: { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n },\n priceStrategyType: {\n columns: [\n { name: \"priceStrategy\", serverDataType: \"string\" },\n { name: \"id\", serverDataType: \"int\" },\n ],\n key: \"\",\n table: { module: \"BASKET\", table: \"priceStrategyType\" },\n },\n};\n\nexport type BasketVuuTable = {\n module: \"BASKET\";\n table: BasketsTableName;\n};\n\nexport const isBasketTable = (table: VuuTable): table is BasketVuuTable =>\n table.module === \"BASKET\";\n","import { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuTable } from \"@vuu-ui/vuu-protocol-types\";\n\nexport type SimulTableName =\n | \"instruments\"\n | \"instrumentsExtended\"\n | \"instrumentPrices\"\n | \"orders\"\n | \"childOrders\"\n | \"parentOrders\"\n | \"prices\";\n\n// These Schemas take the form of the schemas that we create\n// with TABLE_META returned by Vuu.\nexport const schemas: Readonly<Record<SimulTableName, Readonly<TableSchema>>> =\n {\n instruments: {\n columns: [\n { name: \"bbg\", serverDataType: \"string\" },\n { name: \"currency\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"exchange\", serverDataType: \"string\" },\n { name: \"isin\", serverDataType: \"string\" },\n { name: \"lotSize\", serverDataType: \"int\" },\n { name: \"ric\", serverDataType: \"string\" },\n ],\n key: \"ric\",\n table: { module: \"SIMUL\", table: \"instruments\" },\n },\n instrumentsExtended: {\n columns: [\n { name: \"bbg\", serverDataType: \"string\" },\n { name: \"currency\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"exchange\", serverDataType: \"string\" },\n { name: \"isin\", serverDataType: \"string\" },\n { name: \"lotSize\", serverDataType: \"int\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"supported\", serverDataType: \"boolean\" },\n { name: \"wishlist\", serverDataType: \"boolean\" },\n { name: \"lastUpdated\", serverDataType: \"long\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"date\", serverDataType: \"long\" },\n ],\n key: \"ric\",\n table: { module: \"SIMUL\", table: \"instrumentsExtended\" },\n },\n instrumentPrices: {\n columns: [\n { name: \"ask\", serverDataType: \"double\" },\n { name: \"askSize\", serverDataType: \"double\" }, // type: \"int\"\n { name: \"bbg\", serverDataType: \"string\" },\n { name: \"bid\", serverDataType: \"double\" },\n { name: \"bidSize\", serverDataType: \"double\" },\n { name: \"close\", serverDataType: \"double\" },\n { name: \"currency\", serverDataType: \"string\" },\n { name: \"description\", serverDataType: \"string\" },\n { name: \"exchange\", serverDataType: \"string\" },\n { name: \"isin\", serverDataType: \"string\" },\n { name: \"last\", serverDataType: \"double\" },\n { name: \"lotSize\", serverDataType: \"int\" },\n { name: \"open\", serverDataType: \"double\" },\n { name: \"phase\", serverDataType: \"string\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"scenario\", serverDataType: \"string\" },\n ],\n key: \"ric\",\n table: { module: \"SIMUL\", table: \"instrumentPrices\" },\n },\n orders: {\n columns: [\n { name: \"status\", serverDataType: \"string\" },\n { name: \"ccy\", serverDataType: \"string\" },\n { name: \"created\", serverDataType: \"long\" },\n { name: \"filledQuantity\", serverDataType: \"double\" },\n { name: \"lastUpdate\", serverDataType: \"long\" },\n { name: \"orderId\", serverDataType: \"string\" },\n { name: \"quantity\", serverDataType: \"double\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"trader\", serverDataType: \"string\" },\n ],\n key: \"orderId\",\n table: { module: \"SIMUL\", table: \"orders\" },\n },\n childOrders: {\n columns: [\n { name: \"account\", serverDataType: \"string\" },\n { name: \"averagePrice\", serverDataType: \"double\" },\n { name: \"ccy\", serverDataType: \"string\" },\n { name: \"exchange\", serverDataType: \"string\" },\n { name: \"filledQty\", serverDataType: \"double\" },\n { name: \"id\", serverDataType: \"string\" },\n { name: \"idAsInt\", serverDataType: \"int\" },\n { name: \"lastUpdate\", serverDataType: \"long\" },\n { name: \"openQty\", serverDataType: \"double\" },\n { name: \"parentOrderId\", serverDataType: \"string\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"quantity\", serverDataType: \"double\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"status\", serverDataType: \"string\" },\n { name: \"strategy\", serverDataType: \"string\" },\n { name: \"volLimit\", serverDataType: \"int\" },\n ],\n key: \"id\",\n table: { module: \"SIMUL\", table: \"childOrders\" },\n },\n parentOrders: {\n columns: [\n { name: \"account\", serverDataType: \"string\" },\n { name: \"algo\", serverDataType: \"string\" },\n { name: \"averagePrice\", serverDataType: \"double\" },\n { name: \"ccy\", serverDataType: \"string\" },\n { name: \"childCount\", serverDataType: \"int\" },\n { name: \"exchange\", serverDataType: \"string\" },\n { name: \"filledQty\", serverDataType: \"double\" },\n { name: \"id\", serverDataType: \"string\" },\n { name: \"idAsInt\", serverDataType: \"int\" },\n { name: \"lastUpdate\", serverDataType: \"long\" },\n { name: \"openQty\", serverDataType: \"double\" },\n { name: \"price\", serverDataType: \"double\" },\n { name: \"quantity\", serverDataType: \"double\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"side\", serverDataType: \"string\" },\n { name: \"status\", serverDataType: \"string\" },\n { name: \"volLimit\", serverDataType: \"int\" },\n ],\n key: \"id\",\n table: { module: \"SIMUL\", table: \"parentOrders\" },\n },\n prices: {\n columns: [\n { name: \"ask\", serverDataType: \"double\" },\n { name: \"askSize\", serverDataType: \"double\" }, // type: \"int\"\n { name: \"bid\", serverDataType: \"double\" },\n { name: \"bidSize\", serverDataType: \"double\" },\n { name: \"close\", serverDataType: \"double\" },\n { name: \"last\", serverDataType: \"double\" },\n { name: \"open\", serverDataType: \"double\" },\n { name: \"phase\", serverDataType: \"string\" },\n { name: \"ric\", serverDataType: \"string\" },\n { name: \"scenario\", serverDataType: \"string\" },\n ],\n key: \"ric\",\n table: { module: \"SIMUL\", table: \"prices\" },\n },\n };\n\nexport type SimulVuuTable = {\n module: \"SIMUL\";\n table: SimulTableName;\n};\n\nexport const isSimulTable = (table: VuuTable): table is SimulVuuTable =>\n table.module === \"SIMUL\";\n","import type { ColumnDescriptor } from \"@vuu-ui/vuu-table-types\";\nimport type { VuuRowDataItemType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { UpdateGenerator } from \"./rowUpdates\";\n\ntype GenerateRowFunc = (index: number) => VuuRowDataItemType[];\n\nexport type RowGeneratorFactory = (columns: string[]) => GenerateRowFunc;\n\nexport type ColumnGeneratorFn = (\n columns?: number | string[],\n columnConfig?: { [key: string]: Partial<ColumnDescriptor> },\n) => ColumnDescriptor[];\n\nexport const DefaultRowGenerator: RowGeneratorFactory =\n (columns: string[]) => (index) => {\n return [`row ${index + 1}`].concat(\n Array(columns.length)\n .fill(true)\n .map((v, j) => `value ${j + 1} @ ${index + 1}`),\n );\n };\n\nexport const DefaultColumnGenerator: ColumnGeneratorFn = (\n columns,\n columnConfig = {},\n) => {\n if (typeof columns === \"number\") {\n return [{ label: \"Row Number\", name: \"rownum\", width: 150 }].concat(\n Array(columns)\n .fill(true)\n .map((_, i) => {\n const name = `column_${i + 1}`;\n const label = `Column ${i + 1}`;\n return { label, name, width: 100, ...columnConfig[name] };\n }),\n );\n } else {\n throw Error(\"DefaultColumnGenerator must be passed columns (number)\");\n }\n};\n\nexport const defaultGenerators = {\n ColumnGenerator: DefaultColumnGenerator,\n RowGenerator: DefaultRowGenerator,\n};\n\nexport const getColumnAndRowGenerator = (\n table?: VuuTable,\n):\n | [ColumnGeneratorFn, RowGeneratorFactory]\n | [ColumnGeneratorFn, RowGeneratorFactory, () => UpdateGenerator] => {\n const tableName = table?.table ?? \"\";\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n switch (table?.module) {\n case \"SIMUL\": {\n const { ColumnGenerator, RowGenerator, createUpdateGenerator } =\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n simulDataGenerators[tableName] ?? defaultGenerators;\n return [ColumnGenerator, RowGenerator, createUpdateGenerator];\n }\n\n case \"BASKET\": {\n const { ColumnGenerator, RowGenerator, createUpdateGenerator } =\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n basketDataGenerators[tableName] ?? defaultGenerators;\n return [ColumnGenerator, RowGenerator, createUpdateGenerator];\n }\n case undefined: {\n const { ColumnGenerator, RowGenerator } = defaultGenerators;\n return [ColumnGenerator, RowGenerator];\n }\n default:\n throw Error(\n `vuu-row-gererator table ${table?.table} was requested but no generator is registered`,\n );\n }\n};\n\nexport const populateArray = (\n count: number,\n colGen: ColumnGeneratorFn,\n rowGen: RowGeneratorFactory,\n columns?: number | string[],\n) => {\n const columnDescriptors = colGen(columns);\n const generateRow = rowGen(columnDescriptors.map((col) => col.name));\n const data: Array<VuuRowDataItemType[]> = [];\n for (let i = 0; i < count; i++) {\n const row = generateRow(i);\n if (row) {\n data[i] = row;\n } else {\n break;\n }\n }\n return data;\n};\n","import { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { DefaultColumnGenerator } from \"../vuu-row-generator\";\n\nexport type TestTableName = \"TwoHundredColumns\";\n\nexport const schemas: Readonly<Record<TestTableName, Readonly<TableSchema>>> = {\n TwoHundredColumns: {\n columns: DefaultColumnGenerator(200).map((col) => ({\n ...col,\n serverDataType: \"string\",\n })),\n key: \"column01\",\n table: { module: \"TEST\", table: \"TwoHundredColumns\" },\n },\n};\n","import { TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport {\n type BasketsTableName,\n schemas as basketSchemas,\n} from \"./basket/basket-schemas\";\nimport {\n type SimulTableName,\n schemas as simulSchemas,\n} from \"./simul/simul-schemas\";\nimport {\n type TestTableName,\n schemas as testSchemas,\n} from \"./test/test-schemas\";\n\nexport type VuuTableName = BasketsTableName | SimulTableName | TestTableName;\nexport const schemas: Record<VuuTableName, TableSchema> = {\n ...basketSchemas,\n ...simulSchemas,\n ...testSchemas,\n};\n\nconst allSchemas: Readonly<Record<VuuTableName, Readonly<TableSchema>>> = {\n ...basketSchemas,\n ...simulSchemas,\n ...testSchemas,\n};\n\nexport const getAllSchemas = () => schemas;\n\nexport const getSchema = (tableName: VuuTableName) => {\n if (allSchemas[tableName]) {\n return allSchemas[tableName];\n }\n throw Error(`getSchema no schema for table ${tableName}`);\n};\n","import { DataItem } from \"@vuu-ui/vuu-utils\";\nimport { Table } from \"./Table\";\n\nconst cachedValues = new Map<Table, Map<string, DataItem[]>>();\n\nconst checkPattern = (value: string, pattern: string) => {\n return new RegExp(`^${pattern}`, \"i\").test(value);\n};\n\nconst getUniqueValues = (table: Table, column: string, pattern = \"\") => {\n let uniqueValues;\n const cachedEntry = cachedValues.get(table);\n if (cachedEntry && cachedEntry.has(column)) {\n uniqueValues = cachedEntry.get(column) as DataItem[];\n } else {\n const { data, map } = table;\n const key = map[column];\n if (key === undefined) {\n throw Error(`table ${table.schema.table.table} has no column ${column}`);\n }\n uniqueValues = [];\n const set = new Set();\n for (const row of data) {\n const value = row[key];\n if (!set.has(value)) {\n set.add(value);\n uniqueValues.push(value);\n }\n }\n uniqueValues.sort();\n if (cachedEntry) {\n cachedEntry.set(column, uniqueValues);\n } else {\n cachedValues.set(table, new Map([[column, uniqueValues]]));\n }\n }\n return pattern\n ? uniqueValues\n // case insentitive regex\n // .filter((value) => value.toString().startsWith(pattern))\n .filter((value) => checkPattern(value.toString(), pattern))\n .slice(0, 10)\n : uniqueValues.slice(0, 10);\n};\n\n// export const makeSuggestions = (\n// table: Table,\n// column: string,\n// pattern?: string\n// ) => {\n// const uniqueValues = getUniqueValues(table, column, pattern);\n// if (uniqueValues.length > 20) {\n// return uniqueValues?.slice(0, 20).map((v) => v.toString());\n// } else {\n// return uniqueValues.map((v) => v.toString());\n// }\n// };\nexport const makeSuggestions = (\n table: Table,\n column: string,\n pattern?: string,\n): Promise<string[]> =>\n new Promise((resolve) => {\n const uniqueValues = getUniqueValues(table, column, pattern);\n const result =\n uniqueValues.length > 20\n ? uniqueValues?.slice(0, 20).map((v) => v.toString())\n : uniqueValues.map((v) => v.toString());\n setTimeout(() => resolve(result), 100);\n });\n","import {\n ArrayDataSource,\n ArrayDataSourceConstructorProps,\n} from \"@vuu-ui/vuu-data-local\";\nimport type {\n DataSourceVisualLinkCreatedMessage,\n SelectionItem,\n DataSourceSubscribeCallback,\n DataSourceSubscribeProps,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuRpcMenuRequest,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcRequest,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport {\n isViewportRpcRequest,\n isVuuMenuRpcRequest,\n metadataKeys,\n Range,\n} from \"@vuu-ui/vuu-utils\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { Table } from \"./Table\";\nimport { RpcService, SessionTableMap } from \"./VuuModule\";\n\nconst { KEY } = metadataKeys;\n\nexport type VisualLinkHandler = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n) => Promise<DataSourceVisualLinkCreatedMessage | void>;\n\nexport interface TickingArrayDataSourceConstructorProps\n extends Omit<ArrayDataSourceConstructorProps, \"data\"> {\n data?: Array<VuuRowDataItemType[]>;\n getVisualLinks?: (tableName: string) => LinkDescriptorWithLabel[] | undefined;\n menu?: VuuMenu;\n menuRpcServices?: RpcService[];\n rpcServices?: RpcService[];\n sessionTables?: SessionTableMap;\n table?: Table;\n visualLinkService?: VisualLinkHandler;\n}\n\ntype LinkSubscription = {\n sourceColumnName?: string;\n columnName: string;\n linkType: \"subscribe-link-filter\" | \"subscribe-link-select\";\n};\n\nexport class TickingArrayDataSource extends ArrayDataSource {\n #menuRpcServices: RpcService[] | undefined;\n #pendingVisualLink?: LinkDescriptorWithLabel;\n #rpcServices: RpcService[] | undefined;\n // A reference to session tables hosted within client side module\n #sessionTables: SessionTableMap | undefined;\n #table?: Table;\n #selectionLinkSubscribers: Map<string, LinkSubscription> | undefined;\n #visualLinkService?: VisualLinkHandler;\n #getVisualLinks?: (\n tableName: string,\n ) => LinkDescriptorWithLabel[] | undefined;\n\n constructor({\n data,\n getVisualLinks,\n menuRpcServices,\n rpcServices,\n sessionTables,\n table,\n menu,\n visualLink,\n visualLinkService,\n ...arrayDataSourceProps\n }: TickingArrayDataSourceConstructorProps) {\n if (data === undefined && table === undefined) {\n throw Error(\"TickingArrayDataSource must be constructed with data\");\n }\n super({\n ...arrayDataSourceProps,\n data: data ?? table?.data ?? [],\n });\n this._menu = menu;\n\n this.#menuRpcServices = menuRpcServices;\n this.#pendingVisualLink = visualLink;\n this.#rpcServices = rpcServices;\n this.#sessionTables = sessionTables;\n this.#table = table;\n this.#visualLinkService = visualLinkService;\n this.#getVisualLinks = getVisualLinks;\n\n if (table) {\n this.tableSchema = table.schema;\n table.on(\"insert\", this.insert);\n table.on(\"update\", this.updateRow);\n }\n }\n\n async subscribe(\n subscribeProps: DataSourceSubscribeProps,\n callback: DataSourceSubscribeCallback,\n ) {\n const subscription = super.subscribe(subscribeProps, callback);\n // if (subscribeProps.range) {\n // this.#updateGenerator?.setRange(subscribeProps.range);\n // }\n if (this.#pendingVisualLink) {\n this.visualLink = this.#pendingVisualLink;\n this.#pendingVisualLink = undefined;\n }\n\n return subscription;\n }\n\n unsubscribe() {\n super.unsubscribe();\n this.#table = undefined;\n }\n\n set range(range: Range) {\n super.range = range;\n // this.#updateGenerator?.setRange(range);\n }\n get range() {\n return super.range;\n }\n\n set links(links: LinkDescriptorWithLabel[] | undefined) {\n super.links = links;\n }\n\n get links() {\n return this.#getVisualLinks?.(this.table.table);\n }\n\n private getSelectedRowIds() {\n return this.selectedRows.reduce<string[]>(\n (rowIds: string[], selection: SelectionItem) => {\n if (Array.isArray(selection)) {\n for (let i = selection[0]; i <= selection[1]; i++) {\n const row = this.data[i];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n } else {\n const row = this.data[selection];\n if (row) {\n rowIds.push(row[KEY]);\n }\n }\n return rowIds;\n },\n [],\n );\n }\n\n applyEdit(\n rowKey: string,\n columnName: string,\n value: VuuRowDataItemType,\n ): Promise<true> {\n this.#table?.update(rowKey, columnName, value);\n return Promise.resolve(true);\n }\n\n async rpcCall<T extends VuuRpcResponse = VuuRpcResponse>(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\">,\n ): Promise<T> {\n if (isViewportRpcRequest(rpcRequest)) {\n const rpcService = this.#rpcServices?.find(\n (service) => service.rpcName === rpcRequest.rpcName,\n );\n if (rpcService && isViewportRpcRequest(rpcRequest)) {\n switch (rpcRequest.rpcName) {\n case \"VP_BULK_EDIT_COLUMN_CELLS_RPC\": {\n return rpcService.service({\n ...rpcRequest,\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n return rpcService.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<T>;\n }\n }\n throw Error(`no implementation for PRC service ${rpcRequest.type}`);\n }\n\n async menuRpcCall(\n rpcRequest: Omit<VuuRpcRequest, \"vpId\"> & {\n namedParams?: RpcNamedParams;\n },\n ): Promise<VuuRpcResponse> {\n const rpcService = this.#rpcServices?.find(\n (service) =>\n service.rpcName === (rpcRequest as VuuRpcMenuRequest).rpcName,\n );\n\n if (isVuuMenuRpcRequest(rpcRequest)) {\n return rpcService?.service({\n ...rpcRequest,\n namedParams: {\n selectedRowIds: this.getSelectedRowIds(),\n table: this.tableSchema.table,\n },\n vpId: this.viewport,\n }) as Promise<VuuRpcMenuResponse>;\n }\n\n return super.menuRpcCall(rpcRequest);\n }\n\n getTypeaheadSuggestions(column: string, pattern?: string): Promise<string[]> {\n if (this.#table) {\n return makeSuggestions(this.#table, column, pattern);\n } else {\n throw Error(\n \"cannot call getTypeaheadSuggestions on TickingDataSource if table has not been provided\",\n );\n }\n }\n\n get visualLink() {\n return this._config.visualLink;\n }\n\n set visualLink(visualLink: LinkDescriptorWithLabel | undefined) {\n this._config = {\n ...this._config,\n visualLink,\n };\n\n if (visualLink) {\n const {\n parentClientVpId,\n link: { fromColumn, toColumn },\n } = visualLink;\n\n if (this.viewport) {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n childColumnName: fromColumn,\n type: \"CREATE_VISUAL_LINK\",\n parentVpId: parentClientVpId,\n parentColumnName: toColumn,\n }).then((response) => {\n this.emit(\n \"visual-link-created\",\n response as DataSourceVisualLinkCreatedMessage,\n );\n });\n }\n } else {\n this.#visualLinkService?.({\n childVpId: this.viewport,\n type: \"REMOVE_VISUAL_LINK\",\n }).then((/* response */) => {\n this.emit(\"visual-link-removed\");\n });\n }\n }\n}\n","import { SchemaColumn, TableSchema } from \"@vuu-ui/vuu-data-types\";\nimport { VuuRowDataItemType, VuuTable } from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, EventEmitter } from \"@vuu-ui/vuu-utils\";\nimport { UpdateGenerator } from \"./rowUpdates\";\n\nexport type TableEvents = {\n delete: (row: VuuRowDataItemType[]) => void;\n insert: (row: VuuRowDataItemType[]) => void;\n update: (row: VuuRowDataItemType[], columnName?: string) => void;\n};\n\nexport class Table extends EventEmitter<TableEvents> {\n #data: VuuRowDataItemType[][];\n #dataMap: ColumnMap;\n #indexOfKey: number;\n #index = new Map<string, number>();\n #schema: TableSchema;\n\n constructor(\n schema: TableSchema,\n data: VuuRowDataItemType[][],\n dataMap: ColumnMap,\n updateGenerator?: UpdateGenerator,\n ) {\n super();\n this.#data = data;\n this.#dataMap = dataMap;\n this.#schema = schema;\n this.#indexOfKey = dataMap[schema.key];\n this.buildIndex();\n updateGenerator?.setTable(this);\n updateGenerator?.setRange({ from: 0, to: 100 });\n }\n\n private buildIndex() {\n for (let i = 0; i < this.#data.length; i++) {\n const key = this.#data[i][this.#indexOfKey] as string;\n this.#index.set(key, i);\n }\n }\n\n get data() {\n return this.#data;\n }\n\n get map() {\n return this.#dataMap;\n }\n\n get schema() {\n return this.#schema;\n }\n\n insert(row: VuuRowDataItemType[]) {\n const index = this.#data.length;\n this.#data.push(row);\n const key = row[this.#indexOfKey] as string;\n this.#index.set(key, index);\n this.emit(\"insert\", row);\n }\n\n findByKey(key: string) {\n const index = this.#index.get(key) ?? -1;\n return this.#data[index];\n }\n\n update(key: string, columnName: string, value: VuuRowDataItemType) {\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key,\n );\n const colIndex = this.#dataMap[columnName];\n if (rowIndex !== -1) {\n const row = this.#data[rowIndex];\n const newRow = row.slice();\n newRow[colIndex] = value;\n this.#data[rowIndex] = newRow;\n this.emit(\"update\", newRow, columnName);\n }\n }\n updateRow(row: VuuRowDataItemType[]) {\n const key = row[this.#indexOfKey];\n const rowIndex = this.#data.findIndex(\n (row) => row[this.#indexOfKey] === key,\n );\n if (rowIndex !== -1) {\n this.#data[rowIndex] = row;\n this.emit(\"update\", row);\n }\n }\n}\n\nexport function buildDataColumnMapFromSchema(schema: Readonly<TableSchema>) {\n return Object.values(schema.columns).reduce<ColumnMap>(\n (map, col, index) => ({\n ...map,\n [col.name]: index,\n }),\n {},\n );\n}\n\n/**\n * Build a data ColumnMap for a table in the provided schema.\n * A data ColumnMap is a mapping from a raw data array to a map, keyed\n * by column name with no additional metadata.\n *\n * @param schemas\n * @param tableName\n * @returns\n */\nexport function buildDataColumnMap<TableName extends string = string>(\n schemas: Readonly<Record<TableName, Readonly<TableSchema>>>,\n tableName: TableName,\n) {\n return buildDataColumnMapFromSchema(schemas[tableName]);\n}\n\nconst getServerDataType = (\n columnName: string,\n { columns: cols1, table: t1 }: TableSchema,\n { columns: cols2, table: t2 }: TableSchema,\n) => {\n const col1 = cols1.find((col) => col.name === columnName);\n const col2 = cols2.find((col) => col.name === columnName);\n if (col1 && col2) {\n if (col1.serverDataType === col2.serverDataType) {\n return col1.serverDataType;\n } else {\n throw Error(\n `both tables ${t1.table} and ${t2.table} implement column ${columnName}, but with types differ`,\n );\n }\n } else if (col1) {\n return col1.serverDataType;\n } else if (col2) {\n return col2.serverDataType;\n } else {\n throw Error(`WTF how is this possible`);\n }\n};\n\n// Just copies source tables, then registers update listeners.\n// Not terribly efficient, but good enough for showcase\nexport const joinTables = (\n joinTable: VuuTable,\n table1: Table,\n table2: Table,\n joinColumn: string,\n) => {\n const { map: m1, schema: schema1 } = table1;\n const { map: m2, schema: schema2 } = table2;\n const k1 = m1[joinColumn];\n const k2 = m2[joinColumn];\n\n const combinedColumns = new Set(\n [...schema1.columns, ...schema2.columns].map((col) => col.name).sort(),\n );\n\n const combinedSchema: TableSchema = {\n key: joinColumn,\n table: joinTable,\n columns: Array.from(combinedColumns).map<SchemaColumn>((columnName) => ({\n name: columnName,\n serverDataType: getServerDataType(columnName, schema1, schema2),\n })),\n };\n\n const data: VuuRowDataItemType[][] = [];\n const combinedColumnMap = buildDataColumnMapFromSchema(combinedSchema);\n // const start = performance.now();\n for (const row of table1.data) {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n\n data.push(out);\n }\n }\n // const end = performance.now();\n // console.log(`took ${end - start} ms to create join table ${joinTable.table}`);\n\n const newTable = new Table(combinedSchema, data, combinedColumnMap);\n\n table1.on(\"insert\", (row) => {\n const row2 = table2.findByKey(String(row[k1]));\n if (row2) {\n const out = [];\n for (const column of table1.schema.columns) {\n const value = row[m1[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n for (const column of table2.schema.columns) {\n const value = row2[m2[column.name]];\n out[combinedColumnMap[column.name]] = value;\n }\n newTable.insert(out);\n }\n });\n\n table2.on(\"update\", (row) => {\n const keyValue = row[k2] as string;\n const targetRow = newTable.findByKey(keyValue);\n if (targetRow) {\n const updatedRow = targetRow.slice();\n for (const { name } of table2.schema.columns) {\n if (row[m2[name]] !== updatedRow[combinedColumnMap[name]]) {\n updatedRow[combinedColumnMap[name]] = row[m2[name]];\n }\n }\n newTable.updateRow(updatedRow);\n }\n });\n\n return newTable;\n};\n","export function random(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n\nexport function randomPercentage(value: number) {\n const dec = random(2, 99);\n const percentage = dec / 100;\n return value * percentage;\n}\nexport type PriceGenerator = (min: number, max: number) => number;\n\nexport const nextRandomDouble: PriceGenerator = (min, max) =>\n min + (max - min) * Math.random();\n\nexport const initBidAsk = (\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n const mid = nextRandomDouble(0, 1000);\n const tempBid = nextRandomDouble(mid - priceMaxDelta, mid - 1);\n const ask = nextRandomDouble(mid + 1, mid + priceMaxDelta);\n const bid = tempBid < 0 ? mid : tempBid;\n const newBid = Math.round(bid * 100) / 100.0;\n const newAsk = Math.round(ask * 100) / 100.0;\n return [newBid, newAsk];\n};\n\nconst maxAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n return Math.min(\n ask + spreadMultipler * spread,\n spread / 2 + bid + priceMaxDelta\n );\n};\n\nconst minAsk = (bid: number, ask: number) => {\n return Math.max(bid + 1, (ask - bid) / 2 + bid);\n};\n\nconst maxBid = (bid: number, ask: number) => {\n const result = Math.min(ask - 1, (ask - bid) / 2 + bid);\n return result < 1 ? bid + 1 : result;\n};\n\nconst minBid = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number\n) => {\n const spread = ask - bid;\n const mid = spread / 2 + bid;\n const result = Math.max(\n bid - Math.min(spreadMultipler * spread, 10),\n mid - priceMaxDelta\n );\n return result < 0 ? bid : result;\n};\n\nexport const generateNextBidAsk = (\n bid: number,\n ask: number,\n spreadMultipler: number,\n priceMaxDelta: number,\n nextRandomDouble: PriceGenerator\n) => {\n let tempAsk = ask;\n if (Math.abs(bid - ask) <= 1) tempAsk = ask + 1;\n const minBidValue = minBid(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const maxBidValue = maxBid(bid, tempAsk);\n const minAskValue = minAsk(bid, tempAsk);\n const maxAskValue = maxAsk(bid, tempAsk, spreadMultipler, priceMaxDelta);\n const newBid =\n Math.round(nextRandomDouble(minBidValue, maxBidValue) * 100) / 100.0;\n const newAsk =\n Math.round(nextRandomDouble(minAskValue, maxAskValue) * 100) / 100.0;\n return [newBid, newAsk];\n};\n","import { VuuRange } from \"@vuu-ui/vuu-protocol-types\";\nimport { generateNextBidAsk, nextRandomDouble, random } from \"./data-utils\";\nimport type { UpdateGenerator } from \"./rowUpdates\";\nimport { Table } from \"./Table\";\n\nconst getNewValue = (value: number) => {\n const multiplier = random(0, 100) / 1000;\n const direction = random(0, 10) >= 5 ? 1 : -1;\n return value + value * multiplier * direction;\n};\n\nexport class BaseUpdateGenerator implements UpdateGenerator {\n private table: Table | undefined;\n private range: VuuRange | undefined;\n private updating = false;\n private timer: number | undefined;\n private tickingColumns: { [key: string]: number };\n\n constructor(tickingColumns: { [key: string]: number }) {\n this.tickingColumns = tickingColumns;\n }\n\n setRange(range: VuuRange) {\n this.range = range;\n if (!this.updating && this.table) {\n this.startUpdating();\n }\n }\n\n setTable(table: Table) {\n this.table = table;\n }\n\n private startUpdating() {\n this.updating = true;\n this.update();\n }\n\n private stopUpdating() {\n this.updating = false;\n if (this.timer) {\n window.clearTimeout(this.timer);\n this.timer = undefined;\n }\n }\n\n update = () => {\n if (this.range && this.table) {\n const data = this.table?.data;\n const { bid, ask, last, ...rest } = this.tickingColumns;\n if (data && data?.length > 0) {\n const maxRange = Math.min(this.range.to, data.length);\n for (let rowIndex = this.range.from; rowIndex < maxRange; rowIndex++) {\n let updateCount = 0;\n const shallUpdateRow = random(0, 10) < 2;\n if (shallUpdateRow) {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const rowUpdates = this.table.data[rowIndex];\n const row = data[rowIndex];\n\n if (bid !== undefined && ask !== undefined) {\n const { [bid]: currentBid, [ask]: currentAsk } = row as number[];\n const [newBid, newAsk] = generateNextBidAsk(\n currentBid,\n currentAsk,\n 10,\n 5,\n nextRandomDouble,\n );\n rowUpdates[ask] = newAsk;\n rowUpdates[bid] = newBid;\n if (last !== undefined) {\n const newLast =\n Math.round((currentAsk + (newAsk - currentAsk) / 2) * 100) /\n 100.0;\n rowUpdates[last] = newLast;\n }\n }\n\n for (const colIdx of Object.values(rest)) {\n const shallUpdateColumn = random(0, 10) < 5;\n if (shallUpdateColumn) {\n updateCount += 1;\n const newValue = getNewValue(row[colIdx] as number);\n if (this.table) {\n rowUpdates[colIdx] = newValue;\n }\n }\n }\n if (this.table && updateCount > 0) {\n this.table.updateRow(rowUpdates);\n }\n }\n }\n }\n }\n\n if (this.updating) {\n this.timer = window.setTimeout(this.update, 500);\n }\n };\n}\n","// Symbol,Name,Last Trade,Change,Volume\n// prettier-ignore\nexport default [\n [\"AAL.L\",\"Anglo American PLC\",\"436.35 13:13\",\"5.35 (1.24%)\",\"5,799,089\"],\n [\"ABF.L\",\"Associated British Foods PLC\",\"3,435.60 13:12\",\"7.40 (0.21%)\",\"86,808\"],\n [\"ADM.L\",\"Admiral Group PLC\",\"1,627.00 13:13\",\"\"],\n [\"ADN.L\",\"Aberdeen Asset Management PLC\",\"334.00 13:13\",\"2.50 (0.75%)\",\"806,880\"],\n [\"AHT.L\",\"Ashtead Group PLC\",\"1,027.00 13:13\",\"6.00 (0.59%)\",\"331,255\"],\n [\"ANTO.L\",\"Antofagasta PLC\",\"484.10 13:13\",\"11.70 (2.48%)\",\"1,753,976\"],\n [\"ARM.L\",\"ARM Holdings PLC\",\"1,058.00 13:13\",\"3.00 (0.28%)\",\"475,927\"],\n [\"AV.L\",\"Aviva PLC\",\"493.97 13:13\",\"2.23 (0.45%)\",\"2,226,835\"],\n [\"AZN.L\",\"AstraZeneca PLC\",\"4,399.50 13:13\",\"2.50 (0.06%)\",\"815,133\"],\n [\"BA.L\",\"BAE Systems PLC\",\"478.10 13:13\",\"4.30 (0.91%)\",\"2,039,934\"],\n [\"BAB.L\",\"Babcock International Group PLC\",\"988.00 13:13\",\"9.50 (0.97%)\",\"209,614\"],\n [\"BARC.L\",\"Barclays PLC\",\"226.30 13:13\", \"1.15 (0.51%)\",\"6,575,664\"],\n [\"BATS.L\",\"British American Tobacco PLC\",\"3,803.50 13:13\", \"8.50 (0.22%)\",\"465,110\"],\n [\"BDEV.L\",\"Barratt Developments PLC\",\"576.00 13:13\", \"0.50 (0.09%)\",\"1,044,365\"],\n [\"BG.L\",\"BG Group PLC\",\"1,013.50 13:13\", \"5.50 (0.55%)\",\"1,507,332\"],\n [\"BKG.L\",\"Berkeley Group Holdings (The) PLC\",\"3,126.00 13:13\", \"15.00 (0.48%)\",\"95,071\"],\n [\"BLND.L\",\"British Land Co PLC\",\"828.06 13:12\", \"10.44 (1.25%)\",\"1,802,548\"],\n [\"BLT.L\",\"BHP Billiton PLC\",\"881.40 13:13\", \"4.30 (0.49%)\",\"4,947,287\"],\n [\"BNZL.L\",\"Bunzl PLC\",\"1,875.40 13:05\", \"4.60 (0.24%)\",\"104,541\"],\n [\"BP.L\",\"BP PLC\",\"381.50 13:13\", \"2.95 (0.78%)\",\"10,493,561\"],\n [\"BRBY.L\",\"Burberry Group PLC\",\"1,269.00 13:13\", \"7.00 (0.55%)\",\"295,647\"],\n [\"BT-A\",\"L,BT Group PLC\",\"489.20 13:13\", \"3.70 (0.75%)\",\"3,914,982\"],\n [\"CCL.L\",\"Carnival PLC\",\"3,426.00 13:12\", \"22.00 (0.64%)\",\"86,257\"],\n [\"CNA.L\",\"Centrica PLC\",\"212.80 13:13\", \"0.60 (0.28%)\",\"2,144,540\"],\n [\"CPG.L\",\"Compass Group PLC\",\"1,054.00 13:08\", \"5.00 (0.48%)\",\"1,001,167\"],\n [\"CPI.L\",\"Capita PLC\",\"1,235.00 13:11\", \"1.00 (0.08%)\",\"244,591\"],\n [\"CRH.L\",\"CRH PLC\",\"1,783.20 13:12\", \"17.80 (0.99%)\",\"897,325\"],\n [\"DC.L\",\"DIXONS CARPHONE\",\"462.10 13:11\",\"\"],\n [\"DGE.L\",\"Diageo PLC\",\"1,881.50 13:13\", \"6.50 (0.34%)\",\"756,906\"],\n [\"DLG.L\",\"Direct Line Insurance Group PLC\",\"403.80 13:13\", \"0.40 (0.10%)\",\"1,095,340\"],\n [\"EXPN.L\",\"Experian PLC\",\"1,191.00 13:12\", \"2.00 (0.17%)\",\"467,283\"],\n [\"EZJ.L\",\"easyJet PLC\",\"1,682.00 13:12\", \"28.00 (1.64%)\",\"1,191,230\"],\n [\"FRES.L\",\"Fresnillo PLC\",\"678.50 13:12\", \"6.50 (0.97%)\",\"381,871\"],\n [\"GFS.L\",\"G4S PLC\",\"232.30 13:03\", \"2.00 (0.85%)\",\"1,096,551\"],\n [\"GKN.L\",\"GKN PLC\",\"294.80 13:12\", \"2.50 (0.86%)\",\"792,247\"],\n [\"GLEN.L\",\"Glencore PLC\",\"90.48 13:13\", \"1.65 (1.86%)\",\"41,631,528\"],\n [\"GSK.L\",\"GlaxoSmithKline PLC\",\"1,345.00 13:13\", \"0.50 (0.04%)\",\"1,767,356\"],\n [\"HIK.L\",\"Hikma Pharmaceuticals PLC\",\"2,010.00 13:04\", \"57.00 (2.92%)\",\"261,511\"],\n [\"HL.L\",\"Hargreaves Lansdown PLC\",\"1,488.03 13:12\", \"9.97 (0.67%)\",\"372,261\"],\n [\"HMSO.L\",\"Hammerson PLC\",\"597.50 13:11\", \"3.50 (0.58%)\",\"478,301\"],\n [\"HSBA.L\",\"HSBC Holdings PLC\",\"519.70 13:13\", \"0.50 (0.10%)\",\"7,415,629\"],\n [\"IAG.L\",\"International Consolidated Airlines Group SA\",\"575.40 13:12\", \"16.10 (2.72%)\",\"4,311,514\"],\n [\"IHG.L\",\"InterContinental Hotels Group PLC\",\"2,481.00 13:12\", \"19.00 (0.76%)\",\"219,918\"],\n [\"III.L\",\"3i Group PLC\",\"487.30 13:11\", \"4.50 (0.92%)\",\"189,987\"],\n [\"IMT.L\",\"Imperial Tobacco Group PLC\",\"3,571.00 13:13\", \"29.00 (0.81%)\",\"926,816\"],\n [\"INTU.L\",\"intu properties PLC\",\"319.90 13:09\", \"4.60 (1.42%)\",\"514,821\"],\n [\"ISAT.L\",\"Inmarsat PLC\",\"1,054.44 13:13\", \"3.44 (0.33%)\",\"988,089\"],\n [\"ITRK.L\",\"Intertek Group PLC\",\"2,643.00 13:14\", \"3.00 (0.11%)\",\"45,868\"],\n [\"ITV.L\",\"ITV PLC\",\"267.30 13:14\", \"2.60 (0.96%)\",\"3,453,208\"],\n [\"JMAT.L\",\"Johnson Matthey PLC\",\"2,445.00 13:14\", \"29.00 (1.20%)\",\"276,397\"],\n [\"KGF.L\",\"Kingfisher PLC\",\"346.20 13:14\", \"4.30 (1.23%)\",\"1,021,408\"],\n [\"LAND.L\",\"Land Securities Group PLC\",\"1,239.00 13:13\", \"7.00 (0.56%)\",\"384,973\"],\n [\"LGEN.L\",\"Legal & General Group PLC\",\"266.00 13:14\", \"1.60 (0.60%)\",\"1,998,399\"],\n [\"LLOY.L\",\"Lloyds Banking Group PLC\",\"73.86 13:14\", \"0.02 (0.03%)\",\"18,907,878\"],\n [\"LSE.L\",\"London Stock Exchange Group PLC\",\"2,544.00 13:11\", \"6.00 (0.24%)\",\"129,657\"],\n [\"MGGT.L\",\"Meggitt PLC\",\"386.00 13:15\", \"3.20 (0.84%)\",\"611,044\"],\n [\"MKS.L\",\"Marks & Spencer Group PLC\",\"514.75 13:12\", \"3.25 (0.63%)\",\"920,128\"],\n [\"MNDI.L\",\"Mondi PLC\",\"1,463.00 13:14\", \"7.00 (0.48%)\",\"383,546\"],\n [\"MRW.L\",\"Morrison (Wm) Supermarkets PLC\",\"155.20 13:14\",\"\"],\n [\"NG.L\",\"National Grid PLC\",\"926.40 13:14\", \"1.10 (0.12%)\",\"1,659,592\"],\n [\"NXT.L\",\"Next PLC\",\"7,765.00 13:11\", \"95.00 (1.21%)\",\"114,062\"],\n [\"OML.L\",\"Old Mutual PLC\",\"198.50 13:14\", \"0.40 (0.20%)\",\"2,040,849\"],\n [\"PRU.L\",\"Prudential PLC\",\"1,499.50 13:15\", \"14.00 (0.93%)\",\"580,870\"],\n [\"PSON.L\",\"Pearson PLC\",\"794.00 13:09\", \"5.00 (0.63%)\",\"1,177,953\"],\n [\"RB.L\",\"Reckitt Benckiser Group PLC\",\"6,293.00 13:14\", \"34.00 (0.54%)\",\"281,172\"],\n [\"RBS.L\",\"Royal Bank of Scotland Group PLC\",\"313.40 13:14\", \"2.40 (0.77%)\",\"2,100,058\"],\n [\"RDSA.L\",\"Royal Dutch Shell PLC\",\"1,636.00 13:14\", \"18.00 (1.11%)\",\"2,467,461\"],\n [\"RDSB.L\",\"Royal Dutch Shell PLC\",\"1,652.00 13:15\", \"14.50 (0.89%)\",\"1,457,434\"],\n [\"REL.L\",\"Reed Elsevier PLC\",\"1,170.00 13:14\",\"0.00 (0.00%)\",\"908,802\"],\n [\"RIO.L\",\"Rio Tinto PLC\",\"2,235.00 13:15\", \"21.00 (0.95%)\",\"2,190,722\"],\n [\"RMG.L\",\"Royal Mail PLC\",\"453.50 13:14\", \"1.20 (0.26%)\",\"995,316\"],\n [\"RR.L\",\"Rolls-Royce Group PLC\",\"546.63 13:14\", \"8.38 (1.51%)\",\"2,792,915\"],\n [\"RRS.L\",\"Randgold Resources Ltd\",\"3,929.00 13:14\",\"0.00 (0.00%)\",\"135,524\"],\n [\"RSA.L\",\"RSA Insurance Group PLC\",\"437.10 13:14\", \"0.10 (0.02%)\",\"395,477\"],\n [\"SAB.L\",\"SABMiller PLC\",\"4,011.00 13:15\", \"1.00 (0.02%)\",\"892,451\"],\n [\"SBRY.L\",\"Sainsbury (J) PLC\",\"255.80 13:14\", \"7.40 (2.98%)\",\"2,395,670\"],\n [\"SDR.L\",\"Schroders PLC\",\"2,930.00 13:09\", \"12.00 (0.41%)\",\"44,674\"],\n [\"SGE.L\",\"Sage Group (The) PLC\",\"545.50 13:13\", \"0.50 (0.09%)\",\"539,717\"],\n [\"SHP.L\",\"Shire PLC\",\"4,685.00 13:14\", \"22.00 (0.47%)\",\"221,318\"],\n [\"SKY.L\",\"SKY\",\"1,095.00 13:12\", \"4.00 (0.37%)\",\"925,016\"],\n [\"SL.L\",\"Standard Life PLC\",\"399.90 13:14\", \"3.20 (0.79%)\",\"861,636\"],\n [\"SMIN.L\",\"Smiths Group PLC\",\"992.50 13:14\", \"27.50 (2.70%)\",\"640,309\"],\n [\"SN.L\",\"Smith & Nephew PLC\",\"1,110.00 13:14\", \"9.00 (0.82%)\",\"480,018\"],\n [\"SPD.L\",\"Sports Direct International PLC\",\"694.50 13:11\", \"1.50 (0.22%)\",\"157,981\"],\n [\"SSE.L\",\"SSE PLC\",\"1,463.00 13:13\", \"2.00 (0.14%)\",\"562,454\"],\n [\"STAN.L\",\"Standard Chartered PLC\",\"583.00 13:14\", \"0.60 (0.10%)\",\"2,018,697\"],\n [\"STJ.L\",\"St James's Place PLC\",\"964.00 13:14\", \"11.00 (1.13%)\",\"418,480\"],\n [\"SVT.L\",\"Severn Trent PLC\",\"2,199.00 13:12\", \"1.00 (0.05%)\",\"95,342\"],\n [\"TPK.L\",\"Travis Perkins PLC\",\"1,945.00 13:13\", \"4.00 (0.21%)\",\"92,916\"],\n [\"TSCO.L\",\"Tesco PLC\",\"171.54 13:14\", \"2.54 (1.50%)\",\"9,831,136\"],\n [\"TUI.L\",\"TUI AG\",\"1,115.00 13:10\", \"5.00 (0.45%)\",\"458,970\"],\n [\"TW.L\",\"Taylor Wimpey PLC\",\"183.90 13:15\", \"1.10 (0.59%)\",\"3,180,729\"],\n [\"ULVR.L\",\"Unilever PLC\",\"2,791.00 13:14\", \"29.00 (1.03%)\",\"824,827\"],\n [\"UU.L\",\"United Utilities Group PLC\",\"959.00 13:10\", \"2.50 (0.26%)\",\"436,911\"],\n [\"VOD.L\",\"Vodafone Group PLC\",\"224.25 13:15\", \"1.30 (0.58%)\",\"17,572,036\"],\n [\"WOS.L\",\"Wolseley PLC\",\"3,657.00 13:14\", \"4.00 (0.11%)\",\"179,536\"],\n [\"WPP.L\",\"WPP PLC\",\"1,502.00 13:15\", \"12.00 (0.79%)\",\"857,887\"],\n [\"WTB.L\",\"Whitbread PLC\",\"4,484.00 13:16\", \"60.00 (1.32%)\",\"141,036\"]\n]\n","//Name,Symbol,Weight,Last Trade,Chg,% Chg\n// prettier-ignore\nexport default [\n [\"Apple Inc\", \"AAPL\", 11.007,174.94,0.15, \"(0.09%)\"],\n [\"Microsoft Corp\", \"MSFT\", 9.61,316.98,-0.03, \"(-0.01%)\"],\n [\"Amazon.com Inc\", \"AMZN\", 5.401,129.31,0.19, \"(0.14%)\"],\n [\"NVIDIA Corp\", \"NVDA\", 4.101,415.74,-0.36, \"(-0.09%)\"],\n [\"Meta Platforms Inc\", \"META\", 3.729,299.42,0.34, \"(0.11%)\"],\n [\"Tesla Inc\", \"TSLA\", 3.285,244.13,-0.75, \"(-0.31%)\"],\n [\"Alphabet Inc\", \"GOOGL\", 3.133,130.49,0.24, \"(0.18%)\"],\n [\"Alphabet Inc\", \"GOOG\", 3.085,131.49,0.24, \"(0.18%)\"],\n [\"Broadcom Inc\", \"AVGO\", 2.896,833.04,3.96, \"(0.48%)\"],\n [\"Costco Wholesale Corp\", \"COST\", 2.137,557.85,-0.74, \"(-0.13%)\"],\n [\"PepsiCo Inc\", \"PEP\", 2.096,174.84,-0.43, \"(-0.25%)\"],\n [\"Adobe Inc\", \"ADBE\", 2.033,511.42,-1.48, \"(-0.29%)\"],\n [\"Cisco Systems Inc\", \"CSCO\", 1.887,53.68,0.11, \"(0.20%)\"],\n [\"Comcast Corp\", \"CMCSA\", 1.633,45.30,-0.01, \"(-0.01%)\"],\n [\"Netflix Inc\", \"NFLX\", 1.478,379.89,0.08, \"(0.02%)\"],\n [\"T-Mobile US Inc\", \"TMUS\", 1.43,140.18,0.83, \"(0.60%)\"],\n [\"Advanced Micro Devices Inc\", \"AMD\", 1.348,96.09,-0.11, \"(-0.12%)\"],\n [\"Texas Instruments Inc\", \"TXN\", 1.264,161.00,0.69, \"(0.43%)\"],\n [\"Intel Corp\", \"INTC\", 1.26,34.19,0.01, \"(0.01%)\"],\n [\"Amgen Inc\", \"AMGN\", 1.251,271.18,3.48, \"(1.30%)\"],\n [\"Intuit Inc\", \"INTU\", 1.226,509.00,0.43, \"(0.08%)\"],\n [\"Honeywell International Inc\", \"HON\", 1.103,188.67,-1.12, \"(-0.59%)\"],\n [\"QUALCOMM Inc\", \"QCOM\", 1.046,107.53,-0.16, \"(-0.14%)\"],\n [\"Applied Materials Inc\", \"AMAT\", 0.982,136.32,0.15, \"(0.11%)\"],\n [\"Booking Holdings Inc\", \"BKNG\", 0.941,3, 19.20,-43.30, \"(-1.42%)\"],\n [\"Starbucks Corp\", \"SBUX\", 0.926,93.80,0.12, \"(0.12%)\"],\n [\"Intuitive Surgical Inc\", \"ISRG\", 0.867,288.50,0.30, \"(0.10%)\"],\n [\"Automatic Data Processing Inc\", \"ADP\", 0.854,239.45,0.10, \"(0.04%)\"],\n [\"Mondelez International Inc\", \"MDLZ\", 0.835,71.25,0.82, \"(1.16%)\"],\n [\"Gilead Sciences Inc\", \"GILD\", 0.814,75.47,0.46, \"(0.61%)\"],\n [\"Vertex Pharmaceuticals Inc\", \"VRTX\", 0.794,353.67,4.14, \"(1.18%)\"],\n [\"Regeneron Pharmaceuticals Inc\", \"REGN\", 0.763,828.09,3.25, \"(0.39%)\"],\n [\"Analog Devices Inc\", \"ADI\", 0.752,176.82,1.34, \"(0.76%)\"],\n [\"Lam Research Corp\", \"LRCX\", 0.702,620.00,0.89, \"(0.14%)\"],\n [\"Micron Technology Inc\", \"MU\", 0.646,68.90,0.02, \"(0.03%)\"],\n [\"Palo Alto Networks Inc\", \"PANW\", 0.604,228.70,0.19, \"(0.08%)\"],\n [\"Synopsys Inc\", \"SNPS\", 0.587,447.12,0.27, \"(0.06%)\"],\n [\"Charter Communications Inc\", \"CHTR\", 0.581,441.88,-3.33, \"(-0.75%)\"],\n [\"MercadoLibre Inc\", \"MELI\", 0.562,1,275.50,-1.47, \"(-0.11%)\"],\n [\"PayPal Holdings Inc\", \"PYPL\", 0.559,57.90,0.02, \"(0.03%)\"],\n [\"CSX Corp\", \"CSX\", 0.54,31.23,0.03, \"(0.09%)\"],\n [\"Cadence Design Systems Inc\", \"CDNS\", 0.539,230.83,0.17, \"(0.07%)\"],\n [\"KLA Corp\", \"KLAC\", 0.53,456.11,4.29, \"(0.95%)\"],\n [\"PDD Holdings Inc ADR\", \"PDD\", 0.521,95.93,-0.01, \"(-0.01%)\"],\n [\"Marriott International Inc/MD\", \"MAR\", 0.505,193.90,-0.46, \"(-0.23%)\"],\n [\"Monster Beverage Corp\", \"MNST\", 0.498,54.48,-0.04, \"(-0.08%)\"],\n [\"Airbnb Inc\", \"ABNB\", 0.491,132.09,-0.11, \"(-0.08%)\"],\n [\"O'Reilly Automotive Inc\", \"ORLY\", 0.485,936.67,0.65, \"(0.07%)\"],\n [\"Cintas Corp\", \"CTAS\", 0.446,505.27,0.52, \"(0.10%)\"],\n [\"ASML Holding NV\", \"ASML\", 0.438,585.00,-2.10, \"(-0.36%)\"],\n [\"NXP Semiconductors NV\", \"NXPI\", 0.434,196.76,-0.04, \"(-0.02%)\"],\n [\"Workday Inc\", \"WDAY\", 0.414,235.55,4.73, \"(2.05%)\"],\n [\"Lululemon Athletica Inc\", \"LULU\", 0.405,386.36,-1.69, \"(-0.44%)\"],\n [\"Keurig Dr Pepper Inc,KDP\", 0.404,33.25,0.13, \"(0.39%)\"],\n [\"Fortinet Inc\", \"FTNT\", 0.401,58.29,0.05, \"(0.09%)\"],\n [\"Marvell Technology Inc\", \"MRVL\", 0.388,52.38,0.08, \"(0.14%)\"],\n [\"PACCAR Inc\", \"PCAR\", 0.38,84.97,0.04, \"(0.04%)\"],\n [\"Old Dominion Freight Line Inc\", \"ODFL\", 0.38,401.01,0.35, \"(0.09%)\"],\n [\"Autodesk Inc\", \"ADSK\", 0.379,204.07,0.03, \"(0.01%)\"],\n [\"Kraft Heinz Co/The\", \"KHC\", 0.368,34.27,0.11, \"(0.31%)\"],\n [\"Microchip Technology Inc\", \"MCHP\", 0.36,77.00,-0.08, \"(-0.10%)\"],\n [\"Copart Inc\", \"CPRT\", 0.358,43.26,0.10, \"(0.22%)\"],\n [\"American Electric Power Co Inc\", \"AEP\", 0.357,79.23,0.06, \"(0.08%)\"],\n [\"Paychex Inc\", \"PAYX\", 0.355,113.01,0.06, \"(0.06%)\"],\n [\"Exelon Corp\", \"EXC\", 0.35,40.28,0.07, \"(0.16%)\"],\n [\"ON Semiconductor Corp\", \"ON\", 0.341,93.87,0.06, \"(0.06%)\"],\n [\"AstraZeneca PLC ADR\", \"AZN\", 0.339,67.35,-0.49, \"(-0.72%)\"],\n [\"Seagen Inc\", \"SGEN\", 0.336,212.18,-1.52, \"(-0.71%)\"],\n [\"Ross Stores Inc\", \"ROST\", 0.335,111.71,0.05, \"(0.04%)\"],\n [\"Moderna Inc\", \"MRNA\", 0.331,100.32,0.33, \"(0.33%)\"],\n [\"Biogen Inc\", \"BIIB\", 0.326,257.93,0.25, \"(0.10%)\"],\n [\"Crowdstrike Holdings Inc\", \"CRWD\", 0.319,162.85,0.28, \"(0.17%)\"],\n [\"IDEXX Laboratories Inc\", \"IDXX\", 0.316,439.41,3.72, \"(0.85%)\"],\n [\"Baker Hughes Co\", \"BKR\", 0.307,35.44,0.04, \"(0.10%)\"],\n [\"Constellation Energy Corp\", \"CEG\",0.307,110.41,0.05, \"(0.04%)\"],\n [\"Cognizant Technology Solutions Corp\",\"CTSH\",0.303,70.19,0.58,\"(0.83%)\"],\n [\"Verisk Analytics Inc\", \"VRSK\", 0.303,242.05,0.10, \"(0.04%)\"],\n [\"Dexcom Inc\", \"DXCM\", 0.3,88.30,0.80, \"(0.92%)\"],\n [\"Trade Desk Inc/The\", \"TTD\", 0.293,76.38,0.03, \"(0.03%)\"],\n [\"Xcel Energy Inc\", \"XEL\", 0.284,59.76,0.03, \"(0.04%)\"],\n [\"Electronic Arts Inc\", \"EA\", 0.279,118.38,-0.63, \"(-0.53%)\"],\n [\"CoStar Group Inc\", \"CSGP\", 0.277,78.18,0.12, \"(0.15%)\"],\n [\"GLOBALFOUNDRIES Inc\", \"GFS\", 0.273,57.21,0.38, \"(0.67%)\"],\n [\"Fastenal Co\", \"FAST\", 0.268,54.32,0.11, \"(0.20%)\"],\n [\"Atlassian Corp\", \"TEAM\", 0.253,196.01,0.55, \"(0.28%)\"],\n [\"GE HealthCare Technologies Inc\", \"GEHC\", 0.252,63.78,-0.56, \"(-0.86%)\"],\n [\"Warner Bros Discovery Inc\", \"WBD\", 0.244,11.09,-0.02, \"(-0.14%)\"],\n [\"Diamondback Energy Inc\", \"FANG\", 0.235,150.70,0.13, \"(0.09%)\"],\n [\"Datadog Inc\", \"DDOG\", 0.23,88.81,0.05, \"(0.06%)\"],\n [\"ANSYS Inc\", \"ANSS\", 0.227,300.60,-2.31, \"(-0.76%)\"],\n [\"eBay Inc\", \"EBAY\", 0.203,43.22,0.09, \"(0.20%)\"],\n [\"Dollar Tree Inc\", \"DLTR\", 0.201,104.77,0.27, \"(0.25%)\"],\n [\"Align Technology Inc\", \"ALGN\", 0.2,297.25,-1.31, \"(-0.44%)\"],\n [\"Zscaler Inc\", \"ZS\", 0.188,151.80,0.09, \"(0.06%)\"],\n [\"Illumina Inc\", \"ILMN\", 0.183,132.31,-0.13, \"(-0.10%)\"],\n [\"Walgreens Boots Alliance Inc\", \"WBA\", 0.161,21.18,0.06, \"(0.28%)\"],\n [\"Zoom Video Communications Inc\", \"ZM\", 0.151,68.57,-0.29, \"(-0.41%)\"],\n [\"Enphase Energy Inc\", \"ENPH\", 0.148,120.41,0.49, \"(0.41%)\"],\n [\"Sirius XM Holdings Inc\", \"SIRI\", 0.137,4.05,0.02, \"(0.50%)\"],\n [\"JD.com Inc ADR\", \"JD\", 0.117,30.43,0.02, \"(0.05%)\"],\n [\"Lucid Group Inc\", \"LCID\", 0.102,5.14,0.03, \"(0.49%)\"],\n];\n","//Name,Symbol,Weight,Price,Change,Change %\nexport default [\n [\"Apple Inc\", \"AAPL\", 6.992488, 171.9, 1.47, \"(0.86%)\"],\n [\"Microsoft Corp\", \"MSFT\", 6.487978, 314.55, 1.76, \"(0.56%)\"],\n [\"Amazon.com Inc\", \"AMZN\", 3.193379, 126.25, 0.27, \"(0.22%)\"],\n [\"Nvidia Corp\", \"NVDA\", 2.928461, 433.11, 8.43, \"(1.99%)\"],\n [\"Alphabet Inc Cl A\", \"GOOGL\", 2.162218, 132.93, 2.39, \"(1.83%)\"],\n [\"Tesla Inc\", \"TSLA\", 1.854311, 246.56, 6.06, \"(2.52%)\"],\n [\"Alphabet Inc Cl C\", \"GOOG\", 1.85251, 133.81, 2.35, \"(1.78%)\"],\n [\"Meta Platforms Inc Class A\", \"META\", 1.847731, 305.93, 8.19, \"(2.75%)\"],\n [\"Berkshire Hathaway Inc Cl B\", \"BRK.B\", 1.82184, 358.67, 0.89, \"(0.25%)\"],\n [\"Exxon Mobil Corp\", \"XOM\", 1.343563, 118.97, -1.23, \"(-1.03%)\"],\n [\"Unitedhealth Group Inc\", \"UNH\", 1.302884, 510.04, 6.31, \"(1.25%)\"],\n [\"Eli Lilly & Co\", \"LLY\", 1.224046, 546.65, -3.11, \"(-0.57%)\"],\n [\"Jpmorgan Chase & Co\", \"JPM\", 1.182918, 148.23, 2.45, \"(1.68%)\"],\n [\"Johnson & Johnson W/d\", \"JNJ\", 1.056344, 156.83, -0.28, \"(-0.18%)\"],\n [\"Visa Inc Class a Shares\", \"V\", 1.029636, 231.97, 2.47, \"(1.08%)\"],\n [\"Procter & Gamble Co\", \"PG\", 0.969793, 145.75, -1.59, \"(-1.08%)\"],\n [\"Broadcom Inc\", \"AVGO\", 0.941177, 835.33, 18.52, \"(2.27%)\"],\n [\"Mastercard Inc A\", \"MA\", 0.918779, 400.65, 5.17, \"(1.31%)\"],\n [\"Chevron Corp\", \"CVX\", 0.847353, 170.55, -0.49, \"(-0.28%)\"],\n [\"Home Depot Inc\", \"HD\", 0.847289, 304.35, 2.53, \"(0.84%)\"],\n [\"Abbvie Inc\", \"BBV\", 0.754672, 152.14, -0.99, \"(-0.65%)\"],\n [\"Merck & Co. Inc.\", \"MRK\", 0.736434, 104.2, 0.26, \"(0.25%)\"],\n [\"Costco Wholesale Corp\", \"COST\", 0.697258, 569.05, 5.52, \"(0.98%)\"],\n [\"Pepsico Inc\", \"PEP\", 0.651768, 168.92, -0.65, \"(-0.38%)\"],\n [\"Walmart Inc\", \"WMT\", 0.644449, 161.87, 0.15, \"(0.09%)\"],\n [\"Adobe Inc\", \"ADBE\", 0.639652, 507.17, 4.57, \"(0.91%)\"],\n [\"Coca Cola Co\", \"KO\", 0.60801, 55.82, -0.13, \"(-0.23%)\"],\n [\"Cisco Systems Inc\", \"CSCO\", 0.605326, 53.97, 0.77, \"(1.44%)\"],\n [\"Accenture Plc Cl A\", \"ACN\", 0.55372, 298.5, -15.9, \"(-5.05%)\"],\n [\"Salesforce Inc\", \"CRM\", 0.551342, 204.46, 1.73, \"(0.85%)\"],\n [\"Thermo Fisher Scientific Inc\", \"TMO\", 0.536951, 503.47, 5.18, \"(1.04%)\"],\n [\"Mcdonald S Corp\", \"MCD\", 0.536457, 265.83, 2.19, \"(0.83%)\"],\n [\"Bank of America Corp\", \"BAC\", 0.526405, 27.51, 0.24, \"(0.86%)\"],\n [\"Comcast Corp Class A\", \"CMCSA\", 0.512537, 45.17, 0.57, \"(1.27%)\"],\n [\"Linde Plc\", \"LIN\", 0.506835, 375.48, 3.47, \"(0.93%)\"],\n [\"Pfizer Inc\", \"PFE\", 0.506043, 32.09, -0.02, \"(-0.05%)\"],\n [\"Netflix Inc\", \"NFLX\", 0.467192, 377.77, 0.18, \"(0.05%)\"],\n [\"Abbott Laboratories\", \"ABT\", 0.462893, 97.52, 1.99, \"(2.08%)\"],\n [\"Oracle Corp\", \"ORCL\", 0.459877, 106.29, 1.67, \"(1.60%)\"],\n];\n\n/*\n41,Danaher Corp,DHR,0.454026,248.24,0.80,(0.32%)\n42,Advanced Micro Devices,AMD,0.442473,103.74,5.67,(5.78%)\n43,Wells Fargo & Co,WFC,0.417428,41.04,0.18,(0.43%)\n44,Conocophillips,COP,0.411569,123.32,0.23,(0.18%)\n45,Walt Disney Co,DIS,0.408438,80.35,0.45,(0.56%)\n46,Intel Corp,INTC,0.404462,35.50,0.89,(2.56%)\n47,Amgen Inc,AMGN,0.401904,270.91,1.93,(0.72%)\n48,Texas Instruments Inc,TXN,0.400931,160.98,2.84,(1.80%)\n49,Intuit Inc,INTU,0.397406,515.11,6.87,(1.35%)\n50,Philip Morris International,PM,0.39143,92.66,2.34,(2.59%)\n51,Caterpillar Inc,CAT,0.388444,276.34,3.63,(1.33%)\n52,Verizon Communications Inc,VZ,0.380327,32.56,0.16,(0.48%)\n53,Intl Business Machines Corp,IBM,0.364246,140.89,-2.28,(-1.59%)\n54,Honeywell International Inc,HON,0.348317,188.68,0.80,(0.43%)\n55,Union Pacific Corp,UNP,0.344419,203.88,1.48,(0.73%)\n56,Qualcomm Inc,QCOM,0.340195,111.55,2.36,(2.16%)\n57,Nextera Energy Inc,NEE,0.338809,57.64,-2.32,(-3.88%)\n58,Lowe S Cos Inc,LOW,0.338613,209.52,2.56,(1.24%)\n59,Bristol Myers Squibb Co,BMY,0.337683,58.30,0.41,(0.70%)\n60,General Electric Co,GE,0.336989,112.43,1.54,(1.39%)\n61,S&p Global Inc,SPGI,0.32985,369.21,6.15,(1.69%)\n62,Applied Materials Inc,AMAT,0.316678,139.15,4.09,(3.03%)\n63,Servicenow Inc,NOW,0.3112,552.84,6.46,(1.18%)\n64,Boeing Co,BA,0.309673,193.12,-2.34,(-1.20%)\n65,United Parcel Service Cl B,UPS,0.307795,154.29,1.88,(1.23%)\n66,Booking Holdings Inc,BKNG,0.307126,3,086.26,3.60,(0.12%)\n67,Nike Inc Cl B,NKE,0.305871,89.63,0.21,(0.24%)\n68,At&t Inc,T,0.296603,14.94,0.07,(0.44%)\n69,Goldman Sachs Group Inc,GS,0.296356,325.72,3.77,(1.17%)\n70,Rtx Corp,RTX,0.296189,72.54,-0.34,(-0.46%)\n71,Elevance Health Inc,ELV,0.292632,448.99,4.23,(0.95%)\n72,Deere & Co,DE,0.291602,388.36,4.00,(1.04%)\n73,Starbucks Corp,SBUX,0.291579,91.21,0.04,(0.04%)\n74,Morgan Stanley,MS,0.29087,82.34,0.69,(0.84%)\n75,Medtronic Plc,MDT,0.290688,78.77,0.55,(0.71%)\n76,Prologis Inc,PLD,0.286912,112.30,1.05,(0.94%)\n77,Intuitive Surgical Inc,ISRG,0.285764,296.31,4.88,(1.67%)\n78,Tjx Companies Inc,TJX,0.282733,89.27,1.16,(1.32%)\n79,Automatic Data Processing,ADP,0.279113,243.79,1.16,(0.48%)\n80,Marsh & Mclennan Cos,MMC,0.266169,193.53,0.55,(0.29%)\n81,Mondelez International Inc A,MDLZ,0.26425,69.44,-0.56,(-0.79%)\n82,Gilead Sciences Inc,GILD,0.26285,75.96,0.41,(0.54%)\n83,Lockheed Martin Corp,LMT,0.255775,410.40,1.68,(0.41%)\n84,Blackrock Inc,BLK,0.252096,645.37,1.98,(0.31%)\n85,Vertex Pharmaceuticals Inc,VRTX,0.251521,353.91,4.26,(1.22%)\n86,Stryker Corp,SYK,0.250789,273.07,6.53,(2.45%)\n87,Cvs Health Corp,CVS,0.250255,70.11,0.33,(0.47%)\n88,Regeneron Pharmaceuticals,REGN,0.2481,835.67,3.11,(0.37%)\n89,American Express Co,AXP,0.243515,150.42,0.52,(0.34%)\n90,Chubb Ltd,CB,0.242706,212.92,1.29,(0.61%)\n91,Analog Devices Inc,ADI,0.241943,177.01,4.20,(2.43%)\n92,Schlumberger Ltd,SLB,0.241232,61.02,0.22,(0.36%)\n93,Eaton Corp Plc,ETN,0.238556,216.42,2.06,(0.96%)\n94,The Cigna Group,CI,0.238517,291.43,2.82,(0.98%)\n95,Progressive Corp,PGR,0.229854,140.76,0.14,(0.10%)\n96,Lam Research Corp,LRCX,0.228483,627.46,13.54,(2.20%)\n97,Schwab (Charles) Corp,SCHW,0.225784,54.57,0.19,(0.35%)\n98,Zoetis Inc,ZTS,0.224522,174.68,-0.00,(-0.00%)\n99,Citigroup Inc,C,0.217552,41.24,0.78,(1.92%)\n100,Boston Scientific Corp,BSX,0.213003,53.30,1.20,(2.31%)\n101,Blackstone Inc,BX,0.211158,108.88,2.33,(2.19%)\n102,Eog Resources Inc,EOG,0.21104,130.56,0.75,(0.57%)\n103,Becton Dickinson and Co,BDX,0.209627,262.60,3.80,(1.47%)\n104,Micron Technology Inc,MU,0.208276,66.25,-1.96,(-2.87%)\n105,American Tower Corp,AMT,0.207727,160.73,1.04,(0.65%)\n106,Altria Group Inc,MO,0.207666,42.11,0.20,(0.47%)\n107,T Mobile Us Inc,TMUS,0.20192,140.30,0.60,(0.43%)\n108,Cme Group Inc,CME,0.201368,200.22,-0.14,(-0.07%)\n109,Southern Co,SO,0.20116,65.04,-1.10,(-1.67%)\n110,Palo Alto Networks Inc,PANW,0.198047,236.42,4.52,(1.95%)\n111,Duke Energy Corp,DUK,0.193827,88.87,-1.23,(-1.36%)\n112,Fiserv Inc,FI,0.192662,113.67,0.48,(0.42%)\n113,Synopsys Inc,SNPS,0.189768,458.88,12.17,(2.72%)\n114,Activision Blizzard Inc,ATVI,0.18717,93.71,-0.22,(-0.23%)\n115,Aon Plc Class A,AON,0.186896,330.04,0.12,(0.04%)\n116,Equinix Inc,EQIX,0.184757,715.84,8.74,(1.24%)\n117,Illinois Tool Works,ITW,0.177501,233.17,0.77,(0.33%)\n118,Air Products & Chemicals Inc,APD,0.17678,289.15,3.89,(1.36%)\n119,Paypal Holdings Inc,PYPL,0.175802,58.30,0.96,(1.67%)\n120,Cadence Design Sys Inc,CDNS,0.175052,235.09,4.44,(1.93%)\n121,Northrop Grumman Corp,NOC,0.173654,441.30,4.06,(0.93%)\n122,Intercontinental Exchange In,ICE,0.172998,109.93,1.66,(1.53%)\n123,Humana Inc,HUM,0.170476,495.73,2.16,(0.44%)\n124,Marathon Petroleum Corp,MPC,0.170186,155.28,2.85,(1.87%)\n125,Kla Corp,KLAC,0.170079,459.61,14.05,(3.15%)\n126,Fedex Corp,FDX,0.169747,266.99,4.28,(1.63%)\n127,Csx Corp,CSX,0.169632,30.62,0.34,(1.14%)\n128,Mckesson Corp,MCK,0.167376,445.58,1.20,(0.27%)\n129,Sherwin Williams Co,SHW,0.165389,254.95,4.33,(1.73%)\n130,Colgate Palmolive Co,CL,0.164,71.11,0.06,(0.08%)\n131,Airbnb Inc Class A,ABNB,0.159553,137.66,3.63,(2.70%)\n132,Waste Management Inc,WM,0.15893,154.17,-0.25,(-0.16%)\n133,Emerson Electric Co,EMR,0.154857,97.31,0.45,(0.47%)\n134,O Reilly Automotive Inc,ORLY,0.154194,918.15,3.98,(0.44%)\n135,Pioneer Natural Resources Co,PXD,0.1524,234.43,0.34,(0.14%)\n136,Phillips 66,PSX,0.150197,122.81,2.01,(1.66%)\n137,Freeport Mcmoran Inc,FCX,0.146185,37.34,0.79,(2.17%)\n138,3m Co W/d,MMM,0.144312,93.48,0.02,(0.02%)\n139,Roper Technologies Inc,ROP,0.144165,486.61,-0.02,(-0.00%)\n140,Valero Energy Corp,VLO,0.141937,147.59,3.64,(2.53%)\n141,Nxp Semiconductors Nv,NXPI,0.141583,202.19,5.49,(2.79%)\n142,Target Corp,TGT,0.141106,109.31,-0.44,(-0.40%)\n143,Parker Hannifin Corp,PH,0.140358,396.29,5.18,(1.32%)\n144,Us Bancorp,USB,0.139291,32.59,0.07,(0.20%)\n145,General Dynamics Corp,GD,0.139193,223.44,2.44,(1.10%)\n146,Chipotle Mexican Grill Inc,CMG,0.139055,1,828.59,22.51,(1.25%)\n147,Hca Healthcare Inc,HCA,0.138966,251.59,4.33,(1.75%)\n148,Arthur J Gallagher & Co,AJG,0.138231,231.77,1.44,(0.62%)\n149,Moody S Corp,MCO,0.138162,319.07,4.56,(1.45%)\n150,Amphenol Corp Cl A,APH,0.136941,84.40,2.04,(2.47%)\n151,Ford Motor Co,F,0.1362,12.58,0.19,(1.49%)\n152,Marriott International Cl A,MAR,0.135619,199.53,5.65,(2.92%)\n153,Pnc Financial Services Group,PNC,0.135457,123.09,1.28,(1.05%)\n154,Transdigm Group Inc,TDG,0.131273,860.46,8.64,(1.01%)\n155,Carrier Global Corp,CARR,0.129065,56.83,1.75,(3.17%)\n156,Autozone Inc,AZO,0.128857,2,556.17,15.27,(0.60%)\n157,Trane Technologies Plc,TT,0.12759,207.07,7.01,(3.50%)\n158,Motorola Solutions Inc,MSI,0.127284,275.18,2.20,(0.81%)\n159,Arista Networks Inc,ANET,0.12715,184.23,2.63,(1.45%)\n160,Norfolk Southern Corp,NSC,0.124378,197.30,1.08,(0.55%)\n161,General Motors Co,GM,0.124282,33.25,0.90,(2.77%)\n162,Paccar Inc,PCAR,0.123613,86.12,1.31,(1.54%)\n163,Charter Communications Inc A,CHTR,0.123199,442.28,8.86,(2.04%)\n164,Hess Corp,HES,0.121942,157.30,-0.74,(-0.47%)\n165,Sempra,SRE,0.121909,68.15,-1.26,(-1.81%)\n166,Occidental Petroleum Corp,OXY,0.121531,66.03,0.43,(0.66%)\n167,American International Group,AIG,0.121272,61.73,0.72,(1.18%)\n168,Autodesk Inc,ADSK,0.120711,208.03,5.75,(2.84%)\n169,Edwards Lifesciences Corp,EW,0.119074,69.68,-0.43,(-0.62%)\n170,Ecolab Inc,ECL,0.118911,169.50,1.63,(0.97%)\n171,Public Storage,PSA,0.117206,266.58,1.60,(0.60%)\n172,Microchip Technology Inc,MCHP,0.116275,78.91,2.41,(3.15%)\n173,Aflac Inc,AFL,0.11627,77.65,0.62,(0.81%)\n174,Cintas Corp,CTAS,0.116227,486.83,5.75,(1.19%)\n175,Welltower Inc,WELL,0.116157,81.07,0.87,(1.08%)\n176,Williams Cos Inc,WMB,0.115685,34.65,0.55,(1.61%)\n177,Kimberly Clark Corp,KMB,0.114902,121.11,-0.55,(-0.45%)\n178,Archer Daniels Midland Co,ADM,0.114307,76.74,0.38,(0.50%)\n179,Msci Inc,MSCI,0.113047,518.97,7.03,(1.37%)\n180,Constellation Brands Inc A,STZ,0.112869,251.62,1.03,(0.41%)\n181,On Semiconductor,ON,0.111009,95.12,3.07,(3.33%)\n182,Metlife Inc,MET,0.110772,63.06,0.26,(0.41%)\n183,Monster Beverage Corp,MNST,0.110311,53.31,0.19,(0.35%)\n184,Hilton Worldwide Holdings In,HLT,0.109054,153.24,3.88,(2.60%)\n185,American Electric Power,AEP,0.108899,74.71,-1.15,(-1.51%)\n186,Crown Castle Inc,CCI,0.108512,91.35,1.65,(1.83%)\n187,Exelon Corp,EXC,0.107894,38.11,-0.69,(-1.78%)\n188,Nucor Corp,NUE,0.107787,158.31,2.60,(1.67%)\n189,Travelers Cos Inc,TRV,0.107342,167.42,-0.51,(-0.30%)\n190,Dominion Energy Inc,D,0.106001,44.61,-0.86,(-1.88%)\n191,Te Connectivity Ltd,TEL,0.105581,123.84,3.40,(2.82%)\n192,Halliburton Co,HAL,0.105449,42.18,0.15,(0.37%)\n193,Centene Corp,CNC,0.105443,69.87,0.13,(0.18%)\n194,Fortinet Inc,FTNT,0.105315,59.07,0.93,(1.59%)\n195,Oneok Inc,OKE,0.104854,64.86,0.35,(0.53%)\n196,General Mills Inc,GIS,0.104655,63.79,-0.26,(-0.40%)\n197,Copart Inc,CPRT,0.104453,43.66,0.61,(1.41%)\n198,Paychex Inc,PAYX,0.104412,117.40,0.89,(0.76%)\n199,Biogen Inc,BIIB,0.103916,258.95,1.43,(0.55%)\n200,Truist Financial Corp,TFC,0.103679,28.15,0.18,(0.63%)\n201,Ross Stores Inc,ROST,0.10361,111.18,2.26,(2.07%)\n202,Johnson Controls Internation,JCI,0.103601,53.69,-0.85,(-1.55%)\n203,Iqvia Holdings Inc,IQV,0.103397,200.11,-2.10,(-1.04%)\n204,Capital One Financial Corp,COF,0.101688,96.63,1.14,(1.20%)\n205,Baker Hughes Co,BKR,0.101425,36.62,0.37,(1.02%)\n206,Idexx Laboratories Inc,IDXX,0.101263,439.37,2.51,(0.57%)\n207,Corteva Inc,CTVA,0.100577,50.77,0.02,(0.05%)\n208,Dow Inc,DOW,0.100258,50.87,-0.13,(-0.26%)\n209,Old Dominion Freight Line,ODFL,0.100037,406.82,6.93,(1.73%)\n210,Constellation Energy,CEG,0.099445,109.94,-0.81,(-0.73%)\n211,Dexcom Inc,DXCM,0.099384,95.68,3.59,(3.90%)\n212,Simon Property Group Inc,SPG,0.098977,108.45,0.26,(0.24%)\n213,Digital Realty Trust Inc,DLR,0.098757,117.60,0.76,(0.65%)\n214,Realty Income Corp,O,0.098278,49.83,0.17,(0.33%)\n215,Kenvue Inc W/i,KVUE,0.097359,20.20,-0.02,(-0.12%)\n216,Verisk Analytics Inc,VRSK,0.097203,241.97,2.34,(0.98%)\n217,Cognizant Tech Solutions A,CTSH,0.096172,68.15,-0.05,(-0.07%)\n218,P G & E Corp,PCG,0.095995,16.36,-0.09,(-0.52%)\n219,Prudential Financial Inc,PRU,0.095804,94.93,0.41,(0.43%)\n220,Ametek Inc,AME,0.09567,150.03,1.17,(0.79%)\n221,Yum Brands Inc,YUM,0.095443,123.55,1.57,(1.29%)\n222,Dupont De Nemours Inc,DD,0.094185,74.58,1.11,(1.51%)\n223,Ameriprise Financial Inc,AMP,0.093691,332.11,5.16,(1.58%)\n224,L3harris Technologies Inc,LHX,0.092512,173.16,-2.04,(-1.16%)\n225,Fidelity National Info Serv,FIS,0.09207,56.06,0.52,(0.94%)\n226,Sysco Corp,SYY,0.091968,65.99,0.78,(1.20%)\n227,Moderna Inc,MRNA,0.091789,100.61,1.17,(1.18%)\n228,Bank of New York Mellon Corp,BK,0.091699,42.76,0.59,(1.39%)\n229,Agilent Technologies Inc,A,0.091382,111.91,1.41,(1.28%)\n230,Otis Worldwide Corp,OTIS,0.091228,80.55,1.20,(1.51%)\n231,Rockwell Automation Inc,ROK,0.091103,288.26,3.46,(1.21%)\n232,Dr Horton Inc,DHI,0.090974,108.96,1.95,(1.82%)\n233,Cummins Inc,CMI,0.090916,232.98,3.03,(1.32%)\n234,Estee Lauder Companies Cl A,EL,0.090788,139.94,-0.10,(-0.07%)\n235,Kinder Morgan Inc,KMI,0.090175,16.71,0.05,(0.27%)\n236,Keurig Dr Pepper Inc,KDP,0.088358,31.51,-0.16,(-0.51%)\n237,Fastenal Co,FAST,0.087952,55.72,0.66,(1.21%)\n238,Xcel Energy Inc,XEL,0.087474,56.50,-0.71,(-1.25%)\n239,Devon Energy Corp,DVN,0.087359,48.84,0.00,(0.01%)\n240,Ww Grainger Inc,GWW,0.086956,704.07,3.96,(0.57%)\n241,Costar Group Inc,CSGP,0.086756,77.10,0.75,(0.99%)\n242,Cencora Inc,COR,0.086188,183.99,-1.17,(-0.63%)\n243,United Rentals Inc,URI,0.085093,454.44,8.22,(1.84%)\n244,Hershey Co,HSY,0.084755,201.01,-1.55,(-0.76%)\n245,Arch Capital Group Ltd,ACGL,0.083799,81.62,0.54,(0.67%)\n246,Ppg Industries Inc,PPG,0.083787,130.49,2.46,(1.92%)\n247,Global Payments Inc,GPN,0.083671,116.72,1.47,(1.28%)\n248,Consolidated Edison Inc,ED,0.083432,85.06,-1.57,(-1.81%)\n249,Newmont Corp,NEM,0.082799,36.78,-0.50,(-1.34%)\n250,Republic Services Inc,RSG,0.082765,145.01,0.28,(0.19%)\n251,Allstate Corp,ALL,0.08254,112.77,-0.25,(-0.22%)\n252,Electronic Arts Inc,EA,0.081213,119.76,1.79,(1.51%)\n253,Vici Properties Inc,VICI,0.081127,29.28,0.40,(1.37%)\n254,Kroger Co,KR,0.080998,44.96,0.48,(1.07%)\n255,Public Service Enterprise Gp,PEG,0.080723,56.88,-1.02,(-1.75%)\n256,Lennar Corp A,LEN,0.078759,113.41,1.71,(1.53%)\n257,Diamondback Energy Inc,FANG,0.078498,158.01,0.78,(0.50%)\n258,West Pharmaceutical Services,WST,0.077362,377.15,1.97,(0.52%)\n259,Quanta Services Inc,PWR,0.077074,190.82,0.70,(0.37%)\n260,Gartner Inc,IT,0.076911,347.78,-1.41,(-0.40%)\n261,Aptiv Plc,APTV,0.0757,99.21,3.35,(3.50%)\n262,Vulcan Materials Co,VMC,0.075604,207.60,4.00,(1.97%)\n263,Kraft Heinz Co,KHC,0.075468,33.72,-0.31,(-0.90%)\n264,Ge Healthcare Technology,GEHC,0.074734,69.81,1.53,(2.24%)\n265,Cdw Corp/de,CDW,0.074375,202.53,3.84,(1.93%)\n266,Fortive Corp,FTV,0.072323,74.75,1.16,(1.58%)\n267,Ingersoll Rand Inc,IR,0.071683,64.52,1.25,(1.97%)\n268,Ansys Inc,ANSS,0.071343,299.19,4.85,(1.65%)\n269,Extra Space Storage Inc,EXR,0.071269,120.75,0.24,(0.20%)\n270,Wec Energy Group Inc,WEC,0.071007,79.67,-0.91,(-1.12%)\n271,Martin Marietta Materials,MLM,0.070759,418.00,8.05,(1.96%)\n272,Edison International,EIX,0.068887,63.92,-1.38,(-2.11%)\n273,American Water Works Co Inc,AWK,0.068233,123.27,-3.07,(-2.43%)\n274,Warner Bros Discovery Inc,WBD,0.068207,10.89,-0.15,(-1.31%)\n275,Lyondellbasell Indu Cl A,LYB,0.067294,94.86,-0.11,(-0.11%)\n276,Mettler Toledo International,MTD,0.067028,1,112.26,14.48,(1.32%)\n277,Avalonbay Communities Inc,AVB,0.066762,171.85,-0.60,(-0.35%)\n278,Delta Air Lines Inc,DAL,0.065781,37.32,0.66,(1.79%)\n279,T Rowe Price Group Inc,TROW,0.064996,104.73,1.19,(1.15%)\n280,Keysight Technologies In,KEYS,0.064934,133.51,3.11,(2.38%)\n281,Zimmer Biomet Holdings Inc,ZBH,0.064476,112.14,1.38,(1.24%)\n282,Dollar General Corp,DG,0.064042,105.04,0.70,(0.67%)\n283,Corning Inc,GLW,0.064037,30.35,0.29,(0.98%)\n284,Ebay Inc,EBAY,0.063728,43.45,0.56,(1.31%)\n285,Cbre Group Inc A,CBRE,0.063578,73.84,0.35,(0.48%)\n286,Weyerhaeuser Co,WY,0.063312,30.40,-0.64,(-2.05%)\n287,Church & Dwight Co Inc,CHD,0.062765,91.68,-0.29,(-0.31%)\n288,Cardinal Health Inc,CAH,0.062583,88.18,0.14,(0.16%)\n289,Hp Inc,HPQ,0.062013,25.73,0.09,(0.36%)\n290,Equifax Inc,EFX,0.061821,185.40,4.68,(2.59%)\n291,Tractor Supply Company,TSCO,0.061683,205.07,2.06,(1.02%)\n292,Willis Towers Watson Plc,WTW,0.06168,211.96,0.35,(0.17%)\n293,Hewlett Packard Enterprise,HPE,0.061499,17.70,0.63,(3.66%)\n294,Fair Isaac Corp,FICO,0.061481,890.19,4.58,(0.52%)\n295,Dollar Tree Inc,DLTR,0.061287,106.46,1.11,(1.05%)\n296,Hartford Financial Svcs Grp,HIG,0.061236,72.24,0.53,(0.73%)\n297,Resmed Inc,RMD,0.060853,149.81,1.16,(0.78%)\n298,Take Two Interactive Softwre,TTWO,0.060753,139.63,1.85,(1.34%)\n299,Royal Caribbean Cruises Ltd,RCL,0.060515,94.38,2.42,(2.64%)\n300,Xylem Inc,XYL,0.060192,91.40,1.09,(1.20%)\n301,Align Technology Inc,ALGN,0.060095,309.06,7.38,(2.45%)\n302,Steris Plc,STE,0.060013,221.57,3.67,(1.69%)\n303,Broadridge Financial Solutio,BR,0.059572,181.18,-0.04,(-0.02%)\n304,Discover Financial Services,DFS,0.059507,86.35,1.09,(1.28%)\n305,State Street Corp,STT,0.059411,67.81,1.03,(1.54%)\n306,Sba Communications Corp,SBAC,0.059216,198.11,2.05,(1.05%)\n307,Monolithic Power Systems Inc,MPWR,0.058699,457.69,16.51,(3.74%)\n308,Illumina Inc,ILMN,0.058584,133.02,-0.28,(-0.21%)\n309,Dte Energy Company,DTE,0.058057,98.82,-1.72,(-1.71%)\n310,M & T Bank Corp,MTB,0.057846,126.63,2.09,(1.68%)\n311,Coterra Energy Inc,CTRA,0.057589,27.48,0.34,(1.23%)\n312,Eversource Energy,ES,0.057281,57.54,-1.23,(-2.09%)\n313,Genuine Parts Co,GPC,0.055796,142.94,0.63,(0.45%)\n314,Equity Residential,EQR,0.055712,58.67,0.23,(0.40%)\n315,Entergy Corp,ETR,0.055241,92.23,-1.02,(-1.10%)\n316,Dover Corp,DOV,0.055103,141.68,1.09,(0.77%)\n317,Ameren Corporation,AEE,0.054981,74.60,-1.51,(-1.98%)\n318,Ulta Beauty Inc,ULTA,0.054585,398.17,5.73,(1.46%)\n319,Teledyne Technologies Inc,TDY,0.054228,414.36,0.92,(0.22%)\n320,Nvr Inc,NVR,0.054188,6,027.42,86.42,(1.45%)\n321,Targa Resources Corp,TRGP,0.05408,87.52,0.93,(1.08%)\n322,Molina Healthcare Inc,MOH,0.053618,333.09,2.03,(0.61%)\n323,Wabtec Corp,WAB,0.053425,108.18,1.35,(1.26%)\n324,Fleetcor Technologies Inc,FLT,0.053345,260.14,1.28,(0.49%)\n325,Albemarle Corp,ALB,0.053229,172.99,10.36,(6.37%)\n326,Baxter International Inc,BAX,0.05272,37.54,0.21,(0.57%)\n327,Raymond James Financial Inc,RJF,0.052247,101.39,1.84,(1.85%)\n328,Mccormick & Co Non Vtg Shrs,MKC,0.051871,74.55,0.46,(0.63%)\n329,Invitation Homes Inc,INVH,0.051153,31.73,0.03,(0.11%)\n330,Firstenergy Corp,FE,0.050777,34.56,-0.69,(-1.94%)\n331,Laboratory Crp of Amer Hldgs,LH,0.05072,204.23,-0.62,(-0.30%)\n332,Howmet Aerospace Inc,HWM,0.050386,46.99,0.91,(1.97%)\n333,Verisign Inc,VRSN,0.050215,202.93,2.46,(1.23%)\n334,Ppl Corp,PPL,0.04902,23.56,-0.39,(-1.61%)\n335,Iron Mountain Inc,IRM,0.047985,59.55,0.56,(0.94%)\n336,Jacobs Solutions Inc,J,0.047882,136.45,0.27,(0.20%)\n337,Intl Flavors & Fragrances,IFF,0.047868,67.84,0.64,(0.95%)\n338,Centerpoint Energy Inc,CNP,0.047827,26.68,-0.48,(-1.75%)\n339,Darden Restaurants Inc,DRI,0.047736,143.44,2.01,(1.42%)\n340,Hologic Inc,HOLX,0.047358,69.99,0.75,(1.08%)\n341,First Solar Inc,FSLR,0.047324,161.90,3.29,(2.07%)\n342,Expeditors Intl Wash Inc,EXPD,0.046936,114.74,1.08,(0.95%)\n343,Brown & Brown Inc,BRO,0.046675,71.15,0.19,(0.26%)\n344,Factset Research Systems Inc,FDS,0.046601,443.66,8.47,(1.95%)\n345,Fifth Third Bancorp,FITB,0.046598,25.05,0.19,(0.74%)\n346,Ventas Inc,VTR,0.046351,42.18,0.77,(1.85%)\n347,Marathon Oil Corp,MRO,0.046321,27.51,0.12,(0.45%)\n348,Steel Dynamics Inc,STLD,0.046096,106.96,0.52,(0.48%)\n349,Bunge Ltd,BG,0.046038,110.67,1.10,(1.00%)\n350,Ptc Inc,PTC,0.045951,140.25,1.78,(1.28%)\n351,Everest Group Ltd,EG,0.04587,381.30,-0.42,(-0.11%)\n352,Cincinnati Financial Corp,CINF,0.045852,104.40,-0.30,(-0.29%)\n353,Enphase Energy Inc,ENPH,0.045679,121.39,1.28,(1.07%)\n354,Nasdaq Inc,NDAQ,0.04562,49.07,0.74,(1.52%)\n355,Akamai Technologies Inc,AKAM,0.045578,107.75,0.79,(0.74%)\n356,Cboe Global Markets Inc,CBOE,0.045525,155.28,0.51,(0.33%)\n357,Cf Industries Holdings Inc,CF,0.04496,84.93,1.48,(1.78%)\n358,Waters Corp,WAT,0.044936,274.46,2.12,(0.78%)\n359,Pultegroup Inc,PHM,0.044848,74.85,1.65,(2.25%)\n360,Tyler Technologies Inc,TYL,0.044831,387.74,2.43,(0.63%)\n361,Principal Financial Group,PFG,0.044705,72.74,0.74,(1.02%)\n362,Clorox Company,CLX,0.04465,128.98,-0.17,(-0.13%)\n363,Southwest Airlines Co,LUV,0.044478,27.30,0.49,(1.81%)\n364,Regions Financial Corp,RF,0.044397,17.16,0.22,(1.27%)\n365,Garmin Ltd,GRMN,0.044336,104.65,1.42,(1.38%)\n366,Atmos Energy Corp,ATO,0.044128,106.32,-0.14,(-0.13%)\n367,Netapp Inc,NTAP,0.044116,76.49,1.54,(2.05%)\n368,Textron Inc,TXT,0.043659,79.27,0.33,(0.41%)\n369,Cooper Cos Inc,COO,0.04361,318.15,2.23,(0.71%)\n370,Kellogg Co,K,0.043517,58.90,-0.22,(-0.38%)\n371,Idex Corp,IEX,0.043484,210.72,3.28,(1.58%)\n372,Cms Energy Corp,CMS,0.043476,52.78,-0.57,(-1.07%)\n373,Skyworks Solutions Inc,SWKS,0.042974,98.55,2.25,(2.33%)\n374,Alexandria Real Estate Equit,ARE,0.042466,99.48,0.59,(0.60%)\n375,Hunt (Jb) Transprt Svcs Inc,JBHT,0.042319,186.54,0.95,(0.51%)\n376,Las Vegas Sands Corp,LVS,0.042222,45.63,-0.53,(-1.15%)\n377,Ball Corp,BALL,0.042202,48.27,0.04,(0.08%)\n378,Walgreens Boots Alliance Inc,WBA,0.04215,20.97,-0.06,(-0.26%)\n379,Teradyne Inc,TER,0.041494,100.04,3.56,(3.68%)\n380,Mid America Apartment Comm,MAA,0.041385,128.55,0.48,(0.37%)\n381,Epam Systems Inc,EPAM,0.041006,257.76,0.96,(0.37%)\n382,Avery Dennison Corp,AVY,0.040961,183.42,1.39,(0.76%)\n383,Omnicom Group,OMC,0.040483,74.60,1.21,(1.65%)\n384,Huntington Bancshares Inc,HBAN,0.040444,10.25,0.13,(1.24%)\n385,Eqt Corp,EQT,0.040251,40.00,0.39,(0.99%)\n386,Tyson Foods Inc Cl A,TSN,0.040042,49.74,-0.37,(-0.74%)\n387,Western Digital Corp,WDC,0.039814,45.50,0.94,(2.11%)\n388,Northern Trust Corp,NTRS,0.039557,69.29,0.84,(1.23%)\n389,Carnival Corp,CCL,0.039206,14.52,0.54,(3.88%)\n390,Expedia Group Inc,EXPE,0.038585,102.75,2.50,(2.49%)\n391,United Airlines Holdings Inc,UAL,0.038383,42.84,0.81,(1.94%)\n392,Quest Diagnostics Inc,DGX,0.038331,123.71,0.31,(0.25%)\n393,Axon Enterprise Inc,AXON,0.03828,195.69,1.04,(0.53%)\n394,Packaging Corp of America,PKG,0.038236,152.79,0.90,(0.59%)\n395,Revvity Inc,RVTY,0.0378,110.55,1.50,(1.38%)\n396,Snap on Inc,SNA,0.037774,257.97,4.00,(1.58%)\n397,Pool Corp,POOL,0.037475,353.56,9.86,(2.87%)\n398,Essex Property Trust Inc,ESS,0.03733,210.81,0.07,(0.03%)\n399,Domino S Pizza Inc,DPZ,0.037258,382.39,2.18,(0.57%)\n400,Amcor Plc,AMCR,0.037101,9.09,0.06,(0.61%)\n401,Best Buy Co Inc,BBY,0.037071,68.66,0.29,(0.43%)\n402,Apa Corp,APA,0.03662,42.49,0.11,(0.27%)\n403,Lamb Weston Holdings Inc,LW,0.036553,91.47,0.09,(0.10%)\n404,Wr Berkley Corp,WRB,0.036551,65.21,0.86,(1.33%)\n405,Conagra Brands Inc,CAG,0.036484,27.44,-0.10,(-0.35%)\n406,Lkq Corp,LKQ,0.036449,49.51,0.72,(1.47%)\n407,Jm Smucker Co,SJM,0.035767,124.48,-0.96,(-0.77%)\n408,Stanley Black & Decker Inc,SWK,0.035567,83.87,0.97,(1.17%)\n409,Synchrony Financial,SYF,0.035241,30.73,0.55,(1.84%)\n410,Carmax Inc,KMX,0.035202,71.64,-8.05,(-10.10%)\n411,Leidos Holdings Inc,LDOS,0.034943,92.20,0.21,(0.23%)\n412,Seagate Technology Holdings,STX,0.034918,65.71,1.42,(2.20%)\n413,Paycom Software Inc,PAYC,0.034914,259.42,2.34,(0.91%)\n414,Celanese Corp,CE,0.034212,127.11,3.81,(3.09%)\n415,Trimble Inc,TRMB,0.034136,52.22,3.01,(6.12%)\n416,Alliant Energy Corp,LNT,0.03411,48.06,-0.49,(-1.02%)\n417,Citizens Financial Group,CFG,0.033972,26.28,0.52,(2.00%)\n418,International Paper Co,IP,0.033961,35.10,0.15,(0.41%)\n419,Masco Corp,MAS,0.033414,54.58,1.37,(2.58%)\n420,Nordson Corp,NDSN,0.033057,223.81,3.73,(1.69%)\n421,Loews Corp,L,0.032942,64.16,0.36,(0.56%)\n422,Evergy Inc,EVRG,0.032792,50.48,-0.58,(-1.13%)\n423,Mosaic Co,MOS,0.03266,35.63,0.43,(1.22%)\n424,Molson Coors Beverage Co B,TAP,0.032624,62.29,-0.12,(-0.19%)\n425,Zebra Technologies Corp Cl A,ZBRA,0.03257,236.95,11.04,(4.89%)\n426,Viatris Inc,VTRS,0.032115,9.80,0.21,(2.14%)\n427,Live Nation Entertainment In,LYV,0.032035,83.73,2.71,(3.34%)\n428,Host Hotels & Resorts Inc,HST,0.03173,16.38,0.34,(2.11%)\n429,Insulet Corp,PODD,0.031493,166.19,4.49,(2.77%)\n430,Match Group Inc,MTCH,0.031269,40.07,0.09,(0.23%)\n431,Interpublic Group of Cos Inc,IPG,0.031184,29.12,0.39,(1.35%)\n432,Hormel Foods Corp,HRL,0.030887,38.15,-0.19,(-0.48%)\n433,Incyte Corp,INCY,0.03067,58.93,-0.18,(-0.30%)\n434,Udr Inc,UDR,0.030252,35.67,0.28,(0.79%)\n435,Jack Henry & Associates Inc,JKHY,0.030211,150.61,2.17,(1.46%)\n436,Kimco Realty Corp,KIM,0.029862,17.73,0.24,(1.34%)\n437,Aes Corp,AES,0.029775,15.29,-0.65,(-4.05%)\n438,Bio Techne Corp,TECH,0.029742,67.67,0.10,(0.15%)\n439,Pentair Plc,PNR,0.029592,65.59,0.87,(1.34%)\n440,Rollins Inc,ROL,0.029276,37.64,0.20,(0.52%)\n441,Mgm Resorts International,MGM,0.028601,36.76,0.27,(0.74%)\n442,Ceridian Hcm Holding Inc,CDAY,0.028589,67.38,0.35,(0.52%)\n443,Brown Forman Corp Class B,BF.B,0.028542,56.78,0.14,(0.25%)\n444,Nisource Inc,NI,0.028365,24.84,-0.35,(-1.37%)\n445,Gen Digital Inc,GEN,0.028124,17.83,-0.07,(-0.37%)\n446,C.H. Robinson Worldwide Inc,CHRW,0.028048,86.31,0.02,(0.02%)\n447,Camden Property Trust,CPT,0.027984,94.56,-0.32,(-0.34%)\n448,Charles River Laboratories,CRL,0.027736,195.69,0.75,(0.38%)\n449,Healthpeak Properties Inc,PEAK,0.027617,18.15,0.10,(0.58%)\n450,Caesars Entertainment Inc,CZR,0.027217,47.52,1.54,(3.36%)\n451,Regency Centers Corp,REG,0.027131,59.98,0.85,(1.43%)\n452,Keycorp,KEY,0.0269,10.52,0.22,(2.09%)\n453,Henry Schein Inc,HSIC,0.026715,73.88,0.62,(0.84%)\n454,Globe Life Inc,GL,0.026574,110.04,0.61,(0.56%)\n455,Borgwarner Inc,BWA,0.026416,40.72,0.92,(2.31%)\n456,F5 Inc,FFIV,0.026087,160.33,2.74,(1.74%)\n457,Qorvo Inc,QRVO,0.025849,96.39,1.83,(1.93%)\n458,Teleflex Inc,TFX,0.025796,199.42,2.91,(1.48%)\n459,Allegion Plc,ALLE,0.025545,104.97,1.68,(1.63%)\n460,Westrock Co,WRK,0.025292,35.98,0.23,(0.64%)\n461,Eastman Chemical Co,EMN,0.025003,76.99,2.35,(3.15%)\n462,Wynn Resorts Ltd,WYNN,0.024938,92.21,-0.00,(-0.00%)\n463,Nrg Energy Inc,NRG,0.024681,38.55,-0.03,(-0.08%)\n464,Juniper Networks Inc,JNPR,0.024655,27.92,0.42,(1.52%)\n465,Pinnacle West Capital,PNW,0.02321,73.45,-0.71,(-0.95%)\n466,Hasbro Inc,HAS,0.02308,65.23,0.24,(0.37%)\n467,Catalent Inc,CTLT,0.023069,45.85,0.07,(0.15%)\n468,American Airlines Group Inc,AAL,0.02296,13.00,0.39,(3.05%)\n469,Fmc Corp,FMC,0.022942,66.03,0.02,(0.03%)\n470,Campbell Soup Co,CPB,0.022776,41.15,-0.31,(-0.76%)\n471,Smith (a.O.) Corp,AOS,0.022769,66.99,1.54,(2.35%)\n472,Boston Properties Inc,BXP,0.02269,59.66,0.79,(1.34%)\n473,Huntington Ingalls Industrie,HII,0.022502,204.41,1.22,(0.60%)\n474,Fox Corp Class A,FOXA,0.021902,31.47,0.55,(1.76%)\n475,Robert Half Inc,RHI,0.021872,73.78,0.64,(0.87%)\n476,Assurant Inc,AIZ,0.021618,145.63,-0.13,(-0.09%)\n477,Universal Health Services B,UHS,0.021551,127.00,2.80,(2.25%)\n478,Etsy Inc,ETSY,0.021257,63.53,1.64,(2.65%)\n479,Marketaxess Holdings Inc,MKTX,0.021132,205.89,4.11,(2.04%)\n480,News Corp Class A,NWSA,0.0209,20.00,0.35,(1.76%)\n481,Bio Rad Laboratories A,BIO,0.020548,356.10,3.63,(1.03%)\n482,Bath & Body Works Inc,BBWI,0.020412,33.19,1.04,(3.23%)\n483,Dentsply Sirona Inc,XRAY,0.020079,33.94,-0.17,(-0.51%)\n484,Solaredge Technologies Inc,SEDG,0.020026,132.35,4.34,(3.39%)\n485,Whirlpool Corp,WHR,0.019812,131.66,1.03,(0.79%)\n486,Franklin Resources Inc,BEN,0.019128,24.55,0.28,(1.14%)\n487,Generac Holdings Inc,GNRC,0.018958,110.73,1.84,(1.69%)\n488,Norwegian Cruise Line Holdin,NCLH,0.018812,16.96,0.67,(4.08%)\n489,Federal Realty Invs Trust,FRT,0.018475,91.45,1.05,(1.16%)\n490,Tapestry Inc,TPR,0.01809,28.18,0.23,(0.84%)\n491,Invesco Ltd,IVZ,0.017835,14.31,0.22,(1.53%)\n492,Paramount Global Class B,PARA,0.017208,12.89,0.11,(0.89%)\n493,Vf Corp,VFC,0.015631,16.59,-0.32,(-1.89%)\n494,Comerica Inc,CMA,0.014638,41.07,1.12,(2.81%)\n495,Davita Inc,DVA,0.014395,95.75,0.01,(0.01%)\n496,Zions Bancorp Na,ZION,0.013918,33.96,0.79,(2.39%)\n497,Ralph Lauren Corp,RL,0.013127,115.52,0.26,(0.22%)\n498,Sealed Air Corp,SEE,0.012794,32.20,0.46,(1.46%)\n499,Alaska Air Group Inc,ALK,0.012574,37.04,0.63,(1.73%)\n500,Mohawk Industries Inc,MHK,0.011998,85.15,1.23,(1.46%)\n501,Organon & Co,OGN,0.011665,16.93,0.34,(2.02%)\n502,Dxc Technology Co,DXC,0.011658,20.64,0.29,(1.40%)\n503,Fox Corp Class B,FOX,0.010545,29.16,0.53,(1.85%)\n504,News Corp Class B,NWS,0.006575,20.75,0.36,(1.74%)\n*/\n","// Name,Symbol,Last,Change,Change %\",Volume,Turn.,P/E,P/B\",Yield,Market Cap\n\n// prettier-ignore\nexport default [\n [\"CKH HOLDINGS\",\"00001.HK\",41.900,+1.150,\"+2.822%\",\"5.15M\",\"215.13M\",4.38,0.31,\"6.98%\",\"160.48B\"],\n [\"CLP HOLDINGS\",\"00002.HK\",57.950,-0.100,\"-0.172%\",\"3.32M\",\"193.19M\",156.62,1.39,\"5.35%\",\"146.41B\"],\n [\"HK & CHINA GAS\",\"00003.HK\",5.460,+0.130,\"+2.439%\",\"16.16M\",\"88.00M\",19.43,1.66,\"6.41%\",\"101.88B\"],\n [\"HSBC HOLDINGS,00005.HK\",61.700,+1.100,\"+1.815%\",\"22.19M\",\"1.37B\",10.54,0.86,\"4.05%\",1,\"227.60B\"],\n [\"POWER ASSETS\",\"00006.HK\",37.900,-0.250,\"-0.655%\",\"4.23M\",\"160.75M\",14.30,0.93,\"7.44%\",\"80.77B\"],\n [\"HANG SENG BANK\",\"00011.HK\",97.450,+2.950,\"+3.122%\",\"2.54M\",\"247.44M\",19.69,1.01,\"4.21%\",\"186.31B\"],\n [\"HENDERSON LAND\",\"00012.HK\",20.650,+0.850,\"+4.293%\",\"5.07M\",\"103.70M\",10.81,0.31,\"8.72%\",\"99.97B\"],\n [\"SHK PPT\",\"00016.HK\",83.800,+3.250,\"+4.035%\",\"8.25M\",\"685.41M\",10.16,0.40,\"5.91%\",\"242.83B\"],\n [\"NEW WORLD DEV\",\"00017.HK\",15.240,+0.800,\"+5.540%\",\"12.95M\",\"196.19M\",30.48,0.18,\"13.52%\",\"38.35B\"],\n [\"GALAXY ENT\",\"00027.HK\",47.150,+1.900,\"+4.199%\",\"11.97M\",\"560.21M\",\"No Profit\",3.22,\"0.00%\",\"206.21B\"],\n [\"MTR CORPORATION\",\"00066.HK\",31.000,+0.800,\"+2.649%\",\"4.68M\",\"144.86M\",19.50,1.07,\"4.23%\",\"192.64B\"],\n [\"HANG LUNG PPT\",\"00101.HK\",10.720,+0.560,\"+5.512%\",\"7.68M\",\"81.99M\",12.61,0.36,\"7.28%\",\"48.23B\"],\n [\"GEELY AUTO\",\"00175.HK\",9.240,+0.170,\"+1.874%\",\"18.77M\",\"173.30M\",16.06,1.15,\"2.27%\",\"92.99B\"],\n [\"ALI HEALTH\",\"00241.HK\",4.880,+0.470,\"+10.658%\",\"53.62M\",\"257.82M\",108.09,3.81,\"0.00%\",\"66.04B\"],\n [\"CITIC\",\"00267.HK\",7.200,+0.200,\"+2.857%\",\"11.54M\",\"82.96M\",2.78,0.28,\"9.04%\",\"209.45B\"],\n [\"WH GROUP\",\"00288.HK\",4.110,+0.080,\"+1.985%\",\"18.94M\",\"77.65M\",4.93,0.70,\"7.30%\",\"52.73B\"],\n [\"CHINA RES BEER\",\"00291.HK\",42.950,+1.200,\"+2.874%\",\"4.83M\",\"207.98M\",28.41,4.57,\"1.41%\",\"139.34B\"],\n [\"OOIL\",\"00316.HK\",104.500,-0.400,\"-0.381%\",\"296.54K\",\"30.98M\",0.89,0.66,\"78.90%\",\"69.01B\"],\n [\"TINGYI\",\"00322.HK\",10.940,+0.180,\"+1.673%\",\"2.91M\",\"31.81M\",20.75,4.09,\"9.39%\",\"61.64B\"],\n [\"SINOPEC CORP\",\"00386.HK\",4.280,-0.010,\"-0.233%\",\"92.43M\",\"396.61M\",6.94,0.58,\"9.36%\",\"105.92B\"],\n [\"HKEX\",\"00388.HK\",292.600,+9.000,\"+3.173%\",\"4.61M\",\"1.34B\",36.76,7.46,\"2.44%\",\"370.97B\"],\n [\"TECHTRONIC IND\",\"00669.HK\",76.000,+1.350,\"+1.808%\",\"5.47M\",\"414.78M\",16.54,3.43,\"2.43%\",\"139.45B\"],\n [\"CHINA OVERSEAS\",\"00688.HK\",16.240,+0.520,\"+3.308%\",\"13.15M\",\"212.60M\",6.76,0.44,\"4.93%\",\"177.74B\"],\n [\"TENCENT\",\"00700.HK\",306.200,+8.800,\"+2.959%\",\"11.25M\",\"3.43B\",13.74,3.60,\"0.78%\",2,\"926.16B\"],\n [\"CHINA UNICOM\",\"00762.HK\",5.680,-0.050,\"-0.873%\",\"9.23M\",\"52.77M\",9.16,0.45,\"5.44%\",\"173.80B\"],\n [\"LINK REIT\",\"00823.HK\",38.400,+1.450,\"+3.924%\",\"12.04M\",\"460.96M\",5.42,0.52,\"7.03%\",\"98.38B\"],\n [\"CHINA RES POWER\",\"00836.HK\",14.940,+0.320,\"+2.189%\",\"9.91M\",\"147.81M\",10.23,0.87,\"3.92%\",\"71.87B\"],\n [\"PETROCHINA\",\"00857.HK\",5.900,0.000,\"0.000%\",\"64.23M\",\"380.44M\",6.38,0.70,\"8.08%\",\"124.48B\"],\n [\"XINYI GLASS\",\"00868.HK\",10.140,+0.170,\"+1.705%\",\"3.75M\",\"38.02M\",8.01,1.30,\"6.11%\",\"42.22B\"],\n [\"ZHONGSHENG HLDG\",\"00881.HK\",22.050,+1.450,\"+7.039%\",\"6.76M\",\"147.71M\",7.08,1.07,\"4.94%\",\"52.72B\"],\n [\"CNOOC\",\"00883.HK\",13.780,-0.020,\"-0.145%\",\"26.37M\",\"365.08M\",4.03,0.97,\"19.09%\",\"655.47B\"],\n [\"CCB\",\"00939.HK\",4.420,+0.060,\"+1.376%\",\"233.61M\",\"1.03B\",3.06,0.35,\"9.93%\",1,\"062.64B\"],\n [\"CHINA MOBILE\",\"00941.HK\",65.700,+0.250,\"+0.382%\",\"7.82M\",\"516.10M\",9.91,0.96,\"6.71%\",1,\"404.46B\"],\n [\"LONGFOR GROUP\",\"00960.HK\",14.080,+0.900,\"+6.829%\",\"10.88M\",\"150.68M\",3.06,0.55,\"9.05%\",\"92.81B\"],\n [\"XINYI SOLAR\",\"00968.HK\",5.860,+0.280,\"+5.018%\",\"15.99M\",\"92.88M\",13.64,1.75,\"3.41%\",\"52.17B\"],\n [\"SMIC\",\"00981.HK\",20.050,+0.250,\"+1.263%\",\"13.10M\",\"264.32M\",11.17,1.06,\"0.00%\",\"159.31B\"],\n [\"LENOVO GROUP\",\"00992.HK\",8.070,+0.250,\"+3.197%\",\"33.60M\",\"270.50M\",7.61,2.23,\"4.71%\",\"97.87B\"],\n [\"CKI HOLDINGS\",\"01038.HK\",37.050,-0.200,\"-0.537%\",\"1.44M\",\"53.73M\",12.03,0.78,\"6.83%\",\"93.35B\"],\n [\"HENGAN INT'L\",\"01044.HK\",24.950,+0.200,\"+0.808%\",\"2.62M\",\"64.97M\",13.35,1.32,\"6.33%\",\"28.99B\"],\n [\"CHINA SHENHUA\",\"01088.HK\",25.400,+0.350,\"+1.397%\",\"7.98M\",\"203.11M\",6.14,1.13,\"11.33%\",\"85.79B\"],\n [\"CSPC PHARMA\",\"01093.HK\",5.740,+0.050,\"+0.879%\",\"29.29M\",\"167.41M\",9.96,2.01,\"3.66%\",\"68.32B\"],\n [\"SINOPHARM\",\"01099.HK\",22.700,+0.200,\"+0.889%\",\"2.07M\",\"46.80M\",7.37,0.92,\"4.08%\",\"30.46B\"],\n [\"CHINA RES LAND\",\"01109.HK\",31.200,+1.000,\"+3.311%\",\"9.88M\",\"305.88M\",7.02,0.81,\"5.07%\",\"222.49B\"],\n [\"CK ASSET\",\"01113.HK\",41.250,+1.250,\"+3.125%\",\"8.57M\",\"352.44M\",6.90,0.39,\"5.53%\",\"146.47B\"],\n [\"SINO BIOPHARM\",\"01177.HK\",2.830,+0.020,\"+0.712%\",\"26.30M\",\"74.09M\",18.37,1.59,\"4.24%\",\"53.21B\"],\n [\"CHINA RES MIXC\",\"01209.HK\",31.600,+1.600,\"+5.333%\",\"3.07M\",\"96.42M\",28.97,4.48,\"2.87%\",\"72.13B\"],\n [\"BYD COMPANY\",\"01211.HK\",242.000,+7.000,\"+2.979%\",\"3.90M\",\"938.50M\",37.57,5.63,\"0.53%\",\"265.72B\"],\n [\"AIA\",\"01299.HK\",63.850,+0.950,\"+1.510%\",\"38.75M\",\"2.48B\",408.88,2.53,\"2.41%\",\"735.40B\"],\n [\"CHINAHONGQIAO\",\"01378.HK\",7.670,+0.280,\"+3.789%\",\"13.05M\",\"99.58M\",7.27,0.76,\"6.65%\",\"72.68B\"],\n [\"ICBC\",\"01398.HK\",3.770,+0.070,\"+1.892%\",\"233.48M\",\"881.67M\",3.45,0.36,\"9.08%\",\"327.21B\"],\n [\"XIAOMI-W\",\"01810.HK\",12.340,+0.620,\"+5.290%\",\"78.53M\",\"960.98M\",109.39,1.90,\"0.00%\",\"308.83B\"],\n [\"BUD APAC\",\"01876.HK\",15.460,+0.160,\"+1.046%\",\"16.17M\",\"250.45M\",28.65,2.44,\"1.91%\",\"204.74B\"],\n [\"SANDS CHINA LTD\",\"01928.HK\",24.000,+0.950,\"+4.121%\",\"19.98M\",\"475.93M\",\"No Profit\",\"N/A\",\"0.00%\",\"194.24B\"],\n [\"CHOW TAI FOOK\",\"01929.HK\",11.800,+0.280,\"+2.431%\",\"4.88M\",\"57.68M\",21.93,3.64,\"10.34%\",\"118.00B\"],\n [\"WHARF REIC\",\"01997.HK\",30.250,+1.400,\"+4.853%\",\"4.23M\",\"127.31M\",\"No Profit\",0.48,\"4.33%\",\"91.85B\"],\n [\"ANTA SPORTS\",\"02020.HK\",88.150,+4.400,\"+5.254%\",\"4.82M\",\"422.51M\",27.71,6.16,\"1.52%\",\"249.70B\"],\n [\"WUXI BIO\",\"02269.HK\",45.650,+1.550,\"+3.515%\",\"17.91M\",\"811.49M\",38.18,4.88,\"0.00%\",\"194.01B\"],\n [\"SHENZHOU INTL\",\"02313.HK\",75.000,+4.600,\"+6.534%\",\"5.52M\",\"410.68M\",21.87,3.25,\"2.55%\",\"112.74B\"],\n [\"PING AN\",\"02318.HK\",44.850,+0.850,\"+1.932%\",\"23.05M\",\"1.03B\",8.28,0.85,\"6.09%\",\"334.02B\"],\n [\"MENGNIU DAIRY\",\"02319.HK\",26.250,+1.500,\"+6.061%\",\"8.58M\",\"223.15M\",17.34,2.30,\"1.73%\",\"103.42B\"],\n [\"LI NING\",\"02331.HK\",32.950,+1.500,\"+4.769%\",\"22.54M\",\"738.37M\",18.80,3.16,\"1.58%\",\"86.86B\"],\n [\"SUNNY OPTICAL\",\"02382.HK\",54.700,+1.050,\"+1.957%\",\"5.62M\",\"308.60M\",22.01,2.44,\"0.91%\",\"60.00B\"],\n [\"BOC HONG KONG\",\"02388.HK\",21.450,+0.300,\"+1.418%\",\"6.53M\",\"140.32M\",8.38,0.75,\"6.33%\",\"226.79B\"],\n [\"CHINA LIFE\",\"02628.HK\",12.200,+0.240,\"+2.007%\",\"13.53M\",\"165.07M\",9.49,0.70,\"4.53%\",\"90.78B\"],\n [\"ENN ENERGY\",\"02688.HK\",65.000,+1.150,\"+1.801%\",\"3.06M\",\"198.69M\",11.08,1.67,\"4.48%\",\"73.53B\"],\n [\"ZIJIN MINING\",\"02899.HK\",11.980,+0.160,\"+1.354%\",\"16.20M\",\"194.50M\",13.97,3.14,\"1.88%\",\"68.73B\"],\n [\"MEITUAN-W\",\"03690.HK\",114.600,+3.800,\"+3.430%\",\"19.17M\",\"2.19B\",\"No Profit\",4.89,\"0.00%\",\"715.43B\"],\n [\"HANSOH PHARMA\",\"03692.HK\",10.660,+0.160,\"+1.524%\",\"17.56M\",\"187.72M\",21.48,2.47,\"0.94%\",\"63.25B\"],\n [\"CM BANK\",\"03968.HK\",32.700,+0.100,\"+0.307%\",\"11.13M\",\"363.99M\",5.51,0.86,\"6.00%\",\"150.12B\"],\n [\"BANK OF CHINA\",\"03988.HK\",2.740,+0.050,\"+1.859%\",\"275.47M\",\"754.54M\",3.33,0.33,\"9.55%\",\"229.13B\"],\n [\"CG SERVICES\",\"06098.HK\",8.080,+0.250,\"+3.193%\",\"16.08M\",\"128.87M\",12.42,0.65,\"5.20%\",\"27.01B\"],\n [\"JD HEALTH\",\"06618.HK\",40.600,+2.950,\"+7.835%\",\"7.75M\",\"312.36M\",299.91,2.56,\"0.00%\",\"129.12B\"],\n [\"HAIER SMARTHOME\",\"06690.HK\",24.650,+1.150,\"+4.894%\",\"7.24M\",\"178.37M\",13.83,2.21,\"2.59%\",\"70.46B\"],\n [\"HAIDILAO\",\"06862.HK\",21.000,+0.600,\"+2.941%\",\"6.86M\",\"143.79M\",74.46,13.94,\"0.55%\",\"117.05B\"],\n [\"JD-SW\",\"09618.HK\",115.100,+4.000,\"+3.600%\",\"7.43M\",\"852.28M\",30.73,1.50,\"6.38%\",\"360.24B\"],\n [\"NONGFU SPRING\",\"09633.HK\",45.000,+1.500,\"+3.448%\",\"3.69M\",\"165.62M\",52.49,18.63,\"1.71%\",\"226.56B\"],\n [\"BIDU-SW\",\"09888.HK\",133.400,+4.600,\"+3.571%\",\"5.82M\",\"772.73M\",47.30,1.50,\"0.00%\",\"377.37B\"],\n [\"TRIP.COM-S\",\"09961.HK\",279.200,+7.000,\"+2.572%\",\"1.25M\",\"349.59M\",114.05,1.40,\"0.00%\",\"176.65B\"],\n [\"BABA-SW\",\"09988.HK\",85.600,+2.600,\"+3.133%\",\"34.61M\",\"2.96B\",21.65,1.62,\"0.00%\",1,\"837.13B\"],\n [\"NTES-S\",\"09999.HK\",159.500,+8.300,\"+5.489%\",\"5.02M\",\"797.10M\",22.70,4.63,\"1.36%\",\"546.99B\"],\n]\n","import ftse from \"./ftse100\";\nimport nasdaq from \"./nasdaq100\";\nimport sp500 from \"./sp500\";\nimport hsi from \"./hsi\";\nimport { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\n\nconst basketConstituentData = [];\nfor (const row of ftse) {\n // prettier-ignore\n const [ric, name, lastTrade, change, volume] = row;\n const basketId = \".FTSE100\";\n const side = \"BUY\";\n const weighting = 1;\n // prettier-ignore\n basketConstituentData.push([ basketId, change, name, lastTrade, ric, `${ric}-${basketId}`, side, volume, weighting ]);\n}\n\nfor (const row of hsi) {\n // prettier-ignore\n const [name, ric, lastTrade, change, , volume] = row;\n const basketId = \".HSI\";\n const side = \"BUY\";\n const weighting = 1;\n // prettier-ignore\n basketConstituentData.push([basketId,change,name, lastTrade,ric,`${ric}-${basketId}`,side,volume,weighting ]);\n}\n\nfor (const row of nasdaq) {\n // prettier-ignore\n const [name, ric, weighting, lastTrade, change] = row;\n const basketId = \".NASDAQ100\";\n const side = \"BUY\";\n const volume = 1000;\n // prettier-ignore\n basketConstituentData.push([ basketId, change, name, lastTrade, ric, `${ric}-${basketId}`, side, volume, weighting ]);\n}\n\nfor (const row of sp500) {\n // prettier-ignore\n const [name, ric, weighting,,change] = row;\n const basketId = \".SP500\";\n const side = \"BUY\";\n const volume = 1000;\n const lastTrade = 0;\n // prettier-ignore\n basketConstituentData.push([ basketId, change, name, lastTrade, ric, `${ric}-${basketId}`, side, volume, weighting ]);\n}\n\nexport default basketConstituentData as VuuRowDataItemType[][];\n","import { buildDataColumnMap, Table } from \"../../Table\";\nimport { BaseUpdateGenerator } from \"../../UpdateGenerator\";\nimport { schemas, SimulTableName } from \"../../simul/simul-schemas\";\nimport basketConstituentData from \"./constituents\";\nimport { initBidAsk, nextRandomDouble, random } from \"../../data-utils\";\n\nexport type ask = number;\nexport type askSize = number;\nexport type bid = number;\nexport type bidSize = number;\nexport type close = number;\nexport type last = number;\nexport type open = number;\nexport type phase = \"C\";\nexport type ric = string;\nexport type scenario = \"close\";\n\nexport type PricesDataRow = [\n ask,\n askSize,\n bid,\n bidSize,\n close,\n last,\n open,\n phase,\n ric,\n scenario\n];\n\nconst { bid, bidSize, ask, askSize, last } = buildDataColumnMap(\n schemas,\n \"prices\"\n);\nconst pricesUpdateGenerator = new BaseUpdateGenerator({\n bid,\n bidSize,\n ask,\n askSize,\n last,\n});\n\nconst prices: PricesDataRow[] = [];\n\n// prettier-ignore\nfor (const [,,,lastTrade,ric] of basketConstituentData) {\n const priceSeed = parseFloat(String(lastTrade));\n if (!isNaN(priceSeed)){\n const [bid, ask] = initBidAsk(5,nextRandomDouble)\n const askSize = random(1000, 3000);\n const bidSize = random(1000, 3000);\n const close = priceSeed + random(0, 1) / 10;\n const last = priceSeed + random(0, 1) / 10;\n const open = priceSeed + random(0, 1) / 10;\n const phase = \"C\";\n const scenario = \"close\";\n prices.push([\n ask,\n askSize,\n bid,\n bidSize,\n close,\n last,\n open,\n phase,\n ric as string,\n scenario,\n ]);\n\n }\n}\n\nconst pricesTable = new Table(\n schemas.prices,\n prices,\n buildDataColumnMap<SimulTableName>(schemas, \"prices\"),\n pricesUpdateGenerator\n);\n\nexport default pricesTable;\n","import {\n DataSource,\n DataSourceRow,\n RowSelectionEventHandler,\n Selection,\n SelectionItem,\n} from \"@vuu-ui/vuu-data-types\";\nimport { buildColumnMap } from \"@vuu-ui/vuu-utils\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\n\nexport class RuntimeVisualLink {\n #childColumnName: string;\n #childDataSource: DataSource;\n #parentColumnName: string;\n #parentDataSource: DataSource;\n\n constructor(\n childDataSource: DataSource,\n parentDataSource: DataSource,\n childColumnName: string,\n parentColumnName: string,\n ) {\n this.#childColumnName = childColumnName;\n this.#childDataSource = childDataSource;\n this.#parentColumnName = parentColumnName;\n this.#parentDataSource = parentDataSource;\n\n parentDataSource.on(\"row-selection\", this.handleParentSelectEvent);\n }\n\n destroy() {\n // do we need to do anything\n }\n\n remove() {\n this.#parentDataSource?.removeListener(\n \"row-selection\",\n this.handleParentSelectEvent,\n );\n this.#childDataSource.baseFilter = { filter: \"\" };\n }\n\n handleParentSelectEvent: RowSelectionEventHandler = (selection) => {\n if (this.#childDataSource) {\n const selectedValues = this.pickUniqueSelectedValues(selection);\n if (selectedValues.length === 0) {\n this.#childDataSource.baseFilter = undefined;\n } else if (selectedValues.length === 1) {\n this.#childDataSource.baseFilter = {\n filter: `${this.#childColumnName} = \"${selectedValues[0]}\"`,\n };\n } else {\n this.#childDataSource.baseFilter = {\n filter: `${this.#childColumnName} in [\"${selectedValues.join('\",\"')}\"]`,\n };\n }\n }\n };\n\n private pickUniqueSelectedValues(selection: Selection) {\n const data = (this.#parentDataSource as TickingArrayDataSource).currentData;\n const selectedRows = selection.reduce<DataSourceRow[]>(\n (rows, selected: SelectionItem) => {\n if (Array.isArray(selected)) {\n for (let i = selected[0]; i <= selected[1]; i++) {\n const row = data[i];\n if (row) {\n rows.push(row);\n }\n }\n } else {\n const row = data[selected];\n if (row) {\n rows.push(row);\n }\n }\n return rows;\n },\n [],\n );\n\n const map = buildColumnMap(this.#parentDataSource.columns);\n const set = new Set();\n const colIndex = map[this.#parentColumnName];\n for (const row of selectedRows) {\n set.add(row[colIndex]);\n }\n return Array.from(set) as string[];\n }\n}\n","import {\n DataSource,\n DataSourceConfig,\n DataSourceVisualLinkCreatedMessage,\n OpenDialogActionWithSchema,\n SuggestionFetcher,\n TableSchema,\n} from \"@vuu-ui/vuu-data-types\";\nimport {\n VuuRpcMenuRequest,\n VuuRpcViewportRequest,\n TypeaheadParams,\n VuuMenu,\n VuuRowDataItemType,\n VuuTable,\n VuuLink,\n LinkDescriptorWithLabel,\n RpcNamedParams,\n VuuRpcRequest,\n VuuRpcResponse,\n VuuRpcMenuResponse,\n VuuRpcViewportResponse,\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isViewportRpcRequest, uuid } from \"@vuu-ui/vuu-utils\";\nimport { Table, buildDataColumnMapFromSchema } from \"./Table\";\nimport { TickingArrayDataSource } from \"./TickingArrayDataSource\";\nimport { makeSuggestions } from \"./makeSuggestions\";\nimport { RuntimeVisualLink } from \"./RuntimeVisualLink\";\n\nexport interface IVuuModule<T extends string = string> {\n createDataSource: (tableName: T) => DataSource;\n typeaheadHook: () => SuggestionFetcher;\n}\n\nexport interface VuuModuleConstructorProps<T extends string = string> {\n menus?: Record<T, VuuMenu | undefined>;\n name: string;\n schemas: Record<T, Readonly<TableSchema>>;\n services?: Record<T, RpcService[] | undefined>;\n tables: Record<T, Table>;\n vuuLinks?: Record<T, VuuLink[] | undefined>;\n}\n\nexport type SessionTableMap = Record<string, Table>;\n\nexport type RpcServiceRequestWithParams = VuuRpcViewportRequest & {\n namedParams: RpcNamedParams;\n};\nexport type RpcServiceRequest =\n | RpcServiceRequestWithParams\n | VuuRpcViewportRequest\n | VuuRpcMenuRequest;\n\nexport const withParams = (\n rpcRequest: VuuRpcRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport const withNamedParams = (\n rpcRequest: RpcServiceRequest,\n): rpcRequest is RpcServiceRequestWithParams => \"namedParams\" in rpcRequest;\n\nexport type ServiceHandler = (\n rpcRequest: VuuRpcRequest & {\n namedParams?: RpcNamedParams;\n },\n) => Promise<VuuRpcResponse>;\n\nexport type RpcService = {\n rpcName: string;\n service: ServiceHandler;\n};\n\ntype Subscription = {\n viewportId: string;\n dataSource: DataSource;\n};\nexport class VuuModule<T extends string = string> implements IVuuModule<T> {\n #menus: Record<T, VuuMenu | undefined> | undefined;\n #name: string;\n #runtimeVisualLinks = new Map<string, RuntimeVisualLink>();\n #schemas: Record<T, Readonly<TableSchema>>;\n #sessionTableMap: SessionTableMap = {};\n #tables: Record<T, Table>;\n #tableServices: Record<T, RpcService[] | undefined> | undefined;\n #visualLinks: Record<T, VuuLink[] | undefined> | undefined;\n #subscriptionMap: Map<string, Subscription[]> = new Map();\n\n constructor({\n menus,\n name,\n schemas,\n services,\n tables,\n vuuLinks: visualLinks,\n }: VuuModuleConstructorProps<T>) {\n this.#menus = menus;\n this.#name = name;\n this.#schemas = schemas;\n this.#tableServices = services;\n this.#tables = tables;\n this.#visualLinks = visualLinks;\n }\n\n private unregisterViewport = (viewportId: string) => {\n for (const [tableName, subscriptions] of this.#subscriptionMap) {\n if (subscriptions[0].viewportId.toString() === viewportId) {\n this.#subscriptionMap.delete(tableName);\n } else {\n const links = subscriptions[0].dataSource.links;\n if (links) {\n for (let i = 0; i < links?.length; i++) {\n if (links[i].parentClientVpId === viewportId) {\n links.splice(i);\n }\n }\n }\n subscriptions[0].dataSource.links = links;\n }\n }\n };\n\n getSubscribedDataSource(vpId: string): DataSource {\n for (const subscriptions of this.#subscriptionMap.values()) {\n for (const { viewportId, dataSource } of subscriptions) {\n if (viewportId === vpId) {\n return dataSource;\n }\n }\n }\n throw Error(`getSubscribedDataSource #${vpId} not in subscriptionMap`);\n }\n\n getLinks = (\n subscriptionMap: Map<string, Subscription[]>,\n vuuLinks: VuuLink[],\n ) => {\n const visualLinks: LinkDescriptorWithLabel[] = [];\n for (let i = 0; i < vuuLinks.length; i++) {\n const subscriptions = subscriptionMap.get(vuuLinks[i].toTable);\n if (subscriptions) {\n subscriptions.forEach(({ viewportId, dataSource: { status } }) => {\n if (status !== \"suspended\") {\n const newLink: LinkDescriptorWithLabel = {\n parentClientVpId: viewportId,\n parentVpId: viewportId,\n link: vuuLinks[i],\n };\n visualLinks.push(newLink);\n }\n });\n }\n }\n return visualLinks;\n };\n\n visualLinkService = (\n message: VuuCreateVisualLink | VuuRemoveVisualLink,\n ): Promise<DataSourceVisualLinkCreatedMessage | void> =>\n new Promise((resolve) => {\n if (message.type === \"CREATE_VISUAL_LINK\") {\n const { childColumnName, childVpId, parentColumnName, parentVpId } =\n message;\n const childDataSource = this.getSubscribedDataSource(childVpId);\n const parentDataSource = this.getSubscribedDataSource(parentVpId);\n const runtimeVisualLink = new RuntimeVisualLink(\n childDataSource,\n parentDataSource,\n childColumnName,\n parentColumnName,\n );\n\n this.#runtimeVisualLinks.set(childVpId, runtimeVisualLink);\n\n resolve({\n clientViewportId: childVpId,\n colName: childColumnName,\n parentColName: parentColumnName,\n parentViewportId: parentVpId,\n type: \"vuu-link-created\",\n } as DataSourceVisualLinkCreatedMessage);\n } else {\n const runtimeVisualLink = this.#runtimeVisualLinks.get(\n message.childVpId,\n );\n if (runtimeVisualLink) {\n runtimeVisualLink.remove();\n this.#runtimeVisualLinks.delete(message.childVpId);\n } else {\n throw Error(\n `visualLinkService no visual link found for viewport #${message.childVpId}`,\n );\n }\n resolve();\n }\n });\n\n createDataSource = (\n tableName: T,\n viewport?: string,\n config?: DataSourceConfig,\n ) => {\n const getVisualLinks = (tableName: string) => {\n const linksForTable = this.#visualLinks?.[tableName as T] as VuuLink[];\n return linksForTable === undefined\n ? undefined\n : this.getLinks(this.#subscriptionMap, linksForTable);\n };\n\n const columnDescriptors = this.getColumnDescriptors(tableName);\n const table = this.#tables[tableName];\n const sessionTable = this.#sessionTableMap[tableName];\n\n const dataSource: DataSource = new TickingArrayDataSource({\n ...config,\n columnDescriptors,\n getVisualLinks,\n keyColumn:\n this.#schemas[tableName] === undefined\n ? this.#sessionTableMap[tableName].schema.key\n : this.#schemas[tableName].key,\n table: table || sessionTable,\n menu: this.#menus?.[tableName],\n rpcServices: this.getServices(tableName),\n sessionTables: this.#sessionTableMap,\n viewport,\n visualLinkService: this.visualLinkService,\n });\n\n dataSource.on(\"unsubscribed\", this.unregisterViewport);\n\n const existingSubscriptions = this.#subscriptionMap.get(tableName);\n const subscription = {\n viewportId: dataSource.viewport as string,\n dataSource,\n };\n if (existingSubscriptions) {\n existingSubscriptions.push(subscription);\n } else {\n this.#subscriptionMap.set(tableName, [subscription]);\n }\n\n return dataSource;\n };\n\n getServices(tableName: T) {\n const tableServices = this.#tableServices?.[tableName];\n if (Array.isArray(tableServices)) {\n return this.#moduleServices.concat(tableServices);\n } else {\n return this.#moduleServices;\n }\n }\n\n get typeaheadHook() {\n return () => this.suggestionFetcher;\n }\n\n protected get sessionTableMap() {\n return this.#sessionTableMap;\n }\n\n protected get tables() {\n return this.#tables;\n }\n\n private getSessionTable(sessionTableName: string) {\n const sessionTable = this.#sessionTableMap[sessionTableName];\n if (sessionTable) {\n return sessionTable;\n } else {\n throw Error(\n `getSessionTable: no session table with name ${sessionTableName}`,\n );\n }\n }\n\n private getColumnDescriptors(tableName: T) {\n const schema =\n this.#schemas[tableName] || this.getSessionTable(tableName)?.schema;\n if (schema) {\n return schema.columns;\n } else {\n throw Error(\n ` no schema found for module ${this.#name} table ${tableName}`,\n );\n }\n }\n\n private suggestionFetcher: SuggestionFetcher = ([\n vuuTable,\n column,\n pattern,\n ]: TypeaheadParams) => {\n const table = this.#tables[vuuTable.table as T];\n if (table) {\n return makeSuggestions(table, column, pattern);\n } else {\n throw Error(\n `${this.#name} suggestionFetcher, unknown table ${vuuTable.module} ${\n vuuTable.table\n }`,\n );\n }\n };\n\n private openBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { namedParams, vpId } = rpcRequest;\n const selectedRowIds = namedParams.selectedRowIds as string[];\n const table = namedParams.table as VuuTable;\n\n if (selectedRowIds && table) {\n const dataTable = this.#tables[table.table as T];\n if (dataTable) {\n const sessionTable = this.createSessionTableFromSelectedRows(\n dataTable,\n selectedRowIds,\n );\n const sessionTableName = `session-${uuid()}`;\n this.#sessionTableMap[sessionTableName] = sessionTable;\n\n return {\n action: {\n renderComponent: \"grid\",\n table: {\n module: table.module,\n table: sessionTableName,\n },\n tableSchema: dataTable.schema,\n type: \"OPEN_DIALOG_ACTION\",\n } as OpenDialogActionWithSchema,\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n } else {\n return {\n action: { type: \"NO_ACTION\" },\n clientViewportId: \"na\",\n error: \"No Table found\",\n rpcName: \"VP_BULK_EDIT_REJECT\",\n type: \"VIEW_PORT_MENU_REJ\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n }\n }\n throw Error(\"openBulkEdits expects Table and selectedRowIds\");\n };\n\n private endEditSession: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { vpId } = rpcRequest;\n delete this.#sessionTableMap[vpId];\n return {\n action: { type: \"VP_RPC_SUCCESS\" },\n method: \"???\",\n namedParams: {},\n params: [],\n type: \"VIEW_PORT_RPC_REPONSE\",\n vpId,\n } as VuuRpcViewportResponse;\n } else {\n throw Error(\"endEditSession invalid request\");\n }\n };\n\n // Bulk-edit with input in session table\n private applyBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n const { column, value } = rpcRequest.namedParams;\n const keyIndex = sessionTable.map[sessionTable.schema.key];\n sessionTable.update(\n String(newRow[keyIndex]),\n column as string,\n value as VuuRowDataItemType,\n );\n }\n return {\n action: {\n type: \"NO_ACTION\",\n },\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as VuuRpcMenuResponse;\n }\n throw Error(\"applyBulkEdits expects column and value as namedParams\");\n };\n\n // Save session table data to main table\n private saveBulkEdits: ServiceHandler = async (rpcRequest) => {\n if (withParams(rpcRequest)) {\n const { vpId } = rpcRequest;\n const sessionTable = this.getSessionTable(vpId);\n const { table } = sessionTable.schema.table;\n const baseTable = this.#tables[table as T];\n if (baseTable) {\n for (let i = 0; i < sessionTable.data.length; i++) {\n const newRow = sessionTable.data[i];\n baseTable.updateRow(newRow);\n }\n\n return {\n action: {\n type: \"VP_RPC_SUCCESS\",\n },\n requestId: \"request_id\",\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n } as unknown as VuuRpcViewportResponse;\n }\n }\n throw Error(\"saveBulkEdits base table not found\");\n };\n\n protected createSessionTableFromSelectedRows(\n { data, map, schema }: Table,\n selectedRowIds: string[],\n ) {\n const keyIndex = map[schema.key];\n const sessionData: VuuRowDataItemType[][] = [];\n for (let i = 0; i < selectedRowIds.length; i++) {\n for (let j = 0; j < data.length; j++) {\n if (data[j][keyIndex] === selectedRowIds[i]) {\n sessionData.push(data[j]);\n }\n }\n }\n return new Table(schema, sessionData, buildDataColumnMapFromSchema(schema));\n }\n\n /**\n * These services are available on any table. The client must configure the appropriate\n * menu item(s) on Table(s). The services to implement these RPC calls are built-in to\n * VuuModule\n */\n #moduleServices: RpcService[] = [\n {\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n service: this.openBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_COLUMN_CELLS_RPC\",\n service: this.applyBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_SUBMIT_RPC\",\n service: this.saveBulkEdits,\n },\n {\n rpcName: \"VP_BULK_EDIT_END_RPC\",\n service: this.endEditSession,\n },\n ];\n}\n","import {\n VuuLink,\n VuuMenu,\n VuuRowDataItemType,\n VuuRpcViewportAction,\n VuuRpcViewportResponse,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { ColumnMap, isViewportRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport pricesTable from \"./reference-data/prices\";\nimport { joinTables, Table } from \"../Table\";\nimport { BasketsTableName, schemas } from \"./basket-schemas\";\nimport basketConstituentData from \"./reference-data/constituents\";\nimport { RpcService, ServiceHandler, VuuModule } from \"../VuuModule\";\n\nconst undefinedTables = {\n algoType: undefined,\n basket: undefined,\n basketTrading: undefined,\n basketTradingConstituent: undefined,\n basketConstituent: undefined,\n basketTradingConstituentJoin: undefined,\n priceStrategyType: undefined,\n};\n\n// This is a 'local' columnMap\nconst buildDataColumnMap = (tableName: BasketsTableName) =>\n Object.values(schemas[tableName].columns).reduce<ColumnMap>(\n (map, col, index) => {\n map[col.name] = index;\n return map;\n },\n {},\n );\n\nconst tableMaps: Record<BasketsTableName, ColumnMap> = {\n algoType: buildDataColumnMap(\"algoType\"),\n basket: buildDataColumnMap(\"basket\"),\n basketTrading: buildDataColumnMap(\"basketTrading\"),\n basketTradingConstituent: buildDataColumnMap(\"basketTradingConstituent\"),\n basketConstituent: buildDataColumnMap(\"basketConstituent\"),\n basketTradingConstituentJoin: buildDataColumnMap(\n \"basketTradingConstituentJoin\",\n ),\n priceStrategyType: buildDataColumnMap(\"priceStrategyType\"),\n};\n\n/**\n * BasketConstituent\n */\n\nconst basketConstituent = new Table(\n schemas.basketConstituent,\n basketConstituentData,\n tableMaps.basketConstituent,\n);\n\n/**\n * BasketTrading\n */\nconst basketTrading = new Table(\n schemas.basketTrading,\n [],\n tableMaps.basketTrading,\n);\n\nlet basketIncrement = 1;\n/**\n * BasketTradingConstituent\n */\nconst basketTradingConstituent = new Table(\n schemas.basketTradingConstituent,\n [],\n tableMaps.basketTradingConstituent,\n);\n\n// export as convenience for showcase examples\nexport const createBasketTradingRow = (\n basketId: string,\n basketName: string,\n side = \"BUY\",\n status = \"OFF MARKET\",\n) => [\n basketId,\n basketName,\n 0,\n 1.25,\n `steve-${basketIncrement++}`,\n side,\n status,\n 1_000_000,\n 1_250_000,\n 100,\n];\n\nfunction createTradingBasket(basketId: string, basketName: string) {\n const basketTradingRow = createBasketTradingRow(basketId, basketName);\n\n basketTrading.insert(basketTradingRow);\n\n const { basketId: key } = buildDataColumnMap(\"basketConstituent\");\n const constituents = basketConstituent.data.filter(\n (c) => c[key] === basketId,\n );\n\n const { instanceId } = tableMaps.basketTrading;\n\n constituents.forEach(([, , description, , ric, , , quantity, weighting]) => {\n const algo = \"\";\n const algoParams = \"\";\n const limitPrice = 95;\n const notionalLocal = 0;\n const notionalUsd = 0;\n const pctFilled = 0;\n const priceSpread = 0;\n const priceStrategyId = \"\";\n const side = \"BUY\";\n const venue = \"venue\";\n\n const basketInstanceId = basketTradingRow[instanceId];\n const basketTradingConstituentRow: VuuRowDataItemType[] = [\n algo,\n algoParams,\n basketId,\n description,\n basketInstanceId,\n `${basketInstanceId}-${ric}`,\n limitPrice,\n notionalLocal,\n notionalUsd,\n pctFilled,\n priceSpread,\n priceStrategyId,\n quantity,\n ric,\n side,\n venue,\n weighting,\n ];\n basketTradingConstituent.insert(basketTradingConstituentRow);\n });\n\n // return the key\n return basketTradingRow[instanceId] as string;\n}\n\nconst addConstituent: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n throw Error(`addConstituent not implemented`);\n } else {\n throw Error(`addConstituent invalid rpcRequest`);\n }\n};\n\nconst viewportRpcResponse = (\n params: string[],\n vpId: string,\n action?: Partial<VuuRpcViewportAction>,\n): VuuRpcViewportResponse => ({\n type: \"VIEW_PORT_RPC_REPONSE\",\n action: {\n type: \"VP_RPC_SUCCESS\",\n ...action,\n },\n method: \"???\",\n namedParams: {},\n params,\n vpId,\n});\n\nconst sendToMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"ON_MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`sendToMarket invalid rpcRequest`);\n }\n};\nconst takeOffMarket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketInstanceId] = params;\n basketTrading.update(basketInstanceId, \"status\", \"OFF-MARKET\");\n return viewportRpcResponse(params, vpId);\n } else {\n throw Error(`takeOffMarket invalid rpcRequest`);\n }\n};\n\nconst createNewBasket: ServiceHandler = async (rpcRequest) => {\n if (isViewportRpcRequest(rpcRequest)) {\n const { params, vpId } = rpcRequest;\n const [basketId, basketName] = params;\n const key = createTradingBasket(basketId, basketName);\n return viewportRpcResponse(params, vpId, { key });\n } else {\n throw Error(`createNewBasket invalid rpcRequest`);\n }\n};\n\nexport const tables: Record<BasketsTableName, Table> = {\n algoType: new Table(\n schemas.algoType,\n [\n [\"Sniper\", 0],\n [\"Dark Liquidity\", 1],\n [\"VWAP\", 2],\n [\"POV\", 3],\n [\"Dynamic Close\", 4],\n ],\n tableMaps.algoType,\n ),\n basket: new Table(\n schemas.basket,\n [\n [\".NASDAQ100\", \".NASDAQ100\", 0, 0],\n [\".HSI\", \".HSI\", 0, 0],\n [\".FTSE100\", \".FTSE100\", 0, 0],\n [\".SP500\", \".SP500\", 0, 0],\n ],\n tableMaps.basket,\n ),\n basketConstituent,\n basketTrading,\n basketTradingConstituent,\n basketTradingConstituentJoin: joinTables(\n { module: \"BASKET\", table: \"basketTradingConstituentJoin\" },\n basketTradingConstituent,\n pricesTable,\n \"ric\",\n ),\n priceStrategyType: new Table(\n schemas.priceStrategyType,\n [\n [\"Peg to Near Touch\", 0],\n [\"Far Touch\", 1],\n [\"Limit\", 2],\n [\"Algo\", 3],\n ],\n tableMaps.priceStrategyType,\n ),\n};\n\nconst vuuLinks: Record<BasketsTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n basketConstituent: [\n { fromColumn: \"basketId\", toColumn: \"id\", toTable: \"basket\" },\n ],\n};\n\nconst menus: Record<BasketsTableName, VuuMenu | undefined> = {\n ...undefinedTables,\n basket: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Basket\",\n rpcName: \"CREATE_NEW_BASKET\",\n },\n ],\n },\n};\n\nconst services: Record<BasketsTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n basket: [\n {\n rpcName: \"createBasket\",\n service: createNewBasket,\n },\n ],\n basketTrading: [\n {\n rpcName: \"sendToMarket\",\n service: sendToMarket,\n },\n {\n rpcName: \"takeOffMarket\",\n service: takeOffMarket,\n },\n ],\n basketTradingConstituentJoin: [\n {\n rpcName: \"addConstituent\",\n service: addConstituent,\n },\n ],\n};\n\nexport const basketModule = new VuuModule<BasketsTableName>({\n menus,\n name: \"BASKET\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n","import { RpcService, VuuModule, VuuModuleConstructorProps } from \"../VuuModule\";\nimport { SimulTableName } from \"./simul-schemas\";\n\n/**\n * This is an example of how we might extend the built-in VuuModule to\n * implement a module-specific service in such a way that it can invoke\n * methods on the VuuModule.\n */\nexport class SimulModule extends VuuModule<SimulTableName> {\n constructor(props: VuuModuleConstructorProps) {\n super(props);\n }\n\n getServices(tableName: SimulTableName) {\n return this.#services.concat(super.getServices(tableName));\n }\n\n #services: RpcService[] = [];\n}\n","export const convertStringToBaseTenNumber = (value: string): number =>\n parseInt(value, 10);\n","export const isOdd = (value: number): boolean => value % 2 === 1;\n","import { convertStringToBaseTenNumber } from \"./convert-string-to-base-ten-number\";\nimport { isOdd } from \"./is-odd\";\n\nexport const generateCusipCheckCode = (cusip: string): number => {\n const cusipLength = cusip.length;\n let currentValue;\n let total = 0;\n\n for (let i = 0; i < cusipLength; i++) {\n currentValue = cusip[i];\n\n const currentNumberToBaseTen = convertStringToBaseTenNumber(currentValue);\n\n let currentNumberOrPosition = isNaN(currentNumberToBaseTen)\n ? currentValue.charCodeAt(0) - \"A\".charCodeAt(0) + 10\n : parseInt(currentValue);\n\n if (isOdd(i)) {\n currentNumberOrPosition = currentNumberOrPosition * 2;\n }\n\n total =\n total +\n Math.floor(currentNumberOrPosition / 10) +\n (currentNumberOrPosition % 10);\n }\n const check = (10 - (total % 10)) % 10;\n return check;\n};\n","export const alphabet = [\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n];\n","export const baseTenNumbers = [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n];\n","import { alphabet } from \"./alphabet\";\nimport { baseTenNumbers } from \"./base-ten-numbers\";\n\nexport const alphanumeric = [...alphabet, ...baseTenNumbers];\n","import { alphanumeric } from \"./fixtures/alphanumeric-values\";\n\nexport const generateRandomAlphanumeric = (): string | number =>\n alphanumeric[Math.floor(Math.random() * alphanumeric.length)];\n","import { generateRandomAlphanumeric } from \"./generate-random-alphanumeric\";\n\nexport const generateRandomStringOfAlphanumericChars = () => {\n let string = \"\";\n for (let i = 0; i < 2; i++) {\n string = string + generateRandomAlphanumeric();\n }\n return string;\n};\n","export const generateRandomBaseTenNumber = (): number =>\n Math.floor(Math.random() * 10);\n","import { generateRandomBaseTenNumber } from \"./generate-random-base-ten-number\";\n\nexport const generateRandomStringOfBaseTenChars = () => {\n let string = \"\";\n for (let i = 0; i < 6; i++) {\n string = string + generateRandomBaseTenNumber();\n }\n return string;\n};\n","import { generateRandomStringOfAlphanumericChars } from \"./generate-random-string-of-alphanumeric-chars\";\nimport { generateRandomStringOfBaseTenChars } from \"./generate-random-string-of-base-ten-chars\";\n\nexport const generateCusipWithoutCheckCode = (): string => {\n const randomBaseTenString = generateRandomStringOfBaseTenChars();\n const randomAlphanumericString = generateRandomStringOfAlphanumericChars();\n return randomBaseTenString + randomAlphanumericString;\n};\n","import { generateCusipCheckCode } from \"./generate-cusip-check-code\";\nimport { generateCusipWithoutCheckCode } from \"./generate-cusip-without-check-code\";\n\nexport const generateCusip = (): string => {\n const cusip = generateCusipWithoutCheckCode();\n const check = generateCusipCheckCode(cusip);\n\n return cusip + check;\n};\n","/**\n * all code in here taken from @thomaschaplin\n * https://github.com/thomaschaplin/isin-generator\n * https://github.com/thomaschaplin/cusip-generator\n */\nimport { generateCusip } from \"./generate-cusip\";\nconst countryCodes = [\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AI\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AQ\",\n \"AR\",\n \"AS\",\n \"AT\",\n \"AU\",\n \"AW\",\n \"AX\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BL\",\n \"BM\",\n \"BN\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BV\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CC\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CK\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CR\",\n \"CU\",\n \"CV\",\n \"CW\",\n \"CX\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"FI\",\n \"FJ\",\n \"FK\",\n \"FM\",\n \"FO\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GF\",\n \"GG\",\n \"GH\",\n \"GI\",\n \"GL\",\n \"GM\",\n \"GN\",\n \"GP\",\n \"GQ\",\n \"GR\",\n \"GS\",\n \"GT\",\n \"GU\",\n \"GW\",\n \"GY\",\n \"HK\",\n \"HM\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IM\",\n \"IN\",\n \"IO\",\n \"IQ\",\n \"IR\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KP\",\n \"KR\",\n \"KW\",\n \"KY\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MF\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MP\",\n \"MQ\",\n \"MR\",\n \"MS\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NC\",\n \"NE\",\n \"NF\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PF\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PM\",\n \"PN\",\n \"PR\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"RE\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SD\",\n \"SE\",\n \"SG\",\n \"SH\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"SS\",\n \"ST\",\n \"SV\",\n \"SX\",\n \"SY\",\n \"SZ\",\n \"TC\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TK\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TW\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UM\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VA\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\",\n \"VN\",\n \"VU\",\n \"WF\",\n \"WS\",\n \"YE\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\",\n];\n\nconst cusip = generateCusip();\n\nconst generateIsin = (cusip: string) => {\n const code = countryCodes[Math.floor(Math.random() * countryCodes.length)];\n const isin = code + cusip + generateIsinCheckDigit(code + cusip + \"0\");\n return isin;\n};\n\nconst generateIsinCheckDigit = (isin: string) => {\n if (isin.length != 12) return false;\n const v = [];\n for (let i = isin.length - 2; i >= 0; i--) {\n const c = isin.charAt(i);\n if (isNaN(parseInt(c))) {\n const letterCode = isin.charCodeAt(i) - 55;\n v.push(letterCode % 10);\n if (letterCode > 9) {\n v.push(Math.floor(letterCode / 10));\n }\n } else {\n v.push(Number(c));\n }\n }\n let sum = 0;\n const l = v.length;\n for (let i = 0; i < l; i++) {\n if (i % 2 == 0) {\n const d = v[i] * 2;\n sum += Math.floor(d / 10);\n sum += d % 10;\n } else {\n sum += v[i];\n }\n }\n return (10 - (sum % 10)) % 10;\n};\n\nexport const isinGenerator = () => {\n return generateIsin(cusip);\n};\n","export const currencies = [\"CAD\", \"GBX\", \"USD\", \"EUR\", \"GBP\"];\n","export const locations: { [key: string]: string[] } = {\n L: [\"London PLC\", \"XLON/LSE-SETS\"],\n N: [\"Corporation\", \"XNGS/NAS-GSM\"],\n AS: [\"B.V.\", \"XAMS/ENA-MAIN\"],\n OQ: [\"Co.\", \"XNYS/NYS-MAIN\"],\n PA: [\"Paris\", \"PAR/EUR_FR\"],\n MI: [\"Milan\", \"MIL/EUR_IT\"],\n FR: [\"Frankfurt\", \"FR/EUR_DE\"],\n AT: [\"Athens\", \"AT/EUR_GR\"],\n};\nexport const suffixes = [\"L\", \"N\", \"OQ\", \"AS\", \"PA\", \"MI\", \"FR\", \"AT\"];\n","export const lotsizes = [\n 1, 2, 5, 10, 50, 50, 70, 100, 100, 100, 120, 150, 150, 200, 500, 700, 1000,\n 2000, 2500, 5000, 10000,\n];\n","import { isinGenerator } from \"./isin-generator\";\nimport { currencies } from \"./currencies\";\nimport { locations, suffixes } from \"./locations\";\nimport { lotsizes } from \"./lotsizes\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap, Table } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\n\nexport type bbg = string;\nexport type currency = string;\nexport type ric = string;\nexport type description = string;\nexport type exchange = string;\n// seed for price generation\nexport type price = number;\nexport type date = number;\n\nexport type InstrumentsDataRow = [\n bbg,\n currency,\n description,\n exchange,\n string,\n number,\n ric,\n price,\n date,\n];\n\nexport const InstrumentColumnMap = {\n bbg: 0,\n currency: 1,\n description: 2,\n exchange: 3,\n string: 4,\n number: 5,\n ric: 6,\n price: 7,\n date: 8,\n} as const;\n\nconst instrumentsData: InstrumentsDataRow[] = [];\n\nconst chars1 = Array.from(\"ABCEFGHKMN\");\nconst chars2 = Array.from(\"ABCEFGHKMN\");\nconst chars3 = Array.from(\"OPQRTUVWYZ\");\nconst chars4 = Array.from(\"OPQRTUVWYZ\");\n\nconst randomPrice = () => {\n const price = random(0, 10000);\n const multiplier = random(1, 10);\n return price / multiplier;\n};\n\n// const start = performance.now();\n// Create 10_000 Instruments\nlet count = 0;\nfor (const char1 of chars1) {\n for (const char2 of chars2) {\n for (const char3 of chars3) {\n for (const char4 of chars4) {\n const suffix = suffixes[count % 8];\n const ric = char1 + char2 + char3 + char4 + \".\" + suffix;\n const bbg = char1 + char2 + char3 + char4 + \" \" + suffix;\n const description = `${ric} description`;\n const currency = currencies[random(0, 4)];\n const isin = isinGenerator();\n const lotSize = lotsizes[random(0, lotsizes.length - 1)];\n\n const exchange = locations[suffix][1];\n const price = randomPrice();\n const date = new Date().getTime();\n\n instrumentsData.push([\n bbg,\n currency,\n description,\n exchange,\n String(isin),\n lotSize,\n ric,\n price,\n date,\n ]);\n count++;\n }\n }\n }\n}\n\n// const end = performance.now();\n// console.log(`generating 10,000 instruments took ${end - start} ms`);\n\nexport const getRic = (defaultRic: string) => {\n const row = instrumentsData.at(random(0, instrumentsData.length));\n return row?.[InstrumentColumnMap.ric] ?? defaultRic;\n};\n\nexport const instrumentsTable = new Table(\n schemas.instruments,\n instrumentsData,\n buildDataColumnMap(schemas, \"instruments\"),\n);\n\nexport { instrumentsData };\n","import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap, Table } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { instrumentsData } from \"./instruments\";\n\nconst instrumentsExtendedData = instrumentsData.map((row) =>\n (row as VuuRowDataItemType[])\n .slice(0, -1)\n .concat([random(0, 1) === 1, random(0, 1) === 1, new Date().getTime()]),\n);\n\nexport const instrumentsExtendedTable = new Table(\n schemas.instrumentsExtended,\n instrumentsExtendedData,\n buildDataColumnMap(schemas, \"instrumentsExtended\"),\n);\n","export const sides = [\"BUY\", \"SELL\"];\n","import { currencies } from \"./currencies\";\nimport { getRic } from \"./instruments\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap, Table } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { sides } from \"./sides\";\n\nexport type status = string;\nexport type ccy = string;\nexport type created = number;\nexport type filledQuantity = number;\nexport type lastUpdate = number;\nexport type orderId = string;\nexport type quantity = number;\nexport type ric = string;\nexport type side = string;\nexport type trader = string;\n\nconst traders = [\"Trader A\", \"Trader B\", \"Trader C\"];\nconst orderStatus = [\n \"Filled\",\n \"Cancelled\",\n \"New\",\n \"Partial Exec\",\n \"Booked\",\n \"All Done\",\n];\n\nconst isComplete = (status: string) =>\n [\"Filled\", \"All Done\", \"Booked\"].includes(status);\n\nexport type OrdersDataRow = [\n status,\n ccy,\n created,\n filledQuantity,\n lastUpdate,\n orderId,\n quantity,\n ric,\n side,\n trader,\n];\n\nexport const OrderColumnMap = {\n ccy: 0,\n created: 1,\n filledQuantity: 2,\n lastUpdate: 3,\n orderId: 4,\n quantity: 5,\n ric: 6,\n side: 7,\n trader: 8,\n} as const;\n\nconst ordersData: OrdersDataRow[] = [];\n\n// const start = performance.now();\n// Create 10_000 Instruments\n\nconst now = +new Date();\nfor (let i = 0; i < 100; i++) {\n const status = orderStatus[random(0, orderStatus.length - 1)];\n const ccy = currencies[random(0, currencies.length - 1)];\n const created = now;\n const lastUpdate = now;\n const orderId = `ORD${(\"0000\" + i).slice(-4)}`;\n const quantity = random(1000, 10000);\n const filledQuantity = isComplete(status)\n ? quantity\n : status === \"New\"\n ? 0\n : random(0, quantity);\n const ric = getRic(\"AAP.L\");\n const side = sides[random(0, sides.length - 1)];\n const trader = traders[random(0, traders.length - 1)];\n\n ordersData.push([\n status,\n ccy,\n created,\n filledQuantity,\n lastUpdate,\n orderId,\n quantity,\n ric,\n side,\n trader,\n ]);\n}\n// const end = performance.now();\n// console.log(`generating 10,000 instruments took ${end - start} ms`);\n\nexport const ordersTable = new Table(\n schemas.orders,\n ordersData,\n buildDataColumnMap(schemas, \"orders\"),\n);\n\nexport { ordersData };\n","import { buildDataColumnMap, Table } from \"../../Table\";\nimport { BaseUpdateGenerator } from \"../../UpdateGenerator\";\nimport { schemas } from \"../simul-schemas\";\nimport { instrumentsData, InstrumentColumnMap } from \"./instruments\";\nimport { random } from \"../../data-utils\";\nimport basketConstituentData from \"../../basket/reference-data/constituents\";\n\ntype ask = number;\ntype askSize = number;\ntype bid = number;\ntype bidSize = number;\ntype close = number;\ntype last = number;\ntype open = number;\ntype phase = \"C\";\ntype ric = string;\ntype scenario = \"close\";\n\nexport type PricesDataRow = [\n ask,\n askSize,\n bid,\n bidSize,\n close,\n last,\n open,\n phase,\n ric,\n scenario\n];\n\nconst { bid, bidSize, ask, askSize } = buildDataColumnMap(schemas, \"prices\");\nconst pricesUpdateGenerator = new BaseUpdateGenerator({\n bid,\n bidSize,\n ask,\n askSize,\n});\n\n// const start = performance.now();\n// Create 100_000 Instruments\nconst requiredInstrumentFields = [\"ric\", \"price\"] as const;\nconst pricesData: Array<PricesDataRow> = instrumentsData.map((instrument) => {\n const { ric, price: priceSeed } = requiredInstrumentFields.reduce(\n (obj, f) => ({ ...obj, [f]: instrument[InstrumentColumnMap[f]] }),\n {} as { ric: string; price: number }\n );\n const spread = random(0, 10);\n\n const ask = priceSeed + spread / 2;\n const askSize = random(1000, 3000);\n const bid = priceSeed - spread / 2;\n const bidSize = random(1000, 3000);\n const close = priceSeed + random(0, 1) / 10;\n const last = priceSeed + random(0, 1) / 10;\n const open = priceSeed + random(0, 1) / 10;\n const phase = \"C\";\n const scenario = \"close\";\n return [ask, askSize, bid, bidSize, close, last, open, phase, ric, scenario];\n});\n\n// prettier-ignore\nfor (const [,,,lastTrade,ric] of basketConstituentData) {\n const priceSeed = parseFloat(String(lastTrade));\n if (!isNaN(priceSeed)) {\n const spread = random(0, 10);\n const ask = priceSeed + spread / 2;\n const askSize = random(1000, 3000);\n const bid = priceSeed - spread / 2;\n const bidSize = random(1000, 3000);\n const close = priceSeed + random(0, 1) / 10;\n const last = priceSeed + random(0, 1) / 10;\n const open = priceSeed + random(0, 1) / 10;\n const phase = \"C\";\n const scenario = \"close\";\n pricesData.push([\n ask,\n askSize,\n bid,\n bidSize,\n close,\n last,\n open,\n phase,\n ric as string,\n scenario,\n ]);\n }\n}\n\n// const end = performance.now();\n// console.log(`generating 100,000 prices took ${end - start} ms`);\n\nexport const pricesTable = new Table(\n schemas.prices,\n pricesData,\n buildDataColumnMap(schemas, \"prices\"),\n pricesUpdateGenerator\n);\n\nexport { pricesData };\n","export const accounts = [\n \"Account 01\",\n \"Account 02\",\n \"Account 03\",\n \"Account 04\",\n \"Account 105\",\n \"Account 06\",\n \"Account 07\",\n \"Account 08\",\n \"Account 09\",\n \"Account 10\",\n \"Account 11\",\n \"Account 12\",\n \"Account 13\",\n \"Account 14\",\n \"Account 15\",\n \"Account 16\",\n \"Account 17\",\n \"Account 18\",\n \"Account 19\",\n \"Account 20\",\n];\n","export const orderStatus = [\"NEW\", \"CANCELLED\", \"FILLED\"];\n","export const algos = [\"DARKLIQ\", \"IS\", \"SURESHOT\", \"VWAP\", \"LITLIQ\", \"TWAP\"];\n","import { VuuRowDataItemType } from \"@vuu-ui/vuu-protocol-types\";\nimport { random } from \"../../data-utils\";\nimport { buildDataColumnMap, Table } from \"../../Table\";\nimport { schemas } from \"../simul-schemas\";\nimport { accounts } from \"./accounts\";\nimport { instrumentsData } from \"./instruments\";\nimport { orderStatus as statusValues } from \"./orderStatus\";\nimport { sides } from \"./sides\";\nimport { algos } from \"./algos\";\n\nconst childOrderData: VuuRowDataItemType[][] = [];\nconst parentOrderData: VuuRowDataItemType[][] = [];\n\nconst instrumentMap = buildDataColumnMap(schemas, \"instruments\");\n\nconst PARENT_ORDER_COUNT = 75_000;\nconst CHILD_ORDER_COUNT = 200_000;\n\nconst avgChildOrderPerOrder = Math.round(\n CHILD_ORDER_COUNT / PARENT_ORDER_COUNT,\n);\nconst childMaxMultiple = 10;\n\nconst start = performance.now();\n\nlet childOrderId = 0;\n\nfor (let i = 0; i < PARENT_ORDER_COUNT; i++) {\n const now = +new Date();\n const instrument = instrumentsData[random(0, instrumentsData.length - 1)];\n\n const orderQuantity = 1000 * random(1, 100);\n const orderStatus = statusValues[random(0, statusValues.length - 1)];\n const filledQty =\n orderStatus === \"FILLED\"\n ? orderQuantity\n : orderStatus === \"NEW\"\n ? 0\n : orderQuantity - random(100, orderQuantity);\n const openQty = orderQuantity - filledQty;\n\n const account = accounts[random(0, accounts.length - 1)];\n const algo = algos[random(0, algos.length - 1)];\n const averagePrice = 0;\n const ccy = \"GBP\";\n const exchange = instrument[instrumentMap.exchange];\n const parentOrderIdAsInt = i;\n const parentOrderId = `${parentOrderIdAsInt}`;\n const lastUpdate = now;\n const price = 100;\n const quantity = orderQuantity;\n const ric = instrument[instrumentMap.ric];\n const side = sides[random(0, sides.length - 1)];\n const status = orderStatus;\n const volLimit = 100;\n\n const childOrderCount = random(\n 0,\n avgChildOrderPerOrder * random(1, childMaxMultiple),\n );\n\n let remainingQty = orderQuantity;\n for (let j = 0; j < childOrderCount; j++) {\n // console.log(`create child`);\n\n const childOrderQuantity = Math.round(remainingQty / (childOrderCount - j));\n remainingQty -= childOrderQuantity;\n const childOrderStatus = statusValues[random(0, statusValues.length - 1)];\n const childFilledQty =\n orderStatus === \"FILLED\"\n ? childOrderQuantity\n : childOrderStatus === \"NEW\"\n ? 0\n : childOrderQuantity - random(100, childOrderQuantity);\n const childOpenQty = childOrderQuantity - childFilledQty;\n\n const averagePrice = 0;\n const childIdAsInt = childOrderId++;\n const childId = `${childIdAsInt}`;\n const lastUpdate = 0;\n const price = 100;\n const strategy = 0;\n\n const row: VuuRowDataItemType[] = [\n account,\n averagePrice,\n ccy,\n exchange,\n childFilledQty,\n childId,\n childIdAsInt,\n lastUpdate,\n childOpenQty,\n parentOrderId,\n price,\n childOrderQuantity,\n ric,\n side,\n childOrderStatus,\n strategy,\n volLimit,\n ];\n\n childOrderData.push(row);\n }\n\n const row: VuuRowDataItemType[] = [\n account,\n algo,\n averagePrice,\n ccy,\n childOrderCount,\n exchange,\n filledQty,\n parentOrderId,\n parentOrderIdAsInt,\n lastUpdate,\n openQty,\n price,\n quantity,\n ric,\n side,\n status,\n volLimit,\n ];\n\n parentOrderData.push(row);\n}\nconst end = performance.now();\n\nconsole.log(\n `took ${end - start} to create ${parentOrderData.length} orders and ${childOrderData.length} child orders`,\n);\n\nexport const parentOrdersTable = new Table(\n schemas.parentOrders,\n parentOrderData,\n buildDataColumnMap(schemas, \"parentOrders\"),\n);\n\nexport const childOrdersTable = new Table(\n schemas.childOrders,\n childOrderData,\n buildDataColumnMap(schemas, \"childOrders\"),\n);\n\nexport { childOrderData, parentOrderData };\n","import {\n ClientToServerMenuRowRPC,\n VuuLink,\n VuuMenu,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { isVuuMenuRpcRequest } from \"@vuu-ui/vuu-utils\";\nimport { Table, joinTables } from \"../Table\";\nimport { RpcService, ServiceHandler } from \"../VuuModule\";\nimport { SimulModule } from \"./SimulModule\";\nimport { instrumentsTable } from \"./reference-data/instruments\";\nimport { instrumentsExtendedTable } from \"./reference-data/instruments-extended\";\nimport { ordersTable } from \"./reference-data/orders\";\nimport { pricesTable } from \"./reference-data/prices\";\nimport {\n parentOrdersTable,\n childOrdersTable,\n} from \"./reference-data/parent-child-orders\";\nimport { schemas, type SimulTableName } from \"./simul-schemas\";\n\nconst undefinedTables = {\n childOrders: undefined,\n instruments: undefined,\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: undefined,\n parentOrders: undefined,\n prices: undefined,\n};\n\nconst tables: Record<SimulTableName, Table> = {\n childOrders: childOrdersTable,\n instruments: instrumentsTable,\n instrumentsExtended: instrumentsExtendedTable,\n instrumentPrices: joinTables(\n { module: \"SIMUL\", table: \"instrumentPrices\" },\n instrumentsTable,\n pricesTable,\n \"ric\",\n ),\n orders: ordersTable,\n parentOrders: parentOrdersTable,\n prices: pricesTable,\n};\n\nconst vuuLinks: Record<SimulTableName, VuuLink[] | undefined> = {\n ...undefinedTables,\n childOrders: [\n { fromColumn: \"parentOrderId\", toColumn: \"id\", toTable: \"parentOrders\" },\n ],\n parentOrders: [\n { fromColumn: \"ric\", toColumn: \"ric\", toTable: \"instruments\" },\n ],\n};\n\nconst menus: Record<SimulTableName, VuuMenu | undefined> = {\n childOrders: undefined,\n instruments: {\n name: \"ROOT\",\n menus: [\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Add Instruments To Order\",\n rpcName: \"ADD_INSTRUMENTS_TO_ORDER\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Row\",\n rpcName: \"EDIT_ROW\",\n },\n {\n context: \"selected-rows\",\n filter: \"\",\n name: \"Edit Rows\",\n rpcName: \"VP_BULK_EDIT_BEGIN_RPC\",\n },\n ],\n },\n instrumentsExtended: undefined,\n instrumentPrices: undefined,\n orders: {\n name: \"ROOT\",\n menus: [\n {\n context: \"row\",\n filter: `status in [\"New\",\"Partial Exec\"]`,\n name: \"Cancel Order\",\n rpcName: \"CANCEL_ORDER\",\n },\n ],\n },\n parentOrders: undefined,\n prices: undefined,\n};\n\nconst cancelOrder: ServiceHandler = async (rpcRequest) => {\n if (isVuuMenuRpcRequest(rpcRequest)) {\n const { rowKey, vpId } = rpcRequest as ClientToServerMenuRowRPC;\n const table = tables.orders;\n const row = table.findByKey(rowKey);\n row[table.map.status] = \"Cancelled\";\n table.updateRow(row);\n\n return {\n action: {\n type: \"SHOW_NOTIFICATION_ACTION\",\n message: `Order id: ${rowKey}`,\n title: \"Order cancelled\",\n },\n rpcName: \"CANCEL_ORDER\",\n type: \"VIEW_PORT_MENU_RESP\",\n vpId,\n };\n } else {\n throw Error(\"cancelOrder invalid rpcRequest\");\n }\n};\n\nconst services: Record<SimulTableName, RpcService[] | undefined> = {\n ...undefinedTables,\n orders: [\n {\n rpcName: \"CANCEL_ORDER\",\n service: cancelOrder,\n },\n ],\n};\n\nexport const simulModule = new SimulModule({\n menus,\n name: \"SIMUL\",\n schemas,\n services,\n tables,\n vuuLinks,\n});\n","import { buildDataColumnMap, Table } from \"../Table\";\nimport { defaultGenerators } from \"../vuu-row-generator\";\nimport { schemas, TestTableName } from \"./test-schemas\";\nimport { VuuModule } from \"../VuuModule\";\n\nconst { RowGenerator } = defaultGenerators;\n\nconst manyColumnGenerator = RowGenerator(\n schemas.TwoHundredColumns.columns.map((c) => c.name)\n);\n\nconst tables: Record<TestTableName, Table> = {\n TwoHundredColumns: new Table(\n schemas.TwoHundredColumns,\n new Array(100).fill(1).map((_, i) => manyColumnGenerator(i)),\n buildDataColumnMap(schemas, \"TwoHundredColumns\")\n ),\n};\n\nexport const testModule = new VuuModule<TestTableName>({\n name: \"TEST\",\n schemas,\n tables,\n});\n","import { VuuModule } from \"./VuuModule\";\nimport { basketModule } from \"./basket/basket-module\";\nimport { BasketsTableName } from \"./basket/basket-schemas\";\nimport { simulModule } from \"./simul/simul-module\";\nimport { SimulTableName } from \"./simul/simul-schemas\";\nimport { testModule } from \"./test/test-module\";\nimport { TestTableName } from \"./test/test-schemas\";\n\nexport type VuuModuleName = \"BASKET\" | \"SIMUL\" | \"TEST\";\n\nconst vuuModules: Record<\n VuuModuleName,\n | VuuModule<BasketsTableName>\n | VuuModule<SimulTableName>\n | VuuModule<TestTableName>\n> = {\n BASKET: basketModule,\n SIMUL: simulModule,\n TEST: testModule,\n};\n\n// Note, this is useful but be aware that all modules will be bundled if this is imported.\n// If only a single module is required, better to import it directly.\nexport const vuuModule = <T extends string = string>(\n moduleName: VuuModuleName\n) => vuuModules[moduleName] as VuuModule<T>;\n","import type {\n DataSourceConfig,\n DataSourceConstructorProps,\n ServerAPI,\n} from \"@vuu-ui/vuu-data-types\";\nimport type {\n VuuCreateVisualLink,\n VuuRemoveVisualLink,\n VuuRpcMenuRequest,\n VuuRpcServiceRequest,\n VuuRpcViewportRequest,\n VuuTable,\n} from \"@vuu-ui/vuu-protocol-types\";\nimport { basketModule, basketSchemas, isBasketTable } from \"../basket\";\nimport { isSimulTable, simulModule, simulSchemas } from \"../simul\";\nimport { ReactNode } from \"react\";\nimport { DataProvider } from \"@vuu-ui/vuu-utils\";\n\nconst serverAPI: Pick<\n ServerAPI,\n \"getTableList\" | \"getTableSchema\" | \"rpcCall\"\n> = {\n getTableList: async () => {\n return {\n tables: Object.values(simulSchemas)\n .concat(Object.values(basketSchemas))\n .map((schema) => schema.table),\n };\n },\n getTableSchema: async (vuuTable: VuuTable) => {\n if (isSimulTable(vuuTable)) {\n return simulSchemas[vuuTable.table];\n } else if (isBasketTable(vuuTable)) {\n return basketSchemas[vuuTable.table];\n } else {\n throw Error(\n `unsupported module/table ${vuuTable.module}/${vuuTable.table}`,\n );\n }\n },\n rpcCall: async <T = unknown,>(\n message:\n | VuuRpcServiceRequest\n | VuuRpcMenuRequest\n | VuuRpcViewportRequest\n | VuuCreateVisualLink\n | VuuRemoveVisualLink,\n ) => {\n if (\n message.type === \"RPC_CALL\" &&\n message.service === \"TypeAheadRpcHandler\"\n ) {\n const [vuuTable] = message.params;\n\n if (isSimulTable(vuuTable)) {\n const typeahead = simulModule.typeaheadHook();\n return typeahead(message.params) as T;\n } else if (isBasketTable(vuuTable)) {\n const typeahead = basketModule.typeaheadHook();\n return typeahead(message.params) as T;\n }\n }\n throw Error(\"LocalDataSource provider only handles TypeAhead rpc calls\");\n },\n};\n\nconst getServerAPI = async () => serverAPI;\n\nclass VuuDataSource {\n constructor({\n aggregations,\n columns,\n filterSpec,\n groupBy,\n sort,\n table,\n viewport,\n visualLink,\n }: DataSourceConstructorProps) {\n const config: DataSourceConfig = {\n aggregations,\n columns,\n filterSpec,\n groupBy,\n sort,\n visualLink,\n };\n\n if (isSimulTable(table)) {\n return simulModule.createDataSource(table.table, viewport, config);\n } else if (isBasketTable(table)) {\n return basketModule.createDataSource(table.table, viewport, config);\n } else {\n throw Error(`unsupported module/table ${table.module}/${table.table}`);\n }\n }\n}\n\nexport const LocalDataSourceProvider = ({\n children,\n}: {\n children: ReactNode;\n}) => {\n return (\n <DataProvider\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n VuuDataSource={VuuDataSource as any}\n getServerAPI={getServerAPI}\n >\n {children}\n </DataProvider>\n );\n};\n"],"names":["__privateAdd","__publicField","__privateGet","__privateSet","schemas","basketSchemas","simulSchemas","testSchemas","metadataKeys","ArrayDataSource","isViewportRpcRequest","isVuuMenuRpcRequest","EventEmitter","row","buildDataColumnMap","nextRandomDouble","bid","bidSize","ask","askSize","pricesUpdateGenerator","last","pricesTable","buildColumnMap","tableName","uuid","undefinedTables","tables","vuuLinks","menus","services","cusip","orderStatus","statusValues","averagePrice","lastUpdate","price","jsx","DataProvider"],"mappings":";;;;;;;;;;;;;;;;AAAA,IAAA,QAAA;AAEO,MAAM,WAAA,GAAN,MAAM,WAAuB,CAAA;AAAA,EAIlC,WAAA,CAAY,MAAc,MAAwB,EAAA;AAHlD,IAAAA,cAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAAC,eAAA,CAAA,IAAA,EAAO,QAAS,EAAA,CAAA,CAAA;AAwChB,IAAAA,eAAA,CAAA,IAAA,EAAA,KAAA,EAAM,CAAC,IAA0C,KAAA;AAC/C,MAAA,OAAO,IAAI,WAAA,CAAW,IAAK,CAAA,MAAA,EAAQ,CAAC,CAAc,KAAA;AAGhD,QAAA,OAAO,IAAK,CAAAC,cAAA,CAAA,IAAA,EAAK,QAAL,CAAA,CAAA,IAAA,CAAA,IAAA,EAAc,IAAI,CAAC,CAAA;AAAA,OAChC,CAAA;AAAA,KACH,CAAA;AACA,IAAQD,eAAA,CAAA,IAAA,EAAA,OAAA,EAAA,CAAC,MAAc,EAAe,KAAA;AACpC,MAAA,MAAM,MAAM,EAAC;AACb,MAAA,MAAM,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,IAAA,CAAK,QAAQ,EAAE,CAAA;AACpC,MAAA,KAAA,IAAS,CAAI,GAAA,IAAA,EAAM,CAAI,GAAA,GAAA,EAAK,CAAK,EAAA,EAAA;AAC/B,QAAA,GAAA,CAAI,IAAK,CAAAC,cAAA,CAAA,IAAA,EAAK,QAAL,CAAA,CAAA,IAAA,CAAA,IAAA,EAAc,CAAE,CAAA,CAAA;AAAA;AAE3B,MAAO,OAAA,GAAA;AAAA,KACT,CAAA;AAnDE,IAAAC,cAAA,CAAA,IAAA,EAAK,QAAW,EAAA,MAAA,CAAA;AAChB,IAAA,IAAA,CAAK,MAAS,GAAA,IAAA;AAEd,IAAA,MAAM,OAAU,GAAA;AAAA,MACd,GAAA,EAAK,CAAC,MAAA,EAAuB,IAA+B,KAAA;AAXlE,QAAA,IAAA,EAAA;AAYQ,QAAA,IAAI,SAAS,QAAU,EAAA;AACrB,UAAA,OAAO,MAAO,CAAA,MAAA;AAAA,SAChB,MAAA,IAAW,SAAS,OAAS,EAAA;AAC3B,UAAA,OAAO,MAAO,CAAA,KAAA;AAAA,SAChB,MAAA,IAAW,SAAS,KAAO,EAAA;AACzB,UAAA,OAAO,MAAO,CAAA,GAAA;AAAA,SAChB,MAAA,IAAW,SAAS,UAAY,EAAA;AAC9B,UAAO,OAAA,cAAA;AAAA;AAET,QAAI,IAAA,OAAO,SAAS,QAAU,EAAA;AAC5B,UAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,IAAA,EAAM,EAAE,CAAA;AAC/B,UAAI,IAAA,CAAC,KAAM,CAAA,KAAK,CAAG,EAAA;AACjB,YAAI,IAAA,KAAA,GAAQ,KAAK,MAAQ,EAAA;AACvB,cAAO,OAAAD,cAAA,CAAA,EAAA,GAAA,MAAA,EAAO,UAAP,IAAgB,CAAA,EAAA,EAAA,KAAA,CAAA;AAAA,aAClB,MAAA;AACL,cAAO,OAAA,KAAA,CAAA;AAAA;AACT;AACF;AAEF,QAAA,MAAM,KAAM,CAAA,CAAA,qBAAA,EAAwB,MAAO,CAAA,IAAI,CAAC,CAAgB,cAAA,CAAA,CAAA;AAAA,OAClE;AAAA,MACA,GAAK,EAAA,CAAC,MAAuB,EAAA,IAAA,EAAc,MAAoB,KAAA;AAC7D,QAAA,IAAI,SAAS,QAAU,EAAA;AACrB,UAAA,MAAA,CAAO,MAAS,GAAA,MAAA;AAChB,UAAO,OAAA,IAAA;AAAA;AAET,QAAA,MAAM,MAAM,CAA2C,yCAAA,CAAA,CAAA;AAAA;AACzD,KACF;AACA,IAAO,OAAA,IAAI,KAAM,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA;AAkBlC,CAAA;AAxDE,QAAA,GAAA,IAAA,OAAA,EAAA;AADK,IAAM,UAAN,GAAA;;ACUA,MAAME,SAET,GAAA;AAAA,EACF,QAAU,EAAA;AAAA,IACR,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,IAAM,EAAA,cAAA,EAAgB,KAAM;AAAA,KACtC;AAAA,IACA,GAAK,EAAA,IAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,UAAW;AAAA,GAC/C;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,IAAM,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACvC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,kBAAoB,EAAA,cAAA,EAAgB,QAAS;AAAA,KACvD;AAAA,IACA,GAAK,EAAA,IAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,QAAS;AAAA,GAC7C;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS;AAAA,KAChD;AAAA,IACA,GAAK,EAAA,aAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,mBAAoB;AAAA,GACxD;AAAA,EACA,aAAe,EAAA;AAAA,IACb,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,kBAAoB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACrD,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,KAAM;AAAA,KACzC;AAAA,IACA,GAAK,EAAA,YAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,eAAgB;AAAA,GACpD;AAAA,EACA,wBAA0B,EAAA;AAAA,IACxB,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,iBAAmB,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACjD,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS;AAAA,KAChD;AAAA,IACA,GAAK,EAAA,eAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,0BAA2B;AAAA,GAC/D;AAAA,EAEA,4BAA8B,EAAA;AAAA,IAC5B,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,iBAAmB,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACjD,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS;AAAA,KAChD;AAAA,IACA,GAAK,EAAA,eAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,8BAA+B;AAAA,GACnE;AAAA,EACA,iBAAmB,EAAA;AAAA,IACjB,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,IAAM,EAAA,cAAA,EAAgB,KAAM;AAAA,KACtC;AAAA,IACA,GAAK,EAAA,EAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,QAAA,EAAU,OAAO,mBAAoB;AAAA;AAE1D;AAOO,MAAM,aAAgB,GAAA,CAAC,KAC5B,KAAA,KAAA,CAAM,MAAW,KAAA;;AC5HZ,MAAMA,SACX,GAAA;AAAA,EACE,WAAa,EAAA;AAAA,IACX,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS;AAAA,KAC1C;AAAA,IACA,GAAK,EAAA,KAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,aAAc;AAAA,GACjD;AAAA,EACA,mBAAqB,EAAA;AAAA,IACnB,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,SAAU,EAAA;AAAA,MAC/C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,SAAU,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,MAAO;AAAA,KACzC;AAAA,IACA,GAAK,EAAA,KAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,qBAAsB;AAAA,GACzD;AAAA,EACA,gBAAkB,EAAA;AAAA,IAChB,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,aAAe,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAChD,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS;AAAA,KAC/C;AAAA,IACA,GAAK,EAAA,KAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,kBAAmB;AAAA,GACtD;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,gBAAkB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACnD,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS;AAAA,KAC7C;AAAA,IACA,GAAK,EAAA,SAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,QAAS;AAAA,GAC5C;AAAA,EACA,WAAa,EAAA;AAAA,IACX,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,cAAgB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACjD,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,IAAM,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACvC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,eAAiB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAClD,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,KAAM;AAAA,KAC5C;AAAA,IACA,GAAK,EAAA,IAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,aAAc;AAAA,GACjD;AAAA,EACA,YAAc,EAAA;AAAA,IACZ,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,cAAgB,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACjD,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,WAAa,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC9C,EAAE,IAAA,EAAM,IAAM,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACvC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,KAAM,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,YAAc,EAAA,cAAA,EAAgB,MAAO,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC7C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,QAAU,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC3C,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,KAAM;AAAA,KAC5C;AAAA,IACA,GAAK,EAAA,IAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,cAAe;AAAA,GAClD;AAAA,EACA,MAAQ,EAAA;AAAA,IACN,OAAS,EAAA;AAAA,MACP,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,SAAW,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC5C,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,MAAQ,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACzC,EAAE,IAAA,EAAM,OAAS,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MAC1C,EAAE,IAAA,EAAM,KAAO,EAAA,cAAA,EAAgB,QAAS,EAAA;AAAA,MACxC,EAAE,IAAA,EAAM,UAAY,EAAA,cAAA,EAAgB,QAAS;AAAA,KAC/C;AAAA,IACA,GAAK,EAAA,KAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,OAAA,EAAS,OAAO,QAAS;AAAA;AAE9C;AAOK,MAAM,YAAe,GAAA,CAAC,KAC3B,KAAA,KAAA,CAAM,MAAW,KAAA;;AC9IZ,MAAM,mBACX,GAAA,CAAC,OAAsB,KAAA,CAAC,KAAU,KAAA;AAChC,EAAA,OAAO,CAAC,CAAA,IAAA,EAAO,KAAQ,GAAA,CAAC,EAAE,CAAE,CAAA,MAAA;AAAA,IAC1B,MAAM,OAAQ,CAAA,MAAM,CACjB,CAAA,IAAA,CAAK,IAAI,CACT,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAS,MAAA,EAAA,CAAA,GAAI,CAAC,CAAM,GAAA,EAAA,KAAA,GAAQ,CAAC,CAAE,CAAA;AAAA,GAClD;AACF;AAEK,MAAM,sBAA4C,GAAA,CACvD,OACA,EAAA,YAAA,GAAe,EACZ,KAAA;AACH,EAAI,IAAA,OAAO,YAAY,QAAU,EAAA;AAC/B,IAAO,OAAA,CAAC,EAAE,KAAO,EAAA,YAAA,EAAc,MAAM,QAAU,EAAA,KAAA,EAAO,GAAI,EAAC,CAAE,CAAA,MAAA;AAAA,MAC3D,KAAA,CAAM,OAAO,CACV,CAAA,IAAA,CAAK,IAAI,CACT,CAAA,GAAA,CAAI,CAAC,CAAA,EAAG,CAAM,KAAA;AACb,QAAM,MAAA,IAAA,GAAO,CAAU,OAAA,EAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC5B,QAAM,MAAA,KAAA,GAAQ,CAAU,OAAA,EAAA,CAAA,GAAI,CAAC,CAAA,CAAA;AAC7B,QAAO,OAAA,EAAE,OAAO,IAAM,EAAA,KAAA,EAAO,KAAK,GAAG,YAAA,CAAa,IAAI,CAAE,EAAA;AAAA,OACzD;AAAA,KACL;AAAA,GACK,MAAA;AACL,IAAA,MAAM,MAAM,wDAAwD,CAAA;AAAA;AAExE;AAEO,MAAM,iBAAoB,GAAA;AAAA,EAC/B,eAAiB,EAAA,sBAAA;AAAA,EACjB,YAAc,EAAA;AAChB;AAEa,MAAA,wBAAA,GAA2B,CACtC,KAGqE,KAAA;AACrE,EAAM,MAAA,SAAA,GAAY,OAAO,KAAS,IAAA,EAAA;AAGlC,EAAA,QAAQ,OAAO,MAAQ;AAAA,IACrB,KAAK,OAAS,EAAA;AACZ,MAAM,MAAA,EAAE,eAAiB,EAAA,YAAA,EAAc,qBAAsB,EAAA;AAAA;AAAA;AAAA,QAG3D,mBAAA,CAAoB,SAAS,CAAK,IAAA;AAAA,OAAA;AACpC,MAAO,OAAA,CAAC,eAAiB,EAAA,YAAA,EAAc,qBAAqB,CAAA;AAAA;AAC9D,IAEA,KAAK,QAAU,EAAA;AACb,MAAM,MAAA,EAAE,eAAiB,EAAA,YAAA,EAAc,qBAAsB,EAAA;AAAA;AAAA;AAAA,QAG3D,oBAAA,CAAqB,SAAS,CAAK,IAAA;AAAA,OAAA;AACrC,MAAO,OAAA,CAAC,eAAiB,EAAA,YAAA,EAAc,qBAAqB,CAAA;AAAA;AAC9D,IACA,KAAK,KAAW,CAAA,EAAA;AACd,MAAM,MAAA,EAAE,eAAiB,EAAA,YAAA,EAAiB,GAAA,iBAAA;AAC1C,MAAO,OAAA,CAAC,iBAAiB,YAAY,CAAA;AAAA;AACvC,IACA;AACE,MAAM,MAAA,KAAA;AAAA,QACJ,CAAA,wBAAA,EAA2B,OAAO,KAAK,CAAA,6CAAA;AAAA,OACzC;AAAA;AAEN;AAEO,MAAM,aAAgB,GAAA,CAC3B,KACA,EAAA,MAAA,EACA,QACA,OACG,KAAA;AACH,EAAM,MAAA,iBAAA,GAAoB,OAAO,OAAO,CAAA;AACxC,EAAM,MAAA,WAAA,GAAc,OAAO,iBAAkB,CAAA,GAAA,CAAI,CAAC,GAAQ,KAAA,GAAA,CAAI,IAAI,CAAC,CAAA;AACnE,EAAA,MAAM,OAAoC,EAAC;AAC3C,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,EAAO,CAAK,EAAA,EAAA;AAC9B,IAAM,MAAA,GAAA,GAAM,YAAY,CAAC,CAAA;AACzB,IAAA,IAAI,GAAK,EAAA;AACP,MAAA,IAAA,CAAK,CAAC,CAAI,GAAA,GAAA;AAAA,KACL,MAAA;AACL,MAAA;AAAA;AACF;AAEF,EAAO,OAAA,IAAA;AACT;;AC9FO,MAAMA,SAAkE,GAAA;AAAA,EAC7E,iBAAmB,EAAA;AAAA,IACjB,SAAS,sBAAuB,CAAA,GAAG,CAAE,CAAA,GAAA,CAAI,CAAC,GAAS,MAAA;AAAA,MACjD,GAAG,GAAA;AAAA,MACH,cAAgB,EAAA;AAAA,KAChB,CAAA,CAAA;AAAA,IACF,GAAK,EAAA,UAAA;AAAA,IACL,KAAO,EAAA,EAAE,MAAQ,EAAA,MAAA,EAAQ,OAAO,mBAAoB;AAAA;AAExD,CAAA;;ACCO,MAAM,OAA6C,GAAA;AAAA,EACxD,GAAGC,SAAA;AAAA,EACH,GAAGC,SAAA;AAAA,EACH,GAAGC;AACL;AAEA,MAAM,UAAoE,GAAA;AAAA,EACxE,GAAGF,SAAA;AAAA,EACH,GAAGC,SAAA;AAAA,EACH,GAAGC;AACL,CAAA;AAEO,MAAM,gBAAgB,MAAM;AAEtB,MAAA,SAAA,GAAY,CAAC,SAA4B,KAAA;AACpD,EAAI,IAAA,UAAA,CAAW,SAAS,CAAG,EAAA;AACzB,IAAA,OAAO,WAAW,SAAS,CAAA;AAAA;AAE7B,EAAM,MAAA,KAAA,CAAM,CAAiC,8BAAA,EAAA,SAAS,CAAE,CAAA,CAAA;AAC1D;;AC/BA,MAAM,YAAA,uBAAmB,GAAoC,EAAA;AAE7D,MAAM,YAAA,GAAe,CAAC,KAAA,EAAe,OAAoB,KAAA;AACvD,EAAO,OAAA,IAAI,OAAO,CAAI,CAAA,EAAA,OAAO,IAAI,GAAG,CAAA,CAAE,KAAK,KAAK,CAAA;AAClD,CAAA;AAEA,MAAM,eAAkB,GAAA,CAAC,KAAc,EAAA,MAAA,EAAgB,UAAU,EAAO,KAAA;AACtE,EAAI,IAAA,YAAA;AACJ,EAAM,MAAA,WAAA,GAAc,YAAa,CAAA,GAAA,CAAI,KAAK,CAAA;AAC1C,EAAA,IAAI,WAAe,IAAA,WAAA,CAAY,GAAI,CAAA,MAAM,CAAG,EAAA;AAC1C,IAAe,YAAA,GAAA,WAAA,CAAY,IAAI,MAAM,CAAA;AAAA,GAChC,MAAA;AACL,IAAM,MAAA,EAAE,IAAM,EAAA,GAAA,EAAQ,GAAA,KAAA;AACtB,IAAM,MAAA,GAAA,GAAM,IAAI,MAAM,CAAA;AACtB,IAAA,IAAI,QAAQ,KAAW,CAAA,EAAA;AACrB,MAAM,MAAA,KAAA,CAAM,SAAS,KAAM,CAAA,MAAA,CAAO,MAAM,KAAK,CAAA,eAAA,EAAkB,MAAM,CAAE,CAAA,CAAA;AAAA;AAEzE,IAAA,YAAA,GAAe,EAAC;AAChB,IAAM,MAAA,GAAA,uBAAU,GAAI,EAAA;AACpB,IAAA,KAAA,MAAW,OAAO,IAAM,EAAA;AACtB,MAAM,MAAA,KAAA,GAAQ,IAAI,GAAG,CAAA;AACrB,MAAA,IAAI,CAAC,GAAA,CAAI,GAAI,CAAA,KAAK,CAAG,EAAA;AACnB,QAAA,GAAA,CAAI,IAAI,KAAK,CAAA;AACb,QAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA;AACzB;AAEF,IAAA,YAAA,CAAa,IAAK,EAAA;AAClB,IAAA,IAAI,WAAa,EAAA;AACf,MAAY,WAAA,CAAA,GAAA,CAAI,QAAQ,YAAY,CAAA;AAAA,KAC/B,MAAA;AACL,MAAa,YAAA,CAAA,GAAA,CAAI,KAAO,kBAAA,IAAI,GAAI,CAAA,CAAC,CAAC,MAAQ,EAAA,YAAY,CAAC,CAAC,CAAC,CAAA;AAAA;AAC3D;AAEF,EAAA,OAAO,UACH,YAGG,CAAA,MAAA,CAAO,CAAC,KAAU,KAAA,YAAA,CAAa,MAAM,QAAS,EAAA,EAAG,OAAO,CAAC,CAAA,CACzD,MAAM,CAAG,EAAA,EAAE,IACd,YAAa,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA;AAC9B,CAAA;AAca,MAAA,eAAA,GAAkB,CAC7B,KACA,EAAA,MAAA,EACA,YAEA,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;AACvB,EAAA,MAAM,YAAe,GAAA,eAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,OAAO,CAAA;AAC3D,EAAM,MAAA,MAAA,GACJ,aAAa,MAAS,GAAA,EAAA,GAClB,cAAc,KAAM,CAAA,CAAA,EAAG,EAAE,CAAA,CAAE,GAAI,CAAA,CAAC,MAAM,CAAE,CAAA,QAAA,EAAU,CAClD,GAAA,YAAA,CAAa,IAAI,CAAC,CAAA,KAAM,CAAE,CAAA,QAAA,EAAU,CAAA;AAC1C,EAAA,UAAA,CAAW,MAAM,OAAA,CAAQ,MAAM,CAAA,EAAG,GAAG,CAAA;AACvC,CAAC;;;;;;;;;ACrEH,IAAA,gBAAA,EAAA,kBAAA,EAAA,YAAA,EAAA,cAAA,EAAA,MAAA,EAAA,yBAAA,EAAA,kBAAA,EAAA,eAAA;AAgCA,MAAM,EAAE,KAAQ,GAAAC,qBAAA;AAwBT,MAAM,+BAA+BC,4BAAgB,CAAA;AAAA,EAa1D,WAAY,CAAA;AAAA,IACV,IAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAA;AAAA,IACA,aAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,iBAAA;AAAA,IACA,GAAG;AAAA,GACsC,EAAA;AACzC,IAAI,IAAA,IAAA,KAAS,KAAa,CAAA,IAAA,KAAA,KAAU,KAAW,CAAA,EAAA;AAC7C,MAAA,MAAM,MAAM,sDAAsD,CAAA;AAAA;AAEpE,IAAM,KAAA,CAAA;AAAA,MACJ,GAAG,oBAAA;AAAA,MACH,IAAM,EAAA,IAAA,IAAQ,KAAO,EAAA,IAAA,IAAQ;AAAC,KAC/B,CAAA;AA9BH,IAAAT,cAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AAEA;AAAA,IAAAA,cAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,yBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,kBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AAuBE,IAAA,IAAA,CAAK,KAAQ,GAAA,IAAA;AAEb,IAAAG,cAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AACxB,IAAAA,cAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,UAAA,CAAA;AAC1B,IAAAA,cAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA;AACpB,IAAAA,cAAA,CAAA,IAAA,EAAK,cAAiB,EAAA,aAAA,CAAA;AACtB,IAAAA,cAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA;AACd,IAAAA,cAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,iBAAA,CAAA;AAC1B,IAAAA,cAAA,CAAA,IAAA,EAAK,eAAkB,EAAA,cAAA,CAAA;AAEvB,IAAA,IAAI,KAAO,EAAA;AACT,MAAA,IAAA,CAAK,cAAc,KAAM,CAAA,MAAA;AACzB,MAAM,KAAA,CAAA,EAAA,CAAG,QAAU,EAAA,IAAA,CAAK,MAAM,CAAA;AAC9B,MAAM,KAAA,CAAA,EAAA,CAAG,QAAU,EAAA,IAAA,CAAK,SAAS,CAAA;AAAA;AACnC;AACF,EAEA,MAAM,SACJ,CAAA,cAAA,EACA,QACA,EAAA;AACA,IAAA,MAAM,YAAe,GAAA,KAAA,CAAM,SAAU,CAAA,cAAA,EAAgB,QAAQ,CAAA;AAI7D,IAAA,IAAID,qBAAK,kBAAoB,CAAA,EAAA;AAC3B,MAAA,IAAA,CAAK,aAAaA,cAAK,CAAA,IAAA,EAAA,kBAAA,CAAA;AACvB,MAAAC,cAAA,CAAA,IAAA,EAAK,kBAAqB,EAAA,KAAA,CAAA,CAAA;AAAA;AAG5B,IAAO,OAAA,YAAA;AAAA;AACT,EAEA,WAAc,GAAA;AACZ,IAAA,KAAA,CAAM,WAAY,EAAA;AAClB,IAAAA,cAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA,CAAA;AAAA;AAChB,EAEA,IAAI,MAAM,KAAc,EAAA;AACtB,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA;AAAA;AAEhB,EACA,IAAI,KAAQ,GAAA;AACV,IAAA,OAAO,KAAM,CAAA,KAAA;AAAA;AACf,EAEA,IAAI,MAAM,KAA8C,EAAA;AACtD,IAAA,KAAA,CAAM,KAAQ,GAAA,KAAA;AAAA;AAChB,EAEA,IAAI,KAAQ,GAAA;AA1Id,IAAA,IAAA,EAAA;AA2II,IAAA,OAAA,CAAO,EAAK,GAAAD,cAAA,CAAA,IAAA,EAAA,eAAA,CAAA,KAAL,IAAuB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA,IAAA,CAAK,KAAM,CAAA,KAAA,CAAA;AAAA;AAC3C,EAEQ,iBAAoB,GAAA;AAC1B,IAAA,OAAO,KAAK,YAAa,CAAA,MAAA;AAAA,MACvB,CAAC,QAAkB,SAA6B,KAAA;AAC9C,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,SAAS,CAAG,EAAA;AAC5B,UAAS,KAAA,IAAA,CAAA,GAAI,UAAU,CAAC,CAAA,EAAG,KAAK,SAAU,CAAA,CAAC,GAAG,CAAK,EAAA,EAAA;AACjD,YAAM,MAAA,GAAA,GAAM,IAAK,CAAA,IAAA,CAAK,CAAC,CAAA;AACvB,YAAA,IAAI,GAAK,EAAA;AACP,cAAO,MAAA,CAAA,IAAA,CAAK,GAAI,CAAA,GAAG,CAAC,CAAA;AAAA;AACtB;AACF,SACK,MAAA;AACL,UAAM,MAAA,GAAA,GAAM,IAAK,CAAA,IAAA,CAAK,SAAS,CAAA;AAC/B,UAAA,IAAI,GAAK,EAAA;AACP,YAAO,MAAA,CAAA,IAAA,CAAK,GAAI,CAAA,GAAG,CAAC,CAAA;AAAA;AACtB;AAEF,QAAO,OAAA,MAAA;AAAA,OACT;AAAA,MACA;AAAC,KACH;AAAA;AACF,EAEA,SAAA,CACE,MACA,EAAA,UAAA,EACA,KACe,EAAA;AACf,IAAAA,cAAA,CAAA,IAAA,EAAK,MAAQ,CAAA,EAAA,MAAA,CAAO,MAAQ,EAAA,UAAA,EAAY,KAAK,CAAA;AAC7C,IAAO,OAAA,OAAA,CAAQ,QAAQ,IAAI,CAAA;AAAA;AAC7B,EAEA,MAAM,QACJ,UACY,EAAA;AACZ,IAAI,IAAAQ,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,MAAM,MAAA,UAAA,GAAaR,qBAAK,YAAc,CAAA,EAAA,IAAA;AAAA,QACpC,CAAC,OAAA,KAAY,OAAQ,CAAA,OAAA,KAAY,UAAW,CAAA;AAAA,OAC9C;AACA,MAAI,IAAA,UAAA,IAAcQ,6BAAqB,CAAA,UAAU,CAAG,EAAA;AAClD,QAAA,QAAQ,WAAW,OAAS;AAAA,UAC1B,KAAK,+BAAiC,EAAA;AACpC,YAAA,OAAO,WAAW,OAAQ,CAAA;AAAA,cACxB,GAAG,UAAA;AAAA,cACH,MAAM,IAAK,CAAA;AAAA,aACZ,CAAA;AAAA;AACH;AAEF,QAAA,OAAO,WAAW,OAAQ,CAAA;AAAA,UACxB,GAAG,UAAA;AAAA,UACH,WAAa,EAAA;AAAA,YACX,cAAA,EAAgB,KAAK,iBAAkB,EAAA;AAAA,YACvC,KAAA,EAAO,KAAK,WAAY,CAAA;AAAA,WAC1B;AAAA,UACA,MAAM,IAAK,CAAA;AAAA,SACZ,CAAA;AAAA;AACH;AAEF,IAAA,MAAM,KAAM,CAAA,CAAA,kCAAA,EAAqC,UAAW,CAAA,IAAI,CAAE,CAAA,CAAA;AAAA;AACpE,EAEA,MAAM,YACJ,UAGyB,EAAA;AACzB,IAAM,MAAA,UAAA,GAAaR,qBAAK,YAAc,CAAA,EAAA,IAAA;AAAA,MACpC,CAAC,OAAA,KACC,OAAQ,CAAA,OAAA,KAAa,UAAiC,CAAA;AAAA,KAC1D;AAEA,IAAI,IAAAS,4BAAA,CAAoB,UAAU,CAAG,EAAA;AACnC,MAAA,OAAO,YAAY,OAAQ,CAAA;AAAA,QACzB,GAAG,UAAA;AAAA,QACH,WAAa,EAAA;AAAA,UACX,cAAA,EAAgB,KAAK,iBAAkB,EAAA;AAAA,UACvC,KAAA,EAAO,KAAK,WAAY,CAAA;AAAA,SAC1B;AAAA,QACA,MAAM,IAAK,CAAA;AAAA,OACZ,CAAA;AAAA;AAGH,IAAO,OAAA,KAAA,CAAM,YAAY,UAAU,CAAA;AAAA;AACrC,EAEA,uBAAA,CAAwB,QAAgB,OAAqC,EAAA;AAC3E,IAAA,IAAIT,qBAAK,MAAQ,CAAA,EAAA;AACf,MAAA,OAAO,eAAgB,CAAAA,cAAA,CAAA,IAAA,EAAK,MAAQ,CAAA,EAAA,MAAA,EAAQ,OAAO,CAAA;AAAA,KAC9C,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ;AAAA,OACF;AAAA;AACF;AACF,EAEA,IAAI,UAAa,GAAA;AACf,IAAA,OAAO,KAAK,OAAQ,CAAA,UAAA;AAAA;AACtB,EAEA,IAAI,WAAW,UAAiD,EAAA;AAhPlE,IAAA,IAAA,EAAA,EAAA,EAAA;AAiPI,IAAA,IAAA,CAAK,OAAU,GAAA;AAAA,MACb,GAAG,IAAK,CAAA,OAAA;AAAA,MACR;AAAA,KACF;AAEA,IAAA,IAAI,UAAY,EAAA;AACd,MAAM,MAAA;AAAA,QACJ,gBAAA;AAAA,QACA,IAAA,EAAM,EAAE,UAAA,EAAY,QAAS;AAAA,OAC3B,GAAA,UAAA;AAEJ,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAA,CAAA,EAAA,GAAAA,cAAA,CAAA,IAAA,EAAK,wBAAL,IAA0B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA;AAAA,UACxB,WAAW,IAAK,CAAA,QAAA;AAAA,UAChB,eAAiB,EAAA,UAAA;AAAA,UACjB,IAAM,EAAA,oBAAA;AAAA,UACN,UAAY,EAAA,gBAAA;AAAA,UACZ,gBAAkB,EAAA;AAAA,SACpB,CAAA,CAAG,IAAK,CAAA,CAAC,QAAa,KAAA;AACpB,UAAK,IAAA,CAAA,IAAA;AAAA,YACH,qBAAA;AAAA,YACA;AAAA,WACF;AAAA,SACF,CAAA;AAAA;AACF,KACK,MAAA;AACL,MAAA,CAAA,EAAA,GAAAA,cAAA,CAAA,IAAA,EAAK,wBAAL,IAA0B,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,IAAA,CAAA,IAAA,EAAA;AAAA,QACxB,WAAW,IAAK,CAAA,QAAA;AAAA,QAChB,IAAM,EAAA;AAAA,OACR,CAAA,CAAG,KAAK,MAAoB;AAC1B,QAAA,IAAA,CAAK,KAAK,qBAAqB,CAAA;AAAA,OACjC,CAAA;AAAA;AACF;AAEJ;AA1NE,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,YAAA,GAAA,IAAA,OAAA,EAAA;AAEA,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,yBAAA,GAAA,IAAA,OAAA,EAAA;AACA,kBAAA,GAAA,IAAA,OAAA,EAAA;AACA,eAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;ACjEF,IAAA,KAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,OAAA;AAWO,MAAM,cAAcU,qBAA0B,CAAA;AAAA,EAOnD,WACE,CAAA,MAAA,EACA,IACA,EAAA,OAAA,EACA,eACA,EAAA;AACA,IAAM,KAAA,EAAA;AAZR,IAAAZ,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,MAAA,sBAAa,GAAoB,EAAA,CAAA;AACjC,IAAAA,cAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AASE,IAAAG,cAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAAA,cAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA;AAChB,IAAAA,cAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,IAAKA,cAAA,CAAA,IAAA,EAAA,WAAA,EAAc,OAAQ,CAAA,MAAA,CAAO,GAAG,CAAA,CAAA;AACrC,IAAA,IAAA,CAAK,UAAW,EAAA;AAChB,IAAA,eAAA,EAAiB,SAAS,IAAI,CAAA;AAC9B,IAAA,eAAA,EAAiB,SAAS,EAAE,IAAA,EAAM,CAAG,EAAA,EAAA,EAAI,KAAK,CAAA;AAAA;AAChD,EAEQ,UAAa,GAAA;AACnB,IAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAID,cAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AAC1C,MAAA,MAAM,MAAMA,cAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,CAAC,CAAA,CAAEA,qBAAK,WAAW,CAAA,CAAA;AAC1C,MAAKA,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,GAAI,CAAA,GAAA,EAAK,CAAC,CAAA;AAAA;AACxB;AACF,EAEA,IAAI,IAAO,GAAA;AACT,IAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,KAAA,CAAA;AAAA;AACd,EAEA,IAAI,GAAM,GAAA;AACR,IAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,QAAA,CAAA;AAAA;AACd,EAEA,IAAI,MAAS,GAAA;AACX,IAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AACd,EAEA,OAAO,GAA2B,EAAA;AAChC,IAAM,MAAA,KAAA,GAAQA,qBAAK,KAAM,CAAA,CAAA,MAAA;AACzB,IAAKA,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,KAAK,GAAG,CAAA;AACnB,IAAM,MAAA,GAAA,GAAM,GAAI,CAAAA,cAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA;AAChC,IAAKA,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA,CAAO,GAAI,CAAA,GAAA,EAAK,KAAK,CAAA;AAC1B,IAAK,IAAA,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACzB,EAEA,UAAU,GAAa,EAAA;AACrB,IAAA,MAAM,KAAQ,GAAAA,cAAA,CAAA,IAAA,EAAK,MAAO,CAAA,CAAA,GAAA,CAAI,GAAG,CAAK,IAAA,CAAA,CAAA;AACtC,IAAO,OAAAA,cAAA,CAAA,IAAA,EAAK,OAAM,KAAK,CAAA;AAAA;AACzB,EAEA,MAAA,CAAO,GAAa,EAAA,UAAA,EAAoB,KAA2B,EAAA;AACjE,IAAM,MAAA,QAAA,GAAWA,qBAAK,KAAM,CAAA,CAAA,SAAA;AAAA,MAC1B,CAAC,GAAA,KAAQ,GAAI,CAAAA,cAAA,CAAA,IAAA,EAAK,YAAW,CAAM,KAAA;AAAA,KACrC;AACA,IAAM,MAAA,QAAA,GAAWA,cAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,UAAU,CAAA;AACzC,IAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,MAAM,MAAA,GAAA,GAAMA,cAAK,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAA;AAC/B,MAAM,MAAA,MAAA,GAAS,IAAI,KAAM,EAAA;AACzB,MAAA,MAAA,CAAO,QAAQ,CAAI,GAAA,KAAA;AACnB,MAAKA,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAI,GAAA,MAAA;AACvB,MAAK,IAAA,CAAA,IAAA,CAAK,QAAU,EAAA,MAAA,EAAQ,UAAU,CAAA;AAAA;AACxC;AACF,EACA,UAAU,GAA2B,EAAA;AACnC,IAAM,MAAA,GAAA,GAAM,GAAI,CAAAA,cAAA,CAAA,IAAA,EAAK,WAAW,CAAA,CAAA;AAChC,IAAM,MAAA,QAAA,GAAWA,qBAAK,KAAM,CAAA,CAAA,SAAA;AAAA,MAC1B,CAACW,IAAAA,KAAQA,IAAI,CAAAX,cAAA,CAAA,IAAA,EAAK,YAAW,CAAM,KAAA;AAAA,KACrC;AACA,IAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACnB,MAAKA,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA,CAAM,QAAQ,CAAI,GAAA,GAAA;AACvB,MAAK,IAAA,CAAA,IAAA,CAAK,UAAU,GAAG,CAAA;AAAA;AACzB;AAEJ;AA7EE,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,WAAA,GAAA,IAAA,OAAA,EAAA;AACA,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AA2EK,SAAS,6BAA6B,MAA+B,EAAA;AAC1E,EAAA,OAAO,MAAO,CAAA,MAAA,CAAO,MAAO,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,IACnC,CAAC,GAAK,EAAA,GAAA,EAAK,KAAW,MAAA;AAAA,MACpB,GAAG,GAAA;AAAA,MACH,CAAC,GAAI,CAAA,IAAI,GAAG;AAAA,KACd,CAAA;AAAA,IACA;AAAC,GACH;AACF;AAWgB,SAAAY,oBAAA,CACd,SACA,SACA,EAAA;AACA,EAAO,OAAA,4BAAA,CAA6B,OAAQ,CAAA,SAAS,CAAC,CAAA;AACxD;AAEA,MAAM,iBAAoB,GAAA,CACxB,UACA,EAAA,EAAE,SAAS,KAAO,EAAA,KAAA,EAAO,EAAG,EAAA,EAC5B,EAAE,OAAA,EAAS,KAAO,EAAA,KAAA,EAAO,IACtB,KAAA;AACH,EAAA,MAAM,OAAO,KAAM,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,SAAS,UAAU,CAAA;AACxD,EAAA,MAAM,OAAO,KAAM,CAAA,IAAA,CAAK,CAAC,GAAQ,KAAA,GAAA,CAAI,SAAS,UAAU,CAAA;AACxD,EAAA,IAAI,QAAQ,IAAM,EAAA;AAChB,IAAI,IAAA,IAAA,CAAK,cAAmB,KAAA,IAAA,CAAK,cAAgB,EAAA;AAC/C,MAAA,OAAO,IAAK,CAAA,cAAA;AAAA,KACP,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,eAAe,EAAG,CAAA,KAAK,QAAQ,EAAG,CAAA,KAAK,qBAAqB,UAAU,CAAA,uBAAA;AAAA,OACxE;AAAA;AACF,aACS,IAAM,EAAA;AACf,IAAA,OAAO,IAAK,CAAA,cAAA;AAAA,aACH,IAAM,EAAA;AACf,IAAA,OAAO,IAAK,CAAA,cAAA;AAAA,GACP,MAAA;AACL,IAAA,MAAM,MAAM,CAA0B,wBAAA,CAAA,CAAA;AAAA;AAE1C,CAAA;AAIO,MAAM,UAAa,GAAA,CACxB,SACA,EAAA,MAAA,EACA,QACA,UACG,KAAA;AACH,EAAA,MAAM,EAAE,GAAA,EAAK,EAAI,EAAA,MAAA,EAAQ,SAAY,GAAA,MAAA;AACrC,EAAA,MAAM,EAAE,GAAA,EAAK,EAAI,EAAA,MAAA,EAAQ,SAAY,GAAA,MAAA;AACrC,EAAM,MAAA,EAAA,GAAK,GAAG,UAAU,CAAA;AACxB,EAAM,MAAA,EAAA,GAAK,GAAG,UAAU,CAAA;AAExB,EAAA,MAAM,kBAAkB,IAAI,GAAA;AAAA,IAC1B,CAAC,GAAG,OAAQ,CAAA,OAAA,EAAS,GAAG,OAAQ,CAAA,OAAO,CAAE,CAAA,GAAA,CAAI,CAAC,GAAA,KAAQ,GAAI,CAAA,IAAI,EAAE,IAAK;AAAA,GACvE;AAEA,EAAA,MAAM,cAA8B,GAAA;AAAA,IAClC,GAAK,EAAA,UAAA;AAAA,IACL,KAAO,EAAA,SAAA;AAAA,IACP,SAAS,KAAM,CAAA,IAAA,CAAK,eAAe,CAAE,CAAA,GAAA,CAAkB,CAAC,UAAgB,MAAA;AAAA,MACtE,IAAM,EAAA,UAAA;AAAA,MACN,cAAgB,EAAA,iBAAA,CAAkB,UAAY,EAAA,OAAA,EAAS,OAAO;AAAA,KAC9D,CAAA;AAAA,GACJ;AAEA,EAAA,MAAM,OAA+B,EAAC;AACtC,EAAM,MAAA,iBAAA,GAAoB,6BAA6B,cAAc,CAAA;AAErE,EAAW,KAAA,MAAA,GAAA,IAAO,OAAO,IAAM,EAAA;AAC7B,IAAA,MAAM,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,GAAI,CAAA,EAAE,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAM,MAAM,EAAC;AACb,MAAW,KAAA,MAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,OAAS,EAAA;AAC1C,QAAA,MAAM,KAAQ,GAAA,GAAA,CAAI,EAAG,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACjC,QAAA,GAAA,CAAI,iBAAkB,CAAA,MAAA,CAAO,IAAI,CAAC,CAAI,GAAA,KAAA;AAAA;AAExC,MAAW,KAAA,MAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,OAAS,EAAA;AAC1C,QAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,EAAG,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAClC,QAAA,GAAA,CAAI,iBAAkB,CAAA,MAAA,CAAO,IAAI,CAAC,CAAI,GAAA,KAAA;AAAA;AAGxC,MAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AACf;AAKF,EAAA,MAAM,QAAW,GAAA,IAAI,KAAM,CAAA,cAAA,EAAgB,MAAM,iBAAiB,CAAA;AAElE,EAAO,MAAA,CAAA,EAAA,CAAG,QAAU,EAAA,CAAC,GAAQ,KAAA;AAC3B,IAAA,MAAM,OAAO,MAAO,CAAA,SAAA,CAAU,OAAO,GAAI,CAAA,EAAE,CAAC,CAAC,CAAA;AAC7C,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,MAAM,MAAM,EAAC;AACb,MAAW,KAAA,MAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,OAAS,EAAA;AAC1C,QAAA,MAAM,KAAQ,GAAA,GAAA,CAAI,EAAG,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AACjC,QAAA,GAAA,CAAI,iBAAkB,CAAA,MAAA,CAAO,IAAI,CAAC,CAAI,GAAA,KAAA;AAAA;AAExC,MAAW,KAAA,MAAA,MAAA,IAAU,MAAO,CAAA,MAAA,CAAO,OAAS,EAAA;AAC1C,QAAA,MAAM,KAAQ,GAAA,IAAA,CAAK,EAAG,CAAA,MAAA,CAAO,IAAI,CAAC,CAAA;AAClC,QAAA,GAAA,CAAI,iBAAkB,CAAA,MAAA,CAAO,IAAI,CAAC,CAAI,GAAA,KAAA;AAAA;AAExC,MAAA,QAAA,CAAS,OAAO,GAAG,CAAA;AAAA;AACrB,GACD,CAAA;AAED,EAAO,MAAA,CAAA,EAAA,CAAG,QAAU,EAAA,CAAC,GAAQ,KAAA;AAC3B,IAAM,MAAA,QAAA,GAAW,IAAI,EAAE,CAAA;AACvB,IAAM,MAAA,SAAA,GAAY,QAAS,CAAA,SAAA,CAAU,QAAQ,CAAA;AAC7C,IAAA,IAAI,SAAW,EAAA;AACb,MAAM,MAAA,UAAA,GAAa,UAAU,KAAM,EAAA;AACnC,MAAA,KAAA,MAAW,EAAE,IAAA,EAAU,IAAA,MAAA,CAAO,OAAO,OAAS,EAAA;AAC5C,QAAI,IAAA,GAAA,CAAI,GAAG,IAAI,CAAC,MAAM,UAAW,CAAA,iBAAA,CAAkB,IAAI,CAAC,CAAG,EAAA;AACzD,UAAA,UAAA,CAAW,kBAAkB,IAAI,CAAC,IAAI,GAAI,CAAA,EAAA,CAAG,IAAI,CAAC,CAAA;AAAA;AACpD;AAEF,MAAA,QAAA,CAAS,UAAU,UAAU,CAAA;AAAA;AAC/B,GACD,CAAA;AAED,EAAO,OAAA,QAAA;AACT;;AC9NgB,SAAA,MAAA,CAAO,KAAa,GAAa,EAAA;AAC/C,EAAM,GAAA,GAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AACnB,EAAM,GAAA,GAAA,IAAA,CAAK,MAAM,GAAG,CAAA;AACpB,EAAO,OAAA,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,MAAY,GAAM,GAAA,GAAA,GAAM,EAAE,CAAI,GAAA,GAAA;AACvD;AASa,MAAA,gBAAA,GAAmC,CAAC,GAAK,EAAA,GAAA,KACpD,OAAO,GAAM,GAAA,GAAA,IAAO,KAAK,MAAO,EAAA;AAErB,MAAA,UAAA,GAAa,CACxB,aAAA,EACAC,iBACG,KAAA;AACH,EAAM,MAAA,GAAA,GAAMA,iBAAiB,CAAA,CAAA,EAAG,GAAI,CAAA;AACpC,EAAA,MAAM,OAAUA,GAAAA,iBAAAA,CAAiB,GAAM,GAAA,aAAA,EAAe,MAAM,CAAC,CAAA;AAC7D,EAAA,MAAM,GAAMA,GAAAA,iBAAAA,CAAiB,GAAM,GAAA,CAAA,EAAG,MAAM,aAAa,CAAA;AACzD,EAAM,MAAA,GAAA,GAAM,OAAU,GAAA,CAAA,GAAI,GAAM,GAAA,OAAA;AAChC,EAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,GAAA,GAAM,GAAG,CAAI,GAAA,GAAA;AACvC,EAAA,MAAM,MAAS,GAAA,IAAA,CAAK,KAAM,CAAA,GAAA,GAAM,GAAG,CAAI,GAAA,GAAA;AACvC,EAAO,OAAA,CAAC,QAAQ,MAAM,CAAA;AACxB,CAAA;AAEA,MAAM,MAAS,GAAA,CACb,GACA,EAAA,GAAA,EACA,iBACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,GAAM,GAAA,GAAA;AACrB,EAAA,OAAO,IAAK,CAAA,GAAA;AAAA,IACV,MAAM,eAAkB,GAAA,MAAA;AAAA,IACxB,MAAA,GAAS,IAAI,GAAM,GAAA;AAAA,GACrB;AACF,CAAA;AAEA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,GAAgB,KAAA;AAC3C,EAAA,OAAO,KAAK,GAAI,CAAA,GAAA,GAAM,IAAI,GAAM,GAAA,GAAA,IAAO,IAAI,GAAG,CAAA;AAChD,CAAA;AAEA,MAAM,MAAA,GAAS,CAAC,GAAA,EAAa,GAAgB,KAAA;AAC3C,EAAM,MAAA,MAAA,GAAS,KAAK,GAAI,CAAA,GAAA,GAAM,IAAI,GAAM,GAAA,GAAA,IAAO,IAAI,GAAG,CAAA;AACtD,EAAO,OAAA,MAAA,GAAS,CAAI,GAAA,GAAA,GAAM,CAAI,GAAA,MAAA;AAChC,CAAA;AAEA,MAAM,MAAS,GAAA,CACb,GACA,EAAA,GAAA,EACA,iBACA,aACG,KAAA;AACH,EAAA,MAAM,SAAS,GAAM,GAAA,GAAA;AACrB,EAAM,MAAA,GAAA,GAAM,SAAS,CAAI,GAAA,GAAA;AACzB,EAAA,MAAM,SAAS,IAAK,CAAA,GAAA;AAAA,IAClB,GAAM,GAAA,IAAA,CAAK,GAAI,CAAA,eAAA,GAAkB,QAAQ,EAAE,CAAA;AAAA,IAC3C,GAAM,GAAA;AAAA,GACR;AACA,EAAO,OAAA,MAAA,GAAS,IAAI,GAAM,GAAA,MAAA;AAC5B,CAAA;AAEO,MAAM,qBAAqB,CAChC,GAAA,EACA,GACA,EAAA,eAAA,EACA,eACAA,iBACG,KAAA;AACH,EAAA,IAAI,OAAU,GAAA,GAAA;AACd,EAAA,IAAI,KAAK,GAAI,CAAA,GAAA,GAAM,GAAG,CAAK,IAAA,CAAA,YAAa,GAAM,GAAA,CAAA;AAC9C,EAAA,MAAM,WAAc,GAAA,MAAA,CAAO,GAAK,EAAA,OAAA,EAAS,iBAAiB,aAAa,CAAA;AACvE,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,GAAA,EAAK,OAAO,CAAA;AACvC,EAAM,MAAA,WAAA,GAAc,MAAO,CAAA,GAAA,EAAK,OAAO,CAAA;AACvC,EAAA,MAAM,WAAc,GAAA,MAAA,CAAO,GAAK,EAAA,OAAA,EAAS,iBAAiB,aAAa,CAAA;AACvE,EAAM,MAAA,MAAA,GACJ,KAAK,KAAMA,CAAAA,iBAAAA,CAAiB,aAAa,WAAW,CAAA,GAAI,GAAG,CAAI,GAAA,GAAA;AACjE,EAAM,MAAA,MAAA,GACJ,KAAK,KAAMA,CAAAA,iBAAAA,CAAiB,aAAa,WAAW,CAAA,GAAI,GAAG,CAAI,GAAA,GAAA;AACjE,EAAO,OAAA,CAAC,QAAQ,MAAM,CAAA;AACxB,CAAA;;;;;AC/EA,MAAM,WAAA,GAAc,CAAC,KAAkB,KAAA;AACrC,EAAA,MAAM,UAAa,GAAA,MAAA,CAAO,CAAG,EAAA,GAAG,CAAI,GAAA,GAAA;AACpC,EAAA,MAAM,YAAY,MAAO,CAAA,CAAA,EAAG,EAAE,CAAA,IAAK,IAAI,CAAI,GAAA,CAAA,CAAA;AAC3C,EAAO,OAAA,KAAA,GAAQ,QAAQ,UAAa,GAAA,SAAA;AACtC,CAAA;AAEO,MAAM,mBAA+C,CAAA;AAAA,EAO1D,YAAY,cAA2C,EAAA;AANvD,IAAQd,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACR,IAAQA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACR,IAAAA,eAAA,CAAA,IAAA,EAAQ,UAAW,EAAA,KAAA,CAAA;AACnB,IAAQA,eAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACR,IAAQA,eAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AA8BR,IAAAA,eAAA,CAAA,IAAA,EAAA,QAAA,EAAS,MAAM;AACb,MAAI,IAAA,IAAA,CAAK,KAAS,IAAA,IAAA,CAAK,KAAO,EAAA;AAC5B,QAAM,MAAA,IAAA,GAAO,KAAK,KAAO,EAAA,IAAA;AACzB,QAAA,MAAM,EAAE,GAAK,EAAA,GAAA,EAAK,MAAM,GAAG,IAAA,KAAS,IAAK,CAAA,cAAA;AACzC,QAAI,IAAA,IAAA,IAAQ,IAAM,EAAA,MAAA,GAAS,CAAG,EAAA;AAC5B,UAAA,MAAM,WAAW,IAAK,CAAA,GAAA,CAAI,KAAK,KAAM,CAAA,EAAA,EAAI,KAAK,MAAM,CAAA;AACpD,UAAA,KAAA,IAAS,WAAW,IAAK,CAAA,KAAA,CAAM,IAAM,EAAA,QAAA,GAAW,UAAU,QAAY,EAAA,EAAA;AACpE,YAAA,IAAI,WAAc,GAAA,CAAA;AAClB,YAAA,MAAM,cAAiB,GAAA,MAAA,CAAO,CAAG,EAAA,EAAE,CAAI,GAAA,CAAA;AACvC,YAAA,IAAI,cAAgB,EAAA;AAGlB,cAAA,MAAM,UAAa,GAAA,IAAA,CAAK,KAAM,CAAA,IAAA,CAAK,QAAQ,CAAA;AAC3C,cAAM,MAAA,GAAA,GAAM,KAAK,QAAQ,CAAA;AAEzB,cAAI,IAAA,GAAA,KAAQ,KAAa,CAAA,IAAA,GAAA,KAAQ,KAAW,CAAA,EAAA;AAC1C,gBAAM,MAAA,EAAE,CAAC,GAAG,GAAG,YAAY,CAAC,GAAG,GAAG,UAAA,EAAe,GAAA,GAAA;AACjD,gBAAM,MAAA,CAAC,MAAQ,EAAA,MAAM,CAAI,GAAA,kBAAA;AAAA,kBACvB,UAAA;AAAA,kBACA,UAAA;AAAA,kBACA,EAAA;AAAA,kBACA,CAAA;AAAA,kBACA;AAAA,iBACF;AACA,gBAAA,UAAA,CAAW,GAAG,CAAI,GAAA,MAAA;AAClB,gBAAA,UAAA,CAAW,GAAG,CAAI,GAAA,MAAA;AAClB,gBAAA,IAAI,SAAS,KAAW,CAAA,EAAA;AACtB,kBAAM,MAAA,OAAA,GACJ,KAAK,KAAO,CAAA,CAAA,UAAA,GAAA,CAAc,SAAS,UAAc,IAAA,CAAA,IAAK,GAAG,CACzD,GAAA,GAAA;AACF,kBAAA,UAAA,CAAW,IAAI,CAAI,GAAA,OAAA;AAAA;AACrB;AAGF,cAAA,KAAA,MAAW,MAAU,IAAA,MAAA,CAAO,MAAO,CAAA,IAAI,CAAG,EAAA;AACxC,gBAAA,MAAM,iBAAoB,GAAA,MAAA,CAAO,CAAG,EAAA,EAAE,CAAI,GAAA,CAAA;AAC1C,gBAAA,IAAI,iBAAmB,EAAA;AACrB,kBAAe,WAAA,IAAA,CAAA;AACf,kBAAA,MAAM,QAAW,GAAA,WAAA,CAAY,GAAI,CAAA,MAAM,CAAW,CAAA;AAClD,kBAAA,IAAI,KAAK,KAAO,EAAA;AACd,oBAAA,UAAA,CAAW,MAAM,CAAI,GAAA,QAAA;AAAA;AACvB;AACF;AAEF,cAAI,IAAA,IAAA,CAAK,KAAS,IAAA,WAAA,GAAc,CAAG,EAAA;AACjC,gBAAK,IAAA,CAAA,KAAA,CAAM,UAAU,UAAU,CAAA;AAAA;AACjC;AACF;AACF;AACF;AAGF,MAAA,IAAI,KAAK,QAAU,EAAA;AACjB,QAAA,IAAA,CAAK,KAAQ,GAAA,MAAA,CAAO,UAAW,CAAA,IAAA,CAAK,QAAQ,GAAG,CAAA;AAAA;AACjD,KACF,CAAA;AAlFE,IAAA,IAAA,CAAK,cAAiB,GAAA,cAAA;AAAA;AACxB,EAEA,SAAS,KAAiB,EAAA;AACxB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AACb,IAAA,IAAI,CAAC,IAAA,CAAK,QAAY,IAAA,IAAA,CAAK,KAAO,EAAA;AAChC,MAAA,IAAA,CAAK,aAAc,EAAA;AAAA;AACrB;AACF,EAEA,SAAS,KAAc,EAAA;AACrB,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AACf,EAEQ,aAAgB,GAAA;AACtB,IAAA,IAAA,CAAK,QAAW,GAAA,IAAA;AAChB,IAAA,IAAA,CAAK,MAAO,EAAA;AAAA;AACd,EAEQ,YAAe,GAAA;AACrB,IAAA,IAAA,CAAK,QAAW,GAAA,KAAA;AAChB,IAAA,IAAI,KAAK,KAAO,EAAA;AACd,MAAO,MAAA,CAAA,YAAA,CAAa,KAAK,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,KAAQ,GAAA,KAAA,CAAA;AAAA;AACf;AA2DJ;;ACpGA,WAAe;AAAA,EACX,CAAC,OAAA,EAAQ,qBAAsB,EAAA,cAAA,EAAe,gBAAe,WAAW,CAAA;AAAA,EACxE,CAAC,OAAA,EAAQ,+BAAgC,EAAA,gBAAA,EAAiB,gBAAe,QAAQ,CAAA;AAAA,EACjF,CAAC,OAAA,EAAQ,oBAAqB,EAAA,gBAAA,EAAiB,EAAE,CAAA;AAAA,EACjD,CAAC,OAAA,EAAQ,gCAAiC,EAAA,cAAA,EAAe,gBAAe,SAAS,CAAA;AAAA,EACjF,CAAC,OAAA,EAAQ,oBAAqB,EAAA,gBAAA,EAAiB,gBAAe,SAAS,CAAA;AAAA,EACvE,CAAC,QAAA,EAAS,kBAAmB,EAAA,cAAA,EAAe,iBAAgB,WAAW,CAAA;AAAA,EACvE,CAAC,OAAA,EAAQ,mBAAoB,EAAA,gBAAA,EAAiB,gBAAe,SAAS,CAAA;AAAA,EACtE,CAAC,MAAA,EAAO,YAAa,EAAA,cAAA,EAAe,gBAAe,WAAW,CAAA;AAAA,EAC9D,CAAC,OAAA,EAAQ,kBAAmB,EAAA,gBAAA,EAAiB,gBAAe,SAAS,CAAA;AAAA,EACrE,CAAC,MAAA,EAAO,kBAAmB,EAAA,cAAA,EAAe,gBAAe,WAAW,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,kCAAmC,EAAA,cAAA,EAAe,gBAAe,SAAS,CAAA;AAAA,EACnF,CAAC,QAAA,EAAS,eAAgB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACpE,CAAC,QAAA,EAAS,+BAAgC,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACpF,CAAC,QAAA,EAAS,2BAA4B,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EAChF,CAAC,MAAA,EAAO,eAAgB,EAAA,gBAAA,EAAkB,gBAAe,WAAW,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,oCAAqC,EAAA,gBAAA,EAAkB,iBAAgB,QAAQ,CAAA;AAAA,EACxF,CAAC,QAAA,EAAS,sBAAuB,EAAA,cAAA,EAAgB,iBAAgB,WAAW,CAAA;AAAA,EAC5E,CAAC,OAAA,EAAQ,mBAAoB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACvE,CAAC,QAAA,EAAS,YAAa,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,MAAA,EAAO,SAAU,EAAA,cAAA,EAAgB,gBAAe,YAAY,CAAA;AAAA,EAC7D,CAAC,QAAA,EAAS,qBAAsB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EAC1E,CAAC,MAAA,EAAO,iBAAkB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,eAAgB,EAAA,gBAAA,EAAkB,iBAAgB,QAAQ,CAAA;AAAA,EACnE,CAAC,OAAA,EAAQ,eAAgB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACnE,CAAC,OAAA,EAAQ,oBAAqB,EAAA,gBAAA,EAAkB,gBAAe,WAAW,CAAA;AAAA,EAC1E,CAAC,OAAA,EAAQ,aAAc,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,UAAW,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAC/D,CAAC,MAAA,EAAO,iBAAkB,EAAA,cAAA,EAAe,EAAE,CAAA;AAAA,EAC3C,CAAC,OAAA,EAAQ,aAAc,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,kCAAmC,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACtF,CAAC,QAAA,EAAS,eAAgB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,cAAe,EAAA,gBAAA,EAAkB,iBAAgB,WAAW,CAAA;AAAA,EACrE,CAAC,QAAA,EAAS,gBAAiB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACnE,CAAC,OAAA,EAAQ,UAAW,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EAC9D,CAAC,OAAA,EAAQ,UAAW,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EAC5D,CAAC,QAAA,EAAS,eAAgB,EAAA,aAAA,EAAe,gBAAe,YAAY,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,sBAAuB,EAAA,gBAAA,EAAkB,gBAAe,WAAW,CAAA;AAAA,EAC5E,CAAC,OAAA,EAAQ,4BAA6B,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EACjF,CAAC,MAAA,EAAO,0BAA2B,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EAC7E,CAAC,QAAA,EAAS,gBAAiB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACnE,CAAC,QAAA,EAAS,oBAAqB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACzE,CAAC,OAAA,EAAQ,8CAA+C,EAAA,cAAA,EAAgB,iBAAgB,WAAW,CAAA;AAAA,EACnG,CAAC,OAAA,EAAQ,oCAAqC,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EACzF,CAAC,OAAA,EAAQ,eAAgB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,6BAA8B,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAClF,CAAC,QAAA,EAAS,sBAAuB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACzE,CAAC,QAAA,EAAS,eAAgB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACpE,CAAC,QAAA,EAAS,qBAAsB,EAAA,gBAAA,EAAkB,gBAAe,QAAQ,CAAA;AAAA,EACzE,CAAC,OAAA,EAAQ,UAAW,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EAC9D,CAAC,QAAA,EAAS,sBAAuB,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAC5E,CAAC,OAAA,EAAQ,iBAAkB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACrE,CAAC,QAAA,EAAS,4BAA6B,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACjF,CAAC,QAAA,EAAS,4BAA6B,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACjF,CAAC,QAAA,EAAS,2BAA4B,EAAA,aAAA,EAAe,gBAAe,YAAY,CAAA;AAAA,EAChF,CAAC,OAAA,EAAQ,kCAAmC,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACtF,CAAC,QAAA,EAAS,cAAe,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,4BAA6B,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EAC9E,CAAC,QAAA,EAAS,YAAa,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,iCAAkC,EAAA,cAAA,EAAe,EAAE,CAAA;AAAA,EAC5D,CAAC,MAAA,EAAO,oBAAqB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACvE,CAAC,OAAA,EAAQ,WAAY,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAChE,CAAC,OAAA,EAAQ,iBAAkB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACrE,CAAC,OAAA,EAAQ,iBAAkB,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EACtE,CAAC,QAAA,EAAS,cAAe,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACnE,CAAC,MAAA,EAAO,8BAA+B,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAClF,CAAC,OAAA,EAAQ,mCAAoC,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACvF,CAAC,QAAA,EAAS,wBAAyB,EAAA,gBAAA,EAAkB,iBAAgB,WAAW,CAAA;AAAA,EAChF,CAAC,QAAA,EAAS,wBAAyB,EAAA,gBAAA,EAAkB,iBAAgB,WAAW,CAAA;AAAA,EAChF,CAAC,OAAA,EAAQ,oBAAqB,EAAA,gBAAA,EAAiB,gBAAe,SAAS,CAAA;AAAA,EACvE,CAAC,OAAA,EAAQ,gBAAiB,EAAA,gBAAA,EAAkB,iBAAgB,WAAW,CAAA;AAAA,EACvE,CAAC,OAAA,EAAQ,iBAAkB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACnE,CAAC,MAAA,EAAO,wBAAyB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EAC3E,CAAC,OAAA,EAAQ,wBAAyB,EAAA,gBAAA,EAAiB,gBAAe,SAAS,CAAA;AAAA,EAC3E,CAAC,OAAA,EAAQ,0BAA2B,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EAC5E,CAAC,OAAA,EAAQ,gBAAiB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACpE,CAAC,QAAA,EAAS,oBAAqB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACzE,CAAC,OAAA,EAAQ,gBAAiB,EAAA,gBAAA,EAAkB,iBAAgB,QAAQ,CAAA;AAAA,EACpE,CAAC,OAAA,EAAQ,uBAAwB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACzE,CAAC,OAAA,EAAQ,YAAa,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,KAAM,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACzD,CAAC,MAAA,EAAO,oBAAqB,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACrE,CAAC,QAAA,EAAS,mBAAoB,EAAA,cAAA,EAAgB,iBAAgB,SAAS,CAAA;AAAA,EACvE,CAAC,MAAA,EAAO,qBAAsB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACxE,CAAC,OAAA,EAAQ,kCAAmC,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EACpF,CAAC,OAAA,EAAQ,UAAW,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EAC9D,CAAC,QAAA,EAAS,yBAA0B,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EAC9E,CAAC,OAAA,EAAQ,uBAAwB,EAAA,cAAA,EAAgB,iBAAgB,SAAS,CAAA;AAAA,EAC1E,CAAC,OAAA,EAAQ,mBAAoB,EAAA,gBAAA,EAAkB,gBAAe,QAAQ,CAAA;AAAA,EACtE,CAAC,OAAA,EAAQ,qBAAsB,EAAA,gBAAA,EAAkB,gBAAe,QAAQ,CAAA;AAAA,EACxE,CAAC,QAAA,EAAS,YAAa,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACjE,CAAC,OAAA,EAAQ,QAAS,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EAC5D,CAAC,MAAA,EAAO,oBAAqB,EAAA,cAAA,EAAgB,gBAAe,WAAW,CAAA;AAAA,EACvE,CAAC,QAAA,EAAS,eAAgB,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EACrE,CAAC,MAAA,EAAO,6BAA8B,EAAA,cAAA,EAAgB,gBAAe,SAAS,CAAA;AAAA,EAC9E,CAAC,OAAA,EAAQ,qBAAsB,EAAA,cAAA,EAAgB,gBAAe,YAAY,CAAA;AAAA,EAC1E,CAAC,OAAA,EAAQ,eAAgB,EAAA,gBAAA,EAAkB,gBAAe,SAAS,CAAA;AAAA,EACnE,CAAC,OAAA,EAAQ,UAAW,EAAA,gBAAA,EAAkB,iBAAgB,SAAS,CAAA;AAAA,EAC/D,CAAC,OAAA,EAAQ,gBAAiB,EAAA,gBAAA,EAAkB,iBAAgB,SAAS;AACzE,CAAA;;ACnGA,aAAe;AAAA,EACb,CAAC,WAAa,EAAA,MAAA,EAAQ,MAAO,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACnD,CAAC,gBAAkB,EAAA,MAAA,EAAQ,IAAK,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACxD,CAAC,gBAAkB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACvD,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACtD,CAAC,oBAAsB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,WAAa,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACpD,CAAC,cAAgB,EAAA,OAAA,EAAS,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACrD,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACrD,CAAC,uBAAyB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAChE,CAAC,aAAe,EAAA,KAAA,EAAO,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACrD,CAAC,WAAa,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACpD,CAAC,mBAAqB,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACzD,CAAC,cAAgB,EAAA,OAAA,EAAS,KAAM,EAAA,IAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACvD,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,iBAAmB,EAAA,MAAA,EAAQ,IAAK,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACvD,CAAC,4BAA8B,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACnE,CAAC,uBAAyB,EAAA,KAAA,EAAO,KAAM,EAAA,GAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC7D,CAAC,YAAc,EAAA,MAAA,EAAQ,IAAK,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACjD,CAAC,WAAa,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAClD,CAAC,YAAc,EAAA,MAAA,EAAQ,KAAM,EAAA,GAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACnD,CAAC,6BAA+B,EAAA,KAAA,EAAO,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACrE,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACvD,CAAC,uBAAyB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC9D,CAAC,sBAAwB,EAAA,MAAA,EAAQ,OAAM,CAAG,EAAA,IAAA,EAAM,OAAQ,UAAU,CAAA;AAAA,EAClE,CAAC,gBAAkB,EAAA,MAAA,EAAQ,KAAM,EAAA,IAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAO,KAAM,SAAS,CAAA;AAAA,EAC/D,CAAC,+BAAiC,EAAA,KAAA,EAAO,KAAM,EAAA,MAAA,EAAO,KAAM,SAAS,CAAA;AAAA,EACrE,CAAC,4BAA8B,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAClE,CAAC,qBAAuB,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,4BAA8B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACnE,CAAC,+BAAiC,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACtE,CAAC,oBAAsB,EAAA,KAAA,EAAO,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC1D,CAAC,mBAAqB,EAAA,MAAA,EAAQ,KAAM,EAAA,GAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC1D,CAAC,uBAAyB,EAAA,IAAA,EAAM,KAAM,EAAA,IAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC/D,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACrD,CAAC,4BAA8B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACrE,CAAC,kBAAoB,EAAA,MAAA,EAAQ,OAAM,CAAE,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAC7D,CAAC,qBAAuB,EAAA,MAAA,EAAQ,KAAM,EAAA,IAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,UAAY,EAAA,KAAA,EAAO,IAAK,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC9C,CAAC,4BAA8B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACnE,CAAC,UAAY,EAAA,MAAA,EAAQ,IAAK,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAChD,CAAC,sBAAwB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EAC7D,CAAC,+BAAiC,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACvE,CAAC,uBAAyB,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EAC/D,CAAC,YAAc,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACrD,CAAC,yBAA2B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAChE,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,iBAAmB,EAAA,MAAA,EAAQ,KAAM,EAAA,GAAA,EAAO,MAAO,UAAU,CAAA;AAAA,EAC1D,CAAC,uBAAyB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAChE,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,yBAA2B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAClE,CAAC,0BAAA,EAA4B,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACxD,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC9D,CAAC,YAAc,EAAA,MAAA,EAAQ,IAAK,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACjD,CAAC,+BAAiC,EAAA,MAAA,EAAQ,IAAK,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACrE,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACrD,CAAC,oBAAsB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACzD,CAAC,0BAA4B,EAAA,MAAA,EAAQ,IAAK,EAAA,EAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACjE,CAAC,YAAc,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,KAAM,SAAS,CAAA;AAAA,EAClD,CAAC,gCAAkC,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACrE,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,aAAe,EAAA,KAAA,EAAO,IAAK,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACjD,CAAC,uBAAyB,EAAA,IAAA,EAAM,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,qBAAuB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EAC5D,CAAC,YAAc,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACrD,CAAC,iBAAmB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACxD,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,YAAc,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACnD,CAAC,0BAA4B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACjE,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC/D,CAAC,iBAAmB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,2BAA6B,EAAA,KAAA,EAAM,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAChE,CAAC,qCAAsC,EAAA,MAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAK,SAAS,CAAA;AAAA,EACxE,CAAC,sBAAwB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,KAAM,SAAS,CAAA;AAAA,EAC7D,CAAC,YAAc,EAAA,MAAA,EAAQ,GAAI,EAAA,IAAA,EAAM,KAAM,SAAS,CAAA;AAAA,EAChD,CAAC,oBAAsB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACzD,CAAC,iBAAmB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,qBAAuB,EAAA,IAAA,EAAM,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAC5D,CAAC,kBAAoB,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACxD,CAAC,qBAAuB,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAC1D,CAAC,aAAe,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACnD,CAAC,gBAAkB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACvD,CAAC,gCAAkC,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACxE,CAAC,2BAA6B,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EAClE,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC/D,CAAC,aAAe,EAAA,MAAA,EAAQ,IAAK,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAClD,CAAC,WAAa,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACpD,CAAC,UAAY,EAAA,MAAA,EAAQ,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EAChD,CAAC,iBAAmB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACxD,CAAC,sBAAwB,EAAA,MAAA,EAAQ,GAAI,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAC7D,CAAC,aAAe,EAAA,IAAA,EAAM,KAAM,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAClD,CAAC,cAAgB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACvD,CAAC,8BAAgC,EAAA,KAAA,EAAO,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACnE,CAAC,+BAAiC,EAAA,IAAA,EAAM,KAAM,EAAA,KAAA,EAAM,OAAO,UAAU,CAAA;AAAA,EACrE,CAAC,oBAAsB,EAAA,MAAA,EAAQ,KAAM,EAAA,MAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,wBAA0B,EAAA,MAAA,EAAQ,KAAM,EAAA,IAAA,EAAK,MAAM,SAAS,CAAA;AAAA,EAC7D,CAAC,gBAAkB,EAAA,IAAA,EAAM,KAAM,EAAA,KAAA,EAAM,MAAM,SAAS,CAAA;AAAA,EACpD,CAAC,iBAAmB,EAAA,MAAA,EAAQ,KAAM,EAAA,IAAA,EAAK,MAAM,SAAS;AACxD,CAAA;;ACvGA,YAAe;AAAA,EACb,CAAC,WAAa,EAAA,MAAA,EAAQ,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,gBAAkB,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC5D,CAAC,gBAAkB,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC5D,CAAC,aAAe,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACzD,CAAC,mBAAqB,EAAA,OAAA,EAAS,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAChE,CAAC,WAAa,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACvD,CAAC,mBAAqB,EAAA,MAAA,EAAQ,OAAS,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC9D,CAAC,4BAA8B,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACxE,CAAC,6BAA+B,EAAA,OAAA,EAAS,OAAS,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACzE,CAAC,kBAAoB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EAC/D,CAAC,wBAA0B,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACnE,CAAC,gBAAkB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EAC7D,CAAC,qBAAuB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAChE,CAAC,uBAAyB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EACpE,CAAC,yBAA2B,EAAA,GAAA,EAAK,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAClE,CAAC,qBAAuB,EAAA,IAAA,EAAM,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EACjE,CAAC,cAAgB,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,OAAO,SAAS,CAAA;AAAA,EAC3D,CAAC,kBAAoB,EAAA,IAAA,EAAM,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC5D,CAAC,cAAgB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EAC3D,CAAC,gBAAkB,EAAA,IAAA,EAAM,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC1D,CAAC,YAAc,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EACzD,CAAC,kBAAoB,EAAA,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC5D,CAAC,uBAAyB,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACnE,CAAC,aAAe,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,OAAO,UAAU,CAAA;AAAA,EAC1D,CAAC,aAAe,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACxD,CAAC,WAAa,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACvD,CAAC,cAAgB,EAAA,IAAA,EAAM,OAAS,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACxD,CAAC,mBAAqB,EAAA,MAAA,EAAQ,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC9D,CAAC,oBAAsB,EAAA,KAAA,EAAO,OAAS,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EAC/D,CAAC,gBAAkB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC3D,CAAC,8BAAgC,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACzE,CAAC,iBAAmB,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EAC5D,CAAC,sBAAwB,EAAA,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAChE,CAAC,sBAAwB,EAAA,OAAA,EAAS,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAClE,CAAC,WAAa,EAAA,KAAA,EAAO,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACtD,CAAC,YAAc,EAAA,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,OAAO,UAAU,CAAA;AAAA,EACxD,CAAC,aAAe,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS,CAAA;AAAA,EACzD,CAAC,qBAAuB,EAAA,KAAA,EAAO,QAAU,EAAA,KAAA,EAAO,MAAM,SAAS,CAAA;AAAA,EAC/D,CAAC,aAAe,EAAA,MAAA,EAAQ,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAS;AAC3D,CAAA;;ACtCA,UAAe;AAAA,EACX,CAAC,cAAe,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAChG,CAAC,cAAe,EAAA,UAAA,EAAW,KAAO,EAAA,CAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,gBAAiB,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,wBAAyB,EAAA,IAAA,EAAO,GAAO,EAAA,SAAA,EAAU,QAAS,EAAA,OAAA,EAAQ,KAAM,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA,EAAE,SAAS,CAAA;AAAA,EACjG,CAAC,cAAe,EAAA,UAAA,EAAW,IAAO,EAAA,CAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAChG,CAAC,gBAAiB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACnG,CAAC,gBAAiB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAClG,CAAC,SAAU,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC5F,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,QAAA,EAAS,QAAQ,CAAA;AAAA,EACnG,CAAC,YAAa,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,WAAA,EAAY,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACtG,CAAC,iBAAkB,EAAA,UAAA,EAAW,EAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACpG,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAChG,CAAC,YAAa,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC9F,CAAC,YAAa,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,UAAW,EAAA,QAAA,EAAS,SAAU,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAChG,CAAC,OAAQ,EAAA,UAAA,EAAW,GAAM,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACxF,CAAC,UAAW,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,IAAA,EAAK,GAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC1F,CAAC,gBAAiB,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACnG,CAAC,MAAO,EAAA,UAAA,EAAW,KAAQ,EAAA,CAAA,GAAA,EAAO,SAAU,EAAA,SAAA,EAAU,QAAS,EAAA,IAAA,EAAK,IAAK,EAAA,QAAA,EAAS,QAAQ,CAAA;AAAA,EAC1F,CAAC,QAAS,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACzF,CAAC,cAAe,EAAA,UAAA,EAAW,IAAM,EAAA,CAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAChG,CAAC,MAAO,EAAA,UAAA,EAAW,KAAQ,EAAA,CAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,OAAQ,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACxF,CAAC,gBAAiB,EAAA,UAAA,EAAW,EAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACnG,CAAC,gBAAiB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACnG,CAAC,SAAA,EAAU,UAAW,EAAA,KAAA,EAAQ,GAAO,EAAA,SAAA,EAAU,QAAS,EAAA,OAAA,EAAQ,KAAM,EAAA,GAAA,EAAK,OAAQ,EAAA,CAAA,EAAE,SAAS,CAAA;AAAA,EAC9F,CAAC,cAAe,EAAA,UAAA,EAAW,IAAM,EAAA,CAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9F,CAAC,WAAY,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC7F,CAAC,iBAAkB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACnG,CAAC,YAAa,EAAA,UAAA,EAAW,GAAM,EAAA,CAAA,EAAM,QAAS,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC5F,CAAC,aAAc,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,IAAA,EAAK,GAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC7F,CAAC,iBAAkB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAClG,CAAC,OAAQ,EAAA,UAAA,EAAW,KAAO,EAAA,CAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,QAAA,EAAS,SAAS,CAAA;AAAA,EAC3F,CAAC,KAAA,EAAM,UAAW,EAAA,IAAA,EAAM,IAAO,EAAA,SAAA,EAAU,SAAU,EAAA,OAAA,EAAQ,IAAK,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA,EAAE,SAAS,CAAA;AAAA,EACxF,CAAC,cAAA,EAAe,UAAW,EAAA,IAAA,EAAO,IAAO,EAAA,SAAA,EAAU,OAAQ,EAAA,SAAA,EAAU,IAAK,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA,EAAE,SAAS,CAAA;AAAA,EAClG,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACjG,CAAC,aAAc,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC9F,CAAC,MAAO,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC1F,CAAC,cAAe,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/F,CAAC,cAAe,EAAA,UAAA,EAAW,KAAO,EAAA,CAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/F,CAAC,cAAe,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/F,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,QAAA,EAAS,QAAQ,CAAA;AAAA,EACjG,CAAC,aAAc,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC9F,CAAC,WAAY,EAAA,UAAA,EAAW,IAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC3F,CAAC,gBAAiB,EAAA,UAAA,EAAW,IAAO,EAAA,CAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,UAAW,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,GAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC5F,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAChG,CAAC,gBAAiB,EAAA,UAAA,EAAW,IAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACjG,CAAC,aAAc,EAAA,UAAA,EAAW,GAAQ,EAAA,CAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACjG,CAAC,KAAM,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,OAAQ,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACxF,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,QAAS,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/F,CAAC,MAAO,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,SAAA,EAAU,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACzF,CAAC,UAAW,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,MAAA,EAAO,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC/F,CAAC,UAAW,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9F,CAAC,iBAAkB,EAAA,UAAA,EAAW,EAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,WAAA,EAAY,KAAM,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC5G,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,QAAS,EAAA,KAAA,EAAM,IAAK,EAAA,QAAA,EAAS,SAAS,CAAA;AAAA,EAClG,CAAC,YAAa,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,WAAA,EAAY,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACpG,CAAC,aAAc,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAChG,CAAC,UAAW,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9F,CAAC,eAAgB,EAAA,UAAA,EAAW,EAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,SAAU,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,OAAQ,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC1F,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,SAAU,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC5F,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACjG,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACjG,CAAC,YAAa,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,GAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC9F,CAAC,YAAa,EAAA,UAAA,EAAW,EAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC9F,CAAC,cAAe,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACjG,CAAC,WAAY,EAAA,UAAA,EAAW,KAAQ,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,OAAQ,EAAA,WAAA,EAAY,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACpG,CAAC,eAAgB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAClG,CAAC,SAAU,EAAA,UAAA,EAAW,IAAO,EAAA,GAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC5F,CAAC,eAAgB,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,SAAA,EAAU,SAAU,EAAA,IAAA,EAAK,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAClG,CAAC,aAAc,EAAA,UAAA,EAAW,IAAM,EAAA,IAAA,EAAO,SAAU,EAAA,QAAA,EAAS,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EAC/F,CAAC,WAAY,EAAA,UAAA,EAAW,IAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,MAAA,EAAO,IAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC/F,CAAC,iBAAkB,EAAA,UAAA,EAAW,KAAO,EAAA,IAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,QAAQ,CAAA;AAAA,EACnG,CAAC,UAAW,EAAA,UAAA,EAAW,EAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,KAAM,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC9F,CAAC,OAAQ,EAAA,UAAA,EAAW,KAAQ,EAAA,CAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC3F,CAAC,eAAgB,EAAA,UAAA,EAAW,EAAO,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,KAAA,EAAM,KAAM,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACnG,CAAC,SAAU,EAAA,UAAA,EAAW,KAAQ,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAM,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EAC7F,CAAC,YAAa,EAAA,UAAA,EAAW,KAAQ,EAAA,CAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,MAAA,EAAO,GAAK,EAAA,OAAA,EAAQ,SAAS,CAAA;AAAA,EACjG,CAAC,SAAA,EAAU,UAAW,EAAA,IAAA,EAAO,GAAO,EAAA,SAAA,EAAU,QAAS,EAAA,OAAA,EAAQ,KAAM,EAAA,IAAA,EAAK,OAAQ,EAAA,CAAA,EAAE,SAAS,CAAA;AAAA,EAC7F,CAAC,QAAS,EAAA,UAAA,EAAW,KAAQ,EAAA,GAAA,EAAO,SAAU,EAAA,OAAA,EAAQ,SAAU,EAAA,IAAA,EAAM,IAAK,EAAA,OAAA,EAAQ,SAAS;AAChG,CAAA;;AC9EA,MAAM,wBAAwB,EAAC;AAC/B,KAAA,MAAW,OAAO,IAAM,EAAA;AAEtB,EAAA,MAAM,CAAC,GAAK,EAAA,IAAA,EAAM,SAAW,EAAA,MAAA,EAAQ,MAAM,CAAI,GAAA,GAAA;AAC/C,EAAA,MAAM,QAAW,GAAA,UAAA;AACjB,EAAA,MAAM,IAAO,GAAA,KAAA;AACb,EAAA,MAAM,SAAY,GAAA,CAAA;AAElB,EAAA,qBAAA,CAAsB,IAAK,CAAA,CAAE,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAW,EAAA,GAAA,EAAK,CAAG,EAAA,GAAG,IAAI,QAAQ,CAAA,CAAA,EAAI,IAAM,EAAA,MAAA,EAAQ,SAAU,CAAC,CAAA;AACtH;AAEA,KAAA,MAAW,OAAO,GAAK,EAAA;AAErB,EAAA,MAAM,CAAC,IAAM,EAAA,GAAA,EAAK,WAAW,MAAQ,IAAE,MAAM,CAAI,GAAA,GAAA;AACjD,EAAA,MAAM,QAAW,GAAA,MAAA;AACjB,EAAA,MAAM,IAAO,GAAA,KAAA;AACb,EAAA,MAAM,SAAY,GAAA,CAAA;AAElB,EAAA,qBAAA,CAAsB,IAAK,CAAA,CAAC,QAAS,EAAA,MAAA,EAAO,MAAM,SAAU,EAAA,GAAA,EAAI,CAAG,EAAA,GAAG,IAAI,QAAQ,CAAA,CAAA,EAAG,IAAK,EAAA,MAAA,EAAO,SAAU,CAAC,CAAA;AAC9G;AAEA,KAAA,MAAW,OAAO,MAAQ,EAAA;AAExB,EAAA,MAAM,CAAC,IAAM,EAAA,GAAA,EAAK,SAAW,EAAA,SAAA,EAAW,MAAM,CAAI,GAAA,GAAA;AAClD,EAAA,MAAM,QAAW,GAAA,YAAA;AACjB,EAAA,MAAM,IAAO,GAAA,KAAA;AACb,EAAA,MAAM,MAAS,GAAA,GAAA;AAEf,EAAA,qBAAA,CAAsB,IAAK,CAAA,CAAE,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAW,EAAA,GAAA,EAAK,CAAG,EAAA,GAAG,IAAI,QAAQ,CAAA,CAAA,EAAI,IAAM,EAAA,MAAA,EAAQ,SAAU,CAAC,CAAA;AACtH;AAEA,KAAA,MAAW,OAAO,KAAO,EAAA;AAEvB,EAAA,MAAM,CAAC,IAAM,EAAA,GAAA,EAAK,SAAU,IAAC,MAAM,CAAI,GAAA,GAAA;AACvC,EAAA,MAAM,QAAW,GAAA,QAAA;AACjB,EAAA,MAAM,IAAO,GAAA,KAAA;AACb,EAAA,MAAM,MAAS,GAAA,GAAA;AACf,EAAA,MAAM,SAAY,GAAA,CAAA;AAElB,EAAA,qBAAA,CAAsB,IAAK,CAAA,CAAE,QAAU,EAAA,MAAA,EAAQ,MAAM,SAAW,EAAA,GAAA,EAAK,CAAG,EAAA,GAAG,IAAI,QAAQ,CAAA,CAAA,EAAI,IAAM,EAAA,MAAA,EAAQ,SAAU,CAAC,CAAA;AACtH;;AChBA,MAAM,OAAEe,KAAK,WAAAC,SAAA,OAASC,KAAK,WAAAC,SAAA,EAAS,MAAS,GAAAL,oBAAA;AAAA,EAC3CV,SAAA;AAAA,EACA;AACF,CAAA;AACA,MAAMgB,uBAAA,GAAwB,IAAI,mBAAoB,CAAA;AAAA,OACpDJ,KAAA;AAAA,WACAC,SAAA;AAAA,OACAC,KAAA;AAAA,WACAC,SAAA;AAAA,EACA;AACF,CAAC,CAAA;AAED,MAAM,SAA0B,EAAC;AAGjC,KAAA,MAAW,OAAI,SAAU,EAAA,GAAG,KAAK,qBAAuB,EAAA;AACtD,EAAA,MAAM,SAAY,GAAA,UAAA,CAAW,MAAO,CAAA,SAAS,CAAC,CAAA;AAC9C,EAAI,IAAA,CAAC,KAAM,CAAA,SAAS,CAAE,EAAA;AACtB,IAAA,MAAM,CAACH,IAAKE,EAAAA,IAAG,CAAI,GAAA,UAAA,CAAW,GAAE,gBAAgB,CAAA;AAChD,IAAMC,MAAAA,QAAAA,GAAU,MAAO,CAAA,GAAA,EAAM,GAAI,CAAA;AACjC,IAAMF,MAAAA,QAAAA,GAAU,MAAO,CAAA,GAAA,EAAM,GAAI,CAAA;AACjC,IAAA,MAAM,KAAQ,GAAA,SAAA,GAAY,MAAO,CAAA,CAAA,EAAG,CAAC,CAAI,GAAA,EAAA;AACzC,IAAA,MAAMI,KAAO,GAAA,SAAA,GAAY,MAAO,CAAA,CAAA,EAAG,CAAC,CAAI,GAAA,EAAA;AACxC,IAAA,MAAM,IAAO,GAAA,SAAA,GAAY,MAAO,CAAA,CAAA,EAAG,CAAC,CAAI,GAAA,EAAA;AACxC,IAAA,MAAM,KAAQ,GAAA,GAAA;AACd,IAAA,MAAM,QAAW,GAAA,OAAA;AACjB,IAAA,MAAA,CAAO,IAAK,CAAA;AAAA,MACVH,IAAAA;AAAA,MACAC,QAAAA;AAAA,MACAH,IAAAA;AAAA,MACAC,QAAAA;AAAA,MACA,KAAA;AAAA,MACAI,KAAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA,GAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAGH;AAEA,MAAMC,gBAAc,IAAI,KAAA;AAAA,EACtBlB,SAAQ,CAAA,MAAA;AAAA,EACR,MAAA;AAAA,EACAU,oBAAA,CAAmCV,WAAS,QAAQ,CAAA;AAAA,EACpDgB;AACF,CAAA;;;;;;;;;;;;AC7EA,IAAA,gBAAA,EAAA,gBAAA,EAAA,iBAAA,EAAA,iBAAA;AAUO,MAAM,iBAAkB,CAAA;AAAA,EAM7B,WACE,CAAA,eAAA,EACA,gBACA,EAAA,eAAA,EACA,gBACA,EAAA;AAVF,IAAApB,cAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,iBAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,iBAAA,CAAA;AA4BA,IAAAC,eAAA,CAAA,IAAA,EAAA,yBAAA,EAAoD,CAAC,SAAc,KAAA;AACjE,MAAA,IAAIC,qBAAK,gBAAkB,CAAA,EAAA;AACzB,QAAM,MAAA,cAAA,GAAiB,IAAK,CAAA,wBAAA,CAAyB,SAAS,CAAA;AAC9D,QAAI,IAAA,cAAA,CAAe,WAAW,CAAG,EAAA;AAC/B,UAAAA,cAAA,CAAA,IAAA,EAAK,kBAAiB,UAAa,GAAA,KAAA,CAAA;AAAA,SACrC,MAAA,IAAW,cAAe,CAAA,MAAA,KAAW,CAAG,EAAA;AACtC,UAAAA,cAAA,CAAA,IAAA,EAAK,kBAAiB,UAAa,GAAA;AAAA,YACjC,QAAQ,CAAG,EAAAA,cAAA,CAAA,IAAA,EAAK,iBAAgB,CAAO,IAAA,EAAA,cAAA,CAAe,CAAC,CAAC,CAAA,CAAA;AAAA,WAC1D;AAAA,SACK,MAAA;AACL,UAAAA,cAAA,CAAA,IAAA,EAAK,kBAAiB,UAAa,GAAA;AAAA,YACjC,MAAA,EAAQ,GAAGA,cAAK,CAAA,IAAA,EAAA,gBAAA,CAAgB,SAAS,cAAe,CAAA,IAAA,CAAK,KAAK,CAAC,CAAA,EAAA;AAAA,WACrE;AAAA;AACF;AACF,KACF,CAAA;AAnCE,IAAAC,cAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AACxB,IAAAA,cAAA,CAAA,IAAA,EAAK,gBAAmB,EAAA,eAAA,CAAA;AACxB,IAAAA,cAAA,CAAA,IAAA,EAAK,iBAAoB,EAAA,gBAAA,CAAA;AACzB,IAAAA,cAAA,CAAA,IAAA,EAAK,iBAAoB,EAAA,gBAAA,CAAA;AAEzB,IAAiB,gBAAA,CAAA,EAAA,CAAG,eAAiB,EAAA,IAAA,CAAK,uBAAuB,CAAA;AAAA;AACnE,EAEA,OAAU,GAAA;AAAA;AAEV,EAEA,MAAS,GAAA;AACP,IAAAD,cAAA,CAAA,IAAA,EAAK,iBAAmB,CAAA,EAAA,cAAA;AAAA,MACtB,eAAA;AAAA,MACA,IAAK,CAAA;AAAA,KACP;AACA,IAAAA,cAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,UAAA,GAAa,EAAE,MAAA,EAAQ,EAAG,EAAA;AAAA;AAClD,EAmBQ,yBAAyB,SAAsB,EAAA;AACrD,IAAM,MAAA,IAAA,GAAQA,qBAAK,iBAA6C,CAAA,CAAA,WAAA;AAChE,IAAA,MAAM,eAAe,SAAU,CAAA,MAAA;AAAA,MAC7B,CAAC,MAAM,QAA4B,KAAA;AACjC,QAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,QAAQ,CAAG,EAAA;AAC3B,UAAS,KAAA,IAAA,CAAA,GAAI,SAAS,CAAC,CAAA,EAAG,KAAK,QAAS,CAAA,CAAC,GAAG,CAAK,EAAA,EAAA;AAC/C,YAAM,MAAA,GAAA,GAAM,KAAK,CAAC,CAAA;AAClB,YAAA,IAAI,GAAK,EAAA;AACP,cAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AACf;AACF,SACK,MAAA;AACL,UAAM,MAAA,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,UAAA,IAAI,GAAK,EAAA;AACP,YAAA,IAAA,CAAK,KAAK,GAAG,CAAA;AAAA;AACf;AAEF,QAAO,OAAA,IAAA;AAAA,OACT;AAAA,MACA;AAAC,KACH;AAEA,IAAA,MAAM,GAAM,GAAAqB,uBAAA,CAAerB,cAAK,CAAA,IAAA,EAAA,iBAAA,CAAA,CAAkB,OAAO,CAAA;AACzD,IAAM,MAAA,GAAA,uBAAU,GAAI,EAAA;AACpB,IAAM,MAAA,QAAA,GAAW,GAAI,CAAAA,cAAA,CAAA,IAAA,EAAK,iBAAiB,CAAA,CAAA;AAC3C,IAAA,KAAA,MAAW,OAAO,YAAc,EAAA;AAC9B,MAAI,GAAA,CAAA,GAAA,CAAI,GAAI,CAAA,QAAQ,CAAC,CAAA;AAAA;AAEvB,IAAO,OAAA,KAAA,CAAM,KAAK,GAAG,CAAA;AAAA;AAEzB;AA9EE,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,iBAAA,GAAA,IAAA,OAAA,EAAA;AACA,iBAAA,GAAA,IAAA,OAAA,EAAA;;;;;;;;;;;;ACdF,IAAA,MAAA,EAAA,KAAA,EAAA,mBAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,EAAA,cAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,eAAA;AAuDa,MAAA,UAAA,GAAa,CACxB,UAAA,KAC8C,aAAiB,IAAA;AAEpD,MAAA,eAAA,GAAkB,CAC7B,UAAA,KAC8C,aAAiB,IAAA;AAiB1D,MAAM,SAA8D,CAAA;AAAA,EAWzE,WAAY,CAAA;AAAA,IACV,KAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAU,EAAA;AAAA,GACqB,EAAA;AAjBjC,IAAAF,cAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,KAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,mBAAA,sBAA0B,GAA+B,EAAA,CAAA;AACzD,IAAAA,cAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,EAAoC,EAAC,CAAA;AACrC,IAAAA,cAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAAA,cAAA,CAAA,IAAA,EAAA,gBAAA,sBAAoD,GAAI,EAAA,CAAA;AAkBxD,IAAQ,aAAA,CAAA,IAAA,EAAA,oBAAA,EAAqB,CAAC,UAAuB,KAAA;AACnD,MAAA,KAAA,MAAW,CAAC,SAAA,EAAW,aAAa,CAAA,IAAKE,qBAAK,gBAAkB,CAAA,EAAA;AAC9D,QAAA,IAAI,cAAc,CAAC,CAAA,CAAE,UAAW,CAAA,QAAA,OAAe,UAAY,EAAA;AACzD,UAAKA,cAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,OAAO,SAAS,CAAA;AAAA,SACjC,MAAA;AACL,UAAA,MAAM,KAAQ,GAAA,aAAA,CAAc,CAAC,CAAA,CAAE,UAAW,CAAA,KAAA;AAC1C,UAAA,IAAI,KAAO,EAAA;AACT,YAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,KAAA,EAAO,QAAQ,CAAK,EAAA,EAAA;AACtC,cAAA,IAAI,KAAM,CAAA,CAAC,CAAE,CAAA,gBAAA,KAAqB,UAAY,EAAA;AAC5C,gBAAA,KAAA,CAAM,OAAO,CAAC,CAAA;AAAA;AAChB;AACF;AAEF,UAAc,aAAA,CAAA,CAAC,CAAE,CAAA,UAAA,CAAW,KAAQ,GAAA,KAAA;AAAA;AACtC;AACF,KACF,CAAA;AAaA,IAAW,aAAA,CAAA,IAAA,EAAA,UAAA,EAAA,CACT,iBACA,QACG,KAAA;AACH,MAAA,MAAM,cAAyC,EAAC;AAChD,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,QAAA,CAAS,QAAQ,CAAK,EAAA,EAAA;AACxC,QAAA,MAAM,gBAAgB,eAAgB,CAAA,GAAA,CAAI,QAAS,CAAA,CAAC,EAAE,OAAO,CAAA;AAC7D,QAAA,IAAI,aAAe,EAAA;AACjB,UAAc,aAAA,CAAA,OAAA,CAAQ,CAAC,EAAE,UAAA,EAAY,YAAY,EAAE,MAAA,IAAe,KAAA;AAChE,YAAA,IAAI,WAAW,WAAa,EAAA;AAC1B,cAAA,MAAM,OAAmC,GAAA;AAAA,gBACvC,gBAAkB,EAAA,UAAA;AAAA,gBAClB,UAAY,EAAA,UAAA;AAAA,gBACZ,IAAA,EAAM,SAAS,CAAC;AAAA,eAClB;AACA,cAAA,WAAA,CAAY,KAAK,OAAO,CAAA;AAAA;AAC1B,WACD,CAAA;AAAA;AACH;AAEF,MAAO,OAAA,WAAA;AAAA,KACT,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,mBAAA,EAAoB,CAClB,OAAA,KAEA,IAAI,OAAA,CAAQ,CAAC,OAAY,KAAA;AACvB,MAAI,IAAA,OAAA,CAAQ,SAAS,oBAAsB,EAAA;AACzC,QAAA,MAAM,EAAE,eAAA,EAAiB,SAAW,EAAA,gBAAA,EAAkB,YACpD,GAAA,OAAA;AACF,QAAM,MAAA,eAAA,GAAkB,IAAK,CAAA,uBAAA,CAAwB,SAAS,CAAA;AAC9D,QAAM,MAAA,gBAAA,GAAmB,IAAK,CAAA,uBAAA,CAAwB,UAAU,CAAA;AAChE,QAAA,MAAM,oBAAoB,IAAI,iBAAA;AAAA,UAC5B,eAAA;AAAA,UACA,gBAAA;AAAA,UACA,eAAA;AAAA,UACA;AAAA,SACF;AAEA,QAAKA,cAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,GAAI,CAAA,SAAA,EAAW,iBAAiB,CAAA;AAEzD,QAAQ,OAAA,CAAA;AAAA,UACN,gBAAkB,EAAA,SAAA;AAAA,UAClB,OAAS,EAAA,eAAA;AAAA,UACT,aAAe,EAAA,gBAAA;AAAA,UACf,gBAAkB,EAAA,UAAA;AAAA,UAClB,IAAM,EAAA;AAAA,SAC+B,CAAA;AAAA,OAClC,MAAA;AACL,QAAM,MAAA,iBAAA,GAAoBA,qBAAK,mBAAoB,CAAA,CAAA,GAAA;AAAA,UACjD,OAAQ,CAAA;AAAA,SACV;AACA,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAA,iBAAA,CAAkB,MAAO,EAAA;AACzB,UAAKA,cAAA,CAAA,IAAA,EAAA,mBAAA,CAAA,CAAoB,MAAO,CAAA,OAAA,CAAQ,SAAS,CAAA;AAAA,SAC5C,MAAA;AACL,UAAM,MAAA,KAAA;AAAA,YACJ,CAAA,qDAAA,EAAwD,QAAQ,SAAS,CAAA;AAAA,WAC3E;AAAA;AAEF,QAAQ,OAAA,EAAA;AAAA;AACV,KACD,CAAA,CAAA;AAEH,IAAmB,aAAA,CAAA,IAAA,EAAA,kBAAA,EAAA,CACjB,SACA,EAAA,QAAA,EACA,MACG,KAAA;AACH,MAAM,MAAA,cAAA,GAAiB,CAACsB,UAAsB,KAAA;AAC5C,QAAM,MAAA,aAAA,GAAgBtB,cAAK,CAAA,IAAA,EAAA,YAAA,CAAA,GAAesB,UAAc,CAAA;AACxD,QAAA,OAAO,kBAAkB,KACrB,CAAA,GAAA,KAAA,CAAA,GACA,KAAK,QAAS,CAAAtB,cAAA,CAAA,IAAA,EAAK,mBAAkB,aAAa,CAAA;AAAA,OACxD;AAEA,MAAM,MAAA,iBAAA,GAAoB,IAAK,CAAA,oBAAA,CAAqB,SAAS,CAAA;AAC7D,MAAM,MAAA,KAAA,GAAQA,cAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,SAAS,CAAA;AACpC,MAAM,MAAA,YAAA,GAAeA,cAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,SAAS,CAAA;AAEpD,MAAM,MAAA,UAAA,GAAyB,IAAI,sBAAuB,CAAA;AAAA,QACxD,GAAG,MAAA;AAAA,QACH,iBAAA;AAAA,QACA,cAAA;AAAA,QACA,SACE,EAAAA,cAAA,CAAA,IAAA,EAAK,QAAS,CAAA,CAAA,SAAS,MAAM,KACzB,CAAA,GAAAA,cAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,SAAS,EAAE,MAAO,CAAA,GAAA,GACxCA,cAAK,CAAA,IAAA,EAAA,QAAA,CAAA,CAAS,SAAS,CAAE,CAAA,GAAA;AAAA,QAC/B,OAAO,KAAS,IAAA,YAAA;AAAA,QAChB,IAAA,EAAMA,cAAK,CAAA,IAAA,EAAA,MAAA,CAAA,GAAS,SAAS,CAAA;AAAA,QAC7B,WAAA,EAAa,IAAK,CAAA,WAAA,CAAY,SAAS,CAAA;AAAA,QACvC,eAAeA,cAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA,QACpB,QAAA;AAAA,QACA,mBAAmB,IAAK,CAAA;AAAA,OACzB,CAAA;AAED,MAAW,UAAA,CAAA,EAAA,CAAG,cAAgB,EAAA,IAAA,CAAK,kBAAkB,CAAA;AAErD,MAAA,MAAM,qBAAwB,GAAAA,cAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAS,CAAA;AACjE,MAAA,MAAM,YAAe,GAAA;AAAA,QACnB,YAAY,UAAW,CAAA,QAAA;AAAA,QACvB;AAAA,OACF;AACA,MAAA,IAAI,qBAAuB,EAAA;AACzB,QAAA,qBAAA,CAAsB,KAAK,YAAY,CAAA;AAAA,OAClC,MAAA;AACL,QAAAA,cAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,GAAA,CAAI,SAAW,EAAA,CAAC,YAAY,CAAC,CAAA;AAAA;AAGrD,MAAO,OAAA,UAAA;AAAA,KACT,CAAA;AA8CA,IAAA,aAAA,CAAA,IAAA,EAAQ,qBAAuC,CAAC;AAAA,MAC9C,QAAA;AAAA,MACA,MAAA;AAAA,MACA;AAAA,KACqB,KAAA;AACrB,MAAA,MAAM,KAAQ,GAAAA,cAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,QAAA,CAAS,KAAU,CAAA;AAC9C,MAAA,IAAI,KAAO,EAAA;AACT,QAAO,OAAA,eAAA,CAAgB,KAAO,EAAA,MAAA,EAAQ,OAAO,CAAA;AAAA,OACxC,MAAA;AACL,QAAM,MAAA,KAAA;AAAA,UACJ,CAAA,EAAGA,qBAAK,KAAK,CAAA,CAAA,kCAAA,EAAqC,SAAS,MAAM,CAAA,CAAA,EAC/D,SAAS,KACX,CAAA;AAAA,SACF;AAAA;AACF,KACF,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgC,OAAO,UAAe,KAAA;AAC5D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,WAAa,EAAA,IAAA,EAAS,GAAA,UAAA;AAC9B,QAAA,MAAM,iBAAiB,WAAY,CAAA,cAAA;AACnC,QAAA,MAAM,QAAQ,WAAY,CAAA,KAAA;AAE1B,QAAA,IAAI,kBAAkB,KAAO,EAAA;AAC3B,UAAA,MAAM,SAAY,GAAAA,cAAA,CAAA,IAAA,EAAK,OAAQ,CAAA,CAAA,KAAA,CAAM,KAAU,CAAA;AAC/C,UAAA,IAAI,SAAW,EAAA;AACb,YAAA,MAAM,eAAe,IAAK,CAAA,kCAAA;AAAA,cACxB,SAAA;AAAA,cACA;AAAA,aACF;AACA,YAAM,MAAA,gBAAA,GAAmB,CAAW,QAAA,EAAAuB,aAAA,EAAM,CAAA,CAAA;AAC1C,YAAKvB,cAAA,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAI,GAAA,YAAA;AAE1C,YAAO,OAAA;AAAA,cACL,MAAQ,EAAA;AAAA,gBACN,eAAiB,EAAA,MAAA;AAAA,gBACjB,KAAO,EAAA;AAAA,kBACL,QAAQ,KAAM,CAAA,MAAA;AAAA,kBACd,KAAO,EAAA;AAAA,iBACT;AAAA,gBACA,aAAa,SAAU,CAAA,MAAA;AAAA,gBACvB,IAAM,EAAA;AAAA,eACR;AAAA,cACA,OAAS,EAAA,wBAAA;AAAA,cACT,IAAM,EAAA,qBAAA;AAAA,cACN;AAAA,aACF;AAAA,WACK,MAAA;AACL,YAAO,OAAA;AAAA,cACL,MAAA,EAAQ,EAAE,IAAA,EAAM,WAAY,EAAA;AAAA,cAC5B,gBAAkB,EAAA,IAAA;AAAA,cAClB,KAAO,EAAA,gBAAA;AAAA,cACP,OAAS,EAAA,qBAAA;AAAA,cACT,IAAM,EAAA,oBAAA;AAAA,cACN;AAAA,aACF;AAAA;AACF;AACF;AAEF,MAAA,MAAM,MAAM,gDAAgD,CAAA;AAAA,KAC9D,CAAA;AAEA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAAQ,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAO,OAAAR,cAAA,CAAA,IAAA,EAAK,kBAAiB,IAAI,CAAA;AACjC,QAAO,OAAA;AAAA,UACL,MAAA,EAAQ,EAAE,IAAA,EAAM,gBAAiB,EAAA;AAAA,UACjC,MAAQ,EAAA,KAAA;AAAA,UACR,aAAa,EAAC;AAAA,UACd,QAAQ,EAAC;AAAA,UACT,IAAM,EAAA,uBAAA;AAAA,UACN;AAAA,SACF;AAAA,OACK,MAAA;AACL,QAAA,MAAM,MAAM,gCAAgC,CAAA;AAAA;AAC9C,KACF,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,gBAAA,EAAiC,OAAO,UAAe,KAAA;AAC7D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,IAAI,CAAA;AAC9C,QAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,UAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,UAAA,MAAM,EAAE,MAAA,EAAQ,KAAM,EAAA,GAAI,UAAW,CAAA,WAAA;AACrC,UAAA,MAAM,QAAW,GAAA,YAAA,CAAa,GAAI,CAAA,YAAA,CAAa,OAAO,GAAG,CAAA;AACzD,UAAa,YAAA,CAAA,MAAA;AAAA,YACX,MAAA,CAAO,MAAO,CAAA,QAAQ,CAAC,CAAA;AAAA,YACvB,MAAA;AAAA,YACA;AAAA,WACF;AAAA;AAEF,QAAO,OAAA;AAAA,UACL,MAAQ,EAAA;AAAA,YACN,IAAM,EAAA;AAAA,WACR;AAAA,UACA,OAAS,EAAA,+BAAA;AAAA,UACT,IAAM,EAAA,qBAAA;AAAA,UACN;AAAA,SACF;AAAA;AAEF,MAAA,MAAM,MAAM,wDAAwD,CAAA;AAAA,KACtE,CAAA;AAGA;AAAA,IAAQ,aAAA,CAAA,IAAA,EAAA,eAAA,EAAgC,OAAO,UAAe,KAAA;AAC5D,MAAI,IAAA,UAAA,CAAW,UAAU,CAAG,EAAA;AAC1B,QAAM,MAAA,EAAE,MAAS,GAAA,UAAA;AACjB,QAAM,MAAA,YAAA,GAAe,IAAK,CAAA,eAAA,CAAgB,IAAI,CAAA;AAC9C,QAAA,MAAM,EAAE,KAAA,EAAU,GAAA,YAAA,CAAa,MAAO,CAAA,KAAA;AACtC,QAAM,MAAA,SAAA,GAAYA,cAAK,CAAA,IAAA,EAAA,OAAA,CAAA,CAAQ,KAAU,CAAA;AACzC,QAAA,IAAI,SAAW,EAAA;AACb,UAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,YAAa,CAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACjD,YAAM,MAAA,MAAA,GAAS,YAAa,CAAA,IAAA,CAAK,CAAC,CAAA;AAClC,YAAA,SAAA,CAAU,UAAU,MAAM,CAAA;AAAA;AAG5B,UAAO,OAAA;AAAA,YACL,MAAQ,EAAA;AAAA,cACN,IAAM,EAAA;AAAA,aACR;AAAA,YACA,SAAW,EAAA,YAAA;AAAA,YACX,OAAS,EAAA,yBAAA;AAAA,YACT,IAAM,EAAA,qBAAA;AAAA,YACN;AAAA,WACF;AAAA;AACF;AAEF,MAAA,MAAM,MAAM,oCAAoC,CAAA;AAAA,KAClD,CAAA;AAuBA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAgCF,cAAA,CAAA,IAAA,EAAA,eAAA,EAAA;AAAA,MAC9B;AAAA,QACE,OAAS,EAAA,wBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,+BAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,yBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA,OAChB;AAAA,MACA;AAAA,QACE,OAAS,EAAA,sBAAA;AAAA,QACT,SAAS,IAAK,CAAA;AAAA;AAChB,KACF,CAAA;AA5WE,IAAA,YAAA,CAAA,IAAA,EAAK,MAAS,EAAA,KAAA,CAAA;AACd,IAAA,YAAA,CAAA,IAAA,EAAK,KAAQ,EAAA,IAAA,CAAA;AACb,IAAA,YAAA,CAAA,IAAA,EAAK,QAAW,EAAA,OAAA,CAAA;AAChB,IAAA,YAAA,CAAA,IAAA,EAAK,cAAiB,EAAA,QAAA,CAAA;AACtB,IAAA,YAAA,CAAA,IAAA,EAAK,OAAU,EAAA,MAAA,CAAA;AACf,IAAA,YAAA,CAAA,IAAA,EAAK,YAAe,EAAA,WAAA,CAAA;AAAA;AACtB,EAoBA,wBAAwB,IAA0B,EAAA;AAChD,IAAA,KAAA,MAAW,aAAiB,IAAAE,cAAA,CAAA,IAAA,EAAK,gBAAiB,CAAA,CAAA,MAAA,EAAU,EAAA;AAC1D,MAAA,KAAA,MAAW,EAAE,UAAA,EAAY,UAAW,EAAA,IAAK,aAAe,EAAA;AACtD,QAAA,IAAI,eAAe,IAAM,EAAA;AACvB,UAAO,OAAA,UAAA;AAAA;AACT;AACF;AAEF,IAAM,MAAA,KAAA,CAAM,CAA4B,yBAAA,EAAA,IAAI,CAAyB,uBAAA,CAAA,CAAA;AAAA;AACvE,EAkHA,YAAY,SAAc,EAAA;AACxB,IAAM,MAAA,aAAA,GAAgBA,cAAK,CAAA,IAAA,EAAA,cAAA,CAAA,GAAiB,SAAS,CAAA;AACrD,IAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,aAAa,CAAG,EAAA;AAChC,MAAO,OAAAA,cAAA,CAAA,IAAA,EAAK,eAAgB,CAAA,CAAA,MAAA,CAAO,aAAa,CAAA;AAAA,KAC3C,MAAA;AACL,MAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,eAAA,CAAA;AAAA;AACd;AACF,EAEA,IAAI,aAAgB,GAAA;AAClB,IAAA,OAAO,MAAM,IAAK,CAAA,iBAAA;AAAA;AACpB,EAEA,IAAc,eAAkB,GAAA;AAC9B,IAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,gBAAA,CAAA;AAAA;AACd,EAEA,IAAc,MAAS,GAAA;AACrB,IAAA,OAAOA,cAAK,CAAA,IAAA,EAAA,OAAA,CAAA;AAAA;AACd,EAEQ,gBAAgB,gBAA0B,EAAA;AAChD,IAAM,MAAA,YAAA,GAAeA,cAAK,CAAA,IAAA,EAAA,gBAAA,CAAA,CAAiB,gBAAgB,CAAA;AAC3D,IAAA,IAAI,YAAc,EAAA;AAChB,MAAO,OAAA,YAAA;AAAA,KACF,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,+CAA+C,gBAAgB,CAAA;AAAA,OACjE;AAAA;AACF;AACF,EAEQ,qBAAqB,SAAc,EAAA;AACzC,IAAM,MAAA,MAAA,GACJA,qBAAK,QAAS,CAAA,CAAA,SAAS,KAAK,IAAK,CAAA,eAAA,CAAgB,SAAS,CAAG,EAAA,MAAA;AAC/D,IAAA,IAAI,MAAQ,EAAA;AACV,MAAA,OAAO,MAAO,CAAA,OAAA;AAAA,KACT,MAAA;AACL,MAAM,MAAA,KAAA;AAAA,QACJ,CAA+B,4BAAA,EAAAA,cAAA,CAAA,IAAA,EAAK,KAAK,CAAA,CAAA,OAAA,EAAU,SAAS,CAAA;AAAA,OAC9D;AAAA;AACF;AACF,EAuIU,mCACR,EAAE,IAAA,EAAM,GAAK,EAAA,MAAA,IACb,cACA,EAAA;AACA,IAAM,MAAA,QAAA,GAAW,GAAI,CAAA,MAAA,CAAO,GAAG,CAAA;AAC/B,IAAA,MAAM,cAAsC,EAAC;AAC7C,IAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,cAAA,CAAe,QAAQ,CAAK,EAAA,EAAA;AAC9C,MAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,IAAA,CAAK,QAAQ,CAAK,EAAA,EAAA;AACpC,QAAA,IAAI,KAAK,CAAC,CAAA,CAAE,QAAQ,CAAM,KAAA,cAAA,CAAe,CAAC,CAAG,EAAA;AAC3C,UAAY,WAAA,CAAA,IAAA,CAAK,IAAK,CAAA,CAAC,CAAC,CAAA;AAAA;AAC1B;AACF;AAEF,IAAA,OAAO,IAAI,KAAM,CAAA,MAAA,EAAQ,WAAa,EAAA,4BAAA,CAA6B,MAAM,CAAC,CAAA;AAAA;AA0B9E;AA/XE,MAAA,GAAA,IAAA,OAAA,EAAA;AACA,KAAA,GAAA,IAAA,OAAA,EAAA;AACA,mBAAA,GAAA,IAAA,OAAA,EAAA;AACA,QAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AACA,OAAA,GAAA,IAAA,OAAA,EAAA;AACA,cAAA,GAAA,IAAA,OAAA,EAAA;AACA,YAAA,GAAA,IAAA,OAAA,EAAA;AACA,gBAAA,GAAA,IAAA,OAAA,EAAA;AAqWA,eAAA,GAAA,IAAA,OAAA,EAAA;;AC9aF,MAAMwB,iBAAkB,GAAA;AAAA,EACtB,QAAU,EAAA,KAAA,CAAA;AAAA,EACV,MAAQ,EAAA,KAAA,CAAA;AAAA,EACR,aAAe,EAAA,KAAA,CAAA;AAAA,EACf,wBAA0B,EAAA,KAAA,CAAA;AAAA,EAC1B,iBAAmB,EAAA,KAAA,CAAA;AAAA,EACnB,4BAA8B,EAAA,KAAA,CAAA;AAAA,EAC9B,iBAAmB,EAAA,KAAA;AACrB,CAAA;AAGA,MAAM,kBAAA,GAAqB,CAAC,SAC1B,KAAA,MAAA,CAAO,OAAOtB,SAAQ,CAAA,SAAS,CAAE,CAAA,OAAO,CAAE,CAAA,MAAA;AAAA,EACxC,CAAC,GAAK,EAAA,GAAA,EAAK,KAAU,KAAA;AACnB,IAAI,GAAA,CAAA,GAAA,CAAI,IAAI,CAAI,GAAA,KAAA;AAChB,IAAO,OAAA,GAAA;AAAA,GACT;AAAA,EACA;AACF,CAAA;AAEF,MAAM,SAAiD,GAAA;AAAA,EACrD,QAAA,EAAU,mBAAmB,UAAU,CAAA;AAAA,EACvC,MAAA,EAAQ,mBAAmB,QAAQ,CAAA;AAAA,EACnC,aAAA,EAAe,mBAAmB,eAAe,CAAA;AAAA,EACjD,wBAAA,EAA0B,mBAAmB,0BAA0B,CAAA;AAAA,EACvE,iBAAA,EAAmB,mBAAmB,mBAAmB,CAAA;AAAA,EACzD,4BAA8B,EAAA,kBAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,iBAAA,EAAmB,mBAAmB,mBAAmB;AAC3D,CAAA;AAMA,MAAM,oBAAoB,IAAI,KAAA;AAAA,EAC5BA,SAAQ,CAAA,iBAAA;AAAA,EACR,qBAAA;AAAA,EACA,SAAU,CAAA;AACZ,CAAA;AAKA,MAAM,gBAAgB,IAAI,KAAA;AAAA,EACxBA,SAAQ,CAAA,aAAA;AAAA,EACR,EAAC;AAAA,EACD,SAAU,CAAA;AACZ,CAAA;AAEA,IAAI,eAAkB,GAAA,CAAA;AAItB,MAAM,2BAA2B,IAAI,KAAA;AAAA,EACnCA,SAAQ,CAAA,wBAAA;AAAA,EACR,EAAC;AAAA,EACD,SAAU,CAAA;AACZ,CAAA;AAGO,MAAM,yBAAyB,CACpC,QAAA,EACA,YACA,IAAO,GAAA,KAAA,EACP,SAAS,YACN,KAAA;AAAA,EACH,QAAA;AAAA,EACA,UAAA;AAAA,EACA,CAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAS,eAAiB,EAAA,CAAA,CAAA;AAAA,EAC1B,IAAA;AAAA,EACA,MAAA;AAAA,EACA,GAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF;AAEA,SAAS,mBAAA,CAAoB,UAAkB,UAAoB,EAAA;AACjE,EAAM,MAAA,gBAAA,GAAmB,sBAAuB,CAAA,QAAA,EAAU,UAAU,CAAA;AAEpE,EAAA,aAAA,CAAc,OAAO,gBAAgB,CAAA;AAErC,EAAA,MAAM,EAAE,QAAA,EAAU,GAAI,EAAA,GAAI,mBAAmB,mBAAmB,CAAA;AAChE,EAAM,MAAA,YAAA,GAAe,kBAAkB,IAAK,CAAA,MAAA;AAAA,IAC1C,CAAC,CAAA,KAAM,CAAE,CAAA,GAAG,CAAM,KAAA;AAAA,GACpB;AAEA,EAAM,MAAA,EAAE,UAAW,EAAA,GAAI,SAAU,CAAA,aAAA;AAEjC,EAAA,YAAA,CAAa,OAAQ,CAAA,CAAC,KAAK,WAAA,IAAe,GAAA,MAAS,QAAU,EAAA,SAAS,CAAM,KAAA;AAC1E,IAAA,MAAM,IAAO,GAAA,EAAA;AACb,IAAA,MAAM,UAAa,GAAA,EAAA;AACnB,IAAA,MAAM,UAAa,GAAA,EAAA;AACnB,IAAA,MAAM,aAAgB,GAAA,CAAA;AACtB,IAAA,MAAM,WAAc,GAAA,CAAA;AACpB,IAAA,MAAM,SAAY,GAAA,CAAA;AAClB,IAAA,MAAM,WAAc,GAAA,CAAA;AACpB,IAAA,MAAM,eAAkB,GAAA,EAAA;AACxB,IAAA,MAAM,IAAO,GAAA,KAAA;AACb,IAAA,MAAM,KAAQ,GAAA,OAAA;AAEd,IAAM,MAAA,gBAAA,GAAmB,iBAAiB,UAAU,CAAA;AACpD,IAAA,MAAM,2BAAoD,GAAA;AAAA,MACxD,IAAA;AAAA,MACA,UAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,gBAAA;AAAA,MACA,CAAA,EAAG,gBAAgB,CAAA,CAAA,EAAI,GAAG,CAAA,CAAA;AAAA,MAC1B,UAAA;AAAA,MACA,aAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA,eAAA;AAAA,MACA,QAAA;AAAA,MACA,GAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA;AAAA,MACA;AAAA,KACF;AACA,IAAA,wBAAA,CAAyB,OAAO,2BAA2B,CAAA;AAAA,GAC5D,CAAA;AAGD,EAAA,OAAO,iBAAiB,UAAU,CAAA;AACpC;AAEA,MAAM,cAAA,GAAiC,OAAO,UAAe,KAAA;AAC3D,EAAI,IAAAM,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,IAAA,MAAM,MAAM,CAAgC,8BAAA,CAAA,CAAA;AAAA,GACvC,MAAA;AACL,IAAA,MAAM,MAAM,CAAmC,iCAAA,CAAA,CAAA;AAAA;AAEnD,CAAA;AAEA,MAAM,mBAAsB,GAAA,CAC1B,MACA,EAAA,IAAA,EACA,MAC4B,MAAA;AAAA,EAC5B,IAAM,EAAA,uBAAA;AAAA,EACN,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,gBAAA;AAAA,IACN,GAAG;AAAA,GACL;AAAA,EACA,MAAQ,EAAA,KAAA;AAAA,EACR,aAAa,EAAC;AAAA,EACd,MAAA;AAAA,EACA;AACF,CAAA,CAAA;AAEA,MAAM,YAAA,GAA+B,OAAO,UAAe,KAAA;AACzD,EAAI,IAAAA,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,IAAM,MAAA,EAAE,MAAQ,EAAA,IAAA,EAAS,GAAA,UAAA;AACzB,IAAM,MAAA,CAAC,gBAAgB,CAAI,GAAA,MAAA;AAC3B,IAAc,aAAA,CAAA,MAAA,CAAO,gBAAkB,EAAA,QAAA,EAAU,WAAW,CAAA;AAC5D,IAAO,OAAA,mBAAA,CAAoB,QAAQ,IAAI,CAAA;AAAA,GAClC,MAAA;AACL,IAAA,MAAM,MAAM,CAAiC,+BAAA,CAAA,CAAA;AAAA;AAEjD,CAAA;AACA,MAAM,aAAA,GAAgC,OAAO,UAAe,KAAA;AAC1D,EAAI,IAAAA,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,IAAM,MAAA,EAAE,MAAQ,EAAA,IAAA,EAAS,GAAA,UAAA;AACzB,IAAM,MAAA,CAAC,gBAAgB,CAAI,GAAA,MAAA;AAC3B,IAAc,aAAA,CAAA,MAAA,CAAO,gBAAkB,EAAA,QAAA,EAAU,YAAY,CAAA;AAC7D,IAAO,OAAA,mBAAA,CAAoB,QAAQ,IAAI,CAAA;AAAA,GAClC,MAAA;AACL,IAAA,MAAM,MAAM,CAAkC,gCAAA,CAAA,CAAA;AAAA;AAElD,CAAA;AAEA,MAAM,eAAA,GAAkC,OAAO,UAAe,KAAA;AAC5D,EAAI,IAAAA,6BAAA,CAAqB,UAAU,CAAG,EAAA;AACpC,IAAM,MAAA,EAAE,MAAQ,EAAA,IAAA,EAAS,GAAA,UAAA;AACzB,IAAM,MAAA,CAAC,QAAU,EAAA,UAAU,CAAI,GAAA,MAAA;AAC/B,IAAM,MAAA,GAAA,GAAM,mBAAoB,CAAA,QAAA,EAAU,UAAU,CAAA;AACpD,IAAA,OAAO,mBAAoB,CAAA,MAAA,EAAQ,IAAM,EAAA,EAAE,KAAK,CAAA;AAAA,GAC3C,MAAA;AACL,IAAA,MAAM,MAAM,CAAoC,kCAAA,CAAA,CAAA;AAAA;AAEpD,CAAA;AAEO,MAAMiB,QAA0C,GAAA;AAAA,EACrD,UAAU,IAAI,KAAA;AAAA,IACZvB,SAAQ,CAAA,QAAA;AAAA,IACR;AAAA,MACE,CAAC,UAAU,CAAC,CAAA;AAAA,MACZ,CAAC,kBAAkB,CAAC,CAAA;AAAA,MACpB,CAAC,QAAQ,CAAC,CAAA;AAAA,MACV,CAAC,OAAO,CAAC,CAAA;AAAA,MACT,CAAC,iBAAiB,CAAC;AAAA,KACrB;AAAA,IACA,SAAU,CAAA;AAAA,GACZ;AAAA,EACA,QAAQ,IAAI,KAAA;AAAA,IACVA,SAAQ,CAAA,MAAA;AAAA,IACR;AAAA,MACE,CAAC,YAAA,EAAc,YAAc,EAAA,CAAA,EAAG,CAAC,CAAA;AAAA,MACjC,CAAC,MAAA,EAAQ,MAAQ,EAAA,CAAA,EAAG,CAAC,CAAA;AAAA,MACrB,CAAC,UAAA,EAAY,UAAY,EAAA,CAAA,EAAG,CAAC,CAAA;AAAA,MAC7B,CAAC,QAAA,EAAU,QAAU,EAAA,CAAA,EAAG,CAAC;AAAA,KAC3B;AAAA,IACA,SAAU,CAAA;AAAA,GACZ;AAAA,EACA,iBAAA;AAAA,EACA,aAAA;AAAA,EACA,wBAAA;AAAA,EACA,4BAA8B,EAAA,UAAA;AAAA,IAC5B,EAAE,MAAA,EAAQ,QAAU,EAAA,KAAA,EAAO,8BAA+B,EAAA;AAAA,IAC1D,wBAAA;AAAA,IACAkB,aAAA;AAAA,IACA;AAAA,GACF;AAAA,EACA,mBAAmB,IAAI,KAAA;AAAA,IACrBlB,SAAQ,CAAA,iBAAA;AAAA,IACR;AAAA,MACE,CAAC,qBAAqB,CAAC,CAAA;AAAA,MACvB,CAAC,aAAa,CAAC,CAAA;AAAA,MACf,CAAC,SAAS,CAAC,CAAA;AAAA,MACX,CAAC,QAAQ,CAAC;AAAA,KACZ;AAAA,IACA,SAAU,CAAA;AAAA;AAEd;AAEA,MAAMwB,UAA4D,GAAA;AAAA,EAChE,GAAGF,iBAAA;AAAA,EACH,iBAAmB,EAAA;AAAA,IACjB,EAAE,UAAY,EAAA,UAAA,EAAY,QAAU,EAAA,IAAA,EAAM,SAAS,QAAS;AAAA;AAEhE,CAAA;AAEA,MAAMG,OAAuD,GAAA;AAAA,EAC3D,GAAGH,iBAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN,IAAM,EAAA,MAAA;AAAA,IACN,KAAO,EAAA;AAAA,MACL;AAAA,QACE,OAAS,EAAA,eAAA;AAAA,QACT,MAAQ,EAAA,EAAA;AAAA,QACR,IAAM,EAAA,YAAA;AAAA,QACN,OAAS,EAAA;AAAA;AACX;AACF;AAEJ,CAAA;AAEA,MAAMI,UAA+D,GAAA;AAAA,EACnE,GAAGJ,iBAAA;AAAA,EACH,MAAQ,EAAA;AAAA,IACN;AAAA,MACE,OAAS,EAAA,cAAA;AAAA,MACT,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EACA,aAAe,EAAA;AAAA,IACb;AAAA,MACE,OAAS,EAAA,cAAA;AAAA,MACT,OAAS,EAAA;AAAA,KACX;AAAA,IACA;AAAA,MACE,OAAS,EAAA,eAAA;AAAA,MACT,OAAS,EAAA;AAAA;AACX,GACF;AAAA,EACA,4BAA8B,EAAA;AAAA,IAC5B;AAAA,MACE,OAAS,EAAA,gBAAA;AAAA,MACT,OAAS,EAAA;AAAA;AACX;AAEJ,CAAA;AAEa,MAAA,YAAA,GAAe,IAAI,SAA4B,CAAA;AAAA,SAC1DG,OAAA;AAAA,EACA,IAAM,EAAA,QAAA;AAAA,WACNzB,SAAA;AAAA,YACA0B,UAAA;AAAA,UACAH,QAAA;AAAA,YACAC;AACF,CAAC;;;;;;;;AC3SD,IAAA,SAAA;AAQO,MAAM,oBAAoB,SAA0B,CAAA;AAAA,EACzD,YAAY,KAAkC,EAAA;AAC5C,IAAA,KAAA,CAAM,KAAK,CAAA;AAOb,IAAA,YAAA,CAAA,IAAA,EAAA,SAAA,EAA0B,EAAC,CAAA;AAAA;AAN3B,EAEA,YAAY,SAA2B,EAAA;AACrC,IAAA,OAAO,mBAAK,SAAU,CAAA,CAAA,MAAA,CAAO,KAAM,CAAA,WAAA,CAAY,SAAS,CAAC,CAAA;AAAA;AAI7D;AADE,SAAA,GAAA,IAAA,OAAA,EAAA;;ACjBK,MAAM,4BAA+B,GAAA,CAAC,KAC3C,KAAA,QAAA,CAAS,OAAO,EAAE,CAAA;;ACDb,MAAM,KAAQ,GAAA,CAAC,KAA2B,KAAA,KAAA,GAAQ,CAAM,KAAA,CAAA;;ACGlD,MAAA,sBAAA,GAAyB,CAAC,KAA0B,KAAA;AAC/D,EAAA,MAAM,cAAc,KAAM,CAAA,MAAA;AAC1B,EAAI,IAAA,YAAA;AACJ,EAAA,IAAI,KAAQ,GAAA,CAAA;AAEZ,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,WAAA,EAAa,CAAK,EAAA,EAAA;AACpC,IAAA,YAAA,GAAe,MAAM,CAAC,CAAA;AAEtB,IAAM,MAAA,sBAAA,GAAyB,6BAA6B,YAAY,CAAA;AAExE,IAAA,IAAI,uBAA0B,GAAA,KAAA,CAAM,sBAAsB,CAAA,GACtD,aAAa,UAAW,CAAA,CAAC,CAAI,GAAA,GAAA,CAAI,UAAW,CAAA,CAAC,CAAI,GAAA,EAAA,GACjD,SAAS,YAAY,CAAA;AAEzB,IAAI,IAAA,KAAA,CAAM,CAAC,CAAG,EAAA;AACZ,MAAA,uBAAA,GAA0B,uBAA0B,GAAA,CAAA;AAAA;AAGtD,IAAA,KAAA,GACE,QACA,IAAK,CAAA,KAAA,CAAM,uBAA0B,GAAA,EAAE,IACtC,uBAA0B,GAAA,EAAA;AAAA;AAE/B,EAAM,MAAA,KAAA,GAAA,CAAS,EAAM,GAAA,KAAA,GAAQ,EAAO,IAAA,EAAA;AACpC,EAAO,OAAA,KAAA;AACT,CAAA;;AC5BO,MAAM,QAAW,GAAA;AAAA,EACtB,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA,GAAA;AAAA,EACA;AACF,CAAA;;ACzBO,MAAM,cAAiB,GAAA;AAAA,EAC5B,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA,CAAA;AAAA,EACA;AACF,CAAA;;ACRO,MAAM,YAAe,GAAA,CAAC,GAAG,QAAA,EAAU,GAAG,cAAc,CAAA;;ACD9C,MAAA,0BAAA,GAA6B,MACxC,YAAA,CAAa,IAAK,CAAA,KAAA,CAAM,KAAK,MAAO,EAAA,GAAI,YAAa,CAAA,MAAM,CAAC,CAAA;;ACDvD,MAAM,0CAA0C,MAAM;AAC3D,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AAC1B,IAAA,MAAA,GAAS,SAAS,0BAA2B,EAAA;AAAA;AAE/C,EAAO,OAAA,MAAA;AACT,CAAA;;ACRO,MAAM,8BAA8B,MACzC,IAAA,CAAK,MAAM,IAAK,CAAA,MAAA,KAAW,EAAE,CAAA;;ACCxB,MAAM,qCAAqC,MAAM;AACtD,EAAA,IAAI,MAAS,GAAA,EAAA;AACb,EAAA,KAAA,IAAS,CAAI,GAAA,CAAA,EAAG,CAAI,GAAA,CAAA,EAAG,CAAK,EAAA,EAAA;AAC1B,IAAA,MAAA,GAAS,SAAS,2BAA4B,EAAA;AAAA;AAEhD,EAAO,OAAA,MAAA;AACT,CAAA;;ACLO,MAAM,gCAAgC,MAAc;AACzD,EAAA,MAAM,sBAAsB,kCAAmC,EAAA;AAC/D,EAAA,MAAM,2BAA2B,uCAAwC,EAAA;AACzE,EAAA,OAAO,mBAAsB,GAAA,wBAAA;AAC/B,CAAA;;ACJO,MAAM,gBAAgB,MAAc;AACzC,EAAA,MAAM,QAAQ,6BAA8B,EAAA;AAC5C,EAAM,MAAA,KAAA,GAAQ,uBAAuB,KAAK,CAAA;AAE1C,EAAA,OAAO,KAAQ,GAAA,KAAA;AACjB,CAAA;;ACFA,MAAM,YAAe,GAAA;AAAA,EACnB,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,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"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}