@annalib/anna-core 0.0.3 → 0.0.6
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/annalib-anna-core.d.ts +5 -0
- package/esm2020/annalib-anna-core.mjs +5 -0
- package/esm2020/lib/anna-core-shared-lib/anna-core-shared-lib.module.mjs +59 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +15 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +15 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +15 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +21 -0
- package/esm2020/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +15 -0
- package/esm2020/lib/anna-core-shared-lib/constants/shared.constant.mjs +34 -0
- package/esm2020/lib/anna-core-shared-lib/index.mjs +2 -0
- package/esm2020/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +2 -0
- package/esm2020/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +2 -0
- package/esm2020/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +3 -0
- package/esm2020/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +26 -0
- package/esm2020/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +31 -0
- package/esm2020/lib/anna-core-shared-lib/public-api.mjs +25 -0
- package/esm2020/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +180 -0
- package/esm2020/lib/anna-core-shared-lib/services/anna-filter.service.mjs +536 -0
- package/esm2020/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +52 -0
- package/esm2020/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +133 -0
- package/esm2020/lib/anna-core-shared-lib/services/anna-sort.service.mjs +185 -0
- package/esm2020/lib/anna-dropdown-lib/anna-dropdown-lib.module.mjs +43 -0
- package/esm2020/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +76 -0
- package/esm2020/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +360 -0
- package/esm2020/lib/anna-dropdown-lib/index.mjs +2 -0
- package/esm2020/lib/anna-dropdown-lib/public-api.mjs +6 -0
- package/esm2020/lib/anna-generic-table-lib/anna-generic-table-lib.module.mjs +86 -0
- package/esm2020/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +997 -0
- package/esm2020/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +125 -0
- package/esm2020/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +357 -0
- package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +189 -0
- package/esm2020/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +2 -0
- package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +178 -0
- package/esm2020/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +2 -0
- package/esm2020/lib/anna-generic-table-lib/index.mjs +2 -0
- package/esm2020/lib/anna-generic-table-lib/public-api.mjs +10 -0
- package/esm2020/public-api.mjs +7 -0
- package/esm2020/src/lib/anna-core-shared-lib/anna-core-shared-lib.module.mjs +59 -0
- package/esm2020/src/lib/anna-core-shared-lib/annalib-anna-core-src-lib-anna-core-shared-lib.mjs +5 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.mjs +15 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.mjs +15 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.mjs +22 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.mjs +15 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.mjs +21 -0
- package/esm2020/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.mjs +15 -0
- package/esm2020/src/lib/anna-core-shared-lib/constants/shared.constant.mjs +34 -0
- package/esm2020/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.mjs +2 -0
- package/esm2020/src/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.mjs +2 -0
- package/esm2020/src/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.mjs +3 -0
- package/esm2020/src/lib/anna-core-shared-lib/models/anna-tooltip.model.mjs +26 -0
- package/esm2020/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.mjs +31 -0
- package/esm2020/src/lib/anna-core-shared-lib/public-api.mjs +25 -0
- package/esm2020/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.mjs +180 -0
- package/esm2020/src/lib/anna-core-shared-lib/services/anna-filter.service.mjs +536 -0
- package/esm2020/src/lib/anna-core-shared-lib/services/anna-generic-table.service.mjs +52 -0
- package/esm2020/src/lib/anna-core-shared-lib/services/anna-global-config.service.mjs +133 -0
- package/esm2020/src/lib/anna-core-shared-lib/services/anna-sort.service.mjs +185 -0
- package/esm2020/src/lib/anna-dropdown-lib/anna-dropdown-lib.module.mjs +43 -0
- package/esm2020/src/lib/anna-dropdown-lib/annalib-anna-core-src-lib-anna-dropdown-lib.mjs +5 -0
- package/esm2020/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.mjs +76 -0
- package/esm2020/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.mjs +360 -0
- package/esm2020/src/lib/anna-dropdown-lib/public-api.mjs +6 -0
- package/esm2020/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.mjs +86 -0
- package/esm2020/src/lib/anna-generic-table-lib/annalib-anna-core-src-lib-anna-generic-table-lib.mjs +5 -0
- package/esm2020/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.mjs +997 -0
- package/esm2020/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.mjs +125 -0
- package/esm2020/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.mjs +357 -0
- package/esm2020/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.mjs +189 -0
- package/esm2020/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.mjs +2 -0
- package/esm2020/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.mjs +178 -0
- package/esm2020/src/lib/anna-generic-table-lib/directives/anna-virtual-table/index.mjs +2 -0
- package/esm2020/src/lib/anna-generic-table-lib/public-api.mjs +10 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-core-shared-lib.mjs +1294 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-core-shared-lib.mjs.map +1 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-dropdown-lib.mjs +474 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-dropdown-lib.mjs.map +1 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-generic-table-lib.mjs +1895 -0
- package/fesm2015/annalib-anna-core-src-lib-anna-generic-table-lib.mjs.map +1 -0
- package/fesm2015/annalib-anna-core.mjs +3637 -0
- package/fesm2015/annalib-anna-core.mjs.map +1 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-core-shared-lib.mjs +1294 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-core-shared-lib.mjs.map +1 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-dropdown-lib.mjs +472 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-dropdown-lib.mjs.map +1 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-generic-table-lib.mjs +1894 -0
- package/fesm2020/annalib-anna-core-src-lib-anna-generic-table-lib.mjs.map +1 -0
- package/fesm2020/annalib-anna-core.mjs +3634 -0
- package/fesm2020/annalib-anna-core.mjs.map +1 -0
- package/lib/anna-core-shared-lib/anna-core-shared-lib.module.d.ts +14 -0
- package/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -0
- package/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -0
- package/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -0
- package/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -0
- package/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +11 -0
- package/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -0
- package/lib/anna-core-shared-lib/constants/shared.constant.d.ts +32 -0
- package/lib/anna-core-shared-lib/index.d.ts +1 -0
- package/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +8 -0
- package/{src/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.ts → lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts} +9 -21
- package/{src/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.ts → lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts} +17 -27
- package/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +21 -0
- package/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -0
- package/{src/lib/anna-core-shared-lib/public-api.ts → lib/anna-core-shared-lib/public-api.d.ts} +0 -11
- package/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +25 -0
- package/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +68 -0
- package/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +14 -0
- package/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -0
- package/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +23 -0
- package/lib/anna-dropdown-lib/anna-dropdown-lib.module.d.ts +11 -0
- package/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +29 -0
- package/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +67 -0
- package/lib/anna-dropdown-lib/index.d.ts +1 -0
- package/{src/lib/anna-dropdown-lib/public-api.ts → lib/anna-dropdown-lib/public-api.d.ts} +1 -4
- package/lib/anna-generic-table-lib/anna-generic-table-lib.module.d.ts +21 -0
- package/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +173 -0
- package/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +27 -0
- package/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -0
- package/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -0
- package/{src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.ts → lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts} +0 -0
- package/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -0
- package/{src/lib/anna-generic-table-lib/directives/anna-virtual-table/index.ts → lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts} +0 -0
- package/lib/anna-generic-table-lib/index.d.ts +1 -0
- package/{src/lib/anna-generic-table-lib/public-api.ts → lib/anna-generic-table-lib/public-api.d.ts} +0 -5
- package/package.json +61 -17
- package/{src/public-api.ts → public-api.d.ts} +0 -5
- package/src/lib/anna-core-shared-lib/anna-core-shared-lib.module.d.ts +14 -0
- package/src/lib/anna-core-shared-lib/annalib-anna-core-src-lib-anna-core-shared-lib.d.ts +5 -0
- package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.d.ts +8 -0
- package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.d.ts +8 -0
- package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.d.ts +11 -0
- package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.d.ts +8 -0
- package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.d.ts +11 -0
- package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.d.ts +8 -0
- package/src/lib/anna-core-shared-lib/constants/shared.constant.d.ts +32 -0
- package/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.d.ts +8 -0
- package/src/lib/anna-core-shared-lib/models/anna-global-dropdown-config.model.d.ts +95 -0
- package/src/lib/anna-core-shared-lib/models/anna-non-editable-gt-models.d.ts +70 -0
- package/src/lib/anna-core-shared-lib/models/anna-tooltip.model.d.ts +21 -0
- package/src/lib/anna-core-shared-lib/package.json +10 -0
- package/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.d.ts +9 -0
- package/src/lib/anna-core-shared-lib/public-api.d.ts +18 -0
- package/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.d.ts +25 -0
- package/src/lib/anna-core-shared-lib/services/anna-filter.service.d.ts +68 -0
- package/src/lib/anna-core-shared-lib/services/anna-generic-table.service.d.ts +14 -0
- package/src/lib/anna-core-shared-lib/services/anna-global-config.service.d.ts +21 -0
- package/src/lib/anna-core-shared-lib/services/anna-sort.service.d.ts +23 -0
- package/src/lib/anna-dropdown-lib/anna-dropdown-lib.module.d.ts +11 -0
- package/src/lib/anna-dropdown-lib/annalib-anna-core-src-lib-anna-dropdown-lib.d.ts +5 -0
- package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.d.ts +29 -0
- package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.d.ts +67 -0
- package/src/lib/anna-dropdown-lib/package.json +10 -0
- package/src/lib/anna-dropdown-lib/public-api.d.ts +3 -0
- package/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.d.ts +21 -0
- package/src/lib/anna-generic-table-lib/annalib-anna-core-src-lib-anna-generic-table-lib.d.ts +5 -0
- package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.d.ts +173 -0
- package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.d.ts +27 -0
- package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.d.ts +141 -0
- package/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.d.ts +89 -0
- package/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/index.d.ts +1 -0
- package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.d.ts +45 -0
- package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/index.d.ts +1 -0
- package/src/lib/anna-generic-table-lib/package.json +10 -0
- package/src/lib/anna-generic-table-lib/public-api.d.ts +6 -0
- package/.browserslistrc +0 -16
- package/karma.conf.js +0 -44
- package/ng-package.json +0 -10
- package/src/lib/anna-core-shared-lib/anna-core-shared-lib.module.ts +0 -42
- package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.html +0 -22
- package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.scss +0 -0
- package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.spec.ts +0 -25
- package/src/lib/anna-core-shared-lib/components/anna-buyer-approval-icon-template/anna-buyer-approval-icon-template.component.ts +0 -15
- package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.html +0 -20
- package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.scss +0 -0
- package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.spec.ts +0 -25
- package/src/lib/anna-core-shared-lib/components/anna-live-icon-template/anna-live-icon-template.component.ts +0 -15
- package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.html +0 -3
- package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.scss +0 -16
- package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.spec.ts +0 -24
- package/src/lib/anna-core-shared-lib/components/anna-no-data/anna-no-data.component.ts +0 -20
- package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.html +0 -23
- package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.scss +0 -0
- package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.spec.ts +0 -25
- package/src/lib/anna-core-shared-lib/components/anna-notify-icon-template/anna-notify-icon-template.component.ts +0 -15
- package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.html +0 -15
- package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.scss +0 -0
- package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.spec.ts +0 -25
- package/src/lib/anna-core-shared-lib/components/anna-pay-for-performance-icon-template/anna-pay-for-performance-icon-template.component.ts +0 -19
- package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.html +0 -14
- package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.scss +0 -0
- package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.spec.ts +0 -25
- package/src/lib/anna-core-shared-lib/components/anna-rejected-icon-template/anna-rejected-icon-template.component.ts +0 -15
- package/src/lib/anna-core-shared-lib/constants/shared.constant.ts +0 -34
- package/src/lib/anna-core-shared-lib/index.ts +0 -1
- package/src/lib/anna-core-shared-lib/models/anna-generic-data-type.model.ts +0 -10
- package/src/lib/anna-core-shared-lib/models/anna-tooltip.model.ts +0 -36
- package/src/lib/anna-core-shared-lib/ng-package.json +0 -5
- package/src/lib/anna-core-shared-lib/pipes/annaFilterSearchedText.pipe.ts +0 -26
- package/src/lib/anna-core-shared-lib/scss/_colors.scss +0 -107
- package/src/lib/anna-core-shared-lib/scss/_filters.scss +0 -486
- package/src/lib/anna-core-shared-lib/scss/_fonts.scss +0 -86
- package/src/lib/anna-core-shared-lib/scss/_sort.scss +0 -81
- package/src/lib/anna-core-shared-lib/services/anna-date-time-format.service.ts +0 -197
- package/src/lib/anna-core-shared-lib/services/anna-filter.service.ts +0 -616
- package/src/lib/anna-core-shared-lib/services/anna-generic-table.service.ts +0 -50
- package/src/lib/anna-core-shared-lib/services/anna-global-config.service.ts +0 -170
- package/src/lib/anna-core-shared-lib/services/anna-sort.service.ts +0 -200
- package/src/lib/anna-dropdown-lib/anna-dropdown-lib.module.ts +0 -31
- package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.html +0 -29
- package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.scss +0 -122
- package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.spec.ts +0 -24
- package/src/lib/anna-dropdown-lib/components/anna-calendar-filter/anna-calendar-filter.component.ts +0 -76
- package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.html +0 -129
- package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.scss +0 -275
- package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.spec.ts +0 -24
- package/src/lib/anna-dropdown-lib/components/anna-week-calendar-filter/anna-week-calendar-filter.component.ts +0 -410
- package/src/lib/anna-dropdown-lib/index.ts +0 -1
- package/src/lib/anna-dropdown-lib/ng-package.json +0 -5
- package/src/lib/anna-generic-table-lib/anna-generic-table-lib.module.ts +0 -56
- package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.html +0 -848
- package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.scss +0 -488
- package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.spec.ts +0 -25
- package/src/lib/anna-generic-table-lib/components/anna-non-editable-generic-table/anna-non-editable-generic-table.component.ts +0 -1100
- package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.html +0 -47
- package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.scss +0 -1
- package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.spec.ts +0 -24
- package/src/lib/anna-generic-table-lib/components/anna-sort/anna-sort.component.ts +0 -126
- package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.html +0 -13
- package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.scss +0 -88
- package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.spec.ts +0 -25
- package/src/lib/anna-generic-table-lib/components/anna-table-virtual-scroll-viewport/anna-table-virtual-scroll-viewport.component.ts +0 -460
- package/src/lib/anna-generic-table-lib/directives/anna-fixed-row-size-table-virtual-scroll-strategy/anna-fixed-row-size-table-virtual-scroll-strategy.directive.ts +0 -237
- package/src/lib/anna-generic-table-lib/directives/anna-virtual-table/anna-virtual-table.directive.ts +0 -204
- package/src/lib/anna-generic-table-lib/index.ts +0 -1
- package/src/lib/anna-generic-table-lib/ng-package.json +0 -5
- package/src/test.ts +0 -27
- package/tsconfig.lib.json +0 -16
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -17
|
@@ -0,0 +1,997 @@
|
|
|
1
|
+
// Angular import statements
|
|
2
|
+
import { Component, Input, ViewChildren, QueryList, Output, EventEmitter, ChangeDetectorRef } from '@angular/core';
|
|
3
|
+
// Third party import statements
|
|
4
|
+
import moment from "moment";
|
|
5
|
+
import { cloneDeep, isEqual, map, uniq } from "lodash-es";
|
|
6
|
+
// User defined import statements
|
|
7
|
+
import { AnnaSortComponent } from '../anna-sort/anna-sort.component';
|
|
8
|
+
//sub-entries of anna lib import statement
|
|
9
|
+
import { radioButtonModel, AnnaSortService, AnnaDateTimeFormatService, AnnaFilterService, AnnaGenericTableService } from "@annalib/anna-core/src/lib/anna-core-shared-lib";
|
|
10
|
+
import { fromEvent } from 'rxjs';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@annalib/anna-core/src/lib/anna-core-shared-lib";
|
|
13
|
+
import * as i2 from "@angular/material/table";
|
|
14
|
+
import * as i3 from "../anna-sort/anna-sort.component";
|
|
15
|
+
import * as i4 from "ngx-skeleton-loader";
|
|
16
|
+
import * as i5 from "@angular/material/radio";
|
|
17
|
+
import * as i6 from "@angular-slider/ngx-slider";
|
|
18
|
+
import * as i7 from "@annalib/anna-core/src/lib/anna-dropdown-lib";
|
|
19
|
+
import * as i8 from "@angular/material/button-toggle";
|
|
20
|
+
import * as i9 from "@angular/common";
|
|
21
|
+
import * as i10 from "@ng-bootstrap/ng-bootstrap";
|
|
22
|
+
import * as i11 from "@angular/forms";
|
|
23
|
+
export class AnnaNonEditableGenericTableComponent {
|
|
24
|
+
constructor(cdRef, annaSortService, annaDateTimeFormatService, annaFilterService, annaGenericTableService) {
|
|
25
|
+
this.cdRef = cdRef;
|
|
26
|
+
this.annaSortService = annaSortService;
|
|
27
|
+
this.annaDateTimeFormatService = annaDateTimeFormatService;
|
|
28
|
+
this.annaFilterService = annaFilterService;
|
|
29
|
+
this.annaGenericTableService = annaGenericTableService;
|
|
30
|
+
this.maximumRowsWhichCanBeRenderedWithoutScroll = 5;
|
|
31
|
+
this.toggleCheckbox = new EventEmitter();
|
|
32
|
+
this.toggleRowCheckbox = new EventEmitter();
|
|
33
|
+
this.toggleHeaderCheckbox = new EventEmitter();
|
|
34
|
+
this.undoIconClicked = new EventEmitter();
|
|
35
|
+
this.filterAppliedToTable = new EventEmitter();
|
|
36
|
+
this.sortingAppliedToTable = new EventEmitter();
|
|
37
|
+
this.rowClicked = new EventEmitter();
|
|
38
|
+
this.radioButtonSelected = new EventEmitter();
|
|
39
|
+
this.columnFilterOpened = new EventEmitter();
|
|
40
|
+
this.columnFilterClosed = new EventEmitter();
|
|
41
|
+
this.gtIconClicked = new EventEmitter();
|
|
42
|
+
this.gtSVGIconClicked = new EventEmitter();
|
|
43
|
+
this.gtTextActionClicked = new EventEmitter();
|
|
44
|
+
this.gtViewDetailClicked = new EventEmitter();
|
|
45
|
+
this.noDataWidth = "55%";
|
|
46
|
+
this.disableClearAllBtn = true;
|
|
47
|
+
this.disableColumnClearAllBtn = true;
|
|
48
|
+
this.allSelected = 0;
|
|
49
|
+
this.options = {
|
|
50
|
+
floor: 0,
|
|
51
|
+
ceil: 0,
|
|
52
|
+
step: 0.1
|
|
53
|
+
};
|
|
54
|
+
this.tableColumns = [];
|
|
55
|
+
this.totalRowColumns = null;
|
|
56
|
+
this.isScrolledLeft = false;
|
|
57
|
+
this.rowBorderWidth = 2;
|
|
58
|
+
this.PfpIconActiveColor = "#9B1B93";
|
|
59
|
+
this.PfpIconDisableColor = "rgba(189,189,189,0.5)";
|
|
60
|
+
this.setTooltipRadioNames();
|
|
61
|
+
}
|
|
62
|
+
ngOnInit() {
|
|
63
|
+
// this.tableData = this.numberOfSkeletonColumns;
|
|
64
|
+
}
|
|
65
|
+
ngOnChanges(changes) {
|
|
66
|
+
// console.log("generic");
|
|
67
|
+
// console.log(this.tableHeaders);
|
|
68
|
+
// console.log(JSON.stringify(this.tableData));
|
|
69
|
+
if (this.showSkeletonLoading) {
|
|
70
|
+
this.tableData = this.numberOfSkeletonColumns;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
this.setInitialValueMapData();
|
|
74
|
+
this.disableEnableEachColumnFilters();
|
|
75
|
+
this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);
|
|
76
|
+
this.showSkeletonLoading = false;
|
|
77
|
+
}
|
|
78
|
+
//setting table column here as well because while showing skeleton loader, we should show table headers.
|
|
79
|
+
if (changes['tableHeaders'] && changes['tableHeaders'].currentValue) {
|
|
80
|
+
this.tableColumns = this.tableHeaders.filter(x => x.visible).map(x => x.headerInfo[0].objectKey);
|
|
81
|
+
}
|
|
82
|
+
if (changes['totalRowInfo'] && changes['totalRowInfo'].currentValue) {
|
|
83
|
+
this.totalRowColumns = this.totalRowInfo.map(x => x.colName);
|
|
84
|
+
}
|
|
85
|
+
this.cdRef.detectChanges();
|
|
86
|
+
}
|
|
87
|
+
trackByFn(index) {
|
|
88
|
+
return index;
|
|
89
|
+
}
|
|
90
|
+
setTooltipRadioNames() {
|
|
91
|
+
this.tooltipRadioTextMap = new Map();
|
|
92
|
+
this.tooltipRadioTextMap.set("StartTimeForFilter", "Start Time");
|
|
93
|
+
this.tooltipRadioTextMap.set("EndTimeForFilter", "End Time");
|
|
94
|
+
this.tooltipRadioTextMap.set("start_time_for_filter", "Start Time");
|
|
95
|
+
this.tooltipRadioTextMap.set("end_time_for_filter", "End Time");
|
|
96
|
+
this.tooltipRadioTextMap.set("primaryAEName", "Primary AE");
|
|
97
|
+
this.tooltipRadioTextMap.set("region", "Region");
|
|
98
|
+
this.tooltipRadioTextMap.set("agencyName", "Agency");
|
|
99
|
+
this.tooltipRadioTextMap.set("location", "Location");
|
|
100
|
+
this.tooltipRadioTextMap.set("advertiserName", "Advertiser");
|
|
101
|
+
this.tooltipRadioTextMap.set("productCode", "Product Code");
|
|
102
|
+
this.tooltipRadioTextMap.set("flightStartDate", "Start Date");
|
|
103
|
+
this.tooltipRadioTextMap.set("flightEndDate", "End Date");
|
|
104
|
+
this.tooltipRadioTextMap.set("orderIdAndRevNumber", "STN Order#-Rev#");
|
|
105
|
+
this.tooltipRadioTextMap.set("alternateOrderId", "Buyer Order#");
|
|
106
|
+
this.tooltipRadioTextMap.set("grp", "GRP");
|
|
107
|
+
this.tooltipRadioTextMap.set("cpp", "CPP");
|
|
108
|
+
this.tooltipRadioTextMap.set("imps", "IMPS");
|
|
109
|
+
this.tooltipRadioTextMap.set("cpm", "CPM");
|
|
110
|
+
this.tooltipRadioTextMap.set("offeredMGs", "Offered MG");
|
|
111
|
+
this.tooltipRadioTextMap.set("outstandingPE", "O/S PE");
|
|
112
|
+
this.tooltipRadioTextMap.set("offeredADUs", "Offered ADUs");
|
|
113
|
+
this.tooltipRadioTextMap.set("udDeficitValue", "Pending Audience Delta");
|
|
114
|
+
this.tooltipRadioTextMap.set("startEndTimeMulti", "Time");
|
|
115
|
+
this.tooltipRadioTextMap.set("bookedValue", "Booked");
|
|
116
|
+
this.tooltipRadioTextMap.set("bookedSpots", "Spots");
|
|
117
|
+
this.tooltipRadioTextMap.set("userChanges", "Other changes");
|
|
118
|
+
this.tooltipRadioTextMap.set("inventoryCode", "Inventory Code");
|
|
119
|
+
this.tooltipRadioTextMap.set("program", "Program");
|
|
120
|
+
this.tooltipRadioTextMap.set("agency", "Agency");
|
|
121
|
+
this.tooltipRadioTextMap.set("advertiser", "Advertiser");
|
|
122
|
+
this.tooltipRadioTextMap.set("startDate", "Start Date");
|
|
123
|
+
this.tooltipRadioTextMap.set("endDate", "End Date");
|
|
124
|
+
this.tooltipRadioTextMap.set("rcvPreempt", "Madegood PE");
|
|
125
|
+
this.tooltipRadioTextMap.set("osPreempt", "O/S PE");
|
|
126
|
+
this.tooltipRadioTextMap.set("rcvUnderDly", "Recovered UD");
|
|
127
|
+
this.tooltipRadioTextMap.set("osUnderDly", "O/s Under Dly");
|
|
128
|
+
this.tooltipRadioTextMap.set("primaryAe", "Primary AE");
|
|
129
|
+
this.tooltipRadioTextMap.set("region", "Region");
|
|
130
|
+
this.tooltipRadioTextMap.set("revCode1", "Rev code 1");
|
|
131
|
+
this.tooltipRadioTextMap.set("orderNoRevNo", "STN Order#-Rev#");
|
|
132
|
+
this.tooltipRadioTextMap.set("revCode2", "Rev code 2");
|
|
133
|
+
this.tooltipRadioTextMap.set("revCode3", "Rev code 3");
|
|
134
|
+
this.tooltipRadioTextMap.set("booked", "Booked");
|
|
135
|
+
this.tooltipRadioTextMap.set("spots", "Spots");
|
|
136
|
+
this.tooltipRadioTextMap.set("postedAudPercent", "Posted %");
|
|
137
|
+
this.tooltipRadioTextMap.set("revision", "Revision");
|
|
138
|
+
this.tooltipRadioTextMap.set("productCode", "Product Code");
|
|
139
|
+
this.tooltipRadioTextMap.set("buyerOrderId", "ALT Order#");
|
|
140
|
+
this.tooltipRadioTextMap.set("demo", "Demo");
|
|
141
|
+
this.tooltipRadioTextMap.set("postedAdu", "Posted ADUs");
|
|
142
|
+
this.tooltipRadioTextMap.set("scheduledAdu", "Scheduled ADUs");
|
|
143
|
+
this.tooltipRadioTextMap.set("audienceDeficit", "Audience Deficit");
|
|
144
|
+
this.tooltipRadioTextMap.set("postedAudPercent", "Posted Audience %");
|
|
145
|
+
}
|
|
146
|
+
generateTableDataWrapper() {
|
|
147
|
+
this.showSkeletonLoading = true;
|
|
148
|
+
this.tableDataWrapper = [];
|
|
149
|
+
let rowObject;
|
|
150
|
+
let columnName;
|
|
151
|
+
let columnObject;
|
|
152
|
+
let columnObjectKey;
|
|
153
|
+
let keysUsedForTableDisplay;
|
|
154
|
+
let keysUsedForColumn;
|
|
155
|
+
let additionalInfoObject;
|
|
156
|
+
let additionalKeys;
|
|
157
|
+
this.tableData.forEach((obj) => {
|
|
158
|
+
rowObject = {};
|
|
159
|
+
keysUsedForTableDisplay = [];
|
|
160
|
+
for (var colNum in this.tableHeaders) {
|
|
161
|
+
columnObject = {};
|
|
162
|
+
if (!this.tableHeaders[colNum].visible) {
|
|
163
|
+
continue;
|
|
164
|
+
}
|
|
165
|
+
columnName = "";
|
|
166
|
+
keysUsedForColumn = [];
|
|
167
|
+
this.tableHeaders[colNum].headerInfo.forEach((header) => {
|
|
168
|
+
if (header.typeOfBodyData === "STRING") {
|
|
169
|
+
columnObjectKey = header.objectKey;
|
|
170
|
+
columnObject[columnObjectKey] = obj[columnObjectKey];
|
|
171
|
+
keysUsedForTableDisplay.push(columnObjectKey);
|
|
172
|
+
keysUsedForColumn.push(columnObjectKey);
|
|
173
|
+
}
|
|
174
|
+
else if (header.typeOfBodyData === "ICON") {
|
|
175
|
+
columnObjectKey = header.typeOfBodyData;
|
|
176
|
+
columnObject[columnObjectKey] = obj[header.objectKey];
|
|
177
|
+
keysUsedForColumn.push(header.objectKey);
|
|
178
|
+
}
|
|
179
|
+
else if (header.typeOfBodyData === "CHECKBOX") {
|
|
180
|
+
columnObjectKey = header.typeOfBodyData;
|
|
181
|
+
columnObject[columnObjectKey] = obj[header.objectKey];
|
|
182
|
+
keysUsedForColumn.push(header.objectKey);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
for (var i = 0; i < keysUsedForColumn.length; i++) {
|
|
186
|
+
columnName += keysUsedForColumn[i];
|
|
187
|
+
if (i !== keysUsedForColumn.length - 1) {
|
|
188
|
+
columnName += ',';
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
rowObject[columnName] = columnObject;
|
|
192
|
+
}
|
|
193
|
+
additionalInfoObject = {};
|
|
194
|
+
additionalKeys = Object.keys(obj).filter(key => !keysUsedForTableDisplay.includes(key));
|
|
195
|
+
additionalKeys.forEach(key => {
|
|
196
|
+
additionalInfoObject[key] = obj[key];
|
|
197
|
+
});
|
|
198
|
+
rowObject.AdditionalInfo = additionalInfoObject;
|
|
199
|
+
this.tableDataWrapper.push(rowObject);
|
|
200
|
+
});
|
|
201
|
+
this.tableData = this.tableDataWrapper;
|
|
202
|
+
this.showSkeletonLoading = false;
|
|
203
|
+
// console.log(JSON.stringify(this.tableDataWrapper));
|
|
204
|
+
}
|
|
205
|
+
selectOrUnselectCheckbox(rowData, columnKeys, isCheckboxSelected) {
|
|
206
|
+
this.toggleCheckbox.emit({ rowData, columnKeys, isCheckboxSelected });
|
|
207
|
+
}
|
|
208
|
+
selectUnselectAllRows() {
|
|
209
|
+
this.toggleHeaderCheckbox.emit();
|
|
210
|
+
}
|
|
211
|
+
selectUnselectRow(rowData) {
|
|
212
|
+
this.toggleRowCheckbox.emit(rowData);
|
|
213
|
+
}
|
|
214
|
+
undoCreditedSpot(data) {
|
|
215
|
+
this.undoIconClicked.emit({ data, mgOrCredit: "Credit" });
|
|
216
|
+
}
|
|
217
|
+
undoMgSpot(data) {
|
|
218
|
+
this.undoIconClicked.emit({ data, mgOrCredit: "MakeGood" });
|
|
219
|
+
}
|
|
220
|
+
//Sort and Filter Logic begins!
|
|
221
|
+
closeTooltip() {
|
|
222
|
+
if (this.tooltip && this.tooltip.isOpen()) {
|
|
223
|
+
this.tooltip.close();
|
|
224
|
+
}
|
|
225
|
+
this.tooltip = null;
|
|
226
|
+
this.disableCheckboxApply = false;
|
|
227
|
+
if (!this.bindValueFuncCalled) {
|
|
228
|
+
this.columnFilterClosed.emit();
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
closeSortTooltip() {
|
|
232
|
+
if (this.annaSortService.tooltip && this.annaSortService.tooltip.isOpen()) {
|
|
233
|
+
this.annaSortService.tooltip.close();
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
initFilters() {
|
|
237
|
+
this.annaFilterService.tooltipMap = new Map();
|
|
238
|
+
this.annaFilterService.tooltipSelectedMap = new Map();
|
|
239
|
+
this.annaSortService.sortByAsc = new Map();
|
|
240
|
+
this.annaSortService.sortByDesc = new Map();
|
|
241
|
+
this.annaFilterService.selectedRadio = null;
|
|
242
|
+
this.annaFilterService.appliedFiltersArray = [];
|
|
243
|
+
//closing the sort tooltip if we route on the same route or if we click dropdown filters
|
|
244
|
+
this.closeSortTooltip();
|
|
245
|
+
this.annaSortService.tooltip = null;
|
|
246
|
+
this.disableClearAllBtn = true;
|
|
247
|
+
this.disableTimeFilterApplyBtn = false;
|
|
248
|
+
}
|
|
249
|
+
setInitialValueMapData() {
|
|
250
|
+
this.annaFilterService.initialValueMap = new Map();
|
|
251
|
+
this.tableHeaders.forEach((column) => {
|
|
252
|
+
column.headerInfo.forEach((header) => {
|
|
253
|
+
if (header.filter === "SLIDER") {
|
|
254
|
+
header.filterObjectKeys.forEach((key) => {
|
|
255
|
+
let min = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, key, true);
|
|
256
|
+
let max = this.annaFilterService.returnMaxAndMinValue(this.clonedTableData, key, false);
|
|
257
|
+
let obj = { min, max };
|
|
258
|
+
this.annaFilterService.initialValueMap.set(key, obj);
|
|
259
|
+
});
|
|
260
|
+
}
|
|
261
|
+
else if (header.filter === "DATE") {
|
|
262
|
+
header.filterObjectKeys.forEach((key) => {
|
|
263
|
+
if (key == "period") {
|
|
264
|
+
const minMaxStartDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData, "startDate");
|
|
265
|
+
const minMaxEndDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData, "endDate");
|
|
266
|
+
let dateObj = { minSelectedDate: minMaxStartDate[0], maxSelectedDate: minMaxEndDate[1] };
|
|
267
|
+
this.annaFilterService.initialValueMap.set(key, dateObj);
|
|
268
|
+
}
|
|
269
|
+
else {
|
|
270
|
+
const minMaxDate = this.annaFilterService.returnMinAndMaxDate(this.clonedTableData, key);
|
|
271
|
+
let obj = { minSelectedDate: minMaxDate[0], maxSelectedDate: minMaxDate[1] };
|
|
272
|
+
this.annaFilterService.initialValueMap.set(key, obj);
|
|
273
|
+
}
|
|
274
|
+
});
|
|
275
|
+
}
|
|
276
|
+
else if (header.filter === "TIME") {
|
|
277
|
+
header.filterObjectKeys.forEach((key) => {
|
|
278
|
+
let data = this.clonedTableData.filter((obj) => !["", "-", null, "0", "<multi>"].includes(obj[key]));
|
|
279
|
+
let timeArr = map(data, key);
|
|
280
|
+
timeArr.sort((a, b) => {
|
|
281
|
+
return this.annaDateTimeFormatService.sortByTimeAscending(a, b);
|
|
282
|
+
});
|
|
283
|
+
let obj = {
|
|
284
|
+
fromTime: timeArr[0],
|
|
285
|
+
toTime: timeArr[timeArr.length - 1],
|
|
286
|
+
};
|
|
287
|
+
if (this.gtGeneralConfig.component === "SPOTDETAILS" || this.gtGeneralConfig.component === "EXCLUDEINVENTORYPOPUP") {
|
|
288
|
+
let includeMulti = this.clonedTableData.findIndex((obj) => obj[key] == "<multi>") != -1;
|
|
289
|
+
let includeZero = this.clonedTableData.findIndex((obj) => obj[key] == "0") != -1;
|
|
290
|
+
let includeTimeRange = this.clonedTableData.findIndex((obj) => obj[key] != "0" && obj[key] != "<multi>") != -1;
|
|
291
|
+
let obj = {
|
|
292
|
+
fromTime: timeArr[0],
|
|
293
|
+
toTime: timeArr[timeArr.length - 1],
|
|
294
|
+
includeMulti: includeMulti,
|
|
295
|
+
includeZero: includeZero,
|
|
296
|
+
includeTimeRange: includeTimeRange
|
|
297
|
+
};
|
|
298
|
+
this.annaFilterService.initialValueMap.set(key, obj);
|
|
299
|
+
}
|
|
300
|
+
else if (this.gtGeneralConfig.component === "RATING") {
|
|
301
|
+
let includeMulti = this.clonedTableData.findIndex((obj) => obj[key][0] == "<multi>") != -1;
|
|
302
|
+
let includeZero = this.clonedTableData.findIndex((obj) => obj[key][0] == "0") != -1;
|
|
303
|
+
let includeTimeRange = this.clonedTableData.findIndex((obj) => obj[key][0] != "0" && obj[key][0] != "<multi>") != -1;
|
|
304
|
+
let startTimeArr = map(this.clonedTableData, "startTime");
|
|
305
|
+
let endTimeArr = map(this.clonedTableData, "endTime");
|
|
306
|
+
startTimeArr.sort((a, b) => {
|
|
307
|
+
return this.annaDateTimeFormatService.sortByTimeAscending(a, b);
|
|
308
|
+
});
|
|
309
|
+
endTimeArr.sort((a, b) => {
|
|
310
|
+
return this.annaDateTimeFormatService.sortByTimeDescending(a, b);
|
|
311
|
+
});
|
|
312
|
+
let obj = {
|
|
313
|
+
fromTime: startTimeArr[0],
|
|
314
|
+
toTime: endTimeArr[0],
|
|
315
|
+
includeMulti: includeMulti,
|
|
316
|
+
includeZero: includeZero,
|
|
317
|
+
includeTimeRange: includeTimeRange
|
|
318
|
+
};
|
|
319
|
+
this.annaFilterService.initialValueMap.set(key, obj);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
this.annaFilterService.initialValueMap.set(key, obj);
|
|
323
|
+
}
|
|
324
|
+
});
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
});
|
|
328
|
+
}
|
|
329
|
+
isTooltipActive(header) {
|
|
330
|
+
return this.annaFilterService.isTooltipActive(header);
|
|
331
|
+
}
|
|
332
|
+
bindTheValueToToolTip(tooltip, header) {
|
|
333
|
+
this.bindValueFuncCalled = true;
|
|
334
|
+
let containerToScroll;
|
|
335
|
+
if (this.gtGeneralConfig.component === "SPOTDETAILS" || this.gtGeneralConfig.component === "DRRLISTING") {
|
|
336
|
+
containerToScroll = document.getElementsByClassName("scrollable-container")[0];
|
|
337
|
+
var mediaQuery = window.matchMedia("(max-width: 1366px)");
|
|
338
|
+
if (mediaQuery.matches) {
|
|
339
|
+
containerToScroll.scroll(0, this.gtGeneralConfig.verticalScrollOffsetForFilterTooltip);
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
// if same tooltip opened close it
|
|
343
|
+
if (tooltip == this.tooltip) {
|
|
344
|
+
this.bindValueFuncCalled = false;
|
|
345
|
+
this.closeTooltip();
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
this.searchBar = '';
|
|
349
|
+
let enabledHeaders = [];
|
|
350
|
+
header.forEach((item) => {
|
|
351
|
+
if (item == "period") {
|
|
352
|
+
let uniqStartDate = uniq(this.tableData.map((u) => u["startDate"]));
|
|
353
|
+
let uniqEndDate = uniq(this.tableData.map((u) => u["endDate"]));
|
|
354
|
+
if (uniqStartDate.length > 1 || uniqEndDate.length > 1 || this.isTooltipActive([item])) {
|
|
355
|
+
enabledHeaders.push(item);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
else if (uniq(this.tableData.map((u) => u[item])).length > 1 || this.isTooltipActive([item])) {
|
|
359
|
+
enabledHeaders.push(item);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
this.openTooltip(tooltip, enabledHeaders);
|
|
363
|
+
if (window.innerWidth < 1500 && window.innerHeight < 768 && !this.annaFilterService.sliderSet.has(header[0])) {
|
|
364
|
+
this.columnFilterOpened.emit();
|
|
365
|
+
}
|
|
366
|
+
this.showCheckboxFilterRadioButtons = enabledHeaders.length > 1;
|
|
367
|
+
this.populateTooltipDataBasedOnSelectedRadio(enabledHeaders[0]);
|
|
368
|
+
this.bindValueFuncCalled = false;
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
openTooltip(tooltip, header) {
|
|
372
|
+
this.closeTooltip();
|
|
373
|
+
this.tooltip = tooltip;
|
|
374
|
+
this.tooltip.open();
|
|
375
|
+
//convert key into the header
|
|
376
|
+
this.radioButtons = header.map((key) => {
|
|
377
|
+
let value = this.tooltipRadioTextMap.has(key)
|
|
378
|
+
? this.tooltipRadioTextMap.get(key)
|
|
379
|
+
: key; //change to display name
|
|
380
|
+
return new radioButtonModel(key, value);
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
clearColumnFilter() {
|
|
384
|
+
this.annaFilterService.clearColumnFilter();
|
|
385
|
+
this.toolTipdata = null;
|
|
386
|
+
this.tempTooltipData = null;
|
|
387
|
+
this.closeTooltip();
|
|
388
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
389
|
+
this.checkIfSortingIsApplied();
|
|
390
|
+
this.filterAppliedToTable.emit(this.tableData);
|
|
391
|
+
this.disableEnableEachColumnFilters();
|
|
392
|
+
}
|
|
393
|
+
populateTooltipDataBasedOnSelectedRadio(header) {
|
|
394
|
+
this.disableSliderApplyButton = false;
|
|
395
|
+
this.disableCheckboxApply = false;
|
|
396
|
+
if (this.toolTipdata) {
|
|
397
|
+
this.revert();
|
|
398
|
+
}
|
|
399
|
+
this.annaFilterService.selectedRadio = header;
|
|
400
|
+
let selectedFilterSet = new Set(this.annaFilterService.appliedFiltersArray);
|
|
401
|
+
this.disableColumnClearAllBtn = selectedFilterSet.has(this.annaFilterService.selectedRadio) ? false : true;
|
|
402
|
+
if (this.annaFilterService.calendarSet.has(header)) {
|
|
403
|
+
this.getCalendarData();
|
|
404
|
+
}
|
|
405
|
+
else if (this.annaFilterService.sliderSet.has(header)) {
|
|
406
|
+
this.getSliderData(header);
|
|
407
|
+
}
|
|
408
|
+
else if (this.annaFilterService.timeSet.has(header)) {
|
|
409
|
+
this.getTimeFilterData(header);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
this.getCheckboxData(header);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
getSliderData(header) {
|
|
416
|
+
if (header === "Rate") {
|
|
417
|
+
this.annaFilterService.translateFunc = "currency";
|
|
418
|
+
}
|
|
419
|
+
else {
|
|
420
|
+
this.annaFilterService.translateFunc = "normal";
|
|
421
|
+
}
|
|
422
|
+
this.options = this.annaFilterService.populateSliderTooltip(this.clonedTableData, this.tableData);
|
|
423
|
+
this.disableSliderApplyButton = this.disableSliderApplyBtn();
|
|
424
|
+
let selectedTooltipObj;
|
|
425
|
+
if (this.annaFilterService.tooltipSelectedMap.has(header)) {
|
|
426
|
+
selectedTooltipObj = this.annaFilterService.tooltipSelectedMap.get(header);
|
|
427
|
+
}
|
|
428
|
+
else {
|
|
429
|
+
selectedTooltipObj = this.annaFilterService.initialValueMap.get(header);
|
|
430
|
+
}
|
|
431
|
+
this.sliderMinValue = selectedTooltipObj.min < this.options.floor ? this.options.floor : selectedTooltipObj.min;
|
|
432
|
+
this.sliderMaxValue = selectedTooltipObj.max < this.options.ceil ? selectedTooltipObj.max : this.options.ceil;
|
|
433
|
+
//default step values
|
|
434
|
+
this.options.step = 1;
|
|
435
|
+
this.sliderFilterTextBoxStep = "1";
|
|
436
|
+
if (header !== "WeekNumber") {
|
|
437
|
+
this.options.step = 0.1;
|
|
438
|
+
this.sliderFilterTextBoxStep = "0.1";
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
getCheckboxData(header) {
|
|
442
|
+
this.tempTooltipData = this.annaFilterService.populateTooltip(header, this.clonedTableData, this.tableData);
|
|
443
|
+
this.allSelected = this.annaFilterService.isAllOptionsSelected();
|
|
444
|
+
this.showAll = this.tempTooltipData.filter((x) => !x.isHidden).length > 1 ? true : false;
|
|
445
|
+
this.toolTipdata = cloneDeep(this.tempTooltipData);
|
|
446
|
+
}
|
|
447
|
+
getCalendarData() {
|
|
448
|
+
const parsingFormat = "MM/DD/YYYY";
|
|
449
|
+
let minMaxdate = this.annaFilterService.populateDatePickerTooltipWithData(this.clonedTableData, this.tableData);
|
|
450
|
+
let selectedDateObj;
|
|
451
|
+
if (this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)) {
|
|
452
|
+
selectedDateObj = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);
|
|
453
|
+
}
|
|
454
|
+
else {
|
|
455
|
+
selectedDateObj = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);
|
|
456
|
+
}
|
|
457
|
+
// For startDate
|
|
458
|
+
// selected date is less than date which we get
|
|
459
|
+
if ((selectedDateObj.minSelectedDate).isAfter(minMaxdate.minStartDate)) {
|
|
460
|
+
this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.minSelectedDate, parsingFormat);
|
|
461
|
+
}
|
|
462
|
+
else {
|
|
463
|
+
this.selectedMinDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxdate.minStartDate, parsingFormat);
|
|
464
|
+
}
|
|
465
|
+
// For endData
|
|
466
|
+
// selectedDate is less than date which we get
|
|
467
|
+
if ((selectedDateObj.maxSelectedDate).isAfter(minMaxdate.maxEndDate)) {
|
|
468
|
+
this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxdate.maxEndDate, parsingFormat);
|
|
469
|
+
}
|
|
470
|
+
else {
|
|
471
|
+
this.selectedMaxDate = this.annaDateTimeFormatService.convertToNgbDate(selectedDateObj.maxSelectedDate, parsingFormat);
|
|
472
|
+
}
|
|
473
|
+
this.calendarMinEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxdate.minStartDate, parsingFormat);
|
|
474
|
+
this.calendarMaxEnabledDate = this.annaDateTimeFormatService.convertToNgbDate(minMaxdate.maxEndDate, parsingFormat);
|
|
475
|
+
}
|
|
476
|
+
getTimeFilterData(header) {
|
|
477
|
+
if (this.annaFilterService.tooltipSelectedMap.has(header)) {
|
|
478
|
+
this.selectedFromTime = this.annaFilterService.tooltipSelectedMap.get(header).fromTime;
|
|
479
|
+
this.selectedToTime = this.annaFilterService.tooltipSelectedMap.get(header).toTime;
|
|
480
|
+
}
|
|
481
|
+
else {
|
|
482
|
+
this.selectedFromTime = this.annaFilterService.initialValueMap.get(header).fromTime;
|
|
483
|
+
this.selectedToTime = this.annaFilterService.initialValueMap.get(header).toTime;
|
|
484
|
+
}
|
|
485
|
+
if (this.selectedFromTime != undefined || this.selectedToTime != undefined) {
|
|
486
|
+
this.selectedFromTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedFromTime, true);
|
|
487
|
+
this.selectedToTime = this.annaDateTimeFormatService.formatToTwelveHrs(this.selectedToTime, true);
|
|
488
|
+
this.clonedSelectedFromTime = cloneDeep(this.selectedFromTime);
|
|
489
|
+
this.clonedSelectedToTime = cloneDeep(this.selectedToTime);
|
|
490
|
+
}
|
|
491
|
+
else {
|
|
492
|
+
this.selectedFromTime = ["-", "-", "-"];
|
|
493
|
+
this.selectedToTime = ["-", "-", "-"];
|
|
494
|
+
this.disableTimeFilterApplyBtn = true;
|
|
495
|
+
}
|
|
496
|
+
if (this.gtGeneralConfig.component === "SPOTDETAILS" || this.gtGeneralConfig.component === "EXCLUDEINVENTORYPOPUP") {
|
|
497
|
+
this.showMultiTimeCheckbox = false;
|
|
498
|
+
this.showZeroTimeCheckbox = false;
|
|
499
|
+
this.showEnterTimeCheckbox = false;
|
|
500
|
+
if (this.clonedTableData.findIndex((obj) => obj[header] == "0") != -1) {
|
|
501
|
+
this.showZeroTimeCheckbox = true;
|
|
502
|
+
this.annaFilterService.includeZeroTime = this.tableData.findIndex((obj) => obj[header] == "0") != -1;
|
|
503
|
+
this.zeroTimeCheckboxChecked = this.annaFilterService.includeZeroTime;
|
|
504
|
+
}
|
|
505
|
+
if (this.clonedTableData.findIndex((obj) => obj[header] == "<multi>") != -1) {
|
|
506
|
+
this.showMultiTimeCheckbox = true;
|
|
507
|
+
this.annaFilterService.includeMultiTime = this.tableData.findIndex((obj) => obj[header] == "<multi>") != -1;
|
|
508
|
+
this.multiTimeCheckboxChecked = this.annaFilterService.includeMultiTime;
|
|
509
|
+
}
|
|
510
|
+
if (this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {
|
|
511
|
+
this.showEnterTimeCheckbox = true;
|
|
512
|
+
}
|
|
513
|
+
if (this.clonedTableData.findIndex((obj) => obj[header] != "<multi>" && obj[header] != "0") != -1) {
|
|
514
|
+
this.annaFilterService.includeTimeRange = this.tableData.findIndex((obj) => obj[header] != "<multi>" && obj[header] != "0") != -1;
|
|
515
|
+
this.enterTimeCheckboxChecked = this.annaFilterService.includeTimeRange;
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
else if (this.gtGeneralConfig.component === "RATING") {
|
|
519
|
+
this.showMultiTimeCheckbox = false;
|
|
520
|
+
this.showZeroTimeCheckbox = false;
|
|
521
|
+
this.showEnterTimeCheckbox = false;
|
|
522
|
+
if (this.clonedTableData.findIndex((obj) => obj[header][0] == "0") != -1) {
|
|
523
|
+
this.showZeroTimeCheckbox = true;
|
|
524
|
+
this.annaFilterService.includeZeroTime = this.tableData.findIndex((obj) => obj[header][0] == "0") != -1;
|
|
525
|
+
this.zeroTimeCheckboxChecked = this.annaFilterService.includeZeroTime;
|
|
526
|
+
}
|
|
527
|
+
if (this.clonedTableData.findIndex((obj) => obj[header][0] == "<multi>") != -1) {
|
|
528
|
+
this.showMultiTimeCheckbox = true;
|
|
529
|
+
this.annaFilterService.includeMultiTime = this.tableData.findIndex((obj) => obj[header][0] == "<multi>") != -1;
|
|
530
|
+
this.multiTimeCheckboxChecked = this.annaFilterService.includeMultiTime;
|
|
531
|
+
}
|
|
532
|
+
if (this.showZeroTimeCheckbox || this.showMultiTimeCheckbox) {
|
|
533
|
+
this.showEnterTimeCheckbox = true;
|
|
534
|
+
}
|
|
535
|
+
if (this.clonedTableData.findIndex((obj) => obj[header][0] != "<multi>" && obj[header][0] != "0") != -1) {
|
|
536
|
+
this.annaFilterService.includeTimeRange = this.tableData.findIndex((obj) => obj[header][0] != "<multi>" && obj[header][0] != "0") != -1;
|
|
537
|
+
this.enterTimeCheckboxChecked = this.annaFilterService.includeTimeRange;
|
|
538
|
+
}
|
|
539
|
+
}
|
|
540
|
+
}
|
|
541
|
+
selectOrUnselectMultiTimeCheckbox() {
|
|
542
|
+
this.multiTimeCheckboxChecked = !this.multiTimeCheckboxChecked;
|
|
543
|
+
this.annaFilterService.includeMultiTime = !this.annaFilterService.includeMultiTime;
|
|
544
|
+
this.disableTimeFilterApplyButton();
|
|
545
|
+
}
|
|
546
|
+
selectOrUnselectZeroTimeCheckbox() {
|
|
547
|
+
this.zeroTimeCheckboxChecked = !this.zeroTimeCheckboxChecked;
|
|
548
|
+
this.annaFilterService.includeZeroTime = !this.annaFilterService.includeZeroTime;
|
|
549
|
+
this.disableTimeFilterApplyButton();
|
|
550
|
+
}
|
|
551
|
+
selectOrUnselectEnterTimeCheckbox() {
|
|
552
|
+
this.enterTimeCheckboxChecked = !this.enterTimeCheckboxChecked;
|
|
553
|
+
this.annaFilterService.includeTimeRange = !this.annaFilterService.includeTimeRange;
|
|
554
|
+
this.disableTimeFilterApplyButton();
|
|
555
|
+
}
|
|
556
|
+
disableSliderApplyBtn() {
|
|
557
|
+
return this.options.floor === this.options.ceil;
|
|
558
|
+
}
|
|
559
|
+
isCheckboxSelected(data) {
|
|
560
|
+
this.allSelected = this.annaFilterService.isCheckboxSelected(data);
|
|
561
|
+
if (this.annaFilterService.tooltipMap.get(this.annaFilterService.selectedRadio).filter((x) => x.isSelected && !x.isHidden).length == 0) {
|
|
562
|
+
this.disableCheckboxApply = true;
|
|
563
|
+
}
|
|
564
|
+
else {
|
|
565
|
+
this.disableCheckboxApply = false;
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
minValueChanged(value) {
|
|
569
|
+
if (isNaN(+value)) {
|
|
570
|
+
this.sliderMinValue = +this.options.floor;
|
|
571
|
+
}
|
|
572
|
+
else {
|
|
573
|
+
if (+value > this.sliderMaxValue) {
|
|
574
|
+
this.sliderMinValue = this.sliderMaxValue;
|
|
575
|
+
}
|
|
576
|
+
else if (+value < this.options.floor) {
|
|
577
|
+
this.sliderMinValue = this.options.floor;
|
|
578
|
+
}
|
|
579
|
+
else {
|
|
580
|
+
this.sliderMinValue = +value;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
maxValueChanged(value) {
|
|
585
|
+
if (isNaN(+value)) {
|
|
586
|
+
this.sliderMaxValue = +this.options.ceil;
|
|
587
|
+
}
|
|
588
|
+
else {
|
|
589
|
+
if (+value < this.sliderMinValue) {
|
|
590
|
+
this.sliderMaxValue = this.sliderMinValue;
|
|
591
|
+
}
|
|
592
|
+
else if (+value > this.options.ceil) {
|
|
593
|
+
this.sliderMinValue = this.options.ceil;
|
|
594
|
+
}
|
|
595
|
+
else {
|
|
596
|
+
this.sliderMaxValue = +value;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
sliderValueChange() {
|
|
601
|
+
this.sliderValue = { min: this.sliderMinValue, max: this.sliderMaxValue };
|
|
602
|
+
}
|
|
603
|
+
cancelSliderFilter() {
|
|
604
|
+
this.sliderValue = null;
|
|
605
|
+
this.closeTooltip();
|
|
606
|
+
}
|
|
607
|
+
allOptionClicked() {
|
|
608
|
+
if (this.allSelected == 0 || this.allSelected == 2) {
|
|
609
|
+
this.allSelected = 1;
|
|
610
|
+
this.disableCheckboxApply = false;
|
|
611
|
+
}
|
|
612
|
+
else {
|
|
613
|
+
this.allSelected = 0;
|
|
614
|
+
this.disableCheckboxApply = true;
|
|
615
|
+
}
|
|
616
|
+
this.annaFilterService.allOptionsClicked(this.allSelected);
|
|
617
|
+
}
|
|
618
|
+
applyFilters() {
|
|
619
|
+
let isSame = isEqual(this.toolTipdata, this.tempTooltipData);
|
|
620
|
+
this.toolTipdata = cloneDeep(this.tempTooltipData);
|
|
621
|
+
this.annaFilterService.tooltipMap.set(this.annaFilterService.selectedRadio, this.tempTooltipData);
|
|
622
|
+
if (!isSame) {
|
|
623
|
+
this.annaFilterService.reOrderAppliedFiltersArray(false);
|
|
624
|
+
}
|
|
625
|
+
let tooltipSelectedDataArray = this.annaFilterService.tooltipMap.get(this.annaFilterService.selectedRadio).filter((x) => x.isSelected).map((x) => x.data);
|
|
626
|
+
if (tooltipSelectedDataArray.length == 0) {
|
|
627
|
+
tooltipSelectedDataArray = this.annaFilterService.tooltipMap.get(this.annaFilterService.selectedRadio).map((x) => x.data);
|
|
628
|
+
}
|
|
629
|
+
this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, tooltipSelectedDataArray);
|
|
630
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
631
|
+
this.checkIfSortingIsApplied();
|
|
632
|
+
this.filterAppliedToTable.emit(this.tableData);
|
|
633
|
+
// this.generateTableDataWrapper();
|
|
634
|
+
this.disableEnableEachColumnFilters();
|
|
635
|
+
this.closeTooltip();
|
|
636
|
+
}
|
|
637
|
+
revert() {
|
|
638
|
+
this.tempTooltipData = cloneDeep(this.toolTipdata);
|
|
639
|
+
this.annaFilterService.tooltipMap.set(this.annaFilterService.selectedRadio, this.tempTooltipData);
|
|
640
|
+
this.toolTipdata = null;
|
|
641
|
+
}
|
|
642
|
+
closeCheckboxFilter() {
|
|
643
|
+
if (this.toolTipdata) {
|
|
644
|
+
this.revert();
|
|
645
|
+
}
|
|
646
|
+
this.closeTooltip();
|
|
647
|
+
}
|
|
648
|
+
applySliderFilter() {
|
|
649
|
+
if (this.sliderValue) {
|
|
650
|
+
let selectedDataObj;
|
|
651
|
+
if (this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)) {
|
|
652
|
+
selectedDataObj = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);
|
|
653
|
+
}
|
|
654
|
+
else {
|
|
655
|
+
selectedDataObj = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);
|
|
656
|
+
}
|
|
657
|
+
let isSame = isEqual(selectedDataObj, this.sliderValue);
|
|
658
|
+
if (!isSame) {
|
|
659
|
+
this.annaFilterService.sliderData = { min: this.options.floor, max: this.options.ceil };
|
|
660
|
+
this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, this.sliderValue);
|
|
661
|
+
this.annaFilterService.reOrderAppliedFiltersArray(false);
|
|
662
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
663
|
+
this.checkIfSortingIsApplied();
|
|
664
|
+
this.filterAppliedToTable.emit(this.tableData);
|
|
665
|
+
// this.generateTableDataWrapper();
|
|
666
|
+
this.disableEnableEachColumnFilters();
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
this.sliderValue = null;
|
|
670
|
+
this.closeTooltip();
|
|
671
|
+
}
|
|
672
|
+
cancelInDateFilter() {
|
|
673
|
+
this.closeTooltip();
|
|
674
|
+
}
|
|
675
|
+
applyDateFilter(selectedDate) {
|
|
676
|
+
let selectedDateObj;
|
|
677
|
+
if (this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)) {
|
|
678
|
+
selectedDateObj = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);
|
|
679
|
+
}
|
|
680
|
+
else {
|
|
681
|
+
selectedDateObj = cloneDeep(this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio));
|
|
682
|
+
}
|
|
683
|
+
let isStartDateSame = isEqual(this.annaDateTimeFormatService.convertNgbDateToMoment(selectedDate.fromDate), selectedDateObj.minSelectedDate);
|
|
684
|
+
let isEndDateSame = isEqual(this.annaDateTimeFormatService.convertNgbDateToMoment(selectedDate.toDate), selectedDateObj.maxSelectedDate);
|
|
685
|
+
if (!isStartDateSame || !isEndDateSame) {
|
|
686
|
+
selectedDateObj.minSelectedDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(selectedDate.fromDate));
|
|
687
|
+
selectedDateObj.maxSelectedDate = moment(this.annaDateTimeFormatService.convertNgbDateToMoment(selectedDate.toDate));
|
|
688
|
+
this.annaFilterService.flightDateRange = {
|
|
689
|
+
minSelectedDate: moment(this.annaDateTimeFormatService.convertNgbDateToMoment(this.calendarMinEnabledDate)),
|
|
690
|
+
maxSelectedDate: moment(this.annaDateTimeFormatService.convertNgbDateToMoment(this.calendarMaxEnabledDate))
|
|
691
|
+
};
|
|
692
|
+
this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, selectedDateObj);
|
|
693
|
+
this.annaFilterService.reOrderAppliedFiltersArray(false);
|
|
694
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
695
|
+
this.checkIfSortingIsApplied();
|
|
696
|
+
this.filterAppliedToTable.emit(this.tableData);
|
|
697
|
+
// this.generateTableDataWrapper();
|
|
698
|
+
this.disableEnableEachColumnFilters();
|
|
699
|
+
}
|
|
700
|
+
this.closeTooltip();
|
|
701
|
+
}
|
|
702
|
+
applyWeekFilter(event) {
|
|
703
|
+
}
|
|
704
|
+
incrementHour(arr) {
|
|
705
|
+
if (arr[0] == "") {
|
|
706
|
+
arr[0] = 1;
|
|
707
|
+
}
|
|
708
|
+
else if (parseInt(arr[0]) < 12) {
|
|
709
|
+
arr[0] = parseInt(arr[0]) + 1;
|
|
710
|
+
}
|
|
711
|
+
else {
|
|
712
|
+
arr[0] = 1;
|
|
713
|
+
}
|
|
714
|
+
}
|
|
715
|
+
decrementHour(arr) {
|
|
716
|
+
if (arr[0] == "") {
|
|
717
|
+
arr[0] = 12;
|
|
718
|
+
}
|
|
719
|
+
else if (parseInt(arr[0]) > 1) {
|
|
720
|
+
arr[0] = parseInt(arr[0]) - 1;
|
|
721
|
+
}
|
|
722
|
+
else {
|
|
723
|
+
arr[0] = 12;
|
|
724
|
+
}
|
|
725
|
+
}
|
|
726
|
+
incrementMinute(arr) {
|
|
727
|
+
if (arr[1] == "" || parseInt(arr[1]) == 0) {
|
|
728
|
+
arr[1] = 30;
|
|
729
|
+
}
|
|
730
|
+
else {
|
|
731
|
+
arr[1] = "00";
|
|
732
|
+
}
|
|
733
|
+
}
|
|
734
|
+
decrementMinute(arr) {
|
|
735
|
+
if (arr[1] == "" || parseInt(arr[1]) == 30) {
|
|
736
|
+
arr[1] = "00";
|
|
737
|
+
}
|
|
738
|
+
else {
|
|
739
|
+
arr[1] = 30;
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
changeStartTimeHour(increment) {
|
|
743
|
+
if (increment) {
|
|
744
|
+
this.incrementHour(this.selectedFromTime);
|
|
745
|
+
}
|
|
746
|
+
else {
|
|
747
|
+
this.decrementHour(this.selectedFromTime);
|
|
748
|
+
}
|
|
749
|
+
this.disableTimeFilterApplyButton();
|
|
750
|
+
}
|
|
751
|
+
changeEndTimeHour(increment) {
|
|
752
|
+
if (increment) {
|
|
753
|
+
this.incrementHour(this.selectedToTime);
|
|
754
|
+
}
|
|
755
|
+
else {
|
|
756
|
+
this.decrementHour(this.selectedToTime);
|
|
757
|
+
}
|
|
758
|
+
this.disableTimeFilterApplyButton();
|
|
759
|
+
}
|
|
760
|
+
changeEndTimeMinute(increment) {
|
|
761
|
+
if (increment) {
|
|
762
|
+
this.incrementMinute(this.selectedToTime);
|
|
763
|
+
}
|
|
764
|
+
else {
|
|
765
|
+
this.decrementMinute(this.selectedToTime);
|
|
766
|
+
}
|
|
767
|
+
this.disableTimeFilterApplyButton();
|
|
768
|
+
}
|
|
769
|
+
changeStartTimeMinute(increment) {
|
|
770
|
+
if (increment) {
|
|
771
|
+
this.incrementMinute(this.selectedFromTime);
|
|
772
|
+
}
|
|
773
|
+
else {
|
|
774
|
+
this.decrementMinute(this.selectedFromTime);
|
|
775
|
+
}
|
|
776
|
+
this.disableTimeFilterApplyButton();
|
|
777
|
+
}
|
|
778
|
+
applyTimeFilters() {
|
|
779
|
+
let fromTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(this.selectedFromTime[0] + ":" + this.selectedFromTime[1] + " " + this.selectedFromTime[2], true);
|
|
780
|
+
let fromTime24HrFormat = fromTime24HrFormatArr[0] + ":" + fromTime24HrFormatArr[1] + ":00";
|
|
781
|
+
let toTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(this.selectedToTime[0] + ":" + this.selectedToTime[1] + " " + this.selectedToTime[2], true);
|
|
782
|
+
let toTime24HrFormat = toTime24HrFormatArr[0] + ":" + toTime24HrFormatArr[1] + ":00";
|
|
783
|
+
let previousSelectedData;
|
|
784
|
+
if (this.annaFilterService.tooltipSelectedMap.has(this.annaFilterService.selectedRadio)) {
|
|
785
|
+
previousSelectedData = this.annaFilterService.tooltipSelectedMap.get(this.annaFilterService.selectedRadio);
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
previousSelectedData = this.annaFilterService.initialValueMap.get(this.annaFilterService.selectedRadio);
|
|
789
|
+
}
|
|
790
|
+
let selectedData = {
|
|
791
|
+
fromTime: fromTime24HrFormat, toTime: toTime24HrFormat, includeMulti: this.annaFilterService.includeMultiTime,
|
|
792
|
+
includeZero: this.annaFilterService.includeZeroTime, includeTimeRange: this.annaFilterService.includeTimeRange
|
|
793
|
+
};
|
|
794
|
+
if (!isEqual(previousSelectedData, selectedData)) {
|
|
795
|
+
this.annaFilterService.tooltipSelectedMap.set(this.annaFilterService.selectedRadio, selectedData);
|
|
796
|
+
this.annaFilterService.reOrderAppliedFiltersArray(false);
|
|
797
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
798
|
+
this.checkIfSortingIsApplied();
|
|
799
|
+
this.filterAppliedToTable.emit(this.tableData);
|
|
800
|
+
// this.generateTableDataWrapper();
|
|
801
|
+
this.disableEnableEachColumnFilters();
|
|
802
|
+
}
|
|
803
|
+
this.closeTooltip();
|
|
804
|
+
}
|
|
805
|
+
closeTimeFilter() {
|
|
806
|
+
this.selectedFromTime = cloneDeep(this.clonedSelectedFromTime);
|
|
807
|
+
this.selectedToTime = cloneDeep(this.clonedSelectedToTime);
|
|
808
|
+
this.closeTooltip();
|
|
809
|
+
}
|
|
810
|
+
disableTimeFilterApplyButton() {
|
|
811
|
+
let timeFormat = "HH:mm:ss";
|
|
812
|
+
let startTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(this.selectedFromTime[0] + ":" + this.selectedFromTime[1] + " " + this.selectedFromTime[2], true);
|
|
813
|
+
let startTime24HrFormat = startTime24HrFormatArr[0] + ":" + startTime24HrFormatArr[1] + ":00";
|
|
814
|
+
let endTime24HrFormatArr = this.annaDateTimeFormatService.convertTotwentyFourHrsFormat(this.selectedToTime[0] + ":" + this.selectedToTime[1] + " " + this.selectedToTime[2], true);
|
|
815
|
+
let endTime24HrFormat = endTime24HrFormatArr[0] + ":" + endTime24HrFormatArr[1] + ":00";
|
|
816
|
+
this.disableTimeFilterApplyBtn = moment(startTime24HrFormat, timeFormat).isAfter(moment(endTime24HrFormat, timeFormat));
|
|
817
|
+
if (!this.multiTimeCheckboxChecked && !this.zeroTimeCheckboxChecked && !this.enterTimeCheckboxChecked) {
|
|
818
|
+
this.disableTimeFilterApplyBtn = true;
|
|
819
|
+
}
|
|
820
|
+
}
|
|
821
|
+
sortedData(event) {
|
|
822
|
+
if (event.type == "none") {
|
|
823
|
+
this.tableData = this.annaFilterService.filterData(this.clonedTableData, "");
|
|
824
|
+
}
|
|
825
|
+
else {
|
|
826
|
+
this.tableData = event.data;
|
|
827
|
+
}
|
|
828
|
+
this.sortingAppliedToTable.emit(this.tableData);
|
|
829
|
+
// this.generateTableDataWrapper();
|
|
830
|
+
}
|
|
831
|
+
checkIfSortingIsApplied() {
|
|
832
|
+
let appliedkey;
|
|
833
|
+
let isAsc;
|
|
834
|
+
const arr = this.sortComponent.toArray();
|
|
835
|
+
let obj = this.annaSortService.checkIfSortingIsApplied(this.annaSortService.sortByAsc, true);
|
|
836
|
+
appliedkey = obj.key;
|
|
837
|
+
isAsc = obj.setValueTo;
|
|
838
|
+
if (!appliedkey) {
|
|
839
|
+
let obj = this.annaSortService.checkIfSortingIsApplied(this.annaSortService.sortByDesc, false);
|
|
840
|
+
appliedkey = obj.key;
|
|
841
|
+
isAsc = obj.setValueTo;
|
|
842
|
+
}
|
|
843
|
+
if (appliedkey) {
|
|
844
|
+
this.applySorting(arr, appliedkey, isAsc);
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
applySorting(sortComponentArr, appliedKey, isAsc) {
|
|
848
|
+
sortComponentArr.forEach((component) => {
|
|
849
|
+
if (component.sortBy === appliedKey) {
|
|
850
|
+
this.setSortComponentDataProperty(component);
|
|
851
|
+
isAsc ? component.sortByAscending() : component.sortByDescending();
|
|
852
|
+
}
|
|
853
|
+
});
|
|
854
|
+
}
|
|
855
|
+
setSortComponentDataProperty(sortComponent) {
|
|
856
|
+
sortComponent.data = this.tableData;
|
|
857
|
+
sortComponent.clonedData = cloneDeep(this.tableData);
|
|
858
|
+
}
|
|
859
|
+
disableEnableEachColumnFilters() {
|
|
860
|
+
this.tableHeaders.forEach(header => {
|
|
861
|
+
header.headerInfo.forEach(item => {
|
|
862
|
+
if (item.filter != "") {
|
|
863
|
+
let values = [];
|
|
864
|
+
item.disableFilter = true;
|
|
865
|
+
item.filterObjectKeys.forEach(key => {
|
|
866
|
+
if (key == "period") {
|
|
867
|
+
let uniqStartDate = uniq(this.tableData.map((u) => u["startDate"]));
|
|
868
|
+
let uniqEndDate = uniq(this.tableData.map((u) => u["endDate"]));
|
|
869
|
+
item.disableFilter = (uniqStartDate.length > 1 || uniqEndDate.length > 1) ? false : true;
|
|
870
|
+
}
|
|
871
|
+
else {
|
|
872
|
+
values = this.tableData.map((u) => u[key]);
|
|
873
|
+
if (uniq(values).filter(n => n != null).length > 1) {
|
|
874
|
+
item.disableFilter = false;
|
|
875
|
+
}
|
|
876
|
+
}
|
|
877
|
+
});
|
|
878
|
+
// if(uniq(values).length > 1){
|
|
879
|
+
// item.disableFilter = false;
|
|
880
|
+
// }else{
|
|
881
|
+
// item.disableFilter = true;
|
|
882
|
+
// }
|
|
883
|
+
}
|
|
884
|
+
if (item.sort) {
|
|
885
|
+
if (uniq(this.tableData.map((u) => u[item.objectKey])).length > 1) {
|
|
886
|
+
item.disableSort = false;
|
|
887
|
+
}
|
|
888
|
+
else {
|
|
889
|
+
item.disableSort = true;
|
|
890
|
+
}
|
|
891
|
+
}
|
|
892
|
+
});
|
|
893
|
+
});
|
|
894
|
+
}
|
|
895
|
+
ngAfterViewInit() {
|
|
896
|
+
this.annaGenericTableService.virtualScrollSubject.subscribe((val) => {
|
|
897
|
+
this.isScrolledLeft = document.getElementsByClassName("table-container")[0].scrollLeft > 0;
|
|
898
|
+
this.cdRef.detectChanges();
|
|
899
|
+
});
|
|
900
|
+
let container = document.getElementsByClassName("table-container")[0];
|
|
901
|
+
fromEvent(container, 'scroll')
|
|
902
|
+
.subscribe((event) => {
|
|
903
|
+
this.isScrolledLeft = event.target.scrollTop > 0;
|
|
904
|
+
});
|
|
905
|
+
}
|
|
906
|
+
dataRowClicked(rowData) {
|
|
907
|
+
this.rowClicked.emit(rowData);
|
|
908
|
+
}
|
|
909
|
+
radioButtonClicked(data, action, isDisabled) {
|
|
910
|
+
if (!isDisabled) {
|
|
911
|
+
this.radioButtonSelected.emit({ data, action });
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
bindTheValueToSellerGroupTooltip(sellerGroupHierarchy, tooltip) {
|
|
915
|
+
if (this.hierarchyTooltip && this.hierarchyTooltip.open) {
|
|
916
|
+
this.hierarchyTooltip.close();
|
|
917
|
+
}
|
|
918
|
+
this.sellerGroupHierarchy = sellerGroupHierarchy;
|
|
919
|
+
this.hierarchyTooltip = tooltip;
|
|
920
|
+
this.hierarchyTooltip.open();
|
|
921
|
+
}
|
|
922
|
+
iconClicked(rowData, iconClass) {
|
|
923
|
+
this.gtIconClicked.emit({ data: rowData, iconClass: iconClass });
|
|
924
|
+
}
|
|
925
|
+
svgIconClicked(rowData, key) {
|
|
926
|
+
this.gtSVGIconClicked.emit({ data: rowData, key: key });
|
|
927
|
+
}
|
|
928
|
+
textActionClicked(rowData, id) {
|
|
929
|
+
this.gtTextActionClicked.emit({ data: rowData, id });
|
|
930
|
+
}
|
|
931
|
+
viewDetailsClicked(rowData) {
|
|
932
|
+
this.gtViewDetailClicked.emit({ data: rowData });
|
|
933
|
+
}
|
|
934
|
+
setIsDifference(value) {
|
|
935
|
+
this.isDifferenceLessThan25Percent = value;
|
|
936
|
+
}
|
|
937
|
+
}
|
|
938
|
+
AnnaNonEditableGenericTableComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaNonEditableGenericTableComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.AnnaSortService }, { token: i1.AnnaDateTimeFormatService }, { token: i1.AnnaFilterService }, { token: i1.AnnaGenericTableService }], target: i0.ɵɵFactoryTarget.Component });
|
|
939
|
+
AnnaNonEditableGenericTableComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.7", type: AnnaNonEditableGenericTableComponent, selector: "anna-core-non-editable-generic-table-lib", inputs: { showSkeletonLoading: "showSkeletonLoading", tableHeaders: "tableHeaders", tableData: "tableData", clonedTableData: "clonedTableData", numberOfSkeletonRows: "numberOfSkeletonRows", numberOfSkeletonColumns: "numberOfSkeletonColumns", gtGeneralConfig: "gtGeneralConfig", totalRowInfo: "totalRowInfo", gtDimension: "gtDimension", tableClass: "tableClass", maximumRowsWhichCanBeRenderedWithoutScroll: "maximumRowsWhichCanBeRenderedWithoutScroll" }, outputs: { toggleCheckbox: "toggleCheckbox", toggleRowCheckbox: "toggleRowCheckbox", toggleHeaderCheckbox: "toggleHeaderCheckbox", undoIconClicked: "undoIconClicked", filterAppliedToTable: "filterAppliedToTable", sortingAppliedToTable: "sortingAppliedToTable", rowClicked: "rowClicked", radioButtonSelected: "radioButtonSelected", columnFilterOpened: "columnFilterOpened", columnFilterClosed: "columnFilterClosed", gtIconClicked: "gtIconClicked", gtSVGIconClicked: "gtSVGIconClicked", gtTextActionClicked: "gtTextActionClicked", gtViewDetailClicked: "gtViewDetailClicked" }, viewQueries: [{ propertyName: "sortComponent", predicate: AnnaSortComponent, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"table-container\" [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft }\">\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight + rowBorderWidth) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight + (2 * rowBorderWidth))) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"tableData\">\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n [style.background-color]=\"rowData.backgroundColor\"\r\n [style.border]=\"rowData.border\" (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n <strong>{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span>{{column.lowerData}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\" *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\"> \r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n {{ header.name }}\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.sort\">\r\n <anna-core-sort-lib\r\n [sortBy]=\"header.sortObjectKey ? header.sortObjectKey : header.objectKey\"\r\n [data]=\"tableData\"\r\n [disableSort]=\"header.disableSort\"\r\n (sort)=\"sortedData($event)\"\r\n >\r\n </anna-core-sort-lib>\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.appliedFiltersArray.length && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.appliedFiltersArray.length && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"left-top auto\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === ''\"> <span id=\"no-filter-space\"></span><br /> </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'DRR'\">\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <ng-container *ngIf=\"showSkeletonLoading\">\r\n <td mat-cell>\r\n <ngx-skeleton-loader count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let sublineIndex = index; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-cell\r\n *ngIf=\"!ROW_DATA['hide' + subline.objectKey + 'Td']\"\r\n [attr.rowspan]=\"ROW_DATA[subline.objectKey + 'Rowspan']\"\r\n >\r\n <ng-container [ngSwitch]=\"subline.typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[subline.objectKey]\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[subline.objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}</mat-radio-button\r\n ><br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ ROW_DATA[subline.objectKey] }}\r\n\r\n <ng-container\r\n *ngIf=\"\r\n subline.objectKey == 'Status' && (ROW_DATA['Remarks'] !== null)\r\n \"\r\n >\r\n <i\r\n class=\"mi mdi-info-outline remarks-tooltip\"\r\n [ngbTooltip]=\"columnInfoTooltip\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"remarks-info-tooltip\"\r\n #t=\"ngbTooltip\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component != 'DRR'\">\r\n <td mat-cell *matCellDef=\"let ROW_DATA\" [style.background]=\"ROW_DATA.backgroundColor\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <div *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\" (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'ORDER_LISTING_INFLIGHT'\">\r\n <span\r\n *ngIf=\"ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\"\r\n class=\"cursor-not-allowed\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconActiveColor\"\r\n [width]=\"'15px'\"\r\n [height]=\"'15px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n <span\r\n *ngIf=\"ROW_DATA.orderStatus != 'LIVE' && !ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\"\r\n (click)=\"svgIconClicked(ROW_DATA,'payForPerformance')\"\r\n >\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconDisableColor\"\r\n [width]=\"'15px'\"\r\n [height]=\"'15px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n\r\n <anna-live-icon-template *ngIf=\"ROW_DATA.orderStatus == 'LIVE' && subline.objectKey == 'orderStatus' \"></anna-live-icon-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'ORDER_LISTING_COMPLETED'\">\r\n <span *ngIf=\"ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\" (click)=\"$event.stopPropagation()\">\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconActiveColor\"\r\n [width]=\"'20px'\"\r\n [height]=\"'20px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'bizRuleStatus'\">\r\n <anna-rejected-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'REJECTED'\"></anna-rejected-icon-template>\r\n <anna-notify-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'NOTIFY'\"></anna-notify-icon-template>\r\n <anna-buyer-approval-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'AWAITING_APPROVAL'\"></anna-buyer-approval-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <button *ngFor=\"let text of ROW_DATA.textActions\" (click)=\"textActionClicked(ROW_DATA,text.id)\" [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">{{text.name}}</button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}</span>\r\n <i\r\n *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"isDifferenceLessThan25Percent = ROW_DATA.isDifferenceLessThan25Percent\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n \r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container *ngIf=\"ROW_DATA.descriptionEmailReferenceNum\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\" (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View details</button>\r\n </a>\r\n </ng-container>\r\n \r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\" *ngIf=\"ROW_DATA.descriptionEmailUrl\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n gtGeneralConfig.page === 'SpotDetails' &&\r\n columnDef.headerInfo[subLineIndex].objectKey === 'Status'\r\n \"\r\n >\r\n <img\r\n src=\"assets/images/Undo-Credit-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForCredit\"\r\n (click)=\"undoCreditedSpot(ROW_DATA)\"\r\n />\r\n <img\r\n src=\"assets/images/Undo-MG-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForMakeGood\"\r\n (click)=\"undoMgSpot(ROW_DATA)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" *ngIf=\"!showSkeletonLoading && tableData.length == 0\"> </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <div class=\"radio-container\" *ngIf=\"showCheckboxFilterRadioButtons\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input\r\n type=\"radio\"\r\n id=\"{{ data.key }}\"\r\n [ngModel]=\"annaFilterService.selectedRadio\"\r\n name=\"toolTip\"\r\n value=\"{{ data.key }}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\"\r\n />\r\n <label for=\"{{ data.key }}\">{{ data.label }}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <p class=\"search-box\">\r\n <i class=\"mi mdi-search search-icon search-icon-position\"></i>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n class=\"search-input\"\r\n style=\"margin-left: 2px; border: none; padding: 0px\"\r\n [(ngModel)]=\"searchBar\"\r\n />\r\n </p>\r\n <div class=\"dropdown-data-container\">\r\n <ng-container *ngIf=\"showAll\">\r\n <p class=\"input\" (click)=\"allOptionClicked()\">\r\n <span *ngIf=\"allSelected == 1\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"allSelected == 0\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span *ngIf=\"allSelected == 2\" role=\"button\" class=\"mi mdi-indeterminate-check-box check-box\"></span>\r\n <span class=\"data\">All</span>\r\n </p>\r\n </ng-container>\r\n <ng-container *ngFor=\"let data of tempTooltipData | AnnafilterSearchedText: searchBar\">\r\n <p *ngIf=\"!data.isHidden\" class=\"input\" (click)=\"isCheckboxSelected(data)\">\r\n <span *ngIf=\"data.isSelected\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"!data.isSelected\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span class=\"data\" title=\"{{ data.data }}\">{{ data.data }}</span>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeCheckboxFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableCheckboxApply }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableCheckboxApply\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component == 'DRRLISTING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input type=\"radio\" id=\"{{data.key}}\" [ngModel]=\"annaFilterService.selectedRadio\" name=\"toolTip\" value=\"{{data.key}}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\">\r\n <label for=\"{{data.key}}\">{{data.label}}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [ngModel]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [ngModel]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n [(value)]=\"sliderMinValue\"\r\n [(highValue)]=\"sliderMaxValue\"\r\n [options]=\"options\"\r\n (valueChange)=\"sliderValueChange()\"\r\n (highValueChange)=\"sliderValueChange()\"\r\n ></ngx-slider>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applySliderFilter()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component == 'DRRLISTING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input type=\"radio\" id=\"{{data.key}}\" [ngModel]=\"annaFilterService.selectedRadio\" name=\"toolTip\" value=\"{{data.key}}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\">\r\n <label for=\"{{data.key}}\">{{data.label}}</label>\r\n </div>\r\n </div>\r\n <div class=\"datepicker-container\">\r\n <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <anna-core-calendar-filter-lib\r\n [minDate]=\"calendarMinEnabledDate\"\r\n [maxDate]=\"calendarMaxEnabledDate\"\r\n [selectedFromDate]=\"selectedMinDate\"\r\n [selectedToDate]=\"selectedMaxDate\"\r\n (apply)=\"applyDateFilter($event)\"\r\n (cancel)=\"cancelInDateFilter()\"\r\n >\r\n </anna-core-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component != 'RATING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input\r\n type=\"radio\"\r\n id=\"{{ data.key }}\"\r\n [ngModel]=\"annaFilterService.selectedRadio\"\r\n name=\"toolTip\"\r\n value=\"{{ data.key }}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\"\r\n *ngIf=\"radioButtons.length > 1\"\r\n />\r\n <label for=\"{{ data.key }}\">{{ data.label }}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <div\r\n class=\"time-filter-checkboxes\"\r\n *ngIf=\"gtGeneralConfig.component == 'SPOTDETAILS' || gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' || gtGeneralConfig.component == 'RATING'\"\r\n >\r\n <!-- Multi time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showMultiTimeCheckbox\">\r\n <span\r\n *ngIf=\"multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Multi</p>\r\n </div>\r\n <!-- Zero time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showZeroTimeCheckbox\">\r\n <span\r\n *ngIf=\"zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Zero</p>\r\n </div>\r\n <!-- Enter time range option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showEnterTimeCheckbox\">\r\n <span\r\n *ngIf=\"enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Enter time range</p>\r\n </div>\r\n </div>\r\n <div class=\"time-label-container\">\r\n <label>From</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedFromTime[0]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedFromTime[1]\" type=\"text\" disabled />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedFromTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-label-container\">\r\n <label>To</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[0]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[1]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedToTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeTimeFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableTimeFilterApplyBtn }\"\r\n (click)=\"applyTimeFilters()\"\r\n [disabled]=\"disableTimeFilterApplyBtn\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"padding: 0.5rem; color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span>{{ data.inventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span>{{ data.program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class =\"first-row\" >The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n", styles: [".sort{display:inline-block;margin:0!important;position:relative;top:1px}.mdi-sort{padding-top:5px;padding-bottom:2.5px;line-height:0;font-size:1rem;cursor:pointer;color:#000;opacity:.24}.mdi-sort.active{opacity:1}.mdi-sort-descending{padding-top:2.5px;padding-bottom:5px;line-height:0;font-size:1rem;cursor:pointer;color:#000;opacity:.24}.mdi-sort-descending.active{opacity:1}.disable{cursor:not-allowed;pointer-events:none;opacity:.17}.sort-container{color:#000;padding:.25rem;text-align:left}.sort-container input{position:relative;top:.125rem;margin-right:.188rem}.sort-container input:hover,.sort-container label:hover{cursor:pointer}.sort-container div:last-of-type{line-height:.2}input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}input[type=radio]:checked{background-color:#268bff}input[type=radio]:focus{outline-offset:-10px}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:98%;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:85%;overflow:hidden}.check-box{font-size:22px;cursor:pointer}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider{margin:5px 0 2px!important;width:100%!important}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#268bff!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}::ng-deep .ngx-slider-pointer:after{display:none!important}::ng-deep .ngx-slider-pointer:focus{outline:none!important}::ng-deep .ngx-slider-bar{background:rgba(0,0,0,.26)!important;height:3px!important}::ng-deep .ngx-slider-bar.ngx-slider-selection{background:#42a5f5!important;height:3px!important}::ng-deep .sidebar-slider{margin-bottom:35px!important;margin-left:.3125rem;margin-right:.3125rem}::ng-deep .ngx-slider-span.ngx-slider-bubble.ngx-slider-model-high{right:0!important}::ng-deep .ngx-slider-span.ngx-slider-bubble.ngx-slider-model-ceil{right:0!important}::ng-deep .ngx-slider.animate{top:10px!important;bottom:0!important;padding:1px 0!important;font-size:12px!important}::ng-deep .ngx-slider-bubble{top:10px!important;bottom:0!important;padding:1px 0!important;font-size:12px!important}::ng-deep .ngx-slider-bar{background:rgba(0,0,0,.26)!important;height:3px!important}::ng-deep .ngx-slider-bar.ngx-slider-selection{background:#42a5f5!important;height:3px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;padding:.125rem .125rem .125rem .25rem;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center}.buttons-container button:last-of-type{background-color:#268bff;color:#fff}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:5px 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.14;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 0 .188rem .5rem}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}div.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}div.dropdown-data-container p.input{margin-left:0}div.dropdown-data-container p.input span.mi{padding-left:.4375rem}div.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}div.dropdown-data-container::-webkit-scrollbar{width:.188rem}div.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:.125rem .625rem 0}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;padding-top:.375rem;padding-left:1px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#cbcbcb;cursor:pointer;font-size:.5625rem}.time-container div.arrow-container i.downward{transform:rotate(180deg)}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.625rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:left;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a}.column-clear-all.align-center{text-align:center}span.mdi-filter.disabled,span.mdi-calendar-range.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}.upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a!important;margin-bottom:0!important}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}.table-container::-webkit-scrollbar-track{border:1px solid rgba(0,0,0,.1)!important}.table-container::-webkit-scrollbar{width:5px;height:5px}.table-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:#0006!important;border:1px solid rgba(0,0,0,.2)}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}.redcolor-cell-border{outline:1px solid #ff5353!important;outline-offset:-1px!important}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}.radio-button-dimension,::ng-deep .markForCredit .mat-radio-inner-circle,::ng-deep .markForCredit .mat-radio-outer-circle,::ng-deep .mark-for-credit .mat-radio-inner-circle,::ng-deep .mark-for-credit .mat-radio-outer-circle,::ng-deep .markForMakeGood .mat-radio-inner-circle,::ng-deep .markForMakeGood .mat-radio-outer-circle,::ng-deep .noAction .mat-radio-inner-circle,::ng-deep .noAction .mat-radio-outer-circle,::ng-deep .credit .mat-radio-inner-circle,::ng-deep .credit .mat-radio-outer-circle,::ng-deep .approve .mat-radio-inner-circle,::ng-deep .approve .mat-radio-outer-circle,::ng-deep .reject .mat-radio-inner-circle,::ng-deep .reject .mat-radio-outer-circle,::ng-deep .resubmit .mat-radio-inner-circle,::ng-deep .resubmit .mat-radio-outer-circle,::ng-deep .rejectCreditRequest .mat-radio-inner-circle,::ng-deep .rejectCreditRequest .mat-radio-outer-circle{height:18px!important;width:18px!important}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)}.remarks-tooltip,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;margin-left:2px;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important}table.seller-hierarchy-table{table-layout:fixed;margin:.625rem .625rem .625rem .8125rem}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;box-shadow:none!important;border-top:1px solid #d4d4d4}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}\n"], components: [{ type: i2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i3.AnnaSortComponent, selector: "anna-core-sort-lib", inputs: ["data", "sortBy", "disableSort", "placement"], outputs: ["sort"] }, { type: i4.NgxSkeletonLoaderComponent, selector: "ngx-skeleton-loader", inputs: ["appearance", "animation", "theme", "loadingText", "count", "ariaLabel"] }, { type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { type: i1.AnnaPayForPerformanceIconTemplateComponent, selector: "anna-pay-for-performance-icon-template", inputs: ["color", "width", "height"] }, { type: i1.AnnaLiveIconTemplateComponent, selector: "anna-live-icon-template" }, { type: i1.AnnaRejectedIconTemplateComponent, selector: "anna-rejected-icon-template" }, { type: i1.AnnaNotifyIconTemplateComponent, selector: "anna-notify-icon-template" }, { type: i1.AnnaBuyerApprovalIconTemplateComponent, selector: "anna-buyer-approval-icon-template" }, { type: i1.AnnaNoDataComponent, selector: "anna-core-no-data-lib", inputs: ["width", "marginTop"] }, { type: i6.ɵa, selector: "ngx-slider", inputs: ["value", "highValue", "options", "manualRefresh", "triggerFocus"], outputs: ["valueChange", "highValueChange", "userChangeStart", "userChange", "userChangeEnd"] }, { type: i7.AnnaCalendarFilterComponent, selector: "anna-core-calendar-filter-lib", inputs: ["maxDate", "minDate", "showDate", "selectedFromDate", "selectedToDate"], outputs: ["selectedDate", "apply", "cancel"] }, { type: i7.AnnaWeekCalendarComponent, selector: "anna-core-week-calendar-filter-lib", inputs: ["from-date", "to-date", "disabled-dates", "maxDate", "minDate", "week-calendar-config"], outputs: ["apply", "toggle-calendar"] }, { type: i8.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }], directives: [{ type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i10.NgbTooltip, selector: "[ngbTooltip]", inputs: ["animation", "autoClose", "placement", "triggers", "container", "disableTooltip", "tooltipClass", "openDelay", "closeDelay", "ngbTooltip"], outputs: ["shown", "hidden"], exportAs: ["ngbTooltip"] }, { type: i2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i2.MatCellDef, selector: "[matCellDef]" }, { type: i2.MatCell, selector: "mat-cell, td[mat-cell]" }, { type: i9.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { type: i9.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { type: i5.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { type: i11.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i11.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i9.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { type: i11.RadioControlValueAccessor, selector: "input[type=radio][formControlName],input[type=radio][formControl],input[type=radio][ngModel]", inputs: ["name", "formControlName", "value"] }, { type: i11.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i11.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { type: i8.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }], pipes: { "AnnafilterSearchedText": i1.AnnaFilterSearchedTextPipe } });
|
|
940
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImport: i0, type: AnnaNonEditableGenericTableComponent, decorators: [{
|
|
941
|
+
type: Component,
|
|
942
|
+
args: [{ selector: 'anna-core-non-editable-generic-table-lib', template: "<div class=\"table-container\" [ngClass]=\"{ 'scroll-left-shadow-effect': isScrolledLeft }\">\r\n <div\r\n [class]=\"gtGeneralConfig.tableContainerName\"\r\n class=\"horizontal-scroll-for-table-container\"\r\n [ngStyle]=\"{\r\n height:\r\n tableData.length < maximumRowsWhichCanBeRenderedWithoutScroll\r\n ? 'calc(' +\r\n ((gtDimension.rowHeight + rowBorderWidth) * tableData.length +\r\n (!tableData.length || !gtGeneralConfig.totalRow\r\n ? gtDimension.headerHeight\r\n : gtDimension.headerHeight + gtDimension.rowHeight + (2 * rowBorderWidth))) +\r\n 'px)'\r\n : gtDimension.tableHeight\r\n }\"\r\n >\r\n <table class=\"gt\" [ngClass]=\"tableClass\" mat-table [dataSource]=\"tableData\">\r\n <tr\r\n class=\"header-row\"\r\n mat-header-row\r\n *matHeaderRowDef=\"tableColumns; sticky: true\"\r\n [style.height.px]=\"gtDimension.headerHeight\"\r\n ></tr>\r\n <tr\r\n class=\"total-row\"\r\n mat-header-row\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n *matHeaderRowDef=\"totalRowColumns; sticky: true\"\r\n [class.hidden]=\"\r\n showSkeletonLoading ||\r\n (!showSkeletonLoading && !tableData.length) ||\r\n (!showSkeletonLoading && !gtGeneralConfig.totalRow)\r\n \"\r\n ></tr>\r\n <tr\r\n [class]=\"rowData.gtClass\"\r\n mat-row\r\n *matRowDef=\"let rowData; columns: tableColumns\"\r\n [style.height.px]=\"gtDimension.rowHeight\"\r\n [style.background-color]=\"rowData.backgroundColor\"\r\n [style.border]=\"rowData.border\" (click)=\"dataRowClicked(rowData)\"\r\n ></tr>\r\n\r\n <!-- TOTAL ROW -->\r\n <ng-container [matColumnDef]=\"column.colName\" *ngFor=\"let column of totalRowInfo; trackBy: trackByFn\">\r\n <td mat-header-cell *matHeaderCellDef [attr.colspan]=\"column.colspan\" class=\"{{column.class}}\">\r\n <strong>{{ column.data }}</strong>\r\n <ng-container *ngIf=\"column.lowerData\">\r\n <br>\r\n <span>{{column.lowerData}}</span>\r\n </ng-container>\r\n <ng-container *ngIf=\"column.tooltipMessage\">\r\n <i class=\"mi mdi-info-outline info-label\" container=\"body\"\r\n [ngbTooltip]=\"column.tooltipMessage\"\r\n tooltipClass=\"gt-total-row-tooltip\" placement=\"bottom\"></i>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- MAIN ROW -->\r\n <ng-container [matColumnDef]=\"columnDef.headerInfo[0].objectKey\" *ngFor=\"let columnDef of tableHeaders; trackBy: trackByFn\">\r\n <th nowrap mat-header-cell *matHeaderCellDef [style.width]=\"columnDef.width\">\r\n <div class=\"row mx-0\" *ngFor=\"let header of columnDef.headerInfo; let j = index;\"> \r\n <p\r\n *ngIf=\"header.typeOfHeaderData === 'STRING'\"\r\n [ngClass]=\"{ 'upper-label': j === 0, 'lower-label': j === 1 }\"\r\n >\r\n {{ header.name }}\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'impsInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"impsInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'ratingInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"ratingInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'rateInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"rateInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n </p>\r\n\r\n <ng-container *ngIf=\"header.typeOfHeaderData === 'CHECKBOX'\">\r\n <span\r\n *ngIf=\"gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!gtGeneralConfig.isHeaderChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': gtGeneralConfig.disableHeaderCheckbox }\"\r\n (click)=\"selectUnselectAllRows()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <div *ngIf=\"gtGeneralConfig.showAllColumnFilter\" class=\"sort-filter-container\">\r\n <ng-container *ngIf=\"header.sort\">\r\n <anna-core-sort-lib\r\n [sortBy]=\"header.sortObjectKey ? header.sortObjectKey : header.objectKey\"\r\n [data]=\"tableData\"\r\n [disableSort]=\"header.disableSort\"\r\n (sort)=\"sortedData($event)\"\r\n >\r\n </anna-core-sort-lib>\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'CHECKBOX'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.appliedFiltersArray.length && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"filterTooltip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'SLIDER'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n annaFilterService.appliedFiltersArray.length && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"sliderToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t1=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t1, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'DATE'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"datePickerTooltip\"\r\n placement=\"left-top auto\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t2=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t2, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'WEEK'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"weekPickerToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t3=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t3, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === 'TIME'\">\r\n <span\r\n class=\"mdi mdi-filter\"\r\n [ngClass]=\"{\r\n active:\r\n isTooltipActive(header.filterObjectKeys) && isTooltipActive(header.filterObjectKeys),\r\n disabled: header.disableFilter\r\n }\"\r\n [ngbTooltip]=\"timeFilterToolTip\"\r\n placement=\"bottom left-top\"\r\n container=\"body\"\r\n [autoClose]=\"'outside'\"\r\n triggers=\"manual\"\r\n #t4=\"ngbTooltip\"\r\n (click)=\"bindTheValueToToolTip(t4, header.filterObjectKeys)\"\r\n (hidden)=\"closeTooltip()\"\r\n >\r\n </span\r\n ><br />\r\n </ng-container>\r\n <ng-container *ngIf=\"header.filter === ''\"> <span id=\"no-filter-space\"></span><br /> </ng-container>\r\n <i *ngIf=\"header.tooltip && header.tooltip.name == 'lurViolationInfoTooltip'\" class=\"{{header['tooltip'].iconClass}}\"\r\n [ngStyle]=\"{'float': header['tooltip'].iconPosition}\"\r\n #t=\"ngbTooltip\"\r\n [ngbTooltip]=\"lurViolationInfoTooltip\"\r\n placement=\"{{ header['tooltip'].tooltipPosition }}\"\r\n tooltipClass=\"{{ header['tooltip'].tooltipClass }}\"\r\n >\r\n </i>\r\n\r\n </div>\r\n </div>\r\n </th>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'DRR'\">\r\n <ng-container *matCellDef=\"let ROW_DATA\">\r\n <ng-container *ngIf=\"showSkeletonLoading\">\r\n <td mat-cell>\r\n <ngx-skeleton-loader count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <ng-container\r\n *ngFor=\"let subline of columnDef.headerInfo; let sublineIndex = index; trackBy: trackByFn\"\r\n >\r\n <td\r\n mat-cell\r\n *ngIf=\"!ROW_DATA['hide' + subline.objectKey + 'Td']\"\r\n [attr.rowspan]=\"ROW_DATA[subline.objectKey + 'Rowspan']\"\r\n >\r\n <ng-container [ngSwitch]=\"subline.typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[subline.objectKey]\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[subline.objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{ 'disable-checkbox': ROW_DATA[subline.isDisabledKey] }\"\r\n (click)=\"selectUnselectRow(ROW_DATA)\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'RADIO'\">\r\n <mat-radio-group\r\n *ngIf=\"ROW_DATA['RadioButtonConfig']\"\r\n [ngModel]=\"ROW_DATA[subline.objectKey]\"\r\n [disabled]=\"ROW_DATA['RadioButtonConfig'][0].isDisabled\"\r\n >\r\n <ng-container\r\n *ngFor=\"let radioButton of ROW_DATA['RadioButtonConfig']; let last = last\"\r\n >\r\n <mat-radio-button\r\n value=\"{{ radioButton.value }}\"\r\n class=\"{{ radioButton.class }}\"\r\n (click)=\"\r\n radioButtonClicked(\r\n ROW_DATA,\r\n radioButton.value,\r\n ROW_DATA['RadioButtonConfig'][0].isDisabled\r\n )\r\n \"\r\n >{{ radioButton.label }}</mat-radio-button\r\n ><br *ngIf=\"!last\" />\r\n </ng-container>\r\n </mat-radio-group>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ ROW_DATA[subline.objectKey] }}\r\n\r\n <ng-container\r\n *ngIf=\"\r\n subline.objectKey == 'Status' && (ROW_DATA['Remarks'] !== null)\r\n \"\r\n >\r\n <i\r\n class=\"mi mdi-info-outline remarks-tooltip\"\r\n [ngbTooltip]=\"columnInfoTooltip\"\r\n placement=\"bottom\"\r\n container=\"body\"\r\n tooltipClass=\"remarks-info-tooltip\"\r\n #t=\"ngbTooltip\"\r\n ></i>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngIf=\"gtGeneralConfig.component != 'DRR'\">\r\n <td mat-cell *matCellDef=\"let ROW_DATA\" [style.background]=\"ROW_DATA.backgroundColor\">\r\n <ngx-skeleton-loader *ngIf=\"showSkeletonLoading\" count=\"1\" [theme]=\"{ height: '10px', display: 'block' }\">\r\n </ngx-skeleton-loader>\r\n\r\n <ng-container *ngIf=\"!showSkeletonLoading\">\r\n <div *ngFor=\"let subline of columnDef.headerInfo; let subLineIndex = index; trackBy: trackByFn\">\r\n <ng-container [ngSwitch]=\"columnDef.headerInfo[subLineIndex].typeOfBodyData\">\r\n <ng-container *ngSwitchCase=\"'ICON'\">\r\n <i [class]=\"ROW_DATA.iconClass\" (click)=\"iconClicked(ROW_DATA,ROW_DATA.iconClass)\"></i>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'SVG_ICON'\">\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'ORDER_LISTING_INFLIGHT'\">\r\n <span\r\n *ngIf=\"ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\"\r\n class=\"cursor-not-allowed\"\r\n (click)=\"$event.stopPropagation()\"\r\n >\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconActiveColor\"\r\n [width]=\"'15px'\"\r\n [height]=\"'15px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n <span\r\n *ngIf=\"ROW_DATA.orderStatus != 'LIVE' && !ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\"\r\n (click)=\"svgIconClicked(ROW_DATA,'payForPerformance')\"\r\n >\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconDisableColor\"\r\n [width]=\"'15px'\"\r\n [height]=\"'15px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n\r\n <anna-live-icon-template *ngIf=\"ROW_DATA.orderStatus == 'LIVE' && subline.objectKey == 'orderStatus' \"></anna-live-icon-template>\r\n </ng-container>\r\n <ng-container *ngIf=\"gtGeneralConfig.component == 'ORDER_LISTING_COMPLETED'\">\r\n <span *ngIf=\"ROW_DATA.payForPerformance && subline.objectKey == 'payForPerformance'\" (click)=\"$event.stopPropagation()\">\r\n <anna-pay-for-performance-icon-template\r\n [color]=\"PfpIconActiveColor\"\r\n [width]=\"'20px'\"\r\n [height]=\"'20px'\"\r\n >\r\n </anna-pay-for-performance-icon-template>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'bizRuleStatus'\">\r\n <anna-rejected-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'REJECTED'\"></anna-rejected-icon-template>\r\n <anna-notify-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'NOTIFY'\"></anna-notify-icon-template>\r\n <anna-buyer-approval-icon-template *ngIf=\"ROW_DATA.bizRuleStatus == 'AWAITING_APPROVAL'\"></anna-buyer-approval-icon-template>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'TEXT_ACTIONS'\">\r\n <button *ngFor=\"let text of ROW_DATA.textActions\" (click)=\"textActionClicked(ROW_DATA,text.id)\" [disabled]=\"text.isDisabled\" class=\"{{text.class}}\">{{text.name}}</button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'CHECKBOX'\">\r\n <span\r\n *ngIf=\"ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n false\r\n )\r\n \"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey]\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n [ngClass]=\"{\r\n 'disable-checkbox': ROW_DATA[columnDef.headerInfo[subLineIndex].isDisabledKey]\r\n }\"\r\n (click)=\"\r\n selectOrUnselectCheckbox(\r\n ROW_DATA,\r\n columnDef.headerInfo[subLineIndex].objectKey,\r\n true\r\n )\r\n \"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n <ng-container *ngIf=\"subline.objectKey != 'description'\">\r\n <span>{{ ROW_DATA[columnDef.headerInfo[subLineIndex].objectKey] }}</span>\r\n <i\r\n *ngIf=\"subline.objectKey == 'inventoryCode' && ROW_DATA['isSellerGroup'] && gtGeneralConfig.component == 'RATING' \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n [ngbTooltip]=\"sellerHierarchyTooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n triggers=\"manual\"\r\n (hidden)=\"closeTooltip()\"\r\n #info=\"ngbTooltip\"\r\n tooltipClass=\"hierarchy-tooltip\"\r\n (mouseenter)=\"bindTheValueToSellerGroupTooltip(ROW_DATA.sellerGroupHierarchy, info)\">\r\n </i>\r\n\r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageRating' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showRatingAverageIcon'] \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"isDifferenceLessThan25Percent = ROW_DATA.isDifferenceLessThan25Percent\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedRatingDifference\"\r\n >\r\n </i>\r\n \r\n <i *ngIf=\"subline.objectKey == 'displayBookedAverageImpression' && gtGeneralConfig.component == 'RATING' && ROW_DATA['showImpressionAverageIcon'] \"\r\n class=\"mdi mdi-alert-circle-outline seller-tooltip\"\r\n placement=\"bottom auto\"\r\n container=\"body\"\r\n [autoClose]=\"true\"\r\n (mouseenter)=\"setIsDifference(ROW_DATA.isDifferenceLessThan25Percent)\"\r\n tooltipClass=\"posted-avg-tooltip\"\r\n [ngbTooltip]=\"postedImpDifference\"\r\n >\r\n </i>\r\n </ng-container>\r\n <ng-container *ngIf=\"subline.objectKey == 'description'\">\r\n <p *ngIf=\"ROW_DATA.descriptionMessage || ROW_DATA.descriptionEmailReferenceNum\">\r\n <ng-container *ngIf=\"ROW_DATA.descriptionMessage\">\r\n {{ ROW_DATA.descriptionMessage }}\r\n <br />\r\n </ng-container>\r\n <ng-container *ngIf=\"ROW_DATA.descriptionEmailReferenceNum\">\r\n Email Ref: {{ ROW_DATA.descriptionEmailReferenceNum }}\r\n <br />\r\n </ng-container>\r\n </p>\r\n <a\r\n href=\"{{ ROW_DATA.descriptionDetailsUrl }}\"\r\n target=\"_blank\"\r\n *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'PDF' || ROW_DATA.descriptionDetailsUrlType === 'EXCEL'\"\r\n >\r\n <button class=\"btn viewDetailsAndEmailBtn\">Download</button>\r\n </a>\r\n <ng-container *ngIf=\"ROW_DATA.activityname.toLowerCase() == 'order onboarded'\">\r\n <a *ngIf=\"ROW_DATA.descriptionDetailsUrlType === 'LINK'\" (click)=\"viewDetailsClicked(ROW_DATA)\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View details</button>\r\n </a>\r\n </ng-container>\r\n \r\n <a href=\"{{ ROW_DATA.descriptionEmailUrl }}\" target=\"_blank\" *ngIf=\"ROW_DATA.descriptionEmailUrl\">\r\n <button class=\"btn viewDetailsAndEmailBtn\">View email</button>\r\n </a>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-container\r\n *ngIf=\"\r\n gtGeneralConfig.page === 'SpotDetails' &&\r\n columnDef.headerInfo[subLineIndex].objectKey === 'Status'\r\n \"\r\n >\r\n <img\r\n src=\"assets/images/Undo-Credit-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForCredit\"\r\n (click)=\"undoCreditedSpot(ROW_DATA)\"\r\n />\r\n <img\r\n src=\"assets/images/Undo-MG-Icon.svg\"\r\n style=\"cursor: pointer\"\r\n class=\"img-circle\"\r\n alt=\"User Image\"\r\n height=\"15px\"\r\n width=\"15px\"\r\n *ngIf=\"ROW_DATA.AllowUserToUndoMarkForMakeGood\"\r\n (click)=\"undoMgSpot(ROW_DATA)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n </td>\r\n </ng-container>\r\n </ng-container>\r\n </table>\r\n </div>\r\n\r\n <anna-core-no-data-lib [width]=\"noDataWidth\" *ngIf=\"!showSkeletonLoading && tableData.length == 0\"> </anna-core-no-data-lib>\r\n</div>\r\n\r\n<!-- Checkbox template -->\r\n<ng-template #filterTooltip>\r\n <div class=\"radio-container\" *ngIf=\"showCheckboxFilterRadioButtons\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input\r\n type=\"radio\"\r\n id=\"{{ data.key }}\"\r\n [ngModel]=\"annaFilterService.selectedRadio\"\r\n name=\"toolTip\"\r\n value=\"{{ data.key }}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\"\r\n />\r\n <label for=\"{{ data.key }}\">{{ data.label }}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <p class=\"search-box\">\r\n <i class=\"mi mdi-search search-icon search-icon-position\"></i>\r\n <input\r\n type=\"text\"\r\n placeholder=\"Search\"\r\n class=\"search-input\"\r\n style=\"margin-left: 2px; border: none; padding: 0px\"\r\n [(ngModel)]=\"searchBar\"\r\n />\r\n </p>\r\n <div class=\"dropdown-data-container\">\r\n <ng-container *ngIf=\"showAll\">\r\n <p class=\"input\" (click)=\"allOptionClicked()\">\r\n <span *ngIf=\"allSelected == 1\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"allSelected == 0\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span *ngIf=\"allSelected == 2\" role=\"button\" class=\"mi mdi-indeterminate-check-box check-box\"></span>\r\n <span class=\"data\">All</span>\r\n </p>\r\n </ng-container>\r\n <ng-container *ngFor=\"let data of tempTooltipData | AnnafilterSearchedText: searchBar\">\r\n <p *ngIf=\"!data.isHidden\" class=\"input\" (click)=\"isCheckboxSelected(data)\">\r\n <span *ngIf=\"data.isSelected\" role=\"button\" class=\"mi mdi-check-box check-box\"></span>\r\n <span *ngIf=\"!data.isSelected\" role=\"button\" class=\"mi mdi-check-box-outline-blank check-box unchecked\"></span>\r\n <span class=\"data\" title=\"{{ data.data }}\">{{ data.data }}</span>\r\n </p>\r\n </ng-container>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeCheckboxFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableCheckboxApply }\"\r\n (click)=\"applyFilters()\"\r\n [disabled]=\"disableCheckboxApply\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Slider template -->\r\n<ng-template #sliderToolTip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component == 'DRRLISTING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input type=\"radio\" id=\"{{data.key}}\" [ngModel]=\"annaFilterService.selectedRadio\" name=\"toolTip\" value=\"{{data.key}}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\">\r\n <label for=\"{{data.key}}\">{{data.label}}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <section class=\"min-maxContainer\">\r\n <input\r\n type=\"number\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [ngModel]=\"sliderMinValue\"\r\n (ngModelChange)=\"minValueChanged($event)\"\r\n placeholder=\"Min\"\r\n />\r\n <span>To</span>\r\n <input\r\n type=\"number\"\r\n step=\"{{ sliderFilterTextBoxStep }}\"\r\n [ngModel]=\"sliderMaxValue\"\r\n (ngModelChange)=\"maxValueChanged($event)\"\r\n placeholder=\"Max\"\r\n />\r\n </section>\r\n <div class=\"sidebar-slider\">\r\n <ngx-slider\r\n [(value)]=\"sliderMinValue\"\r\n [(highValue)]=\"sliderMaxValue\"\r\n [options]=\"options\"\r\n (valueChange)=\"sliderValueChange()\"\r\n (highValueChange)=\"sliderValueChange()\"\r\n ></ngx-slider>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"cancelSliderFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableSliderApplyButton }\"\r\n (click)=\"applySliderFilter()\"\r\n [disabled]=\"disableSliderApplyButton\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Date Picker Template -->\r\n<ng-template #datePickerTooltip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component == 'DRRLISTING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input type=\"radio\" id=\"{{data.key}}\" [ngModel]=\"annaFilterService.selectedRadio\" name=\"toolTip\" value=\"{{data.key}}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\" *ngIf=\"radioButtons.length > 1\">\r\n <label for=\"{{data.key}}\">{{data.label}}</label>\r\n </div>\r\n </div>\r\n <div class=\"datepicker-container\">\r\n <button class=\"column-clear-all align-center\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">\r\n Clear filter\r\n </button>\r\n <anna-core-calendar-filter-lib\r\n [minDate]=\"calendarMinEnabledDate\"\r\n [maxDate]=\"calendarMaxEnabledDate\"\r\n [selectedFromDate]=\"selectedMinDate\"\r\n [selectedToDate]=\"selectedMaxDate\"\r\n (apply)=\"applyDateFilter($event)\"\r\n (cancel)=\"cancelInDateFilter()\"\r\n >\r\n </anna-core-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Week Picker Template -->\r\n<ng-template #weekPickerToolTip>\r\n <div class=\"weekpicker-container\">\r\n <anna-core-week-calendar-filter-lib\r\n [week-calendar-config]=\"gtGeneralConfig.multiWeekPickerConfig\"\r\n (apply)=\"applyWeekFilter($event)\"\r\n [from-date]=\"calendarMinEnabledDate\"\r\n [to-date]=\"calendarMaxEnabledDate\"\r\n >\r\n </anna-core-week-calendar-filter-lib>\r\n </div>\r\n</ng-template>\r\n\r\n<!-- Time Filter Template -->\r\n<ng-template #timeFilterToolTip>\r\n <div class=\"radio-container\" *ngIf=\"gtGeneralConfig.component != 'RATING'\">\r\n <div *ngFor=\"let data of radioButtons\">\r\n <input\r\n type=\"radio\"\r\n id=\"{{ data.key }}\"\r\n [ngModel]=\"annaFilterService.selectedRadio\"\r\n name=\"toolTip\"\r\n value=\"{{ data.key }}\"\r\n (click)=\"populateTooltipDataBasedOnSelectedRadio(data.key)\"\r\n *ngIf=\"radioButtons.length > 1\"\r\n />\r\n <label for=\"{{ data.key }}\">{{ data.label }}</label>\r\n </div>\r\n </div>\r\n <button class=\"column-clear-all\" [disabled]=\"disableColumnClearAllBtn\" (click)=\"clearColumnFilter()\">Clear filter</button>\r\n <div\r\n class=\"time-filter-checkboxes\"\r\n *ngIf=\"gtGeneralConfig.component == 'SPOTDETAILS' || gtGeneralConfig.component == 'EXCLUDEINVENTORYPOPUP' || gtGeneralConfig.component == 'RATING'\"\r\n >\r\n <!-- Multi time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showMultiTimeCheckbox\">\r\n <span\r\n *ngIf=\"multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!multiTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectMultiTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Multi</p>\r\n </div>\r\n <!-- Zero time option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showZeroTimeCheckbox\">\r\n <span\r\n *ngIf=\"zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!zeroTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectZeroTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Include Zero</p>\r\n </div>\r\n <!-- Enter time range option checkbox -->\r\n <div class=\"d-flex align-items-center\" style=\"padding: 0.5rem 0 0.5rem 0.5rem\" *ngIf=\"showEnterTimeCheckbox\">\r\n <span\r\n *ngIf=\"enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-checked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box\r\n </span>\r\n <span\r\n *ngIf=\"!enterTimeCheckboxChecked\"\r\n class=\"material-icons custom-column-checkbox-unchecked\"\r\n (click)=\"selectOrUnselectEnterTimeCheckbox()\"\r\n >\r\n check_box_outline_blank\r\n </span>\r\n <p style=\"margin-left: 2px\">Enter time range</p>\r\n </div>\r\n </div>\r\n <div class=\"time-label-container\">\r\n <label>From</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedFromTime[0]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedFromTime[1]\" type=\"text\" disabled />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeStartTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeStartTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedFromTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n\r\n <div class=\"time-label-container\">\r\n <label>To</label>\r\n </div>\r\n <div class=\"time-container\">\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[0]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeHour(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeHour(false)\"></i>\r\n </div>\r\n <span class=\"dot\">:</span>\r\n <input class=\"form-control numberInput\" [(ngModel)]=\"selectedToTime[1]\" disabled type=\"text\" />\r\n <div class=\"arrow-container\">\r\n <i class=\"mdi mdi-triangle upward\" (click)=\"changeEndTimeMinute(true)\"></i>\r\n <i class=\"mdi mdi-triangle downward\" (click)=\"changeEndTimeMinute(false)\"></i>\r\n </div>\r\n <div>\r\n <mat-button-toggle-group [(ngModel)]=\"selectedToTime[2]\" (ngModelChange)=\"disableTimeFilterApplyButton()\">\r\n <mat-button-toggle value=\"AM\">\r\n <span>AM</span>\r\n </mat-button-toggle>\r\n <mat-button-toggle value=\"PM\">\r\n <span>PM</span>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n <div class=\"buttons-container\">\r\n <button class=\"button\" (click)=\"closeTimeFilter()\">Cancel</button>\r\n <button\r\n class=\"button\"\r\n [ngClass]=\"{ disabled: disableTimeFilterApplyBtn }\"\r\n (click)=\"applyTimeFilters()\"\r\n [disabled]=\"disableTimeFilterApplyBtn\"\r\n >\r\n Apply\r\n </button>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #columnInfoTooltip>\r\n <p style=\"padding: 0.5rem; color: black;white-space: nowrap;\">This preemption is rejected and not marked for credit.</p>\r\n</ng-template>\r\n\r\n<ng-template #ratingInfoTooltip>\r\n <p class=\"first-row\">Shows 'Booked Rating' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\">Shows 'Projected Rating' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #impsInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked IMPS' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected IMPS' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #rateInfoTooltip>\r\n <p class =\"first-row\" >Shows 'Booked Rate' for Preemptions & MakeGood Offered spot(s).</p>\r\n <p class=\"second-row\" >Shows 'Projected $ Value' for ADU Offered spot(s).</p>\r\n</ng-template>\r\n\r\n<ng-template #sellerHierarchyTooltip>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length > 0\">\r\n <table class=\"seller-hierarchy-table\">\r\n <thead>\r\n <tr>\r\n <th>#</th>\r\n <th>Inventory Codes</th>\r\n <th>Program/Description</th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let data of sellerGroupHierarchy; let tooltipIndex = index\">\r\n <td>{{ tooltipIndex + 1 }}</td>\r\n <td>\r\n <span>{{ data.inventoryCode }}</span>\r\n </td>\r\n <td>\r\n <span>{{ data.program }}</span>\r\n </td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n </ng-container>\r\n <ng-container *ngIf=\"sellerGroupHierarchy.length == 0\">\r\n <span style=\"color: #000\">Seller group not available for this inventory code</span>\r\n </ng-container>\r\n</ng-template>\r\n\r\n<ng-template #lurViolationInfoTooltip>\r\n <p class =\"first-row\" >The values are for the entire week.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedRatingDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average rating is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n\r\n<ng-template #postedImpDifference>\r\n <p class=\"difference-text\">The difference between posted and booked average impression is {{isDifferenceLessThan25Percent ? 'less' : 'more'}} than 25%.</p>\r\n</ng-template>\r\n", styles: [".sort{display:inline-block;margin:0!important;position:relative;top:1px}.mdi-sort{padding-top:5px;padding-bottom:2.5px;line-height:0;font-size:1rem;cursor:pointer;color:#000;opacity:.24}.mdi-sort.active{opacity:1}.mdi-sort-descending{padding-top:2.5px;padding-bottom:5px;line-height:0;font-size:1rem;cursor:pointer;color:#000;opacity:.24}.mdi-sort-descending.active{opacity:1}.disable{cursor:not-allowed;pointer-events:none;opacity:.17}.sort-container{color:#000;padding:.25rem;text-align:left}.sort-container input{position:relative;top:.125rem;margin-right:.188rem}.sort-container input:hover,.sort-container label:hover{cursor:pointer}.sort-container div:last-of-type{line-height:.2}input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}input[type=radio]:checked{background-color:#268bff}input[type=radio]:focus{outline-offset:-10px}::ng-deep .tooltip-inner{max-height:22rem;background-color:#fff;border:1px solid white;border-radius:5px;box-shadow:0 2px 2px #0000003d,0 0 2px #0000001f;max-width:251px;width:100%;padding:0!important}::ng-deep .tooltip-inner div.radio-container{flex-wrap:wrap}::ng-deep .md-drppicker{box-shadow:unset!important}::ng-deep .available{color:#999}::ng-deep .bs-tooltip-bottom .arrow:before{border-bottom-color:#fff!important}::ng-deep .bs-tooltip-left .arrow:before{border-left-color:#fff!important}::ng-deep .tooltip.show{opacity:1}.input{text-align:left;margin:5px 10px 5px 5px;display:flex;align-items:center;width:98%;white-space:nowrap}.data{color:#000;font-weight:700;margin-left:5px;margin-right:5px}span.data{display:inline-block;text-overflow:ellipsis;white-space:nowrap;width:85%;overflow:hidden}.check-box{font-size:22px;cursor:pointer}span.mdi-filter.active{color:#000;opacity:1!important;pointer-events:all!important}p{margin-bottom:0;line-height:initial}span.mdi-filter{color:#cbcbcb}::ng-deep .ngx-slider{margin:5px 0 2px!important;width:100%!important}::ng-deep .ngx-slider-pointer{top:-5px!important;width:12px!important;height:12px!important;background:#268bff!important;border:1px solid #ffffff!important;box-shadow:0 1px 3px #0000004d!important;border-radius:16px!important}::ng-deep .ngx-slider-pointer:after{display:none!important}::ng-deep .ngx-slider-pointer:focus{outline:none!important}::ng-deep .ngx-slider-bar{background:rgba(0,0,0,.26)!important;height:3px!important}::ng-deep .ngx-slider-bar.ngx-slider-selection{background:#42a5f5!important;height:3px!important}::ng-deep .sidebar-slider{margin-bottom:35px!important;margin-left:.3125rem;margin-right:.3125rem}::ng-deep .ngx-slider-span.ngx-slider-bubble.ngx-slider-model-high{right:0!important}::ng-deep .ngx-slider-span.ngx-slider-bubble.ngx-slider-model-ceil{right:0!important}::ng-deep .ngx-slider.animate{top:10px!important;bottom:0!important;padding:1px 0!important;font-size:12px!important}::ng-deep .ngx-slider-bubble{top:10px!important;bottom:0!important;padding:1px 0!important;font-size:12px!important}::ng-deep .ngx-slider-bar{background:rgba(0,0,0,.26)!important;height:3px!important}::ng-deep .ngx-slider-bar.ngx-slider-selection{background:#42a5f5!important;height:3px!important}input:focus{outline:none}input::placeholder{color:#c8c8c8}.cancel-btn{background:#c7e1ff;color:#268bff}.apply-btn{background:#268bff;color:#fff;margin-left:.3125rem}div.radio-container{display:flex;white-space:nowrap;justify-content:space-between;background-color:#f4f4f4;padding:.125rem .125rem .125rem .25rem;border-radius:.125rem;margin:.4375rem .4375rem .25rem}div.radio-container input{position:relative;top:.125rem;margin-right:.25rem}div.radio-container label{font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.29;letter-spacing:0;color:#4a4a4a;margin:0;padding-left:.125rem}div.radio-container label:first-of-type{margin-right:.188rem}div.radio-container input[type=radio]{-webkit-appearance:none;appearance:none;display:inline-block;width:.9375rem;height:.9375rem;padding:.125rem;background-clip:content-box;border:.125rem solid #268bff;background-color:transparent;border-radius:50%}div.radio-container input[type=radio]:checked{background-color:#268bff}.buttons-container{display:flex;margin:0px auto .4375rem;justify-content:center}.buttons-container button:last-of-type{background-color:#268bff;color:#fff}.buttons-container button.disabled{background:#bdbdbd;opacity:.5;color:#4a4a4a}.button{display:inline-block;margin:8px 4px 0 8px;padding:5px 16px;border-radius:4px;text-align:center;outline:none;font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.14;letter-spacing:normal;border:none;color:#268bff;background-color:#e5f1ff}.search-box{display:flex;align-items:center;color:#c8c8c8;border:1px solid #e6e6e6;border-radius:.125rem;margin:.25rem .4375rem .188rem;height:1.5rem;padding:.188rem 0 .188rem .5rem}.search-icon{margin:0 4px 0 0;font-size:1.125rem;color:#9b9b9b}.filter-icon{justify-content:right;margin-left:auto;color:#d4d4d4;color:#a1a1a1;font-size:16px;cursor:pointer}.data{margin:0 13px 0 8px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:1.86;letter-spacing:\"\";color:#4a4a4a}.search-input{margin:1px 0 1px 4px;font-family:Roboto;font-size:.875rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#c8c8c8}.check-box{color:#268bff}.tooltip-data-container{overflow-y:scroll;max-height:8rem}.searchbar{width:100%;display:flex;justify-content:flex-end;align-items:flex-end}.clear-button{opacity:.5;font-family:Roboto;font-size:.9375rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;text-decoration:underline;border:none;background-color:#fff;color:#4a4a4a;margin-left:.625rem;padding:0}.clear-button:focus{outline:none;box-shadow:none}.unchecked{color:#268bff}div.dropdown-data-container{max-height:12.3rem;width:100%;overflow-y:auto;overflow-x:hidden}div.dropdown-data-container p.input{margin-left:0}div.dropdown-data-container p.input span.mi{padding-left:.4375rem}div.dropdown-data-container p.input:hover{background-color:#ebebeb;cursor:pointer}div.dropdown-data-container::-webkit-scrollbar{width:.188rem}div.dropdown-data-container::-webkit-scrollbar-thumb{color:#d3d3d3}section.min-maxContainer{display:flex;justify-content:center;margin-bottom:-.125rem;margin-top:.5rem;width:100%}section.min-maxContainer input{width:30%;height:1.875rem;border:1px solid lightgray;color:gray}section.min-maxContainer span{display:inline-block;padding-left:.5rem;padding-right:.5rem;position:relative;top:.3125rem;color:#666}.time-container{width:100%;display:flex;padding:.125rem .625rem 0}.time-container input.form-control:disabled{background-color:#fff;width:2.813rem}.time-container .dot{color:#cbcbcb;position:relative;left:-7px;font-size:17px}.time-container div.arrow-container{flex-direction:column;display:flex;padding-top:.375rem;padding-left:1px;margin-right:1.1875rem}.time-container div.arrow-container i{color:#cbcbcb;cursor:pointer;font-size:.5625rem}.time-container div.arrow-container i.downward{transform:rotate(180deg)}.mdi-filter{cursor:pointer}.time-label-container{display:flex;justify-content:flex-start}.time-label-container label{margin-bottom:0;color:#4a4a4a;margin-top:.625rem;margin-left:.625rem;font-weight:700}.time-heading{color:#000;font-size:.8125rem;text-align:left;padding-left:.625rem;margin-top:.625rem;font-weight:700}.checkbox-container{display:flex;padding-inline:.625rem}.checkbox-container .data{text-align:left}.checkbox-container:first-of-type{margin-top:.625rem;font-weight:500}.column-clear-all{width:94%;text-align:left;border:none;background:none;text-decoration:underline;color:#268bff}.column-clear-all:disabled{opacity:.5;color:#4a4a4a}.column-clear-all.align-center{text-align:center}span.mdi-filter.disabled,span.mdi-calendar-range.disabled{pointer-events:none;opacity:.5}.datepicker-container{width:100%}.upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a!important;margin-bottom:0!important}:host ::ng-deep .gt{table-layout:fixed;margin-bottom:0;width:100%}:host ::ng-deep .gt th,:host ::ng-deep .gt td{padding:2px 8px;line-height:normal}:host ::ng-deep .gt thead tr th .upper-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#4a4a4a;margin-bottom:0}:host ::ng-deep .gt thead tr th .lower-label{font-family:Roboto;font-size:.6875rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:.3px;color:#a7a7a7;margin-bottom:0}:host ::ng-deep .gt thead tr th{background-color:#ededed;position:sticky;position:-webkit-sticky;top:0;border-top:none!important;border-bottom:none!important;outline:none!important;box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4}:host ::ng-deep .gt thead tr th br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt thead tr th div.row{display:flex;flex-wrap:nowrap;justify-content:space-between;align-items:center}:host ::ng-deep .gt thead tr th div.sort-filter-container{display:flex;flex-wrap:nowrap;align-items:center}:host ::ng-deep .gt thead tr th:first-of-type{box-shadow:inset 0 1px #d4d4d4,inset 0 -1px #d4d4d4,inset -1px 0 #d4d4d4,inset 1px 0 #d4d4d4}:host ::ng-deep .gt tbody tr td:first-of-type{box-shadow:inset 1px 0 #d4d4d4,inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td:nth-of-type(n + 2){box-shadow:inset -1px 0 #d4d4d4,inset 0 -1px #d4d4d4;border:none}:host ::ng-deep .gt tbody tr td .upper-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#000;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr td .lower-label{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:0px;color:#a7a7a7;display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}:host ::ng-deep .gt tbody tr br{display:block;content:\"\";margin-top:-8px}:host ::ng-deep .gt tbody tr:nth-of-type(1) td{border-top:none!important}:host ::ng-deep .gt .custom-column-checkbox-checked,:host ::ng-deep .gt .custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}:host ::ng-deep .gt .custom-column-checkbox-checked{color:#268bff}:host ::ng-deep .gt .custom-column-checkbox-unchecked{color:#4a4a4a}.table-container::-webkit-scrollbar-track{border:1px solid rgba(0,0,0,.1)!important}.table-container::-webkit-scrollbar{width:5px;height:5px}.table-container::-webkit-scrollbar-thumb{border-radius:4px;background-color:#0006!important;border:1px solid rgba(0,0,0,.2)}.table-container{overflow-x:auto;overflow-y:auto}.rowSelectCheckbox,#selectAllRowsCheckbox{cursor:pointer}.disable-checkbox{color:#dedede!important;pointer-events:none!important}.mdi-warning{color:#f3c639;font-size:16px;line-height:28px}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{opacity:1}.redcolor-status{color:#c62a2a}.redcolor-cell-border{outline:1px solid #ff5353!important;outline-offset:-1px!important}#no-filter-space{width:.875rem}::ng-deep .mat-button-toggle-appearance-standard .mat-button-toggle-label-content{line-height:1.875rem!important;width:2.625rem;padding:0 .625rem}input.numberInput{margin-right:-.8125rem;padding:0 0 0 .625rem;height:1.875rem}::ng-deep .mat-button-toggle-checked{background-color:#268bff!important;color:#fff!important}::ng-deep .mat-button-toggle-group-appearance-standard{border-radius:0}.hidden{display:none}.no-data-div{margin-top:2.5px}.no-data-div label{margin:0;width:auto;font-weight:500;background-color:#d3d3d3;padding:.3125rem 1.125rem;border-radius:.25rem}.column-values:nth-of-type(2){color:#a7a7a7!important}.custom-column-checkbox-checked,.custom-column-checkbox-unchecked{font-size:.875rem;cursor:pointer}.custom-column-checkbox-checked{color:#268bff}.custom-column-checkbox-unchecked{color:#4a4a4a}.time-filter-checkboxes>div>p{color:#151b1e}.radio-button-dimension,::ng-deep .markForCredit .mat-radio-inner-circle,::ng-deep .markForCredit .mat-radio-outer-circle,::ng-deep .mark-for-credit .mat-radio-inner-circle,::ng-deep .mark-for-credit .mat-radio-outer-circle,::ng-deep .markForMakeGood .mat-radio-inner-circle,::ng-deep .markForMakeGood .mat-radio-outer-circle,::ng-deep .noAction .mat-radio-inner-circle,::ng-deep .noAction .mat-radio-outer-circle,::ng-deep .credit .mat-radio-inner-circle,::ng-deep .credit .mat-radio-outer-circle,::ng-deep .approve .mat-radio-inner-circle,::ng-deep .approve .mat-radio-outer-circle,::ng-deep .reject .mat-radio-inner-circle,::ng-deep .reject .mat-radio-outer-circle,::ng-deep .resubmit .mat-radio-inner-circle,::ng-deep .resubmit .mat-radio-outer-circle,::ng-deep .rejectCreditRequest .mat-radio-inner-circle,::ng-deep .rejectCreditRequest .mat-radio-outer-circle{height:18px!important;width:18px!important}::ng-deep .margin-bottom-zero .mat-radio-label{margin-bottom:0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .reject.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:#ff0}::ng-deep .resubmit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:#ff0}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .noAction.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:green}::ng-deep .approve.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:green}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-outer-circle{border-color:red}::ng-deep .credit.mat-radio-button.mat-accent.mat-radio-checked .mat-radio-inner-circle{background-color:red}::ng-deep .mat-radio-button.mat-radio-disabled .mat-radio-outer-circle{border-color:#00000061!important}::ng-deep .mat-radio-button.mat-radio-disabled.mat-radio-checked .mat-radio-inner-circle{background-color:#00000061!important}::ng-deep tr.white-background-row{background:white}::ng-deep tr.gray-background-row{background:rgba(233,233,233,.5)}.remarks-tooltip,.seller-tooltip{font-size:.875rem;color:#268bff;position:relative;top:.1875rem;cursor:pointer}.seller-tooltip{float:right}::ng-deep .remarks-info-tooltip .tooltip-inner{max-width:19.25rem!important}.rating-icon,.lur-violation-icon{color:#268bff;cursor:pointer;margin-left:2px;position:relative;left:-2px}::ng-deep .rating-info-tooltip .tooltip-inner{max-width:800px!important}p.first-row{padding:.5rem .5rem 0;color:#000;white-space:nowrap;text-align:left}p.second-row{padding:2px .5rem .5rem;color:#000;white-space:nowrap;text-align:left}::ng-deep .gt-total-row-tooltip{opacity:1!important}::ng-deep .gt-total-row-tooltip .tooltip-inner{color:#000;box-shadow:0 6px 10px #0000004d,0 2px 2px #0003;background-color:#fff;padding:4px!important;width:100%;border-radius:2px!important}::ng-deep .gt-total-row-tooltip .arrow:before{border-top-color:#fff!important}.info-label{margin-left:4px;color:#268bff;vertical-align:text-top}::ng-deep .hierarchy-tooltip .tooltip-inner{padding:4px!important}table.seller-hierarchy-table{table-layout:fixed;margin:.625rem .625rem .625rem .8125rem}table.seller-hierarchy-table tr th{font-family:Roboto;font-size:.75rem;font-weight:500;font-stretch:normal;font-style:normal;line-height:1.67;letter-spacing:normal;color:#5e5e5e;white-space:nowrap;background:#ededed;box-shadow:none!important;border-top:1px solid #d4d4d4}table.seller-hierarchy-table tr th:first-of-type,table.seller-hierarchy-table tr td:first-of-type{border-left:1px solid #d4d4d4}table.seller-hierarchy-table tr th:last-of-type,table.seller-hierarchy-table tr td:last-of-type{border-right:1px solid #d4d4d4;width:7.875rem!important}table.seller-hierarchy-table tr th:nth-of-type(2){width:7.75rem!important}table.seller-hierarchy-table tr td{font-family:Roboto;font-size:.75rem;font-weight:400;font-stretch:normal;font-style:normal;line-height:normal;letter-spacing:normal;color:#4a4a4a;box-shadow:none!important;border-top:1px solid #d4d4d4;border-bottom:1px solid #d4d4d4}table.seller-hierarchy-table tr td:nth-of-type(2),table.seller-hierarchy-table tr td:nth-of-type(3){padding-top:.25rem}table.seller-hierarchy-table tr td span{display:inline-block;width:90%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative}.difference-text{padding:.5rem;color:#000;text-align:left}::ng-deep .posted-avg-tooltip .tooltip-inner{width:13.8125rem!important}\n"] }]
|
|
943
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.AnnaSortService }, { type: i1.AnnaDateTimeFormatService }, { type: i1.AnnaFilterService }, { type: i1.AnnaGenericTableService }]; }, propDecorators: { showSkeletonLoading: [{
|
|
944
|
+
type: Input
|
|
945
|
+
}], tableHeaders: [{
|
|
946
|
+
type: Input
|
|
947
|
+
}], tableData: [{
|
|
948
|
+
type: Input
|
|
949
|
+
}], clonedTableData: [{
|
|
950
|
+
type: Input
|
|
951
|
+
}], numberOfSkeletonRows: [{
|
|
952
|
+
type: Input
|
|
953
|
+
}], numberOfSkeletonColumns: [{
|
|
954
|
+
type: Input
|
|
955
|
+
}], gtGeneralConfig: [{
|
|
956
|
+
type: Input
|
|
957
|
+
}], totalRowInfo: [{
|
|
958
|
+
type: Input
|
|
959
|
+
}], gtDimension: [{
|
|
960
|
+
type: Input
|
|
961
|
+
}], tableClass: [{
|
|
962
|
+
type: Input
|
|
963
|
+
}], maximumRowsWhichCanBeRenderedWithoutScroll: [{
|
|
964
|
+
type: Input
|
|
965
|
+
}], toggleCheckbox: [{
|
|
966
|
+
type: Output
|
|
967
|
+
}], toggleRowCheckbox: [{
|
|
968
|
+
type: Output
|
|
969
|
+
}], toggleHeaderCheckbox: [{
|
|
970
|
+
type: Output
|
|
971
|
+
}], undoIconClicked: [{
|
|
972
|
+
type: Output
|
|
973
|
+
}], filterAppliedToTable: [{
|
|
974
|
+
type: Output
|
|
975
|
+
}], sortingAppliedToTable: [{
|
|
976
|
+
type: Output
|
|
977
|
+
}], rowClicked: [{
|
|
978
|
+
type: Output
|
|
979
|
+
}], radioButtonSelected: [{
|
|
980
|
+
type: Output
|
|
981
|
+
}], columnFilterOpened: [{
|
|
982
|
+
type: Output
|
|
983
|
+
}], columnFilterClosed: [{
|
|
984
|
+
type: Output
|
|
985
|
+
}], gtIconClicked: [{
|
|
986
|
+
type: Output
|
|
987
|
+
}], gtSVGIconClicked: [{
|
|
988
|
+
type: Output
|
|
989
|
+
}], gtTextActionClicked: [{
|
|
990
|
+
type: Output
|
|
991
|
+
}], gtViewDetailClicked: [{
|
|
992
|
+
type: Output
|
|
993
|
+
}], sortComponent: [{
|
|
994
|
+
type: ViewChildren,
|
|
995
|
+
args: [AnnaSortComponent]
|
|
996
|
+
}] } });
|
|
997
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbm5hLWNvcmUvc3JjL2xpYi9hbm5hLWdlbmVyaWMtdGFibGUtbGliL2NvbXBvbmVudHMvYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FubmEtY29yZS9zcmMvbGliL2FubmEtZ2VuZXJpYy10YWJsZS1saWIvY29tcG9uZW50cy9hbm5hLW5vbi1lZGl0YWJsZS1nZW5lcmljLXRhYmxlL2FubmEtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsNEJBQTRCO0FBQzVCLE9BQU8sRUFBRSxTQUFTLEVBQVUsS0FBSyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBNEIsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFckosZ0NBQWdDO0FBQ2hDLE9BQU8sTUFBTSxNQUFNLFFBQVEsQ0FBQztBQUc1QixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBRTFELGlDQUFpQztBQUNqQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUVyRSwwQ0FBMEM7QUFDMUMsT0FBTyxFQUFxQyxnQkFBZ0IsRUFBQyxlQUFlLEVBQUMseUJBQXlCLEVBQWUsaUJBQWlCLEVBQW1ELHVCQUF1QixFQUFFLE1BQU8saURBQWlELENBQUM7QUFDM1EsT0FBTyxFQUFnQixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7Ozs7Ozs7QUFR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O3NCQUFwQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csMENBQTBDO3NCQUFsRCxLQUFLO2dCQUVJLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csa0JBQWtCO3NCQUEzQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxhQUFhO3NCQUF0QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxtQkFBbUI7c0JBQTVCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQW1FMEIsYUFBYTtzQkFBN0MsWUFBWTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcclxuLy8gQW5ndWxhciBpbXBvcnQgc3RhdGVtZW50c1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIFZpZXdDaGlsZHJlbiwgUXVlcnlMaXN0LCBPdXRwdXQsIEV2ZW50RW1pdHRlciwgU2ltcGxlQ2hhbmdlcywgT25DaGFuZ2VzLCBDaGFuZ2VEZXRlY3RvclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLy8gVGhpcmQgcGFydHkgaW1wb3J0IHN0YXRlbWVudHNcclxuaW1wb3J0IG1vbWVudCBmcm9tIFwibW9tZW50XCI7XHJcbmltcG9ydCB7IE5nYkRhdGUgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IE9wdGlvbnMgfSBmcm9tICdAYW5ndWxhci1zbGlkZXIvbmd4LXNsaWRlcic7XHJcbmltcG9ydCB7IGNsb25lRGVlcCwgaXNFcXVhbCwgbWFwLCB1bmlxIH0gZnJvbSBcImxvZGFzaC1lc1wiO1xyXG5cclxuLy8gVXNlciBkZWZpbmVkIGltcG9ydCBzdGF0ZW1lbnRzXHJcbmltcG9ydCB7IEFubmFTb3J0Q29tcG9uZW50IH0gZnJvbSAnLi4vYW5uYS1zb3J0L2FubmEtc29ydC5jb21wb25lbnQnO1xyXG5cclxuLy9zdWItZW50cmllcyBvZiBhbm5hIGxpYiBpbXBvcnQgc3RhdGVtZW50XHJcbmltcG9ydCB7IFNlbGxlckdyb3VwSGllcmFyY2h5LElXZWVrQ2FsZW5kYXIscmFkaW9CdXR0b25Nb2RlbCxBbm5hU29ydFNlcnZpY2UsQW5uYURhdGVUaW1lRm9ybWF0U2VydmljZSwgTmdiRGF0ZVR5cGUsIEFubmFGaWx0ZXJTZXJ2aWNlLCBJR3RHZW5lcmFsQ29uZmlnLCBJR3RUYWJsZUhlYWRlciwgSVRvdGFsUm93SW5mbywgQW5uYUdlbmVyaWNUYWJsZVNlcnZpY2UgfSBmcm9tICBcIkBhbm5hbGliL2FubmEtY29yZS9zcmMvbGliL2FubmEtY29yZS1zaGFyZWQtbGliXCI7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XHJcblxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhbm5hLWNvcmUtbm9uLWVkaXRhYmxlLWdlbmVyaWMtdGFibGUtbGliJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vYW5uYS1ub24tZWRpdGFibGUtZ2VuZXJpYy10YWJsZS5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBbm5hTm9uRWRpdGFibGVHZW5lcmljVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcyB7XHJcblxyXG4gIEBJbnB1dCgpIHNob3dTa2VsZXRvbkxvYWRpbmc6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdGFibGVIZWFkZXJzOiBJR3RUYWJsZUhlYWRlcltdO1xyXG4gIEBJbnB1dCgpIHRhYmxlRGF0YTogYW55W107XHJcbiAgQElucHV0KCkgY2xvbmVkVGFibGVEYXRhOiBhbnlbXTtcclxuICBASW5wdXQoKSBudW1iZXJPZlNrZWxldG9uUm93czogbnVtYmVyW107IC8vdGhpcyBpcyBub3QgYmVpbmcgdXNlZC5cclxuICBASW5wdXQoKSBudW1iZXJPZlNrZWxldG9uQ29sdW1uczogbnVtYmVyW11bXTtcclxuICBASW5wdXQoKSBndEdlbmVyYWxDb25maWc6IElHdEdlbmVyYWxDb25maWc7XHJcbiAgQElucHV0KCkgdG90YWxSb3dJbmZvPzogSVRvdGFsUm93SW5mb1tdO1xyXG4gIEBJbnB1dCgpIGd0RGltZW5zaW9uOiB7IHJvd0hlaWdodDogbnVtYmVyLCB0YWJsZUhlaWdodDogc3RyaW5nLCBoZWFkZXJIZWlnaHQ6IG51bWJlciB9O1xyXG4gIEBJbnB1dCgpIHRhYmxlQ2xhc3M6IHN0cmluZztcclxuICBASW5wdXQoKSBtYXhpbXVtUm93c1doaWNoQ2FuQmVSZW5kZXJlZFdpdGhvdXRTY3JvbGw6IG51bWJlciA9IDU7XHJcblxyXG4gIEBPdXRwdXQoKSB0b2dnbGVDaGVja2JveCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgdG9nZ2xlUm93Q2hlY2tib3ggPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHRvZ2dsZUhlYWRlckNoZWNrYm94ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSB1bmRvSWNvbkNsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZpbHRlckFwcGxpZWRUb1RhYmxlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzb3J0aW5nQXBwbGllZFRvVGFibGUgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0NsaWNrZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJhZGlvQnV0dG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGNvbHVtbkZpbHRlck9wZW5lZCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgY29sdW1uRmlsdGVyQ2xvc2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBndEljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBndFNWR0ljb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBndFRleHRBY3Rpb25DbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBndFZpZXdEZXRhaWxDbGlja2VkID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG5cclxuXHJcbiAgdGFibGVEYXRhV3JhcHBlcjogYW55W107XHJcbiAgcm93Q2hlY2tlZDogYm9vbGVhbjtcclxuICBpc0FsbFJvd3NDaGVja2VkOiBib29sZWFuO1xyXG4gIG5vRGF0YVdpZHRoOiBzdHJpbmcgPSBcIjU1JVwiO1xyXG4gIG1hcmtlZEZvckNyZWRpdFN0YXR1czogc3RyaW5nO1xyXG4gIG1hcmtlZEZvck1HU3RhdHVzOiBzdHJpbmc7XHJcblxyXG4gIC8vU29ydCBhbmQgRmlsdGVyXHJcbiAgdG9vbFRpcGRhdGE6IGFueTtcclxuICB0ZW1wVG9vbHRpcERhdGE6IGFueTtcclxuICB0b29sdGlwUmFkaW9UZXh0TWFwOiBNYXA8YW55LCBhbnk+O1xyXG4gIHJhZGlvQnV0dG9uczogYW55W107XHJcbiAgdG9vbHRpcDogYW55O1xyXG4gIGNsb25lZFRvb2x0aXBEYXRhOiBhbnk7XHJcbiAgY2xvbmVkVG9vbHRpcFNlbGVjdGVkTWFwRGF0YTogYW55O1xyXG4gIHNlYXJjaEJhcjogc3RyaW5nO1xyXG4gIGRpc2FibGVDbGVhckFsbEJ0bjogYm9vbGVhbiA9IHRydWU7XHJcbiAgZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuOiBib29sZWFuID0gdHJ1ZTtcclxuICBhbGxTZWxlY3RlZCA9IDA7XHJcbiAgc2hvd0FsbDogYm9vbGVhbjtcclxuICBkaXNhYmxlQ2hlY2tib3hBcHBseTogYm9vbGVhbjtcclxuICBkaXNhYmxlU2xpZGVyQXBwbHlCdXR0b246IGJvb2xlYW47XHJcbiAgZGlzYWJsZVRpbWVBcHBseUJ1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLy8gU2xpZGVyIEZpbHRlclxyXG4gIHNsaWRlck1pblZhbHVlOiBudW1iZXI7XHJcbiAgc2xpZGVyTWF4VmFsdWU6IG51bWJlcjtcclxuICBvcHRpb25zOiBPcHRpb25zID0ge1xyXG4gICAgZmxvb3I6IDAsXHJcbiAgICBjZWlsOiAwLFxyXG4gICAgc3RlcDogMC4xXHJcbiAgfTtcclxuICBzbGlkZXJWYWx1ZTogeyBtaW46IG51bWJlciwgbWF4OiBudW1iZXIgfTtcclxuICBzbGlkZXJGaWx0ZXJUZXh0Qm94U3RlcDogc3RyaW5nO1xyXG5cclxuICAvLyBDYWxlbmRhciBGaWx0ZXJcclxuICBjYWxlbmRhck1pbkVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBjYWxlbmRhck1heEVuYWJsZWREYXRlOiBOZ2JEYXRlVHlwZTtcclxuICBzZWxlY3RlZE1pbkRhdGU6IE5nYkRhdGVUeXBlO1xyXG4gIHNlbGVjdGVkTWF4RGF0ZTogTmdiRGF0ZVR5cGU7XHJcblxyXG4gIC8vV2VlayBGaWx0ZXJcclxuICBtdWx0aVdlZWtQaWNrZXJDb25maWc6IElXZWVrQ2FsZW5kYXI7XHJcblxyXG4gIC8vVGltZSBGaWx0ZXJcclxuICBzZWxlY3RlZEZyb21UaW1lOiBhbnlbXTtcclxuICBzZWxlY3RlZFRvVGltZTogYW55W107XHJcbiAgY2xvbmVkU2VsZWN0ZWRGcm9tVGltZTogYW55O1xyXG4gIGNsb25lZFNlbGVjdGVkVG9UaW1lOiBhbnk7XHJcbiAgZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0bjogYm9vbGVhbjtcclxuICB0YWJsZUNvbHVtbnM6IHN0cmluZ1tdID0gW107XHJcbiAgdG90YWxSb3dDb2x1bW5zOiBzdHJpbmdbXSA9IG51bGw7XHJcbiAgc2hvd011bHRpVGltZUNoZWNrYm94OiBib29sZWFuO1xyXG4gIHNob3daZXJvVGltZUNoZWNrYm94OiBib29sZWFuO1xyXG4gIHNob3dFbnRlclRpbWVDaGVja2JveDogYm9vbGVhbjtcclxuICBtdWx0aVRpbWVDaGVja2JveENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgemVyb1RpbWVDaGVja2JveENoZWNrZWQ6IGJvb2xlYW47XHJcbiAgZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkOiBib29sZWFuO1xyXG4gIGJpbmRWYWx1ZUZ1bmNDYWxsZWQ6IGJvb2xlYW47XHJcblxyXG4gIGhpZXJhcmNoeVRvb2x0aXA6IHsgb3BlbjogKCkgPT4gdm9pZDsgY2xvc2U6ICgpID0+IHZvaWQ7IH07XHJcbiAgc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFNlbGxlckdyb3VwSGllcmFyY2h5W107XHJcbiAgc2hvd0NoZWNrYm94RmlsdGVyUmFkaW9CdXR0b25zOiBib29sZWFuO1xyXG5cclxuICBAVmlld0NoaWxkcmVuKEFubmFTb3J0Q29tcG9uZW50KSBzb3J0Q29tcG9uZW50OiBRdWVyeUxpc3Q8QW5uYVNvcnRDb21wb25lbnQ+O1xyXG4gIGlzU2Nyb2xsZWRMZWZ0OiBib29sZWFuID0gZmFsc2U7XHJcbiAgcm93Qm9yZGVyV2lkdGg6IG51bWJlciA9IDI7XHJcbiAgUGZwSWNvbkFjdGl2ZUNvbG9yID0gXCIjOUIxQjkzXCJcclxuICBQZnBJY29uRGlzYWJsZUNvbG9yID0gXCJyZ2JhKDE4OSwxODksMTg5LDAuNSlcIjtcclxuICBpc0RpZmZlcmVuY2VMZXNzVGhhbjI1UGVyY2VudDogYW55O1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHJpdmF0ZSBhbm5hU29ydFNlcnZpY2U6IEFubmFTb3J0U2VydmljZSxcclxuICAgIHB1YmxpYyBhbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlOiBBbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGFubmFGaWx0ZXJTZXJ2aWNlOiBBbm5hRmlsdGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgYW5uYUdlbmVyaWNUYWJsZVNlcnZpY2U6IEFubmFHZW5lcmljVGFibGVTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNldFRvb2x0aXBSYWRpb05hbWVzKCk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIC8vIHRoaXMudGFibGVEYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uQ29sdW1ucztcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ2VuZXJpY1wiKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKHRoaXMudGFibGVIZWFkZXJzKTtcclxuICAgIC8vIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KHRoaXMudGFibGVEYXRhKSk7XHJcbiAgICBpZiAodGhpcy5zaG93U2tlbGV0b25Mb2FkaW5nKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5udW1iZXJPZlNrZWxldG9uQ29sdW1ucztcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNldEluaXRpYWxWYWx1ZU1hcERhdGEoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtbkZpbHRlcnMoKTtcclxuICAgICAgdGhpcy50YWJsZUNvbHVtbnMgPSB0aGlzLnRhYmxlSGVhZGVycy5maWx0ZXIoeCA9PiB4LnZpc2libGUpLm1hcCh4ID0+IHguaGVhZGVySW5mb1swXS5vYmplY3RLZXkpO1xyXG4gICAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICAvL3NldHRpbmcgdGFibGUgY29sdW1uIGhlcmUgYXMgd2VsbCBiZWNhdXNlIHdoaWxlIHNob3dpbmcgc2tlbGV0b24gbG9hZGVyLCB3ZSBzaG91bGQgc2hvdyB0YWJsZSBoZWFkZXJzLlxyXG4gICAgaWYgKGNoYW5nZXNbJ3RhYmxlSGVhZGVycyddICYmIGNoYW5nZXNbJ3RhYmxlSGVhZGVycyddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICB0aGlzLnRhYmxlQ29sdW1ucyA9IHRoaXMudGFibGVIZWFkZXJzLmZpbHRlcih4ID0+IHgudmlzaWJsZSkubWFwKHggPT4geC5oZWFkZXJJbmZvWzBdLm9iamVjdEtleSlcclxuICAgIH1cclxuXHJcbiAgICBpZiAoY2hhbmdlc1sndG90YWxSb3dJbmZvJ10gJiYgY2hhbmdlc1sndG90YWxSb3dJbmZvJ10uY3VycmVudFZhbHVlKSB7XHJcbiAgICAgIHRoaXMudG90YWxSb3dDb2x1bW5zID0gdGhpcy50b3RhbFJvd0luZm8ubWFwKHggPT4geC5jb2xOYW1lKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2RSZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIHRyYWNrQnlGbihpbmRleDogbnVtYmVyKSB7XHJcbiAgICByZXR1cm4gaW5kZXg7XHJcbiAgfVxyXG5cclxuICBzZXRUb29sdGlwUmFkaW9OYW1lcygpIHtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcCA9IG5ldyBNYXAoKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJTdGFydFRpbWVGb3JGaWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIkVuZFRpbWVGb3JGaWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJzdGFydF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJTdGFydCBUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImVuZF90aW1lX2Zvcl9maWx0ZXJcIiwgXCJFbmQgVGltZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QUVOYW1lXCIsIFwiUHJpbWFyeSBBRVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZWdpb25cIiwgXCJSZWdpb25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWdlbmN5TmFtZVwiLCBcIkFnZW5jeVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJsb2NhdGlvblwiLCBcIkxvY2F0aW9uXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFkdmVydGlzZXJOYW1lXCIsIFwiQWR2ZXJ0aXNlclwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9kdWN0Q29kZVwiLCBcIlByb2R1Y3QgQ29kZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJmbGlnaHRTdGFydERhdGVcIiwgXCJTdGFydCBEYXRlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImZsaWdodEVuZERhdGVcIiwgXCJFbmQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvcmRlcklkQW5kUmV2TnVtYmVyXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImFsdGVybmF0ZU9yZGVySWRcIiwgXCJCdXllciBPcmRlciNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiZ3JwXCIsIFwiR1JQXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImNwcFwiLCBcIkNQUFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJpbXBzXCIsIFwiSU1QU1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJjcG1cIiwgXCJDUE1cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib2ZmZXJlZE1Hc1wiLCBcIk9mZmVyZWQgTUdcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3V0c3RhbmRpbmdQRVwiLCBcIk8vUyBQRVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvZmZlcmVkQURVc1wiLCBcIk9mZmVyZWQgQURVc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJ1ZERlZmljaXRWYWx1ZVwiLCBcIlBlbmRpbmcgQXVkaWVuY2UgRGVsdGFcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnRFbmRUaW1lTXVsdGlcIiwgXCJUaW1lXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFZhbHVlXCIsIFwiQm9va2VkXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImJvb2tlZFNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwidXNlckNoYW5nZXNcIiwgXCJPdGhlciBjaGFuZ2VzXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcImludmVudG9yeUNvZGVcIiwgXCJJbnZlbnRvcnkgQ29kZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcm9ncmFtXCIsIFwiUHJvZ3JhbVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhZ2VuY3lcIiwgXCJBZ2VuY3lcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYWR2ZXJ0aXNlclwiLCBcIkFkdmVydGlzZXJcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic3RhcnREYXRlXCIsIFwiU3RhcnQgRGF0ZVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJlbmREYXRlXCIsIFwiRW5kIERhdGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicmN2UHJlZW1wdFwiLCBcIk1hZGVnb29kIFBFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcIm9zUHJlZW1wdFwiLCBcIk8vUyBQRVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyY3ZVbmRlckRseVwiLCBcIlJlY292ZXJlZCBVRFwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJvc1VuZGVyRGx5XCIsIFwiTy9zIFVuZGVyIERseVwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJwcmltYXJ5QWVcIiwgXCJQcmltYXJ5IEFFXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJlZ2lvblwiLCBcIlJlZ2lvblwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlMVwiLCBcIlJldiBjb2RlIDFcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwib3JkZXJOb1Jldk5vXCIsIFwiU1ROIE9yZGVyIy1SZXYjXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldkNvZGUyXCIsIFwiUmV2IGNvZGUgMlwiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJyZXZDb2RlM1wiLCBcIlJldiBjb2RlIDNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYm9va2VkXCIsIFwiQm9va2VkXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInNwb3RzXCIsIFwiU3BvdHNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXVkUGVyY2VudFwiLCBcIlBvc3RlZCAlXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInJldmlzaW9uXCIsIFwiUmV2aXNpb25cIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicHJvZHVjdENvZGVcIiwgXCJQcm9kdWN0IENvZGVcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwiYnV5ZXJPcmRlcklkXCIsIFwiQUxUIE9yZGVyI1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJkZW1vXCIsXCJEZW1vXCIpO1xyXG4gICAgdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLnNldChcInBvc3RlZEFkdVwiLFwiUG9zdGVkIEFEVXNcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwic2NoZWR1bGVkQWR1XCIsXCJTY2hlZHVsZWQgQURVc1wiKTtcclxuICAgIHRoaXMudG9vbHRpcFJhZGlvVGV4dE1hcC5zZXQoXCJhdWRpZW5jZURlZmljaXRcIixcIkF1ZGllbmNlIERlZmljaXRcIik7XHJcbiAgICB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuc2V0KFwicG9zdGVkQXVkUGVyY2VudFwiLFwiUG9zdGVkIEF1ZGllbmNlICVcIik7XHJcbiAgfVxyXG5cclxuICBnZW5lcmF0ZVRhYmxlRGF0YVdyYXBwZXIoKSB7XHJcbiAgICB0aGlzLnNob3dTa2VsZXRvbkxvYWRpbmcgPSB0cnVlO1xyXG4gICAgdGhpcy50YWJsZURhdGFXcmFwcGVyID0gW107XHJcbiAgICBsZXQgcm93T2JqZWN0OiBhbnk7XHJcbiAgICBsZXQgY29sdW1uTmFtZTogc3RyaW5nO1xyXG4gICAgbGV0IGNvbHVtbk9iamVjdDogeyBbeDogc3RyaW5nXTogYW55OyB9O1xyXG4gICAgbGV0IGNvbHVtbk9iamVjdEtleTtcclxuICAgIGxldCBrZXlzVXNlZEZvclRhYmxlRGlzcGxheTogc3RyaW5nW107XHJcbiAgICBsZXQga2V5c1VzZWRGb3JDb2x1bW46IHN0cmluZ1tdO1xyXG4gICAgbGV0IGFkZGl0aW9uYWxJbmZvT2JqZWN0OiB7IFt4OiBzdHJpbmddOiBhbnk7IH07XHJcbiAgICBsZXQgYWRkaXRpb25hbEtleXM7XHJcbiAgICB0aGlzLnRhYmxlRGF0YS5mb3JFYWNoKChvYmo6IHsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4ge1xyXG4gICAgICByb3dPYmplY3QgPSB7fTtcclxuICAgICAga2V5c1VzZWRGb3JUYWJsZURpc3BsYXkgPSBbXTtcclxuICAgICAgZm9yICh2YXIgY29sTnVtIGluIHRoaXMudGFibGVIZWFkZXJzKSB7XHJcbiAgICAgICAgY29sdW1uT2JqZWN0ID0ge307XHJcbiAgICAgICAgaWYgKCF0aGlzLnRhYmxlSGVhZGVyc1tjb2xOdW1dLnZpc2libGUpIHtcclxuICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2x1bW5OYW1lID0gXCJcIjtcclxuICAgICAgICBrZXlzVXNlZEZvckNvbHVtbiA9IFtdO1xyXG4gICAgICAgIHRoaXMudGFibGVIZWFkZXJzW2NvbE51bV0uaGVhZGVySW5mby5mb3JFYWNoKChoZWFkZXIpID0+IHtcclxuICAgICAgICAgIGlmIChoZWFkZXIudHlwZU9mQm9keURhdGEgPT09IFwiU1RSSU5HXCIpIHtcclxuICAgICAgICAgICAgY29sdW1uT2JqZWN0S2V5ID0gaGVhZGVyLm9iamVjdEtleTtcclxuICAgICAgICAgICAgY29sdW1uT2JqZWN0W2NvbHVtbk9iamVjdEtleV0gPSBvYmpbY29sdW1uT2JqZWN0S2V5XTtcclxuICAgICAgICAgICAga2V5c1VzZWRGb3JUYWJsZURpc3BsYXkucHVzaChjb2x1bW5PYmplY3RLZXkpO1xyXG4gICAgICAgICAgICBrZXlzVXNlZEZvckNvbHVtbi5wdXNoKGNvbHVtbk9iamVjdEtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChoZWFkZXIudHlwZU9mQm9keURhdGEgPT09IFwiSUNPTlwiKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbk9iamVjdEtleSA9IGhlYWRlci50eXBlT2ZCb2R5RGF0YTtcclxuICAgICAgICAgICAgY29sdW1uT2JqZWN0W2NvbHVtbk9iamVjdEtleV0gPSBvYmpbaGVhZGVyLm9iamVjdEtleV07XHJcbiAgICAgICAgICAgIGtleXNVc2VkRm9yQ29sdW1uLnB1c2goaGVhZGVyLm9iamVjdEtleSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBlbHNlIGlmIChoZWFkZXIudHlwZU9mQm9keURhdGEgPT09IFwiQ0hFQ0tCT1hcIikge1xyXG4gICAgICAgICAgICBjb2x1bW5PYmplY3RLZXkgPSBoZWFkZXIudHlwZU9mQm9keURhdGE7XHJcbiAgICAgICAgICAgIGNvbHVtbk9iamVjdFtjb2x1bW5PYmplY3RLZXldID0gb2JqW2hlYWRlci5vYmplY3RLZXldO1xyXG4gICAgICAgICAgICBrZXlzVXNlZEZvckNvbHVtbi5wdXNoKGhlYWRlci5vYmplY3RLZXkpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzVXNlZEZvckNvbHVtbi5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgY29sdW1uTmFtZSArPSBrZXlzVXNlZEZvckNvbHVtbltpXTtcclxuICAgICAgICAgIGlmIChpICE9PSBrZXlzVXNlZEZvckNvbHVtbi5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgIGNvbHVtbk5hbWUgKz0gJywnO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByb3dPYmplY3RbY29sdW1uTmFtZV0gPSBjb2x1bW5PYmplY3Q7XHJcbiAgICAgIH1cclxuICAgICAgYWRkaXRpb25hbEluZm9PYmplY3QgPSB7fTtcclxuICAgICAgYWRkaXRpb25hbEtleXMgPSBPYmplY3Qua2V5cyhvYmopLmZpbHRlcihrZXkgPT4gIWtleXNVc2VkRm9yVGFibGVEaXNwbGF5LmluY2x1ZGVzKGtleSkpO1xyXG4gICAgICBhZGRpdGlvbmFsS2V5cy5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgYWRkaXRpb25hbEluZm9PYmplY3Rba2V5XSA9IG9ialtrZXldO1xyXG4gICAgICB9KVxyXG4gICAgICByb3dPYmplY3QuQWRkaXRpb25hbEluZm8gPSBhZGRpdGlvbmFsSW5mb09iamVjdDtcclxuICAgICAgdGhpcy50YWJsZURhdGFXcmFwcGVyLnB1c2gocm93T2JqZWN0KTtcclxuICAgIH0pXHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMudGFibGVEYXRhV3JhcHBlcjtcclxuICAgIHRoaXMuc2hvd1NrZWxldG9uTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgLy8gY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkodGhpcy50YWJsZURhdGFXcmFwcGVyKSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KHJvd0RhdGE6IGFueSwgY29sdW1uS2V5czogYW55LCBpc0NoZWNrYm94U2VsZWN0ZWQ6IGFueSkge1xyXG4gICAgdGhpcy50b2dnbGVDaGVja2JveC5lbWl0KHsgcm93RGF0YSwgY29sdW1uS2V5cywgaXNDaGVja2JveFNlbGVjdGVkIH0pO1xyXG4gIH1cclxuXHJcbiAgc2VsZWN0VW5zZWxlY3RBbGxSb3dzKCkge1xyXG4gICAgdGhpcy50b2dnbGVIZWFkZXJDaGVja2JveC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBzZWxlY3RVbnNlbGVjdFJvdyhyb3dEYXRhOiBhbnkpIHtcclxuICAgIHRoaXMudG9nZ2xlUm93Q2hlY2tib3guZW1pdChyb3dEYXRhKTtcclxuICB9XHJcblxyXG4gIHVuZG9DcmVkaXRlZFNwb3QoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJDcmVkaXRcIiB9KTtcclxuICB9XHJcblxyXG4gIHVuZG9NZ1Nwb3QoZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnVuZG9JY29uQ2xpY2tlZC5lbWl0KHsgZGF0YSwgbWdPckNyZWRpdDogXCJNYWtlR29vZFwiIH0pO1xyXG4gIH1cclxuXHJcbiAgLy9Tb3J0IGFuZCBGaWx0ZXIgTG9naWMgYmVnaW5zIVxyXG4gIGNsb3NlVG9vbHRpcCgpIHtcclxuICAgIGlmICh0aGlzLnRvb2x0aXAgJiYgdGhpcy50b29sdGlwLmlzT3BlbigpKSB7XHJcbiAgICAgIHRoaXMudG9vbHRpcC5jbG9zZSgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy50b29sdGlwID0gbnVsbDtcclxuICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSBmYWxzZTtcclxuICAgIGlmICghdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkKSB7XHJcbiAgICAgIHRoaXMuY29sdW1uRmlsdGVyQ2xvc2VkLmVtaXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsb3NlU29ydFRvb2x0aXAoKSB7XHJcbiAgICBpZiAodGhpcy5hbm5hU29ydFNlcnZpY2UudG9vbHRpcCAmJiB0aGlzLmFubmFTb3J0U2VydmljZS50b29sdGlwLmlzT3BlbigpKSB7XHJcbiAgICAgIHRoaXMuYW5uYVNvcnRTZXJ2aWNlLnRvb2x0aXAuY2xvc2UoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluaXRGaWx0ZXJzKCkge1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0QnlBc2MgPSBuZXcgTWFwKCk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0QnlEZXNjID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvID0gbnVsbDtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYXBwbGllZEZpbHRlcnNBcnJheSA9IFtdO1xyXG4gICAgLy9jbG9zaW5nIHRoZSBzb3J0IHRvb2x0aXAgaWYgd2Ugcm91dGUgb24gdGhlIHNhbWUgcm91dGUgb3IgaWYgd2UgY2xpY2sgZHJvcGRvd24gZmlsdGVyc1xyXG4gICAgdGhpcy5jbG9zZVNvcnRUb29sdGlwKCk7XHJcbiAgICB0aGlzLmFubmFTb3J0U2VydmljZS50b29sdGlwID0gbnVsbDtcclxuICAgIHRoaXMuZGlzYWJsZUNsZWFyQWxsQnRuID0gdHJ1ZTtcclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgc2V0SW5pdGlhbFZhbHVlTWFwRGF0YSgpIHtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwID0gbmV3IE1hcCgpO1xyXG4gICAgdGhpcy50YWJsZUhlYWRlcnMuZm9yRWFjaCgoY29sdW1uKSA9PiB7XHJcbiAgICAgIGNvbHVtbi5oZWFkZXJJbmZvLmZvckVhY2goKGhlYWRlcikgPT4ge1xyXG4gICAgICAgIGlmIChoZWFkZXIuZmlsdGVyID09PSBcIlNMSURFUlwiKSB7XHJcbiAgICAgICAgICBoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cy5mb3JFYWNoKChrZXkpID0+IHtcclxuICAgICAgICAgICAgbGV0IG1pbiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmV0dXJuTWF4QW5kTWluVmFsdWUodGhpcy5jbG9uZWRUYWJsZURhdGEsIGtleSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGxldCBtYXggPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1heEFuZE1pblZhbHVlKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBrZXksIGZhbHNlKTtcclxuICAgICAgICAgICAgbGV0IG9iaiA9IHsgbWluLCBtYXggfTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoZWFkZXIuZmlsdGVyID09PSBcIkRBVEVcIikge1xyXG4gICAgICAgICAgaGVhZGVyLmZpbHRlck9iamVjdEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGlmKGtleSA9PSBcInBlcmlvZFwiKXtcclxuICAgICAgICAgICAgY29uc3QgbWluTWF4U3RhcnREYXRlID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5yZXR1cm5NaW5BbmRNYXhEYXRlKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcInN0YXJ0RGF0ZVwiKTtcclxuICAgICAgICAgICAgY29uc3QgbWluTWF4RW5kRGF0ZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmV0dXJuTWluQW5kTWF4RGF0ZSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJlbmREYXRlXCIpO1xyXG4gICAgICAgICAgICBsZXQgZGF0ZU9iaiA9IHsgbWluU2VsZWN0ZWREYXRlOiBtaW5NYXhTdGFydERhdGVbMF0sIG1heFNlbGVjdGVkRGF0ZTogbWluTWF4RW5kRGF0ZVsxXSB9O1xyXG4gICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBkYXRlT2JqKTsgICAgICBcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2V7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pbk1heERhdGUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJldHVybk1pbkFuZE1heERhdGUodGhpcy5jbG9uZWRUYWJsZURhdGEsIGtleSk7XHJcbiAgICAgICAgICAgIGxldCBvYmogPSB7IG1pblNlbGVjdGVkRGF0ZTogbWluTWF4RGF0ZVswXSwgbWF4U2VsZWN0ZWREYXRlOiBtaW5NYXhEYXRlWzFdIH07XHJcbiAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChoZWFkZXIuZmlsdGVyID09PSBcIlRJTUVcIikge1xyXG4gICAgICAgICAgaGVhZGVyLmZpbHRlck9iamVjdEtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBkYXRhID0gdGhpcy5jbG9uZWRUYWJsZURhdGEuZmlsdGVyKChvYmo6IHsgW3g6IHN0cmluZ106IHN0cmluZzsgfSkgPT4gIVtcIlwiLCBcIi1cIiwgbnVsbCwgXCIwXCIsIFwiPG11bHRpPlwiXS5pbmNsdWRlcyhvYmpba2V5XSkpO1xyXG4gICAgICAgICAgICBsZXQgdGltZUFyciA9IG1hcChkYXRhLCBrZXkpO1xyXG4gICAgICAgICAgICB0aW1lQXJyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLnNvcnRCeVRpbWVBc2NlbmRpbmcoYSwgYik7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBsZXQgb2JqID0ge1xyXG4gICAgICAgICAgICAgIGZyb21UaW1lOiB0aW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgIHRvVGltZTogdGltZUFyclt0aW1lQXJyLmxlbmd0aCAtIDFdLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSBcIlNQT1RERVRBSUxTXCIgfHwgdGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSBcIkVYQ0xVREVJTlZFTlRPUllQT1BVUFwiKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGluY2x1ZGVNdWx0aSA9IHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleCgob2JqOiB7IFt4OiBzdHJpbmddOiBzdHJpbmc7IH0pID0+IG9ialtrZXldID09IFwiPG11bHRpPlwiKSAhPSAtMTtcclxuICAgICAgICAgICAgICBsZXQgaW5jbHVkZVplcm8gPSB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogeyBbeDogc3RyaW5nXTogc3RyaW5nOyB9KSA9PiBvYmpba2V5XSA9PSBcIjBcIikgIT0gLTE7XHJcbiAgICAgICAgICAgICAgbGV0IGluY2x1ZGVUaW1lUmFuZ2UgPSB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogeyBbeDogc3RyaW5nXTogc3RyaW5nOyB9KSA9PiBvYmpba2V5XSAhPSBcIjBcIiAmJiBvYmpba2V5XSAhPSBcIjxtdWx0aT5cIikgIT0gLTE7XHJcbiAgICAgICAgICAgICAgbGV0IG9iaiA9IHtcclxuICAgICAgICAgICAgICAgIGZyb21UaW1lOiB0aW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgICAgdG9UaW1lOiB0aW1lQXJyW3RpbWVBcnIubGVuZ3RoIC0gMV0sXHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlTXVsdGk6IGluY2x1ZGVNdWx0aSxcclxuICAgICAgICAgICAgICAgIGluY2x1ZGVaZXJvOiBpbmNsdWRlWmVybyxcclxuICAgICAgICAgICAgICAgIGluY2x1ZGVUaW1lUmFuZ2U6IGluY2x1ZGVUaW1lUmFuZ2VcclxuICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLnNldChrZXksIG9iaik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5ndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09PSBcIlJBVElOR1wiKSB7XHJcbiAgICAgICAgICAgICAgbGV0IGluY2x1ZGVNdWx0aSA9IHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleCgob2JqOiBhbnkpID0+IG9ialtrZXldWzBdID09IFwiPG11bHRpPlwiKSAhPSAtMTtcclxuICAgICAgICAgICAgICBsZXQgaW5jbHVkZVplcm8gPSB0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogeyBbeDogc3RyaW5nXTogc3RyaW5nW107IH0pID0+IG9ialtrZXldWzBdID09IFwiMFwiKSAhPSAtMTtcclxuICAgICAgICAgICAgICBsZXQgaW5jbHVkZVRpbWVSYW5nZSA9IHRoaXMuY2xvbmVkVGFibGVEYXRhLmZpbmRJbmRleCgob2JqOiB7IFt4OiBzdHJpbmddOiBzdHJpbmdbXTsgfSkgPT4gb2JqW2tleV1bMF0gIT0gXCIwXCIgJiYgb2JqW2tleV1bMF0gIT0gXCI8bXVsdGk+XCIpICE9IC0xO1xyXG5cclxuICAgICAgICAgICAgICBsZXQgc3RhcnRUaW1lQXJyID0gbWFwKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcInN0YXJ0VGltZVwiKTtcclxuICAgICAgICAgICAgICBsZXQgZW5kVGltZUFyciA9IG1hcCh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJlbmRUaW1lXCIpO1xyXG5cclxuICAgICAgICAgICAgICBzdGFydFRpbWVBcnIuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5zb3J0QnlUaW1lQXNjZW5kaW5nKGEsIGIpO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICBlbmRUaW1lQXJyLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2Uuc29ydEJ5VGltZURlc2NlbmRpbmcoYSwgYik7XHJcbiAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgIGxldCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgICBmcm9tVGltZTogc3RhcnRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgICAgdG9UaW1lOiBlbmRUaW1lQXJyWzBdLFxyXG4gICAgICAgICAgICAgICAgaW5jbHVkZU11bHRpOiBpbmNsdWRlTXVsdGksXHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlWmVybzogaW5jbHVkZVplcm8sXHJcbiAgICAgICAgICAgICAgICBpbmNsdWRlVGltZVJhbmdlOiBpbmNsdWRlVGltZVJhbmdlXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBvYmopO1xyXG5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5zZXQoa2V5LCBvYmopO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIH0pXHJcbiAgfVxyXG5cclxuICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyOiBhbnlbXSkge1xyXG4gICAgcmV0dXJuIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNUb29sdGlwQWN0aXZlKGhlYWRlcik7XHJcbiAgfVxyXG5cclxuICBiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodG9vbHRpcDogYW55LCBoZWFkZXI6IGFueVtdKSB7XHJcblxyXG4gICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gdHJ1ZTtcclxuICAgIGxldCBjb250YWluZXJUb1Njcm9sbDtcclxuICAgIGlmICh0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT09IFwiU1BPVERFVEFJTFNcIiB8fCB0aGlzLmd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT09IFwiRFJSTElTVElOR1wiKSB7XHJcbiAgICAgIGNvbnRhaW5lclRvU2Nyb2xsID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcInNjcm9sbGFibGUtY29udGFpbmVyXCIpWzBdO1xyXG4gICAgICB2YXIgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKFwiKG1heC13aWR0aDogMTM2NnB4KVwiKTtcclxuICAgICAgaWYgKG1lZGlhUXVlcnkubWF0Y2hlcykge1xyXG4gICAgICAgIGNvbnRhaW5lclRvU2Nyb2xsLnNjcm9sbCgwLCB0aGlzLmd0R2VuZXJhbENvbmZpZy52ZXJ0aWNhbFNjcm9sbE9mZnNldEZvckZpbHRlclRvb2x0aXApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICAvLyBpZiBzYW1lIHRvb2x0aXAgb3BlbmVkIGNsb3NlIGl0XHJcbiAgICBpZiAodG9vbHRpcCA9PSB0aGlzLnRvb2x0aXApIHtcclxuICAgICAgdGhpcy5iaW5kVmFsdWVGdW5jQ2FsbGVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZWFyY2hCYXIgPSAnJztcclxuICAgICAgbGV0IGVuYWJsZWRIZWFkZXJzOiBhbnlbXSA9IFtdO1xyXG4gICAgICBoZWFkZXIuZm9yRWFjaCgoaXRlbTogc3RyaW5nIHwgbnVtYmVyKSA9PiB7XHJcbiAgICAgICAgaWYoaXRlbSA9PSBcInBlcmlvZFwiKXtcclxuICAgICAgICAgICAgbGV0IHVuaXFTdGFydERhdGUgPSB1bmlxKHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W1wic3RhcnREYXRlXCJdKSk7XHJcbiAgICAgICAgICAgIGxldCB1bmlxRW5kRGF0ZSA9IHVuaXEodGhpcy50YWJsZURhdGEubWFwKCh1OnsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtcImVuZERhdGVcIl0pKTtcclxuICAgICAgICAgICAgaWYodW5pcVN0YXJ0RGF0ZS5sZW5ndGggPiAxIHx8IHVuaXFFbmREYXRlLmxlbmd0aCA+IDEgfHwgdGhpcy5pc1Rvb2x0aXBBY3RpdmUoW2l0ZW1dKSl7XHJcbiAgICAgICAgICAgICAgZW5hYmxlZEhlYWRlcnMucHVzaChpdGVtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmKHVuaXEodGhpcy50YWJsZURhdGEubWFwKCh1OnsgW3g6IHN0cmluZ106IGFueTsgfSkgPT4gdVtpdGVtXSkpLmxlbmd0aCA+IDEgfHwgdGhpcy5pc1Rvb2x0aXBBY3RpdmUoW2l0ZW1dKSl7XHJcbiAgICAgICAgICAgIGVuYWJsZWRIZWFkZXJzLnB1c2goaXRlbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5vcGVuVG9vbHRpcCh0b29sdGlwLCBlbmFibGVkSGVhZGVycyk7XHJcbiAgICAgIGlmICh3aW5kb3cuaW5uZXJXaWR0aCA8IDE1MDAgJiYgd2luZG93LmlubmVySGVpZ2h0IDwgNzY4ICYmICF0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNsaWRlclNldC5oYXMoaGVhZGVyWzBdKSkge1xyXG4gICAgICAgIHRoaXMuY29sdW1uRmlsdGVyT3BlbmVkLmVtaXQoKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5zaG93Q2hlY2tib3hGaWx0ZXJSYWRpb0J1dHRvbnMgPSBlbmFibGVkSGVhZGVycy5sZW5ndGggPiAxO1xyXG5cclxuICAgICAgdGhpcy5wb3B1bGF0ZVRvb2x0aXBEYXRhQmFzZWRPblNlbGVjdGVkUmFkaW8oZW5hYmxlZEhlYWRlcnNbMF0pO1xyXG4gICAgICB0aGlzLmJpbmRWYWx1ZUZ1bmNDYWxsZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9wZW5Ub29sdGlwKHRvb2x0aXA6IGFueSwgaGVhZGVyOiBhbnlbXSkge1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICAgIHRoaXMudG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLnRvb2x0aXAub3BlbigpO1xyXG4gICAgLy9jb252ZXJ0IGtleSBpbnRvIHRoZSBoZWFkZXJcclxuICAgIHRoaXMucmFkaW9CdXR0b25zID0gaGVhZGVyLm1hcCgoa2V5OiBhbnkpID0+IHtcclxuICAgICAgbGV0IHZhbHVlID0gdGhpcy50b29sdGlwUmFkaW9UZXh0TWFwLmhhcyhrZXkpXHJcbiAgICAgICAgPyB0aGlzLnRvb2x0aXBSYWRpb1RleHRNYXAuZ2V0KGtleSlcclxuICAgICAgICA6IGtleTsgLy9jaGFuZ2UgdG8gZGlzcGxheSBuYW1lXHJcbiAgICAgIHJldHVybiBuZXcgcmFkaW9CdXR0b25Nb2RlbChrZXksIHZhbHVlKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJDb2x1bW5GaWx0ZXIoKSB7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmNsZWFyQ29sdW1uRmlsdGVyKCk7XHJcbiAgICB0aGlzLnRvb2xUaXBkYXRhID0gbnVsbDtcclxuICAgIHRoaXMudGVtcFRvb2x0aXBEYXRhID0gbnVsbDtcclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtbkZpbHRlcnMoKTtcclxuICB9XHJcblxyXG4gIHBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhoZWFkZXI6IHN0cmluZykge1xyXG5cclxuICAgIHRoaXMuZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uID0gZmFsc2U7XHJcbiAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5ID0gZmFsc2U7XHJcbiAgICBpZiAodGhpcy50b29sVGlwZGF0YSkge1xyXG4gICAgICB0aGlzLnJldmVydCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyA9IGhlYWRlcjtcclxuICAgIGxldCBzZWxlY3RlZEZpbHRlclNldCA9IG5ldyBTZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5hcHBsaWVkRmlsdGVyc0FycmF5KTtcclxuICAgIHRoaXMuZGlzYWJsZUNvbHVtbkNsZWFyQWxsQnRuID0gc2VsZWN0ZWRGaWx0ZXJTZXQuaGFzKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykgPyBmYWxzZSA6IHRydWU7XHJcbiAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS5jYWxlbmRhclNldC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICB0aGlzLmdldENhbGVuZGFyRGF0YSgpO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNsaWRlclNldC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICB0aGlzLmdldFNsaWRlckRhdGEoaGVhZGVyKTtcclxuICAgIH0gZWxzZSBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS50aW1lU2V0LmhhcyhoZWFkZXIpKSB7XHJcbiAgICAgIHRoaXMuZ2V0VGltZUZpbHRlckRhdGEoaGVhZGVyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZ2V0Q2hlY2tib3hEYXRhKGhlYWRlcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRTbGlkZXJEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcblxyXG4gICAgaWYgKGhlYWRlciA9PT0gXCJSYXRlXCIpIHtcclxuICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS50cmFuc2xhdGVGdW5jID0gXCJjdXJyZW5jeVwiO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudHJhbnNsYXRlRnVuYyA9IFwibm9ybWFsXCI7XHJcbiAgICB9XHJcbiAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnBvcHVsYXRlU2xpZGVyVG9vbHRpcCh0aGlzLmNsb25lZFRhYmxlRGF0YSwgdGhpcy50YWJsZURhdGEpO1xyXG5cclxuICAgIHRoaXMuZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uID0gdGhpcy5kaXNhYmxlU2xpZGVyQXBwbHlCdG4oKTtcclxuICAgIGxldCBzZWxlY3RlZFRvb2x0aXBPYmo7XHJcbiAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKGhlYWRlcikpIHtcclxuICAgICAgc2VsZWN0ZWRUb29sdGlwT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZWN0ZWRUb29sdGlwT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcik7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zbGlkZXJNaW5WYWx1ZSA9IHNlbGVjdGVkVG9vbHRpcE9iai5taW4gPCB0aGlzLm9wdGlvbnMuZmxvb3IgPyB0aGlzLm9wdGlvbnMuZmxvb3IgOiBzZWxlY3RlZFRvb2x0aXBPYmoubWluO1xyXG4gICAgdGhpcy5zbGlkZXJNYXhWYWx1ZSA9IHNlbGVjdGVkVG9vbHRpcE9iai5tYXggPCB0aGlzLm9wdGlvbnMuY2VpbCA/IHNlbGVjdGVkVG9vbHRpcE9iai5tYXggOiB0aGlzLm9wdGlvbnMuY2VpbDtcclxuICAgIC8vZGVmYXVsdCBzdGVwIHZhbHVlc1xyXG4gICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAxO1xyXG4gICAgdGhpcy5zbGlkZXJGaWx0ZXJUZXh0Qm94U3RlcCA9IFwiMVwiO1xyXG4gICAgaWYgKGhlYWRlciAhPT0gXCJXZWVrTnVtYmVyXCIpIHtcclxuICAgICAgdGhpcy5vcHRpb25zLnN0ZXAgPSAwLjE7XHJcbiAgICAgIHRoaXMuc2xpZGVyRmlsdGVyVGV4dEJveFN0ZXAgPSBcIjAuMVwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0Q2hlY2tib3hEYXRhKGhlYWRlcjogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnRlbXBUb29sdGlwRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucG9wdWxhdGVUb29sdGlwKGhlYWRlciwgdGhpcy5jbG9uZWRUYWJsZURhdGEsIHRoaXMudGFibGVEYXRhKTtcclxuICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmlzQWxsT3B0aW9uc1NlbGVjdGVkKCk7XHJcbiAgICB0aGlzLnNob3dBbGwgPSB0aGlzLnRlbXBUb29sdGlwRGF0YS5maWx0ZXIoKHg6IHsgaXNIaWRkZW46IGFueTsgfSkgPT4gIXguaXNIaWRkZW4pLmxlbmd0aCA+IDEgPyB0cnVlIDogZmFsc2U7XHJcbiAgICB0aGlzLnRvb2xUaXBkYXRhID0gY2xvbmVEZWVwKHRoaXMudGVtcFRvb2x0aXBEYXRhKTtcclxuICB9XHJcblxyXG4gIGdldENhbGVuZGFyRGF0YSgpIHtcclxuICAgIGNvbnN0IHBhcnNpbmdGb3JtYXQgPSBcIk1NL0REL1lZWVlcIjtcclxuICAgIGxldCBtaW5NYXhkYXRlOiBhbnkgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnBvcHVsYXRlRGF0ZVBpY2tlclRvb2x0aXBXaXRoRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgdGhpcy50YWJsZURhdGEpO1xyXG4gICAgbGV0IHNlbGVjdGVkRGF0ZU9iajtcclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICBzZWxlY3RlZERhdGVPYmogPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBzZWxlY3RlZERhdGVPYmogPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluaXRpYWxWYWx1ZU1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBGb3Igc3RhcnREYXRlXHJcbiAgICAvLyBzZWxlY3RlZCBkYXRlIGlzIGxlc3MgdGhhbiBkYXRlIHdoaWNoIHdlIGdldFxyXG4gICAgaWYgKChzZWxlY3RlZERhdGVPYmoubWluU2VsZWN0ZWREYXRlKS5pc0FmdGVyKG1pbk1heGRhdGUubWluU3RhcnREYXRlKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWluRGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKHNlbGVjdGVkRGF0ZU9iai5taW5TZWxlY3RlZERhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRNaW5EYXRlID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb05nYkRhdGUobWluTWF4ZGF0ZS5taW5TdGFydERhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIEZvciBlbmREYXRhXHJcbiAgICAvLyBzZWxlY3RlZERhdGUgaXMgbGVzcyB0aGFuIGRhdGUgd2hpY2ggd2UgZ2V0XHJcbiAgICBpZiAoKHNlbGVjdGVkRGF0ZU9iai5tYXhTZWxlY3RlZERhdGUpLmlzQWZ0ZXIobWluTWF4ZGF0ZS5tYXhFbmREYXRlKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkTWF4RGF0ZSA9IHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0VG9OZ2JEYXRlKG1pbk1heGRhdGUubWF4RW5kRGF0ZSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZE1heERhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShzZWxlY3RlZERhdGVPYmoubWF4U2VsZWN0ZWREYXRlLCBwYXJzaW5nRm9ybWF0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmNhbGVuZGFyTWluRW5hYmxlZERhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhkYXRlLm1pblN0YXJ0RGF0ZSwgcGFyc2luZ0Zvcm1hdCk7XHJcbiAgICB0aGlzLmNhbGVuZGFyTWF4RW5hYmxlZERhdGUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvTmdiRGF0ZShtaW5NYXhkYXRlLm1heEVuZERhdGUsIHBhcnNpbmdGb3JtYXQpO1xyXG4gIH1cclxuXHJcbiAgZ2V0VGltZUZpbHRlckRhdGEoaGVhZGVyOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXMoaGVhZGVyKSkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWUgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5nZXQoaGVhZGVyKS5mcm9tVGltZTtcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldChoZWFkZXIpLnRvVGltZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldChoZWFkZXIpLmZyb21UaW1lO1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVG9UaW1lID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbml0aWFsVmFsdWVNYXAuZ2V0KGhlYWRlcikudG9UaW1lO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRGcm9tVGltZSAhPSB1bmRlZmluZWQgfHwgdGhpcy5zZWxlY3RlZFRvVGltZSAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgdGhpcy5zZWxlY3RlZEZyb21UaW1lID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmZvcm1hdFRvVHdlbHZlSHJzKHRoaXMuc2VsZWN0ZWRGcm9tVGltZSwgdHJ1ZSk7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWUgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuZm9ybWF0VG9Ud2VsdmVIcnModGhpcy5zZWxlY3RlZFRvVGltZSwgdHJ1ZSk7XHJcblxyXG4gICAgICB0aGlzLmNsb25lZFNlbGVjdGVkRnJvbVRpbWUgPSBjbG9uZURlZXAodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgICAgdGhpcy5jbG9uZWRTZWxlY3RlZFRvVGltZSA9IGNsb25lRGVlcCh0aGlzLnNlbGVjdGVkVG9UaW1lKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWUgPSBbXCItXCIsIFwiLVwiLCBcIi1cIl07XHJcbiAgICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJTUE9UREVUQUlMU1wiIHx8IHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJFWENMVURFSU5WRU5UT1JZUE9QVVBcIikge1xyXG4gICAgICB0aGlzLnNob3dNdWx0aVRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3daZXJvVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmo6IGFueSkgPT4gb2JqW2hlYWRlcl0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zaG93WmVyb1RpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlWmVyb1RpbWUgPSB0aGlzLnRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXSA9PSBcIjBcIikgIT0gLTE7XHJcbiAgICAgICAgdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNob3dNdWx0aVRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlTXVsdGlUaW1lID0gdGhpcy50YWJsZURhdGEuZmluZEluZGV4KChvYmo6IGFueSkgPT4gb2JqW2hlYWRlcl0gPT0gXCI8bXVsdGk+XCIpICE9IC0xO1xyXG4gICAgICAgIHRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlTXVsdGlUaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNob3daZXJvVGltZUNoZWNrYm94IHx8IHRoaXMuc2hvd011bHRpVGltZUNoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXSAhPSBcIjxtdWx0aT5cIiAmJiBvYmpbaGVhZGVyXSAhPSBcIjBcIikgIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVUaW1lUmFuZ2UgPSB0aGlzLnRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXSAhPSBcIjxtdWx0aT5cIiAmJiBvYmpbaGVhZGVyXSAhPSBcIjBcIikgIT0gLTE7XHJcbiAgICAgICAgdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGVsc2UgaWYgKHRoaXMuZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PT0gXCJSQVRJTkdcIikge1xyXG4gICAgICB0aGlzLnNob3dNdWx0aVRpbWVDaGVja2JveCA9IGZhbHNlO1xyXG4gICAgICB0aGlzLnNob3daZXJvVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuc2hvd0VudGVyVGltZUNoZWNrYm94ID0gZmFsc2U7XHJcblxyXG4gICAgICBpZiAodGhpcy5jbG9uZWRUYWJsZURhdGEuZmluZEluZGV4KChvYmo6IGFueSkgPT4gb2JqW2hlYWRlcl1bMF0gPT0gXCIwXCIpICE9IC0xKSB7XHJcbiAgICAgICAgdGhpcy5zaG93WmVyb1RpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlWmVyb1RpbWUgPSB0aGlzLnRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXVswXSA9PSBcIjBcIikgIT0gLTE7XHJcbiAgICAgICAgdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5jbHVkZVplcm9UaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXVswXSA9PSBcIjxtdWx0aT5cIikgIT0gLTEpIHtcclxuICAgICAgICB0aGlzLnNob3dNdWx0aVRpbWVDaGVja2JveCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlTXVsdGlUaW1lID0gdGhpcy50YWJsZURhdGEuZmluZEluZGV4KChvYmo6IGFueSkgPT4gb2JqW2hlYWRlcl1bMF0gPT0gXCI8bXVsdGk+XCIpICE9IC0xO1xyXG4gICAgICAgIHRoaXMubXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlTXVsdGlUaW1lO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLnNob3daZXJvVGltZUNoZWNrYm94IHx8IHRoaXMuc2hvd011bHRpVGltZUNoZWNrYm94KSB7XHJcbiAgICAgICAgdGhpcy5zaG93RW50ZXJUaW1lQ2hlY2tib3ggPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmNsb25lZFRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXVswXSAhPSBcIjxtdWx0aT5cIiAmJiBvYmpbaGVhZGVyXVswXSAhPSBcIjBcIikgIT0gLTEpIHtcclxuICAgICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVUaW1lUmFuZ2UgPSB0aGlzLnRhYmxlRGF0YS5maW5kSW5kZXgoKG9iajogYW55KSA9PiBvYmpbaGVhZGVyXVswXSAhPSBcIjxtdWx0aT5cIiAmJiBvYmpbaGVhZGVyXVswXSAhPSBcIjBcIikgIT0gLTE7XHJcbiAgICAgICAgdGhpcy5lbnRlclRpbWVDaGVja2JveENoZWNrZWQgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVUaW1lUmFuZ2U7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKSB7XHJcbiAgICB0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZCA9ICF0aGlzLm11bHRpVGltZUNoZWNrYm94Q2hlY2tlZDtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5jbHVkZU11bHRpVGltZSA9ICF0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVNdWx0aVRpbWU7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RaZXJvVGltZUNoZWNrYm94KCkge1xyXG4gICAgdGhpcy56ZXJvVGltZUNoZWNrYm94Q2hlY2tlZCA9ICF0aGlzLnplcm9UaW1lQ2hlY2tib3hDaGVja2VkO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlWmVyb1RpbWUgPSAhdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlWmVyb1RpbWU7XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIHNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpIHtcclxuICAgIHRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkID0gIXRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkO1xyXG4gICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlVGltZVJhbmdlID0gIXRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5jbHVkZVRpbWVSYW5nZTtcclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVNsaWRlckFwcGx5QnRuKCkge1xyXG4gICAgcmV0dXJuIHRoaXMub3B0aW9ucy5mbG9vciA9PT0gdGhpcy5vcHRpb25zLmNlaWw7XHJcbiAgfVxyXG5cclxuICBpc0NoZWNrYm94U2VsZWN0ZWQoZGF0YTogYm9vbGVhbiB8IG51bWJlcikge1xyXG4gICAgdGhpcy5hbGxTZWxlY3RlZCA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaXNDaGVja2JveFNlbGVjdGVkKGRhdGEpO1xyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcE1hcC5nZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKS5maWx0ZXIoKHg6IGFueSkgPT4geC5pc1NlbGVjdGVkICYmICF4LmlzSGlkZGVuKS5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5ID0gdHJ1ZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG1pblZhbHVlQ2hhbmdlZCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICBpZiAoaXNOYU4oK3ZhbHVlKSkge1xyXG4gICAgICB0aGlzLnNsaWRlck1pblZhbHVlID0gK3RoaXMub3B0aW9ucy5mbG9vcjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAoK3ZhbHVlID4gdGhpcy5zbGlkZXJNYXhWYWx1ZSkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyTWluVmFsdWUgPSB0aGlzLnNsaWRlck1heFZhbHVlO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2UgaWYgKCt2YWx1ZSA8IHRoaXMub3B0aW9ucy5mbG9vcikge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyTWluVmFsdWUgPSB0aGlzLm9wdGlvbnMuZmxvb3I7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zbGlkZXJNaW5WYWx1ZSA9ICt2YWx1ZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbWF4VmFsdWVDaGFuZ2VkKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgIGlmIChpc05hTigrdmFsdWUpKSB7XHJcbiAgICAgIHRoaXMuc2xpZGVyTWF4VmFsdWUgPSArdGhpcy5vcHRpb25zLmNlaWw7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKCt2YWx1ZSA8IHRoaXMuc2xpZGVyTWluVmFsdWUpIHtcclxuICAgICAgICB0aGlzLnNsaWRlck1heFZhbHVlID0gdGhpcy5zbGlkZXJNaW5WYWx1ZTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIGlmICgrdmFsdWUgPiB0aGlzLm9wdGlvbnMuY2VpbCkge1xyXG4gICAgICAgIHRoaXMuc2xpZGVyTWluVmFsdWUgPSB0aGlzLm9wdGlvbnMuY2VpbDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnNsaWRlck1heFZhbHVlID0gK3ZhbHVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzbGlkZXJWYWx1ZUNoYW5nZSgpIHtcclxuICAgIHRoaXMuc2xpZGVyVmFsdWUgPSB7IG1pbjogdGhpcy5zbGlkZXJNaW5WYWx1ZSwgbWF4OiB0aGlzLnNsaWRlck1heFZhbHVlIH07XHJcbiAgfVxyXG5cclxuICBjYW5jZWxTbGlkZXJGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLnNsaWRlclZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBhbGxPcHRpb25DbGlja2VkKCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU2VsZWN0ZWQgPT0gMCB8fCB0aGlzLmFsbFNlbGVjdGVkID09IDIpIHtcclxuICAgICAgdGhpcy5hbGxTZWxlY3RlZCA9IDE7XHJcbiAgICAgIHRoaXMuZGlzYWJsZUNoZWNrYm94QXBwbHkgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxsU2VsZWN0ZWQgPSAwO1xyXG4gICAgICB0aGlzLmRpc2FibGVDaGVja2JveEFwcGx5ID0gdHJ1ZTtcclxuICAgIH1cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuYWxsT3B0aW9uc0NsaWNrZWQodGhpcy5hbGxTZWxlY3RlZCk7XHJcbiAgfVxyXG5cclxuICBhcHBseUZpbHRlcnMoKSB7XHJcbiAgICBsZXQgaXNTYW1lID0gaXNFcXVhbCh0aGlzLnRvb2xUaXBkYXRhLCB0aGlzLnRlbXBUb29sdGlwRGF0YSk7XHJcbiAgICB0aGlzLnRvb2xUaXBkYXRhID0gY2xvbmVEZWVwKHRoaXMudGVtcFRvb2x0aXBEYXRhKTtcclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcE1hcC5zZXQodGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvLCB0aGlzLnRlbXBUb29sdGlwRGF0YSk7XHJcbiAgICBpZiAoIWlzU2FtZSkge1xyXG4gICAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnJlT3JkZXJBcHBsaWVkRmlsdGVyc0FycmF5KGZhbHNlKTtcclxuICAgIH1cclxuICAgIGxldCB0b29sdGlwU2VsZWN0ZWREYXRhQXJyYXkgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykuZmlsdGVyKCh4OiB7IGlzU2VsZWN0ZWQ6IGFueTsgfSkgPT4geC5pc1NlbGVjdGVkKS5tYXAoKHg6IHsgZGF0YTogYW55OyB9KSA9PiB4LmRhdGEpO1xyXG4gICAgaWYgKHRvb2x0aXBTZWxlY3RlZERhdGFBcnJheS5sZW5ndGggPT0gMCkge1xyXG4gICAgICB0b29sdGlwU2VsZWN0ZWREYXRhQXJyYXkgPSB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykubWFwKCh4OiB7IGRhdGE6IGFueTsgfSkgPT4geC5kYXRhKTtcclxuICAgIH1cclxuICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHRvb2x0aXBTZWxlY3RlZERhdGFBcnJheSk7XHJcbiAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICB0aGlzLmZpbHRlckFwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgLy8gdGhpcy5nZW5lcmF0ZVRhYmxlRGF0YVdyYXBwZXIoKTtcclxuICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5GaWx0ZXJzKCk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxuXHJcbiAgcmV2ZXJ0KCkge1xyXG4gICAgdGhpcy50ZW1wVG9vbHRpcERhdGEgPSBjbG9uZURlZXAodGhpcy50b29sVGlwZGF0YSk7XHJcbiAgICB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBNYXAuc2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbywgdGhpcy50ZW1wVG9vbHRpcERhdGEpO1xyXG4gICAgdGhpcy50b29sVGlwZGF0YSA9IG51bGw7XHJcbiAgfVxyXG5cclxuICBjbG9zZUNoZWNrYm94RmlsdGVyKCkge1xyXG4gICAgaWYgKHRoaXMudG9vbFRpcGRhdGEpIHtcclxuICAgICAgdGhpcy5yZXZlcnQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVNsaWRlckZpbHRlcigpIHtcclxuICAgIGlmICh0aGlzLnNsaWRlclZhbHVlKSB7XHJcbiAgICAgIGxldCBzZWxlY3RlZERhdGFPYmo7XHJcbiAgICAgIGlmICh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnRvb2x0aXBTZWxlY3RlZE1hcC5oYXModGhpcy5hbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvKSkge1xyXG4gICAgICAgIHNlbGVjdGVkRGF0YU9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcbiAgICAgIGVsc2Uge1xyXG4gICAgICAgIHNlbGVjdGVkRGF0YU9iaiA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBsZXQgaXNTYW1lID0gaXNFcXVhbChzZWxlY3RlZERhdGFPYmosIHRoaXMuc2xpZGVyVmFsdWUpO1xyXG5cclxuXHJcbiAgICAgIGlmICghaXNTYW1lKSB7XHJcbiAgICAgICAgdGhpcy5hbm5hRmlsdGVyU2VydmljZS5zbGlkZXJEYXRhID0geyBtaW46IHRoaXMub3B0aW9ucy5mbG9vciwgbWF4OiB0aGlzLm9wdGlvbnMuY2VpbCB9O1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHRoaXMuc2xpZGVyVmFsdWUpO1xyXG4gICAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5maWx0ZXJEYXRhKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcIlwiKTtcclxuICAgICAgICB0aGlzLmNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgICAvLyB0aGlzLmdlbmVyYXRlVGFibGVEYXRhV3JhcHBlcigpO1xyXG4gICAgICAgIHRoaXMuZGlzYWJsZUVuYWJsZUVhY2hDb2x1bW5GaWx0ZXJzKCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRoaXMuc2xpZGVyVmFsdWUgPSBudWxsO1xyXG4gICAgdGhpcy5jbG9zZVRvb2x0aXAoKTtcclxuICB9XHJcblxyXG4gIGNhbmNlbEluRGF0ZUZpbHRlcigpIHtcclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseURhdGVGaWx0ZXIoc2VsZWN0ZWREYXRlOiB7IGZyb21EYXRlOiBOZ2JEYXRlLCB0b0RhdGU6IE5nYkRhdGUgfSkge1xyXG5cclxuICAgIGxldCBzZWxlY3RlZERhdGVPYmo7XHJcbiAgICBpZiAodGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuaGFzKHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbykpIHtcclxuICAgICAgc2VsZWN0ZWREYXRlT2JqID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgc2VsZWN0ZWREYXRlT2JqID0gY2xvbmVEZWVwKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKTtcclxuICAgIH1cclxuXHJcbiAgICBsZXQgaXNTdGFydERhdGVTYW1lID0gaXNFcXVhbCh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChzZWxlY3RlZERhdGUuZnJvbURhdGUpLCBzZWxlY3RlZERhdGVPYmoubWluU2VsZWN0ZWREYXRlKTtcclxuICAgIGxldCBpc0VuZERhdGVTYW1lID0gaXNFcXVhbCh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChzZWxlY3RlZERhdGUudG9EYXRlKSwgc2VsZWN0ZWREYXRlT2JqLm1heFNlbGVjdGVkRGF0ZSk7XHJcblxyXG4gICAgaWYgKCFpc1N0YXJ0RGF0ZVNhbWUgfHwgIWlzRW5kRGF0ZVNhbWUpIHtcclxuICAgICAgc2VsZWN0ZWREYXRlT2JqLm1pblNlbGVjdGVkRGF0ZSA9IG1vbWVudCh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChzZWxlY3RlZERhdGUuZnJvbURhdGUpKTtcclxuICAgICAgc2VsZWN0ZWREYXRlT2JqLm1heFNlbGVjdGVkRGF0ZSA9IG1vbWVudCh0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydE5nYkRhdGVUb01vbWVudChzZWxlY3RlZERhdGUudG9EYXRlKSk7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmxpZ2h0RGF0ZVJhbmdlID0ge1xyXG4gICAgICAgIG1pblNlbGVjdGVkRGF0ZTogbW9tZW50KHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHRoaXMuY2FsZW5kYXJNaW5FbmFibGVkRGF0ZSkpLFxyXG4gICAgICAgIG1heFNlbGVjdGVkRGF0ZTogbW9tZW50KHRoaXMuYW5uYURhdGVUaW1lRm9ybWF0U2VydmljZS5jb252ZXJ0TmdiRGF0ZVRvTW9tZW50KHRoaXMuY2FsZW5kYXJNYXhFbmFibGVkRGF0ZSkpXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHNlbGVjdGVkRGF0ZU9iaik7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoZmFsc2UpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgIHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKTtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgLy8gdGhpcy5nZW5lcmF0ZVRhYmxlRGF0YVdyYXBwZXIoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtbkZpbHRlcnMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBhcHBseVdlZWtGaWx0ZXIoZXZlbnQ6IGFueSkge1xyXG5cclxuICB9XHJcblxyXG4gIGluY3JlbWVudEhvdXIoYXJyOiBhbnlbXSkge1xyXG4gICAgaWYgKGFyclswXSA9PSBcIlwiKSB7XHJcbiAgICAgIGFyclswXSA9IDE7XHJcbiAgICB9IGVsc2UgaWYgKHBhcnNlSW50KGFyclswXSkgPCAxMikge1xyXG4gICAgICBhcnJbMF0gPSBwYXJzZUludChhcnJbMF0pICsgMTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGFyclswXSA9IDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBkZWNyZW1lbnRIb3VyKGFycjogYW55W10pIHtcclxuICAgIGlmIChhcnJbMF0gPT0gXCJcIikge1xyXG4gICAgICBhcnJbMF0gPSAxMjtcclxuICAgIH0gZWxzZSBpZiAocGFyc2VJbnQoYXJyWzBdKSA+IDEpIHtcclxuICAgICAgYXJyWzBdID0gcGFyc2VJbnQoYXJyWzBdKSAtIDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhcnJbMF0gPSAxMjtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGluY3JlbWVudE1pbnV0ZShhcnI6IGFueVtdKSB7XHJcbiAgICBpZiAoYXJyWzFdID09IFwiXCIgfHwgcGFyc2VJbnQoYXJyWzFdKSA9PSAwKSB7XHJcbiAgICAgIGFyclsxXSA9IDMwO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYXJyWzFdID0gXCIwMFwiO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZGVjcmVtZW50TWludXRlKGFycjogYW55KSB7XHJcbiAgICBpZiAoYXJyWzFdID09IFwiXCIgfHwgcGFyc2VJbnQoYXJyWzFdKSA9PSAzMCkge1xyXG4gICAgICBhcnJbMV0gPSBcIjAwXCI7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBhcnJbMV0gPSAzMDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNoYW5nZVN0YXJ0VGltZUhvdXIoaW5jcmVtZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgIHRoaXMuaW5jcmVtZW50SG91cih0aGlzLnNlbGVjdGVkRnJvbVRpbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kZWNyZW1lbnRIb3VyKHRoaXMuc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUVuZFRpbWVIb3VyKGluY3JlbWVudDogYm9vbGVhbikge1xyXG4gICAgaWYgKGluY3JlbWVudCkge1xyXG4gICAgICB0aGlzLmluY3JlbWVudEhvdXIodGhpcy5zZWxlY3RlZFRvVGltZSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmRlY3JlbWVudEhvdXIodGhpcy5zZWxlY3RlZFRvVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZUVuZFRpbWVNaW51dGUoaW5jcmVtZW50OiBib29sZWFuKSB7XHJcbiAgICBpZiAoaW5jcmVtZW50KSB7XHJcbiAgICAgIHRoaXMuaW5jcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRUb1RpbWUpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5kZWNyZW1lbnRNaW51dGUodGhpcy5zZWxlY3RlZFRvVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVN0YXJ0VGltZU1pbnV0ZShpbmNyZW1lbnQ6IGJvb2xlYW4pIHtcclxuICAgIGlmIChpbmNyZW1lbnQpIHtcclxuICAgICAgdGhpcy5pbmNyZW1lbnRNaW51dGUodGhpcy5zZWxlY3RlZEZyb21UaW1lKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZGVjcmVtZW50TWludXRlKHRoaXMuc2VsZWN0ZWRGcm9tVGltZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKTtcclxuICB9XHJcblxyXG4gIGFwcGx5VGltZUZpbHRlcnMoKSB7XHJcbiAgICBsZXQgZnJvbVRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzFdICsgXCIgXCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgZnJvbVRpbWUyNEhyRm9ybWF0ID0gZnJvbVRpbWUyNEhyRm9ybWF0QXJyWzBdICsgXCI6XCIgKyBmcm9tVGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG4gICAgbGV0IHRvVGltZTI0SHJGb3JtYXRBcnIgPSB0aGlzLmFubmFEYXRlVGltZUZvcm1hdFNlcnZpY2UuY29udmVydFRvdHdlbnR5Rm91ckhyc0Zvcm1hdChcclxuICAgICAgdGhpcy5zZWxlY3RlZFRvVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsxXSArIFwiIFwiICsgdGhpcy5zZWxlY3RlZFRvVGltZVsyXSxcclxuICAgICAgdHJ1ZVxyXG4gICAgKTtcclxuICAgIGxldCB0b1RpbWUyNEhyRm9ybWF0ID0gdG9UaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgdG9UaW1lMjRIckZvcm1hdEFyclsxXSArIFwiOjAwXCI7XHJcblxyXG4gICAgbGV0IHByZXZpb3VzU2VsZWN0ZWREYXRhO1xyXG4gICAgaWYgKHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLmhhcyh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pKSB7XHJcbiAgICAgIHByZXZpb3VzU2VsZWN0ZWREYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS50b29sdGlwU2VsZWN0ZWRNYXAuZ2V0KHRoaXMuYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpbyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBwcmV2aW91c1NlbGVjdGVkRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuaW5pdGlhbFZhbHVlTWFwLmdldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8pO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBzZWxlY3RlZERhdGEgPSB7XHJcbiAgICAgIGZyb21UaW1lOiBmcm9tVGltZTI0SHJGb3JtYXQsIHRvVGltZTogdG9UaW1lMjRIckZvcm1hdCwgaW5jbHVkZU11bHRpOiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVNdWx0aVRpbWUsXHJcbiAgICAgIGluY2x1ZGVaZXJvOiB0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLmluY2x1ZGVaZXJvVGltZSwgaW5jbHVkZVRpbWVSYW5nZTogdGhpcy5hbm5hRmlsdGVyU2VydmljZS5pbmNsdWRlVGltZVJhbmdlXHJcbiAgICB9O1xyXG4gICAgaWYgKCFpc0VxdWFsKHByZXZpb3VzU2VsZWN0ZWREYXRhLCBzZWxlY3RlZERhdGEpKSB7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UudG9vbHRpcFNlbGVjdGVkTWFwLnNldCh0aGlzLmFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW8sIHNlbGVjdGVkRGF0YSk7XHJcbiAgICAgIHRoaXMuYW5uYUZpbHRlclNlcnZpY2UucmVPcmRlckFwcGxpZWRGaWx0ZXJzQXJyYXkoZmFsc2UpO1xyXG4gICAgICB0aGlzLnRhYmxlRGF0YSA9IHRoaXMuYW5uYUZpbHRlclNlcnZpY2UuZmlsdGVyRGF0YSh0aGlzLmNsb25lZFRhYmxlRGF0YSwgXCJcIik7XHJcbiAgICAgIHRoaXMuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQoKTtcclxuICAgICAgdGhpcy5maWx0ZXJBcHBsaWVkVG9UYWJsZS5lbWl0KHRoaXMudGFibGVEYXRhKTtcclxuICAgICAgLy8gdGhpcy5nZW5lcmF0ZVRhYmxlRGF0YVdyYXBwZXIoKTtcclxuICAgICAgdGhpcy5kaXNhYmxlRW5hYmxlRWFjaENvbHVtbkZpbHRlcnMoKTtcclxuICAgIH1cclxuICAgIHRoaXMuY2xvc2VUb29sdGlwKCk7XHJcbiAgfVxyXG5cclxuICBjbG9zZVRpbWVGaWx0ZXIoKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRnJvbVRpbWUgPSBjbG9uZURlZXAodGhpcy5jbG9uZWRTZWxlY3RlZEZyb21UaW1lKTtcclxuICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWUgPSBjbG9uZURlZXAodGhpcy5jbG9uZWRTZWxlY3RlZFRvVGltZSk7XHJcbiAgICB0aGlzLmNsb3NlVG9vbHRpcCgpO1xyXG4gIH1cclxuXHJcbiAgZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ1dHRvbigpIHtcclxuICAgIGxldCB0aW1lRm9ybWF0ID0gXCJISDptbTpzc1wiO1xyXG5cclxuICAgIGxldCBzdGFydFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRGcm9tVGltZVswXSArIFwiOlwiICsgdGhpcy5zZWxlY3RlZEZyb21UaW1lWzFdICsgXCIgXCIgKyB0aGlzLnNlbGVjdGVkRnJvbVRpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgc3RhcnRUaW1lMjRIckZvcm1hdCA9IHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMF0gKyBcIjpcIiArIHN0YXJ0VGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG4gICAgbGV0IGVuZFRpbWUyNEhyRm9ybWF0QXJyID0gdGhpcy5hbm5hRGF0ZVRpbWVGb3JtYXRTZXJ2aWNlLmNvbnZlcnRUb3R3ZW50eUZvdXJIcnNGb3JtYXQoXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMF0gKyBcIjpcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMV0gKyBcIiBcIiArIHRoaXMuc2VsZWN0ZWRUb1RpbWVbMl0sXHJcbiAgICAgIHRydWVcclxuICAgICk7XHJcbiAgICBsZXQgZW5kVGltZTI0SHJGb3JtYXQgPSBlbmRUaW1lMjRIckZvcm1hdEFyclswXSArIFwiOlwiICsgZW5kVGltZTI0SHJGb3JtYXRBcnJbMV0gKyBcIjowMFwiO1xyXG5cclxuICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IG1vbWVudChzdGFydFRpbWUyNEhyRm9ybWF0LCB0aW1lRm9ybWF0KS5pc0FmdGVyKG1vbWVudChlbmRUaW1lMjRIckZvcm1hdCwgdGltZUZvcm1hdCkpO1xyXG5cclxuICAgIGlmICghdGhpcy5tdWx0aVRpbWVDaGVja2JveENoZWNrZWQgJiYgIXRoaXMuemVyb1RpbWVDaGVja2JveENoZWNrZWQgJiYgIXRoaXMuZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzb3J0ZWREYXRhKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudC50eXBlID09IFwibm9uZVwiKSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gdGhpcy5hbm5hRmlsdGVyU2VydmljZS5maWx0ZXJEYXRhKHRoaXMuY2xvbmVkVGFibGVEYXRhLCBcIlwiKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMudGFibGVEYXRhID0gZXZlbnQuZGF0YTtcclxuICAgIH1cclxuICAgIHRoaXMuc29ydGluZ0FwcGxpZWRUb1RhYmxlLmVtaXQodGhpcy50YWJsZURhdGEpO1xyXG4gICAgLy8gdGhpcy5nZW5lcmF0ZVRhYmxlRGF0YVdyYXBwZXIoKTtcclxuICB9XHJcblxyXG4gIGNoZWNrSWZTb3J0aW5nSXNBcHBsaWVkKCkge1xyXG4gICAgbGV0IGFwcGxpZWRrZXk7XHJcbiAgICBsZXQgaXNBc2M7XHJcbiAgICBjb25zdCBhcnIgPSB0aGlzLnNvcnRDb21wb25lbnQudG9BcnJheSgpO1xyXG5cclxuICAgIGxldCBvYmogPSB0aGlzLmFubmFTb3J0U2VydmljZS5jaGVja0lmU29ydGluZ0lzQXBwbGllZCh0aGlzLmFubmFTb3J0U2VydmljZS5zb3J0QnlBc2MsIHRydWUpO1xyXG4gICAgYXBwbGllZGtleSA9IG9iai5rZXk7XHJcbiAgICBpc0FzYyA9IG9iai5zZXRWYWx1ZVRvO1xyXG5cclxuICAgIGlmICghYXBwbGllZGtleSkge1xyXG4gICAgICBsZXQgb2JqID0gdGhpcy5hbm5hU29ydFNlcnZpY2UuY2hlY2tJZlNvcnRpbmdJc0FwcGxpZWQodGhpcy5hbm5hU29ydFNlcnZpY2Uuc29ydEJ5RGVzYywgZmFsc2UpO1xyXG4gICAgICBhcHBsaWVka2V5ID0gb2JqLmtleTtcclxuICAgICAgaXNBc2MgPSBvYmouc2V0VmFsdWVUbztcclxuICAgIH1cclxuXHJcbiAgICBpZiAoYXBwbGllZGtleSkge1xyXG4gICAgICB0aGlzLmFwcGx5U29ydGluZyhhcnIsIGFwcGxpZWRrZXksIGlzQXNjKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFwcGx5U29ydGluZyhzb3J0Q29tcG9uZW50QXJyOiBBbm5hU29ydENvbXBvbmVudFtdLCBhcHBsaWVkS2V5OiBzdHJpbmcsIGlzQXNjOiBib29sZWFuKSB7XHJcbiAgICBzb3J0Q29tcG9uZW50QXJyLmZvckVhY2goKGNvbXBvbmVudCkgPT4ge1xyXG4gICAgICBpZiAoY29tcG9uZW50LnNvcnRCeSA9PT0gYXBwbGllZEtleSkge1xyXG4gICAgICAgIHRoaXMuc2V0U29ydENvbXBvbmVudERhdGFQcm9wZXJ0eShjb21wb25lbnQpO1xyXG4gICAgICAgIGlzQXNjID8gY29tcG9uZW50LnNvcnRCeUFzY2VuZGluZygpIDogY29tcG9uZW50LnNvcnRCeURlc2NlbmRpbmcoKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBzZXRTb3J0Q29tcG9uZW50RGF0YVByb3BlcnR5KHNvcnRDb21wb25lbnQ6IEFubmFTb3J0Q29tcG9uZW50KSB7XHJcbiAgICBzb3J0Q29tcG9uZW50LmRhdGEgPSB0aGlzLnRhYmxlRGF0YTtcclxuICAgIHNvcnRDb21wb25lbnQuY2xvbmVkRGF0YSA9IGNsb25lRGVlcCh0aGlzLnRhYmxlRGF0YSk7XHJcbiAgfVxyXG5cclxuICBkaXNhYmxlRW5hYmxlRWFjaENvbHVtbkZpbHRlcnMoKSB7XHJcbiAgICB0aGlzLnRhYmxlSGVhZGVycy5mb3JFYWNoKGhlYWRlciA9PiB7XHJcbiAgICAgIGhlYWRlci5oZWFkZXJJbmZvLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgaWYgKGl0ZW0uZmlsdGVyICE9IFwiXCIpIHtcclxuICAgICAgICAgIGxldCB2YWx1ZXMgPSBbXTtcclxuICAgICAgICAgIGl0ZW0uZGlzYWJsZUZpbHRlciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgaXRlbS5maWx0ZXJPYmplY3RLZXlzLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGlmKGtleSA9PSBcInBlcmlvZFwiKXtcclxuICAgICAgICAgICAgICBsZXQgdW5pcVN0YXJ0RGF0ZSA9IHVuaXEodGhpcy50YWJsZURhdGEubWFwKCh1OiB7IFt4OiBzdHJpbmddOiBhbnk7IH0pID0+IHVbXCJzdGFydERhdGVcIl0pKTtcclxuICAgICAgICAgICAgICBsZXQgdW5pcUVuZERhdGUgPSB1bmlxKHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W1wiZW5kRGF0ZVwiXSkpO1xyXG5cclxuICAgICAgICAgICAgICBpdGVtLmRpc2FibGVGaWx0ZXIgPSAodW5pcVN0YXJ0RGF0ZS5sZW5ndGggPiAxIHx8IHVuaXFFbmREYXRlLmxlbmd0aCA+IDEpID8gZmFsc2UgOiB0cnVlOyBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNle1xyXG4gICAgICAgICAgICAgIHZhbHVlcyA9IHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W2tleV0pO1xyXG4gICAgICAgICAgICAgIGlmKHVuaXEodmFsdWVzKS5maWx0ZXIobiA9PiBuIT1udWxsKS5sZW5ndGggPiAxKXtcclxuICAgICAgICAgICAgICAgIGl0ZW0uZGlzYWJsZUZpbHRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAvLyBpZih1bmlxKHZhbHVlcykubGVuZ3RoID4gMSl7XHJcbiAgICAgICAgICAvLyAgIGl0ZW0uZGlzYWJsZUZpbHRlciA9IGZhbHNlO1xyXG4gICAgICAgICAgLy8gfWVsc2V7XHJcbiAgICAgICAgICAvLyAgIGl0ZW0uZGlzYWJsZUZpbHRlciA9IHRydWU7XHJcbiAgICAgICAgICAvLyB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpdGVtLnNvcnQpIHtcclxuICAgICAgICAgIGlmICh1bmlxKHRoaXMudGFibGVEYXRhLm1hcCgodTogeyBbeDogc3RyaW5nXTogYW55OyB9KSA9PiB1W2l0ZW0ub2JqZWN0S2V5XSkpLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgaXRlbS5kaXNhYmxlU29ydCA9IGZhbHNlO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaXRlbS5kaXNhYmxlU29ydCA9IHRydWU7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5hbm5hR2VuZXJpY1RhYmxlU2VydmljZS52aXJ0dWFsU2Nyb2xsU3ViamVjdC5zdWJzY3JpYmUoKHZhbCkgPT57XHJcbiAgICAgIHRoaXMuaXNTY3JvbGxlZExlZnQgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGFibGUtY29udGFpbmVyXCIpWzBdLnNjcm9sbExlZnQgPiAwO1xyXG4gICAgICB0aGlzLmNkUmVmLmRldGVjdENoYW5nZXMoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIGxldCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFwidGFibGUtY29udGFpbmVyXCIpWzBdO1xyXG4gICAgZnJvbUV2ZW50KGNvbnRhaW5lciwgJ3Njcm9sbCcpXHJcbiAgICAuc3Vic2NyaWJlKChldmVudDogRXZlbnQpID0+IFxyXG4gICAge1xyXG4gICAgICB0aGlzLmlzU2Nyb2xsZWRMZWZ0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KS5zY3JvbGxUb3AgPiAwO1xyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGRhdGFSb3dDbGlja2VkKHJvd0RhdGE6IGFueSkge1xyXG4gICAgdGhpcy5yb3dDbGlja2VkLmVtaXQocm93RGF0YSk7XHJcbiAgfVxyXG5cclxuICByYWRpb0J1dHRvbkNsaWNrZWQoZGF0YTogYW55LCBhY3Rpb246IHN0cmluZywgaXNEaXNhYmxlZDogYm9vbGVhbikge1xyXG4gICAgaWYgKCFpc0Rpc2FibGVkKSB7XHJcbiAgICAgIHRoaXMucmFkaW9CdXR0b25TZWxlY3RlZC5lbWl0KHsgZGF0YSwgYWN0aW9uIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoc2VsbGVyR3JvdXBIaWVyYXJjaHk6IFNlbGxlckdyb3VwSGllcmFyY2h5W10sIHRvb2x0aXA6IGFueSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuaGllcmFyY2h5VG9vbHRpcCAmJiB0aGlzLmhpZXJhcmNoeVRvb2x0aXAub3Blbikge1xyXG4gICAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAuY2xvc2UoKTtcclxuICAgIH1cclxuICAgIHRoaXMuc2VsbGVyR3JvdXBIaWVyYXJjaHkgPSBzZWxsZXJHcm91cEhpZXJhcmNoeTtcclxuICAgIHRoaXMuaGllcmFyY2h5VG9vbHRpcCA9IHRvb2x0aXA7XHJcbiAgICB0aGlzLmhpZXJhcmNoeVRvb2x0aXAub3BlbigpO1xyXG4gIH1cclxuXHJcbiAgaWNvbkNsaWNrZWQocm93RGF0YTogYW55LGljb25DbGFzczogc3RyaW5nKXtcclxuICAgIHRoaXMuZ3RJY29uQ2xpY2tlZC5lbWl0KHtkYXRhOiByb3dEYXRhLGljb25DbGFzczogaWNvbkNsYXNzfSk7XHJcbiAgfVxyXG5cclxuICBzdmdJY29uQ2xpY2tlZChyb3dEYXRhOiBhbnksa2V5OiBzdHJpbmcpe1xyXG4gICAgdGhpcy5ndFNWR0ljb25DbGlja2VkLmVtaXQoe2RhdGE6IHJvd0RhdGEsa2V5OiBrZXl9KTtcclxuICB9XHJcblxyXG4gIHRleHRBY3Rpb25DbGlja2VkKHJvd0RhdGE6IGFueSxpZDogbnVtYmVyKXtcclxuICAgIHRoaXMuZ3RUZXh0QWN0aW9uQ2xpY2tlZC5lbWl0KHtkYXRhOnJvd0RhdGEsaWR9KTtcclxuICB9XHJcblxyXG4gIHZpZXdEZXRhaWxzQ2xpY2tlZChyb3dEYXRhOiBhbnkpe1xyXG4gICAgdGhpcy5ndFZpZXdEZXRhaWxDbGlja2VkLmVtaXQoe2RhdGE6cm93RGF0YX0pO1xyXG4gIH1cclxuXHJcbiAgc2V0SXNEaWZmZXJlbmNlKHZhbHVlOiBib29sZWFuKXtcclxuICAgIHRoaXMuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJ0YWJsZS1jb250YWluZXJcIiBbbmdDbGFzc109XCJ7ICdzY3JvbGwtbGVmdC1zaGFkb3ctZWZmZWN0JzogaXNTY3JvbGxlZExlZnQgfVwiPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIFtjbGFzc109XCJndEdlbmVyYWxDb25maWcudGFibGVDb250YWluZXJOYW1lXCJcclxuICAgICAgICBjbGFzcz1cImhvcml6b250YWwtc2Nyb2xsLWZvci10YWJsZS1jb250YWluZXJcIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgaGVpZ2h0OlxyXG4gICAgICAgICAgICAgICAgdGFibGVEYXRhLmxlbmd0aCA8IG1heGltdW1Sb3dzV2hpY2hDYW5CZVJlbmRlcmVkV2l0aG91dFNjcm9sbFxyXG4gICAgICAgICAgICAgICAgICAgID8gJ2NhbGMoJyArXHJcbiAgICAgICAgICAgICAgICAgICAgICAoKGd0RGltZW5zaW9uLnJvd0hlaWdodCArIHJvd0JvcmRlcldpZHRoKSAqIHRhYmxlRGF0YS5sZW5ndGggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICghdGFibGVEYXRhLmxlbmd0aCB8fCAhZ3RHZW5lcmFsQ29uZmlnLnRvdGFsUm93XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24uaGVhZGVySGVpZ2h0ICsgZ3REaW1lbnNpb24ucm93SGVpZ2h0ICsgKDIgKiByb3dCb3JkZXJXaWR0aCkpKSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAncHgpJ1xyXG4gICAgICAgICAgICAgICAgICAgIDogZ3REaW1lbnNpb24udGFibGVIZWlnaHRcclxuICAgICAgICB9XCJcclxuICAgID5cclxuICAgICAgICA8dGFibGUgY2xhc3M9XCJndFwiIFtuZ0NsYXNzXT1cInRhYmxlQ2xhc3NcIiBtYXQtdGFibGUgW2RhdGFTb3VyY2VdPVwidGFibGVEYXRhXCI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoZWFkZXItcm93XCJcclxuICAgICAgICAgICAgICAgIG1hdC1oZWFkZXItcm93XHJcbiAgICAgICAgICAgICAgICAqbWF0SGVhZGVyUm93RGVmPVwidGFibGVDb2x1bW5zOyBzdGlja3k6IHRydWVcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5oZWFkZXJIZWlnaHRcIlxyXG4gICAgICAgICAgICA+PC90cj5cclxuICAgICAgICAgICAgPHRyXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInRvdGFsLXJvd1wiXHJcbiAgICAgICAgICAgICAgICBtYXQtaGVhZGVyLXJvd1xyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5yb3dIZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgKm1hdEhlYWRlclJvd0RlZj1cInRvdGFsUm93Q29sdW1uczsgc3RpY2t5OiB0cnVlXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5oaWRkZW5dPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgc2hvd1NrZWxldG9uTG9hZGluZyB8fFxyXG4gICAgICAgICAgICAgICAgICAgICghc2hvd1NrZWxldG9uTG9hZGluZyAmJiAhdGFibGVEYXRhLmxlbmd0aCkgfHxcclxuICAgICAgICAgICAgICAgICAgICAoIXNob3dTa2VsZXRvbkxvYWRpbmcgJiYgIWd0R2VuZXJhbENvbmZpZy50b3RhbFJvdylcclxuICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgID48L3RyPlxyXG4gICAgICAgICAgICA8dHJcclxuICAgICAgICAgICAgICAgIFtjbGFzc109XCJyb3dEYXRhLmd0Q2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgbWF0LXJvd1xyXG4gICAgICAgICAgICAgICAgKm1hdFJvd0RlZj1cImxldCByb3dEYXRhOyBjb2x1bW5zOiB0YWJsZUNvbHVtbnNcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmhlaWdodC5weF09XCJndERpbWVuc2lvbi5yb3dIZWlnaHRcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwicm93RGF0YS5iYWNrZ3JvdW5kQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgW3N0eWxlLmJvcmRlcl09XCJyb3dEYXRhLmJvcmRlclwiIChjbGljayk9XCJkYXRhUm93Q2xpY2tlZChyb3dEYXRhKVwiXHJcbiAgICAgICAgICAgID48L3RyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBUT1RBTCBST1cgLS0+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgW21hdENvbHVtbkRlZl09XCJjb2x1bW4uY29sTmFtZVwiICpuZ0Zvcj1cImxldCBjb2x1bW4gb2YgdG90YWxSb3dJbmZvOyB0cmFja0J5OiB0cmFja0J5Rm5cIj5cclxuICAgICAgICAgICAgICAgIDx0ZCBtYXQtaGVhZGVyLWNlbGwgKm1hdEhlYWRlckNlbGxEZWYgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW4uY29sc3BhblwiIGNsYXNzPVwie3tjb2x1bW4uY2xhc3N9fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgY29sdW1uLmRhdGEgfX08L3N0cm9uZz5cclxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY29sdW1uLmxvd2VyRGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YnI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7Y29sdW1uLmxvd2VyRGF0YX19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNvbHVtbi50b29sdGlwTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGkgY2xhc3M9XCJtaSBtZGktaW5mby1vdXRsaW5lIGluZm8tbGFiZWxcIiBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImNvbHVtbi50b29sdGlwTWVzc2FnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJndC10b3RhbC1yb3ctdG9vbHRpcFwiIHBsYWNlbWVudD1cImJvdHRvbVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgPCEtLSBNQUlOIFJPVyAtLT5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbWF0Q29sdW1uRGVmXT1cImNvbHVtbkRlZi5oZWFkZXJJbmZvWzBdLm9iamVjdEtleVwiICpuZ0Zvcj1cImxldCBjb2x1bW5EZWYgb2YgdGFibGVIZWFkZXJzOyAgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICA8dGggbm93cmFwIG1hdC1oZWFkZXItY2VsbCAqbWF0SGVhZGVyQ2VsbERlZiBbc3R5bGUud2lkdGhdPVwiY29sdW1uRGVmLndpZHRoXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBteC0wXCIgKm5nRm9yPVwibGV0IGhlYWRlciBvZiBjb2x1bW5EZWYuaGVhZGVySW5mbzsgbGV0IGogPSBpbmRleDtcIj4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cImhlYWRlci50eXBlT2ZIZWFkZXJEYXRhID09PSAnU1RSSU5HJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7ICd1cHBlci1sYWJlbCc6IGogPT09IDAsICdsb3dlci1sYWJlbCc6IGogPT09IDEgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGhlYWRlci5uYW1lIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ2ltcHNJbmZvVG9vbHRpcCdcIiBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImltcHNJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCJoZWFkZXIudG9vbHRpcCAmJiBoZWFkZXIudG9vbHRpcC5uYW1lID09ICdyYXRpbmdJbmZvVG9vbHRpcCdcIiBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJhdGluZ0luZm9Ub29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwUG9zaXRpb24gfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInt7IGhlYWRlclsndG9vbHRpcCddLnRvb2x0aXBDbGFzcyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cImhlYWRlci50b29sdGlwICYmIGhlYWRlci50b29sdGlwLm5hbWUgPT0gJ3JhdGVJbmZvVG9vbHRpcCdcIiBjbGFzcz1cInt7aGVhZGVyWyd0b29sdGlwJ10uaWNvbkNsYXNzfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1N0eWxlXT1cInsnZmxvYXQnOiBoZWFkZXJbJ3Rvb2x0aXAnXS5pY29uUG9zaXRpb259XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdD1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInJhdGVJbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnR5cGVPZkhlYWRlckRhdGEgPT09ICdDSEVDS0JPWCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuaXNIZWFkZXJDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0QWxsUm93cygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhZ3RHZW5lcmFsQ29uZmlnLmlzSGVhZGVyQ2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZS1jaGVja2JveCc6IGd0R2VuZXJhbENvbmZpZy5kaXNhYmxlSGVhZGVyQ2hlY2tib3ggfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0QWxsUm93cygpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuc2hvd0FsbENvbHVtbkZpbHRlclwiIGNsYXNzPVwic29ydC1maWx0ZXItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLnNvcnRcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1jb3JlLXNvcnQtbGliXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzb3J0QnldPVwiaGVhZGVyLnNvcnRPYmplY3RLZXkgPyBoZWFkZXIuc29ydE9iamVjdEtleSA6IGhlYWRlci5vYmplY3RLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YV09XCJ0YWJsZURhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZVNvcnRdPVwiaGVhZGVyLmRpc2FibGVTb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNvcnQpPVwic29ydGVkRGF0YSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbm5hLWNvcmUtc29ydC1saWI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXkubGVuZ3RoICYmIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVGaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImZpbHRlclRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0PVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodCwgaGVhZGVyLmZpbHRlck9iamVjdEtleXMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICdTTElERVInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFubmFGaWx0ZXJTZXJ2aWNlLmFwcGxpZWRGaWx0ZXJzQXJyYXkubGVuZ3RoICYmIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVGaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInNsaWRlclRvb2xUaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0MT1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQxLCBoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ0RBVEUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyLmZpbHRlck9iamVjdEtleXMpICYmIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVGaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cImRhdGVQaWNrZXJUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwibGVmdC10b3AgYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cIidvdXRzaWRlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3QyPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJiaW5kVGhlVmFsdWVUb1Rvb2xUaXAodDIsIGhlYWRlci5maWx0ZXJPYmplY3RLZXlzKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChoaWRkZW4pPVwiY2xvc2VUb29sdGlwKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJyIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJoZWFkZXIuZmlsdGVyID09PSAnV0VFSydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktZmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZlOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cykgJiYgaXNUb29sdGlwQWN0aXZlKGhlYWRlci5maWx0ZXJPYmplY3RLZXlzKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkOiBoZWFkZXIuZGlzYWJsZUZpbHRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwid2Vla1BpY2tlclRvb2xUaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gbGVmdC10b3BcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCInb3V0c2lkZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2Vycz1cIm1hbnVhbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0Mz1cIm5nYlRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiYmluZFRoZVZhbHVlVG9Ub29sVGlwKHQzLCBoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cylcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaGlkZGVuKT1cImNsb3NlVG9vbHRpcCgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaGVhZGVyLmZpbHRlciA9PT0gJ1RJTUUnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWZpbHRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2ZTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Rvb2x0aXBBY3RpdmUoaGVhZGVyLmZpbHRlck9iamVjdEtleXMpICYmIGlzVG9vbHRpcEFjdGl2ZShoZWFkZXIuZmlsdGVyT2JqZWN0S2V5cyksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogaGVhZGVyLmRpc2FibGVGaWx0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInRpbWVGaWx0ZXJUb29sVGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tIGxlZnQtdG9wXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwiJ291dHNpZGUnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcnM9XCJtYW51YWxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjdDQ9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImJpbmRUaGVWYWx1ZVRvVG9vbFRpcCh0NCwgaGVhZGVyLmZpbHRlck9iamVjdEtleXMpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImhlYWRlci5maWx0ZXIgPT09ICcnXCI+IDxzcGFuIGlkPVwibm8tZmlsdGVyLXNwYWNlXCI+PC9zcGFuPjxiciAvPiA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwiaGVhZGVyLnRvb2x0aXAgJiYgaGVhZGVyLnRvb2x0aXAubmFtZSA9PSAnbHVyVmlvbGF0aW9uSW5mb1Rvb2x0aXAnXCIgY2xhc3M9XCJ7e2hlYWRlclsndG9vbHRpcCddLmljb25DbGFzc319XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2Zsb2F0JzogaGVhZGVyWyd0b29sdGlwJ10uaWNvblBvc2l0aW9ufVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdiVG9vbHRpcF09XCJsdXJWaW9sYXRpb25JbmZvVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwie3sgaGVhZGVyWyd0b29sdGlwJ10udG9vbHRpcFBvc2l0aW9uIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJ7eyBoZWFkZXJbJ3Rvb2x0aXAnXS50b29sdGlwQ2xhc3MgfX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3RoPlxyXG5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdEUlInXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbWF0Q2VsbERlZj1cImxldCBST1dfREFUQVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic2hvd1NrZWxldG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIG1hdC1jZWxsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZ3gtc2tlbGV0b24tbG9hZGVyIGNvdW50PVwiMVwiIFt0aGVtZV09XCJ7IGhlaWdodDogJzEwcHgnLCBkaXNwbGF5OiAnYmxvY2snIH1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd1NrZWxldG9uTG9hZGluZ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBzdWJsaW5lIG9mIGNvbHVtbkRlZi5oZWFkZXJJbmZvOyBsZXQgc3VibGluZUluZGV4ID0gaW5kZXg7IHRyYWNrQnk6IHRyYWNrQnlGblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdC1jZWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiIVJPV19EQVRBWydoaWRlJyArIHN1YmxpbmUub2JqZWN0S2V5ICsgJ1RkJ11cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5yb3dzcGFuXT1cIlJPV19EQVRBW3N1YmxpbmUub2JqZWN0S2V5ICsgJ1Jvd3NwYW4nXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJzdWJsaW5lLnR5cGVPZkJvZHlEYXRhXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSBbY2xhc3NdPVwiUk9XX0RBVEEuaWNvbkNsYXNzXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ0NIRUNLQk9YJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbc3VibGluZS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyAnZGlzYWJsZS1jaGVja2JveCc6IFJPV19EQVRBW3N1YmxpbmUuaXNEaXNhYmxlZEtleV0gfVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFVuc2VsZWN0Um93KFJPV19EQVRBKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhUk9XX0RBVEFbc3VibGluZS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgJ2Rpc2FibGUtY2hlY2tib3gnOiBST1dfREFUQVtzdWJsaW5lLmlzRGlzYWJsZWRLZXldIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0VW5zZWxlY3RSb3coUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2JveF9vdXRsaW5lX2JsYW5rXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1JBRElPJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtcmFkaW8tZ3JvdXBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cIlJPV19EQVRBW3N1YmxpbmUub2JqZWN0S2V5XVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCByYWRpb0J1dHRvbiBvZiBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXTsgbGV0IGxhc3QgPSBsYXN0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1yYWRpby1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT1cInt7IHJhZGlvQnV0dG9uLnZhbHVlIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInt7IHJhZGlvQnV0dG9uLmNsYXNzIH19XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhZGlvQnV0dG9uQ2xpY2tlZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFkaW9CdXR0b24udmFsdWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBST1dfREFUQVsnUmFkaW9CdXR0b25Db25maWcnXVswXS5pc0Rpc2FibGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyByYWRpb0J1dHRvbi5sYWJlbCB9fTwvbWF0LXJhZGlvLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxiciAqbmdJZj1cIiFsYXN0XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtcmFkaW8tZ3JvdXA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEFbc3VibGluZS5vYmplY3RLZXldIH19XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmxpbmUub2JqZWN0S2V5ID09ICdTdGF0dXMnICYmIChST1dfREFUQVsnUmVtYXJrcyddICE9PSBudWxsKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWkgbWRpLWluZm8tb3V0bGluZSByZW1hcmtzLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwiY29sdW1uSW5mb1Rvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2VtZW50PVwiYm90dG9tXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcj1cImJvZHlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vbHRpcENsYXNzPVwicmVtYXJrcy1pbmZvLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3Q9XCJuZ2JUb29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgIT0gJ0RSUidcIj5cclxuICAgICAgICAgICAgICAgICAgICA8dGQgbWF0LWNlbGwgKm1hdENlbGxEZWY9XCJsZXQgUk9XX0RBVEFcIiBbc3R5bGUuYmFja2dyb3VuZF09XCJST1dfREFUQS5iYWNrZ3JvdW5kQ29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5neC1za2VsZXRvbi1sb2FkZXIgKm5nSWY9XCJzaG93U2tlbGV0b25Mb2FkaW5nXCIgY291bnQ9XCIxXCIgW3RoZW1lXT1cInsgaGVpZ2h0OiAnMTBweCcsIGRpc3BsYXk6ICdibG9jaycgfVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25neC1za2VsZXRvbi1sb2FkZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dTa2VsZXRvbkxvYWRpbmdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IHN1YmxpbmUgb2YgY29sdW1uRGVmLmhlYWRlckluZm87IGxldCBzdWJMaW5lSW5kZXggPSBpbmRleDsgdHJhY2tCeTogdHJhY2tCeUZuXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS50eXBlT2ZCb2R5RGF0YVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInSUNPTidcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIFtjbGFzc109XCJST1dfREFUQS5pY29uQ2xhc3NcIiAoY2xpY2spPVwiaWNvbkNsaWNrZWQoUk9XX0RBVEEsUk9XX0RBVEEuaWNvbkNsYXNzKVwiPjwvaT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInU1ZHX0lDT04nXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnT1JERVJfTElTVElOR19JTkZMSUdIVCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIlJPV19EQVRBLnBheUZvclBlcmZvcm1hbmNlICYmIHN1YmxpbmUub2JqZWN0S2V5ID09ICdwYXlGb3JQZXJmb3JtYW5jZSdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImN1cnNvci1ub3QtYWxsb3dlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiUGZwSWNvbkFjdGl2ZUNvbG9yXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCInMTVweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2hlaWdodF09XCInMTVweCdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYW5uYS1wYXktZm9yLXBlcmZvcm1hbmNlLWljb24tdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEub3JkZXJTdGF0dXMgIT0gJ0xJVkUnICYmICFST1dfREFUQS5wYXlGb3JQZXJmb3JtYW5jZSAmJiBzdWJsaW5lLm9iamVjdEtleSA9PSAncGF5Rm9yUGVyZm9ybWFuY2UnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInN2Z0ljb25DbGlja2VkKFJPV19EQVRBLCdwYXlGb3JQZXJmb3JtYW5jZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLXBheS1mb3ItcGVyZm9ybWFuY2UtaWNvbi10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIlBmcEljb25EaXNhYmxlQ29sb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIicxNXB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIicxNXB4J1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hbm5hLXBheS1mb3ItcGVyZm9ybWFuY2UtaWNvbi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLWxpdmUtaWNvbi10ZW1wbGF0ZSAqbmdJZj1cIlJPV19EQVRBLm9yZGVyU3RhdHVzID09ICdMSVZFJyAmJiBzdWJsaW5lLm9iamVjdEtleSA9PSAnb3JkZXJTdGF0dXMnIFwiPjwvYW5uYS1saXZlLWljb24tdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdPUkRFUl9MSVNUSU5HX0NPTVBMRVRFRCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cIlJPV19EQVRBLnBheUZvclBlcmZvcm1hbmNlICYmIHN1YmxpbmUub2JqZWN0S2V5ID09ICdwYXlGb3JQZXJmb3JtYW5jZSdcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLXBheS1mb3ItcGVyZm9ybWFuY2UtaWNvbi10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cIlBmcEljb25BY3RpdmVDb2xvclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiJzIwcHgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiJzIwcHgnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2FubmEtcGF5LWZvci1wZXJmb3JtYW5jZS1pY29uLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdiaXpSdWxlU3RhdHVzJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhbm5hLXJlamVjdGVkLWljb24tdGVtcGxhdGUgKm5nSWY9XCJST1dfREFUQS5iaXpSdWxlU3RhdHVzID09ICdSRUpFQ1RFRCdcIj48L2FubmEtcmVqZWN0ZWQtaWNvbi10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YW5uYS1ub3RpZnktaWNvbi10ZW1wbGF0ZSAqbmdJZj1cIlJPV19EQVRBLmJpelJ1bGVTdGF0dXMgPT0gJ05PVElGWSdcIj48L2FubmEtbm90aWZ5LWljb24tdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFubmEtYnV5ZXItYXBwcm92YWwtaWNvbi10ZW1wbGF0ZSAqbmdJZj1cIlJPV19EQVRBLmJpelJ1bGVTdGF0dXMgPT0gJ0FXQUlUSU5HX0FQUFJPVkFMJ1wiPjwvYW5uYS1idXllci1hcHByb3ZhbC1pY29uLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ1RFWFRfQUNUSU9OUydcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gKm5nRm9yPVwibGV0IHRleHQgb2YgUk9XX0RBVEEudGV4dEFjdGlvbnNcIiAoY2xpY2spPVwidGV4dEFjdGlvbkNsaWNrZWQoUk9XX0RBVEEsdGV4dC5pZClcIiBbZGlzYWJsZWRdPVwidGV4dC5pc0Rpc2FibGVkXCIgY2xhc3M9XCJ7e3RleHQuY2xhc3N9fVwiPnt7dGV4dC5uYW1lfX08L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCInQ0hFQ0tCT1gnXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdE9yVW5zZWxlY3RDaGVja2JveChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJPV19EQVRBLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXldXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtdW5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkaXNhYmxlLWNoZWNrYm94JzogUk9XX0RBVEFbY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5pc0Rpc2FibGVkS2V5XVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0T3JVbnNlbGVjdENoZWNrYm94KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUk9XX0RBVEEsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5EZWYuaGVhZGVySW5mb1tzdWJMaW5lSW5kZXhdLm9iamVjdEtleSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaERlZmF1bHQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgIT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IFJPV19EQVRBW2NvbHVtbkRlZi5oZWFkZXJJbmZvW3N1YkxpbmVJbmRleF0ub2JqZWN0S2V5XSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdpbnZlbnRvcnlDb2RlJyAmJiBST1dfREFUQVsnaXNTZWxsZXJHcm91cCddICYmIGd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ1JBVElORycgXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWFsZXJ0LWNpcmNsZS1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwic2VsbGVySGllcmFyY2h5VG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdXRvQ2xvc2VdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXJzPVwibWFudWFsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGhpZGRlbik9XCJjbG9zZVRvb2x0aXAoKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNpbmZvPVwibmdiVG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cImhpZXJhcmNoeS10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1vdXNlZW50ZXIpPVwiYmluZFRoZVZhbHVlVG9TZWxsZXJHcm91cFRvb2x0aXAoUk9XX0RBVEEuc2VsbGVyR3JvdXBIaWVyYXJjaHksIGluZm8pXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aSAqbmdJZj1cInN1YmxpbmUub2JqZWN0S2V5ID09ICdkaXNwbGF5Qm9va2VkQXZlcmFnZVJhdGluZycgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJyAmJiBST1dfREFUQVsnc2hvd1JhdGluZ0F2ZXJhZ2VJY29uJ10gXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1kaSBtZGktYWxlcnQtY2lyY2xlLW91dGxpbmUgc2VsbGVyLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlbWVudD1cImJvdHRvbSBhdXRvXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXI9XCJib2R5XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0Nsb3NlXT1cInRydWVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWVudGVyKT1cImlzRGlmZmVyZW5jZUxlc3NUaGFuMjVQZXJjZW50ID0gUk9XX0RBVEEuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvb2x0aXBDbGFzcz1cInBvc3RlZC1hdmctdG9vbHRpcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nYlRvb2x0aXBdPVwicG9zdGVkUmF0aW5nRGlmZmVyZW5jZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT0gJ2Rpc3BsYXlCb29rZWRBdmVyYWdlSW1wcmVzc2lvbicgJiYgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnUkFUSU5HJyAmJiBST1dfREFUQVsnc2hvd0ltcHJlc3Npb25BdmVyYWdlSWNvbiddIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtZGkgbWRpLWFsZXJ0LWNpcmNsZS1vdXRsaW5lIHNlbGxlci10b29sdGlwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9XCJib3R0b20gYXV0b1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyPVwiYm9keVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbG9zZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJzZXRJc0RpZmZlcmVuY2UoUk9XX0RBVEEuaXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b29sdGlwQ2xhc3M9XCJwb3N0ZWQtYXZnLXRvb2x0aXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ2JUb29sdGlwXT1cInBvc3RlZEltcERpZmZlcmVuY2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3VibGluZS5vYmplY3RLZXkgPT0gJ2Rlc2NyaXB0aW9uJ1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIHx8IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW1cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIlJPV19EQVRBLmRlc2NyaXB0aW9uTWVzc2FnZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgUk9XX0RBVEEuZGVzY3JpcHRpb25NZXNzYWdlIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJST1dfREFUQS5kZXNjcmlwdGlvbkVtYWlsUmVmZXJlbmNlTnVtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFbWFpbCBSZWY6IHt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRW1haWxSZWZlcmVuY2VOdW0gfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxiciAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJlZj1cInt7IFJPV19EQVRBLmRlc2NyaXB0aW9uRGV0YWlsc1VybCB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldD1cIl9ibGFua1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ1BERicgfHwgUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0VYQ0VMJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5Eb3dubG9hZDwvYnV0dG9uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiUk9XX0RBVEEuYWN0aXZpdHluYW1lLnRvTG93ZXJDYXNlKCkgPT0gJ29yZGVyIG9uYm9hcmRlZCdcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25EZXRhaWxzVXJsVHlwZSA9PT0gJ0xJTksnXCIgKGNsaWNrKT1cInZpZXdEZXRhaWxzQ2xpY2tlZChST1dfREFUQSlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biB2aWV3RGV0YWlsc0FuZEVtYWlsQnRuXCI+VmlldyBkZXRhaWxzPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwie3sgUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybCB9fVwiIHRhcmdldD1cIl9ibGFua1wiICpuZ0lmPVwiUk9XX0RBVEEuZGVzY3JpcHRpb25FbWFpbFVybFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIHZpZXdEZXRhaWxzQW5kRW1haWxCdG5cIj5WaWV3IGVtYWlsPC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndEdlbmVyYWxDb25maWcucGFnZSA9PT0gJ1Nwb3REZXRhaWxzJyAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uRGVmLmhlYWRlckluZm9bc3ViTGluZUluZGV4XS5vYmplY3RLZXkgPT09ICdTdGF0dXMnXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaW1hZ2VzL1VuZG8tQ3JlZGl0LUljb24uc3ZnXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlPVwiY3Vyc29yOiBwb2ludGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW1nLWNpcmNsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHQ9XCJVc2VyIEltYWdlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodD1cIjE1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxNXB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiUk9XX0RBVEEuQWxsb3dVc2VyVG9VbmRvTWFya0ZvckNyZWRpdFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwidW5kb0NyZWRpdGVkU3BvdChST1dfREFUQSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmM9XCJhc3NldHMvaW1hZ2VzL1VuZG8tTUctSWNvbi5zdmdcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJjdXJzb3I6IHBvaW50ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJpbWctY2lyY2xlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdD1cIlVzZXIgSW1hZ2VcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PVwiMTVweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjE1cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJST1dfREFUQS5BbGxvd1VzZXJUb1VuZG9NYXJrRm9yTWFrZUdvb2RcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInVuZG9NZ1Nwb3QoUk9XX0RBVEEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvdGFibGU+XHJcbiAgICAgIDwvZGl2PlxyXG5cclxuICAgIDxhbm5hLWNvcmUtbm8tZGF0YS1saWIgW3dpZHRoXT1cIm5vRGF0YVdpZHRoXCIgKm5nSWY9XCIhc2hvd1NrZWxldG9uTG9hZGluZyAmJiB0YWJsZURhdGEubGVuZ3RoID09IDBcIj4gPC9hbm5hLWNvcmUtbm8tZGF0YS1saWI+XHJcbjwvZGl2PlxyXG5cclxuPCEtLSBDaGVja2JveCB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNmaWx0ZXJUb29sdGlwPlxyXG4gICAgPGRpdiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiICpuZ0lmPVwic2hvd0NoZWNrYm94RmlsdGVyUmFkaW9CdXR0b25zXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiByYWRpb0J1dHRvbnNcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eyBkYXRhLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0b29sVGlwXCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZGF0YS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhkYXRhLmtleSlcIiAqbmdJZj1cInJhZGlvQnV0dG9ucy5sZW5ndGggPiAxXCJcclxuICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgPGxhYmVsIGZvcj1cInt7IGRhdGEua2V5IH19XCI+e3sgZGF0YS5sYWJlbCB9fTwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxidXR0b24gY2xhc3M9XCJjb2x1bW4tY2xlYXItYWxsXCIgW2Rpc2FibGVkXT1cImRpc2FibGVDb2x1bW5DbGVhckFsbEJ0blwiIChjbGljayk9XCJjbGVhckNvbHVtbkZpbHRlcigpXCI+Q2xlYXIgZmlsdGVyPC9idXR0b24+XHJcbiAgICA8cCBjbGFzcz1cInNlYXJjaC1ib3hcIj5cclxuICAgICAgICA8aSBjbGFzcz1cIm1pIG1kaS1zZWFyY2ggc2VhcmNoLWljb24gc2VhcmNoLWljb24tcG9zaXRpb25cIj48L2k+XHJcbiAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIlxyXG4gICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXHJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweDsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAwcHhcIlxyXG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInNlYXJjaEJhclwiXHJcbiAgICAgICAgLz5cclxuICAgIDwvcD5cclxuICAgIDxkaXYgY2xhc3M9XCJkcm9wZG93bi1kYXRhLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93QWxsXCI+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzPVwiaW5wdXRcIiAoY2xpY2spPVwiYWxsT3B0aW9uQ2xpY2tlZCgpXCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImFsbFNlbGVjdGVkID09IDFcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJtaSBtZGktY2hlY2stYm94IGNoZWNrLWJveFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiYWxsU2VsZWN0ZWQgPT0gMFwiIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cIm1pIG1kaS1jaGVjay1ib3gtb3V0bGluZS1ibGFuayBjaGVjay1ib3ggdW5jaGVja2VkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJhbGxTZWxlY3RlZCA9PSAyXCIgcm9sZT1cImJ1dHRvblwiIGNsYXNzPVwibWkgbWRpLWluZGV0ZXJtaW5hdGUtY2hlY2stYm94IGNoZWNrLWJveFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZGF0YVwiPkFsbDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGRhdGEgb2YgdGVtcFRvb2x0aXBEYXRhIHwgQW5uYWZpbHRlclNlYXJjaGVkVGV4dDogc2VhcmNoQmFyXCI+XHJcbiAgICAgICAgICAgIDxwICpuZ0lmPVwiIWRhdGEuaXNIaWRkZW5cIiBjbGFzcz1cImlucHV0XCIgKGNsaWNrKT1cImlzQ2hlY2tib3hTZWxlY3RlZChkYXRhKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJkYXRhLmlzU2VsZWN0ZWRcIiByb2xlPVwiYnV0dG9uXCIgY2xhc3M9XCJtaSBtZGktY2hlY2stYm94IGNoZWNrLWJveFwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiIWRhdGEuaXNTZWxlY3RlZFwiIHJvbGU9XCJidXR0b25cIiBjbGFzcz1cIm1pIG1kaS1jaGVjay1ib3gtb3V0bGluZS1ibGFuayBjaGVjay1ib3ggdW5jaGVja2VkXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJkYXRhXCIgdGl0bGU9XCJ7eyBkYXRhLmRhdGEgfX1cIj57eyBkYXRhLmRhdGEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgIDwvcD5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImJ1dHRvbnMtY29udGFpbmVyXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ1dHRvblwiIChjbGljayk9XCJjbG9zZUNoZWNrYm94RmlsdGVyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZUNoZWNrYm94QXBwbHkgfVwiXHJcbiAgICAgICAgICAgIChjbGljayk9XCJhcHBseUZpbHRlcnMoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlQ2hlY2tib3hBcHBseVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgICAgICBBcHBseVxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48IS0tIFNsaWRlciB0ZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNzbGlkZXJUb29sVGlwPlxyXG4gICAgPGRpdiBjbGFzcz1cInJhZGlvLWNvbnRhaW5lclwiICpuZ0lmPVwiZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnRFJSTElTVElORydcIj5cclxuICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBkYXRhIG9mIHJhZGlvQnV0dG9uc1wiPlxyXG4gICAgICAgICAgPGlucHV0IHR5cGU9XCJyYWRpb1wiIGlkPVwie3tkYXRhLmtleX19XCIgW25nTW9kZWxdPVwiYW5uYUZpbHRlclNlcnZpY2Uuc2VsZWN0ZWRSYWRpb1wiIG5hbWU9XCJ0b29sVGlwXCIgdmFsdWU9XCJ7e2RhdGEua2V5fX1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwicG9wdWxhdGVUb29sdGlwRGF0YUJhc2VkT25TZWxlY3RlZFJhZGlvKGRhdGEua2V5KVwiICpuZ0lmPVwicmFkaW9CdXR0b25zLmxlbmd0aCA+IDFcIj5cclxuICAgICAgICAgIDxsYWJlbCBmb3I9XCJ7e2RhdGEua2V5fX1cIj57e2RhdGEubGFiZWx9fTwvbGFiZWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPGJ1dHRvbiBjbGFzcz1cImNvbHVtbi1jbGVhci1hbGwgYWxpZ24tY2VudGVyXCIgW2Rpc2FibGVkXT1cImRpc2FibGVDb2x1bW5DbGVhckFsbEJ0blwiIChjbGljayk9XCJjbGVhckNvbHVtbkZpbHRlcigpXCI+XHJcbiAgICAgICAgQ2xlYXIgZmlsdGVyXHJcbiAgICA8L2J1dHRvbj5cclxuICAgIDxzZWN0aW9uIGNsYXNzPVwibWluLW1heENvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgc3RlcD1cInt7IHNsaWRlckZpbHRlclRleHRCb3hTdGVwIH19XCJcclxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2xpZGVyTWluVmFsdWVcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtaW5WYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTWluXCJcclxuICAgICAgICAvPlxyXG4gICAgICAgIDxzcGFuPlRvPC9zcGFuPlxyXG4gICAgICAgIDxpbnB1dFxyXG4gICAgICAgICAgICB0eXBlPVwibnVtYmVyXCJcclxuICAgICAgICAgICAgc3RlcD1cInt7IHNsaWRlckZpbHRlclRleHRCb3hTdGVwIH19XCJcclxuICAgICAgICAgICAgW25nTW9kZWxdPVwic2xpZGVyTWF4VmFsdWVcIlxyXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtYXhWYWx1ZUNoYW5nZWQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiTWF4XCJcclxuICAgICAgICAvPlxyXG4gICAgPC9zZWN0aW9uPlxyXG4gICAgPGRpdiBjbGFzcz1cInNpZGViYXItc2xpZGVyXCI+XHJcbiAgICAgICAgPG5neC1zbGlkZXJcclxuICAgICAgICAgICAgWyh2YWx1ZSldPVwic2xpZGVyTWluVmFsdWVcIlxyXG4gICAgICAgICAgICBbKGhpZ2hWYWx1ZSldPVwic2xpZGVyTWF4VmFsdWVcIlxyXG4gICAgICAgICAgICBbb3B0aW9uc109XCJvcHRpb25zXCJcclxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cInNsaWRlclZhbHVlQ2hhbmdlKClcIlxyXG4gICAgICAgICAgICAoaGlnaFZhbHVlQ2hhbmdlKT1cInNsaWRlclZhbHVlQ2hhbmdlKClcIlxyXG4gICAgICAgID48L25neC1zbGlkZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2FuY2VsU2xpZGVyRmlsdGVyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZVNsaWRlckFwcGx5QnV0dG9uIH1cIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwiYXBwbHlTbGlkZXJGaWx0ZXIoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlU2xpZGVyQXBwbHlCdXR0b25cIlxyXG4gICAgICAgID5cclxuICAgICAgICAgICAgQXBwbHlcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPCEtLSBEYXRlIFBpY2tlciBUZW1wbGF0ZSAtLT5cclxuPG5nLXRlbXBsYXRlICNkYXRlUGlja2VyVG9vbHRpcD5cclxuICAgIDxkaXYgY2xhc3M9XCJyYWRpby1jb250YWluZXJcIiAqbmdJZj1cImd0R2VuZXJhbENvbmZpZy5jb21wb25lbnQgPT0gJ0RSUkxJU1RJTkcnXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiByYWRpb0J1dHRvbnNcIj5cclxuICAgICAgICAgIDxpbnB1dCB0eXBlPVwicmFkaW9cIiBpZD1cInt7ZGF0YS5rZXl9fVwiIFtuZ01vZGVsXT1cImFubmFGaWx0ZXJTZXJ2aWNlLnNlbGVjdGVkUmFkaW9cIiBuYW1lPVwidG9vbFRpcFwiIHZhbHVlPVwie3tkYXRhLmtleX19XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhkYXRhLmtleSlcIiAqbmdJZj1cInJhZGlvQnV0dG9ucy5sZW5ndGggPiAxXCI+XHJcbiAgICAgICAgICA8bGFiZWwgZm9yPVwie3tkYXRhLmtleX19XCI+e3tkYXRhLmxhYmVsfX08L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJkYXRlcGlja2VyLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjb2x1bW4tY2xlYXItYWxsIGFsaWduLWNlbnRlclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG5cIiAoY2xpY2spPVwiY2xlYXJDb2x1bW5GaWx0ZXIoKVwiPlxyXG4gICAgICAgICAgICBDbGVhciBmaWx0ZXJcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICA8YW5uYS1jb3JlLWNhbGVuZGFyLWZpbHRlci1saWJcclxuICAgICAgICAgICAgW21pbkRhdGVdPVwiY2FsZW5kYXJNaW5FbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgIFttYXhEYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxyXG4gICAgICAgICAgICBbc2VsZWN0ZWRGcm9tRGF0ZV09XCJzZWxlY3RlZE1pbkRhdGVcIlxyXG4gICAgICAgICAgICBbc2VsZWN0ZWRUb0RhdGVdPVwic2VsZWN0ZWRNYXhEYXRlXCJcclxuICAgICAgICAgICAgKGFwcGx5KT1cImFwcGx5RGF0ZUZpbHRlcigkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGNhbmNlbCk9XCJjYW5jZWxJbkRhdGVGaWx0ZXIoKVwiXHJcbiAgICAgICAgPlxyXG4gICAgICAgIDwvYW5uYS1jb3JlLWNhbGVuZGFyLWZpbHRlci1saWI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gV2VlayBQaWNrZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjd2Vla1BpY2tlclRvb2xUaXA+XHJcbiAgICA8ZGl2IGNsYXNzPVwid2Vla3BpY2tlci1jb250YWluZXJcIj5cclxuICAgICAgICA8YW5uYS1jb3JlLXdlZWstY2FsZW5kYXItZmlsdGVyLWxpYlxyXG4gICAgICAgICAgICBbd2Vlay1jYWxlbmRhci1jb25maWddPVwiZ3RHZW5lcmFsQ29uZmlnLm11bHRpV2Vla1BpY2tlckNvbmZpZ1wiXHJcbiAgICAgICAgICAgIChhcHBseSk9XCJhcHBseVdlZWtGaWx0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtmcm9tLWRhdGVdPVwiY2FsZW5kYXJNaW5FbmFibGVkRGF0ZVwiXHJcbiAgICAgICAgICAgIFt0by1kYXRlXT1cImNhbGVuZGFyTWF4RW5hYmxlZERhdGVcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2FubmEtY29yZS13ZWVrLWNhbGVuZGFyLWZpbHRlci1saWI+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjwhLS0gVGltZSBGaWx0ZXIgVGVtcGxhdGUgLS0+XHJcbjxuZy10ZW1wbGF0ZSAjdGltZUZpbHRlclRvb2xUaXA+XHJcbiAgICA8ZGl2IGNsYXNzPVwicmFkaW8tY29udGFpbmVyXCIgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ICE9ICdSQVRJTkcnXCI+XHJcbiAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgZGF0YSBvZiByYWRpb0J1dHRvbnNcIj5cclxuICAgICAgICAgICAgPGlucHV0XHJcbiAgICAgICAgICAgICAgICB0eXBlPVwicmFkaW9cIlxyXG4gICAgICAgICAgICAgICAgaWQ9XCJ7eyBkYXRhLmtleSB9fVwiXHJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbm5hRmlsdGVyU2VydmljZS5zZWxlY3RlZFJhZGlvXCJcclxuICAgICAgICAgICAgICAgIG5hbWU9XCJ0b29sVGlwXCJcclxuICAgICAgICAgICAgICAgIHZhbHVlPVwie3sgZGF0YS5rZXkgfX1cIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInBvcHVsYXRlVG9vbHRpcERhdGFCYXNlZE9uU2VsZWN0ZWRSYWRpbyhkYXRhLmtleSlcIlxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJyYWRpb0J1dHRvbnMubGVuZ3RoID4gMVwiXHJcbiAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ7eyBkYXRhLmtleSB9fVwiPnt7IGRhdGEubGFiZWwgfX08L2xhYmVsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8YnV0dG9uIGNsYXNzPVwiY29sdW1uLWNsZWFyLWFsbFwiIFtkaXNhYmxlZF09XCJkaXNhYmxlQ29sdW1uQ2xlYXJBbGxCdG5cIiAoY2xpY2spPVwiY2xlYXJDb2x1bW5GaWx0ZXIoKVwiPkNsZWFyIGZpbHRlcjwvYnV0dG9uPlxyXG4gICAgPGRpdlxyXG4gICAgICAgIGNsYXNzPVwidGltZS1maWx0ZXItY2hlY2tib3hlc1wiXHJcbiAgICAgICAgKm5nSWY9XCJndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdTUE9UREVUQUlMUycgfHwgZ3RHZW5lcmFsQ29uZmlnLmNvbXBvbmVudCA9PSAnRVhDTFVERUlOVkVOVE9SWVBPUFVQJyB8fCBndEdlbmVyYWxDb25maWcuY29tcG9uZW50ID09ICdSQVRJTkcnXCJcclxuICAgID5cclxuICAgICAgICA8IS0tIE11bHRpIHRpbWUgb3B0aW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtXCIgKm5nSWY9XCJzaG93TXVsdGlUaW1lQ2hlY2tib3hcIj5cclxuICAgICAgICAgICAgPHNwYW5cclxuICAgICAgICAgICAgICAgICpuZ0lmPVwibXVsdGlUaW1lQ2hlY2tib3hDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC1jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0TXVsdGlUaW1lQ2hlY2tib3goKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiFtdWx0aVRpbWVDaGVja2JveENoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXRlcmlhbC1pY29ucyBjdXN0b20tY29sdW1uLWNoZWNrYm94LXVuY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdE11bHRpVGltZUNoZWNrYm94KClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hfb3V0bGluZV9ibGFua1xyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxwIHN0eWxlPVwibWFyZ2luLWxlZnQ6IDJweFwiPkluY2x1ZGUgTXVsdGk8L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBaZXJvIHRpbWUgb3B0aW9uIGNoZWNrYm94IC0tPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyXCIgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW0gMCAwLjVyZW0gMC41cmVtXCIgKm5nSWY9XCJzaG93WmVyb1RpbWVDaGVja2JveFwiPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJ6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdFplcm9UaW1lQ2hlY2tib3goKVwiXHJcbiAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgIGNoZWNrX2JveFxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cIiF6ZXJvVGltZUNoZWNrYm94Q2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtdW5jaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RPclVuc2VsZWN0WmVyb1RpbWVDaGVja2JveCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAycHhcIj5JbmNsdWRlIFplcm88L3A+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPCEtLSBFbnRlciB0aW1lIHJhbmdlIG9wdGlvbiBjaGVja2JveCAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlclwiIHN0eWxlPVwicGFkZGluZzogMC41cmVtIDAgMC41cmVtIDAuNXJlbVwiICpuZ0lmPVwic2hvd0VudGVyVGltZUNoZWNrYm94XCI+XHJcbiAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImVudGVyVGltZUNoZWNrYm94Q2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdGVyaWFsLWljb25zIGN1c3RvbS1jb2x1bW4tY2hlY2tib3gtY2hlY2tlZFwiXHJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0T3JVbnNlbGVjdEVudGVyVGltZUNoZWNrYm94KClcIlxyXG4gICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICBjaGVja19ib3hcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8c3BhblxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhZW50ZXJUaW1lQ2hlY2tib3hDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgIGNsYXNzPVwibWF0ZXJpYWwtaWNvbnMgY3VzdG9tLWNvbHVtbi1jaGVja2JveC11bmNoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdE9yVW5zZWxlY3RFbnRlclRpbWVDaGVja2JveCgpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgY2hlY2tfYm94X291dGxpbmVfYmxhbmtcclxuICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICA8cCBzdHlsZT1cIm1hcmdpbi1sZWZ0OiAycHhcIj5FbnRlciB0aW1lIHJhbmdlPC9wPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGltZS1sYWJlbC1jb250YWluZXJcIj5cclxuICAgICAgICA8bGFiZWw+RnJvbTwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBudW1iZXJJbnB1dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGcm9tVGltZVswXVwiIGRpc2FibGVkIHR5cGU9XCJ0ZXh0XCIgLz5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYXJyb3ctY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxpIGNsYXNzPVwibWRpIG1kaS10cmlhbmdsZSB1cHdhcmRcIiAoY2xpY2spPVwiY2hhbmdlU3RhcnRUaW1lSG91cih0cnVlKVwiPjwvaT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRyaWFuZ2xlIGRvd253YXJkXCIgKGNsaWNrKT1cImNoYW5nZVN0YXJ0VGltZUhvdXIoZmFsc2UpXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+Ojwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbnVtYmVySW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRnJvbVRpbWVbMV1cIiB0eXBlPVwidGV4dFwiIGRpc2FibGVkIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFycm93LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdHJpYW5nbGUgdXB3YXJkXCIgKGNsaWNrKT1cImNoYW5nZVN0YXJ0VGltZU1pbnV0ZSh0cnVlKVwiPjwvaT5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRyaWFuZ2xlIGRvd253YXJkXCIgKGNsaWNrKT1cImNoYW5nZVN0YXJ0VGltZU1pbnV0ZShmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFsobmdNb2RlbCldPVwic2VsZWN0ZWRGcm9tVGltZVsyXVwiIChuZ01vZGVsQ2hhbmdlKT1cImRpc2FibGVUaW1lRmlsdGVyQXBwbHlCdXR0b24oKVwiPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiQU1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5BTTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgICAgICA8bWF0LWJ1dHRvbi10b2dnbGUgdmFsdWU9XCJQTVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuPlBNPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZT5cclxuICAgICAgICAgICAgPC9tYXQtYnV0dG9uLXRvZ2dsZS1ncm91cD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWxhYmVsLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxsYWJlbD5UbzwvbGFiZWw+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJ0aW1lLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxpbnB1dCBjbGFzcz1cImZvcm0tY29udHJvbCBudW1iZXJJbnB1dFwiIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUb1RpbWVbMF1cIiBkaXNhYmxlZCB0eXBlPVwidGV4dFwiIC8+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFycm93LWNvbnRhaW5lclwiPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdHJpYW5nbGUgdXB3YXJkXCIgKGNsaWNrKT1cImNoYW5nZUVuZFRpbWVIb3VyKHRydWUpXCI+PC9pPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdHJpYW5nbGUgZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlRW5kVGltZUhvdXIoZmFsc2UpXCI+PC9pPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxzcGFuIGNsYXNzPVwiZG90XCI+Ojwvc3Bhbj5cclxuICAgICAgICA8aW5wdXQgY2xhc3M9XCJmb3JtLWNvbnRyb2wgbnVtYmVySW5wdXRcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkVG9UaW1lWzFdXCIgZGlzYWJsZWQgdHlwZT1cInRleHRcIiAvPlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJhcnJvdy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPGkgY2xhc3M9XCJtZGkgbWRpLXRyaWFuZ2xlIHVwd2FyZFwiIChjbGljayk9XCJjaGFuZ2VFbmRUaW1lTWludXRlKHRydWUpXCI+PC9pPlxyXG4gICAgICAgICAgICA8aSBjbGFzcz1cIm1kaSBtZGktdHJpYW5nbGUgZG93bndhcmRcIiAoY2xpY2spPVwiY2hhbmdlRW5kVGltZU1pbnV0ZShmYWxzZSlcIj48L2k+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlLWdyb3VwIFsobmdNb2RlbCldPVwic2VsZWN0ZWRUb1RpbWVbMl1cIiAobmdNb2RlbENoYW5nZSk9XCJkaXNhYmxlVGltZUZpbHRlckFwcGx5QnV0dG9uKClcIj5cclxuICAgICAgICAgICAgICAgIDxtYXQtYnV0dG9uLXRvZ2dsZSB2YWx1ZT1cIkFNXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+QU08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L21hdC1idXR0b24tdG9nZ2xlPlxyXG4gICAgICAgICAgICAgICAgPG1hdC1idXR0b24tdG9nZ2xlIHZhbHVlPVwiUE1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5QTTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGU+XHJcbiAgICAgICAgICAgIDwvbWF0LWJ1dHRvbi10b2dnbGUtZ3JvdXA+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxyXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJidXR0b25cIiAoY2xpY2spPVwiY2xvc2VUaW1lRmlsdGVyKClcIj5DYW5jZWw8L2J1dHRvbj5cclxuICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIGNsYXNzPVwiYnV0dG9uXCJcclxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBkaXNhYmxlZDogZGlzYWJsZVRpbWVGaWx0ZXJBcHBseUJ0biB9XCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cImFwcGx5VGltZUZpbHRlcnMoKVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJkaXNhYmxlVGltZUZpbHRlckFwcGx5QnRuXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICAgIEFwcGx5XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29sdW1uSW5mb1Rvb2x0aXA+XHJcbiAgPHAgc3R5bGU9XCJwYWRkaW5nOiAwLjVyZW07IGNvbG9yOiBibGFjazt3aGl0ZS1zcGFjZTogbm93cmFwO1wiPlRoaXMgcHJlZW1wdGlvbiBpcyByZWplY3RlZCBhbmQgbm90IG1hcmtlZCBmb3IgY3JlZGl0LjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0aW5nSW5mb1Rvb2x0aXA+XHJcbiAgICA8cCBjbGFzcz1cImZpcnN0LXJvd1wiPlNob3dzICdCb29rZWQgUmF0aW5nJyBmb3IgUHJlZW1wdGlvbnMgJiBNYWtlR29vZCBPZmZlcmVkIHNwb3QocykuPC9wPlxyXG4gICAgPHAgY2xhc3M9XCJzZWNvbmQtcm93XCI+U2hvd3MgJ1Byb2plY3RlZCBSYXRpbmcnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjaW1wc0luZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3MgPVwiZmlyc3Qtcm93XCIgPlNob3dzICdCb29rZWQgSU1QUycgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuICAgIDxwIGNsYXNzPVwic2Vjb25kLXJvd1wiID5TaG93cyAnUHJvamVjdGVkIElNUFMnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjcmF0ZUluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3MgPVwiZmlyc3Qtcm93XCIgPlNob3dzICdCb29rZWQgUmF0ZScgZm9yIFByZWVtcHRpb25zICYgTWFrZUdvb2QgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuICAgIDxwIGNsYXNzPVwic2Vjb25kLXJvd1wiID5TaG93cyAnUHJvamVjdGVkICQgVmFsdWUnIGZvciBBRFUgT2ZmZXJlZCBzcG90KHMpLjwvcD5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjc2VsbGVySGllcmFyY2h5VG9vbHRpcD5cclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzZWxsZXJHcm91cEhpZXJhcmNoeS5sZW5ndGggPiAwXCI+XHJcbiAgICAgICAgPHRhYmxlIGNsYXNzPVwic2VsbGVyLWhpZXJhcmNoeS10YWJsZVwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoPiM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5JbnZlbnRvcnkgQ29kZXM8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aD5Qcm9ncmFtL0Rlc2NyaXB0aW9uPC90aD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGhlYWQ+XHJcbiAgICAgICAgICAgIDx0Ym9keT5cclxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgZGF0YSBvZiBzZWxsZXJHcm91cEhpZXJhcmNoeTsgbGV0IHRvb2x0aXBJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPnt7IHRvb2x0aXBJbmRleCArIDEgfX08L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZGF0YS5pbnZlbnRvcnlDb2RlIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkYXRhLnByb2dyYW0gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInNlbGxlckdyb3VwSGllcmFyY2h5Lmxlbmd0aCA9PSAwXCI+XHJcbiAgICAgICAgPHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwMFwiPlNlbGxlciBncm91cCBub3QgYXZhaWxhYmxlIGZvciB0aGlzIGludmVudG9yeSBjb2RlPC9zcGFuPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2x1clZpb2xhdGlvbkluZm9Ub29sdGlwPlxyXG4gICAgPHAgY2xhc3MgPVwiZmlyc3Qtcm93XCIgPlRoZSB2YWx1ZXMgYXJlIGZvciB0aGUgZW50aXJlIHdlZWsuPC9wPlxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNwb3N0ZWRSYXRpbmdEaWZmZXJlbmNlPlxyXG4gICAgPHAgY2xhc3M9XCJkaWZmZXJlbmNlLXRleHRcIj5UaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHBvc3RlZCBhbmQgYm9va2VkIGF2ZXJhZ2UgcmF0aW5nIGlzIHt7aXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyAnbGVzcycgOiAnbW9yZSd9fSB0aGFuIDI1JS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI3Bvc3RlZEltcERpZmZlcmVuY2U+XHJcbiAgICA8cCBjbGFzcz1cImRpZmZlcmVuY2UtdGV4dFwiPlRoZSBkaWZmZXJlbmNlIGJldHdlZW4gcG9zdGVkIGFuZCBib29rZWQgYXZlcmFnZSBpbXByZXNzaW9uIGlzIHt7aXNEaWZmZXJlbmNlTGVzc1RoYW4yNVBlcmNlbnQgPyAnbGVzcycgOiAnbW9yZSd9fSB0aGFuIDI1JS48L3A+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==
|