ax-common-ui-lib 1.0.0-beta.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.
- package/README.md +24 -0
- package/ax-common-ui-lib.d.ts +5 -0
- package/esm2020/ax-common-ui-lib.mjs +5 -0
- package/esm2020/lib/app-list/app-list-dto.mjs +29 -0
- package/esm2020/lib/app-list/app-list.component.mjs +421 -0
- package/esm2020/lib/app-list/my-app-list.service.mjs +142 -0
- package/esm2020/lib/app-list/organization-list-dto.mjs +29 -0
- package/esm2020/lib/ax-common-ui-lib.component.mjs +26 -0
- package/esm2020/lib/ax-common-ui-lib.module.mjs +147 -0
- package/esm2020/lib/ax-common-ui-lib.service.mjs +14 -0
- package/esm2020/lib/axo-filters/axo-filters.component.mjs +422 -0
- package/esm2020/lib/axo-filters/axo-filters.module.mjs +59 -0
- package/esm2020/lib/axo-filters/axo-filters.service.mjs +85 -0
- package/esm2020/lib/axo-map/axo-map.component.mjs +40 -0
- package/esm2020/lib/axo-map/axo-map.mjs +37 -0
- package/esm2020/lib/axo-map/axo-map.module.mjs +41 -0
- package/esm2020/lib/axo-map/public-api.mjs +7 -0
- package/esm2020/lib/axo-search-bar/axo-search-bar.component.mjs +84 -0
- package/esm2020/lib/axo-search-bar/axo-search-bar.module.mjs +38 -0
- package/esm2020/lib/axo-search-bar/public.api.mjs +3 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.component.mjs +155 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.module.mjs +34 -0
- package/esm2020/lib/axo-snack-bar/axo-snack-bar.service.mjs +29 -0
- package/esm2020/lib/axo-snack-bar/public-api.mjs +3 -0
- package/esm2020/lib/axo-state-manager/axo-state-manager.module.mjs +27 -0
- package/esm2020/lib/axo-state-manager/axo-state-manager.service.mjs +37 -0
- package/esm2020/lib/axo-state-manager/public-api.mjs +3 -0
- package/esm2020/lib/axo-utils/axo-utils.mjs +149 -0
- package/esm2020/lib/axo-utils/axo-utils.module.mjs +25 -0
- package/esm2020/lib/axo-utils/constants.mjs +3 -0
- package/esm2020/lib/axo-utils/data-source-types.mjs +12 -0
- package/esm2020/lib/axo-utils/field-list-search-pipe.mjs +32 -0
- package/esm2020/lib/axo-utils/filter-search-pipe.mjs +16 -0
- package/esm2020/lib/axo-utils/public-api.mjs +2 -0
- package/esm2020/lib/axo-utils/search-pipe/choice-search.pipe.mjs +33 -0
- package/esm2020/lib/axo-utils/search-pipe.mjs +36 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.component.mjs +196 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.module.mjs +29 -0
- package/esm2020/lib/bread-crumbs/bread-crumbs.service.mjs +122 -0
- package/esm2020/lib/code-editor/code-editor-modes.mjs +11 -0
- package/esm2020/lib/code-editor/code-editor-themes.mjs +8 -0
- package/esm2020/lib/code-editor/code-editor.component.mjs +60 -0
- package/esm2020/lib/code-editor/code-editor.module.mjs +36 -0
- package/esm2020/lib/code-editor/icode-editor-options.mjs +2 -0
- package/esm2020/lib/code-editor/public-api.mjs +3 -0
- package/esm2020/lib/common-dto/attributes-dto.mjs +39 -0
- package/esm2020/lib/common-dto/dashboard-dto.mjs +12 -0
- package/esm2020/lib/common-dto/dataListFilter-dto.mjs +13 -0
- package/esm2020/lib/common-dto/elements-dto.mjs +61 -0
- package/esm2020/lib/common-dto/form-dto.mjs +48 -0
- package/esm2020/lib/common-lib-configuration.service.mjs +21 -0
- package/esm2020/lib/common-property-panel/properties/properties.service.mjs +30 -0
- package/esm2020/lib/common-utils/entity-base.mjs +12 -0
- package/esm2020/lib/common-utils/iFlatten.mjs +2 -0
- package/esm2020/lib/common-utils/report.mjs +45 -0
- package/esm2020/lib/common.service.mjs +78 -0
- package/esm2020/lib/converters/convert-to-new-service.mjs +11 -0
- package/esm2020/lib/converters/convert-to-old-service.mjs +168 -0
- package/esm2020/lib/core/auth/auth.service.mjs +146 -0
- package/esm2020/lib/core/core.module.mjs +37 -0
- package/esm2020/lib/core/icons/icons.module.mjs +255 -0
- package/esm2020/lib/core/transloco/transloco.http-loader.mjs +32 -0
- package/esm2020/lib/core/transloco/transloco.module.mjs +94 -0
- package/esm2020/lib/core/user/axo-user.mjs +46 -0
- package/esm2020/lib/core/user/user-data.service.mjs +46 -0
- package/esm2020/lib/core/user/user.service.mjs +87 -0
- package/esm2020/lib/core/user/user.types.mjs +2 -0
- package/esm2020/lib/dashboard-lib/dashboard-builder.service.mjs +56 -0
- package/esm2020/lib/dashboard-lib/dashboard-control.service.mjs +92 -0
- package/esm2020/lib/dashboard-lib/dashboard-element/dashboard-element.mjs +11 -0
- package/esm2020/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.mjs +9 -0
- package/esm2020/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.mjs +107 -0
- package/esm2020/lib/dashboard-lib/dashboard-lib.module.mjs +111 -0
- package/esm2020/lib/dashboard-lib/dashboard-list.service.mjs +73 -0
- package/esm2020/lib/dashboard-lib/dashboard.mjs +15 -0
- package/esm2020/lib/dashboard-lib/send-to-dashboard.service.mjs +96 -0
- package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.component.mjs +241 -0
- package/esm2020/lib/dashboard-lib/show-dashboards/show-dashboards.service.mjs +32 -0
- package/esm2020/lib/data-view-lib/data-view/axo-card.mjs +26 -0
- package/esm2020/lib/data-view-lib/data-view/axo-tag.mjs +48 -0
- package/esm2020/lib/data-view-lib/data-view/board-column.mjs +24 -0
- package/esm2020/lib/data-view-lib/data-view/board-view.mjs +45 -0
- package/esm2020/lib/data-view-lib/data-view/cardConfig.mjs +26 -0
- package/esm2020/lib/data-view-lib/data-view/conditional-formatting.mjs +25 -0
- package/esm2020/lib/data-view-lib/data-view/coordinate.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/data-view-enums.mjs +68 -0
- package/esm2020/lib/data-view-lib/data-view/data-view-filter.mjs +47 -0
- package/esm2020/lib/data-view-lib/data-view/data-view.mjs +66 -0
- package/esm2020/lib/data-view-lib/data-view/idata-view.mjs +2 -0
- package/esm2020/lib/data-view-lib/data-view/image-style.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/info-window.mjs +23 -0
- package/esm2020/lib/data-view-lib/data-view/location.mjs +21 -0
- package/esm2020/lib/data-view-lib/data-view/map-view.mjs +41 -0
- package/esm2020/lib/data-view-lib/data-view/prefix-style.mjs +28 -0
- package/esm2020/lib/data-view-lib/data-view/tag-style.mjs +28 -0
- package/esm2020/lib/data-view-lib/data-view/tagConfig.mjs +63 -0
- package/esm2020/lib/data-view-lib/data-view/task-asset-form-object-dto.mjs +72 -0
- package/esm2020/lib/data-view-lib/data-view/task-column-value.mjs +43 -0
- package/esm2020/lib/data-view-lib/data-view/task-view.mjs +31 -0
- package/esm2020/lib/data-view-lib/data-view/task.mjs +199 -0
- package/esm2020/lib/data-view-lib/data-view/value-style.mjs +25 -0
- package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.component.mjs +661 -0
- package/esm2020/lib/data-view-lib/data-view-filters/data-view-filters.service.mjs +102 -0
- package/esm2020/lib/data-view-lib/data-view-header/data-view-header.component.mjs +536 -0
- package/esm2020/lib/data-view-lib/data-view-lib.module.mjs +88 -0
- package/esm2020/lib/data-view-lib/data-view.service.mjs +211 -0
- package/esm2020/lib/data-view-lib/public-api.mjs +28 -0
- package/esm2020/lib/directive/adjust-font-size.mjs +49 -0
- package/esm2020/lib/drill-through/drill-through.component.mjs +153 -0
- package/esm2020/lib/drill-through/drill-through.module.mjs +33 -0
- package/esm2020/lib/drill-through/drill-through.resolver.mjs +80 -0
- package/esm2020/lib/drill-through/drill-through.service.mjs +218 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-column.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-list.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-time.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-date-value.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-number-value.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-text.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-list.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.mjs +37 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time-range.mjs +38 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-time.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-exp-toggle.mjs +36 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-expression-value.mjs +32 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-expression.mjs +415 -0
- package/esm2020/lib/enlighten-lib/ax-expression/ax-number-range.mjs +34 -0
- package/esm2020/lib/enlighten-lib/ax-expression/exp-sub-type.mjs +29 -0
- package/esm2020/lib/enlighten-lib/ax-expression/public-api.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/attribute.mjs +247 -0
- package/esm2020/lib/enlighten-lib/data-model/data-model.mjs +52 -0
- package/esm2020/lib/enlighten-lib/data-model/dependee.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/dependent.mjs +24 -0
- package/esm2020/lib/enlighten-lib/data-model/entity.mjs +71 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.mjs +100 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.mjs +100 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.mjs +113 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree-enums.mjs +6 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.component.mjs +301 -0
- package/esm2020/lib/enlighten-lib/data-model-tree/data-model-tree.module.mjs +67 -0
- package/esm2020/lib/enlighten-lib/elements/Property.mjs +3 -0
- package/esm2020/lib/enlighten-lib/elements/ax-element.mjs +55 -0
- package/esm2020/lib/enlighten-lib/elements/element-factory.mjs +38 -0
- package/esm2020/lib/enlighten-lib/enlighten-lib.module.mjs +308 -0
- package/esm2020/lib/enlighten-lib/enums/bread-crumbs-style.mjs +6 -0
- package/esm2020/lib/enlighten-lib/enums/operator-text-enum.mjs +11 -0
- package/esm2020/lib/enlighten-lib/fields/attribute-data.mjs +167 -0
- package/esm2020/lib/enlighten-lib/fields/entity.mjs +16 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-audio.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-barcode.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-childrecord.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-counter.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-date.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-decimal.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-document.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-file.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-image.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-location.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-number.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-qrcode.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-signature.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-staticmedia.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-text.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-time.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ax-uniqueid.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/axo-timestamp.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/choicelist.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/datetime.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/hyperlink.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/ienlighten-type.mjs +2 -0
- package/esm2020/lib/enlighten-lib/fields/types/toggle.mjs +6 -0
- package/esm2020/lib/enlighten-lib/fields/types/video.mjs +6 -0
- package/esm2020/lib/enlighten-lib/filters/ax-filter.mjs +74 -0
- package/esm2020/lib/enlighten-lib/filters/ax-operator.mjs +88 -0
- package/esm2020/lib/enlighten-lib/filters/chart-filter-type.mjs +7 -0
- package/esm2020/lib/enlighten-lib/filters/condition-type.mjs +49 -0
- package/esm2020/lib/enlighten-lib/filters/dataList-searchNode.mjs +48 -0
- package/esm2020/lib/enlighten-lib/filters/dataListFilterExpression.mjs +32 -0
- package/esm2020/lib/enlighten-lib/filters/dataListFilterOperator.mjs +43 -0
- package/esm2020/lib/enlighten-lib/filters/dataListSeachQueryTree.mjs +25 -0
- package/esm2020/lib/enlighten-lib/filters/filter-category.mjs +78 -0
- package/esm2020/lib/enlighten-lib/filters/general-filter-type.mjs +13 -0
- package/esm2020/lib/enlighten-lib/filters/gridster-properties.mjs +31 -0
- package/esm2020/lib/enlighten-lib/filters/iax-filter.mjs +2 -0
- package/esm2020/lib/enlighten-lib/filters/search-node.mjs +50 -0
- package/esm2020/lib/enlighten-lib/filters/static-widget.mjs +24 -0
- package/esm2020/lib/enlighten-lib/property/element-property.mjs +11 -0
- package/esm2020/lib/enlighten-lib/property/filter-category-property.mjs +9 -0
- package/esm2020/lib/enlighten-lib/property/filter-property.mjs +9 -0
- package/esm2020/lib/enlighten-lib/report/chart-filter/chart-filter.component.mjs +393 -0
- package/esm2020/lib/enlighten-lib/report/element.service.mjs +115 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.mjs +1002 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.mjs +144 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.mjs +576 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.mjs +66 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/border.mjs +18 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-factory.mjs +80 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-property.mjs +4 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart-type.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/chart.mjs +123 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.mjs +32 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/dimension.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/font.mjs +32 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/fontStyle.mjs +28 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/label.mjs +6 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/legend.mjs +28 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/matrix.mjs +26 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/shadow.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/style.mjs +14 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/text-style.mjs +34 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/chart/title.mjs +12 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.component.mjs +357 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/graphical-report.directive.mjs +16 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/ichart-component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/igraphical-report.component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.mjs +856 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.mjs +97 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/page/page.mjs +48 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.mjs +934 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.mjs +103 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text-chart.mjs +56 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.component.mjs +302 -0
- package/esm2020/lib/enlighten-lib/report/graphical-report/text/text.service.mjs +15 -0
- package/esm2020/lib/enlighten-lib/report/iproperty.component.mjs +8 -0
- package/esm2020/lib/enlighten-lib/report/ireport.mjs +14 -0
- package/esm2020/lib/enlighten-lib/report/report-builder-master.service.mjs +83 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.component.mjs +313 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.module.mjs +71 -0
- package/esm2020/lib/enlighten-lib/report/report-filter/report-filter.service.mjs +246 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/aggregate.mjs +10 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.mjs +26 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/column-style.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/itabular-report.component.mjs +2 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/orderby-type.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/row-style.mjs +7 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/table-style.mjs +47 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.mjs +4464 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.mjs +1583 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.mjs +70 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.mjs +1837 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.mjs +756 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.component.mjs +156 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.mjs +245 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular-report.service.mjs +960 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/tabular.mjs +196 -0
- package/esm2020/lib/enlighten-lib/report/tabular-report/value-formatting.mjs +9 -0
- package/esm2020/lib/enlighten-lib/report-control.service.mjs +41 -0
- package/esm2020/lib/enlighten-lib/utils/utils.mjs +26 -0
- package/esm2020/lib/field-list-lib/fields-list.service.mjs +299 -0
- package/esm2020/lib/filters/calender-filter/calender-filter.component.mjs +351 -0
- package/esm2020/lib/filters/category-filter/category-filter.component.mjs +207 -0
- package/esm2020/lib/filters/category-filter/category-filter.service.mjs +31 -0
- package/esm2020/lib/filters/category-filter/category.service.mjs +45 -0
- package/esm2020/lib/filters/choice-list-filter/choice-list-filter.component.mjs +178 -0
- package/esm2020/lib/filters/choice-list-filter/choice-list-filter.service.mjs +53 -0
- package/esm2020/lib/filters/common-filter/common-filter.component.mjs +310 -0
- package/esm2020/lib/filters/common-filter/common-filter.service.mjs +106 -0
- package/esm2020/lib/filters/custom-scroll-directives.mjs +45 -0
- package/esm2020/lib/filters/date-time-filter/date-time-filter.component.mjs +345 -0
- package/esm2020/lib/filters/filter-footer/filter-footer.component.mjs +62 -0
- package/esm2020/lib/filters/filters.component.mjs +688 -0
- package/esm2020/lib/filters/filters.module.mjs +196 -0
- package/esm2020/lib/filters/filters.service.mjs +147 -0
- package/esm2020/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.mjs +202 -0
- package/esm2020/lib/filters/metaColumnTypes.mjs +36 -0
- package/esm2020/lib/filters/multi-select-filter/multi-select-filter.component.mjs +211 -0
- package/esm2020/lib/filters/multi-select-filter/multi-select-filter.service.mjs +214 -0
- package/esm2020/lib/filters/number-filter/number-filter.component.mjs +321 -0
- package/esm2020/lib/filters/public-api.mjs +15 -0
- package/esm2020/lib/filters/reference-list-filter/reference-list-filter.component.mjs +180 -0
- package/esm2020/lib/filters/reference-list-filter/reference-list-filter.service.mjs +151 -0
- package/esm2020/lib/filters/single-select-filter/single-select-filter.component.mjs +177 -0
- package/esm2020/lib/filters/time-filter/time-filter.component.mjs +301 -0
- package/esm2020/lib/filters/user-filter/user-filter.component.mjs +178 -0
- package/esm2020/lib/filters/user-filter/user-filter.service.mjs +62 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.mjs +346 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.mjs +105 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.mjs +41 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.mjs +10 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.component.mjs +823 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.mjs +211 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.module.mjs +224 -0
- package/esm2020/lib/form-object/form-object-list/form-object-list.service.mjs +171 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.mjs +94 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.mjs +33 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.mjs +40 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.mjs +31 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.mjs +98 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.mjs +86 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.mjs +180 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.mjs +45 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.mjs +54 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.mjs +163 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.mjs +45 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.mjs +61 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.mjs +64 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.mjs +119 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.mjs +37 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.mjs +98 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.mjs +62 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.mjs +24 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.mjs +19 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.mjs +49 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.mjs +50 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.mjs +25 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.mjs +33 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.mjs +60 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.mjs +65 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.mjs +28 -0
- package/esm2020/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/data-detail-view-dto.mjs +55 -0
- package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.mjs +85 -0
- package/esm2020/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.component.mjs +209 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.module.mjs +273 -0
- package/esm2020/lib/form-object/form-object-view/form-object-view.service.mjs +268 -0
- 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
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.mjs +92 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.mjs +68 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.mjs +155 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.mjs +158 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.mjs +248 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.mjs +179 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.mjs +210 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.mjs +58 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.mjs +16 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.mjs +76 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.mjs +263 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.mjs +17 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.mjs +335 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.mjs +270 -0
- 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
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.mjs +203 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.mjs +70 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.mjs +21 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.mjs +146 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.mjs +92 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.mjs +84 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.mjs +82 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.mjs +93 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.mjs +144 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.mjs +95 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.mjs +83 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.mjs +82 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.mjs +79 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.mjs +113 -0
- package/esm2020/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.mjs +89 -0
- package/esm2020/lib/form-object/form-object-view/meta-section/meta-section.component.mjs +157 -0
- package/esm2020/lib/form-object/form-object-view/section/section.component.mjs +75 -0
- package/esm2020/lib/form-object/form-object-view/section-field/section-field.component.mjs +30 -0
- package/esm2020/lib/form-object/form-object-view/section-view/section-view.component.mjs +110 -0
- package/esm2020/lib/form-object/public-api.mjs +3 -0
- package/esm2020/lib/form-permission.service.mjs +106 -0
- package/esm2020/lib/forms/ax-form.mjs +212 -0
- package/esm2020/lib/forms/iform.mjs +2 -0
- package/esm2020/lib/forms/page/common/axo-response-status.mjs +6 -0
- package/esm2020/lib/forms/page/common/constants.mjs +399 -0
- package/esm2020/lib/forms/page/common/detail-view-enums.mjs +8 -0
- package/esm2020/lib/forms/page/common/flatten-status-enum.mjs +10 -0
- package/esm2020/lib/forms/page/common/form.constant.mjs +87 -0
- package/esm2020/lib/forms/page/common/property-panel-field.mjs +5 -0
- package/esm2020/lib/forms/page/common/widget-enums.mjs +269 -0
- package/esm2020/lib/forms/page/common/widget-value-handler.mjs +321 -0
- package/esm2020/lib/forms/page/data-detail-view/ax-section.mjs +51 -0
- package/esm2020/lib/forms/page/data-detail-view/collection-view.mjs +30 -0
- package/esm2020/lib/forms/page/data-detail-view/data-details.mjs +60 -0
- package/esm2020/lib/forms/page/data-detail-view/section-field.mjs +32 -0
- package/esm2020/lib/forms/page/data-detail-view/section.mjs +33 -0
- package/esm2020/lib/forms/page/data-list/data-list-column.mjs +45 -0
- package/esm2020/lib/forms/page/data-list/data-list.mjs +64 -0
- package/esm2020/lib/forms/page/form-object.mjs +17 -0
- package/esm2020/lib/forms/page/form-page.mjs +28 -0
- package/esm2020/lib/forms/page/value-converters/displayMode-to-bool.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/form-type-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/geo-fence-value-converter.mjs +24 -0
- package/esm2020/lib/forms/page/value-converters/image-annotation-value-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/language-source-value-converter.mjs +24 -0
- package/esm2020/lib/forms/page/value-converters/list-view-title-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/parse-float-converter.mjs +15 -0
- package/esm2020/lib/forms/page/value-converters/parse-int-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/parse-string-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/publicUrls-string-to-array.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/record-limit-type-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/restriction-mode-converter.mjs +23 -0
- package/esm2020/lib/forms/page/value-converters/string-to-bool-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/string-to-bool-value-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/string-to-date-time-converter.mjs +19 -0
- package/esm2020/lib/forms/page/value-converters/string-to-number -converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/textBox-mask-converter.mjs +16 -0
- package/esm2020/lib/forms/page/value-converters/validate-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/value-without-mask-converter.mjs +20 -0
- package/esm2020/lib/forms/page/value-converters/widget-concrete-class-converter.mjs +22 -0
- package/esm2020/lib/forms/page/value-converters/widget-deserializer.mjs +149 -0
- package/esm2020/lib/forms/page/widgets/apply-geofences.mjs +65 -0
- package/esm2020/lib/forms/page/widgets/auto-number.mjs +87 -0
- package/esm2020/lib/forms/page/widgets/ax-audio.mjs +154 -0
- package/esm2020/lib/forms/page/widgets/ax-document.mjs +149 -0
- package/esm2020/lib/forms/page/widgets/ax-image.mjs +183 -0
- package/esm2020/lib/forms/page/widgets/bar-code.mjs +212 -0
- package/esm2020/lib/forms/page/widgets/child-record.mjs +193 -0
- package/esm2020/lib/forms/page/widgets/choicelist.mjs +375 -0
- package/esm2020/lib/forms/page/widgets/counter.mjs +69 -0
- package/esm2020/lib/forms/page/widgets/datetime.mjs +247 -0
- package/esm2020/lib/forms/page/widgets/formula.mjs +106 -0
- package/esm2020/lib/forms/page/widgets/geofence.mjs +127 -0
- package/esm2020/lib/forms/page/widgets/gps.mjs +192 -0
- package/esm2020/lib/forms/page/widgets/group-header.mjs +200 -0
- package/esm2020/lib/forms/page/widgets/languages.mjs +129 -0
- package/esm2020/lib/forms/page/widgets/link.mjs +107 -0
- package/esm2020/lib/forms/page/widgets/payment.mjs +104 -0
- package/esm2020/lib/forms/page/widgets/qr-code.mjs +129 -0
- package/esm2020/lib/forms/page/widgets/script-condition.mjs +115 -0
- package/esm2020/lib/forms/page/widgets/signature.mjs +81 -0
- package/esm2020/lib/forms/page/widgets/static-media.mjs +130 -0
- package/esm2020/lib/forms/page/widgets/stopwatch.mjs +117 -0
- package/esm2020/lib/forms/page/widgets/sub-form.mjs +114 -0
- package/esm2020/lib/forms/page/widgets/textbox.mjs +338 -0
- package/esm2020/lib/forms/page/widgets/timestamp.mjs +155 -0
- package/esm2020/lib/forms/page/widgets/toggle.mjs +115 -0
- package/esm2020/lib/forms/page/widgets/unique-id.mjs +75 -0
- package/esm2020/lib/forms/page/widgets/verification.mjs +207 -0
- package/esm2020/lib/forms/page/widgets/video.mjs +151 -0
- package/esm2020/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.mjs +74 -0
- package/esm2020/lib/forms/page/widgets/widget-value/audio-video-widget-value.mjs +36 -0
- package/esm2020/lib/forms/page/widgets/widget-value/child-record-value.mjs +114 -0
- package/esm2020/lib/forms/page/widgets/widget-value/choice-list-options.mjs +84 -0
- package/esm2020/lib/forms/page/widgets/widget-value/choices-ml.mjs +107 -0
- package/esm2020/lib/forms/page/widgets/widget-value/dateRangeValue.mjs +38 -0
- package/esm2020/lib/forms/page/widgets/widget-value/deviceProfileParams.mjs +9 -0
- package/esm2020/lib/forms/page/widgets/widget-value/deviceProfilesTemp.mjs +72 -0
- package/esm2020/lib/forms/page/widgets/widget-value/document-widget-value.mjs +56 -0
- package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-location-value.mjs +54 -0
- package/esm2020/lib/forms/page/widgets/widget-value/geo-fence-widget-value.mjs +50 -0
- package/esm2020/lib/forms/page/widgets/widget-value/gps-widget-value.mjs +58 -0
- package/esm2020/lib/forms/page/widgets/widget-value/image-widget-value.mjs +99 -0
- package/esm2020/lib/forms/page/widgets/widget-value/language-widget-value.mjs +43 -0
- package/esm2020/lib/forms/page/widgets/widget-value/location-object-value.mjs +44 -0
- package/esm2020/lib/forms/page/widgets/widget-value/multiple-languages.mjs +106 -0
- package/esm2020/lib/forms/page/widgets/widget-value/reference-list-object-value.mjs +72 -0
- package/esm2020/lib/forms/page/widgets/widget-value/verification-widget-value.mjs +126 -0
- package/esm2020/lib/forms/page/widgets/widget.mjs +429 -0
- package/esm2020/lib/ghost-loader/ghost-loader.component.mjs +708 -0
- package/esm2020/lib/ghost-loader/ghost-loader.module.mjs +27 -0
- package/esm2020/lib/ghost-loader/public-api.mjs +3 -0
- package/esm2020/lib/map-dialog/map-dialog.component.mjs +46 -0
- package/esm2020/lib/map-dialog/map-dialog.module.mjs +39 -0
- package/esm2020/lib/map-dialog/public-api.mjs +6 -0
- package/esm2020/lib/reports-container/public-api.mjs +8 -0
- package/esm2020/lib/reports-container/report-group/report-group.component.mjs +77 -0
- package/esm2020/lib/reports-container/reports-container-models/report-group.mjs +42 -0
- package/esm2020/lib/reports-container/reports-container-models/report-property.mjs +30 -0
- package/esm2020/lib/reports-container/reports-container-models/reports-container-enums.mjs +16 -0
- package/esm2020/lib/reports-container/reports-container-models/reports-container.mjs +29 -0
- package/esm2020/lib/reports-container/reports-container.component.mjs +60 -0
- package/esm2020/lib/reports-container/reports-container.module.mjs +52 -0
- package/esm2020/lib/reports-container/reports-container.service.mjs +29 -0
- package/esm2020/lib/scrollbar/index.mjs +3 -0
- package/esm2020/lib/scrollbar/public-api.mjs +3 -0
- package/esm2020/lib/scrollbar/scrollbar.directive.mjs +351 -0
- package/esm2020/lib/scrollbar/scrollbar.module.mjs +21 -0
- package/esm2020/lib/scrollbar/scrollbar.types.mjs +15 -0
- package/esm2020/lib/sculptor-lib/widgets/audio/audio.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/barcode/barcode.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/child-record/child-record.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/choice-list/choice-list.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/date-time/date-time.component.mjs +136 -0
- package/esm2020/lib/sculptor-lib/widgets/document/document.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/geofence/geofence.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/gps/gps.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/group-header/group-header.component.mjs +109 -0
- package/esm2020/lib/sculptor-lib/widgets/image/image.component.mjs +131 -0
- package/esm2020/lib/sculptor-lib/widgets/language/language.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/link/link.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/qr-code/qr-code.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.mjs +105 -0
- package/esm2020/lib/sculptor-lib/widgets/subform/subform.component.mjs +109 -0
- package/esm2020/lib/sculptor-lib/widgets/textbox/textbox.component.mjs +177 -0
- package/esm2020/lib/sculptor-lib/widgets/timestamp/timestamp.component.mjs +115 -0
- package/esm2020/lib/sculptor-lib/widgets/toggle/toggle.component.mjs +112 -0
- package/esm2020/lib/sculptor-lib/widgets/video/video.component.mjs +118 -0
- package/esm2020/lib/sculptor-lib/widgets/widgets.service.mjs +58 -0
- package/esm2020/lib/shared/comfirmation-modal/confirmation-modal.component.mjs +63 -0
- package/esm2020/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.mjs +83 -0
- package/esm2020/lib/shared/shared.module.mjs +51 -0
- package/esm2020/public-api.mjs +138 -0
- package/fesm2015/ax-common-ui-lib.mjs +56598 -0
- package/fesm2015/ax-common-ui-lib.mjs.map +1 -0
- package/fesm2020/ax-common-ui-lib.mjs +52373 -0
- package/fesm2020/ax-common-ui-lib.mjs.map +1 -0
- package/lib/app-list/app-list-dto.d.ts +15 -0
- package/lib/app-list/app-list.component.d.ts +62 -0
- package/lib/app-list/my-app-list.service.d.ts +69 -0
- package/lib/app-list/organization-list-dto.d.ts +15 -0
- package/lib/ax-common-ui-lib.component.d.ts +8 -0
- package/lib/ax-common-ui-lib.module.d.ts +24 -0
- package/lib/ax-common-ui-lib.service.d.ts +6 -0
- package/lib/axo-filters/axo-filters.component.d.ts +86 -0
- package/lib/axo-filters/axo-filters.module.d.ts +16 -0
- package/lib/axo-filters/axo-filters.service.d.ts +36 -0
- package/lib/axo-map/axo-map.component.d.ts +9 -0
- package/lib/axo-map/axo-map.d.ts +14 -0
- package/lib/axo-map/axo-map.module.d.ts +10 -0
- package/lib/axo-map/public-api.d.ts +6 -0
- package/lib/axo-search-bar/axo-search-bar.component.d.ts +21 -0
- package/lib/axo-search-bar/axo-search-bar.module.d.ts +10 -0
- package/lib/axo-search-bar/public.api.d.ts +2 -0
- package/lib/axo-snack-bar/axo-snack-bar.component.d.ts +20 -0
- package/lib/axo-snack-bar/axo-snack-bar.module.d.ts +9 -0
- package/lib/axo-snack-bar/axo-snack-bar.service.d.ts +16 -0
- package/lib/axo-snack-bar/public-api.d.ts +2 -0
- package/lib/axo-state-manager/axo-state-manager.module.d.ts +7 -0
- package/lib/axo-state-manager/axo-state-manager.service.d.ts +15 -0
- package/lib/axo-state-manager/public-api.d.ts +2 -0
- package/lib/axo-utils/axo-utils.d.ts +72 -0
- package/lib/axo-utils/axo-utils.module.d.ts +10 -0
- package/lib/axo-utils/constants.d.ts +2 -0
- package/lib/axo-utils/data-source-types.d.ts +10 -0
- package/lib/axo-utils/field-list-search-pipe.d.ts +7 -0
- package/lib/axo-utils/filter-search-pipe.d.ts +7 -0
- package/lib/axo-utils/public-api.d.ts +1 -0
- package/lib/axo-utils/search-pipe/choice-search.pipe.d.ts +7 -0
- package/lib/axo-utils/search-pipe.d.ts +7 -0
- package/lib/bread-crumbs/bread-crumbs.component.d.ts +48 -0
- package/lib/bread-crumbs/bread-crumbs.module.d.ts +9 -0
- package/lib/bread-crumbs/bread-crumbs.service.d.ts +76 -0
- package/lib/code-editor/code-editor-modes.d.ts +9 -0
- package/lib/code-editor/code-editor-themes.d.ts +6 -0
- package/lib/code-editor/code-editor.component.d.ts +20 -0
- package/lib/code-editor/code-editor.module.d.ts +10 -0
- package/lib/code-editor/icode-editor-options.d.ts +51 -0
- package/lib/code-editor/public-api.d.ts +2 -0
- package/lib/common-dto/attributes-dto.d.ts +24 -0
- package/lib/common-dto/dashboard-dto.d.ts +10 -0
- package/lib/common-dto/dataListFilter-dto.d.ts +10 -0
- package/lib/common-dto/elements-dto.d.ts +51 -0
- package/lib/common-dto/form-dto.d.ts +17 -0
- package/lib/common-lib-configuration.service.d.ts +13 -0
- package/lib/common-property-panel/properties/properties.service.d.ts +18 -0
- package/lib/common-utils/entity-base.d.ts +10 -0
- package/lib/common-utils/iFlatten.d.ts +13 -0
- package/lib/common-utils/report.d.ts +26 -0
- package/lib/common.service.d.ts +50 -0
- package/lib/converters/convert-to-new-service.d.ts +6 -0
- package/lib/converters/convert-to-old-service.d.ts +26 -0
- package/lib/core/auth/auth.service.d.ts +75 -0
- package/lib/core/core.module.d.ts +12 -0
- package/lib/core/icons/icons.module.d.ts +14 -0
- package/lib/core/transloco/transloco.http-loader.d.ts +19 -0
- package/lib/core/transloco/transloco.module.d.ts +7 -0
- package/lib/core/user/axo-user.d.ts +9 -0
- package/lib/core/user/user-data.service.d.ts +25 -0
- package/lib/core/user/user.service.d.ts +45 -0
- package/lib/core/user/user.types.d.ts +9 -0
- package/lib/dashboard-lib/dashboard-builder.service.d.ts +27 -0
- package/lib/dashboard-lib/dashboard-control.service.d.ts +31 -0
- package/lib/dashboard-lib/dashboard-element/dashboard-element.d.ts +9 -0
- package/lib/dashboard-lib/dashboard-element-property/dashboard-property/dashboard-element-property.d.ts +7 -0
- package/lib/dashboard-lib/dashboard-filter/dashboard-filter.component.d.ts +37 -0
- package/lib/dashboard-lib/dashboard-lib.module.d.ts +26 -0
- package/lib/dashboard-lib/dashboard-list.service.d.ts +24 -0
- package/lib/dashboard-lib/dashboard.d.ts +14 -0
- package/lib/dashboard-lib/send-to-dashboard.service.d.ts +39 -0
- package/lib/dashboard-lib/show-dashboards/show-dashboards.component.d.ts +53 -0
- package/lib/dashboard-lib/show-dashboards/show-dashboards.service.d.ts +11 -0
- package/lib/data-view-lib/data-view/axo-card.d.ts +11 -0
- package/lib/data-view-lib/data-view/axo-tag.d.ts +26 -0
- package/lib/data-view-lib/data-view/board-column.d.ts +12 -0
- package/lib/data-view-lib/data-view/board-view.d.ts +23 -0
- package/lib/data-view-lib/data-view/cardConfig.d.ts +11 -0
- package/lib/data-view-lib/data-view/conditional-formatting.d.ts +11 -0
- package/lib/data-view-lib/data-view/coordinate.d.ts +8 -0
- package/lib/data-view-lib/data-view/data-view-enums.d.ts +58 -0
- package/lib/data-view-lib/data-view/data-view-filter.d.ts +25 -0
- package/lib/data-view-lib/data-view/data-view.d.ts +33 -0
- package/lib/data-view-lib/data-view/idata-view.d.ts +7 -0
- package/lib/data-view-lib/data-view/image-style.d.ts +8 -0
- package/lib/data-view-lib/data-view/info-window.d.ts +10 -0
- package/lib/data-view-lib/data-view/location.d.ts +8 -0
- package/lib/data-view-lib/data-view/map-view.d.ts +21 -0
- package/lib/data-view-lib/data-view/prefix-style.d.ts +12 -0
- package/lib/data-view-lib/data-view/tag-style.d.ts +12 -0
- package/lib/data-view-lib/data-view/tagConfig.d.ts +34 -0
- package/lib/data-view-lib/data-view/task-asset-form-object-dto.d.ts +19 -0
- package/lib/data-view-lib/data-view/task-column-value.d.ts +48 -0
- package/lib/data-view-lib/data-view/task-view.d.ts +15 -0
- package/lib/data-view-lib/data-view/task.d.ts +57 -0
- package/lib/data-view-lib/data-view/value-style.d.ts +10 -0
- package/lib/data-view-lib/data-view-filters/data-view-filters.component.d.ts +142 -0
- package/lib/data-view-lib/data-view-filters/data-view-filters.service.d.ts +28 -0
- package/lib/data-view-lib/data-view-header/data-view-header.component.d.ts +85 -0
- package/lib/data-view-lib/data-view-lib.module.d.ts +19 -0
- package/lib/data-view-lib/data-view.service.d.ts +94 -0
- package/lib/data-view-lib/public-api.d.ts +27 -0
- package/lib/directive/adjust-font-size.d.ts +13 -0
- package/lib/drill-through/drill-through.component.d.ts +53 -0
- package/lib/drill-through/drill-through.module.d.ts +10 -0
- package/lib/drill-through/drill-through.resolver.d.ts +30 -0
- package/lib/drill-through/drill-through.service.d.ts +100 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-column.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-time.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-date-value.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-number-value.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-text-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-text.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-list.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-range-value.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time-range.d.ts +17 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-time.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-exp-toggle.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/ax-expression-value.d.ts +19 -0
- package/lib/enlighten-lib/ax-expression/ax-expression.d.ts +66 -0
- package/lib/enlighten-lib/ax-expression/ax-number-range.d.ts +16 -0
- package/lib/enlighten-lib/ax-expression/exp-sub-type.d.ts +26 -0
- package/lib/enlighten-lib/ax-expression/public-api.d.ts +23 -0
- package/lib/enlighten-lib/data-model/attribute.d.ts +60 -0
- package/lib/enlighten-lib/data-model/data-model.d.ts +32 -0
- package/lib/enlighten-lib/data-model/dependee.d.ts +11 -0
- package/lib/enlighten-lib/data-model/dependent.d.ts +11 -0
- package/lib/enlighten-lib/data-model/entity.d.ts +31 -0
- package/lib/enlighten-lib/data-model-tree/attributes-dragdrop-layout/attributes-dragdrop-layout.component.d.ts +23 -0
- package/lib/enlighten-lib/data-model-tree/attributes-selection-layout/attributes-selection-layout.component.d.ts +24 -0
- package/lib/enlighten-lib/data-model-tree/categories-tree/categories-tree.component.d.ts +25 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree-enums.d.ts +4 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree.component.d.ts +67 -0
- package/lib/enlighten-lib/data-model-tree/data-model-tree.module.d.ts +18 -0
- package/lib/enlighten-lib/elements/Property.d.ts +3 -0
- package/lib/enlighten-lib/elements/ax-element.d.ts +31 -0
- package/lib/enlighten-lib/elements/element-factory.d.ts +13 -0
- package/lib/enlighten-lib/enlighten-lib.module.d.ts +53 -0
- package/lib/enlighten-lib/enums/bread-crumbs-style.d.ts +4 -0
- package/lib/enlighten-lib/enums/operator-text-enum.d.ts +9 -0
- package/lib/enlighten-lib/fields/attribute-data.d.ts +55 -0
- package/lib/enlighten-lib/fields/entity.d.ts +15 -0
- package/lib/enlighten-lib/fields/types/ax-audio.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-barcode.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-childrecord.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-counter.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-date.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-decimal.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-document.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-file.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-image.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-location.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-number.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-qrcode.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-signature.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-staticmedia.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-text.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-time.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ax-uniqueid.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/axo-timestamp.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/choicelist.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/datetime.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/hyperlink.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/ienlighten-type.d.ts +3 -0
- package/lib/enlighten-lib/fields/types/toggle.d.ts +4 -0
- package/lib/enlighten-lib/fields/types/video.d.ts +4 -0
- package/lib/enlighten-lib/filters/ax-filter.d.ts +38 -0
- package/lib/enlighten-lib/filters/ax-operator.d.ts +40 -0
- package/lib/enlighten-lib/filters/chart-filter-type.d.ts +5 -0
- package/lib/enlighten-lib/filters/condition-type.d.ts +43 -0
- package/lib/enlighten-lib/filters/dataList-searchNode.d.ts +27 -0
- package/lib/enlighten-lib/filters/dataListFilterExpression.d.ts +20 -0
- package/lib/enlighten-lib/filters/dataListFilterOperator.d.ts +29 -0
- package/lib/enlighten-lib/filters/dataListSeachQueryTree.d.ts +15 -0
- package/lib/enlighten-lib/filters/filter-category.d.ts +43 -0
- package/lib/enlighten-lib/filters/general-filter-type.d.ts +10 -0
- package/lib/enlighten-lib/filters/gridster-properties.d.ts +17 -0
- package/lib/enlighten-lib/filters/iax-filter.d.ts +7 -0
- package/lib/enlighten-lib/filters/search-node.d.ts +27 -0
- package/lib/enlighten-lib/filters/static-widget.d.ts +2 -0
- package/lib/enlighten-lib/property/element-property.d.ts +8 -0
- package/lib/enlighten-lib/property/filter-category-property.d.ts +6 -0
- package/lib/enlighten-lib/property/filter-property.d.ts +6 -0
- package/lib/enlighten-lib/report/chart-filter/chart-filter.component.d.ts +78 -0
- package/lib/enlighten-lib/report/element.service.d.ts +61 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.component.d.ts +259 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.d.ts +52 -0
- package/lib/enlighten-lib/report/graphical-report/bar-chart/bar-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.component.d.ts +177 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.d.ts +29 -0
- package/lib/enlighten-lib/report/graphical-report/card-chart/card-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/chart/border.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-factory.d.ts +7 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-property.d.ts +5 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart-type.d.ts +16 -0
- package/lib/enlighten-lib/report/graphical-report/chart/chart.d.ts +41 -0
- package/lib/enlighten-lib/report/graphical-report/chart/common-chart.service.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/conditional-formatting.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/dimension.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/font.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/fontStyle.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/label.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/chart/legend.d.ts +13 -0
- package/lib/enlighten-lib/report/graphical-report/chart/matrix.d.ts +11 -0
- package/lib/enlighten-lib/report/graphical-report/chart/shadow.d.ts +5 -0
- package/lib/enlighten-lib/report/graphical-report/chart/style.d.ts +12 -0
- package/lib/enlighten-lib/report/graphical-report/chart/text-style.d.ts +17 -0
- package/lib/enlighten-lib/report/graphical-report/chart/title.d.ts +11 -0
- package/lib/enlighten-lib/report/graphical-report/graphical-report.component.d.ts +130 -0
- package/lib/enlighten-lib/report/graphical-report/graphical-report.directive.d.ts +8 -0
- package/lib/enlighten-lib/report/graphical-report/ichart-component.d.ts +6 -0
- package/lib/enlighten-lib/report/graphical-report/igraphical-report.component.d.ts +21 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.component.d.ts +215 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.d.ts +34 -0
- package/lib/enlighten-lib/report/graphical-report/line-chart/line-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/page/page.d.ts +25 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.component.d.ts +220 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.d.ts +38 -0
- package/lib/enlighten-lib/report/graphical-report/pie-chart/pie-chart.service.d.ts +9 -0
- package/lib/enlighten-lib/report/graphical-report/text/text-chart.d.ts +19 -0
- package/lib/enlighten-lib/report/graphical-report/text/text.component.d.ts +72 -0
- package/lib/enlighten-lib/report/graphical-report/text/text.service.d.ts +9 -0
- package/lib/enlighten-lib/report/iproperty.component.d.ts +14 -0
- package/lib/enlighten-lib/report/ireport.d.ts +14 -0
- package/lib/enlighten-lib/report/report-builder-master.service.d.ts +42 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.component.d.ts +117 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.module.d.ts +19 -0
- package/lib/enlighten-lib/report/report-filter/report-filter.service.d.ts +102 -0
- package/lib/enlighten-lib/report/tabular-report/aggregate.d.ts +8 -0
- package/lib/enlighten-lib/report/tabular-report/axo-percentage.pipe.d.ts +7 -0
- package/lib/enlighten-lib/report/tabular-report/column-style.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/itabular-report.component.d.ts +16 -0
- package/lib/enlighten-lib/report/tabular-report/orderby-type.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/row-style.d.ts +5 -0
- package/lib/enlighten-lib/report/tabular-report/table-style.d.ts +21 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/column-group-view/column-group-view.component.d.ts +124 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/detail-group-view/detail-group-view.component.d.ts +242 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/resize-column-directive.d.ts +21 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/row-group-view/row-group-view.component.d.ts +190 -0
- package/lib/enlighten-lib/report/tabular-report/tabular/tabular.component.d.ts +177 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.component.d.ts +53 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.d.ts +102 -0
- package/lib/enlighten-lib/report/tabular-report/tabular-report.service.d.ts +173 -0
- package/lib/enlighten-lib/report/tabular-report/tabular.d.ts +92 -0
- package/lib/enlighten-lib/report/tabular-report/value-formatting.d.ts +7 -0
- package/lib/enlighten-lib/report-control.service.d.ts +15 -0
- package/lib/enlighten-lib/utils/utils.d.ts +16 -0
- package/lib/field-list-lib/fields-list.service.d.ts +71 -0
- package/lib/filters/calender-filter/calender-filter.component.d.ts +70 -0
- package/lib/filters/category-filter/category-filter.component.d.ts +65 -0
- package/lib/filters/category-filter/category-filter.service.d.ts +16 -0
- package/lib/filters/category-filter/category.service.d.ts +23 -0
- package/lib/filters/choice-list-filter/choice-list-filter.component.d.ts +64 -0
- package/lib/filters/choice-list-filter/choice-list-filter.service.d.ts +36 -0
- package/lib/filters/common-filter/common-filter.component.d.ts +135 -0
- package/lib/filters/common-filter/common-filter.service.d.ts +42 -0
- package/lib/filters/custom-scroll-directives.d.ts +14 -0
- package/lib/filters/date-time-filter/date-time-filter.component.d.ts +83 -0
- package/lib/filters/filter-footer/filter-footer.component.d.ts +12 -0
- package/lib/filters/filters.component.d.ts +139 -0
- package/lib/filters/filters.module.d.ts +43 -0
- package/lib/filters/filters.service.d.ts +83 -0
- package/lib/filters/meta-column-filter-builder/meta-column-filter-builder.service.d.ts +70 -0
- package/lib/filters/metaColumnTypes.d.ts +18 -0
- package/lib/filters/multi-select-filter/multi-select-filter.component.d.ts +68 -0
- package/lib/filters/multi-select-filter/multi-select-filter.service.d.ts +77 -0
- package/lib/filters/number-filter/number-filter.component.d.ts +70 -0
- package/lib/filters/public-api.d.ts +14 -0
- package/lib/filters/reference-list-filter/reference-list-filter.component.d.ts +59 -0
- package/lib/filters/reference-list-filter/reference-list-filter.service.d.ts +62 -0
- package/lib/filters/single-select-filter/single-select-filter.component.d.ts +59 -0
- package/lib/filters/time-filter/time-filter.component.d.ts +62 -0
- package/lib/filters/user-filter/user-filter.component.d.ts +61 -0
- package/lib/filters/user-filter/user-filter.service.d.ts +26 -0
- package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.component.d.ts +87 -0
- package/lib/form-object/form-object-list/form-object-list-filter/form-object-list-filter.service.d.ts +33 -0
- package/lib/form-object/form-object-list/form-object-list-header/form-object-list-header.component.d.ts +13 -0
- package/lib/form-object/form-object-list/form-object-list-header/widget-header-type-handler.d.ts +3 -0
- package/lib/form-object/form-object-list/form-object-list-header/widgets/text-box-header/text-box-header.component.d.ts +10 -0
- package/lib/form-object/form-object-list/form-object-list-header/widgets-header.directive.d.ts +8 -0
- package/lib/form-object/form-object-list/form-object-list.component.d.ts +200 -0
- package/lib/form-object/form-object-list/form-object-list.d.ts +42 -0
- package/lib/form-object/form-object-list/form-object-list.module.d.ts +59 -0
- package/lib/form-object/form-object-list/form-object-list.service.d.ts +69 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value-handler.d.ts +3 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-value.directive.d.ts +8 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/form-object-widget-value.component.d.ts +22 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-apply-geo-fence-value/formobject-apply-geo-fence-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-audio-value/formobject-audio-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-auto-number-value/formobject-auto-number-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-bar-code-value/formobject-bar-code-value.component.d.ts +27 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-child-records-value/formobject-child-records-value.component.d.ts +13 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-choicelist-value/formobject-choicelist-value.component.d.ts +20 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-counter-value/formobject-counter-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-date-time-value/formobject-date-time-value.component.d.ts +13 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-document-value/formobject-document-value.component.d.ts +15 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-formula-value/formobject-formula-value.component.d.ts +11 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-geo-fence-value/formobject-geo-fence-value.component.d.ts +21 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-gps-value/formobject-gps-value.component.d.ts +23 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-group-header-value/formobject-group-header-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-image-value/formobject-image-value.component.d.ts +34 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-languages-value/formobject-languages-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-payment-value/formobject-payment-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-qr-code-value/formobject-qr-code-value.component.d.ts +27 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-signature-value/formobject-signature-value.component.d.ts +17 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-static-media-value/formobject-static-media-value.component.d.ts +15 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-stop-watch-value/formobject-stop-watch-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-sub-form-value/formobject-sub-form-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-textbox-value/formobject-textbox-value.component.d.ts +12 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-time-stamp-value/formobject-time-stamp-value.component.d.ts +16 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-toggle-value/formobject-toggle-value.component.d.ts +11 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-unique-id-value/formobject-unique-id-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-verification-value/formobject-verification-value.component.d.ts +14 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-video-value/formobject-video-value.component.d.ts +16 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-web-link-value/formobject-web-link-value.component.d.ts +10 -0
- package/lib/form-object/form-object-list/formObjectWidgetValue/formobject-widget-mat-dialog/formobject-widget-mat-dialog.component.d.ts +13 -0
- package/lib/form-object/form-object-view/data-detail-view-dto.d.ts +16 -0
- package/lib/form-object/form-object-view/dynamic-view/dynamic-view.component.d.ts +32 -0
- package/lib/form-object/form-object-view/dynamic-view/dynamic-view.directive.d.ts +8 -0
- package/lib/form-object/form-object-view/form-object-view.component.d.ts +45 -0
- package/lib/form-object/form-object-view/form-object-view.module.d.ts +70 -0
- package/lib/form-object/form-object-view/form-object-view.service.d.ts +49 -0
- 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
- package/lib/form-object/form-object-view/form-object-widgets/audio-widget-view/audio-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/auto-number-widget-view/auto-number-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/bar-code-widget-view/bar-code-widget-view.component.d.ts +31 -0
- package/lib/form-object/form-object-view/form-object-widgets/child-records-widget-view/child-records-widget-view.component.d.ts +22 -0
- package/lib/form-object/form-object-view/form-object-widgets/choice-list-widget-view/choice-list-widget-view.component.d.ts +25 -0
- package/lib/form-object/form-object-view/form-object-widgets/counter-widget-view/counter-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/date-time-widget-view/date-time-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/document-widget-view/document-widget-view.component.d.ts +15 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widget-type-handler.d.ts +3 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.component.d.ts +25 -0
- package/lib/form-object/form-object-view/form-object-widgets/form-object-widgets-view.directive.d.ts +8 -0
- package/lib/form-object/form-object-view/form-object-widgets/formula-widget-view/formula-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/geo-fence-widget-view/geo-fence-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/gps-widget-view/gps-widget-view.component.d.ts +37 -0
- package/lib/form-object/form-object-view/form-object-widgets/group-header-widget-view/group-header-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-annotation-data-dto.d.ts +91 -0
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-map-view/image-map-view.component.d.ts +32 -0
- 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
- package/lib/form-object/form-object-view/form-object-widgets/image-widget-view/image-widget-view.component.d.ts +40 -0
- package/lib/form-object/form-object-view/form-object-widgets/language-widget-view/language-widget-view.component.d.ts +12 -0
- package/lib/form-object/form-object-view/form-object-widgets/payment-widget-view/payment-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/qr-code-widget-view/qr-code-widget-view.component.d.ts +26 -0
- package/lib/form-object/form-object-view/form-object-widgets/signature-widget-view/signature-widget-view.component.d.ts +13 -0
- package/lib/form-object/form-object-view/form-object-widgets/static-media-widget-view/static-media-widget-view.component.d.ts +13 -0
- package/lib/form-object/form-object-view/form-object-widgets/stop-watch-widget-view/stop-watch-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/sub-form-widget-view/sub-form-widget-view.component.d.ts +16 -0
- package/lib/form-object/form-object-view/form-object-widgets/text-box-widget-view/text-box-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/time-stamp-widget-view/time-stamp-widget-view.component.d.ts +15 -0
- package/lib/form-object/form-object-view/form-object-widgets/toggle-widget-view/toggle-widget-view.component.d.ts +11 -0
- package/lib/form-object/form-object-view/form-object-widgets/unique-id-widget-view/unique-id-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/form-object-widgets/verification-widget-view/verification-widget-view.component.d.ts +14 -0
- package/lib/form-object/form-object-view/form-object-widgets/video-widget-view/video-widget-view.component.d.ts +16 -0
- package/lib/form-object/form-object-view/form-object-widgets/web-link-widget-view/web-link-widget-view.component.d.ts +10 -0
- package/lib/form-object/form-object-view/meta-section/meta-section.component.d.ts +31 -0
- package/lib/form-object/form-object-view/section/section.component.d.ts +16 -0
- package/lib/form-object/form-object-view/section-field/section-field.component.d.ts +13 -0
- package/lib/form-object/form-object-view/section-view/section-view.component.d.ts +16 -0
- package/lib/form-object/public-api.d.ts +2 -0
- package/lib/form-permission.service.d.ts +51 -0
- package/lib/forms/ax-form.d.ts +47 -0
- package/lib/forms/iform.d.ts +18 -0
- package/lib/forms/page/common/axo-response-status.d.ts +4 -0
- package/lib/forms/page/common/constants.d.ts +371 -0
- package/lib/forms/page/common/detail-view-enums.d.ts +5 -0
- package/lib/forms/page/common/flatten-status-enum.d.ts +7 -0
- package/lib/forms/page/common/form.constant.d.ts +85 -0
- package/lib/forms/page/common/property-panel-field.d.ts +21 -0
- package/lib/forms/page/common/widget-enums.d.ts +236 -0
- package/lib/forms/page/common/widget-value-handler.d.ts +4 -0
- package/lib/forms/page/data-detail-view/ax-section.d.ts +22 -0
- package/lib/forms/page/data-detail-view/collection-view.d.ts +11 -0
- package/lib/forms/page/data-detail-view/data-details.d.ts +17 -0
- package/lib/forms/page/data-detail-view/section-field.d.ts +13 -0
- package/lib/forms/page/data-detail-view/section.d.ts +13 -0
- package/lib/forms/page/data-list/data-list-column.d.ts +24 -0
- package/lib/forms/page/data-list/data-list.d.ts +24 -0
- package/lib/forms/page/form-object.d.ts +6 -0
- package/lib/forms/page/form-page.d.ts +19 -0
- package/lib/forms/page/value-converters/displayMode-to-bool.d.ts +5 -0
- package/lib/forms/page/value-converters/form-type-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/geo-fence-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/image-annotation-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/language-source-value-converter.d.ts +6 -0
- package/lib/forms/page/value-converters/list-view-title-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-float-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-int-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/parse-string-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/publicUrls-string-to-array.d.ts +5 -0
- package/lib/forms/page/value-converters/record-limit-type-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/restriction-mode-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-bool-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-bool-value-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-date-time-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/string-to-number -converter.d.ts +5 -0
- package/lib/forms/page/value-converters/textBox-mask-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/validate-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/value-without-mask-converter.d.ts +5 -0
- package/lib/forms/page/value-converters/widget-concrete-class-converter.d.ts +6 -0
- package/lib/forms/page/value-converters/widget-deserializer.d.ts +3 -0
- package/lib/forms/page/widgets/apply-geofences.d.ts +25 -0
- package/lib/forms/page/widgets/auto-number.d.ts +28 -0
- package/lib/forms/page/widgets/ax-audio.d.ts +43 -0
- package/lib/forms/page/widgets/ax-document.d.ts +44 -0
- package/lib/forms/page/widgets/ax-image.d.ts +46 -0
- package/lib/forms/page/widgets/bar-code.d.ts +52 -0
- package/lib/forms/page/widgets/child-record.d.ts +50 -0
- package/lib/forms/page/widgets/choicelist.d.ts +70 -0
- package/lib/forms/page/widgets/counter.d.ts +36 -0
- package/lib/forms/page/widgets/datetime.d.ts +53 -0
- package/lib/forms/page/widgets/formula.d.ts +38 -0
- package/lib/forms/page/widgets/geofence.d.ts +41 -0
- package/lib/forms/page/widgets/gps.d.ts +49 -0
- package/lib/forms/page/widgets/group-header.d.ts +51 -0
- package/lib/forms/page/widgets/languages.d.ts +41 -0
- package/lib/forms/page/widgets/link.d.ts +36 -0
- package/lib/forms/page/widgets/payment.d.ts +37 -0
- package/lib/forms/page/widgets/qr-code.d.ts +39 -0
- package/lib/forms/page/widgets/script-condition.d.ts +33 -0
- package/lib/forms/page/widgets/signature.d.ts +34 -0
- package/lib/forms/page/widgets/static-media.d.ts +40 -0
- package/lib/forms/page/widgets/stopwatch.d.ts +37 -0
- package/lib/forms/page/widgets/sub-form.d.ts +39 -0
- package/lib/forms/page/widgets/textbox.d.ts +63 -0
- package/lib/forms/page/widgets/timestamp.d.ts +42 -0
- package/lib/forms/page/widgets/toggle.d.ts +36 -0
- package/lib/forms/page/widgets/unique-id.d.ts +33 -0
- package/lib/forms/page/widgets/verification.d.ts +55 -0
- package/lib/forms/page/widgets/video.d.ts +44 -0
- package/lib/forms/page/widgets/widget-value/apply-geo-fence-widget-value.d.ts +18 -0
- package/lib/forms/page/widgets/widget-value/audio-video-widget-value.d.ts +11 -0
- package/lib/forms/page/widgets/widget-value/child-record-value.d.ts +26 -0
- package/lib/forms/page/widgets/widget-value/choice-list-options.d.ts +27 -0
- package/lib/forms/page/widgets/widget-value/choices-ml.d.ts +22 -0
- package/lib/forms/page/widgets/widget-value/dateRangeValue.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/deviceProfileParams.d.ts +4 -0
- package/lib/forms/page/widgets/widget-value/deviceProfilesTemp.d.ts +19 -0
- package/lib/forms/page/widgets/widget-value/document-widget-value.d.ts +15 -0
- package/lib/forms/page/widgets/widget-value/geo-fence-location-value.d.ts +14 -0
- package/lib/forms/page/widgets/widget-value/geo-fence-widget-value.d.ts +14 -0
- package/lib/forms/page/widgets/widget-value/gps-widget-value.d.ts +21 -0
- package/lib/forms/page/widgets/widget-value/image-widget-value.d.ts +19 -0
- package/lib/forms/page/widgets/widget-value/language-widget-value.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/location-object-value.d.ts +12 -0
- package/lib/forms/page/widgets/widget-value/multiple-languages.d.ts +21 -0
- package/lib/forms/page/widgets/widget-value/reference-list-object-value.d.ts +17 -0
- package/lib/forms/page/widgets/widget-value/verification-widget-value.d.ts +31 -0
- package/lib/forms/page/widgets/widget.d.ts +75 -0
- package/lib/ghost-loader/ghost-loader.component.d.ts +41 -0
- package/lib/ghost-loader/ghost-loader.module.d.ts +8 -0
- package/lib/ghost-loader/public-api.d.ts +2 -0
- package/lib/map-dialog/map-dialog.component.d.ts +16 -0
- package/lib/map-dialog/map-dialog.module.d.ts +11 -0
- package/lib/map-dialog/public-api.d.ts +5 -0
- package/lib/reports-container/public-api.d.ts +7 -0
- package/lib/reports-container/report-group/report-group.component.d.ts +17 -0
- package/lib/reports-container/reports-container-models/report-group.d.ts +20 -0
- package/lib/reports-container/reports-container-models/report-property.d.ts +19 -0
- package/lib/reports-container/reports-container-models/reports-container-enums.d.ts +13 -0
- package/lib/reports-container/reports-container-models/reports-container.d.ts +16 -0
- package/lib/reports-container/reports-container.component.d.ts +16 -0
- package/lib/reports-container/reports-container.module.d.ts +13 -0
- package/lib/reports-container/reports-container.service.d.ts +18 -0
- package/lib/scrollbar/index.d.ts +2 -0
- package/lib/scrollbar/public-api.d.ts +2 -0
- package/lib/scrollbar/scrollbar.directive.d.ts +153 -0
- package/lib/scrollbar/scrollbar.module.d.ts +7 -0
- package/lib/scrollbar/scrollbar.types.d.ts +12 -0
- package/lib/sculptor-lib/widgets/audio/audio.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/barcode/barcode.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/child-record/child-record.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/choice-list/choice-list.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/date-time/date-time.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/document/document.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/geofence/geofence.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/gps/gps.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/group-header/group-header.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/image/image.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/language/language.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/link/link.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/qr-code/qr-code.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/stopwatch/stopwatch.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/subform/subform.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/textbox/textbox.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/timestamp/timestamp.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/toggle/toggle.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/video/video.component.d.ts +32 -0
- package/lib/sculptor-lib/widgets/widgets.service.d.ts +30 -0
- package/lib/shared/comfirmation-modal/confirmation-modal.component.d.ts +18 -0
- package/lib/shared/conditional-formatting/conditional-formatting/conditional-formatting.component.d.ts +29 -0
- package/lib/shared/shared.module.d.ts +13 -0
- package/package.json +64 -0
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFidWxhci1yZXBvcnQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9heC1jb21tb24tdWktbGliL3NyYy9saWIvZW5saWdodGVuLWxpYi9yZXBvcnQvdGFidWxhci1yZXBvcnQvdGFidWxhci1yZXBvcnQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7O0FBTWpELE1BQU0sT0FBTyxvQkFBb0I7SUFNL0IsWUFBb0IsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFKM0MsZUFBVSxHQUFzQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBRW5ELHFCQUFnQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDM0Msc0JBQWlCLEdBQUMsS0FBSyxFQUFPLENBQUM7SUFHL0IsQ0FBQztJQUNEOzs7O09BSUc7SUFDSCxTQUFTLENBQUMsYUFBNEI7UUFDcEMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFDLEtBQUssRUFBRSxFQUFFO1lBQ3hELHVDQUF1QztZQUN6QyxTQUFTLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxFQUFVLENBQUM7WUFDeEMsSUFBRyxLQUFLLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxPQUFPLEVBQUM7Z0JBQ2xDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUNyQztpQkFBSTtnQkFDSCwrQkFBK0I7Z0JBQy9CLElBQUksVUFBVSxHQUFDLENBQUMsQ0FB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QU0sRUFBQyxDQUFDLEVBQUMsT0FBTyxDQUFDLENBQUM7b0JBQzVDLE1BQU0sRUFBRSxDQUFDO2dCQUNYLENBQUMsQ0FBQyxDQUFDO2dCQUNILFVBQVUsR0FBQyxVQUFVLEdBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7YUFDeEQ7WUFDRCxhQUFhLENBQUMsZUFBZSxHQUFDLGtCQUFrQixDQUFDO1lBQ2pELGFBQWEsQ0FBQyxxQkFBcUIsR0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3hGO1FBQ0QsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUNELGVBQWUsQ0FBQyxhQUFrQjtRQUNoQyxNQUFNLGVBQWUsR0FBRSxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQzdDLElBQUcsYUFBYSxZQUFZLGFBQWEsRUFBQztZQUMxQyxlQUFlLENBQUMsSUFBSSxHQUFDLElBQUksQ0FBQztZQUMxQixlQUFlLENBQUMsT0FBTyxHQUFDLGFBQWEsQ0FBQztTQUNyQzthQUNHO1lBQ0YsZUFBZSxDQUFDLElBQUksR0FBQyxhQUFhLENBQUM7U0FDcEM7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzlDLENBQUM7O3dGQWhnQ1ksb0JBQW9COzBFQUFwQixvQkFBb0IsV0FBcEIsb0JBQW9CLG1CQUZuQixNQUFNO3VGQUVQLG9CQUFvQjtjQUhoQyxVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xuaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBdHRyaWJ1dGVEYXRhIH0gZnJvbSAnLi4vLi4vZmllbGRzL2F0dHJpYnV0ZS1kYXRhJztcbmltcG9ydCB7IEVsZW1lbnRQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL3Byb3BlcnR5L2VsZW1lbnQtcHJvcGVydHknO1xuaW1wb3J0IHsgVGFidWxhclJlcG9ydCB9IGZyb20gJy4vdGFidWxhci1yZXBvcnQnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFRhYnVsYXJSZXBvcnRTZXJ2aWNlIHtcblxuICBkYXRhUmVuZGVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgYXR0ckFycmF5OiBBcnJheTxBdHRyaWJ1dGVEYXRhPjtcbiAgX3RhYmxlQ2xpY2tFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBjbG9uZUludGVnZXJDb3VudD1BcnJheTxhbnk+KCk7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2h0dHBDbGllbnQ6IEh0dHBDbGllbnQpe1xuXG4gIH1cbiAgLyoqdG8gY291bnQgZGF0YSBjb3VudCBpbiBhIHNlcmllc1xuICAgKlxuICAgKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICAgKlxuICAgKi9cbiAgZ3JvdXBEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICAgIC8vIHdoZW4gcm93IHNwYW4gaXMgdHJ1ZSBhbmQgaW5kZXggaXMgMFxuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YSA9IG5ldyBBcnJheTxudW1iZXI+KCk7XG4gICAgICAgIGlmKGluZGV4ID09PSAwIHx8IGF0dHJpYnV0ZS5jb2xTcGFuKXtcbiAgICAgICAgICB0aGlzLmdldEZpcnN0Um93R3JvdXBpbmcoYXR0cmlidXRlKTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgLy8gd2hlbiBpbmRleCBpcyBncmVhdGVyIHRoYW4gMFxuICAgICAgICAgIGxldCBzdGFydEluZGV4PTA7XG4gICAgICAgICAgY29uc3QgY2xvbmVTZXJpZXM9W107XG4gICAgICAgICAgbGV0IGdkSW5kZXg9MDtcbiAgICAgICAgICB3aGlsZShzdGFydEluZGV4PD0gKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGEubGVuZ3RoLTEpKXtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFTZXJpZXM9W107XG4gICAgICAgICAgICBnZEluZGV4PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW5kZXggLSAxXS5ncm91cERhdGFbc3RhcnRJbmRleF07XG4gICAgICAgICAgICBjb25zdCBzdWJTZXJpZXMgPSBhdHRyaWJ1dGUuc2VyaWVzLnNsaWNlKHN0YXJ0SW5kZXgsc3RhcnRJbmRleCtnZEluZGV4KTtcbiAgICAgICAgICAgIHN1YlNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsZGF0YSkpO1xuICAgICAgICAgICAgICAvLyB0byByZXBsYWNlIHJlcGVhdGVkIGRhdGFcbiAgICAgICAgICAgICAgaWYoZGF0YVNlcmllcy5pbmNsdWRlcyhkYXRhKSl7XG4gICAgICAgICAgICAgICAgZGF0YVNlcmllcy5wdXNoKCdyZXBlYXRlZCcpO1xuICAgICAgICAgICAgICAgIGNsb25lU2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgZWxzZXtcbiAgICAgICAgICAgICAgICBkYXRhU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgICAgICAgY2xvbmVTZXJpZXMucHVzaChkYXRhKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICAgICAgICAgIHN0YXJ0SW5kZXg9c3RhcnRJbmRleCtnZEluZGV4O1xuXG4gICAgICAgICAgfVxuICAgICAgICAgIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1jbG9uZVNlcmllcztcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwgJiYgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0wKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgICB9XG4gICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG4gIH1cblxuICAvKiogdG8gY291bnQgZGF0YSBjb3VudCBpbiBhIHNlcmllc1xuICAgKlxuICAgKiBAcGFyYW0gc3RyaW5nXG4gICAqIEBwYXJhbSBhbnlcbiAgICpcbiAgICovXG4gIGdldFJvd1NwYW5Db3VudChzZXJpZXM6IEFycmF5PGFueT4gLGtleTogYW55KTogbnVtYmVyIHtcbiAgICByZXR1cm4gIHNlcmllcy5maWx0ZXIoc3RyID0+IHN0ciA9PT0ga2V5KS5sZW5ndGg7XG4gIH1cblxuICAvKiogdG8gY291bnQgZmlyc3Qgcm93IGdyb3VwaW5nIGRhdGEgY291bnRcbiAgICpcbiAgICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAgICpcbiAgICovXG4gIGdldEZpcnN0Um93R3JvdXBpbmcoYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhKTogQXR0cmlidXRlRGF0YXtcbiAgICBjb25zdCBzZXJpZXM9W107XG4gICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgaWYoc2VyaWVzLmluY2x1ZGVzKGVsZW1lbnQpKXtcbiAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICB9XG4gICAgICBlbHNle1xuICAgICAgc2VyaWVzLnB1c2goZWxlbWVudCk7XG4gICAgICB1bmlxdWVTZXJpZXMucHVzaChlbGVtZW50KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVTZXJpZXM9c2VyaWVzO1xuICAgIGF0dHJpYnV0ZS51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgYXR0cmlidXRlLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KGF0dHJpYnV0ZS5zZXJpZXMsZGF0YSkpO1xuICAgIH0pO1xuICAgIGF0dHJpYnV0ZS5jbG9uZUdyb3VwRGF0YT1hdHRyaWJ1dGUuZ3JvdXBEYXRhLnNsaWNlKDApO1xuICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gIH1cblxuICBzZW5kRW1haWwoZW1haWxEdG86IGFueSk6IFByb21pc2U8YW55PntcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdGhpcy5faHR0cENsaWVudC5wb3N0KCdyZXBvcnRzL2V4cG9ydCcsIGVtYWlsRHRvKS5zdWJzY3JpYmUoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqdG8gY291bnQgZGF0YSBjb3VudCBhbmQgc2V0IGNsb25lIGRhdGEgd2hpbGUgY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIGNvbHVtbkRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gICAgdGFidWxhclJlcG9ydD10aGlzLnJvd1NwYW4odGFidWxhclJlcG9ydCk7XG4gICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5mb3JFYWNoKChhdHRyKSA9PiB7XG4gICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICBpZighYXR0ci51bmlxdWVTZXJpZXMpe1xuICAgICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgICBjb25zdCB1bmlxdWVTZXJpZXM9W107XG4gICAgICAgICAgYXR0ci5zZXJpZXMuZm9yRWFjaCgoX2VsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGlmKHNlcmllcy5pbmNsdWRlcyhfZWxlbWVudCkpe1xuICAgICAgICAgICAgICBzZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBzZXJpZXMucHVzaChfZWxlbWVudCk7XG4gICAgICAgICAgICB1bmlxdWVTZXJpZXMucHVzaChfZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdW5pcXVlU2VyaWVzLnNvcnQoKTtcbiAgICAgICAgICBhdHRyLnVuaXF1ZVNlcmllcz11bmlxdWVTZXJpZXM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHIpID0+IHtcbiAgICAgIGlmKCFhdHRyLnVuaXF1ZVNlcmllcyl7XG4gICAgICAgIGlmKCFhdHRyLnVuaXF1ZVNlcmllcyl7XG4gICAgICAgICAgY29uc3Qgc2VyaWVzPVtdO1xuICAgICAgICAgIGNvbnN0IHVuaXF1ZVNlcmllcz1bXTtcbiAgICAgICAgICBhdHRyLnNlcmllcy5mb3JFYWNoKChzZXJpZXNEYXRhKSA9PiB7XG4gICAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoc2VyaWVzRGF0YSkpe1xuICAgICAgICAgICAgICBzZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBzZXJpZXMucHVzaChzZXJpZXNEYXRhKTtcbiAgICAgICAgICAgIHVuaXF1ZVNlcmllcy5wdXNoKHNlcmllc0RhdGEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHVuaXF1ZVNlcmllcy5zb3J0KCk7XG4gICAgICAgICAgYXR0ci51bmlxdWVTZXJpZXM9dW5pcXVlU2VyaWVzO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gdGFidWxhclJlcG9ydDtcblxuXG4gIH1cbiAgLyoqdG8gY291bnQgcm93cyBncm91cCBkYXRhIHdoZW4gY29sdW1uIGdyb3VwaW5nIGlzIGFwcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAgICpcbiAgICovXG4gIHJvd1NwYW4odGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXk9W107XG4gICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXg9W107XG4gICAgdGFidWxhclJlcG9ydD10aGlzLmdldEludGVnZXJBcnJheSh0YWJ1bGFyUmVwb3J0KTtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg9PT0wKXtcbiAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnQ9dHJ1ZTtcbiAgICB9XG4gICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUsaW5kZXgpID0+IHtcbiAgICAgIGlmKGluZGV4PT09MCAmJiBhdHRyaWJ1dGUucm93U3Bhbil7XG4gICAgICAgIGNvbnN0IHNlcmllcz1bXTtcbiAgICAgICAgY29uc3QgdW5pcXVlU2VyaWVzPVtdO1xuICAgICAgICBhdHRyaWJ1dGUuc2VyaWVzLmZvckVhY2goKGRhdGEpID0+IHtcbiAgICAgICAgICBpZihzZXJpZXMuaW5jbHVkZXMoZGF0YSkpe1xuICAgICAgICAgICAgc2VyaWVzLnB1c2goJ3JlcGVhdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgc2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgdW5pcXVlU2VyaWVzLnB1c2goZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgYXR0cmlidXRlLmNsb25lU2VyaWVzPXNlcmllcztcbiAgICAgICAgYXR0cmlidXRlLnVuaXF1ZVNlcmllcz11bmlxdWVTZXJpZXM7XG4gICAgICAgIGF0dHJpYnV0ZS5zZXJpZXMuZm9yRWFjaCgoZGF0YSkgPT4ge1xuICAgICAgICAgIGF0dHJpYnV0ZS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChhdHRyaWJ1dGUuc2VyaWVzLGRhdGEpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGF0dHJpYnV0ZS5jbG9uZUdyb3VwRGF0YT1hdHRyaWJ1dGUuZ3JvdXBEYXRhO1xuICAgICAgfVxuICAgICAgaWYoaW5kZXg9PT0xICYmIGF0dHJpYnV0ZS5yb3dTcGFuKXtcbiAgICAgICAgYXR0cmlidXRlPXRoaXMuZ2V0Q2xvbmVEYXRhKHRhYnVsYXJSZXBvcnQsaW5kZXgsYXR0cmlidXRlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqdG8gc2V0IGhlYWRlcnMgc2VjdGlvbiBvZiBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICogQHBhcmFtIEF0dHJpYnV0ZURhdGFcbiAqXG4gKi9cbm5ld0RhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCAsYXR0cjogQXR0cmlidXRlRGF0YSk6IFRhYnVsYXJSZXBvcnR7XG5jb25zdCBjb3VudD0odGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5pbmRleE9mKGF0dHIpKTtcbnRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YT0gbmV3IE1hcDxzdHJpbmcsYW55PigpO1xudGFidWxhclJlcG9ydC5zZWNvbmRDb2xTZXJpZXM9bmV3IEFycmF5KCk7XG50YWJ1bGFyUmVwb3J0LmZpcnN0Q29sU2VyaWVzPW5ldyBBcnJheSgpO1xuY29uc3QgX2luZGV4PXRhYnVsYXJSZXBvcnQucm93R3JvdXBpbmcubGVuZ3RoKyhjb3VudCk7XG5pZihjb3VudD09PTEpe1xuICB0YWJ1bGFyUmVwb3J0PXRoaXMuZ2V0U2Vjb25kQ29sRGF0YSh0YWJ1bGFyUmVwb3J0LF9pbmRleCk7XG5cbn1cblxuXG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09MSl7XG4gICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgIH0pO1xuICBsZXQgbT0wO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50PVtdO1xuICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5PVtdO1xuICB3aGlsZShtPCh0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5LnB1c2goZWxlbWVudCk7XG4gICAgfSk7XG4gICAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5wdXNoKG0pO1xuXG4gICAgbSsrO1xuICB9XG59XG5pZih0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aD4xICYmIGNvdW50PT09MSl7XG4gIGxldCBfY291bnQ9MDtcbiAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1sxXS51bmlxdWVTZXJpZXMuZm9yRWFjaCgoc2VyaWVzKSA9PiB7XG4gICAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgIH0pO1xuICB0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5mb3JFYWNoKChzZXJpZXMpID0+IHtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvbERhdGEuc2V0KHNlcmllcyx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgqKHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQoc2VyaWVzKS5sZW5ndGgpKTtcbiAgICBfY291bnQrPSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHNlcmllcykubGVuZ3RoKTtcbiAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQ9W107XG4gIGxldCBjbG9uZURhdGFJbmRleD0wO2NvbnN0IGRhdGExMjM9W107XG4gIHdoaWxlKGNsb25lRGF0YUluZGV4PF9jb3VudCl7XG4gICAgdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5wdXNoKGNsb25lRGF0YUluZGV4KTtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICBkYXRhMTIzLnB1c2goZWxlbWVudCk7XG5cbiAgICB9KTtcbiAgICBjbG9uZURhdGFJbmRleCsrO1xuICB9XG4gIH1cbiAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG4gIC8qKnRvIGdldCBkYXRhIHJlbmRlciB2YWx1ZSB3aGVuIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmcgaXMgYXBwbGllZFxuICAgKlxuICAgKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICAgKlxuICAgKi9cbiAgZGF0YUZhY3RvcnkodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gIGNvbnN0IHJDb3VudD10YWJ1bGFyUmVwb3J0LnJvd0dyb3VwaW5nLmxlbmd0aC0xO1xuICBjb25zdCBjQ291bnQ9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg7XG4gIGxldCBjb3VudD0wO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50c0RhdGE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuXG4gIGxldCBpPTA7XG4gIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uZ3JvdXBEYXRhPVtdO1xuICBjb25zdCBzaWRlVG90YWwxPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0xKXtcbiAgd2hpbGUoaTx0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGgpe1xuICAgIGNvbnN0IGdyb3VwRGF0YT10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudF0uZ3JvdXBEYXRhW2ldO1xuICAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgIHN1YlNlcmllcy5mb3JFYWNoKChfZGF0YSkgPT4ge1xuICAgICAgdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEucHVzaCh0aGlzLmdldFJvd1NwYW5Db3VudChzdWJTZXJpZXMsX2RhdGEpKTtcbiAgICB9KTtcbiAgICBpPWkrZ3JvdXBEYXRhO1xuICB9XG5cblxuICBpPTA7XG4gIGNvbnN0IF9fRGF0YT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG4gIGNvbnN0IF9fRGF0YTE9bmV3IE1hcDxudW1iZXIsYW55PigpO1xuICBsZXQgZmlyc3RDb2x1bW5JbmRleD0wO1xuICBjb25zdCBncmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IGNvdW50c0dyYW5kVG90YWw9QXJyYXkodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICBsZXQgY291bnRUb3RhbD0wO1xuICB3aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gICAgbGV0IGRhdGFTZXJpZXM9W107IGxldCBjb3VudERhdGFTZXJpZXM9W107XG4gICAgY29uc3QgY291bnRBcnJheT1BcnJheSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgY29uc3QgaWFycj1bXTtcbiAgICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGEuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICAgY29uc3QgZGF0YVN1YlNlcmllcz10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcy5zbGljZShpLGkrZ3JvdXBEYXRhKTtcbiAgICBjb25zdCB1bmlxdWVTZXJpZXM9IFsuLi5uZXcgU2V0KHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzKV07XG4gICAgY29uc3QgY291bnRHcm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICBsZXQgY291bnREYXRhSW5kZXg9aTtcbiAgICBjb25zdCBlbmQ9aStjb3VudEdyb3VwRGF0YTtcbiAgICB1bmlxdWVTZXJpZXMuc29ydCgpO1xuICAgIHdoaWxlKGNvdW50RGF0YUluZGV4PGVuZCl7XG4gICAgICB1bmlxdWVTZXJpZXMuZm9yRWFjaCgoZWxlbWVudCxkSW5kZXgpID0+IHtcbiAgICAgICAgaWYoZWxlbWVudD09PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2NvdW50RGF0YUluZGV4XSl7XG4gICAgICAgICAgY291bnRBcnJheS5zcGxpY2UoZEluZGV4LDEsdGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGFbY291bnREYXRhSW5kZXhdKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBjb3VudERhdGFJbmRleD1jb3VudERhdGFJbmRleCt0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YVtjb3VudERhdGFJbmRleF07XG4gICAgfVxuICAgICAgICAgICBkYXRhU2VyaWVzPVtdO1xuICAgICAgICAgIGNvbnN0IHJvd0NvdW50PVtdO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93c0RhdGE9W107XG4gICAgICAgICAgbGV0IHN1YlNlcmllc0luZGV4PTA7XG4gICAgICAgICAgaWYodGFidWxhclJlcG9ydC5jb2xHcm91cGluZy5sZW5ndGg9PT0xKXtcbiAgICAgICAgICBjb25zdCBkYXRhU2VyaWVzVmFsdWVzPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nWzBdLnVuaXF1ZVNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgICAgd2hpbGUoc3ViU2VyaWVzSW5kZXg8c3ViU2VyaWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcm93Q291bnQucHVzaChzdWJTZXJpZXNbc3ViU2VyaWVzSW5kZXhdKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93c0RhdGEucHVzaChkYXRhU3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XSk7XG4gICAgICAgICAgICBpYXJyLnB1c2goZmlyc3RDb2x1bW5JbmRleCk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5mb3JFYWNoKChpbnQpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRmaXJzdENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQsaW50LGZpcnN0Q29sdW1uSW5kZXgsc3ViU2VyaWVzSW5kZXgsc3ViU2VyaWVzLGRhdGFTZXJpZXMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBmaXJzdENvbHVtbkluZGV4PWZpcnN0Q29sdW1uSW5kZXgrc3ViU2VyaWVzW3N1YlNlcmllc0luZGV4XTtcbiAgICAgICAgICAgIHN1YlNlcmllc0luZGV4PXN1YlNlcmllc0luZGV4K3N1YlNlcmllc1tzdWJTZXJpZXNJbmRleF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGluZGV4PTA7XG4gICAgICAgICAgaWFyci5mb3JFYWNoKChpbnQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGE9IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2ludF07XG4gICAgICAgICAgICAgIGxldCBkYXRhSW5kZXg9dGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMuaW5kZXhPZihkYXRhKTtcbiAgICAgICAgICAgICAgZGF0YUluZGV4PWRhdGFJbmRleCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgICAgICAgICAgIGNvbnN0IGFycj1kYXRhU2VyaWVzLnNsaWNlKGluZGV4LHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCtpbmRleCk7XG4gICAgICAgICAgICAgIGxldCAgdmFsdWU9ZGF0YUluZGV4O1xuICAgICAgICAgICAgICBhcnIuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuc3BsaWNlKHZhbHVlLDEsZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdmFsdWUgKys7XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIGluZGV4PWluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcblxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGNvbnN0IHNpZGVUb3RhbD10aGlzLmdldFNpZGVUb3RhbChkYXRhU2VyaWVzLHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5KTtcbiAgICAgICAgICBkYXRhU2VyaWVzPWRhdGFTZXJpZXNWYWx1ZXM7XG4gICAgICAgICAgY291bnREYXRhU2VyaWVzPWRhdGFTZXJpZXNWYWx1ZXMuc2xpY2UoMCk7XG4gICAgICAgICAgY29uc3QgbWluPUFycmF5PG51bWJlcj4oKTtcbiAgICAgICAgICBjb25zdCBtYXg9QXJyYXk8bnVtYmVyPigpO1xuXG4gICAgICAgICAgZGF0YVNlcmllc1ZhbHVlcy5mb3JFYWNoKChlbGVtZW50LGluZCkgPT4ge1xuICAgICAgICAgICAgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICAgIG1pbi5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZihlbGVtZW50PGdyYW5kVG90YWxbaW5kXSl7XG4gICAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPWVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheVtpbmRdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICAgIG1heC5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgICAgICBpZihlbGVtZW50PmdyYW5kVG90YWxbaW5kXSl7XG4gICAgICAgICAgICAgICAgZ3JhbmRUb3RhbFtpbmRdPWVsZW1lbnQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICBncmFuZFRvdGFsW2luZF09KGdyYW5kVG90YWxbaW5kXStlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgICBzaWRlVG90YWwuZm9yRWFjaCgoZWxlbWVudCxpbmRleDEpID0+IHtcbiAgICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgICAgICAgICAgc2lkZVRvdGFsW2luZGV4MV09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxkYXRhU2VyaWVzVmFsdWVzLmxlbmd0aC90YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09KHNpZGVUb3RhbDFbaW5kZXgxXStlbGVtZW50KTtcblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRNaW4obWluKTtcbiAgICAgICAgICAgICAgaWYoc2lkZVRvdGFsW2luZGV4MV08c2lkZVRvdGFsMVtpbmRleDFdKXtcbiAgICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXgxXS5pbmNsdWRlcygnTWF4Jykpe1xuICAgICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWF4KG1heCk7XG4gICAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPnNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPXNpZGVUb3RhbFtpbmRleDFdO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgLy8gY291bnRzR3JhbmRUb3RhbFxuICAgICAgICAgIGNvdW50QXJyYXkuZm9yRWFjaCgoY291bnREYXRhLGNvdW50SW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF09KGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF0rY291bnREYXRhKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD1ncmFuZFRvdGFsO1xuICAgICAgICAgIGNvdW50VG90YWw9Y291bnRUb3RhbCtyb3dDb3VudC5yZWR1Y2UoKGEyLCBiMikgPT4gYTIgKyBiMiwgMCk7XG4gICAgICAgICAgaWYodGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSl7XG4gICAgICAgICAgICBfX0RhdGEuc2V0KGksZGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGkscm93Q291bnQucmVkdWNlKChhMSwgYjEpID0+IGExICsgYjEsIDApKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2lkZVRvdGFsLnNldChpLHNpZGVUb3RhbCk7XG4gICAgICAgICAgICBfX0RhdGExLnNldChpLGNvdW50RGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnJvd0NvdW50SW5kZXguc2V0KGkscm93Q291bnQpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChpLGNvdW50QXJyYXkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5kYXRhSW5kZXhTVG90YWwuc2V0KGNvdW50LGkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgICAgX19EYXRhLnNldChjb3VudCxkYXRhU2VyaWVzKTtcbiAgICAgICAgICAgIF9fRGF0YTEuc2V0KGNvdW50LGNvdW50RGF0YVNlcmllcyk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGNvdW50LHJvd0NvdW50LnJlZHVjZSgoYTIsIGIyKSA9PiBhMiArIGIyLCAwKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoY291bnQsc2lkZVRvdGFsKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoY291bnQscm93Q291bnQpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChjb3VudCxjb3VudEFycmF5KTtcblxuICAgICAgICAgIH1cblxuICAgICAgICB9XG5cbiAgICAgIGNvdW50Kys7XG4gICAgaT1pK2dyb3VwRGF0YTtcblxuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aD4wKXtcbiAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5W2luZGV4XS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsW2luZGV4XT10aGlzLmNvdW50R3JhbmRUb3RhbEF2ZyhlbGVtZW50LGNvdW50KTtcbiAgICB9XG4gIH0pO1xuICB9XG4gIHNpZGVUb3RhbDEuZm9yRWFjaCgoZWxlbWVudCxpbmRleEQpID0+IHtcbiAgICBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleERdLmluY2x1ZGVzKCdBdmcnKSl7XG4gICAgICBzaWRlVG90YWwxW2luZGV4RF09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuXG4gIH0pO1xuICB0YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGE9X19EYXRhO1xuICB0aGlzLmRhdGFSZW5kZXIuZW1pdChfX0RhdGEpO1xuICBjb25zdCBpbnRlZ2VyQXJyYXlWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKnRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmdbMF0udW5pcXVlU2VyaWVzLmxlbmd0aCkuZmlsbCgwKTtcbiAgdGFidWxhclJlcG9ydD10aGlzLmdldEludGVnZXJJbmRleChpbnRlZ2VyQXJyYXlWYWx1ZXMsdGFidWxhclJlcG9ydCk7XG4gIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlcj1fX0RhdGExO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLmNvbmNhdChzaWRlVG90YWwxKTtcbiAgdGFidWxhclJlcG9ydC5zaWRlR3JhbmRUb3RhbD1zaWRlVG90YWwxLmNvbmNhdChjb3VudFRvdGFsKTtcbiAgdGFidWxhclJlcG9ydC5jb3VudHNUb3RhbD1uZXcgQXJyYXk8bnVtYmVyPigpO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50c1RvdGFsPWNvdW50c0dyYW5kVG90YWwuY29uY2F0KGNvdW50VG90YWwpO1xufVxuXG4gIGlmKHRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPT09Mil7XG4gICAgdGFidWxhclJlcG9ydD10aGlzLmdldFNlY29uZENvbHVtbih0YWJ1bGFyUmVwb3J0KTtcbiAgICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwpe1xuICAgICAgdGFidWxhclJlcG9ydD10YWJ1bGFyUmVwb3J0LnN1YlRvdGFsVG9nZ2xlKHRhYnVsYXJSZXBvcnQpO1xuICB9XG5cblxuICBpZih0YWJ1bGFyUmVwb3J0LnN1YlRvdGFsICYmICF0YWJ1bGFyUmVwb3J0LnJvd0NvdW50KXtcbiAgICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG5jb3VudEdyYW5kVG90YWxBdmcoZGF0YTogbnVtYmVyLGNvdW50OiBudW1iZXIpOiBudW1iZXJ7XG4gIHJldHVybiAocGFyc2VGbG9hdCgoZGF0YS9jb3VudCkudG9GaXhlZCgyKSkpO1xufVxuXG4vLyBjb3VudEdyYW5kVG90YWxNaW4oc2VyaWVzOilcblxuLyoqIHJldHVybnMgc3VtIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50U3VtKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKXtcbiAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIHRvdGFsO1xufVxuXG4vKiogcmV0dXJucyBBdmVyYWdlIG9mIGludGVnZXIgIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50QXZnKHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgbGV0IHRvdGFsID0gMDtcbiAgZm9yKGNvbnN0IGRhdGEgb2Ygc2VyaWVzKXtcbiAgICB0b3RhbCArPSBOdW1iZXIoZGF0YSk7XG4gIH1cbiAgcmV0dXJuIChwYXJzZUZsb2F0KCh0b3RhbC9zZXJpZXMubGVuZ3RoKS50b0ZpeGVkKDIpKSk7XG59XG5cbi8qKiByZXR1cm5zIE1heCBvZiBpbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIGZvciBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmNvdW50TWF4KHNlcmllczogQXJyYXk8bnVtYmVyPik6IG51bWJlcntcbiAgcmV0dXJuICBNYXRoLm1heCguLi5zZXJpZXMpO1xufVxuXG4vKiogcmV0dXJucyBtaW4gb2YgaW50ZWdlciAgY29sdW1ucyBzdWJTZXJpZXMgZm9yIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuY291bnRNaW4oc2VyaWVzOiBBcnJheTxudW1iZXI+KTogbnVtYmVye1xuICByZXR1cm4gIE1hdGgubWluKC4uLnNlcmllcyk7XG59XG5cbi8qKiByZXR1cm5zIGNvdW50IG9mIHVuaXF1ZSBkYXRhIGZvciAgaW50ZWdlciBjb2x1bW5zIHN1YlNlcmllcyBpbiBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFVuaXF1ZShzZXJpZXM6IEFycmF5PGFueT4pOiBudW1iZXJ7XG4gIHJldHVybiBbLi4ubmV3IFNldChzZXJpZXMpXS5sZW5ndGg7XG5cbn1cblxuLyoqIHRvIGFkZCBpbnRlZ2VyIGNvbHVtbiBpbiBJbnRlZ2VyQXJyYXlcbiAqXG4gKiBAcGFyYW0gVGFidWxhclJlcG9ydFxuICpcbiAqL1xuZ2V0SW50ZWdlckFycmF5KHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBjb25zdCBkYXRhPVtdO1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlLGluZGV4KSA9PiB7XG4gICAgICBpZiggIWF0dHJpYnV0ZS5yb3dTcGFuICYmICFhdHRyaWJ1dGUuY29sU3Bhbil7XG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KVxuICAgICAgICB7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCd1bmlxdWUgJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXgucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZihhdHRyaWJ1dGUudHlwZT09PSdpbnQnICYmICFhdHRyaWJ1dGUucm93U3BhbiAmJiAhYXR0cmlidXRlLmNvbFNwYW4pe1xuICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJJbmRleC5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93U3VtKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ1N1bSAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZihhdHRyaWJ1dGUuYWdncmVnYXRlLnNob3dBdmcpXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRhLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlcy5pbmRleE9mKGF0dHJpYnV0ZSkpO1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkucHVzaCgnQXZnICcrYXR0cmlidXRlLmxhYmVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKGF0dHJpYnV0ZS5hZ2dyZWdhdGUuc2hvd01heClcbiAgICAgICAge1xuICAgICAgICAgIGRhdGEucHVzaCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzLmluZGV4T2YoYXR0cmlidXRlKSk7XG4gICAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5wdXNoKCdNYXggJythdHRyaWJ1dGUubGFiZWwpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYoYXR0cmlidXRlLmFnZ3JlZ2F0ZS5zaG93TWluKVxuICAgICAgICB7XG4gICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXMuaW5kZXhPZihhdHRyaWJ1dGUpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LnB1c2goJ01pbiAnK2F0dHJpYnV0ZS5sYWJlbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YT1kYXRhO1xuXG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxuXG4vKiogdG8gY291bnQgY2xvbmUgZGF0YSBmb3Igc2luZ2xlIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gYXR0cmlidXRlRGF0YVxuICpcbiAqL1xuZ2V0Q2xvbmVEYXRhKHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQsIGluZGV4OiBudW1iZXIsYXR0cmlidXRlOiBBdHRyaWJ1dGVEYXRhKTogQXR0cmlidXRlRGF0YXtcbiAgbGV0IHN0YXJ0SW5kZXg9MDtcbiAgY29uc3QgY2xvbmVTZXJpZXM9W107XG4gIGxldCBnZEluZGV4PTA7XG4gIHdoaWxlKHN0YXJ0SW5kZXg8PSAodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbmRleCAtIDFdLmdyb3VwRGF0YS5sZW5ndGgtMSkpe1xuICAgIGNvbnN0IGRhdGFTZXJpZXM9W107XG4gICAgZ2RJbmRleD10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2luZGV4IC0gMV0uZ3JvdXBEYXRhW3N0YXJ0SW5kZXhdO1xuICAgIGNvbnN0IHN1YlNlcmllcyA9IGF0dHJpYnV0ZS5zZXJpZXMuc2xpY2Uoc3RhcnRJbmRleCxzdGFydEluZGV4K2dkSW5kZXgpO1xuICAgIHN1YlNlcmllcy5mb3JFYWNoKChzdWJTZXJpZXNEYXRhKSA9PiB7XG4gICAgICBhdHRyaWJ1dGUuZ3JvdXBEYXRhLnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc3ViU2VyaWVzLHN1YlNlcmllc0RhdGEpKTtcbiAgICAgIC8vIHRvIHJlcGxhY2UgcmVwZWF0ZWQgc3ViU2VyaWVzRGF0YVxuICAgICAgaWYoZGF0YVNlcmllcy5pbmNsdWRlcyhzdWJTZXJpZXNEYXRhKSl7XG4gICAgICAgIGRhdGFTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgICAgY2xvbmVTZXJpZXMucHVzaCgncmVwZWF0ZWQnKTtcbiAgICAgIH1cbiAgICAgIGVsc2V7XG4gICAgICAgIGRhdGFTZXJpZXMucHVzaChzdWJTZXJpZXNEYXRhKTtcbiAgICAgICAgY2xvbmVTZXJpZXMucHVzaChzdWJTZXJpZXNEYXRhKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBhdHRyaWJ1dGUuY2xvbmVHcm91cERhdGE9YXR0cmlidXRlLmdyb3VwRGF0YS5zbGljZSgwKTtcbiAgICBzdGFydEluZGV4PXN0YXJ0SW5kZXgrZ2RJbmRleDtcblxuICB9XG4gIGF0dHJpYnV0ZS5jbG9uZVNlcmllcz1jbG9uZVNlcmllcztcblxuICByZXR1cm4gYXR0cmlidXRlO1xufVxuLyoqIHRvIGNvdW50IGNsb25lIGRhdGEgZm9yIGRvdWJsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sRGF0YSh0YWJ1bGFyUmVwb3J0OiBUYWJ1bGFyUmVwb3J0LCBfaW5kZXg6IG51bWJlcik6IFRhYnVsYXJSZXBvcnR7XG4gIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4LTFdLnVuaXF1ZVNlcmllcy5mb3JFYWNoKCh1bmlxdWUpID0+IHtcbiAgICBjb25zdCBkYXRhPVtdO1xuICAgIHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4LTFdLnNlcmllcy5mb3JFYWNoKChzZXJpZXMsaW5kZXgpID0+IHtcbiAgICAgICAgaWYodW5pcXVlPT09c2VyaWVzKXtcbiAgICAgICAgICBpZighZGF0YS5pbmNsdWRlcyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW19pbmRleF0uc2VyaWVzW2luZGV4XSkpe1xuICAgICAgICAgICAgZGF0YS5wdXNoKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbX2luZGV4XS5zZXJpZXNbaW5kZXhdKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLnB1c2godGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tfaW5kZXhdLnNlcmllc1tpbmRleF0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICAvLyB0YWJ1bGFyUmVwb3J0LnNlY29uZFNlcmllcz1cbiAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5zZXQodW5pcXVlLGRhdGEpO1xuICAgICAgZGF0YS5mb3JFYWNoKCgpID0+IHtcbiAgICAgICAgdGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcy5wdXNoKHVuaXF1ZSk7XG5cbiAgICAgIH0pO1xuICAgIH0pO1xuICAgdGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXM9Wy4uLm5ldyBTZXQodGFidWxhclJlcG9ydC5maXJzdENvbFNlcmllcyldO1xuICAgcmV0dXJuIHRhYnVsYXJSZXBvcnQ7XG59XG5cbi8qKiBjcmVhdGUgc2VyaWVzIHdpdGggcm93IGNvdW50XG4gKlxuICogQHBhcmFtIHRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTZXJpZXNXaXRoQ291bnQoc3dhcDE6IEFycmF5PG51bWJlcj4saW50ZWdlckFycmF5OiBBcnJheTxhbnk+LHJvd0NvdW50OiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBBcnJheTxudW1iZXI+e1xuICBsZXQgaW50ZWdlckFycmF5SW5kZXg9aW50ZWdlckFycmF5Lmxlbmd0aC0xOyBsZXQgZGF0YUluZGV4PTA7XG4gdGhpcy5jbG9uZUludGVnZXJDb3VudD1BcnJheShzd2FwMS5sZW5ndGgpLmZpbGwoMCk7XG4gY29uc3QgY291bnRJbmRleD1BcnJheShzd2FwMS5sZW5ndGgpLmZpbGwoMCk7XG4gIHdoaWxlKGludGVnZXJBcnJheUluZGV4PHN3YXAxLmxlbmd0aCl7XG4gICAgaWYoc3dhcDFbaW50ZWdlckFycmF5SW5kZXhdPjApe1xuICAgICAgY291bnRJbmRleC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLG51bGwpO1xuICAgIH1cbiAgICBlbHNle1xuICAgICAgY291bnRJbmRleC5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLG51bGwpO1xuICAgIH1cbiAgICBzd2FwMS5zcGxpY2UoaW50ZWdlckFycmF5SW5kZXgrMSwwLHJvd0NvdW50W2RhdGFJbmRleF0pO1xuICAgIHRoaXMuY2xvbmVJbnRlZ2VyQ291bnQuc3BsaWNlKGludGVnZXJBcnJheUluZGV4KzEsMCwnY291bnQnKTtcbiAgICBpZihpbnRlZ2VyQXJyYXlJbmRleDx0YWJ1bGFyUmVwb3J0LmNsb25lSW50ZWdlckFycmF5Lmxlbmd0aCl7XG4gICAgICB0aGlzLmNsb25lSW50ZWdlckNvdW50LnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDEsJ2NvdW50Jyk7fVxuICAgIGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheUluZGV4K2ludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgICBkYXRhSW5kZXgrKztcbiAgfVxuICByZXR1cm4gc3dhcDE7XG59XG5cbi8qKiBjb3VudCBJbnRlZ2VyIGNvbHVtbnMgc3ViU2VyaWVzIERhdGEgZm9yIHNpbmdsZSBjb2x1bW4gZ3JvdXBpbmdcbiAqXG4gKiBAcGFyYW0gdGFidWxhclJlcG9ydFxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIG51bWJlclxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldGZpcnN0Q29sSW50ZWdlckRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxpbnQ6IG51bWJlcixmaXJzdENvbHVtbkluZGV4OiBudW1iZXIsajogbnVtYmVyLHN1YlNlcmllczogQXJyYXk8YW55Pixzd2FwOiBBcnJheTxudW1iZXI+KTogQXJyYXk8bnVtYmVyPntcbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93VW5pcXVlQ291bnQpe1xuICAgIHN3YXAucHVzaCh0aGlzLmdldFVuaXF1ZSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93U3VtKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudFN1bSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93QXZnKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudEF2Zyh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWF4KXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1heCh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWluKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1pbih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKGZpcnN0Q29sdW1uSW5kZXgsZmlyc3RDb2x1bW5JbmRleCtzdWJTZXJpZXNbal0pKSk7XG4gIH1cblxuICByZXR1cm4gc3dhcDtcbn1cblxuLyoqIGNvdW50IEludGVnZXIgY29sdW1ucyBzdWJTZXJpZXMgRGF0YSBmb3IgZG91YmxlIGNvbHVtbiBncm91cGluZ1xuICpcbiAqIEBwYXJhbSB0YWJ1bGFyUmVwb3J0XG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gbnVtYmVyXG4gKiBAcGFyYW0gQXJyYXlcbiAqIEBwYXJhbSBBcnJheVxuICpcbiAqL1xuZ2V0U2Vjb25kQ29sSW50ZWdlckRhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxpbnQ6IG51bWJlcixzZWNvbmRDb2x1bW5JbmRleDogbnVtYmVyLG46IG51bWJlcixzd2FwOiBBcnJheTxudW1iZXI+LHh5ejogQXJyYXk8YW55Pik6IEFycmF5PG51bWJlcj57XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd1VuaXF1ZUNvdW50KXtcbiAgICBzd2FwLnB1c2godGhpcy5nZXRVbmlxdWUodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93U3VtKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudFN1bSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uYWdncmVnYXRlLnNob3dBdmcpe1xuICAgIHN3YXAucHVzaCh0aGlzLmNvdW50QXZnKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5zZXJpZXMuc2xpY2Uoc2Vjb25kQ29sdW1uSW5kZXgsc2Vjb25kQ29sdW1uSW5kZXgreHl6W25dKSkpO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbaW50XS5hZ2dyZWdhdGUuc2hvd01heCl7XG4gICAgc3dhcC5wdXNoKHRoaXMuY291bnRNYXgodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLnNlcmllcy5zbGljZShzZWNvbmRDb2x1bW5JbmRleCxzZWNvbmRDb2x1bW5JbmRleCt4eXpbbl0pKSk7XG4gIH1cbiAgaWYodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tpbnRdLmFnZ3JlZ2F0ZS5zaG93TWluKXtcbiAgICBzd2FwLnB1c2godGhpcy5jb3VudE1pbih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW2ludF0uc2VyaWVzLnNsaWNlKHNlY29uZENvbHVtbkluZGV4LHNlY29uZENvbHVtbkluZGV4K3h5eltuXSkpKTtcbiAgfVxuXG4gIHJldHVybiBzd2FwO1xufVxuXG5cbi8qKiBjb3VudCBob3Jpem9udGFsIGdyYW5kIFRvdGFsXG4gKlxuICogQHBhcmFtIEFycmF5XG4gKiBAcGFyYW0gQXJyYXlcbiAqXG4gKi9cbmdldFNpZGVUb3RhbChzd2FwOiBBcnJheTxudW1iZXI+LGludGVnZXJBcnJheTogQXJyYXk8YW55Pik6IEFycmF5PG51bWJlcj57XG4gIGxldCB0b3RhbEluZGV4PTA7IGxldCBpbnRlZ2VyQXJyYXlJbmRleD0wO1xuICBjb25zdCBzaWRlVG90YWw9QXJyYXkoaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbiAgd2hpbGUodG90YWxJbmRleDxpbnRlZ2VyQXJyYXkubGVuZ3RoKXtcbiAgICBpbnRlZ2VyQXJyYXlJbmRleD10b3RhbEluZGV4O1xuICAgIHNpZGVUb3RhbFt0b3RhbEluZGV4XT1zd2FwW2ludGVnZXJBcnJheUluZGV4XTtcbiAgICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoPHN3YXAubGVuZ3RoKXtcbiAgICAgIHNpZGVUb3RhbFt0b3RhbEluZGV4XT1zaWRlVG90YWxbdG90YWxJbmRleF0rc3dhcFtpbnRlZ2VyQXJyYXlJbmRleCtpbnRlZ2VyQXJyYXkubGVuZ3RoXTtcbiAgICAgIGludGVnZXJBcnJheUluZGV4PWludGVnZXJBcnJheUluZGV4K2ludGVnZXJBcnJheS5sZW5ndGg7XG4gICAgfVxuICAgIHRvdGFsSW5kZXgrKztcblxuICB9XG4gIHJldHVybiBzaWRlVG90YWw7XG59XG5cbi8qKiBnZXQgU2Vjb25kIGNvbHVtbiBzZXJpZXMgZ3JvdXBpbmcgZGF0YVxuICpcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIFRhYnVsYXJSZXBvcnRcbiAqIEBwYXJhbSBudW1iZXJcbiAqIEBwYXJhbSBBcnJheVxuICogQHBhcmFtIEFycmF5XG4gKlxuICovXG5nZXRTZXJpZXNEYXRhKGlhcnI6IEFycmF5PG51bWJlcj4sdGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCxyQ291bnQ6IG51bWJlcixjQ291bnQ6IG51bWJlcixzd2FwOiBBcnJheTxudW1iZXI+LGE6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+e1xuICBsZXQgaW5kZXg9MDtcbiAgaWFyci5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgbGV0IGlBcnJheUluZGV4PXRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMuaW5kZXhPZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXNbZWxlbWVudF0pO1xuICAgICAgY29uc3QgbWF4PWlBcnJheUluZGV4K3RhYnVsYXJSZXBvcnQuc2Vjb25kQ29sRGF0YS5nZXQodGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrMV0uc2VyaWVzW2VsZW1lbnRdKS5sZW5ndGg7XG4gICAgICB3aGlsZShpQXJyYXlJbmRleDxtYXgpe1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzW2lBcnJheUluZGV4XT09PXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2VsZW1lbnRdKXtcbiAgICAgICAgICAgIGNvbnN0IGFycj1zd2FwLnNsaWNlKGluZGV4LHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCtpbmRleCk7XG4gICAgICAgICAgICBsZXQgIHZhbHVlPWlBcnJheUluZGV4KnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcbiAgICAgICAgICAgICAgYS5zcGxpY2UodmFsdWUsMSxzd2FwW2luZGV4XSk7XG4gICAgICAgICAgICAgIGFyci5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgICAgICAgYS5zcGxpY2UodmFsdWUsMSxkYXRhKTtcbiAgICAgICAgICAgICAgICB2YWx1ZSArKztcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGluZGV4PWluZGV4K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpQXJyYXlJbmRleCsrO1xuICAgICAgICB9XG4gIH0pO1xuICByZXR1cm4gYTtcbn1cblxuXG4vKiogZ2V0IFNlY29uZCBjb2x1bW4gZGF0YVxuICpcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKlxuICovXG5nZXRTZWNvbmRDb2x1bW4odGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG5jb25zdCByQ291bnQ9dGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGgtMTtcbmNvbnN0IGNDb3VudD10YWJ1bGFyUmVwb3J0LmNvbEdyb3VwaW5nLmxlbmd0aDtcbmxldCBjb3VudD0wO1xuXG5sZXQgaT0wO1xudGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5ncm91cERhdGE9W107XG5jb25zdCBzaWRlVG90YWwxPUFycmF5KHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbndoaWxlKGk8dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1swXS5zZXJpZXMubGVuZ3RoKXtcbiAgY29uc3QgZ3JvdXBEYXRhPXRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50XS5ncm91cERhdGFbaV07XG4gICBjb25zdCBzdWJTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnQrY0NvdW50XS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YSk7XG4gICBzdWJTZXJpZXMuZm9yRWFjaCgoX2RhdGEpID0+IHtcbiAgICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLmdyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxfZGF0YSkpO1xuICB9KTtcbiAgaT1pK2dyb3VwRGF0YTtcbn1cbmk9MDtcbmNvbnN0IF9fRGF0YT1uZXcgTWFwPG51bWJlcixhbnk+KCk7XG5jb25zdCBfX0RhdGExPW5ldyBNYXA8bnVtYmVyLGFueT4oKTtcbmxldCBzdWJTZXJpZXNJbmRleD0wO1xubGV0IHNlY29uZENvbHVtbkluZGV4PTA7XG5jb25zdCBncmFuZFRvdGFsPUFycmF5KHRhYnVsYXJSZXBvcnQuY2xvbmVEYXRhQ291bnQubGVuZ3RoKnRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCkuZmlsbCgwKTtcbmNvbnN0IGNvdW50R3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgpLmZpbGwoMCk7XG5sZXQgY291bnRUb3RhbD0wO1xuY29uc3QgY291bnRzR3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG53aGlsZShpPHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbMF0uc2VyaWVzLmxlbmd0aCl7XG4gIGNvbnN0IHN1YlNlcmllc0RhdGFDb3VudD1bXTtcbiAgbGV0IHNlcmllc0RhdGE9W107IGxldCBjb3VudFNlcmllc0RhdGE9W107XG4gIGNvbnN0IGlhcnI9W107XG4gICBjb25zdCBncm91cERhdGE9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgICAgc2VyaWVzRGF0YT1bXTtcbiAgICAgICAgY29uc3Qgcm93Q291bnQ9W107XG4gICAgICAgIGNvbnN0IGRhdGFTZXJpZXNWYWx1ZXM9QXJyYXkodGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgqdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKS5maWxsKDApO1xuICAgICAgICBjb25zdCBncm91cERhdGFTZXJpZXM9dGFidWxhclJlcG9ydC5tYXRyaXguYXR0cmlidXRlc1tyQ291bnRdLmdyb3VwRGF0YVtpXTtcbiAgICAgICAgY29uc3QgY291bnRBcnJheT1BcnJheSh0YWJ1bGFyUmVwb3J0LnNlY29uZENvbFNlcmllcy5sZW5ndGgpLmZpbGwoMCk7XG4gICAgICAgIGNvbnN0IHN1YlNlcmllcz10YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXMuc2xpY2UoaSxpK2dyb3VwRGF0YVNlcmllcyk7XG4gICAgICAgIGNvbnN0IHN1YlNlcmllc0dyb3VwRGF0YT1bXTtcbiAgICAgICAgIHN1YlNlcmllcy5mb3JFYWNoKChkYXRhKSA9PiB7XG4gICAgICAgICAgIHN1YlNlcmllc0dyb3VwRGF0YS5wdXNoKHRoaXMuZ2V0Um93U3BhbkNvdW50KHN1YlNlcmllcyxkYXRhKSk7XG4gICAgICAgICB9KTtcbiAgICAgICAgIGxldCBzU2VyaWVzR0RJbmRleD0wO1xuXG5cbiAgICAgICAgIHdoaWxlKHNTZXJpZXNHREluZGV4PHN1YlNlcmllc0dyb3VwRGF0YS5sZW5ndGgpe1xuICAgICAgICAgIGNvbnN0IHNTZXJpZXMgPSh0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCtjQ291bnRdLnNlcmllcy5zbGljZShzdWJTZXJpZXNJbmRleCxzdWJTZXJpZXNJbmRleCtzdWJTZXJpZXNHcm91cERhdGFbc1Nlcmllc0dESW5kZXhdKSk7XG4gICAgICAgICAgc1Nlcmllcy5mb3JFYWNoKChkYXRhMSkgPT4ge1xuICAgICAgICAgICAgc3ViU2VyaWVzRGF0YUNvdW50LnB1c2godGhpcy5nZXRSb3dTcGFuQ291bnQoc1NlcmllcyxkYXRhMSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHN1YlNlcmllc0luZGV4PXN1YlNlcmllc0luZGV4K3N1YlNlcmllc0dyb3VwRGF0YVtzU2VyaWVzR0RJbmRleF07XG4gICAgICAgICAgc1Nlcmllc0dESW5kZXg9c1Nlcmllc0dESW5kZXgrc3ViU2VyaWVzR3JvdXBEYXRhW3NTZXJpZXNHREluZGV4XTtcbiAgICAgICAgIH1cbiAgICAgICAgIGxldCBzU2VyaWVzR0RDSW5kZXg9MDtcbiAgICAgICAgd2hpbGUoc1Nlcmllc0dEQ0luZGV4PHN1YlNlcmllc0RhdGFDb3VudC5sZW5ndGgpe1xuICAgICAgICAgIGNvbnN0IGRhdGE9IHRhYnVsYXJSZXBvcnQubWF0cml4LmF0dHJpYnV0ZXNbckNvdW50K2NDb3VudF0uc2VyaWVzW2krc1Nlcmllc0dEQ0luZGV4XTtcbiAgICAgICAgICBsZXQgc2VyaWVzPVtdO1xuICAgICAgICAgIHNlcmllcz10YWJ1bGFyUmVwb3J0LnNlY29uZENvbERhdGEuZ2V0KHN1YlNlcmllc1tzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBjb25zdCB4PXRhYnVsYXJSZXBvcnQuZmlyc3RDb2xTZXJpZXMuaW5kZXhPZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzW3JDb3VudCsxXS5zZXJpZXNbaStzU2VyaWVzR0RDSW5kZXhdKTtcbiAgICAgICAgICBjb25zdCBtPShzZXJpZXMuaW5kZXhPZihkYXRhKSk7XG4gICAgICAgICAgY291bnRBcnJheS5zcGxpY2UobSt4LDEsc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF0pO1xuICAgICAgICAgIHJvd0NvdW50LnB1c2goc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF0pO1xuICAgICAgICAgIGlhcnIucHVzaChzZWNvbmRDb2x1bW5JbmRleCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXguZm9yRWFjaCgoaW50KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmdldFNlY29uZENvbEludGVnZXJEYXRhKHRhYnVsYXJSZXBvcnQsaW50LHNlY29uZENvbHVtbkluZGV4LHNTZXJpZXNHRENJbmRleCxzZXJpZXNEYXRhLHN1YlNlcmllc0RhdGFDb3VudCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgc2Vjb25kQ29sdW1uSW5kZXg9c2Vjb25kQ29sdW1uSW5kZXgrc3ViU2VyaWVzRGF0YUNvdW50W3NTZXJpZXNHRENJbmRleF07XG4gICAgICAgICAgc1Nlcmllc0dEQ0luZGV4PXNTZXJpZXNHRENJbmRleCtzdWJTZXJpZXNEYXRhQ291bnRbc1Nlcmllc0dEQ0luZGV4XTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNpZGVUb3RhbD10aGlzLmdldFNpZGVUb3RhbChzZXJpZXNEYXRhLHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5KTtcbiAgICAgICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoIT09MCl7XG4gICAgICAgIHNlcmllc0RhdGE9dGhpcy5nZXRTZXJpZXNEYXRhKGlhcnIsdGFidWxhclJlcG9ydCxyQ291bnQsY0NvdW50LHNlcmllc0RhdGEsZGF0YVNlcmllc1ZhbHVlcyk7XG4gICAgICAgfVxuICAgICAgICBjb3VudFNlcmllc0RhdGE9ZGF0YVNlcmllc1ZhbHVlcy5zbGljZSgwKTtcbiAgICAgICAgY291bnRBcnJheS5mb3JFYWNoKChjb3VudERhdGEsY291bnRJbmRleCkgPT4ge1xuICAgICAgICAgIGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF09KGNvdW50c0dyYW5kVG90YWxbY291bnRJbmRleF0rY291bnREYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXk9W107XG4gICAgICAgIHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5mb3JFYWNoKChlbGVtZW50MSkgPT4ge1xuICAgICAgICAgICAgdGFidWxhclJlcG9ydC5jbG9uZUludGVnZXJBcnJheS5wdXNoKGVsZW1lbnQxKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IG1pbj1BcnJheTxudW1iZXI+KCk7XG4gICAgICAgICAgY29uc3QgbWF4PUFycmF5PG51bWJlcj4oKTtcblxuXG4gICAgICAgIGRhdGFTZXJpZXNWYWx1ZXMuZm9yRWFjaCgoZWxlbWVudCxpbmRleCkgPT4ge1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhdLmluY2x1ZGVzKCdNaW4nKSl7XG4gICAgICAgICAgICBtaW4ucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQ8Z3JhbmRUb3RhbFtpbmRleF0pe1xuICAgICAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT1lbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICBtYXgucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGlmKGVsZW1lbnQ+Z3JhbmRUb3RhbFtpbmRleF0pe1xuICAgICAgICAgICAgICBncmFuZFRvdGFsW2luZGV4XT1lbGVtZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNle1xuICAgICAgICAgIGdyYW5kVG90YWxbaW5kZXhdPShncmFuZFRvdGFsW2luZGV4XStlbGVtZW50KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG5cbiAgICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsPWdyYW5kVG90YWw7XG4gICAgICAgIHNpZGVUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4MSkgPT4ge1xuICAgICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ0F2ZycpKXtcbiAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKGVsZW1lbnQsZGF0YVNlcmllc1ZhbHVlcy5sZW5ndGgvdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKTtcbiAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT0oc2lkZVRvdGFsMVtpbmRleDFdK2VsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIGlmKHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5W2luZGV4MV0uaW5jbHVkZXMoJ01pbicpKXtcbiAgICAgICAgICAgIHNpZGVUb3RhbFtpbmRleDFdPXRoaXMuY291bnRNaW4obWluKTtcbiAgICAgICAgICAgIGlmKHNpZGVUb3RhbFtpbmRleDFdPHNpZGVUb3RhbDFbaW5kZXgxXSl7XG4gICAgICAgICAgICAgIHNpZGVUb3RhbDFbaW5kZXgxXT1zaWRlVG90YWxbaW5kZXgxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZWxzZSBpZih0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheVtpbmRleDFdLmluY2x1ZGVzKCdNYXgnKSl7XG4gICAgICAgICAgICBzaWRlVG90YWxbaW5kZXgxXT10aGlzLmNvdW50TWF4KG1heCk7XG4gICAgICAgICAgICBpZihzaWRlVG90YWxbaW5kZXgxXT5zaWRlVG90YWwxW2luZGV4MV0pe1xuICAgICAgICAgICAgICBzaWRlVG90YWwxW2luZGV4MV09c2lkZVRvdGFsW2luZGV4MV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgc2lkZVRvdGFsMVtpbmRleDFdPShzaWRlVG90YWwxW2luZGV4MV0rZWxlbWVudCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgY291bnRUb3RhbD1jb3VudFRvdGFsK3Jvd0NvdW50LnJlZHVjZSgoYTIsIGIyKSA9PiBhMiArIGIyLCAwKTtcbiAgICAgICAgaWYodGFidWxhclJlcG9ydC5yb3dHcm91cGluZy5sZW5ndGg+MSl7XG4gICAgICAgICAgX19EYXRhLnNldChpLHNlcmllc0RhdGEpO1xuICAgICAgICAgIF9fRGF0YTEuc2V0KGksY291bnRTZXJpZXNEYXRhKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGkscm93Q291bnQucmVkdWNlKChhMSwgYjEpID0+IGExICsgYjEsIDApKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnNpZGVUb3RhbC5zZXQoaSxzaWRlVG90YWwpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQucm93Q291bnRJbmRleC5zZXQoaSxyb3dDb3VudCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChpLGNvdW50QXJyYXkpO1xuICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YUluZGV4U1RvdGFsLnNldChjb3VudCxpKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNle1xuICAgICAgICAgIF9fRGF0YS5zZXQoY291bnQsc2VyaWVzRGF0YSk7XG4gICAgICAgICAgX19EYXRhMS5zZXQoY291bnQsY291bnRTZXJpZXNEYXRhKTtcbiAgICAgICAgICB0YWJ1bGFyUmVwb3J0LnRvdGFsUm93Q291bnQuc2V0KGNvdW50LHJvd0NvdW50LnJlZHVjZSgoYTEsIGIxKSA9PiBhMSArIGIxLCAwKSk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5zaWRlVG90YWwuc2V0KGNvdW50LHNpZGVUb3RhbCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5yb3dDb3VudEluZGV4LnNldChjb3VudCxyb3dDb3VudCk7XG4gICAgICAgICAgdGFidWxhclJlcG9ydC5jb3VudHNEYXRhLnNldChjb3VudCxjb3VudEFycmF5KTtcblxuICAgICAgICB9XG5cbiAgICBjb3VudCsrO1xuICBpPWkrZ3JvdXBEYXRhO1xufVxuXG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbC5mb3JFYWNoKChlbGVtZW50LGluZGV4RGF0YSkgPT4ge1xuICAgIGlmKHRhYnVsYXJSZXBvcnQuY2xvbmVJbnRlZ2VyQXJyYXlbaW5kZXhEYXRhXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgdGFidWxhclJlcG9ydC5ncmFuZFRvdGFsW2luZGV4RGF0YV09dGhpcy5jb3VudEdyYW5kVG90YWxBdmcoZWxlbWVudCxjb3VudCk7XG4gICAgfVxuICB9KTtcbiAgc2lkZVRvdGFsMS5mb3JFYWNoKChfZWxlbWVudERhdGEsaW5kZXhEKSA9PiB7XG4gICAgaWYodGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXlbaW5kZXhEXS5pbmNsdWRlcygnQXZnJykpe1xuICAgICAgc2lkZVRvdGFsMVtpbmRleERdPXRoaXMuY291bnRHcmFuZFRvdGFsQXZnKF9lbGVtZW50RGF0YSxjb3VudCk7XG4gICAgfVxuXG4gIH0pO1xudGhpcy5kYXRhUmVuZGVyLmVtaXQoX19EYXRhKTtcbnRhYnVsYXJSZXBvcnQuc2VyaWVzRGF0YT1fX0RhdGE7XG50YWJ1bGFyUmVwb3J0LmRhdGFSZW5kZXI9X19EYXRhMTtcbmNvbnN0IGludGVnZXJBcnJheVZhbHVlcz1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpLmZpbGwoMCk7XG50aGlzLmdldEludGVnZXJJbmRleChpbnRlZ2VyQXJyYXlWYWx1ZXMsdGFidWxhclJlcG9ydCk7XG50YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWw9Z3JhbmRUb3RhbDtcbnRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbD10YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwuY29uY2F0KHNpZGVUb3RhbDEpO1xudGFidWxhclJlcG9ydC5zaWRlR3JhbmRUb3RhbD1zaWRlVG90YWwxLmNvbmNhdChjb3VudFRvdGFsKTtcbnRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9bmV3IEFycmF5PG51bWJlcj4oKTtcbnRhYnVsYXJSZXBvcnQuY291bnRzVG90YWw9Y291bnRzR3JhbmRUb3RhbC5jb25jYXQoY291bnRUb3RhbCk7XG5yZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuLyoqIHRvIGdldCBzZXJpZXMgZGF0YSB3aXRoIHJvdyBjb3VudFxuICpcbiAqIEBwYXJhbSBUYWJ1bGFyUmVwb3J0XG4gKlxuICovXG5yb3dDb3VudERhdGEodGFidWxhclJlcG9ydDogVGFidWxhclJlcG9ydCk6IFRhYnVsYXJSZXBvcnR7XG4gIGNvbnN0IGNvdW50R3JhbmRUb3RhbD1BcnJheSh0YWJ1bGFyUmVwb3J0LmNsb25lRGF0YUNvdW50Lmxlbmd0aCp0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrdGFidWxhclJlcG9ydC5jbG9uZURhdGFDb3VudC5sZW5ndGgpLmZpbGwoMCk7XG4gIGNvbnN0IHRvdGFsPXRhYnVsYXJSZXBvcnQuY29sR3JvdXBpbmcubGVuZ3RoPjE/IEFycmF5KHRhYnVsYXJSZXBvcnQuc2Vjb25kQ29sU2VyaWVzLmxlbmd0aCkuZmlsbCgwKSA6QXJyYXkodGFidWxhclJlcG9ydC5jb2xHcm91cGluZ1swXS51bmlxdWVTZXJpZXMubGVuZ3RoKS5maWxsKDApO1xuICB0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5mb3JFYWNoKChlbGVtZW50LGluZGV4KSA9PntcbiAgICBsZXQgY291bnREYXRhU2VyaWVzPVtdO1xuXG4gICAgICAgIGlmKHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5nZXQoaW5kZXgpICYmIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCE9PTApe1xuICAgICAgICAgIGxldCBkYXRhPVtdO1xuICAgICAgICAgIGNvdW50RGF0YVNlcmllcz10YWJ1bGFyUmVwb3J0LnNlcmllc0RhdGEuZ2V0KGluZGV4KS5zbGljZSgwKTtcbiAgICAgICAgICAgIGRhdGE9KHRoaXMuZ2V0U2VyaWVzV2l0aENvdW50KGNvdW50RGF0YVNlcmllcyxcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5LHRhYnVsYXJSZXBvcnQuY291bnRzRGF0YS5nZXQoaW5kZXgpLHRhYnVsYXJSZXBvcnQpKTtcbiAgICAgICAgICAgIHRhYnVsYXJSZXBvcnQuZGF0YVJlbmRlci5zZXQoaW5kZXgsZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHg9MDtcbiAgICAgICAgY291bnREYXRhU2VyaWVzLmZvckVhY2goKGVsZW1lbnQxLGluZGV4MSkgPT4ge1xuICAgICAgICAgIGlmKHRoaXMuY2xvbmVJbnRlZ2VyQ291bnRbaW5kZXgxXT09PSdjb3VudCcgfHwgaW5kZXgxPT09Y291bnREYXRhU2VyaWVzLmxlbmd0aCl7XG4gICAgICAgICAgICB0b3RhbFt4XT0odG90YWxbeF0rZWxlbWVudDEpO1xuICAgICAgICAgIHgrKztcbiAgICAgICAgICB9XG4gICAgICAgICAgY291bnRHcmFuZFRvdGFsW2luZGV4MV09KGNvdW50R3JhbmRUb3RhbFtpbmRleDFdK2VsZW1lbnQxKTtcbiAgICAgICAgfSk7XG5cbiAgfSk7XG4gIHRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDI9dGFidWxhclJlcG9ydC5ncmFuZFRvdGFsLnNsaWNlKDApO1xuICBsZXQgaW50ZWdlckFycmF5SW5kZXg9dGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLTE7XG4gIGxldCBpbmRleD0wO1xuICB3aGlsZShpbnRlZ2VyQXJyYXlJbmRleDxjb3VudEdyYW5kVG90YWwubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLnNwbGljZShpbnRlZ2VyQXJyYXlJbmRleCsxLDAsdG90YWxbaW5kZXhdKTtcbiAgICBpbnRlZ2VyQXJyYXlJbmRleD1pbnRlZ2VyQXJyYXlJbmRleCt0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgrMTtcbiAgICBpbmRleCArKztcbiAgfVxuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyLnNwbGljZSgodGFidWxhclJlcG9ydC5ncmFuZFRvdGFsMi5sZW5ndGgtdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoKSx0YWJ1bGFyUmVwb3J0LmludGVnZXJBcnJheS5sZW5ndGgpO1xuICB0YWJ1bGFyUmVwb3J0LmdyYW5kVG90YWwyPXRhYnVsYXJSZXBvcnQuZ3JhbmRUb3RhbDIuY29uY2F0KHRhYnVsYXJSZXBvcnQuc2lkZUdyYW5kVG90YWwpO1xuICBsZXQgeD0wO1xuICB0YWJ1bGFyUmVwb3J0LmNvdW50SW50ZWdlckluZGV4aW5nPXRhYnVsYXJSZXBvcnQuaW50ZWdlckluZGV4aW5nLnNsaWNlKDApO1xuICB3aGlsZSh4PGNvdW50R3JhbmRUb3RhbC5sZW5ndGgpe1xuICAgIHRhYnVsYXJSZXBvcnQuY291bnRJbnRlZ2VySW5kZXhpbmcuc3BsaWNlKHgrdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLDAsbnVsbCk7XG4gICAgeD14K3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCsxO1xuICB9XG4gIHRhYnVsYXJSZXBvcnQuY291bnRUb3RhbEludGVnZXJJbmRleGluZz1bXTtcbiAgdGFidWxhclJlcG9ydC5jb3VudFRvdGFsSW50ZWdlckluZGV4aW5nPXRhYnVsYXJSZXBvcnQuZ1RvdGFsSW50ZWdlckluZGV4aW5nLnNsaWNlKDApO1xuXG4gIGxldCBtPTA7XG4gIHdoaWxlKG08dGFidWxhclJlcG9ydC5nVG90YWxJbnRlZ2VySW5kZXhpbmcubGVuZ3RoKXtcbiAgICB0YWJ1bGFyUmVwb3J0LmNvdW50VG90YWxJbnRlZ2VySW5kZXhpbmcuc3BsaWNlKG0rdGFidWxhclJlcG9ydC5pbnRlZ2VyQXJyYXkubGVuZ3RoLDAsbnVsbCk7XG4gICAgbT1tK3RhYnVsYXJSZXBvcnQuaW50ZWdlckFycmF5Lmxlbmd0aCsxO1xuICB9XG4gIGlmKHRhYnVsYXJSZXBvcnQuc3ViVG90YWwpe1xuICAgIHRhYnVsYXJSZXBvcnQ9dGFidWxhclJlcG9ydC5zdWJUb3RhbFRvZ2dsZSh0YWJ1bGFyUmVwb3J0KTtcbiAgfVxuXG5yZXR1cm4gdGFidWxhclJlcG9ydDtcbn1cblxuXG5nZXRJbnRlZ2VySW5kZXgoaW50ZWdlckFycmF5VmFsdWVzOiBBcnJheTxudW1iZXI+LHRhYnVsYXJSZXBvcnQ6IFRhYnVsYXJSZXBvcnQpOiBUYWJ1bGFyUmVwb3J0e1xuICBpZih0YWJ1bGFyUmVwb3J0Lm1hdHJpeC5hdHRyaWJ1dGVzWzBdLnNlcmllcy5sZW5ndGg+MCl7XG4gIGxldCBhcnJheUluZGV4PTA7XG4gIHdoaWxlKGFycmF5SW5kZXg8dGFidWxhclJlcG9ydC5zZXJpZXNEYXRhLmdldCgwKS5sZW5ndGgpe1xuICAgIGxldCBpbmRleDE9YXJyYXlJbmRleDtcbiAgICB0YWJ1bGFyUmVwb3J0LmludGVnZXJEYXRhLmZvckVhY2goKGVsZW1lbnQsaW5kZXgpID0+IHtcbiAgICAgIGludGVnZXJBcnJheVZhbHVlcy5zcGxpY2UoaW5kZXgxLDEsZWxlbWVudCk7XG4gICAgICBpbmRleDErKztcbiAgICB9KTtcbiAgICBhcnJheUluZGV4PWFycmF5SW5kZXgrdGFidWxhclJlcG9ydC5pbnRlZ2VyRGF0YS5sZW5ndGg7XG4gIH1cbiAgdGFidWxhclJlcG9ydC5pbnRlZ2VySW5kZXhpbmc9aW50ZWdlckFycmF5VmFsdWVzO1xuICB0YWJ1bGFyUmVwb3J0LmdUb3RhbEludGVnZXJJbmRleGluZz1pbnRlZ2VyQXJyYXlWYWx1ZXMuY29uY2F0KHRhYnVsYXJSZXBvcnQuaW50ZWdlckRhdGEpO1xuICB9XG4gIHJldHVybiB0YWJ1bGFyUmVwb3J0O1xufVxudGFibGVDbGlja0V2ZW50KHRhYnVsYXJSZXBvcnQ6IGFueSk6IHZvaWR7XG4gIGNvbnN0IHRhYnVsYXJQcm9wZXJ0eT0gbmV3IEVsZW1lbnRQcm9wZXJ0eSgpO1xuICBpZih0YWJ1bGFyUmVwb3J0IGluc3RhbmNlb2YgVGFidWxhclJlcG9ydCl7XG4gIHRhYnVsYXJQcm9wZXJ0eS5wYWdlPW51bGw7XG4gIHRhYnVsYXJQcm9wZXJ0eS5lbGVtZW50PXRhYnVsYXJSZXBvcnQ7XG4gIH1cbiAgZWxzZXtcbiAgICB0YWJ1bGFyUHJvcGVydHkucGFnZT10YWJ1bGFyUmVwb3J0O1xuICB9XG4gIHRoaXMuX3RhYmxlQ2xpY2tFdmVudC5lbWl0KHRhYnVsYXJQcm9wZXJ0eSk7XG59XG59XG4iXX0=
|