ax-common-ui-lib 1.0.0-qa.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 (1016) hide show
  1. package/README.md +24 -0
  2. package/ax-common-ui-lib.d.ts +5 -0
  3. package/esm2020/ax-common-ui-lib.mjs +5 -0
  4. package/esm2020/lib/app-list/app-list-dto.mjs +29 -0
  5. package/esm2020/lib/app-list/app-list.component.mjs +421 -0
  6. package/esm2020/lib/app-list/my-app-list.service.mjs +142 -0
  7. package/esm2020/lib/app-list/organization-list-dto.mjs +29 -0
  8. package/esm2020/lib/ax-app-common-lib.component.mjs +26 -0
  9. package/esm2020/lib/ax-app-common-lib.module.mjs +147 -0
  10. package/esm2020/lib/ax-app-common-lib.service.mjs +14 -0
  11. package/esm2020/lib/axo-filters/axo-filters.component.mjs +422 -0
  12. package/esm2020/lib/axo-filters/axo-filters.module.mjs +59 -0
  13. package/esm2020/lib/axo-filters/axo-filters.service.mjs +85 -0
  14. package/esm2020/lib/axo-map/axo-map.component.mjs +40 -0
  15. package/esm2020/lib/axo-map/axo-map.mjs +37 -0
  16. package/esm2020/lib/axo-map/axo-map.module.mjs +41 -0
  17. package/esm2020/lib/axo-map/public-api.mjs +7 -0
  18. package/esm2020/lib/axo-search-bar/axo-search-bar.component.mjs +84 -0
  19. package/esm2020/lib/axo-search-bar/axo-search-bar.module.mjs +38 -0
  20. package/esm2020/lib/axo-search-bar/public.api.mjs +3 -0
  21. package/esm2020/lib/axo-snack-bar/axo-snack-bar.component.mjs +155 -0
  22. package/esm2020/lib/axo-snack-bar/axo-snack-bar.module.mjs +34 -0
  23. package/esm2020/lib/axo-snack-bar/axo-snack-bar.service.mjs +29 -0
  24. package/esm2020/lib/axo-snack-bar/public-api.mjs +3 -0
  25. package/esm2020/lib/axo-state-manager/axo-state-manager.module.mjs +27 -0
  26. package/esm2020/lib/axo-state-manager/axo-state-manager.service.mjs +37 -0
  27. package/esm2020/lib/axo-state-manager/public-api.mjs +3 -0
  28. package/esm2020/lib/axo-utils/axo-utils.mjs +149 -0
  29. package/esm2020/lib/axo-utils/axo-utils.module.mjs +25 -0
  30. package/esm2020/lib/axo-utils/constants.mjs +3 -0
  31. package/esm2020/lib/axo-utils/data-source-types.mjs +12 -0
  32. package/esm2020/lib/axo-utils/field-list-search-pipe.mjs +32 -0
  33. package/esm2020/lib/axo-utils/filter-search-pipe.mjs +16 -0
  34. package/esm2020/lib/axo-utils/public-api.mjs +2 -0
  35. package/esm2020/lib/axo-utils/search-pipe/choice-search.pipe.mjs +33 -0
  36. package/esm2020/lib/axo-utils/search-pipe.mjs +36 -0
  37. package/esm2020/lib/bread-crumbs/bread-crumbs.component.mjs +196 -0
  38. package/esm2020/lib/bread-crumbs/bread-crumbs.module.mjs +29 -0
  39. package/esm2020/lib/bread-crumbs/bread-crumbs.service.mjs +122 -0
  40. package/esm2020/lib/code-editor/code-editor-modes.mjs +11 -0
  41. package/esm2020/lib/code-editor/code-editor-themes.mjs +8 -0
  42. package/esm2020/lib/code-editor/code-editor.component.mjs +60 -0
  43. package/esm2020/lib/code-editor/code-editor.module.mjs +36 -0
  44. package/esm2020/lib/code-editor/icode-editor-options.mjs +2 -0
  45. package/esm2020/lib/code-editor/public-api.mjs +3 -0
  46. package/esm2020/lib/common-dto/attributes-dto.mjs +39 -0
  47. package/esm2020/lib/common-dto/dashboard-dto.mjs +12 -0
  48. package/esm2020/lib/common-dto/dataListFilter-dto.mjs +13 -0
  49. package/esm2020/lib/common-dto/elements-dto.mjs +61 -0
  50. package/esm2020/lib/common-dto/form-dto.mjs +48 -0
  51. package/esm2020/lib/common-lib-configuration.service.mjs +21 -0
  52. package/esm2020/lib/common-property-panel/properties/properties.service.mjs +30 -0
  53. package/esm2020/lib/common-utils/entity-base.mjs +12 -0
  54. package/esm2020/lib/common-utils/iFlatten.mjs +2 -0
  55. package/esm2020/lib/common-utils/report.mjs +45 -0
  56. package/esm2020/lib/common.service.mjs +78 -0
  57. package/esm2020/lib/converters/convert-to-new-service.mjs +11 -0
  58. package/esm2020/lib/converters/convert-to-old-service.mjs +168 -0
  59. package/esm2020/lib/core/auth/auth.service.mjs +146 -0
  60. package/esm2020/lib/core/core.module.mjs +37 -0
  61. package/esm2020/lib/core/icons/icons.module.mjs +255 -0
  62. package/esm2020/lib/core/transloco/transloco.http-loader.mjs +32 -0
  63. package/esm2020/lib/core/transloco/transloco.module.mjs +94 -0
  64. package/esm2020/lib/core/user/axo-user.mjs +46 -0
  65. package/esm2020/lib/core/user/user-data.service.mjs +46 -0
  66. package/esm2020/lib/core/user/user.service.mjs +87 -0
  67. package/esm2020/lib/core/user/user.types.mjs +2 -0
  68. package/esm2020/lib/dashboard-lib/dashboard-builder.service.mjs +56 -0
  69. package/esm2020/lib/dashboard-lib/dashboard-control.service.mjs +92 -0
  70. package/esm2020/lib/dashboard-lib/dashboard-element/dashboard-element.mjs +11 -0
  71. package/esm2020/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.mjs +9 -0
  72. package/esm2020/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.mjs +107 -0
  73. package/esm2020/lib/dashboard-lib/dashboard-lib.module.mjs +111 -0
  74. package/esm2020/lib/dashboard-lib/dashboard-list.service.mjs +73 -0
  75. package/esm2020/lib/dashboard-lib/dashboard.mjs +15 -0
  76. package/esm2020/lib/dashboard-lib/send-to-dashboard.service.mjs +96 -0
  77. package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.component.mjs +241 -0
  78. package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.service.mjs +32 -0
  79. package/esm2020/lib/data-view-lib/data-view/axo-card.mjs +26 -0
  80. package/esm2020/lib/data-view-lib/data-view/axo-tag.mjs +48 -0
  81. package/esm2020/lib/data-view-lib/data-view/board-column.mjs +24 -0
  82. package/esm2020/lib/data-view-lib/data-view/board-view.mjs +45 -0
  83. package/esm2020/lib/data-view-lib/data-view/cardConfig.mjs +26 -0
  84. package/esm2020/lib/data-view-lib/data-view/conditional-formatting.mjs +25 -0
  85. package/esm2020/lib/data-view-lib/data-view/coordinate.mjs +21 -0
  86. package/esm2020/lib/data-view-lib/data-view/data-view-enums.mjs +68 -0
  87. package/esm2020/lib/data-view-lib/data-view/data-view-filter.mjs +47 -0
  88. package/esm2020/lib/data-view-lib/data-view/data-view.mjs +66 -0
  89. package/esm2020/lib/data-view-lib/data-view/idata-view.mjs +2 -0
  90. package/esm2020/lib/data-view-lib/data-view/image-style.mjs +21 -0
  91. package/esm2020/lib/data-view-lib/data-view/info-window.mjs +23 -0
  92. package/esm2020/lib/data-view-lib/data-view/location.mjs +21 -0
  93. package/esm2020/lib/data-view-lib/data-view/map-view.mjs +41 -0
  94. package/esm2020/lib/data-view-lib/data-view/prefix-style.mjs +28 -0
  95. package/esm2020/lib/data-view-lib/data-view/tag-style.mjs +28 -0
  96. package/esm2020/lib/data-view-lib/data-view/tagConfig.mjs +63 -0
  97. package/esm2020/lib/data-view-lib/data-view/task-asset-form-object-dto.mjs +72 -0
  98. package/esm2020/lib/data-view-lib/data-view/task-column-value.mjs +43 -0
  99. package/esm2020/lib/data-view-lib/data-view/task-view.mjs +31 -0
  100. package/esm2020/lib/data-view-lib/data-view/task.mjs +199 -0
  101. package/esm2020/lib/data-view-lib/data-view/value-style.mjs +25 -0
  102. package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.component.mjs +661 -0
  103. package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.service.mjs +102 -0
  104. package/esm2020/lib/data-view-lib/data-view-header/data-view-header.component.mjs +536 -0
  105. package/esm2020/lib/data-view-lib/data-view-lib.module.mjs +88 -0
  106. package/esm2020/lib/data-view-lib/data-view.service.mjs +211 -0
  107. package/esm2020/lib/data-view-lib/public-api.mjs +28 -0
  108. package/esm2020/lib/directive/adjust-font-size.mjs +49 -0
  109. package/esm2020/lib/drill-through/drill-through.component.mjs +153 -0
  110. package/esm2020/lib/drill-through/drill-through.module.mjs +33 -0
  111. package/esm2020/lib/drill-through/drill-through.resolver.mjs +80 -0
  112. package/esm2020/lib/drill-through/drill-through.service.mjs +218 -0
  113. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-column.mjs +37 -0
  114. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-list.mjs +37 -0
  115. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.mjs +37 -0
  116. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range.mjs +34 -0
  117. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.mjs +36 -0
  118. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.mjs +37 -0
  119. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.mjs +34 -0
  120. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time.mjs +36 -0
  121. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-value.mjs +36 -0
  122. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-list.mjs +36 -0
  123. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.mjs +37 -0
  124. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-value.mjs +36 -0
  125. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text-list.mjs +36 -0
  126. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text.mjs +36 -0
  127. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-list.mjs +36 -0
  128. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.mjs +37 -0
  129. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range.mjs +38 -0
  130. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time.mjs +36 -0
  131. package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-toggle.mjs +36 -0
  132. package/esm2020/lib/enlighten-lib/ax-expression/ax-expression-value.mjs +32 -0
  133. package/esm2020/lib/enlighten-lib/ax-expression/ax-expression.mjs +415 -0
  134. package/esm2020/lib/enlighten-lib/ax-expression/ax-number-range.mjs +34 -0
  135. package/esm2020/lib/enlighten-lib/ax-expression/exp-sub-type.mjs +29 -0
  136. package/esm2020/lib/enlighten-lib/ax-expression/public-api.mjs +24 -0
  137. package/esm2020/lib/enlighten-lib/data-model/attribute.mjs +247 -0
  138. package/esm2020/lib/enlighten-lib/data-model/data-model.mjs +52 -0
  139. package/esm2020/lib/enlighten-lib/data-model/dependee.mjs +24 -0
  140. package/esm2020/lib/enlighten-lib/data-model/dependent.mjs +24 -0
  141. package/esm2020/lib/enlighten-lib/data-model/entity.mjs +71 -0
  142. package/esm2020/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.mjs +100 -0
  143. package/esm2020/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.mjs +100 -0
  144. package/esm2020/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.mjs +113 -0
  145. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree-enums.mjs +6 -0
  146. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.component.mjs +301 -0
  147. package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.module.mjs +67 -0
  148. package/esm2020/lib/enlighten-lib/elements/Property.mjs +3 -0
  149. package/esm2020/lib/enlighten-lib/elements/ax-element.mjs +55 -0
  150. package/esm2020/lib/enlighten-lib/elements/element-factory.mjs +38 -0
  151. package/esm2020/lib/enlighten-lib/enlighten-lib.module.mjs +308 -0
  152. package/esm2020/lib/enlighten-lib/enums/bread-crumbs-style.mjs +6 -0
  153. package/esm2020/lib/enlighten-lib/enums/operator-text-enum.mjs +11 -0
  154. package/esm2020/lib/enlighten-lib/fields/attribute-data.mjs +167 -0
  155. package/esm2020/lib/enlighten-lib/fields/entity.mjs +16 -0
  156. package/esm2020/lib/enlighten-lib/fields/types/ax-audio.mjs +6 -0
  157. package/esm2020/lib/enlighten-lib/fields/types/ax-barcode.mjs +6 -0
  158. package/esm2020/lib/enlighten-lib/fields/types/ax-childrecord.mjs +6 -0
  159. package/esm2020/lib/enlighten-lib/fields/types/ax-counter.mjs +6 -0
  160. package/esm2020/lib/enlighten-lib/fields/types/ax-date.mjs +6 -0
  161. package/esm2020/lib/enlighten-lib/fields/types/ax-decimal.mjs +6 -0
  162. package/esm2020/lib/enlighten-lib/fields/types/ax-document.mjs +6 -0
  163. package/esm2020/lib/enlighten-lib/fields/types/ax-file.mjs +6 -0
  164. package/esm2020/lib/enlighten-lib/fields/types/ax-image.mjs +6 -0
  165. package/esm2020/lib/enlighten-lib/fields/types/ax-location.mjs +6 -0
  166. package/esm2020/lib/enlighten-lib/fields/types/ax-number.mjs +6 -0
  167. package/esm2020/lib/enlighten-lib/fields/types/ax-qrcode.mjs +6 -0
  168. package/esm2020/lib/enlighten-lib/fields/types/ax-signature.mjs +6 -0
  169. package/esm2020/lib/enlighten-lib/fields/types/ax-staticmedia.mjs +6 -0
  170. package/esm2020/lib/enlighten-lib/fields/types/ax-text.mjs +6 -0
  171. package/esm2020/lib/enlighten-lib/fields/types/ax-time.mjs +6 -0
  172. package/esm2020/lib/enlighten-lib/fields/types/ax-uniqueid.mjs +6 -0
  173. package/esm2020/lib/enlighten-lib/fields/types/axo-timestamp.mjs +6 -0
  174. package/esm2020/lib/enlighten-lib/fields/types/choicelist.mjs +6 -0
  175. package/esm2020/lib/enlighten-lib/fields/types/datetime.mjs +6 -0
  176. package/esm2020/lib/enlighten-lib/fields/types/hyperlink.mjs +6 -0
  177. package/esm2020/lib/enlighten-lib/fields/types/ienlighten-type.mjs +2 -0
  178. package/esm2020/lib/enlighten-lib/fields/types/toggle.mjs +6 -0
  179. package/esm2020/lib/enlighten-lib/fields/types/video.mjs +6 -0
  180. package/esm2020/lib/enlighten-lib/filters/ax-filter.mjs +74 -0
  181. package/esm2020/lib/enlighten-lib/filters/ax-operator.mjs +88 -0
  182. package/esm2020/lib/enlighten-lib/filters/chart-filter-type.mjs +7 -0
  183. package/esm2020/lib/enlighten-lib/filters/condition-type.mjs +49 -0
  184. package/esm2020/lib/enlighten-lib/filters/dataList-searchNode.mjs +48 -0
  185. package/esm2020/lib/enlighten-lib/filters/dataListFilterExpression.mjs +32 -0
  186. package/esm2020/lib/enlighten-lib/filters/dataListFilterOperator.mjs +43 -0
  187. package/esm2020/lib/enlighten-lib/filters/dataListSeachQueryTree.mjs +25 -0
  188. package/esm2020/lib/enlighten-lib/filters/filter-category.mjs +78 -0
  189. package/esm2020/lib/enlighten-lib/filters/general-filter-type.mjs +13 -0
  190. package/esm2020/lib/enlighten-lib/filters/gridster-properties.mjs +31 -0
  191. package/esm2020/lib/enlighten-lib/filters/iax-filter.mjs +2 -0
  192. package/esm2020/lib/enlighten-lib/filters/search-node.mjs +50 -0
  193. package/esm2020/lib/enlighten-lib/filters/static-widget.mjs +24 -0
  194. package/esm2020/lib/enlighten-lib/property/element-property.mjs +11 -0
  195. package/esm2020/lib/enlighten-lib/property/filter-category-property.mjs +9 -0
  196. package/esm2020/lib/enlighten-lib/property/filter-property.mjs +9 -0
  197. package/esm2020/lib/enlighten-lib/report/chart-filter/chart-filter.component.mjs +393 -0
  198. package/esm2020/lib/enlighten-lib/report/element.service.mjs +115 -0
  199. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.mjs +1002 -0
  200. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.mjs +144 -0
  201. package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.mjs +15 -0
  202. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.mjs +576 -0
  203. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.mjs +66 -0
  204. package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.mjs +15 -0
  205. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/border.mjs +18 -0
  206. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-factory.mjs +80 -0
  207. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-property.mjs +4 -0
  208. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-type.mjs +15 -0
  209. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart.mjs +123 -0
  210. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.mjs +32 -0
  211. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.mjs +8 -0
  212. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/dimension.mjs +8 -0
  213. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/font.mjs +32 -0
  214. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/fontStyle.mjs +28 -0
  215. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/label.mjs +6 -0
  216. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/legend.mjs +28 -0
  217. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/matrix.mjs +26 -0
  218. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/shadow.mjs +7 -0
  219. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/style.mjs +14 -0
  220. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/text-style.mjs +34 -0
  221. package/esm2020/lib/enlighten-lib/report/graphical-report/chart/title.mjs +12 -0
  222. package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.component.mjs +357 -0
  223. package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.directive.mjs +16 -0
  224. package/esm2020/lib/enlighten-lib/report/graphical-report/ichart-component.mjs +2 -0
  225. package/esm2020/lib/enlighten-lib/report/graphical-report/igraphical-report.component.mjs +2 -0
  226. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.mjs +856 -0
  227. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.mjs +97 -0
  228. package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.mjs +15 -0
  229. package/esm2020/lib/enlighten-lib/report/graphical-report/page/page.mjs +48 -0
  230. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.mjs +934 -0
  231. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.mjs +103 -0
  232. package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.mjs +15 -0
  233. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text-chart.mjs +56 -0
  234. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.component.mjs +302 -0
  235. package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.service.mjs +15 -0
  236. package/esm2020/lib/enlighten-lib/report/iproperty.component.mjs +8 -0
  237. package/esm2020/lib/enlighten-lib/report/ireport.mjs +14 -0
  238. package/esm2020/lib/enlighten-lib/report/report-builder-master.service.mjs +83 -0
  239. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.component.mjs +313 -0
  240. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.module.mjs +71 -0
  241. package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.service.mjs +246 -0
  242. package/esm2020/lib/enlighten-lib/report/tabular-report/aggregate.mjs +10 -0
  243. package/esm2020/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.mjs +26 -0
  244. package/esm2020/lib/enlighten-lib/report/tabular-report/column-style.mjs +7 -0
  245. package/esm2020/lib/enlighten-lib/report/tabular-report/itabular-report.component.mjs +2 -0
  246. package/esm2020/lib/enlighten-lib/report/tabular-report/orderby-type.mjs +7 -0
  247. package/esm2020/lib/enlighten-lib/report/tabular-report/row-style.mjs +7 -0
  248. package/esm2020/lib/enlighten-lib/report/tabular-report/table-style.mjs +47 -0
  249. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.mjs +4464 -0
  250. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.mjs +1583 -0
  251. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.mjs +70 -0
  252. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.mjs +1837 -0
  253. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +756 -0
  254. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.component.mjs +156 -0
  255. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.mjs +245 -0
  256. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.service.mjs +960 -0
  257. package/esm2020/lib/enlighten-lib/report/tabular-report/tabular.mjs +196 -0
  258. package/esm2020/lib/enlighten-lib/report/tabular-report/value-formatting.mjs +9 -0
  259. package/esm2020/lib/enlighten-lib/report-control.service.mjs +41 -0
  260. package/esm2020/lib/enlighten-lib/utils/utils.mjs +26 -0
  261. package/esm2020/lib/field-list-lib/fields-list.service.mjs +299 -0
  262. package/esm2020/lib/filters/calender-filter/calender-filter.component.mjs +351 -0
  263. package/esm2020/lib/filters/category-filter/category-filter.component.mjs +207 -0
  264. package/esm2020/lib/filters/category-filter/category-filter.service.mjs +31 -0
  265. package/esm2020/lib/filters/category-filter/category.service.mjs +45 -0
  266. package/esm2020/lib/filters/choice-list-filter/choice-list-filter.component.mjs +178 -0
  267. package/esm2020/lib/filters/choice-list-filter/choice-list-filter.service.mjs +53 -0
  268. package/esm2020/lib/filters/common-filter/common-filter.component.mjs +310 -0
  269. package/esm2020/lib/filters/common-filter/common-filter.service.mjs +106 -0
  270. package/esm2020/lib/filters/custom-scroll-directives.mjs +45 -0
  271. package/esm2020/lib/filters/date-time-filter/date-time-filter.component.mjs +345 -0
  272. package/esm2020/lib/filters/filter-footer/filter-footer.component.mjs +62 -0
  273. package/esm2020/lib/filters/filters.component.mjs +688 -0
  274. package/esm2020/lib/filters/filters.module.mjs +196 -0
  275. package/esm2020/lib/filters/filters.service.mjs +147 -0
  276. package/esm2020/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.mjs +202 -0
  277. package/esm2020/lib/filters/metaColumnTypes.mjs +36 -0
  278. package/esm2020/lib/filters/multi-select-filter/multi-select-filter.component.mjs +211 -0
  279. package/esm2020/lib/filters/multi-select-filter/multi-select-filter.service.mjs +214 -0
  280. package/esm2020/lib/filters/number-filter/number-filter.component.mjs +321 -0
  281. package/esm2020/lib/filters/public-api.mjs +15 -0
  282. package/esm2020/lib/filters/reference-list-filter/reference-list-filter.component.mjs +180 -0
  283. package/esm2020/lib/filters/reference-list-filter/reference-list-filter.service.mjs +151 -0
  284. package/esm2020/lib/filters/single-select-filter/single-select-filter.component.mjs +177 -0
  285. package/esm2020/lib/filters/time-filter/time-filter.component.mjs +301 -0
  286. package/esm2020/lib/filters/user-filter/user-filter.component.mjs +178 -0
  287. package/esm2020/lib/filters/user-filter/user-filter.service.mjs +62 -0
  288. package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.mjs +346 -0
  289. package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.mjs +105 -0
  290. package/esm2020/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.mjs +41 -0
  291. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.mjs +10 -0
  292. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.mjs +21 -0
  293. package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.mjs +16 -0
  294. package/esm2020/lib/form-object/form-object-list/form-object-list.component.mjs +823 -0
  295. package/esm2020/lib/form-object/form-object-list/form-object-list.mjs +211 -0
  296. package/esm2020/lib/form-object/form-object-list/form-object-list.module.mjs +224 -0
  297. package/esm2020/lib/form-object/form-object-list/form-object-list.service.mjs +171 -0
  298. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.mjs +94 -0
  299. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.mjs +16 -0
  300. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.mjs +60 -0
  301. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.mjs +33 -0
  302. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.mjs +40 -0
  303. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.mjs +31 -0
  304. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.mjs +98 -0
  305. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.mjs +86 -0
  306. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.mjs +180 -0
  307. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.mjs +45 -0
  308. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.mjs +54 -0
  309. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.mjs +163 -0
  310. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.mjs +45 -0
  311. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.mjs +61 -0
  312. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.mjs +64 -0
  313. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.mjs +21 -0
  314. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.mjs +119 -0
  315. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.mjs +37 -0
  316. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.mjs +21 -0
  317. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.mjs +98 -0
  318. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.mjs +60 -0
  319. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.mjs +62 -0
  320. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.mjs +24 -0
  321. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.mjs +19 -0
  322. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.mjs +49 -0
  323. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.mjs +50 -0
  324. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.mjs +25 -0
  325. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.mjs +33 -0
  326. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.mjs +60 -0
  327. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.mjs +65 -0
  328. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.mjs +28 -0
  329. package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.mjs +89 -0
  330. package/esm2020/lib/form-object/form-object-view/data-detail-view-dto.mjs +55 -0
  331. package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.mjs +85 -0
  332. package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.mjs +16 -0
  333. package/esm2020/lib/form-object/form-object-view/form-object-view.component.mjs +209 -0
  334. package/esm2020/lib/form-object/form-object-view/form-object-view.module.mjs +273 -0
  335. package/esm2020/lib/form-object/form-object-view/form-object-view.service.mjs +268 -0
  336. package/esm2020/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.mjs +83 -0
  337. package/esm2020/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.mjs +92 -0
  338. package/esm2020/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.mjs +68 -0
  339. package/esm2020/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.mjs +155 -0
  340. package/esm2020/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.mjs +158 -0
  341. package/esm2020/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.mjs +248 -0
  342. package/esm2020/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.mjs +93 -0
  343. package/esm2020/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.mjs +179 -0
  344. package/esm2020/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.mjs +210 -0
  345. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.mjs +93 -0
  346. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.mjs +58 -0
  347. package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.mjs +16 -0
  348. package/esm2020/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.mjs +76 -0
  349. package/esm2020/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.mjs +89 -0
  350. package/esm2020/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.mjs +263 -0
  351. package/esm2020/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.mjs +17 -0
  352. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.mjs +335 -0
  353. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.mjs +270 -0
  354. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.mjs +498 -0
  355. package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.mjs +203 -0
  356. package/esm2020/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.mjs +70 -0
  357. package/esm2020/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.mjs +21 -0
  358. package/esm2020/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.mjs +146 -0
  359. package/esm2020/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.mjs +92 -0
  360. package/esm2020/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.mjs +84 -0
  361. package/esm2020/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.mjs +82 -0
  362. package/esm2020/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.mjs +93 -0
  363. package/esm2020/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.mjs +144 -0
  364. package/esm2020/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.mjs +95 -0
  365. package/esm2020/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.mjs +83 -0
  366. package/esm2020/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.mjs +82 -0
  367. package/esm2020/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.mjs +79 -0
  368. package/esm2020/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.mjs +113 -0
  369. package/esm2020/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.mjs +89 -0
  370. package/esm2020/lib/form-object/form-object-view/meta-section/meta-section.component.mjs +157 -0
  371. package/esm2020/lib/form-object/form-object-view/section/section.component.mjs +75 -0
  372. package/esm2020/lib/form-object/form-object-view/section-field/section-field.component.mjs +30 -0
  373. package/esm2020/lib/form-object/form-object-view/section-view/section-view.component.mjs +110 -0
  374. package/esm2020/lib/form-object/public-api.mjs +3 -0
  375. package/esm2020/lib/form-permission.service.mjs +106 -0
  376. package/esm2020/lib/forms/ax-form.mjs +212 -0
  377. package/esm2020/lib/forms/iform.mjs +2 -0
  378. package/esm2020/lib/forms/page/common/axo-response-status.mjs +6 -0
  379. package/esm2020/lib/forms/page/common/constants.mjs +399 -0
  380. package/esm2020/lib/forms/page/common/detail-view-enums.mjs +8 -0
  381. package/esm2020/lib/forms/page/common/flatten-status-enum.mjs +10 -0
  382. package/esm2020/lib/forms/page/common/form.constant.mjs +87 -0
  383. package/esm2020/lib/forms/page/common/property-panel-field.mjs +5 -0
  384. package/esm2020/lib/forms/page/common/widget-enums.mjs +269 -0
  385. package/esm2020/lib/forms/page/common/widget-value-handler.mjs +321 -0
  386. package/esm2020/lib/forms/page/data-detail-view/ax-section.mjs +51 -0
  387. package/esm2020/lib/forms/page/data-detail-view/collection-view.mjs +30 -0
  388. package/esm2020/lib/forms/page/data-detail-view/data-details.mjs +60 -0
  389. package/esm2020/lib/forms/page/data-detail-view/section-field.mjs +32 -0
  390. package/esm2020/lib/forms/page/data-detail-view/section.mjs +33 -0
  391. package/esm2020/lib/forms/page/data-list/data-list-column.mjs +45 -0
  392. package/esm2020/lib/forms/page/data-list/data-list.mjs +64 -0
  393. package/esm2020/lib/forms/page/form-object.mjs +17 -0
  394. package/esm2020/lib/forms/page/form-page.mjs +28 -0
  395. package/esm2020/lib/forms/page/value-converters/displayMode-to-bool.mjs +16 -0
  396. package/esm2020/lib/forms/page/value-converters/form-type-converter.mjs +23 -0
  397. package/esm2020/lib/forms/page/value-converters/geo-fence-value-converter.mjs +24 -0
  398. package/esm2020/lib/forms/page/value-converters/image-annotation-value-converter.mjs +20 -0
  399. package/esm2020/lib/forms/page/value-converters/language-source-value-converter.mjs +24 -0
  400. package/esm2020/lib/forms/page/value-converters/list-view-title-converter.mjs +20 -0
  401. package/esm2020/lib/forms/page/value-converters/parse-float-converter.mjs +15 -0
  402. package/esm2020/lib/forms/page/value-converters/parse-int-converter.mjs +20 -0
  403. package/esm2020/lib/forms/page/value-converters/parse-string-converter.mjs +20 -0
  404. package/esm2020/lib/forms/page/value-converters/publicUrls-string-to-array.mjs +20 -0
  405. package/esm2020/lib/forms/page/value-converters/record-limit-type-converter.mjs +23 -0
  406. package/esm2020/lib/forms/page/value-converters/restriction-mode-converter.mjs +23 -0
  407. package/esm2020/lib/forms/page/value-converters/string-to-bool-converter.mjs +16 -0
  408. package/esm2020/lib/forms/page/value-converters/string-to-bool-value-converter.mjs +16 -0
  409. package/esm2020/lib/forms/page/value-converters/string-to-date-time-converter.mjs +19 -0
  410. package/esm2020/lib/forms/page/value-converters/string-to-number -converter.mjs +20 -0
  411. package/esm2020/lib/forms/page/value-converters/textBox-mask-converter.mjs +16 -0
  412. package/esm2020/lib/forms/page/value-converters/validate-converter.mjs +20 -0
  413. package/esm2020/lib/forms/page/value-converters/value-without-mask-converter.mjs +20 -0
  414. package/esm2020/lib/forms/page/value-converters/widget-concrete-class-converter.mjs +22 -0
  415. package/esm2020/lib/forms/page/value-converters/widget-deserializer.mjs +149 -0
  416. package/esm2020/lib/forms/page/widgets/apply-geofences.mjs +65 -0
  417. package/esm2020/lib/forms/page/widgets/auto-number.mjs +87 -0
  418. package/esm2020/lib/forms/page/widgets/ax-audio.mjs +154 -0
  419. package/esm2020/lib/forms/page/widgets/ax-document.mjs +149 -0
  420. package/esm2020/lib/forms/page/widgets/ax-image.mjs +183 -0
  421. package/esm2020/lib/forms/page/widgets/bar-code.mjs +212 -0
  422. package/esm2020/lib/forms/page/widgets/child-record.mjs +193 -0
  423. package/esm2020/lib/forms/page/widgets/choicelist.mjs +375 -0
  424. package/esm2020/lib/forms/page/widgets/counter.mjs +69 -0
  425. package/esm2020/lib/forms/page/widgets/datetime.mjs +247 -0
  426. package/esm2020/lib/forms/page/widgets/formula.mjs +106 -0
  427. package/esm2020/lib/forms/page/widgets/geofence.mjs +127 -0
  428. package/esm2020/lib/forms/page/widgets/gps.mjs +192 -0
  429. package/esm2020/lib/forms/page/widgets/group-header.mjs +200 -0
  430. package/esm2020/lib/forms/page/widgets/languages.mjs +129 -0
  431. package/esm2020/lib/forms/page/widgets/link.mjs +107 -0
  432. package/esm2020/lib/forms/page/widgets/payment.mjs +104 -0
  433. package/esm2020/lib/forms/page/widgets/qr-code.mjs +129 -0
  434. package/esm2020/lib/forms/page/widgets/script-condition.mjs +115 -0
  435. package/esm2020/lib/forms/page/widgets/signature.mjs +81 -0
  436. package/esm2020/lib/forms/page/widgets/static-media.mjs +130 -0
  437. package/esm2020/lib/forms/page/widgets/stopwatch.mjs +117 -0
  438. package/esm2020/lib/forms/page/widgets/sub-form.mjs +114 -0
  439. package/esm2020/lib/forms/page/widgets/textbox.mjs +338 -0
  440. package/esm2020/lib/forms/page/widgets/timestamp.mjs +155 -0
  441. package/esm2020/lib/forms/page/widgets/toggle.mjs +115 -0
  442. package/esm2020/lib/forms/page/widgets/unique-id.mjs +75 -0
  443. package/esm2020/lib/forms/page/widgets/verification.mjs +207 -0
  444. package/esm2020/lib/forms/page/widgets/video.mjs +151 -0
  445. package/esm2020/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.mjs +74 -0
  446. package/esm2020/lib/forms/page/widgets/widget-value/audio-video-widget-value.mjs +36 -0
  447. package/esm2020/lib/forms/page/widgets/widget-value/child-record-value.mjs +114 -0
  448. package/esm2020/lib/forms/page/widgets/widget-value/choice-list-options.mjs +84 -0
  449. package/esm2020/lib/forms/page/widgets/widget-value/choices-ml.mjs +107 -0
  450. package/esm2020/lib/forms/page/widgets/widget-value/dateRangeValue.mjs +38 -0
  451. package/esm2020/lib/forms/page/widgets/widget-value/deviceProfileParams.mjs +9 -0
  452. package/esm2020/lib/forms/page/widgets/widget-value/deviceProfilesTemp.mjs +72 -0
  453. package/esm2020/lib/forms/page/widgets/widget-value/document-widget-value.mjs +56 -0
  454. package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-location-value.mjs +54 -0
  455. package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-widget-value.mjs +50 -0
  456. package/esm2020/lib/forms/page/widgets/widget-value/gps-widget-value.mjs +58 -0
  457. package/esm2020/lib/forms/page/widgets/widget-value/image-widget-value.mjs +99 -0
  458. package/esm2020/lib/forms/page/widgets/widget-value/language-widget-value.mjs +43 -0
  459. package/esm2020/lib/forms/page/widgets/widget-value/location-object-value.mjs +44 -0
  460. package/esm2020/lib/forms/page/widgets/widget-value/multiple-languages.mjs +106 -0
  461. package/esm2020/lib/forms/page/widgets/widget-value/reference-list-object-value.mjs +72 -0
  462. package/esm2020/lib/forms/page/widgets/widget-value/verification-widget-value.mjs +126 -0
  463. package/esm2020/lib/forms/page/widgets/widget.mjs +429 -0
  464. package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +708 -0
  465. package/esm2020/lib/ghost-loader/ghost-loader.module.mjs +27 -0
  466. package/esm2020/lib/ghost-loader/public-api.mjs +3 -0
  467. package/esm2020/lib/map-dialog/map-dialog.component.mjs +46 -0
  468. package/esm2020/lib/map-dialog/map-dialog.module.mjs +39 -0
  469. package/esm2020/lib/map-dialog/public-api.mjs +6 -0
  470. package/esm2020/lib/reports-container/public-api.mjs +8 -0
  471. package/esm2020/lib/reports-container/report-group/report-group.component.mjs +77 -0
  472. package/esm2020/lib/reports-container/reports-container-models/report-group.mjs +42 -0
  473. package/esm2020/lib/reports-container/reports-container-models/report-property.mjs +30 -0
  474. package/esm2020/lib/reports-container/reports-container-models/reports-container-enums.mjs +16 -0
  475. package/esm2020/lib/reports-container/reports-container-models/reports-container.mjs +29 -0
  476. package/esm2020/lib/reports-container/reports-container.component.mjs +60 -0
  477. package/esm2020/lib/reports-container/reports-container.module.mjs +52 -0
  478. package/esm2020/lib/reports-container/reports-container.service.mjs +29 -0
  479. package/esm2020/lib/scrollbar/index.mjs +3 -0
  480. package/esm2020/lib/scrollbar/public-api.mjs +3 -0
  481. package/esm2020/lib/scrollbar/scrollbar.directive.mjs +351 -0
  482. package/esm2020/lib/scrollbar/scrollbar.module.mjs +21 -0
  483. package/esm2020/lib/scrollbar/scrollbar.types.mjs +15 -0
  484. package/esm2020/lib/sculptor-lib/widgets/audio/audio.component.mjs +115 -0
  485. package/esm2020/lib/sculptor-lib/widgets/barcode/barcode.component.mjs +118 -0
  486. package/esm2020/lib/sculptor-lib/widgets/child-record/child-record.component.mjs +115 -0
  487. package/esm2020/lib/sculptor-lib/widgets/choice-list/choice-list.component.mjs +105 -0
  488. package/esm2020/lib/sculptor-lib/widgets/date-time/date-time.component.mjs +136 -0
  489. package/esm2020/lib/sculptor-lib/widgets/document/document.component.mjs +118 -0
  490. package/esm2020/lib/sculptor-lib/widgets/geofence/geofence.component.mjs +115 -0
  491. package/esm2020/lib/sculptor-lib/widgets/gps/gps.component.mjs +115 -0
  492. package/esm2020/lib/sculptor-lib/widgets/group-header/group-header.component.mjs +109 -0
  493. package/esm2020/lib/sculptor-lib/widgets/image/image.component.mjs +131 -0
  494. package/esm2020/lib/sculptor-lib/widgets/language/language.component.mjs +105 -0
  495. package/esm2020/lib/sculptor-lib/widgets/link/link.component.mjs +115 -0
  496. package/esm2020/lib/sculptor-lib/widgets/qr-code/qr-code.component.mjs +118 -0
  497. package/esm2020/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.mjs +105 -0
  498. package/esm2020/lib/sculptor-lib/widgets/subform/subform.component.mjs +109 -0
  499. package/esm2020/lib/sculptor-lib/widgets/textbox/textbox.component.mjs +177 -0
  500. package/esm2020/lib/sculptor-lib/widgets/timestamp/timestamp.component.mjs +115 -0
  501. package/esm2020/lib/sculptor-lib/widgets/toggle/toggle.component.mjs +112 -0
  502. package/esm2020/lib/sculptor-lib/widgets/video/video.component.mjs +118 -0
  503. package/esm2020/lib/sculptor-lib/widgets/widgets.service.mjs +58 -0
  504. package/esm2020/lib/shared/comfirmation-modal/confirmation-modal.component.mjs +63 -0
  505. package/esm2020/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.mjs +83 -0
  506. package/esm2020/lib/shared/shared.module.mjs +51 -0
  507. package/esm2020/public-api.mjs +138 -0
  508. package/fesm2015/ax-common-ui-lib.mjs +56598 -0
  509. package/fesm2015/ax-common-ui-lib.mjs.map +1 -0
  510. package/fesm2020/ax-common-ui-lib.mjs +52373 -0
  511. package/fesm2020/ax-common-ui-lib.mjs.map +1 -0
  512. package/lib/app-list/app-list-dto.d.ts +15 -0
  513. package/lib/app-list/app-list.component.d.ts +62 -0
  514. package/lib/app-list/my-app-list.service.d.ts +69 -0
  515. package/lib/app-list/organization-list-dto.d.ts +15 -0
  516. package/lib/ax-app-common-lib.component.d.ts +8 -0
  517. package/lib/ax-app-common-lib.module.d.ts +24 -0
  518. package/lib/ax-app-common-lib.service.d.ts +6 -0
  519. package/lib/axo-filters/axo-filters.component.d.ts +86 -0
  520. package/lib/axo-filters/axo-filters.module.d.ts +16 -0
  521. package/lib/axo-filters/axo-filters.service.d.ts +36 -0
  522. package/lib/axo-map/axo-map.component.d.ts +9 -0
  523. package/lib/axo-map/axo-map.d.ts +14 -0
  524. package/lib/axo-map/axo-map.module.d.ts +10 -0
  525. package/lib/axo-map/public-api.d.ts +6 -0
  526. package/lib/axo-search-bar/axo-search-bar.component.d.ts +21 -0
  527. package/lib/axo-search-bar/axo-search-bar.module.d.ts +10 -0
  528. package/lib/axo-search-bar/public.api.d.ts +2 -0
  529. package/lib/axo-snack-bar/axo-snack-bar.component.d.ts +20 -0
  530. package/lib/axo-snack-bar/axo-snack-bar.module.d.ts +9 -0
  531. package/lib/axo-snack-bar/axo-snack-bar.service.d.ts +16 -0
  532. package/lib/axo-snack-bar/public-api.d.ts +2 -0
  533. package/lib/axo-state-manager/axo-state-manager.module.d.ts +7 -0
  534. package/lib/axo-state-manager/axo-state-manager.service.d.ts +15 -0
  535. package/lib/axo-state-manager/public-api.d.ts +2 -0
  536. package/lib/axo-utils/axo-utils.d.ts +72 -0
  537. package/lib/axo-utils/axo-utils.module.d.ts +10 -0
  538. package/lib/axo-utils/constants.d.ts +2 -0
  539. package/lib/axo-utils/data-source-types.d.ts +10 -0
  540. package/lib/axo-utils/field-list-search-pipe.d.ts +7 -0
  541. package/lib/axo-utils/filter-search-pipe.d.ts +7 -0
  542. package/lib/axo-utils/public-api.d.ts +1 -0
  543. package/lib/axo-utils/search-pipe/choice-search.pipe.d.ts +7 -0
  544. package/lib/axo-utils/search-pipe.d.ts +7 -0
  545. package/lib/bread-crumbs/bread-crumbs.component.d.ts +48 -0
  546. package/lib/bread-crumbs/bread-crumbs.module.d.ts +9 -0
  547. package/lib/bread-crumbs/bread-crumbs.service.d.ts +76 -0
  548. package/lib/code-editor/code-editor-modes.d.ts +9 -0
  549. package/lib/code-editor/code-editor-themes.d.ts +6 -0
  550. package/lib/code-editor/code-editor.component.d.ts +20 -0
  551. package/lib/code-editor/code-editor.module.d.ts +10 -0
  552. package/lib/code-editor/icode-editor-options.d.ts +51 -0
  553. package/lib/code-editor/public-api.d.ts +2 -0
  554. package/lib/common-dto/attributes-dto.d.ts +24 -0
  555. package/lib/common-dto/dashboard-dto.d.ts +10 -0
  556. package/lib/common-dto/dataListFilter-dto.d.ts +10 -0
  557. package/lib/common-dto/elements-dto.d.ts +51 -0
  558. package/lib/common-dto/form-dto.d.ts +17 -0
  559. package/lib/common-lib-configuration.service.d.ts +13 -0
  560. package/lib/common-property-panel/properties/properties.service.d.ts +18 -0
  561. package/lib/common-utils/entity-base.d.ts +10 -0
  562. package/lib/common-utils/iFlatten.d.ts +13 -0
  563. package/lib/common-utils/report.d.ts +26 -0
  564. package/lib/common.service.d.ts +50 -0
  565. package/lib/converters/convert-to-new-service.d.ts +6 -0
  566. package/lib/converters/convert-to-old-service.d.ts +26 -0
  567. package/lib/core/auth/auth.service.d.ts +75 -0
  568. package/lib/core/core.module.d.ts +12 -0
  569. package/lib/core/icons/icons.module.d.ts +14 -0
  570. package/lib/core/transloco/transloco.http-loader.d.ts +19 -0
  571. package/lib/core/transloco/transloco.module.d.ts +7 -0
  572. package/lib/core/user/axo-user.d.ts +9 -0
  573. package/lib/core/user/user-data.service.d.ts +25 -0
  574. package/lib/core/user/user.service.d.ts +45 -0
  575. package/lib/core/user/user.types.d.ts +9 -0
  576. package/lib/dashboard-lib/dashboard-builder.service.d.ts +27 -0
  577. package/lib/dashboard-lib/dashboard-control.service.d.ts +31 -0
  578. package/lib/dashboard-lib/dashboard-element/dashboard-element.d.ts +9 -0
  579. package/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.d.ts +7 -0
  580. package/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.d.ts +37 -0
  581. package/lib/dashboard-lib/dashboard-lib.module.d.ts +26 -0
  582. package/lib/dashboard-lib/dashboard-list.service.d.ts +24 -0
  583. package/lib/dashboard-lib/dashboard.d.ts +14 -0
  584. package/lib/dashboard-lib/send-to-dashboard.service.d.ts +39 -0
  585. package/lib/dashboard-lib/show-dashboards/show-dashboards.component.d.ts +53 -0
  586. package/lib/dashboard-lib/show-dashboards/show-dashboards.service.d.ts +11 -0
  587. package/lib/data-view-lib/data-view/axo-card.d.ts +11 -0
  588. package/lib/data-view-lib/data-view/axo-tag.d.ts +26 -0
  589. package/lib/data-view-lib/data-view/board-column.d.ts +12 -0
  590. package/lib/data-view-lib/data-view/board-view.d.ts +23 -0
  591. package/lib/data-view-lib/data-view/cardConfig.d.ts +11 -0
  592. package/lib/data-view-lib/data-view/conditional-formatting.d.ts +11 -0
  593. package/lib/data-view-lib/data-view/coordinate.d.ts +8 -0
  594. package/lib/data-view-lib/data-view/data-view-enums.d.ts +58 -0
  595. package/lib/data-view-lib/data-view/data-view-filter.d.ts +25 -0
  596. package/lib/data-view-lib/data-view/data-view.d.ts +33 -0
  597. package/lib/data-view-lib/data-view/idata-view.d.ts +7 -0
  598. package/lib/data-view-lib/data-view/image-style.d.ts +8 -0
  599. package/lib/data-view-lib/data-view/info-window.d.ts +10 -0
  600. package/lib/data-view-lib/data-view/location.d.ts +8 -0
  601. package/lib/data-view-lib/data-view/map-view.d.ts +21 -0
  602. package/lib/data-view-lib/data-view/prefix-style.d.ts +12 -0
  603. package/lib/data-view-lib/data-view/tag-style.d.ts +12 -0
  604. package/lib/data-view-lib/data-view/tagConfig.d.ts +34 -0
  605. package/lib/data-view-lib/data-view/task-asset-form-object-dto.d.ts +19 -0
  606. package/lib/data-view-lib/data-view/task-column-value.d.ts +48 -0
  607. package/lib/data-view-lib/data-view/task-view.d.ts +15 -0
  608. package/lib/data-view-lib/data-view/task.d.ts +57 -0
  609. package/lib/data-view-lib/data-view/value-style.d.ts +10 -0
  610. package/lib/data-view-lib/data-view-filters/data-view-filters.component.d.ts +142 -0
  611. package/lib/data-view-lib/data-view-filters/data-view-filters.service.d.ts +28 -0
  612. package/lib/data-view-lib/data-view-header/data-view-header.component.d.ts +85 -0
  613. package/lib/data-view-lib/data-view-lib.module.d.ts +19 -0
  614. package/lib/data-view-lib/data-view.service.d.ts +94 -0
  615. package/lib/data-view-lib/public-api.d.ts +27 -0
  616. package/lib/directive/adjust-font-size.d.ts +13 -0
  617. package/lib/drill-through/drill-through.component.d.ts +53 -0
  618. package/lib/drill-through/drill-through.module.d.ts +10 -0
  619. package/lib/drill-through/drill-through.resolver.d.ts +30 -0
  620. package/lib/drill-through/drill-through.service.d.ts +100 -0
  621. package/lib/enlighten-lib/ax-expression/ax-exp-column.d.ts +17 -0
  622. package/lib/enlighten-lib/ax-expression/ax-exp-date-list.d.ts +16 -0
  623. package/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.d.ts +17 -0
  624. package/lib/enlighten-lib/ax-expression/ax-exp-date-range.d.ts +16 -0
  625. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.d.ts +16 -0
  626. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.d.ts +17 -0
  627. package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.d.ts +16 -0
  628. package/lib/enlighten-lib/ax-expression/ax-exp-date-time.d.ts +16 -0
  629. package/lib/enlighten-lib/ax-expression/ax-exp-date-value.d.ts +16 -0
  630. package/lib/enlighten-lib/ax-expression/ax-exp-number-list.d.ts +16 -0
  631. package/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.d.ts +17 -0
  632. package/lib/enlighten-lib/ax-expression/ax-exp-number-value.d.ts +16 -0
  633. package/lib/enlighten-lib/ax-expression/ax-exp-text-list.d.ts +16 -0
  634. package/lib/enlighten-lib/ax-expression/ax-exp-text.d.ts +16 -0
  635. package/lib/enlighten-lib/ax-expression/ax-exp-time-list.d.ts +16 -0
  636. package/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.d.ts +17 -0
  637. package/lib/enlighten-lib/ax-expression/ax-exp-time-range.d.ts +17 -0
  638. package/lib/enlighten-lib/ax-expression/ax-exp-time.d.ts +16 -0
  639. package/lib/enlighten-lib/ax-expression/ax-exp-toggle.d.ts +16 -0
  640. package/lib/enlighten-lib/ax-expression/ax-expression-value.d.ts +19 -0
  641. package/lib/enlighten-lib/ax-expression/ax-expression.d.ts +66 -0
  642. package/lib/enlighten-lib/ax-expression/ax-number-range.d.ts +16 -0
  643. package/lib/enlighten-lib/ax-expression/exp-sub-type.d.ts +26 -0
  644. package/lib/enlighten-lib/ax-expression/public-api.d.ts +23 -0
  645. package/lib/enlighten-lib/data-model/attribute.d.ts +60 -0
  646. package/lib/enlighten-lib/data-model/data-model.d.ts +32 -0
  647. package/lib/enlighten-lib/data-model/dependee.d.ts +11 -0
  648. package/lib/enlighten-lib/data-model/dependent.d.ts +11 -0
  649. package/lib/enlighten-lib/data-model/entity.d.ts +31 -0
  650. package/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.d.ts +23 -0
  651. package/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.d.ts +24 -0
  652. package/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.d.ts +25 -0
  653. package/lib/enlighten-lib/data-model-tree/data-model-tree-enums.d.ts +4 -0
  654. package/lib/enlighten-lib/data-model-tree/data-model-tree.component.d.ts +67 -0
  655. package/lib/enlighten-lib/data-model-tree/data-model-tree.module.d.ts +18 -0
  656. package/lib/enlighten-lib/elements/Property.d.ts +3 -0
  657. package/lib/enlighten-lib/elements/ax-element.d.ts +31 -0
  658. package/lib/enlighten-lib/elements/element-factory.d.ts +13 -0
  659. package/lib/enlighten-lib/enlighten-lib.module.d.ts +53 -0
  660. package/lib/enlighten-lib/enums/bread-crumbs-style.d.ts +4 -0
  661. package/lib/enlighten-lib/enums/operator-text-enum.d.ts +9 -0
  662. package/lib/enlighten-lib/fields/attribute-data.d.ts +55 -0
  663. package/lib/enlighten-lib/fields/entity.d.ts +15 -0
  664. package/lib/enlighten-lib/fields/types/ax-audio.d.ts +4 -0
  665. package/lib/enlighten-lib/fields/types/ax-barcode.d.ts +4 -0
  666. package/lib/enlighten-lib/fields/types/ax-childrecord.d.ts +4 -0
  667. package/lib/enlighten-lib/fields/types/ax-counter.d.ts +4 -0
  668. package/lib/enlighten-lib/fields/types/ax-date.d.ts +4 -0
  669. package/lib/enlighten-lib/fields/types/ax-decimal.d.ts +4 -0
  670. package/lib/enlighten-lib/fields/types/ax-document.d.ts +4 -0
  671. package/lib/enlighten-lib/fields/types/ax-file.d.ts +4 -0
  672. package/lib/enlighten-lib/fields/types/ax-image.d.ts +4 -0
  673. package/lib/enlighten-lib/fields/types/ax-location.d.ts +4 -0
  674. package/lib/enlighten-lib/fields/types/ax-number.d.ts +4 -0
  675. package/lib/enlighten-lib/fields/types/ax-qrcode.d.ts +4 -0
  676. package/lib/enlighten-lib/fields/types/ax-signature.d.ts +4 -0
  677. package/lib/enlighten-lib/fields/types/ax-staticmedia.d.ts +4 -0
  678. package/lib/enlighten-lib/fields/types/ax-text.d.ts +4 -0
  679. package/lib/enlighten-lib/fields/types/ax-time.d.ts +4 -0
  680. package/lib/enlighten-lib/fields/types/ax-uniqueid.d.ts +4 -0
  681. package/lib/enlighten-lib/fields/types/axo-timestamp.d.ts +4 -0
  682. package/lib/enlighten-lib/fields/types/choicelist.d.ts +4 -0
  683. package/lib/enlighten-lib/fields/types/datetime.d.ts +4 -0
  684. package/lib/enlighten-lib/fields/types/hyperlink.d.ts +4 -0
  685. package/lib/enlighten-lib/fields/types/ienlighten-type.d.ts +3 -0
  686. package/lib/enlighten-lib/fields/types/toggle.d.ts +4 -0
  687. package/lib/enlighten-lib/fields/types/video.d.ts +4 -0
  688. package/lib/enlighten-lib/filters/ax-filter.d.ts +38 -0
  689. package/lib/enlighten-lib/filters/ax-operator.d.ts +40 -0
  690. package/lib/enlighten-lib/filters/chart-filter-type.d.ts +5 -0
  691. package/lib/enlighten-lib/filters/condition-type.d.ts +43 -0
  692. package/lib/enlighten-lib/filters/dataList-searchNode.d.ts +27 -0
  693. package/lib/enlighten-lib/filters/dataListFilterExpression.d.ts +20 -0
  694. package/lib/enlighten-lib/filters/dataListFilterOperator.d.ts +29 -0
  695. package/lib/enlighten-lib/filters/dataListSeachQueryTree.d.ts +15 -0
  696. package/lib/enlighten-lib/filters/filter-category.d.ts +43 -0
  697. package/lib/enlighten-lib/filters/general-filter-type.d.ts +10 -0
  698. package/lib/enlighten-lib/filters/gridster-properties.d.ts +17 -0
  699. package/lib/enlighten-lib/filters/iax-filter.d.ts +7 -0
  700. package/lib/enlighten-lib/filters/search-node.d.ts +27 -0
  701. package/lib/enlighten-lib/filters/static-widget.d.ts +2 -0
  702. package/lib/enlighten-lib/property/element-property.d.ts +8 -0
  703. package/lib/enlighten-lib/property/filter-category-property.d.ts +6 -0
  704. package/lib/enlighten-lib/property/filter-property.d.ts +6 -0
  705. package/lib/enlighten-lib/report/chart-filter/chart-filter.component.d.ts +78 -0
  706. package/lib/enlighten-lib/report/element.service.d.ts +61 -0
  707. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.d.ts +259 -0
  708. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.d.ts +52 -0
  709. package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.d.ts +9 -0
  710. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.d.ts +177 -0
  711. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.d.ts +29 -0
  712. package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.d.ts +9 -0
  713. package/lib/enlighten-lib/report/graphical-report/chart/border.d.ts +13 -0
  714. package/lib/enlighten-lib/report/graphical-report/chart/chart-factory.d.ts +7 -0
  715. package/lib/enlighten-lib/report/graphical-report/chart/chart-property.d.ts +5 -0
  716. package/lib/enlighten-lib/report/graphical-report/chart/chart-type.d.ts +16 -0
  717. package/lib/enlighten-lib/report/graphical-report/chart/chart.d.ts +41 -0
  718. package/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.d.ts +13 -0
  719. package/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.d.ts +6 -0
  720. package/lib/enlighten-lib/report/graphical-report/chart/dimension.d.ts +6 -0
  721. package/lib/enlighten-lib/report/graphical-report/chart/font.d.ts +13 -0
  722. package/lib/enlighten-lib/report/graphical-report/chart/fontStyle.d.ts +13 -0
  723. package/lib/enlighten-lib/report/graphical-report/chart/label.d.ts +6 -0
  724. package/lib/enlighten-lib/report/graphical-report/chart/legend.d.ts +13 -0
  725. package/lib/enlighten-lib/report/graphical-report/chart/matrix.d.ts +11 -0
  726. package/lib/enlighten-lib/report/graphical-report/chart/shadow.d.ts +5 -0
  727. package/lib/enlighten-lib/report/graphical-report/chart/style.d.ts +12 -0
  728. package/lib/enlighten-lib/report/graphical-report/chart/text-style.d.ts +17 -0
  729. package/lib/enlighten-lib/report/graphical-report/chart/title.d.ts +11 -0
  730. package/lib/enlighten-lib/report/graphical-report/graphical-report.component.d.ts +130 -0
  731. package/lib/enlighten-lib/report/graphical-report/graphical-report.directive.d.ts +8 -0
  732. package/lib/enlighten-lib/report/graphical-report/ichart-component.d.ts +6 -0
  733. package/lib/enlighten-lib/report/graphical-report/igraphical-report.component.d.ts +21 -0
  734. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.d.ts +215 -0
  735. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.d.ts +34 -0
  736. package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.d.ts +9 -0
  737. package/lib/enlighten-lib/report/graphical-report/page/page.d.ts +25 -0
  738. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.d.ts +220 -0
  739. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.d.ts +38 -0
  740. package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.d.ts +9 -0
  741. package/lib/enlighten-lib/report/graphical-report/text/text-chart.d.ts +19 -0
  742. package/lib/enlighten-lib/report/graphical-report/text/text.component.d.ts +72 -0
  743. package/lib/enlighten-lib/report/graphical-report/text/text.service.d.ts +9 -0
  744. package/lib/enlighten-lib/report/iproperty.component.d.ts +14 -0
  745. package/lib/enlighten-lib/report/ireport.d.ts +14 -0
  746. package/lib/enlighten-lib/report/report-builder-master.service.d.ts +42 -0
  747. package/lib/enlighten-lib/report/report-filter/report-filter.component.d.ts +117 -0
  748. package/lib/enlighten-lib/report/report-filter/report-filter.module.d.ts +19 -0
  749. package/lib/enlighten-lib/report/report-filter/report-filter.service.d.ts +102 -0
  750. package/lib/enlighten-lib/report/tabular-report/aggregate.d.ts +8 -0
  751. package/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.d.ts +7 -0
  752. package/lib/enlighten-lib/report/tabular-report/column-style.d.ts +5 -0
  753. package/lib/enlighten-lib/report/tabular-report/itabular-report.component.d.ts +16 -0
  754. package/lib/enlighten-lib/report/tabular-report/orderby-type.d.ts +5 -0
  755. package/lib/enlighten-lib/report/tabular-report/row-style.d.ts +5 -0
  756. package/lib/enlighten-lib/report/tabular-report/table-style.d.ts +21 -0
  757. package/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.d.ts +124 -0
  758. package/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.d.ts +242 -0
  759. package/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.d.ts +21 -0
  760. package/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.d.ts +190 -0
  761. package/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.d.ts +177 -0
  762. package/lib/enlighten-lib/report/tabular-report/tabular-report.component.d.ts +53 -0
  763. package/lib/enlighten-lib/report/tabular-report/tabular-report.d.ts +102 -0
  764. package/lib/enlighten-lib/report/tabular-report/tabular-report.service.d.ts +173 -0
  765. package/lib/enlighten-lib/report/tabular-report/tabular.d.ts +92 -0
  766. package/lib/enlighten-lib/report/tabular-report/value-formatting.d.ts +7 -0
  767. package/lib/enlighten-lib/report-control.service.d.ts +15 -0
  768. package/lib/enlighten-lib/utils/utils.d.ts +16 -0
  769. package/lib/field-list-lib/fields-list.service.d.ts +71 -0
  770. package/lib/filters/calender-filter/calender-filter.component.d.ts +70 -0
  771. package/lib/filters/category-filter/category-filter.component.d.ts +65 -0
  772. package/lib/filters/category-filter/category-filter.service.d.ts +16 -0
  773. package/lib/filters/category-filter/category.service.d.ts +23 -0
  774. package/lib/filters/choice-list-filter/choice-list-filter.component.d.ts +64 -0
  775. package/lib/filters/choice-list-filter/choice-list-filter.service.d.ts +36 -0
  776. package/lib/filters/common-filter/common-filter.component.d.ts +135 -0
  777. package/lib/filters/common-filter/common-filter.service.d.ts +42 -0
  778. package/lib/filters/custom-scroll-directives.d.ts +14 -0
  779. package/lib/filters/date-time-filter/date-time-filter.component.d.ts +83 -0
  780. package/lib/filters/filter-footer/filter-footer.component.d.ts +12 -0
  781. package/lib/filters/filters.component.d.ts +139 -0
  782. package/lib/filters/filters.module.d.ts +43 -0
  783. package/lib/filters/filters.service.d.ts +83 -0
  784. package/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.d.ts +70 -0
  785. package/lib/filters/metaColumnTypes.d.ts +18 -0
  786. package/lib/filters/multi-select-filter/multi-select-filter.component.d.ts +68 -0
  787. package/lib/filters/multi-select-filter/multi-select-filter.service.d.ts +77 -0
  788. package/lib/filters/number-filter/number-filter.component.d.ts +70 -0
  789. package/lib/filters/public-api.d.ts +14 -0
  790. package/lib/filters/reference-list-filter/reference-list-filter.component.d.ts +59 -0
  791. package/lib/filters/reference-list-filter/reference-list-filter.service.d.ts +62 -0
  792. package/lib/filters/single-select-filter/single-select-filter.component.d.ts +59 -0
  793. package/lib/filters/time-filter/time-filter.component.d.ts +62 -0
  794. package/lib/filters/user-filter/user-filter.component.d.ts +61 -0
  795. package/lib/filters/user-filter/user-filter.service.d.ts +26 -0
  796. package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.d.ts +87 -0
  797. package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.d.ts +33 -0
  798. package/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.d.ts +13 -0
  799. package/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.d.ts +3 -0
  800. package/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.d.ts +10 -0
  801. package/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.d.ts +8 -0
  802. package/lib/form-object/form-object-list/form-object-list.component.d.ts +200 -0
  803. package/lib/form-object/form-object-list/form-object-list.d.ts +42 -0
  804. package/lib/form-object/form-object-list/form-object-list.module.d.ts +59 -0
  805. package/lib/form-object/form-object-list/form-object-list.service.d.ts +69 -0
  806. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.d.ts +3 -0
  807. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.d.ts +8 -0
  808. package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.d.ts +22 -0
  809. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.d.ts +10 -0
  810. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.d.ts +12 -0
  811. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.d.ts +10 -0
  812. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.d.ts +27 -0
  813. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.d.ts +13 -0
  814. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.d.ts +20 -0
  815. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.d.ts +10 -0
  816. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.d.ts +13 -0
  817. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.d.ts +15 -0
  818. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.d.ts +11 -0
  819. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.d.ts +21 -0
  820. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.d.ts +23 -0
  821. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.d.ts +10 -0
  822. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.d.ts +34 -0
  823. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.d.ts +12 -0
  824. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.d.ts +10 -0
  825. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.d.ts +27 -0
  826. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.d.ts +17 -0
  827. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.d.ts +15 -0
  828. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.d.ts +10 -0
  829. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.d.ts +10 -0
  830. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.d.ts +12 -0
  831. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.d.ts +16 -0
  832. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.d.ts +11 -0
  833. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.d.ts +10 -0
  834. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.d.ts +14 -0
  835. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.d.ts +16 -0
  836. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.d.ts +10 -0
  837. package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.d.ts +13 -0
  838. package/lib/form-object/form-object-view/data-detail-view-dto.d.ts +16 -0
  839. package/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.d.ts +32 -0
  840. package/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.d.ts +8 -0
  841. package/lib/form-object/form-object-view/form-object-view.component.d.ts +45 -0
  842. package/lib/form-object/form-object-view/form-object-view.module.d.ts +70 -0
  843. package/lib/form-object/form-object-view/form-object-view.service.d.ts +49 -0
  844. package/lib/form-object/form-object-view/form-object-widgets/apply-geo-fence-widget-view/apply-geo-fence-widget-view.component.d.ts +10 -0
  845. package/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.d.ts +12 -0
  846. package/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.d.ts +10 -0
  847. package/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.d.ts +31 -0
  848. package/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.d.ts +22 -0
  849. package/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.d.ts +25 -0
  850. package/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.d.ts +10 -0
  851. package/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.d.ts +12 -0
  852. package/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.d.ts +15 -0
  853. package/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.d.ts +3 -0
  854. package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.d.ts +25 -0
  855. package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.d.ts +8 -0
  856. package/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.d.ts +10 -0
  857. package/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.d.ts +14 -0
  858. package/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.d.ts +37 -0
  859. package/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.d.ts +10 -0
  860. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.d.ts +91 -0
  861. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.d.ts +32 -0
  862. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-lightbox-view/image-widget-lightbox-view.component.d.ts +71 -0
  863. package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.d.ts +40 -0
  864. package/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.d.ts +12 -0
  865. package/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.d.ts +10 -0
  866. package/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.d.ts +26 -0
  867. package/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.d.ts +13 -0
  868. package/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.d.ts +13 -0
  869. package/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.d.ts +10 -0
  870. package/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.d.ts +16 -0
  871. package/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.d.ts +14 -0
  872. package/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.d.ts +15 -0
  873. package/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.d.ts +11 -0
  874. package/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.d.ts +10 -0
  875. package/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.d.ts +14 -0
  876. package/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.d.ts +16 -0
  877. package/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.d.ts +10 -0
  878. package/lib/form-object/form-object-view/meta-section/meta-section.component.d.ts +31 -0
  879. package/lib/form-object/form-object-view/section/section.component.d.ts +16 -0
  880. package/lib/form-object/form-object-view/section-field/section-field.component.d.ts +13 -0
  881. package/lib/form-object/form-object-view/section-view/section-view.component.d.ts +16 -0
  882. package/lib/form-object/public-api.d.ts +2 -0
  883. package/lib/form-permission.service.d.ts +51 -0
  884. package/lib/forms/ax-form.d.ts +47 -0
  885. package/lib/forms/iform.d.ts +18 -0
  886. package/lib/forms/page/common/axo-response-status.d.ts +4 -0
  887. package/lib/forms/page/common/constants.d.ts +371 -0
  888. package/lib/forms/page/common/detail-view-enums.d.ts +5 -0
  889. package/lib/forms/page/common/flatten-status-enum.d.ts +7 -0
  890. package/lib/forms/page/common/form.constant.d.ts +85 -0
  891. package/lib/forms/page/common/property-panel-field.d.ts +21 -0
  892. package/lib/forms/page/common/widget-enums.d.ts +236 -0
  893. package/lib/forms/page/common/widget-value-handler.d.ts +4 -0
  894. package/lib/forms/page/data-detail-view/ax-section.d.ts +22 -0
  895. package/lib/forms/page/data-detail-view/collection-view.d.ts +11 -0
  896. package/lib/forms/page/data-detail-view/data-details.d.ts +17 -0
  897. package/lib/forms/page/data-detail-view/section-field.d.ts +13 -0
  898. package/lib/forms/page/data-detail-view/section.d.ts +13 -0
  899. package/lib/forms/page/data-list/data-list-column.d.ts +24 -0
  900. package/lib/forms/page/data-list/data-list.d.ts +24 -0
  901. package/lib/forms/page/form-object.d.ts +6 -0
  902. package/lib/forms/page/form-page.d.ts +19 -0
  903. package/lib/forms/page/value-converters/displayMode-to-bool.d.ts +5 -0
  904. package/lib/forms/page/value-converters/form-type-converter.d.ts +5 -0
  905. package/lib/forms/page/value-converters/geo-fence-value-converter.d.ts +5 -0
  906. package/lib/forms/page/value-converters/image-annotation-value-converter.d.ts +5 -0
  907. package/lib/forms/page/value-converters/language-source-value-converter.d.ts +6 -0
  908. package/lib/forms/page/value-converters/list-view-title-converter.d.ts +5 -0
  909. package/lib/forms/page/value-converters/parse-float-converter.d.ts +5 -0
  910. package/lib/forms/page/value-converters/parse-int-converter.d.ts +5 -0
  911. package/lib/forms/page/value-converters/parse-string-converter.d.ts +5 -0
  912. package/lib/forms/page/value-converters/publicUrls-string-to-array.d.ts +5 -0
  913. package/lib/forms/page/value-converters/record-limit-type-converter.d.ts +5 -0
  914. package/lib/forms/page/value-converters/restriction-mode-converter.d.ts +5 -0
  915. package/lib/forms/page/value-converters/string-to-bool-converter.d.ts +5 -0
  916. package/lib/forms/page/value-converters/string-to-bool-value-converter.d.ts +5 -0
  917. package/lib/forms/page/value-converters/string-to-date-time-converter.d.ts +5 -0
  918. package/lib/forms/page/value-converters/string-to-number -converter.d.ts +5 -0
  919. package/lib/forms/page/value-converters/textBox-mask-converter.d.ts +5 -0
  920. package/lib/forms/page/value-converters/validate-converter.d.ts +5 -0
  921. package/lib/forms/page/value-converters/value-without-mask-converter.d.ts +5 -0
  922. package/lib/forms/page/value-converters/widget-concrete-class-converter.d.ts +6 -0
  923. package/lib/forms/page/value-converters/widget-deserializer.d.ts +3 -0
  924. package/lib/forms/page/widgets/apply-geofences.d.ts +25 -0
  925. package/lib/forms/page/widgets/auto-number.d.ts +28 -0
  926. package/lib/forms/page/widgets/ax-audio.d.ts +43 -0
  927. package/lib/forms/page/widgets/ax-document.d.ts +44 -0
  928. package/lib/forms/page/widgets/ax-image.d.ts +46 -0
  929. package/lib/forms/page/widgets/bar-code.d.ts +52 -0
  930. package/lib/forms/page/widgets/child-record.d.ts +50 -0
  931. package/lib/forms/page/widgets/choicelist.d.ts +70 -0
  932. package/lib/forms/page/widgets/counter.d.ts +36 -0
  933. package/lib/forms/page/widgets/datetime.d.ts +53 -0
  934. package/lib/forms/page/widgets/formula.d.ts +38 -0
  935. package/lib/forms/page/widgets/geofence.d.ts +41 -0
  936. package/lib/forms/page/widgets/gps.d.ts +49 -0
  937. package/lib/forms/page/widgets/group-header.d.ts +51 -0
  938. package/lib/forms/page/widgets/languages.d.ts +41 -0
  939. package/lib/forms/page/widgets/link.d.ts +36 -0
  940. package/lib/forms/page/widgets/payment.d.ts +37 -0
  941. package/lib/forms/page/widgets/qr-code.d.ts +39 -0
  942. package/lib/forms/page/widgets/script-condition.d.ts +33 -0
  943. package/lib/forms/page/widgets/signature.d.ts +34 -0
  944. package/lib/forms/page/widgets/static-media.d.ts +40 -0
  945. package/lib/forms/page/widgets/stopwatch.d.ts +37 -0
  946. package/lib/forms/page/widgets/sub-form.d.ts +39 -0
  947. package/lib/forms/page/widgets/textbox.d.ts +63 -0
  948. package/lib/forms/page/widgets/timestamp.d.ts +42 -0
  949. package/lib/forms/page/widgets/toggle.d.ts +36 -0
  950. package/lib/forms/page/widgets/unique-id.d.ts +33 -0
  951. package/lib/forms/page/widgets/verification.d.ts +55 -0
  952. package/lib/forms/page/widgets/video.d.ts +44 -0
  953. package/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.d.ts +18 -0
  954. package/lib/forms/page/widgets/widget-value/audio-video-widget-value.d.ts +11 -0
  955. package/lib/forms/page/widgets/widget-value/child-record-value.d.ts +26 -0
  956. package/lib/forms/page/widgets/widget-value/choice-list-options.d.ts +27 -0
  957. package/lib/forms/page/widgets/widget-value/choices-ml.d.ts +22 -0
  958. package/lib/forms/page/widgets/widget-value/dateRangeValue.d.ts +12 -0
  959. package/lib/forms/page/widgets/widget-value/deviceProfileParams.d.ts +4 -0
  960. package/lib/forms/page/widgets/widget-value/deviceProfilesTemp.d.ts +19 -0
  961. package/lib/forms/page/widgets/widget-value/document-widget-value.d.ts +15 -0
  962. package/lib/forms/page/widgets/widget-value/geo-fence-location-value.d.ts +14 -0
  963. package/lib/forms/page/widgets/widget-value/geo-fence-widget-value.d.ts +14 -0
  964. package/lib/forms/page/widgets/widget-value/gps-widget-value.d.ts +21 -0
  965. package/lib/forms/page/widgets/widget-value/image-widget-value.d.ts +19 -0
  966. package/lib/forms/page/widgets/widget-value/language-widget-value.d.ts +12 -0
  967. package/lib/forms/page/widgets/widget-value/location-object-value.d.ts +12 -0
  968. package/lib/forms/page/widgets/widget-value/multiple-languages.d.ts +21 -0
  969. package/lib/forms/page/widgets/widget-value/reference-list-object-value.d.ts +17 -0
  970. package/lib/forms/page/widgets/widget-value/verification-widget-value.d.ts +31 -0
  971. package/lib/forms/page/widgets/widget.d.ts +75 -0
  972. package/lib/ghost-loader/ghost-loader.component.d.ts +41 -0
  973. package/lib/ghost-loader/ghost-loader.module.d.ts +8 -0
  974. package/lib/ghost-loader/public-api.d.ts +2 -0
  975. package/lib/map-dialog/map-dialog.component.d.ts +16 -0
  976. package/lib/map-dialog/map-dialog.module.d.ts +11 -0
  977. package/lib/map-dialog/public-api.d.ts +5 -0
  978. package/lib/reports-container/public-api.d.ts +7 -0
  979. package/lib/reports-container/report-group/report-group.component.d.ts +17 -0
  980. package/lib/reports-container/reports-container-models/report-group.d.ts +20 -0
  981. package/lib/reports-container/reports-container-models/report-property.d.ts +19 -0
  982. package/lib/reports-container/reports-container-models/reports-container-enums.d.ts +13 -0
  983. package/lib/reports-container/reports-container-models/reports-container.d.ts +16 -0
  984. package/lib/reports-container/reports-container.component.d.ts +16 -0
  985. package/lib/reports-container/reports-container.module.d.ts +13 -0
  986. package/lib/reports-container/reports-container.service.d.ts +18 -0
  987. package/lib/scrollbar/index.d.ts +2 -0
  988. package/lib/scrollbar/public-api.d.ts +2 -0
  989. package/lib/scrollbar/scrollbar.directive.d.ts +153 -0
  990. package/lib/scrollbar/scrollbar.module.d.ts +7 -0
  991. package/lib/scrollbar/scrollbar.types.d.ts +12 -0
  992. package/lib/sculptor-lib/widgets/audio/audio.component.d.ts +32 -0
  993. package/lib/sculptor-lib/widgets/barcode/barcode.component.d.ts +32 -0
  994. package/lib/sculptor-lib/widgets/child-record/child-record.component.d.ts +32 -0
  995. package/lib/sculptor-lib/widgets/choice-list/choice-list.component.d.ts +32 -0
  996. package/lib/sculptor-lib/widgets/date-time/date-time.component.d.ts +32 -0
  997. package/lib/sculptor-lib/widgets/document/document.component.d.ts +32 -0
  998. package/lib/sculptor-lib/widgets/geofence/geofence.component.d.ts +32 -0
  999. package/lib/sculptor-lib/widgets/gps/gps.component.d.ts +32 -0
  1000. package/lib/sculptor-lib/widgets/group-header/group-header.component.d.ts +32 -0
  1001. package/lib/sculptor-lib/widgets/image/image.component.d.ts +32 -0
  1002. package/lib/sculptor-lib/widgets/language/language.component.d.ts +32 -0
  1003. package/lib/sculptor-lib/widgets/link/link.component.d.ts +32 -0
  1004. package/lib/sculptor-lib/widgets/qr-code/qr-code.component.d.ts +32 -0
  1005. package/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.d.ts +32 -0
  1006. package/lib/sculptor-lib/widgets/subform/subform.component.d.ts +32 -0
  1007. package/lib/sculptor-lib/widgets/textbox/textbox.component.d.ts +32 -0
  1008. package/lib/sculptor-lib/widgets/timestamp/timestamp.component.d.ts +32 -0
  1009. package/lib/sculptor-lib/widgets/toggle/toggle.component.d.ts +32 -0
  1010. package/lib/sculptor-lib/widgets/video/video.component.d.ts +32 -0
  1011. package/lib/sculptor-lib/widgets/widgets.service.d.ts +30 -0
  1012. package/lib/shared/comfirmation-modal/confirmation-modal.component.d.ts +18 -0
  1013. package/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.d.ts +29 -0
  1014. package/lib/shared/shared.module.d.ts +13 -0
  1015. package/package.json +64 -0
  1016. package/public-api.d.ts +130 -0
