@jigx/core-sdk 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (902) hide show
  1. package/CHANGELOG.md +95 -0
  2. package/README.md +87 -0
  3. package/dist/PACKAGE.d.ts +4 -0
  4. package/dist/PACKAGE.d.ts.map +1 -0
  5. package/dist/PACKAGE.js +5 -0
  6. package/dist/abstract/app-info.d.ts +8 -0
  7. package/dist/abstract/app-info.d.ts.map +1 -0
  8. package/dist/abstract/app-info.js +8 -0
  9. package/dist/abstract/app-name.d.ts +15 -0
  10. package/dist/abstract/app-name.d.ts.map +1 -0
  11. package/dist/abstract/app-name.js +28 -0
  12. package/dist/abstract/base-builder.d.ts +4 -0
  13. package/dist/abstract/base-builder.d.ts.map +1 -0
  14. package/dist/abstract/base-builder.js +3 -0
  15. package/dist/abstract/element-base-builder.d.ts +7 -0
  16. package/dist/abstract/element-base-builder.d.ts.map +1 -0
  17. package/dist/abstract/element-base-builder.js +11 -0
  18. package/dist/abstract/generic.d.ts +31 -0
  19. package/dist/abstract/generic.d.ts.map +1 -0
  20. package/dist/abstract/generic.js +2 -0
  21. package/dist/abstract/index.d.ts +12 -0
  22. package/dist/abstract/index.d.ts.map +1 -0
  23. package/dist/abstract/index.js +11 -0
  24. package/dist/abstract/register.d.ts +31 -0
  25. package/dist/abstract/register.d.ts.map +1 -0
  26. package/dist/abstract/register.js +48 -0
  27. package/dist/abstract/sdk.expression.d.ts +43 -0
  28. package/dist/abstract/sdk.expression.d.ts.map +1 -0
  29. package/dist/abstract/sdk.expression.js +175 -0
  30. package/dist/abstract/sdk.text.d.ts +23 -0
  31. package/dist/abstract/sdk.text.d.ts.map +1 -0
  32. package/dist/abstract/sdk.text.js +110 -0
  33. package/dist/abstract/sdk.types.d.ts +16 -0
  34. package/dist/abstract/sdk.types.d.ts.map +1 -0
  35. package/dist/abstract/sdk.types.js +88 -0
  36. package/dist/abstract/zod.strata.d.ts +17 -0
  37. package/dist/abstract/zod.strata.d.ts.map +1 -0
  38. package/dist/abstract/zod.strata.js +11 -0
  39. package/dist/abstract/zod.types.d.ts +1937 -0
  40. package/dist/abstract/zod.types.d.ts.map +1 -0
  41. package/dist/abstract/zod.types.js +848 -0
  42. package/dist/action/action-definition.builder.d.ts +16 -0
  43. package/dist/action/action-definition.builder.d.ts.map +1 -0
  44. package/dist/action/action-definition.builder.js +35 -0
  45. package/dist/action/action.descriptor.d.ts +8 -0
  46. package/dist/action/action.descriptor.d.ts.map +1 -0
  47. package/dist/action/action.descriptor.js +2 -0
  48. package/dist/action/index.d.ts +57 -0
  49. package/dist/action/index.d.ts.map +1 -0
  50. package/dist/action/index.js +48 -0
  51. package/dist/action/ja.abstract.d.ts +33 -0
  52. package/dist/action/ja.abstract.d.ts.map +1 -0
  53. package/dist/action/ja.abstract.js +58 -0
  54. package/dist/action/ja.action-definition.d.ts +11 -0
  55. package/dist/action/ja.action-definition.d.ts.map +1 -0
  56. package/dist/action/ja.action-definition.js +12 -0
  57. package/dist/action/ja.action-list.d.ts +9 -0
  58. package/dist/action/ja.action-list.d.ts.map +1 -0
  59. package/dist/action/ja.action-list.js +15 -0
  60. package/dist/action/ja.clear-queue.d.ts +9 -0
  61. package/dist/action/ja.clear-queue.d.ts.map +1 -0
  62. package/dist/action/ja.clear-queue.js +9 -0
  63. package/dist/action/ja.color.d.ts +3 -0
  64. package/dist/action/ja.color.d.ts.map +1 -0
  65. package/dist/action/ja.color.js +2 -0
  66. package/dist/action/ja.confirm.abstract.d.ts +16 -0
  67. package/dist/action/ja.confirm.abstract.d.ts.map +1 -0
  68. package/dist/action/ja.confirm.abstract.js +25 -0
  69. package/dist/action/ja.confirm.d.ts +23 -0
  70. package/dist/action/ja.confirm.d.ts.map +1 -0
  71. package/dist/action/ja.confirm.js +28 -0
  72. package/dist/action/ja.delete-queue-command.d.ts +9 -0
  73. package/dist/action/ja.delete-queue-command.d.ts.map +1 -0
  74. package/dist/action/ja.delete-queue-command.js +9 -0
  75. package/dist/action/ja.delete-sync-scope.d.ts +10 -0
  76. package/dist/action/ja.delete-sync-scope.d.ts.map +1 -0
  77. package/dist/action/ja.delete-sync-scope.js +14 -0
  78. package/dist/action/ja.delete-sync-status.d.ts +9 -0
  79. package/dist/action/ja.delete-sync-status.d.ts.map +1 -0
  80. package/dist/action/ja.delete-sync-status.js +9 -0
  81. package/dist/action/ja.evaluate.d.ts +12 -0
  82. package/dist/action/ja.evaluate.d.ts.map +1 -0
  83. package/dist/action/ja.evaluate.js +9 -0
  84. package/dist/action/ja.execute-action.d.ts +11 -0
  85. package/dist/action/ja.execute-action.d.ts.map +1 -0
  86. package/dist/action/ja.execute-action.js +15 -0
  87. package/dist/action/ja.execute-entities.d.ts +7 -0
  88. package/dist/action/ja.execute-entities.d.ts.map +1 -0
  89. package/dist/action/ja.execute-entities.js +8 -0
  90. package/dist/action/ja.execute-entity.abstract.d.ts +41 -0
  91. package/dist/action/ja.execute-entity.abstract.d.ts.map +1 -0
  92. package/dist/action/ja.execute-entity.abstract.js +104 -0
  93. package/dist/action/ja.execute-entity.d.ts +6 -0
  94. package/dist/action/ja.execute-entity.d.ts.map +1 -0
  95. package/dist/action/ja.execute-entity.dynamic-data.d.ts +6 -0
  96. package/dist/action/ja.execute-entity.dynamic-data.d.ts.map +1 -0
  97. package/dist/action/ja.execute-entity.dynamic-data.js +2 -0
  98. package/dist/action/ja.execute-entity.generic.d.ts +11 -0
  99. package/dist/action/ja.execute-entity.generic.d.ts.map +1 -0
  100. package/dist/action/ja.execute-entity.generic.js +2 -0
  101. package/dist/action/ja.execute-entity.js +8 -0
  102. package/dist/action/ja.execute-entity.sql.d.ts +12 -0
  103. package/dist/action/ja.execute-entity.sql.d.ts.map +1 -0
  104. package/dist/action/ja.execute-entity.sql.js +2 -0
  105. package/dist/action/ja.execute-sql.abstract.d.ts +6 -0
  106. package/dist/action/ja.execute-sql.abstract.d.ts.map +1 -0
  107. package/dist/action/ja.execute-sql.abstract.js +2 -0
  108. package/dist/action/ja.execute-sql.d.ts +16 -0
  109. package/dist/action/ja.execute-sql.d.ts.map +1 -0
  110. package/dist/action/ja.execute-sql.js +64 -0
  111. package/dist/action/ja.find-replace.d.ts +12 -0
  112. package/dist/action/ja.find-replace.d.ts.map +1 -0
  113. package/dist/action/ja.find-replace.js +22 -0
  114. package/dist/action/ja.generate-file.d.ts +11 -0
  115. package/dist/action/ja.generate-file.d.ts.map +1 -0
  116. package/dist/action/ja.generate-file.js +19 -0
  117. package/dist/action/ja.generate-pdf.d.ts +10 -0
  118. package/dist/action/ja.generate-pdf.d.ts.map +1 -0
  119. package/dist/action/ja.generate-pdf.js +10 -0
  120. package/dist/action/ja.go-back.d.ts +9 -0
  121. package/dist/action/ja.go-back.d.ts.map +1 -0
  122. package/dist/action/ja.go-back.js +11 -0
  123. package/dist/action/ja.go-to.d.ts +18 -0
  124. package/dist/action/ja.go-to.d.ts.map +1 -0
  125. package/dist/action/ja.go-to.js +41 -0
  126. package/dist/action/ja.in-background.d.ts +95 -0
  127. package/dist/action/ja.in-background.d.ts.map +1 -0
  128. package/dist/action/ja.in-background.factory.d.ts +88 -0
  129. package/dist/action/ja.in-background.factory.d.ts.map +1 -0
  130. package/dist/action/ja.in-background.factory.js +98 -0
  131. package/dist/action/ja.in-background.js +247 -0
  132. package/dist/action/ja.info-modal.d.ts +37 -0
  133. package/dist/action/ja.info-modal.d.ts.map +1 -0
  134. package/dist/action/ja.info-modal.js +61 -0
  135. package/dist/action/ja.jig-actions.d.ts +16 -0
  136. package/dist/action/ja.jig-actions.d.ts.map +1 -0
  137. package/dist/action/ja.jig-actions.js +35 -0
  138. package/dist/action/ja.on-button.factory.d.ts +89 -0
  139. package/dist/action/ja.on-button.factory.d.ts.map +1 -0
  140. package/dist/action/ja.on-button.factory.js +86 -0
  141. package/dist/action/ja.open-app-settings.d.ts +6 -0
  142. package/dist/action/ja.open-app-settings.d.ts.map +1 -0
  143. package/dist/action/ja.open-app-settings.js +8 -0
  144. package/dist/action/ja.open-map.abstract.d.ts +6 -0
  145. package/dist/action/ja.open-map.abstract.d.ts.map +1 -0
  146. package/dist/action/ja.open-map.abstract.js +2 -0
  147. package/dist/action/ja.open-map.d.ts +11 -0
  148. package/dist/action/ja.open-map.d.ts.map +1 -0
  149. package/dist/action/ja.open-map.js +25 -0
  150. package/dist/action/ja.open-media-picker.abstract.d.ts +8 -0
  151. package/dist/action/ja.open-media-picker.abstract.d.ts.map +1 -0
  152. package/dist/action/ja.open-media-picker.abstract.js +2 -0
  153. package/dist/action/ja.open-media-picker.d.ts +18 -0
  154. package/dist/action/ja.open-media-picker.d.ts.map +1 -0
  155. package/dist/action/ja.open-media-picker.js +46 -0
  156. package/dist/action/ja.open-scanner.d.ts +14 -0
  157. package/dist/action/ja.open-scanner.d.ts.map +1 -0
  158. package/dist/action/ja.open-scanner.js +23 -0
  159. package/dist/action/ja.open-url.d.ts +10 -0
  160. package/dist/action/ja.open-url.d.ts.map +1 -0
  161. package/dist/action/ja.open-url.js +13 -0
  162. package/dist/action/ja.print.d.ts +10 -0
  163. package/dist/action/ja.print.d.ts.map +1 -0
  164. package/dist/action/ja.print.js +17 -0
  165. package/dist/action/ja.reset-application-state.d.ts +9 -0
  166. package/dist/action/ja.reset-application-state.d.ts.map +1 -0
  167. package/dist/action/ja.reset-application-state.js +12 -0
  168. package/dist/action/ja.reset-component-state.d.ts +9 -0
  169. package/dist/action/ja.reset-component-state.d.ts.map +1 -0
  170. package/dist/action/ja.reset-component-state.js +13 -0
  171. package/dist/action/ja.reset-screen-state.d.ts +9 -0
  172. package/dist/action/ja.reset-screen-state.d.ts.map +1 -0
  173. package/dist/action/ja.reset-screen-state.js +12 -0
  174. package/dist/action/ja.reset-state.d.ts +9 -0
  175. package/dist/action/ja.reset-state.d.ts.map +1 -0
  176. package/dist/action/ja.reset-state.js +13 -0
  177. package/dist/action/ja.retry-queue-command.d.ts +9 -0
  178. package/dist/action/ja.retry-queue-command.d.ts.map +1 -0
  179. package/dist/action/ja.retry-queue-command.js +9 -0
  180. package/dist/action/ja.sdk.d.ts +4 -0
  181. package/dist/action/ja.sdk.d.ts.map +1 -0
  182. package/dist/action/ja.sdk.js +2 -0
  183. package/dist/action/ja.set-active-tab.d.ts +13 -0
  184. package/dist/action/ja.set-active-tab.d.ts.map +1 -0
  185. package/dist/action/ja.set-active-tab.js +29 -0
  186. package/dist/action/ja.set-application-state.d.ts +9 -0
  187. package/dist/action/ja.set-application-state.d.ts.map +1 -0
  188. package/dist/action/ja.set-application-state.js +17 -0
  189. package/dist/action/ja.set-screen-state.d.ts +9 -0
  190. package/dist/action/ja.set-screen-state.d.ts.map +1 -0
  191. package/dist/action/ja.set-screen-state.js +12 -0
  192. package/dist/action/ja.share.d.ts +12 -0
  193. package/dist/action/ja.share.d.ts.map +1 -0
  194. package/dist/action/ja.share.js +23 -0
  195. package/dist/action/ja.show-alert.d.ts +33 -0
  196. package/dist/action/ja.show-alert.d.ts.map +1 -0
  197. package/dist/action/ja.show-alert.js +61 -0
  198. package/dist/action/ja.start-location-sharing.abstract.d.ts +6 -0
  199. package/dist/action/ja.start-location-sharing.abstract.d.ts.map +1 -0
  200. package/dist/action/ja.start-location-sharing.abstract.js +2 -0
  201. package/dist/action/ja.start-location-sharing.d.ts +18 -0
  202. package/dist/action/ja.start-location-sharing.d.ts.map +1 -0
  203. package/dist/action/ja.start-location-sharing.js +33 -0
  204. package/dist/action/ja.start-sync-scope.d.ts +9 -0
  205. package/dist/action/ja.start-sync-scope.d.ts.map +1 -0
  206. package/dist/action/ja.start-sync-scope.js +18 -0
  207. package/dist/action/ja.stop-location-sharing.d.ts +6 -0
  208. package/dist/action/ja.stop-location-sharing.d.ts.map +1 -0
  209. package/dist/action/ja.stop-location-sharing.js +8 -0
  210. package/dist/action/ja.submit-form.abstract.d.ts +11 -0
  211. package/dist/action/ja.submit-form.abstract.d.ts.map +1 -0
  212. package/dist/action/ja.submit-form.abstract.js +2 -0
  213. package/dist/action/ja.submit-form.d.ts +31 -0
  214. package/dist/action/ja.submit-form.d.ts.map +1 -0
  215. package/dist/action/ja.submit-form.js +124 -0
  216. package/dist/action/ja.swipeable-action.d.ts +19 -0
  217. package/dist/action/ja.swipeable-action.d.ts.map +1 -0
  218. package/dist/action/ja.swipeable-action.js +25 -0
  219. package/dist/action/ja.sync-entities.abstract.d.ts +25 -0
  220. package/dist/action/ja.sync-entities.abstract.d.ts.map +1 -0
  221. package/dist/action/ja.sync-entities.abstract.js +2 -0
  222. package/dist/action/ja.sync-entities.d.ts +32 -0
  223. package/dist/action/ja.sync-entities.d.ts.map +1 -0
  224. package/dist/action/ja.sync-entities.js +142 -0
  225. package/dist/action/ja.update-profile.d.ts +12 -0
  226. package/dist/action/ja.update-profile.d.ts.map +1 -0
  227. package/dist/action/ja.update-profile.js +20 -0
  228. package/dist/application/application.sdk.d.ts +84 -0
  229. package/dist/application/application.sdk.d.ts.map +1 -0
  230. package/dist/application/application.sdk.js +217 -0
  231. package/dist/application/application.tab.d.ts +20 -0
  232. package/dist/application/application.tab.d.ts.map +1 -0
  233. package/dist/application/application.tab.js +45 -0
  234. package/dist/application/context.sdk.d.ts +48 -0
  235. package/dist/application/context.sdk.d.ts.map +1 -0
  236. package/dist/application/context.sdk.js +116 -0
  237. package/dist/application/index.d.ts +4 -0
  238. package/dist/application/index.d.ts.map +1 -0
  239. package/dist/application/index.js +4 -0
  240. package/dist/assets/example-extraction-cache.json +9 -0
  241. package/dist/assets/extracted-core-sdk-examples.yaml +44440 -0
  242. package/dist/assets/extracted-core-sdk-types.yaml +12100 -0
  243. package/dist/assets/stream-line-icons.csv +19281 -0
  244. package/dist/assets/type-extraction-cache.json +9 -0
  245. package/dist/builder/application-analyzer/application-analyzer.d.ts +42 -0
  246. package/dist/builder/application-analyzer/application-analyzer.d.ts.map +1 -0
  247. package/dist/builder/application-analyzer/application-analyzer.js +150 -0
  248. package/dist/builder/application-analyzer/create-application-analyzer.d.ts +17 -0
  249. package/dist/builder/application-analyzer/create-application-analyzer.d.ts.map +1 -0
  250. package/dist/builder/application-analyzer/create-application-analyzer.js +121 -0
  251. package/dist/builder/application-analyzer/index.d.ts +5 -0
  252. package/dist/builder/application-analyzer/index.d.ts.map +1 -0
  253. package/dist/builder/application-analyzer/index.js +5 -0
  254. package/dist/builder/application-analyzer/select-component-nodes.d.ts +7 -0
  255. package/dist/builder/application-analyzer/select-component-nodes.d.ts.map +1 -0
  256. package/dist/builder/application-analyzer/select-component-nodes.js +15 -0
  257. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts +8 -0
  258. package/dist/builder/application-analyzer/select-datasource-node-by-id.d.ts.map +1 -0
  259. package/dist/builder/application-analyzer/select-datasource-node-by-id.js +20 -0
  260. package/dist/builder/application-analyzer/types.d.ts +60 -0
  261. package/dist/builder/application-analyzer/types.d.ts.map +1 -0
  262. package/dist/builder/application-analyzer/types.js +16 -0
  263. package/dist/builder/application-analyzer/utils.d.ts +3 -0
  264. package/dist/builder/application-analyzer/utils.d.ts.map +1 -0
  265. package/dist/builder/application-analyzer/utils.js +8 -0
  266. package/dist/builder/builder.d.ts +8 -0
  267. package/dist/builder/builder.d.ts.map +1 -0
  268. package/dist/builder/builder.js +54 -0
  269. package/dist/builder/index.d.ts +5 -0
  270. package/dist/builder/index.d.ts.map +1 -0
  271. package/dist/builder/index.js +4 -0
  272. package/dist/builder/transform-summary.d.ts +3 -0
  273. package/dist/builder/transform-summary.d.ts.map +1 -0
  274. package/dist/builder/transform-summary.js +39 -0
  275. package/dist/builder/types.d.ts +8 -0
  276. package/dist/builder/types.d.ts.map +1 -0
  277. package/dist/builder/types.js +2 -0
  278. package/dist/builder/validate-datasource-ids.d.ts +17 -0
  279. package/dist/builder/validate-datasource-ids.d.ts.map +1 -0
  280. package/dist/builder/validate-datasource-ids.js +51 -0
  281. package/dist/component/common/index.d.ts +22 -0
  282. package/dist/component/common/index.d.ts.map +1 -0
  283. package/dist/component/common/index.js +16 -0
  284. package/dist/component/common/jc.avatar-field.types.d.ts +9 -0
  285. package/dist/component/common/jc.avatar-field.types.d.ts.map +1 -0
  286. package/dist/component/common/jc.avatar-field.types.js +11 -0
  287. package/dist/component/common/jc.chart.common.abstract.d.ts +85 -0
  288. package/dist/component/common/jc.chart.common.abstract.d.ts.map +1 -0
  289. package/dist/component/common/jc.chart.common.abstract.js +2 -0
  290. package/dist/component/common/jc.chart.common.builders.d.ts +37 -0
  291. package/dist/component/common/jc.chart.common.builders.d.ts.map +1 -0
  292. package/dist/component/common/jc.chart.common.builders.js +81 -0
  293. package/dist/component/common/jc.component.types.d.ts +101 -0
  294. package/dist/component/common/jc.component.types.d.ts.map +1 -0
  295. package/dist/component/common/jc.component.types.js +144 -0
  296. package/dist/component/common/jc.context.d.ts +7 -0
  297. package/dist/component/common/jc.context.d.ts.map +1 -0
  298. package/dist/component/common/jc.context.js +2 -0
  299. package/dist/component/common/jc.element.types.d.ts +14 -0
  300. package/dist/component/common/jc.element.types.d.ts.map +1 -0
  301. package/dist/component/common/jc.element.types.js +13 -0
  302. package/dist/component/common/jc.field-base.builder.d.ts +21 -0
  303. package/dist/component/common/jc.field-base.builder.d.ts.map +1 -0
  304. package/dist/component/common/jc.field-base.builder.js +101 -0
  305. package/dist/component/common/jc.field-base.types.d.ts +28 -0
  306. package/dist/component/common/jc.field-base.types.d.ts.map +1 -0
  307. package/dist/component/common/jc.field-base.types.js +2 -0
  308. package/dist/component/common/jc.left-right.element.avatar.d.ts +11 -0
  309. package/dist/component/common/jc.left-right.element.avatar.d.ts.map +1 -0
  310. package/dist/component/common/jc.left-right.element.avatar.js +18 -0
  311. package/dist/component/common/jc.left-right.element.badge.d.ts +11 -0
  312. package/dist/component/common/jc.left-right.element.badge.d.ts.map +1 -0
  313. package/dist/component/common/jc.left-right.element.badge.js +17 -0
  314. package/dist/component/common/jc.left-right.element.button.d.ts +11 -0
  315. package/dist/component/common/jc.left-right.element.button.d.ts.map +1 -0
  316. package/dist/component/common/jc.left-right.element.button.js +14 -0
  317. package/dist/component/common/jc.left-right.element.checkbox.d.ts +13 -0
  318. package/dist/component/common/jc.left-right.element.checkbox.d.ts.map +1 -0
  319. package/dist/component/common/jc.left-right.element.checkbox.js +21 -0
  320. package/dist/component/common/jc.left-right.element.d.ts +31 -0
  321. package/dist/component/common/jc.left-right.element.d.ts.map +1 -0
  322. package/dist/component/common/jc.left-right.element.icon.d.ts +18 -0
  323. package/dist/component/common/jc.left-right.element.icon.d.ts.map +1 -0
  324. package/dist/component/common/jc.left-right.element.icon.js +32 -0
  325. package/dist/component/common/jc.left-right.element.image.d.ts +16 -0
  326. package/dist/component/common/jc.left-right.element.image.d.ts.map +1 -0
  327. package/dist/component/common/jc.left-right.element.image.js +29 -0
  328. package/dist/component/common/jc.left-right.element.js +2 -0
  329. package/dist/component/common/jc.left-right.element.progress.d.ts +11 -0
  330. package/dist/component/common/jc.left-right.element.progress.d.ts.map +1 -0
  331. package/dist/component/common/jc.left-right.element.progress.js +17 -0
  332. package/dist/component/common/jc.left-right.element.switch.d.ts +13 -0
  333. package/dist/component/common/jc.left-right.element.switch.d.ts.map +1 -0
  334. package/dist/component/common/jc.left-right.element.switch.js +21 -0
  335. package/dist/component/common/jc.left-right.element.value.d.ts +10 -0
  336. package/dist/component/common/jc.left-right.element.value.d.ts.map +1 -0
  337. package/dist/component/common/jc.left-right.element.value.js +12 -0
  338. package/dist/component/common/jc.picker-field-options.types.d.ts +13 -0
  339. package/dist/component/common/jc.picker-field-options.types.d.ts.map +1 -0
  340. package/dist/component/common/jc.picker-field-options.types.js +2 -0
  341. package/dist/component/common/jc.text.types.d.ts +6 -0
  342. package/dist/component/common/jc.text.types.d.ts.map +1 -0
  343. package/dist/component/common/jc.text.types.js +2 -0
  344. package/dist/component/common/jc.validation.d.ts +9 -0
  345. package/dist/component/common/jc.validation.d.ts.map +1 -0
  346. package/dist/component/common/jc.validation.js +48 -0
  347. package/dist/component/index.d.ts +86 -0
  348. package/dist/component/index.d.ts.map +1 -0
  349. package/dist/component/index.js +83 -0
  350. package/dist/component/jc.abstract.d.ts +32 -0
  351. package/dist/component/jc.abstract.d.ts.map +1 -0
  352. package/dist/component/jc.abstract.factory.d.ts +488 -0
  353. package/dist/component/jc.abstract.factory.d.ts.map +1 -0
  354. package/dist/component/jc.abstract.factory.js +757 -0
  355. package/dist/component/jc.abstract.js +53 -0
  356. package/dist/component/jc.abstract.utils.d.ts +3 -0
  357. package/dist/component/jc.abstract.utils.d.ts.map +1 -0
  358. package/dist/component/jc.abstract.utils.js +26 -0
  359. package/dist/component/jc.amount-control.d.ts +16 -0
  360. package/dist/component/jc.amount-control.d.ts.map +1 -0
  361. package/dist/component/jc.amount-control.js +36 -0
  362. package/dist/component/jc.avatar-field.d.ts +11 -0
  363. package/dist/component/jc.avatar-field.d.ts.map +1 -0
  364. package/dist/component/jc.avatar-field.js +27 -0
  365. package/dist/component/jc.avatar.d.ts +14 -0
  366. package/dist/component/jc.avatar.d.ts.map +1 -0
  367. package/dist/component/jc.avatar.js +26 -0
  368. package/dist/component/jc.banner.d.ts +81 -0
  369. package/dist/component/jc.banner.d.ts.map +1 -0
  370. package/dist/component/jc.banner.js +49 -0
  371. package/dist/component/jc.bar-chart.d.ts +23 -0
  372. package/dist/component/jc.bar-chart.d.ts.map +1 -0
  373. package/dist/component/jc.bar-chart.js +45 -0
  374. package/dist/component/jc.button.d.ts +20 -0
  375. package/dist/component/jc.button.d.ts.map +1 -0
  376. package/dist/component/jc.button.js +39 -0
  377. package/dist/component/jc.card.abstract.d.ts +14 -0
  378. package/dist/component/jc.card.abstract.d.ts.map +1 -0
  379. package/dist/component/jc.card.abstract.js +31 -0
  380. package/dist/component/jc.card.on-default.d.ts +91 -0
  381. package/dist/component/jc.card.on-default.d.ts.map +1 -0
  382. package/dist/component/jc.card.on-default.js +96 -0
  383. package/dist/component/jc.carousel.d.ts +31 -0
  384. package/dist/component/jc.carousel.d.ts.map +1 -0
  385. package/dist/component/jc.carousel.js +58 -0
  386. package/dist/component/jc.chat-message.d.ts +17 -0
  387. package/dist/component/jc.chat-message.d.ts.map +1 -0
  388. package/dist/component/jc.chat-message.js +32 -0
  389. package/dist/component/jc.chat.d.ts +23 -0
  390. package/dist/component/jc.chat.d.ts.map +1 -0
  391. package/dist/component/jc.chat.js +68 -0
  392. package/dist/component/jc.checkbox.d.ts +15 -0
  393. package/dist/component/jc.checkbox.d.ts.map +1 -0
  394. package/dist/component/jc.checkbox.js +38 -0
  395. package/dist/component/jc.choice-field-item.d.ts +15 -0
  396. package/dist/component/jc.choice-field-item.d.ts.map +1 -0
  397. package/dist/component/jc.choice-field-item.js +41 -0
  398. package/dist/component/jc.choice-field.d.ts +21 -0
  399. package/dist/component/jc.choice-field.d.ts.map +1 -0
  400. package/dist/component/jc.choice-field.js +34 -0
  401. package/dist/component/jc.count-down.d.ts +18 -0
  402. package/dist/component/jc.count-down.d.ts.map +1 -0
  403. package/dist/component/jc.count-down.js +55 -0
  404. package/dist/component/jc.count-up.d.ts +15 -0
  405. package/dist/component/jc.count-up.d.ts.map +1 -0
  406. package/dist/component/jc.count-up.js +42 -0
  407. package/dist/component/jc.custom-component.interop.d.ts +58 -0
  408. package/dist/component/jc.custom-component.interop.d.ts.map +1 -0
  409. package/dist/component/jc.custom-component.interop.js +115 -0
  410. package/dist/component/jc.date-picker.d.ts +15 -0
  411. package/dist/component/jc.date-picker.d.ts.map +1 -0
  412. package/dist/component/jc.date-picker.js +31 -0
  413. package/dist/component/jc.divider.d.ts +7 -0
  414. package/dist/component/jc.divider.d.ts.map +1 -0
  415. package/dist/component/jc.divider.js +8 -0
  416. package/dist/component/jc.dropdown.d.ts +20 -0
  417. package/dist/component/jc.dropdown.d.ts.map +1 -0
  418. package/dist/component/jc.dropdown.item.d.ts +22 -0
  419. package/dist/component/jc.dropdown.item.d.ts.map +1 -0
  420. package/dist/component/jc.dropdown.item.js +85 -0
  421. package/dist/component/jc.dropdown.js +33 -0
  422. package/dist/component/jc.duration-picker.d.ts +18 -0
  423. package/dist/component/jc.duration-picker.d.ts.map +1 -0
  424. package/dist/component/jc.duration-picker.js +35 -0
  425. package/dist/component/jc.email-field.d.ts +11 -0
  426. package/dist/component/jc.email-field.d.ts.map +1 -0
  427. package/dist/component/jc.email-field.js +19 -0
  428. package/dist/component/jc.entity-field.d.ts +23 -0
  429. package/dist/component/jc.entity-field.d.ts.map +1 -0
  430. package/dist/component/jc.entity-field.js +71 -0
  431. package/dist/component/jc.entity.d.ts +15 -0
  432. package/dist/component/jc.entity.d.ts.map +1 -0
  433. package/dist/component/jc.entity.js +27 -0
  434. package/dist/component/jc.event.d.ts +22 -0
  435. package/dist/component/jc.event.d.ts.map +1 -0
  436. package/dist/component/jc.event.js +68 -0
  437. package/dist/component/jc.expander.d.ts +49 -0
  438. package/dist/component/jc.expander.d.ts.map +1 -0
  439. package/dist/component/jc.expander.header.d.ts +25 -0
  440. package/dist/component/jc.expander.header.d.ts.map +1 -0
  441. package/dist/component/jc.expander.header.js +39 -0
  442. package/dist/component/jc.expander.js +53 -0
  443. package/dist/component/jc.field-row.d.ts +34 -0
  444. package/dist/component/jc.field-row.d.ts.map +1 -0
  445. package/dist/component/jc.field-row.entity.d.ts +12 -0
  446. package/dist/component/jc.field-row.entity.d.ts.map +1 -0
  447. package/dist/component/jc.field-row.entity.js +35 -0
  448. package/dist/component/jc.field-row.js +37 -0
  449. package/dist/component/jc.form.d.ts +98 -0
  450. package/dist/component/jc.form.d.ts.map +1 -0
  451. package/dist/component/jc.form.js +127 -0
  452. package/dist/component/jc.gallery-item.d.ts +12 -0
  453. package/dist/component/jc.gallery-item.d.ts.map +1 -0
  454. package/dist/component/jc.gallery-item.js +24 -0
  455. package/dist/component/jc.grid-item.d.ts +15 -0
  456. package/dist/component/jc.grid-item.d.ts.map +1 -0
  457. package/dist/component/jc.grid-item.js +31 -0
  458. package/dist/component/jc.grid.d.ts +16 -0
  459. package/dist/component/jc.grid.d.ts.map +1 -0
  460. package/dist/component/jc.grid.js +64 -0
  461. package/dist/component/jc.guards.d.ts +17 -0
  462. package/dist/component/jc.guards.d.ts.map +1 -0
  463. package/dist/component/jc.guards.js +14 -0
  464. package/dist/component/jc.icon.d.ts +19 -0
  465. package/dist/component/jc.icon.d.ts.map +1 -0
  466. package/dist/component/jc.icon.js +41 -0
  467. package/dist/component/jc.image.abstract.d.ts +28 -0
  468. package/dist/component/jc.image.abstract.d.ts.map +1 -0
  469. package/dist/component/jc.image.abstract.js +52 -0
  470. package/dist/component/jc.image.d.ts +5 -0
  471. package/dist/component/jc.image.d.ts.map +1 -0
  472. package/dist/component/jc.image.js +2 -0
  473. package/dist/component/jc.image.on-carousel.d.ts +23 -0
  474. package/dist/component/jc.image.on-carousel.d.ts.map +1 -0
  475. package/dist/component/jc.image.on-carousel.js +19 -0
  476. package/dist/component/jc.image.on-default.d.ts +25 -0
  477. package/dist/component/jc.image.on-default.d.ts.map +1 -0
  478. package/dist/component/jc.image.on-default.js +22 -0
  479. package/dist/component/jc.interactive-image.d.ts +41 -0
  480. package/dist/component/jc.interactive-image.d.ts.map +1 -0
  481. package/dist/component/jc.interactive-image.item.d.ts +24 -0
  482. package/dist/component/jc.interactive-image.item.d.ts.map +1 -0
  483. package/dist/component/jc.interactive-image.item.js +78 -0
  484. package/dist/component/jc.interactive-image.js +78 -0
  485. package/dist/component/jc.jig-header.d.ts +19 -0
  486. package/dist/component/jc.jig-header.d.ts.map +1 -0
  487. package/dist/component/jc.jig-header.js +42 -0
  488. package/dist/component/jc.jig-widget.d.ts +15 -0
  489. package/dist/component/jc.jig-widget.d.ts.map +1 -0
  490. package/dist/component/jc.jig-widget.js +41 -0
  491. package/dist/component/jc.jig.d.ts +11 -0
  492. package/dist/component/jc.jig.d.ts.map +1 -0
  493. package/dist/component/jc.jig.js +24 -0
  494. package/dist/component/jc.line-chart.d.ts +28 -0
  495. package/dist/component/jc.line-chart.d.ts.map +1 -0
  496. package/dist/component/jc.line-chart.js +45 -0
  497. package/dist/component/jc.list-item.d.ts +106 -0
  498. package/dist/component/jc.list-item.d.ts.map +1 -0
  499. package/dist/component/jc.list-item.js +274 -0
  500. package/dist/component/jc.list-item.standalone.d.ts +13 -0
  501. package/dist/component/jc.list-item.standalone.d.ts.map +1 -0
  502. package/dist/component/jc.list-item.standalone.js +10 -0
  503. package/dist/component/jc.list.abstract.d.ts +36 -0
  504. package/dist/component/jc.list.abstract.d.ts.map +1 -0
  505. package/dist/component/jc.list.abstract.js +2 -0
  506. package/dist/component/jc.list.d.ts +39 -0
  507. package/dist/component/jc.list.d.ts.map +1 -0
  508. package/dist/component/jc.list.js +95 -0
  509. package/dist/component/jc.location.d.ts +41 -0
  510. package/dist/component/jc.location.d.ts.map +1 -0
  511. package/dist/component/jc.location.js +63 -0
  512. package/dist/component/jc.marker-item.d.ts +29 -0
  513. package/dist/component/jc.marker-item.d.ts.map +1 -0
  514. package/dist/component/jc.marker-item.js +48 -0
  515. package/dist/component/jc.media-field.d.ts +13 -0
  516. package/dist/component/jc.media-field.d.ts.map +1 -0
  517. package/dist/component/jc.media-field.js +37 -0
  518. package/dist/component/jc.menu-item.d.ts +89 -0
  519. package/dist/component/jc.menu-item.d.ts.map +1 -0
  520. package/dist/component/jc.menu-item.js +65 -0
  521. package/dist/component/jc.number-field.d.ts +21 -0
  522. package/dist/component/jc.number-field.d.ts.map +1 -0
  523. package/dist/component/jc.number-field.js +33 -0
  524. package/dist/component/jc.pie-chart.d.ts +26 -0
  525. package/dist/component/jc.pie-chart.d.ts.map +1 -0
  526. package/dist/component/jc.pie-chart.js +45 -0
  527. package/dist/component/jc.product-item.amount.d.ts +17 -0
  528. package/dist/component/jc.product-item.amount.d.ts.map +1 -0
  529. package/dist/component/jc.product-item.amount.js +31 -0
  530. package/dist/component/jc.product-item.d.ts +30 -0
  531. package/dist/component/jc.product-item.d.ts.map +1 -0
  532. package/dist/component/jc.product-item.js +68 -0
  533. package/dist/component/jc.progress-bar.d.ts +45 -0
  534. package/dist/component/jc.progress-bar.d.ts.map +1 -0
  535. package/dist/component/jc.progress-bar.js +58 -0
  536. package/dist/component/jc.rating.d.ts +17 -0
  537. package/dist/component/jc.rating.d.ts.map +1 -0
  538. package/dist/component/jc.rating.js +38 -0
  539. package/dist/component/jc.section.abstract.d.ts +87 -0
  540. package/dist/component/jc.section.abstract.d.ts.map +1 -0
  541. package/dist/component/jc.section.abstract.js +33 -0
  542. package/dist/component/jc.section.on-default.d.ts +85 -0
  543. package/dist/component/jc.section.on-default.d.ts.map +1 -0
  544. package/dist/component/jc.section.on-default.js +85 -0
  545. package/dist/component/jc.section.on-entity.d.ts +11 -0
  546. package/dist/component/jc.section.on-entity.d.ts.map +1 -0
  547. package/dist/component/jc.section.on-entity.js +11 -0
  548. package/dist/component/jc.segmented-control.d.ts +23 -0
  549. package/dist/component/jc.segmented-control.d.ts.map +1 -0
  550. package/dist/component/jc.segmented-control.js +66 -0
  551. package/dist/component/jc.signature-field.d.ts +11 -0
  552. package/dist/component/jc.signature-field.d.ts.map +1 -0
  553. package/dist/component/jc.signature-field.js +18 -0
  554. package/dist/component/jc.slider.d.ts +36 -0
  555. package/dist/component/jc.slider.d.ts.map +1 -0
  556. package/dist/component/jc.slider.js +53 -0
  557. package/dist/component/jc.stage.d.ts +23 -0
  558. package/dist/component/jc.stage.d.ts.map +1 -0
  559. package/dist/component/jc.stage.js +31 -0
  560. package/dist/component/jc.step.d.ts +30 -0
  561. package/dist/component/jc.step.d.ts.map +1 -0
  562. package/dist/component/jc.step.js +35 -0
  563. package/dist/component/jc.stepper.d.ts +34 -0
  564. package/dist/component/jc.stepper.d.ts.map +1 -0
  565. package/dist/component/jc.stepper.js +59 -0
  566. package/dist/component/jc.story-group.d.ts +18 -0
  567. package/dist/component/jc.story-group.d.ts.map +1 -0
  568. package/dist/component/jc.story-group.js +27 -0
  569. package/dist/component/jc.summary.abstract.d.ts +15 -0
  570. package/dist/component/jc.summary.abstract.d.ts.map +1 -0
  571. package/dist/component/jc.summary.abstract.js +29 -0
  572. package/dist/component/jc.summary.card.d.ts +14 -0
  573. package/dist/component/jc.summary.card.d.ts.map +1 -0
  574. package/dist/component/jc.summary.card.js +36 -0
  575. package/dist/component/jc.summary.counter.d.ts +12 -0
  576. package/dist/component/jc.summary.counter.d.ts.map +1 -0
  577. package/dist/component/jc.summary.counter.js +28 -0
  578. package/dist/component/jc.summary.default.d.ts +16 -0
  579. package/dist/component/jc.summary.default.d.ts.map +1 -0
  580. package/dist/component/jc.summary.default.js +34 -0
  581. package/dist/component/jc.summary.progress.d.ts +46 -0
  582. package/dist/component/jc.summary.progress.d.ts.map +1 -0
  583. package/dist/component/jc.summary.progress.js +35 -0
  584. package/dist/component/jc.tab-button.d.ts +18 -0
  585. package/dist/component/jc.tab-button.d.ts.map +1 -0
  586. package/dist/component/jc.tab-button.js +43 -0
  587. package/dist/component/jc.text-field.d.ts +20 -0
  588. package/dist/component/jc.text-field.d.ts.map +1 -0
  589. package/dist/component/jc.text-field.js +49 -0
  590. package/dist/component/jc.text.d.ts +24 -0
  591. package/dist/component/jc.text.d.ts.map +1 -0
  592. package/dist/component/jc.text.js +44 -0
  593. package/dist/component/jc.titles.d.ts +19 -0
  594. package/dist/component/jc.titles.d.ts.map +1 -0
  595. package/dist/component/jc.titles.js +34 -0
  596. package/dist/component/jc.trend.d.ts +18 -0
  597. package/dist/component/jc.trend.d.ts.map +1 -0
  598. package/dist/component/jc.trend.js +31 -0
  599. package/dist/component/jc.types.d.ts +75 -0
  600. package/dist/component/jc.types.d.ts.map +1 -0
  601. package/dist/component/jc.types.js +74 -0
  602. package/dist/component/jc.video-player.abstract.d.ts +28 -0
  603. package/dist/component/jc.video-player.abstract.d.ts.map +1 -0
  604. package/dist/component/jc.video-player.abstract.js +38 -0
  605. package/dist/component/jc.video-player.d.ts +4 -0
  606. package/dist/component/jc.video-player.d.ts.map +1 -0
  607. package/dist/component/jc.video-player.js +2 -0
  608. package/dist/component/jc.video-player.on-jig.d.ts +25 -0
  609. package/dist/component/jc.video-player.on-jig.d.ts.map +1 -0
  610. package/dist/component/jc.video-player.on-jig.js +31 -0
  611. package/dist/component/jc.view.d.ts +158 -0
  612. package/dist/component/jc.view.d.ts.map +1 -0
  613. package/dist/component/jc.view.js +85 -0
  614. package/dist/component/jc.web-view.abstract.d.ts +15 -0
  615. package/dist/component/jc.web-view.abstract.d.ts.map +1 -0
  616. package/dist/component/jc.web-view.abstract.js +33 -0
  617. package/dist/component/jc.web-view.on-default.d.ts +5 -0
  618. package/dist/component/jc.web-view.on-default.d.ts.map +1 -0
  619. package/dist/component/jc.web-view.on-default.js +4 -0
  620. package/dist/component/jc.web-view.on-full.d.ts +10 -0
  621. package/dist/component/jc.web-view.on-full.d.ts.map +1 -0
  622. package/dist/component/jc.web-view.on-full.js +14 -0
  623. package/dist/database/database.abstract.d.ts +39 -0
  624. package/dist/database/database.abstract.d.ts.map +1 -0
  625. package/dist/database/database.abstract.js +42 -0
  626. package/dist/database/index.d.ts +2 -0
  627. package/dist/database/index.d.ts.map +1 -0
  628. package/dist/database/index.js +2 -0
  629. package/dist/datasource/datasource.abstract.d.ts +39 -0
  630. package/dist/datasource/datasource.abstract.d.ts.map +1 -0
  631. package/dist/datasource/datasource.abstract.js +47 -0
  632. package/dist/datasource/datasource.descriptor.d.ts +11 -0
  633. package/dist/datasource/datasource.descriptor.d.ts.map +1 -0
  634. package/dist/datasource/datasource.descriptor.js +2 -0
  635. package/dist/datasource/datasource.reference.d.ts +33 -0
  636. package/dist/datasource/datasource.reference.d.ts.map +1 -0
  637. package/dist/datasource/datasource.reference.js +66 -0
  638. package/dist/datasource/datasource.sdk.d.ts +7 -0
  639. package/dist/datasource/datasource.sdk.d.ts.map +1 -0
  640. package/dist/datasource/datasource.sdk.js +5 -0
  641. package/dist/datasource/datasource.sqlite.d.ts +88 -0
  642. package/dist/datasource/datasource.sqlite.d.ts.map +1 -0
  643. package/dist/datasource/datasource.sqlite.js +286 -0
  644. package/dist/datasource/datasource.static.d.ts +21 -0
  645. package/dist/datasource/datasource.static.d.ts.map +1 -0
  646. package/dist/datasource/datasource.static.js +30 -0
  647. package/dist/datasource/datasource.system.d.ts +18 -0
  648. package/dist/datasource/datasource.system.d.ts.map +1 -0
  649. package/dist/datasource/datasource.system.js +10 -0
  650. package/dist/datasource/entity.descriptor.d.ts +9 -0
  651. package/dist/datasource/entity.descriptor.d.ts.map +1 -0
  652. package/dist/datasource/entity.descriptor.js +2 -0
  653. package/dist/datasource/index.d.ts +11 -0
  654. package/dist/datasource/index.d.ts.map +1 -0
  655. package/dist/datasource/index.js +9 -0
  656. package/dist/datasource/sqlite-normalizer.d.ts +3 -0
  657. package/dist/datasource/sqlite-normalizer.d.ts.map +1 -0
  658. package/dist/datasource/sqlite-normalizer.js +194 -0
  659. package/dist/datasource/sqlite-validator.d.ts +28 -0
  660. package/dist/datasource/sqlite-validator.d.ts.map +1 -0
  661. package/dist/datasource/sqlite-validator.js +218 -0
  662. package/dist/function/function.abstract.d.ts +538 -0
  663. package/dist/function/function.abstract.d.ts.map +1 -0
  664. package/dist/function/function.abstract.js +271 -0
  665. package/dist/function/function.guard.d.ts +17 -0
  666. package/dist/function/function.guard.d.ts.map +1 -0
  667. package/dist/function/function.guard.js +62 -0
  668. package/dist/function/function.operation.d.ts +26 -0
  669. package/dist/function/function.operation.d.ts.map +1 -0
  670. package/dist/function/function.operation.js +118 -0
  671. package/dist/function/function.rest.continuation.d.ts +12 -0
  672. package/dist/function/function.rest.continuation.d.ts.map +1 -0
  673. package/dist/function/function.rest.continuation.js +24 -0
  674. package/dist/function/function.rest.d.ts +31 -0
  675. package/dist/function/function.rest.d.ts.map +1 -0
  676. package/dist/function/function.rest.error-builder.d.ts +38 -0
  677. package/dist/function/function.rest.error-builder.d.ts.map +1 -0
  678. package/dist/function/function.rest.error-builder.js +161 -0
  679. package/dist/function/function.rest.js +72 -0
  680. package/dist/function/function.rest.parameter-builder.d.ts +33 -0
  681. package/dist/function/function.rest.parameter-builder.d.ts.map +1 -0
  682. package/dist/function/function.rest.parameter-builder.js +81 -0
  683. package/dist/function/function.rest.types.d.ts +28 -0
  684. package/dist/function/function.rest.types.d.ts.map +1 -0
  685. package/dist/function/function.rest.types.js +2 -0
  686. package/dist/function/function.sdk.d.ts +10 -0
  687. package/dist/function/function.sdk.d.ts.map +1 -0
  688. package/dist/function/function.sdk.js +12 -0
  689. package/dist/function/function.soap.d.ts +19 -0
  690. package/dist/function/function.soap.d.ts.map +1 -0
  691. package/dist/function/function.soap.js +36 -0
  692. package/dist/function/function.soap.parameter-builder.d.ts +25 -0
  693. package/dist/function/function.soap.parameter-builder.d.ts.map +1 -0
  694. package/dist/function/function.soap.parameter-builder.js +41 -0
  695. package/dist/function/function.soap.types.d.ts +17 -0
  696. package/dist/function/function.soap.types.d.ts.map +1 -0
  697. package/dist/function/function.soap.types.js +2 -0
  698. package/dist/function/function.sql.d.ts +20 -0
  699. package/dist/function/function.sql.d.ts.map +1 -0
  700. package/dist/function/function.sql.js +53 -0
  701. package/dist/function/function.sql.parameter-builder.d.ts +24 -0
  702. package/dist/function/function.sql.parameter-builder.d.ts.map +1 -0
  703. package/dist/function/function.sql.parameter-builder.js +44 -0
  704. package/dist/function/function.sql.types.d.ts +20 -0
  705. package/dist/function/function.sql.types.d.ts.map +1 -0
  706. package/dist/function/function.sql.types.js +2 -0
  707. package/dist/function/function.types.d.ts +7 -0
  708. package/dist/function/function.types.d.ts.map +1 -0
  709. package/dist/function/function.types.js +2 -0
  710. package/dist/function/index.d.ts +17 -0
  711. package/dist/function/index.d.ts.map +1 -0
  712. package/dist/function/index.js +13 -0
  713. package/dist/icon/index.d.ts +3 -0
  714. package/dist/icon/index.d.ts.map +1 -0
  715. package/dist/icon/index.js +3 -0
  716. package/dist/icon/sdk.icon.d.ts +10 -0
  717. package/dist/icon/sdk.icon.d.ts.map +1 -0
  718. package/dist/icon/sdk.icon.data.d.ts +7 -0
  719. package/dist/icon/sdk.icon.data.d.ts.map +1 -0
  720. package/dist/icon/sdk.icon.data.js +19283 -0
  721. package/dist/icon/sdk.icon.js +27 -0
  722. package/dist/icon/sdk.icon.loader.d.ts +7 -0
  723. package/dist/icon/sdk.icon.loader.d.ts.map +1 -0
  724. package/dist/icon/sdk.icon.loader.js +15 -0
  725. package/dist/icon/sdk.icon.name.d.ts +7 -0
  726. package/dist/icon/sdk.icon.name.d.ts.map +1 -0
  727. package/dist/icon/sdk.icon.name.js +19305 -0
  728. package/dist/index.d.ts +14 -0
  729. package/dist/index.d.ts.map +1 -0
  730. package/dist/index.js +14 -0
  731. package/dist/jsonata/ast.d.ts +15 -0
  732. package/dist/jsonata/ast.d.ts.map +1 -0
  733. package/dist/jsonata/ast.js +118 -0
  734. package/dist/jsonata/base.d.ts +7 -0
  735. package/dist/jsonata/base.d.ts.map +1 -0
  736. package/dist/jsonata/base.js +43 -0
  737. package/dist/jsonata/builder.d.ts +28 -0
  738. package/dist/jsonata/builder.d.ts.map +1 -0
  739. package/dist/jsonata/builder.js +140 -0
  740. package/dist/jsonata/context.d.ts +10 -0
  741. package/dist/jsonata/context.d.ts.map +1 -0
  742. package/dist/jsonata/context.js +349 -0
  743. package/dist/jsonata/expression.d.ts +35 -0
  744. package/dist/jsonata/expression.d.ts.map +1 -0
  745. package/dist/jsonata/expression.js +498 -0
  746. package/dist/jsonata/index.d.ts +6 -0
  747. package/dist/jsonata/index.d.ts.map +1 -0
  748. package/dist/jsonata/index.js +6 -0
  749. package/dist/logger/index.d.ts +2 -0
  750. package/dist/logger/index.d.ts.map +1 -0
  751. package/dist/logger/index.js +2 -0
  752. package/dist/logger/logger.d.ts +14 -0
  753. package/dist/logger/logger.d.ts.map +1 -0
  754. package/dist/logger/logger.js +40 -0
  755. package/dist/runtime/auth.d.ts +19 -0
  756. package/dist/runtime/auth.d.ts.map +1 -0
  757. package/dist/runtime/auth.js +11 -0
  758. package/dist/runtime/index.d.ts +5 -0
  759. package/dist/runtime/index.d.ts.map +1 -0
  760. package/dist/runtime/index.js +3 -0
  761. package/dist/runtime/system.d.ts +27 -0
  762. package/dist/runtime/system.d.ts.map +1 -0
  763. package/dist/runtime/system.js +26 -0
  764. package/dist/screen/common/index.d.ts +9 -0
  765. package/dist/screen/common/index.d.ts.map +1 -0
  766. package/dist/screen/common/index.js +7 -0
  767. package/dist/screen/common/screen.badge.d.ts +8 -0
  768. package/dist/screen/common/screen.badge.d.ts.map +1 -0
  769. package/dist/screen/common/screen.badge.js +2 -0
  770. package/dist/screen/common/screen.bottom-sheet.d.ts +62 -0
  771. package/dist/screen/common/screen.bottom-sheet.d.ts.map +1 -0
  772. package/dist/screen/common/screen.bottom-sheet.js +31 -0
  773. package/dist/screen/common/screen.callback-actions.d.ts +7 -0
  774. package/dist/screen/common/screen.callback-actions.d.ts.map +1 -0
  775. package/dist/screen/common/screen.callback-actions.js +19 -0
  776. package/dist/screen/common/screen.input-definition.d.ts +108 -0
  777. package/dist/screen/common/screen.input-definition.d.ts.map +1 -0
  778. package/dist/screen/common/screen.input-definition.js +109 -0
  779. package/dist/screen/common/screen.placeholder.d.ts +20 -0
  780. package/dist/screen/common/screen.placeholder.d.ts.map +1 -0
  781. package/dist/screen/common/screen.placeholder.js +54 -0
  782. package/dist/screen/common/screen.preview.actions.d.ts +47 -0
  783. package/dist/screen/common/screen.preview.actions.d.ts.map +1 -0
  784. package/dist/screen/common/screen.preview.actions.js +122 -0
  785. package/dist/screen/common/screen.preview.d.ts +40 -0
  786. package/dist/screen/common/screen.preview.d.ts.map +1 -0
  787. package/dist/screen/common/screen.preview.js +87 -0
  788. package/dist/screen/common/screen.state.d.ts +7 -0
  789. package/dist/screen/common/screen.state.d.ts.map +1 -0
  790. package/dist/screen/common/screen.state.js +2 -0
  791. package/dist/screen/common/screen.summary.d.ts +14 -0
  792. package/dist/screen/common/screen.summary.d.ts.map +1 -0
  793. package/dist/screen/common/screen.summary.js +22 -0
  794. package/dist/screen/index.d.ts +16 -0
  795. package/dist/screen/index.d.ts.map +1 -0
  796. package/dist/screen/index.js +16 -0
  797. package/dist/screen/screen.abstract.d.ts +105 -0
  798. package/dist/screen/screen.abstract.d.ts.map +1 -0
  799. package/dist/screen/screen.abstract.js +175 -0
  800. package/dist/screen/screen.calendar.d.ts +22 -0
  801. package/dist/screen/screen.calendar.d.ts.map +1 -0
  802. package/dist/screen/screen.calendar.js +32 -0
  803. package/dist/screen/screen.default.d.ts +65 -0
  804. package/dist/screen/screen.default.d.ts.map +1 -0
  805. package/dist/screen/screen.default.js +68 -0
  806. package/dist/screen/screen.document.d.ts +58 -0
  807. package/dist/screen/screen.document.d.ts.map +1 -0
  808. package/dist/screen/screen.document.js +72 -0
  809. package/dist/screen/screen.full-screen.d.ts +23 -0
  810. package/dist/screen/screen.full-screen.d.ts.map +1 -0
  811. package/dist/screen/screen.full-screen.js +18 -0
  812. package/dist/screen/screen.gallery.d.ts +15 -0
  813. package/dist/screen/screen.gallery.d.ts.map +1 -0
  814. package/dist/screen/screen.gallery.js +14 -0
  815. package/dist/screen/screen.grid.base.d.ts +18 -0
  816. package/dist/screen/screen.grid.base.d.ts.map +1 -0
  817. package/dist/screen/screen.grid.base.js +17 -0
  818. package/dist/screen/screen.grid.dynamic.d.ts +18 -0
  819. package/dist/screen/screen.grid.dynamic.d.ts.map +1 -0
  820. package/dist/screen/screen.grid.dynamic.js +26 -0
  821. package/dist/screen/screen.grid.static.d.ts +14 -0
  822. package/dist/screen/screen.grid.static.d.ts.map +1 -0
  823. package/dist/screen/screen.grid.static.js +12 -0
  824. package/dist/screen/screen.guards.d.ts +41 -0
  825. package/dist/screen/screen.guards.d.ts.map +1 -0
  826. package/dist/screen/screen.guards.js +35 -0
  827. package/dist/screen/screen.list.d.ts +79 -0
  828. package/dist/screen/screen.list.d.ts.map +1 -0
  829. package/dist/screen/screen.list.js +123 -0
  830. package/dist/screen/screen.sdk.d.ts +13 -0
  831. package/dist/screen/screen.sdk.d.ts.map +1 -0
  832. package/dist/screen/screen.sdk.js +9 -0
  833. package/dist/screen/screen.tabs.d.ts +27 -0
  834. package/dist/screen/screen.tabs.d.ts.map +1 -0
  835. package/dist/screen/screen.tabs.instance.d.ts +34 -0
  836. package/dist/screen/screen.tabs.instance.d.ts.map +1 -0
  837. package/dist/screen/screen.tabs.instance.js +79 -0
  838. package/dist/screen/screen.tabs.js +35 -0
  839. package/dist/screen/screen.wizard.d.ts +12 -0
  840. package/dist/screen/screen.wizard.d.ts.map +1 -0
  841. package/dist/screen/screen.wizard.instance.d.ts +20 -0
  842. package/dist/screen/screen.wizard.instance.d.ts.map +1 -0
  843. package/dist/screen/screen.wizard.instance.js +40 -0
  844. package/dist/screen/screen.wizard.js +23 -0
  845. package/dist/utils/check.d.ts +3 -0
  846. package/dist/utils/check.d.ts.map +1 -0
  847. package/dist/utils/check.js +7 -0
  848. package/dist/utils/convert.d.ts +2 -0
  849. package/dist/utils/convert.d.ts.map +1 -0
  850. package/dist/utils/convert.js +8 -0
  851. package/dist/utils/dedent.d.ts +2 -0
  852. package/dist/utils/dedent.d.ts.map +1 -0
  853. package/dist/utils/dedent.js +28 -0
  854. package/dist/utils/index.d.ts +6 -0
  855. package/dist/utils/index.d.ts.map +1 -0
  856. package/dist/utils/index.js +5 -0
  857. package/dist/utils/types.d.ts +2 -0
  858. package/dist/utils/types.d.ts.map +1 -0
  859. package/dist/utils/types.js +2 -0
  860. package/dist/utils/utils.d.ts +9 -0
  861. package/dist/utils/utils.d.ts.map +1 -0
  862. package/dist/utils/utils.js +49 -0
  863. package/dist/widget/index.d.ts +12 -0
  864. package/dist/widget/index.d.ts.map +1 -0
  865. package/dist/widget/index.js +12 -0
  866. package/dist/widget/jw.abstract.d.ts +27 -0
  867. package/dist/widget/jw.abstract.d.ts.map +1 -0
  868. package/dist/widget/jw.abstract.js +36 -0
  869. package/dist/widget/jw.actions.d.ts +17 -0
  870. package/dist/widget/jw.actions.d.ts.map +1 -0
  871. package/dist/widget/jw.actions.js +30 -0
  872. package/dist/widget/jw.avatar.d.ts +19 -0
  873. package/dist/widget/jw.avatar.d.ts.map +1 -0
  874. package/dist/widget/jw.avatar.js +23 -0
  875. package/dist/widget/jw.chart.d.ts +18 -0
  876. package/dist/widget/jw.chart.d.ts.map +1 -0
  877. package/dist/widget/jw.chart.js +23 -0
  878. package/dist/widget/jw.group.d.ts +28 -0
  879. package/dist/widget/jw.group.d.ts.map +1 -0
  880. package/dist/widget/jw.group.js +35 -0
  881. package/dist/widget/jw.image.d.ts +27 -0
  882. package/dist/widget/jw.image.d.ts.map +1 -0
  883. package/dist/widget/jw.image.js +54 -0
  884. package/dist/widget/jw.list.d.ts +44 -0
  885. package/dist/widget/jw.list.d.ts.map +1 -0
  886. package/dist/widget/jw.list.js +44 -0
  887. package/dist/widget/jw.location.d.ts +41 -0
  888. package/dist/widget/jw.location.d.ts.map +1 -0
  889. package/dist/widget/jw.location.js +54 -0
  890. package/dist/widget/jw.sdk.d.ts +2 -0
  891. package/dist/widget/jw.sdk.d.ts.map +1 -0
  892. package/dist/widget/jw.sdk.js +2 -0
  893. package/dist/widget/jw.status.condition.d.ts +20 -0
  894. package/dist/widget/jw.status.condition.d.ts.map +1 -0
  895. package/dist/widget/jw.status.condition.js +27 -0
  896. package/dist/widget/jw.status.d.ts +8 -0
  897. package/dist/widget/jw.status.d.ts.map +1 -0
  898. package/dist/widget/jw.status.js +11 -0
  899. package/dist/widget/jw.value.d.ts +24 -0
  900. package/dist/widget/jw.value.d.ts.map +1 -0
  901. package/dist/widget/jw.value.js +51 -0
  902. package/package.json +94 -0
