@ardium-ui/ui 1.0.1 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +25 -25
- package/esm2022/lib/_internal/boolean-component.mjs +4 -4
- package/esm2022/lib/_internal/clear-button/clear-button.component.mjs +4 -4
- package/esm2022/lib/_internal/clear-button/clear-button.module.mjs +5 -5
- package/esm2022/lib/_internal/disablable-component.mjs +4 -4
- package/esm2022/lib/_internal/focusable-component.mjs +4 -4
- package/esm2022/lib/_internal/item-storages/dropdown-item-storage.mjs +1 -1
- package/esm2022/lib/_internal/item-storages/simple-item-storage.mjs +1 -1
- package/esm2022/lib/_internal/item-storages/simplest-item-storage.mjs +1 -1
- package/esm2022/lib/_internal/models/pagination.model.mjs +1 -1
- package/esm2022/lib/_internal/ngmodel-component.mjs +4 -4
- package/esm2022/lib/_internal/queue.mjs +1 -1
- package/esm2022/lib/_internal/selectable-list-component.mjs +4 -4
- package/esm2022/lib/badge/badge.directive.mjs +4 -4
- package/esm2022/lib/badge/badge.module.mjs +5 -5
- package/esm2022/lib/badge/badge.types.mjs +1 -1
- package/esm2022/lib/buttons/_button-base.mjs +4 -4
- package/esm2022/lib/buttons/button/button.component.mjs +4 -4
- package/esm2022/lib/buttons/button/button.module.mjs +5 -5
- package/esm2022/lib/buttons/fab/fab.component.mjs +4 -4
- package/esm2022/lib/buttons/fab/fab.module.mjs +5 -5
- package/esm2022/lib/buttons/general-button.types.mjs +1 -1
- package/esm2022/lib/buttons/icon-button/icon-button.component.mjs +4 -4
- package/esm2022/lib/buttons/icon-button/icon-button.module.mjs +5 -5
- package/esm2022/lib/calendar/calendar.component.mjs +4 -4
- package/esm2022/lib/calendar/calendar.directives.mjs +25 -25
- package/esm2022/lib/calendar/calendar.helpers.mjs +1 -1
- package/esm2022/lib/calendar/calendar.module.mjs +5 -5
- package/esm2022/lib/calendar/calendar.types.mjs +1 -1
- package/esm2022/lib/card/card.children.mjs +25 -25
- package/esm2022/lib/card/card.component.mjs +7 -7
- package/esm2022/lib/card/card.module.mjs +5 -5
- package/esm2022/lib/card/card.types.mjs +1 -1
- package/esm2022/lib/checkbox/checkbox.component.mjs +4 -4
- package/esm2022/lib/checkbox/checkbox.module.mjs +5 -5
- package/esm2022/lib/checkbox/checkbox.types.mjs +1 -1
- package/esm2022/lib/checkbox-list/checkbox-list.component.mjs +4 -4
- package/esm2022/lib/checkbox-list/checkbox-list.module.mjs +5 -5
- package/esm2022/lib/checkbox-list/checkbox-list.types.mjs +1 -1
- package/esm2022/lib/chip/chip.component.mjs +4 -4
- package/esm2022/lib/chip/chip.module.mjs +5 -5
- package/esm2022/lib/chip/deletable-chip/deletable-chip.component.mjs +4 -4
- package/esm2022/lib/chip/selectable-chip/selectable-chip.component.mjs +4 -4
- package/esm2022/lib/color/color-display/color-display.component.mjs +4 -4
- package/esm2022/lib/color/color-display/color-display.module.mjs +5 -5
- package/esm2022/lib/color/color-display/color-display.types.mjs +1 -1
- package/esm2022/lib/color/color-picker/color-picker.component.mjs +4 -4
- package/esm2022/lib/color/color-picker/color-picker.directives.mjs +13 -13
- package/esm2022/lib/color/color-picker/color-picker.module.mjs +5 -5
- package/esm2022/lib/color/color-picker/color-picker.types.mjs +1 -1
- package/esm2022/lib/dialog/dialog.component.mjs +4 -4
- package/esm2022/lib/dialog/dialog.directives.mjs +4 -4
- package/esm2022/lib/dialog/dialog.module.mjs +5 -5
- package/esm2022/lib/dialog/dialog.types.mjs +1 -1
- package/esm2022/lib/divider/divider.component.mjs +4 -4
- package/esm2022/lib/divider/divider.module.mjs +5 -5
- package/esm2022/lib/dropdown-panel/dropdown-panel.component.mjs +4 -4
- package/esm2022/lib/dropdown-panel/dropdown-panel.module.mjs +5 -5
- package/esm2022/lib/dropdown-panel/dropdown-panel.types.mjs +1 -1
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.component.mjs +4 -4
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.directives.mjs +10 -10
- package/esm2022/lib/file-inputs/file-drop-area/file-drop-area.module.mjs +5 -5
- package/esm2022/lib/file-inputs/file-input/file-input.component.mjs +4 -4
- package/esm2022/lib/file-inputs/file-input/file-input.directives.mjs +19 -19
- package/esm2022/lib/file-inputs/file-input/file-input.module.mjs +5 -5
- package/esm2022/lib/file-inputs/file-input-base.mjs +4 -4
- package/esm2022/lib/file-inputs/file-input-types.mjs +1 -1
- package/esm2022/lib/form-field-frame/form-field-frame.component.mjs +4 -4
- package/esm2022/lib/form-field-frame/form-field-frame.directives.mjs +7 -7
- package/esm2022/lib/form-field-frame/form-field-frame.module.mjs +5 -5
- package/esm2022/lib/icon/icon.component.mjs +4 -4
- package/esm2022/lib/icon/icon.module.mjs +5 -5
- package/esm2022/lib/icon/icon.pipe.mjs +4 -4
- package/esm2022/lib/inputs/color-input/color-input.component.mjs +4 -4
- package/esm2022/lib/inputs/color-input/color-input.directives.mjs +25 -25
- package/esm2022/lib/inputs/color-input/color-input.module.mjs +5 -5
- package/esm2022/lib/inputs/color-input/color-input.types.mjs +1 -1
- package/esm2022/lib/inputs/digit-input/digit-input.component.mjs +4 -4
- package/esm2022/lib/inputs/digit-input/digit-input.model.mjs +1 -1
- package/esm2022/lib/inputs/digit-input/digit-input.module.mjs +5 -5
- package/esm2022/lib/inputs/digit-input/digit-input.types.mjs +1 -1
- package/esm2022/lib/inputs/digit-input/digit-input.utils.mjs +1 -1
- package/esm2022/lib/inputs/hex-input/hex-input.component.mjs +4 -4
- package/esm2022/lib/inputs/hex-input/hex-input.directives.mjs +10 -10
- package/esm2022/lib/inputs/hex-input/hex-input.module.mjs +5 -5
- package/esm2022/lib/inputs/hex-input.model.mjs +1 -1
- package/esm2022/lib/inputs/input/input.component.mjs +4 -4
- package/esm2022/lib/inputs/input/input.directives.mjs +16 -16
- package/esm2022/lib/inputs/input/input.module.mjs +5 -5
- package/esm2022/lib/inputs/input-transformers.mjs +1 -1
- package/esm2022/lib/inputs/input-types.mjs +1 -1
- package/esm2022/lib/inputs/input-utils.mjs +1 -1
- package/esm2022/lib/inputs/number-input/number-input.component.mjs +4 -4
- package/esm2022/lib/inputs/number-input/number-input.directives.mjs +4 -4
- package/esm2022/lib/inputs/number-input/number-input.module.mjs +5 -5
- package/esm2022/lib/inputs/password-input/password-input.component.mjs +4 -4
- package/esm2022/lib/inputs/password-input/password-input.directives.mjs +13 -13
- package/esm2022/lib/inputs/password-input/password-input.module.mjs +5 -5
- package/esm2022/lib/inputs/password-input/password-input.types.mjs +1 -1
- package/esm2022/lib/inputs/simple-input/simple-input.component.mjs +4 -4
- package/esm2022/lib/inputs/simple-input/simple-input.directives.mjs +10 -10
- package/esm2022/lib/inputs/simple-input/simple-input.module.mjs +5 -5
- package/esm2022/lib/kbd/kbd.component.mjs +4 -4
- package/esm2022/lib/kbd/kbd.module.mjs +5 -5
- package/esm2022/lib/kbd/kbd.pipe.mjs +4 -4
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.component.mjs +4 -4
- package/esm2022/lib/kbd-shortcut/kbd-shortcut.module.mjs +5 -5
- package/esm2022/lib/modal/modal.component.mjs +4 -4
- package/esm2022/lib/modal/modal.module.mjs +5 -5
- package/esm2022/lib/option/option.component.mjs +4 -4
- package/esm2022/lib/option/option.module.mjs +5 -5
- package/esm2022/lib/progress-bar/progress-bar.component.mjs +4 -4
- package/esm2022/lib/progress-bar/progress-bar.directive.mjs +4 -4
- package/esm2022/lib/progress-bar/progress-bar.module.mjs +5 -5
- package/esm2022/lib/progress-bar/progress-bar.types.mjs +1 -1
- package/esm2022/lib/progress-circle/progress-circle.component.mjs +4 -4
- package/esm2022/lib/progress-circle/progress-circle.directive.mjs +4 -4
- package/esm2022/lib/progress-circle/progress-circle.module.mjs +5 -5
- package/esm2022/lib/progress-circle/progress-circle.types.mjs +1 -1
- package/esm2022/lib/radio/radio/radio.component.mjs +4 -4
- package/esm2022/lib/radio/radio-group.component.mjs +4 -4
- package/esm2022/lib/radio/radio.module.mjs +5 -5
- package/esm2022/lib/search-functions.mjs +1 -1
- package/esm2022/lib/segment/segment.component.mjs +4 -4
- package/esm2022/lib/segment/segment.directives.mjs +4 -4
- package/esm2022/lib/segment/segment.module.mjs +5 -5
- package/esm2022/lib/segment/segment.types.mjs +1 -1
- package/esm2022/lib/select/select.component.mjs +4 -4
- package/esm2022/lib/select/select.directive.mjs +46 -46
- package/esm2022/lib/select/select.module.mjs +5 -5
- package/esm2022/lib/select/select.types.mjs +1 -1
- package/esm2022/lib/slide-toggle/slide-toggle.component.mjs +4 -4
- package/esm2022/lib/slide-toggle/slide-toggle.module.mjs +5 -5
- package/esm2022/lib/slider/abstract-slider.mjs +4 -4
- package/esm2022/lib/slider/range-slider/range-slider.component.mjs +4 -4
- package/esm2022/lib/slider/range-slider/range-slider.module.mjs +5 -5
- package/esm2022/lib/slider/slider.component.mjs +4 -4
- package/esm2022/lib/slider/slider.directive.mjs +4 -4
- package/esm2022/lib/slider/slider.module.mjs +5 -5
- package/esm2022/lib/slider/slider.types.mjs +1 -1
- package/esm2022/lib/snackbar/index.mjs +1 -1
- package/esm2022/lib/snackbar/snackbar-ref.mjs +1 -1
- package/esm2022/lib/snackbar/snackbar.component.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.service.mjs +4 -4
- package/esm2022/lib/snackbar/snackbar.token.mjs +1 -1
- package/esm2022/lib/snackbar/snackbar.types.mjs +1 -1
- package/esm2022/lib/spinner/spinner.component.mjs +4 -4
- package/esm2022/lib/spinner/spinner.module.mjs +5 -5
- package/esm2022/lib/star/star-button/star-button.component.mjs +4 -4
- package/esm2022/lib/star/star-button/star-button.module.mjs +5 -5
- package/esm2022/lib/star/star-display/star-display.component.mjs +4 -4
- package/esm2022/lib/star/star-display/star-display.module.mjs +5 -5
- package/esm2022/lib/star/star-input/star-input.component.mjs +4 -4
- package/esm2022/lib/star/star-input/star-input.module.mjs +5 -5
- package/esm2022/lib/star/star.component.mjs +4 -4
- package/esm2022/lib/star/star.module.mjs +5 -5
- package/esm2022/lib/star/star.types.mjs +1 -1
- package/esm2022/lib/statebox/statebox.component.mjs +4 -4
- package/esm2022/lib/statebox/statebox.module.mjs +5 -5
- package/esm2022/lib/statebox/statebox.types.mjs +1 -1
- package/esm2022/lib/table/table-item-storage.mjs +1 -1
- package/esm2022/lib/table/table.component.mjs +4 -4
- package/esm2022/lib/table/table.directives.mjs +16 -16
- package/esm2022/lib/table/table.module.mjs +5 -5
- package/esm2022/lib/table/table.types.mjs +1 -1
- package/esm2022/lib/table/utils.mjs +1 -1
- package/esm2022/lib/table-from-csv/table-from-csv.component.mjs +4 -4
- package/esm2022/lib/table-from-csv/table-from-csv.module.mjs +5 -5
- package/esm2022/lib/table-pagination/table-pagination.component.mjs +4 -4
- package/esm2022/lib/table-pagination/table-pagination.module.mjs +5 -5
- package/esm2022/lib/table-pagination/table-pagination.types.mjs +1 -1
- package/esm2022/lib/types/alignment.types.mjs +1 -1
- package/esm2022/lib/types/colors.types.mjs +1 -1
- package/esm2022/lib/types/item-storage.types.mjs +1 -1
- package/esm2022/lib/types/theming.types.mjs +1 -1
- package/esm2022/lib/types/utility.types.mjs +1 -1
- package/esm2022/public-api.mjs +1 -1
- package/fesm2022/ardium-ui-ui.mjs +618 -618
- package/fesm2022/ardium-ui-ui.mjs.map +1 -1
- package/package.json +7 -5
- package/themes/_variables.scss +121 -121
- package/themes/default/_clear-button.scss +73 -73
- package/themes/default/_coloring.scss +137 -137
- package/themes/default/_dropdown-arrow.scss +12 -12
- package/themes/default/_mixins.scss +70 -70
- package/themes/default/badge.scss +94 -94
- package/themes/default/buttons/_button-mixins.scss +144 -144
- package/themes/default/buttons/button.scss +62 -62
- package/themes/default/buttons/fab.scss +72 -72
- package/themes/default/buttons/icon-button.scss +59 -59
- package/themes/default/calendar.scss +182 -182
- package/themes/default/card.scss +126 -126
- package/themes/default/checkbox-list.scss +83 -83
- package/themes/default/checkbox.scss +109 -109
- package/themes/default/chips.scss +206 -206
- package/themes/default/color-display.scss +41 -41
- package/themes/default/color-picker.scss +111 -111
- package/themes/default/core.scss +96 -96
- package/themes/default/dialog.scss +16 -16
- package/themes/default/divider.scss +13 -13
- package/themes/default/dropdown-panel.scss +45 -45
- package/themes/default/file-drop-area.scss +162 -162
- package/themes/default/form-field-frame.scss +78 -78
- package/themes/default/inputs/_shared.scss +46 -46
- package/themes/default/inputs/color-input.scss +46 -46
- package/themes/default/inputs/digit-input.scss +56 -56
- package/themes/default/inputs/file-input.scss +78 -78
- package/themes/default/inputs/hex-input.scss +27 -27
- package/themes/default/inputs/input.scss +52 -52
- package/themes/default/inputs/number-input.scss +121 -121
- package/themes/default/inputs/password-input.scss +43 -43
- package/themes/default/inputs/search-bar.scss +19 -19
- package/themes/default/inputs/simple-input.scss +19 -19
- package/themes/default/kbd-shortcut.scss +13 -13
- package/themes/default/kbd.scss +20 -20
- package/themes/default/modal.scss +93 -93
- package/themes/default/progress-bar.scss +166 -166
- package/themes/default/progress-circle.scss +56 -56
- package/themes/default/radio.scss +112 -112
- package/themes/default/segment.scss +339 -339
- package/themes/default/select.scss +253 -253
- package/themes/default/slide-toggle.scss +151 -151
- package/themes/default/slider.scss +224 -224
- package/themes/default/snackbar.scss +60 -60
- package/themes/default/spinner.scss +21 -21
- package/themes/default/stars.scss +122 -122
- package/themes/default/statebox.scss +109 -109
- package/themes/default/table-pagination.scss +56 -56
- package/themes/default/table.scss +403 -403
|
@@ -557,4 +557,4 @@ export class TableItemStorage {
|
|
|
557
557
|
this._sortedItems = [...this.items].sort((a, b) => sortFn(a.data[sortColumnIndex], b.data[sortColumnIndex]));
|
|
558
558
|
}
|
|
559
559
|
}
|
|
560
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQW1CLHVCQUF1QixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUM3RSxNQUFNLE9BQU8sVUFBVTtJQUtyQixJQUFJLEtBQUs7UUFDUCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNPLFNBQVMsQ0FBQyxLQUFrQztRQUNsRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtZQUFFLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLElBQXNDLEVBQUUsVUFBa0IsQ0FBQyxFQUFFLFVBQWtC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QUNSLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmVQYXRoIGZyb20gJ3Jlc29sdmUtb2JqZWN0LXBhdGgnO1xuaW1wb3J0IHsgZXZhbHVhdGUsIGlzRGVmaW5lZCwgaXNOdWxsIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xuaW1wb3J0IHsgQ29tcGFyZVdpdGhGbiB9IGZyb20gJy4uL3R5cGVzL2l0ZW0tc3RvcmFnZS50eXBlcyc7XG5pbXBvcnQgeyBTb3J0VHlwZSwgVGFibGVEYXRhQ29sdW1uLCBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSwgVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcbmltcG9ydCB7IGFyZUFsbERhdGFDb2x1bW5zLCBpc1RhYmxlU3ViaGVhZGVyLCBtZXJnZTJkQXJyYXlzIH0gZnJvbSAnLi91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXJkVGFibGVSb3cge1xuICByZWFkb25seSBpdGVtRGF0YTogYW55O1xuICByZWFkb25seSBpbmRleDogbnVtYmVyO1xuICByZWFkb25seSBpc0VtcHR5PzogYm9vbGVhbjtcbiAgZGF0YTogYW55W107XG4gIGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXTtcbiAgY2xhc3M/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgYm9sZD86IGJvb2xlYW47XG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcbiAgaGlnaGxpZ2h0ZWQ/OiBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1TdG9yYWdlSG9zdERlZmF1bHRzIHtcbiAgcm93RGlzYWJsZWRGcm9tOiBzdHJpbmc7XG4gIHJvd0JvbGRGcm9tOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlSXRlbVN0b3JhZ2VIb3N0IHtcbiAgcm93RGlzYWJsZWRGcm9tPzogc3RyaW5nO1xuICByb3dCb2xkRnJvbT86IHN0cmluZztcbiAgaW52ZXJ0Um93RGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRSb3dCb2xkPzogYm9vbGVhbjtcbiAgZGF0YT86IGFueVtdO1xuICByZWFkb25seSBERUZBVUxUUzogVGFibGVJdGVtU3RvcmFnZUhvc3REZWZhdWx0cztcbiAgbWF4U2VsZWN0ZWRJdGVtcz86IG51bWJlcjtcbiAgdHJlYXREYXRhU291cmNlQXNTdHJpbmc/OiBib29sZWFuO1xuXG4gIHBhZ2luYXRlZDogYm9vbGVhbjtcbiAgcGFnaW5hdGlvblN0cmF0ZWd5OiBUYWJsZVBhZ2luYXRpb25TdHJhdGVneTtcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXI7XG4gIHBhZ2U6IG51bWJlcjtcbn1cbmV4cG9ydCBjbGFzcyBIZWFkZXJDZWxsIHtcbiAgY29sc3BhbiE6IG51bWJlcjtcbiAgcm93c3BhbiE6IG51bWJlcjtcbiAgY2VsbCE6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyO1xuXG4gIGdldCB3aWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcih0aGlzLmNlbGwpKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gdGhpcy5fZ2V0V2lkdGgodGhpcy5jZWxsLndpZHRoKTtcbiAgfVxuICBnZXQgbWluV2lkdGgoKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIodGhpcy5jZWxsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKHRoaXMuY2VsbC5taW5XaWR0aCk7XG4gIH1cbiAgcHJpdmF0ZSBfZ2V0V2lkdGgod2lkdGg6IHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IG51bGwge1xuICAgIGlmICghd2lkdGgpIHJldHVybiBudWxsO1xuICAgIGlmICh0eXBlb2Ygd2lkdGggPT0gJ251bWJlcicpIHJldHVybiBgJHt3aWR0aH1weGA7XG4gICAgcmV0dXJuIHdpZHRoO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIsIGNvbHNwYW46IG51bWJlciA9IDEsIHJvd3NwYW46IG51bWJlciA9IDEpIHtcbiAgICB0aGlzLmNlbGwgPSBjZWxsO1xuICAgIHRoaXMuY29sc3BhbiA9IGNvbHNwYW47XG4gICAgdGhpcy5yb3dzcGFuID0gcm93c3BhbjtcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVGFibGVJdGVtU3RvcmFnZSB7XG4gIHByaXZhdGUgX2l0ZW1zOiBBcmRUYWJsZVJvd1tdID0gW107XG4gIHByaXZhdGUgX3NvcnRlZEl0ZW1zOiBBcmRUYWJsZVJvd1tdID0gW107XG4gIHByaXZhdGUgX2hpZ2hsaWdodGVkSXRlbXM6IEFyZFRhYmxlUm93W10gPSBbXTtcbiAgcHJpdmF0ZSBfc2VsZWN0ZWRJdGVtczogQXJkVGFibGVSb3dbXSA9IFtdO1xuXG4gIHByaXZhdGUgX2RhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSA9IFtdO1xuICBwcml2YXRlIF9oZWFkZXJDZWxsczogSGVhZGVyQ2VsbFtdW10gPSBbXTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcmRQYXJlbnRDb21wOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdCkge31cblxuICAvKipcbiAgICogR2V0cyBhbGwgaXRlbXMuXG4gICAqL1xuICBnZXQgaXRlbXMoKTogQXJkVGFibGVSb3dbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBzb3J0ZWRJdGVtcygpOiBBcmRUYWJsZVJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc29ydGVkSXRlbXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cbiAgICovXG4gIGdldCBwYWdpbmF0ZWRJdGVtcygpOiBBcmRUYWJsZVJvd1tdIHtcbiAgICAvL3ByZXR0aWVyLWlnbm9yZVxuICAgIGlmIChcbiAgICAgICAgICAgICF0aGlzLl9hcmRQYXJlbnRDb21wLnBhZ2luYXRlZFxuICAgICAgICAgICAgfHwgdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0aW9uU3RyYXRlZ3kgPT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcFxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zO1xuICAgICAgICB9XG4gICAgY29uc3QgcGFnZSA9IHRoaXMuX2FyZFBhcmVudENvbXAucGFnZTtcbiAgICBjb25zdCBJUFAgPSB0aGlzLl9hcmRQYXJlbnRDb21wLml0ZW1zUGVyUGFnZTtcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcbiAgICBjb25zdCBpdGVtc0VuZCA9IHBhZ2UgKiBJUFA7XG4gICAgcmV0dXJuIHRoaXMuc29ydGVkSXRlbXMuc2xpY2UoaXRlbXNTdGFydCwgaXRlbXNFbmQpO1xuICB9XG4gIC8qKlxuICAgKiBHZXRzIGFsbCBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbXMuXG4gICAqL1xuICBnZXQgc2VsZWN0ZWRJdGVtcygpOiBBcmRUYWJsZVJvd1tdIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcztcbiAgfVxuICAvKipcbiAgICogR2V0cyBhbGwgY3VycmVudGx5IGhpZ2hsaWdodGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0IGhpZ2hsaWdodGVkSXRlbXMoKTogQXJkVGFibGVSb3dbXSB7XG4gICAgcmV0dXJuIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXM7XG4gIH1cbiAgLyoqXG4gICAqIEdldHMgdGhlIHZhbHVlcyBvZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxuICAgKi9cbiAgZ2V0IHZhbHVlKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuc2VsZWN0ZWRJdGVtcyk7XG4gIH1cbiAgLyoqXG4gICAqIE1hcHMgYW4gYXJyYXkgb2YgaXRlbXMgaW50byB0aGVpciB2YWx1ZXMuXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgaXRlbXMgdG8gY29udmVydCB0byB2YWx1ZS5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbSB2YWx1ZXMuXG4gICAqL1xuICBwcml2YXRlIF9pdGVtc1RvVmFsdWUoaXRlbXM6IEFyZFRhYmxlUm93W10pOiBhbnlbXSB7XG4gICAgcmV0dXJuIGl0ZW1zLm1hcChpdGVtID0+IGl0ZW0uaXRlbURhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiBhdCBsZWFzdCBvbmUgaXRlbSBpcyBoaWdobGlnaHRlZCwgb3RoZXJ3aXNlIGZhbHNlLlxuICAgKi9cbiAgZ2V0IGlzQW55SXRlbUhpZ2hsaWdodGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbnkgaXRlbSBpbiB0aGUgdGFibGUgaXMgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFueSBpdGVtIGlzIHNlbGVjdGVkLlxuICAgKi9cbiAgZ2V0IGlzQW55SXRlbVNlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDA7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cbiAgICogQHJldHVybnMgQSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgYWxsIGl0ZW1zIGFyZSBzZWxlY3RlZC5cbiAgICovXG4gIGdldCBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpLmxlbmd0aDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYXJlbnQgY29tcG9uZW50IGRlZmluZXMgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RhYmxlIGl0ZW1zIGFuZCB0aGUgYW1vdW50IG9mIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBtYXRjaGVzIHRoYXQgbGltaXQuIE90aGVyd2lzZSByZXR1cm5zIGZhbHNlLlxuICAgKlxuICAgKiAqKlRMRFIqKjogdHJ1ZSBpZiBgbWF4U2VsZWN0ZWRJdGVtc2AgaXMgZGVmaW5lZCBhbmQgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtcyBtYXRjaGVzIHRoYXQgdmFsdWUuXG4gICAqL1xuICBnZXQgaXNJdGVtTGltaXRSZWFjaGVkKCk6IGJvb2xlYW4ge1xuICAgIGlmICghaXNEZWZpbmVkKHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcyA8PSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGhlYWRlciBjZWxscyBvZiB0aGUgdGFibGUuXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzLlxuICAgKi9cbiAgZ2V0IGhlYWRlckNlbGxzKCk6IEhlYWRlckNlbGxbXVtdIHtcbiAgICByZXR1cm4gdGhpcy5faGVhZGVyQ2VsbHM7XG4gIH1cbiAgLyoqXG4gICAqIENoZWNrcyBpZiB0aGUgdGFibGUgaGFzIGRlZmluZWQgY29sdW1ucy5cbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXG4gICAqL1xuICBnZXQgaGFzRGVmaW5lZENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2RhdGFDb2x1bW5zLmxlbmd0aCA+IDA7XG4gIH1cblxuICAvLyEgc2V0dGluZyBjb2x1bW5zXG4gIC8qKlxuICAgKiBTZXRzIHRoZSBjb2x1bW5zIG9mIHRoZSB0YWJsZS5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqL1xuICBzZXRDb2x1bW5zKGNvbHM6IChUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlcilbXSk6IHZvaWQge1xuICAgIGNvbnN0IG1heE5lc3RpbmdMZXZlbCA9IHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29scyk7XG4gICAgY29uc3QgaGVhZGVyQ2VsbHMgPSB0aGlzLl9tYXBDb2x1bW5zVG9BcnJheShjb2xzLCBtYXhOZXN0aW5nTGV2ZWwsIDApO1xuICAgIHRoaXMuX2hlYWRlckNlbGxzID0gdGhpcy5fZmlsdGVySGVhZGVyQ2VsbHMoaGVhZGVyQ2VsbHMpO1xuICAgIHRoaXMuX2RhdGFDb2x1bW5zID0gdGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpO1xuICB9XG4gIC8qKlxuICAgKiBGaWx0ZXJzIG91dCBudWxsIHZhbHVlcyBmcm9tIHRoZSBoZWFkZXIgY2VsbHMgYXJyYXkuXG4gICAqIEBwYXJhbSBjZWxscyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cbiAgICogQHJldHVybnMgYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgd2l0aG91dCBudWxsIHZhbHVlcyBhbmQgZW1wdHkgYXJyYXlzLlxuICAgKi9cbiAgcHJpdmF0ZSBfZmlsdGVySGVhZGVyQ2VsbHMoY2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdKTogSGVhZGVyQ2VsbFtdW10ge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2VsbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNlbGxzW2ldID0gY2VsbHNbaV0uZmlsdGVyKHYgPT4gdiAhPSBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuIGNlbGxzLmZpbHRlcihyb3cgPT4gcm93Lmxlbmd0aCkgYXMgSGVhZGVyQ2VsbFtdW107XG4gIH1cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHRoZSBkYXRhIHNvdXJjZXMgZnJvbSB0aGUgY29sdW1ucyBhcnJheS5cbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXG4gICAqIEByZXR1cm5zIGFuIGFycmF5IG9mIHRhYmxlIGRhdGEgY29sdW1ucy5cbiAgICovXG4gIHByaXZhdGUgX2V4dHJhY3REYXRhU291cmNlcyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiBUYWJsZURhdGFDb2x1bW5bXSB7XG4gICAgbGV0IGRhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xuICAgICAgaWYgKCFpc1RhYmxlU3ViaGVhZGVyKGNvbCkpIHtcbiAgICAgICAgZGF0YUNvbHVtbnMucHVzaChjb2wpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGRhdGFDb2x1bW5zLnB1c2goLi4udGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbC5jaGlsZHJlbikpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhQ29sdW1ucztcbiAgfVxuICAvKipcbiAgICogR2V0cyB0aGUgbWF4aW11bSBuZXN0aW5nIGxldmVsIG9mIHRoZSBjb2x1bW5zIGFycmF5LlxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cbiAgICogQHJldHVybnMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBhcyBhIG51bWJlci5cbiAgICovXG4gIHByaXZhdGUgX2dldEhlYWRlck1heE5lc3RpbmcoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogbnVtYmVyIHtcbiAgICBpZiAoYXJlQWxsRGF0YUNvbHVtbnMoY29scykpIHJldHVybiAxO1xuICAgIGxldCBtYXggPSAxO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMuZmlsdGVyKHYgPT4gaXNUYWJsZVN1YmhlYWRlcih2KSkgYXMgVGFibGVTdWJoZWFkZXJbXSkge1xuICAgICAgY29uc3QgaGVpZ2h0ID0gMSArIHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29sLmNoaWxkcmVuKTtcbiAgICAgIGlmIChoZWlnaHQgPiBtYXgpIG1heCA9IGhlaWdodDtcbiAgICB9XG4gICAgcmV0dXJuIG1heDtcbiAgfVxuICAvKipcbiAgICogTWFwcyB0aGUgY29sdW1ucyB0cmVlIHRvIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLlxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cbiAgICogQHBhcmFtIG1heE5lc3RpbmcgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cbiAgICogQHBhcmFtIGN1cnJlbnROZXN0aW5nIHRoZSBjdXJyZW50IG5lc3RpbmcgbGV2ZWwgb2YgdGhlIGNvbHVtbnMgYXJyYXkuXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLlxuICAgKi9cbiAgcHJpdmF0ZSBfbWFwQ29sdW1uc1RvQXJyYXkoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdLCBtYXhOZXN0aW5nOiBudW1iZXIsIGN1cnJlbnROZXN0aW5nOiBudW1iZXIpOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSB7XG4gICAgaWYgKGFyZUFsbERhdGFDb2x1bW5zKGNvbHMpKSB7XG4gICAgICByZXR1cm4gW2NvbHMubWFwKGNvbCA9PiBuZXcgSGVhZGVyQ2VsbChjb2wsIDEsIG1heE5lc3RpbmcgLSBjdXJyZW50TmVzdGluZykpXTtcbiAgICB9XG4gICAgY29uc3QgaGVhZGVyQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgMSwgbWF4TmVzdGluZyAtIGN1cnJlbnROZXN0aW5nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2hpbGRDZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10gPSBbW10sIC4uLnRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbC5jaGlsZHJlbiwgbWF4TmVzdGluZywgY3VycmVudE5lc3RpbmcgKyAxKV07XG4gICAgICBjb25zdCBoZWlnaHQgPSBjaGlsZENlbGxzLmxlbmd0aCAtIDE7XG4gICAgICBjb25zdCB3aWR0aCA9IGNoaWxkQ2VsbHNbMV0ubGVuZ3RoO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWlnaHQ7IGkrKykge1xuICAgICAgICBoZWFkZXJDZWxscy5wdXNoKFtudWxsXSk7XG4gICAgICB9XG4gICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG5ldyBIZWFkZXJDZWxsKGNvbCwgd2lkdGgsIDEpKTtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGggLSAxOyBpKyspIHtcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChudWxsKTtcbiAgICAgIH1cbiAgICAgIG1lcmdlMmRBcnJheXMoaGVhZGVyQ2VsbHMsIGNoaWxkQ2VsbHMpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVyQ2VsbHM7XG4gIH1cblxuICAvLyEgc2V0dGluZyBpdGVtc1xuICAvKipcbiAgICogU2V0cyB0aGUgY29tcG9uZW50J3MgaXRlbXMuIFRha2VzIGludG8gYWNjb3VudCB0aGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQgZm9yIGByb3dEaXNhYmxlZEZyb21gLCBgcm93Qm9sZEZyb21gLCBhbmQgYHJvd0hpZ2hsaWdodGVkRnJvbWAuXG4gICAqIEBwYXJhbSBpdGVtcyBBbiBhcnJheSBvZiBpdGVtcyB0byBiZSBzZXQgYXMgdGhlIGNvbXBvbmVudCdzIGl0ZW1zLlxuICAgKi9cbiAgc2V0SXRlbXMoaXRlbXM6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmhhc0RlZmluZWRDb2x1bW5zKSByZXR1cm47XG5cbiAgICB0aGlzLl9pdGVtcyA9IGl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXRJdGVtc01hcEZuKGl0ZW0sIGluZGV4KTtcbiAgICB9KTtcbiAgICB0aGlzLl9zb3J0ZWRJdGVtcyA9IHRoaXMuX2l0ZW1zO1xuICB9XG4gIC8qKlxuICAgKiBNYXBzIHJhdyBpdGVtIGRhdGEgdG8gYW4ge0BsaW5rIEFyZFRhYmxlUm93fSBvYmplY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyB7QXJkVGFibGVSb3d9IFJldHVybnMgYW4gQXJkVGFibGVSb3cgb2JqZWN0IHdpdGggbWFwcGVkIHByb3BlcnRpZXMuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9zZXRJdGVtc01hcEZuKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBBcmRUYWJsZVJvdyB7XG4gICAgLy9nZXQgZGF0YVxuICAgIGNvbnN0IFtkYXRhLCBkYXRhQ29sdW1uc10gPSB0aGlzLl9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhLCBpbmRleCk7XG5cbiAgICAvL2dldCBib2xkXG4gICAgY29uc3Qgcm93Qm9sZEZyb21QYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dCb2xkRnJvbSA/PyB0aGlzLl9hcmRQYXJlbnRDb21wLkRFRkFVTFRTLnJvd0JvbGRGcm9tO1xuICAgIGxldCBib2xkID0gcmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIHJvd0JvbGRGcm9tUGF0aCk7XG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93Qm9sZCkge1xuICAgICAgYm9sZCA9ICFib2xkO1xuICAgIH1cblxuICAgIC8vZ2V0IGRpc2FibGVkXG4gICAgY29uc3QgZGlzYWJsZWRQYXRoID0gdGhpcy5fYXJkUGFyZW50Q29tcC5yb3dEaXNhYmxlZEZyb20gPz8gdGhpcy5fYXJkUGFyZW50Q29tcC5ERUZBVUxUUy5yb3dEaXNhYmxlZEZyb207XG4gICAgbGV0IGRpc2FibGVkID0gZXZhbHVhdGUocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGRpc2FibGVkUGF0aCkpO1xuICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLmludmVydFJvd0Rpc2FibGVkKSB7XG4gICAgICBkaXNhYmxlZCA9ICFkaXNhYmxlZDtcbiAgICB9XG5cbiAgICAvL3JldHVyblxuICAgIHJldHVybiB7XG4gICAgICBpdGVtRGF0YTogcmF3SXRlbURhdGEsXG4gICAgICBpbmRleCxcbiAgICAgIGRhdGEsXG4gICAgICBkYXRhQ29sdW1ucyxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgYm9sZCxcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXRyaWV2ZXMgZGF0YSBmb3IgYSByb3cgYmFzZWQgb24gZGF0YSBjb2x1bW5zIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gVGhlIGluZGV4IG9mIHRoZSBpdGVtLlxuICAgKiBAcmV0dXJucyB7YW55W119IFJldHVybnMgYW4gYXJyYXkgY29udGFpbmluZyB0aGUgcm93IGRhdGEuXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIF9nZXRSb3dEYXRhKHJhd0l0ZW1EYXRhOiBhbnksIGluZGV4OiBudW1iZXIpOiBbYW55W10sIFRhYmxlRGF0YUNvbHVtbltdXSB7XG4gICAgbGV0IGRhdGE6IGFueVtdID0gW107XG4gICAgZm9yIChjb25zdCBkYXRhQ29sdW1uIG9mIHRoaXMuX2RhdGFDb2x1bW5zKSB7XG4gICAgICBjb25zdCBzb3VyY2VQYXRoID0gZGF0YUNvbHVtbi5kYXRhU291cmNlO1xuXG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVBhdGggPT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAudHJlYXREYXRhU291cmNlQXNTdHJpbmcpIHtcbiAgICAgICAgICBkYXRhLnB1c2gocmF3SXRlbURhdGFbc291cmNlUGF0aF0pO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEucHVzaChyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgc291cmNlUGF0aCkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoLnR5cGUgPT0gJ2F1dG9jb3VudCcpIHtcbiAgICAgICAgZGF0YS5wdXNoKGluZGV4ICsgMSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHNvdXJjZVBhdGgudHlwZSA9PSAnY2hlY2tib3gnKSB7XG4gICAgICAgIGRhdGEucHVzaCh7IF9hcmRDaGVja2JveDogdHJ1ZSwgaW5kZXggfSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3Qgc291cmNlU3RyaW5nID0gdHlwZW9mIHNvdXJjZVBhdGggPT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShzb3VyY2VQYXRoKSA6IHNvdXJjZVBhdGg7XG4gICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihgVW5leHBlY3RlZCBkYXRhIHNvdXJjZSBcIiR7c291cmNlU3RyaW5nfVwiLmApKTtcbiAgICB9XG4gICAgcmV0dXJuIFtkYXRhLCB0aGlzLl9kYXRhQ29sdW1uc107XG4gIH1cbiAgLyoqXG4gICAqIFdyaXRlcyBhIG5ldyB2YWx1ZSB0byB0aGUgaXRlbSBzdG9yYWdlLiBTZWxlY3RzIHRoZSBjb3JyZWN0IGl0ZW1zIGJhc2VkIG9uIHRoZSBwcm92aWRlZCB2YWx1ZXMsIHdhcm5pbmcgdGhlIHVzZXIgaWYgdGhlIHZhbHVlIGlzIG5vdCBmb3VuZC5cbiAgICogQHBhcmFtIGluZGV4ZXMgVGhlIHZhbHVlIG9mIHRoZSBuZ01vZGVsIHRvIHNldC5cbiAgICovXG4gIHdyaXRlVmFsdWUoaW5kZXhlczogbnVtYmVyW10pOiB2b2lkIHtcbiAgICB0aGlzLl9mb3JjZVVuc2VsZWN0QWxsKCk7XG4gICAgdGhpcy5zZWxlY3RJdGVtKC4uLmluZGV4ZXMpO1xuICB9XG5cbiAgLy8hIHNlbGVjdGluZyBpdGVtc1xuICAvKipcbiAgICogQ2hlY2tzIGlmIGFuIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaW5kZXggaXMgc2VsZWN0ZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleCBUaGUgaW5kZXggb2YgdGhlIGl0ZW0gdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBfdHJ1ZV8gaWYgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBfZmFsc2VfLlxuICAgKi9cbiAgaXNJdGVtU2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLmluZGV4ID09IGluZGV4KTtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBhbGwgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RBbGwoKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIHJldHVybiB0aGlzLnNlbGVjdEl0ZW0oLi4udGhpcy5faXRlbXMubWFwKHYgPT4gdi5pbmRleCkpO1xuICB9XG4gIC8qKlxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLlxuICAgKlxuICAgKiBJZiB0aGUgcGFyZW50IGNvbXBvbmVudCByZXF1aXJlcyBhdCBsZWFzdCBvbmUgdmFsdWUgdG8gYmUgc2VsZWN0ZWQgYXQgYWxsIHRpbWVzLCB0aGUgZmlyc3Qgc2VsZWN0ZWQgaXRlbXMgaXMgbGVmdCBzZWxlY3RlZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgY2xlYXJlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgdW5zZWxlY3RBbGwoKTogYW55W10ge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuXG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcywgbm8gbWF0dGVyIHdoYXQgdGhlIGNvbXBvbmVudCBzZXR0aW5ncyBhcmUuXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cbiAgICovXG4gIHByaXZhdGUgX2ZvcmNlVW5zZWxlY3RBbGwoKTogYW55W10ge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuXG4gICAgY29uc3QgcmV0ID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xuXG4gICAgdGhpcy5fc2VsZWN0ZWRJdGVtcyA9IFtdO1xuXG4gICAgcmV0dXJuIHJldDtcbiAgfVxuICAvKipcbiAgICogU2VsZWN0cyBvbmUgb3IgbXVsdGlwbGUgaXRlbXMuXG4gICAqXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXG4gICAqXG4gICAqIEBwYXJhbSBpbmRleGVzIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgc2VsZWN0ZWQuXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIHNlbGVjdGVkLlxuICAgKiAqIEFuIGFycmF5IG9mIGl0ZW1zIGZhaWxlZCB0byBzZWxlY3QuXG4gICAqL1xuICBzZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogW2FueVtdLCBhbnlbXV0ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVNlbGVjdGVkID0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQgJiYgaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KSk7XG4gICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKSB7XG4gICAgICByZXR1cm4gW1tdLCB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNUb0JlU2VsZWN0ZWQpXTtcbiAgICB9XG5cbiAgICBsZXQgaXRlbXNTZWxlY3RlZENvdW50ID0gMDtcbiAgICBjb25zdCBpdGVtc1NlbGVjdGVkID0gW107XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XG4gICAgICBpdGVtc1NlbGVjdGVkQ291bnQrKztcbiAgICAgIGlmIChpdGVtLnNlbGVjdGVkKSBjb250aW51ZTtcbiAgICAgIGlmICh0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgdGhpcy5fc2VsZWN0ZWRJdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgaXRlbXNTZWxlY3RlZC5wdXNoKGl0ZW0pO1xuICAgIH1cblxuICAgIGNvbnN0IGl0ZW1zRmFpbGVkVG9TZWxlY3QgPSBpdGVtc1RvQmVTZWxlY3RlZC5zbGljZShpdGVtc1NlbGVjdGVkQ291bnQgLSAxKTtcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcbiAgfVxuICAvKipcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgdW5zZWxlY3RlZC5cbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgaXRlbXMgdW5zZWxlY3RlZCwgbWFwcGVkIHRvIG9ubHkgdGhlaXIgdmFsdWVzLlxuICAgKi9cbiAgdW5zZWxlY3RJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogYW55W10ge1xuICAgIGNvbnN0IGl0ZW1zVG9CZVNlbGVjdGVkID0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XG4gICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xuXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCk7XG4gIH1cblxuICAvLyEgaGlnaGxpZ2h0aW5nIGl0ZW1zXG4gIC8qKlxuICAgKiBVbmhpZ2hsaWdodHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cbiAgICovXG4gIHVuaGlnaGxpZ2h0QWxsKCk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zKSB7XG4gICAgICBpdGVtLmhpZ2hsaWdodGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMgPSBbXTtcbiAgfVxuICAvKipcbiAgICogSGlnaGxpZ2h0cyB0aGUgZ2l2ZW4gaXRlbSwgd2hpbGUgdW5oaWdobGlnaHRpbmcgYWxsIG90aGVyIGl0ZW1zLiBEb2VzIG5vdGhpbmcgd2hlbiB0aGUgaXRlbSBpcyBkaXNhYmxlZC5cbiAgICogQHBhcmFtIGl0ZW0gVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGJlIGhpZ2hsaWdodGVkLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXg6IG51bWJlcik6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cbiAgICogQHBhcmFtIGl0ZW1zIEEgcmVzdCBvcGVyYXRvciBhcnJheSBvZiBpdGVtIGluZGV4ZXMgdG8gYmUgaGlnaGxpZ2h0ZWQuXG4gICAqIEByZXR1cm5zIFRoZSBsYXN0IGhpZ2hsaWdodGVkIGl0ZW0uXG4gICAqL1xuICBoaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogQXJkVGFibGVSb3cge1xuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KSk7XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICBpdGVtLmhpZ2hsaWdodGVkID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcy5wdXNoKC4uLml0ZW1zKTtcbiAgICByZXR1cm4gaXRlbXMubGFzdCgpO1xuICB9XG4gIC8qKlxuICAgKiBVbmhpZ2hsaWdodHMgYWxsIGdpdmVuIGl0ZW1zLlxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bmhpZ2hsaWdodGVkLlxuICAgKi9cbiAgdW5oaWdobGlnaHRJdGVtKC4uLmluZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9pdGVtcy5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgpKTtcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICAgIGlmICghaXRlbSB8fCAhaXRlbS5oaWdobGlnaHRlZCkgcmV0dXJuO1xuXG4gICAgICBpdGVtLmhpZ2hsaWdodGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLmZpbHRlcih2ID0+IHYuaGlnaGxpZ2h0ZWQpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBmaXJzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXG4gICAqIEByZXR1cm5zIFRoZSBoaWdobGlnaHRlZCBpdGVtLlxuICAgKi9cbiAgaGlnaGxpZ2h0Rmlyc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuXG4gICAgbGV0IGl0ZW1Ub0hpZ2hsaWdodCA9IHRoaXMuX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCkuZmlyc3QoKS5pbmRleDtcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XG4gIH1cbiAgLyoqXG4gICAqIEhpZ2hsaWdodHMgdGhlIGxhc3QgaXRlbSBvdXQgb2YgYWxsIGl0ZW1zLlxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cbiAgICovXG4gIGhpZ2hsaWdodExhc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xuXG4gICAgbGV0IGl0ZW1Ub0hpZ2hsaWdodCA9IHRoaXMuX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCkubGFzdCgpLmluZGV4O1xuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbVRvSGlnaGxpZ2h0KTtcbiAgfVxuICAvKipcbiAgICogSGlnaGxpZ2h0cyBhbGwgbm9uLWRpc2FibGVkIGl0ZW1zLlxuICAgKi9cbiAgaGlnaGxpZ2h0QWxsSXRlbXMoKTogdm9pZCB7XG4gICAgbGV0IGl0ZW1zVG9IaWdobGlnaHQgPSB0aGlzLl9nZXRIaWdsaWdodGFibGVJdGVtcygpLm1hcCh2ID0+IHYuaW5kZXgpO1xuXG4gICAgdGhpcy5oaWdobGlnaHRJdGVtKC4uLml0ZW1zVG9IaWdobGlnaHQpO1xuICB9XG4gIC8qKlxuICAgKiBIaWdobGlnaHRzIHRoZSBuZXh0IG5vbi1kaXNhYmxlZCBpdGVtIGRlZmluZWQgYnkgdGhlIG9mZnNldCBhbW91bnQuXG4gICAqXG4gICAqIElmIGBoYXNTaGlmdGAgaXMgc2V0IHRvIHRydWUsIGFsbCBvcmlnaW5hbGx5IGhpZ2hsaWdodGVkIGl0ZW1zIGFyZSBrZXB0LiBPdGhlcndpc2UsIGFsbCBvcmlnaW5hbCBpdGVtcyBhcmUgdW5zZWxlY3RlZC5cbiAgICogQHBhcmFtIG9mZnNldCBUaGUgYW1vdW50IG9mIGl0ZW1zIHRvIG9mZnNldCB0aGUgaGlnaGxpZ2h0IGJ5LlxuICAgKiBAcGFyYW0gaGFzU2hpZnQgV2hldGhlciB0aGUgdXNlciBoYXMgdGhlIHNoaWZ0IGtleSBwcmVzc2VkLlxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBoaWdobGlnaHRlZC5cbiAgICovXG4gIGhpZ2hsaWdodE5leHRJdGVtKG9mZnNldDogbnVtYmVyLCBoYXNTaGlmdD86IGJvb2xlYW4pOiBBcmRUYWJsZVJvdyB8IG51bGwge1xuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0Rmlyc3RJdGVtKCk7XG4gICAgfVxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zLmxhc3QoKTtcbiAgICBjb25zdCBpdGVtc1dpdGhvdXREaXNhYmxlZCA9IHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkICYmICghdGhpcy5pc0l0ZW1MaW1pdFJlYWNoZWQgfHwgaXRlbS5zZWxlY3RlZCkpO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleEluSXRlbXMgPSBpdGVtc1dpdGhvdXREaXNhYmxlZC5maW5kSW5kZXgoaXRlbSA9PiBpdGVtLmluZGV4ID09IGN1cnJlbnRJdGVtLmluZGV4KTtcblxuICAgIGxldCBuZXh0SXRlbUluZGV4ID0gY3VycmVudEluZGV4SW5JdGVtcyArIG9mZnNldDtcbiAgICBpZiAobmV4dEl0ZW1JbmRleCA+PSBpdGVtc1dpdGhvdXREaXNhYmxlZC5sZW5ndGgpIHtcbiAgICAgIG5leHRJdGVtSW5kZXggLT0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xuICAgIH1cbiAgICBpZiAobmV4dEl0ZW1JbmRleCA8IDApIHtcbiAgICAgIG5leHRJdGVtSW5kZXggKz0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xuICAgIH1cbiAgICBjb25zdCBpdGVtVG9IaWdobGlnaHQgPSBpdGVtc1dpdGhvdXREaXNhYmxlZFtuZXh0SXRlbUluZGV4XTtcblxuICAgIGlmIChoYXNTaGlmdCkge1xuICAgICAgaWYgKGl0ZW1Ub0hpZ2hsaWdodC5oaWdobGlnaHRlZCkge1xuICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodFNpbmdsZUl0ZW0obmV4dEl0ZW1JbmRleCk7XG4gIH1cbiAgLyoqXG4gICAqIEZpbmRzIGFsbCBoaWdobGlnaHRhYmxlIGl0ZW1zLiBBbiBpdGVtIGlzIGNvbnNpZGVyZWQgaGlnaGxpZ2h0YWJsZSBpZiBpdCBpcyAqKm5vdCoqIGRpc2FibGVkLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBhbGwgaGlnaGxpZ2h0YWJsZSBpdGVtcy5cbiAgICovXG4gIHByaXZhdGUgX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCk6IEFyZFRhYmxlUm93W10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCk7XG4gIH1cblxuICAvLyEgc29ydGluZ1xuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgX2N1cnJlbnRTb3J0VHlwZTogU29ydFR5cGUgfCBudWxsID0gbnVsbDtcblxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PSBjb2x1bW4pIHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50U29ydFR5cGUgPT0gU29ydFR5cGUuQXNjZW5kaW5nKSB7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkRlc2NlbmRpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5Bc2NlbmRpbmc7XG4gICAgICB9XG4gICAgICB0aGlzLl9nZW5lcmF0ZVNvcnRlZFJvd3ModHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID0gY29sdW1uO1xuICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkFzY2VuZGluZztcbiAgICB0aGlzLl9nZW5lcmF0ZVNvcnRlZFJvd3MoKTtcbiAgfVxuICByZXNldFNvcnQoKTogdm9pZCB7XG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBudWxsO1xuICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IG51bGw7XG4gICAgdGhpcy5fc29ydGVkSXRlbXMgPSBbLi4udGhpcy5pdGVtc107XG4gIH1cbiAgZ2V0Q29sdW1uU29ydFR5cGUoY29sdW1uOiBudW1iZXIpOiBTb3J0VHlwZSB8IG51bGwge1xuICAgIGlmICh0aGlzLl9jdXJyZW50U29ydENvbHVtbiA9PSBjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U29ydFR5cGU7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHByaXZhdGUgX2dlbmVyYXRlU29ydGVkUm93cyhqdXN0UmV2ZXJzZT86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoanVzdFJldmVyc2UpIHtcbiAgICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnJldmVyc2UoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc29ydENvbHVtbkluZGV4ID0gdGhpcy5fY3VycmVudFNvcnRDb2x1bW47XG4gICAgaWYgKGlzTnVsbChzb3J0Q29sdW1uSW5kZXgpIHx8ICF0aGlzLl9jdXJyZW50U29ydFR5cGUpIHtcbiAgICAgIHRoaXMuX3NvcnRlZEl0ZW1zID0gdGhpcy5pdGVtcztcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgc29ydENvbHVtbiA9IHRoaXMuX2RhdGFDb2x1bW5zW3NvcnRDb2x1bW5JbmRleF07XG4gICAgaWYgKCFzb3J0Q29sdW1uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBFbmNvdW50ZXJlZCBhbiBpc3N1ZSBpbiA8YXJkLXRhYmxlPjogY291bGQgbm90IGZpbmQgdGhlIGNvbHVtbiB3aXRoIGluZGV4ICR7c29ydENvbHVtbkluZGV4fS4gVGhpcyBpcyBtb3N0IGxpa2VseSBhbiBBcmRpdW0gYnVnLCBwbGVhc2UgcmVwb3J0IGl0IG9uIEdpdEh1Yi5gXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XG4gICAgY29uc3Qgc29ydEZuID1cbiAgICAgIHNvcnRDb2x1bW4uc29ydEZuID8/XG4gICAgICAoKGEsIGIpID0+IHtcbiAgICAgICAgaWYgKGEgPiBiKSByZXR1cm4gZGlyZWN0aW9uO1xuICAgICAgICBpZiAoYSA8IGIpIHJldHVybiAtMSAqIGRpcmVjdGlvbjtcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdLnNvcnQoKGEsIGIpID0+IHNvcnRGbihhLmRhdGFbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhW3NvcnRDb2x1bW5JbmRleF0pKTtcbiAgfVxufVxuIl19
|
|
560
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtaXRlbS1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS1pdGVtLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxXQUFXLE1BQU0scUJBQXFCLENBQUM7QUFDOUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTFELE9BQU8sRUFBRSxRQUFRLEVBQW1CLHVCQUF1QixFQUFrQixNQUFNLGVBQWUsQ0FBQztBQUNuRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBaUM3RSxNQUFNLE9BQU8sVUFBVTtJQUtyQixJQUFJLEtBQUs7UUFDUCxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QyxPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6QyxDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDN0MsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUNPLFNBQVMsQ0FBQyxLQUFrQztRQUNsRCxJQUFJLENBQUMsS0FBSztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hCLElBQUksT0FBTyxLQUFLLElBQUksUUFBUTtZQUFFLE9BQU8sR0FBRyxLQUFLLElBQUksQ0FBQztRQUNsRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxZQUFZLElBQXNDLEVBQUUsVUFBa0IsQ0FBQyxFQUFFLFVBQWtC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QUNSLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxTQUFTLENBQUM7Z0JBQzVCLElBQUksQ0FBQyxHQUFHLENBQUM7b0JBQUUsT0FBTyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUM7Z0JBQ2pDLE9BQU8sQ0FBQyxDQUFDO1lBQ1gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDL0csQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHJlc29sdmVQYXRoIGZyb20gJ3Jlc29sdmUtb2JqZWN0LXBhdGgnO1xyXG5pbXBvcnQgeyBldmFsdWF0ZSwgaXNEZWZpbmVkLCBpc051bGwgfSBmcm9tICdzaW1wbGUtYm9vbCc7XHJcbmltcG9ydCB7IENvbXBhcmVXaXRoRm4gfSBmcm9tICcuLi90eXBlcy9pdGVtLXN0b3JhZ2UudHlwZXMnO1xyXG5pbXBvcnQgeyBTb3J0VHlwZSwgVGFibGVEYXRhQ29sdW1uLCBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSwgVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3RhYmxlLnR5cGVzJztcclxuaW1wb3J0IHsgYXJlQWxsRGF0YUNvbHVtbnMsIGlzVGFibGVTdWJoZWFkZXIsIG1lcmdlMmRBcnJheXMgfSBmcm9tICcuL3V0aWxzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXJkVGFibGVSb3cge1xyXG4gIHJlYWRvbmx5IGl0ZW1EYXRhOiBhbnk7XHJcbiAgcmVhZG9ubHkgaW5kZXg6IG51bWJlcjtcclxuICByZWFkb25seSBpc0VtcHR5PzogYm9vbGVhbjtcclxuICBkYXRhOiBhbnlbXTtcclxuICBkYXRhQ29sdW1uczogVGFibGVEYXRhQ29sdW1uW107XHJcbiAgY2xhc3M/OiBzdHJpbmc7XHJcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xyXG4gIGJvbGQ/OiBib29sZWFuO1xyXG4gIHNlbGVjdGVkPzogYm9vbGVhbjtcclxuICBoaWdobGlnaHRlZD86IGJvb2xlYW47XHJcbn1cclxuZXhwb3J0IGludGVyZmFjZSBUYWJsZUl0ZW1TdG9yYWdlSG9zdERlZmF1bHRzIHtcclxuICByb3dEaXNhYmxlZEZyb206IHN0cmluZztcclxuICByb3dCb2xkRnJvbTogc3RyaW5nO1xyXG59XHJcbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVJdGVtU3RvcmFnZUhvc3Qge1xyXG4gIHJvd0Rpc2FibGVkRnJvbT86IHN0cmluZztcclxuICByb3dCb2xkRnJvbT86IHN0cmluZztcclxuICBpbnZlcnRSb3dEaXNhYmxlZD86IGJvb2xlYW47XHJcbiAgaW52ZXJ0Um93Qm9sZD86IGJvb2xlYW47XHJcbiAgZGF0YT86IGFueVtdO1xyXG4gIHJlYWRvbmx5IERFRkFVTFRTOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdERlZmF1bHRzO1xyXG4gIG1heFNlbGVjdGVkSXRlbXM/OiBudW1iZXI7XHJcbiAgdHJlYXREYXRhU291cmNlQXNTdHJpbmc/OiBib29sZWFuO1xyXG5cclxuICBwYWdpbmF0ZWQ6IGJvb2xlYW47XHJcbiAgcGFnaW5hdGlvblN0cmF0ZWd5OiBUYWJsZVBhZ2luYXRpb25TdHJhdGVneTtcclxuICBpdGVtc1BlclBhZ2U6IG51bWJlcjtcclxuICBwYWdlOiBudW1iZXI7XHJcbn1cclxuZXhwb3J0IGNsYXNzIEhlYWRlckNlbGwge1xyXG4gIGNvbHNwYW4hOiBudW1iZXI7XHJcbiAgcm93c3BhbiE6IG51bWJlcjtcclxuICBjZWxsITogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXI7XHJcblxyXG4gIGdldCB3aWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKHRoaXMuY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKHRoaXMuY2VsbC53aWR0aCk7XHJcbiAgfVxyXG4gIGdldCBtaW5XaWR0aCgpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKHRoaXMuY2VsbCkpIHJldHVybiBudWxsO1xyXG4gICAgcmV0dXJuIHRoaXMuX2dldFdpZHRoKHRoaXMuY2VsbC5taW5XaWR0aCk7XHJcbiAgfVxyXG4gIHByaXZhdGUgX2dldFdpZHRoKHdpZHRoOiBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICghd2lkdGgpIHJldHVybiBudWxsO1xyXG4gICAgaWYgKHR5cGVvZiB3aWR0aCA9PSAnbnVtYmVyJykgcmV0dXJuIGAke3dpZHRofXB4YDtcclxuICAgIHJldHVybiB3aWR0aDtcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBjb2xzcGFuOiBudW1iZXIgPSAxLCByb3dzcGFuOiBudW1iZXIgPSAxKSB7XHJcbiAgICB0aGlzLmNlbGwgPSBjZWxsO1xyXG4gICAgdGhpcy5jb2xzcGFuID0gY29sc3BhbjtcclxuICAgIHRoaXMucm93c3BhbiA9IHJvd3NwYW47XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVGFibGVJdGVtU3RvcmFnZSB7XHJcbiAgcHJpdmF0ZSBfaXRlbXM6IEFyZFRhYmxlUm93W10gPSBbXTtcclxuICBwcml2YXRlIF9zb3J0ZWRJdGVtczogQXJkVGFibGVSb3dbXSA9IFtdO1xyXG4gIHByaXZhdGUgX2hpZ2hsaWdodGVkSXRlbXM6IEFyZFRhYmxlUm93W10gPSBbXTtcclxuICBwcml2YXRlIF9zZWxlY3RlZEl0ZW1zOiBBcmRUYWJsZVJvd1tdID0gW107XHJcblxyXG4gIHByaXZhdGUgX2RhdGFDb2x1bW5zOiBUYWJsZURhdGFDb2x1bW5bXSA9IFtdO1xyXG4gIHByaXZhdGUgX2hlYWRlckNlbGxzOiBIZWFkZXJDZWxsW11bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcmRQYXJlbnRDb21wOiBUYWJsZUl0ZW1TdG9yYWdlSG9zdCkge31cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbGwgaXRlbXMuXHJcbiAgICovXHJcbiAgZ2V0IGl0ZW1zKCk6IEFyZFRhYmxlUm93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xyXG4gIH1cclxuICBnZXQgc29ydGVkSXRlbXMoKTogQXJkVGFibGVSb3dbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc29ydGVkSXRlbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgaXRlbXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgcGFnaW5hdGlvbiBzdGF0ZS5cclxuICAgKi9cclxuICBnZXQgcGFnaW5hdGVkSXRlbXMoKTogQXJkVGFibGVSb3dbXSB7XHJcbiAgICAvL3ByZXR0aWVyLWlnbm9yZVxyXG4gICAgaWYgKFxyXG4gICAgICAgICAgICAhdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0ZWRcclxuICAgICAgICAgICAgfHwgdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdpbmF0aW9uU3RyYXRlZ3kgPT0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3J0ZWRJdGVtcztcclxuICAgICAgICB9XHJcbiAgICBjb25zdCBwYWdlID0gdGhpcy5fYXJkUGFyZW50Q29tcC5wYWdlO1xyXG4gICAgY29uc3QgSVBQID0gdGhpcy5fYXJkUGFyZW50Q29tcC5pdGVtc1BlclBhZ2U7XHJcbiAgICBjb25zdCBpdGVtc1N0YXJ0ID0gKHBhZ2UgLSAxKSAqIElQUDtcclxuICAgIGNvbnN0IGl0ZW1zRW5kID0gcGFnZSAqIElQUDtcclxuICAgIHJldHVybiB0aGlzLnNvcnRlZEl0ZW1zLnNsaWNlKGl0ZW1zU3RhcnQsIGl0ZW1zRW5kKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogR2V0cyBhbGwgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIGdldCBzZWxlY3RlZEl0ZW1zKCk6IEFyZFRhYmxlUm93W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkSXRlbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgYWxsIGN1cnJlbnRseSBoaWdobGlnaHRlZCBpdGVtcy5cclxuICAgKi9cclxuICBnZXQgaGlnaGxpZ2h0ZWRJdGVtcygpOiBBcmRUYWJsZVJvd1tdIHtcclxuICAgIHJldHVybiB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB2YWx1ZXMgb2YgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcy5cclxuICAgKi9cclxuICBnZXQgdmFsdWUoKTogYW55W10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zVG9WYWx1ZSh0aGlzLnNlbGVjdGVkSXRlbXMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIGFuIGFycmF5IG9mIGl0ZW1zIGludG8gdGhlaXIgdmFsdWVzLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBUaGUgaXRlbXMgdG8gY29udmVydCB0byB2YWx1ZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9pdGVtc1RvVmFsdWUoaXRlbXM6IEFyZFRhYmxlUm93W10pOiBhbnlbXSB7XHJcbiAgICByZXR1cm4gaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5pdGVtRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgYXQgbGVhc3Qgb25lIGl0ZW0gaXMgaGlnaGxpZ2h0ZWQsIG90aGVyd2lzZSBmYWxzZS5cclxuICAgKi9cclxuICBnZXQgaXNBbnlJdGVtSGlnaGxpZ2h0ZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcy5sZW5ndGggPiAwO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgYW55IGl0ZW0gaW4gdGhlIHRhYmxlIGlzIHNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIGFueSBpdGVtIGlzIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIGdldCBpc0FueUl0ZW1TZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIENoZWNrcyBpZiBhbGwgaXRlbXMgaW4gdGhlIHRhYmxlIGFyZSBzZWxlY3RlZC5cclxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gdmFsdWUgaW5kaWNhdGluZyBpZiBhbGwgaXRlbXMgYXJlIHNlbGVjdGVkLlxyXG4gICAqL1xyXG4gIGdldCBhcmVBbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSB0aGlzLl9pdGVtcy5maWx0ZXIoaXRlbSA9PiAhaXRlbS5kaXNhYmxlZCkubGVuZ3RoO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHBhcmVudCBjb21wb25lbnQgZGVmaW5lcyB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGFibGUgaXRlbXMgYW5kIHRoZSBhbW91bnQgb2YgY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIG1hdGNoZXMgdGhhdCBsaW1pdC4gT3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuXHJcbiAgICpcclxuICAgKiAqKlRMRFIqKjogdHJ1ZSBpZiBgbWF4U2VsZWN0ZWRJdGVtc2AgaXMgZGVmaW5lZCBhbmQgdGhlIG51bWJlciBvZiBzZWxlY3RlZCBpdGVtcyBtYXRjaGVzIHRoYXQgdmFsdWUuXHJcbiAgICovXHJcbiAgZ2V0IGlzSXRlbUxpbWl0UmVhY2hlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICghaXNEZWZpbmVkKHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcykpIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuX2FyZFBhcmVudENvbXAubWF4U2VsZWN0ZWRJdGVtcyA8PSB0aGlzLnNlbGVjdGVkSXRlbXMubGVuZ3RoO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgaGVhZGVyIGNlbGxzIG9mIHRoZSB0YWJsZS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscy5cclxuICAgKi9cclxuICBnZXQgaGVhZGVyQ2VsbHMoKTogSGVhZGVyQ2VsbFtdW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2hlYWRlckNlbGxzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDaGVja3MgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICogQHJldHVybnMgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHRhYmxlIGhhcyBkZWZpbmVkIGNvbHVtbnMuXHJcbiAgICovXHJcbiAgZ2V0IGhhc0RlZmluZWRDb2x1bW5zKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGFDb2x1bW5zLmxlbmd0aCA+IDA7XHJcbiAgfVxyXG5cclxuICAvLyEgc2V0dGluZyBjb2x1bW5zXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgY29sdW1ucyBvZiB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICovXHJcbiAgc2V0Q29sdW1ucyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IG1heE5lc3RpbmdMZXZlbCA9IHRoaXMuX2dldEhlYWRlck1heE5lc3RpbmcoY29scyk7XHJcbiAgICBjb25zdCBoZWFkZXJDZWxscyA9IHRoaXMuX21hcENvbHVtbnNUb0FycmF5KGNvbHMsIG1heE5lc3RpbmdMZXZlbCwgMCk7XHJcbiAgICB0aGlzLl9oZWFkZXJDZWxscyA9IHRoaXMuX2ZpbHRlckhlYWRlckNlbGxzKGhlYWRlckNlbGxzKTtcclxuICAgIHRoaXMuX2RhdGFDb2x1bW5zID0gdGhpcy5fZXh0cmFjdERhdGFTb3VyY2VzKGNvbHMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBGaWx0ZXJzIG91dCBudWxsIHZhbHVlcyBmcm9tIHRoZSBoZWFkZXIgY2VsbHMgYXJyYXkuXHJcbiAgICogQHBhcmFtIGNlbGxzIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIG9yIG51bGwgdmFsdWVzLlxyXG4gICAqIEByZXR1cm5zIGEgMkQgYXJyYXkgb2YgaGVhZGVyIGNlbGxzIHdpdGhvdXQgbnVsbCB2YWx1ZXMgYW5kIGVtcHR5IGFycmF5cy5cclxuICAgKi9cclxuICBwcml2YXRlIF9maWx0ZXJIZWFkZXJDZWxscyhjZWxsczogKEhlYWRlckNlbGwgfCBudWxsKVtdW10pOiBIZWFkZXJDZWxsW11bXSB7XHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNlbGxzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgIGNlbGxzW2ldID0gY2VsbHNbaV0uZmlsdGVyKHYgPT4gdiAhPSBudWxsKTtcclxuICAgIH1cclxuICAgIHJldHVybiBjZWxscy5maWx0ZXIocm93ID0+IHJvdy5sZW5ndGgpIGFzIEhlYWRlckNlbGxbXVtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFeHRyYWN0cyB0aGUgZGF0YSBzb3VyY2VzIGZyb20gdGhlIGNvbHVtbnMgYXJyYXkuXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHJldHVybnMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2V4dHJhY3REYXRhU291cmNlcyhjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10pOiBUYWJsZURhdGFDb2x1bW5bXSB7XHJcbiAgICBsZXQgZGF0YUNvbHVtbnM6IFRhYmxlRGF0YUNvbHVtbltdID0gW107XHJcblxyXG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29scykge1xyXG4gICAgICBpZiAoIWlzVGFibGVTdWJoZWFkZXIoY29sKSkge1xyXG4gICAgICAgIGRhdGFDb2x1bW5zLnB1c2goY29sKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBkYXRhQ29sdW1ucy5wdXNoKC4uLnRoaXMuX2V4dHJhY3REYXRhU291cmNlcyhjb2wuY2hpbGRyZW4pKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YUNvbHVtbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEdldHMgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcGFyYW0gY29scyBhbiBhcnJheSBvZiB0YWJsZSBkYXRhIGNvbHVtbnMgb3IgdGFibGUgc3ViaGVhZGVycy5cclxuICAgKiBAcmV0dXJucyB0aGUgbWF4aW11bSBuZXN0aW5nIGxldmVsIGFzIGEgbnVtYmVyLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhlYWRlck1heE5lc3RpbmcoY29sczogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKTogbnVtYmVyIHtcclxuICAgIGlmIChhcmVBbGxEYXRhQ29sdW1ucyhjb2xzKSkgcmV0dXJuIDE7XHJcbiAgICBsZXQgbWF4ID0gMTtcclxuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMuZmlsdGVyKHYgPT4gaXNUYWJsZVN1YmhlYWRlcih2KSkgYXMgVGFibGVTdWJoZWFkZXJbXSkge1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSAxICsgdGhpcy5fZ2V0SGVhZGVyTWF4TmVzdGluZyhjb2wuY2hpbGRyZW4pO1xyXG4gICAgICBpZiAoaGVpZ2h0ID4gbWF4KSBtYXggPSBoZWlnaHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWF4O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBNYXBzIHRoZSBjb2x1bW5zIHRyZWUgdG8gYSAyRCBhcnJheSBvZiBoZWFkZXIgY2VsbHMgb3IgbnVsbCB2YWx1ZXMuXHJcbiAgICogQHBhcmFtIGNvbHMgYW4gYXJyYXkgb2YgdGFibGUgZGF0YSBjb2x1bW5zIG9yIHRhYmxlIHN1YmhlYWRlcnMuXHJcbiAgICogQHBhcmFtIG1heE5lc3RpbmcgdGhlIG1heGltdW0gbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcGFyYW0gY3VycmVudE5lc3RpbmcgdGhlIGN1cnJlbnQgbmVzdGluZyBsZXZlbCBvZiB0aGUgY29sdW1ucyBhcnJheS5cclxuICAgKiBAcmV0dXJucyBhIDJEIGFycmF5IG9mIGhlYWRlciBjZWxscyBvciBudWxsIHZhbHVlcy5cclxuICAgKi9cclxuICBwcml2YXRlIF9tYXBDb2x1bW5zVG9BcnJheShjb2xzOiAoVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpW10sIG1heE5lc3Rpbmc6IG51bWJlciwgY3VycmVudE5lc3Rpbmc6IG51bWJlcik6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdIHtcclxuICAgIGlmIChhcmVBbGxEYXRhQ29sdW1ucyhjb2xzKSkge1xyXG4gICAgICByZXR1cm4gW2NvbHMubWFwKGNvbCA9PiBuZXcgSGVhZGVyQ2VsbChjb2wsIDEsIG1heE5lc3RpbmcgLSBjdXJyZW50TmVzdGluZykpXTtcclxuICAgIH1cclxuICAgIGNvbnN0IGhlYWRlckNlbGxzOiAoSGVhZGVyQ2VsbCB8IG51bGwpW11bXSA9IFtbXV07XHJcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XHJcbiAgICAgIGlmICghaXNUYWJsZVN1YmhlYWRlcihjb2wpKSB7XHJcbiAgICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChuZXcgSGVhZGVyQ2VsbChjb2wsIDEsIG1heE5lc3RpbmcgLSBjdXJyZW50TmVzdGluZykpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGNoaWxkQ2VsbHM6IChIZWFkZXJDZWxsIHwgbnVsbClbXVtdID0gW1tdLCAuLi50aGlzLl9tYXBDb2x1bW5zVG9BcnJheShjb2wuY2hpbGRyZW4sIG1heE5lc3RpbmcsIGN1cnJlbnROZXN0aW5nICsgMSldO1xyXG4gICAgICBjb25zdCBoZWlnaHQgPSBjaGlsZENlbGxzLmxlbmd0aCAtIDE7XHJcbiAgICAgIGNvbnN0IHdpZHRoID0gY2hpbGRDZWxsc1sxXS5sZW5ndGg7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVpZ2h0OyBpKyspIHtcclxuICAgICAgICBoZWFkZXJDZWxscy5wdXNoKFtudWxsXSk7XHJcbiAgICAgIH1cclxuICAgICAgaGVhZGVyQ2VsbHNbMF0ucHVzaChuZXcgSGVhZGVyQ2VsbChjb2wsIHdpZHRoLCAxKSk7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgd2lkdGggLSAxOyBpKyspIHtcclxuICAgICAgICBoZWFkZXJDZWxsc1swXS5wdXNoKG51bGwpO1xyXG4gICAgICB9XHJcbiAgICAgIG1lcmdlMmRBcnJheXMoaGVhZGVyQ2VsbHMsIGNoaWxkQ2VsbHMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhlYWRlckNlbGxzO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNldHRpbmcgaXRlbXNcclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBjb21wb25lbnQncyBpdGVtcy4gVGFrZXMgaW50byBhY2NvdW50IHRoZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgcGFyZW50IGNvbXBvbmVudCBmb3IgYHJvd0Rpc2FibGVkRnJvbWAsIGByb3dCb2xkRnJvbWAsIGFuZCBgcm93SGlnaGxpZ2h0ZWRGcm9tYC5cclxuICAgKiBAcGFyYW0gaXRlbXMgQW4gYXJyYXkgb2YgaXRlbXMgdG8gYmUgc2V0IGFzIHRoZSBjb21wb25lbnQncyBpdGVtcy5cclxuICAgKi9cclxuICBzZXRJdGVtcyhpdGVtczogYW55W10pOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oYXNEZWZpbmVkQ29sdW1ucykgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMuX2l0ZW1zID0gaXRlbXMubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICByZXR1cm4gdGhpcy5fc2V0SXRlbXNNYXBGbihpdGVtLCBpbmRleCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zID0gdGhpcy5faXRlbXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIE1hcHMgcmF3IGl0ZW0gZGF0YSB0byBhbiB7QGxpbmsgQXJkVGFibGVSb3d9IG9iamVjdC5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXHJcbiAgICogQHJldHVybnMge0FyZFRhYmxlUm93fSBSZXR1cm5zIGFuIEFyZFRhYmxlUm93IG9iamVjdCB3aXRoIG1hcHBlZCBwcm9wZXJ0aWVzLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2V0SXRlbXNNYXBGbihyYXdJdGVtRGF0YTogYW55LCBpbmRleDogbnVtYmVyKTogQXJkVGFibGVSb3cge1xyXG4gICAgLy9nZXQgZGF0YVxyXG4gICAgY29uc3QgW2RhdGEsIGRhdGFDb2x1bW5zXSA9IHRoaXMuX2dldFJvd0RhdGEocmF3SXRlbURhdGEsIGluZGV4KTtcclxuXHJcbiAgICAvL2dldCBib2xkXHJcbiAgICBjb25zdCByb3dCb2xkRnJvbVBhdGggPSB0aGlzLl9hcmRQYXJlbnRDb21wLnJvd0JvbGRGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMucm93Qm9sZEZyb207XHJcbiAgICBsZXQgYm9sZCA9IHJlc29sdmVQYXRoKHJhd0l0ZW1EYXRhLCByb3dCb2xkRnJvbVBhdGgpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93Qm9sZCkge1xyXG4gICAgICBib2xkID0gIWJvbGQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy9nZXQgZGlzYWJsZWRcclxuICAgIGNvbnN0IGRpc2FibGVkUGF0aCA9IHRoaXMuX2FyZFBhcmVudENvbXAucm93RGlzYWJsZWRGcm9tID8/IHRoaXMuX2FyZFBhcmVudENvbXAuREVGQVVMVFMucm93RGlzYWJsZWRGcm9tO1xyXG4gICAgbGV0IGRpc2FibGVkID0gZXZhbHVhdGUocmVzb2x2ZVBhdGgocmF3SXRlbURhdGEsIGRpc2FibGVkUGF0aCkpO1xyXG4gICAgaWYgKHRoaXMuX2FyZFBhcmVudENvbXAuaW52ZXJ0Um93RGlzYWJsZWQpIHtcclxuICAgICAgZGlzYWJsZWQgPSAhZGlzYWJsZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgLy9yZXR1cm5cclxuICAgIHJldHVybiB7XHJcbiAgICAgIGl0ZW1EYXRhOiByYXdJdGVtRGF0YSxcclxuICAgICAgaW5kZXgsXHJcbiAgICAgIGRhdGEsXHJcbiAgICAgIGRhdGFDb2x1bW5zLFxyXG4gICAgICBkaXNhYmxlZCxcclxuICAgICAgYm9sZCxcclxuICAgIH07XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHJpZXZlcyBkYXRhIGZvciBhIHJvdyBiYXNlZCBvbiBkYXRhIGNvbHVtbnMgY29uZmlndXJhdGlvbi5cclxuICAgKlxyXG4gICAqIEBwYXJhbSB7YW55fSByYXdJdGVtRGF0YSAtIFRoZSByYXcgZGF0YSBvZiB0aGUgaXRlbS5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBUaGUgaW5kZXggb2YgdGhlIGl0ZW0uXHJcbiAgICogQHJldHVybnMge2FueVtdfSBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIHJvdyBkYXRhLlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0Um93RGF0YShyYXdJdGVtRGF0YTogYW55LCBpbmRleDogbnVtYmVyKTogW2FueVtdLCBUYWJsZURhdGFDb2x1bW5bXV0ge1xyXG4gICAgbGV0IGRhdGE6IGFueVtdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IGRhdGFDb2x1bW4gb2YgdGhpcy5fZGF0YUNvbHVtbnMpIHtcclxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGRhdGFDb2x1bW4uZGF0YVNvdXJjZTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2Ygc291cmNlUGF0aCA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgIGlmICh0aGlzLl9hcmRQYXJlbnRDb21wLnRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKSB7XHJcbiAgICAgICAgICBkYXRhLnB1c2gocmF3SXRlbURhdGFbc291cmNlUGF0aF0pO1xyXG4gICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEucHVzaChyZXNvbHZlUGF0aChyYXdJdGVtRGF0YSwgc291cmNlUGF0aCkpO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzb3VyY2VQYXRoLnR5cGUgPT0gJ2F1dG9jb3VudCcpIHtcclxuICAgICAgICBkYXRhLnB1c2goaW5kZXggKyAxKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoc291cmNlUGF0aC50eXBlID09ICdjaGVja2JveCcpIHtcclxuICAgICAgICBkYXRhLnB1c2goeyBfYXJkQ2hlY2tib3g6IHRydWUsIGluZGV4IH0pO1xyXG4gICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IHNvdXJjZVN0cmluZyA9IHR5cGVvZiBzb3VyY2VQYXRoID09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoc291cmNlUGF0aCkgOiBzb3VyY2VQYXRoO1xyXG4gICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcihgVW5leHBlY3RlZCBkYXRhIHNvdXJjZSBcIiR7c291cmNlU3RyaW5nfVwiLmApKTtcclxuICAgIH1cclxuICAgIHJldHVybiBbZGF0YSwgdGhpcy5fZGF0YUNvbHVtbnNdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBXcml0ZXMgYSBuZXcgdmFsdWUgdG8gdGhlIGl0ZW0gc3RvcmFnZS4gU2VsZWN0cyB0aGUgY29ycmVjdCBpdGVtcyBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgdmFsdWVzLCB3YXJuaW5nIHRoZSB1c2VyIGlmIHRoZSB2YWx1ZSBpcyBub3QgZm91bmQuXHJcbiAgICogQHBhcmFtIGluZGV4ZXMgVGhlIHZhbHVlIG9mIHRoZSBuZ01vZGVsIHRvIHNldC5cclxuICAgKi9cclxuICB3cml0ZVZhbHVlKGluZGV4ZXM6IG51bWJlcltdKTogdm9pZCB7XHJcbiAgICB0aGlzLl9mb3JjZVVuc2VsZWN0QWxsKCk7XHJcbiAgICB0aGlzLnNlbGVjdEl0ZW0oLi4uaW5kZXhlcyk7XHJcbiAgfVxyXG5cclxuICAvLyEgc2VsZWN0aW5nIGl0ZW1zXHJcbiAgLyoqXHJcbiAgICogQ2hlY2tzIGlmIGFuIGl0ZW0gd2l0aCB0aGUgZ2l2ZW4gaW5kZXggaXMgc2VsZWN0ZWQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXggVGhlIGluZGV4IG9mIHRoZSBpdGVtIHRvIGNoZWNrLlxyXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBfdHJ1ZV8gaWYgdGhlIGl0ZW0gaXMgc2VsZWN0ZWQsIG90aGVyd2lzZSBfZmFsc2VfLlxyXG4gICAqL1xyXG4gIGlzSXRlbVNlbGVjdGVkKGluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9zZWxlY3RlZEl0ZW1zLnNvbWUoaXRlbSA9PiBpdGVtLmluZGV4ID09IGluZGV4KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogU2VsZWN0cyBhbGwgaXRlbXMuXHJcbiAgICpcclxuICAgKiBBY2NvdW50cyBmb3IgdGhlIGxpbWl0IG9mIGNvbmN1cnJlbnRseSBzZWxlY3RlZCBpdGVtcyBkZWZpbmVkIGJ5IHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxyXG4gICAqICogQW4gYXJyYXkgb2YgaXRlbXMgc2VsZWN0ZWQuXHJcbiAgICogKiBBbiBhcnJheSBvZiBpdGVtcyBmYWlsZWQgdG8gc2VsZWN0LlxyXG4gICAqL1xyXG4gIHNlbGVjdEFsbCgpOiBbYW55W10sIGFueVtdXSB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RJdGVtKC4uLnRoaXMuX2l0ZW1zLm1hcCh2ID0+IHYuaW5kZXgpKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIGFsbCBzZWxlY3RlZCBpdGVtcy5cclxuICAgKlxyXG4gICAqIElmIHRoZSBwYXJlbnQgY29tcG9uZW50IHJlcXVpcmVzIGF0IGxlYXN0IG9uZSB2YWx1ZSB0byBiZSBzZWxlY3RlZCBhdCBhbGwgdGltZXMsIHRoZSBmaXJzdCBzZWxlY3RlZCBpdGVtcyBpcyBsZWZ0IHNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIGNsZWFyZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICB1bnNlbGVjdEFsbCgpOiBhbnlbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmV0ID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSBbXTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBVbnNlbGVjdHMgYWxsIHNlbGVjdGVkIGl0ZW1zLCBubyBtYXR0ZXIgd2hhdCB0aGUgY29tcG9uZW50IHNldHRpbmdzIGFyZS5cclxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBpdGVtcyBjbGVhcmVkLCBtYXBwZWQgdG8gb25seSB0aGVpciB2YWx1ZXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZm9yY2VVbnNlbGVjdEFsbCgpOiBhbnlbXSB7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5fc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICBpdGVtLnNlbGVjdGVkID0gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgcmV0ID0gdGhpcy5faXRlbXNUb1ZhbHVlKHRoaXMuX3NlbGVjdGVkSXRlbXMpO1xyXG5cclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSBbXTtcclxuXHJcbiAgICByZXR1cm4gcmV0O1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cclxuICAgKlxyXG4gICAqIEFjY291bnRzIGZvciB0aGUgbGltaXQgb2YgY29uY3VycmVudGx5IHNlbGVjdGVkIGl0ZW1zIGRlZmluZWQgYnkgdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICpcclxuICAgKiBAcGFyYW0gaW5kZXhlcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIHNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIGEgdHVwbGUgY29udGFpbmluZyB0d28gYXJyYXlzOlxyXG4gICAqICogQW4gYXJyYXkgb2YgaXRlbXMgc2VsZWN0ZWQuXHJcbiAgICogKiBBbiBhcnJheSBvZiBpdGVtcyBmYWlsZWQgdG8gc2VsZWN0LlxyXG4gICAqL1xyXG4gIHNlbGVjdEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBbYW55W10sIGFueVtdXSB7XHJcbiAgICBjb25zdCBpdGVtc1RvQmVTZWxlY3RlZCA9IHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+ICFpdGVtLmRpc2FibGVkICYmIGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCkpO1xyXG4gICAgaWYgKHRoaXMuaXNJdGVtTGltaXRSZWFjaGVkKSB7XHJcbiAgICAgIHJldHVybiBbW10sIHRoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1RvQmVTZWxlY3RlZCldO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBpdGVtc1NlbGVjdGVkQ291bnQgPSAwO1xyXG4gICAgY29uc3QgaXRlbXNTZWxlY3RlZCA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWRDb3VudCsrO1xyXG4gICAgICBpZiAoaXRlbS5zZWxlY3RlZCkgY29udGludWU7XHJcbiAgICAgIGlmICh0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCkge1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSB0cnVlO1xyXG4gICAgICB0aGlzLl9zZWxlY3RlZEl0ZW1zLnB1c2goaXRlbSk7XHJcbiAgICAgIGl0ZW1zU2VsZWN0ZWQucHVzaChpdGVtKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBpdGVtc0ZhaWxlZFRvU2VsZWN0ID0gaXRlbXNUb0JlU2VsZWN0ZWQuc2xpY2UoaXRlbXNTZWxlY3RlZENvdW50IC0gMSk7XHJcbiAgICByZXR1cm4gW3RoaXMuX2l0ZW1zVG9WYWx1ZShpdGVtc1NlbGVjdGVkKSwgdGhpcy5faXRlbXNUb1ZhbHVlKGl0ZW1zRmFpbGVkVG9TZWxlY3QpXTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5zZWxlY3RzIG9uZSBvciBtdWx0aXBsZSBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bnNlbGVjdGVkLlxyXG4gICAqIEByZXR1cm5zIEFuIGFycmF5IG9mIGl0ZW1zIHVuc2VsZWN0ZWQsIG1hcHBlZCB0byBvbmx5IHRoZWlyIHZhbHVlcy5cclxuICAgKi9cclxuICB1bnNlbGVjdEl0ZW0oLi4uaW5kZXhlczogbnVtYmVyW10pOiBhbnlbXSB7XHJcbiAgICBjb25zdCBpdGVtc1RvQmVTZWxlY3RlZCA9IHRoaXMuX2l0ZW1zLmZpbHRlcihpdGVtID0+IGluZGV4ZXMuaW5jbHVkZXMoaXRlbS5pbmRleCkpO1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zVG9CZVNlbGVjdGVkKSB7XHJcbiAgICAgIGl0ZW0uc2VsZWN0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX3NlbGVjdGVkSXRlbXMgPSB0aGlzLl9zZWxlY3RlZEl0ZW1zLmZpbHRlcih2ID0+IHYuc2VsZWN0ZWQpO1xyXG5cclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1RvVmFsdWUoaXRlbXNUb0JlU2VsZWN0ZWQpO1xyXG4gIH1cclxuXHJcbiAgLy8hIGhpZ2hsaWdodGluZyBpdGVtc1xyXG4gIC8qKlxyXG4gICAqIFVuaGlnaGxpZ2h0cyBhbGwgY3VycmVudGx5IGhpZ2hsaWdodGVkIGl0ZW1zLlxyXG4gICAqL1xyXG4gIHVuaGlnaGxpZ2h0QWxsKCk6IHZvaWQge1xyXG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMpIHtcclxuICAgICAgaXRlbS5oaWdobGlnaHRlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5faGlnaGxpZ2h0ZWRJdGVtcyA9IFtdO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBnaXZlbiBpdGVtLCB3aGlsZSB1bmhpZ2hsaWdodGluZyBhbGwgb3RoZXIgaXRlbXMuIERvZXMgbm90aGluZyB3aGVuIHRoZSBpdGVtIGlzIGRpc2FibGVkLlxyXG4gICAqIEBwYXJhbSBpdGVtIFRoZSBpbmRleCBvZiB0aGUgaXRlbSB0byBiZSBoaWdobGlnaHRlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgaGlnaGxpZ2h0ZWQgaXRlbS5cclxuICAgKi9cclxuICBoaWdobGlnaHRTaW5nbGVJdGVtKGluZGV4OiBudW1iZXIpOiBBcmRUYWJsZVJvdyB8IG51bGwge1xyXG4gICAgdGhpcy51bmhpZ2hsaWdodEFsbCgpO1xyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SXRlbShpbmRleCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgYWxsIGdpdmVuIGl0ZW1zLlxyXG4gICAqIEBwYXJhbSBpdGVtcyBBIHJlc3Qgb3BlcmF0b3IgYXJyYXkgb2YgaXRlbSBpbmRleGVzIHRvIGJlIGhpZ2hsaWdodGVkLlxyXG4gICAqIEByZXR1cm5zIFRoZSBsYXN0IGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IEFyZFRhYmxlUm93IHtcclxuICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gaW5kZXhlcy5pbmNsdWRlcyhpdGVtLmluZGV4KSk7XHJcbiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcclxuICAgICAgaXRlbS5oaWdobGlnaHRlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLnB1c2goLi4uaXRlbXMpO1xyXG4gICAgcmV0dXJuIGl0ZW1zLmxhc3QoKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVW5oaWdobGlnaHRzIGFsbCBnaXZlbiBpdGVtcy5cclxuICAgKiBAcGFyYW0gaXRlbXMgQSByZXN0IG9wZXJhdG9yIGFycmF5IG9mIGl0ZW0gaW5kZXhlcyB0byBiZSB1bmhpZ2hsaWdodGVkLlxyXG4gICAqL1xyXG4gIHVuaGlnaGxpZ2h0SXRlbSguLi5pbmRleGVzOiBudW1iZXJbXSk6IHZvaWQge1xyXG4gICAgY29uc3QgaXRlbXMgPSB0aGlzLl9pdGVtcy5maWx0ZXIoaXRlbSA9PiBpbmRleGVzLmluY2x1ZGVzKGl0ZW0uaW5kZXgpKTtcclxuICAgIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xyXG4gICAgICBpZiAoIWl0ZW0gfHwgIWl0ZW0uaGlnaGxpZ2h0ZWQpIHJldHVybjtcclxuXHJcbiAgICAgIGl0ZW0uaGlnaGxpZ2h0ZWQgPSBmYWxzZTtcclxuICAgIH1cclxuICAgIHRoaXMuX2hpZ2hsaWdodGVkSXRlbXMgPSB0aGlzLl9oaWdobGlnaHRlZEl0ZW1zLmZpbHRlcih2ID0+IHYuaGlnaGxpZ2h0ZWQpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBIaWdobGlnaHRzIHRoZSBmaXJzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0Rmlyc3RJdGVtKCk6IEFyZFRhYmxlUm93IHwgbnVsbCB7XHJcbiAgICB0aGlzLnVuaGlnaGxpZ2h0QWxsKCk7XHJcblxyXG4gICAgbGV0IGl0ZW1Ub0hpZ2hsaWdodCA9IHRoaXMuX2dldEhpZ2xpZ2h0YWJsZUl0ZW1zKCkuZmlyc3QoKS5pbmRleDtcclxuICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEl0ZW0oaXRlbVRvSGlnaGxpZ2h0KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogSGlnaGxpZ2h0cyB0aGUgbGFzdCBpdGVtIG91dCBvZiBhbGwgaXRlbXMuXHJcbiAgICogQHJldHVybnMgVGhlIGhpZ2hsaWdodGVkIGl0ZW0uXHJcbiAgICovXHJcbiAgaGlnaGxpZ2h0TGFzdEl0ZW0oKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIHRoaXMudW5oaWdobGlnaHRBbGwoKTtcclxuXHJcbiAgICBsZXQgaXRlbVRvSGlnaGxpZ2h0ID0gdGhpcy5fZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKS5sYXN0KCkuaW5kZXg7XHJcbiAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKGl0ZW1Ub0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgYWxsIG5vbi1kaXNhYmxlZCBpdGVtcy5cclxuICAgKi9cclxuICBoaWdobGlnaHRBbGxJdGVtcygpOiB2b2lkIHtcclxuICAgIGxldCBpdGVtc1RvSGlnaGxpZ2h0ID0gdGhpcy5fZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKS5tYXAodiA9PiB2LmluZGV4KTtcclxuXHJcbiAgICB0aGlzLmhpZ2hsaWdodEl0ZW0oLi4uaXRlbXNUb0hpZ2hsaWdodCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIEhpZ2hsaWdodHMgdGhlIG5leHQgbm9uLWRpc2FibGVkIGl0ZW0gZGVmaW5lZCBieSB0aGUgb2Zmc2V0IGFtb3VudC5cclxuICAgKlxyXG4gICAqIElmIGBoYXNTaGlmdGAgaXMgc2V0IHRvIHRydWUsIGFsbCBvcmlnaW5hbGx5IGhpZ2hsaWdodGVkIGl0ZW1zIGFyZSBrZXB0LiBPdGhlcndpc2UsIGFsbCBvcmlnaW5hbCBpdGVtcyBhcmUgdW5zZWxlY3RlZC5cclxuICAgKiBAcGFyYW0gb2Zmc2V0IFRoZSBhbW91bnQgb2YgaXRlbXMgdG8gb2Zmc2V0IHRoZSBoaWdobGlnaHQgYnkuXHJcbiAgICogQHBhcmFtIGhhc1NoaWZ0IFdoZXRoZXIgdGhlIHVzZXIgaGFzIHRoZSBzaGlmdCBrZXkgcHJlc3NlZC5cclxuICAgKiBAcmV0dXJucyBUaGUgaXRlbSBoaWdobGlnaHRlZC5cclxuICAgKi9cclxuICBoaWdobGlnaHROZXh0SXRlbShvZmZzZXQ6IG51bWJlciwgaGFzU2hpZnQ/OiBib29sZWFuKTogQXJkVGFibGVSb3cgfCBudWxsIHtcclxuICAgIGlmICghdGhpcy5pc0FueUl0ZW1IaWdobGlnaHRlZCkge1xyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRGaXJzdEl0ZW0oKTtcclxuICAgIH1cclxuICAgIGNvbnN0IGN1cnJlbnRJdGVtID0gdGhpcy5oaWdobGlnaHRlZEl0ZW1zLmxhc3QoKTtcclxuICAgIGNvbnN0IGl0ZW1zV2l0aG91dERpc2FibGVkID0gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQgJiYgKCF0aGlzLmlzSXRlbUxpbWl0UmVhY2hlZCB8fCBpdGVtLnNlbGVjdGVkKSk7XHJcbiAgICBjb25zdCBjdXJyZW50SW5kZXhJbkl0ZW1zID0gaXRlbXNXaXRob3V0RGlzYWJsZWQuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5pbmRleCA9PSBjdXJyZW50SXRlbS5pbmRleCk7XHJcblxyXG4gICAgbGV0IG5leHRJdGVtSW5kZXggPSBjdXJyZW50SW5kZXhJbkl0ZW1zICsgb2Zmc2V0O1xyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPj0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggLT0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgaWYgKG5leHRJdGVtSW5kZXggPCAwKSB7XHJcbiAgICAgIG5leHRJdGVtSW5kZXggKz0gaXRlbXNXaXRob3V0RGlzYWJsZWQubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgY29uc3QgaXRlbVRvSGlnaGxpZ2h0ID0gaXRlbXNXaXRob3V0RGlzYWJsZWRbbmV4dEl0ZW1JbmRleF07XHJcblxyXG4gICAgaWYgKGhhc1NoaWZ0KSB7XHJcbiAgICAgIGlmIChpdGVtVG9IaWdobGlnaHQuaGlnaGxpZ2h0ZWQpIHtcclxuICAgICAgICB0aGlzLnVuaGlnaGxpZ2h0SXRlbShuZXh0SXRlbUluZGV4KTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRJdGVtKG5leHRJdGVtSW5kZXgpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0U2luZ2xlSXRlbShuZXh0SXRlbUluZGV4KTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmluZHMgYWxsIGhpZ2hsaWdodGFibGUgaXRlbXMuIEFuIGl0ZW0gaXMgY29uc2lkZXJlZCBoaWdobGlnaHRhYmxlIGlmIGl0IGlzICoqbm90KiogZGlzYWJsZWQuXHJcbiAgICogQHJldHVybnMgQW4gYXJyYXkgb2YgYWxsIGhpZ2hsaWdodGFibGUgaXRlbXMuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfZ2V0SGlnbGlnaHRhYmxlSXRlbXMoKTogQXJkVGFibGVSb3dbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5faXRlbXMuZmlsdGVyKGl0ZW0gPT4gIWl0ZW0uZGlzYWJsZWQpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNvcnRpbmdcclxuICBwcml2YXRlIF9jdXJyZW50U29ydENvbHVtbjogbnVtYmVyIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBfY3VycmVudFNvcnRUeXBlOiBTb3J0VHlwZSB8IG51bGwgPSBudWxsO1xyXG5cclxuICB0b2dnbGVDdXJyZW50U29ydENvbHVtbihjb2x1bW46IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2N1cnJlbnRTb3J0Q29sdW1uID09IGNvbHVtbikge1xyXG4gICAgICBpZiAodGhpcy5fY3VycmVudFNvcnRUeXBlID09IFNvcnRUeXBlLkFzY2VuZGluZykge1xyXG4gICAgICAgIHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9IFNvcnRUeXBlLkRlc2NlbmRpbmc7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gU29ydFR5cGUuQXNjZW5kaW5nO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX2dlbmVyYXRlU29ydGVkUm93cyh0cnVlKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBjb2x1bW47XHJcbiAgICB0aGlzLl9jdXJyZW50U29ydFR5cGUgPSBTb3J0VHlwZS5Bc2NlbmRpbmc7XHJcbiAgICB0aGlzLl9nZW5lcmF0ZVNvcnRlZFJvd3MoKTtcclxuICB9XHJcbiAgcmVzZXRTb3J0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPSBudWxsO1xyXG4gICAgdGhpcy5fY3VycmVudFNvcnRUeXBlID0gbnVsbDtcclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdO1xyXG4gIH1cclxuICBnZXRDb2x1bW5Tb3J0VHlwZShjb2x1bW46IG51bWJlcik6IFNvcnRUeXBlIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5fY3VycmVudFNvcnRDb2x1bW4gPT0gY29sdW1uKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50U29ydFR5cGU7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZ2VuZXJhdGVTb3J0ZWRSb3dzKGp1c3RSZXZlcnNlPzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgaWYgKGp1c3RSZXZlcnNlKSB7XHJcbiAgICAgIHRoaXMuX3NvcnRlZEl0ZW1zLnJldmVyc2UoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc29ydENvbHVtbkluZGV4ID0gdGhpcy5fY3VycmVudFNvcnRDb2x1bW47XHJcbiAgICBpZiAoaXNOdWxsKHNvcnRDb2x1bW5JbmRleCkgfHwgIXRoaXMuX2N1cnJlbnRTb3J0VHlwZSkge1xyXG4gICAgICB0aGlzLl9zb3J0ZWRJdGVtcyA9IHRoaXMuaXRlbXM7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHNvcnRDb2x1bW4gPSB0aGlzLl9kYXRhQ29sdW1uc1tzb3J0Q29sdW1uSW5kZXhdO1xyXG4gICAgaWYgKCFzb3J0Q29sdW1uKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcihcclxuICAgICAgICBgRW5jb3VudGVyZWQgYW4gaXNzdWUgaW4gPGFyZC10YWJsZT46IGNvdWxkIG5vdCBmaW5kIHRoZSBjb2x1bW4gd2l0aCBpbmRleCAke3NvcnRDb2x1bW5JbmRleH0uIFRoaXMgaXMgbW9zdCBsaWtlbHkgYW4gQXJkaXVtIGJ1ZywgcGxlYXNlIHJlcG9ydCBpdCBvbiBHaXRIdWIuYFxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IHRoaXMuX2N1cnJlbnRTb3J0VHlwZSA9PSBTb3J0VHlwZS5Bc2NlbmRpbmcgPyAxIDogLTE7XHJcbiAgICBjb25zdCBzb3J0Rm4gPVxyXG4gICAgICBzb3J0Q29sdW1uLnNvcnRGbiA/P1xyXG4gICAgICAoKGEsIGIpID0+IHtcclxuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiBkaXJlY3Rpb247XHJcbiAgICAgICAgaWYgKGEgPCBiKSByZXR1cm4gLTEgKiBkaXJlY3Rpb247XHJcbiAgICAgICAgcmV0dXJuIDA7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuX3NvcnRlZEl0ZW1zID0gWy4uLnRoaXMuaXRlbXNdLnNvcnQoKGEsIGIpID0+IHNvcnRGbihhLmRhdGFbc29ydENvbHVtbkluZGV4XSwgYi5kYXRhW3NvcnRDb2x1bW5JbmRleF0pKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -364,10 +364,10 @@ export class ArdiumTableComponent extends _FocusableComponentBase {
|
|
|
364
364
|
},
|
|
365
365
|
};
|
|
366
366
|
}
|
|
367
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.
|
|
368
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.7", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: "rowDisabledFrom", rowBoldFrom: "rowBoldFrom", invertRowDisabled: "invertRowDisabled", invertRowBold: "invertRowBold", selectableRows: "selectableRows", caption: "caption", isLoading: "isLoading", loadingProgress: "loadingProgress", appearance: "appearance", variant: "variant", color: "color", align: "align", headerAlign: "headerAlign", compact: "compact", zebra: "zebra", stickyHeader: "stickyHeader", paginated: "paginated", paginationStrategy: "paginationStrategy", paginationOptions: "paginationOptions", totalItems: "totalItems", paginationColor: "paginationColor", paginationAlign: "paginationAlign", itemsPerPageText: "itemsPerPageText", currentItemsFormatFn: "currentItemsFormatFn", pageFillRemaining: "pageFillRemaining", paginationDisabled: "paginationDisabled", useFirstLastButtons: "useFirstLastButtons", itemsPerPage: "itemsPerPage", page: "page", columns: "columns", data: "data", treatDataSourceAsString: "treatDataSourceAsString" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective }], usesInheritance: true, ngImport: i0, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["wrapperClasses", "htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: i3.ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["options", "itemsPerPage", "page", "totalItems", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: i4.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
367
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumTableComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
368
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.9", type: ArdiumTableComponent, selector: "ard-table", inputs: { rowDisabledFrom: "rowDisabledFrom", rowBoldFrom: "rowBoldFrom", invertRowDisabled: "invertRowDisabled", invertRowBold: "invertRowBold", selectableRows: "selectableRows", caption: "caption", isLoading: "isLoading", loadingProgress: "loadingProgress", appearance: "appearance", variant: "variant", color: "color", align: "align", headerAlign: "headerAlign", compact: "compact", zebra: "zebra", stickyHeader: "stickyHeader", paginated: "paginated", paginationStrategy: "paginationStrategy", paginationOptions: "paginationOptions", totalItems: "totalItems", paginationColor: "paginationColor", paginationAlign: "paginationAlign", itemsPerPageText: "itemsPerPageText", currentItemsFormatFn: "currentItemsFormatFn", pageFillRemaining: "pageFillRemaining", paginationDisabled: "paginationDisabled", useFirstLastButtons: "useFirstLastButtons", itemsPerPage: "itemsPerPage", page: "page", columns: "columns", data: "data", treatDataSourceAsString: "treatDataSourceAsString" }, outputs: { itemsPerPageChange: "itemsPerPageChange", pageChange: "pageChange", selectedRowsChangeEvent: "selectedRowsChange", failedSelectRowEvent: "failedSelectRow", selectRowEvent: "selectRow", unselectRowEvent: "unselectRow" }, queries: [{ propertyName: "checkboxTemplate", first: true, predicate: ArdiumTableCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "headerCheckboxTemplate", first: true, predicate: ArdiumTableHeaderCheckboxTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "captionTemplate", first: true, predicate: ArdiumTableCaptionTemplateDirective, descendants: true, read: TemplateRef }, { propertyName: "templateChildren", predicate: ArdiumTableTemplateDirective }], usesInheritance: true, ngImport: i0, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.ArdiumCheckboxComponent, selector: "ard-checkbox", inputs: ["wrapperClasses", "htmlId", "color", "unselectedColor", "state"], outputs: ["stateChange"] }, { kind: "component", type: i3.ArdiumTablePaginationComponent, selector: "ard-table-pagination", inputs: ["options", "itemsPerPage", "page", "totalItems", "color", "align", "compact", "useFirstLastButtons", "isLoading", "itemsPerPageText", "currentItemsFormatFn"], outputs: ["itemsPerPageChange", "pageChange"] }, { kind: "component", type: i4.ArdiumIconComponent, selector: "ard-icon", inputs: ["ariaLabel", "icon", "filled", "weight", "grade", "opticalSize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
369
369
|
}
|
|
370
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.
|
|
370
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.9", ngImport: i0, type: ArdiumTableComponent, decorators: [{
|
|
371
371
|
type: Component,
|
|
372
372
|
args: [{ selector: 'ard-table', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<table class=\"ard-table\" [ngClass]=\"ngClasses\">\r\n <caption\r\n *ngIf=\"caption\"\r\n class=\"ard-table__caption\"\r\n >\r\n <div class=\"ard-table__caption-container\">\r\n <ng-template #defaultCaptionTemplate let-captionText>\r\n {{ captionText }}\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"captionTemplate ?? defaultCaptionTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: caption }\"\r\n />\r\n </div>\r\n </caption>\r\n <thead class=\"ard-table__header\">\r\n <tr class=\"ard-table__header-row\" *ngFor=\"let row of headerCells\">\r\n <th\r\n *ngFor=\"let cell of row; let index = index\"\r\n class=\"ard-table__header-cell\"\r\n [ngClass]=\"cell.cell.cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isHeaderCellCheckbox(cell)\"\r\n [attr.colspan]=\"cell.colspan\"\r\n [attr.rowspan]=\"cell.rowspan\"\r\n [scope]=\"cell.colspan > 1 ? 'colgroup' : 'col'\"\r\n >\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [class.ard-table__sortable]=\"isHeaderCellSortable(cell)\"\r\n [style.width]=\"cell.width\"\r\n [style.minWidth]=\"cell.minWidth\"\r\n >\r\n <ng-container *ngIf=\"isHeaderCellCheckbox(cell)\">\r\n <ng-template #defaultHeaderCheckboxTemplate let-state let-onChange=\"onChange\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [state]=\"state\" [color]=\"getHeaderCheckboxColor()\" unselectedColor=\"currentColor\" (change)=\"onChange()\" />\r\n </ng-template>\r\n \r\n <ng-template\r\n [ngTemplateOutlet]=\"headerCheckboxTemplate ?? defaultHeaderCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderCheckboxContext()\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isHeaderCellCheckbox(cell)\">\r\n <ng-template\r\n #defaultHeaderCellTemplate\r\n let-content\r\n let-sortable=\"sortable\"\r\n let-sortType=\"sortType\"\r\n let-onTriggerSort=\"onTriggerSort\"\r\n let-onTriggerResetSort=\"onTriggerResetSort\"\r\n >\r\n <div\r\n class=\"ard-table__header-template-container\"\r\n [class.ard-sortable]=\"sortable\"\r\n [class.ard-nonsortable]=\"!sortable\"\r\n >\r\n <button\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"sortable\"\r\n (click)=\"onTriggerSort($event)\"\r\n [tabindex]=\"tabIndex\"\r\n (keydown.Esc)=\"onTriggerResetSort($event)\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n <div class=\"ard-table__header-sort-icon\" *ngIf=\"sortType != null\">\r\n <ard-icon *ngIf=\"sortType == 'ascending'\">south</ard-icon>\r\n <ard-icon *ngIf=\"sortType == 'descending'\">north</ard-icon>\r\n </div>\r\n </button>\r\n <div\r\n class=\"ard-table__header-content-container\"\r\n *ngIf=\"!sortable\"\r\n >\r\n <div class=\"ard-table__header-content\">{{ content }}</div>\r\n </div>\r\n </div>\r\n </ng-template>\r\n \r\n <ng-template \r\n [ngTemplateOutlet]=\"getHeaderTemplate(cell.cell.header) ?? defaultHeaderCellTemplate\"\r\n [ngTemplateOutletContext]=\"getHeaderContext(cell.cell, index)\"\r\n />\r\n </ng-container>\r\n </div>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody class=\"ard-table__body\">\r\n <ng-container *ngFor=\"let row of dataRows; let rowIndex = index;\">\r\n <tr *ngIf=\"row.isEmpty\" class=\"ard-table__empty-row\">\r\n <td class=\"ard-table__empty-cell\" colspan=\"9999\"></td>\r\n </tr>\r\n <tr\r\n *ngIf=\"!row.isEmpty\"\r\n class=\"ard-table__body-row\"\r\n [class.ard-table__selected-row]=\"row.selected\"\r\n [class.ard-table__highlighted-row]=\"row.highlighted\"\r\n [class.ard-table__disabled-row]=\"row.disabled\"\r\n [class.ard-table__bold-row]=\"row.bold\"\r\n (click)=\"onRowClick(rowIndex, $event)\"\r\n (mouseover)=\"onRowMouseOver($event)\"\r\n (mouseenter)=\"onRowMouseEnter(rowIndex, $event)\"\r\n (mouseleave)=\"onRowMouseLeave(rowIndex, $event)\"\r\n >\r\n <ng-container *ngFor=\"let cell of row.data; let cellIndex = index\">\r\n <ng-template #cellTmp>\r\n <div\r\n class=\"ard-table__cell-container\"\r\n [style]=\"getCellStyle(row.dataColumns[cellIndex])\"\r\n >\r\n <ng-container *ngIf=\"isCellCheckbox(cell)\">\r\n <ng-template #defaultCheckboxTemplate let-isChecked let-onChange=\"onChange\" let-disabled=\"disabled\">\r\n <ard-checkbox [tabIndex]=\"isLoading ? -1 : tabIndex\" [selected]=\"isChecked\" [color]=\"color\" [disabled]=\"disabled\" (change)=\"onChange()\" (click)=\"$event.stopPropagation()\" />\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"checkboxTemplate ?? defaultCheckboxTemplate\"\r\n [ngTemplateOutletContext]=\"getCheckboxContext(rowIndex)\"\r\n />\r\n </ng-container>\r\n <ng-container *ngIf=\"!isCellCheckbox(cell)\">\r\n <ng-template #defaultCellTemplate let-content>\r\n {{ content }}\r\n </ng-template>\r\n\r\n <ng-template\r\n [ngTemplateOutlet]=\"getCellTemplate(row.dataColumns[cellIndex].template) ?? defaultCellTemplate\"\r\n [ngTemplateOutletContext]=\"{ $implicit: cell }\"\r\n />\r\n </ng-container>\r\n </div>\r\n </ng-template>\r\n <td\r\n *ngIf=\"!row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </td>\r\n <th\r\n *ngIf=\"row.dataColumns[cellIndex].isRowHeader\"\r\n class=\"ard-table__body-cell ard-table__row-header\"\r\n scope=\"row\"\r\n [ngClass]=\"row.dataColumns[cellIndex].cellClass\"\r\n [class.ard-table__checkbox-cell]=\"isCellCheckbox(cell)\"\r\n >\r\n <ng-template [ngTemplateOutlet]=\"cellTmp\"></ng-template>\r\n </th>\r\n </ng-container>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n <tfoot class=\"ard-table__foot\" *ngIf=\"canDisplayPagination\">\r\n <tr class=\"ard-table__foot-row\">\r\n <td class=\"ard-table__pagination-cell\" colspan=\"9999\">\r\n <ard-table-pagination\r\n [options]=\"paginationOptions\"\r\n [(page)]=\"page\"\r\n [totalItems]=\"totalItems\"\r\n [disabled]=\"paginationDisabled\"\r\n [(itemsPerPage)]=\"itemsPerPage\"\r\n [align]=\"paginationAlign\"\r\n [isLoading]=\"isLoading\"\r\n [itemsPerPageText]=\"itemsPerPageText\"\r\n [currentItemsFormatFn]=\"currentItemsFormatFn\"\r\n (itemsPerPageChange)=\"itemsPerPageChange.emit($event)\"\r\n (pageChange)=\"pageChange.emit($event)\"\r\n ></ard-table-pagination>\r\n </td>\r\n </tr>\r\n </tfoot>\r\n</table>", styles: [".ard-table__cell-container,.ard-table__header-template-container{width:100%;height:100%}\n"] }]
|
|
373
373
|
}], propDecorators: { rowDisabledFrom: [{
|
|
@@ -465,4 +465,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImpor
|
|
|
465
465
|
type: Output,
|
|
466
466
|
args: ['unselectRow']
|
|
467
467
|
}] } });
|
|
468
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RSxPQUFPLEVBQTJCLGdCQUFnQixFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLDBDQUEwQyxFQUMxQyw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBRUwsY0FBYyxFQUNkLGVBQWUsRUFNZix1QkFBdUIsRUFFdkIsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBUzNDLE1BQU0sT0FBTyxv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QWtCO3NCQUEzQixNQUFNO2dCQUlILElBQUk7c0JBRFAsS0FBSztnQkFPSSxVQUFVO3NCQUFuQixNQUFNO2dCQW9DSCxPQUFPO3NCQURWLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQVdGLHVCQUF1QjtzQkFEMUIsS0FBSztnQkFVTixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxvQ0FBb0MsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBS3pFLHNCQUFzQjtzQkFIckIsWUFBWTt1QkFBQywwQ0FBMEMsRUFBRTt3QkFDeEQsSUFBSSxFQUFFLFdBQVc7cUJBQ2xCO2dCQUdELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxtQ0FBbUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBS3hFLGdCQUFnQjtzQkFEZixlQUFlO3VCQUFDLDRCQUE0QjtnQkFtSGYsdUJBQXVCO3NCQUFwRCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFDRCxvQkFBb0I7c0JBQTlDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUNKLGNBQWM7c0JBQWxDLE1BQU07dUJBQUMsV0FBVztnQkFDSSxnQkFBZ0I7c0JBQXRDLE1BQU07dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgQ29udGVudENoaWxkcmVuLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSwgY29lcmNlTnVtYmVyUHJvcGVydHkgfSBmcm9tICdAYXJkaXVtLXVpL2RldmtpdCc7XG5pbXBvcnQgeyBpc0RlZmluZWQgfSBmcm9tICdzaW1wbGUtYm9vbCc7XG5pbXBvcnQgeyBfRm9jdXNhYmxlQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL19pbnRlcm5hbC9mb2N1c2FibGUtY29tcG9uZW50JztcbmltcG9ydCB7IENoZWNrYm94U3RhdGUgfSBmcm9tICcuLi9jaGVja2JveC9jaGVja2JveC50eXBlcyc7XG5pbXBvcnQgeyBDdXJyZW50SXRlbXNGb3JtYXRGbiwgUGFnaW5hdGlvbkFsaWduIH0gZnJvbSAnLi4vdGFibGUtcGFnaW5hdGlvbi90YWJsZS1wYWdpbmF0aW9uLnR5cGVzJztcbmltcG9ydCB7IENvbXBvbmVudENvbG9yLCBTaW1wbGVDb21wb25lbnRDb2xvciB9IGZyb20gJy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XG5pbXBvcnQgeyBBcmRUYWJsZVJvdywgSGVhZGVyQ2VsbCwgVGFibGVJdGVtU3RvcmFnZSwgVGFibGVJdGVtU3RvcmFnZUhvc3QgfSBmcm9tICcuL3RhYmxlLWl0ZW0tc3RvcmFnZSc7XG5pbXBvcnQge1xuICBBcmRpdW1UYWJsZUNhcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSxcbiAgQXJkaXVtVGFibGVDaGVja2JveFRlbXBsYXRlRGlyZWN0aXZlLFxuICBBcmRpdW1UYWJsZUhlYWRlckNoZWNrYm94VGVtcGxhdGVEaXJlY3RpdmUsXG4gIEFyZGl1bVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXG59IGZyb20gJy4vdGFibGUuZGlyZWN0aXZlcyc7XG5pbXBvcnQge1xuICBTb3J0VHlwZSxcbiAgVGFibGVBbGlnblR5cGUsXG4gIFRhYmxlQXBwZWFyYW5jZSxcbiAgVGFibGVDYXB0aW9uQ29udGV4dCxcbiAgVGFibGVDaGVja2JveENvbnRleHQsXG4gIFRhYmxlRGF0YUNvbHVtbixcbiAgVGFibGVIZWFkZXJDaGVja2JveENvbnRleHQsXG4gIFRhYmxlSGVhZGVyQ29udGV4dCxcbiAgVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3ksXG4gIFRhYmxlU3ViaGVhZGVyLFxuICBUYWJsZVZhcmlhbnQsXG4gIFRhYmxlU3ViaGVhZGVyQ29udGV4dCxcbn0gZnJvbSAnLi90YWJsZS50eXBlcyc7XG5pbXBvcnQgeyBpc1RhYmxlU3ViaGVhZGVyIH0gZnJvbSAnLi91dGlscyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FyZC10YWJsZScsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBBcmRpdW1UYWJsZUNvbXBvbmVudCBleHRlbmRzIF9Gb2N1c2FibGVDb21wb25lbnRCYXNlIGltcGxlbWVudHMgVGFibGVJdGVtU3RvcmFnZUhvc3QsIEFmdGVyQ29udGVudEluaXQge1xuICBwcml2YXRlIHJlYWRvbmx5IF9pdGVtU3RvcmFnZSA9IG5ldyBUYWJsZUl0ZW1TdG9yYWdlKHRoaXMpO1xuXG4gIHJlYWRvbmx5IERFRkFVTFRTID0ge1xuICAgIHJvd0Rpc2FibGVkRnJvbTogJ2Rpc2FibGVkJyxcbiAgICByb3dCb2xkRnJvbTogJ2JvbGQnLFxuICB9O1xuXG4gIEBJbnB1dCgpIHJvd0Rpc2FibGVkRnJvbT86IHN0cmluZztcbiAgQElucHV0KCkgcm93Qm9sZEZyb20/OiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBfaW52ZXJ0Um93RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IGludmVydFJvd0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dEaXNhYmxlZDtcbiAgfVxuICBzZXQgaW52ZXJ0Um93RGlzYWJsZWQodjogYW55KSB7XG4gICAgdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gIH1cblxuICBwcml2YXRlIF9pbnZlcnRSb3dCb2xkOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBpbnZlcnRSb3dCb2xkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dCb2xkO1xuICB9XG4gIHNldCBpbnZlcnRSb3dCb2xkKHY6IGFueSkge1xuICAgIHRoaXMuX2ludmVydFJvd0JvbGQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gIH1cblxuICBwcml2YXRlIF9zZWxlY3RhYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgc2VsZWN0YWJsZVJvd3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGVSb3dzO1xuICB9XG4gIHNldCBzZWxlY3RhYmxlUm93cyh2OiBhbnkpIHtcbiAgICB0aGlzLl9zZWxlY3RhYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIEBJbnB1dCgpIGNhcHRpb24/OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgaXNMb2FkaW5nPzogYm9vbGVhbjtcbiAgQElucHV0KCkgbG9hZGluZ1Byb2dyZXNzPzogbnVtYmVyOyAvL1RPRE8gYWRkIHByb2dyZXNzIGJhclxuXG4gIC8vISBhcHBlYXJhbmNlXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IFRhYmxlQXBwZWFyYW5jZSA9IFRhYmxlQXBwZWFyYW5jZS5TdHJvbmc7XG4gIEBJbnB1dCgpIHZhcmlhbnQ6IFRhYmxlVmFyaWFudCA9IFRhYmxlVmFyaWFudC5Sb3VuZGVkO1xuICBASW5wdXQoKSBjb2xvcjogQ29tcG9uZW50Q29sb3IgPSBDb21wb25lbnRDb2xvci5QcmltYXJ5O1xuICBASW5wdXQoKSBhbGlnbjogVGFibGVBbGlnblR5cGUgPSBUYWJsZUFsaWduVHlwZS5DZW50ZXJMZWZ0O1xuICBASW5wdXQoKSBoZWFkZXJBbGlnbjogVGFibGVBbGlnblR5cGUgPSBUYWJsZUFsaWduVHlwZS5DZW50ZXJMZWZ0O1xuXG4gIHByaXZhdGUgX2NvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IGNvbXBhY3QoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXBhY3Q7XG4gIH1cbiAgc2V0IGNvbXBhY3QodjogYW55KSB7XG4gICAgdGhpcy5fY29tcGFjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIHByaXZhdGUgX3plYnJhOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCB6ZWJyYSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5femVicmE7XG4gIH1cbiAgc2V0IHplYnJhKHY6IGFueSkge1xuICAgIHRoaXMuX3plYnJhID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCBzdGlja3lIZWFkZXIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3N0aWNreUhlYWRlcjtcbiAgfVxuICBzZXQgc3RpY2t5SGVhZGVyKHY6IGFueSkge1xuICAgIHRoaXMuX3N0aWNreUhlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcbiAgfVxuXG4gIGdldCBuZ0NsYXNzZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYGFyZC1hcHBlYXJhbmNlLSR7dGhpcy5hcHBlYXJhbmNlfWAsXG4gICAgICBgYXJkLXZhcmlhbnQtJHt0aGlzLnZhcmlhbnR9YCxcbiAgICAgIGBhcmQtY29sb3ItJHt0aGlzLmNvbG9yfWAsXG4gICAgICBgYXJkLWFsaWduLSR7dGhpcy5hbGlnbn1gLFxuICAgICAgYGFyZC1oZWFkZXItYWxpZ24tJHt0aGlzLmhlYWRlckFsaWdufWAsXG4gICAgICB0aGlzLmNvbXBhY3QgPyAnYXJkLWNvbXBhY3QnIDogJycsXG4gICAgICB0aGlzLnplYnJhID8gJ2FyZC16ZWJyYS10YWJsZScgOiAnJyxcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVJvd3MgPyAnYXJkLXNlbGVjdGFibGUtcm93cycgOiAnJyxcbiAgICAgIHRoaXMuc3RpY2t5SGVhZGVyID8gJ2FyZC1zdGlja3ktaGVhZGVyJyA6ICcnLFxuICAgICAgdGhpcy5pc0xvYWRpbmcgPyAnYXJkLXRhYmxlLWxvYWRpbmcnIDogJycsXG4gICAgXS5qb2luKCcgJyk7XG4gIH1cblxuICAvLyEgcGFnaW5hdGlvblxuICBwcml2YXRlIF9wYWdpbmF0ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGVkO1xuICB9XG4gIHNldCBwYWdpbmF0ZWQodjogYW55KSB7XG4gICAgdGhpcy5fcGFnaW5hdGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgQElucHV0KCkgcGFnaW5hdGlvblN0cmF0ZWd5OiBUYWJsZVBhZ2luYXRpb25TdHJhdGVneSA9IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3A7XG5cbiAgQElucHV0KCkgcGFnaW5hdGlvbk9wdGlvbnM6IG51bWJlcltdIHwgeyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXSA9IFsxMCwgMjUsIDUwXTtcbiAgQElucHV0KCkgdG90YWxJdGVtcz86IG51bWJlcjtcbiAgQElucHV0KCkgcGFnaW5hdGlvbkNvbG9yOiBDb21wb25lbnRDb2xvciA9IENvbXBvbmVudENvbG9yLk5vbmU7XG4gIEBJbnB1dCgpIHBhZ2luYXRpb25BbGlnbjogUGFnaW5hdGlvbkFsaWduID0gUGFnaW5hdGlvbkFsaWduLlNwbGl0O1xuICBASW5wdXQoKSBpdGVtc1BlclBhZ2VUZXh0OiBzdHJpbmcgPSAnSXRlbXMgcGVyIHBhZ2U6JztcbiAgQElucHV0KCkgY3VycmVudEl0ZW1zRm9ybWF0Rm46IEN1cnJlbnRJdGVtc0Zvcm1hdEZuID0gKHsgY3VycmVudEl0ZW1zRmlyc3QsIGN1cnJlbnRJdGVtc0xhc3QsIHRvdGFsSXRlbXMgfSkgPT4ge1xuICAgIHJldHVybiBgJHtjdXJyZW50SXRlbXNGaXJzdH0g4oCTICR7Y3VycmVudEl0ZW1zTGFzdH0gb2YgJHt0b3RhbEl0ZW1zfWA7XG4gIH07XG5cbiAgcHJpdmF0ZSBfcGFnZUZpbGxSZW1haW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2VGaWxsUmVtYWluaW5nKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9wYWdlRmlsbFJlbWFpbmluZztcbiAgfVxuICBzZXQgcGFnZUZpbGxSZW1haW5pbmcodjogYW55KSB7XG4gICAgdGhpcy5fcGFnZUZpbGxSZW1haW5pbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XG4gIH1cblxuICBwcml2YXRlIF9wYWdpbmF0aW9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2luYXRpb25EaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkO1xuICB9XG4gIHNldCBwYWdpbmF0aW9uRGlzYWJsZWQodjogYW55KSB7XG4gICAgdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfdXNlRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKVxuICBnZXQgdXNlRmlyc3RMYXN0QnV0dG9ucygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdXNlRmlyc3RMYXN0QnV0dG9ucztcbiAgfVxuICBzZXQgdXNlRmlyc3RMYXN0QnV0dG9ucyh2OiBhbnkpIHtcbiAgICB0aGlzLl91c2VGaXJzdExhc3RCdXR0b25zID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSA1MDtcbiAgQElucHV0KClcbiAgZ2V0IGl0ZW1zUGVyUGFnZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XG4gIH1cbiAgc2V0IGl0ZW1zUGVyUGFnZSh2OiBhbnkpIHtcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcbiAgfVxuICBAT3V0cHV0KCkgaXRlbXNQZXJQYWdlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG5cbiAgcHJpdmF0ZSBfcGFnZTogbnVtYmVyID0gMTtcbiAgQElucHV0KClcbiAgZ2V0IHBhZ2UoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZTtcbiAgfVxuICBzZXQgcGFnZSh2OiBhbnkpIHtcbiAgICB0aGlzLl9wYWdlID0gY29lcmNlTnVtYmVyUHJvcGVydHkodik7XG4gIH1cbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcblxuICBnZXQgaXNEZWZpbmVkVG90YWxJdGVtcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdGlvblN0cmF0ZWd5ID09IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3AgJiYgaXNEZWZpbmVkKHRoaXMudG90YWxJdGVtcykpIHx8IHRoaXMucGFnaW5hdGlvblN0cmF0ZWd5ICE9IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3A7XG4gIH1cbiAgZ2V0IGNhbkRpc3BsYXlQYWdpbmF0aW9uKCk6IGJvb2xlYW4ge1xuICAgIC8vcHJldHRpZXItaWdub3JlXG4gICAgcmV0dXJuIHRoaXMucGFnaW5hdGVkICYmIHRoaXMuaXNEZWZpbmVkVG90YWxJdGVtcztcbiAgfVxuXG4gIC8vISBpdGVtIHN0b3JhZ2UgZ2V0dGVyc1xuICBnZXQgaGVhZGVyQ2VsbHMoKTogSGVhZGVyQ2VsbFtdW10ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtU3RvcmFnZS5oZWFkZXJDZWxscztcbiAgfVxuICBnZXQgZGF0YVJvd3MoKTogQXJkVGFibGVSb3dbXSB7XG4gICAgY29uc3QgaXRlbXM6IEFyZFRhYmxlUm93W10gPSB0aGlzLl9pdGVtU3RvcmFnZS5wYWdpbmF0ZWRJdGVtcztcblxuICAgIGlmICghdGhpcy5wYWdlRmlsbFJlbWFpbmluZykgcmV0dXJuIGl0ZW1zO1xuICAgIGlmICghdGhpcy5pc0RlZmluZWRUb3RhbEl0ZW1zKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJzxhcmQtdGFibGU+IHJlcXVpcmVzIFt0b3RhbEl0ZW1zXSB0byBiZSBkZWZpbmVkLicpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wYWdlID09IDEpIHJldHVybiBpdGVtcztcbiAgICBmb3IgKGxldCBpID0gaXRlbXMubGVuZ3RoOyBpIDwgdGhpcy5pdGVtc1BlclBhZ2U7IGkrKykge1xuICAgICAgaXRlbXMucHVzaCh7XG4gICAgICAgIGl0ZW1EYXRhOiBudWxsLFxuICAgICAgICBpbmRleDogaSxcbiAgICAgICAgZGF0YTogW10sXG4gICAgICAgIGRhdGFDb2x1bW5zOiBbXSxcbiAgICAgICAgaXNFbXB0eTogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gaXRlbXM7XG4gIH1cblxuICAvLyEgY29sdW1ucy9kYXRhIHNldHRlcnNcbiAgQElucHV0KClcbiAgc2V0IGNvbHVtbnModjogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKSB7XG4gICAgdGhpcy5faXRlbVN0b3JhZ2Uuc2V0Q29sdW1ucyh2KTtcbiAgfVxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xuICBASW5wdXQoKVxuICBzZXQgZGF0YSh2OiBhbnlbXSkge1xuICAgIHRoaXMuX2RhdGEgPSB2O1xuICAgIHRoaXMuX2l0ZW1TdG9yYWdlLnNldEl0ZW1zKHYpO1xuICB9XG4gIGdldCBkYXRhKCk6IGFueVtdIHtcbiAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgfVxuXG4gIHByaXZhdGUgX3RyZWF0RGF0YVNvdXJjZUFzU3RyaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpXG4gIGdldCB0cmVhdERhdGFTb3VyY2VBc1N0cmluZygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmc7XG4gIH1cbiAgc2V0IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKHY6IGFueSkge1xuICAgIHRoaXMuX3RyZWF0RGF0YVNvdXJjZUFzU3RyaW5nID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xuICB9XG5cbiAgLy8hIHRlbXBsYXRlc1xuICBAQ29udGVudENoaWxkKEFyZGl1bVRhYmxlQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxuICBjaGVja2JveFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VGFibGVDaGVja2JveENvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKEFyZGl1bVRhYmxlSGVhZGVyQ2hlY2tib3hUZW1wbGF0ZURpcmVjdGl2ZSwge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICB9KVxuICBoZWFkZXJDaGVja2JveFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VGFibGVIZWFkZXJDaGVja2JveENvbnRleHQ+O1xuICBAQ29udGVudENoaWxkKEFyZGl1bVRhYmxlQ2FwdGlvblRlbXBsYXRlRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmIH0pXG4gIGNhcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2FwdGlvbkNvbnRleHQ+O1xuXG4gIHByaXZhdGUgX2l0ZW1UZW1wbGF0ZXM6IHsgW2tleTogc3RyaW5nXTogVGVtcGxhdGVSZWY8YW55PiB9ID0ge307XG4gIEBDb250ZW50Q2hpbGRyZW4oQXJkaXVtVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSlcbiAgdGVtcGxhdGVDaGlsZHJlbiE6IFF1ZXJ5TGlzdDxBcmRpdW1UYWJsZVRlbXBsYXRlRGlyZWN0aXZlPjtcblxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgY29uc3QgdGVtcGxhdGVzID0gQXJyYXkuZnJvbSh0aGlzLnRlbXBsYXRlQ2hpbGRyZW4pO1xuICAgIGZvciAoY29uc3QgaW5zdGFuY2Ugb2YgdGVtcGxhdGVzKSB7XG4gICAgICBpZiAoIWluc3RhbmNlLm5hbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoJ1thcmQtdGFibGUtdG1wXSByZXF1aXJlcyBhIHZhbHVlIHRvIGJlIHNwZWNpZmllZC4nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdGhpcy5faXRlbVRlbXBsYXRlc1tpbnN0YW5jZS5uYW1lXSA9IGluc3RhbmNlLnRlbXBsYXRlO1xuICAgIH1cbiAgfVxuXG4gIGdldEhlYWRlclRlbXBsYXRlKHRtcDogc3RyaW5nIHwgeyB0ZW1wbGF0ZTogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiB9KTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHR5cGVvZiB0bXAgPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q2VsbFRlbXBsYXRlKHRtcC50ZW1wbGF0ZSk7XG4gIH1cbiAgZ2V0SGVhZGVyQ2hlY2tib3hDb2xvcigpOiBTaW1wbGVDb21wb25lbnRDb2xvciB7XG4gICAgaWYgKHRoaXMuYXBwZWFyYW5jZSA9PSBUYWJsZUFwcGVhcmFuY2UuU3Ryb25nKSByZXR1cm4gU2ltcGxlQ29tcG9uZW50Q29sb3IuQ3VycmVudENvbG9yO1xuICAgIHJldHVybiB0aGlzLmNvbG9yO1xuICB9XG4gIGdldENlbGxUZW1wbGF0ZSh0bXA/OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+KTogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZCB7XG4gICAgLy9yZXR1cm4gdW5kZWZpbmVkXG4gICAgaWYgKCF0bXApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgLy9yZXR1cm4gdGVtcGxhdGUsIGlmIGl0IGlzIG9uZVxuICAgIGlmICh0bXAgaW5zdGFuY2VvZiBUZW1wbGF0ZVJlZikgcmV0dXJuIHRtcDtcbiAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGNhbiBiZSBmb3VuZFxuICAgIGlmICghKHRtcCBpbiB0aGlzLl9pdGVtVGVtcGxhdGVzKSkge1xuICAgICAgY29uc29sZS5lcnJvcihuZXcgRXJyb3IoYDxhcmQtdGFibGU+IGVycm9yOiBjYW5ub3QgZmluZCB0ZW1wbGF0ZSBuYW1lZCBcIiR7dG1wfVwiYCkpO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy9yZXR1cm4gdGhlIHRlbXBsYXRlXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1UZW1wbGF0ZXNbdG1wXTtcbiAgfVxuICBnZXRDZWxsU3R5bGUoY2VsbDogVGFibGVEYXRhQ29sdW1uIHwgVGFibGVTdWJoZWFkZXIpOiBzdHJpbmcge1xuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gJ3dpZHRoOnVuc2V0O21pbi13aWR0aDp1bnNldCc7XG4gICAgY29uc3Qgd2lkdGggPSB0eXBlb2YgY2VsbC53aWR0aCA9PSAnbnVtYmVyJyA/IGAke2NlbGwud2lkdGh9cHhgIDogY2VsbC53aWR0aDtcbiAgICBjb25zdCBtaW5XaWR0aCA9IHR5cGVvZiBjZWxsLm1pbldpZHRoID09ICdudW1iZXInID8gYCR7Y2VsbC5taW5XaWR0aH1weGAgOiBjZWxsLm1pbldpZHRoO1xuICAgIHJldHVybiBbYHdpZHRoOiR7d2lkdGggPz8gJ3Vuc2V0J31gLCBgbWluLXdpZHRoOiR7bWluV2lkdGggPz8gJ3Vuc2V0J31gXS5qb2luKCc7Jyk7XG4gIH1cblxuICAvLyEgY2xpY2sgJiBob3ZlciBoYW5kbGVyc1xuICBvbkNoZWNrYm94Q2xpY2soaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMudG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXgpO1xuICB9XG4gIG9uUm93Q2xpY2soaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuc2VsZWN0YWJsZVJvd3MpIHJldHVybjtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGVkKGluZGV4KTtcbiAgfVxuICBvblJvd01vdXNlT3ZlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9XG4gIG9uUm93TW91c2VFbnRlcihpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlUm93cykgcmV0dXJuO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX2l0ZW1TdG9yYWdlLmhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXgpO1xuICB9XG4gIG9uUm93TW91c2VMZWF2ZShpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlUm93cykgcmV0dXJuO1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIHRoaXMuX2l0ZW1TdG9yYWdlLnVuaGlnaGxpZ2h0SXRlbShpbmRleCk7XG4gIH1cblxuICAvLyEgc2VsZWN0IGhhbmRsZXJzXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSBzZWxlY3Rpb24gc3RhdGUgb2YgYSByb3cgaW4gdGhlIHRhYmxlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWQgYSBib29sZWFuIHZhbHVlIGluZGljYXRpbmcgaWYgdGhlIHJvdyBpcyBjdXJyZW50bHkgc2VsZWN0ZWQuXG4gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHJvdyBpbiB0aGUgdGFibGUuXG4gICAqL1xuICB0b2dnbGVSb3dTZWxlY3RlZChpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmlzSXRlbVNlbGVjdGVkKGluZGV4KSkge1xuICAgICAgY29uc3QgdW5zZWxlY3RlZCA9IHRoaXMuX2l0ZW1TdG9yYWdlLnVuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgICB0aGlzLnVuc2VsZWN0Um93RXZlbnQuZW1pdCh1bnNlbGVjdGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgW3NlbGVjdGVkLCBmYWlsZWRdID0gdGhpcy5faXRlbVN0b3JhZ2Uuc2VsZWN0SXRlbShpbmRleCk7XG4gICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xuICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XG4gICAgfVxuICAgIHRoaXMuX2VtaXRTZWxlY3QoKTtcbiAgfVxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgc2VsZWN0aW9uIHN0YXRlIG9mIGFsbCByb3dzIGluIHRoZSB0YWJsZS5cbiAgICovXG4gIHRvZ2dsZUFsbFJvd3NTZWxlY3RlZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXRlbVN0b3JhZ2UuYXJlQWxsU2VsZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHVuc2VsZWN0ZWQgPSB0aGlzLl9pdGVtU3RvcmFnZS51bnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy51bnNlbGVjdFJvd0V2ZW50LmVtaXQodW5zZWxlY3RlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IFtzZWxlY3RlZCwgZmFpbGVkXSA9IHRoaXMuX2l0ZW1TdG9yYWdlLnNlbGVjdEFsbCgpO1xuICAgICAgdGhpcy5zZWxlY3RSb3dFdmVudC5lbWl0KHNlbGVjdGVkKTtcbiAgICAgIHRoaXMuZmFpbGVkU2VsZWN0Um93RXZlbnQuZW1pdChmYWlsZWQpO1xuICAgIH1cbiAgICB0aGlzLl9lbWl0U2VsZWN0KCk7XG4gIH1cbiAgcHJpdmF0ZSBfZW1pdFNlbGVjdCgpOiB2b2lkIHtcbiAgICBjb25zdCB2ID0gdGhpcy5faXRlbVN0b3JhZ2UudmFsdWU7XG4gICAgdGhpcy5zZWxlY3RlZFJvd3NDaGFuZ2VFdmVudC5lbWl0KHYpO1xuICB9XG4gIGlzQ2VsbENoZWNrYm94KGNlbGw6IGFueSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgY2VsbCA9PSAnb2JqZWN0JyAmJiAnX2FyZENoZWNrYm94JyBpbiBjZWxsICYmICdpbmRleCcgaW4gY2VsbDtcbiAgfVxuICBpc0hlYWRlckNlbGxDaGVja2JveChjZWxsOiBIZWFkZXJDZWxsKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZGF0YUNlbGwgPSBjZWxsLmNlbGw7XG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoZGF0YUNlbGwpKSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKHR5cGVvZiBkYXRhQ2VsbC5kYXRhU291cmNlID09ICdzdHJpbmcnKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIGRhdGFDZWxsLmRhdGFTb3VyY2UudHlwZSA9PSAnY2hlY2tib3gnO1xuICB9XG4gIGlzSGVhZGVyQ2VsbFNvcnRhYmxlKGNlbGw6IEhlYWRlckNlbGwpOiBib29sZWFuIHtcbiAgICBjb25zdCBkYXRhQ2VsbCA9IGNlbGwuY2VsbDtcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihkYXRhQ2VsbCkpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gZGF0YUNlbGwuc29ydGFibGUgPz8gZmFsc2U7XG4gIH1cblxuICBAT3V0cHV0KCdzZWxlY3RlZFJvd3NDaGFuZ2UnKSBzZWxlY3RlZFJvd3NDaGFuZ2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG4gIEBPdXRwdXQoJ2ZhaWxlZFNlbGVjdFJvdycpIGZhaWxlZFNlbGVjdFJvd0V2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcbiAgQE91dHB1dCgnc2VsZWN0Um93Jykgc2VsZWN0Um93RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuICBAT3V0cHV0KCd1bnNlbGVjdFJvdycpIHVuc2VsZWN0Um93RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xuXG4gIC8vISBjb250ZXh0c1xuICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiwgaW5kZXg6IG51bWJlcik6IFRhYmxlSGVhZGVyQ29udGV4dCB8IG51bGw7XG4gIGdldEhlYWRlckNvbnRleHQoY2VsbDogVGFibGVTdWJoZWFkZXIsIGluZGV4OiBudW1iZXIpOiBUYWJsZVN1YmhlYWRlckNvbnRleHQgfCBudWxsO1xuICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcbiAgZ2V0SGVhZGVyQ29udGV4dChjZWxsOiBUYWJsZURhdGFDb2x1bW4gfCBUYWJsZVN1YmhlYWRlciwgaW5kZXg6IG51bWJlcik6IFRhYmxlSGVhZGVyQ29udGV4dCB8IFRhYmxlU3ViaGVhZGVyQ29udGV4dCB8IG51bGwge1xuICAgIGlmICh0eXBlb2YgY2VsbC5oZWFkZXIgIT0gJ3N0cmluZycpIHJldHVybiBudWxsO1xuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJGltcGxpY2l0OiBjZWxsLmhlYWRlcixcbiAgICAgICAgaGVhZGVyOiBjZWxsLmhlYWRlcixcbiAgICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogY2VsbC5oZWFkZXIsXG4gICAgICBoZWFkZXI6IGNlbGwuaGVhZGVyLFxuICAgICAgc29ydGFibGU6IGNlbGwuc29ydGFibGUgPz8gZmFsc2UsXG4gICAgICBzb3J0VHlwZTogdGhpcy5faXRlbVN0b3JhZ2UuZ2V0Q29sdW1uU29ydFR5cGUoaW5kZXgpLFxuICAgICAgb25UcmlnZ2VyU29ydDogKGV2ZW50PzogRXZlbnQpID0+IHRoaXMuX2l0ZW1TdG9yYWdlLnRvZ2dsZUN1cnJlbnRTb3J0Q29sdW1uKGluZGV4KSxcbiAgICAgIG9uVHJpZ2dlclJlc2V0U29ydDogKGV2ZW50PzogRXZlbnQpID0+IHtcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2UucmVzZXRTb3J0KCk7XG4gICAgICAgIGV2ZW50Py5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBldmVudD8uc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cbiAgZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KCk6IFRhYmxlSGVhZGVyQ2hlY2tib3hDb250ZXh0IHtcbiAgICBsZXQgc3RhdGU6IENoZWNrYm94U3RhdGUgPSBDaGVja2JveFN0YXRlLlVuc2VsZWN0ZWQ7XG4gICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmlzQW55SXRlbVNlbGVjdGVkKSB7XG4gICAgICBzdGF0ZSA9IENoZWNrYm94U3RhdGUuSW5kZXRlcm1pbmF0ZTtcbiAgICAgIGlmICh0aGlzLl9pdGVtU3RvcmFnZS5hcmVBbGxTZWxlY3RlZCkge1xuICAgICAgICBzdGF0ZSA9IENoZWNrYm94U3RhdGUuU2VsZWN0ZWQ7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAkaW1wbGljaXQ6IHN0YXRlLFxuICAgICAgc3RhdGUsXG4gICAgICBvbkNoYW5nZTogKCkgPT4ge1xuICAgICAgICB0aGlzLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIGdldENoZWNrYm94Q29udGV4dChpbmRleDogbnVtYmVyKTogVGFibGVDaGVja2JveENvbnRleHQge1xuICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9pdGVtU3RvcmFnZS5pdGVtcy5maW5kKHYgPT4gdi5pbmRleCA9PSBpbmRleCkhO1xuICAgIGNvbnN0IHNlbGVjdGVkID0gaXRlbS5zZWxlY3RlZCA/PyBmYWxzZTtcbiAgICBjb25zdCBkaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPz8gZmFsc2U7XG4gICAgcmV0dXJuIHtcbiAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWQsXG4gICAgICBzZWxlY3RlZCxcbiAgICAgIGRpc2FibGVkLFxuICAgICAgb25DaGFuZ2U6ICgpID0+IHtcbiAgICAgICAgdGhpcy5vbkNoZWNrYm94Q2xpY2soaW5kZXgpO1xuICAgICAgfSxcbiAgICB9O1xuICB9XG59XG4iLCI8dGFibGUgY2xhc3M9XCJhcmQtdGFibGVcIiBbbmdDbGFzc109XCJuZ0NsYXNzZXNcIj5cclxuICAgIDxjYXB0aW9uXHJcbiAgICAgICAgKm5nSWY9XCJjYXB0aW9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvblwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvblRlbXBsYXRlIGxldC1jYXB0aW9uVGV4dD5cclxuICAgICAgICAgICAgICAgIHt7IGNhcHRpb25UZXh0IH19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRlbXBsYXRlID8/IGRlZmF1bHRDYXB0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXB0aW9uPlxyXG4gICAgPHRoZWFkIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXJcIj5cclxuICAgICAgICA8dHIgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGhlYWRlckNlbGxzXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2VsbC5jZWxsLmNlbGxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuXCJcclxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJjZWxsLmNvbHNwYW4gPiAxID8gJ2NvbGdyb3VwJyA6ICdjb2wnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19jZWxsLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fc29ydGFibGVdPVwiaXNIZWFkZXJDZWxsU29ydGFibGUoY2VsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjZWxsLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluV2lkdGhdPVwiY2VsbC5taW5XaWR0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlckNoZWNrYm94VGVtcGxhdGUgbGV0LXN0YXRlIGxldC1vbkNoYW5nZT1cIm9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3N0YXRlXT1cInN0YXRlXCIgW2NvbG9yXT1cImdldEhlYWRlckNoZWNrYm94Q29sb3IoKVwiIHVuc2VsZWN0ZWRDb2xvcj1cImN1cnJlbnRDb2xvclwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyQ2hlY2tib3hUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyQ2hlY2tib3hUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmYXVsdEhlYWRlckNlbGxUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0YWJsZT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0VHlwZT1cInNvcnRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1vblRyaWdnZXJTb3J0PVwib25UcmlnZ2VyU29ydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb25UcmlnZ2VyUmVzZXRTb3J0PVwib25UcmlnZ2VyUmVzZXRTb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItdGVtcGxhdGUtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXNvcnRhYmxlXT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLW5vbnNvcnRhYmxlXT1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaWdnZXJTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5Fc2MpPVwib25UcmlnZ2VyUmVzZXRTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnRcIj57eyBjb250ZW50IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1zb3J0LWljb25cIiAqbmdJZj1cInNvcnRUeXBlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmQtaWNvbiAqbmdJZj1cInNvcnRUeXBlID09ICdhc2NlbmRpbmcnXCI+c291dGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZC1pY29uICpuZ0lmPVwic29ydFR5cGUgPT0gJ2Rlc2NlbmRpbmcnXCI+bm9ydGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRIZWFkZXJUZW1wbGF0ZShjZWxsLmNlbGwuaGVhZGVyKSA/PyBkZWZhdWx0SGVhZGVyQ2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNlbGwuY2VsbCwgaW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwicm93LmlzRW1wdHlcIiBjbGFzcz1cImFyZC10YWJsZV9fZW1wdHktcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmQtdGFibGVfX2VtcHR5LWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmlzRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhcmQtdGFibGVfX2JvZHktcm93XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX3NlbGVjdGVkLXJvd109XCJyb3cuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9faGlnaGxpZ2h0ZWQtcm93XT1cInJvdy5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19kaXNhYmxlZC1yb3ddPVwicm93LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX2JvbGQtcm93XT1cInJvdy5ib2xkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd01vdXNlRW50ZXIocm93SW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dNb3VzZUxlYXZlKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3cuZGF0YTsgbGV0IGNlbGxJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVG1wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2VsbC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldENlbGxTdHlsZShyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDaGVja2JveFRlbXBsYXRlIGxldC1pc0NoZWNrZWQgbGV0LW9uQ2hhbmdlPVwib25DaGFuZ2VcIiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3NlbGVjdGVkXT1cImlzQ2hlY2tlZFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFRlbXBsYXRlID8/IGRlZmF1bHRDaGVja2JveFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENoZWNrYm94Q29udGV4dChyb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q2VsbFRlbXBsYXRlKHJvdy5kYXRhQ29sdW1uc1tjZWxsSW5kZXhdLnRlbXBsYXRlKSA/PyBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjZWxsIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uaXNSb3dIZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fYm9keS1jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uY2VsbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fY2hlY2tib3gtY2VsbF09XCJpc0NlbGxDaGVja2JveChjZWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRtcFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5pc1Jvd0hlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5LWNlbGwgYXJkLXRhYmxlX19yb3ctaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5jZWxsQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjZWxsVG1wXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG4gICAgPHRmb290IGNsYXNzPVwiYXJkLXRhYmxlX19mb290XCIgKm5nSWY9XCJjYW5EaXNwbGF5UGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImFyZC10YWJsZV9fZm9vdC1yb3dcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJkLXRhYmxlX19wYWdpbmF0aW9uLWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgPGFyZC10YWJsZS1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicGFnaW5hdGlvbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsocGFnZSldPVwicGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25EaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhpdGVtc1BlclBhZ2UpXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsaWduXT1cInBhZ2luYXRpb25BbGlnblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VUZXh0XT1cIml0ZW1zUGVyUGFnZVRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50SXRlbXNGb3JtYXRGbl09XCJjdXJyZW50SXRlbXNGb3JtYXRGblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcmQtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuPC90YWJsZT4iXX0=
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi90YWJsZS90YWJsZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS9zcmMvbGliL3RhYmxlL3RhYmxlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBRU4sV0FBVyxFQUNYLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUscUJBQXFCLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzNFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUMzRCxPQUFPLEVBQXdCLGVBQWUsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ25HLE9BQU8sRUFBRSxjQUFjLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUM3RSxPQUFPLEVBQTJCLGdCQUFnQixFQUF3QixNQUFNLHNCQUFzQixDQUFDO0FBQ3ZHLE9BQU8sRUFDTCxtQ0FBbUMsRUFDbkMsb0NBQW9DLEVBQ3BDLDBDQUEwQyxFQUMxQyw0QkFBNEIsR0FDN0IsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBRUwsY0FBYyxFQUNkLGVBQWUsRUFNZix1QkFBdUIsRUFFdkIsWUFBWSxHQUViLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFNBQVMsQ0FBQzs7Ozs7O0FBUzNDLE1BQU0sT0FBTyxv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QWtCO3NCQUEzQixNQUFNO2dCQUlILElBQUk7c0JBRFAsS0FBSztnQkFPSSxVQUFVO3NCQUFuQixNQUFNO2dCQW9DSCxPQUFPO3NCQURWLEtBQUs7Z0JBTUYsSUFBSTtzQkFEUCxLQUFLO2dCQVdGLHVCQUF1QjtzQkFEMUIsS0FBSztnQkFVTixnQkFBZ0I7c0JBRGYsWUFBWTt1QkFBQyxvQ0FBb0MsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBS3pFLHNCQUFzQjtzQkFIckIsWUFBWTt1QkFBQywwQ0FBMEMsRUFBRTt3QkFDeEQsSUFBSSxFQUFFLFdBQVc7cUJBQ2xCO2dCQUdELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxtQ0FBbUMsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBS3hFLGdCQUFnQjtzQkFEZixlQUFlO3VCQUFDLDRCQUE0QjtnQkFtSGYsdUJBQXVCO3NCQUFwRCxNQUFNO3VCQUFDLG9CQUFvQjtnQkFDRCxvQkFBb0I7c0JBQTlDLE1BQU07dUJBQUMsaUJBQWlCO2dCQUNKLGNBQWM7c0JBQWxDLE1BQU07dUJBQUMsV0FBVztnQkFDSSxnQkFBZ0I7c0JBQXRDLE1BQU07dUJBQUMsYUFBYSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQWZ0ZXJDb250ZW50SW5pdCxcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICBDb21wb25lbnQsXHJcbiAgQ29udGVudENoaWxkLFxyXG4gIENvbnRlbnRDaGlsZHJlbixcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIFF1ZXJ5TGlzdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgY29lcmNlQm9vbGVhblByb3BlcnR5LCBjb2VyY2VOdW1iZXJQcm9wZXJ0eSB9IGZyb20gJ0BhcmRpdW0tdWkvZGV2a2l0JztcclxuaW1wb3J0IHsgaXNEZWZpbmVkIH0gZnJvbSAnc2ltcGxlLWJvb2wnO1xyXG5pbXBvcnQgeyBfRm9jdXNhYmxlQ29tcG9uZW50QmFzZSB9IGZyb20gJy4uL19pbnRlcm5hbC9mb2N1c2FibGUtY29tcG9uZW50JztcclxuaW1wb3J0IHsgQ2hlY2tib3hTdGF0ZSB9IGZyb20gJy4uL2NoZWNrYm94L2NoZWNrYm94LnR5cGVzJztcclxuaW1wb3J0IHsgQ3VycmVudEl0ZW1zRm9ybWF0Rm4sIFBhZ2luYXRpb25BbGlnbiB9IGZyb20gJy4uL3RhYmxlLXBhZ2luYXRpb24vdGFibGUtcGFnaW5hdGlvbi50eXBlcyc7XHJcbmltcG9ydCB7IENvbXBvbmVudENvbG9yLCBTaW1wbGVDb21wb25lbnRDb2xvciB9IGZyb20gJy4uL3R5cGVzL2NvbG9ycy50eXBlcyc7XHJcbmltcG9ydCB7IEFyZFRhYmxlUm93LCBIZWFkZXJDZWxsLCBUYWJsZUl0ZW1TdG9yYWdlLCBUYWJsZUl0ZW1TdG9yYWdlSG9zdCB9IGZyb20gJy4vdGFibGUtaXRlbS1zdG9yYWdlJztcclxuaW1wb3J0IHtcclxuICBBcmRpdW1UYWJsZUNhcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSxcclxuICBBcmRpdW1UYWJsZUNoZWNrYm94VGVtcGxhdGVEaXJlY3RpdmUsXHJcbiAgQXJkaXVtVGFibGVIZWFkZXJDaGVja2JveFRlbXBsYXRlRGlyZWN0aXZlLFxyXG4gIEFyZGl1bVRhYmxlVGVtcGxhdGVEaXJlY3RpdmUsXHJcbn0gZnJvbSAnLi90YWJsZS5kaXJlY3RpdmVzJztcclxuaW1wb3J0IHtcclxuICBTb3J0VHlwZSxcclxuICBUYWJsZUFsaWduVHlwZSxcclxuICBUYWJsZUFwcGVhcmFuY2UsXHJcbiAgVGFibGVDYXB0aW9uQ29udGV4dCxcclxuICBUYWJsZUNoZWNrYm94Q29udGV4dCxcclxuICBUYWJsZURhdGFDb2x1bW4sXHJcbiAgVGFibGVIZWFkZXJDaGVja2JveENvbnRleHQsXHJcbiAgVGFibGVIZWFkZXJDb250ZXh0LFxyXG4gIFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5LFxyXG4gIFRhYmxlU3ViaGVhZGVyLFxyXG4gIFRhYmxlVmFyaWFudCxcclxuICBUYWJsZVN1YmhlYWRlckNvbnRleHQsXHJcbn0gZnJvbSAnLi90YWJsZS50eXBlcyc7XHJcbmltcG9ydCB7IGlzVGFibGVTdWJoZWFkZXIgfSBmcm9tICcuL3V0aWxzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXJkLXRhYmxlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxufSlcclxuZXhwb3J0IGNsYXNzIEFyZGl1bVRhYmxlQ29tcG9uZW50IGV4dGVuZHMgX0ZvY3VzYWJsZUNvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBUYWJsZUl0ZW1TdG9yYWdlSG9zdCwgQWZ0ZXJDb250ZW50SW5pdCB7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlbVN0b3JhZ2UgPSBuZXcgVGFibGVJdGVtU3RvcmFnZSh0aGlzKTtcclxuXHJcbiAgcmVhZG9ubHkgREVGQVVMVFMgPSB7XHJcbiAgICByb3dEaXNhYmxlZEZyb206ICdkaXNhYmxlZCcsXHJcbiAgICByb3dCb2xkRnJvbTogJ2JvbGQnLFxyXG4gIH07XHJcblxyXG4gIEBJbnB1dCgpIHJvd0Rpc2FibGVkRnJvbT86IHN0cmluZztcclxuICBASW5wdXQoKSByb3dCb2xkRnJvbT86IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBfaW52ZXJ0Um93RGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBpbnZlcnRSb3dEaXNhYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dEaXNhYmxlZDtcclxuICB9XHJcbiAgc2V0IGludmVydFJvd0Rpc2FibGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5faW52ZXJ0Um93RGlzYWJsZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9pbnZlcnRSb3dCb2xkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgaW52ZXJ0Um93Qm9sZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9pbnZlcnRSb3dCb2xkO1xyXG4gIH1cclxuICBzZXQgaW52ZXJ0Um93Qm9sZCh2OiBhbnkpIHtcclxuICAgIHRoaXMuX2ludmVydFJvd0JvbGQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZWxlY3RhYmxlUm93czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHNlbGVjdGFibGVSb3dzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGFibGVSb3dzO1xyXG4gIH1cclxuICBzZXQgc2VsZWN0YWJsZVJvd3ModjogYW55KSB7XHJcbiAgICB0aGlzLl9zZWxlY3RhYmxlUm93cyA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIEBJbnB1dCgpIGNhcHRpb24/OiBzdHJpbmc7XHJcblxyXG4gIEBJbnB1dCgpIGlzTG9hZGluZz86IGJvb2xlYW47XHJcbiAgQElucHV0KCkgbG9hZGluZ1Byb2dyZXNzPzogbnVtYmVyOyAvL1RPRE8gYWRkIHByb2dyZXNzIGJhclxyXG5cclxuICAvLyEgYXBwZWFyYW5jZVxyXG4gIEBJbnB1dCgpIGFwcGVhcmFuY2U6IFRhYmxlQXBwZWFyYW5jZSA9IFRhYmxlQXBwZWFyYW5jZS5TdHJvbmc7XHJcbiAgQElucHV0KCkgdmFyaWFudDogVGFibGVWYXJpYW50ID0gVGFibGVWYXJpYW50LlJvdW5kZWQ7XHJcbiAgQElucHV0KCkgY29sb3I6IENvbXBvbmVudENvbG9yID0gQ29tcG9uZW50Q29sb3IuUHJpbWFyeTtcclxuICBASW5wdXQoKSBhbGlnbjogVGFibGVBbGlnblR5cGUgPSBUYWJsZUFsaWduVHlwZS5DZW50ZXJMZWZ0O1xyXG4gIEBJbnB1dCgpIGhlYWRlckFsaWduOiBUYWJsZUFsaWduVHlwZSA9IFRhYmxlQWxpZ25UeXBlLkNlbnRlckxlZnQ7XHJcblxyXG4gIHByaXZhdGUgX2NvbXBhY3Q6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBjb21wYWN0KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NvbXBhY3Q7XHJcbiAgfVxyXG4gIHNldCBjb21wYWN0KHY6IGFueSkge1xyXG4gICAgdGhpcy5fY29tcGFjdCA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3plYnJhOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgemVicmEoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5femVicmE7XHJcbiAgfVxyXG4gIHNldCB6ZWJyYSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3plYnJhID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc3RpY2t5SGVhZGVyOiBib29sZWFuID0gZmFsc2U7XHJcbiAgQElucHV0KClcclxuICBnZXQgc3RpY2t5SGVhZGVyKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3N0aWNreUhlYWRlcjtcclxuICB9XHJcbiAgc2V0IHN0aWNreUhlYWRlcih2OiBhbnkpIHtcclxuICAgIHRoaXMuX3N0aWNreUhlYWRlciA9IGNvZXJjZUJvb2xlYW5Qcm9wZXJ0eSh2KTtcclxuICB9XHJcblxyXG4gIGdldCBuZ0NsYXNzZXMoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBbXHJcbiAgICAgIGBhcmQtYXBwZWFyYW5jZS0ke3RoaXMuYXBwZWFyYW5jZX1gLFxyXG4gICAgICBgYXJkLXZhcmlhbnQtJHt0aGlzLnZhcmlhbnR9YCxcclxuICAgICAgYGFyZC1jb2xvci0ke3RoaXMuY29sb3J9YCxcclxuICAgICAgYGFyZC1hbGlnbi0ke3RoaXMuYWxpZ259YCxcclxuICAgICAgYGFyZC1oZWFkZXItYWxpZ24tJHt0aGlzLmhlYWRlckFsaWdufWAsXHJcbiAgICAgIHRoaXMuY29tcGFjdCA/ICdhcmQtY29tcGFjdCcgOiAnJyxcclxuICAgICAgdGhpcy56ZWJyYSA/ICdhcmQtemVicmEtdGFibGUnIDogJycsXHJcbiAgICAgIHRoaXMuc2VsZWN0YWJsZVJvd3MgPyAnYXJkLXNlbGVjdGFibGUtcm93cycgOiAnJyxcclxuICAgICAgdGhpcy5zdGlja3lIZWFkZXIgPyAnYXJkLXN0aWNreS1oZWFkZXInIDogJycsXHJcbiAgICAgIHRoaXMuaXNMb2FkaW5nID8gJ2FyZC10YWJsZS1sb2FkaW5nJyA6ICcnLFxyXG4gICAgXS5qb2luKCcgJyk7XHJcbiAgfVxyXG5cclxuICAvLyEgcGFnaW5hdGlvblxyXG4gIHByaXZhdGUgX3BhZ2luYXRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBhZ2luYXRlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdpbmF0ZWQ7XHJcbiAgfVxyXG4gIHNldCBwYWdpbmF0ZWQodjogYW55KSB7XHJcbiAgICB0aGlzLl9wYWdpbmF0ZWQgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBASW5wdXQoKSBwYWdpbmF0aW9uU3RyYXRlZ3k6IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5ID0gVGFibGVQYWdpbmF0aW9uU3RyYXRlZ3kuTm9vcDtcclxuXHJcbiAgQElucHV0KCkgcGFnaW5hdGlvbk9wdGlvbnM6IG51bWJlcltdIHwgeyB2YWx1ZTogbnVtYmVyOyBsYWJlbDogc3RyaW5nIH1bXSA9IFsxMCwgMjUsIDUwXTtcclxuICBASW5wdXQoKSB0b3RhbEl0ZW1zPzogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25Db2xvcjogQ29tcG9uZW50Q29sb3IgPSBDb21wb25lbnRDb2xvci5Ob25lO1xyXG4gIEBJbnB1dCgpIHBhZ2luYXRpb25BbGlnbjogUGFnaW5hdGlvbkFsaWduID0gUGFnaW5hdGlvbkFsaWduLlNwbGl0O1xyXG4gIEBJbnB1dCgpIGl0ZW1zUGVyUGFnZVRleHQ6IHN0cmluZyA9ICdJdGVtcyBwZXIgcGFnZTonO1xyXG4gIEBJbnB1dCgpIGN1cnJlbnRJdGVtc0Zvcm1hdEZuOiBDdXJyZW50SXRlbXNGb3JtYXRGbiA9ICh7IGN1cnJlbnRJdGVtc0ZpcnN0LCBjdXJyZW50SXRlbXNMYXN0LCB0b3RhbEl0ZW1zIH0pID0+IHtcclxuICAgIHJldHVybiBgJHtjdXJyZW50SXRlbXNGaXJzdH0g4oCTICR7Y3VycmVudEl0ZW1zTGFzdH0gb2YgJHt0b3RhbEl0ZW1zfWA7XHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSBfcGFnZUZpbGxSZW1haW5pbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBwYWdlRmlsbFJlbWFpbmluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlRmlsbFJlbWFpbmluZztcclxuICB9XHJcbiAgc2V0IHBhZ2VGaWxsUmVtYWluaW5nKHY6IGFueSkge1xyXG4gICAgdGhpcy5fcGFnZUZpbGxSZW1haW5pbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wYWdpbmF0aW9uRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCBwYWdpbmF0aW9uRGlzYWJsZWQoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkO1xyXG4gIH1cclxuICBzZXQgcGFnaW5hdGlvbkRpc2FibGVkKHY6IGFueSkge1xyXG4gICAgdGhpcy5fcGFnaW5hdGlvbkRpc2FibGVkID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXNlRmlyc3RMYXN0QnV0dG9uczogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHVzZUZpcnN0TGFzdEJ1dHRvbnMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fdXNlRmlyc3RMYXN0QnV0dG9ucztcclxuICB9XHJcbiAgc2V0IHVzZUZpcnN0TGFzdEJ1dHRvbnModjogYW55KSB7XHJcbiAgICB0aGlzLl91c2VGaXJzdExhc3RCdXR0b25zID0gY29lcmNlQm9vbGVhblByb3BlcnR5KHYpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaXRlbXNQZXJQYWdlOiBudW1iZXIgPSA1MDtcclxuICBASW5wdXQoKVxyXG4gIGdldCBpdGVtc1BlclBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtc1BlclBhZ2U7XHJcbiAgfVxyXG4gIHNldCBpdGVtc1BlclBhZ2UodjogYW55KSB7XHJcbiAgICB0aGlzLl9pdGVtc1BlclBhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcclxuICB9XHJcbiAgQE91dHB1dCgpIGl0ZW1zUGVyUGFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG5cclxuICBwcml2YXRlIF9wYWdlOiBudW1iZXIgPSAxO1xyXG4gIEBJbnB1dCgpXHJcbiAgZ2V0IHBhZ2UoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9wYWdlO1xyXG4gIH1cclxuICBzZXQgcGFnZSh2OiBhbnkpIHtcclxuICAgIHRoaXMuX3BhZ2UgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2KTtcclxuICB9XHJcbiAgQE91dHB1dCgpIHBhZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgZ2V0IGlzRGVmaW5lZFRvdGFsSXRlbXMoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gKHRoaXMucGFnaW5hdGlvblN0cmF0ZWd5ID09IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3AgJiYgaXNEZWZpbmVkKHRoaXMudG90YWxJdGVtcykpIHx8IHRoaXMucGFnaW5hdGlvblN0cmF0ZWd5ICE9IFRhYmxlUGFnaW5hdGlvblN0cmF0ZWd5Lk5vb3A7XHJcbiAgfVxyXG4gIGdldCBjYW5EaXNwbGF5UGFnaW5hdGlvbigpOiBib29sZWFuIHtcclxuICAgIC8vcHJldHRpZXItaWdub3JlXHJcbiAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZWQgJiYgdGhpcy5pc0RlZmluZWRUb3RhbEl0ZW1zO1xyXG4gIH1cclxuXHJcbiAgLy8hIGl0ZW0gc3RvcmFnZSBnZXR0ZXJzXHJcbiAgZ2V0IGhlYWRlckNlbGxzKCk6IEhlYWRlckNlbGxbXVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9pdGVtU3RvcmFnZS5oZWFkZXJDZWxscztcclxuICB9XHJcbiAgZ2V0IGRhdGFSb3dzKCk6IEFyZFRhYmxlUm93W10ge1xyXG4gICAgY29uc3QgaXRlbXM6IEFyZFRhYmxlUm93W10gPSB0aGlzLl9pdGVtU3RvcmFnZS5wYWdpbmF0ZWRJdGVtcztcclxuXHJcbiAgICBpZiAoIXRoaXMucGFnZUZpbGxSZW1haW5pbmcpIHJldHVybiBpdGVtcztcclxuICAgIGlmICghdGhpcy5pc0RlZmluZWRUb3RhbEl0ZW1zKSB7XHJcbiAgICAgIHRocm93IG5ldyBFcnJvcignPGFyZC10YWJsZT4gcmVxdWlyZXMgW3RvdGFsSXRlbXNdIHRvIGJlIGRlZmluZWQuJyk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wYWdlID09IDEpIHJldHVybiBpdGVtcztcclxuICAgIGZvciAobGV0IGkgPSBpdGVtcy5sZW5ndGg7IGkgPCB0aGlzLml0ZW1zUGVyUGFnZTsgaSsrKSB7XHJcbiAgICAgIGl0ZW1zLnB1c2goe1xyXG4gICAgICAgIGl0ZW1EYXRhOiBudWxsLFxyXG4gICAgICAgIGluZGV4OiBpLFxyXG4gICAgICAgIGRhdGE6IFtdLFxyXG4gICAgICAgIGRhdGFDb2x1bW5zOiBbXSxcclxuICAgICAgICBpc0VtcHR5OiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBpdGVtcztcclxuICB9XHJcblxyXG4gIC8vISBjb2x1bW5zL2RhdGEgc2V0dGVyc1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGNvbHVtbnModjogKFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKVtdKSB7XHJcbiAgICB0aGlzLl9pdGVtU3RvcmFnZS5zZXRDb2x1bW5zKHYpO1xyXG4gIH1cclxuICBwcml2YXRlIF9kYXRhOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGRhdGEodjogYW55W10pIHtcclxuICAgIHRoaXMuX2RhdGEgPSB2O1xyXG4gICAgdGhpcy5faXRlbVN0b3JhZ2Uuc2V0SXRlbXModik7XHJcbiAgfVxyXG4gIGdldCBkYXRhKCk6IGFueVtdIHtcclxuICAgIHJldHVybiB0aGlzLl9kYXRhO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJlYXREYXRhU291cmNlQXNTdHJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKVxyXG4gIGdldCB0cmVhdERhdGFTb3VyY2VBc1N0cmluZygpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl90cmVhdERhdGFTb3VyY2VBc1N0cmluZztcclxuICB9XHJcbiAgc2V0IHRyZWF0RGF0YVNvdXJjZUFzU3RyaW5nKHY6IGFueSkge1xyXG4gICAgdGhpcy5fdHJlYXREYXRhU291cmNlQXNTdHJpbmcgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkodik7XHJcbiAgfVxyXG5cclxuICAvLyEgdGVtcGxhdGVzXHJcbiAgQENvbnRlbnRDaGlsZChBcmRpdW1UYWJsZUNoZWNrYm94VGVtcGxhdGVEaXJlY3RpdmUsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSlcclxuICBjaGVja2JveFRlbXBsYXRlPzogVGVtcGxhdGVSZWY8VGFibGVDaGVja2JveENvbnRleHQ+O1xyXG4gIEBDb250ZW50Q2hpbGQoQXJkaXVtVGFibGVIZWFkZXJDaGVja2JveFRlbXBsYXRlRGlyZWN0aXZlLCB7XHJcbiAgICByZWFkOiBUZW1wbGF0ZVJlZixcclxuICB9KVxyXG4gIGhlYWRlckNoZWNrYm94VGVtcGxhdGU/OiBUZW1wbGF0ZVJlZjxUYWJsZUhlYWRlckNoZWNrYm94Q29udGV4dD47XHJcbiAgQENvbnRlbnRDaGlsZChBcmRpdW1UYWJsZUNhcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KVxyXG4gIGNhcHRpb25UZW1wbGF0ZT86IFRlbXBsYXRlUmVmPFRhYmxlQ2FwdGlvbkNvbnRleHQ+O1xyXG5cclxuICBwcml2YXRlIF9pdGVtVGVtcGxhdGVzOiB7IFtrZXk6IHN0cmluZ106IFRlbXBsYXRlUmVmPGFueT4gfSA9IHt9O1xyXG4gIEBDb250ZW50Q2hpbGRyZW4oQXJkaXVtVGFibGVUZW1wbGF0ZURpcmVjdGl2ZSlcclxuICB0ZW1wbGF0ZUNoaWxkcmVuITogUXVlcnlMaXN0PEFyZGl1bVRhYmxlVGVtcGxhdGVEaXJlY3RpdmU+O1xyXG5cclxuICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICBjb25zdCB0ZW1wbGF0ZXMgPSBBcnJheS5mcm9tKHRoaXMudGVtcGxhdGVDaGlsZHJlbik7XHJcbiAgICBmb3IgKGNvbnN0IGluc3RhbmNlIG9mIHRlbXBsYXRlcykge1xyXG4gICAgICBpZiAoIWluc3RhbmNlLm5hbWUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKG5ldyBFcnJvcignW2FyZC10YWJsZS10bXBdIHJlcXVpcmVzIGEgdmFsdWUgdG8gYmUgc3BlY2lmaWVkLicpKTtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLl9pdGVtVGVtcGxhdGVzW2luc3RhbmNlLm5hbWVdID0gaW5zdGFuY2UudGVtcGxhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRIZWFkZXJUZW1wbGF0ZSh0bXA6IHN0cmluZyB8IHsgdGVtcGxhdGU6IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4gfSk6IFRlbXBsYXRlUmVmPGFueT4gfCB1bmRlZmluZWQge1xyXG4gICAgaWYgKHR5cGVvZiB0bXAgPT0gJ3N0cmluZycpIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICByZXR1cm4gdGhpcy5nZXRDZWxsVGVtcGxhdGUodG1wLnRlbXBsYXRlKTtcclxuICB9XHJcbiAgZ2V0SGVhZGVyQ2hlY2tib3hDb2xvcigpOiBTaW1wbGVDb21wb25lbnRDb2xvciB7XHJcbiAgICBpZiAodGhpcy5hcHBlYXJhbmNlID09IFRhYmxlQXBwZWFyYW5jZS5TdHJvbmcpIHJldHVybiBTaW1wbGVDb21wb25lbnRDb2xvci5DdXJyZW50Q29sb3I7XHJcbiAgICByZXR1cm4gdGhpcy5jb2xvcjtcclxuICB9XHJcbiAgZ2V0Q2VsbFRlbXBsYXRlKHRtcD86IHN0cmluZyB8IFRlbXBsYXRlUmVmPGFueT4pOiBUZW1wbGF0ZVJlZjxhbnk+IHwgdW5kZWZpbmVkIHtcclxuICAgIC8vcmV0dXJuIHVuZGVmaW5lZFxyXG4gICAgaWYgKCF0bXApIHJldHVybiB1bmRlZmluZWQ7XHJcbiAgICAvL3JldHVybiB0ZW1wbGF0ZSwgaWYgaXQgaXMgb25lXHJcbiAgICBpZiAodG1wIGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHJldHVybiB0bXA7XHJcbiAgICAvL2NoZWNrIGlmIHRoZSBuYW1lIGNhbiBiZSBmb3VuZFxyXG4gICAgaWYgKCEodG1wIGluIHRoaXMuX2l0ZW1UZW1wbGF0ZXMpKSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IobmV3IEVycm9yKGA8YXJkLXRhYmxlPiBlcnJvcjogY2Fubm90IGZpbmQgdGVtcGxhdGUgbmFtZWQgXCIke3RtcH1cImApKTtcclxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcclxuICAgIH1cclxuICAgIC8vcmV0dXJuIHRoZSB0ZW1wbGF0ZVxyXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1UZW1wbGF0ZXNbdG1wXTtcclxuICB9XHJcbiAgZ2V0Q2VsbFN0eWxlKGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyKTogc3RyaW5nIHtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKSByZXR1cm4gJ3dpZHRoOnVuc2V0O21pbi13aWR0aDp1bnNldCc7XHJcbiAgICBjb25zdCB3aWR0aCA9IHR5cGVvZiBjZWxsLndpZHRoID09ICdudW1iZXInID8gYCR7Y2VsbC53aWR0aH1weGAgOiBjZWxsLndpZHRoO1xyXG4gICAgY29uc3QgbWluV2lkdGggPSB0eXBlb2YgY2VsbC5taW5XaWR0aCA9PSAnbnVtYmVyJyA/IGAke2NlbGwubWluV2lkdGh9cHhgIDogY2VsbC5taW5XaWR0aDtcclxuICAgIHJldHVybiBbYHdpZHRoOiR7d2lkdGggPz8gJ3Vuc2V0J31gLCBgbWluLXdpZHRoOiR7bWluV2lkdGggPz8gJ3Vuc2V0J31gXS5qb2luKCc7Jyk7XHJcbiAgfVxyXG5cclxuICAvLyEgY2xpY2sgJiBob3ZlciBoYW5kbGVyc1xyXG4gIG9uQ2hlY2tib3hDbGljayhpbmRleDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLnRvZ2dsZVJvd1NlbGVjdGVkKGluZGV4KTtcclxuICB9XHJcbiAgb25Sb3dDbGljayhpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGFibGVSb3dzKSByZXR1cm47XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMudG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXgpO1xyXG4gIH1cclxuICBvblJvd01vdXNlT3ZlcihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgfVxyXG4gIG9uUm93TW91c2VFbnRlcihpbmRleDogbnVtYmVyLCBldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGFibGVSb3dzKSByZXR1cm47XHJcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIHRoaXMuX2l0ZW1TdG9yYWdlLmhpZ2hsaWdodFNpbmdsZUl0ZW0oaW5kZXgpO1xyXG4gIH1cclxuICBvblJvd01vdXNlTGVhdmUoaW5kZXg6IG51bWJlciwgZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zZWxlY3RhYmxlUm93cykgcmV0dXJuO1xyXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICB0aGlzLl9pdGVtU3RvcmFnZS51bmhpZ2hsaWdodEl0ZW0oaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgLy8hIHNlbGVjdCBoYW5kbGVyc1xyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhIHJvdyBpbiB0aGUgdGFibGUuXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkIGEgYm9vbGVhbiB2YWx1ZSBpbmRpY2F0aW5nIGlmIHRoZSByb3cgaXMgY3VycmVudGx5IHNlbGVjdGVkLlxyXG4gICAqIEBwYXJhbSBpbmRleCB0aGUgaW5kZXggb2YgdGhlIHJvdyBpbiB0aGUgdGFibGUuXHJcbiAgICovXHJcbiAgdG9nZ2xlUm93U2VsZWN0ZWQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmlzSXRlbVNlbGVjdGVkKGluZGV4KSkge1xyXG4gICAgICBjb25zdCB1bnNlbGVjdGVkID0gdGhpcy5faXRlbVN0b3JhZ2UudW5zZWxlY3RJdGVtKGluZGV4KTtcclxuICAgICAgdGhpcy51bnNlbGVjdFJvd0V2ZW50LmVtaXQodW5zZWxlY3RlZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBbc2VsZWN0ZWQsIGZhaWxlZF0gPSB0aGlzLl9pdGVtU3RvcmFnZS5zZWxlY3RJdGVtKGluZGV4KTtcclxuICAgICAgdGhpcy5zZWxlY3RSb3dFdmVudC5lbWl0KHNlbGVjdGVkKTtcclxuICAgICAgdGhpcy5mYWlsZWRTZWxlY3RSb3dFdmVudC5lbWl0KGZhaWxlZCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9lbWl0U2VsZWN0KCk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFRvZ2dsZXMgdGhlIHNlbGVjdGlvbiBzdGF0ZSBvZiBhbGwgcm93cyBpbiB0aGUgdGFibGUuXHJcbiAgICovXHJcbiAgdG9nZ2xlQWxsUm93c1NlbGVjdGVkKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmFyZUFsbFNlbGVjdGVkKSB7XHJcbiAgICAgIGNvbnN0IHVuc2VsZWN0ZWQgPSB0aGlzLl9pdGVtU3RvcmFnZS51bnNlbGVjdEFsbCgpO1xyXG4gICAgICB0aGlzLnVuc2VsZWN0Um93RXZlbnQuZW1pdCh1bnNlbGVjdGVkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IFtzZWxlY3RlZCwgZmFpbGVkXSA9IHRoaXMuX2l0ZW1TdG9yYWdlLnNlbGVjdEFsbCgpO1xyXG4gICAgICB0aGlzLnNlbGVjdFJvd0V2ZW50LmVtaXQoc2VsZWN0ZWQpO1xyXG4gICAgICB0aGlzLmZhaWxlZFNlbGVjdFJvd0V2ZW50LmVtaXQoZmFpbGVkKTtcclxuICAgIH1cclxuICAgIHRoaXMuX2VtaXRTZWxlY3QoKTtcclxuICB9XHJcbiAgcHJpdmF0ZSBfZW1pdFNlbGVjdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHYgPSB0aGlzLl9pdGVtU3RvcmFnZS52YWx1ZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRSb3dzQ2hhbmdlRXZlbnQuZW1pdCh2KTtcclxuICB9XHJcbiAgaXNDZWxsQ2hlY2tib3goY2VsbDogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdHlwZW9mIGNlbGwgPT0gJ29iamVjdCcgJiYgJ19hcmRDaGVja2JveCcgaW4gY2VsbCAmJiAnaW5kZXgnIGluIGNlbGw7XHJcbiAgfVxyXG4gIGlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGw6IEhlYWRlckNlbGwpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IGRhdGFDZWxsID0gY2VsbC5jZWxsO1xyXG4gICAgaWYgKGlzVGFibGVTdWJoZWFkZXIoZGF0YUNlbGwpKSByZXR1cm4gZmFsc2U7XHJcbiAgICBpZiAodHlwZW9mIGRhdGFDZWxsLmRhdGFTb3VyY2UgPT0gJ3N0cmluZycpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBkYXRhQ2VsbC5kYXRhU291cmNlLnR5cGUgPT0gJ2NoZWNrYm94JztcclxuICB9XHJcbiAgaXNIZWFkZXJDZWxsU29ydGFibGUoY2VsbDogSGVhZGVyQ2VsbCk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3QgZGF0YUNlbGwgPSBjZWxsLmNlbGw7XHJcbiAgICBpZiAoaXNUYWJsZVN1YmhlYWRlcihkYXRhQ2VsbCkpIHJldHVybiBmYWxzZTtcclxuICAgIHJldHVybiBkYXRhQ2VsbC5zb3J0YWJsZSA/PyBmYWxzZTtcclxuICB9XHJcblxyXG4gIEBPdXRwdXQoJ3NlbGVjdGVkUm93c0NoYW5nZScpIHNlbGVjdGVkUm93c0NoYW5nZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcclxuICBAT3V0cHV0KCdmYWlsZWRTZWxlY3RSb3cnKSBmYWlsZWRTZWxlY3RSb3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcbiAgQE91dHB1dCgnc2VsZWN0Um93Jykgc2VsZWN0Um93RXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueVtdPigpO1xyXG4gIEBPdXRwdXQoJ3Vuc2VsZWN0Um93JykgdW5zZWxlY3RSb3dFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIC8vISBjb250ZXh0c1xyXG4gIGdldEhlYWRlckNvbnRleHQoY2VsbDogVGFibGVEYXRhQ29sdW1uLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgbnVsbDtcclxuICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcclxuICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbDtcclxuICBnZXRIZWFkZXJDb250ZXh0KGNlbGw6IFRhYmxlRGF0YUNvbHVtbiB8IFRhYmxlU3ViaGVhZGVyLCBpbmRleDogbnVtYmVyKTogVGFibGVIZWFkZXJDb250ZXh0IHwgVGFibGVTdWJoZWFkZXJDb250ZXh0IHwgbnVsbCB7XHJcbiAgICBpZiAodHlwZW9mIGNlbGwuaGVhZGVyICE9ICdzdHJpbmcnKSByZXR1cm4gbnVsbDtcclxuICAgIGlmIChpc1RhYmxlU3ViaGVhZGVyKGNlbGwpKVxyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICRpbXBsaWNpdDogY2VsbC5oZWFkZXIsXHJcbiAgICAgICAgaGVhZGVyOiBjZWxsLmhlYWRlcixcclxuICAgICAgfTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICRpbXBsaWNpdDogY2VsbC5oZWFkZXIsXHJcbiAgICAgIGhlYWRlcjogY2VsbC5oZWFkZXIsXHJcbiAgICAgIHNvcnRhYmxlOiBjZWxsLnNvcnRhYmxlID8/IGZhbHNlLFxyXG4gICAgICBzb3J0VHlwZTogdGhpcy5faXRlbVN0b3JhZ2UuZ2V0Q29sdW1uU29ydFR5cGUoaW5kZXgpLFxyXG4gICAgICBvblRyaWdnZXJTb3J0OiAoZXZlbnQ/OiBFdmVudCkgPT4gdGhpcy5faXRlbVN0b3JhZ2UudG9nZ2xlQ3VycmVudFNvcnRDb2x1bW4oaW5kZXgpLFxyXG4gICAgICBvblRyaWdnZXJSZXNldFNvcnQ6IChldmVudD86IEV2ZW50KSA9PiB7XHJcbiAgICAgICAgdGhpcy5faXRlbVN0b3JhZ2UucmVzZXRTb3J0KCk7XHJcbiAgICAgICAgZXZlbnQ/LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZlbnQ/LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KCk6IFRhYmxlSGVhZGVyQ2hlY2tib3hDb250ZXh0IHtcclxuICAgIGxldCBzdGF0ZTogQ2hlY2tib3hTdGF0ZSA9IENoZWNrYm94U3RhdGUuVW5zZWxlY3RlZDtcclxuICAgIGlmICh0aGlzLl9pdGVtU3RvcmFnZS5pc0FueUl0ZW1TZWxlY3RlZCkge1xyXG4gICAgICBzdGF0ZSA9IENoZWNrYm94U3RhdGUuSW5kZXRlcm1pbmF0ZTtcclxuICAgICAgaWYgKHRoaXMuX2l0ZW1TdG9yYWdlLmFyZUFsbFNlbGVjdGVkKSB7XHJcbiAgICAgICAgc3RhdGUgPSBDaGVja2JveFN0YXRlLlNlbGVjdGVkO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICAkaW1wbGljaXQ6IHN0YXRlLFxyXG4gICAgICBzdGF0ZSxcclxuICAgICAgb25DaGFuZ2U6ICgpID0+IHtcclxuICAgICAgICB0aGlzLnRvZ2dsZUFsbFJvd3NTZWxlY3RlZCgpO1xyXG4gICAgICB9LFxyXG4gICAgfTtcclxuICB9XHJcbiAgZ2V0Q2hlY2tib3hDb250ZXh0KGluZGV4OiBudW1iZXIpOiBUYWJsZUNoZWNrYm94Q29udGV4dCB7XHJcbiAgICBjb25zdCBpdGVtID0gdGhpcy5faXRlbVN0b3JhZ2UuaXRlbXMuZmluZCh2ID0+IHYuaW5kZXggPT0gaW5kZXgpITtcclxuICAgIGNvbnN0IHNlbGVjdGVkID0gaXRlbS5zZWxlY3RlZCA/PyBmYWxzZTtcclxuICAgIGNvbnN0IGRpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA/PyBmYWxzZTtcclxuICAgIHJldHVybiB7XHJcbiAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWQsXHJcbiAgICAgIHNlbGVjdGVkLFxyXG4gICAgICBkaXNhYmxlZCxcclxuICAgICAgb25DaGFuZ2U6ICgpID0+IHtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tib3hDbGljayhpbmRleCk7XHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iLCI8dGFibGUgY2xhc3M9XCJhcmQtdGFibGVcIiBbbmdDbGFzc109XCJuZ0NsYXNzZXNcIj5cclxuICAgIDxjYXB0aW9uXHJcbiAgICAgICAgKm5nSWY9XCJjYXB0aW9uXCJcclxuICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvblwiXHJcbiAgICA+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9fY2FwdGlvbi1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNkZWZhdWx0Q2FwdGlvblRlbXBsYXRlIGxldC1jYXB0aW9uVGV4dD5cclxuICAgICAgICAgICAgICAgIHt7IGNhcHRpb25UZXh0IH19XHJcbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2FwdGlvblRlbXBsYXRlID8/IGRlZmF1bHRDYXB0aW9uVGVtcGxhdGVcIlxyXG4gICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjYXB0aW9uIH1cIlxyXG4gICAgICAgICAgICAvPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9jYXB0aW9uPlxyXG4gICAgPHRoZWFkIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXJcIj5cclxuICAgICAgICA8dHIgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1yb3dcIiAqbmdGb3I9XCJsZXQgcm93IG9mIGhlYWRlckNlbGxzXCI+XHJcbiAgICAgICAgICAgIDx0aFxyXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGNlbGwgb2Ygcm93OyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNlbGxcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwiY2VsbC5jZWxsLmNlbGxDbGFzc1wiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLmNvbHNwYW5dPVwiY2VsbC5jb2xzcGFuXCJcclxuICAgICAgICAgICAgICAgIFthdHRyLnJvd3NwYW5dPVwiY2VsbC5yb3dzcGFuXCJcclxuICAgICAgICAgICAgICAgIFtzY29wZV09XCJjZWxsLmNvbHNwYW4gPiAxID8gJ2NvbGdyb3VwJyA6ICdjb2wnXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19jZWxsLWNvbnRhaW5lclwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fc29ydGFibGVdPVwiaXNIZWFkZXJDZWxsU29ydGFibGUoY2VsbClcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aF09XCJjZWxsLndpZHRoXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluV2lkdGhdPVwiY2VsbC5taW5XaWR0aFwiXHJcbiAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzSGVhZGVyQ2VsbENoZWNrYm94KGNlbGwpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjZGVmYXVsdEhlYWRlckNoZWNrYm94VGVtcGxhdGUgbGV0LXN0YXRlIGxldC1vbkNoYW5nZT1cIm9uQ2hhbmdlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3N0YXRlXT1cInN0YXRlXCIgW2NvbG9yXT1cImdldEhlYWRlckNoZWNrYm94Q29sb3IoKVwiIHVuc2VsZWN0ZWRDb2xvcj1cImN1cnJlbnRDb2xvclwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaGVhZGVyQ2hlY2tib3hUZW1wbGF0ZSA/PyBkZWZhdWx0SGVhZGVyQ2hlY2tib3hUZW1wbGF0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwiZ2V0SGVhZGVyQ2hlY2tib3hDb250ZXh0KClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNIZWFkZXJDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAjZGVmYXVsdEhlYWRlckNlbGxUZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0LWNvbnRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0YWJsZT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1zb3J0VHlwZT1cInNvcnRUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldC1vblRyaWdnZXJTb3J0PVwib25UcmlnZ2VyU29ydFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQtb25UcmlnZ2VyUmVzZXRTb3J0PVwib25UcmlnZ2VyUmVzZXRTb3J0XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItdGVtcGxhdGUtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXNvcnRhYmxlXT1cInNvcnRhYmxlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLW5vbnNvcnRhYmxlXT1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnQtY29udGFpbmVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvblRyaWdnZXJTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwidGFiSW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5Fc2MpPVwib25UcmlnZ2VyUmVzZXRTb3J0KCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFyZC10YWJsZV9faGVhZGVyLWNvbnRlbnRcIj57eyBjb250ZW50IH19PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhcmQtdGFibGVfX2hlYWRlci1zb3J0LWljb25cIiAqbmdJZj1cInNvcnRUeXBlICE9IG51bGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhcmQtaWNvbiAqbmdJZj1cInNvcnRUeXBlID09ICdhc2NlbmRpbmcnXCI+c291dGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFyZC1pY29uICpuZ0lmPVwic29ydFR5cGUgPT0gJ2Rlc2NlbmRpbmcnXCI+bm9ydGg8L2FyZC1pY29uPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFzb3J0YWJsZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYXJkLXRhYmxlX19oZWFkZXItY29udGVudFwiPnt7IGNvbnRlbnQgfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJnZXRIZWFkZXJUZW1wbGF0ZShjZWxsLmNlbGwuaGVhZGVyKSA/PyBkZWZhdWx0SGVhZGVyQ2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJnZXRIZWFkZXJDb250ZXh0KGNlbGwuY2VsbCwgaW5kZXgpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgIDwvdHI+XHJcbiAgICA8L3RoZWFkPlxyXG4gICAgPHRib2R5IGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGRhdGFSb3dzOyBsZXQgcm93SW5kZXggPSBpbmRleDtcIj5cclxuICAgICAgICAgICAgPHRyICpuZ0lmPVwicm93LmlzRW1wdHlcIiBjbGFzcz1cImFyZC10YWJsZV9fZW1wdHktcm93XCI+XHJcbiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJhcmQtdGFibGVfX2VtcHR5LWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPjwvdGQ+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDx0clxyXG4gICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmlzRW1wdHlcIlxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhcmQtdGFibGVfX2JvZHktcm93XCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX3NlbGVjdGVkLXJvd109XCJyb3cuc2VsZWN0ZWRcIlxyXG4gICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9faGlnaGxpZ2h0ZWQtcm93XT1cInJvdy5oaWdobGlnaHRlZFwiXHJcbiAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19kaXNhYmxlZC1yb3ddPVwicm93LmRpc2FibGVkXCJcclxuICAgICAgICAgICAgICAgIFtjbGFzcy5hcmQtdGFibGVfX2JvbGQtcm93XT1cInJvdy5ib2xkXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblJvd0NsaWNrKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgIChtb3VzZW92ZXIpPVwib25Sb3dNb3VzZU92ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAobW91c2VlbnRlcik9XCJvblJvd01vdXNlRW50ZXIocm93SW5kZXgsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgKG1vdXNlbGVhdmUpPVwib25Sb3dNb3VzZUxlYXZlKHJvd0luZGV4LCAkZXZlbnQpXCJcclxuICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiByb3cuZGF0YTsgbGV0IGNlbGxJbmRleCA9IGluZGV4XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjZWxsVG1wPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fY2VsbC1jb250YWluZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlXT1cImdldENlbGxTdHlsZShyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDaGVja2JveFRlbXBsYXRlIGxldC1pc0NoZWNrZWQgbGV0LW9uQ2hhbmdlPVwib25DaGFuZ2VcIiBsZXQtZGlzYWJsZWQ9XCJkaXNhYmxlZFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YXJkLWNoZWNrYm94IFt0YWJJbmRleF09XCJpc0xvYWRpbmcgPyAtMSA6IHRhYkluZGV4XCIgW3NlbGVjdGVkXT1cImlzQ2hlY2tlZFwiIFtjb2xvcl09XCJjb2xvclwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZFwiIChjaGFuZ2UpPVwib25DaGFuZ2UoKVwiIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjaGVja2JveFRlbXBsYXRlID8/IGRlZmF1bHRDaGVja2JveFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cImdldENoZWNrYm94Q29udGV4dChyb3dJbmRleClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNDZWxsQ2hlY2tib3goY2VsbClcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2RlZmF1bHRDZWxsVGVtcGxhdGUgbGV0LWNvbnRlbnQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGNvbnRlbnQgfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiZ2V0Q2VsbFRlbXBsYXRlKHJvdy5kYXRhQ29sdW1uc1tjZWxsSW5kZXhdLnRlbXBsYXRlKSA/PyBkZWZhdWx0Q2VsbFRlbXBsYXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgJGltcGxpY2l0OiBjZWxsIH1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8dGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uaXNSb3dIZWFkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImFyZC10YWJsZV9fYm9keS1jZWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwicm93LmRhdGFDb2x1bW5zW2NlbGxJbmRleF0uY2VsbENsYXNzXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmFyZC10YWJsZV9fY2hlY2tib3gtY2VsbF09XCJpc0NlbGxDaGVja2JveChjZWxsKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgW25nVGVtcGxhdGVPdXRsZXRdPVwiY2VsbFRtcFwiPjwvbmctdGVtcGxhdGU+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICA8dGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5pc1Jvd0hlYWRlclwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYXJkLXRhYmxlX19ib2R5LWNlbGwgYXJkLXRhYmxlX19yb3ctaGVhZGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2NvcGU9XCJyb3dcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJyb3cuZGF0YUNvbHVtbnNbY2VsbEluZGV4XS5jZWxsQ2xhc3NcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYXJkLXRhYmxlX19jaGVja2JveC1jZWxsXT1cImlzQ2VsbENoZWNrYm94KGNlbGwpXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBbbmdUZW1wbGF0ZU91dGxldF09XCJjZWxsVG1wXCI+PC9uZy10ZW1wbGF0ZT5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L3Rib2R5PlxyXG4gICAgPHRmb290IGNsYXNzPVwiYXJkLXRhYmxlX19mb290XCIgKm5nSWY9XCJjYW5EaXNwbGF5UGFnaW5hdGlvblwiPlxyXG4gICAgICAgIDx0ciBjbGFzcz1cImFyZC10YWJsZV9fZm9vdC1yb3dcIj5cclxuICAgICAgICAgICAgPHRkIGNsYXNzPVwiYXJkLXRhYmxlX19wYWdpbmF0aW9uLWNlbGxcIiBjb2xzcGFuPVwiOTk5OVwiPlxyXG4gICAgICAgICAgICAgICAgPGFyZC10YWJsZS1wYWdpbmF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicGFnaW5hdGlvbk9wdGlvbnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFsocGFnZSldPVwicGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInBhZ2luYXRpb25EaXNhYmxlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgWyhpdGVtc1BlclBhZ2UpXT1cIml0ZW1zUGVyUGFnZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2FsaWduXT1cInBhZ2luYXRpb25BbGlnblwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2lzTG9hZGluZ109XCJpc0xvYWRpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtpdGVtc1BlclBhZ2VUZXh0XT1cIml0ZW1zUGVyUGFnZVRleHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtjdXJyZW50SXRlbXNGb3JtYXRGbl09XCJjdXJyZW50SXRlbXNGb3JtYXRGblwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGl0ZW1zUGVyUGFnZUNoYW5nZSk9XCJpdGVtc1BlclBhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJwYWdlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICA+PC9hcmQtdGFibGUtcGFnaW5hdGlvbj5cclxuICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICA8L3RyPlxyXG4gICAgPC90Zm9vdD5cclxuPC90YWJsZT4iXX0=
|