@@ -0,0 +1,960 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { EventEmitter, Injectable } from '@angular/core';
3
+ import { ElementProperty } from '../../property/element-property';
4
+ import { TabularReport } from './tabular-report';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "@angular/common/http";
7
+ export class TabularReportService {
8
+ constructor(_httpClient) {
9
+ this._httpClient = _httpClient;
10
+ this.dataRender = new EventEmitter();
11
+ this._tableClickEvent = new EventEmitter();
12
+ this.cloneIntegerCount = Array();
13
+ }
14
+ /**to count data count in a series
15
+ *
16
+ * @param TabularReport
17
+ *
18
+ */
19
+ groupData(tabularReport) {
20
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
21
+ // when row span is true and index is 0
22
+ attribute.groupData = new Array();
23
+ if (index === 0 || attribute.colSpan) {
24
+ this.getFirstRowGrouping(attribute);
25
+ }
26
+ else {
27
+ // when index is greater than 0
28
+ let startIndex = 0;
29
+ const cloneSeries = [];
30
+ let gdIndex = 0;
31
+ while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
32
+ const dataSeries = [];
33
+ gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
34
+ const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
35
+ subSeries.forEach((data) => {
36
+ attribute.groupData.push(this.getRowSpanCount(subSeries, data));
37
+ // to replace repeated data
38
+ if (dataSeries.includes(data)) {
39
+ dataSeries.push('repeated');
40
+ cloneSeries.push('repeated');
41
+ }
42
+ else {
43
+ dataSeries.push(data);
44
+ cloneSeries.push(data);
45
+ }
46
+ });
47
+ attribute.cloneGroupData = attribute.groupData.slice(0);
48
+ startIndex = startIndex + gdIndex;
49
+ }
50
+ attribute.cloneSeries = cloneSeries;
51
+ }
52
+ });
53
+ if (tabularReport.subTotal && tabularReport.colGrouping.length === 0) {
54
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
55
+ }
56
+ return tabularReport;
57
+ }
58
+ /** to count data count in a series
59
+ *
60
+ * @param string
61
+ * @param any
62
+ *
63
+ */
64
+ getRowSpanCount(series, key) {
65
+ return series.filter(str => str === key).length;
66
+ }
67
+ /** to count first row grouping data count
68
+ *
69
+ * @param AttributeData
70
+ *
71
+ */
72
+ getFirstRowGrouping(attribute) {
73
+ const series = [];
74
+ const uniqueSeries = [];
75
+ attribute.series.forEach((element) => {
76
+ if (series.includes(element)) {
77
+ series.push('repeated');
78
+ }
79
+ else {
80
+ series.push(element);
81
+ uniqueSeries.push(element);
82
+ }
83
+ });
84
+ attribute.cloneSeries = series;
85
+ attribute.uniqueSeries = uniqueSeries;
86
+ attribute.series.forEach((data) => {
87
+ attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
88
+ });
89
+ attribute.cloneGroupData = attribute.groupData.slice(0);
90
+ return attribute;
91
+ }
92
+ sendEmail(emailDto) {
93
+ return new Promise((resolve, reject) => {
94
+ this._httpClient.post('reports/export', emailDto).subscribe((response) => {
95
+ resolve(response);
96
+ }, reject);
97
+ });
98
+ }
99
+ /**to count data count and set clone data while column grouping is applied
100
+ *
101
+ * @param TabularReport
102
+ *
103
+ */
104
+ columnData(tabularReport) {
105
+ tabularReport = this.rowSpan(tabularReport);
106
+ tabularReport.colGrouping.forEach((attr) => {
107
+ if (!attr.uniqueSeries) {
108
+ if (!attr.uniqueSeries) {
109
+ const series = [];
110
+ const uniqueSeries = [];
111
+ attr.series.forEach((_element) => {
112
+ if (series.includes(_element)) {
113
+ series.push('repeated');
114
+ }
115
+ else {
116
+ series.push(_element);
117
+ uniqueSeries.push(_element);
118
+ }
119
+ });
120
+ uniqueSeries.sort();
121
+ attr.uniqueSeries = uniqueSeries;
122
+ }
123
+ }
124
+ });
125
+ tabularReport.matrix.attributes.forEach((attr) => {
126
+ if (!attr.uniqueSeries) {
127
+ if (!attr.uniqueSeries) {
128
+ const series = [];
129
+ const uniqueSeries = [];
130
+ attr.series.forEach((seriesData) => {
131
+ if (series.includes(seriesData)) {
132
+ series.push('repeated');
133
+ }
134
+ else {
135
+ series.push(seriesData);
136
+ uniqueSeries.push(seriesData);
137
+ }
138
+ });
139
+ uniqueSeries.sort();
140
+ attr.uniqueSeries = uniqueSeries;
141
+ }
142
+ }
143
+ });
144
+ return tabularReport;
145
+ }
146
+ /**to count rows group data when column grouping is applied
147
+ *
148
+ * @param TabularReport
149
+ *
150
+ */
151
+ rowSpan(tabularReport) {
152
+ tabularReport.integerArray = [];
153
+ tabularReport.integerIndex = [];
154
+ tabularReport = this.getIntegerArray(tabularReport);
155
+ if (tabularReport.integerArray.length === 0) {
156
+ tabularReport.rowCount = true;
157
+ }
158
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
159
+ if (index === 0 && attribute.rowSpan) {
160
+ const series = [];
161
+ const uniqueSeries = [];
162
+ attribute.series.forEach((data) => {
163
+ if (series.includes(data)) {
164
+ series.push('repeated');
165
+ }
166
+ else {
167
+ series.push(data);
168
+ uniqueSeries.push(data);
169
+ }
170
+ });
171
+ attribute.cloneSeries = series;
172
+ attribute.uniqueSeries = uniqueSeries;
173
+ attribute.series.forEach((data) => {
174
+ attribute.groupData.push(this.getRowSpanCount(attribute.series, data));
175
+ });
176
+ attribute.cloneGroupData = attribute.groupData;
177
+ }
178
+ if (index === 1 && attribute.rowSpan) {
179
+ attribute = this.getCloneData(tabularReport, index, attribute);
180
+ }
181
+ });
182
+ return tabularReport;
183
+ }
184
+ /**to set headers section of column grouping
185
+ *
186
+ * @param TabularReport
187
+ * @param AttributeData
188
+ *
189
+ */
190
+ newData(tabularReport, attr) {
191
+ const count = (tabularReport.colGrouping.indexOf(attr));
192
+ tabularReport.secondColData = new Map();
193
+ tabularReport.secondColSeries = new Array();
194
+ tabularReport.firstColSeries = new Array();
195
+ const _index = tabularReport.rowGrouping.length + (count);
196
+ if (count === 1) {
197
+ tabularReport = this.getSecondColData(tabularReport, _index);
198
+ }
199
+ if (tabularReport.colGrouping.length === 1) {
200
+ tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
201
+ tabularReport.colData.set(series, tabularReport.integerArray.length);
202
+ });
203
+ let m = 0;
204
+ tabularReport.cloneDataCount = [];
205
+ tabularReport.cloneIntegerArray = [];
206
+ while (m < (tabularReport.colGrouping[0].uniqueSeries.length)) {
207
+ tabularReport.integerArray.forEach((element) => {
208
+ tabularReport.cloneIntegerArray.push(element);
209
+ });
210
+ tabularReport.cloneDataCount.push(m);
211
+ m++;
212
+ }
213
+ }
214
+ if (tabularReport.colGrouping.length > 1 && count === 1) {
215
+ let _count = 0;
216
+ tabularReport.colGrouping[1].uniqueSeries.forEach((series) => {
217
+ tabularReport.colData.set(series, tabularReport.integerArray.length);
218
+ });
219
+ tabularReport.colGrouping[0].uniqueSeries.forEach((series) => {
220
+ tabularReport.colData.set(series, tabularReport.integerArray.length * (tabularReport.secondColData.get(series).length));
221
+ _count += (tabularReport.secondColData.get(series).length);
222
+ });
223
+ tabularReport.cloneDataCount = [];
224
+ let cloneDataIndex = 0;
225
+ const data123 = [];
226
+ while (cloneDataIndex < _count) {
227
+ tabularReport.cloneDataCount.push(cloneDataIndex);
228
+ tabularReport.integerIndex.forEach((element) => {
229
+ data123.push(element);
230
+ });
231
+ cloneDataIndex++;
232
+ }
233
+ }
234
+ return tabularReport;
235
+ }
236
+ /**to get data render value when single column grouping is applied
237
+ *
238
+ * @param TabularReport
239
+ *
240
+ */
241
+ dataFactory(tabularReport) {
242
+ const rCount = tabularReport.rowGrouping.length - 1;
243
+ const cCount = tabularReport.colGrouping.length;
244
+ let count = 0;
245
+ tabularReport.countsData = new Map();
246
+ let i = 0;
247
+ tabularReport.matrix.attributes[rCount + cCount].groupData = [];
248
+ const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
249
+ if (tabularReport.colGrouping.length === 1) {
250
+ while (i < tabularReport.matrix.attributes[0].series.length) {
251
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
252
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
253
+ subSeries.forEach((_data) => {
254
+ tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
255
+ });
256
+ i = i + groupData;
257
+ }
258
+ i = 0;
259
+ const __Data = new Map();
260
+ const __Data1 = new Map();
261
+ let firstColumnIndex = 0;
262
+ const grandTotal = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
263
+ const countsGrandTotal = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
264
+ let countTotal = 0;
265
+ while (i < tabularReport.matrix.attributes[0].series.length) {
266
+ let dataSeries = [];
267
+ let countDataSeries = [];
268
+ const countArray = Array(tabularReport.matrix.attributes[rCount + cCount].uniqueSeries.length).fill(0);
269
+ const iarr = [];
270
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
271
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].groupData.slice(i, i + groupData);
272
+ const dataSubSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
273
+ const uniqueSeries = [...new Set(tabularReport.matrix.attributes[rCount + cCount].series)];
274
+ const countGroupData = tabularReport.matrix.attributes[rCount].groupData[i];
275
+ let countDataIndex = i;
276
+ const end = i + countGroupData;
277
+ uniqueSeries.sort();
278
+ while (countDataIndex < end) {
279
+ uniqueSeries.forEach((element, dIndex) => {
280
+ if (element === tabularReport.matrix.attributes[rCount + cCount].series[countDataIndex]) {
281
+ countArray.splice(dIndex, 1, tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex]);
282
+ }
283
+ });
284
+ countDataIndex = countDataIndex + tabularReport.matrix.attributes[rCount + cCount].groupData[countDataIndex];
285
+ }
286
+ dataSeries = [];
287
+ const rowCount = [];
288
+ tabularReport.rowsData = [];
289
+ let subSeriesIndex = 0;
290
+ if (tabularReport.colGrouping.length === 1) {
291
+ const dataSeriesValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
292
+ while (subSeriesIndex < subSeries.length) {
293
+ rowCount.push(subSeries[subSeriesIndex]);
294
+ tabularReport.rowsData.push(dataSubSeries[subSeriesIndex]);
295
+ iarr.push(firstColumnIndex);
296
+ tabularReport.integerIndex.forEach((int) => {
297
+ this.getfirstColIntegerData(tabularReport, int, firstColumnIndex, subSeriesIndex, subSeries, dataSeries);
298
+ });
299
+ firstColumnIndex = firstColumnIndex + subSeries[subSeriesIndex];
300
+ subSeriesIndex = subSeriesIndex + subSeries[subSeriesIndex];
301
+ }
302
+ let index = 0;
303
+ iarr.forEach((int) => {
304
+ const data = tabularReport.matrix.attributes[rCount + cCount].series[int];
305
+ let dataIndex = tabularReport.colGrouping[0].uniqueSeries.indexOf(data);
306
+ dataIndex = dataIndex * tabularReport.integerArray.length;
307
+ const arr = dataSeries.slice(index, tabularReport.integerArray.length + index);
308
+ let value = dataIndex;
309
+ arr.forEach((element) => {
310
+ dataSeriesValues.splice(value, 1, element);
311
+ value++;
312
+ });
313
+ index = index + tabularReport.integerArray.length;
314
+ });
315
+ const sideTotal = this.getSideTotal(dataSeries, tabularReport.integerArray);
316
+ dataSeries = dataSeriesValues;
317
+ countDataSeries = dataSeriesValues.slice(0);
318
+ const min = Array();
319
+ const max = Array();
320
+ dataSeriesValues.forEach((element, ind) => {
321
+ if (tabularReport.cloneIntegerArray[ind].includes('Min')) {
322
+ min.push(element);
323
+ if (element < grandTotal[ind]) {
324
+ grandTotal[ind] = element;
325
+ }
326
+ }
327
+ else if (tabularReport.cloneIntegerArray[ind].includes('Max')) {
328
+ max.push(element);
329
+ if (element > grandTotal[ind]) {
330
+ grandTotal[ind] = element;
331
+ }
332
+ }
333
+ else {
334
+ grandTotal[ind] = (grandTotal[ind] + element);
335
+ }
336
+ });
337
+ sideTotal.forEach((element, index1) => {
338
+ if (tabularReport.integerArray[index1].includes('Avg')) {
339
+ sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
340
+ sideTotal1[index1] = (sideTotal1[index1] + element);
341
+ }
342
+ else if (tabularReport.integerArray[index1].includes('Min')) {
343
+ sideTotal[index1] = this.countMin(min);
344
+ if (sideTotal[index1] < sideTotal1[index1]) {
345
+ sideTotal1[index1] = sideTotal[index1];
346
+ }
347
+ }
348
+ else if (tabularReport.integerArray[index1].includes('Max')) {
349
+ sideTotal[index1] = this.countMax(max);
350
+ if (sideTotal[index1] > sideTotal1[index1]) {
351
+ sideTotal1[index1] = sideTotal[index1];
352
+ }
353
+ }
354
+ else {
355
+ sideTotal1[index1] = (sideTotal1[index1] + element);
356
+ }
357
+ });
358
+ // countsGrandTotal
359
+ countArray.forEach((countData, countIndex) => {
360
+ countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
361
+ });
362
+ tabularReport.grandTotal = grandTotal;
363
+ countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
364
+ if (tabularReport.rowGrouping.length > 1) {
365
+ __Data.set(i, dataSeries);
366
+ tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
367
+ tabularReport.sideTotal.set(i, sideTotal);
368
+ __Data1.set(i, countDataSeries);
369
+ tabularReport.rowCountIndex.set(i, rowCount);
370
+ tabularReport.countsData.set(i, countArray);
371
+ tabularReport.dataIndexSTotal.set(count, i);
372
+ }
373
+ else {
374
+ __Data.set(count, dataSeries);
375
+ __Data1.set(count, countDataSeries);
376
+ tabularReport.totalRowCount.set(count, rowCount.reduce((a2, b2) => a2 + b2, 0));
377
+ tabularReport.sideTotal.set(count, sideTotal);
378
+ tabularReport.rowCountIndex.set(count, rowCount);
379
+ tabularReport.countsData.set(count, countArray);
380
+ }
381
+ }
382
+ count++;
383
+ i = i + groupData;
384
+ }
385
+ if (tabularReport.matrix.attributes[0].series.length > 0) {
386
+ tabularReport.grandTotal.forEach((element, index) => {
387
+ if (tabularReport.cloneIntegerArray[index].includes('Avg')) {
388
+ tabularReport.grandTotal[index] = this.countGrandTotalAvg(element, count);
389
+ }
390
+ });
391
+ }
392
+ sideTotal1.forEach((element, indexD) => {
393
+ if (tabularReport.integerArray[indexD].includes('Avg')) {
394
+ sideTotal1[indexD] = this.countGrandTotalAvg(element, count);
395
+ }
396
+ });
397
+ tabularReport.seriesData = __Data;
398
+ this.dataRender.emit(__Data);
399
+ const integerArrayValues = Array(tabularReport.integerArray.length * tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
400
+ tabularReport = this.getIntegerIndex(integerArrayValues, tabularReport);
401
+ tabularReport.dataRender = __Data1;
402
+ tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
403
+ tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
404
+ tabularReport.countsTotal = new Array();
405
+ tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
406
+ }
407
+ if (tabularReport.colGrouping.length === 2) {
408
+ tabularReport = this.getSecondColumn(tabularReport);
409
+ }
410
+ if (tabularReport.subTotal) {
411
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
412
+ }
413
+ if (tabularReport.subTotal && !tabularReport.rowCount) {
414
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
415
+ }
416
+ return tabularReport;
417
+ }
418
+ countGrandTotalAvg(data, count) {
419
+ return (parseFloat((data / count).toFixed(2)));
420
+ }
421
+ // countGrandTotalMin(series:)
422
+ /** returns sum of integer columns subSeries for column grouping
423
+ *
424
+ * @param Array
425
+ *
426
+ */
427
+ countSum(series) {
428
+ let total = 0;
429
+ for (const data of series) {
430
+ total += Number(data);
431
+ }
432
+ return total;
433
+ }
434
+ /** returns Average of integer columns subSeries for column grouping
435
+ *
436
+ * @param Array
437
+ *
438
+ */
439
+ countAvg(series) {
440
+ let total = 0;
441
+ for (const data of series) {
442
+ total += Number(data);
443
+ }
444
+ return (parseFloat((total / series.length).toFixed(2)));
445
+ }
446
+ /** returns Max of integer columns subSeries for column grouping
447
+ *
448
+ * @param Array
449
+ *
450
+ */
451
+ countMax(series) {
452
+ return Math.max(...series);
453
+ }
454
+ /** returns min of integer columns subSeries for column grouping
455
+ *
456
+ * @param Array
457
+ *
458
+ */
459
+ countMin(series) {
460
+ return Math.min(...series);
461
+ }
462
+ /** returns count of unique data for integer columns subSeries in column grouping
463
+ *
464
+ * @param Array
465
+ *
466
+ */
467
+ getUnique(series) {
468
+ return [...new Set(series)].length;
469
+ }
470
+ /** to add integer column in IntegerArray
471
+ *
472
+ * @param TabularReport
473
+ *
474
+ */
475
+ getIntegerArray(tabularReport) {
476
+ const data = [];
477
+ tabularReport.matrix.attributes.forEach((attribute, index) => {
478
+ if (!attribute.rowSpan && !attribute.colSpan) {
479
+ if (attribute.aggregate.showUniqueCount) {
480
+ tabularReport.integerArray.push('unique ' + attribute.label);
481
+ tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
482
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
483
+ }
484
+ }
485
+ if (attribute.type === 'int' && !attribute.rowSpan && !attribute.colSpan) {
486
+ tabularReport.integerIndex.push(tabularReport.matrix.attributes.indexOf(attribute));
487
+ if (attribute.aggregate.showSum) {
488
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
489
+ tabularReport.integerArray.push('Sum ' + attribute.label);
490
+ }
491
+ if (attribute.aggregate.showAvg) {
492
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
493
+ tabularReport.integerArray.push('Avg ' + attribute.label);
494
+ }
495
+ if (attribute.aggregate.showMax) {
496
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
497
+ tabularReport.integerArray.push('Max ' + attribute.label);
498
+ }
499
+ if (attribute.aggregate.showMin) {
500
+ data.push(tabularReport.matrix.attributes.indexOf(attribute));
501
+ tabularReport.integerArray.push('Min ' + attribute.label);
502
+ }
503
+ }
504
+ });
505
+ tabularReport.integerData = data;
506
+ return tabularReport;
507
+ }
508
+ /** to count clone data for single column grouping
509
+ *
510
+ * @param tabularReport
511
+ * @param number
512
+ * @param attributeData
513
+ *
514
+ */
515
+ getCloneData(tabularReport, index, attribute) {
516
+ let startIndex = 0;
517
+ const cloneSeries = [];
518
+ let gdIndex = 0;
519
+ while (startIndex <= (tabularReport.matrix.attributes[index - 1].groupData.length - 1)) {
520
+ const dataSeries = [];
521
+ gdIndex = tabularReport.matrix.attributes[index - 1].groupData[startIndex];
522
+ const subSeries = attribute.series.slice(startIndex, startIndex + gdIndex);
523
+ subSeries.forEach((subSeriesData) => {
524
+ attribute.groupData.push(this.getRowSpanCount(subSeries, subSeriesData));
525
+ // to replace repeated subSeriesData
526
+ if (dataSeries.includes(subSeriesData)) {
527
+ dataSeries.push('repeated');
528
+ cloneSeries.push('repeated');
529
+ }
530
+ else {
531
+ dataSeries.push(subSeriesData);
532
+ cloneSeries.push(subSeriesData);
533
+ }
534
+ });
535
+ attribute.cloneGroupData = attribute.groupData.slice(0);
536
+ startIndex = startIndex + gdIndex;
537
+ }
538
+ attribute.cloneSeries = cloneSeries;
539
+ return attribute;
540
+ }
541
+ /** to count clone data for double column grouping
542
+ *
543
+ * @param tabularReport
544
+ * @param number
545
+ *
546
+ */
547
+ getSecondColData(tabularReport, _index) {
548
+ tabularReport.matrix.attributes[_index - 1].uniqueSeries.forEach((unique) => {
549
+ const data = [];
550
+ tabularReport.matrix.attributes[_index - 1].series.forEach((series, index) => {
551
+ if (unique === series) {
552
+ if (!data.includes(tabularReport.matrix.attributes[_index].series[index])) {
553
+ data.push(tabularReport.matrix.attributes[_index].series[index]);
554
+ tabularReport.secondColSeries.push(tabularReport.matrix.attributes[_index].series[index]);
555
+ }
556
+ }
557
+ });
558
+ // tabularReport.secondSeries=
559
+ tabularReport.secondColData.set(unique, data);
560
+ data.forEach(() => {
561
+ tabularReport.firstColSeries.push(unique);
562
+ });
563
+ });
564
+ tabularReport.colGrouping[0].uniqueSeries = [...new Set(tabularReport.firstColSeries)];
565
+ return tabularReport;
566
+ }
567
+ /** create series with row count
568
+ *
569
+ * @param tabularReport
570
+ * @param Array
571
+ * @param Array
572
+ *
573
+ */
574
+ getSeriesWithCount(swap1, integerArray, rowCount, tabularReport) {
575
+ let integerArrayIndex = integerArray.length - 1;
576
+ let dataIndex = 0;
577
+ this.cloneIntegerCount = Array(swap1.length).fill(0);
578
+ const countIndex = Array(swap1.length).fill(0);
579
+ while (integerArrayIndex < swap1.length) {
580
+ if (swap1[integerArrayIndex] > 0) {
581
+ countIndex.splice(integerArrayIndex + 1, 0, null);
582
+ }
583
+ else {
584
+ countIndex.splice(integerArrayIndex + 1, 0, null);
585
+ }
586
+ swap1.splice(integerArrayIndex + 1, 0, rowCount[dataIndex]);
587
+ this.cloneIntegerCount.splice(integerArrayIndex + 1, 0, 'count');
588
+ if (integerArrayIndex < tabularReport.cloneIntegerArray.length) {
589
+ this.cloneIntegerCount.splice(integerArrayIndex + 1, 1, 'count');
590
+ }
591
+ integerArrayIndex = integerArrayIndex + integerArray.length + 1;
592
+ dataIndex++;
593
+ }
594
+ return swap1;
595
+ }
596
+ /** count Integer columns subSeries Data for single column grouping
597
+ *
598
+ * @param tabularReport
599
+ * @param number
600
+ * @param number
601
+ * @param number
602
+ * @param Array
603
+ * @param Array
604
+ *
605
+ */
606
+ getfirstColIntegerData(tabularReport, int, firstColumnIndex, j, subSeries, swap) {
607
+ if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
608
+ swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
609
+ }
610
+ if (tabularReport.matrix.attributes[int].aggregate.showSum) {
611
+ swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
612
+ }
613
+ if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
614
+ swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
615
+ }
616
+ if (tabularReport.matrix.attributes[int].aggregate.showMax) {
617
+ swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
618
+ }
619
+ if (tabularReport.matrix.attributes[int].aggregate.showMin) {
620
+ swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(firstColumnIndex, firstColumnIndex + subSeries[j])));
621
+ }
622
+ return swap;
623
+ }
624
+ /** count Integer columns subSeries Data for double column grouping
625
+ *
626
+ * @param tabularReport
627
+ * @param number
628
+ * @param number
629
+ * @param number
630
+ * @param Array
631
+ * @param Array
632
+ *
633
+ */
634
+ getSecondColIntegerData(tabularReport, int, secondColumnIndex, n, swap, xyz) {
635
+ if (tabularReport.matrix.attributes[int].aggregate.showUniqueCount) {
636
+ swap.push(this.getUnique(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
637
+ }
638
+ if (tabularReport.matrix.attributes[int].aggregate.showSum) {
639
+ swap.push(this.countSum(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
640
+ }
641
+ if (tabularReport.matrix.attributes[int].aggregate.showAvg) {
642
+ swap.push(this.countAvg(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
643
+ }
644
+ if (tabularReport.matrix.attributes[int].aggregate.showMax) {
645
+ swap.push(this.countMax(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
646
+ }
647
+ if (tabularReport.matrix.attributes[int].aggregate.showMin) {
648
+ swap.push(this.countMin(tabularReport.matrix.attributes[int].series.slice(secondColumnIndex, secondColumnIndex + xyz[n])));
649
+ }
650
+ return swap;
651
+ }
652
+ /** count horizontal grand Total
653
+ *
654
+ * @param Array
655
+ * @param Array
656
+ *
657
+ */
658
+ getSideTotal(swap, integerArray) {
659
+ let totalIndex = 0;
660
+ let integerArrayIndex = 0;
661
+ const sideTotal = Array(integerArray.length).fill(0);
662
+ while (totalIndex < integerArray.length) {
663
+ integerArrayIndex = totalIndex;
664
+ sideTotal[totalIndex] = swap[integerArrayIndex];
665
+ while (integerArrayIndex + integerArray.length < swap.length) {
666
+ sideTotal[totalIndex] = sideTotal[totalIndex] + swap[integerArrayIndex + integerArray.length];
667
+ integerArrayIndex = integerArrayIndex + integerArray.length;
668
+ }
669
+ totalIndex++;
670
+ }
671
+ return sideTotal;
672
+ }
673
+ /** get Second column series grouping data
674
+ *
675
+ * @param Array
676
+ * @param TabularReport
677
+ * @param number
678
+ * @param Array
679
+ * @param Array
680
+ *
681
+ */
682
+ getSeriesData(iarr, tabularReport, rCount, cCount, swap, a) {
683
+ let index = 0;
684
+ iarr.forEach((element) => {
685
+ let iArrayIndex = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[element]);
686
+ const max = iArrayIndex + tabularReport.secondColData.get(tabularReport.matrix.attributes[rCount + 1].series[element]).length;
687
+ while (iArrayIndex < max) {
688
+ if (tabularReport.secondColSeries[iArrayIndex] === tabularReport.matrix.attributes[rCount + cCount].series[element]) {
689
+ const arr = swap.slice(index, tabularReport.integerArray.length + index);
690
+ let value = iArrayIndex * tabularReport.integerArray.length;
691
+ a.splice(value, 1, swap[index]);
692
+ arr.forEach((data) => {
693
+ a.splice(value, 1, data);
694
+ value++;
695
+ });
696
+ index = index + tabularReport.integerArray.length;
697
+ }
698
+ iArrayIndex++;
699
+ }
700
+ });
701
+ return a;
702
+ }
703
+ /** get Second column data
704
+ *
705
+ * @param TabularReport
706
+ *
707
+ */
708
+ getSecondColumn(tabularReport) {
709
+ const rCount = tabularReport.rowGrouping.length - 1;
710
+ const cCount = tabularReport.colGrouping.length;
711
+ let count = 0;
712
+ let i = 0;
713
+ tabularReport.matrix.attributes[rCount + cCount].groupData = [];
714
+ const sideTotal1 = Array(tabularReport.integerArray.length).fill(0);
715
+ while (i < tabularReport.matrix.attributes[0].series.length) {
716
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
717
+ const subSeries = tabularReport.matrix.attributes[rCount + cCount].series.slice(i, i + groupData);
718
+ subSeries.forEach((_data) => {
719
+ tabularReport.matrix.attributes[rCount + cCount].groupData.push(this.getRowSpanCount(subSeries, _data));
720
+ });
721
+ i = i + groupData;
722
+ }
723
+ i = 0;
724
+ const __Data = new Map();
725
+ const __Data1 = new Map();
726
+ let subSeriesIndex = 0;
727
+ let secondColumnIndex = 0;
728
+ const grandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
729
+ const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
730
+ let countTotal = 0;
731
+ const countsGrandTotal = Array(tabularReport.secondColSeries.length).fill(0);
732
+ while (i < tabularReport.matrix.attributes[0].series.length) {
733
+ const subSeriesDataCount = [];
734
+ let seriesData = [];
735
+ let countSeriesData = [];
736
+ const iarr = [];
737
+ const groupData = tabularReport.matrix.attributes[rCount].groupData[i];
738
+ seriesData = [];
739
+ const rowCount = [];
740
+ const dataSeriesValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
741
+ const groupDataSeries = tabularReport.matrix.attributes[rCount].groupData[i];
742
+ const countArray = Array(tabularReport.secondColSeries.length).fill(0);
743
+ const subSeries = tabularReport.matrix.attributes[rCount + 1].series.slice(i, i + groupDataSeries);
744
+ const subSeriesGroupData = [];
745
+ subSeries.forEach((data) => {
746
+ subSeriesGroupData.push(this.getRowSpanCount(subSeries, data));
747
+ });
748
+ let sSeriesGDIndex = 0;
749
+ while (sSeriesGDIndex < subSeriesGroupData.length) {
750
+ const sSeries = (tabularReport.matrix.attributes[rCount + cCount].series.slice(subSeriesIndex, subSeriesIndex + subSeriesGroupData[sSeriesGDIndex]));
751
+ sSeries.forEach((data1) => {
752
+ subSeriesDataCount.push(this.getRowSpanCount(sSeries, data1));
753
+ });
754
+ subSeriesIndex = subSeriesIndex + subSeriesGroupData[sSeriesGDIndex];
755
+ sSeriesGDIndex = sSeriesGDIndex + subSeriesGroupData[sSeriesGDIndex];
756
+ }
757
+ let sSeriesGDCIndex = 0;
758
+ while (sSeriesGDCIndex < subSeriesDataCount.length) {
759
+ const data = tabularReport.matrix.attributes[rCount + cCount].series[i + sSeriesGDCIndex];
760
+ let series = [];
761
+ series = tabularReport.secondColData.get(subSeries[sSeriesGDCIndex]);
762
+ const x = tabularReport.firstColSeries.indexOf(tabularReport.matrix.attributes[rCount + 1].series[i + sSeriesGDCIndex]);
763
+ const m = (series.indexOf(data));
764
+ countArray.splice(m + x, 1, subSeriesDataCount[sSeriesGDCIndex]);
765
+ rowCount.push(subSeriesDataCount[sSeriesGDCIndex]);
766
+ iarr.push(secondColumnIndex);
767
+ tabularReport.integerIndex.forEach((int) => {
768
+ this.getSecondColIntegerData(tabularReport, int, secondColumnIndex, sSeriesGDCIndex, seriesData, subSeriesDataCount);
769
+ });
770
+ secondColumnIndex = secondColumnIndex + subSeriesDataCount[sSeriesGDCIndex];
771
+ sSeriesGDCIndex = sSeriesGDCIndex + subSeriesDataCount[sSeriesGDCIndex];
772
+ }
773
+ const sideTotal = this.getSideTotal(seriesData, tabularReport.integerArray);
774
+ if (tabularReport.integerArray.length !== 0) {
775
+ seriesData = this.getSeriesData(iarr, tabularReport, rCount, cCount, seriesData, dataSeriesValues);
776
+ }
777
+ countSeriesData = dataSeriesValues.slice(0);
778
+ countArray.forEach((countData, countIndex) => {
779
+ countsGrandTotal[countIndex] = (countsGrandTotal[countIndex] + countData);
780
+ });
781
+ tabularReport.cloneIntegerArray = [];
782
+ tabularReport.secondColSeries.forEach((element) => {
783
+ tabularReport.integerArray.forEach((element1) => {
784
+ tabularReport.cloneIntegerArray.push(element1);
785
+ });
786
+ });
787
+ const min = Array();
788
+ const max = Array();
789
+ dataSeriesValues.forEach((element, index) => {
790
+ if (tabularReport.cloneIntegerArray[index].includes('Min')) {
791
+ min.push(element);
792
+ if (element < grandTotal[index]) {
793
+ grandTotal[index] = element;
794
+ }
795
+ }
796
+ else if (tabularReport.cloneIntegerArray[index].includes('Max')) {
797
+ max.push(element);
798
+ if (element > grandTotal[index]) {
799
+ grandTotal[index] = element;
800
+ }
801
+ }
802
+ else {
803
+ grandTotal[index] = (grandTotal[index] + element);
804
+ }
805
+ });
806
+ tabularReport.grandTotal = grandTotal;
807
+ sideTotal.forEach((element, index1) => {
808
+ if (tabularReport.integerArray[index1].includes('Avg')) {
809
+ sideTotal[index1] = this.countGrandTotalAvg(element, dataSeriesValues.length / tabularReport.integerArray.length);
810
+ sideTotal1[index1] = (sideTotal1[index1] + element);
811
+ }
812
+ else if (tabularReport.integerArray[index1].includes('Min')) {
813
+ sideTotal[index1] = this.countMin(min);
814
+ if (sideTotal[index1] < sideTotal1[index1]) {
815
+ sideTotal1[index1] = sideTotal[index1];
816
+ }
817
+ }
818
+ else if (tabularReport.integerArray[index1].includes('Max')) {
819
+ sideTotal[index1] = this.countMax(max);
820
+ if (sideTotal[index1] > sideTotal1[index1]) {
821
+ sideTotal1[index1] = sideTotal[index1];
822
+ }
823
+ }
824
+ else {
825
+ sideTotal1[index1] = (sideTotal1[index1] + element);
826
+ }
827
+ });
828
+ countTotal = countTotal + rowCount.reduce((a2, b2) => a2 + b2, 0);
829
+ if (tabularReport.rowGrouping.length > 1) {
830
+ __Data.set(i, seriesData);
831
+ __Data1.set(i, countSeriesData);
832
+ tabularReport.totalRowCount.set(i, rowCount.reduce((a1, b1) => a1 + b1, 0));
833
+ tabularReport.sideTotal.set(i, sideTotal);
834
+ tabularReport.rowCountIndex.set(i, rowCount);
835
+ tabularReport.countsData.set(i, countArray);
836
+ tabularReport.dataIndexSTotal.set(count, i);
837
+ }
838
+ else {
839
+ __Data.set(count, seriesData);
840
+ __Data1.set(count, countSeriesData);
841
+ tabularReport.totalRowCount.set(count, rowCount.reduce((a1, b1) => a1 + b1, 0));
842
+ tabularReport.sideTotal.set(count, sideTotal);
843
+ tabularReport.rowCountIndex.set(count, rowCount);
844
+ tabularReport.countsData.set(count, countArray);
845
+ }
846
+ count++;
847
+ i = i + groupData;
848
+ }
849
+ tabularReport.grandTotal.forEach((element, indexData) => {
850
+ if (tabularReport.cloneIntegerArray[indexData].includes('Avg')) {
851
+ tabularReport.grandTotal[indexData] = this.countGrandTotalAvg(element, count);
852
+ }
853
+ });
854
+ sideTotal1.forEach((_elementData, indexD) => {
855
+ if (tabularReport.integerArray[indexD].includes('Avg')) {
856
+ sideTotal1[indexD] = this.countGrandTotalAvg(_elementData, count);
857
+ }
858
+ });
859
+ this.dataRender.emit(__Data);
860
+ tabularReport.seriesData = __Data;
861
+ tabularReport.dataRender = __Data1;
862
+ const integerArrayValues = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length).fill(0);
863
+ this.getIntegerIndex(integerArrayValues, tabularReport);
864
+ tabularReport.grandTotal = grandTotal;
865
+ tabularReport.grandTotal = tabularReport.grandTotal.concat(sideTotal1);
866
+ tabularReport.sideGrandTotal = sideTotal1.concat(countTotal);
867
+ tabularReport.countsTotal = new Array();
868
+ tabularReport.countsTotal = countsGrandTotal.concat(countTotal);
869
+ return tabularReport;
870
+ }
871
+ /** to get series data with row count
872
+ *
873
+ * @param TabularReport
874
+ *
875
+ */
876
+ rowCountData(tabularReport) {
877
+ const countGrandTotal = Array(tabularReport.cloneDataCount.length * tabularReport.integerArray.length + tabularReport.cloneDataCount.length).fill(0);
878
+ const total = tabularReport.colGrouping.length > 1 ? Array(tabularReport.secondColSeries.length).fill(0) : Array(tabularReport.colGrouping[0].uniqueSeries.length).fill(0);
879
+ tabularReport.matrix.attributes[0].series.forEach((element, index) => {
880
+ let countDataSeries = [];
881
+ if (tabularReport.dataRender.get(index) && tabularReport.integerArray.length !== 0) {
882
+ let data = [];
883
+ countDataSeries = tabularReport.seriesData.get(index).slice(0);
884
+ data = (this.getSeriesWithCount(countDataSeries, tabularReport.integerArray, tabularReport.countsData.get(index), tabularReport));
885
+ tabularReport.dataRender.set(index, data);
886
+ }
887
+ let x = 0;
888
+ countDataSeries.forEach((element1, index1) => {
889
+ if (this.cloneIntegerCount[index1] === 'count' || index1 === countDataSeries.length) {
890
+ total[x] = (total[x] + element1);
891
+ x++;
892
+ }
893
+ countGrandTotal[index1] = (countGrandTotal[index1] + element1);
894
+ });
895
+ });
896
+ tabularReport.grandTotal2 = tabularReport.grandTotal.slice(0);
897
+ let integerArrayIndex = tabularReport.integerArray.length - 1;
898
+ let index = 0;
899
+ while (integerArrayIndex < countGrandTotal.length) {
900
+ tabularReport.grandTotal2.splice(integerArrayIndex + 1, 0, total[index]);
901
+ integerArrayIndex = integerArrayIndex + tabularReport.integerArray.length + 1;
902
+ index++;
903
+ }
904
+ tabularReport.grandTotal2.splice((tabularReport.grandTotal2.length - tabularReport.integerArray.length), tabularReport.integerArray.length);
905
+ tabularReport.grandTotal2 = tabularReport.grandTotal2.concat(tabularReport.sideGrandTotal);
906
+ let x = 0;
907
+ tabularReport.countIntegerIndexing = tabularReport.integerIndexing.slice(0);
908
+ while (x < countGrandTotal.length) {
909
+ tabularReport.countIntegerIndexing.splice(x + tabularReport.integerArray.length, 0, null);
910
+ x = x + tabularReport.integerArray.length + 1;
911
+ }
912
+ tabularReport.countTotalIntegerIndexing = [];
913
+ tabularReport.countTotalIntegerIndexing = tabularReport.gTotalIntegerIndexing.slice(0);
914
+ let m = 0;
915
+ while (m < tabularReport.gTotalIntegerIndexing.length) {
916
+ tabularReport.countTotalIntegerIndexing.splice(m + tabularReport.integerArray.length, 0, null);
917
+ m = m + tabularReport.integerArray.length + 1;
918
+ }
919
+ if (tabularReport.subTotal) {
920
+ tabularReport = tabularReport.subTotalToggle(tabularReport);
921
+ }
922
+ return tabularReport;
923
+ }
924
+ getIntegerIndex(integerArrayValues, tabularReport) {
925
+ if (tabularReport.matrix.attributes[0].series.length > 0) {
926
+ let arrayIndex = 0;
927
+ while (arrayIndex < tabularReport.seriesData.get(0).length) {
928
+ let index1 = arrayIndex;
929
+ tabularReport.integerData.forEach((element, index) => {
930
+ integerArrayValues.splice(index1, 1, element);
931
+ index1++;
932
+ });
933
+ arrayIndex = arrayIndex + tabularReport.integerData.length;
934
+ }
935
+ tabularReport.integerIndexing = integerArrayValues;
936
+ tabularReport.gTotalIntegerIndexing = integerArrayValues.concat(tabularReport.integerData);
937
+ }
938
+ return tabularReport;
939
+ }
940
+ tableClickEvent(tabularReport) {
941
+ const tabularProperty = new ElementProperty();
942
+ if (tabularReport instanceof TabularReport) {
943
+ tabularProperty.page = null;
944
+ tabularProperty.element = tabularReport;
945
+ }
946
+ else {
947
+ tabularProperty.page = tabularReport;
948
+ }
949
+ this._tableClickEvent.emit(tabularProperty);
950
+ }
951
+ }
952
+ TabularReportService.ɵfac = function TabularReportService_Factory(t) { return new (t || TabularReportService)(i0.ɵɵinject(i1.HttpClient)); };
953
+ TabularReportService.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: TabularReportService, factory: TabularReportService.ɵfac, providedIn: 'root' });
954
+ (function () { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(TabularReportService, [{
955
+ type: Injectable,
956
+ args: [{
957
+ providedIn: 'root'
958
+ }]
959
+ }], function () { return [{ type: i1.HttpClient }]; }, null); })();
960
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1yZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1hcHAtY29tbW9uLWxpYi9zcmMvbGliL2VubGlnaHRlbi1saWIvcmVwb3J0L3RhYnVsYXItcmVwb3J0L3RhYnVsYXItcmVwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQU1qRCxNQUFNLE9BQU8sb0JBQW9CO0lBTS9CLFlBQW9CLFdBQXVCO1FBQXZCLGdCQUFXLEdBQVgsV0FBVyxDQUFZO1FBSjNDLGVBQVUsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVuRCxxQkFBZ0IsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzNDLHNCQUFpQixHQUFDLEtBQUssRUFBTyxDQUFDO0lBRy9CLENBQUM7SUFDRDs7OztPQUlHO0lBQ0gsU0FBUyxDQUFDLGFBQTRCO1FBQ3BDLGFBQWEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBQyxLQUFLLEVBQUUsRUFBRTtZQUN4RCx1Q0FBdUM7WUFDekMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1lBQ3hDLElBQUcsS0FBSyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsT0FBTyxFQUFDO2dCQUNsQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDckM7aUJBQUk7Z0JBQ0gsK0JBQStCO2dCQUMvQixJQUFJLFVBQVUsR0FBQyxDQUFDLENB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QUFNLEVBQUMsQ0FBQyxFQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUM1QyxNQUFNLEVBQUUsQ0FBQztnQkFDWCxDQUFDLENBQUMsQ0FBQztnQkFDSCxVQUFVLEdBQUMsVUFBVSxHQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDO2FBQ3hEO1lBQ0QsYUFBYSxDQUFDLGVBQWUsR0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxhQUFhLENBQUMscUJBQXFCLEdBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4RjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFDRCxlQUFlLENBQUMsYUFBa0I7UUFDaEMsTUFBTSxlQUFlLEdBQUUsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUM3QyxJQUFHLGFBQWEsWUFBWSxhQUFhLEVBQUM7WUFDMUMsZUFBZSxDQUFDLElBQUksR0FBQyxJQUFJLENBQUM7WUFDMUIsZUFBZSxDQUFDLE9BQU8sR0FBQyxhQUFhLENBQUM7U0FDckM7YUFDRztZQUNGLGVBQWUsQ0FBQyxJQUFJLEdBQUMsYUFBYSxDQUFDO1NBQ3BDO1FBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUM5QyxDQUFDOzt3RkFoZ0NZLG9CQUFvQjswRUFBcEIsb0JBQW9CLFdBQXBCLG9CQUFvQixtQkFGbkIsTUFBTTt1RkFFUCxvQkFBb0I7Y0FIaEMsVUFBVTtlQUFDO2dCQUNWLFVBQVUsRUFBRSxNQUFNO2FBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQXR0cmlidXRlRGF0YSB9IGZyb20gJy4uLy4uL2ZpZWxkcy9hdHRyaWJ1dGUtZGF0YSc7XG5pbXBvcnQgeyBFbGVtZW50UHJvcGVydHkgfSBmcm9tICcuLi8uLi9wcm9wZXJ0eS9lbGVtZW50LXByb3BlcnR5JztcbmltcG9ydCB7IFRhYnVsYXJSZXBvcnQgfSBmcm9tICcuL3RhYnVsYXItcmVwb3J0JztcblxuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBUYWJ1bGFyUmVwb3J0U2VydmljZSB7XG5cbiAgZGF0YVJlbmRlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIGF0dHJBcnJheTogQXJyYXk8QXR0cmlidXRlRGF0YT47XG4gIF90YWJsZUNsaWNrRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgY2xvbmVJbnRlZ2VyQ291bnQ9QXJyYXk8YW55PigpO1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50KXtcblxuICB9XG4gIC8qKnRvIGNvdW50IGRhdGEgY291bnQgaW4gYSBzZXJpZXNcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGdyb3VwRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSxpbmRleCkgPT4ge1xuICAgICAgICAvLyB3aGVuIHJvdyBzcGFuIGlzIHRydWUgYW5kIGluZGV4IGlzIDBcbiAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEgPSBuZXcgQXJyYXk8bnVtYmVyPigpO1xuICAgICAgICBpZihpbmRleCA9PT0gMCB8fCBhdHRyaWJ1dGUuY29sU3Bhbil7XG4gICAgICAgICAgdGhpcy5nZXRGaXJzdFJvd0dyb3VwaW5nKGF0dHJpYnV0ZSk7XG4gICAgICAgIH1lbHNle1xuICAgICAgICAgIC8vIHdoZW4gaW5kZXggaXMgZ3JlYXRlciB0aGFuIDBcbiAgICAgICAgICBsZXQgc3RhcnRJbmRleD0wO1xuICAgICAgICAgIGNvbnN0IGNsb25lU2VyaWVzPVtdO1xuICAgICAgICAgIGxldCBnZEluZGV4PTA7XG4gICAgICAgICAgd2hpbGUoc3RhcnRJbmRleDw9ICh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhLmxlbmd0aC0xKSl7XG4gICAgICAgICAgICBjb25zdCBkYXRhU2VyaWVzPVtdO1xuICAgICAgICAgICAgZ2RJbmRleD10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhW3N0YXJ0SW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc3ViU2VyaWVzID0gYXR0cmlidXRlLnNlcmllcy5zbGljZShzdGFydEluZGV4LHN0YXJ0SW5kZXgrZ2RJbmRleCk7XG4gICAgICAgICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLGRhdGEpKTtcbiAgICAgICAgICAgICAgLy8gdG8gcmVwbGFjZSByZXBlYXRlZCBkYXRhXG4gICAgICAgICAgICAgIGlmKGRhdGFTZXJpZXMuaW5jbHVkZXMoZGF0YSkpe1xuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgICAgICBjbG9uZVNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgZGF0YVNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgICAgICAgIGNsb25lU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXR0cmlidXRlLmNsb25lR3JvdXBEYXRhPWF0dHJpYnV0ZS5ncm91cERhdGEuc2xpY2UoMCk7XG4gICAgICAgICAgICBzdGFydEluZGV4PXN0YXJ0SW5kZXgrZ2RJbmRleDtcblxuICAgICAgICAgIH1cbiAgICAgICAgICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9Y2xvbmVTZXJpZXM7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsICYmIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gICAgfVxuICAgIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xuICB9XG5cbiAgLyoqIHRvIGNvdW50IGRhdGEgY291bnQgaW4gYSBzZXJpZXNcbiAgICpcbiAgICogQHBhcmFtIHN0cmluZ1xuICAgKiBAcGFyYW0gYW55XG4gICAqXG4gICAqL1xuICBnZXRSb3dTcGFuQ291bnQoc2VyaWVzOiBBcnJheTxhbnk+ICxrZXk6IGFueSk6IG51bWJlciB7XG4gICAgcmV0dXJuICBzZXJpZXMuZmlsdGVyKHN0ciA9PiBzdHIgPT09IGtleSkubGVuZ3RoO1xuICB9XG5cbiAgLyoqIHRvIGNvdW50IGZpcnN0IHJvdyBncm91cGluZyBkYXRhIGNvdW50XG4gICAqXG4gICAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gICAqXG4gICAqL1xuICBnZXRGaXJzdFJvd0dyb3VwaW5nKGF0dHJpYnV0ZTogQXR0cmlidXRlRGF0YSk6IEF0dHJpYnV0ZURhdGF7XG4gICAgY29uc3Qgc2VyaWVzPVtdO1xuICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgIGlmKHNlcmllcy5pbmNsdWRlcyhlbGVtZW50KSl7XG4gICAgICAgIHNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgfVxuICAgICAgZWxzZXtcbiAgICAgIHNlcmllcy5wdXNoKGVsZW1lbnQpO1xuICAgICAgdW5pcXVlU2VyaWVzLnB1c2goZWxlbWVudCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXR0cmlidXRlLmNsb25lU2VyaWVzPXNlcmllcztcbiAgICBhdHRyaWJ1dGUudW5pcXVlU2VyaWVzPXVuaXF1ZVNlcmllcztcbiAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChhdHRyaWJ1dGUuc2VyaWVzLGRhdGEpKTtcbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgc2VuZEVtYWlsKGVtYWlsRHRvOiBhbnkpOiBQcm9taXNlPGFueT57XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2h0dHBDbGllbnQucG9zdCgncmVwb3J0cy9leHBvcnQnLCBlbWFpbER0bykuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICAgICAgfSwgcmVqZWN0KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKnRvIGNvdW50IGRhdGEgY291bnQgYW5kIHNldCBjbG9uZSBkYXRhIHdoaWxlIGNvbHVtbiBncm91cGluZyBpcyBhcHBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gICAqXG4gICAqL1xuICBjb2x1bW5EYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5yb3dTcGFuKHRhYnVsYXJSZXBvcnQpO1xuICAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcuZm9yRWFjaCgoYXR0cikgPT4ge1xuICAgICAgaWYoIWF0dHIudW5pcXVlU2VyaWVzKXtcbiAgICAgICAgaWYoIWF0dHIudW5pcXVlU2VyaWVzKXtcbiAgICAgICAgICBjb25zdCBzZXJpZXM9W107XG4gICAgICAgICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgICAgICAgIGF0dHIuc2VyaWVzLmZvckVhY2goKF9lbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoX2VsZW1lbnQpKXtcbiAgICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goX2VsZW1lbnQpO1xuICAgICAgICAgICAgdW5pcXVlU2VyaWVzLnB1c2goX2VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5zb3J0KCk7XG4gICAgICAgICAgYXR0ci51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVTZXJpZXM9W107XG4gICAgICAgICAgYXR0ci5zZXJpZXMuZm9yRWFjaCgoc2VyaWVzRGF0YSkgPT4ge1xuICAgICAgICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKHNlcmllc0RhdGEpKXtcbiAgICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goc2VyaWVzRGF0YSk7XG4gICAgICAgICAgICB1bmlxdWVTZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICB1bmlxdWVTZXJpZXMuc29ydCgpO1xuICAgICAgICAgIGF0dHIudW5pcXVlU2VyaWVzPXVuaXF1ZVNlcmllcztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG5cblxuICB9XG4gIC8qKnRvIGNvdW50IHJvd3MgZ3JvdXAgZGF0YSB3aGVuIGNvbHVtbiBncm91cGluZyBpcyBhcHBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gICAqXG4gICAqL1xuICByb3dTcGFuKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5PVtdO1xuICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4PVtdO1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRJbnRlZ2VyQXJyYXkodGFidWxhclJlcG9ydCk7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoPT09MCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50PXRydWU7XG4gICAgfVxuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICBpZihpbmRleD09PTAgJiYgYXR0cmlidXRlLnJvd1NwYW4pe1xuICAgICAgICBjb25zdCBzZXJpZXM9W107XG4gICAgICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICAgICAgYXR0cmlidXRlLnNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKGRhdGEpKXtcbiAgICAgICAgICAgIHNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIHNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5wdXNoKGRhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1zZXJpZXM7XG4gICAgICAgIGF0dHJpYnV0ZS51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoYXR0cmlidXRlLnNlcmllcyxkYXRhKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YTtcbiAgICAgIH1cbiAgICAgIGlmKGluZGV4PT09MSAmJiBhdHRyaWJ1dGUucm93U3Bhbil7XG4gICAgICAgIGF0dHJpYnV0ZT10aGlzLmdldENsb25lRGF0YSh0YWJ1bGFyUmVwb3J0LGluZGV4LGF0dHJpYnV0ZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKnRvIHNldCBoZWFkZXJzIHNlY3Rpb24gb2YgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBBdHRyaWJ1dGVEYXRhXG4gKlxuICovXG5uZXdEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQgLGF0dHI6IEF0dHJpYnV0ZURhdGEpOiBUYWJ1bGFyUmVwb3J0e1xuY29uc3QgY291bnQ9KHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcuaW5kZXhPZihhdHRyKSk7XG50YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGE9IG5ldyBNYXA8c3RyaW5nLGFueT4oKTtcbnRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzPW5ldyBBcnJheSgpO1xudGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcz1uZXcgQXJyYXkoKTtcbmNvbnN0IF9pbmRleD10YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aCsoY291bnQpO1xuaWYoY291bnQ9PT0xKXtcbiAgdGFidWxhclJlcG9ydD10aGlzLmdldFNlY29uZENvbERhdGEodGFidWxhclJlcG9ydCxfaW5kZXgpO1xuXG59XG5cblxuICBpZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD09PTEpe1xuICAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICB9KTtcbiAgbGV0IG09MDtcbiAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudD1bXTtcbiAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheT1bXTtcbiAgd2hpbGUobTwodGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKSl7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5wdXNoKGVsZW1lbnQpO1xuICAgIH0pO1xuICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQucHVzaChtKTtcblxuICAgIG0rKztcbiAgfVxufVxuaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg+MSAmJiBjb3VudD09PTEpe1xuICBsZXQgX2NvdW50PTA7XG4gIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMV0udW5pcXVlU2VyaWVzLmZvckVhY2goKHNlcmllcykgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICB9KTtcbiAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgdGFidWxhclJlcG9ydC5jb2xEYXRhLnNldChzZXJpZXMsdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKih0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykubGVuZ3RoKSk7XG4gICAgX2NvdW50Kz0odGFidWxhclJlcG9ydC5zZWNvbmRDb2xEYXRhLmdldChzZXJpZXMpLmxlbmd0aCk7XG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50PVtdO1xuICBsZXQgY2xvbmVEYXRhSW5kZXg9MDtjb25zdCBkYXRhMTIzPVtdO1xuICB3aGlsZShjbG9uZURhdGFJbmRleDxfY291bnQpe1xuICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQucHVzaChjbG9uZURhdGFJbmRleCk7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgZGF0YTEyMy5wdXNoKGVsZW1lbnQpO1xuXG4gICAgfSk7XG4gICAgY2xvbmVEYXRhSW5kZXgrKztcbiAgfVxuICB9XG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuICAvKip0byBnZXQgZGF0YSByZW5kZXIgdmFsdWUgd2hlbiBzaW5nbGUgY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGRhdGFGYWN0b3J5KHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCByQ291bnQ9dGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgtMTtcbiAgY29uc3QgY0NvdW50PXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoO1xuICBsZXQgY291bnQ9MDtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcblxuICBsZXQgaT0wO1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YT1bXTtcbiAgY29uc3Qgc2lkZVRvdGFsMT1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gIHdoaWxlKGk8dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoKXtcbiAgICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoX2RhdGEpID0+IHtcbiAgICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLF9kYXRhKSk7XG4gICAgfSk7XG4gICAgaT1pK2dyb3VwRGF0YTtcbiAgfVxuXG5cbiAgaT0wO1xuICBjb25zdCBfX0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuICBjb25zdCBfX0RhdGExPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcbiAgbGV0IGZpcnN0Q29sdW1uSW5kZXg9MDtcbiAgY29uc3QgZ3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICBjb25zdCBjb3VudHNHcmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgbGV0IGNvdW50VG90YWw9MDtcbiAgd2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICAgIGxldCBkYXRhU2VyaWVzPVtdOyBsZXQgY291bnREYXRhU2VyaWVzPVtdO1xuICAgIGNvbnN0IGNvdW50QXJyYXk9QXJyYXkodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgIGNvbnN0IGlhcnI9W107XG4gICAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgIGNvbnN0IGRhdGFTdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgY29uc3QgdW5pcXVlU2VyaWVzPSBbLi4ubmV3IFNldCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcyldO1xuICAgIGNvbnN0IGNvdW50R3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgbGV0IGNvdW50RGF0YUluZGV4PWk7XG4gICAgY29uc3QgZW5kPWkrY291bnRHcm91cERhdGE7XG4gICAgdW5pcXVlU2VyaWVzLnNvcnQoKTtcbiAgICB3aGlsZShjb3VudERhdGFJbmRleDxlbmQpe1xuICAgICAgdW5pcXVlU2VyaWVzLmZvckVhY2goKGVsZW1lbnQsZEluZGV4KSA9PiB7XG4gICAgICAgIGlmKGVsZW1lbnQ9PT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tjb3VudERhdGFJbmRleF0pe1xuICAgICAgICAgIGNvdW50QXJyYXkuc3BsaWNlKGRJbmRleCwxLHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhW2NvdW50RGF0YUluZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgY291bnREYXRhSW5kZXg9Y291bnREYXRhSW5kZXgrdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGFbY291bnREYXRhSW5kZXhdO1xuICAgIH1cbiAgICAgICAgICAgZGF0YVNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCByb3dDb3VudD1bXTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd3NEYXRhPVtdO1xuICAgICAgICAgIGxldCBzdWJTZXJpZXNJbmRleD0wO1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gICAgICAgICAgY29uc3QgZGF0YVNlcmllc1ZhbHVlcz1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICAgIHdoaWxlKHN1YlNlcmllc0luZGV4PHN1YlNlcmllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJvd0NvdW50LnB1c2goc3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd3NEYXRhLnB1c2goZGF0YVN1YlNlcmllc1tzdWJTZXJpZXNJbmRleF0pO1xuICAgICAgICAgICAgaWFyci5wdXNoKGZpcnN0Q29sdW1uSW5kZXgpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuZ2V0Zmlyc3RDb2xJbnRlZ2VyRGF0YSh0YWJ1bGFyUmVwb3J0LGludCxmaXJzdENvbHVtbkluZGV4LHN1YlNlcmllc0luZGV4LHN1YlNlcmllcyxkYXRhU2VyaWVzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZmlyc3RDb2x1bW5JbmRleD1maXJzdENvbHVtbkluZGV4K3N1YlNlcmllc1tzdWJTZXJpZXNJbmRleF07XG4gICAgICAgICAgICBzdWJTZXJpZXNJbmRleD1zdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNbc3ViU2VyaWVzSW5kZXhdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGxldCBpbmRleD0wO1xuICAgICAgICAgIGlhcnIuZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhPSB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tpbnRdO1xuICAgICAgICAgICAgICBsZXQgZGF0YUluZGV4PXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmluZGV4T2YoZGF0YSk7XG4gICAgICAgICAgICAgIGRhdGFJbmRleD1kYXRhSW5kZXgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoO1xuICAgICAgICAgICAgICBjb25zdCBhcnI9ZGF0YVNlcmllcy5zbGljZShpbmRleCx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgraW5kZXgpO1xuICAgICAgICAgICAgICBsZXQgIHZhbHVlPWRhdGFJbmRleDtcbiAgICAgICAgICAgICAgYXJyLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzVmFsdWVzLnNwbGljZSh2YWx1ZSwxLGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHZhbHVlICsrO1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBpbmRleD1pbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG5cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCBzaWRlVG90YWw9dGhpcy5nZXRTaWRlVG90YWwoZGF0YVNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSk7XG4gICAgICAgICAgZGF0YVNlcmllcz1kYXRhU2VyaWVzVmFsdWVzO1xuICAgICAgICAgIGNvdW50RGF0YVNlcmllcz1kYXRhU2VyaWVzVmFsdWVzLnNsaWNlKDApO1xuICAgICAgICAgIGNvbnN0IG1pbj1BcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgY29uc3QgbWF4PUFycmF5PG51bWJlcj4oKTtcblxuICAgICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCxpbmQpID0+IHtcbiAgICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kXS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgICBtaW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudDxncmFuZFRvdGFsW2luZF0pe1xuICAgICAgICAgICAgICAgIGdyYW5kVG90YWxbaW5kXT1lbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgICBtYXgucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgICAgaWYoZWxlbWVudD5ncmFuZFRvdGFsW2luZF0pe1xuICAgICAgICAgICAgICAgIGdyYW5kVG90YWxbaW5kXT1lbGVtZW50O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPShncmFuZFRvdGFsW2luZF0rZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2lkZVRvdGFsLmZvckVhY2goKGVsZW1lbnQsaW5kZXgxKSA9PiB7XG4gICAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsZGF0YVNlcmllc1ZhbHVlcy5sZW5ndGgvdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWluKG1pbik7XG4gICAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPHNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ01heCcpKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudE1heChtYXgpO1xuICAgICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXT5zaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT1zaWRlVG90YWxbaW5kZXgxXTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIGNvdW50c0dyYW5kVG90YWxcbiAgICAgICAgICBjb3VudEFycmF5LmZvckVhY2goKGNvdW50RGF0YSxjb3VudEluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdPShjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdK2NvdW50RGF0YSk7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9Z3JhbmRUb3RhbDtcbiAgICAgICAgICBjb3VudFRvdGFsPWNvdW50VG90YWwrcm93Q291bnQucmVkdWNlKChhMiwgYjIpID0+IGEyICsgYjIsIDApO1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPjEpe1xuICAgICAgICAgICAgX19EYXRhLnNldChpLGRhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChpLHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoaSxzaWRlVG90YWwpO1xuICAgICAgICAgICAgX19EYXRhMS5zZXQoaSxjb3VudERhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5yb3dDb3VudEluZGV4LnNldChpLHJvd0NvdW50KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoaSxjb3VudEFycmF5KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YUluZGV4U1RvdGFsLnNldChjb3VudCxpKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgIF9fRGF0YS5zZXQoY291bnQsZGF0YVNlcmllcyk7XG4gICAgICAgICAgICBfX0RhdGExLnNldChjb3VudCxjb3VudERhdGFTZXJpZXMpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChjb3VudCxyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGNvdW50LHNpZGVUb3RhbCk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGNvdW50LHJvd0NvdW50KTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoY291bnQsY291bnRBcnJheSk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgfVxuXG4gICAgICBjb3VudCsrO1xuICAgIGk9aStncm91cERhdGE7XG5cbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGg+MCl7XG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRleF0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbFtpbmRleF09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuICB9KTtcbiAgfVxuICBzaWRlVG90YWwxLmZvckVhY2goKGVsZW1lbnQsaW5kZXhEKSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXhEXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgc2lkZVRvdGFsMVtpbmRleERdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsY291bnQpO1xuICAgIH1cblxuICB9KTtcbiAgdGFidWxhclJlcG9ydC5zZXJpZXNEYXRhPV9fRGF0YTtcbiAgdGhpcy5kYXRhUmVuZGVyLmVtaXQoX19EYXRhKTtcbiAgY29uc3QgaW50ZWdlckFycmF5VmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzLHRhYnVsYXJSZXBvcnQpO1xuICB0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXI9X19EYXRhMTtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5jb25jYXQoc2lkZVRvdGFsMSk7XG4gIHRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWw9c2lkZVRvdGFsMS5jb25jYXQoY291bnRUb3RhbCk7XG4gIHRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9bmV3IEFycmF5PG51bWJlcj4oKTtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNUb3RhbD1jb3VudHNHcmFuZFRvdGFsLmNvbmNhdChjb3VudFRvdGFsKTtcbn1cblxuICBpZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD09PTIpe1xuICAgIHRhYnVsYXJSZXBvcnQ9dGhpcy5nZXRTZWNvbmRDb2x1bW4odGFidWxhclJlcG9ydCk7XG4gICAgfVxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG5cbiAgaWYodGFidWxhclJlcG9ydC5zdWJUb3RhbCAmJiAhdGFidWxhclJlcG9ydC5yb3dDb3VudCl7XG4gICAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gIH1cblxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuY291bnRHcmFuZFRvdGFsQXZnKGRhdGE6IG51bWJlcixjb3VudDogbnVtYmVyKTogbnVtYmVye1xuICByZXR1cm4gKHBhcnNlRmxvYXQoKGRhdGEvY291bnQpLnRvRml4ZWQoMikpKTtcbn1cblxuLy8gY291bnRHcmFuZFRvdGFsTWluKHNlcmllczopXG5cbi8qKiByZXR1cm5zIHN1bSBvZiBpbnRlZ2VyICBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudFN1bShzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvcihjb25zdCBkYXRhIG9mIHNlcmllcyl7XG4gICAgdG90YWwgKz0gTnVtYmVyKGRhdGEpO1xuICB9XG4gIHJldHVybiB0b3RhbDtcbn1cblxuLyoqIHJldHVybnMgQXZlcmFnZSBvZiBpbnRlZ2VyICBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudEF2ZyhzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIGxldCB0b3RhbCA9IDA7XG4gIGZvcihjb25zdCBkYXRhIG9mIHNlcmllcyl7XG4gICAgdG90YWwgKz0gTnVtYmVyKGRhdGEpO1xuICB9XG4gIHJldHVybiAocGFyc2VGbG9hdCgodG90YWwvc2VyaWVzLmxlbmd0aCkudG9GaXhlZCgyKSkpO1xufVxuXG4vKiogcmV0dXJucyBNYXggb2YgaW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBmb3IgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5jb3VudE1heChzZXJpZXM6IEFycmF5PG51bWJlcj4pOiBudW1iZXJ7XG4gIHJldHVybiAgTWF0aC5tYXgoLi4uc2VyaWVzKTtcbn1cblxuLyoqIHJldHVybnMgbWluIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50TWluKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgcmV0dXJuICBNYXRoLm1pbiguLi5zZXJpZXMpO1xufVxuXG4vKiogcmV0dXJucyBjb3VudCBvZiB1bmlxdWUgZGF0YSBmb3IgIGludGVnZXIgY29sdW1ucyBzdWJTZXJpZXMgaW4gY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRVbmlxdWUoc2VyaWVzOiBBcnJheTxhbnk+KTogbnVtYmVye1xuICByZXR1cm4gWy4uLm5ldyBTZXQoc2VyaWVzKV0ubGVuZ3RoO1xuXG59XG5cbi8qKiB0byBhZGQgaW50ZWdlciBjb2x1bW4gaW4gSW50ZWdlckFycmF5XG4gKlxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqXG4gKi9cbmdldEludGVnZXJBcnJheSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgY29uc3QgZGF0YT1bXTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSxpbmRleCkgPT4ge1xuICAgICAgaWYoICFhdHRyaWJ1dGUucm93U3BhbiAmJiAhYXR0cmlidXRlLmNvbFNwYW4pe1xuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dVbmlxdWVDb3VudClcbiAgICAgICAge1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgndW5pcXVlICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4LnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYoYXR0cmlidXRlLnR5cGU9PT0naW50JyAmJiAhYXR0cmlidXRlLnJvd1NwYW4gJiYgIWF0dHJpYnV0ZS5jb2xTcGFuKXtcbiAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXgucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd1N1bSlcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdTdW0gJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93QXZnKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ0F2ZyAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dNYXgpXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgnTWF4ICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd01pbilcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdNaW4gJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGE9ZGF0YTtcblxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqIHRvIGNvdW50IGNsb25lIGRhdGEgZm9yIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIGF0dHJpYnV0ZURhdGFcbiAqXG4gKi9cbmdldENsb25lRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0LCBpbmRleDogbnVtYmVyLGF0dHJpYnV0ZTogQXR0cmlidXRlRGF0YSk6IEF0dHJpYnV0ZURhdGF7XG4gIGxldCBzdGFydEluZGV4PTA7XG4gIGNvbnN0IGNsb25lU2VyaWVzPVtdO1xuICBsZXQgZ2RJbmRleD0wO1xuICB3aGlsZShzdGFydEluZGV4PD0gKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGEubGVuZ3RoLTEpKXtcbiAgICBjb25zdCBkYXRhU2VyaWVzPVtdO1xuICAgIGdkSW5kZXg9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbmRleCAtIDFdLmdyb3VwRGF0YVtzdGFydEluZGV4XTtcbiAgICBjb25zdCBzdWJTZXJpZXMgPSBhdHRyaWJ1dGUuc2VyaWVzLnNsaWNlKHN0YXJ0SW5kZXgsc3RhcnRJbmRleCtnZEluZGV4KTtcbiAgICBzdWJTZXJpZXMuZm9yRWFjaCgoc3ViU2VyaWVzRGF0YSkgPT4ge1xuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxzdWJTZXJpZXNEYXRhKSk7XG4gICAgICAvLyB0byByZXBsYWNlIHJlcGVhdGVkIHN1YlNlcmllc0RhdGFcbiAgICAgIGlmKGRhdGFTZXJpZXMuaW5jbHVkZXMoc3ViU2VyaWVzRGF0YSkpe1xuICAgICAgICBkYXRhU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgIGNsb25lU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgICBkYXRhU2VyaWVzLnB1c2goc3ViU2VyaWVzRGF0YSk7XG4gICAgICAgIGNsb25lU2VyaWVzLnB1c2goc3ViU2VyaWVzRGF0YSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgYXR0cmlidXRlLmNsb25lR3JvdXBEYXRhPWF0dHJpYnV0ZS5ncm91cERhdGEuc2xpY2UoMCk7XG4gICAgc3RhcnRJbmRleD1zdGFydEluZGV4K2dkSW5kZXg7XG5cbiAgfVxuICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9Y2xvbmVTZXJpZXM7XG5cbiAgcmV0dXJuIGF0dHJpYnV0ZTtcbn1cbi8qKiB0byBjb3VudCBjbG9uZSBkYXRhIGZvciBkb3VibGUgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqXG4gKi9cbmdldFNlY29uZENvbERhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCwgX2luZGV4OiBudW1iZXIpOiBUYWJ1bGFyUmVwb3J0e1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleC0xXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgodW5pcXVlKSA9PiB7XG4gICAgY29uc3QgZGF0YT1bXTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleC0xXS5zZXJpZXMuZm9yRWFjaCgoc2VyaWVzLGluZGV4KSA9PiB7XG4gICAgICAgIGlmKHVuaXF1ZT09PXNlcmllcyl7XG4gICAgICAgICAgaWYoIWRhdGEuaW5jbHVkZXModGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tfaW5kZXhdLnNlcmllc1tpbmRleF0pKXtcbiAgICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleF0uc2VyaWVzW2luZGV4XSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4XS5zZXJpZXNbaW5kZXhdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgLy8gdGFidWxhclJlcG9ydC5zZWNvbmRTZXJpZXM9XG4gICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuc2V0KHVuaXF1ZSxkYXRhKTtcbiAgICAgIGRhdGEuZm9yRWFjaCgoKSA9PiB7XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMucHVzaCh1bmlxdWUpO1xuXG4gICAgICB9KTtcbiAgICB9KTtcbiAgIHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzPVsuLi5uZXcgU2V0KHRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMpXTtcbiAgIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG4vKiogY3JlYXRlIHNlcmllcyB3aXRoIHJvdyBjb3VudFxuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2VyaWVzV2l0aENvdW50KHN3YXAxOiBBcnJheTxudW1iZXI+LGludGVnZXJBcnJheTogQXJyYXk8YW55Pixyb3dDb3VudDogQXJyYXk8bnVtYmVyPix0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogQXJyYXk8bnVtYmVyPntcbiAgbGV0IGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheS5sZW5ndGgtMTsgbGV0IGRhdGFJbmRleD0wO1xuIHRoaXMuY2xvbmVJbnRlZ2VyQ291bnQ9QXJyYXkoc3dhcDEubGVuZ3RoKS5maWxsKDApO1xuIGNvbnN0IGNvdW50SW5kZXg9QXJyYXkoc3dhcDEubGVuZ3RoKS5maWxsKDApO1xuICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleDxzd2FwMS5sZW5ndGgpe1xuICAgIGlmKHN3YXAxW2ludGVnZXJBcnJheUluZGV4XT4wKXtcbiAgICAgIGNvdW50SW5kZXguc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxudWxsKTtcbiAgICB9XG4gICAgZWxzZXtcbiAgICAgIGNvdW50SW5kZXguc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxudWxsKTtcbiAgICB9XG4gICAgc3dhcDEuc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCxyb3dDb3VudFtkYXRhSW5kZXhdKTtcbiAgICB0aGlzLmNsb25lSW50ZWdlckNvdW50LnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDAsJ2NvdW50Jyk7XG4gICAgaWYoaW50ZWdlckFycmF5SW5kZXg8dGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5sZW5ndGgpe1xuICAgICAgdGhpcy5jbG9uZUludGVnZXJDb3VudC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwxLCdjb3VudCcpO31cbiAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoKzE7XG4gICAgZGF0YUluZGV4Kys7XG4gIH1cbiAgcmV0dXJuIHN3YXAxO1xufVxuXG4vKiogY291bnQgSW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBEYXRhIGZvciBzaW5nbGUgY29sdW1uIGdyb3VwaW5nXG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRmaXJzdENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsaW50OiBudW1iZXIsZmlyc3RDb2x1bW5JbmRleDogbnVtYmVyLGo6IG51bWJlcixzdWJTZXJpZXM6IEFycmF5PGFueT4sc3dhcDogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj57XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KXtcbiAgICBzd2FwLnB1c2godGhpcy5nZXRVbmlxdWUodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1N1bSl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRTdW0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd0F2Zyl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRBdmcodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01heCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNYXgodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01pbil7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNaW4odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShmaXJzdENvbHVtbkluZGV4LGZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW2pdKSkpO1xuICB9XG5cbiAgcmV0dXJuIHN3YXA7XG59XG5cbi8qKiBjb3VudCBJbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIERhdGEgZm9yIGRvdWJsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFNlY29uZENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsaW50OiBudW1iZXIsc2Vjb25kQ29sdW1uSW5kZXg6IG51bWJlcixuOiBudW1iZXIsc3dhcDogQXJyYXk8bnVtYmVyPix4eXo6IEFycmF5PGFueT4pOiBBcnJheTxudW1iZXI+e1xuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dVbmlxdWVDb3VudCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuZ2V0VW5pcXVlKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1N1bSl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRTdW0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93QXZnKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudEF2Zyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dNYXgpe1xuICAgIHN3YXAucHVzaCh0aGlzLmNvdW50TWF4KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01pbil7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNaW4odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cblxuICByZXR1cm4gc3dhcDtcbn1cblxuXG4vKiogY291bnQgaG9yaXpvbnRhbCBncmFuZCBUb3RhbFxuICpcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTaWRlVG90YWwoc3dhcDogQXJyYXk8bnVtYmVyPixpbnRlZ2VyQXJyYXk6IEFycmF5PGFueT4pOiBBcnJheTxudW1iZXI+e1xuICBsZXQgdG90YWxJbmRleD0wOyBsZXQgaW50ZWdlckFycmF5SW5kZXg9MDtcbiAgY29uc3Qgc2lkZVRvdGFsPUFycmF5KGludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG4gIHdoaWxlKHRvdGFsSW5kZXg8aW50ZWdlckFycmF5Lmxlbmd0aCl7XG4gICAgaW50ZWdlckFycmF5SW5kZXg9dG90YWxJbmRleDtcbiAgICBzaWRlVG90YWxbdG90YWxJbmRleF09c3dhcFtpbnRlZ2VyQXJyYXlJbmRleF07XG4gICAgd2hpbGUoaW50ZWdlckFycmF5SW5kZXgraW50ZWdlckFycmF5Lmxlbmd0aDxzd2FwLmxlbmd0aCl7XG4gICAgICBzaWRlVG90YWxbdG90YWxJbmRleF09c2lkZVRvdGFsW3RvdGFsSW5kZXhdK3N3YXBbaW50ZWdlckFycmF5SW5kZXgraW50ZWdlckFycmF5Lmxlbmd0aF07XG4gICAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoO1xuICAgIH1cbiAgICB0b3RhbEluZGV4Kys7XG5cbiAgfVxuICByZXR1cm4gc2lkZVRvdGFsO1xufVxuXG4vKiogZ2V0IFNlY29uZCBjb2x1bW4gc2VyaWVzIGdyb3VwaW5nIGRhdGFcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2VyaWVzRGF0YShpYXJyOiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsckNvdW50OiBudW1iZXIsY0NvdW50OiBudW1iZXIsc3dhcDogQXJyYXk8bnVtYmVyPixhOiBBcnJheTxudW1iZXI+KTogQXJyYXk8bnVtYmVyPntcbiAgbGV0IGluZGV4PTA7XG4gIGlhcnIuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgIGxldCBpQXJyYXlJbmRleD10YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzLmluZGV4T2YodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2VsZW1lbnRdKTtcbiAgICAgIGNvbnN0IG1heD1pQXJyYXlJbmRleCt0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50KzFdLnNlcmllc1tlbGVtZW50XSkubGVuZ3RoO1xuICAgICAgd2hpbGUoaUFycmF5SW5kZXg8bWF4KXtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllc1tpQXJyYXlJbmRleF09PT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tlbGVtZW50XSl7XG4gICAgICAgICAgICBjb25zdCBhcnI9c3dhcC5zbGljZShpbmRleCx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgraW5kZXgpO1xuICAgICAgICAgICAgbGV0ICB2YWx1ZT1pQXJyYXlJbmRleCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgIGEuc3BsaWNlKHZhbHVlLDEsc3dhcFtpbmRleF0pO1xuICAgICAgICAgICAgICBhcnIuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgIGEuc3BsaWNlKHZhbHVlLDEsZGF0YSk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKys7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBpbmRleD1pbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaUFycmF5SW5kZXgrKztcbiAgICAgICAgfVxuICB9KTtcbiAgcmV0dXJuIGE7XG59XG5cblxuLyoqIGdldCBTZWNvbmQgY29sdW1uIGRhdGFcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sdW1uKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuY29uc3QgckNvdW50PXRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoLTE7XG5jb25zdCBjQ291bnQ9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg7XG5sZXQgY291bnQ9MDtcblxubGV0IGk9MDtcbnRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhPVtdO1xuY29uc3Qgc2lkZVRvdGFsMT1BcnJheSh0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG53aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gIGNvbnN0IGdyb3VwRGF0YT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudF0uZ3JvdXBEYXRhW2ldO1xuICAgY29uc3Qgc3ViU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGEpO1xuICAgc3ViU2VyaWVzLmZvckVhY2goKF9kYXRhKSA9PiB7XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsX2RhdGEpKTtcbiAgfSk7XG4gIGk9aStncm91cERhdGE7XG59XG5pPTA7XG5jb25zdCBfX0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuY29uc3QgX19EYXRhMT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG5sZXQgc3ViU2VyaWVzSW5kZXg9MDtcbmxldCBzZWNvbmRDb2x1bW5JbmRleD0wO1xuY29uc3QgZ3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG5jb25zdCBjb3VudEdyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoK3RhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKS5maWxsKDApO1xubGV0IGNvdW50VG90YWw9MDtcbmNvbnN0IGNvdW50c0dyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xud2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICBjb25zdCBzdWJTZXJpZXNEYXRhQ291bnQ9W107XG4gIGxldCBzZXJpZXNEYXRhPVtdOyBsZXQgY291bnRTZXJpZXNEYXRhPVtdO1xuICBjb25zdCBpYXJyPVtdO1xuICAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgICAgIHNlcmllc0RhdGE9W107XG4gICAgICAgIGNvbnN0IHJvd0NvdW50PVtdO1xuICAgICAgICBjb25zdCBkYXRhU2VyaWVzVmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgICAgICAgY29uc3QgZ3JvdXBEYXRhU2VyaWVzPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICAgICAgIGNvbnN0IGNvdW50QXJyYXk9QXJyYXkodGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzLnNsaWNlKGksaStncm91cERhdGFTZXJpZXMpO1xuICAgICAgICBjb25zdCBzdWJTZXJpZXNHcm91cERhdGE9W107XG4gICAgICAgICBzdWJTZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgICBzdWJTZXJpZXNHcm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsZGF0YSkpO1xuICAgICAgICAgfSk7XG4gICAgICAgICBsZXQgc1Nlcmllc0dESW5kZXg9MDtcblxuXG4gICAgICAgICB3aGlsZShzU2VyaWVzR0RJbmRleDxzdWJTZXJpZXNHcm91cERhdGEubGVuZ3RoKXtcbiAgICAgICAgICBjb25zdCBzU2VyaWVzID0odGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2Uoc3ViU2VyaWVzSW5kZXgsc3ViU2VyaWVzSW5kZXgrc3ViU2VyaWVzR3JvdXBEYXRhW3NTZXJpZXNHREluZGV4XSkpO1xuICAgICAgICAgIHNTZXJpZXMuZm9yRWFjaCgoZGF0YTEpID0+IHtcbiAgICAgICAgICAgIHN1YlNlcmllc0RhdGFDb3VudC5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHNTZXJpZXMsZGF0YTEpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzdWJTZXJpZXNJbmRleD1zdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNHcm91cERhdGFbc1Nlcmllc0dESW5kZXhdO1xuICAgICAgICAgIHNTZXJpZXNHREluZGV4PXNTZXJpZXNHREluZGV4K3N1YlNlcmllc0dyb3VwRGF0YVtzU2VyaWVzR0RJbmRleF07XG4gICAgICAgICB9XG4gICAgICAgICBsZXQgc1Nlcmllc0dEQ0luZGV4PTA7XG4gICAgICAgIHdoaWxlKHNTZXJpZXNHRENJbmRleDxzdWJTZXJpZXNEYXRhQ291bnQubGVuZ3RoKXtcbiAgICAgICAgICBjb25zdCBkYXRhPSB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllc1tpK3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgICAgbGV0IHNlcmllcz1bXTtcbiAgICAgICAgICBzZXJpZXM9dGFidWxhclJlcG9ydC5zZWNvbmRDb2xEYXRhLmdldChzdWJTZXJpZXNbc1Nlcmllc0dEQ0luZGV4XSk7XG4gICAgICAgICAgY29uc3QgeD10YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzLmluZGV4T2YodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2krc1Nlcmllc0dEQ0luZGV4XSk7XG4gICAgICAgICAgY29uc3QgbT0oc2VyaWVzLmluZGV4T2YoZGF0YSkpO1xuICAgICAgICAgIGNvdW50QXJyYXkuc3BsaWNlKG0reCwxLHN1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICByb3dDb3VudC5wdXNoKHN1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBpYXJyLnB1c2goc2Vjb25kQ29sdW1uSW5kZXgpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4LmZvckVhY2goKGludCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5nZXRTZWNvbmRDb2xJbnRlZ2VyRGF0YSh0YWJ1bGFyUmVwb3J0LGludCxzZWNvbmRDb2x1bW5JbmRleCxzU2VyaWVzR0RDSW5kZXgsc2VyaWVzRGF0YSxzdWJTZXJpZXNEYXRhQ291bnQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHNlY29uZENvbHVtbkluZGV4PXNlY29uZENvbHVtbkluZGV4K3N1YlNlcmllc0RhdGFDb3VudFtzU2VyaWVzR0RDSW5kZXhdO1xuICAgICAgICAgIHNTZXJpZXNHRENJbmRleD1zU2VyaWVzR0RDSW5kZXgrc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzaWRlVG90YWw9dGhpcy5nZXRTaWRlVG90YWwoc2VyaWVzRGF0YSx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSk7XG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCE9PTApe1xuICAgICAgICBzZXJpZXNEYXRhPXRoaXMuZ2V0U2VyaWVzRGF0YShpYXJyLHRhYnVsYXJSZXBvcnQsckNvdW50LGNDb3VudCxzZXJpZXNEYXRhLGRhdGFTZXJpZXNWYWx1ZXMpO1xuICAgICAgIH1cbiAgICAgICAgY291bnRTZXJpZXNEYXRhPWRhdGFTZXJpZXNWYWx1ZXMuc2xpY2UoMCk7XG4gICAgICAgIGNvdW50QXJyYXkuZm9yRWFjaCgoY291bnREYXRhLGNvdW50SW5kZXgpID0+IHtcbiAgICAgICAgICBjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdPShjb3VudHNHcmFuZFRvdGFsW2NvdW50SW5kZXhdK2NvdW50RGF0YSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5PVtdO1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkuZm9yRWFjaCgoZWxlbWVudDEpID0+IHtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXkucHVzaChlbGVtZW50MSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBtaW49QXJyYXk8bnVtYmVyPigpO1xuICAgICAgICAgIGNvbnN0IG1heD1BcnJheTxudW1iZXI+KCk7XG5cblxuICAgICAgICBkYXRhU2VyaWVzVmFsdWVzLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnTWluJykpe1xuICAgICAgICAgICAgbWluLnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50PGdyYW5kVG90YWxbaW5kZXhdKXtcbiAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRleF09ZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgbWF4LnB1c2goZWxlbWVudCk7XG4gICAgICAgICAgICBpZihlbGVtZW50PmdyYW5kVG90YWxbaW5kZXhdKXtcbiAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRleF09ZWxlbWVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZXtcbiAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT0oZ3JhbmRUb3RhbFtpbmRleF0rZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcblxuXG4gICAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD1ncmFuZFRvdGFsO1xuICAgICAgICBzaWRlVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleDEpID0+IHtcbiAgICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhlbGVtZW50LGRhdGFTZXJpZXNWYWx1ZXMubGVuZ3RoL3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCk7XG4gICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09KHNpZGVUb3RhbDFbaW5kZXgxXStlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWluKG1pbik7XG4gICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXTxzaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudE1heChtYXgpO1xuICAgICAgICAgICAgaWYoc2lkZVRvdGFsW2luZGV4MV0+c2lkZVRvdGFsMVtpbmRleDFdKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvdW50VG90YWw9Y291bnRUb3RhbCtyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCk7XG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoPjEpe1xuICAgICAgICAgIF9fRGF0YS5zZXQoaSxzZXJpZXNEYXRhKTtcbiAgICAgICAgICBfX0RhdGExLnNldChpLGNvdW50U2VyaWVzRGF0YSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChpLHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGksc2lkZVRvdGFsKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGkscm93Q291bnQpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoaSxjb3VudEFycmF5KTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmRhdGFJbmRleFNUb3RhbC5zZXQoY291bnQsaSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZXtcbiAgICAgICAgICBfX0RhdGEuc2V0KGNvdW50LHNlcmllc0RhdGEpO1xuICAgICAgICAgIF9fRGF0YTEuc2V0KGNvdW50LGNvdW50U2VyaWVzRGF0YSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC50b3RhbFJvd0NvdW50LnNldChjb3VudCxyb3dDb3VudC5yZWR1Y2UoKGExLCBiMSkgPT4gYTEgKyBiMSwgMCkpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2lkZVRvdGFsLnNldChjb3VudCxzaWRlVG90YWwpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoY291bnQscm93Q291bnQpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5zZXQoY291bnQsY291bnRBcnJheSk7XG5cbiAgICAgICAgfVxuXG4gICAgY291bnQrKztcbiAgaT1pK2dyb3VwRGF0YTtcbn1cblxuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleERhdGEpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4RGF0YV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbFtpbmRleERhdGFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsY291bnQpO1xuICAgIH1cbiAgfSk7XG4gIHNpZGVUb3RhbDEuZm9yRWFjaCgoX2VsZW1lbnREYXRhLGluZGV4RCkgPT4ge1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4RF0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgIHNpZGVUb3RhbDFbaW5kZXhEXT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhfZWxlbWVudERhdGEsY291bnQpO1xuICAgIH1cblxuICB9KTtcbnRoaXMuZGF0YVJlbmRlci5lbWl0KF9fRGF0YSk7XG50YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGE9X19EYXRhO1xudGFidWxhclJlcG9ydC5kYXRhUmVuZGVyPV9fRGF0YTE7XG5jb25zdCBpbnRlZ2VyQXJyYXlWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKS5maWxsKDApO1xudGhpcy5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzLHRhYnVsYXJSZXBvcnQpO1xudGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPWdyYW5kVG90YWw7XG50YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmNvbmNhdChzaWRlVG90YWwxKTtcbnRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWw9c2lkZVRvdGFsMS5jb25jYXQoY291bnRUb3RhbCk7XG50YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPW5ldyBBcnJheTxudW1iZXI+KCk7XG50YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPWNvdW50c0dyYW5kVG90YWwuY29uY2F0KGNvdW50VG90YWwpO1xucmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKiB0byBnZXQgc2VyaWVzIGRhdGEgd2l0aCByb3cgY291bnRcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xucm93Q291bnREYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCBjb3VudEdyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoK3RhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKS5maWxsKDApO1xuICBjb25zdCB0b3RhbD10YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4xPyBBcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCkgOkFycmF5KHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMuZm9yRWFjaCgoZWxlbWVudCxpbmRleCkgPT57XG4gICAgbGV0IGNvdW50RGF0YVNlcmllcz1bXTtcblxuICAgICAgICBpZih0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXIuZ2V0KGluZGV4KSAmJiB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGghPT0wKXtcbiAgICAgICAgICBsZXQgZGF0YT1bXTtcbiAgICAgICAgICBjb3VudERhdGFTZXJpZXM9dGFidWxhclJlcG9ydC5zZXJpZXNEYXRhLmdldChpbmRleCkuc2xpY2UoMCk7XG4gICAgICAgICAgICBkYXRhPSh0aGlzLmdldFNlcmllc1dpdGhDb3VudChjb3VudERhdGFTZXJpZXMsXG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheSx0YWJ1bGFyUmVwb3J0LmNvdW50c0RhdGEuZ2V0KGluZGV4KSx0YWJ1bGFyUmVwb3J0KSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXIuc2V0KGluZGV4LGRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGxldCB4PTA7XG4gICAgICAgIGNvdW50RGF0YVNlcmllcy5mb3JFYWNoKChlbGVtZW50MSxpbmRleDEpID0+IHtcbiAgICAgICAgICBpZih0aGlzLmNsb25lSW50ZWdlckNvdW50W2luZGV4MV09PT0nY291bnQnIHx8IGluZGV4MT09PWNvdW50RGF0YVNlcmllcy5sZW5ndGgpe1xuICAgICAgICAgICAgdG90YWxbeF09KHRvdGFsW3hdK2VsZW1lbnQxKTtcbiAgICAgICAgICB4Kys7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvdW50R3JhbmRUb3RhbFtpbmRleDFdPShjb3VudEdyYW5kVG90YWxbaW5kZXgxXStlbGVtZW50MSk7XG4gICAgICAgIH0pO1xuXG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5zbGljZSgwKTtcbiAgbGV0IGludGVnZXJBcnJheUluZGV4PXRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aC0xO1xuICBsZXQgaW5kZXg9MDtcbiAgd2hpbGUoaW50ZWdlckFycmF5SW5kZXg8Y291bnRHcmFuZFRvdGFsLmxlbmd0aCl7XG4gICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLHRvdGFsW2luZGV4XSk7XG4gICAgaW50ZWdlckFycmF5SW5kZXg9aW50ZWdlckFycmF5SW5kZXgrdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKzE7XG4gICAgaW5kZXggKys7XG4gIH1cbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5zcGxpY2UoKHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDIubGVuZ3RoLXRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCksdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMj10YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLmNvbmNhdCh0YWJ1bGFyUmVwb3J0LnNpZGVHcmFuZFRvdGFsKTtcbiAgbGV0IHg9MDtcbiAgdGFidWxhclJlcG9ydC5jb3VudEludGVnZXJJbmRleGluZz10YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleGluZy5zbGljZSgwKTtcbiAgd2hpbGUoeDxjb3VudEdyYW5kVG90YWwubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nLnNwbGljZSh4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCwwLG51bGwpO1xuICAgIHg9eCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgfVxuICB0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmc9W107XG4gIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZz10YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZy5zbGljZSgwKTtcblxuICBsZXQgbT0wO1xuICB3aGlsZShtPHRhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nLmxlbmd0aCl7XG4gICAgdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nLnNwbGljZShtK3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCwwLG51bGwpO1xuICAgIG09bSt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsKXtcbiAgICB0YWJ1bGFyUmVwb3J0PXRhYnVsYXJSZXBvcnQuc3ViVG90YWxUb2dnbGUodGFidWxhclJlcG9ydCk7XG4gIH1cblxucmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cblxuZ2V0SW50ZWdlckluZGV4KGludGVnZXJBcnJheVZhbHVlczogQXJyYXk8bnVtYmVyPix0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0KTogVGFidWxhclJlcG9ydHtcbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoPjApe1xuICBsZXQgYXJyYXlJbmRleD0wO1xuICB3aGlsZShhcnJheUluZGV4PHRhYnVsYXJSZXBvcnQuc2VyaWVzRGF0YS5nZXQoMCkubGVuZ3RoKXtcbiAgICBsZXQgaW5kZXgxPWFycmF5SW5kZXg7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YS5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PiB7XG4gICAgICBpbnRlZ2VyQXJyYXlWYWx1ZXMuc3BsaWNlKGluZGV4MSwxLGVsZW1lbnQpO1xuICAgICAgaW5kZXgxKys7XG4gICAgfSk7XG4gICAgYXJyYXlJbmRleD1hcnJheUluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGEubGVuZ3RoO1xuICB9XG4gIHRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nPWludGVnZXJBcnJheVZhbHVlcztcbiAgdGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmc9aW50ZWdlckFycmF5VmFsdWVzLmNvbmNhdCh0YWJ1bGFyUmVwb3J0LmludGVnZXJEYXRhKTtcbiAgfVxuICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cbnRhYmxlQ2xpY2tFdmVudCh0YWJ1bGFyUmVwb3J0OiBhbnkpOiB2b2lke1xuICBjb25zdCB0YWJ1bGFyUHJvcGVydHk9IG5ldyBFbGVtZW50UHJvcGVydHkoKTtcbiAgaWYodGFidWxhclJlcG9ydCBpbnN0YW5jZW9mIFRhYnVsYXJSZXBvcnQpe1xuICB0YWJ1bGFyUHJvcGVydHkucGFnZT1udWxsO1xuICB0YWJ1bGFyUHJvcGVydHkuZWxlbWVudD10YWJ1bGFyUmVwb3J0O1xuICB9XG4gIGVsc2V7XG4gICAgdGFidWxhclByb3BlcnR5LnBhZ2U9dGFidWxhclJlcG9ydDtcbiAgfVxuICB0aGlzLl90YWJsZUNsaWNrRXZlbnQuZW1pdCh0YWJ1bGFyUHJvcGVydHkpO1xufVxufVxuIl19