@@ -0,0 +1,218 @@
1
+ import Database from 'better-sqlite3';
2
+ import { CommonNameMixedRegex, isSqliteSystemTable, } from '../abstract/zod.types.js';
3
+ const COLUMN_NAME_PATTERN = /^[a-zA-Z_][a-zA-Z0-9_ .-]{0,127}$/;
4
+ const COLUMN_FORBIDDEN_CHARS = /['"`;()\\]/;
5
+ const DEFAULT_SCHEMA = 'default';
6
+ const SCHEMA_SEPARATOR = '/';
7
+ const MAX_POST_ESCAPE = 80;
8
+ const RESERVED_COLUMNS = new Set(['id', 'data']);
9
+ const TABLE_TRANSFORMATIONS = [
10
+ [/\//g, '__jx__'],
11
+ [/-/g, '_jx_'],
12
+ ];
13
+ const BLOCK_COMMENT_REGEX = /\/\*[\s\S]*?\*\//g;
14
+ const LINE_COMMENT_REGEX = /--[^\n]*/g;
15
+ const EXTERNAL_PACKAGE_TABLE_PATTERN = /^\[([^\]]+)\]\.\[([^\]]+)\]$/;
16
+ const SYSTEM_TABLE_SCHEMAS = {
17
+ _syncScope: `
18
+ [id] TEXT NOT NULL PRIMARY KEY,
19
+ [timestamp] INTEGER,
20
+ [state] TEXT,
21
+ [notStarted] INTEGER DEFAULT(0),
22
+ [syncing] INTEGER DEFAULT(0),
23
+ [synced] INTEGER DEFAULT(0),
24
+ [failed] INTEGER DEFAULT(0),
25
+ [lastStartedAt] INTEGER NULL,
26
+ [lastFailedAt] INTEGER NULL,
27
+ [lastSyncedAt] INTEGER NULL,
28
+ [details] TEXT NULL
29
+ `,
30
+ _commandQueue: `
31
+ [id] INTEGER NOT NULL PRIMARY KEY,
32
+ [queue] TEXT NOT NULL,
33
+ [type] TEXT NOT NULL,
34
+ [payload] TEXT NULL,
35
+ [state] TEXT NULL,
36
+ [error] TEXT NULL,
37
+ [retryCount] INTEGER NULL,
38
+ [retryAfter] INTEGER NULL
39
+ `,
40
+ };
41
+ export function validateColumnName(name) {
42
+ if (typeof name !== 'string') {
43
+ throw new Error(`Column name must be a string, got: ${typeof name}`);
44
+ }
45
+ if (name === '') {
46
+ throw new Error('Column name must be a non-empty string');
47
+ }
48
+ if (hasOuterWhitespace(name)) {
49
+ throw new Error(`Invalid column name '${name}': cannot have leading or trailing spaces`);
50
+ }
51
+ if (/[^\x20-\x7E]/.test(name)) {
52
+ throw new Error(`Invalid column name '${name}': only ASCII characters are allowed`);
53
+ }
54
+ if (!COLUMN_NAME_PATTERN.test(name)) {
55
+ throw new Error(`Invalid column name: must start with letter or underscore, contain only letters/numbers/spaces/hyphens/periods/underscores, max 128 chars`);
56
+ }
57
+ ensureDoesNotContain(name, '--', `Invalid column name '${name}': cannot contain -- (SQL comment marker)`);
58
+ ensureDoesNotContainAny(name, ['/*', '*/'], `Invalid column name '${name}': cannot contain /* or */ (SQL comment markers)`);
59
+ if (COLUMN_FORBIDDEN_CHARS.test(name)) {
60
+ throw new Error(`Invalid column name '${name}': cannot contain quotes (', ", \`), semicolons, parentheses, or backslashes`);
61
+ }
62
+ }
63
+ export function validateTableName(name) {
64
+ if (!name || typeof name !== 'string') {
65
+ throw new Error(`Table name must be a non-empty string, got: ${typeof name}`);
66
+ }
67
+ if (name.includes(']') || name.includes('[')) {
68
+ throw new Error(`Invalid table name '${name}': cannot contain brackets [ or ] (bracket escape vulnerability)`);
69
+ }
70
+ ensureDoesNotContain(name, '--', `Invalid table name '${name}': cannot contain -- (SQL comment marker)`);
71
+ const { tableName, hasSchema } = extractTableName(name);
72
+ if (isSqliteSystemTable(tableName)) {
73
+ const transformedName = safeTableName(name);
74
+ if (transformedName.length > MAX_POST_ESCAPE) {
75
+ throw new Error(`Invalid table name '${name}': after transformation becomes '${transformedName}' (${String(transformedName.length)} chars, max ${String(MAX_POST_ESCAPE)})`);
76
+ }
77
+ return transformedName;
78
+ }
79
+ if (!CommonNameMixedRegex.test(tableName)) {
80
+ const part = hasSchema ? `table part '${tableName}'` : `name`;
81
+ throw new Error(`Invalid table name '${name}': ${part} must be 2-50 characters, start with a letter, contain only letters/numbers/hyphens/underscores, and end with a letter or number`);
82
+ }
83
+ const transformedName = safeTableName(name);
84
+ if (transformedName.length > MAX_POST_ESCAPE) {
85
+ throw new Error(`Invalid table name '${name}': after transformation becomes '${transformedName}' (${String(transformedName.length)} chars, max ${String(MAX_POST_ESCAPE)})`);
86
+ }
87
+ return transformedName;
88
+ }
89
+ function safeTableName(tableName) {
90
+ const needsTransform = TABLE_TRANSFORMATIONS.some(([pattern]) => pattern.test(tableName));
91
+ if (!needsTransform)
92
+ return tableName;
93
+ return TABLE_TRANSFORMATIONS.reduce((current, [pattern, replacement]) => current.replace(pattern, replacement), tableName);
94
+ }
95
+ export const __testOnly__ = {
96
+ safeTableName,
97
+ };
98
+ export function replaceParameters(query) {
99
+ return query.replace(/[$@](\w+)/g, '?');
100
+ }
101
+ export function replaceTableName(query, originalName, safeName) {
102
+ if (!query || !originalName || !safeName || originalName === safeName) {
103
+ return query;
104
+ }
105
+ if (originalName.startsWith('[') && originalName.endsWith(']')) {
106
+ const escapedName = escapeRegExp(originalName);
107
+ return query.replace(new RegExp(escapedName, 'g'), `[${safeName}]`);
108
+ }
109
+ const escapedName = escapeRegExp(originalName);
110
+ return (query
111
+ .replace(new RegExp(`\\[${escapedName}\\]`, 'g'), `[${safeName}]`)
112
+ .replace(new RegExp(`\\b${escapedName}\\b`, 'g'), safeName));
113
+ }
114
+ export function createValidationDatabase(tableNames, options = {}) {
115
+ const db = new Database(':memory:');
116
+ const { additionalColumns = [] } = options;
117
+ const columns = buildColumnDefinitions(additionalColumns);
118
+ const tables = new Map();
119
+ for (const tableName of tableNames) {
120
+ const packageMatch = EXTERNAL_PACKAGE_TABLE_PATTERN.exec(tableName);
121
+ if (packageMatch) {
122
+ const [, packageName, entityName] = packageMatch;
123
+ const safeName = `${packageName.replace(/-/g, '_')}_${entityName}`;
124
+ const normalizedName = tableName;
125
+ db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${columns.join(', ')})`);
126
+ tables.set(tableName, { safeName, normalizedName });
127
+ continue;
128
+ }
129
+ const normalizedName = stripWrappingBrackets(tableName);
130
+ if (isSqliteSystemTable(normalizedName)) {
131
+ const safeName = normalizedName;
132
+ const schema = SYSTEM_TABLE_SCHEMAS[normalizedName];
133
+ if (!schema) {
134
+ throw new Error(`System table '${normalizedName}' is whitelisted but missing schema definition. ` +
135
+ `Add schema to SYSTEM_TABLE_SCHEMAS (source: jigx/packages/datastore/src/database/migrations/solution/)`);
136
+ }
137
+ db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${schema})`);
138
+ tables.set(tableName, { safeName, normalizedName });
139
+ continue;
140
+ }
141
+ const safeName = validateTableName(normalizedName);
142
+ db.exec(`CREATE TABLE IF NOT EXISTS [${safeName}] (${columns.join(', ')})`);
143
+ tables.set(tableName, { safeName, normalizedName });
144
+ }
145
+ return { db, tables };
146
+ }
147
+ export function stripSqlComments(query) {
148
+ return query.replace(BLOCK_COMMENT_REGEX, ' ').replace(LINE_COMMENT_REGEX, ' ');
149
+ }
150
+ export function validateSelectQuery(db, query) {
151
+ const trimmed = query.trim();
152
+ if (!trimmed) {
153
+ throw new Error('Query cannot be empty');
154
+ }
155
+ const noComments = stripSqlComments(trimmed).trim();
156
+ const upperQuery = noComments.toUpperCase();
157
+ if (upperQuery.startsWith('PRAGMA')) {
158
+ throw new Error('PRAGMA commands are not allowed in datasources');
159
+ }
160
+ const stmt = db.prepare(query);
161
+ if (!stmt.reader) {
162
+ throw new Error('Only SELECT queries are allowed in datasources');
163
+ }
164
+ return stmt;
165
+ }
166
+ export function extractColumns(stmt) {
167
+ return stmt.columns().map((col) => col.name.toLowerCase());
168
+ }
169
+ export function validateRequiredColumns(columns, requiredColumns) {
170
+ const columnSet = new Set(columns);
171
+ const missing = requiredColumns.filter((required) => !columnSet.has(required));
172
+ return {
173
+ isValid: missing.length === 0,
174
+ missing,
175
+ };
176
+ }
177
+ function hasOuterWhitespace(value) {
178
+ return value.trim() !== value;
179
+ }
180
+ function ensureDoesNotContain(value, token, errorMessage) {
181
+ if (value.includes(token)) {
182
+ throw new Error(errorMessage);
183
+ }
184
+ }
185
+ function ensureDoesNotContainAny(value, tokens, errorMessage) {
186
+ if (tokens.some((token) => value.includes(token))) {
187
+ throw new Error(errorMessage);
188
+ }
189
+ }
190
+ function extractTableName(name) {
191
+ const parts = name.split(SCHEMA_SEPARATOR);
192
+ if (parts.length === 1) {
193
+ return { tableName: name, hasSchema: false };
194
+ }
195
+ if (parts.length === 2) {
196
+ const [schema, table] = parts;
197
+ if (schema !== DEFAULT_SCHEMA) {
198
+ throw new Error(`Invalid table name '${name}': schema must be '${DEFAULT_SCHEMA}', got '${schema}'`);
199
+ }
200
+ return { tableName: table, hasSchema: true };
201
+ }
202
+ throw new Error(`Invalid table name '${name}': cannot contain multiple '/' separators`);
203
+ }
204
+ function stripWrappingBrackets(name) {
205
+ return name.startsWith('[') && name.endsWith(']') ? name.slice(1, -1) : name;
206
+ }
207
+ function buildColumnDefinitions(additionalColumns) {
208
+ const uniqueColumns = Array.from(new Set(additionalColumns)).filter((column) => !RESERVED_COLUMNS.has(column));
209
+ const validatedColumns = uniqueColumns.map((column) => {
210
+ validateColumnName(column);
211
+ return `[${column}] TEXT`;
212
+ });
213
+ return ['id TEXT PRIMARY KEY', 'data TEXT', 'file TEXT', ...validatedColumns];
214
+ }
215
+ function escapeRegExp(value) {
216
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
217
+ }
218
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlLXZhbGlkYXRvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kYXRhc291cmNlL3NxbGl0ZS12YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxRQUFRLE1BQU0sZ0JBQWdCLENBQUE7QUFDckMsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQTtBQWtDakMsTUFBTSxtQkFBbUIsR0FBRyxtQ0FBbUMsQ0FBQTtBQUMvRCxNQUFNLHNCQUFzQixHQUFHLFlBQVksQ0FBQTtBQUMzQyxNQUFNLGNBQWMsR0FBRyxTQUFTLENBQUE7QUFDaEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUE7QUFDNUIsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFBO0FBQzFCLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUNoRCxNQUFNLHFCQUFxQixHQUE0QjtJQUNyRCxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUM7SUFDakIsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDO0NBQ2YsQ0FBQTtBQUNELE1BQU0sbUJBQW1CLEdBQUcsbUJBQW1CLENBQUE7QUFDL0MsTUFBTSxrQkFBa0IsR0FBRyxXQUFXLENBQUE7QUFTdEMsTUFBTSw4QkFBOEIsR0FBRyw4QkFBOEIsQ0FBQTtBQVFyRSxNQUFNLG9CQUFvQixHQUEwQztJQUVsRSxVQUFVLEVBQUU7Ozs7Ozs7Ozs7OztHQVlYO0lBRUQsYUFBYSxFQUFFOzs7Ozs7Ozs7R0FTZDtDQUNGLENBQUE7QUFzQ0QsTUFBTSxVQUFVLGtCQUFrQixDQUFDLElBQVksRUFBUTtJQUVyRCxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQzdCLE1BQU0sSUFBSSxLQUFLLENBQUMsc0NBQXNDLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQTtJQUN0RSxD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QUUsQ0FBQztRQUNyRCxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUMxQixPQUFPLElBQUksTUFBTSxRQUFRLENBQUE7SUFBQSxDQUMxQixDQUFDLENBQUE7SUFFRixPQUFPLENBQUMscUJBQXFCLEVBQUUsV0FBVyxFQUFFLFdBQVcsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUE7QUFBQSxDQUM5RTtBQUVELFNBQVMsWUFBWSxDQUFDLEtBQWEsRUFBVTtJQUMzQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLENBQUE7QUFBQSxDQUNwRCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBEYXRhYmFzZSBmcm9tICdiZXR0ZXItc3FsaXRlMydcbmltcG9ydCB7XG4gIENvbW1vbk5hbWVNaXhlZFJlZ2V4LFxuICBpc1NxbGl0ZVN5c3RlbVRhYmxlLFxuICB0eXBlIFN5c3RlbVNxbGl0ZVRhYmxlTmFtZSxcbn0gZnJvbSAnLi4vYWJzdHJhY3Qvem9kLnR5cGVzLmpzJ1xuXG4vKipcbiAqIFNRTGl0ZSBTZWN1cml0eSBWYWxpZGF0aW9uIFV0aWxpdGllc1xuICpcbiAqIFRoaXMgbW9kdWxlIGxldmVyYWdlcyBTUUxpdGUncyBidWlsdC1pbiBzZWN1cml0eSBmZWF0dXJlcyBmb3IgdmFsaWRhdGlvbjpcbiAqXG4gKiAxLiAqKlNRTGl0ZSdzIEhhcmRlbmVkIFBhcnNlcioqIChkYi5wcmVwYXJlKCkpXG4gKiAgICAtIEJhdHRsZS10ZXN0ZWQgU1FMIHBhcnNlciB1c2VkIGJ5IG1pbGxpb25zIG9mIGFwcGxpY2F0aW9uc1xuICogICAgLSBWYWxpZGF0ZXMgcXVlcnkgc3ludGF4IHdpdGhvdXQgZXhlY3V0aW9uXG4gKiAgICAtIFJlZmVyZW5jZTogaHR0cHM6Ly9zcWxpdGUub3JnL2xhbmcuaHRtbCwgaHR0cHM6Ly9zcWxpdGUub3JnL3NlY3VyaXR5Lmh0bWxcbiAqXG4gKiAyLiAqKmJldHRlci1zcWxpdGUzIE11bHRpcGxlIFN0YXRlbWVudCBQcm90ZWN0aW9uKipcbiAqICAgIC0gUHJlcGFyZWQgc3RhdGVtZW50cyAoZGIucHJlcGFyZSkgYmxvY2sgbXVsdGlwbGUgU1FMIHN0YXRlbWVudHNcbiAqICAgIC0gUHJldmVudHMgaW5qZWN0aW9uIHZpYSBzdGF0ZW1lbnQgY2hhaW5pbmc6IGAnOyBEUk9QIFRBQkxFIHVzZXJzOyAtLWBcbiAqICAgIC0gVGhyb3dzIFJhbmdlRXJyb3IgaWYgbXVsdGlwbGUgc3RhdGVtZW50cyBkZXRlY3RlZFxuICpcbiAqIDMuICoqU1FMaXRlIEJyYWNrZXQtUXVvdGluZyoqIChbaWRlbnRpZmllcl0pXG4gKiAgICAtIFNhZmUgaWRlbnRpZmllciBxdW90aW5nIG1lY2hhbmlzbSBidWlsdCBpbnRvIFNRTGl0ZVxuICogICAgLSBQcm90ZWN0cyBhZ2FpbnN0IHJlc2VydmVkIGtleXdvcmRzIGFuZCBzcGVjaWFsIGNoYXJhY3RlcnNcbiAqICAgIC0gU3VwcG9ydHMgZXNjYXBlIHZpYSBdXSBmb3IgbGl0ZXJhbCBdIGNoYXJhY3RlclxuICpcbiAqIDQuICoqU1FMaXRlIEV4cHJlc3Npb24gTGltaXRzKiogKFNRTElURV9MSU1JVF9FWFBSX0RFUFRIID0gMTAwMClcbiAqICAgIC0gQnVpbHQtaW4gRG9TIHByb3RlY3Rpb24gYWdhaW5zdCBkZWVwbHkgbmVzdGVkIGV4cHJlc3Npb25zXG4gKiAgICAtIFJlZmVyZW5jZTogaHR0cHM6Ly9zcWxpdGUub3JnL2xpbWl0cy5odG1sXG4gKlxuICogNS4gKipQcmVwYXJlZCBTdGF0ZW1lbnQgUGFyYW1ldGVyIEJpbmRpbmcqKlxuICogICAgLSBiZXR0ZXItc3FsaXRlMyBhdXRvbWF0aWNhbGx5IGVzY2FwZXMgYm91bmQgcGFyYW1ldGVyc1xuICogICAgLSBQcmV2ZW50cyBpbmplY3Rpb24gYnkgc2VwYXJhdGluZyBjb2RlIGZyb20gZGF0YVxuICpcbiAqIEFkZGl0aW9uYWwgbGF5ZXJzOiBDdXN0b20gdmFsaWRhdGlvbiAodmFsaWRhdGVUYWJsZU5hbWUsIHZhbGlkYXRlQ29sdW1uTmFtZSlcbiAqIHByb3ZpZGVzIGFsbG93bGlzdC1iYXNlZCBpZGVudGlmaWVyIHZhbGlkYXRpb24gYmVmb3JlIHVzaW5nIFNRTGl0ZSBmZWF0dXJlcy5cbiAqL1xuXG5jb25zdCBDT0xVTU5fTkFNRV9QQVRURVJOID0gL15bYS16QS1aX11bYS16QS1aMC05XyAuLV17MCwxMjd9JC9cbmNvbnN0IENPTFVNTl9GT1JCSURERU5fQ0hBUlMgPSAvWydcImA7KClcXFxcXS9cbmNvbnN0IERFRkFVTFRfU0NIRU1BID0gJ2RlZmF1bHQnXG5jb25zdCBTQ0hFTUFfU0VQQVJBVE9SID0gJy8nXG5jb25zdCBNQVhfUE9TVF9FU0NBUEUgPSA4MFxuY29uc3QgUkVTRVJWRURfQ09MVU1OUyA9IG5ldyBTZXQoWydpZCcsICdkYXRhJ10pXG5jb25zdCBUQUJMRV9UUkFOU0ZPUk1BVElPTlM6IEFycmF5PFtSZWdFeHAsIHN0cmluZ10+ID0gW1xuICBbL1xcLy9nLCAnX19qeF9fJ10sXG4gIFsvLS9nLCAnX2p4XyddLFxuXVxuY29uc3QgQkxPQ0tfQ09NTUVOVF9SRUdFWCA9IC9cXC9cXCpbXFxzXFxTXSo/XFwqXFwvL2dcbmNvbnN0IExJTkVfQ09NTUVOVF9SRUdFWCA9IC8tLVteXFxuXSovZ1xuXG4vKipcbiAqIE1hdGNoZXMgZXh0ZXJuYWwgcGFja2FnZSB0YWJsZSBmb3JtYXQ6IFtwYWNrYWdlTmFtZV0uW3RhYmxlTmFtZV1cbiAqXG4gKiBFeGFtcGxlOiBcIltteVBhY2thZ2VdLltteVRhYmxlXVwiXG4gKiAtIEdyb3VwIDE6IHBhY2thZ2VOYW1lIChjaGFyYWN0ZXJzIGJldHdlZW4gZmlyc3QgcGFpciBvZiBicmFja2V0cylcbiAqIC0gR3JvdXAgMjogdGFibGVOYW1lIChjaGFyYWN0ZXJzIGJldHdlZW4gc2Vjb25kIHBhaXIgb2YgYnJhY2tldHMpXG4gKi9cbmNvbnN0IEVYVEVSTkFMX1BBQ0tBR0VfVEFCTEVfUEFUVEVSTiA9IC9eXFxbKFteXFxdXSspXFxdXFwuXFxbKFteXFxdXSspXFxdJC9cblxuLyoqXG4gKiBTeXN0ZW0gdGFibGUgc2NoZW1hcyBmcm9tIHBsYXRmb3JtIGRhdGFiYXNlIG1pZ3JhdGlvbnMuXG4gKiBTb3VyY2U6IGppZ3gvcGFja2FnZXMvZGF0YXN0b3JlL3NyYy9kYXRhYmFzZS9taWdyYXRpb25zL3NvbHV0aW9uL1xuICpcbiAqIFRoZXNlIHNjaGVtYXMgYXJlIHVzZWQgdG8gY3JlYXRlIGFjY3VyYXRlIHZhbGlkYXRpb24gZGF0YWJhc2VzIGZvciBzeXN0ZW0gdGFibGVzLlxuICovXG5jb25zdCBTWVNURU1fVEFCTEVfU0NIRU1BUzogUmVjb3JkPFN5c3RlbVNxbGl0ZVRhYmxlTmFtZSwgc3RyaW5nPiA9IHtcbiAgLy8gU291cmNlOiAwMDNfc3luY19zdGF0dXNfYW5kX3Njb3BlLnNxbC50c1xuICBfc3luY1Njb3BlOiBgXG4gICAgW2lkXSAgICAgICAgICAgIFRFWFQgTk9UIE5VTEwgUFJJTUFSWSBLRVksXG4gICAgW3RpbWVzdGFtcF0gICAgIElOVEVHRVIsXG4gICAgW3N0YXRlXSAgICAgICAgIFRFWFQsXG4gICAgW25vdFN0YXJ0ZWRdICAgIElOVEVHRVIgREVGQVVMVCgwKSxcbiAgICBbc3luY2luZ10gICAgICAgSU5URUdFUiBERUZBVUxUKDApLFxuICAgIFtzeW5jZWRdICAgICAgICBJTlRFR0VSIERFRkFVTFQoMCksXG4gICAgW2ZhaWxlZF0gICAgICAgIElOVEVHRVIgREVGQVVMVCgwKSxcbiAgICBbbGFzdFN0YXJ0ZWRBdF0gSU5URUdFUiBOVUxMLFxuICAgIFtsYXN0RmFpbGVkQXRdICBJTlRFR0VSIE5VTEwsXG4gICAgW2xhc3RTeW5jZWRBdF0gIElOVEVHRVIgTlVMTCxcbiAgICBbZGV0YWlsc10gICAgICAgVEVYVCBOVUxMXG4gIGAsXG4gIC8vIFNvdXJjZTogMDAxX2luaXRpYWwuc3FsLnRzXG4gIF9jb21tYW5kUXVldWU6IGBcbiAgICBbaWRdICAgICAgICAgSU5URUdFUiBOT1QgTlVMTCBQUklNQVJZIEtFWSxcbiAgICBbcXVldWVdICAgICAgVEVYVCBOT1QgTlVMTCxcbiAgICBbdHlwZV0gICAgICAgVEVYVCBOT1QgTlVMTCxcbiAgICBbcGF5bG9hZF0gICAgVEVYVCBOVUxMLFxuICAgIFtzdGF0ZV0gICAgICBURVhUIE5VTEwsXG4gICAgW2Vycm9yXSAgICAgIFRFWFQgTlVMTCxcbiAgICBbcmV0cnlDb3VudF0gSU5URUdFUiBOVUxMLFxuICAgIFtyZXRyeUFmdGVyXSBJTlRFR0VSIE5VTExcbiAgYCxcbn1cblxuLyoqXG4gKiBSZXR1cm4gdHlwZSBmb3IgY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTXVsdGlUYWJsZVZhbGlkYXRpb25SZXN1bHQge1xuICByZWFkb25seSBkYjogRGF0YWJhc2UuRGF0YWJhc2VcbiAgcmVhZG9ubHkgdGFibGVzOiBNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IHNhZmVOYW1lOiBzdHJpbmc7IHJlYWRvbmx5IG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcgfT5cbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSB0aGF0IGEgY29sdW1uIG5hbWUgaXMgYSBzYWZlIFNRTCBpZGVudGlmaWVyLlxuICogUHJldmVudHMgU1FMIGluamVjdGlvbiBieSBlbnN1cmluZyBjb2x1bW4gbmFtZXMgZm9sbG93IHN0cmljdCBydWxlcy5cbiAqXG4gKiBSdWxlczpcbiAqIC0gQ2Fubm90IGJlIGVtcHR5XG4gKiAtIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciAoYS16LCBBLVopIG9yIHVuZGVyc2NvcmVcbiAqIC0gQ2FuIGNvbnRhaW4gcHJpbnRhYmxlIEFTQ0lJOiBsZXR0ZXJzLCBudW1iZXJzLCB1bmRlcnNjb3JlLCBoeXBoZW4sIHBlcmlvZCwgc3BhY2VcbiAqIC0gTWF4aW11bSAxMjggY2hhcmFjdGVycyB0b3RhbCAoMSBzdGFydCBjaGFyYWN0ZXIgKyB1cCB0byAxMjcgYWRkaXRpb25hbCBjaGFyYWN0ZXJzKVxuICogLSBDYW5ub3QgY29udGFpbiBkYW5nZXJvdXMgc2VxdWVuY2VzOiAtLSwgLyosICpcXC9cbiAqIC0gQ2Fubm90IGNvbnRhaW4gaW5qZWN0aW9uIGNoYXJhY3RlcnM6IHF1b3Rlcywgc2VtaWNvbG9ucywgcGFyZW50aGVzZXMsIGJhY2tzbGFzaGVzXG4gKiAtIFNRTCByZXNlcnZlZCBrZXl3b3JkcyBhcmUgYWxsb3dlZCAod2lsbCBiZSBhdXRvbWF0aWNhbGx5IHF1b3RlZCB3aXRoIGJyYWNrZXRzKVxuICpcbiAqIEBwYXJhbSBuYW1lIC0gQ29sdW1uIG5hbWUgdG8gdmFsaWRhdGVcbiAqIEB0aHJvd3MgRXJyb3IgaWYgY29sdW1uIG5hbWUgaXMgaW52YWxpZCBvciBwb3RlbnRpYWxseSBkYW5nZXJvdXNcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCd1c2VyX2lkJykgICAgICAvLyDinIUgVmFsaWRcbiAqIHZhbGlkYXRlQ29sdW1uTmFtZSgnRmlyc3QgTmFtZScpICAgLy8g4pyFIFZhbGlkIChzcGFjZSBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdjcmVhdGVkLWF0JykgICAvLyDinIUgVmFsaWQgKGh5cGhlbiBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCd1c2VyLmVtYWlsJykgICAvLyDinIUgVmFsaWQgKHBlcmlvZCBhbGxvd2VkKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdzZWxlY3QnKSAgICAgICAvLyDinIUgVmFsaWQgKGtleXdvcmQsIHdpbGwgYmUgcXVvdGVkIGFzIFtzZWxlY3RdKVxuICogdmFsaWRhdGVDb2x1bW5OYW1lKCdmb28tLWJhcicpICAgICAvLyDinYwgVGhyb3dzICgtLSBpcyBTUUwgY29tbWVudCBtYXJrZXIpXG4gKiB2YWxpZGF0ZUNvbHVtbk5hbWUoJzEyM2FiYycpICAgICAgIC8vIOKdjCBUaHJvd3MgKHN0YXJ0cyB3aXRoIG51bWJlcilcbiAqIHZhbGlkYXRlQ29sdW1uTmFtZSgneDsgRFJPUCcpICAgICAgLy8g4p2MIFRocm93cyAoY29udGFpbnMgc2VtaWNvbG9uKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbHVtbk5hbWUobmFtZTogc3RyaW5nKTogdm9pZCB7XG4gIC8vIENoZWNrIGZvciBub24tc3RyaW5nIHZhbHVlc1xuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBDb2x1bW4gbmFtZSBtdXN0IGJlIGEgc3RyaW5nLCBnb3Q6ICR7dHlwZW9mIG5hbWV9YClcbiAgfVxuXG4gIC8vIENoZWNrIGZvciBlbXB0eSBzdHJpbmdcbiAgaWYgKG5hbWUgPT09ICcnKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdDb2x1bW4gbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpXG4gIH1cblxuICAvLyBSZWplY3QgbGVhZGluZy90cmFpbGluZyB3aGl0ZXNwYWNlXG4gIGlmIChoYXNPdXRlcldoaXRlc3BhY2UobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgaGF2ZSBsZWFkaW5nIG9yIHRyYWlsaW5nIHNwYWNlc2ApXG4gIH1cblxuICAvLyBCbG9jayBub24tQVNDSUkgY2hhcmFjdGVycyAob25seSBwcmludGFibGUgQVNDSUkgYWxsb3dlZCBmb3Igc2VjdXJpdHkvY29tcGF0aWJpbGl0eSlcblxuICBpZiAoL1teXFx4MjAtXFx4N0VdLy50ZXN0KG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNvbHVtbiBuYW1lICcke25hbWV9Jzogb25seSBBU0NJSSBjaGFyYWN0ZXJzIGFyZSBhbGxvd2VkYClcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGJhc2ljIHBhdHRlcm46IGxldHRlci91bmRlcnNjb3JlIGZvbGxvd2VkIGJ5IHNhZmUgY2hhcmFjdGVycywgbWF4IDEyOCBjaGFyc1xuICAvLyBBbGxvd3M6IGxldHRlcnMsIGRpZ2l0cywgdW5kZXJzY29yZSwgaHlwaGVuLCBwZXJpb2QsIHNwYWNlXG4gIGlmICghQ09MVU1OX05BTUVfUEFUVEVSTi50ZXN0KG5hbWUpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgY29sdW1uIG5hbWU6IG11c3Qgc3RhcnQgd2l0aCBsZXR0ZXIgb3IgdW5kZXJzY29yZSwgY29udGFpbiBvbmx5IGxldHRlcnMvbnVtYmVycy9zcGFjZXMvaHlwaGVucy9wZXJpb2RzL3VuZGVyc2NvcmVzLCBtYXggMTI4IGNoYXJzYCxcbiAgICApXG4gIH1cblxuICAvLyBCbG9jayBTUUwgY29tbWVudCBtYXJrZXJzIChldmVuIHRob3VnaCB3ZSBicmFja2V0LXF1b3RlLCBkZWZlbnNlLWluLWRlcHRoKVxuICBlbnN1cmVEb2VzTm90Q29udGFpbihcbiAgICBuYW1lLFxuICAgICctLScsXG4gICAgYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAtLSAoU1FMIGNvbW1lbnQgbWFya2VyKWAsXG4gIClcbiAgZW5zdXJlRG9lc05vdENvbnRhaW5BbnkoXG4gICAgbmFtZSxcbiAgICBbJy8qJywgJyovJ10sXG4gICAgYEludmFsaWQgY29sdW1uIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAvKiBvciAqLyAoU1FMIGNvbW1lbnQgbWFya2VycylgLFxuICApXG5cbiAgLy8gQmxvY2sgU1FMIGluamVjdGlvbiBjaGFyYWN0ZXJzXG4gIGlmIChDT0xVTU5fRk9SQklEREVOX0NIQVJTLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCBjb2x1bW4gbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIHF1b3RlcyAoJywgXCIsIFxcYCksIHNlbWljb2xvbnMsIHBhcmVudGhlc2VzLCBvciBiYWNrc2xhc2hlc2AsXG4gICAgKVxuICB9XG5cbiAgLy8gTm90ZTogU1FMIHJlc2VydmVkIGtleXdvcmRzIChTRUxFQ1QsIFdIRVJFLCBldGMuKSBwYXNzIHZhbGlkYXRpb25cbiAgLy8gVGhleSBhcmUgYXV0b21hdGljYWxseSBxdW90ZWQgd2l0aCBicmFja2V0cyBba2V5d29yZF0gZHVyaW5nIHRhYmxlIGNyZWF0aW9uXG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBhIHRhYmxlIG5hbWUgaXMgYSBzYWZlIFNRTCBpZGVudGlmaWVyLlxuICogUHJldmVudHMgU1FMIGluamVjdGlvbiBieSBlbnN1cmluZyB0YWJsZSBuYW1lcyBmb2xsb3cgc3RyaWN0IHJ1bGVzLlxuICogVmFsaWRhdGVkIG5hbWVzIGFyZSB1c2VkIHdpdGggU1FMaXRlJ3MgYnJhY2tldC1xdW90aW5nIHN5bnRheCBbbmFtZV0gZm9yIHNhZmUgaGFuZGxpbmcuXG4gKlxuICogSU1QT1JUQU5UOiBUaGlzIHZhbGlkYXRlcyBTVFJVQ1RVUkFML01FVEEgaWRlbnRpZmllcnMgKHRhYmxlIG5hbWVzKSwgTk9UIGRhdGEgaWRlbnRpZmllcnMuXG4gKiBEYXRhIHJvdyBpZGVudGlmaWVycyAoUklEKSB1c2Ugc2VwYXJhdGUgdmFsaWRhdGlvbiB3aXRoIDY0LWNoYXIgbGltaXQgZm9yIHBheWxvYWQgZGF0YS5cbiAqXG4gKiBWYWxpZGF0aW9uIG9jY3VycyBhdCBUV08gc3RhZ2VzOlxuICogMS4gUFJFLVRSQU5TRk9STUFUSU9OOiBJbnB1dCB2YWxpZGF0aW9uIChzdHJ1Y3R1cmFsIGNvcnJlY3RuZXNzKVxuICogMi4gUE9TVC1UUkFOU0ZPUk1BVElPTjogQWZ0ZXIgZXNjYXBpbmcgKC8g4oaSIF9fanhfXywgLSDihpIgX2p4XykgdG8gZW5zdXJlIFNRTGl0ZSBjb21wYXRpYmlsaXR5XG4gKlxuICogUnVsZXMgKHByZS10cmFuc2Zvcm1hdGlvbik6XG4gKiAtIE11c3Qgc3RhcnQgd2l0aCBhIGxldHRlciAoYS16LCBBLVopXG4gKiAtIENhbiBjb250YWluIGxldHRlcnMsIG51bWJlcnMsIHVuZGVyc2NvcmVzLCBmb3J3YXJkIHNsYXNoZXMsIGh5cGhlbnNcbiAqIC0gTWF4aW11bSA1OCBjaGFyYWN0ZXJzIChkZWZhdWx0LyBwcmVmaXggOCBjaGFycyArIHRhYmxlIG5hbWUgNTAgY2hhcnMpXG4gKiAtIENhbm5vdCBjb250YWluIGJyYWNrZXRzIF0gd2hpY2ggY291bGQgZXNjYXBlIGJyYWNrZXQtcXVvdGluZ1xuICogLSBDYW5ub3QgYmUgZW1wdHlcbiAqXG4gKiBSdWxlcyAocG9zdC10cmFuc2Zvcm1hdGlvbik6XG4gKiAtIFRyYW5zZm9ybWVkIG5hbWUgbXVzdCBub3QgZXhjZWVkIDgwIGNoYXJhY3RlcnNcbiAqIC0gUHJldmVudHMgU1FMaXRlIGlkZW50aWZpZXIgb3ZlcmZsb3cgYWZ0ZXIgZXNjYXBpbmdcbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRhYmxlIG5hbWUgdG8gdmFsaWRhdGVcbiAqIEByZXR1cm5zIFNhZmUgdGFibGUgbmFtZSBmb3IgU1FMaXRlIChlLmcuLCAnZGVmYXVsdF9fanhfX2V4cGVuc2VzJywgJ2Zvb19qeF9iYXInKVxuICogQHRocm93cyBFcnJvciBpZiB0YWJsZSBuYW1lIGlzIGludmFsaWQgb3IgcG90ZW50aWFsbHkgZGFuZ2Vyb3VzXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNhZmUgPSB2YWxpZGF0ZVRhYmxlTmFtZSgndXNlcnMnKSAgICAgICAgICAgLy8gUmV0dXJucyAndXNlcnMnXG4gKiBjb25zdCBzYWZlID0gdmFsaWRhdGVUYWJsZU5hbWUoJ2RlZmF1bHQvb3JkZXJzJykgIC8vIFJldHVybnMgJ2RlZmF1bHRfX2p4X19vcmRlcnMnXG4gKiBjb25zdCBzYWZlID0gdmFsaWRhdGVUYWJsZU5hbWUoJ2Zvby1iYXInKSAgICAgICAgIC8vIFJldHVybnMgJ2Zvb19qeF9iYXInXG4gKiB2YWxpZGF0ZVRhYmxlTmFtZSgndGVzdF0gRFJPUCcpICAgICAgICAgICAgICAgICAgIC8vIFRocm93cyAoYnJhY2tldCBlc2NhcGUpXG4gKiB2YWxpZGF0ZVRhYmxlTmFtZSgnMTIzYWJjJykgICAgICAgICAgICAgICAgICAgICAgIC8vIFRocm93cyAoc3RhcnRzIHdpdGggbnVtYmVyKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVRhYmxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBDaGVjayBmb3IgZW1wdHkgb3Igbm9uLXN0cmluZyB2YWx1ZXNcbiAgaWYgKCFuYW1lIHx8IHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBFcnJvcihgVGFibGUgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZywgZ290OiAke3R5cGVvZiBuYW1lfWApXG4gIH1cblxuICAvLyBSZWplY3QgYnJhY2tldCBjaGFyYWN0ZXJzIHRoYXQgY291bGQgZXNjYXBlIFNRTGl0ZSdzIGJyYWNrZXQtcXVvdGluZ1xuICAvLyBTUUxpdGUgdXNlcyBbbmFtZV0gZm9yIGlkZW50aWZpZXJzLCBhbmQgXSB3b3VsZCBjbG9zZSB0aGUgYnJhY2tldCBlYXJseVxuICAvLyBBbGxvd3MgdXMgdG8gc2FmZWx5IHVzZSB2YWxpZGF0ZWQgbmFtZXMgaW4gQ1JFQVRFIFRBQkxFIFske25hbWV9XSBzdGF0ZW1lbnRzXG4gIGlmIChuYW1lLmluY2x1ZGVzKCddJykgfHwgbmFtZS5pbmNsdWRlcygnWycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIGJyYWNrZXRzIFsgb3IgXSAoYnJhY2tldCBlc2NhcGUgdnVsbmVyYWJpbGl0eSlgLFxuICAgIClcbiAgfVxuXG4gIC8vIEJsb2NrIFNRTCBjb21tZW50IG1hcmtlcnMgKGRlZmVuc2UtaW4tZGVwdGggZXZlbiB3aXRoIGJyYWNrZXQtcXVvdGluZylcbiAgZW5zdXJlRG9lc05vdENvbnRhaW4oXG4gICAgbmFtZSxcbiAgICAnLS0nLFxuICAgIGBJbnZhbGlkIHRhYmxlIG5hbWUgJyR7bmFtZX0nOiBjYW5ub3QgY29udGFpbiAtLSAoU1FMIGNvbW1lbnQgbWFya2VyKWAsXG4gIClcblxuICBjb25zdCB7IHRhYmxlTmFtZSwgaGFzU2NoZW1hIH0gPSBleHRyYWN0VGFibGVOYW1lKG5hbWUpXG5cbiAgLy8gQWxsb3cgd2hpdGVsaXN0ZWQgc3lzdGVtIHRhYmxlcyAoZS5nLiwgX3N5bmNTY29wZSwgX2NvbW1hbmRRdWV1ZSlcbiAgaWYgKGlzU3FsaXRlU3lzdGVtVGFibGUodGFibGVOYW1lKSkge1xuICAgIC8vIFN5c3RlbSB0YWJsZXMgYnlwYXNzIENvbW1vbk5hbWVNaXhlZFJlZ2V4IHZhbGlkYXRpb24gYnV0IHN0aWxsIGdldCB0cmFuc2Zvcm1lZFxuICAgIGNvbnN0IHRyYW5zZm9ybWVkTmFtZSA9IHNhZmVUYWJsZU5hbWUobmFtZSlcbiAgICBpZiAodHJhbnNmb3JtZWROYW1lLmxlbmd0aCA+IE1BWF9QT1NUX0VTQ0FQRSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCB0YWJsZSBuYW1lICcke25hbWV9JzogYWZ0ZXIgdHJhbnNmb3JtYXRpb24gYmVjb21lcyAnJHt0cmFuc2Zvcm1lZE5hbWV9JyAoJHtTdHJpbmcodHJhbnNmb3JtZWROYW1lLmxlbmd0aCl9IGNoYXJzLCBtYXggJHtTdHJpbmcoTUFYX1BPU1RfRVNDQVBFKX0pYCxcbiAgICAgIClcbiAgICB9XG4gICAgcmV0dXJuIHRyYW5zZm9ybWVkTmFtZVxuICB9XG5cbiAgLy8gVmFsaWRhdGUgdGFibGUgbmFtZSBtYXRjaGVzIENvbW1vbk5hbWVNaXhlZFJlZ2V4XG4gIC8vICgyLTUwIGNoYXJzLCBhbHBoYW51bWVyaWMvaHlwaGVucy91bmRlcnNjb3Jlcywgc3RhcnRzL2VuZHMgd2l0aCBsZXR0ZXIgb3IgbnVtYmVyKVxuICBpZiAoIUNvbW1vbk5hbWVNaXhlZFJlZ2V4LnRlc3QodGFibGVOYW1lKSkge1xuICAgIGNvbnN0IHBhcnQgPSBoYXNTY2hlbWEgPyBgdGFibGUgcGFydCAnJHt0YWJsZU5hbWV9J2AgOiBgbmFtZWBcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgSW52YWxpZCB0YWJsZSBuYW1lICcke25hbWV9JzogJHtwYXJ0fSBtdXN0IGJlIDItNTAgY2hhcmFjdGVycywgc3RhcnQgd2l0aCBhIGxldHRlciwgY29udGFpbiBvbmx5IGxldHRlcnMvbnVtYmVycy9oeXBoZW5zL3VuZGVyc2NvcmVzLCBhbmQgZW5kIHdpdGggYSBsZXR0ZXIgb3IgbnVtYmVyYCxcbiAgICApXG4gIH1cblxuICAvLyBQT1NULVRSQU5TRk9STUFUSU9OIFZBTElEQVRJT046IEVuc3VyZSB0cmFuc2Zvcm1lZCBuYW1lIGRvZXNuJ3QgZXhjZWVkIGxpbWl0XG4gIC8vIFRyYW5zZm9ybWF0aW9uIGV4cGFuZHMgY2hhcmFjdGVyczogLyDihpIgX19qeF9fICgxIOKGkiA1IGNoYXJzKSwgLSDihpIgX2p4XyAoMSDihpIgNCBjaGFycylcbiAgLy8gRXhhbXBsZTogJ2RlZmF1bHQvZm9vLWJhcicgKDE1IGNoYXJzKSDihpIgJ2RlZmF1bHRfX2p4X19mb29fanhfYmFyJyAoMjMgY2hhcnMpXG4gIC8vIExpbWl0IGFjY291bnRzIGZvciBicmFja2V0LXF1b3RpbmcgW25hbWVdIGFkZGVkIGR1cmluZyBDUkVBVEUgVEFCTEVcbiAgLy8gTWF4OiA1OCBjaGFycyAoZGVmYXVsdC8gKyA1MCBjaGFyIHRhYmxlIG5hbWUpICsgZXhwYW5zaW9uICsgMiBicmFja2V0c1xuICBjb25zdCB0cmFuc2Zvcm1lZE5hbWUgPSBzYWZlVGFibGVOYW1lKG5hbWUpXG4gIGlmICh0cmFuc2Zvcm1lZE5hbWUubGVuZ3RoID4gTUFYX1BPU1RfRVNDQVBFKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGFmdGVyIHRyYW5zZm9ybWF0aW9uIGJlY29tZXMgJyR7dHJhbnNmb3JtZWROYW1lfScgKCR7U3RyaW5nKHRyYW5zZm9ybWVkTmFtZS5sZW5ndGgpfSBjaGFycywgbWF4ICR7U3RyaW5nKE1BWF9QT1NUX0VTQ0FQRSl9KWAsXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHRyYW5zZm9ybWVkTmFtZVxufVxuXG4vKipcbiAqIFRyYW5zZm9ybSB0YWJsZSBuYW1lIHRvIGJlIFNRTGl0ZSBwYXJzZXItY29tcGF0aWJsZS5cbiAqIC0gJy8nIC0+ICdfX2p4X18nIChlLmcuLCBkZWZhdWx0L2V4cGVuc2VzKVxuICogLSAnLScgLT4gJ19qeF8nIChlLmcuLCBmb28tYmFyKVxuICpcbiAqIEludGVybmFsIHRyYW5zZm9ybWF0aW9uIGZ1bmN0aW9uIHVzZWQgYnkgdmFsaWRhdGVUYWJsZU5hbWUoKS5cbiAqIEV4dGVybmFsIGNhbGxlcnMgc2hvdWxkIHVzZSB2YWxpZGF0ZVRhYmxlTmFtZSgpIHdoaWNoIHZhbGlkYXRlcyBBTkQgdHJhbnNmb3Jtcy5cbiAqXG4gKiBAcGFyYW0gdGFibGVOYW1lIC0gT3JpZ2luYWwgdGFibGUgbmFtZSAoZS5nLiwgJ2RlZmF1bHQvZXhwZW5zZXMnLCAnZm9vLWJhcicpXG4gKiBAcmV0dXJucyBTYWZlIHRhYmxlIG5hbWUgZm9yIFNRTGl0ZSAoZS5nLiwgJ2RlZmF1bHRfX2p4X19leHBlbnNlcycsICdmb29fanhfYmFyJylcbiAqXG4gKiBAaW50ZXJuYWwgLSBBY2Nlc3MgdmlhIF9fdGVzdE9ubHlfXyBleHBvcnQgZm9yIHRlc3RpbmdcbiAqL1xuZnVuY3Rpb24gc2FmZVRhYmxlTmFtZSh0YWJsZU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5lZWRzVHJhbnNmb3JtID0gVEFCTEVfVFJBTlNGT1JNQVRJT05TLnNvbWUoKFtwYXR0ZXJuXSkgPT4gcGF0dGVybi50ZXN0KHRhYmxlTmFtZSkpXG4gIGlmICghbmVlZHNUcmFuc2Zvcm0pIHJldHVybiB0YWJsZU5hbWVcblxuICByZXR1cm4gVEFCTEVfVFJBTlNGT1JNQVRJT05TLnJlZHVjZShcbiAgICAoY3VycmVudCwgW3BhdHRlcm4sIHJlcGxhY2VtZW50XSkgPT4gY3VycmVudC5yZXBsYWNlKHBhdHRlcm4sIHJlcGxhY2VtZW50KSxcbiAgICB0YWJsZU5hbWUsXG4gIClcbn1cblxuLyoqXG4gKiBUZXN0aW5nLW9ubHkgZXhwb3J0cyAtIG5vdCBwYXJ0IG9mIHB1YmxpYyBBUElcbiAqIEFjY2VzcyBpbnRlcm5hbCBmdW5jdGlvbnMgZm9yIHVuaXQgdGVzdGluZyB0cmFuc2Zvcm1hdGlvbiBsb2dpY1xuICovXG5leHBvcnQgY29uc3QgX190ZXN0T25seV9fID0ge1xuICBzYWZlVGFibGVOYW1lLFxufSBhcyBjb25zdFxuXG4vKipcbiAqIFJlcGxhY2UgcXVlcnkgcGFyYW1ldGVycyAoJHBhcmFtIG9yIEBwYXJhbSkgd2l0aCAnPycgcGxhY2Vob2xkZXJzIGZvciB2YWxpZGF0aW9uLlxuICogU1FMaXRlJ3MgcGFyc2VyIHJlcXVpcmVzIHBvc2l0aW9uYWwgcGFyYW1ldGVycyBmb3IgcXVlcnkgcHJlcGFyYXRpb24uXG4gKlxuICogQHBhcmFtIHF1ZXJ5IC0gU1FMIHF1ZXJ5IHdpdGggbmFtZWQgcGFyYW1ldGVyc1xuICogQHJldHVybnMgUXVlcnkgd2l0aCBwb3NpdGlvbmFsIHBsYWNlaG9sZGVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZVBhcmFtZXRlcnMocXVlcnk6IHN0cmluZyk6IHN0cmluZyB7XG4gIC8vIFNRTGl0ZSdzIHBhcnNlciBkb2VzIG5vdCBzdXBwb3J0IG5hbWVkIHBhcmFtZXRlcnMgbGlrZSAkcGFyYW0gb3IgQHBhcmFtIGluIHRoZSBzYW1lIHdheSBhcyBvdGhlciBkYXRhYmFzZXMuXG4gIC8vIFRvIHZhbGlkYXRlIHRoZSBxdWVyeSBzeW50YXggd2l0aG91dCBwcm92aWRpbmcgcGFyYW1ldGVyIHZhbHVlcywgd2UgcmVwbGFjZSAkcGFyYW0gYW5kIEBwYXJhbSB3aXRoICc/Jy5cbiAgLy8gVGhpcyBlbnN1cmVzIGNvbXBhdGliaWxpdHkgd2l0aCBTUUxpdGUncyBwYXJzZXIgZHVyaW5nIHF1ZXJ5IHZhbGlkYXRpb24uXG4gIHJldHVybiBxdWVyeS5yZXBsYWNlKC9bJEBdKFxcdyspL2csICc/Jylcbn1cblxuLyoqXG4gKiBSZXBsYWNlIHRhYmxlIG5hbWVzIGluIHF1ZXJ5IHdpdGggc2FmZSBuYW1lcyBmb3IgdmFsaWRhdGlvbi5cbiAqXG4gKiBTZWN1cml0eTogR3VhcmRzIGFnYWluc3QgZW1wdHkgc3RyaW5nIHdoaWNoIHdvdWxkIGNhdXNlIHJlZ2V4IHRvIG1hdGNoIGVudGlyZSBxdWVyeS5cbiAqXG4gKiBAcGFyYW0gcXVlcnkgLSBPcmlnaW5hbCBTUUwgcXVlcnlcbiAqIEBwYXJhbSBvcmlnaW5hbE5hbWUgLSBPcmlnaW5hbCB0YWJsZSBuYW1lXG4gKiBAcGFyYW0gc2FmZU5hbWUgLSBTYWZlIHRhYmxlIG5hbWVcbiAqIEByZXR1cm5zIFF1ZXJ5IHdpdGggcmVwbGFjZWQgdGFibGUgbmFtZXNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VUYWJsZU5hbWUocXVlcnk6IHN0cmluZywgb3JpZ2luYWxOYW1lOiBzdHJpbmcsIHNhZmVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBHdWFyZCBhZ2FpbnN0IGVtcHR5IGlucHV0cyB3aGljaCB3b3VsZCBjYXVzZSByZWdleCBpc3N1ZXNcbiAgaWYgKCFxdWVyeSB8fCAhb3JpZ2luYWxOYW1lIHx8ICFzYWZlTmFtZSB8fCBvcmlnaW5hbE5hbWUgPT09IHNhZmVOYW1lKSB7XG4gICAgcmV0dXJuIHF1ZXJ5XG4gIH1cblxuICAvLyBDaGVjayBpZiBvcmlnaW5hbE5hbWUgaXMgYWxyZWFkeSBicmFja2V0ZWQgKGUuZy4sIFtwYWNrYWdlXS5bdGFibGVdKVxuICAvLyBGb3IgdGhlc2UsIGRvIGEgZGlyZWN0IHJlcGxhY2VtZW50IHdpdGhvdXQgYWRkaW5nIG1vcmUgYnJhY2tldHNcbiAgaWYgKG9yaWdpbmFsTmFtZS5zdGFydHNXaXRoKCdbJykgJiYgb3JpZ2luYWxOYW1lLmVuZHNXaXRoKCddJykpIHtcbiAgICBjb25zdCBlc2NhcGVkTmFtZSA9IGVzY2FwZVJlZ0V4cChvcmlnaW5hbE5hbWUpXG4gICAgcmV0dXJuIHF1ZXJ5LnJlcGxhY2UobmV3IFJlZ0V4cChlc2NhcGVkTmFtZSwgJ2cnKSwgYFske3NhZmVOYW1lfV1gKVxuICB9XG5cbiAgLy8gRXNjYXBlIHNwZWNpYWwgcmVnZXggY2hhcmFjdGVycyBpbiB0YWJsZSBuYW1lXG4gIGNvbnN0IGVzY2FwZWROYW1lID0gZXNjYXBlUmVnRXhwKG9yaWdpbmFsTmFtZSlcblxuICAvLyBSZXBsYWNlIHVucXVvdGVkIHRhYmxlLW5hbWUgd2l0aCBzYWZlLW5hbWUgKHVzaW5nIHdvcmQgYm91bmRhcmllcylcbiAgcmV0dXJuIChcbiAgICBxdWVyeVxuICAgICAgLy8gUmVwbGFjZSBbdGFibGUtbmFtZV0gd2l0aCBbc2FmZS1uYW1lXSAoZm9yIFNRTC1lc2NhcGVkIG5hbWVzKVxuICAgICAgLnJlcGxhY2UobmV3IFJlZ0V4cChgXFxcXFske2VzY2FwZWROYW1lfVxcXFxdYCwgJ2cnKSwgYFske3NhZmVOYW1lfV1gKVxuICAgICAgLy8gUmVwbGFjZSB1bnF1b3RlZCB0YWJsZS1uYW1lIHdpdGggc2FmZS1uYW1lICh1c2luZyB3b3JkIGJvdW5kYXJpZXMpXG4gICAgICAucmVwbGFjZShuZXcgUmVnRXhwKGBcXFxcYiR7ZXNjYXBlZE5hbWV9XFxcXGJgLCAnZycpLCBzYWZlTmFtZSlcbiAgKVxufVxuXG4vKipcbiAqIENyZWF0ZSBpbi1tZW1vcnkgU1FMaXRlIGRhdGFiYXNlIHdpdGggdGFibGVzIGZvciB2YWxpZGF0aW9uLlxuICogQ3JlYXRlcyB0YWJsZXMgd2l0aCBzdGFuZGFyZCBKaWd4IHNjaGVtYSAoaWQsIGRhdGEpIHBsdXMgb3B0aW9uYWwgYWRkaXRpb25hbCBjb2x1bW5zLlxuICpcbiAqIEBwYXJhbSB0YWJsZU5hbWVzIC0gQXJyYXkgb2YgdGFibGUgbmFtZXMgdG8gY3JlYXRlXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFNjaGVtYSBvcHRpb25zXG4gKiBAcGFyYW0gb3B0aW9ucy5hZGRpdGlvbmFsQ29sdW1ucyAtIEFkZGl0aW9uYWwgY29sdW1uIG5hbWVzIHRvIGluY2x1ZGUgKGFsbCBjcmVhdGVkIGFzIFRFWFQpXG4gKiBAcmV0dXJucyBEYXRhYmFzZSBpbnN0YW5jZSB3aXRoIHRhYmxlIGluZm8gbWFwIChjYWxsZXIgbXVzdCBjbG9zZSBpdClcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gU2luZ2xlIHRhYmxlXG4gKiBjb25zdCB7IGRiLCB0YWJsZXMgfSA9IGNyZWF0ZVZhbGlkYXRpb25EYXRhYmFzZShbJ3VzZXJzJ10pXG4gKiB0YWJsZXMuZ2V0KCd1c2VycycpIC8vIHsgc2FmZU5hbWU6ICd1c2VycycsIG5vcm1hbGl6ZWROYW1lOiAndXNlcnMnIH1cbiAqXG4gKiAvLyBNdWx0aXBsZSB0YWJsZXNcbiAqIGNvbnN0IHsgZGIsIHRhYmxlcyB9ID0gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFsndXNlcnMnLCAnZGVmYXVsdC9vcmRlcnMnXSlcbiAqIHRhYmxlcy5nZXQoJ2RlZmF1bHQvb3JkZXJzJykgLy8geyBzYWZlTmFtZTogJ2RlZmF1bHRfX2p4X19vcmRlcnMnLCBub3JtYWxpemVkTmFtZTogJ2RlZmF1bHQvb3JkZXJzJyB9XG4gKlxuICogLy8gV2l0aCBhZGRpdGlvbmFsIGNvbHVtbnNcbiAqIGNvbnN0IHsgZGIsIHRhYmxlcyB9ID0gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFsnaXRlbXMnXSwge1xuICogICBhZGRpdGlvbmFsQ29sdW1uczogWyduYW1lJywgJ3ZhbHVlJywgJ2xhYmVsJywgJ2ljb24nXVxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVmFsaWRhdGlvbkRhdGFiYXNlKFxuICB0YWJsZU5hbWVzOiBzdHJpbmdbXSxcbiAgb3B0aW9uczoge1xuICAgIGFkZGl0aW9uYWxDb2x1bW5zPzogc3RyaW5nW11cbiAgfSA9IHt9LFxuKTogTXVsdGlUYWJsZVZhbGlkYXRpb25SZXN1bHQge1xuICBjb25zdCBkYiA9IG5ldyBEYXRhYmFzZSgnOm1lbW9yeTonKVxuICBjb25zdCB7IGFkZGl0aW9uYWxDb2x1bW5zID0gW10gfSA9IG9wdGlvbnNcbiAgY29uc3QgY29sdW1ucyA9IGJ1aWxkQ29sdW1uRGVmaW5pdGlvbnMoYWRkaXRpb25hbENvbHVtbnMpXG4gIGNvbnN0IHRhYmxlcyA9IG5ldyBNYXA8c3RyaW5nLCB7IHJlYWRvbmx5IHNhZmVOYW1lOiBzdHJpbmc7IHJlYWRvbmx5IG5vcm1hbGl6ZWROYW1lOiBzdHJpbmcgfT4oKVxuXG4gIGZvciAoY29uc3QgdGFibGVOYW1lIG9mIHRhYmxlTmFtZXMpIHtcbiAgICAvLyBDaGVjayBmb3IgZXh0ZXJuYWwgcGFja2FnZSBmb3JtYXQ6IFtwYWNrYWdlXS5bdGFibGVdXG4gICAgY29uc3QgcGFja2FnZU1hdGNoID0gRVhURVJOQUxfUEFDS0FHRV9UQUJMRV9QQVRURVJOLmV4ZWModGFibGVOYW1lKVxuICAgIGlmIChwYWNrYWdlTWF0Y2gpIHtcbiAgICAgIC8vIEV4dGVybmFsIHBhY2thZ2UgdGFibGUgLSBjcmVhdGUgd2l0aCBwYWNrYWdlX3RhYmxlIGZvcm1hdCBmb3IgdmFsaWRhdGlvblxuICAgICAgY29uc3QgWywgcGFja2FnZU5hbWUsIGVudGl0eU5hbWVdID0gcGFja2FnZU1hdGNoXG4gICAgICBjb25zdCBzYWZlTmFtZSA9IGAke3BhY2thZ2VOYW1lLnJlcGxhY2UoLy0vZywgJ18nKX1fJHtlbnRpdHlOYW1lfWBcbiAgICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwgYnJhY2tldGVkIGZvcm1hdCBhcyBub3JtYWxpemVkTmFtZSBmb3IgcXVlcnkgcmVwbGFjZW1lbnRcbiAgICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gdGFibGVOYW1lXG5cbiAgICAgIGRiLmV4ZWMoYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFske3NhZmVOYW1lfV0gKCR7Y29sdW1ucy5qb2luKCcsICcpfSlgKVxuICAgICAgdGFibGVzLnNldCh0YWJsZU5hbWUsIHsgc2FmZU5hbWUsIG5vcm1hbGl6ZWROYW1lIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWROYW1lID0gc3RyaXBXcmFwcGluZ0JyYWNrZXRzKHRhYmxlTmFtZSlcblxuICAgIC8vIFN5c3RlbSB0YWJsZXMgYnlwYXNzIG5hbWUgdmFsaWRhdGlvbiBhbmQgdXNlIHBsYXRmb3JtIHNjaGVtYXNcbiAgICBpZiAoaXNTcWxpdGVTeXN0ZW1UYWJsZShub3JtYWxpemVkTmFtZSkpIHtcbiAgICAgIGNvbnN0IHNhZmVOYW1lID0gbm9ybWFsaXplZE5hbWUgLy8gU3lzdGVtIHRhYmxlcyBkb24ndCBuZWVkIHRyYW5zZm9ybWF0aW9uXG4gICAgICBjb25zdCBzY2hlbWEgPSBTWVNURU1fVEFCTEVfU0NIRU1BU1tub3JtYWxpemVkTmFtZV1cbiAgICAgIGlmICghc2NoZW1hKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgU3lzdGVtIHRhYmxlICcke25vcm1hbGl6ZWROYW1lfScgaXMgd2hpdGVsaXN0ZWQgYnV0IG1pc3Npbmcgc2NoZW1hIGRlZmluaXRpb24uIGAgK1xuICAgICAgICAgICAgYEFkZCBzY2hlbWEgdG8gU1lTVEVNX1RBQkxFX1NDSEVNQVMgKHNvdXJjZTogamlneC9wYWNrYWdlcy9kYXRhc3RvcmUvc3JjL2RhdGFiYXNlL21pZ3JhdGlvbnMvc29sdXRpb24vKWAsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIGRiLmV4ZWMoYENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIFske3NhZmVOYW1lfV0gKCR7c2NoZW1hfSlgKVxuICAgICAgdGFibGVzLnNldCh0YWJsZU5hbWUsIHsgc2FmZU5hbWUsIG5vcm1hbGl6ZWROYW1lIH0pXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHNhZmVOYW1lID0gdmFsaWRhdGVUYWJsZU5hbWUobm9ybWFsaXplZE5hbWUpXG5cbiAgICBkYi5leGVjKGBDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyBbJHtzYWZlTmFtZX1dICgke2NvbHVtbnMuam9pbignLCAnKX0pYClcblxuICAgIC8vIFN0b3JlIG1hcHBpbmcgd2l0aCBvcmlnaW5hbCB0YWJsZSBuYW1lIGFzIGtleVxuICAgIHRhYmxlcy5zZXQodGFibGVOYW1lLCB7IHNhZmVOYW1lLCBub3JtYWxpemVkTmFtZSB9KVxuICB9XG5cbiAgcmV0dXJuIHsgZGIsIHRhYmxlcyB9XG59XG5cbi8qKlxuICogU3RyaXAgU1FMIGNvbW1lbnRzIGZyb20gcXVlcnkgdG8gcHJldmVudCBjb21tZW50LWJhc2VkIGJ5cGFzc2VzLlxuICogUmVtb3ZlcyBib3RoIGxpbmUgY29tbWVudHMgKC0tKSBhbmQgYmxvY2sgY29tbWVudHMgKHNsYXNoLXN0YXIgbm90YXRpb24pLlxuICpcbiAqIEBwYXJhbSBxdWVyeSAtIFNRTCBxdWVyeSB3aXRoIHBvdGVudGlhbCBjb21tZW50c1xuICogQHJldHVybnMgUXVlcnkgd2l0aCBjb21tZW50cyByZW1vdmVkXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIHN0cmlwU3FsQ29tbWVudHMoJy8qIGNvbW1lbnQgKlxcLyBTRUxFQ1QgKiBGUk9NIHVzZXJzJylcbiAqIC8vIFJldHVybnM6ICcgU0VMRUNUICogRlJPTSB1c2VycydcbiAqXG4gKiBzdHJpcFNxbENvbW1lbnRzKCctLSBjb21tZW50XFxuU0VMRUNUICogRlJPTSB1c2VycycpXG4gKiAvLyBSZXR1cm5zOiAnXFxuU0VMRUNUICogRlJPTSB1c2VycydcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBTcWxDb21tZW50cyhxdWVyeTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHF1ZXJ5LnJlcGxhY2UoQkxPQ0tfQ09NTUVOVF9SRUdFWCwgJyAnKS5yZXBsYWNlKExJTkVfQ09NTUVOVF9SRUdFWCwgJyAnKVxufVxuXG4vKipcbiAqIFZhbGlkYXRlIFNRTCBTRUxFQ1QgcXVlcnkgc3ludGF4IGFuZCByZXR1cm4gcHJlcGFyZWQgc3RhdGVtZW50LlxuICogVGhyb3dzIGVycm9yIGlmIHF1ZXJ5IGlzIGludmFsaWQgb3Igbm90IGEgU0VMRUNULlxuICpcbiAqIFNlY3VyaXR5OiBCbG9ja3MgUFJBR01BIGNvbW1hbmRzIGFuZCBub24tU0VMRUNUIHN0YXRlbWVudHMgdG8gcHJldmVudFxuICogaW5mb3JtYXRpb24gZGlzY2xvc3VyZSBhbmQgdW5hdXRob3JpemVkIGRhdGFiYXNlIG9wZXJhdGlvbnMuXG4gKiBTdHJpcHMgY29tbWVudHMgYmVmb3JlIGNoZWNraW5nIHRvIHByZXZlbnQgY29tbWVudC1iYXNlZCBieXBhc3Nlcy5cbiAqXG4gKiBAcGFyYW0gZGIgLSBTUUxpdGUgZGF0YWJhc2UgaW5zdGFuY2VcbiAqIEBwYXJhbSBxdWVyeSAtIFNRTCBxdWVyeSB0byB2YWxpZGF0ZVxuICogQHJldHVybnMgUHJlcGFyZWQgc3RhdGVtZW50XG4gKiBAdGhyb3dzIEVycm9yIGlmIHF1ZXJ5IGlzIGludmFsaWQsIG5vdCBTRUxFQ1QsIG9yIGlzIFBSQUdNQVxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiB2YWxpZGF0ZVNlbGVjdFF1ZXJ5KGRiLCAnU0VMRUNUICogRlJPTSB1c2VycycpICAgICAgICAgICAvLyDinIUgQWxsb3dlZFxuICogdmFsaWRhdGVTZWxlY3RRdWVyeShkYiwgJ1NFTEVDVCAqIEZST00gdXNlcnMgV0hFUkUgaWQ9MScpIC8vIOKchSBBbGxvd2VkXG4gKiB2YWxpZGF0ZVNlbGVjdFF1ZXJ5KGRiLCAnSU5TRVJUIElOVE8gdXNlcnMgLi4uJykgICAgICAgICAgLy8g4p2MIFRocm93c1xuICogdmFsaWRhdGVTZWxlY3RRdWVyeShkYiwgJ1BSQUdNQSB0YWJsZV9pbmZvKHVzZXJzKScpICAgICAgIC8vIOKdjCBUaHJvd3MgKGluZm8gZGlzY2xvc3VyZSlcbiAqIHZhbGlkYXRlU2VsZWN0UXVlcnkoZGIsICcvKiBjb21tZW50ICpcXC8gUFJBR01BIC4uLicpICAgICAgLy8g4p2MIFRocm93cyAoY29tbWVudCBzdHJpcHBlZCBmaXJzdClcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVTZWxlY3RRdWVyeShkYjogRGF0YWJhc2UuRGF0YWJhc2UsIHF1ZXJ5OiBzdHJpbmcpOiBEYXRhYmFzZS5TdGF0ZW1lbnQge1xuICAvLyBUcmltIGFuZCBub3JtYWxpemUgd2hpdGVzcGFjZSBmb3IgY2hlY2tpbmdcbiAgY29uc3QgdHJpbW1lZCA9IHF1ZXJ5LnRyaW0oKVxuXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgY2Fubm90IGJlIGVtcHR5JylcbiAgfVxuXG4gIC8vIFN0cmlwIGNvbW1lbnRzIGJlZm9yZSBjaGVja2luZyBmb3IgUFJBR01BIHRvIHByZXZlbnQgY29tbWVudC1iYXNlZCBieXBhc3Nlc1xuICAvLyBFeGFtcGxlcyBvZiBieXBhc3NlczogLyogY29tbWVudCAqLyBQUkFHTUEsIC0tIGNvbW1lbnRcXG5QUkFHTUFcbiAgY29uc3Qgbm9Db21tZW50cyA9IHN0cmlwU3FsQ29tbWVudHModHJpbW1lZCkudHJpbSgpXG5cbiAgLy8gQmxvY2sgUFJBR01BIGNvbW1hbmRzIGV4cGxpY2l0bHkgKHRoZXkgYXJlIG1hcmtlZCBhcyBcInJlYWRlclwiIGJ1dCBleHBvc2Ugc3lzdGVtIGluZm8pXG4gIC8vIFBSQUdNQSBjYW4gbGVhayBkYXRhYmFzZSBzY2hlbWEsIHRhYmxlIHN0cnVjdHVyZSwgYW5kIGNvbmZpZ3VyYXRpb25cbiAgLy8gRXhhbXBsZXM6IFBSQUdNQSB0YWJsZV9pbmZvKCksIFBSQUdNQSBkYXRhYmFzZV9saXN0LCBQUkFHTUEgc2NoZW1hLnRhYmxlX2luZm8oKVxuICBjb25zdCB1cHBlclF1ZXJ5ID0gbm9Db21tZW50cy50b1VwcGVyQ2FzZSgpXG4gIGlmICh1cHBlclF1ZXJ5LnN0YXJ0c1dpdGgoJ1BSQUdNQScpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdQUkFHTUEgY29tbWFuZHMgYXJlIG5vdCBhbGxvd2VkIGluIGRhdGFzb3VyY2VzJylcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIHF1ZXJ5IHN5bnRheCB3aXRob3V0IGV4ZWN1dGluZyAtIGp1c3QgcHJlcGFyZSB0aGUgc3RhdGVtZW50XG4gIC8vIFVzZXMgU1FMaXRlJ3MgaGFyZGVuZWQgcGFyc2VyIChiYXR0bGUtdGVzdGVkIG92ZXIgZGVjYWRlcykgdG8gdmFsaWRhdGUgc3ludGF4XG4gIC8vIFRoaXMgY2hlY2tzIFNRTCBzeW50YXggd2l0aG91dCBuZWVkaW5nIHBhcmFtZXRlciB2YWx1ZXNcbiAgY29uc3Qgc3RtdCA9IGRiLnByZXBhcmUocXVlcnkpXG5cbiAgLy8gRW5zdXJlIGl0J3MgYSBTRUxFQ1QgcXVlcnkgKHJlYWRlciA9IHRydWUgbWVhbnMgcmVhZC1vbmx5KVxuICAvLyBOb3RlOiBQUkFHTUEgaXMgYWxzbyBtYXJrZWQgYXMgcmVhZGVyLCBoZW5jZSB0aGUgZXhwbGljaXQgY2hlY2sgYWJvdmVcbiAgaWYgKCFzdG10LnJlYWRlcikge1xuICAgIHRocm93IG5ldyBFcnJvcignT25seSBTRUxFQ1QgcXVlcmllcyBhcmUgYWxsb3dlZCBpbiBkYXRhc291cmNlcycpXG4gIH1cblxuICByZXR1cm4gc3RtdFxufVxuXG4vKipcbiAqIEV4dHJhY3QgY29sdW1uIG5hbWVzIGZyb20gcHJlcGFyZWQgc3RhdGVtZW50LlxuICpcbiAqIEBwYXJhbSBzdG10IC0gUHJlcGFyZWQgU1FMaXRlIHN0YXRlbWVudFxuICogQHJldHVybnMgQXJyYXkgb2YgbG93ZXJjYXNlIGNvbHVtbiBuYW1lc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdENvbHVtbnMoc3RtdDogRGF0YWJhc2UuU3RhdGVtZW50KTogc3RyaW5nW10ge1xuICByZXR1cm4gc3RtdC5jb2x1bW5zKCkubWFwKChjb2wpID0+IGNvbC5uYW1lLnRvTG93ZXJDYXNlKCkpXG59XG5cbi8qKlxuICogVmFsaWRhdGUgdGhhdCBxdWVyeSByZXR1cm5zIHJlcXVpcmVkIGNvbHVtbnMuXG4gKlxuICogQHBhcmFtIGNvbHVtbnMgLSBDb2x1bW4gbmFtZXMgZnJvbSBxdWVyeSAobG93ZXJjYXNlKVxuICogQHBhcmFtIHJlcXVpcmVkQ29sdW1ucyAtIFJlcXVpcmVkIGNvbHVtbiBuYW1lcyAobG93ZXJjYXNlKVxuICogQHJldHVybnMgT2JqZWN0IHdpdGggdmFsaWRhdGlvbiByZXN1bHQgYW5kIG1pc3NpbmcgY29sdW1uc1xuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiAvLyBWYWxpZGF0ZSBkcm9wZG93biBjb2x1bW5zXG4gKiBjb25zdCByZXN1bHQgPSB2YWxpZGF0ZVJlcXVpcmVkQ29sdW1ucyhjb2x1bW5zLCBbJ3ZhbHVlJywgJ2xhYmVsJ10pXG4gKlxuICogLy8gVmFsaWRhdGUgY3VzdG9tIGNvbHVtbnNcbiAqIGNvbnN0IHJlc3VsdCA9IHZhbGlkYXRlUmVxdWlyZWRDb2x1bW5zKGNvbHVtbnMsIFsnaWQnLCAnbmFtZScsICdlbWFpbCddKVxuICogYGBgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVJlcXVpcmVkQ29sdW1ucyhcbiAgY29sdW1uczogc3RyaW5nW10sXG4gIHJlcXVpcmVkQ29sdW1uczogc3RyaW5nW10sXG4pOiB7XG4gIGlzVmFsaWQ6IGJvb2xlYW5cbiAgbWlzc2luZzogc3RyaW5nW11cbn0ge1xuICBjb25zdCBjb2x1bW5TZXQgPSBuZXcgU2V0KGNvbHVtbnMpXG4gIGNvbnN0IG1pc3NpbmcgPSByZXF1aXJlZENvbHVtbnMuZmlsdGVyKChyZXF1aXJlZCkgPT4gIWNvbHVtblNldC5oYXMocmVxdWlyZWQpKVxuXG4gIHJldHVybiB7XG4gICAgaXNWYWxpZDogbWlzc2luZy5sZW5ndGggPT09IDAsXG4gICAgbWlzc2luZyxcbiAgfVxufVxuXG5mdW5jdGlvbiBoYXNPdXRlcldoaXRlc3BhY2UodmFsdWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gdmFsdWUudHJpbSgpICE9PSB2YWx1ZVxufVxuXG5mdW5jdGlvbiBlbnN1cmVEb2VzTm90Q29udGFpbih2YWx1ZTogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodmFsdWUuaW5jbHVkZXModG9rZW4pKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBlbnN1cmVEb2VzTm90Q29udGFpbkFueSh2YWx1ZTogc3RyaW5nLCB0b2tlbnM6IHN0cmluZ1tdLCBlcnJvck1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBpZiAodG9rZW5zLnNvbWUoKHRva2VuKSA9PiB2YWx1ZS5pbmNsdWRlcyh0b2tlbikpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGVycm9yTWVzc2FnZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBleHRyYWN0VGFibGVOYW1lKG5hbWU6IHN0cmluZyk6IHsgdGFibGVOYW1lOiBzdHJpbmc7IGhhc1NjaGVtYTogYm9vbGVhbiB9IHtcbiAgY29uc3QgcGFydHMgPSBuYW1lLnNwbGl0KFNDSEVNQV9TRVBBUkFUT1IpXG5cbiAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiB7IHRhYmxlTmFtZTogbmFtZSwgaGFzU2NoZW1hOiBmYWxzZSB9XG4gIH1cblxuICBpZiAocGFydHMubGVuZ3RoID09PSAyKSB7XG4gICAgY29uc3QgW3NjaGVtYSwgdGFibGVdID0gcGFydHNcblxuICAgIGlmIChzY2hlbWEgIT09IERFRkFVTFRfU0NIRU1BKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHRhYmxlIG5hbWUgJyR7bmFtZX0nOiBzY2hlbWEgbXVzdCBiZSAnJHtERUZBVUxUX1NDSEVNQX0nLCBnb3QgJyR7c2NoZW1hfSdgLFxuICAgICAgKVxuICAgIH1cblxuICAgIHJldHVybiB7IHRhYmxlTmFtZTogdGFibGUsIGhhc1NjaGVtYTogdHJ1ZSB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFibGUgbmFtZSAnJHtuYW1lfSc6IGNhbm5vdCBjb250YWluIG11bHRpcGxlICcvJyBzZXBhcmF0b3JzYClcbn1cblxuZnVuY3Rpb24gc3RyaXBXcmFwcGluZ0JyYWNrZXRzKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBuYW1lLnN0YXJ0c1dpdGgoJ1snKSAmJiBuYW1lLmVuZHNXaXRoKCddJykgPyBuYW1lLnNsaWNlKDEsIC0xKSA6IG5hbWVcbn1cblxuZnVuY3Rpb24gYnVpbGRDb2x1bW5EZWZpbml0aW9ucyhhZGRpdGlvbmFsQ29sdW1uczogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHVuaXF1ZUNvbHVtbnMgPSBBcnJheS5mcm9tKG5ldyBTZXQoYWRkaXRpb25hbENvbHVtbnMpKS5maWx0ZXIoXG4gICAgKGNvbHVtbikgPT4gIVJFU0VSVkVEX0NPTFVNTlMuaGFzKGNvbHVtbiksXG4gIClcblxuICBjb25zdCB2YWxpZGF0ZWRDb2x1bW5zID0gdW5pcXVlQ29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xuICAgIHZhbGlkYXRlQ29sdW1uTmFtZShjb2x1bW4pXG4gICAgcmV0dXJuIGBbJHtjb2x1bW59XSBURVhUYFxuICB9KVxuXG4gIHJldHVybiBbJ2lkIFRFWFQgUFJJTUFSWSBLRVknLCAnZGF0YSBURVhUJywgJ2ZpbGUgVEVYVCcsIC4uLnZhbGlkYXRlZENvbHVtbnNdXG59XG5cbmZ1bmN0aW9uIGVzY2FwZVJlZ0V4cCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJylcbn1cbiJdfQ==