@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,757 @@
1
+ import { JcAmountControlBuilder } from './jc.amount-control.js';
2
+ import { JcAvatarBuilder } from './jc.avatar.js';
3
+ import { JcAvatarFieldBuilder } from './jc.avatar-field.js';
4
+ import { JcBannerBuilder } from './jc.banner.js';
5
+ import { JcBarChartBuilder } from './jc.bar-chart.js';
6
+ import { JcButtonBuilder } from './jc.button.js';
7
+ import { JcCardOnDefaultBuilder } from './jc.card.on-default.js';
8
+ import { JcCarouselBuilder } from './jc.carousel.js';
9
+ import { JcChatBuilder } from './jc.chat.js';
10
+ import { JcChatMessageBuilder } from './jc.chat-message.js';
11
+ import { JcCheckboxBuilder } from './jc.checkbox.js';
12
+ import { JcChoiceFieldBuilder } from './jc.choice-field.js';
13
+ import { JcChoiceFieldItemBuilder } from './jc.choice-field-item.js';
14
+ import { JcCountDownBuilder } from './jc.count-down.js';
15
+ import { JcCountUpBuilder } from './jc.count-up.js';
16
+ import { JcCustomComponentInteropBuilder, } from './jc.custom-component.interop.js';
17
+ import { JcDatePickerBuilder } from './jc.date-picker.js';
18
+ import { JcDividerBuilder } from './jc.divider.js';
19
+ import { JcDropdownBuilder } from './jc.dropdown.js';
20
+ import { JcDurationPickerBuilder } from './jc.duration-picker.js';
21
+ import { JcEmailFieldBuilder } from './jc.email-field.js';
22
+ import { JcEntityBuilder } from './jc.entity.js';
23
+ import { JcEntityFieldBuilder } from './jc.entity-field.js';
24
+ import { JcEventBuilder } from './jc.event.js';
25
+ import { JcExpanderBuilder } from './jc.expander.js';
26
+ import { JcFieldRowBuilder } from './jc.field-row.js';
27
+ import { JcEntityFieldRowBuilder } from './jc.field-row.entity.js';
28
+ import { JcFormBuilder } from './jc.form.js';
29
+ import { JcGalleryItemBuilder } from './jc.gallery-item.js';
30
+ import { JcGridBuilder } from './jc.grid.js';
31
+ import { JcGridItemBuilder } from './jc.grid-item.js';
32
+ import { JcIconBuilder } from './jc.icon.js';
33
+ import { JcImageOnCarouselBuilder } from './jc.image.on-carousel.js';
34
+ import { JcJigBuilder } from './jc.jig.js';
35
+ import { JcImageOnDefaultBuilder } from './jc.image.on-default.js';
36
+ import { JcInteractiveImageBuilder } from './jc.interactive-image.js';
37
+ import { JcInteractiveImageItemBuilder, } from './jc.interactive-image.item.js';
38
+ import { JcJigHeaderBuilder } from './jc.jig-header.js';
39
+ import { JcJigWidgetBuilder } from './jc.jig-widget.js';
40
+ import { JcLineChartBuilder } from './jc.line-chart.js';
41
+ import { JcListBuilder } from './jc.list.js';
42
+ import { JcListItemBuilder } from './jc.list-item.js';
43
+ import { JcListItemStandaloneBuilder, } from './jc.list-item.standalone.js';
44
+ import { JcLocationBuilder } from './jc.location.js';
45
+ import { JcMarkerItemBuilder } from './jc.marker-item.js';
46
+ import { JcMediaFieldBuilder } from './jc.media-field.js';
47
+ import { JcMenuItemBuilder } from './jc.menu-item.js';
48
+ import { JcNumberFieldBuilder } from './jc.number-field.js';
49
+ import { JcPieChartBuilder } from './jc.pie-chart.js';
50
+ import { JcProgressBarBuilder } from './jc.progress-bar.js';
51
+ import { JcRatingBuilder } from './jc.rating.js';
52
+ import { JcSectionOnDefaultBuilder } from './jc.section.on-default.js';
53
+ import { JcSegmentedControlBuilder } from './jc.segmented-control.js';
54
+ import { JcSignatureFieldBuilder } from './jc.signature-field.js';
55
+ import { JcSliderBuilder } from './jc.slider.js';
56
+ import { JcStageBuilder } from './jc.stage.js';
57
+ import { JcStepperBuilder } from './jc.stepper.js';
58
+ import { JcStoryGroupBuilder } from './jc.story-group.js';
59
+ import { JcSummaryCardBuilder } from './jc.summary.card.js';
60
+ import { JcSummaryCounterBuilder } from './jc.summary.counter.js';
61
+ import { JcSummaryDefaultBuilder } from './jc.summary.default.js';
62
+ import { JcSummaryProgressBuilder, } from './jc.summary.progress.js';
63
+ import { JcTextBuilder } from './jc.text.js';
64
+ import { JcTextFieldBuilder } from './jc.text-field.js';
65
+ import { JcTitlesBuilder } from './jc.titles.js';
66
+ import { JcTrendBuilder } from './jc.trend.js';
67
+ import { COMPONENT_TYPE } from './jc.types.js';
68
+ import { JcViewBuilder } from './jc.view.js';
69
+ import { JcVideoPlayerOnJigBuilder, } from './jc.video-player.on-jig.js';
70
+ import { JcWebViewOnDefaultBuilder, } from './jc.web-view.on-default.js';
71
+ import { JcWebViewOnFullBuilder } from './jc.web-view.on-full.js';
72
+ export const COMPONENT_TO_FACTORY_METHOD = {
73
+ [COMPONENT_TYPE.AMOUNT_CONTROL]: 'amountControl',
74
+ [COMPONENT_TYPE.AVATAR]: 'avatar',
75
+ [COMPONENT_TYPE.AVATAR_FIELD]: 'avatarField',
76
+ [COMPONENT_TYPE.BANNER]: 'banner',
77
+ [COMPONENT_TYPE.BAR_CHART]: 'barChart',
78
+ [COMPONENT_TYPE.BUTTON]: 'button',
79
+ [COMPONENT_TYPE.CARD]: 'cardOnDefault',
80
+ [COMPONENT_TYPE.CAROUSEL]: 'carousel',
81
+ [COMPONENT_TYPE.CHAT]: 'chat',
82
+ [COMPONENT_TYPE.CHAT_MESSAGE]: 'chatMessage',
83
+ [COMPONENT_TYPE.CHECKBOX]: 'checkbox',
84
+ [COMPONENT_TYPE.CHOICE_FIELD]: 'choiceField',
85
+ [COMPONENT_TYPE.CHOICE_FIELD_ITEM]: 'choiceFieldItem',
86
+ [COMPONENT_TYPE.COUNTDOWN]: 'countDown',
87
+ [COMPONENT_TYPE.COUNT_UP]: 'countUp',
88
+ [COMPONENT_TYPE.CUSTOM_COMPONENT]: 'customComponent',
89
+ [COMPONENT_TYPE.DATE_PICKER]: 'datePicker',
90
+ [COMPONENT_TYPE.DIVIDER]: 'divider',
91
+ [COMPONENT_TYPE.DROPDOWN]: 'dropdown',
92
+ [COMPONENT_TYPE.DURATION_PICKER]: 'durationPicker',
93
+ [COMPONENT_TYPE.EMAIL_FIELD]: 'emailField',
94
+ [COMPONENT_TYPE.ENTITY]: 'entity',
95
+ [COMPONENT_TYPE.ENTITY_FIELD]: 'entityField',
96
+ [COMPONENT_TYPE.EVENT]: 'event',
97
+ [COMPONENT_TYPE.EXPANDER]: 'expander',
98
+ [COMPONENT_TYPE.FIELD_ROW]: 'fieldRow',
99
+ [COMPONENT_TYPE.FORM]: 'form',
100
+ [COMPONENT_TYPE.GALLERY_ITEM]: 'galleryItem',
101
+ [COMPONENT_TYPE.GRID]: 'grid',
102
+ [COMPONENT_TYPE.GRID_ITEM]: 'gridItem',
103
+ [COMPONENT_TYPE.ICON]: 'icon',
104
+ [COMPONENT_TYPE.IMAGE]: 'imageOnDefault',
105
+ [COMPONENT_TYPE.INTERACTIVE_IMAGE]: 'interactiveImage',
106
+ [COMPONENT_TYPE.INTERACTIVE_IMAGE_ITEM]: 'interactiveImageItem',
107
+ [COMPONENT_TYPE.JIG]: 'jig',
108
+ [COMPONENT_TYPE.JIG_HEADER]: 'jigHeader',
109
+ [COMPONENT_TYPE.JIG_WIDGET]: 'widget',
110
+ [COMPONENT_TYPE.LINE_CHART]: 'lineChart',
111
+ [COMPONENT_TYPE.LIST]: 'list',
112
+ [COMPONENT_TYPE.LIST_ITEM]: 'listItem',
113
+ [COMPONENT_TYPE.LOCATION]: 'location',
114
+ [COMPONENT_TYPE.MARKER_ITEM]: 'markerItem',
115
+ [COMPONENT_TYPE.MEDIA_FIELD]: 'mediaField',
116
+ [COMPONENT_TYPE.MENU_ITEM]: 'menuItem',
117
+ [COMPONENT_TYPE.NUMBER_FIELD]: 'numberField',
118
+ [COMPONENT_TYPE.PIE_CHART]: 'pieChart',
119
+ [COMPONENT_TYPE.PROGRESS_BAR]: 'progressBar',
120
+ [COMPONENT_TYPE.RATING]: 'rating',
121
+ [COMPONENT_TYPE.SECTION]: 'sectionOnDefault',
122
+ [COMPONENT_TYPE.SEGMENTED_CONTROL]: 'segmentedControl',
123
+ [COMPONENT_TYPE.SIGNATURE_FIELD]: 'signatureField',
124
+ [COMPONENT_TYPE.SLIDER]: 'slider',
125
+ [COMPONENT_TYPE.STAGE]: 'stage',
126
+ [COMPONENT_TYPE.STEPPER]: 'stepper',
127
+ [COMPONENT_TYPE.STORY_GROUP]: 'storyGroup',
128
+ [COMPONENT_TYPE.SUMMARY]: 'summaryDefault', // Output-only type; not directly constructable
129
+ [COMPONENT_TYPE.SUMMARY_DEFAULT]: 'summaryDefault',
130
+ [COMPONENT_TYPE.SUMMARY_CARD]: 'summaryCard',
131
+ [COMPONENT_TYPE.SUMMARY_COUNTER]: 'summaryCounter',
132
+ [COMPONENT_TYPE.SUMMARY_PROGRESS]: 'summaryProgress',
133
+ [COMPONENT_TYPE.TEXT]: 'text',
134
+ [COMPONENT_TYPE.TEXT_FIELD]: 'textField',
135
+ [COMPONENT_TYPE.TITLES]: 'titles',
136
+ [COMPONENT_TYPE.TREND]: 'trend',
137
+ [COMPONENT_TYPE.VIDEO_PLAYER]: 'videoPlayerOnJig',
138
+ [COMPONENT_TYPE.VIEW]: 'view',
139
+ [COMPONENT_TYPE.WEB_VIEW]: 'webViewOnDefault',
140
+ [COMPONENT_TYPE.DROPDOWN_ITEM]: 'choiceFieldItem',
141
+ [COMPONENT_TYPE.PRODUCT_ITEM]: 'gridItem',
142
+ [COMPONENT_TYPE.STEP]: 'stage',
143
+ [COMPONENT_TYPE.TAB_BUTTON]: 'segmentedControl',
144
+ };
145
+ export class JcBuilderFactory {
146
+ _allowed;
147
+ _onComponentCreated;
148
+ constructor(allowed, onComponentCreated) {
149
+ this._allowed = allowed;
150
+ this._onComponentCreated = onComponentCreated;
151
+ }
152
+ amountControl(options) {
153
+ if (!this._allowed.includes('component.amount-control')) {
154
+ throw new Error(`Component type 'amount-control' is not allowed in this context.`);
155
+ }
156
+ const builder = new JcAmountControlBuilder(options);
157
+ this._onComponentCreated(builder);
158
+ return builder;
159
+ }
160
+ avatar(options) {
161
+ if (!this._allowed.includes('component.avatar')) {
162
+ throw new Error(`Component type 'avatar' is not allowed in this context.`);
163
+ }
164
+ const builder = new JcAvatarBuilder(options);
165
+ this._onComponentCreated(builder);
166
+ return builder;
167
+ }
168
+ banner(options) {
169
+ if (!this._allowed.includes('component.banner')) {
170
+ throw new Error(`Component type 'banner' is not allowed in this context.`);
171
+ }
172
+ const builder = new JcBannerBuilder(options);
173
+ this._onComponentCreated(builder);
174
+ return builder;
175
+ }
176
+ button(options) {
177
+ if (!this._allowed.includes('component.button')) {
178
+ throw new Error(`Component type 'button' is not allowed in this context.`);
179
+ }
180
+ const builder = new JcButtonBuilder(options);
181
+ this._onComponentCreated(builder);
182
+ return builder;
183
+ }
184
+ barChart(options) {
185
+ if (!this._allowed.includes('component.bar-chart')) {
186
+ throw new Error(`Component type 'bar-chart' is not allowed in this context.`);
187
+ }
188
+ const builder = new JcBarChartBuilder(options);
189
+ this._onComponentCreated(builder);
190
+ return builder;
191
+ }
192
+ cardOnDefault(options = {}) {
193
+ if (!this._allowed.includes('component.card')) {
194
+ throw new Error(`Component type 'cardOnDefault' is not allowed in this context.`);
195
+ }
196
+ const builder = new JcCardOnDefaultBuilder(options);
197
+ this._onComponentCreated(builder);
198
+ return builder;
199
+ }
200
+ carousel(options = {}) {
201
+ if (!this._allowed.includes('component.carousel')) {
202
+ throw new Error(`Component type 'carousel' is not allowed in this context.`);
203
+ }
204
+ const builder = new JcCarouselBuilder(options);
205
+ this._onComponentCreated(builder);
206
+ return builder;
207
+ }
208
+ chat(options) {
209
+ if (!this._allowed.includes('component.chat')) {
210
+ throw new Error(`Component type 'chat' is not allowed in this context.`);
211
+ }
212
+ const builder = new JcChatBuilder(options);
213
+ this._onComponentCreated(builder);
214
+ return builder;
215
+ }
216
+ choiceFieldItem(options) {
217
+ if (!this._allowed.includes('component.choice-field-item')) {
218
+ throw new Error(`Component type 'choiceFieldItem' is not allowed in this context.`);
219
+ }
220
+ const builder = new JcChoiceFieldItemBuilder(options);
221
+ this._onComponentCreated(builder);
222
+ return builder;
223
+ }
224
+ countDown(options) {
225
+ if (!this._allowed.includes('component.countdown')) {
226
+ throw new Error(`Component type 'countDown' is not allowed in this context.`);
227
+ }
228
+ const builder = new JcCountDownBuilder(options);
229
+ this._onComponentCreated(builder);
230
+ return builder;
231
+ }
232
+ countUp(options) {
233
+ if (!this._allowed.includes('component.count-up')) {
234
+ throw new Error(`Component type 'countUp' is not allowed in this context.`);
235
+ }
236
+ const builder = new JcCountUpBuilder(options);
237
+ this._onComponentCreated(builder);
238
+ return builder;
239
+ }
240
+ customComponent(options) {
241
+ if (!this._allowed.includes('component.custom-component')) {
242
+ throw new Error(`Component type 'customComponent' is not allowed in this context.`);
243
+ }
244
+ const builder = JcCustomComponentInteropBuilder.from(options);
245
+ this._onComponentCreated(builder);
246
+ return builder;
247
+ }
248
+ entity(options = {}) {
249
+ if (!this._allowed.includes('component.entity')) {
250
+ throw new Error(`Component type 'entity' is not allowed in this context.`);
251
+ }
252
+ const builder = new JcEntityBuilder(options);
253
+ this._onComponentCreated(builder);
254
+ return builder;
255
+ }
256
+ entityField(options) {
257
+ if (!this._allowed.includes('component.entity-field')) {
258
+ throw new Error(`Component type 'entityField' is not allowed in this context.`);
259
+ }
260
+ const builder = new JcEntityFieldBuilder(options);
261
+ this._onComponentCreated(builder);
262
+ return builder;
263
+ }
264
+ entityFieldRow(options) {
265
+ if (!this._allowed.includes('component.field-row')) {
266
+ throw new Error(`Component type 'entityFieldRow' is not allowed in this context.`);
267
+ }
268
+ const builder = new JcEntityFieldRowBuilder(options);
269
+ this._onComponentCreated(builder);
270
+ return builder;
271
+ }
272
+ event(options = {}) {
273
+ if (!this._allowed.includes('component.event')) {
274
+ throw new Error(`Component type 'event' is not allowed in this context.`);
275
+ }
276
+ const builder = new JcEventBuilder(options);
277
+ this._onComponentCreated(builder);
278
+ return builder;
279
+ }
280
+ expander(options = {}) {
281
+ if (!this._allowed.includes('component.expander')) {
282
+ throw new Error(`Component type 'expander' is not allowed in this context.`);
283
+ }
284
+ const builder = new JcExpanderBuilder(options);
285
+ this._onComponentCreated(builder);
286
+ return builder;
287
+ }
288
+ form(options = {}) {
289
+ if (!this._allowed.includes('component.form')) {
290
+ throw new Error(`Component type 'form' is not allowed in this context.`);
291
+ }
292
+ const builder = new JcFormBuilder(options);
293
+ this._onComponentCreated(builder);
294
+ return builder;
295
+ }
296
+ galleryItem(options) {
297
+ if (!this._allowed.includes('component.gallery-item')) {
298
+ throw new Error(`Component type 'component.gallery-item' is not allowed in this context.`);
299
+ }
300
+ const builder = new JcGalleryItemBuilder(options);
301
+ this._onComponentCreated(builder);
302
+ return builder;
303
+ }
304
+ grid(options) {
305
+ if (!this._allowed.includes('component.grid')) {
306
+ throw new Error(`Component type 'grid' is not allowed in this context.`);
307
+ }
308
+ const builder = new JcGridBuilder(options);
309
+ this._onComponentCreated(builder);
310
+ return builder;
311
+ }
312
+ gridItem(options) {
313
+ if (!this._allowed.includes('component.grid-item')) {
314
+ throw new Error(`Component type 'gridItem' is not allowed in this context.`);
315
+ }
316
+ const builder = new JcGridItemBuilder(options);
317
+ this._onComponentCreated(builder);
318
+ return builder;
319
+ }
320
+ icon(options) {
321
+ if (!this._allowed.includes('component.icon')) {
322
+ throw new Error(`Component type 'icon' is not allowed in this context.`);
323
+ }
324
+ const builder = new JcIconBuilder(options);
325
+ this._onComponentCreated(builder);
326
+ return builder;
327
+ }
328
+ imageOnCarousel(options) {
329
+ if (!this._allowed.includes('component.image')) {
330
+ throw new Error(`Component type 'imageOnCarousel' is not allowed in this context.`);
331
+ }
332
+ const builder = new JcImageOnCarouselBuilder(options);
333
+ this._onComponentCreated(builder);
334
+ return builder;
335
+ }
336
+ imageOnDefault(options) {
337
+ if (!this._allowed.includes('component.image')) {
338
+ throw new Error(`Component type 'imageOnDefault' is not allowed in this context.`);
339
+ }
340
+ const builder = new JcImageOnDefaultBuilder(options);
341
+ this._onComponentCreated(builder);
342
+ return builder;
343
+ }
344
+ interactiveImage(options) {
345
+ if (!this._allowed.includes('component.interactive-image')) {
346
+ throw new Error(`Component type 'interactiveImage' is not allowed in this context.`);
347
+ }
348
+ const builder = new JcInteractiveImageBuilder(options);
349
+ this._onComponentCreated(builder);
350
+ return builder;
351
+ }
352
+ jig(options) {
353
+ if (!this._allowed.includes('component.jig')) {
354
+ throw new Error(`Component type 'jig' is not allowed in this context.`);
355
+ }
356
+ const builder = new JcJigBuilder(options);
357
+ this._onComponentCreated(builder);
358
+ return builder;
359
+ }
360
+ jigHeader(options = {}) {
361
+ if (!this._allowed.includes('component.jig-header')) {
362
+ throw new Error(`Component type 'jigHeader' is not allowed in this context.`);
363
+ }
364
+ const builder = new JcJigHeaderBuilder(options);
365
+ this._onComponentCreated(builder);
366
+ return builder;
367
+ }
368
+ lineChart(options) {
369
+ if (!this._allowed.includes('component.line-chart')) {
370
+ throw new Error(`Component type 'lineChart' is not allowed in this context.`);
371
+ }
372
+ const builder = new JcLineChartBuilder(options);
373
+ this._onComponentCreated(builder);
374
+ return builder;
375
+ }
376
+ list(options) {
377
+ if (!this._allowed.includes('component.list')) {
378
+ throw new Error(`Component type 'list' is not allowed in this context.`);
379
+ }
380
+ const builder = new JcListBuilder(options);
381
+ this._onComponentCreated(builder);
382
+ return builder;
383
+ }
384
+ listItemStandalone(options) {
385
+ if (!this._allowed.includes('component.list-item')) {
386
+ throw new Error(`Component type 'listItemStandalone' is not allowed in this context.`);
387
+ }
388
+ const builder = new JcListItemStandaloneBuilder(options);
389
+ this._onComponentCreated(builder);
390
+ return builder;
391
+ }
392
+ location(options) {
393
+ if (!this._allowed.includes('component.location')) {
394
+ throw new Error(`Component type 'location' is not allowed in this context.`);
395
+ }
396
+ const builder = new JcLocationBuilder(options);
397
+ this._onComponentCreated(builder);
398
+ return builder;
399
+ }
400
+ markerItem(options) {
401
+ if (!this._allowed.includes('component.marker-item')) {
402
+ throw new Error(`Component type 'markerItem' is not allowed in this context.`);
403
+ }
404
+ const builder = new JcMarkerItemBuilder(options);
405
+ this._onComponentCreated(builder);
406
+ return builder;
407
+ }
408
+ pieChart(options) {
409
+ if (!this._allowed.includes('component.pie-chart')) {
410
+ throw new Error(`Component type 'pieChart' is not allowed in this context.`);
411
+ }
412
+ const builder = new JcPieChartBuilder(options);
413
+ this._onComponentCreated(builder);
414
+ return builder;
415
+ }
416
+ progressBar(options) {
417
+ if (!this._allowed.includes('component.progress-bar')) {
418
+ throw new Error(`Component type 'progressBar' is not allowed in this context.`);
419
+ }
420
+ const builder = new JcProgressBarBuilder(options);
421
+ this._onComponentCreated(builder);
422
+ return builder;
423
+ }
424
+ rating(options) {
425
+ if (!this._allowed.includes('component.rating')) {
426
+ throw new Error(`Component type 'rating' is not allowed in this context.`);
427
+ }
428
+ const builder = new JcRatingBuilder(options);
429
+ this._onComponentCreated(builder);
430
+ return builder;
431
+ }
432
+ stage(options) {
433
+ if (!this._allowed.includes('component.stage')) {
434
+ throw new Error(`Component type 'stage' is not allowed in this context.`);
435
+ }
436
+ const builder = new JcStageBuilder(options);
437
+ this._onComponentCreated(builder);
438
+ return builder;
439
+ }
440
+ stepper(options = {}) {
441
+ if (!this._allowed.includes('component.stepper')) {
442
+ throw new Error(`Component type 'stepper' is not allowed in this context.`);
443
+ }
444
+ const builder = new JcStepperBuilder(options);
445
+ this._onComponentCreated(builder);
446
+ return builder;
447
+ }
448
+ storyGroup(options) {
449
+ if (!this._allowed.includes('component.story-group')) {
450
+ throw new Error(`Component type 'story-group' is not allowed in this context.`);
451
+ }
452
+ const builder = new JcStoryGroupBuilder(options);
453
+ this._onComponentCreated(builder);
454
+ return builder;
455
+ }
456
+ summaryDefault(options) {
457
+ if (!this._allowed.includes('component.summary-default')) {
458
+ throw new Error(`Component type 'summary-default' is not allowed in this context.`);
459
+ }
460
+ const builder = new JcSummaryDefaultBuilder(options);
461
+ this._onComponentCreated(builder);
462
+ return builder;
463
+ }
464
+ summaryCard(options) {
465
+ if (!this._allowed.includes('component.summary-card')) {
466
+ throw new Error(`Component type 'summary-card' is not allowed in this context.`);
467
+ }
468
+ const builder = new JcSummaryCardBuilder(options);
469
+ this._onComponentCreated(builder);
470
+ return builder;
471
+ }
472
+ summaryCounter(options) {
473
+ if (!this._allowed.includes('component.summary-counter')) {
474
+ throw new Error(`Component type 'summary-counter' is not allowed in this context.`);
475
+ }
476
+ const builder = new JcSummaryCounterBuilder(options);
477
+ this._onComponentCreated(builder);
478
+ return builder;
479
+ }
480
+ summaryProgress(options) {
481
+ if (!this._allowed.includes('component.summary-progress')) {
482
+ throw new Error(`Component type 'summary-progress' is not allowed in this context.`);
483
+ }
484
+ const builder = new JcSummaryProgressBuilder(options);
485
+ this._onComponentCreated(builder);
486
+ return builder;
487
+ }
488
+ text(options) {
489
+ if (!this._allowed.includes('component.text')) {
490
+ throw new Error(`Component type 'text' is not allowed in this context.`);
491
+ }
492
+ const builder = new JcTextBuilder(options);
493
+ this._onComponentCreated(builder);
494
+ return builder;
495
+ }
496
+ titles(options) {
497
+ if (!this._allowed.includes('component.titles')) {
498
+ throw new Error(`Component type 'titles' is not allowed in this context.`);
499
+ }
500
+ const builder = new JcTitlesBuilder(options);
501
+ this._onComponentCreated(builder);
502
+ return builder;
503
+ }
504
+ trend(options = {}) {
505
+ if (!this._allowed.includes('component.trend')) {
506
+ throw new Error(`Component type 'trend' is not allowed in this context.`);
507
+ }
508
+ const builder = new JcTrendBuilder(options);
509
+ this._onComponentCreated(builder);
510
+ return builder;
511
+ }
512
+ videoPlayerOnJig(options) {
513
+ if (!this._allowed.includes('component.video-player')) {
514
+ throw new Error(`Component type 'videoPlayerOnJig' is not allowed in this context.`);
515
+ }
516
+ const builder = new JcVideoPlayerOnJigBuilder(options);
517
+ this._onComponentCreated(builder);
518
+ return builder;
519
+ }
520
+ view(options) {
521
+ if (!this._allowed.includes('component.view')) {
522
+ throw new Error(`Component type 'view' is not allowed in this context.`);
523
+ }
524
+ const builder = new JcViewBuilder(options);
525
+ this._onComponentCreated(builder);
526
+ return builder;
527
+ }
528
+ webViewOnDefault(options = {}) {
529
+ if (!this._allowed.includes('component.web-view')) {
530
+ throw new Error(`Component type 'webViewOnDefault' is not allowed in this context.`);
531
+ }
532
+ const builder = new JcWebViewOnDefaultBuilder(options);
533
+ this._onComponentCreated(builder);
534
+ return builder;
535
+ }
536
+ webViewOnFull(options = {}) {
537
+ if (!this._allowed.includes('component.web-view')) {
538
+ throw new Error(`Component type 'webViewOnFull' is not allowed in this context.`);
539
+ }
540
+ const builder = new JcWebViewOnFullBuilder(options);
541
+ this._onComponentCreated(builder);
542
+ return builder;
543
+ }
544
+ widget(options) {
545
+ if (!this._allowed.includes('component.jig-widget')) {
546
+ throw new Error(`Component type 'widget' is not allowed in this context.`);
547
+ }
548
+ const builder = new JcJigWidgetBuilder(options);
549
+ this._onComponentCreated(builder);
550
+ return builder;
551
+ }
552
+ avatarField(options) {
553
+ if (!this._allowed.includes('component.avatar-field')) {
554
+ throw new Error(`Component type 'avatarField' is not allowed in this context.`);
555
+ }
556
+ const builder = new JcAvatarFieldBuilder(options);
557
+ this._onComponentCreated(builder);
558
+ return builder;
559
+ }
560
+ checkbox(options) {
561
+ if (!this._allowed.includes('component.checkbox')) {
562
+ throw new Error(`Component type 'checkbox' is not allowed in this context.`);
563
+ }
564
+ const builder = new JcCheckboxBuilder(options);
565
+ this._onComponentCreated(builder);
566
+ return builder;
567
+ }
568
+ choiceField(options) {
569
+ if (!this._allowed.includes('component.choice-field')) {
570
+ throw new Error(`Component type 'choiceField' is not allowed in this context.`);
571
+ }
572
+ const builder = new JcChoiceFieldBuilder(options);
573
+ this._onComponentCreated(builder);
574
+ return builder;
575
+ }
576
+ datePicker(options) {
577
+ if (!this._allowed.includes('component.date-picker')) {
578
+ throw new Error(`Component type 'datePicker' is not allowed in this context.`);
579
+ }
580
+ const builder = new JcDatePickerBuilder(options);
581
+ this._onComponentCreated(builder);
582
+ return builder;
583
+ }
584
+ divider(options) {
585
+ if (!this._allowed.includes('component.divider')) {
586
+ throw new Error(`Component type 'divider' is not allowed in this context.`);
587
+ }
588
+ const builder = new JcDividerBuilder(options);
589
+ this._onComponentCreated(builder);
590
+ return builder;
591
+ }
592
+ dropdown(options) {
593
+ const builder = new JcDropdownBuilder(options);
594
+ this._onComponentCreated(builder);
595
+ return builder;
596
+ }
597
+ durationPicker(options) {
598
+ const builder = new JcDurationPickerBuilder(options);
599
+ this._onComponentCreated(builder);
600
+ return builder;
601
+ }
602
+ emailField(options) {
603
+ const builder = new JcEmailFieldBuilder(options);
604
+ this._onComponentCreated(builder);
605
+ return builder;
606
+ }
607
+ fieldRow(options = {}) {
608
+ const builder = new JcFieldRowBuilder(options);
609
+ this._onComponentCreated(builder);
610
+ return builder;
611
+ }
612
+ mediaField(options) {
613
+ const builder = new JcMediaFieldBuilder(options);
614
+ this._onComponentCreated(builder);
615
+ return builder;
616
+ }
617
+ menuItem(options) {
618
+ if (!this._allowed.includes('component.menu-item')) {
619
+ throw new Error(`Component type 'menu-item' is not allowed in this context.`);
620
+ }
621
+ const builder = new JcMenuItemBuilder(options);
622
+ this._onComponentCreated(builder);
623
+ return builder;
624
+ }
625
+ numberField(options) {
626
+ const builder = new JcNumberFieldBuilder(options);
627
+ this._onComponentCreated(builder);
628
+ return builder;
629
+ }
630
+ sectionOnDefault(options = {}) {
631
+ const builder = new JcSectionOnDefaultBuilder(options);
632
+ this._onComponentCreated(builder);
633
+ return builder;
634
+ }
635
+ segmentedControl(options) {
636
+ const builder = new JcSegmentedControlBuilder(options);
637
+ this._onComponentCreated(builder);
638
+ return builder;
639
+ }
640
+ signatureField(options) {
641
+ const builder = new JcSignatureFieldBuilder(options);
642
+ this._onComponentCreated(builder);
643
+ return builder;
644
+ }
645
+ slider(options) {
646
+ if (!this._allowed.includes('component.slider')) {
647
+ throw new Error(`Component type 'slider' is not allowed in this context.`);
648
+ }
649
+ const builder = new JcSliderBuilder(options);
650
+ this._onComponentCreated(builder);
651
+ return builder;
652
+ }
653
+ textField(options) {
654
+ const builder = new JcTextFieldBuilder(options);
655
+ this._onComponentCreated(builder);
656
+ return builder;
657
+ }
658
+ chatMessage(options) {
659
+ const builder = new JcChatMessageBuilder(options);
660
+ this._onComponentCreated(builder);
661
+ return builder;
662
+ }
663
+ interactiveImageItem(options) {
664
+ const builder = new JcInteractiveImageItemBuilder(options);
665
+ this._onComponentCreated(builder);
666
+ return builder;
667
+ }
668
+ listItem(options) {
669
+ const builder = new JcListItemBuilder(options);
670
+ this._onComponentCreated(builder);
671
+ return builder;
672
+ }
673
+ }
674
+ export const CAROUSEL_FACTORY_METHODS = {
675
+ ...COMPONENT_TO_FACTORY_METHOD,
676
+ [COMPONENT_TYPE.CARD]: 'card',
677
+ [COMPONENT_TYPE.IMAGE]: 'image',
678
+ };
679
+ export class JcCarouselFactory extends JcBuilderFactory {
680
+ constructor(allowed, onComponentCreated) {
681
+ super(allowed, onComponentCreated);
682
+ }
683
+ card(options) {
684
+ return super.cardOnDefault(options);
685
+ }
686
+ image(options) {
687
+ return super.imageOnCarousel(options);
688
+ }
689
+ }
690
+ export const FULL_SCREEN_FACTORY_METHODS = {
691
+ ...COMPONENT_TO_FACTORY_METHOD,
692
+ [COMPONENT_TYPE.WEB_VIEW]: 'webView',
693
+ };
694
+ export class JcFullScreenFactory extends JcBuilderFactory {
695
+ constructor(allowed, onComponentCreated) {
696
+ super(allowed, onComponentCreated);
697
+ }
698
+ webView(options) {
699
+ return super.webViewOnFull(options);
700
+ }
701
+ }
702
+ export const DEFAULT_SCREEN_FACTORY_METHODS = {
703
+ ...COMPONENT_TO_FACTORY_METHOD,
704
+ [COMPONENT_TYPE.CARD]: 'card',
705
+ [COMPONENT_TYPE.IMAGE]: 'image',
706
+ [COMPONENT_TYPE.LIST_ITEM]: 'listItem',
707
+ [COMPONENT_TYPE.SECTION]: 'section',
708
+ [COMPONENT_TYPE.SEGMENTED_CONTROL]: 'segmented',
709
+ [COMPONENT_TYPE.VIDEO_PLAYER]: 'videoPlayer',
710
+ [COMPONENT_TYPE.WEB_VIEW]: 'webView',
711
+ };
712
+ export class JcDefaultScreenFactory extends JcBuilderFactory {
713
+ constructor(allowed, onComponentCreated) {
714
+ super(allowed, onComponentCreated);
715
+ }
716
+ card(options) {
717
+ return super.cardOnDefault(options);
718
+ }
719
+ image(options) {
720
+ return super.imageOnDefault(options);
721
+ }
722
+ webView(options) {
723
+ return super.webViewOnDefault(options);
724
+ }
725
+ videoPlayer(options) {
726
+ return super.videoPlayerOnJig(options);
727
+ }
728
+ section(options) {
729
+ return super.sectionOnDefault(options);
730
+ }
731
+ listItem(options) {
732
+ return super.listItemStandalone(options);
733
+ }
734
+ segmented(options) {
735
+ return super.segmentedControl(options);
736
+ }
737
+ }
738
+ export const SUMMARY_FACTORY_METHODS = {
739
+ [COMPONENT_TYPE.SUMMARY_DEFAULT]: 'default',
740
+ [COMPONENT_TYPE.SUMMARY_CARD]: 'card',
741
+ [COMPONENT_TYPE.SUMMARY_COUNTER]: 'counter',
742
+ };
743
+ export class JcSummaryFactory extends JcBuilderFactory {
744
+ constructor(allowed, onComponentCreated) {
745
+ super(allowed, onComponentCreated);
746
+ }
747
+ default(options) {
748
+ return super.summaryDefault(options);
749
+ }
750
+ card(options) {
751
+ return super.summaryCard(options);
752
+ }
753
+ counter(options) {
754
+ return super.summaryCounter(options);
755
+ }
756
+ }
757
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamMuYWJzdHJhY3QuZmFjdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb25lbnQvamMuYWJzdHJhY3QuZmFjdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQTZCLE1BQU0sd0JBQXdCLENBQUE7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsb0JBQW9CLEVBQTJCLE1BQU0sc0JBQXNCLENBQUE7QUFDcEYsT0FBTyxFQUFFLGVBQWUsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sbUJBQW1CLENBQUE7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQTtBQUNwRSxPQUFPLEVBQUUsc0JBQXNCLEVBQTZCLE1BQU0seUJBQXlCLENBQUE7QUFDM0YsT0FBTyxFQUFFLGlCQUFpQixFQUF3QixNQUFNLGtCQUFrQixDQUFBO0FBQzFFLE9BQU8sRUFBRSxhQUFhLEVBQW9CLE1BQU0sY0FBYyxDQUFBO0FBQzlELE9BQU8sRUFBRSxvQkFBb0IsRUFBMkIsTUFBTSxzQkFBc0IsQ0FBQTtBQUNwRixPQUFPLEVBQUUsaUJBQWlCLEVBQXdCLE1BQU0sa0JBQWtCLENBQUE7QUFDMUUsT0FBTyxFQUFFLG9CQUFvQixFQUEyQixNQUFNLHNCQUFzQixDQUFBO0FBQ3BGLE9BQU8sRUFBRSx3QkFBd0IsRUFBK0IsTUFBTSwyQkFBMkIsQ0FBQTtBQUNqRyxPQUFPLEVBQUUsa0JBQWtCLEVBQXlCLE1BQU0sb0JBQW9CLENBQUE7QUFDOUUsT0FBTyxFQUFFLGdCQUFnQixFQUF1QixNQUFNLGtCQUFrQixDQUFBO0FBQ3hFLE9BQU8sRUFDTCwrQkFBK0IsR0FFaEMsTUFBTSxrQ0FBa0MsQ0FBQTtBQUN6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQTBCLE1BQU0s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QWdCLENBQUMsT0FBTyxDQUFDLENBQUE7SUFBQSxDQUN2QztDQUNGO0FBVUQsTUFBTSxDQUFDLE1BQU0sdUJBQXVCLEdBQUc7SUFHckMsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLEVBQUUsU0FBUztJQUMzQyxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRSxNQUFNO0lBQ3JDLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxFQUFFLFNBQVM7Q0FDbkMsQ0FBQTtBQXNCVixNQUFNLE9BQU8sZ0JBRVgsU0FBUSxnQkFBbUI7SUFDM0IsWUFDRSxPQUFVLEVBQ1Ysa0JBQStFLEVBQy9FO1FBRUEsS0FBSyxDQUFDLE9BQU8sRUFBRSxrQkFBOEUsQ0FBQyxDQUFBO0lBQUEsQ0FDL0Y7SUFNRCxPQUFPLENBQUMsT0FBc0MsRUFBMkI7UUFDdkUsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQUEsQ0FDckM7SUFNRCxJQUFJLENBQUMsT0FBbUMsRUFBd0I7UUFDOUQsT0FBTyxLQUFLLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQUEsQ0FDbEM7SUFNRCxPQUFPLENBQUMsT0FBc0MsRUFBMkI7UUFDdkUsT0FBTyxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQUEsQ0FDckM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHR5cGUgSW5zdGFuY2VJZCB9IGZyb20gJy4uL2Fic3RyYWN0L2luZGV4LmpzJ1xuaW1wb3J0IHsgSmNBbW91bnRDb250cm9sQnVpbGRlciwgdHlwZSBKY0Ftb3VudENvbnRyb2xJbnB1dCB9IGZyb20gJy4vamMuYW1vdW50LWNvbnRyb2wuanMnXG5pbXBvcnQgeyBKY0F2YXRhckJ1aWxkZXIsIHR5cGUgSmNBdmF0YXJJbnB1dCB9IGZyb20gJy4vamMuYXZhdGFyLmpzJ1xuaW1wb3J0IHsgSmNBdmF0YXJGaWVsZEJ1aWxkZXIsIHR5cGUgSmNBdmF0YXJGaWVsZElucHV0IH0gZnJvbSAnLi9qYy5hdmF0YXItZmllbGQuanMnXG5pbXBvcnQgeyBKY0Jhbm5lckJ1aWxkZXIsIHR5cGUgSmNCYW5uZXJJbnB1dCB9IGZyb20gJy4vamMuYmFubmVyLmpzJ1xuaW1wb3J0IHsgSmNCYXJDaGFydEJ1aWxkZXIsIHR5cGUgSmNCYXJDaGFydElucHV0IH0gZnJvbSAnLi9qYy5iYXItY2hhcnQuanMnXG5pbXBvcnQgeyBKY0J1dHRvbkJ1aWxkZXIsIHR5cGUgSmNCdXR0b25JbnB1dCB9IGZyb20gJy4vamMuYnV0dG9uLmpzJ1xuaW1wb3J0IHsgSmNDYXJkT25EZWZhdWx0QnVpbGRlciwgdHlwZSBKY0NhcmRPbkRlZmF1bHRJbnB1dCB9IGZyb20gJy4vamMuY2FyZC5vbi1kZWZhdWx0LmpzJ1xuaW1wb3J0IHsgSmNDYXJvdXNlbEJ1aWxkZXIsIHR5cGUgSmNDYXJvdXNlbElucHV0IH0gZnJvbSAnLi9qYy5jYXJvdXNlbC5qcydcbmltcG9ydCB7IEpjQ2hhdEJ1aWxkZXIsIHR5cGUgSmNDaGF0SW5wdXQgfSBmcm9tICcuL2pjLmNoYXQuanMnXG5pbXBvcnQgeyBKY0NoYXRNZXNzYWdlQnVpbGRlciwgdHlwZSBKY0NoYXRNZXNzYWdlSW5wdXQgfSBmcm9tICcuL2pjLmNoYXQtbWVzc2FnZS5qcydcbmltcG9ydCB7IEpjQ2hlY2tib3hCdWlsZGVyLCB0eXBlIEpjQ2hlY2tib3hJbnB1dCB9IGZyb20gJy4vamMuY2hlY2tib3guanMnXG5pbXBvcnQgeyBKY0Nob2ljZUZpZWxkQnVpbGRlciwgdHlwZSBKY0Nob2ljZUZpZWxkSW5wdXQgfSBmcm9tICcuL2pjLmNob2ljZS1maWVsZC5qcydcbmltcG9ydCB7IEpjQ2hvaWNlRmllbGRJdGVtQnVpbGRlciwgdHlwZSBKY0Nob2ljZUZpZWxkSXRlbUlucHV0IH0gZnJvbSAnLi9qYy5jaG9pY2UtZmllbGQtaXRlbS5qcydcbmltcG9ydCB7IEpjQ291bnREb3duQnVpbGRlciwgdHlwZSBKY0NvdW50RG93bklucHV0IH0gZnJvbSAnLi9qYy5jb3VudC1kb3duLmpzJ1xuaW1wb3J0IHsgSmNDb3VudFVwQnVpbGRlciwgdHlwZSBKY0NvdW50VXBJbnB1dCB9IGZyb20gJy4vamMuY291bnQtdXAuanMnXG5pbXBvcnQge1xuICBKY0N1c3RvbUNvbXBvbmVudEludGVyb3BCdWlsZGVyLFxuICB0eXBlIEpjQ3VzdG9tQ29tcG9uZW50SW50ZXJvcElucHV0LFxufSBmcm9tICcuL2pjLmN1c3RvbS1jb21wb25lbnQuaW50ZXJvcC5qcydcbmltcG9ydCB7IEpjRGF0ZVBpY2tlckJ1aWxkZXIsIHR5cGUgSmNEYXRlUGlja2VySW5wdXQgfSBmcm9tICcuL2pjLmRhdGUtcGlja2VyLmpzJ1xuaW1wb3J0IHsgSmNEaXZpZGVyQnVpbGRlciwgdHlwZSBKY0RpdmlkZXJJbnB1dCB9IGZyb20gJy4vamMuZGl2aWRlci5qcydcbmltcG9ydCB7IEpjRHJvcGRvd25CdWlsZGVyLCB0eXBlIEpjRHJvcGRvd25JbnB1dCB9IGZyb20gJy4vamMuZHJvcGRvd24uanMnXG5pbXBvcnQgeyBKY0R1cmF0aW9uUGlja2VyQnVpbGRlciwgdHlwZSBKY0R1cmF0aW9uUGlja2VySW5wdXQgfSBmcm9tICcuL2pjLmR1cmF0aW9uLXBpY2tlci5qcydcbmltcG9ydCB7IEpjRW1haWxGaWVsZEJ1aWxkZXIsIHR5cGUgSmNFbWFpbEZpZWxkSW5wdXQgfSBmcm9tICcuL2pjLmVtYWlsLWZpZWxkLmpzJ1xuaW1wb3J0IHsgSmNFbnRpdHlCdWlsZGVyLCB0eXBlIEpjRW50aXR5SW5wdXQgfSBmcm9tICcuL2pjLmVudGl0eS5qcydcbmltcG9ydCB7IEpjRW50aXR5RmllbGRCdWlsZGVyLCB0eXBlIEpjRW50aXR5RmllbGRJbnB1dCB9IGZyb20gJy4vamMuZW50aXR5LWZpZWxkLmpzJ1xuaW1wb3J0IHsgSmNFdmVudEJ1aWxkZXIsIHR5cGUgSmNFdmVudElucHV0IH0gZnJvbSAnLi9qYy5ldmVudC5qcydcbmltcG9ydCB7IEpjRXhwYW5kZXJCdWlsZGVyLCB0eXBlIEpjRXhwYW5kZXJJbnB1dCB9IGZyb20gJy4vamMuZXhwYW5kZXIuanMnXG5pbXBvcnQgeyBKY0ZpZWxkUm93QnVpbGRlciwgdHlwZSBKY0ZpZWxkUm93SW5wdXQgfSBmcm9tICcuL2pjLmZpZWxkLXJvdy5qcydcbmltcG9ydCB7IEpjRW50aXR5RmllbGRSb3dCdWlsZGVyIH0gZnJvbSAnLi9qYy5maWVsZC1yb3cuZW50aXR5LmpzJ1xuaW1wb3J0IHsgSmNGb3JtQnVpbGRlciwgdHlwZSBKY0Zvcm1JbnB1dCB9IGZyb20gJy4vamMuZm9ybS5qcydcbmltcG9ydCB7IEpjR2FsbGVyeUl0ZW1CdWlsZGVyLCB0eXBlIEpjR2FsbGVyeUl0ZW1JbnB1dCB9IGZyb20gJy4vamMuZ2FsbGVyeS1pdGVtLmpzJ1xuaW1wb3J0IHsgSmNHcmlkQnVpbGRlciwgdHlwZSBKY0dyaWRJbnB1dCB9IGZyb20gJy4vamMuZ3JpZC5qcydcbmltcG9ydCB7IEpjR3JpZEl0ZW1CdWlsZGVyLCB0eXBlIEpjR3JpZEl0ZW1JbnB1dCB9IGZyb20gJy4vamMuZ3JpZC1pdGVtLmpzJ1xuaW1wb3J0IHsgSmNJY29uQnVpbGRlciwgdHlwZSBKY0ljb25JbnB1dCB9IGZyb20gJy4vamMuaWNvbi5qcydcbmltcG9ydCB7IEpjSW1hZ2VPbkNhcm91c2VsQnVpbGRlciwgdHlwZSBKY0ltYWdlT25DYXJvdXNlbElucHV0IH0gZnJvbSAnLi9qYy5pbWFnZS5vbi1jYXJvdXNlbC5qcydcbmltcG9ydCB7IEpjSmlnQnVpbGRlciwgdHlwZSBKY0ppZ0lucHV0IH0gZnJvbSAnLi9qYy5qaWcuanMnXG5pbXBvcnQgeyBKY0ltYWdlT25EZWZhdWx0QnVpbGRlciwgdHlwZSBKY0ltYWdlT25EZWZhdWx0SW5wdXQgfSBmcm9tICcuL2pjLmltYWdlLm9uLWRlZmF1bHQuanMnXG5pbXBvcnQgeyBKY0ludGVyYWN0aXZlSW1hZ2VCdWlsZGVyLCB0eXBlIEpjSW50ZXJhY3RpdmVJbWFnZUlucHV0IH0gZnJvbSAnLi9qYy5pbnRlcmFjdGl2ZS1pbWFnZS5qcydcbmltcG9ydCB7XG4gIEpjSW50ZXJhY3RpdmVJbWFnZUl0ZW1CdWlsZGVyLFxuICB0eXBlIEpjSW50ZXJhY3RpdmVJbWFnZUl0ZW1JbnB1dCxcbn0gZnJvbSAnLi9qYy5pbnRlcmFjdGl2ZS1pbWFnZS5pdGVtLmpzJ1xuaW1wb3J0IHsgSmNKaWdIZWFkZXJCdWlsZGVyLCB0eXBlIEpjSmlnSGVhZGVySW5wdXQgfSBmcm9tICcuL2pjLmppZy1oZWFkZXIuanMnXG5pbXBvcnQgeyBKY0ppZ1dpZGdldEJ1aWxkZXIsIHR5cGUgSmNKaWdXaWRnZXRJbnB1dCB9IGZyb20gJy4vamMuamlnLXdpZGdldC5qcydcbmltcG9ydCB7IEpjTGluZUNoYXJ0QnVpbGRlciwgdHlwZSBKY0xpbmVDaGFydElucHV0IH0gZnJvbSAnLi9qYy5saW5lLWNoYXJ0LmpzJ1xuaW1wb3J0IHsgSmNMaXN0QnVpbGRlciwgdHlwZSBKY0xpc3RJbnB1dCB9IGZyb20gJy4vamMubGlzdC5qcydcbmltcG9ydCB7IEpjTGlzdEl0ZW1CdWlsZGVyLCB0eXBlIEpjTGlzdEl0ZW1PcHRpb25zIH0gZnJvbSAnLi9qYy5saXN0LWl0ZW0uanMnXG5pbXBvcnQge1xuICBKY0xpc3RJdGVtU3RhbmRhbG9uZUJ1aWxkZXIsXG4gIHR5cGUgSmNMaXN0SXRlbVN0YW5kYWxvbmVPcHRpb25zLFxufSBmcm9tICcuL2pjLmxpc3QtaXRlbS5zdGFuZGFsb25lLmpzJ1xuaW1wb3J0IHsgSmNMb2NhdGlvbkJ1aWxkZXIsIHR5cGUgSmNMb2NhdGlvbklucHV0IH0gZnJvbSAnLi9qYy5sb2NhdGlvbi5qcydcbmltcG9ydCB7IEpjTWFya2VySXRlbUJ1aWxkZXIsIHR5cGUgSmNNYXJrZXJJdGVtSW5wdXQgfSBmcm9tICcuL2pjLm1hcmtlci1pdGVtLmpzJ1xuaW1wb3J0IHsgSmNNZWRpYUZpZWxkQnVpbGRlciwgdHlwZSBKY01lZGlhRmllbGRJbnB1dCB9IGZyb20gJy4vamMubWVkaWEtZmllbGQuanMnXG5pbXBvcnQgeyBKY01lbnVJdGVtQnVpbGRlciwgdHlwZSBKY01lbnVJdGVtSW5wdXQgfSBmcm9tICcuL2pjLm1lbnUtaXRlbS5qcydcbmltcG9ydCB7IEpjTnVtYmVyRmllbGRCdWlsZGVyLCB0eXBlIEpjTnVtYmVyRmllbGRJbnB1dCB9IGZyb20gJy4vamMubnVtYmVyLWZpZWxkLmpzJ1xuaW1wb3J0IHsgSmNQaWVDaGFydEJ1aWxkZXIsIHR5cGUgSmNQaWVDaGFydElucHV0IH0gZnJvbSAnLi9qYy5waWUtY2hhcnQuanMnXG5pbXBvcnQgeyBKY1Byb2dyZXNzQmFyQnVpbGRlciwgdHlwZSBKY1Byb2dyZXNzQmFySW5wdXQgfSBmcm9tICcuL2pjLnByb2dyZXNzLWJhci5qcydcbmltcG9ydCB7IEpjUmF0aW5nQnVpbGRlciwgdHlwZSBKY1JhdGluZ0lucHV0IH0gZnJvbSAnLi9qYy5yYXRpbmcuanMnXG5pbXBvcnQgeyBKY1NlY3Rpb25PbkRlZmF1bHRCdWlsZGVyLCB0eXBlIEpjU2VjdGlvbk9uRGVmYXVsdElucHV0IH0gZnJvbSAnLi9qYy5zZWN0aW9uLm9uLWRlZmF1bHQuanMnXG5pbXBvcnQgeyBKY1NlZ21lbnRlZENvbnRyb2xCdWlsZGVyLCB0eXBlIEpjU2VnbWVudGVkQ29udHJvbElucHV0IH0gZnJvbSAnLi9qYy5zZWdtZW50ZWQtY29udHJvbC5qcydcbmltcG9ydCB7IEpjU2lnbmF0dXJlRmllbGRCdWlsZGVyLCB0eXBlIEpjU2lnbmF0dXJlRmllbGRJbnB1dCB9IGZyb20gJy4vamMuc2lnbmF0dXJlLWZpZWxkLmpzJ1xuaW1wb3J0IHsgSmNTbGlkZXJCdWlsZGVyLCB0eXBlIEpjU2xpZGVySW5wdXQgfSBmcm9tICcuL2pjLnNsaWRlci5qcydcbmltcG9ydCB7IEpjU3RhZ2VCdWlsZGVyLCB0eXBlIEpjU3RhZ2VJbnB1dCB9IGZyb20gJy4vamMuc3RhZ2UuanMnXG5pbXBvcnQgeyBKY1N0ZXBwZXJCdWlsZGVyLCB0eXBlIEpjU3RlcHBlcklucHV0IH0gZnJvbSAnLi9qYy5zdGVwcGVyLmpzJ1xuaW1wb3J0IHsgSmNTdG9yeUdyb3VwQnVpbGRlciwgdHlwZSBKY1N0b3J5R3JvdXBJbnB1dCB9IGZyb20gJy4vamMuc3RvcnktZ3JvdXAuanMnXG5pbXBvcnQgeyBKY1N1bW1hcnlDYXJkQnVpbGRlciwgdHlwZSBKY1N1bW1hcnlDYXJkSW5wdXRPcHRpb25zIH0gZnJvbSAnLi9qYy5zdW1tYXJ5LmNhcmQuanMnXG5pbXBvcnQgeyBKY1N1bW1hcnlDb3VudGVyQnVpbGRlciwgdHlwZSBKY1N1bW1hcnlDb3VudGVySW5wdXRPcHRpb25zIH0gZnJvbSAnLi9qYy5zdW1tYXJ5LmNvdW50ZXIuanMnXG5pbXBvcnQgeyBKY1N1bW1hcnlEZWZhdWx0QnVpbGRlciwgdHlwZSBKY1N1bW1hcnlEZWZhdWx0SW5wdXRPcHRpb25zIH0gZnJvbSAnLi9qYy5zdW1tYXJ5LmRlZmF1bHQuanMnXG5pbXBvcnQge1xuICBKY1N1bW1hcnlQcm9ncmVzc0J1aWxkZXIsXG4gIHR5cGUgSmNTdW1tYXJ5UHJvZ3Jlc3NJbnB1dE9wdGlvbnMsXG59IGZyb20gJy4vamMuc3VtbWFyeS5wcm9ncmVzcy5qcydcbmltcG9ydCB7IEpjVGV4dEJ1aWxkZXIsIHR5cGUgSmNUZXh0SW5wdXQgfSBmcm9tICcuL2pjLnRleHQuanMnXG5pbXBvcnQgeyBKY1RleHRGaWVsZEJ1aWxkZXIsIHR5cGUgSmNUZXh0RmllbGRJbnB1dCB9IGZyb20gJy4vamMudGV4dC1maWVsZC5qcydcbmltcG9ydCB7IEpjVGl0bGVzQnVpbGRlciwgdHlwZSBKY1RpdGxlc0lucHV0IH0gZnJvbSAnLi9qYy50aXRsZXMuanMnXG5pbXBvcnQgeyBKY1RyZW5kQnVpbGRlciwgdHlwZSBKY1RyZW5kSW5wdXQgfSBmcm9tICcuL2pjLnRyZW5kLmpzJ1xuaW1wb3J0IHsgQ09NUE9ORU5UX1RZUEUsIHR5cGUgQ29tcG9uZW50VHlwZSB9IGZyb20gJy4vamMudHlwZXMuanMnXG5pbXBvcnQgeyBKY1ZpZXdCdWlsZGVyLCB0eXBlIEpjVmlld0lucHV0IH0gZnJvbSAnLi9qYy52aWV3LmpzJ1xuaW1wb3J0IHtcbiAgSmNWaWRlb1BsYXllck9uSmlnQnVpbGRlcixcbiAgdHlwZSBKY1ZpZGVvUGxheWVyT25KaWdJbnB1dCxcbn0gZnJvbSAnLi9qYy52aWRlby1wbGF5ZXIub24tamlnLmpzJ1xuaW1wb3J0IHtcbiAgSmNXZWJWaWV3T25EZWZhdWx0QnVpbGRlcixcbiAgdHlwZSBKY1dlYlZpZXdPbkRlZmF1bHRJbnB1dCxcbn0gZnJvbSAnLi9qYy53ZWItdmlldy5vbi1kZWZhdWx0LmpzJ1xuaW1wb3J0IHsgSmNXZWJWaWV3T25GdWxsQnVpbGRlciwgdHlwZSBKY1dlYlZpZXdPbkZ1bGxJbnB1dCB9IGZyb20gJy4vamMud2ViLXZpZXcub24tZnVsbC5qcydcblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKiBCQVNFIEZBQ1RPUlkgLSBDb3JlIGNvbXBvbmVudCBmYWN0b3J5IHdpdGggYWxsIGNyZWF0aW9uIG1ldGhvZHNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIE1hcHMgY29tcG9uZW50IHR5cGVzIHRvIHRoZWlyIGNvcnJlc3BvbmRpbmcgYmFzZSBmYWN0b3J5IG1ldGhvZCBuYW1lcy5cbiAqIFVzZWQgdG8gZGVyaXZlIFBpY2sgdHlwZXMgZnJvbSBBTExPV0VEX1RZUEVTIGFycmF5cy5cbiAqL1xuZXhwb3J0IGNvbnN0IENPTVBPTkVOVF9UT19GQUNUT1JZX01FVEhPRCA9IHtcbiAgW0NPTVBPTkVOVF9UWVBFLkFNT1VOVF9DT05UUk9MXTogJ2Ftb3VudENvbnRyb2wnLFxuICBbQ09NUE9ORU5UX1RZUEUuQVZBVEFSXTogJ2F2YXRhcicsXG4gIFtDT01QT05FTlRfVFlQRS5BVkFUQVJfRklFTERdOiAnYXZhdGFyRmllbGQnLFxuICBbQ09NUE9ORU5UX1RZUEUuQkFOTkVSXTogJ2Jhbm5lcicsXG4gIFtDT01QT05FTlRfVFlQRS5CQVJfQ0hBUlRdOiAnYmFyQ2hhcnQnLFxuICBbQ09NUE9ORU5UX1RZUEUuQlVUVE9OXTogJ2J1dHRvbicsXG4gIFtDT01QT05FTlRfVFlQRS5DQVJEXTogJ2NhcmRPbkRlZmF1bHQnLFxuICBbQ09NUE9ORU5UX1RZUEUuQ0FST1VTRUxdOiAnY2Fyb3VzZWwnLFxuICBbQ09NUE9ORU5UX1RZUEUuQ0hBVF06ICdjaGF0JyxcbiAgW0NPTVBPTkVOVF9UWVBFLkNIQVRfTUVTU0FHRV06ICdjaGF0TWVzc2FnZScsXG4gIFtDT01QT05FTlRfVFlQRS5DSEVDS0JPWF06ICdjaGVja2JveCcsXG4gIFtDT01QT05FTlRfVFlQRS5DSE9JQ0VfRklFTERdOiAnY2hvaWNlRmllbGQnLFxuICBbQ09NUE9ORU5UX1RZUEUuQ0hPSUNFX0ZJRUxEX0lURU1dOiAnY2hvaWNlRmllbGRJdGVtJyxcbiAgW0NPTVBPTkVOVF9UWVBFLkNPVU5URE9XTl06ICdjb3VudERvd24nLFxuICBbQ09NUE9ORU5UX1RZUEUuQ09VTlRfVVBdOiAnY291bnRVcCcsXG4gIFtDT01QT05FTlRfVFlQRS5DVVNUT01fQ09NUE9ORU5UXTogJ2N1c3RvbUNvbXBvbmVudCcsXG4gIFtDT01QT05FTlRfVFlQRS5EQVRFX1BJQ0tFUl06ICdkYXRlUGlja2VyJyxcbiAgW0NPTVBPTkVOVF9UWVBFLkRJVklERVJdOiAnZGl2aWRlcicsXG4gIFtDT01QT05FTlRfVFlQRS5EUk9QRE9XTl06ICdkcm9wZG93bicsXG4gIFtDT01QT05FTlRfVFlQRS5EVVJBVElPTl9QSUNLRVJdOiAnZHVyYXRpb25QaWNrZXInLFxuICBbQ09NUE9ORU5UX1RZUEUuRU1BSUxfRklFTERdOiAnZW1haWxGaWVsZCcsXG4gIFtDT01QT05FTlRfVFlQRS5FTlRJVFldOiAnZW50aXR5JyxcbiAgW0NPTVBPTkVOVF9UWVBFLkVOVElUWV9GSUVMRF06ICdlbnRpdHlGaWVsZCcsXG4gIFtDT01QT05FTlRfVFlQRS5FVkVOVF06ICdldmVudCcsXG4gIFtDT01QT05FTlRfVFlQRS5FWFBBTkRFUl06ICdleHBhbmRlcicsXG4gIFtDT01QT05FTlRfVFlQRS5GSUVMRF9ST1ddOiAnZmllbGRSb3cnLFxuICBbQ09NUE9ORU5UX1RZUEUuRk9STV06ICdmb3JtJyxcbiAgW0NPTVBPTkVOVF9UWVBFLkdBTExFUllfSVRFTV06ICdnYWxsZXJ5SXRlbScsXG4gIFtDT01QT05FTlRfVFlQRS5HUklEXTogJ2dyaWQnLFxuICBbQ09NUE9ORU5UX1RZUEUuR1JJRF9JVEVNXTogJ2dyaWRJdGVtJyxcbiAgW0NPTVBPTkVOVF9UWVBFLklDT05dOiAnaWNvbicsXG4gIFtDT01QT05FTlRfVFlQRS5JTUFHRV06ICdpbWFnZU9uRGVmYXVsdCcsXG4gIFtDT01QT05FTlRfVFlQRS5JTlRFUkFDVElWRV9JTUFHRV06ICdpbnRlcmFjdGl2ZUltYWdlJyxcbiAgW0NPTVBPTkVOVF9UWVBFLklOVEVSQUNUSVZFX0lNQUdFX0lURU1dOiAnaW50ZXJhY3RpdmVJbWFnZUl0ZW0nLFxuICBbQ09NUE9ORU5UX1RZUEUuSklHXTogJ2ppZycsXG4gIFtDT01QT05FTlRfVFlQRS5KSUdfSEVBREVSXTogJ2ppZ0hlYWRlcicsXG4gIFtDT01QT05FTlRfVFlQRS5KSUdfV0lER0VUXTogJ3dpZGdldCcsXG4gIFtDT01QT05FTlRfVFlQRS5MSU5FX0NIQVJUXTogJ2xpbmVDaGFydCcsXG4gIFtDT01QT05FTlRfVFlQRS5MSVNUXTogJ2xpc3QnLFxuICBbQ09NUE9ORU5UX1RZUEUuTElTVF9JVEVNXTogJ2xpc3RJdGVtJyxcbiAgW0NPTVBPTkVOVF9UWVBFLkxPQ0FUSU9OXTogJ2xvY2F0aW9uJyxcbiAgW0NPTVBPTkVOVF9UWVBFLk1BUktFUl9JVEVNXTogJ21hcmtlckl0ZW0nLFxuICBbQ09NUE9ORU5UX1RZUEUuTUVESUFfRklFTERdOiAnbWVkaWFGaWVsZCcsXG4gIFtDT01QT05FTlRfVFlQRS5NRU5VX0lURU1dOiAnbWVudUl0ZW0nLFxuICBbQ09NUE9ORU5UX1RZUEUuTlVNQkVSX0ZJRUxEXTogJ251bWJlckZpZWxkJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlBJRV9DSEFSVF06ICdwaWVDaGFydCcsXG4gIFtDT01QT05FTlRfVFlQRS5QUk9HUkVTU19CQVJdOiAncHJvZ3Jlc3NCYXInLFxuICBbQ09NUE9ORU5UX1RZUEUuUkFUSU5HXTogJ3JhdGluZycsXG4gIFtDT01QT05FTlRfVFlQRS5TRUNUSU9OXTogJ3NlY3Rpb25PbkRlZmF1bHQnLFxuICBbQ09NUE9ORU5UX1RZUEUuU0VHTUVOVEVEX0NPTlRST0xdOiAnc2VnbWVudGVkQ29udHJvbCcsXG4gIFtDT01QT05FTlRfVFlQRS5TSUdOQVRVUkVfRklFTERdOiAnc2lnbmF0dXJlRmllbGQnLFxuICBbQ09NUE9ORU5UX1RZUEUuU0xJREVSXTogJ3NsaWRlcicsXG4gIFtDT01QT05FTlRfVFlQRS5TVEFHRV06ICdzdGFnZScsXG4gIFtDT01QT05FTlRfVFlQRS5TVEVQUEVSXTogJ3N0ZXBwZXInLFxuICBbQ09NUE9ORU5UX1RZUEUuU1RPUllfR1JPVVBdOiAnc3RvcnlHcm91cCcsXG4gIFtDT01QT05FTlRfVFlQRS5TVU1NQVJZXTogJ3N1bW1hcnlEZWZhdWx0JywgLy8gT3V0cHV0LW9ubHkgdHlwZTsgbm90IGRpcmVjdGx5IGNvbnN0cnVjdGFibGVcbiAgW0NPTVBPTkVOVF9UWVBFLlNVTU1BUllfREVGQVVMVF06ICdzdW1tYXJ5RGVmYXVsdCcsXG4gIFtDT01QT05FTlRfVFlQRS5TVU1NQVJZX0NBUkRdOiAnc3VtbWFyeUNhcmQnLFxuICBbQ09NUE9ORU5UX1RZUEUuU1VNTUFSWV9DT1VOVEVSXTogJ3N1bW1hcnlDb3VudGVyJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlNVTU1BUllfUFJPR1JFU1NdOiAnc3VtbWFyeVByb2dyZXNzJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlRFWFRdOiAndGV4dCcsXG4gIFtDT01QT05FTlRfVFlQRS5URVhUX0ZJRUxEXTogJ3RleHRGaWVsZCcsXG4gIFtDT01QT05FTlRfVFlQRS5USVRMRVNdOiAndGl0bGVzJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlRSRU5EXTogJ3RyZW5kJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlZJREVPX1BMQVlFUl06ICd2aWRlb1BsYXllck9uSmlnJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlZJRVddOiAndmlldycsXG4gIFtDT01QT05FTlRfVFlQRS5XRUJfVklFV106ICd3ZWJWaWV3T25EZWZhdWx0JyxcbiAgW0NPTVBPTkVOVF9UWVBFLkRST1BET1dOX0lURU1dOiAnY2hvaWNlRmllbGRJdGVtJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlBST0RVQ1RfSVRFTV06ICdncmlkSXRlbScsXG4gIFtDT01QT05FTlRfVFlQRS5TVEVQXTogJ3N0YWdlJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlRBQl9CVVRUT05dOiAnc2VnbWVudGVkQ29udHJvbCcsXG59IGFzIGNvbnN0IHNhdGlzZmllcyBSZWNvcmQ8Q29tcG9uZW50VHlwZSwga2V5b2YgSmNCdWlsZGVyRmFjdG9yeT5cblxuLyoqXG4gKiBEZXJpdmVzIGZhY3RvcnkgbWV0aG9kcyBmcm9tIGNvbXBvbmVudCB0eXBlcyBhcnJheS5cbiAqIFVzYWdlOiBGYWN0b3J5TWV0aG9kc0Zvcjx0eXBlb2YgQUxMT1dFRF9UWVBFUz5cbiAqL1xuZXhwb3J0IHR5cGUgRmFjdG9yeU1ldGhvZHNGb3I8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBUW251bWJlcl0gZXh0ZW5kcyBrZXlvZiB0eXBlb2YgQ09NUE9ORU5UX1RPX0ZBQ1RPUllfTUVUSE9EXG4gICAgPyBQaWNrPEpjQnVpbGRlckZhY3RvcnksICh0eXBlb2YgQ09NUE9ORU5UX1RPX0ZBQ1RPUllfTUVUSE9EKVtUW251bWJlcl1dPlxuICAgIDogbmV2ZXJcblxuLyoqXG4gKiBEZXJpdmVzIHVuaW9uIG9mIGJ1aWxkZXIgdHlwZXMgZnJvbSBhbGxvd2VkIGNvbXBvbmVudCB0eXBlcyBmb3IgYmFzZSBmYWN0b3J5IGNvbnRleHQuXG4gKiBVc2VkIGJ5IGNvbXBvbmVudHMgdGhhdCB1c2UgSmNCdWlsZGVyRmFjdG9yeSBkaXJlY3RseSB3aXRob3V0IGEgc3BlY2lhbGl6ZWQgZmFjdG9yeS5cbiAqXG4gKiBUaGlzIHR5cGUgaGVscGVyIGVsaW1pbmF0ZXMgbWFudWFsIG1haW50ZW5hbmNlIG9mIGJ1aWxkZXIgdW5pb24gdHlwZXNcbiAqIGJ5IGF1dG9tYXRpY2FsbHkgZXh0cmFjdGluZyByZXR1cm4gdHlwZXMgZnJvbSBmYWN0b3J5IG1ldGhvZHMuXG4gKlxuICogV2h5IHdlIG5lZWQgdGhpczpcbiAqIC0gQ29tcG9uZW50cyBuZWVkIHRvIHN0b3JlIGNoaWxkIGJ1aWxkZXJzIHdpdGggY29ycmVjdCB0eXBlc1xuICogLSBNYW51YWxseSBtYWludGFpbmluZyB1bmlvbnMgKGUuZy4sIEpjSW1hZ2VCdWlsZGVyIHwgSmNUZXh0QnVpbGRlcilcbiAqICAgaXMgZXJyb3ItcHJvbmUgYW5kIHZpb2xhdGVzIERSWSBwcmluY2lwbGVcbiAqIC0gV2hlbiBBTExPV0VEX1RZUEVTIGNoYW5nZXMsIHRoZSB1bmlvbiB0eXBlIHVwZGF0ZXMgYXV0b21hdGljYWxseVxuICpcbiAqIEhvdyBpdCB3b3JrczpcbiAqIDEuIFRha2VzIEFMTE9XRURfVFlQRVMgYXJyYXkgKGUuZy4sIFtDT01QT05FTlRfVFlQRS5JTUFHRSwgQ09NUE9ORU5UX1RZUEUuVEVYVCwgLi4uXSlcbiAqIDIuIEZhY3RvcnlNZXRob2RzRm9yPFQ+IG1hcHMgdG8gZmFjdG9yeSBtZXRob2RzIChlLmcuLCB7IGltYWdlT25EZWZhdWx0OiAuLi4sIHdpZGdldDogLi4uIH0pXG4gKiAzLiBba2V5b2YgLi4uXSBhY2Nlc3NlcyBhbGwgbWV0aG9kIHNpZ25hdHVyZXMgaW4gdGhlIFBpY2sgdHlwZVxuICogNC4gQ29uZGl0aW9uYWwgdHlwZSB3aXRoICdpbmZlciBSJyBleHRyYWN0cyB0aGUgcmV0dXJuIHR5cGUgb2YgZWFjaCBtZXRob2RcbiAqIDUuIFJlc3VsdCBpcyBhIHVuaW9uIG9mIGFsbCBidWlsZGVyIHR5cGVzIHRoYXQgY2FuIGJlIGNyZWF0ZWRcbiAqL1xuZXhwb3J0IHR5cGUgQmFzZUJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBGYWN0b3J5TWV0aG9kc0ZvcjxUPltrZXlvZiBGYWN0b3J5TWV0aG9kc0ZvcjxUPl0gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGluZmVyIFIgPyBSIDogbmV2ZXJcblxuLyoqXG4gKiBJbnRlcm5hbCBmYWN0b3J5IGNsYXNzIGNvbnRhaW5pbmcgYWxsIEpDIGNvbXBvbmVudCBjcmVhdGlvbiBtZXRob2RzLlxuICogQ29tcG9uZW50cyBzaG91bGQgdXNlIFBpY2s8SkNGYWN0b3J5Q2xhc3MsIC4uLj4gdG8gc2VsZWN0IG9ubHkgdGhlIG1ldGhvZHMgdGhleSBuZWVkLlxuICogVGhpcyBhdm9pZHMgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIHdoaWxlIG1haW50YWluaW5nIGZ1bGwgdHlwZSBzYWZldHkuXG4gKlxuICogV2hlbiBpbnN0YW50aWF0ZWQgd2l0aCBvbkNvbXBvbmVudENyZWF0ZWQgY2FsbGJhY2ssIG5vdGlmaWVzIHBhcmVudCBvZiBjcmVhdGVkIGNvbXBvbmVudHMuXG4gKiBHZW5lcmljIHR5cGUgVCBhbGxvd3MgYXV0b21hdGljIGluZmVyZW5jZSBvZiBjb21wb25lbnQgdHlwZXMgZnJvbSBBTExPV0VEX1RZUEVTLlxuICovXG5leHBvcnQgY2xhc3MgSmNCdWlsZGVyRmFjdG9yeTxUIGV4dGVuZHMgcmVhZG9ubHkgQ29tcG9uZW50VHlwZVtdID0gcmVhZG9ubHkgQ29tcG9uZW50VHlwZVtdPiB7XG4gIHByb3RlY3RlZCByZWFkb25seSBfYWxsb3dlZDogVFxuICAvKipcbiAgICogSW50ZXJuYWwgY2FsbGJhY2sgZm9yIGNvbXBvbmVudCBjcmVhdGlvbiBub3RpZmljYXRpb24uXG4gICAqXG4gICAqIFdoeSB3ZSB1c2UgJ3Vua25vd24nIGhlcmUgaW5zdGVhZCBvZiBCYXNlQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPjpcbiAgICogRWFjaCBmYWN0b3J5IG1ldGhvZCAoYXZhdGFyKCksIGJ1dHRvbigpLCBldGMuKSBjcmVhdGVzIGEgc3BlY2lmaWMgYnVpbGRlciB0eXBlLFxuICAgKiBidXQgVHlwZVNjcmlwdCBjYW5ub3QgcHJvdmUgYXQgY29tcGlsZS10aW1lIHRoYXQgdGhlc2UgY29uY3JldGUgdHlwZXMgYXJlIHBhcnRcbiAgICogb2YgdGhlIGdlbmVyaWMgdW5pb24gQmFzZUJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VD4uIEV2ZW4gdGhvdWdoIHdlIGhhdmUgcnVudGltZVxuICAgKiBndWFyZHMgY2hlY2tpbmcgX2FsbG93ZWQuaW5jbHVkZXMoKSwgVHlwZVNjcmlwdCdzIGNvbnRyb2wgZmxvdyBhbmFseXNpcyBkb2Vzbid0XG4gICAqIG5hcnJvdyBnZW5lcmljIHR5cGUgcGFyYW1ldGVycy4gVXNpbmcgJ3Vua25vd24nIGhlcmUgaXMgYSBwcmFnbWF0aWMgdHJhZGUtb2ZmOlxuICAgKiAtIFR5cGUgc2FmZXR5IGlzIGVuZm9yY2VkIGF0IHRoZSBjb25zdHJ1Y3RvciBib3VuZGFyeSAocHVibGljIEFQSSlcbiAgICogLSBSdW50aW1lIGNoZWNrcyBlbnN1cmUgb25seSBhbGxvd2VkIGNvbXBvbmVudHMgYXJlIGNyZWF0ZWRcbiAgICogLSBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBieXBhc3NlcyB0eXBlIGNoZWNraW5nIGZvciBzaW1wbGljaXR5XG4gICAqIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiB3aGVuIGJyaWRnaW5nIGdlbmVyaWMgY29uc3RyYWludHMgd2l0aCBjb25jcmV0ZSBpbXBsZW1lbnRhdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX29uQ29tcG9uZW50Q3JlYXRlZDogKGNvbXBvbmVudDogdW5rbm93bikgPT4gdm9pZFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIGFsbG93ZWQ6IFQsXG4gICAgb25Db21wb25lbnRDcmVhdGVkOiAoY29tcG9uZW50OiBCYXNlQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPikgPT4gdm9pZCxcbiAgKSB7XG4gICAgdGhpcy5fYWxsb3dlZCA9IGFsbG93ZWRcbiAgICAvLyBUeXBlLWVyYXNlIGZvciBpbnRlcm5hbCB1c2Ugd2hpbGUgbWFpbnRhaW5pbmcgdHlwZSBzYWZldHkgYXQgdGhlIGJvdW5kYXJ5XG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkID0gb25Db21wb25lbnRDcmVhdGVkIGFzIChjb21wb25lbnQ6IHVua25vd24pID0+IHZvaWRcbiAgfVxuXG4gIC8qKlxuICAgKiBOdW1lcmljIGluY3JlbWVudC9kZWNyZW1lbnQgY29udHJvbC5cbiAgICovXG4gIGFtb3VudENvbnRyb2wob3B0aW9ucz86IEpjQW1vdW50Q29udHJvbElucHV0KTogSmNBbW91bnRDb250cm9sQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuYW1vdW50LWNvbnRyb2wnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnYW1vdW50LWNvbnRyb2wnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQW1vdW50Q29udHJvbEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIENpcmN1bGFyIHVzZXIgaW1hZ2Ugd2l0aCBpbml0aWFscyBmYWxsYmFjay5cbiAgICovXG4gIGF2YXRhcihvcHRpb25zPzogSmNBdmF0YXJJbnB1dCk6IEpjQXZhdGFyQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuYXZhdGFyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2F2YXRhcicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNBdmF0YXJCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9taW5lbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlIHdpdGggaWNvbiwgYWN0aW9ucywgYW5kIHN0YXR1cyBzdHlsaW5nLlxuICAgKi9cbiAgYmFubmVyKG9wdGlvbnM6IEpjQmFubmVySW5wdXQpOiBKY0Jhbm5lckJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmJhbm5lcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdiYW5uZXInIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQmFubmVyQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogU3RhbmRhbG9uZSBwcmVzc2FibGUgYnV0dG9uIHdpdGggaWNvbiBhbmQgc3R5bGluZy5cbiAgICovXG4gIGJ1dHRvbihvcHRpb25zOiBKY0J1dHRvbklucHV0KTogSmNCdXR0b25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5idXR0b24nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnYnV0dG9uJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0J1dHRvbkJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXlzIGNhdGVnb3JpY2FsIGRhdGEgYXMgdmVydGljYWwvaG9yaXpvbnRhbCBiYXJzIHdpdGggbXVsdGlwbGUgc2VyaWVzIHN1cHBvcnQuXG4gICAqL1xuICBiYXJDaGFydChvcHRpb25zPzogSmNCYXJDaGFydElucHV0KTogSmNCYXJDaGFydEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmJhci1jaGFydCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdiYXItY2hhcnQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQmFyQ2hhcnRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgY29udGVudCBpbiBmbGV4aWJsZSBsYXlvdXRzIHdpdGggc3R5bGluZy5cbiAgICovXG4gIGNhcmRPbkRlZmF1bHQob3B0aW9uczogSmNDYXJkT25EZWZhdWx0SW5wdXQgPSB7fSk6IEpjQ2FyZE9uRGVmYXVsdEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmNhcmQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY2FyZE9uRGVmYXVsdCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDYXJkT25EZWZhdWx0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogSG9yaXpvbnRhbCBzd2lwZWFibGUgZ2FsbGVyeSB3aXRoIHBhZ2luYXRpb24uXG4gICAqL1xuICBjYXJvdXNlbChvcHRpb25zOiBKY0Nhcm91c2VsSW5wdXQgPSB7fSk6IEpjQ2Fyb3VzZWxCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5jYXJvdXNlbCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdjYXJvdXNlbCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDYXJvdXNlbEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBjaGF0IGNvbXBvbmVudHMgd2l0aCBtZXNzYWdlIHRlbXBsYXRlcywgc2VuZCBhY3Rpb25zLCBkYXRhIGJpbmRpbmcuXG4gICAqL1xuICBjaGF0KG9wdGlvbnM/OiBKY0NoYXRJbnB1dCk6IEpjQ2hhdEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmNoYXQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY2hhdCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDaGF0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGNob2ljZSBmaWVsZCBpdGVtcyB3aXRoIHRpdGxlIGRpc3BsYXkgYW5kIHVuaXF1ZSB2YWx1ZXMuXG4gICAqL1xuICBjaG9pY2VGaWVsZEl0ZW0ob3B0aW9ucz86IEpjQ2hvaWNlRmllbGRJdGVtSW5wdXQpOiBKY0Nob2ljZUZpZWxkSXRlbUJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmNob2ljZS1maWVsZC1pdGVtJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2Nob2ljZUZpZWxkSXRlbScgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDaG9pY2VGaWVsZEl0ZW1CdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBDb3VudGRvd24gdGltZXIgdG8gdGFyZ2V0IGRhdGUvdGltZS5cbiAgICovXG4gIGNvdW50RG93bihvcHRpb25zPzogSmNDb3VudERvd25JbnB1dCk6IEpjQ291bnREb3duQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuY291bnRkb3duJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2NvdW50RG93bicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDb3VudERvd25CdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBBbmltYXRlZCBudW1iZXIgY291bnRlciBmcm9tIHN0YXJ0IHRvIGVuZC5cbiAgICovXG4gIGNvdW50VXAob3B0aW9ucz86IEpjQ291bnRVcElucHV0KTogSmNDb3VudFVwQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuY291bnQtdXAnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY291bnRVcCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNDb3VudFVwQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogTG9hZCBkZXByZWNhdGVkIGN1c3RvbSBjb21wb25lbnRzIGZyb20gWUFNTC9KU09OLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBDdXN0b20gY29tcG9uZW50cyBhcmUgZGVwcmVjYXRlZC4gUHJlZmVyIG5hdGl2ZSBTREsgY29tcG9uZW50cy5cbiAgICovXG4gIGN1c3RvbUNvbXBvbmVudChvcHRpb25zOiBKY0N1c3RvbUNvbXBvbmVudEludGVyb3BJbnB1dCk6IEpjQ3VzdG9tQ29tcG9uZW50SW50ZXJvcEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmN1c3RvbS1jb21wb25lbnQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY3VzdG9tQ29tcG9uZW50JyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IEpjQ3VzdG9tQ29tcG9uZW50SW50ZXJvcEJ1aWxkZXIuZnJvbShvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICBlbnRpdHkob3B0aW9uczogSmNFbnRpdHlJbnB1dCA9IHt9KTogSmNFbnRpdHlCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5lbnRpdHknKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnZW50aXR5JyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0VudGl0eUJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgZW50aXR5RmllbGQob3B0aW9ucz86IEpjRW50aXR5RmllbGRJbnB1dCk6IEpjRW50aXR5RmllbGRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5lbnRpdHktZmllbGQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnZW50aXR5RmllbGQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjRW50aXR5RmllbGRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIGVudGl0eUZpZWxkUm93KG9wdGlvbnM/OiB7IGluc3RhbmNlSWQ/OiBJbnN0YW5jZUlkIH0pOiBKY0VudGl0eUZpZWxkUm93QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuZmllbGQtcm93JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2VudGl0eUZpZWxkUm93JyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0VudGl0eUZpZWxkUm93QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICBldmVudChvcHRpb25zOiBKY0V2ZW50SW5wdXQgPSB7fSk6IEpjRXZlbnRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5ldmVudCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdldmVudCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNFdmVudEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBjb2xsYXBzaWJsZSBjb250ZW50IHNlY3Rpb25zIHdpdGggaGVhZGVycyBhbmQgYW5pbWF0aW9ucy5cbiAgICogQGFsaWFzIGNvbXBvbmVudC5leHBhbmRlclxuICAgKi9cbiAgZXhwYW5kZXIob3B0aW9uczogSmNFeHBhbmRlcklucHV0ID0ge30pOiBKY0V4cGFuZGVyQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuZXhwYW5kZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnZXhwYW5kZXInIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjRXhwYW5kZXJCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgaW5wdXQgZmllbGQgZ3JvdXBzIHdpdGggc3RhdGUgbWFuYWdlbWVudC5cbiAgICovXG4gIGZvcm0ob3B0aW9uczogSmNGb3JtSW5wdXQgPSB7fSk6IEpjRm9ybUJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmZvcm0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnZm9ybScgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNGb3JtQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogSW1hZ2UgaXRlbSBmb3IgZ2FsbGVyeSBzY3JlZW5zLlxuICAgKi9cbiAgZ2FsbGVyeUl0ZW0ob3B0aW9uczogSmNHYWxsZXJ5SXRlbUlucHV0KTogSmNHYWxsZXJ5SXRlbUJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmdhbGxlcnktaXRlbScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdjb21wb25lbnQuZ2FsbGVyeS1pdGVtJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0dhbGxlcnlJdGVtQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogTXVsdGktY29sdW1uIGxheW91dCB3aXRoIGZsZXhpYmxlIGl0ZW0gc2l6aW5nLlxuICAgKi9cbiAgZ3JpZChvcHRpb25zPzogSmNHcmlkSW5wdXQpOiBKY0dyaWRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5ncmlkJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2dyaWQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjR3JpZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgZ3JpZEl0ZW0ob3B0aW9ucz86IEpjR3JpZEl0ZW1JbnB1dCk6IEpjR3JpZEl0ZW1CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5ncmlkLWl0ZW0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnZ3JpZEl0ZW0nIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjR3JpZEl0ZW1CdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHN5c3RlbSBpY29ucyB3aXRoIGNvbG9yIGFuZCBzaXplLlxuICAgKi9cbiAgaWNvbihvcHRpb25zPzogSmNJY29uSW5wdXQpOiBKY0ljb25CdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5pY29uJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2ljb24nIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjSWNvbkJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgaW1hZ2VPbkNhcm91c2VsKG9wdGlvbnM/OiBKY0ltYWdlT25DYXJvdXNlbElucHV0KTogSmNJbWFnZU9uQ2Fyb3VzZWxCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5pbWFnZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdpbWFnZU9uQ2Fyb3VzZWwnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjSW1hZ2VPbkNhcm91c2VsQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQnVpbGRzIGltYWdlIGNvbXBvbmVudHMgd2l0aCBzaXppbmcuXG4gICAqL1xuICBpbWFnZU9uRGVmYXVsdChvcHRpb25zPzogSmNJbWFnZU9uRGVmYXVsdElucHV0KTogSmNJbWFnZU9uRGVmYXVsdEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmltYWdlJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2ltYWdlT25EZWZhdWx0JyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0ltYWdlT25EZWZhdWx0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgaW1hZ2VzIHdpdGggY2xpY2thYmxlIGhvdHNwb3RzLlxuICAgKi9cbiAgaW50ZXJhY3RpdmVJbWFnZShvcHRpb25zPzogSmNJbnRlcmFjdGl2ZUltYWdlSW5wdXQpOiBKY0ludGVyYWN0aXZlSW1hZ2VCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5pbnRlcmFjdGl2ZS1pbWFnZScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdpbnRlcmFjdGl2ZUltYWdlJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0ludGVyYWN0aXZlSW1hZ2VCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWJlZHMgYSBqaWcgYXMgYSBjb21wb25lbnQgd2l0aGluIGFub3RoZXIgc2NyZWVuLlxuICAgKi9cbiAgamlnKG9wdGlvbnM6IEpjSmlnSW5wdXQpOiBKY0ppZ0J1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LmppZycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdqaWcnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjSmlnQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICBqaWdIZWFkZXIob3B0aW9uczogSmNKaWdIZWFkZXJJbnB1dCA9IHt9KTogSmNKaWdIZWFkZXJCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5qaWctaGVhZGVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2ppZ0hlYWRlcicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNKaWdIZWFkZXJCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5cyB0aW1lLXNlcmllcyBkYXRhIGFzIGxpbmVzLlxuICAgKi9cbiAgbGluZUNoYXJ0KG9wdGlvbnM/OiBKY0xpbmVDaGFydElucHV0KTogSmNMaW5lQ2hhcnRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5saW5lLWNoYXJ0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2xpbmVDaGFydCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNMaW5lQ2hhcnRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJ0aWNhbC9ob3Jpem9udGFsIHNjcm9sbGFibGUgZGF0YSBsaXN0LlxuICAgKi9cbiAgbGlzdChvcHRpb25zPzogSmNMaXN0SW5wdXQgJiB7IGluc3RhbmNlSWQ/OiBJbnN0YW5jZUlkIH0pOiBKY0xpc3RCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5saXN0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2xpc3QnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjTGlzdEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgbGlzdEl0ZW1TdGFuZGFsb25lKFxuICAgIG9wdGlvbnM/OiBKY0xpc3RJdGVtU3RhbmRhbG9uZU9wdGlvbnMgJiB7IGluc3RhbmNlSWQ/OiBJbnN0YW5jZUlkIH0sXG4gICk6IEpjTGlzdEl0ZW1TdGFuZGFsb25lQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQubGlzdC1pdGVtJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ2xpc3RJdGVtU3RhbmRhbG9uZScgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNMaXN0SXRlbVN0YW5kYWxvbmVCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcmFjdGl2ZSBtYXAgd2l0aCBtYXJrZXJzLCBwYXRocywgdXNlciBsb2NhdGlvbi5cbiAgICovXG4gIGxvY2F0aW9uKG9wdGlvbnM/OiBKY0xvY2F0aW9uSW5wdXQpOiBKY0xvY2F0aW9uQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQubG9jYXRpb24nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnbG9jYXRpb24nIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjTG9jYXRpb25CdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIG1hcmtlckl0ZW0ob3B0aW9ucz86IEpjTWFya2VySXRlbUlucHV0KTogSmNNYXJrZXJJdGVtQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQubWFya2VyLWl0ZW0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnbWFya2VySXRlbScgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNNYXJrZXJJdGVtQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgcHJvcG9ydGlvbmFsIGRhdGEgYXMgcGllIHNsaWNlcy5cbiAgICovXG4gIHBpZUNoYXJ0KG9wdGlvbnM/OiBKY1BpZUNoYXJ0SW5wdXQpOiBKY1BpZUNoYXJ0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQucGllLWNoYXJ0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3BpZUNoYXJ0JyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY1BpZUNoYXJ0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogVmlzdWFsIHByb2dyZXNzIGluZGljYXRvciB3aXRoIHBlcmNlbnRhZ2UuXG4gICAqL1xuICBwcm9ncmVzc0JhcihvcHRpb25zPzogSmNQcm9ncmVzc0JhcklucHV0KTogSmNQcm9ncmVzc0JhckJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LnByb2dyZXNzLWJhcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdwcm9ncmVzc0JhcicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNQcm9ncmVzc0JhckJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIFJhdGluZyBpbnB1dCB3aXRoIGN1c3RvbWl6YWJsZSBpY29ucyBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAqL1xuICByYXRpbmcob3B0aW9uczogSmNSYXRpbmdJbnB1dCk6IEpjUmF0aW5nQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQucmF0aW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3JhdGluZycgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNSYXRpbmdCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIHN0YWdlKG9wdGlvbnM/OiBKY1N0YWdlSW5wdXQpOiBKY1N0YWdlQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuc3RhZ2UnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnc3RhZ2UnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjU3RhZ2VCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIHN0ZXBwZXIob3B0aW9uczogSmNTdGVwcGVySW5wdXQgPSB7fSk6IEpjU3RlcHBlckJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LnN0ZXBwZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnc3RlcHBlcicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTdGVwcGVyQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogU3dpcGVhYmxlIHN0b3J5IGNhcm91c2VsIHdpdGggY29uZGl0aW9uYWwgaXRlbSByZW5kZXJpbmcuXG4gICAqL1xuICBzdG9yeUdyb3VwKG9wdGlvbnM6IEpjU3RvcnlHcm91cElucHV0KTogSmNTdG9yeUdyb3VwQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuc3RvcnktZ3JvdXAnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnc3RvcnktZ3JvdXAnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjU3RvcnlHcm91cEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgc3VtbWFyeURlZmF1bHQob3B0aW9ucz86IEpjU3VtbWFyeURlZmF1bHRJbnB1dE9wdGlvbnMpOiBKY1N1bW1hcnlEZWZhdWx0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuc3VtbWFyeS1kZWZhdWx0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3N1bW1hcnktZGVmYXVsdCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTdW1tYXJ5RGVmYXVsdEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgc3VtbWFyeUNhcmQob3B0aW9ucz86IEpjU3VtbWFyeUNhcmRJbnB1dE9wdGlvbnMpOiBKY1N1bW1hcnlDYXJkQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuc3VtbWFyeS1jYXJkJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3N1bW1hcnktY2FyZCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTdW1tYXJ5Q2FyZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgc3VtbWFyeUNvdW50ZXIob3B0aW9ucz86IEpjU3VtbWFyeUNvdW50ZXJJbnB1dE9wdGlvbnMpOiBKY1N1bW1hcnlDb3VudGVyQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuc3VtbWFyeS1jb3VudGVyJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3N1bW1hcnktY291bnRlcicgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTdW1tYXJ5Q291bnRlckJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgc3VtbWFyeVByb2dyZXNzKG9wdGlvbnM6IEpjU3VtbWFyeVByb2dyZXNzSW5wdXRPcHRpb25zKTogSmNTdW1tYXJ5UHJvZ3Jlc3NCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5zdW1tYXJ5LXByb2dyZXNzJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3N1bW1hcnktcHJvZ3Jlc3MnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjU3VtbWFyeVByb2dyZXNzQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgZm9ybWF0dGVkIHRleHQgd2l0aCBtYXJrZG93biBzdXBwb3J0LlxuICAgKi9cbiAgdGV4dChvcHRpb25zPzogSmNUZXh0SW5wdXQpOiBKY1RleHRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC50ZXh0JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3RleHQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjVGV4dEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgdGl0bGVzKG9wdGlvbnM/OiBKY1RpdGxlc0lucHV0KTogSmNUaXRsZXNCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC50aXRsZXMnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAndGl0bGVzJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY1RpdGxlc0J1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgdHJlbmQob3B0aW9uczogSmNUcmVuZElucHV0ID0ge30pOiBKY1RyZW5kQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQudHJlbmQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAndHJlbmQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjVHJlbmRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgdmlkZW8gcGxheWVycyB3aXRoIHBsYXliYWNrIGNvbnRyb2xzLlxuICAgKi9cbiAgdmlkZW9QbGF5ZXJPbkppZyhvcHRpb25zPzogSmNWaWRlb1BsYXllck9uSmlnSW5wdXQpOiBKY1ZpZGVvUGxheWVyT25KaWdCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC52aWRlby1wbGF5ZXInKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAndmlkZW9QbGF5ZXJPbkppZycgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNWaWRlb1BsYXllck9uSmlnQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQ29udGFpbmVyIGZvciBjdXN0b20gbGF5b3V0IHdpdGggZmxleCwgc3BhY2luZywgYm9yZGVycywgYW5kIGNoaWxkcmVuLlxuICAgKi9cbiAgdmlldyhvcHRpb25zPzogSmNWaWV3SW5wdXQpOiBKY1ZpZXdCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC52aWV3JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3ZpZXcnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjVmlld0J1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyB3ZWIgdmlldyBjb21wb25lbnRzIGZvciBkaXNwbGF5aW5nIHdlYiBjb250ZW50LlxuICAgKi9cbiAgd2ViVmlld09uRGVmYXVsdChvcHRpb25zOiBKY1dlYlZpZXdPbkRlZmF1bHRJbnB1dCA9IHt9KTogSmNXZWJWaWV3T25EZWZhdWx0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQud2ViLXZpZXcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnd2ViVmlld09uRGVmYXVsdCcgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250ZXh0LmApXG4gICAgfVxuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNXZWJWaWV3T25EZWZhdWx0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogRnVsbC1zY3JlZW4gd2ViIGJyb3dzZXIgZXhwZXJpZW5jZS5cbiAgICovXG4gIHdlYlZpZXdPbkZ1bGwob3B0aW9uczogSmNXZWJWaWV3T25GdWxsSW5wdXQgPSB7fSk6IEpjV2ViVmlld09uRnVsbEJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LndlYi12aWV3JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tcG9uZW50IHR5cGUgJ3dlYlZpZXdPbkZ1bGwnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjV2ViVmlld09uRnVsbEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkcyBzY3JlZW4gd2lkZ2V0cyB3aXRoIHRhcmdldCBqaWcsIGlucHV0cywgcHJlc3MgYWN0aW9ucy5cbiAgICovXG4gIHdpZGdldChvcHRpb25zPzogSmNKaWdXaWRnZXRJbnB1dCk6IEpjSmlnV2lkZ2V0QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuamlnLXdpZGdldCcpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICd3aWRnZXQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjSmlnV2lkZ2V0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvLyBGaWVsZCBjb21wb25lbnRzXG4gIGF2YXRhckZpZWxkKG9wdGlvbnM6IEpjQXZhdGFyRmllbGRJbnB1dCk6IEpjQXZhdGFyRmllbGRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5hdmF0YXItZmllbGQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnYXZhdGFyRmllbGQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQXZhdGFyRmllbGRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBCaW5hcnkgdG9nZ2xlIGZvciB0cnVlL2ZhbHNlIHNlbGVjdGlvbnMuXG4gICAqL1xuICBjaGVja2JveChvcHRpb25zOiBKY0NoZWNrYm94SW5wdXQpOiBKY0NoZWNrYm94QnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuY2hlY2tib3gnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY2hlY2tib3gnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQ2hlY2tib3hCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIGNob2ljZUZpZWxkKG9wdGlvbnM6IEpjQ2hvaWNlRmllbGRJbnB1dCk6IEpjQ2hvaWNlRmllbGRCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5jaG9pY2UtZmllbGQnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgdHlwZSAnY2hvaWNlRmllbGQnIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjQ2hvaWNlRmllbGRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBTZWxlY3RzIGRhdGVzIGFuZCB0aW1lcyB3aXRoIGNhbGVuZGFyIGludGVyZmFjZS5cbiAgICovXG4gIGRhdGVQaWNrZXIob3B0aW9uczogSmNEYXRlUGlja2VySW5wdXQpOiBKY0RhdGVQaWNrZXJCdWlsZGVyIHtcbiAgICBpZiAoIXRoaXMuX2FsbG93ZWQuaW5jbHVkZXMoJ2NvbXBvbmVudC5kYXRlLXBpY2tlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdkYXRlUGlja2VyJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0RhdGVQaWNrZXJCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBWaXN1YWwgc2VwYXJhdG9yIGJldHdlZW4gY29udGVudCBzZWN0aW9ucy5cbiAgICovXG4gIGRpdmlkZXIob3B0aW9ucz86IEpjRGl2aWRlcklucHV0KTogSmNEaXZpZGVyQnVpbGRlciB7XG4gICAgaWYgKCF0aGlzLl9hbGxvd2VkLmluY2x1ZGVzKCdjb21wb25lbnQuZGl2aWRlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdkaXZpZGVyJyBpcyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQuYClcbiAgICB9XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0RpdmlkZXJCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBCdWlsZHMgZHJvcGRvd24gZmllbGRzIGZvciBmb3Jtcywgd2l0aCBvcHRpb25zLCBzZWFyY2gsIGFuZCB2YWxpZGF0aW9uLlxuICAgKiBAYWxpYXMgY29tcG9uZW50LmRyb3Bkb3duXG4gICAqL1xuICBkcm9wZG93bihvcHRpb25zOiBKY0Ryb3Bkb3duSW5wdXQpOiBKY0Ryb3Bkb3duQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0Ryb3Bkb3duQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogU2VsZWN0cyB0aW1lIGR1cmF0aW9ucyAoaG91cnMvbWludXRlcykuXG4gICAqL1xuICBkdXJhdGlvblBpY2tlcihvcHRpb25zOiBKY0R1cmF0aW9uUGlja2VySW5wdXQpOiBKY0R1cmF0aW9uUGlja2VyQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0R1cmF0aW9uUGlja2VyQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIGVtYWlsIGFkZHJlc3NlcyB3aXRoIGtleWJvYXJkIG9wdGltaXphdGlvbi5cbiAgICovXG4gIGVtYWlsRmllbGQob3B0aW9uczogSmNFbWFpbEZpZWxkSW5wdXQpOiBKY0VtYWlsRmllbGRCdWlsZGVyIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjRW1haWxGaWVsZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgZmllbGRSb3cob3B0aW9uczogSmNGaWVsZFJvd0lucHV0ID0ge30pOiBKY0ZpZWxkUm93QnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0ZpZWxkUm93QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZXMgcGhvdG9zL3ZpZGVvcyBmcm9tIGRldmljZS5cbiAgICovXG4gIG1lZGlhRmllbGQob3B0aW9uczogSmNNZWRpYUZpZWxkSW5wdXQpOiBKY01lZGlhRmllbGRCdWlsZGVyIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjTWVkaWFGaWVsZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRpb24gbWVudSBlbnRyeSB3aXRoIHRpdGxlLCBzdWJ0aXRsZSwgbGVmdCBlbGVtZW50LCBhbmQgcHJlc3MgYWN0aW9uLlxuICAgKi9cbiAgbWVudUl0ZW0ob3B0aW9uczogSmNNZW51SXRlbUlucHV0KTogSmNNZW51SXRlbUJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50Lm1lbnUtaXRlbScpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdtZW51LWl0ZW0nIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjTWVudUl0ZW1CdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWN0cyBudW1lcmljIGlucHV0IHdpdGggZm9ybWF0dGluZyBhbmQgdmFsaWRhdGlvbi5cbiAgICovXG4gIG51bWJlckZpZWxkKG9wdGlvbnM6IEpjTnVtYmVyRmllbGRJbnB1dCk6IEpjTnVtYmVyRmllbGRCdWlsZGVyIHtcbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjTnVtYmVyRmllbGRCdWlsZGVyKG9wdGlvbnMpXG4gICAgdGhpcy5fb25Db21wb25lbnRDcmVhdGVkKGJ1aWxkZXIpXG4gICAgcmV0dXJuIGJ1aWxkZXJcbiAgfVxuXG4gIHNlY3Rpb25PbkRlZmF1bHQob3B0aW9uczogSmNTZWN0aW9uT25EZWZhdWx0SW5wdXQgPSB7fSk6IEpjU2VjdGlvbk9uRGVmYXVsdEJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTZWN0aW9uT25EZWZhdWx0QnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICBzZWdtZW50ZWRDb250cm9sKG9wdGlvbnM/OiBKY1NlZ21lbnRlZENvbnRyb2xJbnB1dCk6IEpjU2VnbWVudGVkQ29udHJvbEJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTZWdtZW50ZWRDb250cm9sQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZXMgaGFuZC1kcmF3biBzaWduYXR1cmVzLlxuICAgKi9cbiAgc2lnbmF0dXJlRmllbGQob3B0aW9uczogSmNTaWduYXR1cmVGaWVsZElucHV0KTogSmNTaWduYXR1cmVGaWVsZEJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNTaWduYXR1cmVGaWVsZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgc2xpZGVyKG9wdGlvbnM6IEpjU2xpZGVySW5wdXQpOiBKY1NsaWRlckJ1aWxkZXIge1xuICAgIGlmICghdGhpcy5fYWxsb3dlZC5pbmNsdWRlcygnY29tcG9uZW50LnNsaWRlcicpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvbXBvbmVudCB0eXBlICdzbGlkZXInIGlzIG5vdCBhbGxvd2VkIGluIHRoaXMgY29udGV4dC5gKVxuICAgIH1cbiAgICBjb25zdCBidWlsZGVyID0gbmV3IEpjU2xpZGVyQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICAvKipcbiAgICogQ29sbGVjdHMgdGV4dCBpbnB1dCB3aXRoIHZhbGlkYXRpb24gYW5kIGZvcm1hdHRpbmcuXG4gICAqL1xuICB0ZXh0RmllbGQob3B0aW9uczogSmNUZXh0RmllbGRJbnB1dCk6IEpjVGV4dEZpZWxkQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY1RleHRGaWVsZEJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLy8gQWRkaXRpb25hbCBjb21wb25lbnRzXG4gIGNoYXRNZXNzYWdlKG9wdGlvbnM/OiBKY0NoYXRNZXNzYWdlSW5wdXQpOiBKY0NoYXRNZXNzYWdlQnVpbGRlciB7XG4gICAgY29uc3QgYnVpbGRlciA9IG5ldyBKY0NoYXRNZXNzYWdlQnVpbGRlcihvcHRpb25zKVxuICAgIHRoaXMuX29uQ29tcG9uZW50Q3JlYXRlZChidWlsZGVyKVxuICAgIHJldHVybiBidWlsZGVyXG4gIH1cblxuICBpbnRlcmFjdGl2ZUltYWdlSXRlbShvcHRpb25zPzogSmNJbnRlcmFjdGl2ZUltYWdlSXRlbUlucHV0KTogSmNJbnRlcmFjdGl2ZUltYWdlSXRlbUJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNJbnRlcmFjdGl2ZUltYWdlSXRlbUJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIGZvciBsaXN0IGRhdGEgaXRlbXMgd2l0aCB0aXRsZSwgc3VidGl0bGUsIGVsZW1lbnRzLlxuICAgKi9cbiAgbGlzdEl0ZW0ob3B0aW9ucz86IEpjTGlzdEl0ZW1PcHRpb25zICYgeyBpbnN0YW5jZUlkPzogSW5zdGFuY2VJZCB9KTogSmNMaXN0SXRlbUJ1aWxkZXIge1xuICAgIGNvbnN0IGJ1aWxkZXIgPSBuZXcgSmNMaXN0SXRlbUJ1aWxkZXIob3B0aW9ucylcbiAgICB0aGlzLl9vbkNvbXBvbmVudENyZWF0ZWQoYnVpbGRlcilcbiAgICByZXR1cm4gYnVpbGRlclxuICB9XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICogQ0FST1VTRUwgRkFDVE9SWSAtIENvbnRleHQtc3BlY2lmaWMgZmFjdG9yeSBmb3IgY2Fyb3VzZWwgY29tcG9uZW50c1xuICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG5cbi8qKlxuICogTWFwcyBjb21wb25lbnQgdHlwZXMgdG8gSmNDYXJvdXNlbEZhY3RvcnkgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGNvbnN0IENBUk9VU0VMX0ZBQ1RPUllfTUVUSE9EUyA9IHtcbiAgLi4uQ09NUE9ORU5UX1RPX0ZBQ1RPUllfTUVUSE9ELFxuICAvLyBPdmVycmlkZSB3aXRoIGNhcm91c2VsLXNwZWNpZmljIGFsaWFzZXNcbiAgW0NPTVBPTkVOVF9UWVBFLkNBUkRdOiAnY2FyZCcsXG4gIFtDT01QT05FTlRfVFlQRS5JTUFHRV06ICdpbWFnZScsXG59IGFzIGNvbnN0XG5cbi8qKlxuICogRGVyaXZlcyBmYWN0b3J5IG1ldGhvZHMgZm9yIEpjQ2Fyb3VzZWxGYWN0b3J5LlxuICovXG5leHBvcnQgdHlwZSBDYXJvdXNlbEZhY3RvcnlNZXRob2RzRm9yPFQgZXh0ZW5kcyByZWFkb25seSBDb21wb25lbnRUeXBlW10+ID1cbiAgVFtudW1iZXJdIGV4dGVuZHMga2V5b2YgdHlwZW9mIENBUk9VU0VMX0ZBQ1RPUllfTUVUSE9EU1xuICAgID8gUGljazxKY0Nhcm91c2VsRmFjdG9yeSwgKHR5cGVvZiBDQVJPVVNFTF9GQUNUT1JZX01FVEhPRFMpW1RbbnVtYmVyXV0+XG4gICAgOiBuZXZlclxuXG4vKipcbiAqIERlcml2ZXMgdW5pb24gb2YgYnVpbGRlciB0eXBlcyBmcm9tIGFsbG93ZWQgY29tcG9uZW50IHR5cGVzIGZvciBjYXJvdXNlbCBjb250ZXh0LlxuICovXG5leHBvcnQgdHlwZSBDYXJvdXNlbEJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBDYXJvdXNlbEZhY3RvcnlNZXRob2RzRm9yPFQ+W2tleW9mIENhcm91c2VsRmFjdG9yeU1ldGhvZHNGb3I8VD5dIGV4dGVuZHMgKFxuICAgIC4uLmFyZ3M6IGFueVtdXG4gICkgPT4gaW5mZXIgUlxuICAgID8gUlxuICAgIDogbmV2ZXJcblxuLyoqXG4gKiBDb250ZXh0LXNwZWNpZmljIGZhY3RvcnkgZm9yIGNhcm91c2VsIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBKY0Nhcm91c2VsRmFjdG9yeTxcbiAgVCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSA9IHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSxcbj4gZXh0ZW5kcyBKY0J1aWxkZXJGYWN0b3J5PFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWxsb3dlZDogVCxcbiAgICBvbkNvbXBvbmVudENyZWF0ZWQ6IChjb21wb25lbnQ6IENhcm91c2VsQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPikgPT4gdm9pZCxcbiAgKSB7XG4gICAgLy8gT3ZlcnJpZGUgdG8gdXNlIGNhcm91c2VsLXNwZWNpZmljIGJ1aWxkZXIgdW5pb24gdHlwZVxuICAgIHN1cGVyKGFsbG93ZWQsIG9uQ29tcG9uZW50Q3JlYXRlZCBhcyAoY29tcG9uZW50OiBCYXNlQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPikgPT4gdm9pZClcbiAgfVxuICAvKipcbiAgICogR3JvdXBzIGNvbnRlbnQgaW4gZmxleGlibGUgbGF5b3V0cyB3aXRoIHN0eWxpbmcuXG4gICAqIEBzZWUgY2FyZE9uRGVmYXVsdFxuICAgKi9cbiAgY2FyZChcbiAgICBvcHRpb25zPzogUGFyYW1ldGVyczxKY0J1aWxkZXJGYWN0b3J5WydjYXJkT25EZWZhdWx0J10+WzBdLFxuICApOiBSZXR1cm5UeXBlPEpjQnVpbGRlckZhY3RvcnlbJ2NhcmRPbkRlZmF1bHQnXT4ge1xuICAgIHJldHVybiBzdXBlci5jYXJkT25EZWZhdWx0KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgaW1hZ2VzIGluIGNhcm91c2VsIHNsaWRlcy5cbiAgICogQHNlZSBpbWFnZU9uQ2Fyb3VzZWxcbiAgICovXG4gIGltYWdlKFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ2ltYWdlT25DYXJvdXNlbCddPlswXSxcbiAgKTogUmV0dXJuVHlwZTxKY0J1aWxkZXJGYWN0b3J5WydpbWFnZU9uQ2Fyb3VzZWwnXT4ge1xuICAgIHJldHVybiBzdXBlci5pbWFnZU9uQ2Fyb3VzZWwob3B0aW9ucylcbiAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIEZVTEwgU0NSRUVOIEZBQ1RPUlkgLSBDb250ZXh0LXNwZWNpZmljIGZhY3RvcnkgZm9yIGZ1bGwgc2NyZWVuIGNvbXBvbmVudHNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIE1hcHMgY29tcG9uZW50IHR5cGVzIHRvIEpjRnVsbFNjcmVlbkZhY3RvcnkgbWV0aG9kcy5cbiAqL1xuZXhwb3J0IGNvbnN0IEZVTExfU0NSRUVOX0ZBQ1RPUllfTUVUSE9EUyA9IHtcbiAgLi4uQ09NUE9ORU5UX1RPX0ZBQ1RPUllfTUVUSE9ELFxuICAvLyBPdmVycmlkZSB3aXRoIGZ1bGwgc2NyZWVuLXNwZWNpZmljIGFsaWFzZXNcbiAgW0NPTVBPTkVOVF9UWVBFLldFQl9WSUVXXTogJ3dlYlZpZXcnLFxufSBhcyBjb25zdFxuXG4vKipcbiAqIERlcml2ZXMgZmFjdG9yeSBtZXRob2RzIGZvciBKY0Z1bGxTY3JlZW5GYWN0b3J5LlxuICovXG5leHBvcnQgdHlwZSBGdWxsU2NyZWVuRmFjdG9yeU1ldGhvZHNGb3I8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBUW251bWJlcl0gZXh0ZW5kcyBrZXlvZiB0eXBlb2YgRlVMTF9TQ1JFRU5fRkFDVE9SWV9NRVRIT0RTXG4gICAgPyBQaWNrPEpjRnVsbFNjcmVlbkZhY3RvcnksICh0eXBlb2YgRlVMTF9TQ1JFRU5fRkFDVE9SWV9NRVRIT0RTKVtUW251bWJlcl1dPlxuICAgIDogbmV2ZXJcblxuLyoqXG4gKiBEZXJpdmVzIHVuaW9uIG9mIGJ1aWxkZXIgdHlwZXMgZnJvbSBhbGxvd2VkIGNvbXBvbmVudCB0eXBlcyBmb3IgZnVsbC1zY3JlZW4gY29udGV4dC5cbiAqL1xuZXhwb3J0IHR5cGUgRnVsbFNjcmVlbkJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBGdWxsU2NyZWVuRmFjdG9yeU1ldGhvZHNGb3I8VD5ba2V5b2YgRnVsbFNjcmVlbkZhY3RvcnlNZXRob2RzRm9yPFQ+XSBleHRlbmRzIChcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApID0+IGluZmVyIFJcbiAgICA/IFJcbiAgICA6IG5ldmVyXG5cbi8qKlxuICogQ29udGV4dC1zcGVjaWZpYyBmYWN0b3J5IGZvciBmdWxsIHNjcmVlbiBjb21wb25lbnRzLlxuICovXG5leHBvcnQgY2xhc3MgSmNGdWxsU2NyZWVuRmFjdG9yeTxcbiAgVCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSA9IHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSxcbj4gZXh0ZW5kcyBKY0J1aWxkZXJGYWN0b3J5PFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWxsb3dlZDogVCxcbiAgICBvbkNvbXBvbmVudENyZWF0ZWQ6IChjb21wb25lbnQ6IEZ1bGxTY3JlZW5CdWlsZGVyVW5pb25Gcm9tQWxsb3dlZFR5cGVzPFQ+KSA9PiB2b2lkLFxuICApIHtcbiAgICAvLyBPdmVycmlkZSB0byB1c2UgZnVsbC1zY3JlZW4tc3BlY2lmaWMgYnVpbGRlciB1bmlvbiB0eXBlXG4gICAgc3VwZXIoYWxsb3dlZCwgb25Db21wb25lbnRDcmVhdGVkIGFzIChjb21wb25lbnQ6IEJhc2VCdWlsZGVyVW5pb25Gcm9tQWxsb3dlZFR5cGVzPFQ+KSA9PiB2b2lkKVxuICB9XG4gIC8qKlxuICAgKiBFbWJlZHMgd2ViIGNvbnRlbnQgaW4gZnVsbCBzY3JlZW4gbW9kZS5cbiAgICogQHNlZSB3ZWJWaWV3T25GdWxsXG4gICAqL1xuICB3ZWJWaWV3KFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ3dlYlZpZXdPbkZ1bGwnXT5bMF0sXG4gICk6IFJldHVyblR5cGU8SmNCdWlsZGVyRmFjdG9yeVsnd2ViVmlld09uRnVsbCddPiB7XG4gICAgcmV0dXJuIHN1cGVyLndlYlZpZXdPbkZ1bGwob3B0aW9ucylcbiAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIERFRkFVTFQgU0NSRUVOIEZBQ1RPUlkgLSBDb250ZXh0LXNwZWNpZmljIGZhY3RvcnkgZm9yIGRlZmF1bHQgc2NyZWVuIGNvbXBvbmVudHNcbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG4vKipcbiAqIE1hcHMgY29tcG9uZW50IHR5cGVzIHRvIEpjRGVmYXVsdFNjcmVlbkZhY3RvcnkgbWV0aG9kcy5cbiAqIEV4dGVuZHMgdGhlIGJhc2UgZmFjdG9yeSBtZXRob2RzIHdpdGggY29udGV4dC1zcGVjaWZpYyBhbGlhc2VzLlxuICovXG5leHBvcnQgY29uc3QgREVGQVVMVF9TQ1JFRU5fRkFDVE9SWV9NRVRIT0RTID0ge1xuICAuLi5DT01QT05FTlRfVE9fRkFDVE9SWV9NRVRIT0QsXG4gIC8vIE92ZXJyaWRlIHdpdGggYWxpYXMgbWV0aG9kcyBmb3IgY2xlYW5lciBuYW1lc1xuICBbQ09NUE9ORU5UX1RZUEUuQ0FSRF06ICdjYXJkJyxcbiAgW0NPTVBPTkVOVF9UWVBFLklNQUdFXTogJ2ltYWdlJyxcbiAgW0NPTVBPTkVOVF9UWVBFLkxJU1RfSVRFTV06ICdsaXN0SXRlbScsXG4gIFtDT01QT05FTlRfVFlQRS5TRUNUSU9OXTogJ3NlY3Rpb24nLFxuICBbQ09NUE9ORU5UX1RZUEUuU0VHTUVOVEVEX0NPTlRST0xdOiAnc2VnbWVudGVkJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlZJREVPX1BMQVlFUl06ICd2aWRlb1BsYXllcicsXG4gIFtDT01QT05FTlRfVFlQRS5XRUJfVklFV106ICd3ZWJWaWV3Jyxcbn0gYXMgY29uc3RcblxuLyoqXG4gKiBEZXJpdmVzIGZhY3RvcnkgbWV0aG9kcyBmb3IgSmNEZWZhdWx0U2NyZWVuRmFjdG9yeSB3aGljaCBpbmNsdWRlcyBhbGlhc2VzLlxuICogVXNhZ2U6IERlZmF1bHRTY3JlZW5GYWN0b3J5TWV0aG9kc0Zvcjx0eXBlb2YgQUxMT1dFRF9UWVBFUz5cbiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdFNjcmVlbkZhY3RvcnlNZXRob2RzRm9yPFQgZXh0ZW5kcyByZWFkb25seSBDb21wb25lbnRUeXBlW10+ID1cbiAgVFtudW1iZXJdIGV4dGVuZHMga2V5b2YgdHlwZW9mIERFRkFVTFRfU0NSRUVOX0ZBQ1RPUllfTUVUSE9EU1xuICAgID8gUGljazxKY0RlZmF1bHRTY3JlZW5GYWN0b3J5LCAodHlwZW9mIERFRkFVTFRfU0NSRUVOX0ZBQ1RPUllfTUVUSE9EUylbVFtudW1iZXJdXT5cbiAgICA6IG5ldmVyXG5cbi8qKlxuICogRGVyaXZlcyB1bmlvbiBvZiBidWlsZGVyIHR5cGVzIGZyb20gYWxsb3dlZCBjb21wb25lbnQgdHlwZXMgZm9yIGRlZmF1bHQgc2NyZWVuIGNvbnRleHQuXG4gKiBNYXBzIHRvIERlZmF1bHRTY3JlZW5GYWN0b3J5IGFsaWFzIG1ldGhvZHMgKGUuZy4sIGltYWdlKCksIGNhcmQoKSwgd2ViVmlldygpKS5cbiAqL1xuZXhwb3J0IHR5cGUgRGVmYXVsdFNjcmVlbkJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXT4gPVxuICBEZWZhdWx0U2NyZWVuRmFjdG9yeU1ldGhvZHNGb3I8VD5ba2V5b2YgRGVmYXVsdFNjcmVlbkZhY3RvcnlNZXRob2RzRm9yPFQ+XSBleHRlbmRzIChcbiAgICAuLi5hcmdzOiBhbnlbXVxuICApID0+IGluZmVyIFJcbiAgICA/IFJcbiAgICA6IG5ldmVyXG5cbi8qKlxuICogQ29udGV4dC1zcGVjaWZpYyBmYWN0b3J5IGZvciBkZWZhdWx0IHNjcmVlbiBjb21wb25lbnRzLlxuICogR2VuZXJpYyB0eXBlIFQgYXV0b21hdGljYWxseSBpbmZlcnMgY29tcG9uZW50IHR5cGVzIGZyb20gQUxMT1dFRF9UWVBFUy5cbiAqL1xuZXhwb3J0IGNsYXNzIEpjRGVmYXVsdFNjcmVlbkZhY3Rvcnk8XG4gIFQgZXh0ZW5kcyByZWFkb25seSBDb21wb25lbnRUeXBlW10gPSByZWFkb25seSBDb21wb25lbnRUeXBlW10sXG4+IGV4dGVuZHMgSmNCdWlsZGVyRmFjdG9yeTxUPiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIGFsbG93ZWQ6IFQsXG4gICAgb25Db21wb25lbnRDcmVhdGVkOiAoY29tcG9uZW50OiBEZWZhdWx0U2NyZWVuQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPikgPT4gdm9pZCxcbiAgKSB7XG4gICAgLy8gT3ZlcnJpZGUgdG8gdXNlIGRlZmF1bHQtc2NyZWVuLXNwZWNpZmljIGJ1aWxkZXIgdW5pb24gdHlwZVxuICAgIHN1cGVyKGFsbG93ZWQsIG9uQ29tcG9uZW50Q3JlYXRlZCBhcyAoY29tcG9uZW50OiBCYXNlQnVpbGRlclVuaW9uRnJvbUFsbG93ZWRUeXBlczxUPikgPT4gdm9pZClcbiAgfVxuICAvKipcbiAgICogR3JvdXBzIGNvbnRlbnQgaW4gZmxleGlibGUgbGF5b3V0cyB3aXRoIHN0eWxpbmcuXG4gICAqIEBzZWUgY2FyZE9uRGVmYXVsdFxuICAgKi9cbiAgY2FyZChcbiAgICBvcHRpb25zPzogUGFyYW1ldGVyczxKY0J1aWxkZXJGYWN0b3J5WydjYXJkT25EZWZhdWx0J10+WzBdLFxuICApOiBSZXR1cm5UeXBlPEpjQnVpbGRlckZhY3RvcnlbJ2NhcmRPbkRlZmF1bHQnXT4ge1xuICAgIHJldHVybiBzdXBlci5jYXJkT25EZWZhdWx0KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheXMgaW1hZ2VzIHdpdGggc2l6aW5nIGFuZCBhY3Rpb25zLlxuICAgKiBAc2VlIGltYWdlT25EZWZhdWx0XG4gICAqL1xuICBpbWFnZShcbiAgICBvcHRpb25zPzogUGFyYW1ldGVyczxKY0J1aWxkZXJGYWN0b3J5WydpbWFnZU9uRGVmYXVsdCddPlswXSxcbiAgKTogUmV0dXJuVHlwZTxKY0J1aWxkZXJGYWN0b3J5WydpbWFnZU9uRGVmYXVsdCddPiB7XG4gICAgcmV0dXJuIHN1cGVyLmltYWdlT25EZWZhdWx0KG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogRW1iZWRzIHdlYiBjb250ZW50IGlubGluZS5cbiAgICogQHNlZSB3ZWJWaWV3T25EZWZhdWx0XG4gICAqL1xuICB3ZWJWaWV3KFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ3dlYlZpZXdPbkRlZmF1bHQnXT5bMF0sXG4gICk6IFJldHVyblR5cGU8SmNCdWlsZGVyRmFjdG9yeVsnd2ViVmlld09uRGVmYXVsdCddPiB7XG4gICAgcmV0dXJuIHN1cGVyLndlYlZpZXdPbkRlZmF1bHQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBQbGF5cyB2aWRlbyBjb250ZW50LlxuICAgKiBAc2VlIHZpZGVvUGxheWVyT25KaWdcbiAgICovXG4gIHZpZGVvUGxheWVyKFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ3ZpZGVvUGxheWVyT25KaWcnXT5bMF0sXG4gICk6IFJldHVyblR5cGU8SmNCdWlsZGVyRmFjdG9yeVsndmlkZW9QbGF5ZXJPbkppZyddPiB7XG4gICAgcmV0dXJuIHN1cGVyLnZpZGVvUGxheWVyT25KaWcob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBHcm91cHMgcmVsYXRlZCBmb3JtIGZpZWxkcy5cbiAgICogQHNlZSBzZWN0aW9uT25EZWZhdWx0XG4gICAqL1xuICBzZWN0aW9uKFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ3NlY3Rpb25PbkRlZmF1bHQnXT5bMF0sXG4gICk6IFJldHVyblR5cGU8SmNCdWlsZGVyRmFjdG9yeVsnc2VjdGlvbk9uRGVmYXVsdCddPiB7XG4gICAgcmV0dXJuIHN1cGVyLnNlY3Rpb25PbkRlZmF1bHQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFuZGFsb25lIGxpc3QgaXRlbSBvdXRzaWRlIGxpc3RzLlxuICAgKiBAc2VlIGxpc3RJdGVtU3RhbmRhbG9uZVxuICAgKi9cbiAgb3ZlcnJpZGUgbGlzdEl0ZW0oXG4gICAgb3B0aW9ucz86IFBhcmFtZXRlcnM8SmNCdWlsZGVyRmFjdG9yeVsnbGlzdEl0ZW1TdGFuZGFsb25lJ10+WzBdLFxuICApOiBSZXR1cm5UeXBlPEpjQnVpbGRlckZhY3RvcnlbJ2xpc3RJdGVtU3RhbmRhbG9uZSddPiB7XG4gICAgcmV0dXJuIHN1cGVyLmxpc3RJdGVtU3RhbmRhbG9uZShvcHRpb25zKVxuICB9XG5cbiAgLyoqXG4gICAqIFRhYi1saWtlIGNvbnRyb2wgZm9yIG9wdGlvbiBzZWxlY3Rpb24uXG4gICAqIEBzZWUgc2VnbWVudGVkQ29udHJvbFxuICAgKi9cbiAgc2VnbWVudGVkKFxuICAgIG9wdGlvbnM/OiBQYXJhbWV0ZXJzPEpjQnVpbGRlckZhY3RvcnlbJ3NlZ21lbnRlZENvbnRyb2wnXT5bMF0sXG4gICk6IFJldHVyblR5cGU8SmNCdWlsZGVyRmFjdG9yeVsnc2VnbWVudGVkQ29udHJvbCddPiB7XG4gICAgcmV0dXJuIHN1cGVyLnNlZ21lbnRlZENvbnRyb2wob3B0aW9ucylcbiAgfVxufVxuXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAqIFNVTU1BUlkgRkFDVE9SWSAtIENvbnRleHQtc3BlY2lmaWMgZmFjdG9yeSBmb3Igc3VtbWFyeSBjb21wb25lbnRzXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLyoqXG4gKiBNYXBzIGNvbXBvbmVudCB0eXBlcyB0byBKY1N1bW1hcnlGYWN0b3J5IG1ldGhvZHMuXG4gKiBQcm92aWRlcyBhbGlhc2VzIGZvciBzdW1tYXJ5LXNwZWNpZmljIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBjb25zdCBTVU1NQVJZX0ZBQ1RPUllfTUVUSE9EUyA9IHtcbiAgLy8gLi4uQ09NUE9ORU5UX1RPX0ZBQ1RPUllfTUVUSE9ELFxuICAvLyBTdW1tYXJ5LXNwZWNpZmljIGFsaWFzZXNcbiAgW0NPTVBPTkVOVF9UWVBFLlNVTU1BUllfREVGQVVMVF06ICdkZWZhdWx0JyxcbiAgW0NPTVBPTkVOVF9UWVBFLlNVTU1BUllfQ0FSRF06ICdjYXJkJyxcbiAgW0NPTVBPTkVOVF9UWVBFLlNVTU1BUllfQ09VTlRFUl06ICdjb3VudGVyJyxcbn0gYXMgY29uc3RcblxuLyoqXG4gKiBEZXJpdmVzIGZhY3RvcnkgbWV0aG9kcyBmb3IgSmNTdW1tYXJ5RmFjdG9yeS5cbiAqL1xuZXhwb3J0IHR5cGUgU3VtbWFyeUZhY3RvcnlNZXRob2RzRm9yPFQgZXh0ZW5kcyByZWFkb25seSBDb21wb25lbnRUeXBlW10+ID1cbiAgVFtudW1iZXJdIGV4dGVuZHMga2V5b2YgdHlwZW9mIFNVTU1BUllfRkFDVE9SWV9NRVRIT0RTXG4gICAgPyBQaWNrPEpjU3VtbWFyeUZhY3RvcnksICh0eXBlb2YgU1VNTUFSWV9GQUNUT1JZX01FVEhPRFMpW1RbbnVtYmVyXV0+XG4gICAgOiBuZXZlclxuXG4vKipcbiAqIERlcml2ZXMgdW5pb24gb2YgYnVpbGRlciB0eXBlcyBmcm9tIGFsbG93ZWQgY29tcG9uZW50IHR5cGVzIGZvciBzdW1tYXJ5IGNvbnRleHQuXG4gKi9cbmV4cG9ydCB0eXBlIFN1bW1hcnlCdWlsZGVyVW5pb25Gcm9tQWxsb3dlZFR5cGVzPFQgZXh0ZW5kcyByZWFkb25seSBDb21wb25lbnRUeXBlW10+ID1cbiAgU3VtbWFyeUZhY3RvcnlNZXRob2RzRm9yPFQ+W2tleW9mIFN1bW1hcnlGYWN0b3J5TWV0aG9kc0ZvcjxUPl0gZXh0ZW5kcyAoLi4uYXJnczogYW55W10pID0+IGluZmVyIFJcbiAgICA/IFJcbiAgICA6IG5ldmVyXG5cbi8qKlxuICogQ29udGV4dC1zcGVjaWZpYyBmYWN0b3J5IGZvciBzdW1tYXJ5IGNvbXBvbmVudHMuXG4gKiBQcm92aWRlcyBjbGVhbmVyIEFQSSB3aXRoIGNvbnRleHQtYXBwcm9wcmlhdGUgbWV0aG9kIG5hbWVzLlxuICovXG5leHBvcnQgY2xhc3MgSmNTdW1tYXJ5RmFjdG9yeTxcbiAgVCBleHRlbmRzIHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSA9IHJlYWRvbmx5IENvbXBvbmVudFR5cGVbXSxcbj4gZXh0ZW5kcyBKY0J1aWxkZXJGYWN0b3J5PFQ+IHtcbiAgY29uc3RydWN0b3IoXG4gICAgYWxsb3dlZDogVCxcbiAgICBvbkNvbXBvbmVudENyZWF0ZWQ6IChjb21wb25lbnQ6IFN1bW1hcnlCdWlsZGVyVW5pb25Gcm9tQWxsb3dlZFR5cGVzPFQ+KSA9PiB2b2lkLFxuICApIHtcbiAgICAvLyBPdmVycmlkZSB0byB1c2Ugc3VtbWFyeS1zcGVjaWZpYyBidWlsZGVyIHVuaW9uIHR5cGVcbiAgICBzdXBlcihhbGxvd2VkLCBvbkNvbXBvbmVudENyZWF0ZWQgYXMgKGNvbXBvbmVudDogQmFzZUJ1aWxkZXJVbmlvbkZyb21BbGxvd2VkVHlwZXM8VD4pID0+IHZvaWQpXG4gIH1cblxuICAvKipcbiAgICogRGVmYXVsdCBzdW1tYXJ5IHdpdGggb3B0aW9uYWwgaWNvbi5cbiAgICogQHNlZSBzdW1tYXJ5RGVmYXVsdFxuICAgKi9cbiAgZGVmYXVsdChvcHRpb25zPzogSmNTdW1tYXJ5RGVmYXVsdElucHV0T3B0aW9ucyk6IEpjU3VtbWFyeURlZmF1bHRCdWlsZGVyIHtcbiAgICByZXR1cm4gc3VwZXIuc3VtbWFyeURlZmF1bHQob3B0aW9ucylcbiAgfVxuXG4gIC8qKlxuICAgKiBDYXJ0IHN1bW1hcnkgd2l0aCB2YWx1ZSBhbmQgZGVzY3JpcHRpb24uXG4gICAqIEBzZWUgc3VtbWFyeUNhcmRcbiAgICovXG4gIGNhcmQob3B0aW9ucz86IEpjU3VtbWFyeUNhcmRJbnB1dE9wdGlvbnMpOiBKY1N1bW1hcnlDYXJkQnVpbGRlciB7XG4gICAgcmV0dXJuIHN1cGVyLnN1bW1hcnlDYXJkKG9wdGlvbnMpXG4gIH1cblxuICAvKipcbiAgICogQ291bnRlciBzdW1tYXJ5IHdpdGggbnVtZXJpYyB2YWx1ZS5cbiAgICogQHNlZSBzdW1tYXJ5Q291bnRlclxuICAgKi9cbiAgY291bnRlcihvcHRpb25zPzogSmNTdW1tYXJ5Q291bnRlcklucHV0T3B0aW9ucyk6IEpjU3VtbWFyeUNvdW50ZXJCdWlsZGVyIHtcbiAgICByZXR1cm4gc3VwZXIuc3VtbWFyeUNvdW50ZXIob3B0aW9ucylcbiAgfVxufVxuIl19