@sbb-esta/lyne-elements 1.12.1 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/accordion.d.ts +4 -8
- package/accordion/accordion.d.ts.map +1 -1
- package/accordion.js +90 -81
- package/action-group/action-group.d.ts +5 -5
- package/action-group/action-group.d.ts.map +1 -1
- package/action-group.js +100 -50
- package/alert/alert/alert.d.ts +11 -11
- package/alert/alert/alert.d.ts.map +1 -1
- package/alert/alert-group/alert-group.d.ts +4 -4
- package/alert/alert-group/alert-group.d.ts.map +1 -1
- package/alert/alert-group.js +101 -69
- package/alert/alert.js +191 -104
- package/autocomplete/autocomplete-base-element.d.ts +3 -7
- package/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/autocomplete/autocomplete.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -0
- package/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-button.js +53 -60
- package/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-cell.js +20 -22
- package/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-optgroup.js +31 -35
- package/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-option.js +45 -63
- package/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -1
- package/autocomplete-grid/autocomplete-grid-row.js +23 -25
- package/autocomplete-grid/autocomplete-grid.js +112 -133
- package/autocomplete.js +283 -295
- package/breadcrumb/breadcrumb/breadcrumb.d.ts +1 -1
- package/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
- package/breadcrumb/breadcrumb-group.js +107 -114
- package/breadcrumb/breadcrumb.js +44 -35
- package/button/button/button.d.ts.map +1 -1
- package/button/button-link/button-link.d.ts.map +1 -1
- package/button/button-link.js +15 -18
- package/button/button-static/button-static.d.ts.map +1 -1
- package/button/button-static.js +15 -18
- package/button/button.js +15 -18
- package/button/common/button-common.d.ts +4 -4
- package/button/common/button-common.d.ts.map +1 -1
- package/button/common.js +41 -30
- package/button/mini-button/mini-button-base-element.d.ts.map +1 -1
- package/button/mini-button/mini-button.d.ts.map +1 -1
- package/button/mini-button-group/mini-button-group.d.ts +2 -2
- package/button/mini-button-group/mini-button-group.d.ts.map +1 -1
- package/button/mini-button-group.js +55 -43
- package/button/mini-button.js +28 -32
- package/button/secondary-button/secondary-button.d.ts.map +1 -1
- package/button/secondary-button-link/secondary-button-link.d.ts.map +1 -1
- package/button/secondary-button-link.js +15 -18
- package/button/secondary-button-static/secondary-button-static.d.ts.map +1 -1
- package/button/secondary-button-static.js +15 -18
- package/button/secondary-button.js +15 -18
- package/button/tertiary-button/tertiary-button.d.ts.map +1 -1
- package/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -1
- package/button/tertiary-button-link.js +15 -18
- package/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -1
- package/button/tertiary-button-static.js +15 -18
- package/button/tertiary-button.js +15 -18
- package/button/transparent-button/transparent-button.d.ts.map +1 -1
- package/button/transparent-button-link/transparent-button-link.d.ts.map +1 -1
- package/button/transparent-button-link.js +15 -18
- package/button/transparent-button-static/transparent-button-static.d.ts.map +1 -1
- package/button/transparent-button-static.js +15 -18
- package/button/transparent-button.js +15 -18
- package/calendar/calendar.d.ts +7 -7
- package/calendar/calendar.d.ts.map +1 -1
- package/calendar.js +638 -692
- package/card/card/card.d.ts +2 -2
- package/card/card/card.d.ts.map +1 -1
- package/card/card-badge/card-badge.d.ts +1 -1
- package/card/card-badge/card-badge.d.ts.map +1 -1
- package/card/card-badge.js +45 -34
- package/card/card-button/card-button.d.ts.map +1 -1
- package/card/card-button.js +16 -16
- package/card/card-link/card-link.d.ts.map +1 -1
- package/card/card-link.js +17 -17
- package/card/card.js +55 -36
- package/card/common/card-action-common.d.ts +1 -1
- package/card/common/card-action-common.d.ts.map +1 -1
- package/card/common.js +27 -33
- package/checkbox/checkbox/checkbox.d.ts +3 -4
- package/checkbox/checkbox/checkbox.d.ts.map +1 -1
- package/checkbox/checkbox-group/checkbox-group.d.ts +4 -4
- package/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/checkbox/checkbox-group.js +99 -76
- package/checkbox/checkbox-panel/checkbox-panel.d.ts +2 -3
- package/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
- package/checkbox/checkbox-panel.js +51 -50
- package/checkbox/checkbox.js +54 -43
- package/checkbox/common/checkbox-common.d.ts +1 -1
- package/checkbox/common/checkbox-common.d.ts.map +1 -1
- package/checkbox/common.js +39 -24
- package/chip/chip.d.ts +2 -2
- package/chip/chip.d.ts.map +1 -1
- package/chip.js +45 -26
- package/clock/clock.d.ts +1 -1
- package/clock/clock.d.ts.map +1 -1
- package/clock.js +136 -144
- package/container/container/container.d.ts +3 -3
- package/container/container/container.d.ts.map +1 -1
- package/container/container.js +60 -35
- package/container/sticky-bar/sticky-bar.d.ts +1 -1
- package/container/sticky-bar/sticky-bar.d.ts.map +1 -1
- package/container/sticky-bar.js +55 -47
- package/core/a11y.js +29 -51
- package/core/base-elements/action-base-element.d.ts.map +1 -1
- package/core/base-elements/button-base-element.d.ts +2 -2
- package/core/base-elements/button-base-element.d.ts.map +1 -1
- package/core/base-elements/link-base-element.d.ts +5 -5
- package/core/base-elements/link-base-element.d.ts.map +1 -1
- package/core/base-elements.js +243 -196
- package/core/controllers.js +8 -13
- package/core/decorators/base.d.ts +14 -0
- package/core/decorators/base.d.ts.map +1 -0
- package/core/decorators/force-type.d.ts +8 -0
- package/core/decorators/force-type.d.ts.map +1 -0
- package/core/decorators/get-override.d.ts +7 -0
- package/core/decorators/get-override.d.ts.map +1 -0
- package/core/decorators/handle-distinct-change.d.ts +8 -0
- package/core/decorators/handle-distinct-change.d.ts.map +1 -0
- package/core/decorators/omit-empty-converter.d.ts +8 -0
- package/core/decorators/omit-empty-converter.d.ts.map +1 -0
- package/core/decorators.d.ts +4 -0
- package/core/decorators.d.ts.map +1 -1
- package/core/decorators.js +59 -15
- package/core/dom.js +1 -5
- package/core/eventing.js +1 -4
- package/core/interfaces/paginator-page.d.ts +7 -0
- package/core/interfaces/paginator-page.d.ts.map +1 -0
- package/core/interfaces.d.ts +1 -0
- package/core/interfaces.d.ts.map +1 -1
- package/core/mixins/disabled-mixin.d.ts +2 -3
- package/core/mixins/disabled-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
- package/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/core/mixins/form-associated-mixin.d.ts +6 -6
- package/core/mixins/form-associated-mixin.d.ts.map +1 -1
- package/core/mixins/named-slot-list-mixin.d.ts +1 -1
- package/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
- package/core/mixins/negative-mixin.d.ts +1 -1
- package/core/mixins/negative-mixin.d.ts.map +1 -1
- package/core/mixins/panel-mixin.d.ts +3 -3
- package/core/mixins/panel-mixin.d.ts.map +1 -1
- package/core/mixins/required-mixin.d.ts +2 -3
- package/core/mixins/required-mixin.d.ts.map +1 -1
- package/core/mixins.js +291 -242
- package/core/styles/mixins/buttons.scss +1 -1
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables.scss +4 -0
- package/core/styles/node_modules_@sbb-esta_lyne-design-tokens_dist_scss_sbb-variables_css--mixin.scss +5 -1
- package/core/testing/private.d.ts +1 -0
- package/core/testing/private.d.ts.map +1 -1
- package/core/testing.js +7 -13
- package/core.css +5 -1
- package/custom-elements.json +14515 -13465
- package/datepicker/common/datepicker-button.d.ts +2 -2
- package/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/datepicker/common.js +110 -116
- package/datepicker/datepicker/datepicker.d.ts +6 -6
- package/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
- package/datepicker/datepicker-next-day.js +24 -26
- package/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
- package/datepicker/datepicker-previous-day.js +25 -27
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts +6 -6
- package/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/datepicker/datepicker-toggle.js +154 -136
- package/datepicker/datepicker.js +248 -213
- package/development/accordion/accordion.d.ts +4 -8
- package/development/accordion/accordion.d.ts.map +1 -1
- package/development/accordion.js +118 -93
- package/development/action-group/action-group.d.ts +5 -5
- package/development/action-group/action-group.d.ts.map +1 -1
- package/development/action-group.js +138 -64
- package/development/alert/alert/alert.d.ts +11 -11
- package/development/alert/alert/alert.d.ts.map +1 -1
- package/development/alert/alert-group/alert-group.d.ts +4 -4
- package/development/alert/alert-group/alert-group.d.ts.map +1 -1
- package/development/alert/alert-group.js +135 -79
- package/development/alert/alert.js +259 -109
- package/development/autocomplete/autocomplete-base-element.d.ts +3 -7
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete/autocomplete.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid/autocomplete-grid.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts +1 -0
- package/development/autocomplete-grid/autocomplete-grid-button/autocomplete-grid-button.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-button.js +75 -76
- package/development/autocomplete-grid/autocomplete-grid-cell/autocomplete-grid-cell.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-cell.js +24 -24
- package/development/autocomplete-grid/autocomplete-grid-optgroup/autocomplete-grid-optgroup.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup.js +38 -39
- package/development/autocomplete-grid/autocomplete-grid-option/autocomplete-grid-option.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-option.js +57 -73
- package/development/autocomplete-grid/autocomplete-grid-row/autocomplete-grid-row.d.ts.map +1 -1
- package/development/autocomplete-grid/autocomplete-grid-row.js +28 -28
- package/development/autocomplete-grid/autocomplete-grid.js +142 -160
- package/development/autocomplete.js +394 -393
- package/development/breadcrumb/breadcrumb/breadcrumb.d.ts +1 -1
- package/development/breadcrumb/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb-group.js +130 -130
- package/development/breadcrumb/breadcrumb.js +53 -36
- package/development/button/button/button.d.ts.map +1 -1
- package/development/button/button-link/button-link.d.ts.map +1 -1
- package/development/button/button-link.js +18 -19
- package/development/button/button-static/button-static.d.ts.map +1 -1
- package/development/button/button-static.js +18 -19
- package/development/button/button.js +18 -19
- package/development/button/common/button-common.d.ts +4 -4
- package/development/button/common/button-common.d.ts.map +1 -1
- package/development/button/common.js +51 -30
- package/development/button/mini-button/mini-button-base-element.d.ts.map +1 -1
- package/development/button/mini-button/mini-button.d.ts.map +1 -1
- package/development/button/mini-button-group/mini-button-group.d.ts +2 -2
- package/development/button/mini-button-group/mini-button-group.d.ts.map +1 -1
- package/development/button/mini-button-group.js +77 -50
- package/development/button/mini-button.js +39 -38
- package/development/button/secondary-button/secondary-button.d.ts.map +1 -1
- package/development/button/secondary-button-link/secondary-button-link.d.ts.map +1 -1
- package/development/button/secondary-button-link.js +18 -19
- package/development/button/secondary-button-static/secondary-button-static.d.ts.map +1 -1
- package/development/button/secondary-button-static.js +18 -19
- package/development/button/secondary-button.js +18 -19
- package/development/button/tertiary-button/tertiary-button.d.ts.map +1 -1
- package/development/button/tertiary-button-link/tertiary-button-link.d.ts.map +1 -1
- package/development/button/tertiary-button-link.js +18 -19
- package/development/button/tertiary-button-static/tertiary-button-static.d.ts.map +1 -1
- package/development/button/tertiary-button-static.js +18 -19
- package/development/button/tertiary-button.js +18 -19
- package/development/button/transparent-button/transparent-button.d.ts.map +1 -1
- package/development/button/transparent-button-link/transparent-button-link.d.ts.map +1 -1
- package/development/button/transparent-button-link.js +18 -19
- package/development/button/transparent-button-static/transparent-button-static.d.ts.map +1 -1
- package/development/button/transparent-button-static.js +18 -19
- package/development/button/transparent-button.js +18 -19
- package/development/calendar/calendar.d.ts +7 -7
- package/development/calendar/calendar.d.ts.map +1 -1
- package/development/calendar.js +768 -766
- package/development/card/card/card.d.ts +2 -2
- package/development/card/card/card.d.ts.map +1 -1
- package/development/card/card-badge/card-badge.d.ts +1 -1
- package/development/card/card-badge/card-badge.d.ts.map +1 -1
- package/development/card/card-badge.js +65 -45
- package/development/card/card-button/card-button.d.ts.map +1 -1
- package/development/card/card-button.js +23 -20
- package/development/card/card-link/card-link.d.ts.map +1 -1
- package/development/card/card-link.js +23 -20
- package/development/card/card.js +72 -41
- package/development/card/common/card-action-common.d.ts +1 -1
- package/development/card/common/card-action-common.d.ts.map +1 -1
- package/development/card/common.js +74 -73
- package/development/checkbox/checkbox/checkbox.d.ts +3 -4
- package/development/checkbox/checkbox/checkbox.d.ts.map +1 -1
- package/development/checkbox/checkbox-group/checkbox-group.d.ts +4 -4
- package/development/checkbox/checkbox-group/checkbox-group.d.ts.map +1 -1
- package/development/checkbox/checkbox-group.js +139 -92
- package/development/checkbox/checkbox-panel/checkbox-panel.d.ts +2 -3
- package/development/checkbox/checkbox-panel/checkbox-panel.d.ts.map +1 -1
- package/development/checkbox/checkbox-panel.js +68 -60
- package/development/checkbox/checkbox.js +69 -46
- package/development/checkbox/common/checkbox-common.d.ts +1 -1
- package/development/checkbox/common/checkbox-common.d.ts.map +1 -1
- package/development/checkbox/common.js +65 -46
- package/development/chip/chip.d.ts +2 -2
- package/development/chip/chip.d.ts.map +1 -1
- package/development/chip.js +64 -33
- package/development/clock/clock.d.ts +1 -1
- package/development/clock/clock.d.ts.map +1 -1
- package/development/clock.js +203 -201
- package/development/container/container/container.d.ts +3 -3
- package/development/container/container/container.d.ts.map +1 -1
- package/development/container/container.js +86 -45
- package/development/container/sticky-bar/sticky-bar.d.ts +1 -1
- package/development/container/sticky-bar/sticky-bar.d.ts.map +1 -1
- package/development/container/sticky-bar.js +76 -58
- package/development/core/a11y.js +40 -62
- package/development/core/base-elements/action-base-element.d.ts.map +1 -1
- package/development/core/base-elements/button-base-element.d.ts +2 -2
- package/development/core/base-elements/button-base-element.d.ts.map +1 -1
- package/development/core/base-elements/link-base-element.d.ts +5 -5
- package/development/core/base-elements/link-base-element.d.ts.map +1 -1
- package/development/core/base-elements.js +329 -226
- package/development/core/config.js +1 -1
- package/development/core/controllers.js +13 -21
- package/development/core/datetime.js +1 -1
- package/development/core/decorators/base.d.ts +14 -0
- package/development/core/decorators/base.d.ts.map +1 -0
- package/development/core/decorators/force-type.d.ts +8 -0
- package/development/core/decorators/force-type.d.ts.map +1 -0
- package/development/core/decorators/get-override.d.ts +7 -0
- package/development/core/decorators/get-override.d.ts.map +1 -0
- package/development/core/decorators/handle-distinct-change.d.ts +8 -0
- package/development/core/decorators/handle-distinct-change.d.ts.map +1 -0
- package/development/core/decorators/omit-empty-converter.d.ts +8 -0
- package/development/core/decorators/omit-empty-converter.d.ts.map +1 -0
- package/development/core/decorators.d.ts +4 -0
- package/development/core/decorators.d.ts.map +1 -1
- package/development/core/decorators.js +69 -5
- package/development/core/dom.js +2 -6
- package/development/core/eventing.js +2 -5
- package/development/core/i18n.js +1 -1
- package/development/core/interfaces/paginator-page.d.ts +7 -0
- package/development/core/interfaces/paginator-page.d.ts.map +1 -0
- package/development/core/interfaces.d.ts +1 -0
- package/development/core/interfaces.d.ts.map +1 -1
- package/development/core/mixins/disabled-mixin.d.ts +2 -3
- package/development/core/mixins/disabled-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts +1 -0
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-mixin.d.ts +6 -6
- package/development/core/mixins/form-associated-mixin.d.ts.map +1 -1
- package/development/core/mixins/named-slot-list-mixin.d.ts +1 -1
- package/development/core/mixins/named-slot-list-mixin.d.ts.map +1 -1
- package/development/core/mixins/negative-mixin.d.ts +1 -1
- package/development/core/mixins/negative-mixin.d.ts.map +1 -1
- package/development/core/mixins/panel-mixin.d.ts +3 -3
- package/development/core/mixins/panel-mixin.d.ts.map +1 -1
- package/development/core/mixins/required-mixin.d.ts +2 -3
- package/development/core/mixins/required-mixin.d.ts.map +1 -1
- package/development/core/mixins.js +573 -478
- package/development/core/observers.js +1 -1
- package/development/core/overlay.js +1 -1
- package/development/core/testing/private.d.ts +1 -0
- package/development/core/testing/private.d.ts.map +1 -1
- package/development/core/testing.js +16 -22
- package/development/datepicker/common/datepicker-button.d.ts +2 -2
- package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/development/datepicker/common.js +144 -142
- package/development/datepicker/datepicker/datepicker.d.ts +6 -6
- package/development/datepicker/datepicker/datepicker.d.ts.map +1 -1
- package/development/datepicker/datepicker-next-day/datepicker-next-day.d.ts.map +1 -1
- package/development/datepicker/datepicker-next-day.js +33 -33
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.d.ts.map +1 -1
- package/development/datepicker/datepicker-previous-day.js +33 -33
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts +6 -6
- package/development/datepicker/datepicker-toggle/datepicker-toggle.d.ts.map +1 -1
- package/development/datepicker/datepicker-toggle.js +227 -174
- package/development/datepicker/datepicker.js +327 -249
- package/development/dialog/dialog/dialog.d.ts +1 -1
- package/development/dialog/dialog/dialog.d.ts.map +1 -1
- package/development/dialog/dialog-actions/dialog-actions.d.ts.map +1 -1
- package/development/dialog/dialog-actions.js +21 -20
- package/development/dialog/dialog-content/dialog-content.d.ts.map +1 -1
- package/development/dialog/dialog-content.js +22 -21
- package/development/dialog/dialog-title/dialog-title.d.ts +3 -3
- package/development/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/development/dialog/dialog-title.js +121 -66
- package/development/dialog/dialog.js +205 -191
- package/development/divider/divider.d.ts +1 -1
- package/development/divider/divider.d.ts.map +1 -1
- package/development/divider.js +55 -36
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts +4 -4
- package/development/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-content.js +25 -25
- package/development/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-header.js +56 -63
- package/development/expansion-panel/expansion-panel.js +227 -182
- package/development/file-selector/file-selector.d.ts +26 -15
- package/development/file-selector/file-selector.d.ts.map +1 -1
- package/development/file-selector.js +305 -172
- package/development/flip-card/flip-card/flip-card.d.ts +2 -2
- package/development/flip-card/flip-card/flip-card.d.ts.map +1 -1
- package/development/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/development/flip-card/flip-card-details.js +39 -39
- package/development/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
- package/development/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
- package/development/flip-card/flip-card-summary.js +57 -38
- package/development/flip-card/flip-card.js +110 -78
- package/development/footer/footer.d.ts +4 -4
- package/development/footer/footer.d.ts.map +1 -1
- package/development/footer.js +103 -41
- package/development/form-error/form-error.d.ts.map +1 -1
- package/development/form-error.js +29 -28
- package/development/form-field/form-field/form-field.d.ts +10 -10
- package/development/form-field/form-field/form-field.d.ts.map +1 -1
- package/development/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
- package/development/form-field/form-field-clear.js +51 -51
- package/development/form-field/form-field.js +439 -328
- package/development/header/common/header-action-common.d.ts +2 -2
- package/development/header/common/header-action-common.d.ts.map +1 -1
- package/development/header/common.js +95 -28
- package/development/header/header/header.d.ts +4 -4
- package/development/header/header/header.d.ts.map +1 -1
- package/development/header/header-button/header-button.d.ts.map +1 -1
- package/development/header/header-button.js +19 -18
- package/development/header/header-link/header-link.d.ts.map +1 -1
- package/development/header/header-link.js +19 -16
- package/development/header/header.js +198 -140
- package/development/icon/icon-base.d.ts +3 -4
- package/development/icon/icon-base.d.ts.map +1 -1
- package/development/icon/icon-name-mixin.d.ts +1 -1
- package/development/icon/icon-name-mixin.d.ts.map +1 -1
- package/development/icon/icon.d.ts +2 -2
- package/development/icon/icon.d.ts.map +1 -1
- package/development/icon.js +258 -157
- package/development/image/image.d.ts +17 -17
- package/development/image/image.d.ts.map +1 -1
- package/development/image.js +584 -216
- package/development/journey-header/journey-header.d.ts +5 -5
- package/development/journey-header/journey-header.d.ts.map +1 -1
- package/development/journey-header.js +115 -43
- package/development/lead-container/lead-container.d.ts.map +1 -1
- package/development/lead-container.js +22 -21
- package/development/link/block-link/block-link.d.ts.map +1 -1
- package/development/link/block-link-button/block-link-button.d.ts.map +1 -1
- package/development/link/block-link-button.js +19 -18
- package/development/link/block-link-static/block-link-static.d.ts.map +1 -1
- package/development/link/block-link-static.js +19 -18
- package/development/link/block-link.js +19 -18
- package/development/link/common/block-link-common.d.ts +4 -3
- package/development/link/common/block-link-common.d.ts.map +1 -1
- package/development/link/common/link-common.d.ts +1 -1
- package/development/link/common/link-common.d.ts.map +1 -1
- package/development/link/common.js +81 -51
- package/development/link/link/link.d.ts.map +1 -1
- package/development/link/link-button/link-button.d.ts.map +1 -1
- package/development/link/link-button.js +19 -18
- package/development/link/link-static/link-static.d.ts.map +1 -1
- package/development/link/link-static.js +19 -18
- package/development/link/link.js +19 -18
- package/development/link-list/common/link-list-base.d.ts +3 -3
- package/development/link-list/common/link-list-base.d.ts.map +1 -1
- package/development/link-list/common.js +97 -48
- package/development/link-list/link-list/link-list.d.ts +2 -2
- package/development/link-list/link-list/link-list.d.ts.map +1 -1
- package/development/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -1
- package/development/link-list/link-list-anchor.js +18 -17
- package/development/link-list/link-list.js +60 -28
- package/development/loading-indicator/loading-indicator.d.ts +3 -3
- package/development/loading-indicator/loading-indicator.d.ts.map +1 -1
- package/development/loading-indicator.js +83 -45
- package/development/logo/logo.d.ts +2 -2
- package/development/logo/logo.d.ts.map +1 -1
- package/development/logo.js +64 -32
- package/development/map-container/map-container.d.ts +2 -2
- package/development/map-container/map-container.d.ts.map +1 -1
- package/development/map-container.js +107 -75
- package/development/menu/common/menu-action-common.d.ts +2 -2
- package/development/menu/common/menu-action-common.d.ts.map +1 -1
- package/development/menu/common.js +41 -20
- package/development/menu/menu/menu.d.ts +1 -1
- package/development/menu/menu/menu.d.ts.map +1 -1
- package/development/menu/menu-button/menu-button.d.ts.map +1 -1
- package/development/menu/menu-button.js +19 -18
- package/development/menu/menu-link/menu-link.d.ts.map +1 -1
- package/development/menu/menu-link.js +19 -18
- package/development/menu/menu.js +261 -241
- package/development/message/message.d.ts +2 -2
- package/development/message/message.d.ts.map +1 -1
- package/development/message.js +65 -32
- package/development/navigation/common/navigation-action-common.d.ts +1 -1
- package/development/navigation/common/navigation-action-common.d.ts.map +1 -1
- package/development/navigation/common.js +63 -52
- package/development/navigation/navigation/navigation.d.ts +2 -2
- package/development/navigation/navigation/navigation.d.ts.map +1 -1
- package/development/navigation/navigation-button/navigation-button.d.ts.map +1 -1
- package/development/navigation/navigation-button.js +19 -18
- package/development/navigation/navigation-link/navigation-link.d.ts.map +1 -1
- package/development/navigation/navigation-link.js +19 -18
- package/development/navigation/navigation-list/navigation-list.d.ts +1 -1
- package/development/navigation/navigation-list/navigation-list.d.ts.map +1 -1
- package/development/navigation/navigation-list.js +64 -41
- package/development/navigation/navigation-marker/navigation-marker.d.ts +1 -1
- package/development/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/development/navigation/navigation-marker.js +108 -91
- package/development/navigation/navigation-section/navigation-section.d.ts +3 -3
- package/development/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/development/navigation/navigation-section.js +282 -236
- package/development/navigation/navigation.js +278 -254
- package/development/notification/notification.d.ts +6 -6
- package/development/notification/notification.d.ts.map +1 -1
- package/development/notification.js +212 -146
- package/development/option/optgroup/optgroup-base-element.d.ts +3 -3
- package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/development/option/optgroup/optgroup.d.ts.map +1 -1
- package/development/option/optgroup.js +187 -142
- package/development/option/option/option-base-element.d.ts +7 -7
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option/option.d.ts.map +1 -1
- package/development/option/option.js +392 -296
- package/development/overlay/overlay-base-element.d.ts +1 -1
- package/development/overlay/overlay-base-element.d.ts.map +1 -1
- package/development/overlay/overlay.d.ts +4 -4
- package/development/overlay/overlay.d.ts.map +1 -1
- package/development/overlay.js +260 -207
- package/development/paginator/common/paginator-common.d.ts +26 -0
- package/development/paginator/common/paginator-common.d.ts.map +1 -0
- package/development/paginator/common.d.ts +2 -0
- package/development/paginator/common.d.ts.map +1 -0
- package/development/paginator/common.js +189 -0
- package/development/paginator/compact-paginator/compact-paginator.d.ts +20 -0
- package/development/paginator/compact-paginator/compact-paginator.d.ts.map +1 -0
- package/development/paginator/compact-paginator.d.ts +2 -0
- package/development/paginator/compact-paginator.d.ts.map +1 -0
- package/development/paginator/compact-paginator.js +96 -0
- package/development/paginator/paginator/paginator.d.ts +51 -0
- package/development/paginator/paginator/paginator.d.ts.map +1 -0
- package/development/paginator/paginator.d.ts +1 -90
- package/development/paginator/paginator.d.ts.map +1 -1
- package/development/paginator/paginator.js +449 -0
- package/development/paginator.d.ts +2 -0
- package/development/paginator.d.ts.map +1 -1
- package/development/paginator.js +4 -519
- package/development/popover/popover/popover.d.ts +6 -7
- package/development/popover/popover/popover.d.ts.map +1 -1
- package/development/popover/popover-trigger/popover-trigger.d.ts.map +1 -1
- package/development/popover/popover-trigger.js +29 -30
- package/development/popover/popover.js +358 -303
- package/development/radio-button/common/radio-button-common.d.ts +1 -1
- package/development/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/development/radio-button/common.js +170 -127
- package/development/radio-button/radio-button/radio-button.d.ts +2 -6
- package/development/radio-button/radio-button/radio-button.d.ts.map +1 -1
- package/development/radio-button/radio-button-group/radio-button-group.d.ts +6 -6
- package/development/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
- package/development/radio-button/radio-button-group.js +269 -199
- package/development/radio-button/radio-button-panel/radio-button-panel.d.ts +2 -6
- package/development/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
- package/development/radio-button/radio-button-panel.js +60 -48
- package/development/radio-button/radio-button.js +54 -40
- package/development/screen-reader-only/screen-reader-only.d.ts.map +1 -1
- package/development/screen-reader-only.js +22 -21
- package/development/select/select.d.ts +17 -9
- package/development/select/select.d.ts.map +1 -1
- package/development/select.js +557 -524
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts +3 -3
- package/development/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/development/selection-expansion-panel.js +223 -193
- package/development/signet/signet.d.ts +2 -2
- package/development/signet/signet.d.ts.map +1 -1
- package/development/signet.js +65 -33
- package/development/skiplink-list/skiplink-list.d.ts +2 -2
- package/development/skiplink-list/skiplink-list.d.ts.map +1 -1
- package/development/skiplink-list.js +74 -41
- package/development/slider/slider.d.ts +7 -5
- package/development/slider/slider.d.ts.map +1 -1
- package/development/slider.js +260 -181
- package/development/status/status.d.ts +3 -3
- package/development/status/status.d.ts.map +1 -1
- package/development/status.js +96 -51
- package/development/stepper/step/step.d.ts.map +1 -1
- package/development/stepper/step-label/step-label.d.ts.map +1 -1
- package/development/stepper/step-label.js +86 -90
- package/development/stepper/step.js +122 -126
- package/development/stepper/stepper/stepper.d.ts +3 -3
- package/development/stepper/stepper/stepper.d.ts.map +1 -1
- package/development/stepper/stepper.js +291 -241
- package/development/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/development/table/table-wrapper.js +37 -39
- package/development/tabs/tab/tab.d.ts.map +1 -1
- package/development/tabs/tab-group/tab-group.d.ts +2 -2
- package/development/tabs/tab-group/tab-group.d.ts.map +1 -1
- package/development/tabs/tab-group.js +296 -279
- package/development/tabs/tab-label/tab-label.d.ts +3 -3
- package/development/tabs/tab-label/tab-label.d.ts.map +1 -1
- package/development/tabs/tab-label.js +83 -37
- package/development/tabs/tab.js +40 -39
- package/development/tag/tag/tag.d.ts +3 -5
- package/development/tag/tag/tag.d.ts.map +1 -1
- package/development/tag/tag-group/tag-group.d.ts +3 -3
- package/development/tag/tag-group/tag-group.d.ts.map +1 -1
- package/development/tag/tag-group.js +143 -88
- package/development/tag/tag.js +126 -89
- package/development/teaser/teaser.d.ts +4 -4
- package/development/teaser/teaser.d.ts.map +1 -1
- package/development/teaser-hero/teaser-hero.d.ts +3 -3
- package/development/teaser-hero/teaser-hero.d.ts.map +1 -1
- package/development/teaser-hero.js +83 -36
- package/development/teaser-product/common/teaser-product-common.d.ts +1 -1
- package/development/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/development/teaser-product/common.js +51 -26
- package/development/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
- package/development/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -1
- package/development/teaser-product/teaser-product-static.js +18 -19
- package/development/teaser-product/teaser-product.js +18 -19
- package/development/teaser.js +94 -40
- package/development/time-input/time-input.d.ts +1 -1
- package/development/time-input/time-input.d.ts.map +1 -1
- package/development/time-input.js +225 -219
- package/development/timetable-occupancy/timetable-occupancy.d.ts +2 -2
- package/development/timetable-occupancy/timetable-occupancy.d.ts.map +1 -1
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +1 -1
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
- package/development/timetable-occupancy-icon.js +78 -57
- package/development/timetable-occupancy.js +67 -35
- package/development/title/title-base.d.ts +3 -3
- package/development/title/title-base.d.ts.map +1 -1
- package/development/title/title.d.ts.map +1 -1
- package/development/title.js +106 -58
- package/development/toast/toast.d.ts +4 -4
- package/development/toast/toast.d.ts.map +1 -1
- package/development/toast.js +204 -146
- package/development/toggle/toggle/toggle.d.ts +3 -5
- package/development/toggle/toggle/toggle.d.ts.map +1 -1
- package/development/toggle/toggle-option/toggle-option.d.ts +2 -2
- package/development/toggle/toggle-option/toggle-option.d.ts.map +1 -1
- package/development/toggle/toggle-option.js +127 -93
- package/development/toggle/toggle.js +200 -163
- package/development/toggle-check/toggle-check.d.ts +4 -3
- package/development/toggle-check/toggle-check.d.ts.map +1 -1
- package/development/toggle-check.js +87 -49
- package/development/train/train/train.d.ts +5 -5
- package/development/train/train/train.d.ts.map +1 -1
- package/development/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -1
- package/development/train/train-blocked-passage.js +22 -21
- package/development/train/train-formation/train-formation.d.ts +2 -2
- package/development/train/train-formation/train-formation.d.ts.map +1 -1
- package/development/train/train-formation.js +113 -90
- package/development/train/train-wagon/train-wagon.d.ts +7 -9
- package/development/train/train-wagon/train-wagon.d.ts.map +1 -1
- package/development/train/train-wagon.js +166 -87
- package/development/train/train.js +142 -75
- package/development/visual-checkbox/visual-checkbox.d.ts +3 -3
- package/development/visual-checkbox/visual-checkbox.d.ts.map +1 -1
- package/development/visual-checkbox.js +79 -36
- package/dialog/dialog/dialog.d.ts +1 -1
- package/dialog/dialog/dialog.d.ts.map +1 -1
- package/dialog/dialog-actions/dialog-actions.d.ts.map +1 -1
- package/dialog/dialog-actions.js +18 -19
- package/dialog/dialog-content/dialog-content.d.ts.map +1 -1
- package/dialog/dialog-content.js +17 -18
- package/dialog/dialog-title/dialog-title.d.ts +3 -3
- package/dialog/dialog-title/dialog-title.d.ts.map +1 -1
- package/dialog/dialog-title.js +98 -66
- package/dialog/dialog.js +120 -114
- package/divider/divider.d.ts +1 -1
- package/divider/divider.d.ts.map +1 -1
- package/divider.js +41 -30
- package/expansion-panel/expansion-panel/expansion-panel.d.ts +4 -4
- package/expansion-panel/expansion-panel/expansion-panel.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-content/expansion-panel-content.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-content.js +20 -22
- package/expansion-panel/expansion-panel-header/expansion-panel-header.d.ts.map +1 -1
- package/expansion-panel/expansion-panel-header.js +53 -61
- package/expansion-panel/expansion-panel.js +145 -130
- package/file-selector/file-selector.d.ts +26 -15
- package/file-selector/file-selector.d.ts.map +1 -1
- package/file-selector.js +227 -153
- package/flip-card/flip-card/flip-card.d.ts +2 -2
- package/flip-card/flip-card/flip-card.d.ts.map +1 -1
- package/flip-card/flip-card-details/flip-card-details.d.ts.map +1 -1
- package/flip-card/flip-card-details.js +36 -38
- package/flip-card/flip-card-summary/flip-card-summary.d.ts +1 -1
- package/flip-card/flip-card-summary/flip-card-summary.d.ts.map +1 -1
- package/flip-card/flip-card-summary.js +42 -31
- package/flip-card/flip-card.js +88 -69
- package/footer/footer.d.ts +4 -4
- package/footer/footer.d.ts.map +1 -1
- package/footer.js +78 -37
- package/form-error/form-error.d.ts.map +1 -1
- package/form-error.js +24 -25
- package/form-field/form-field/form-field.d.ts +10 -10
- package/form-field/form-field/form-field.d.ts.map +1 -1
- package/form-field/form-field-clear/form-field-clear.d.ts.map +1 -1
- package/form-field/form-field-clear.js +39 -41
- package/form-field/form-field.js +295 -239
- package/header/common/header-action-common.d.ts +2 -2
- package/header/common/header-action-common.d.ts.map +1 -1
- package/header/common.js +36 -21
- package/header/header/header.d.ts +4 -4
- package/header/header/header.d.ts.map +1 -1
- package/header/header-button/header-button.d.ts.map +1 -1
- package/header/header-button.js +14 -16
- package/header/header-link/header-link.d.ts.map +1 -1
- package/header/header-link.js +14 -14
- package/header/header.js +138 -109
- package/icon/icon-base.d.ts +3 -4
- package/icon/icon-base.d.ts.map +1 -1
- package/icon/icon-name-mixin.d.ts +1 -1
- package/icon/icon-name-mixin.d.ts.map +1 -1
- package/icon/icon.d.ts +2 -2
- package/icon/icon.d.ts.map +1 -1
- package/icon.js +230 -165
- package/image/image.d.ts +17 -17
- package/image/image.d.ts.map +1 -1
- package/image.js +465 -195
- package/index.d.ts +3 -1
- package/index.js +3 -1
- package/journey-header/journey-header.d.ts +5 -5
- package/journey-header/journey-header.d.ts.map +1 -1
- package/journey-header.js +89 -49
- package/lead-container/lead-container.d.ts.map +1 -1
- package/lead-container.js +17 -18
- package/link/block-link/block-link.d.ts.map +1 -1
- package/link/block-link-button/block-link-button.d.ts.map +1 -1
- package/link/block-link-button.js +15 -17
- package/link/block-link-static/block-link-static.d.ts.map +1 -1
- package/link/block-link-static.js +14 -16
- package/link/block-link.js +15 -17
- package/link/common/block-link-common.d.ts +4 -3
- package/link/common/block-link-common.d.ts.map +1 -1
- package/link/common/link-common.d.ts +1 -1
- package/link/common/link-common.d.ts.map +1 -1
- package/link/common.js +64 -46
- package/link/link/link.d.ts.map +1 -1
- package/link/link-button/link-button.d.ts.map +1 -1
- package/link/link-button.js +15 -17
- package/link/link-static/link-static.d.ts.map +1 -1
- package/link/link-static.js +15 -17
- package/link/link.js +15 -17
- package/link-list/common/link-list-base.d.ts +3 -3
- package/link-list/common/link-list-base.d.ts.map +1 -1
- package/link-list/common.js +72 -44
- package/link-list/link-list/link-list.d.ts +2 -2
- package/link-list/link-list/link-list.d.ts.map +1 -1
- package/link-list/link-list-anchor/link-list-anchor.d.ts.map +1 -1
- package/link-list/link-list-anchor.js +15 -16
- package/link-list/link-list.js +43 -24
- package/loading-indicator/loading-indicator.d.ts +3 -3
- package/loading-indicator/loading-indicator.d.ts.map +1 -1
- package/loading-indicator.js +61 -36
- package/logo/logo.d.ts +2 -2
- package/logo/logo.d.ts.map +1 -1
- package/logo.js +47 -27
- package/map-container/map-container.d.ts +2 -2
- package/map-container/map-container.d.ts.map +1 -1
- package/map-container.js +84 -65
- package/menu/common/menu-action-common.d.ts +2 -2
- package/menu/common/menu-action-common.d.ts.map +1 -1
- package/menu/common.js +37 -22
- package/menu/menu/menu.d.ts +1 -1
- package/menu/menu/menu.d.ts.map +1 -1
- package/menu/menu-button/menu-button.d.ts.map +1 -1
- package/menu/menu-button.js +14 -16
- package/menu/menu-link/menu-link.d.ts.map +1 -1
- package/menu/menu-link.js +15 -17
- package/menu/menu.js +175 -170
- package/message/message.d.ts +2 -2
- package/message/message.d.ts.map +1 -1
- package/message.js +47 -27
- package/navigation/common/navigation-action-common.d.ts +1 -1
- package/navigation/common/navigation-action-common.d.ts.map +1 -1
- package/navigation/common.js +38 -33
- package/navigation/navigation/navigation.d.ts +2 -2
- package/navigation/navigation/navigation.d.ts.map +1 -1
- package/navigation/navigation-button/navigation-button.d.ts.map +1 -1
- package/navigation/navigation-button.js +14 -16
- package/navigation/navigation-link/navigation-link.d.ts.map +1 -1
- package/navigation/navigation-link.js +14 -16
- package/navigation/navigation-list/navigation-list.d.ts +1 -1
- package/navigation/navigation-list/navigation-list.d.ts.map +1 -1
- package/navigation/navigation-list.js +48 -35
- package/navigation/navigation-marker/navigation-marker.d.ts +1 -1
- package/navigation/navigation-marker/navigation-marker.d.ts.map +1 -1
- package/navigation/navigation-marker.js +77 -69
- package/navigation/navigation-section/navigation-section.d.ts +3 -3
- package/navigation/navigation-section/navigation-section.d.ts.map +1 -1
- package/navigation/navigation-section.js +192 -171
- package/navigation/navigation.js +185 -181
- package/notification/notification.d.ts +6 -6
- package/notification/notification.d.ts.map +1 -1
- package/notification.js +147 -116
- package/option/optgroup/optgroup-base-element.d.ts +3 -3
- package/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/option/optgroup/optgroup.d.ts.map +1 -1
- package/option/optgroup.js +131 -112
- package/option/option/option-base-element.d.ts +7 -7
- package/option/option/option-base-element.d.ts.map +1 -1
- package/option/option/option.d.ts.map +1 -1
- package/option/option.js +295 -252
- package/overlay/overlay-base-element.d.ts +1 -1
- package/overlay/overlay-base-element.d.ts.map +1 -1
- package/overlay/overlay.d.ts +4 -4
- package/overlay/overlay.d.ts.map +1 -1
- package/overlay.js +194 -165
- package/package.json +19 -3
- package/paginator/common/paginator-common.d.ts +26 -0
- package/paginator/common/paginator-common.d.ts.map +1 -0
- package/paginator/common.d.ts +2 -0
- package/paginator/common.d.ts.map +1 -0
- package/paginator/common.js +145 -0
- package/paginator/compact-paginator/compact-paginator.d.ts +20 -0
- package/paginator/compact-paginator/compact-paginator.d.ts.map +1 -0
- package/paginator/compact-paginator.d.ts +2 -0
- package/paginator/compact-paginator.d.ts.map +1 -0
- package/paginator/compact-paginator.js +40 -0
- package/paginator/paginator/paginator.d.ts +51 -0
- package/paginator/paginator/paginator.d.ts.map +1 -0
- package/paginator/paginator.d.ts +1 -90
- package/paginator/paginator.d.ts.map +1 -1
- package/paginator/paginator.js +171 -0
- package/paginator.d.ts +2 -0
- package/paginator.d.ts.map +1 -1
- package/paginator.js +3 -263
- package/popover/popover/popover.d.ts +6 -7
- package/popover/popover/popover.d.ts.map +1 -1
- package/popover/popover-trigger/popover-trigger.d.ts.map +1 -1
- package/popover/popover-trigger.js +26 -29
- package/popover/popover.js +230 -208
- package/radio-button/common/radio-button-common.d.ts +1 -1
- package/radio-button/common/radio-button-common.d.ts.map +1 -1
- package/radio-button/common.js +67 -43
- package/radio-button/radio-button/radio-button.d.ts +2 -6
- package/radio-button/radio-button/radio-button.d.ts.map +1 -1
- package/radio-button/radio-button-group/radio-button-group.d.ts +6 -6
- package/radio-button/radio-button-group/radio-button-group.d.ts.map +1 -1
- package/radio-button/radio-button-group.js +192 -156
- package/radio-button/radio-button-panel/radio-button-panel.d.ts +2 -6
- package/radio-button/radio-button-panel/radio-button-panel.d.ts.map +1 -1
- package/radio-button/radio-button-panel.js +49 -45
- package/radio-button/radio-button.js +43 -37
- package/screen-reader-only/screen-reader-only.d.ts.map +1 -1
- package/screen-reader-only.js +17 -18
- package/select/select.d.ts +17 -9
- package/select/select.d.ts.map +1 -1
- package/select.js +377 -373
- package/selection-expansion-panel/selection-expansion-panel.d.ts +3 -3
- package/selection-expansion-panel/selection-expansion-panel.d.ts.map +1 -1
- package/selection-expansion-panel.js +157 -148
- package/signet/signet.d.ts +2 -2
- package/signet/signet.d.ts.map +1 -1
- package/signet.js +48 -28
- package/skiplink-list/skiplink-list.d.ts +2 -2
- package/skiplink-list/skiplink-list.d.ts.map +1 -1
- package/skiplink-list.js +54 -36
- package/slider/slider.d.ts +7 -5
- package/slider/slider.d.ts.map +1 -1
- package/slider.js +197 -155
- package/standard-theme.css +5 -1
- package/status/status.d.ts +3 -3
- package/status/status.d.ts.map +1 -1
- package/status.js +71 -46
- package/stepper/step/step.d.ts.map +1 -1
- package/stepper/step-label/step-label.d.ts.map +1 -1
- package/stepper/step-label.js +69 -75
- package/stepper/step.js +99 -104
- package/stepper/stepper/stepper.d.ts +3 -3
- package/stepper/stepper/stepper.d.ts.map +1 -1
- package/stepper/stepper.js +208 -188
- package/table/table-wrapper/table-wrapper.d.ts.map +1 -1
- package/table/table-wrapper.js +32 -36
- package/tabs/tab/tab.d.ts.map +1 -1
- package/tabs/tab-group/tab-group.d.ts +2 -2
- package/tabs/tab-group/tab-group.d.ts.map +1 -1
- package/tabs/tab-group.js +200 -193
- package/tabs/tab-label/tab-label.d.ts +3 -3
- package/tabs/tab-label/tab-label.d.ts.map +1 -1
- package/tabs/tab-label.js +65 -37
- package/tabs/tab.js +34 -35
- package/tag/tag/tag.d.ts +3 -5
- package/tag/tag/tag.d.ts.map +1 -1
- package/tag/tag-group/tag-group.d.ts +3 -3
- package/tag/tag-group/tag-group.d.ts.map +1 -1
- package/tag/tag-group.js +107 -75
- package/tag/tag.js +92 -73
- package/teaser/teaser.d.ts +4 -4
- package/teaser/teaser.d.ts.map +1 -1
- package/teaser-hero/teaser-hero.d.ts +3 -3
- package/teaser-hero/teaser-hero.d.ts.map +1 -1
- package/teaser-hero.js +66 -38
- package/teaser-product/common/teaser-product-common.d.ts +1 -1
- package/teaser-product/common/teaser-product-common.d.ts.map +1 -1
- package/teaser-product/common.js +36 -21
- package/teaser-product/teaser-product/teaser-product.d.ts.map +1 -1
- package/teaser-product/teaser-product-static/teaser-product-static.d.ts.map +1 -1
- package/teaser-product/teaser-product-static.js +14 -17
- package/teaser-product/teaser-product.js +14 -17
- package/teaser.js +69 -37
- package/time-input/time-input.d.ts +1 -1
- package/time-input/time-input.d.ts.map +1 -1
- package/time-input.js +160 -166
- package/timetable-occupancy/timetable-occupancy.d.ts +2 -2
- package/timetable-occupancy/timetable-occupancy.d.ts.map +1 -1
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts +1 -1
- package/timetable-occupancy-icon/timetable-occupancy-icon.d.ts.map +1 -1
- package/timetable-occupancy-icon.js +60 -48
- package/timetable-occupancy.js +55 -38
- package/title/title-base.d.ts +3 -3
- package/title/title-base.d.ts.map +1 -1
- package/title/title.d.ts.map +1 -1
- package/title.js +81 -53
- package/toast/toast.d.ts +4 -4
- package/toast/toast.d.ts.map +1 -1
- package/toast.js +156 -123
- package/toggle/toggle/toggle.d.ts +3 -5
- package/toggle/toggle/toggle.d.ts.map +1 -1
- package/toggle/toggle-option/toggle-option.d.ts +2 -2
- package/toggle/toggle-option/toggle-option.d.ts.map +1 -1
- package/toggle/toggle-option.js +89 -72
- package/toggle/toggle.js +139 -122
- package/toggle-check/toggle-check.d.ts +4 -3
- package/toggle-check/toggle-check.d.ts.map +1 -1
- package/toggle-check.js +63 -41
- package/train/train/train.d.ts +5 -5
- package/train/train/train.d.ts.map +1 -1
- package/train/train-blocked-passage/train-blocked-passage.d.ts.map +1 -1
- package/train/train-blocked-passage.js +17 -18
- package/train/train-formation/train-formation.d.ts +2 -2
- package/train/train-formation/train-formation.d.ts.map +1 -1
- package/train/train-formation.js +96 -87
- package/train/train-wagon/train-wagon.d.ts +7 -9
- package/train/train-wagon/train-wagon.d.ts.map +1 -1
- package/train/train-wagon.js +150 -110
- package/train/train.js +108 -71
- package/visual-checkbox/visual-checkbox.d.ts +3 -3
- package/visual-checkbox/visual-checkbox.d.ts.map +1 -1
- package/visual-checkbox.js +59 -32
- package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
- package/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
- package/button/mini-button-group/index.d.ts +0 -2
- package/button/mini-button-group/index.d.ts.map +0 -1
- package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts +0 -2
- package/development/autocomplete-grid/autocomplete-grid-optgroup/index.d.ts.map +0 -1
- package/development/button/mini-button-group/index.d.ts +0 -2
- package/development/button/mini-button-group/index.d.ts.map +0 -1
- package/development/flip-card/flip-card/index.d.ts +0 -2
- package/development/flip-card/flip-card/index.d.ts.map +0 -1
- package/development/flip-card/flip-card-details/index.d.ts +0 -2
- package/development/flip-card/flip-card-details/index.d.ts.map +0 -1
- package/development/flip-card/flip-card-summary/index.d.ts +0 -2
- package/development/flip-card/flip-card-summary/index.d.ts.map +0 -1
- package/development/link-list/link-list-anchor/index.d.ts +0 -2
- package/development/link-list/link-list-anchor/index.d.ts.map +0 -1
- package/development/paginator/index.d.ts +0 -2
- package/development/paginator/index.d.ts.map +0 -1
- package/development/radio-button/radio-button-panel/index.d.ts +0 -2
- package/development/radio-button/radio-button-panel/index.d.ts.map +0 -1
- package/development/tabs/tab/index.d.ts +0 -2
- package/development/tabs/tab/index.d.ts.map +0 -1
- package/flip-card/flip-card/index.d.ts +0 -2
- package/flip-card/flip-card/index.d.ts.map +0 -1
- package/flip-card/flip-card-details/index.d.ts +0 -2
- package/flip-card/flip-card-details/index.d.ts.map +0 -1
- package/flip-card/flip-card-summary/index.d.ts +0 -2
- package/flip-card/flip-card-summary/index.d.ts.map +0 -1
- package/link-list/link-list-anchor/index.d.ts +0 -2
- package/link-list/link-list-anchor/index.d.ts.map +0 -1
- package/paginator/index.d.ts +0 -2
- package/paginator/index.d.ts.map +0 -1
- package/radio-button/radio-button-panel/index.d.ts +0 -2
- package/radio-button/radio-button-panel/index.d.ts.map +0 -1
- package/tabs/tab/index.d.ts +0 -2
- package/tabs/tab/index.d.ts.map +0 -1
package/development/image.js
CHANGED
|
@@ -1,6 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
var __typeError = (msg) => {
|
|
2
|
+
throw TypeError(msg);
|
|
3
|
+
};
|
|
4
|
+
var __accessCheck = (obj, member, msg) => member.has(obj) || __typeError("Cannot " + msg);
|
|
5
|
+
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
6
|
+
var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
7
|
+
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
8
|
+
import { __esDecorate, __runInitializers } from "tslib";
|
|
9
|
+
import { css, html, nothing, LitElement } from "lit";
|
|
10
|
+
import { customElement, property, eventOptions } from "lit/decorators.js";
|
|
3
11
|
import { ref } from "lit/directives/ref.js";
|
|
12
|
+
import { forceType } from "./core/decorators.js";
|
|
4
13
|
import { hostContext } from "./core/dom.js";
|
|
5
14
|
const SbbBreakpointZeroMin = 0;
|
|
6
15
|
const SbbBreakpointZeroMax = 359;
|
|
@@ -150,24 +159,13 @@ picture {
|
|
|
150
159
|
}`;
|
|
151
160
|
var __freeze = Object.freeze;
|
|
152
161
|
var __defProp = Object.defineProperty;
|
|
153
|
-
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
154
|
-
var __decorateClass = (decorators, target, key, kind) => {
|
|
155
|
-
var result = kind > 1 ? void 0 : kind ? __getOwnPropDesc(target, key) : target;
|
|
156
|
-
for (var i = decorators.length - 1, decorator; i >= 0; i--)
|
|
157
|
-
if (decorator = decorators[i])
|
|
158
|
-
result = (kind ? decorator(target, key, result) : decorator(result)) || result;
|
|
159
|
-
if (kind && result) __defProp(target, key, result);
|
|
160
|
-
return result;
|
|
161
|
-
};
|
|
162
162
|
var __template = (cooked, raw) => __freeze(__defProp(cooked, "raw", { value: __freeze(cooked.slice()) }));
|
|
163
163
|
var _a;
|
|
164
164
|
const imageHelperGetBreakpoints = (jsonString) => {
|
|
165
165
|
if (!jsonString || jsonString.length === 0) {
|
|
166
166
|
return [];
|
|
167
167
|
}
|
|
168
|
-
const logWarning = () => console.warn(
|
|
169
|
-
"sbb-image error: attribute breakpoints has wrong data format. Reference the documentation to see how you should format the data for this attribute."
|
|
170
|
-
);
|
|
168
|
+
const logWarning = () => console.warn("sbb-image error: attribute breakpoints has wrong data format. Reference the documentation to see how you should format the data for this attribute.");
|
|
171
169
|
let jsonObject;
|
|
172
170
|
try {
|
|
173
171
|
jsonObject = JSON.parse(jsonString);
|
|
@@ -228,102 +226,454 @@ const breakpointMap = {
|
|
|
228
226
|
"sbb-breakpoint-ultra-min": pxToRem(SbbBreakpointUltraMin),
|
|
229
227
|
"sbb-breakpoint-ultra-max": pxToRem(SbbBreakpointUltraMax)
|
|
230
228
|
};
|
|
231
|
-
let SbbImageElement =
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
229
|
+
let SbbImageElement = (() => {
|
|
230
|
+
var _alt_accessor_storage, _skipLqip_accessor_storage, _caption_accessor_storage, _copyright_accessor_storage, _copyrightHolder_accessor_storage, _customFocalPoint_accessor_storage, _decoding_accessor_storage, _focalPointDebug_accessor_storage, _focalPointX_accessor_storage, _focalPointY_accessor_storage, _imageSrc_accessor_storage, _importance_accessor_storage, _loading_accessor_storage, _performanceMark_accessor_storage, _pictureSizesConfig_accessor_storage, _borderRadius_accessor_storage, _aspectRatio_accessor_storage, _a2;
|
|
231
|
+
let _classDecorators = [customElement("sbb-image")];
|
|
232
|
+
let _classDescriptor;
|
|
233
|
+
let _classExtraInitializers = [];
|
|
234
|
+
let _classThis;
|
|
235
|
+
let _classSuper = LitElement;
|
|
236
|
+
let _instanceExtraInitializers = [];
|
|
237
|
+
let _alt_decorators;
|
|
238
|
+
let _alt_initializers = [];
|
|
239
|
+
let _alt_extraInitializers = [];
|
|
240
|
+
let _skipLqip_decorators;
|
|
241
|
+
let _skipLqip_initializers = [];
|
|
242
|
+
let _skipLqip_extraInitializers = [];
|
|
243
|
+
let _caption_decorators;
|
|
244
|
+
let _caption_initializers = [];
|
|
245
|
+
let _caption_extraInitializers = [];
|
|
246
|
+
let _copyright_decorators;
|
|
247
|
+
let _copyright_initializers = [];
|
|
248
|
+
let _copyright_extraInitializers = [];
|
|
249
|
+
let _copyrightHolder_decorators;
|
|
250
|
+
let _copyrightHolder_initializers = [];
|
|
251
|
+
let _copyrightHolder_extraInitializers = [];
|
|
252
|
+
let _customFocalPoint_decorators;
|
|
253
|
+
let _customFocalPoint_initializers = [];
|
|
254
|
+
let _customFocalPoint_extraInitializers = [];
|
|
255
|
+
let _decoding_decorators;
|
|
256
|
+
let _decoding_initializers = [];
|
|
257
|
+
let _decoding_extraInitializers = [];
|
|
258
|
+
let _focalPointDebug_decorators;
|
|
259
|
+
let _focalPointDebug_initializers = [];
|
|
260
|
+
let _focalPointDebug_extraInitializers = [];
|
|
261
|
+
let _focalPointX_decorators;
|
|
262
|
+
let _focalPointX_initializers = [];
|
|
263
|
+
let _focalPointX_extraInitializers = [];
|
|
264
|
+
let _focalPointY_decorators;
|
|
265
|
+
let _focalPointY_initializers = [];
|
|
266
|
+
let _focalPointY_extraInitializers = [];
|
|
267
|
+
let _imageSrc_decorators;
|
|
268
|
+
let _imageSrc_initializers = [];
|
|
269
|
+
let _imageSrc_extraInitializers = [];
|
|
270
|
+
let _importance_decorators;
|
|
271
|
+
let _importance_initializers = [];
|
|
272
|
+
let _importance_extraInitializers = [];
|
|
273
|
+
let _loading_decorators;
|
|
274
|
+
let _loading_initializers = [];
|
|
275
|
+
let _loading_extraInitializers = [];
|
|
276
|
+
let _performanceMark_decorators;
|
|
277
|
+
let _performanceMark_initializers = [];
|
|
278
|
+
let _performanceMark_extraInitializers = [];
|
|
279
|
+
let _pictureSizesConfig_decorators;
|
|
280
|
+
let _pictureSizesConfig_initializers = [];
|
|
281
|
+
let _pictureSizesConfig_extraInitializers = [];
|
|
282
|
+
let _borderRadius_decorators;
|
|
283
|
+
let _borderRadius_initializers = [];
|
|
284
|
+
let _borderRadius_extraInitializers = [];
|
|
285
|
+
let _aspectRatio_decorators;
|
|
286
|
+
let _aspectRatio_initializers = [];
|
|
287
|
+
let _aspectRatio_extraInitializers = [];
|
|
288
|
+
let __imageLoaded_decorators;
|
|
289
|
+
_a2 = class extends _classSuper {
|
|
290
|
+
constructor() {
|
|
291
|
+
super(...arguments);
|
|
292
|
+
__privateAdd(this, _alt_accessor_storage);
|
|
293
|
+
__privateAdd(this, _skipLqip_accessor_storage);
|
|
294
|
+
__privateAdd(this, _caption_accessor_storage);
|
|
295
|
+
__privateAdd(this, _copyright_accessor_storage);
|
|
296
|
+
__privateAdd(this, _copyrightHolder_accessor_storage);
|
|
297
|
+
__privateAdd(this, _customFocalPoint_accessor_storage);
|
|
298
|
+
__privateAdd(this, _decoding_accessor_storage);
|
|
299
|
+
__privateAdd(this, _focalPointDebug_accessor_storage);
|
|
300
|
+
__privateAdd(this, _focalPointX_accessor_storage);
|
|
301
|
+
__privateAdd(this, _focalPointY_accessor_storage);
|
|
302
|
+
__privateAdd(this, _imageSrc_accessor_storage);
|
|
303
|
+
__privateAdd(this, _importance_accessor_storage);
|
|
304
|
+
__privateAdd(this, _loading_accessor_storage);
|
|
305
|
+
__privateAdd(this, _performanceMark_accessor_storage);
|
|
306
|
+
__privateAdd(this, _pictureSizesConfig_accessor_storage);
|
|
307
|
+
__privateAdd(this, _borderRadius_accessor_storage);
|
|
308
|
+
__privateAdd(this, _aspectRatio_accessor_storage);
|
|
309
|
+
this._captionElement = __runInitializers(this, _instanceExtraInitializers);
|
|
310
|
+
this._config = {
|
|
311
|
+
nonRetinaQuality: "45",
|
|
312
|
+
retinaQuality: "20"
|
|
313
|
+
};
|
|
314
|
+
__privateSet(this, _alt_accessor_storage, __runInitializers(this, _alt_initializers, ""));
|
|
315
|
+
__privateSet(this, _skipLqip_accessor_storage, (__runInitializers(this, _alt_extraInitializers), __runInitializers(this, _skipLqip_initializers, false)));
|
|
316
|
+
__privateSet(this, _caption_accessor_storage, (__runInitializers(this, _skipLqip_extraInitializers), __runInitializers(this, _caption_initializers, "")));
|
|
317
|
+
__privateSet(this, _copyright_accessor_storage, (__runInitializers(this, _caption_extraInitializers), __runInitializers(this, _copyright_initializers, "")));
|
|
318
|
+
__privateSet(this, _copyrightHolder_accessor_storage, (__runInitializers(this, _copyright_extraInitializers), __runInitializers(this, _copyrightHolder_initializers, "Organization")));
|
|
319
|
+
__privateSet(this, _customFocalPoint_accessor_storage, (__runInitializers(this, _copyrightHolder_extraInitializers), __runInitializers(this, _customFocalPoint_initializers, false)));
|
|
320
|
+
__privateSet(this, _decoding_accessor_storage, (__runInitializers(this, _customFocalPoint_extraInitializers), __runInitializers(this, _decoding_initializers, "auto")));
|
|
321
|
+
__privateSet(this, _focalPointDebug_accessor_storage, (__runInitializers(this, _decoding_extraInitializers), __runInitializers(this, _focalPointDebug_initializers, false)));
|
|
322
|
+
__privateSet(this, _focalPointX_accessor_storage, (__runInitializers(this, _focalPointDebug_extraInitializers), __runInitializers(this, _focalPointX_initializers, 1)));
|
|
323
|
+
__privateSet(this, _focalPointY_accessor_storage, (__runInitializers(this, _focalPointX_extraInitializers), __runInitializers(this, _focalPointY_initializers, 1)));
|
|
324
|
+
__privateSet(this, _imageSrc_accessor_storage, (__runInitializers(this, _focalPointY_extraInitializers), __runInitializers(this, _imageSrc_initializers, "")));
|
|
325
|
+
__privateSet(this, _importance_accessor_storage, (__runInitializers(this, _imageSrc_extraInitializers), __runInitializers(this, _importance_initializers, "high")));
|
|
326
|
+
__privateSet(this, _loading_accessor_storage, (__runInitializers(this, _importance_extraInitializers), __runInitializers(this, _loading_initializers, "eager")));
|
|
327
|
+
__privateSet(this, _performanceMark_accessor_storage, (__runInitializers(this, _loading_extraInitializers), __runInitializers(this, _performanceMark_initializers, "")));
|
|
328
|
+
__privateSet(this, _pictureSizesConfig_accessor_storage, (__runInitializers(this, _performanceMark_extraInitializers), __runInitializers(this, _pictureSizesConfig_initializers, "")));
|
|
329
|
+
__privateSet(this, _borderRadius_accessor_storage, (__runInitializers(this, _pictureSizesConfig_extraInitializers), __runInitializers(this, _borderRadius_initializers, "default")));
|
|
330
|
+
__privateSet(this, _aspectRatio_accessor_storage, (__runInitializers(this, _borderRadius_extraInitializers), __runInitializers(this, _aspectRatio_initializers, "16-9")));
|
|
331
|
+
__runInitializers(this, _aspectRatio_extraInitializers);
|
|
266
332
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
333
|
+
/**
|
|
334
|
+
* An alt text is not always necessary (e.g. in teaser cards when
|
|
335
|
+
* additional link text is provided). In this case we can leave
|
|
336
|
+
* the value of the alt attribute blank, but the attribute itself
|
|
337
|
+
* still needs to be present. That way we can signal assistive
|
|
338
|
+
* technology, that they can skip the image.
|
|
339
|
+
*/
|
|
340
|
+
get alt() {
|
|
341
|
+
return __privateGet(this, _alt_accessor_storage);
|
|
270
342
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
async firstUpdated(changedProperties) {
|
|
274
|
-
super.firstUpdated(changedProperties);
|
|
275
|
-
await this.updateComplete;
|
|
276
|
-
if (this.complete) {
|
|
277
|
-
this.toggleAttribute("data-loaded", true);
|
|
343
|
+
set alt(value) {
|
|
344
|
+
__privateSet(this, _alt_accessor_storage, value);
|
|
278
345
|
}
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
346
|
+
/**
|
|
347
|
+
* If set to false, we show a blurred version of the image as
|
|
348
|
+
* placeholder before the actual image shows up. This will help
|
|
349
|
+
* to improve the perceived loading performance. Read more about
|
|
350
|
+
* the idea of lqip here:
|
|
351
|
+
* https://medium.com/@imgix/lqip-your-images-for-fast-loading-2523d9ee4a62
|
|
352
|
+
*/
|
|
353
|
+
get skipLqip() {
|
|
354
|
+
return __privateGet(this, _skipLqip_accessor_storage);
|
|
284
355
|
}
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
356
|
+
set skipLqip(value) {
|
|
357
|
+
__privateSet(this, _skipLqip_accessor_storage, value);
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* A caption can provide additional context to the image (e.g.
|
|
361
|
+
* descriptions and the like).
|
|
362
|
+
* Links will automatically receive tabindex=-1 if hideFromScreenreader
|
|
363
|
+
* is set to true. That way they will no longer become focusable.
|
|
364
|
+
*/
|
|
365
|
+
get caption() {
|
|
366
|
+
return __privateGet(this, _caption_accessor_storage);
|
|
367
|
+
}
|
|
368
|
+
set caption(value) {
|
|
369
|
+
__privateSet(this, _caption_accessor_storage, value);
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* If a copyright text is provided, we will add it to the caption
|
|
373
|
+
* and create a structured data json-ld block with the copyright
|
|
374
|
+
* information.
|
|
375
|
+
*/
|
|
376
|
+
get copyright() {
|
|
377
|
+
return __privateGet(this, _copyright_accessor_storage);
|
|
378
|
+
}
|
|
379
|
+
set copyright(value) {
|
|
380
|
+
__privateSet(this, _copyright_accessor_storage, value);
|
|
381
|
+
}
|
|
382
|
+
/**
|
|
383
|
+
* Copyright holder can either be an Organization or a Person
|
|
384
|
+
*/
|
|
385
|
+
get copyrightHolder() {
|
|
386
|
+
return __privateGet(this, _copyrightHolder_accessor_storage);
|
|
387
|
+
}
|
|
388
|
+
set copyrightHolder(value) {
|
|
389
|
+
__privateSet(this, _copyrightHolder_accessor_storage, value);
|
|
390
|
+
}
|
|
391
|
+
/**
|
|
392
|
+
* Set this to true, if you want to pass a custom focal point
|
|
393
|
+
* for the image. See full documentation here:
|
|
394
|
+
* https://docs.imgix.com/apis/rendering/focalpoint-crop
|
|
395
|
+
*/
|
|
396
|
+
get customFocalPoint() {
|
|
397
|
+
return __privateGet(this, _customFocalPoint_accessor_storage);
|
|
398
|
+
}
|
|
399
|
+
set customFocalPoint(value) {
|
|
400
|
+
__privateSet(this, _customFocalPoint_accessor_storage, value);
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* If the lazy property is set to true, the module will automatically
|
|
404
|
+
* change the decoding to async, otherwise the decoding is set to auto
|
|
405
|
+
* which leaves the handling up to the browser. Read more about the
|
|
406
|
+
* decoding attribute here:
|
|
407
|
+
* https://developer.mozilla.org/en-US/docs/Web/API/HTMLImageElement/decoding
|
|
408
|
+
*/
|
|
409
|
+
get decoding() {
|
|
410
|
+
return __privateGet(this, _decoding_accessor_storage);
|
|
411
|
+
}
|
|
412
|
+
set decoding(value) {
|
|
413
|
+
__privateSet(this, _decoding_accessor_storage, value);
|
|
414
|
+
}
|
|
415
|
+
/**
|
|
416
|
+
* Set this to true, to receive visual guidance where the custom focal
|
|
417
|
+
* point is currently set.
|
|
418
|
+
*/
|
|
419
|
+
get focalPointDebug() {
|
|
420
|
+
return __privateGet(this, _focalPointDebug_accessor_storage);
|
|
421
|
+
}
|
|
422
|
+
set focalPointDebug(value) {
|
|
423
|
+
__privateSet(this, _focalPointDebug_accessor_storage, value);
|
|
424
|
+
}
|
|
425
|
+
/**
|
|
426
|
+
* Pass in a floating number between 0 (left) and 1 (right).
|
|
427
|
+
*/
|
|
428
|
+
get focalPointX() {
|
|
429
|
+
return __privateGet(this, _focalPointX_accessor_storage);
|
|
430
|
+
}
|
|
431
|
+
set focalPointX(value) {
|
|
432
|
+
__privateSet(this, _focalPointX_accessor_storage, value);
|
|
433
|
+
}
|
|
434
|
+
/**
|
|
435
|
+
* Pass in a floating number between 0 (top) and 1 (bottom).
|
|
436
|
+
*/
|
|
437
|
+
get focalPointY() {
|
|
438
|
+
return __privateGet(this, _focalPointY_accessor_storage);
|
|
439
|
+
}
|
|
440
|
+
set focalPointY(value) {
|
|
441
|
+
__privateSet(this, _focalPointY_accessor_storage, value);
|
|
442
|
+
}
|
|
443
|
+
/**
|
|
444
|
+
* Right now the module is heavily coupled with the image delivery
|
|
445
|
+
* service imgix and depends on the original files being stored
|
|
446
|
+
* inside AEM. You can pass in any https://cdn.img.sbb.ch img
|
|
447
|
+
* src address you find on sbb.ch to play around with it. Just
|
|
448
|
+
* strip the url parameters and paste in the plain file address.
|
|
449
|
+
* If you want to know how to best work with this module with
|
|
450
|
+
* images coming from a different source, please contact the
|
|
451
|
+
* LYNE Core Team.
|
|
452
|
+
*/
|
|
453
|
+
get imageSrc() {
|
|
454
|
+
return __privateGet(this, _imageSrc_accessor_storage);
|
|
455
|
+
}
|
|
456
|
+
set imageSrc(value) {
|
|
457
|
+
__privateSet(this, _imageSrc_accessor_storage, value);
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* The importance attribute is fairly new attribute which should
|
|
461
|
+
* help the browser decide which resources it should prioritise
|
|
462
|
+
* during page load. We will set the attribute value based on the
|
|
463
|
+
* value, we receive in the loading attribute. 'eager', which we use
|
|
464
|
+
* for the largest image within the initial viewport, will set the
|
|
465
|
+
* attribute value to 'high'. 'lazy', which we use for images below
|
|
466
|
+
* the fold, will set the attribute value to 'low'.
|
|
467
|
+
*/
|
|
468
|
+
get importance() {
|
|
469
|
+
return __privateGet(this, _importance_accessor_storage);
|
|
470
|
+
}
|
|
471
|
+
set importance(value) {
|
|
472
|
+
__privateSet(this, _importance_accessor_storage, value);
|
|
473
|
+
}
|
|
474
|
+
/**
|
|
475
|
+
* With the support of native image lazy loading, we can now
|
|
476
|
+
* decide whether we want to load the image immediately or only
|
|
477
|
+
* once it is close to the visible viewport. The value eager is
|
|
478
|
+
* best used for images within the initial viewport. We want to
|
|
479
|
+
* load these images as fast as possible to improve the Core Web
|
|
480
|
+
* Vitals values. lazy on the other hand works best for images
|
|
481
|
+
* which are further down the page or invisible during the loading
|
|
482
|
+
* of the initial viewport.
|
|
483
|
+
*/
|
|
484
|
+
get loading() {
|
|
485
|
+
return __privateGet(this, _loading_accessor_storage);
|
|
486
|
+
}
|
|
487
|
+
set loading(value) {
|
|
488
|
+
__privateSet(this, _loading_accessor_storage, value);
|
|
489
|
+
}
|
|
490
|
+
/**
|
|
491
|
+
* With performance.mark you can log a timestamp associated with
|
|
492
|
+
* the name you define in performanceMark when a certain event is
|
|
493
|
+
* happening. In our case we will log the performance.mark into
|
|
494
|
+
* the PerformanceEntry API once the image is fully loaded.
|
|
495
|
+
* Performance monitoring tools like SpeedCurve or Lighthouse are
|
|
496
|
+
* then able to grab these entries from the PerformanceEntry API
|
|
497
|
+
* and give us additional information and insights about our page
|
|
498
|
+
* loading behaviour. We are then also able to monitor these
|
|
499
|
+
* values over a long period to see if our performance
|
|
500
|
+
* increases or decreases over time. Best to use lowercase strings
|
|
501
|
+
* here, separate words with underscores or dashes.
|
|
502
|
+
*/
|
|
503
|
+
get performanceMark() {
|
|
504
|
+
return __privateGet(this, _performanceMark_accessor_storage);
|
|
505
|
+
}
|
|
506
|
+
set performanceMark(value) {
|
|
507
|
+
__privateSet(this, _performanceMark_accessor_storage, value);
|
|
508
|
+
}
|
|
509
|
+
/**
|
|
510
|
+
* With the pictureSizesConfig object, you can pass in information
|
|
511
|
+
* into image about what kind of source elements should get
|
|
512
|
+
* rendered. mediaQueries accepts multiple Media Query entries
|
|
513
|
+
* which can get combined by defining a conditionOperator.
|
|
514
|
+
* Type is: stringified InterfaceImageAttributesSizesConfig-Object
|
|
515
|
+
* An example could look like this:
|
|
516
|
+
* {
|
|
517
|
+
* "breakpoints": [
|
|
518
|
+
* {
|
|
519
|
+
* "image": {
|
|
520
|
+
* "height": "675",
|
|
521
|
+
* "width": "1200"
|
|
522
|
+
* },
|
|
523
|
+
* "mediaQueries": [
|
|
524
|
+
* {
|
|
525
|
+
* "conditionFeature": "min-width",
|
|
526
|
+
* "conditionFeatureValue": {
|
|
527
|
+
* "lyneDesignToken": true,
|
|
528
|
+
* "value": "sbb-breakpoint-large-min"
|
|
529
|
+
* },
|
|
530
|
+
* "conditionOperator": false
|
|
531
|
+
* }
|
|
532
|
+
* ]
|
|
533
|
+
* },
|
|
534
|
+
* {
|
|
535
|
+
* "image": {
|
|
536
|
+
* "height": "549",
|
|
537
|
+
* "width": "976"
|
|
538
|
+
* },
|
|
539
|
+
* "mediaQueries": [
|
|
540
|
+
* {
|
|
541
|
+
* "conditionFeature": "min-width",
|
|
542
|
+
* "conditionFeatureValue": {
|
|
543
|
+
* "lyneDesignToken": true,
|
|
544
|
+
* "value": "sbb-breakpoint-small-min"
|
|
545
|
+
* },
|
|
546
|
+
* "conditionOperator": false
|
|
547
|
+
* }
|
|
548
|
+
* ]
|
|
549
|
+
* },
|
|
550
|
+
* {
|
|
551
|
+
* "image": {
|
|
552
|
+
* "height": "180",
|
|
553
|
+
* "width": "320"
|
|
554
|
+
* },
|
|
555
|
+
* "mediaQueries": [
|
|
556
|
+
* {
|
|
557
|
+
* "conditionFeature": "max-width",
|
|
558
|
+
* "conditionFeatureValue": {
|
|
559
|
+
* "lyneDesignToken": true,
|
|
560
|
+
* "value": "sbb-breakpoint-micro-max"
|
|
561
|
+
* },
|
|
562
|
+
* "conditionOperator": "and"
|
|
563
|
+
* },
|
|
564
|
+
* {
|
|
565
|
+
* "conditionFeature": "orientation",
|
|
566
|
+
* "conditionFeatureValue": {
|
|
567
|
+
* "lyneDesignToken": false,
|
|
568
|
+
* "value": "landscape"
|
|
569
|
+
* },
|
|
570
|
+
* "conditionOperator": false
|
|
571
|
+
* }
|
|
572
|
+
* ]
|
|
573
|
+
* }
|
|
574
|
+
* ]
|
|
575
|
+
* }
|
|
576
|
+
*/
|
|
577
|
+
get pictureSizesConfig() {
|
|
578
|
+
return __privateGet(this, _pictureSizesConfig_accessor_storage);
|
|
579
|
+
}
|
|
580
|
+
set pictureSizesConfig(value) {
|
|
581
|
+
__privateSet(this, _pictureSizesConfig_accessor_storage, value);
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Border radius of the image. Choose between a default radius, no radius and a completely round image.
|
|
585
|
+
*/
|
|
586
|
+
get borderRadius() {
|
|
587
|
+
return __privateGet(this, _borderRadius_accessor_storage);
|
|
588
|
+
}
|
|
589
|
+
set borderRadius(value) {
|
|
590
|
+
__privateSet(this, _borderRadius_accessor_storage, value);
|
|
591
|
+
}
|
|
592
|
+
/**
|
|
593
|
+
* Set an aspect ratio
|
|
594
|
+
* default is '16-9' (16/9)
|
|
595
|
+
* other values: 'free', '1-1', '1-2', '2-1', '2-3', '3-2', '3-4', '4-3', '4-5', '5-4', '9-16'
|
|
596
|
+
*/
|
|
597
|
+
get aspectRatio() {
|
|
598
|
+
return __privateGet(this, _aspectRatio_accessor_storage);
|
|
599
|
+
}
|
|
600
|
+
set aspectRatio(value) {
|
|
601
|
+
__privateSet(this, _aspectRatio_accessor_storage, value);
|
|
602
|
+
}
|
|
603
|
+
/** Whether the image is finished loading or failed to load. */
|
|
604
|
+
get complete() {
|
|
605
|
+
var _a3, _b, _c;
|
|
606
|
+
return ((_c = (_b = (_a3 = this.shadowRoot) == null ? void 0 : _a3.querySelector) == null ? void 0 : _b.call(_a3, ".sbb-image__img")) == null ? void 0 : _c.complete) ?? false;
|
|
607
|
+
}
|
|
608
|
+
connectedCallback() {
|
|
609
|
+
super.connectedCallback();
|
|
610
|
+
this.toggleAttribute("data-teaser", !!hostContext("sbb-teaser-hero", this) || !!this.closest("sbb-teaser-paid"));
|
|
611
|
+
}
|
|
612
|
+
updated(changedProperties) {
|
|
613
|
+
super.updated(changedProperties);
|
|
614
|
+
if (!this._captionElement) {
|
|
615
|
+
return;
|
|
616
|
+
}
|
|
617
|
+
this._linksInCaption = this._captionElement.querySelectorAll("a");
|
|
618
|
+
if (!this._linksInCaption) {
|
|
619
|
+
return;
|
|
620
|
+
}
|
|
621
|
+
this._addFocusAbilityToLinksInCaption();
|
|
622
|
+
}
|
|
623
|
+
async firstUpdated(changedProperties) {
|
|
624
|
+
super.firstUpdated(changedProperties);
|
|
625
|
+
await this.updateComplete;
|
|
626
|
+
if (this.complete) {
|
|
627
|
+
this.toggleAttribute("data-loaded", true);
|
|
628
|
+
}
|
|
629
|
+
}
|
|
630
|
+
_logPerformanceMarks() {
|
|
631
|
+
if (this.performanceMark) {
|
|
632
|
+
performance.clearMarks(this.performanceMark);
|
|
633
|
+
performance.mark(this.performanceMark);
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
_matchMediaQueryDesignToken(breakpointSizeName) {
|
|
637
|
+
const value = breakpointMap[breakpointSizeName];
|
|
638
|
+
return value ? `${value}rem` : "";
|
|
639
|
+
}
|
|
640
|
+
_addFocusAbilityToLinksInCaption() {
|
|
641
|
+
var _a3;
|
|
642
|
+
(_a3 = this._linksInCaption) == null ? void 0 : _a3.forEach((link) => {
|
|
643
|
+
link.removeAttribute("tabindex");
|
|
644
|
+
});
|
|
645
|
+
}
|
|
646
|
+
_prepareImageUrl(baseUrl, lquip = false) {
|
|
647
|
+
if (!baseUrl || baseUrl === "") {
|
|
648
|
+
return "";
|
|
649
|
+
}
|
|
650
|
+
const isFullyQualifiedUrl = !!baseUrl.match(/^\w+:\/\//);
|
|
651
|
+
const imageUrlObj = isFullyQualifiedUrl ? new URL(baseUrl) : new URL(`http://noop/${baseUrl}`);
|
|
652
|
+
if (lquip) {
|
|
653
|
+
imageUrlObj.searchParams.append("blur", "100");
|
|
654
|
+
imageUrlObj.searchParams.append("w", "100");
|
|
655
|
+
imageUrlObj.searchParams.append("h", "56");
|
|
656
|
+
} else {
|
|
657
|
+
imageUrlObj.searchParams.append("auto", "format,compress,cs=tinysrgb");
|
|
658
|
+
}
|
|
659
|
+
if (this.customFocalPoint) {
|
|
660
|
+
imageUrlObj.searchParams.append("fit", "crop");
|
|
661
|
+
imageUrlObj.searchParams.append("crop", "focalpoint");
|
|
662
|
+
imageUrlObj.searchParams.append("fp-x", this.focalPointX.toString(10));
|
|
663
|
+
imageUrlObj.searchParams.append("fp-y", this.focalPointY.toString(10));
|
|
664
|
+
imageUrlObj.searchParams.append("fp-z", "1");
|
|
665
|
+
}
|
|
666
|
+
if (this.focalPointDebug) {
|
|
667
|
+
imageUrlObj.searchParams.append("fp-debug", "true");
|
|
668
|
+
}
|
|
669
|
+
return isFullyQualifiedUrl ? imageUrlObj.href : imageUrlObj.pathname.substring(1) + imageUrlObj.search;
|
|
670
|
+
}
|
|
671
|
+
_preparePictureSizeConfigs() {
|
|
672
|
+
let pictureSizesConfig;
|
|
673
|
+
if (this.pictureSizesConfig) {
|
|
674
|
+
pictureSizesConfig = this.pictureSizesConfig;
|
|
675
|
+
} else {
|
|
676
|
+
pictureSizesConfig = `{
|
|
327
677
|
"breakpoints": [
|
|
328
678
|
{
|
|
329
679
|
"image": {
|
|
@@ -375,41 +725,41 @@ let SbbImageElement = class extends LitElement {
|
|
|
375
725
|
}
|
|
376
726
|
]
|
|
377
727
|
}`;
|
|
728
|
+
}
|
|
729
|
+
return imageHelperGetBreakpoints(pictureSizesConfig);
|
|
378
730
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
731
|
+
_createMediaQueryString(mediaQueries) {
|
|
732
|
+
let mediaQuery = "";
|
|
733
|
+
mediaQueries.forEach((mq) => {
|
|
734
|
+
const mqCondition = mq.conditionFeature;
|
|
735
|
+
let mqValue;
|
|
736
|
+
if (mq.conditionFeatureValue.lyneDesignToken) {
|
|
737
|
+
mqValue = this._matchMediaQueryDesignToken(mq.conditionFeatureValue.value);
|
|
738
|
+
} else {
|
|
739
|
+
mqValue = mq.conditionFeatureValue.value;
|
|
740
|
+
}
|
|
741
|
+
const mqCombiner = mq.conditionOperator ? ` ${mq.conditionOperator} ` : "";
|
|
742
|
+
mediaQuery += `(${mqCondition}: ${mqValue})${mqCombiner}`;
|
|
743
|
+
});
|
|
744
|
+
return mediaQuery;
|
|
745
|
+
}
|
|
746
|
+
_imageLoaded() {
|
|
747
|
+
this._logPerformanceMarks();
|
|
748
|
+
this.toggleAttribute("data-loaded", true);
|
|
749
|
+
this.dispatchEvent(new Event("load"));
|
|
750
|
+
}
|
|
751
|
+
render() {
|
|
752
|
+
let { caption } = this;
|
|
753
|
+
let schemaData = "";
|
|
754
|
+
const imageUrlLQIP = this._prepareImageUrl(this.imageSrc, true);
|
|
755
|
+
const imageUrlWithParams = this._prepareImageUrl(this.imageSrc, false);
|
|
756
|
+
if (this.loading === "lazy") {
|
|
757
|
+
this.decoding = "async";
|
|
758
|
+
this.importance = "low";
|
|
390
759
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
return mediaQuery;
|
|
395
|
-
}
|
|
396
|
-
_imageLoaded() {
|
|
397
|
-
this._logPerformanceMarks();
|
|
398
|
-
this.toggleAttribute("data-loaded", true);
|
|
399
|
-
this.dispatchEvent(new Event("load"));
|
|
400
|
-
}
|
|
401
|
-
render() {
|
|
402
|
-
let { caption } = this;
|
|
403
|
-
let schemaData = "";
|
|
404
|
-
const imageUrlLQIP = this._prepareImageUrl(this.imageSrc, true);
|
|
405
|
-
const imageUrlWithParams = this._prepareImageUrl(this.imageSrc, false);
|
|
406
|
-
if (this.loading === "lazy") {
|
|
407
|
-
this.decoding = "async";
|
|
408
|
-
this.importance = "low";
|
|
409
|
-
}
|
|
410
|
-
if (this.copyright) {
|
|
411
|
-
caption = `${this.caption} ©${this.copyright}`;
|
|
412
|
-
schemaData = `{
|
|
760
|
+
if (this.copyright) {
|
|
761
|
+
caption = `${this.caption} ©${this.copyright}`;
|
|
762
|
+
schemaData = `{
|
|
413
763
|
"@context": "https://schema.org",
|
|
414
764
|
"@type": "Photograph",
|
|
415
765
|
"image": "${this.imageSrc}",
|
|
@@ -418,9 +768,9 @@ let SbbImageElement = class extends LitElement {
|
|
|
418
768
|
"name": "${this.copyright}"
|
|
419
769
|
}
|
|
420
770
|
}`;
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
771
|
+
}
|
|
772
|
+
const pictureSizeConfigs = this._preparePictureSizeConfigs();
|
|
773
|
+
return html`
|
|
424
774
|
<figure class="sbb-image__figure">
|
|
425
775
|
<div class="sbb-image__wrapper">
|
|
426
776
|
${!this.skipLqip ? html`<img
|
|
@@ -436,17 +786,17 @@ let SbbImageElement = class extends LitElement {
|
|
|
436
786
|
<picture>
|
|
437
787
|
<!-- render picture element sources -->
|
|
438
788
|
${pictureSizeConfigs.map((config) => {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
789
|
+
const imageHeight = config.image.height;
|
|
790
|
+
const imageWidth = config.image.width;
|
|
791
|
+
const mediaQuery = this._createMediaQueryString(config.mediaQueries);
|
|
792
|
+
return [
|
|
793
|
+
html` <source
|
|
444
794
|
media=${`${mediaQuery}`}
|
|
445
795
|
sizes=${`${imageWidth}px`}
|
|
446
796
|
srcset=${`${imageUrlWithParams}&w=${imageWidth}&h=${imageHeight}&q=${this._config.nonRetinaQuality} ${imageWidth}w, ${imageUrlWithParams}&w=${imageWidth * 2}&h=${imageHeight * 2}&q=${this._config.retinaQuality} ${imageWidth * 2}w`}
|
|
447
797
|
></source>`
|
|
448
|
-
|
|
449
|
-
|
|
798
|
+
];
|
|
799
|
+
})}
|
|
450
800
|
<img
|
|
451
801
|
alt=${this.alt || ""}
|
|
452
802
|
@load=${this._imageLoaded}
|
|
@@ -465,77 +815,95 @@ let SbbImageElement = class extends LitElement {
|
|
|
465
815
|
class="sbb-image__caption"
|
|
466
816
|
.innerHTML=${caption}
|
|
467
817
|
${ref((el) => {
|
|
468
|
-
|
|
469
|
-
|
|
818
|
+
this._captionElement = el;
|
|
819
|
+
})}
|
|
470
820
|
></figcaption>` : nothing}
|
|
471
821
|
${schemaData ? html(_a || (_a = __template(['<script type="application/ld+json" .innerHTML=', "><\/script>"])), schemaData) : nothing}
|
|
472
822
|
</figure>
|
|
473
823
|
`;
|
|
474
|
-
|
|
475
|
-
}
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
824
|
+
}
|
|
825
|
+
}, _alt_accessor_storage = new WeakMap(), _skipLqip_accessor_storage = new WeakMap(), _caption_accessor_storage = new WeakMap(), _copyright_accessor_storage = new WeakMap(), _copyrightHolder_accessor_storage = new WeakMap(), _customFocalPoint_accessor_storage = new WeakMap(), _decoding_accessor_storage = new WeakMap(), _focalPointDebug_accessor_storage = new WeakMap(), _focalPointX_accessor_storage = new WeakMap(), _focalPointY_accessor_storage = new WeakMap(), _imageSrc_accessor_storage = new WeakMap(), _importance_accessor_storage = new WeakMap(), _loading_accessor_storage = new WeakMap(), _performanceMark_accessor_storage = new WeakMap(), _pictureSizesConfig_accessor_storage = new WeakMap(), _borderRadius_accessor_storage = new WeakMap(), _aspectRatio_accessor_storage = new WeakMap(), _classThis = _a2, (() => {
|
|
826
|
+
const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
|
|
827
|
+
_alt_decorators = [forceType(), property()];
|
|
828
|
+
_skipLqip_decorators = [forceType(), property({ attribute: "skip-lqip", type: Boolean, reflect: true })];
|
|
829
|
+
_caption_decorators = [forceType(), property()];
|
|
830
|
+
_copyright_decorators = [forceType(), property()];
|
|
831
|
+
_copyrightHolder_decorators = [property({ attribute: "copyright-holder" })];
|
|
832
|
+
_customFocalPoint_decorators = [forceType(), property({ attribute: "custom-focal-point", type: Boolean })];
|
|
833
|
+
_decoding_decorators = [property()];
|
|
834
|
+
_focalPointDebug_decorators = [forceType(), property({ attribute: "focal-point-debug", type: Boolean })];
|
|
835
|
+
_focalPointX_decorators = [forceType(), property({ attribute: "focal-point-x", type: Number })];
|
|
836
|
+
_focalPointY_decorators = [forceType(), property({ attribute: "focal-point-y", type: Number })];
|
|
837
|
+
_imageSrc_decorators = [forceType(), property({ attribute: "image-src" })];
|
|
838
|
+
_importance_decorators = [property()];
|
|
839
|
+
_loading_decorators = [property()];
|
|
840
|
+
_performanceMark_decorators = [forceType(), property({ attribute: "performance-mark" })];
|
|
841
|
+
_pictureSizesConfig_decorators = [forceType(), property({ attribute: "picture-sizes-config" })];
|
|
842
|
+
_borderRadius_decorators = [property({ attribute: "border-radius", reflect: true })];
|
|
843
|
+
_aspectRatio_decorators = [property({ attribute: "aspect-ratio", reflect: true })];
|
|
844
|
+
__imageLoaded_decorators = [eventOptions(eventListenerOptions)];
|
|
845
|
+
__esDecorate(_a2, null, _alt_decorators, { kind: "accessor", name: "alt", static: false, private: false, access: { has: (obj) => "alt" in obj, get: (obj) => obj.alt, set: (obj, value) => {
|
|
846
|
+
obj.alt = value;
|
|
847
|
+
} }, metadata: _metadata }, _alt_initializers, _alt_extraInitializers);
|
|
848
|
+
__esDecorate(_a2, null, _skipLqip_decorators, { kind: "accessor", name: "skipLqip", static: false, private: false, access: { has: (obj) => "skipLqip" in obj, get: (obj) => obj.skipLqip, set: (obj, value) => {
|
|
849
|
+
obj.skipLqip = value;
|
|
850
|
+
} }, metadata: _metadata }, _skipLqip_initializers, _skipLqip_extraInitializers);
|
|
851
|
+
__esDecorate(_a2, null, _caption_decorators, { kind: "accessor", name: "caption", static: false, private: false, access: { has: (obj) => "caption" in obj, get: (obj) => obj.caption, set: (obj, value) => {
|
|
852
|
+
obj.caption = value;
|
|
853
|
+
} }, metadata: _metadata }, _caption_initializers, _caption_extraInitializers);
|
|
854
|
+
__esDecorate(_a2, null, _copyright_decorators, { kind: "accessor", name: "copyright", static: false, private: false, access: { has: (obj) => "copyright" in obj, get: (obj) => obj.copyright, set: (obj, value) => {
|
|
855
|
+
obj.copyright = value;
|
|
856
|
+
} }, metadata: _metadata }, _copyright_initializers, _copyright_extraInitializers);
|
|
857
|
+
__esDecorate(_a2, null, _copyrightHolder_decorators, { kind: "accessor", name: "copyrightHolder", static: false, private: false, access: { has: (obj) => "copyrightHolder" in obj, get: (obj) => obj.copyrightHolder, set: (obj, value) => {
|
|
858
|
+
obj.copyrightHolder = value;
|
|
859
|
+
} }, metadata: _metadata }, _copyrightHolder_initializers, _copyrightHolder_extraInitializers);
|
|
860
|
+
__esDecorate(_a2, null, _customFocalPoint_decorators, { kind: "accessor", name: "customFocalPoint", static: false, private: false, access: { has: (obj) => "customFocalPoint" in obj, get: (obj) => obj.customFocalPoint, set: (obj, value) => {
|
|
861
|
+
obj.customFocalPoint = value;
|
|
862
|
+
} }, metadata: _metadata }, _customFocalPoint_initializers, _customFocalPoint_extraInitializers);
|
|
863
|
+
__esDecorate(_a2, null, _decoding_decorators, { kind: "accessor", name: "decoding", static: false, private: false, access: { has: (obj) => "decoding" in obj, get: (obj) => obj.decoding, set: (obj, value) => {
|
|
864
|
+
obj.decoding = value;
|
|
865
|
+
} }, metadata: _metadata }, _decoding_initializers, _decoding_extraInitializers);
|
|
866
|
+
__esDecorate(_a2, null, _focalPointDebug_decorators, { kind: "accessor", name: "focalPointDebug", static: false, private: false, access: { has: (obj) => "focalPointDebug" in obj, get: (obj) => obj.focalPointDebug, set: (obj, value) => {
|
|
867
|
+
obj.focalPointDebug = value;
|
|
868
|
+
} }, metadata: _metadata }, _focalPointDebug_initializers, _focalPointDebug_extraInitializers);
|
|
869
|
+
__esDecorate(_a2, null, _focalPointX_decorators, { kind: "accessor", name: "focalPointX", static: false, private: false, access: { has: (obj) => "focalPointX" in obj, get: (obj) => obj.focalPointX, set: (obj, value) => {
|
|
870
|
+
obj.focalPointX = value;
|
|
871
|
+
} }, metadata: _metadata }, _focalPointX_initializers, _focalPointX_extraInitializers);
|
|
872
|
+
__esDecorate(_a2, null, _focalPointY_decorators, { kind: "accessor", name: "focalPointY", static: false, private: false, access: { has: (obj) => "focalPointY" in obj, get: (obj) => obj.focalPointY, set: (obj, value) => {
|
|
873
|
+
obj.focalPointY = value;
|
|
874
|
+
} }, metadata: _metadata }, _focalPointY_initializers, _focalPointY_extraInitializers);
|
|
875
|
+
__esDecorate(_a2, null, _imageSrc_decorators, { kind: "accessor", name: "imageSrc", static: false, private: false, access: { has: (obj) => "imageSrc" in obj, get: (obj) => obj.imageSrc, set: (obj, value) => {
|
|
876
|
+
obj.imageSrc = value;
|
|
877
|
+
} }, metadata: _metadata }, _imageSrc_initializers, _imageSrc_extraInitializers);
|
|
878
|
+
__esDecorate(_a2, null, _importance_decorators, { kind: "accessor", name: "importance", static: false, private: false, access: { has: (obj) => "importance" in obj, get: (obj) => obj.importance, set: (obj, value) => {
|
|
879
|
+
obj.importance = value;
|
|
880
|
+
} }, metadata: _metadata }, _importance_initializers, _importance_extraInitializers);
|
|
881
|
+
__esDecorate(_a2, null, _loading_decorators, { kind: "accessor", name: "loading", static: false, private: false, access: { has: (obj) => "loading" in obj, get: (obj) => obj.loading, set: (obj, value) => {
|
|
882
|
+
obj.loading = value;
|
|
883
|
+
} }, metadata: _metadata }, _loading_initializers, _loading_extraInitializers);
|
|
884
|
+
__esDecorate(_a2, null, _performanceMark_decorators, { kind: "accessor", name: "performanceMark", static: false, private: false, access: { has: (obj) => "performanceMark" in obj, get: (obj) => obj.performanceMark, set: (obj, value) => {
|
|
885
|
+
obj.performanceMark = value;
|
|
886
|
+
} }, metadata: _metadata }, _performanceMark_initializers, _performanceMark_extraInitializers);
|
|
887
|
+
__esDecorate(_a2, null, _pictureSizesConfig_decorators, { kind: "accessor", name: "pictureSizesConfig", static: false, private: false, access: { has: (obj) => "pictureSizesConfig" in obj, get: (obj) => obj.pictureSizesConfig, set: (obj, value) => {
|
|
888
|
+
obj.pictureSizesConfig = value;
|
|
889
|
+
} }, metadata: _metadata }, _pictureSizesConfig_initializers, _pictureSizesConfig_extraInitializers);
|
|
890
|
+
__esDecorate(_a2, null, _borderRadius_decorators, { kind: "accessor", name: "borderRadius", static: false, private: false, access: { has: (obj) => "borderRadius" in obj, get: (obj) => obj.borderRadius, set: (obj, value) => {
|
|
891
|
+
obj.borderRadius = value;
|
|
892
|
+
} }, metadata: _metadata }, _borderRadius_initializers, _borderRadius_extraInitializers);
|
|
893
|
+
__esDecorate(_a2, null, _aspectRatio_decorators, { kind: "accessor", name: "aspectRatio", static: false, private: false, access: { has: (obj) => "aspectRatio" in obj, get: (obj) => obj.aspectRatio, set: (obj, value) => {
|
|
894
|
+
obj.aspectRatio = value;
|
|
895
|
+
} }, metadata: _metadata }, _aspectRatio_initializers, _aspectRatio_extraInitializers);
|
|
896
|
+
__esDecorate(_a2, null, __imageLoaded_decorators, { kind: "method", name: "_imageLoaded", static: false, private: false, access: { has: (obj) => "_imageLoaded" in obj, get: (obj) => obj._imageLoaded }, metadata: _metadata }, null, _instanceExtraInitializers);
|
|
897
|
+
__esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
|
|
898
|
+
_classThis = _classDescriptor.value;
|
|
899
|
+
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
900
|
+
})(), _a2.styles = style, _a2.events = {
|
|
901
|
+
error: "error",
|
|
902
|
+
load: "load"
|
|
903
|
+
}, __runInitializers(_classThis, _classExtraInitializers), _a2;
|
|
904
|
+
return _classThis;
|
|
905
|
+
})();
|
|
538
906
|
export {
|
|
539
907
|
SbbImageElement
|
|
540
908
|
};
|
|
541
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ac2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zL2Rpc3QvanMvc2JiLXRva2Vucy5tanMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaW1hZ2UvaW1hZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEbyBub3QgZWRpdCBkaXJlY3RseVxuICogR2VuZXJhdGVkIG9uIE1vbiwgMDIgU2VwIDIwMjQgMTU6NDU6MTEgR01UXG4gKi9cblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjJ4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb24zeCA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjR4ID0gMTYwO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uNXggPSAyMDA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb242eCA9IDI0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjEyeCA9IDQ4MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25FYXNpbmcgPSBcImN1YmljLWJlemllciguNDcsIC4xLCAxLCAuNjMpXCI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgxeCA9IDE7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgyeCA9IDI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgzeCA9IDM7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzMXggPSAyO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czJ4ID0gNDtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM0eCA9IDg7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzNnggPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM4eCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czE2eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRaZXJvTWluID0gMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50WmVyb01heCA9IDM1OTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWljcm9NaW4gPSAzNjA7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1pY3JvTWF4ID0gNTk5O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1pbiA9IDYwMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50U21hbGxNYXggPSA4Mzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1lZGl1bU1pbiA9IDg0MDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWVkaXVtTWF4ID0gMTAyMztcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TGFyZ2VNaW4gPSAxMDI0O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRMYXJnZU1heCA9IDEyNzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFdpZGVNaW4gPSAxMjgwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRXaWRlTWF4ID0gMTQzOTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50VWx0cmFNaW4gPSAxNDQwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRVbHRyYU1heCA9IDI1Nzk7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFjayA9IFwiIzAwMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTAgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGExMCA9IFwicmdiYSgwLCAwLCAwLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMTUgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGEyMCA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMzAgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTQwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGE1MCA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhNjAgPSBcInJnYmEoMCwgMCwgMCwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTcwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pZG5pZ2h0ID0gXCIjMTUxNTE1XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDaGFyY29hbCA9IFwiIzIxMjEyMVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9ySXJvbiA9IFwiIzQ0NDQ0NFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQW50aHJhY2l0ZSA9IFwiIzVhNWE1YVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3Jhbml0ZSA9IFwiIzY4Njg2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWV0YWwgPSBcIiM3Njc2NzZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1ldGFsQWxwaGEwID0gXCJyZ2JhKDExOCwgMTE4LCAxMTgsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JNZXRhbEFscGhhMjAgPSBcInJnYmEoMTE4LCAxMTgsIDExOCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2UgPSBcIiM4ZDhkOGRcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTbW9rZUFscGhhNSA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2VBbHBoYTEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEyMCA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTdG9ybSA9IFwiI2E4YThhOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3JhcGhpdGUgPSBcIiNiN2I3YjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckNlbWVudCA9IFwiI2JkYmRiZFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2VtZW50QWxwaGEwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDZW1lbnRBbHBoYTIwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBsYXRpbnVtID0gXCIjY2RjZGNkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQbGF0aW51bUFscGhhMCA9IFwicmdiYSgyMDUsIDIwNSwgMjA1LCAwKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGxhdGludW1BbHBoYTIwID0gXCJyZ2JhKDIwNSwgMjA1LCAyMDUsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckFsdW1pbml1bSA9IFwiI2QyZDJkMlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2lsdmVyID0gXCIjZGNkY2RjXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDbG91ZCA9IFwiI2U1ZTVlNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2xvdWRBbHBoYTgwID0gXCJyZ2JhKDIyOSwgMjI5LCAyMjksIDAuOClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pbGsgPSBcIiNmNmY2ZjZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZCA9IFwiI2ViMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkQWxwaGEwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZEFscGhhMjAgPSBcInJnYmEoMjM1LCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWRBbHBoYTkwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMC45KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkTW9kZURhcmsgPSBcIiNmZjM4MzhcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDEyNSA9IFwiI2M2MDAxOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkMTI1QWxwaGEwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQxMjVBbHBoYTIwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDE1MCA9IFwiI2EyMDAxM1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGUgPSBcIiNmZmZmZmZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGEwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhMjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTMwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGE1MCA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhNjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTcwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNreSA9IFwiIzAwNzljN1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHQgPSBcIiMxNDNhODVcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclZpb2xldCA9IFwiIzZmMjI4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGluayA9IFwiI2NmNDA4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQXV0dW1uID0gXCIjZTg0ZTEwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JPcmFuZ2UgPSBcIiNmMjdlMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBlYWNoID0gXCIjZmNiYjAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JMZW1vbiA9IFwiI2ZmZGUxNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd24gPSBcIiNiNzYwMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckdyZWVuID0gXCIjMDA4YTM2XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JUdXJxdW9pc2UgPSBcIiMwMGE1OWJcIjtcbmV4cG9ydCBjb25zdCBTYmJGb2N1c091dGxpbmVPZmZzZXQgPSAzO1xuZXhwb3J0IGNvbnN0IFNiYkhvdmVySW1hZ2VCcmlnaHRuZXNzID0gMS4wNzU7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zWmVybyA9IDQ7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zTWljcm8gPSA0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1NtYWxsID0gNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNNZWRpdW0gPSA4O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc0xhcmdlID0gODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNXaWRlID0gMTI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlTWljcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZU1lZGl1bSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZUxhcmdlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlV2lkZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVVsdHJhID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlU21hbGwgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlTGFyZ2UgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVdpZGUgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VQYWdlTWF4V2lkdGggPSAxMjAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzFPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxT2Zmc2V0WSA9IDI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MUJsdXIgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93Mk9mZnNldFkgPSAxO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzJCbHVyID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM0hhcmROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjQpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MU9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFPZmZzZXRZID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxQmx1ciA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyT2Zmc2V0WSA9IDE7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MkJsdXIgPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNvZnQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4wNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0MkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjMpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1SGFyZE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MU9mZnNldFkgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxQmx1ciA9IDEyODtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93Mk9mZnNldFkgPSA0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJCbHVyID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MlNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U29mdDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjE1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFPZmZzZXRZID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFCbHVyID0gMTkyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93Mk9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyT2Zmc2V0WSA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJCbHVyID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExSGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1plcm8gPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNNaWNybyA9IDI4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1NtYWxsID0gMjg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c1plcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c01pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNTbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzTWVkaXVtID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNMYXJnZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzV2lkZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzVWx0cmEgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzWmVybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNaWNybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNTbWFsbCA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNZWRpdW0gPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzTGFyZ2UgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzV2lkZSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNVbHRyYSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1plcm8gPSA0NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNNaWNybyA9IDQ0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1NtYWxsID0gNDQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTWVkaXVtID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNXaWRlID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTVWx0cmEgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1aZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNTWljcm8gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1TbWFsbCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TUxhcmdlID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNV2lkZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TVVsdHJhID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMWmVybyA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TE1pY3JvID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMU21hbGwgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExNZWRpdW0gPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExMYXJnZSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFdpZGUgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlNZWRpdW0gPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxeCA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMnggPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDN4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkNHggPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ1eCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDZ4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkN3ggPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ4eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDl4ID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTB4ID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTJ4ID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTR4ID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTZ4ID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTh4ID0gNzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjB4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjR4ID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMzB4ID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1plcm8gPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNNaWNybyA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1NtYWxsID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTWVkaXVtID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTGFyZ2UgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNXaWRlID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c1plcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c01pY3JvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNTbWFsbCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzTWVkaXVtID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNMYXJnZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzVWx0cmEgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzWmVybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNTbWFsbCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNZWRpdW0gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzTGFyZ2UgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNVbHRyYSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1plcm8gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNNaWNybyA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1NtYWxsID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1aZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNTWljcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1TbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTU1lZGl1bSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTUxhcmdlID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNV2lkZSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVVsdHJhID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMWmVybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMU21hbGwgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxNZWRpdW0gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxMYXJnZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFdpZGUgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxaZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFNtYWxsID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1lZGl1bSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxMYXJnZSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxXaWRlID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFVsdHJhID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxaZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxNaWNybyA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsU21hbGwgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bE1lZGl1bSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsTGFyZ2UgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFdpZGUgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9Gb250RmFtaWx5ID0gXCJcXFwiU0JCXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MZXR0ZXJTcGFjaW5nVGl0bGVzID0gXCIwXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xldHRlclNwYWNpbmdCb2R5VGV4dCA9IFwiMC4wM2VtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xpbmVIZWlnaHRUaXRsZXMgPSBcIjEuM1wiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MaW5lSGVpZ2h0Qm9keVRleHQgPSBcIjEuNzVcIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUwNzV4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDgxMjV4ID0gMTM7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDg3NXggPSAxNDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGVEZWZhdWx0ID0gMTY7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTEyNXggPSAxODtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUxMjV4ID0gMjA7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTV4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMnggPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUyNXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUzeCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTM1eCA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTR4ID0gNjQ7XG4iLCJpbXBvcnQge1xuICBTYmJCcmVha3BvaW50WmVyb01pbixcbiAgU2JiQnJlYWtwb2ludFplcm9NYXgsXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01pbixcbiAgU2JiQnJlYWtwb2ludE1pY3JvTWF4LFxuICBTYmJCcmVha3BvaW50U21hbGxNaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1heCxcbiAgU2JiQnJlYWtwb2ludExhcmdlTWluLFxuICBTYmJCcmVha3BvaW50TGFyZ2VNYXgsXG4gIFNiYkJyZWFrcG9pbnRXaWRlTWluLFxuICBTYmJCcmVha3BvaW50V2lkZU1heCxcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWluLFxuICBTYmJCcmVha3BvaW50VWx0cmFNYXgsXG4gIFNiYlR5cG9TY2FsZURlZmF1bHQsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBob3N0Q29udGV4dCB9IGZyb20gJy4uL2NvcmUvZG9tLmpzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vaW1hZ2Uuc2Nzcz9saXQmaW5saW5lJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZyB7XG4gIGJyZWFrcG9pbnRzOiBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnRbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnQge1xuICBpbWFnZToge1xuICAgIGhlaWdodDogbnVtYmVyO1xuICAgIHdpZHRoOiBudW1iZXI7XG4gIH07XG4gIG1lZGlhUXVlcmllczogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdNZWRpYVF1ZXJ5IHtcbiAgY29uZGl0aW9uRmVhdHVyZTogc3RyaW5nO1xuICBjb25kaXRpb25GZWF0dXJlVmFsdWU6IHtcbiAgICBseW5lRGVzaWduVG9rZW46IGJvb2xlYW47XG4gICAgdmFsdWU6IHN0cmluZztcbiAgfTtcbiAgY29uZGl0aW9uT3BlcmF0b3I6IGZhbHNlO1xufVxuXG4vKipcbiAqIHdlIGNoZWNrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGRhdGEgbWFudWFsbHksIHNvIGl0J3Mgc2FmZSB0byB1c2UgYGFueWAgYXMgcmV0dXJuIHR5cGVcbiAqL1xuY29uc3QgaW1hZ2VIZWxwZXJHZXRCcmVha3BvaW50cyA9IChcbiAganNvblN0cmluZzogc3RyaW5nLFxuKTogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W10gPT4ge1xuICBpZiAoIWpzb25TdHJpbmcgfHwganNvblN0cmluZy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvLyBtYWtlIHN1cmUgdGhhdCB3ZSBoYXZlIGBicmVha3BvaW50c2Aga2V5IGluIG9iamVjdFxuICBjb25zdCBsb2dXYXJuaW5nID0gaW1wb3J0Lm1ldGEuZW52LkRFVlxuICAgID8gKCkgPT5cbiAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICdzYmItaW1hZ2UgZXJyb3I6IGF0dHJpYnV0ZSBicmVha3BvaW50cyBoYXMgd3JvbmcgZGF0YSBmb3JtYXQuIFJlZmVyZW5jZSB0aGUgZG9jdW1lbnRhdGlvbiB0byBzZWUgaG93IHlvdSBzaG91bGQgZm9ybWF0IHRoZSBkYXRhIGZvciB0aGlzIGF0dHJpYnV0ZS4nLFxuICAgICAgICApXG4gICAgOiBudWxsO1xuICBsZXQganNvbk9iamVjdDogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWc7XG5cbiAgdHJ5IHtcbiAgICBqc29uT2JqZWN0ID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcbiAgfSBjYXRjaCB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKCFqc29uT2JqZWN0LmJyZWFrcG9pbnRzIHx8IGpzb25PYmplY3QuYnJlYWtwb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHdlIGdldCBhbiBhcnJheSBvZiBicmVha3BvaW50c1xuICBpZiAoIUFycmF5LmlzQXJyYXkoanNvbk9iamVjdC5icmVha3BvaW50cykpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogMS4gbWFrZSBzdXJlIHRoYXQgZWFjaCBlbnRyeSB3aXRoaW4gdGhlIGJyZWFrcG9pbnRzIG9iamVjdCBjb250YWlucyBvbmx5IGFsbG93ZWQga2V5c1xuICAgKiAyLiBtYWtlIHN1cmUgdGhhdCBhbGwgbmVjZXNzYXJ5IGtleXMgYXJlIHByZXNlbnRcbiAgICovXG4gIGxldCB3cm9uZ0tleURldGVjdGVkID0gZmFsc2U7XG4gIGxldCBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSBmYWxzZTtcblxuICBjb25zdCBhbGxvd2VkS2V5cyA9IFsnaW1hZ2UnLCAnbWVkaWFRdWVyaWVzJ107XG5cbiAganNvbk9iamVjdC5icmVha3BvaW50cy5mb3JFYWNoKChicmVha3BvaW50KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludEtleXMgPSBPYmplY3Qua2V5cyhicmVha3BvaW50KTtcblxuICAgIGJyZWFrcG9pbnRLZXlzLmZvckVhY2goKGJyZWFrcG9pbnRLZXkpID0+IHtcbiAgICAgIGlmICghYWxsb3dlZEtleXMuaW5jbHVkZXMoYnJlYWtwb2ludEtleSkpIHtcbiAgICAgICAgd3JvbmdLZXlEZXRlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxvd2VkS2V5cy5mb3JFYWNoKChhbGxvd2VkS2V5KSA9PiB7XG4gICAgICBpZiAoIWJyZWFrcG9pbnRLZXlzLmluY2x1ZGVzKGFsbG93ZWRLZXkpKSB7XG4gICAgICAgIG1pc3NpbmdLZXlEZXRlY3RlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIGlmICh3cm9uZ0tleURldGVjdGVkIHx8IG1pc3NpbmdLZXlEZXRlY3RlZCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBqc29uT2JqZWN0LmJyZWFrcG9pbnRzO1xufTtcblxuY29uc3QgZXZlbnRMaXN0ZW5lck9wdGlvbnMgPSB7XG4gIG9uY2U6IHRydWUsXG4gIHBhc3NpdmU6IHRydWUsXG59O1xuXG5jb25zdCBweFRvUmVtID0gKHB4OiBudW1iZXIpOiBudW1iZXIgPT4ge1xuICByZXR1cm4gcHggLyBTYmJUeXBvU2NhbGVEZWZhdWx0O1xufTtcblxuY29uc3QgYnJlYWtwb2ludE1hcDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHtcbiAgJ3NiYi1icmVha3BvaW50LXplcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50WmVyb01pbiksXG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWljcm9NYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtc21hbGwtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50U21hbGxNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1tZWRpdW0tbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50TWVkaXVtTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LWxhcmdlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludExhcmdlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXdpZGUtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50V2lkZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNYXgpLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWluJzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtdWx0cmEtbWF4JzogcHhUb1JlbShTYmJCcmVha3BvaW50VWx0cmFNYXgpLFxufTtcblxuLyoqXG4gKiBJdCBkaXNwbGF5cyBhbiBpbWFnZS5cbiAqXG4gKiBAZXZlbnQge0V2ZW50fSBsb2FkIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgaGFzIGJlZW4gbG9hZGVkLlxuICogQGV2ZW50IHtFdmVudH0gZXJyb3IgLSBFbWl0cyB3aGVuIHRoZSBpbWFnZSBsb2FkaW5nIGVuZGVkIGluIGFuIGVycm9yLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWFzcGVjdC1yYXRpbz1hdXRvXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIGBhc3BlY3RSYXRpb2AgcHJvcGVydHkuXG4gKiBUaGlzIHdheSB3ZSBjYW4gaGF2ZSwgZm9yIGV4YW1wbGUsIGFuIGltYWdlIGNvbXBvbmVudCB3aXRoIGFuIGFzcGVjdFxuICogcmF0aW8gb2YgNC8zIGluIHNtYWxsZXIgdmlld3BvcnRzIGFuZCAxNi85IGluIGxhcmdlciB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2UtYm9yZGVyLXJhZGl1cz12YXIoLS1zYmItYm9yZGVyLXJhZGl1cy00eCldIC0gQ2FuIGJlIHVzZWQgdG8gb3ZlcnJpZGUgdGhlXG4gKiBgYm9yZGVyUmFkaXVzYCBwcm9wZXJ0eSBpbiBjYXNlIG9mIGRpZmZlcmVudCB2YWx1ZXMgZm9yIGRpZmZlcmVudCB2aWV3cG9ydHMuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2Utb2JqZWN0LXBvc2l0aW9uXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LXBvc2l0aW9uIGNzcyBwcm9wZXJ0eSBvZiB0aGUgaW1hZ2UgaXRzZWxmIGlmIHRoZSBpbWFnZSBpdHNlbGYgaXMgY3JvcHBlZC5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pbWFnZS1vYmplY3QtZml0PWNvdmVyXSAtIENhbiBiZSB1c2VkIHRvIHNldCB0aGUgb2JqZWN0LWZpdCBjc3MgcHJvcGVydHkgb2YgdGhlIGltYWdlIGl0c2VsZiBpZiB0aGUgaW1hZ2UgaXRzZWxmIGlzIGNyb3BwZWQuXG4gKi9cbkBjdXN0b21FbGVtZW50KCdzYmItaW1hZ2UnKVxuZXhwb3J0IGNsYXNzIFNiYkltYWdlRWxlbWVudCBleHRlbmRzIExpdEVsZW1lbnQge1xuICBwdWJsaWMgc3RhdGljIG92ZXJyaWRlIHN0eWxlczogQ1NTUmVzdWx0R3JvdXAgPSBzdHlsZTtcbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBldmVudHMgPSB7XG4gICAgZXJyb3I6ICdlcnJvcicsXG4gICAgbG9hZDogJ2xvYWQnLFxuICB9IGFzIGNvbnN0O1xuXG4gIHByaXZhdGUgX2NhcHRpb25FbGVtZW50PzogSFRNTEVsZW1lbnQ7XG4gIHByaXZhdGUgX2xpbmtzSW5DYXB0aW9uPzogTm9kZUxpc3RPZjxIVE1MTGlua0VsZW1lbnQ+O1xuICBwcml2YXRlIF9jb25maWcgPSB7XG4gICAgbm9uUmV0aW5hUXVhbGl0eTogJzQ1JyxcbiAgICByZXRpbmFRdWFsaXR5OiAnMjAnLFxuICB9O1xuXG4gIC8qKlxuICAgKiBBbiBhbHQgdGV4dCBpcyBub3QgYWx3YXlzIG5lY2Vzc2FyeSAoZS5nLiBpbiB0ZWFzZXIgY2FyZHMgd2hlblxuICAgKiBhZGRpdGlvbmFsIGxpbmsgdGV4dCBpcyBwcm92aWRlZCkuIEluIHRoaXMgY2FzZSB3ZSBjYW4gbGVhdmVcbiAgICogdGhlIHZhbHVlIG9mIHRoZSBhbHQgYXR0cmlidXRlIGJsYW5rLCBidXQgdGhlIGF0dHJpYnV0ZSBpdHNlbGZcbiAgICogc3RpbGwgbmVlZHMgdG8gYmUgcHJlc2VudC4gVGhhdCB3YXkgd2UgY2FuIHNpZ25hbCBhc3Npc3RpdmVcbiAgICogdGVjaG5vbG9neSwgdGhhdCB0aGV5IGNhbiBza2lwIHRoZSBpbWFnZS5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhbHQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byBmYWxzZSwgd2Ugc2hvdyBhIGJsdXJyZWQgdmVyc2lvbiBvZiB0aGUgaW1hZ2UgYXNcbiAgICogcGxhY2Vob2xkZXIgYmVmb3JlIHRoZSBhY3R1YWwgaW1hZ2Ugc2hvd3MgdXAuIFRoaXMgd2lsbCBoZWxwXG4gICAqIHRvIGltcHJvdmUgdGhlIHBlcmNlaXZlZCBsb2FkaW5nIHBlcmZvcm1hbmNlLiBSZWFkIG1vcmUgYWJvdXRcbiAgICogdGhlIGlkZWEgb2YgbHFpcCBoZXJlOlxuICAgKiBodHRwczovL21lZGl1bS5jb20vQGltZ2l4L2xxaXAteW91ci1pbWFnZXMtZm9yLWZhc3QtbG9hZGluZy0yNTIzZDllZTRhNjJcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3NraXAtbHFpcCcsIHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIHNraXBMcWlwID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEEgY2FwdGlvbiBjYW4gcHJvdmlkZSBhZGRpdGlvbmFsIGNvbnRleHQgdG8gdGhlIGltYWdlIChlLmcuXG4gICAqIGRlc2NyaXB0aW9ucyBhbmQgdGhlIGxpa2UpLlxuICAgKiBMaW5rcyB3aWxsIGF1dG9tYXRpY2FsbHkgcmVjZWl2ZSB0YWJpbmRleD0tMSBpZiBoaWRlRnJvbVNjcmVlbnJlYWRlclxuICAgKiBpcyBzZXQgdG8gdHJ1ZS4gVGhhdCB3YXkgdGhleSB3aWxsIG5vIGxvbmdlciBiZWNvbWUgZm9jdXNhYmxlLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGNhcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIGEgY29weXJpZ2h0IHRleHQgaXMgcHJvdmlkZWQsIHdlIHdpbGwgYWRkIGl0IHRvIHRoZSBjYXB0aW9uXG4gICAqIGFuZCBjcmVhdGUgYSBzdHJ1Y3R1cmVkIGRhdGEganNvbi1sZCBibG9jayB3aXRoIHRoZSBjb3B5cmlnaHRcbiAgICogaW5mb3JtYXRpb24uXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgY29weXJpZ2h0Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBDb3B5cmlnaHQgaG9sZGVyIGNhbiBlaXRoZXIgYmUgYW4gT3JnYW5pemF0aW9uIG9yIGEgUGVyc29uXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjb3B5cmlnaHQtaG9sZGVyJyB9KVxuICBwdWJsaWMgY29weXJpZ2h0SG9sZGVyOiAnT3JnYW5pemF0aW9uJyB8ICdQZXJzb24nID0gJ09yZ2FuaXphdGlvbic7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUsIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjdXN0b20gZm9jYWwgcG9pbnRcbiAgICogZm9yIHRoZSBpbWFnZS4gU2VlIGZ1bGwgZG9jdW1lbnRhdGlvbiBoZXJlOlxuICAgKiBodHRwczovL2RvY3MuaW1naXguY29tL2FwaXMvcmVuZGVyaW5nL2ZvY2FscG9pbnQtY3JvcFxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnY3VzdG9tLWZvY2FsLXBvaW50JywgdHlwZTogQm9vbGVhbiB9KSBwdWJsaWMgY3VzdG9tRm9jYWxQb2ludCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBJZiB0aGUgbGF6eSBwcm9wZXJ0eSBpcyBzZXQgdG8gdHJ1ZSwgdGhlIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICogY2hhbmdlIHRoZSBkZWNvZGluZyB0byBhc3luYywgb3RoZXJ3aXNlIHRoZSBkZWNvZGluZyBpcyBzZXQgdG8gYXV0b1xuICAgKiB3aGljaCBsZWF2ZXMgdGhlIGhhbmRsaW5nIHVwIHRvIHRoZSBicm93c2VyLiBSZWFkIG1vcmUgYWJvdXQgdGhlXG4gICAqIGRlY29kaW5nIGF0dHJpYnV0ZSBoZXJlOlxuICAgKiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvSFRNTEltYWdlRWxlbWVudC9kZWNvZGluZ1xuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGRlY29kaW5nOiAnc3luYycgfCAnYXN5bmMnIHwgJ2F1dG8nID0gJ2F1dG8nO1xuXG4gIC8qKlxuICAgKiBTZXQgdGhpcyB0byB0cnVlLCB0byByZWNlaXZlIHZpc3VhbCBndWlkYW5jZSB3aGVyZSB0aGUgY3VzdG9tIGZvY2FsXG4gICAqIHBvaW50IGlzIGN1cnJlbnRseSBzZXQuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC1kZWJ1ZycsIHR5cGU6IEJvb2xlYW4gfSkgcHVibGljIGZvY2FsUG9pbnREZWJ1ZyA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgZmxvYXRpbmcgbnVtYmVyIGJldHdlZW4gMCAobGVmdCkgYW5kIDEgKHJpZ2h0KS5cbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LXgnLCB0eXBlOiBOdW1iZXIgfSkgcHVibGljIGZvY2FsUG9pbnRYID0gMTtcblxuICAvKipcbiAgICogUGFzcyBpbiBhIGZsb2F0aW5nIG51bWJlciBiZXR3ZWVuIDAgKHRvcCkgYW5kIDEgKGJvdHRvbSkuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC15JywgdHlwZTogTnVtYmVyIH0pIHB1YmxpYyBmb2NhbFBvaW50WSA9IDE7XG5cbiAgLyoqXG4gICAqIFJpZ2h0IG5vdyB0aGUgbW9kdWxlIGlzIGhlYXZpbHkgY291cGxlZCB3aXRoIHRoZSBpbWFnZSBkZWxpdmVyeVxuICAgKiBzZXJ2aWNlIGltZ2l4IGFuZCBkZXBlbmRzIG9uIHRoZSBvcmlnaW5hbCBmaWxlcyBiZWluZyBzdG9yZWRcbiAgICogaW5zaWRlIEFFTS4gWW91IGNhbiBwYXNzIGluIGFueSBodHRwczovL2Nkbi5pbWcuc2JiLmNoIGltZ1xuICAgKiBzcmMgYWRkcmVzcyB5b3UgZmluZCBvbiBzYmIuY2ggdG8gcGxheSBhcm91bmQgd2l0aCBpdC4gSnVzdFxuICAgKiBzdHJpcCB0aGUgdXJsIHBhcmFtZXRlcnMgYW5kIHBhc3RlIGluIHRoZSBwbGFpbiBmaWxlIGFkZHJlc3MuXG4gICAqIElmIHlvdSB3YW50IHRvIGtub3cgaG93IHRvIGJlc3Qgd29yayB3aXRoIHRoaXMgbW9kdWxlIHdpdGhcbiAgICogaW1hZ2VzIGNvbWluZyBmcm9tIGEgZGlmZmVyZW50IHNvdXJjZSwgcGxlYXNlIGNvbnRhY3QgdGhlXG4gICAqIExZTkUgQ29yZSBUZWFtLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaW1hZ2Utc3JjJyB9KSBwdWJsaWMgaW1hZ2VTcmM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBpbXBvcnRhbmNlIGF0dHJpYnV0ZSBpcyBmYWlybHkgbmV3IGF0dHJpYnV0ZSB3aGljaCBzaG91bGRcbiAgICogaGVscCB0aGUgYnJvd3NlciBkZWNpZGUgd2hpY2ggcmVzb3VyY2VzIGl0IHNob3VsZCBwcmlvcml0aXNlXG4gICAqIGR1cmluZyBwYWdlIGxvYWQuIFdlIHdpbGwgc2V0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYmFzZWQgb24gdGhlXG4gICAqIHZhbHVlLCB3ZSByZWNlaXZlIGluIHRoZSBsb2FkaW5nIGF0dHJpYnV0ZS4gJ2VhZ2VyJywgd2hpY2ggd2UgdXNlXG4gICAqIGZvciB0aGUgbGFyZ2VzdCBpbWFnZSB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQsIHdpbGwgc2V0IHRoZVxuICAgKiBhdHRyaWJ1dGUgdmFsdWUgdG8gJ2hpZ2gnLiAnbGF6eScsIHdoaWNoIHdlIHVzZSBmb3IgaW1hZ2VzIGJlbG93XG4gICAqIHRoZSBmb2xkLCB3aWxsIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlIHRvICdsb3cnLlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGltcG9ydGFuY2U6ICdhdXRvJyB8ICdoaWdoJyB8ICdsb3cnID0gJ2hpZ2gnO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBzdXBwb3J0IG9mIG5hdGl2ZSBpbWFnZSBsYXp5IGxvYWRpbmcsIHdlIGNhbiBub3dcbiAgICogZGVjaWRlIHdoZXRoZXIgd2Ugd2FudCB0byBsb2FkIHRoZSBpbWFnZSBpbW1lZGlhdGVseSBvciBvbmx5XG4gICAqIG9uY2UgaXQgaXMgY2xvc2UgdG8gdGhlIHZpc2libGUgdmlld3BvcnQuIFRoZSB2YWx1ZSBlYWdlciBpc1xuICAgKiBiZXN0IHVzZWQgZm9yIGltYWdlcyB3aXRoaW4gdGhlIGluaXRpYWwgdmlld3BvcnQuIFdlIHdhbnQgdG9cbiAgICogbG9hZCB0aGVzZSBpbWFnZXMgYXMgZmFzdCBhcyBwb3NzaWJsZSB0byBpbXByb3ZlIHRoZSBDb3JlIFdlYlxuICAgKiBWaXRhbHMgdmFsdWVzLiBsYXp5IG9uIHRoZSBvdGhlciBoYW5kIHdvcmtzIGJlc3QgZm9yIGltYWdlc1xuICAgKiB3aGljaCBhcmUgZnVydGhlciBkb3duIHRoZSBwYWdlIG9yIGludmlzaWJsZSBkdXJpbmcgdGhlIGxvYWRpbmdcbiAgICogb2YgdGhlIGluaXRpYWwgdmlld3BvcnQuXG4gICAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgbG9hZGluZzogJ2VhZ2VyJyB8ICdsYXp5JyA9ICdlYWdlcic7XG5cbiAgLyoqXG4gICAqIFdpdGggcGVyZm9ybWFuY2UubWFyayB5b3UgY2FuIGxvZyBhIHRpbWVzdGFtcCBhc3NvY2lhdGVkIHdpdGhcbiAgICogdGhlIG5hbWUgeW91IGRlZmluZSBpbiBwZXJmb3JtYW5jZU1hcmsgd2hlbiBhIGNlcnRhaW4gZXZlbnQgaXNcbiAgICogaGFwcGVuaW5nLiBJbiBvdXIgY2FzZSB3ZSB3aWxsIGxvZyB0aGUgcGVyZm9ybWFuY2UubWFyayBpbnRvXG4gICAqIHRoZSBQZXJmb3JtYW5jZUVudHJ5IEFQSSBvbmNlIHRoZSBpbWFnZSBpcyBmdWxseSBsb2FkZWQuXG4gICAqIFBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdG9vbHMgbGlrZSBTcGVlZEN1cnZlIG9yIExpZ2h0aG91c2UgYXJlXG4gICAqIHRoZW4gYWJsZSB0byBncmFiIHRoZXNlIGVudHJpZXMgZnJvbSB0aGUgUGVyZm9ybWFuY2VFbnRyeSBBUElcbiAgICogYW5kIGdpdmUgdXMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhbmQgaW5zaWdodHMgYWJvdXQgb3VyIHBhZ2VcbiAgICogbG9hZGluZyBiZWhhdmlvdXIuIFdlIGFyZSB0aGVuIGFsc28gYWJsZSB0byBtb25pdG9yIHRoZXNlXG4gICAqIHZhbHVlcyBvdmVyIGEgbG9uZyBwZXJpb2QgdG8gc2VlIGlmIG91ciBwZXJmb3JtYW5jZVxuICAgKiBpbmNyZWFzZXMgb3IgZGVjcmVhc2VzIG92ZXIgdGltZS4gQmVzdCB0byB1c2UgbG93ZXJjYXNlIHN0cmluZ3NcbiAgICogaGVyZSwgc2VwYXJhdGUgd29yZHMgd2l0aCB1bmRlcnNjb3JlcyBvciBkYXNoZXMuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwZXJmb3JtYW5jZS1tYXJrJyB9KSBwdWJsaWMgcGVyZm9ybWFuY2VNYXJrPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBwaWN0dXJlU2l6ZXNDb25maWcgb2JqZWN0LCB5b3UgY2FuIHBhc3MgaW4gaW5mb3JtYXRpb25cbiAgICogaW50byBpbWFnZSBhYm91dCB3aGF0IGtpbmQgb2Ygc291cmNlIGVsZW1lbnRzIHNob3VsZCBnZXRcbiAgICogcmVuZGVyZWQuIG1lZGlhUXVlcmllcyBhY2NlcHRzIG11bHRpcGxlIE1lZGlhIFF1ZXJ5IGVudHJpZXNcbiAgICogd2hpY2ggY2FuIGdldCBjb21iaW5lZCBieSBkZWZpbmluZyBhIGNvbmRpdGlvbk9wZXJhdG9yLlxuICAgKiBUeXBlIGlzOiBzdHJpbmdpZmllZCBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZy1PYmplY3RcbiAgICogQW4gZXhhbXBsZSBjb3VsZCBsb29rIGxpa2UgdGhpczpcbiAgICoge1xuICAgKiAgICBcImJyZWFrcG9pbnRzXCI6IFtcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCI2NzVcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjEyMDBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbGFyZ2UtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNTQ5XCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCI5NzZcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtc21hbGwtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiMTgwXCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCIzMjBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1heC13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4XCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogXCJhbmRcIlxuICAgKiAgICAgICAgICB9LFxuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwib3JpZW50YXRpb25cIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiBmYWxzZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJsYW5kc2NhcGVcIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfVxuICAgKiAgICBdXG4gICAqICB9XG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdwaWN0dXJlLXNpemVzLWNvbmZpZycgfSkgcHVibGljIHBpY3R1cmVTaXplc0NvbmZpZz86IHN0cmluZztcblxuICAvKipcbiAgICogQm9yZGVyIHJhZGl1cyBvZiB0aGUgaW1hZ2UuIENob29zZSBiZXR3ZWVuIGEgZGVmYXVsdCByYWRpdXMsIG5vIHJhZGl1cyBhbmQgYSBjb21wbGV0ZWx5IHJvdW5kIGltYWdlLlxuICAgKi9cbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnYm9yZGVyLXJhZGl1cycsIHJlZmxlY3Q6IHRydWUgfSkgcHVibGljIGJvcmRlclJhZGl1czpcbiAgICB8ICdkZWZhdWx0J1xuICAgIHwgJ25vbmUnXG4gICAgfCAncm91bmQnID0gJ2RlZmF1bHQnO1xuXG4gIC8qKlxuICAgKiBTZXQgYW4gYXNwZWN0IHJhdGlvXG4gICAqIGRlZmF1bHQgaXMgJzE2LTknICgxNi85KVxuICAgKiBvdGhlciB2YWx1ZXM6ICdmcmVlJywgJzEtMScsICcxLTInLCAnMi0xJywgJzItMycsICczLTInLCAnMy00JywgJzQtMycsICc0LTUnLCAnNS00JywgJzktMTYnXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdhc3BlY3QtcmF0aW8nLCByZWZsZWN0OiB0cnVlIH0pXG4gIHB1YmxpYyBhc3BlY3RSYXRpbzpcbiAgICB8ICdmcmVlJ1xuICAgIHwgJzEtMSdcbiAgICB8ICcxLTInXG4gICAgfCAnMi0xJ1xuICAgIHwgJzItMydcbiAgICB8ICczLTInXG4gICAgfCAnMy00J1xuICAgIHwgJzQtMydcbiAgICB8ICc0LTUnXG4gICAgfCAnNS00J1xuICAgIHwgJzktMTYnXG4gICAgfCAnMTYtOScgPSAnMTYtOSc7XG5cbiAgLyoqIFdoZXRoZXIgdGhlIGltYWdlIGlzIGZpbmlzaGVkIGxvYWRpbmcgb3IgZmFpbGVkIHRvIGxvYWQuICovXG4gIHB1YmxpYyBnZXQgY29tcGxldGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3Rvcj8uPEhUTUxJbWFnZUVsZW1lbnQ+KCcuc2JiLWltYWdlX19pbWcnKT8uY29tcGxldGUgPz8gZmFsc2U7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICAvLyBDaGVjayBpZiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5lc3RlZCBpbiBhbiBgPHNiYi10ZWFzZXItaGVybz5gIGVsZW1lbnQgb24gaW4gYW4gYDxzYmItdGVhc2VyLXBhaWQ+YCBlbGVtZW50LlxuICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKFxuICAgICAgJ2RhdGEtdGVhc2VyJyxcbiAgICAgICEhaG9zdENvbnRleHQoJ3NiYi10ZWFzZXItaGVybycsIHRoaXMpIHx8ICEhdGhpcy5jbG9zZXN0KCdzYmItdGVhc2VyLXBhaWQnKSxcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogdm9pZCB7XG4gICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICBpZiAoIXRoaXMuX2NhcHRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbGlua3NJbkNhcHRpb24gPSB0aGlzLl9jYXB0aW9uRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxMaW5rRWxlbWVudD4oJ2EnKTtcblxuICAgIGlmICghdGhpcy5fbGlua3NJbkNhcHRpb24pIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRGb2N1c0FiaWxpdHlUb0xpbmtzSW5DYXB0aW9uKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgYXN5bmMgZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzOiBQcm9wZXJ0eVZhbHVlczx0aGlzPik6IFByb21pc2U8dm9pZD4ge1xuICAgIHN1cGVyLmZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7XG5cbiAgICAvLyBXZSBuZWVkIHRvIHdhaXQgdW50aWwgdGhlIHVwZGF0ZSBpcyBjb21wbGV0ZSB0byBjaGVjayB3aGV0aGVyIHRoZSBpbWFnZSBoYXMgYWxyZWFkeSBiZWVuIGNvbXBsZXRlbHkgbG9hZGVkLlxuICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7XG4gICAgaWYgKHRoaXMuY29tcGxldGUpIHtcbiAgICAgIHRoaXMudG9nZ2xlQXR0cmlidXRlKCdkYXRhLWxvYWRlZCcsIHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2xvZ1BlcmZvcm1hbmNlTWFya3MoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGVyZm9ybWFuY2VNYXJrKSB7XG4gICAgICBwZXJmb3JtYW5jZS5jbGVhck1hcmtzKHRoaXMucGVyZm9ybWFuY2VNYXJrKTtcbiAgICAgIHBlcmZvcm1hbmNlLm1hcmsodGhpcy5wZXJmb3JtYW5jZU1hcmspO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX21hdGNoTWVkaWFRdWVyeURlc2lnblRva2VuKGJyZWFrcG9pbnRTaXplTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCB2YWx1ZSA9IGJyZWFrcG9pbnRNYXBbYnJlYWtwb2ludFNpemVOYW1lXTtcbiAgICByZXR1cm4gdmFsdWUgPyBgJHt2YWx1ZX1yZW1gIDogJyc7XG4gIH1cblxuICBwcml2YXRlIF9hZGRGb2N1c0FiaWxpdHlUb0xpbmtzSW5DYXB0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2xpbmtzSW5DYXB0aW9uPy5mb3JFYWNoKChsaW5rKSA9PiB7XG4gICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXBhcmVJbWFnZVVybChiYXNlVXJsOiBzdHJpbmcgfCB1bmRlZmluZWQsIGxxdWlwID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICghYmFzZVVybCB8fCBiYXNlVXJsID09PSAnJykge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIC8vIENyZWF0aW5nIGFuIFVSTCB3aXRob3V0IGEgc2NoZW1hIHdpbGwgZmFpbCwgYnV0IGlzIGEgdmFsaWQgaW5wdXQgZm9yIGJhc2VVcmwuXG4gICAgLy8gZS5nLiBpbWFnZS1zcmMgY2FuIGJlIGh0dHBzOi8vZXhhbXBsZS5jb20vbXktaW1hZ2UucG5nIG9yIC9teS1pbWFnZS5wbmdcbiAgICBjb25zdCBpc0Z1bGx5UXVhbGlmaWVkVXJsID0gISFiYXNlVXJsLm1hdGNoKC9eXFx3KzpcXC9cXC8vKTtcbiAgICBjb25zdCBpbWFnZVVybE9iaiA9IGlzRnVsbHlRdWFsaWZpZWRVcmwgPyBuZXcgVVJMKGJhc2VVcmwpIDogbmV3IFVSTChgaHR0cDovL25vb3AvJHtiYXNlVXJsfWApO1xuXG4gICAgaWYgKGxxdWlwKSB7XG4gICAgICAvLyBibHVyIGFuZCBzaXplOiA/Ymx1cj0xMDAmdz0xMDAmaD01NlxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnYmx1cicsICcxMDAnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ3cnLCAnMTAwJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdoJywgJzU2Jyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIENETiBJbmZvcm1hdGlvbjogaHR0cHM6Ly9kb2NzLmltZ2l4LmNvbS9hcGlzL3JlbmRlcmluZ1xuICAgICAgLy8gcGFyYW0uYXV0bzogP2F1dG89Zm9ybWF0LGNvbXByZXNzLGNzPXRpbnlzcmdiXG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdhdXRvJywgJ2Zvcm1hdCxjb21wcmVzcyxjcz10aW55c3JnYicpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmN1c3RvbUZvY2FsUG9pbnQpIHtcbiAgICAgIC8vIGNyb3A6IGAmZml0PWNyb3AmY3JvcD1mb2NhbHBvaW50JmZwLXg9JHt0aGlzLmZvY2FsUG9pbnRYfSZmcC15PSR7dGhpcy5mb2NhbFBvaW50WX0mZnAtej0xYCxcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZpdCcsICdjcm9wJyk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdjcm9wJywgJ2ZvY2FscG9pbnQnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXgnLCB0aGlzLmZvY2FsUG9pbnRYLnRvU3RyaW5nKDEwKSk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC15JywgdGhpcy5mb2NhbFBvaW50WS50b1N0cmluZygxMCkpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteicsICcxJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZm9jYWxQb2ludERlYnVnKSB7XG4gICAgICAvLyBmb2NhbFBvaW50RGVidWc6ICcmZnAtZGVidWc9dHJ1ZSdcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLWRlYnVnJywgJ3RydWUnKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIG9mIFwibm9vcFwiIGhvc3QsIHdlIGRvbid0IHJldHVybiB0aGUgaG9zdCBhbmQgbXVzdCByZW1vdmUgdGhlXG4gICAgLy8gc3RhcnRpbmcgYC9gIG9mIHRoZSBwYXRobmFtZS5cbiAgICByZXR1cm4gaXNGdWxseVF1YWxpZmllZFVybFxuICAgICAgPyBpbWFnZVVybE9iai5ocmVmXG4gICAgICA6IGltYWdlVXJsT2JqLnBhdGhuYW1lLnN1YnN0cmluZygxKSArIGltYWdlVXJsT2JqLnNlYXJjaDtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXBhcmVQaWN0dXJlU2l6ZUNvbmZpZ3MoKTogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W10ge1xuICAgIGxldCBwaWN0dXJlU2l6ZXNDb25maWc7XG5cbiAgICBpZiAodGhpcy5waWN0dXJlU2l6ZXNDb25maWcpIHtcbiAgICAgIHBpY3R1cmVTaXplc0NvbmZpZyA9IHRoaXMucGljdHVyZVNpemVzQ29uZmlnO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBkZWZhdWx0IGNvbmZpZ1xuICAgICAgcGljdHVyZVNpemVzQ29uZmlnID0gYHtcbiAgICAgICAgXCJicmVha3BvaW50c1wiOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDY3NSxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiAxMjAwXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1sYXJnZS1taW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogNTQ5LFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDk3NlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbWljcm8tbWluXCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAgICAgICAgICAgIFwiaGVpZ2h0XCI6IDE4MCxcbiAgICAgICAgICAgICAgXCJ3aWR0aFwiOiAzMjBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtYXgtd2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LXplcm8tbWF4XCJcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGltYWdlSGVscGVyR2V0QnJlYWtwb2ludHMocGljdHVyZVNpemVzQ29uZmlnKTtcbiAgfVxuXG4gIHByaXZhdGUgX2NyZWF0ZU1lZGlhUXVlcnlTdHJpbmcoXG4gICAgbWVkaWFRdWVyaWVzOiBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ01lZGlhUXVlcnlbXSxcbiAgKTogc3RyaW5nIHtcbiAgICBsZXQgbWVkaWFRdWVyeSA9ICcnO1xuXG4gICAgbWVkaWFRdWVyaWVzLmZvckVhY2goKG1xKSA9PiB7XG4gICAgICBjb25zdCBtcUNvbmRpdGlvbiA9IG1xLmNvbmRpdGlvbkZlYXR1cmU7XG4gICAgICBsZXQgbXFWYWx1ZTtcblxuICAgICAgaWYgKG1xLmNvbmRpdGlvbkZlYXR1cmVWYWx1ZS5seW5lRGVzaWduVG9rZW4pIHtcbiAgICAgICAgbXFWYWx1ZSA9IHRoaXMuX21hdGNoTWVkaWFRdWVyeURlc2lnblRva2VuKG1xLmNvbmRpdGlvbkZlYXR1cmVWYWx1ZS52YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBtcVZhbHVlID0gbXEuY29uZGl0aW9uRmVhdHVyZVZhbHVlLnZhbHVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBtcUNvbWJpbmVyID0gbXEuY29uZGl0aW9uT3BlcmF0b3IgPyBgICR7bXEuY29uZGl0aW9uT3BlcmF0b3J9IGAgOiAnJztcblxuICAgICAgbWVkaWFRdWVyeSArPSBgKCR7bXFDb25kaXRpb259OiAke21xVmFsdWV9KSR7bXFDb21iaW5lcn1gO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIG1lZGlhUXVlcnk7XG4gIH1cblxuICBAZXZlbnRPcHRpb25zKGV2ZW50TGlzdGVuZXJPcHRpb25zKVxuICBwcml2YXRlIF9pbWFnZUxvYWRlZCgpOiB2b2lkIHtcbiAgICB0aGlzLl9sb2dQZXJmb3JtYW5jZU1hcmtzKCk7XG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnbG9hZCcpKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSByZW5kZXIoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGxldCB7IGNhcHRpb24gfSA9IHRoaXM7XG4gICAgbGV0IHNjaGVtYURhdGEgPSAnJztcblxuICAgIGNvbnN0IGltYWdlVXJsTFFJUCA9IHRoaXMuX3ByZXBhcmVJbWFnZVVybCh0aGlzLmltYWdlU3JjLCB0cnVlKTtcbiAgICBjb25zdCBpbWFnZVVybFdpdGhQYXJhbXMgPSB0aGlzLl9wcmVwYXJlSW1hZ2VVcmwodGhpcy5pbWFnZVNyYywgZmFsc2UpO1xuXG4gICAgaWYgKHRoaXMubG9hZGluZyA9PT0gJ2xhenknKSB7XG4gICAgICB0aGlzLmRlY29kaW5nID0gJ2FzeW5jJztcbiAgICAgIHRoaXMuaW1wb3J0YW5jZSA9ICdsb3cnO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNvcHlyaWdodCkge1xuICAgICAgY2FwdGlvbiA9IGAke3RoaXMuY2FwdGlvbn0gwqkke3RoaXMuY29weXJpZ2h0fWA7XG4gICAgICBzY2hlbWFEYXRhID0gYHtcbiAgICAgICAgXCJAY29udGV4dFwiOiBcImh0dHBzOi8vc2NoZW1hLm9yZ1wiLFxuICAgICAgICBcIkB0eXBlXCI6IFwiUGhvdG9ncmFwaFwiLFxuICAgICAgICBcImltYWdlXCI6IFwiJHt0aGlzLmltYWdlU3JjfVwiLFxuICAgICAgICBcImNvcHlyaWdodEhvbGRlclwiOiB7XG4gICAgICAgICAgXCJAdHlwZVwiOiBcIiR7dGhpcy5jb3B5cmlnaHRIb2xkZXJ9XCIsXG4gICAgICAgICAgXCJuYW1lXCI6IFwiJHt0aGlzLmNvcHlyaWdodH1cIlxuICAgICAgICB9XG4gICAgICB9YDtcbiAgICB9XG5cbiAgICBjb25zdCBwaWN0dXJlU2l6ZUNvbmZpZ3MgPSB0aGlzLl9wcmVwYXJlUGljdHVyZVNpemVDb25maWdzKCk7XG5cbiAgICAvKipcbiAgICAgKiBUaGUgYWx0IGF0dHJpYnV0ZSBzaG91bGQgYWx3YXlzIGJlIHByZXNlbnQgZm9yIHRoZSBpbWcgZWxlbWVudC5cbiAgICAgKiBJZiBpdCBoYXMgYW4gZW1wdHkgc3RyaW5nIGFzIGl0cyB2YWx1ZSwgaXQgaXMgc2ltcGx5IGlnbm9yZWRcbiAgICAgKiBieSBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLiBJZiB3ZSBsZWF2ZSBpdCBvdXQgY29tcGxldGVseSxcbiAgICAgKiB0aGV5IG1pZ2h0IHRyeSB0byBpbnRlcnByZXQgdGhlIGltZyBlbGVtZW50LlxuICAgICAqL1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGZpZ3VyZSBjbGFzcz1cInNiYi1pbWFnZV9fZmlndXJlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItaW1hZ2VfX3dyYXBwZXJcIj5cbiAgICAgICAgICAkeyF0aGlzLnNraXBMcWlwXG4gICAgICAgICAgICA/IGh0bWxgPGltZ1xuICAgICAgICAgICAgICAgIGFsdD1cIlwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYmItaW1hZ2VfX2JsdXJyZWRcIlxuICAgICAgICAgICAgICAgIHNyYz0ke2ltYWdlVXJsTFFJUH1cbiAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMDBcIlxuICAgICAgICAgICAgICAgIGhlaWdodD1cIjU2MlwiXG4gICAgICAgICAgICAgICAgbG9hZGluZz0ke3RoaXMubG9hZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICAgIGRlY29kaW5nPSR7dGhpcy5kZWNvZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICAvPmBcbiAgICAgICAgICAgIDogbm90aGluZ31cblxuICAgICAgICAgIDxwaWN0dXJlPlxuICAgICAgICAgICAgPCEtLSByZW5kZXIgcGljdHVyZSBlbGVtZW50IHNvdXJjZXMgLS0+XG4gICAgICAgICAgICAke3BpY3R1cmVTaXplQ29uZmlncy5tYXAoKGNvbmZpZykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBpbWFnZUhlaWdodCA9IGNvbmZpZy5pbWFnZS5oZWlnaHQ7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlV2lkdGggPSBjb25maWcuaW1hZ2Uud2lkdGg7XG4gICAgICAgICAgICAgIGNvbnN0IG1lZGlhUXVlcnkgPSB0aGlzLl9jcmVhdGVNZWRpYVF1ZXJ5U3RyaW5nKGNvbmZpZy5tZWRpYVF1ZXJpZXMpO1xuICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGh0bWxgIDxzb3VyY2VcbiAgICAgICAgICAgICAgICAgIG1lZGlhPSR7YCR7bWVkaWFRdWVyeX1gfVxuICAgICAgICAgICAgICAgICAgc2l6ZXM9JHtgJHtpbWFnZVdpZHRofXB4YH1cbiAgICAgICAgICAgICAgICAgIHNyY3NldD0ke1xuICAgICAgICAgICAgICAgICAgICBgJHtpbWFnZVVybFdpdGhQYXJhbXN9Jnc9JHtpbWFnZVdpZHRofSZoPSR7aW1hZ2VIZWlnaHR9JnE9JHt0aGlzLl9jb25maWcubm9uUmV0aW5hUXVhbGl0eX0gJHtpbWFnZVdpZHRofXcsIGAgK1xuICAgICAgICAgICAgICAgICAgICBgJHtpbWFnZVVybFdpdGhQYXJhbXN9Jnc9JHtpbWFnZVdpZHRoICogMn0maD0ke2ltYWdlSGVpZ2h0ICogMn0mcT0ke1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZy5yZXRpbmFRdWFsaXR5XG4gICAgICAgICAgICAgICAgICAgIH0gJHtpbWFnZVdpZHRoICogMn13YFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgID48L3NvdXJjZT5gLFxuICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA8aW1nXG4gICAgICAgICAgICAgIGFsdD0ke3RoaXMuYWx0IHx8ICcnfVxuICAgICAgICAgICAgICBAbG9hZD0ke3RoaXMuX2ltYWdlTG9hZGVkfVxuICAgICAgICAgICAgICBAZXJyb3I9JHsoKSA9PiB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKX1cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItaW1hZ2VfX2ltZ1wiXG4gICAgICAgICAgICAgIHNyYz0ke3RoaXMuaW1hZ2VTcmMhfVxuICAgICAgICAgICAgICB3aWR0aD1cIjEwMDBcIlxuICAgICAgICAgICAgICBoZWlnaHQ9XCI1NjJcIlxuICAgICAgICAgICAgICBsb2FkaW5nPSR7dGhpcy5sb2FkaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGRlY29kaW5nPSR7dGhpcy5kZWNvZGluZyA/PyBub3RoaW5nfVxuICAgICAgICAgICAgICAuZmV0Y2hQcmlvcml0eT0ke3RoaXMuaW1wb3J0YW5jZSA/PyBub3RoaW5nfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3BpY3R1cmU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAke2NhcHRpb25cbiAgICAgICAgICA/IGh0bWxgPGZpZ2NhcHRpb25cbiAgICAgICAgICAgICAgY2xhc3M9XCJzYmItaW1hZ2VfX2NhcHRpb25cIlxuICAgICAgICAgICAgICAuaW5uZXJIVE1MPSR7Y2FwdGlvbn1cbiAgICAgICAgICAgICAgJHtyZWYoKGVsKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FwdGlvbkVsZW1lbnQgPSBlbCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICA+PC9maWdjYXB0aW9uPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICR7c2NoZW1hRGF0YVxuICAgICAgICAgID8gaHRtbGA8c2NyaXB0IHR5cGU9XCJhcHBsaWNhdGlvbi9sZCtqc29uXCIgLmlubmVySFRNTD0ke3NjaGVtYURhdGF9Pjwvc2NyaXB0PmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICA8L2ZpZ3VyZT5cbiAgICBgO1xuICB9XG59XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgaW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuICAgICdzYmItaW1hZ2UnOiBTYmJJbWFnZUVsZW1lbnQ7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJfYSJdLCJtYXBwaW5ncyI6Ijs7OztBQXNCTyxNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHlCQUF5QjtBQUMvQixNQUFNLHlCQUF5QjtBQUMvQixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHVCQUF1QjtBQUM3QixNQUFNLHdCQUF3QjtBQUM5QixNQUFNLHdCQUF3QjtBQXNSOUIsTUFBTSxzQkFBc0I7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pUbkMsSUFBQTtBQXdEQSxNQUFNLDRCQUE0QixDQUNoQyxlQUNvRDtBQUNwRCxNQUFJLENBQUMsY0FBYyxXQUFXLFdBQVcsR0FBRztBQUMxQyxXQUFPO0VBQ1Q7QUFHTSxRQUFBLGFBQ0YsTUFDRSxRQUFRO0FBQUEsSUFDTjtBQUFBLEVBQUE7QUFHSixNQUFBO0FBRUEsTUFBQTtBQUNXLGlCQUFBLEtBQUssTUFBTSxVQUFVO0FBQUEsRUFBQSxRQUM1QjtBQUNPO0FBQ2IsV0FBTztFQUNUO0FBRUEsTUFBSSxDQUFDLFdBQVcsZUFBZSxXQUFXLFlBQVksV0FBVyxHQUFHO0FBQ3JEO0FBQ2IsV0FBTztFQUNUO0FBR0EsTUFBSSxDQUFDLE1BQU0sUUFBUSxXQUFXLFdBQVcsR0FBRztBQUM3QjtBQUNiLFdBQU87RUFDVDtBQU1BLE1BQUksbUJBQW1CO0FBQ3ZCLE1BQUkscUJBQXFCO0FBRW5CLFFBQUEsY0FBYyxDQUFDLFNBQVMsY0FBYztBQUVqQyxhQUFBLFlBQVksUUFBUSxDQUFDLGVBQWU7QUFDdkMsVUFBQSxpQkFBaUIsT0FBTyxLQUFLLFVBQVU7QUFFOUIsbUJBQUEsUUFBUSxDQUFDLGtCQUFrQjtBQUN4QyxVQUFJLENBQUMsWUFBWSxTQUFTLGFBQWEsR0FBRztBQUNyQiwyQkFBQTtBQUFBLE1BQ3JCO0FBQUEsSUFBQSxDQUNEO0FBRVcsZ0JBQUEsUUFBUSxDQUFDLGVBQWU7QUFDbEMsVUFBSSxDQUFDLGVBQWUsU0FBUyxVQUFVLEdBQUc7QUFDbkIsNkJBQUE7QUFBQSxNQUN2QjtBQUFBLElBQUEsQ0FDRDtBQUFBLEVBQUEsQ0FDRjtBQUVELE1BQUksb0JBQW9CLG9CQUFvQjtBQUM3QjtBQUNiLFdBQU87RUFDVDtBQUVBLFNBQU8sV0FBVztBQUNwQjtBQUVBLE1BQU0sdUJBQXVCO0FBQUEsRUFDM0IsTUFBTTtBQUFBLEVBQ04sU0FBUztBQUNYO0FBRUEsTUFBTSxVQUFVLENBQUMsT0FBdUI7QUFDdEMsU0FBTyxLQUFLO0FBQ2Q7QUFFQSxNQUFNLGdCQUF3QztBQUFBLEVBQzVDLDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDZCQUE2QixRQUFRLHNCQUFzQjtBQUFBLEVBQzNELDZCQUE2QixRQUFRLHNCQUFzQjtBQUFBLEVBQzNELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDJCQUEyQixRQUFRLG9CQUFvQjtBQUFBLEVBQ3ZELDRCQUE0QixRQUFRLHFCQUFxQjtBQUFBLEVBQ3pELDRCQUE0QixRQUFRLHFCQUFxQjtBQUMzRDtBQWdCYSxJQUFBLGtCQUFOLGNBQThCLFdBQVc7QUFBQSxFQUF6QyxjQUFBO0FBQUEsVUFBQSxHQUFBLFNBQUE7QUFTTCxTQUFRLFVBQVU7QUFBQSxNQUNoQixrQkFBa0I7QUFBQSxNQUNsQixlQUFlO0FBQUEsSUFBQTtBQW1CbUQsU0FBTyxXQUFXO0FBcUJ0RixTQUFPLGtCQUE2QztBQU9VLFNBQU8sbUJBQW1CO0FBUzVFLFNBQU8sV0FBc0M7QUFNSSxTQUFPLGtCQUFrQjtBQUs5QixTQUFPLGNBQWM7QUFLckIsU0FBTyxjQUFjO0FBdUJqRSxTQUFPLGFBQXNDO0FBWTdDLFNBQU8sVUFBNEI7QUEwRlUsU0FBTyxlQUdsRDtBQVFkLFNBQU8sY0FZTTtBQUFBLEVBQUE7QUFBQTtBQUFBLEVBR2IsSUFBVyxXQUFvQjs7QUFDN0IsYUFBTyxZQUFBQSxNQUFBLEtBQUssZUFBTCxnQkFBQUEsSUFBaUIsa0JBQWpCLHdCQUFBQSxLQUFtRCx1QkFBbkQsbUJBQXVFLGFBQVk7QUFBQSxFQUM1RjtBQUFBLEVBRWdCLG9CQUEwQjtBQUN4QyxVQUFNLGtCQUFrQjtBQUVuQixTQUFBO0FBQUEsTUFDSDtBQUFBLE1BQ0EsQ0FBQyxDQUFDLFlBQVksbUJBQW1CLElBQUksS0FBSyxDQUFDLENBQUMsS0FBSyxRQUFRLGlCQUFpQjtBQUFBLElBQUE7QUFBQSxFQUU5RTtBQUFBLEVBRW1CLFFBQVEsbUJBQStDO0FBQ3hFLFVBQU0sUUFBUSxpQkFBaUI7QUFFM0IsUUFBQSxDQUFDLEtBQUssaUJBQWlCO0FBQ3pCO0FBQUEsSUFDRjtBQUVBLFNBQUssa0JBQWtCLEtBQUssZ0JBQWdCLGlCQUFrQyxHQUFHO0FBRTdFLFFBQUEsQ0FBQyxLQUFLLGlCQUFpQjtBQUN6QjtBQUFBLElBQ0Y7QUFFQSxTQUFLLGlDQUFpQztBQUFBLEVBQ3hDO0FBQUEsRUFFQSxNQUF5QixhQUFhLG1CQUF3RDtBQUM1RixVQUFNLGFBQWEsaUJBQWlCO0FBR3BDLFVBQU0sS0FBSztBQUNYLFFBQUksS0FBSyxVQUFVO0FBQ1osV0FBQSxnQkFBZ0IsZUFBZSxJQUFJO0FBQUEsSUFDMUM7QUFBQSxFQUNGO0FBQUEsRUFFUSx1QkFBNkI7QUFDbkMsUUFBSSxLQUFLLGlCQUFpQjtBQUNaLGtCQUFBLFdBQVcsS0FBSyxlQUFlO0FBQy9CLGtCQUFBLEtBQUssS0FBSyxlQUFlO0FBQUEsSUFDdkM7QUFBQSxFQUNGO0FBQUEsRUFFUSw0QkFBNEIsb0JBQW9DO0FBQ2hFLFVBQUEsUUFBUSxjQUFjLGtCQUFrQjtBQUN2QyxXQUFBLFFBQVEsR0FBRyxLQUFLLFFBQVE7QUFBQSxFQUNqQztBQUFBLEVBRVEsbUNBQXlDOztBQUMxQyxLQUFBQSxNQUFBLEtBQUEsb0JBQUEsZ0JBQUFBLElBQWlCLFFBQVEsQ0FBQyxTQUFTO0FBQ3RDLFdBQUssZ0JBQWdCLFVBQVU7QUFBQSxJQUFBO0FBQUEsRUFFbkM7QUFBQSxFQUVRLGlCQUFpQixTQUE2QixRQUFRLE9BQWU7QUFDdkUsUUFBQSxDQUFDLFdBQVcsWUFBWSxJQUFJO0FBQ3ZCLGFBQUE7QUFBQSxJQUNUO0FBSUEsVUFBTSxzQkFBc0IsQ0FBQyxDQUFDLFFBQVEsTUFBTSxXQUFXO0FBQ2pELFVBQUEsY0FBYyxzQkFBc0IsSUFBSSxJQUFJLE9BQU8sSUFBSSxJQUFJLElBQUksZUFBZSxPQUFPLEVBQUU7QUFFN0YsUUFBSSxPQUFPO0FBRUcsa0JBQUEsYUFBYSxPQUFPLFFBQVEsS0FBSztBQUNqQyxrQkFBQSxhQUFhLE9BQU8sS0FBSyxLQUFLO0FBQzlCLGtCQUFBLGFBQWEsT0FBTyxLQUFLLElBQUk7QUFBQSxJQUFBLE9BQ3BDO0FBR08sa0JBQUEsYUFBYSxPQUFPLFFBQVEsNkJBQTZCO0FBQUEsSUFDdkU7QUFFQSxRQUFJLEtBQUssa0JBQWtCO0FBRWIsa0JBQUEsYUFBYSxPQUFPLE9BQU8sTUFBTTtBQUNqQyxrQkFBQSxhQUFhLE9BQU8sUUFBUSxZQUFZO0FBQ3BELGtCQUFZLGFBQWEsT0FBTyxRQUFRLEtBQUssWUFBWSxTQUFTLEVBQUUsQ0FBQztBQUNyRSxrQkFBWSxhQUFhLE9BQU8sUUFBUSxLQUFLLFlBQVksU0FBUyxFQUFFLENBQUM7QUFDekQsa0JBQUEsYUFBYSxPQUFPLFFBQVEsR0FBRztBQUFBLElBQzdDO0FBRUEsUUFBSSxLQUFLLGlCQUFpQjtBQUVaLGtCQUFBLGFBQWEsT0FBTyxZQUFZLE1BQU07QUFBQSxJQUNwRDtBQUlPLFdBQUEsc0JBQ0gsWUFBWSxPQUNaLFlBQVksU0FBUyxVQUFVLENBQUMsSUFBSSxZQUFZO0FBQUEsRUFDdEQ7QUFBQSxFQUVRLDZCQUE4RTtBQUNoRixRQUFBO0FBRUosUUFBSSxLQUFLLG9CQUFvQjtBQUMzQiwyQkFBcUIsS0FBSztBQUFBLElBQUEsT0FDckI7QUFFZ0IsMkJBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQW9EdkI7QUFFQSxXQUFPLDBCQUEwQixrQkFBa0I7QUFBQSxFQUNyRDtBQUFBLEVBRVEsd0JBQ04sY0FDUTtBQUNSLFFBQUksYUFBYTtBQUVKLGlCQUFBLFFBQVEsQ0FBQyxPQUFPO0FBQzNCLFlBQU0sY0FBYyxHQUFHO0FBQ25CLFVBQUE7QUFFQSxVQUFBLEdBQUcsc0JBQXNCLGlCQUFpQjtBQUM1QyxrQkFBVSxLQUFLLDRCQUE0QixHQUFHLHNCQUFzQixLQUFLO0FBQUEsTUFBQSxPQUNwRTtBQUNMLGtCQUFVLEdBQUcsc0JBQXNCO0FBQUEsTUFDckM7QUFFQSxZQUFNLGFBQWEsR0FBRyxvQkFBb0IsSUFBSSxHQUFHLGlCQUFpQixNQUFNO0FBRXhFLG9CQUFjLElBQUksV0FBVyxLQUFLLE9BQU8sSUFBSSxVQUFVO0FBQUEsSUFBQSxDQUN4RDtBQUVNLFdBQUE7QUFBQSxFQUNUO0FBQUEsRUFHUSxlQUFxQjtBQUMzQixTQUFLLHFCQUFxQjtBQUNyQixTQUFBLGdCQUFnQixlQUFlLElBQUk7QUFDeEMsU0FBSyxjQUFjLElBQUksTUFBTSxNQUFNLENBQUM7QUFBQSxFQUN0QztBQUFBLEVBRW1CLFNBQXlCO0FBQ3RDLFFBQUEsRUFBRSxRQUFZLElBQUE7QUFDbEIsUUFBSSxhQUFhO0FBRWpCLFVBQU0sZUFBZSxLQUFLLGlCQUFpQixLQUFLLFVBQVUsSUFBSTtBQUM5RCxVQUFNLHFCQUFxQixLQUFLLGlCQUFpQixLQUFLLFVBQVUsS0FBSztBQUVqRSxRQUFBLEtBQUssWUFBWSxRQUFRO0FBQzNCLFdBQUssV0FBVztBQUNoQixXQUFLLGFBQWE7QUFBQSxJQUNwQjtBQUVBLFFBQUksS0FBSyxXQUFXO0FBQ2xCLGdCQUFVLEdBQUcsS0FBSyxPQUFPLEtBQUssS0FBSyxTQUFTO0FBQy9CLG1CQUFBO0FBQUE7QUFBQTtBQUFBLG9CQUdDLEtBQUssUUFBUTtBQUFBO0FBQUEsc0JBRVgsS0FBSyxlQUFlO0FBQUEscUJBQ3JCLEtBQUssU0FBUztBQUFBO0FBQUE7QUFBQSxJQUcvQjtBQUVNLFVBQUEscUJBQXFCLEtBQUs7QUFRekIsV0FBQTtBQUFBO0FBQUE7QUFBQSxZQUdDLENBQUMsS0FBSyxXQUNKO0FBQUE7QUFBQTtBQUFBLHNCQUdRLFlBQVk7QUFBQTtBQUFBO0FBQUEsMEJBR1IsS0FBSyxXQUFXLE9BQU87QUFBQSwyQkFDdEIsS0FBSyxZQUFZLE9BQU87QUFBQSxvQkFFckMsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLGNBSVAsbUJBQW1CLElBQUksQ0FBQyxXQUFXO0FBQzdCLFlBQUEsY0FBYyxPQUFPLE1BQU07QUFDM0IsWUFBQSxhQUFhLE9BQU8sTUFBTTtBQUNoQyxZQUFNLGFBQWEsS0FBSyx3QkFBd0IsT0FBTyxZQUFZO0FBQzVELGFBQUE7QUFBQSxRQUNMO0FBQUEsMEJBQ1UsR0FBRyxVQUFVLEVBQUU7QUFBQSwwQkFDZixHQUFHLFVBQVUsSUFBSTtBQUFBLDJCQUV2QixHQUFHLGtCQUFrQixNQUFNLFVBQVUsTUFBTSxXQUFXLE1BQU0sS0FBSyxRQUFRLGdCQUFnQixJQUFJLFVBQVUsTUFDcEcsa0JBQWtCLE1BQU0sYUFBYSxDQUFDLE1BQU0sY0FBYyxDQUFDLE1BQzVELEtBQUssUUFBUSxhQUNmLElBQUksYUFBYSxDQUFDLEdBQ3BCO0FBQUE7QUFBQSxNQUFBO0FBQUEsSUFFSixDQUNELENBQUM7QUFBQTtBQUFBLG9CQUVNLEtBQUssT0FBTyxFQUFFO0FBQUEsc0JBQ1osS0FBSyxZQUFZO0FBQUEsdUJBQ2hCLE1BQU0sS0FBSyxjQUFjLElBQUksTUFBTSxPQUFPLENBQUMsQ0FBQztBQUFBO0FBQUEsb0JBRS9DLEtBQUssUUFBUztBQUFBO0FBQUE7QUFBQSx3QkFHVixLQUFLLFdBQVcsT0FBTztBQUFBLHlCQUN0QixLQUFLLFlBQVksT0FBTztBQUFBLCtCQUNsQixLQUFLLGNBQWMsT0FBTztBQUFBO0FBQUE7QUFBQTtBQUFBLFVBSS9DLFVBQ0U7QUFBQTtBQUFBLDJCQUVlLE9BQU87QUFBQSxnQkFDbEIsSUFBSSxDQUFDLE9BQWE7QUFDbEIsV0FBSyxrQkFBa0I7QUFBQSxJQUFBLENBQ3hCLENBQUM7QUFBQSw4QkFFSixPQUFPO0FBQUEsVUFDVCxhQUNFLEtBQUEsT0FBQSxLQUFJLFdBQTJELENBQUEsa0RBQUEsYUFBQSxDQUFBLElBQVYsY0FDckQsT0FBTztBQUFBO0FBQUE7QUFBQSxFQUdqQjtBQUNGO0FBM2dCYSxnQkFDWSxTQUF5QjtBQURyQyxnQkFFWSxTQUFTO0FBQUEsRUFDOUIsT0FBTztBQUFBLEVBQ1AsTUFBTTtBQUNSO0FBZ0JtQixnQkFBQTtBQUFBLEVBQWxCLFNBQVM7QUFBQSxHQXJCQyxnQkFxQlEsV0FBQSxPQUFBLENBQUE7QUFTd0QsZ0JBQUE7QUFBQSxFQUExRSxTQUFTLEVBQUUsV0FBVyxhQUFhLE1BQU0sU0FBUyxTQUFTLE1BQU07QUFBQSxHQTlCdkQsZ0JBOEJnRSxXQUFBLFlBQUEsQ0FBQTtBQVF4RCxnQkFBQTtBQUFBLEVBQWxCLFNBQVM7QUFBQSxHQXRDQyxnQkFzQ1EsV0FBQSxXQUFBLENBQUE7QUFPQSxnQkFBQTtBQUFBLEVBQWxCLFNBQVM7QUFBQSxHQTdDQyxnQkE2Q1EsV0FBQSxhQUFBLENBQUE7QUFNWixnQkFBQTtBQUFBLEVBRE4sU0FBUyxFQUFFLFdBQVcsb0JBQW9CO0FBQUEsR0FsRGhDLGdCQW1ESixXQUFBLG1CQUFBLENBQUE7QUFPOEQsZ0JBQUE7QUFBQSxFQUFwRSxTQUFTLEVBQUUsV0FBVyxzQkFBc0IsTUFBTSxTQUFTO0FBQUEsR0ExRGpELGdCQTBEMEQsV0FBQSxvQkFBQSxDQUFBO0FBU2xELGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBbkVDLGdCQW1FUSxXQUFBLFlBQUEsQ0FBQTtBQU1pRCxnQkFBQTtBQUFBLEVBQW5FLFNBQVMsRUFBRSxXQUFXLHFCQUFxQixNQUFNLFNBQVM7QUFBQSxHQXpFaEQsZ0JBeUV5RCxXQUFBLG1CQUFBLENBQUE7QUFLTCxnQkFBQTtBQUFBLEVBQTlELFNBQVMsRUFBRSxXQUFXLGlCQUFpQixNQUFNLFFBQVE7QUFBQSxHQTlFM0MsZ0JBOEVvRCxXQUFBLGVBQUEsQ0FBQTtBQUtBLGdCQUFBO0FBQUEsRUFBOUQsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLE1BQU0sUUFBUTtBQUFBLEdBbkYzQyxnQkFtRm9ELFdBQUEsZUFBQSxDQUFBO0FBWWxCLGdCQUFBO0FBQUEsRUFBNUMsU0FBUyxFQUFFLFdBQVcsYUFBYTtBQUFBLEdBL0Z6QixnQkErRmtDLFdBQUEsWUFBQSxDQUFBO0FBVzFCLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBMUdDLGdCQTBHUSxXQUFBLGNBQUEsQ0FBQTtBQVlBLGdCQUFBO0FBQUEsRUFBbEIsU0FBUztBQUFBLEdBdEhDLGdCQXNIUSxXQUFBLFdBQUEsQ0FBQTtBQWVpQyxnQkFBQTtBQUFBLEVBQW5ELFNBQVMsRUFBRSxXQUFXLG9CQUFvQjtBQUFBLEdBckloQyxnQkFxSXlDLFdBQUEsbUJBQUEsQ0FBQTtBQXNFSSxnQkFBQTtBQUFBLEVBQXZELFNBQVMsRUFBRSxXQUFXLHdCQUF3QjtBQUFBLEdBM01wQyxnQkEyTTZDLFdBQUEsc0JBQUEsQ0FBQTtBQUtRLGdCQUFBO0FBQUEsRUFBL0QsU0FBUyxFQUFFLFdBQVcsaUJBQWlCLFNBQVMsTUFBTTtBQUFBLEdBaE41QyxnQkFnTnFELFdBQUEsZ0JBQUEsQ0FBQTtBQVd6RCxnQkFBQTtBQUFBLEVBRE4sU0FBUyxFQUFFLFdBQVcsZ0JBQWdCLFNBQVMsTUFBTTtBQUFBLEdBMU4zQyxnQkEyTkosV0FBQSxlQUFBLENBQUE7QUEwTUMsZ0JBQUE7QUFBQSxFQURQLGFBQWEsb0JBQW9CO0FBQUEsR0FwYXZCLGdCQXFhSCxXQUFBLGdCQUFBLENBQUE7QUFyYUcsa0JBQU4sZ0JBQUE7QUFBQSxFQUROLGNBQWMsV0FBVztBQUFBLEdBQ2IsZUFBQTsiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMF19
|
|
909
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ac2JiLWVzdGEvbHluZS1kZXNpZ24tdG9rZW5zL2Rpc3QvanMvc2JiLXRva2Vucy5tanMiLCIuLi8uLi8uLi9zcmMvZWxlbWVudHMvaW1hZ2UvaW1hZ2UudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEbyBub3QgZWRpdCBkaXJlY3RseVxuICogR2VuZXJhdGVkIG9uIE1vbiwgMjEgT2N0IDIwMjQgMDY6MzQ6MjIgR01UXG4gKi9cblxuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uMXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjJ4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb24zeCA9IDEyMDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjR4ID0gMTYwO1xuZXhwb3J0IGNvbnN0IFNiYkFuaW1hdGlvbkR1cmF0aW9uNXggPSAyMDA7XG5leHBvcnQgY29uc3QgU2JiQW5pbWF0aW9uRHVyYXRpb242eCA9IDI0MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25EdXJhdGlvbjEyeCA9IDQ4MDtcbmV4cG9ydCBjb25zdCBTYmJBbmltYXRpb25FYXNpbmcgPSBcImN1YmljLWJlemllciguNDcsIC4xLCAxLCAuNjMpXCI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgxeCA9IDE7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgyeCA9IDI7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyV2lkdGgzeCA9IDM7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzMXggPSAyO1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czJ4ID0gNDtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM0eCA9IDg7XG5leHBvcnQgY29uc3QgU2JiQm9yZGVyUmFkaXVzNnggPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJCb3JkZXJSYWRpdXM4eCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYkJvcmRlclJhZGl1czE2eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRaZXJvTWluID0gMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50WmVyb01heCA9IDM1OTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWljcm9NaW4gPSAzNjA7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1pY3JvTWF4ID0gNTk5O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRTbWFsbE1pbiA9IDYwMDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50U21hbGxNYXggPSA4Mzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludE1lZGl1bU1pbiA9IDg0MDtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TWVkaXVtTWF4ID0gMTAyMztcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50TGFyZ2VNaW4gPSAxMDI0O1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRMYXJnZU1heCA9IDEyNzk7XG5leHBvcnQgY29uc3QgU2JiQnJlYWtwb2ludFdpZGVNaW4gPSAxMjgwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRXaWRlTWF4ID0gMTQzOTtcbmV4cG9ydCBjb25zdCBTYmJCcmVha3BvaW50VWx0cmFNaW4gPSAxNDQwO1xuZXhwb3J0IGNvbnN0IFNiYkJyZWFrcG9pbnRVbHRyYU1heCA9IDI1Nzk7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFjayA9IFwiIzAwMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTAgPSBcInJnYmEoMCwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGExMCA9IFwicmdiYSgwLCAwLCAwLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMTUgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGEyMCA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhMzAgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTQwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckJsYWNrQWxwaGE1MCA9IFwicmdiYSgwLCAwLCAwLCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbGFja0FscGhhNjAgPSBcInJnYmEoMCwgMCwgMCwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQmxhY2tBbHBoYTcwID0gXCJyZ2JhKDAsIDAsIDAsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pZG5pZ2h0ID0gXCIjMTUxNTE1XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JCbHVlID0gXCIjMmQzMjdkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDaGFyY29hbCA9IFwiIzIxMjEyMVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9ySXJvbiA9IFwiIzQ0NDQ0NFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQW50aHJhY2l0ZSA9IFwiIzVhNWE1YVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3Jhbml0ZSA9IFwiIzY4Njg2OFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTWV0YWwgPSBcIiM3Njc2NzZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1ldGFsQWxwaGEwID0gXCJyZ2JhKDExOCwgMTE4LCAxMTgsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JNZXRhbEFscGhhMjAgPSBcInJnYmEoMTE4LCAxMTgsIDExOCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2UgPSBcIiM4ZDhkOGRcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTbW9rZUFscGhhNSA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU21va2VBbHBoYTEwID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNtb2tlQWxwaGEyMCA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JTdG9ybSA9IFwiI2E4YThhOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yR3JhcGhpdGUgPSBcIiNiN2I3YjdcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckNlbWVudCA9IFwiI2JkYmRiZFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2VtZW50QWxwaGEwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDZW1lbnRBbHBoYTIwID0gXCJyZ2JhKDE4OSwgMTg5LCAxODksIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBsYXRpbnVtID0gXCIjY2RjZGNkXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JQbGF0aW51bUFscGhhMCA9IFwicmdiYSgyMDUsIDIwNSwgMjA1LCAwKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGxhdGludW1BbHBoYTIwID0gXCJyZ2JhKDIwNSwgMjA1LCAyMDUsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckFsdW1pbml1bSA9IFwiI2QyZDJkMlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yU2lsdmVyID0gXCIjZGNkY2RjXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JDbG91ZCA9IFwiI2U1ZTVlNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQ2xvdWRBbHBoYTgwID0gXCJyZ2JhKDIyOSwgMjI5LCAyMjksIDAuOClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvck1pbGsgPSBcIiNmNmY2ZjZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZCA9IFwiI2ViMDAwMFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkQWxwaGEwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMClcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZEFscGhhMjAgPSBcInJnYmEoMjM1LCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWRBbHBoYTkwID0gXCJyZ2JhKDIzNSwgMCwgMCwgMC45KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkTW9kZURhcmsgPSBcIiNmZjM4MzhcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDEyNSA9IFwiI2M2MDAxOFwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUmVkMTI1QWxwaGEwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSZWQxMjVBbHBoYTIwID0gXCJyZ2JhKDE5OCwgMCwgMjQsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJlZDE1MCA9IFwiI2EyMDAxM1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUm95YWwgPSBcIiMwNjM0OGJcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclJveWFsMTI1ID0gXCIjMDMyNjY4XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JSb3lhbDE1MCA9IFwiIzAyMWM0ZVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGUgPSBcIiNmZmZmZmZcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGEwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDApXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhMjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTMwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvcldoaXRlQWxwaGE1MCA9IFwicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JXaGl0ZUFscGhhNjAgPSBcInJnYmEoMjU1LCAyNTUsIDI1NSwgMC42KVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yV2hpdGVBbHBoYTcwID0gXCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNylcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclNreSA9IFwiIzAwNzljN1wiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yTmlnaHQgPSBcIiMxNDNhODVcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclZpb2xldCA9IFwiIzZmMjI4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yUGluayA9IFwiI2NmNDA4MlwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQXV0dW1uID0gXCIjZTg0ZTEwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JPcmFuZ2UgPSBcIiNmMjdlMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvclBlYWNoID0gXCIjZmNiYjAwXCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JMZW1vbiA9IFwiI2ZmZGUxNVwiO1xuZXhwb3J0IGNvbnN0IFNiYkNvbG9yQnJvd24gPSBcIiNiNzYwMDBcIjtcbmV4cG9ydCBjb25zdCBTYmJDb2xvckdyZWVuID0gXCIjMDA4YTM2XCI7XG5leHBvcnQgY29uc3QgU2JiQ29sb3JUdXJxdW9pc2UgPSBcIiMwMGE1OWJcIjtcbmV4cG9ydCBjb25zdCBTYmJGb2N1c091dGxpbmVPZmZzZXQgPSAzO1xuZXhwb3J0IGNvbnN0IFNiYkhvdmVySW1hZ2VCcmlnaHRuZXNzID0gMS4wNzU7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zWmVybyA9IDQ7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zTWljcm8gPSA0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc1NtYWxsID0gNDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNNZWRpdW0gPSA4O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkQ29sdW1uc0xhcmdlID0gODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZENvbHVtbnNXaWRlID0gMTI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRDb2x1bW5zVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlTWljcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlR3JpZEd1dHRlclJlc3BvbnNpdmVTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZU1lZGl1bSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZUxhcmdlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZUdyaWRHdXR0ZXJSZXNwb25zaXZlV2lkZSA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VHcmlkR3V0dGVyUmVzcG9uc2l2ZVVsdHJhID0gMzI7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVaZXJvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiTGF5b3V0QmFzZU9mZnNldFJlc3BvbnNpdmVNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlU21hbGwgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VPZmZzZXRSZXNwb25zaXZlTGFyZ2UgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVdpZGUgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJMYXlvdXRCYXNlT2Zmc2V0UmVzcG9uc2l2ZVVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYkxheW91dEJhc2VQYWdlTWF4V2lkdGggPSAxMjAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzFPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxT2Zmc2V0WSA9IDI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93MUJsdXIgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU2hhZG93Mk9mZnNldFkgPSAxO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM1NoYWRvdzJCbHVyID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTaGFkb3cyU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMTUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwzU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkMkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDNIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsM0hhcmROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjQpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MU9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFPZmZzZXRZID0gNDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cxQmx1ciA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzFTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJPZmZzZXRYID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTaGFkb3cyT2Zmc2V0WSA9IDE7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1U2hhZG93MkJsdXIgPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNVNvZnQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4wNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0MkNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDVTb2Z0TmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQxQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsNUhhcmROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjMpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw1SGFyZE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuNClcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MU9mZnNldFkgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxQmx1ciA9IDEyODtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlTaGFkb3cyT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93Mk9mZnNldFkgPSA0O1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNoYWRvdzJCbHVyID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U2hhZG93MlNwcmVhZCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5U29mdDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjA1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTFDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjE1KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsOVNvZnROZWdhdGl2ZTJDb2xvciA9IFwicmdiYSgwLCAwLCAwLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZDJDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjIpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWw5SGFyZE5lZ2F0aXZlMUNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMylcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDlIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxT2Zmc2V0WCA9IDA7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFPZmZzZXRZID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzFCbHVyID0gMTkyO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cxU3ByZWFkID0gMDtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU2hhZG93Mk9mZnNldFggPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTaGFkb3cyT2Zmc2V0WSA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJCbHVyID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNoYWRvdzJTcHJlYWQgPSAwO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0MUNvbG9yID0gXCJyZ2JhKDE0MSwgMTQxLCAxNDEsIDAuMDUpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMVNvZnQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4xKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFTb2Z0TmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4xNSlcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExU29mdE5lZ2F0aXZlMkNvbG9yID0gXCJyZ2JhKDAsIDAsIDAsIDAuMilcIjtcbmV4cG9ydCBjb25zdCBTYmJTaGFkb3dFbGV2YXRpb25MZXZlbDExSGFyZDFDb2xvciA9IFwicmdiYSgxNDEsIDE0MSwgMTQxLCAwLjEpXCI7XG5leHBvcnQgY29uc3QgU2JiU2hhZG93RWxldmF0aW9uTGV2ZWwxMUhhcmQyQ29sb3IgPSBcInJnYmEoMTQxLCAxNDEsIDE0MSwgMC4yKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUxQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC4zKVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNoYWRvd0VsZXZhdGlvbkxldmVsMTFIYXJkTmVnYXRpdmUyQ29sb3IgPSBcInJnYmEoMCwgMCwgMCwgMC40KVwiO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1plcm8gPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNNaWNybyA9IDI4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHh4c1NtYWxsID0gMjg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4eHNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHhzVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c1plcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFh4c01pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNTbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzTWVkaXVtID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRYeHNMYXJnZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzV2lkZSA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHhzVWx0cmEgPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzWmVybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNaWNybyA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNTbWFsbCA9IDM2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNNZWRpdW0gPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzTGFyZ2UgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFhzV2lkZSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50WHNVbHRyYSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1plcm8gPSA0NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNNaWNybyA9IDQ0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50U1NtYWxsID0gNDQ7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTWVkaXVtID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudFNXaWRlID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRTVWx0cmEgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1aZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNTWljcm8gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudE1TbWFsbCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TU1lZGl1bSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TUxhcmdlID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRNV2lkZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TVVsdHJhID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMWmVybyA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TE1pY3JvID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU2l6ZUVsZW1lbnRMU21hbGwgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExNZWRpdW0gPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExMYXJnZSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVFbGVtZW50TFdpZGUgPSA2NDtcbmV4cG9ydCBjb25zdCBTYmJTaXplRWxlbWVudExVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlTbWFsbCA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNpemVJY29uVWlNZWRpdW0gPSAzNjtcbmV4cG9ydCBjb25zdCBTYmJTaXplSWNvblVpTGFyZ2UgPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQxeCA9IDQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMnggPSA4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDN4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkNHggPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ1eCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDZ4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkN3ggPSAyODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nRml4ZWQ4eCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdGaXhlZDl4ID0gMzY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTB4ID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTJ4ID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTR4ID0gNTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTZ4ID0gNjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMTh4ID0gNzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjB4ID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMjR4ID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ0ZpeGVkMzB4ID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1plcm8gPSAxMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNNaWNybyA9IDEyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHh4c1NtYWxsID0gMTI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTWVkaXVtID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzTGFyZ2UgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4eHNXaWRlID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHhzVWx0cmEgPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c1plcm8gPSAxNjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4c01pY3JvID0gMTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNTbWFsbCA9IDE2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzTWVkaXVtID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeHNMYXJnZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhzVWx0cmEgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzWmVybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNaWNybyA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNTbWFsbCA9IDIwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNNZWRpdW0gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzTGFyZ2UgPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVhzV2lkZSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHNVbHRyYSA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1plcm8gPSAyNDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNNaWNybyA9IDI0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlU1NtYWxsID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTWVkaXVtID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTTGFyZ2UgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVNXaWRlID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVTVWx0cmEgPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1aZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNTWljcm8gPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZU1TbWFsbCA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTU1lZGl1bSA9IDQwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTUxhcmdlID0gNDA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVNV2lkZSA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTVVsdHJhID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMWmVybyA9IDMyO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVMU21hbGwgPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxNZWRpdW0gPSA0ODtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxMYXJnZSA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlTFdpZGUgPSA1NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZUxVbHRyYSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxaZXJvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1pY3JvID0gMzI7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFNtYWxsID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbE1lZGl1bSA9IDY0O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxMYXJnZSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWGxXaWRlID0gODA7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYbFVsdHJhID0gOTY7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxaZXJvID0gNDg7XG5leHBvcnQgY29uc3QgU2JiU3BhY2luZ1Jlc3BvbnNpdmVYeGxNaWNybyA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsU21hbGwgPSA3MjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bE1lZGl1bSA9IDgwO1xuZXhwb3J0IGNvbnN0IFNiYlNwYWNpbmdSZXNwb25zaXZlWHhsTGFyZ2UgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFdpZGUgPSA5NjtcbmV4cG9ydCBjb25zdCBTYmJTcGFjaW5nUmVzcG9uc2l2ZVh4bFVsdHJhID0gMTIwO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9Gb250RmFtaWx5ID0gXCJcXFwiU0JCXFxcIiwgXFxcIkhlbHZldGljYSBOZXVlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZlwiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MZXR0ZXJTcGFjaW5nVGl0bGVzID0gXCIwXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xldHRlclNwYWNpbmdCb2R5VGV4dCA9IFwiMC4wM2VtXCI7XG5leHBvcnQgY29uc3QgU2JiVHlwb0xpbmVIZWlnaHRUaXRsZXMgPSBcIjEuM1wiO1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9MaW5lSGVpZ2h0Qm9keVRleHQgPSBcIjEuNzVcIjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUwNzV4ID0gMTI7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDgxMjV4ID0gMTM7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMDg3NXggPSAxNDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGVEZWZhdWx0ID0gMTY7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTEyNXggPSAxODtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUxMjV4ID0gMjA7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMTV4ID0gMjQ7XG5leHBvcnQgY29uc3QgU2JiVHlwb1NjYWxlMnggPSAzMjtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUyNXggPSA0MDtcbmV4cG9ydCBjb25zdCBTYmJUeXBvU2NhbGUzeCA9IDQ4O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTM1eCA9IDU2O1xuZXhwb3J0IGNvbnN0IFNiYlR5cG9TY2FsZTR4ID0gNjQ7XG4iLCJpbXBvcnQge1xuICBTYmJCcmVha3BvaW50WmVyb01pbixcbiAgU2JiQnJlYWtwb2ludFplcm9NYXgsXG4gIFNiYkJyZWFrcG9pbnRNaWNyb01pbixcbiAgU2JiQnJlYWtwb2ludE1pY3JvTWF4LFxuICBTYmJCcmVha3BvaW50U21hbGxNaW4sXG4gIFNiYkJyZWFrcG9pbnRTbWFsbE1heCxcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1pbixcbiAgU2JiQnJlYWtwb2ludE1lZGl1bU1heCxcbiAgU2JiQnJlYWtwb2ludExhcmdlTWluLFxuICBTYmJCcmVha3BvaW50TGFyZ2VNYXgsXG4gIFNiYkJyZWFrcG9pbnRXaWRlTWluLFxuICBTYmJCcmVha3BvaW50V2lkZU1heCxcbiAgU2JiQnJlYWtwb2ludFVsdHJhTWluLFxuICBTYmJCcmVha3BvaW50VWx0cmFNYXgsXG4gIFNiYlR5cG9TY2FsZURlZmF1bHQsXG59IGZyb20gJ0BzYmItZXN0YS9seW5lLWRlc2lnbi10b2tlbnMnO1xuaW1wb3J0IHtcbiAgdHlwZSBDU1NSZXN1bHRHcm91cCxcbiAgaHRtbCxcbiAgTGl0RWxlbWVudCxcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbn0gZnJvbSAnbGl0JztcbmltcG9ydCB7IGN1c3RvbUVsZW1lbnQsIGV2ZW50T3B0aW9ucywgcHJvcGVydHkgfSBmcm9tICdsaXQvZGVjb3JhdG9ycy5qcyc7XG5pbXBvcnQgeyByZWYgfSBmcm9tICdsaXQvZGlyZWN0aXZlcy9yZWYuanMnO1xuXG5pbXBvcnQgeyBmb3JjZVR5cGUgfSBmcm9tICcuLi9jb3JlL2RlY29yYXRvcnMuanMnO1xuaW1wb3J0IHsgaG9zdENvbnRleHQgfSBmcm9tICcuLi9jb3JlL2RvbS5qcyc7XG5cbmltcG9ydCBzdHlsZSBmcm9tICcuL2ltYWdlLnNjc3M/bGl0JmlubGluZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWcge1xuICBicmVha3BvaW50czogSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJmYWNlSW1hZ2VBdHRyaWJ1dGVzU2l6ZXNDb25maWdCcmVha3BvaW50IHtcbiAgaW1hZ2U6IHtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICB9O1xuICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeSB7XG4gIGNvbmRpdGlvbkZlYXR1cmU6IHN0cmluZztcbiAgY29uZGl0aW9uRmVhdHVyZVZhbHVlOiB7XG4gICAgbHluZURlc2lnblRva2VuOiBib29sZWFuO1xuICAgIHZhbHVlOiBzdHJpbmc7XG4gIH07XG4gIGNvbmRpdGlvbk9wZXJhdG9yOiBmYWxzZTtcbn1cblxuLyoqXG4gKiB3ZSBjaGVjayB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhIG1hbnVhbGx5LCBzbyBpdCdzIHNhZmUgdG8gdXNlIGBhbnlgIGFzIHJldHVybiB0eXBlXG4gKi9cbmNvbnN0IGltYWdlSGVscGVyR2V0QnJlYWtwb2ludHMgPSAoXG4gIGpzb25TdHJpbmc6IHN0cmluZyxcbik6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnQnJlYWtwb2ludFtdID0+IHtcbiAgaWYgKCFqc29uU3RyaW5nIHx8IGpzb25TdHJpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLy8gbWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSBgYnJlYWtwb2ludHNgIGtleSBpbiBvYmplY3RcbiAgY29uc3QgbG9nV2FybmluZyA9IGltcG9ydC5tZXRhLmVudi5ERVZcbiAgICA/ICgpID0+XG4gICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAnc2JiLWltYWdlIGVycm9yOiBhdHRyaWJ1dGUgYnJlYWtwb2ludHMgaGFzIHdyb25nIGRhdGEgZm9ybWF0LiBSZWZlcmVuY2UgdGhlIGRvY3VtZW50YXRpb24gdG8gc2VlIGhvdyB5b3Ugc2hvdWxkIGZvcm1hdCB0aGUgZGF0YSBmb3IgdGhpcyBhdHRyaWJ1dGUuJyxcbiAgICAgICAgKVxuICAgIDogbnVsbDtcbiAgbGV0IGpzb25PYmplY3Q6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnO1xuXG4gIHRyeSB7XG4gICAganNvbk9iamVjdCA9IEpTT04ucGFyc2UoanNvblN0cmluZyk7XG4gIH0gY2F0Y2gge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmICghanNvbk9iamVjdC5icmVha3BvaW50cyB8fCBqc29uT2JqZWN0LmJyZWFrcG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGxvZ1dhcm5pbmc/LigpO1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIC8vIG1ha2Ugc3VyZSB3ZSBnZXQgYW4gYXJyYXkgb2YgYnJlYWtwb2ludHNcbiAgaWYgKCFBcnJheS5pc0FycmF5KGpzb25PYmplY3QuYnJlYWtwb2ludHMpKSB7XG4gICAgbG9nV2FybmluZz8uKCk7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIDEuIG1ha2Ugc3VyZSB0aGF0IGVhY2ggZW50cnkgd2l0aGluIHRoZSBicmVha3BvaW50cyBvYmplY3QgY29udGFpbnMgb25seSBhbGxvd2VkIGtleXNcbiAgICogMi4gbWFrZSBzdXJlIHRoYXQgYWxsIG5lY2Vzc2FyeSBrZXlzIGFyZSBwcmVzZW50XG4gICAqL1xuICBsZXQgd3JvbmdLZXlEZXRlY3RlZCA9IGZhbHNlO1xuICBsZXQgbWlzc2luZ0tleURldGVjdGVkID0gZmFsc2U7XG5cbiAgY29uc3QgYWxsb3dlZEtleXMgPSBbJ2ltYWdlJywgJ21lZGlhUXVlcmllcyddO1xuXG4gIGpzb25PYmplY3QuYnJlYWtwb2ludHMuZm9yRWFjaCgoYnJlYWtwb2ludCkgPT4ge1xuICAgIGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludCk7XG5cbiAgICBicmVha3BvaW50S2V5cy5mb3JFYWNoKChicmVha3BvaW50S2V5KSA9PiB7XG4gICAgICBpZiAoIWFsbG93ZWRLZXlzLmluY2x1ZGVzKGJyZWFrcG9pbnRLZXkpKSB7XG4gICAgICAgIHdyb25nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgYWxsb3dlZEtleXMuZm9yRWFjaCgoYWxsb3dlZEtleSkgPT4ge1xuICAgICAgaWYgKCFicmVha3BvaW50S2V5cy5pbmNsdWRlcyhhbGxvd2VkS2V5KSkge1xuICAgICAgICBtaXNzaW5nS2V5RGV0ZWN0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcblxuICBpZiAod3JvbmdLZXlEZXRlY3RlZCB8fCBtaXNzaW5nS2V5RGV0ZWN0ZWQpIHtcbiAgICBsb2dXYXJuaW5nPy4oKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4ganNvbk9iamVjdC5icmVha3BvaW50cztcbn07XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJPcHRpb25zID0ge1xuICBvbmNlOiB0cnVlLFxuICBwYXNzaXZlOiB0cnVlLFxufTtcblxuY29uc3QgcHhUb1JlbSA9IChweDogbnVtYmVyKTogbnVtYmVyID0+IHtcbiAgcmV0dXJuIHB4IC8gU2JiVHlwb1NjYWxlRGVmYXVsdDtcbn07XG5cbmNvbnN0IGJyZWFrcG9pbnRNYXA6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7XG4gICdzYmItYnJlYWtwb2ludC16ZXJvLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFplcm9NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtemVyby1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRaZXJvTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LW1pY3JvLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1pY3JvTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LW1pY3JvLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1pY3JvTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXNtYWxsLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFNtYWxsTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LXNtYWxsLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFNtYWxsTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LW1lZGl1bS1taW4nOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRNZWRpdW1NaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtbWVkaXVtLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludE1lZGl1bU1heCksXG4gICdzYmItYnJlYWtwb2ludC1sYXJnZS1taW4nOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRMYXJnZU1pbiksXG4gICdzYmItYnJlYWtwb2ludC1sYXJnZS1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRMYXJnZU1heCksXG4gICdzYmItYnJlYWtwb2ludC13aWRlLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFdpZGVNaW4pLFxuICAnc2JiLWJyZWFrcG9pbnQtd2lkZS1tYXgnOiBweFRvUmVtKFNiYkJyZWFrcG9pbnRXaWRlTWF4KSxcbiAgJ3NiYi1icmVha3BvaW50LXVsdHJhLW1pbic6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFVsdHJhTWluKSxcbiAgJ3NiYi1icmVha3BvaW50LXVsdHJhLW1heCc6IHB4VG9SZW0oU2JiQnJlYWtwb2ludFVsdHJhTWF4KSxcbn07XG5cbi8qKlxuICogSXQgZGlzcGxheXMgYW4gaW1hZ2UuXG4gKlxuICogQGV2ZW50IHtFdmVudH0gbG9hZCAtIEVtaXRzIHdoZW4gdGhlIGltYWdlIGhhcyBiZWVuIGxvYWRlZC5cbiAqIEBldmVudCB7RXZlbnR9IGVycm9yIC0gRW1pdHMgd2hlbiB0aGUgaW1hZ2UgbG9hZGluZyBlbmRlZCBpbiBhbiBlcnJvci5cbiAqIEBjc3Nwcm9wIFstLXNiYi1pbWFnZS1hc3BlY3QtcmF0aW89YXV0b10gLSBDYW4gYmUgdXNlZCB0byBvdmVycmlkZSBgYXNwZWN0UmF0aW9gIHByb3BlcnR5LlxuICogVGhpcyB3YXkgd2UgY2FuIGhhdmUsIGZvciBleGFtcGxlLCBhbiBpbWFnZSBjb21wb25lbnQgd2l0aCBhbiBhc3BlY3RcbiAqIHJhdGlvIG9mIDQvMyBpbiBzbWFsbGVyIHZpZXdwb3J0cyBhbmQgMTYvOSBpbiBsYXJnZXIgdmlld3BvcnRzLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLWJvcmRlci1yYWRpdXM9dmFyKC0tc2JiLWJvcmRlci1yYWRpdXMtNHgpXSAtIENhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHRoZVxuICogYGJvcmRlclJhZGl1c2AgcHJvcGVydHkgaW4gY2FzZSBvZiBkaWZmZXJlbnQgdmFsdWVzIGZvciBkaWZmZXJlbnQgdmlld3BvcnRzLlxuICogQGNzc3Byb3AgWy0tc2JiLWltYWdlLW9iamVjdC1wb3NpdGlvbl0gLSBDYW4gYmUgdXNlZCB0byBzZXQgdGhlIG9iamVjdC1wb3NpdGlvbiBjc3MgcHJvcGVydHkgb2YgdGhlIGltYWdlIGl0c2VsZiBpZiB0aGUgaW1hZ2UgaXRzZWxmIGlzIGNyb3BwZWQuXG4gKiBAY3NzcHJvcCBbLS1zYmItaW1hZ2Utb2JqZWN0LWZpdD1jb3Zlcl0gLSBDYW4gYmUgdXNlZCB0byBzZXQgdGhlIG9iamVjdC1maXQgY3NzIHByb3BlcnR5IG9mIHRoZSBpbWFnZSBpdHNlbGYgaWYgdGhlIGltYWdlIGl0c2VsZiBpcyBjcm9wcGVkLlxuICovXG5leHBvcnRcbkBjdXN0b21FbGVtZW50KCdzYmItaW1hZ2UnKVxuY2xhc3MgU2JiSW1hZ2VFbGVtZW50IGV4dGVuZHMgTGl0RWxlbWVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgc3R5bGVzOiBDU1NSZXN1bHRHcm91cCA9IHN0eWxlO1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IGV2ZW50cyA9IHtcbiAgICBlcnJvcjogJ2Vycm9yJyxcbiAgICBsb2FkOiAnbG9hZCcsXG4gIH0gYXMgY29uc3Q7XG5cbiAgcHJpdmF0ZSBfY2FwdGlvbkVsZW1lbnQ/OiBIVE1MRWxlbWVudDtcbiAgcHJpdmF0ZSBfbGlua3NJbkNhcHRpb24/OiBOb2RlTGlzdE9mPEhUTUxMaW5rRWxlbWVudD47XG4gIHByaXZhdGUgX2NvbmZpZyA9IHtcbiAgICBub25SZXRpbmFRdWFsaXR5OiAnNDUnLFxuICAgIHJldGluYVF1YWxpdHk6ICcyMCcsXG4gIH07XG5cbiAgLyoqXG4gICAqIEFuIGFsdCB0ZXh0IGlzIG5vdCBhbHdheXMgbmVjZXNzYXJ5IChlLmcuIGluIHRlYXNlciBjYXJkcyB3aGVuXG4gICAqIGFkZGl0aW9uYWwgbGluayB0ZXh0IGlzIHByb3ZpZGVkKS4gSW4gdGhpcyBjYXNlIHdlIGNhbiBsZWF2ZVxuICAgKiB0aGUgdmFsdWUgb2YgdGhlIGFsdCBhdHRyaWJ1dGUgYmxhbmssIGJ1dCB0aGUgYXR0cmlidXRlIGl0c2VsZlxuICAgKiBzdGlsbCBuZWVkcyB0byBiZSBwcmVzZW50LiBUaGF0IHdheSB3ZSBjYW4gc2lnbmFsIGFzc2lzdGl2ZVxuICAgKiB0ZWNobm9sb2d5LCB0aGF0IHRoZXkgY2FuIHNraXAgdGhlIGltYWdlLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBhbHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJZiBzZXQgdG8gZmFsc2UsIHdlIHNob3cgYSBibHVycmVkIHZlcnNpb24gb2YgdGhlIGltYWdlIGFzXG4gICAqIHBsYWNlaG9sZGVyIGJlZm9yZSB0aGUgYWN0dWFsIGltYWdlIHNob3dzIHVwLiBUaGlzIHdpbGwgaGVscFxuICAgKiB0byBpbXByb3ZlIHRoZSBwZXJjZWl2ZWQgbG9hZGluZyBwZXJmb3JtYW5jZS4gUmVhZCBtb3JlIGFib3V0XG4gICAqIHRoZSBpZGVhIG9mIGxxaXAgaGVyZTpcbiAgICogaHR0cHM6Ly9tZWRpdW0uY29tL0BpbWdpeC9scWlwLXlvdXItaW1hZ2VzLWZvci1mYXN0LWxvYWRpbmctMjUyM2Q5ZWU0YTYyXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnc2tpcC1scWlwJywgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KVxuICBwdWJsaWMgYWNjZXNzb3Igc2tpcExxaXA6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogQSBjYXB0aW9uIGNhbiBwcm92aWRlIGFkZGl0aW9uYWwgY29udGV4dCB0byB0aGUgaW1hZ2UgKGUuZy5cbiAgICogZGVzY3JpcHRpb25zIGFuZCB0aGUgbGlrZSkuXG4gICAqIExpbmtzIHdpbGwgYXV0b21hdGljYWxseSByZWNlaXZlIHRhYmluZGV4PS0xIGlmIGhpZGVGcm9tU2NyZWVucmVhZGVyXG4gICAqIGlzIHNldCB0byB0cnVlLiBUaGF0IHdheSB0aGV5IHdpbGwgbm8gbG9uZ2VyIGJlY29tZSBmb2N1c2FibGUuXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIGNhcHRpb246IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBJZiBhIGNvcHlyaWdodCB0ZXh0IGlzIHByb3ZpZGVkLCB3ZSB3aWxsIGFkZCBpdCB0byB0aGUgY2FwdGlvblxuICAgKiBhbmQgY3JlYXRlIGEgc3RydWN0dXJlZCBkYXRhIGpzb24tbGQgYmxvY2sgd2l0aCB0aGUgY29weXJpZ2h0XG4gICAqIGluZm9ybWF0aW9uLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBjb3B5cmlnaHQ6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBDb3B5cmlnaHQgaG9sZGVyIGNhbiBlaXRoZXIgYmUgYW4gT3JnYW5pemF0aW9uIG9yIGEgUGVyc29uXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdjb3B5cmlnaHQtaG9sZGVyJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgY29weXJpZ2h0SG9sZGVyOiAnT3JnYW5pemF0aW9uJyB8ICdQZXJzb24nID0gJ09yZ2FuaXphdGlvbic7XG5cbiAgLyoqXG4gICAqIFNldCB0aGlzIHRvIHRydWUsIGlmIHlvdSB3YW50IHRvIHBhc3MgYSBjdXN0b20gZm9jYWwgcG9pbnRcbiAgICogZm9yIHRoZSBpbWFnZS4gU2VlIGZ1bGwgZG9jdW1lbnRhdGlvbiBoZXJlOlxuICAgKiBodHRwczovL2RvY3MuaW1naXguY29tL2FwaXMvcmVuZGVyaW5nL2ZvY2FscG9pbnQtY3JvcFxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2N1c3RvbS1mb2NhbC1wb2ludCcsIHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIGN1c3RvbUZvY2FsUG9pbnQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogSWYgdGhlIGxhenkgcHJvcGVydHkgaXMgc2V0IHRvIHRydWUsIHRoZSBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5XG4gICAqIGNoYW5nZSB0aGUgZGVjb2RpbmcgdG8gYXN5bmMsIG90aGVyd2lzZSB0aGUgZGVjb2RpbmcgaXMgc2V0IHRvIGF1dG9cbiAgICogd2hpY2ggbGVhdmVzIHRoZSBoYW5kbGluZyB1cCB0byB0aGUgYnJvd3Nlci4gUmVhZCBtb3JlIGFib3V0IHRoZVxuICAgKiBkZWNvZGluZyBhdHRyaWJ1dGUgaGVyZTpcbiAgICogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL0hUTUxJbWFnZUVsZW1lbnQvZGVjb2RpbmdcbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBkZWNvZGluZzogJ3N5bmMnIHwgJ2FzeW5jJyB8ICdhdXRvJyA9ICdhdXRvJztcblxuICAvKipcbiAgICogU2V0IHRoaXMgdG8gdHJ1ZSwgdG8gcmVjZWl2ZSB2aXN1YWwgZ3VpZGFuY2Ugd2hlcmUgdGhlIGN1c3RvbSBmb2NhbFxuICAgKiBwb2ludCBpcyBjdXJyZW50bHkgc2V0LlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LWRlYnVnJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgZm9jYWxQb2ludERlYnVnOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIFBhc3MgaW4gYSBmbG9hdGluZyBudW1iZXIgYmV0d2VlbiAwIChsZWZ0KSBhbmQgMSAocmlnaHQpLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2ZvY2FsLXBvaW50LXgnLCB0eXBlOiBOdW1iZXIgfSlcbiAgcHVibGljIGFjY2Vzc29yIGZvY2FsUG9pbnRYOiBudW1iZXIgPSAxO1xuXG4gIC8qKlxuICAgKiBQYXNzIGluIGEgZmxvYXRpbmcgbnVtYmVyIGJldHdlZW4gMCAodG9wKSBhbmQgMSAoYm90dG9tKS5cbiAgICovXG4gIEBmb3JjZVR5cGUoKVxuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdmb2NhbC1wb2ludC15JywgdHlwZTogTnVtYmVyIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBmb2NhbFBvaW50WTogbnVtYmVyID0gMTtcblxuICAvKipcbiAgICogUmlnaHQgbm93IHRoZSBtb2R1bGUgaXMgaGVhdmlseSBjb3VwbGVkIHdpdGggdGhlIGltYWdlIGRlbGl2ZXJ5XG4gICAqIHNlcnZpY2UgaW1naXggYW5kIGRlcGVuZHMgb24gdGhlIG9yaWdpbmFsIGZpbGVzIGJlaW5nIHN0b3JlZFxuICAgKiBpbnNpZGUgQUVNLiBZb3UgY2FuIHBhc3MgaW4gYW55IGh0dHBzOi8vY2RuLmltZy5zYmIuY2ggaW1nXG4gICAqIHNyYyBhZGRyZXNzIHlvdSBmaW5kIG9uIHNiYi5jaCB0byBwbGF5IGFyb3VuZCB3aXRoIGl0LiBKdXN0XG4gICAqIHN0cmlwIHRoZSB1cmwgcGFyYW1ldGVycyBhbmQgcGFzdGUgaW4gdGhlIHBsYWluIGZpbGUgYWRkcmVzcy5cbiAgICogSWYgeW91IHdhbnQgdG8ga25vdyBob3cgdG8gYmVzdCB3b3JrIHdpdGggdGhpcyBtb2R1bGUgd2l0aFxuICAgKiBpbWFnZXMgY29taW5nIGZyb20gYSBkaWZmZXJlbnQgc291cmNlLCBwbGVhc2UgY29udGFjdCB0aGVcbiAgICogTFlORSBDb3JlIFRlYW0uXG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnaW1hZ2Utc3JjJyB9KVxuICBwdWJsaWMgYWNjZXNzb3IgaW1hZ2VTcmM6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1wb3J0YW5jZSBhdHRyaWJ1dGUgaXMgZmFpcmx5IG5ldyBhdHRyaWJ1dGUgd2hpY2ggc2hvdWxkXG4gICAqIGhlbHAgdGhlIGJyb3dzZXIgZGVjaWRlIHdoaWNoIHJlc291cmNlcyBpdCBzaG91bGQgcHJpb3JpdGlzZVxuICAgKiBkdXJpbmcgcGFnZSBsb2FkLiBXZSB3aWxsIHNldCB0aGUgYXR0cmlidXRlIHZhbHVlIGJhc2VkIG9uIHRoZVxuICAgKiB2YWx1ZSwgd2UgcmVjZWl2ZSBpbiB0aGUgbG9hZGluZyBhdHRyaWJ1dGUuICdlYWdlcicsIHdoaWNoIHdlIHVzZVxuICAgKiBmb3IgdGhlIGxhcmdlc3QgaW1hZ2Ugd2l0aGluIHRoZSBpbml0aWFsIHZpZXdwb3J0LCB3aWxsIHNldCB0aGVcbiAgICogYXR0cmlidXRlIHZhbHVlIHRvICdoaWdoJy4gJ2xhenknLCB3aGljaCB3ZSB1c2UgZm9yIGltYWdlcyBiZWxvd1xuICAgKiB0aGUgZm9sZCwgd2lsbCBzZXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSB0byAnbG93Jy5cbiAgICovXG4gIEBwcm9wZXJ0eSgpIHB1YmxpYyBhY2Nlc3NvciBpbXBvcnRhbmNlOiAnYXV0bycgfCAnaGlnaCcgfCAnbG93JyA9ICdoaWdoJztcblxuICAvKipcbiAgICogV2l0aCB0aGUgc3VwcG9ydCBvZiBuYXRpdmUgaW1hZ2UgbGF6eSBsb2FkaW5nLCB3ZSBjYW4gbm93XG4gICAqIGRlY2lkZSB3aGV0aGVyIHdlIHdhbnQgdG8gbG9hZCB0aGUgaW1hZ2UgaW1tZWRpYXRlbHkgb3Igb25seVxuICAgKiBvbmNlIGl0IGlzIGNsb3NlIHRvIHRoZSB2aXNpYmxlIHZpZXdwb3J0LiBUaGUgdmFsdWUgZWFnZXIgaXNcbiAgICogYmVzdCB1c2VkIGZvciBpbWFnZXMgd2l0aGluIHRoZSBpbml0aWFsIHZpZXdwb3J0LiBXZSB3YW50IHRvXG4gICAqIGxvYWQgdGhlc2UgaW1hZ2VzIGFzIGZhc3QgYXMgcG9zc2libGUgdG8gaW1wcm92ZSB0aGUgQ29yZSBXZWJcbiAgICogVml0YWxzIHZhbHVlcy4gbGF6eSBvbiB0aGUgb3RoZXIgaGFuZCB3b3JrcyBiZXN0IGZvciBpbWFnZXNcbiAgICogd2hpY2ggYXJlIGZ1cnRoZXIgZG93biB0aGUgcGFnZSBvciBpbnZpc2libGUgZHVyaW5nIHRoZSBsb2FkaW5nXG4gICAqIG9mIHRoZSBpbml0aWFsIHZpZXdwb3J0LlxuICAgKi9cbiAgQHByb3BlcnR5KCkgcHVibGljIGFjY2Vzc29yIGxvYWRpbmc6ICdlYWdlcicgfCAnbGF6eScgPSAnZWFnZXInO1xuXG4gIC8qKlxuICAgKiBXaXRoIHBlcmZvcm1hbmNlLm1hcmsgeW91IGNhbiBsb2cgYSB0aW1lc3RhbXAgYXNzb2NpYXRlZCB3aXRoXG4gICAqIHRoZSBuYW1lIHlvdSBkZWZpbmUgaW4gcGVyZm9ybWFuY2VNYXJrIHdoZW4gYSBjZXJ0YWluIGV2ZW50IGlzXG4gICAqIGhhcHBlbmluZy4gSW4gb3VyIGNhc2Ugd2Ugd2lsbCBsb2cgdGhlIHBlcmZvcm1hbmNlLm1hcmsgaW50b1xuICAgKiB0aGUgUGVyZm9ybWFuY2VFbnRyeSBBUEkgb25jZSB0aGUgaW1hZ2UgaXMgZnVsbHkgbG9hZGVkLlxuICAgKiBQZXJmb3JtYW5jZSBtb25pdG9yaW5nIHRvb2xzIGxpa2UgU3BlZWRDdXJ2ZSBvciBMaWdodGhvdXNlIGFyZVxuICAgKiB0aGVuIGFibGUgdG8gZ3JhYiB0aGVzZSBlbnRyaWVzIGZyb20gdGhlIFBlcmZvcm1hbmNlRW50cnkgQVBJXG4gICAqIGFuZCBnaXZlIHVzIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gYW5kIGluc2lnaHRzIGFib3V0IG91ciBwYWdlXG4gICAqIGxvYWRpbmcgYmVoYXZpb3VyLiBXZSBhcmUgdGhlbiBhbHNvIGFibGUgdG8gbW9uaXRvciB0aGVzZVxuICAgKiB2YWx1ZXMgb3ZlciBhIGxvbmcgcGVyaW9kIHRvIHNlZSBpZiBvdXIgcGVyZm9ybWFuY2VcbiAgICogaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyBvdmVyIHRpbWUuIEJlc3QgdG8gdXNlIGxvd2VyY2FzZSBzdHJpbmdzXG4gICAqIGhlcmUsIHNlcGFyYXRlIHdvcmRzIHdpdGggdW5kZXJzY29yZXMgb3IgZGFzaGVzLlxuICAgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ3BlcmZvcm1hbmNlLW1hcmsnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwZXJmb3JtYW5jZU1hcms6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBXaXRoIHRoZSBwaWN0dXJlU2l6ZXNDb25maWcgb2JqZWN0LCB5b3UgY2FuIHBhc3MgaW4gaW5mb3JtYXRpb25cbiAgICogaW50byBpbWFnZSBhYm91dCB3aGF0IGtpbmQgb2Ygc291cmNlIGVsZW1lbnRzIHNob3VsZCBnZXRcbiAgICogcmVuZGVyZWQuIG1lZGlhUXVlcmllcyBhY2NlcHRzIG11bHRpcGxlIE1lZGlhIFF1ZXJ5IGVudHJpZXNcbiAgICogd2hpY2ggY2FuIGdldCBjb21iaW5lZCBieSBkZWZpbmluZyBhIGNvbmRpdGlvbk9wZXJhdG9yLlxuICAgKiBUeXBlIGlzOiBzdHJpbmdpZmllZCBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZy1PYmplY3RcbiAgICogQW4gZXhhbXBsZSBjb3VsZCBsb29rIGxpa2UgdGhpczpcbiAgICoge1xuICAgKiAgICBcImJyZWFrcG9pbnRzXCI6IFtcbiAgICogICAgICB7XG4gICAqICAgICAgICBcImltYWdlXCI6IHtcbiAgICogICAgICAgICAgXCJoZWlnaHRcIjogXCI2NzVcIixcbiAgICogICAgICAgICAgXCJ3aWR0aFwiOiBcIjEyMDBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbGFyZ2UtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiNTQ5XCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCI5NzZcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1pbi13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtc21hbGwtbWluXCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogZmFsc2VcbiAgICogICAgICAgICAgfVxuICAgKiAgICAgICAgXVxuICAgKiAgICAgIH0sXG4gICAqICAgICAge1xuICAgKiAgICAgICAgXCJpbWFnZVwiOiB7XG4gICAqICAgICAgICAgIFwiaGVpZ2h0XCI6IFwiMTgwXCIsXG4gICAqICAgICAgICAgIFwid2lkdGhcIjogXCIzMjBcIlxuICAgKiAgICAgICAgfSxcbiAgICogICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICogICAgICAgICAge1xuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1heC13aWR0aFwiLFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICogICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAqICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtbWljcm8tbWF4XCJcbiAgICogICAgICAgICAgICB9LFxuICAgKiAgICAgICAgICAgIFwiY29uZGl0aW9uT3BlcmF0b3JcIjogXCJhbmRcIlxuICAgKiAgICAgICAgICB9LFxuICAgKiAgICAgICAgICB7XG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwib3JpZW50YXRpb25cIixcbiAgICogICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAqICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiBmYWxzZSxcbiAgICogICAgICAgICAgICAgIFwidmFsdWVcIjogXCJsYW5kc2NhcGVcIlxuICAgKiAgICAgICAgICAgIH0sXG4gICAqICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgKiAgICAgICAgICB9XG4gICAqICAgICAgICBdXG4gICAqICAgICAgfVxuICAgKiAgICBdXG4gICAqICB9XG4gICAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAncGljdHVyZS1zaXplcy1jb25maWcnIH0pXG4gIHB1YmxpYyBhY2Nlc3NvciBwaWN0dXJlU2l6ZXNDb25maWc6IHN0cmluZyA9ICcnO1xuXG4gIC8qKlxuICAgKiBCb3JkZXIgcmFkaXVzIG9mIHRoZSBpbWFnZS4gQ2hvb3NlIGJldHdlZW4gYSBkZWZhdWx0IHJhZGl1cywgbm8gcmFkaXVzIGFuZCBhIGNvbXBsZXRlbHkgcm91bmQgaW1hZ2UuXG4gICAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdib3JkZXItcmFkaXVzJywgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3IgYm9yZGVyUmFkaXVzOlxuICAgIHwgJ2RlZmF1bHQnXG4gICAgfCAnbm9uZSdcbiAgICB8ICdyb3VuZCcgPSAnZGVmYXVsdCc7XG5cbiAgLyoqXG4gICAqIFNldCBhbiBhc3BlY3QgcmF0aW9cbiAgICogZGVmYXVsdCBpcyAnMTYtOScgKDE2LzkpXG4gICAqIG90aGVyIHZhbHVlczogJ2ZyZWUnLCAnMS0xJywgJzEtMicsICcyLTEnLCAnMi0zJywgJzMtMicsICczLTQnLCAnNC0zJywgJzQtNScsICc1LTQnLCAnOS0xNidcbiAgICovXG4gIEBwcm9wZXJ0eSh7IGF0dHJpYnV0ZTogJ2FzcGVjdC1yYXRpbycsIHJlZmxlY3Q6IHRydWUgfSlcbiAgcHVibGljIGFjY2Vzc29yIGFzcGVjdFJhdGlvOlxuICAgIHwgJ2ZyZWUnXG4gICAgfCAnMS0xJ1xuICAgIHwgJzEtMidcbiAgICB8ICcyLTEnXG4gICAgfCAnMi0zJ1xuICAgIHwgJzMtMidcbiAgICB8ICczLTQnXG4gICAgfCAnNC0zJ1xuICAgIHwgJzQtNSdcbiAgICB8ICc1LTQnXG4gICAgfCAnOS0xNidcbiAgICB8ICcxNi05JyA9ICcxNi05JztcblxuICAvKiogV2hldGhlciB0aGUgaW1hZ2UgaXMgZmluaXNoZWQgbG9hZGluZyBvciBmYWlsZWQgdG8gbG9hZC4gKi9cbiAgcHVibGljIGdldCBjb21wbGV0ZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPy48SFRNTEltYWdlRWxlbWVudD4oJy5zYmItaW1hZ2VfX2ltZycpPy5jb21wbGV0ZSA/PyBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIC8vIENoZWNrIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgaXMgbmVzdGVkIGluIGFuIGA8c2JiLXRlYXNlci1oZXJvPmAgZWxlbWVudCBvbiBpbiBhbiBgPHNiYi10ZWFzZXItcGFpZD5gIGVsZW1lbnQuXG4gICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoXG4gICAgICAnZGF0YS10ZWFzZXInLFxuICAgICAgISFob3N0Q29udGV4dCgnc2JiLXRlYXNlci1oZXJvJywgdGhpcykgfHwgISF0aGlzLmNsb3Nlc3QoJ3NiYi10ZWFzZXItcGFpZCcpLFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5fY2FwdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9saW5rc0luQ2FwdGlvbiA9IHRoaXMuX2NhcHRpb25FbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGw8SFRNTExpbmtFbGVtZW50PignYScpO1xuXG4gICAgaWYgKCF0aGlzLl9saW5rc0luQ2FwdGlvbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZEZvY3VzQWJpbGl0eVRvTGlua3NJbkNhcHRpb24oKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBhc3luYyBmaXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXM6IFByb3BlcnR5VmFsdWVzPHRoaXM+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgc3VwZXIuZmlyc3RVcGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gd2FpdCB1bnRpbCB0aGUgdXBkYXRlIGlzIGNvbXBsZXRlIHRvIGNoZWNrIHdoZXRoZXIgdGhlIGltYWdlIGhhcyBhbHJlYWR5IGJlZW4gY29tcGxldGVseSBsb2FkZWQuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTtcbiAgICBpZiAodGhpcy5jb21wbGV0ZSkge1xuICAgICAgdGhpcy50b2dnbGVBdHRyaWJ1dGUoJ2RhdGEtbG9hZGVkJywgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbG9nUGVyZm9ybWFuY2VNYXJrcygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5wZXJmb3JtYW5jZU1hcmspIHtcbiAgICAgIHBlcmZvcm1hbmNlLmNsZWFyTWFya3ModGhpcy5wZXJmb3JtYW5jZU1hcmspO1xuICAgICAgcGVyZm9ybWFuY2UubWFyayh0aGlzLnBlcmZvcm1hbmNlTWFyayk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfbWF0Y2hNZWRpYVF1ZXJ5RGVzaWduVG9rZW4oYnJlYWtwb2ludFNpemVOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IHZhbHVlID0gYnJlYWtwb2ludE1hcFticmVha3BvaW50U2l6ZU5hbWVdO1xuICAgIHJldHVybiB2YWx1ZSA/IGAke3ZhbHVlfXJlbWAgOiAnJztcbiAgfVxuXG4gIHByaXZhdGUgX2FkZEZvY3VzQWJpbGl0eVRvTGlua3NJbkNhcHRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fbGlua3NJbkNhcHRpb24/LmZvckVhY2goKGxpbmspID0+IHtcbiAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCd0YWJpbmRleCcpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZUltYWdlVXJsKGJhc2VVcmw6IHN0cmluZyB8IHVuZGVmaW5lZCwgbHF1aXAgPSBmYWxzZSk6IHN0cmluZyB7XG4gICAgaWYgKCFiYXNlVXJsIHx8IGJhc2VVcmwgPT09ICcnKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRpbmcgYW4gVVJMIHdpdGhvdXQgYSBzY2hlbWEgd2lsbCBmYWlsLCBidXQgaXMgYSB2YWxpZCBpbnB1dCBmb3IgYmFzZVVybC5cbiAgICAvLyBlLmcuIGltYWdlLXNyYyBjYW4gYmUgaHR0cHM6Ly9leGFtcGxlLmNvbS9teS1pbWFnZS5wbmcgb3IgL215LWltYWdlLnBuZ1xuICAgIGNvbnN0IGlzRnVsbHlRdWFsaWZpZWRVcmwgPSAhIWJhc2VVcmwubWF0Y2goL15cXHcrOlxcL1xcLy8pO1xuICAgIGNvbnN0IGltYWdlVXJsT2JqID0gaXNGdWxseVF1YWxpZmllZFVybCA/IG5ldyBVUkwoYmFzZVVybCkgOiBuZXcgVVJMKGBodHRwOi8vbm9vcC8ke2Jhc2VVcmx9YCk7XG5cbiAgICBpZiAobHF1aXApIHtcbiAgICAgIC8vIGJsdXIgYW5kIHNpemU6ID9ibHVyPTEwMCZ3PTEwMCZoPTU2XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdibHVyJywgJzEwMCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgndycsICcxMDAnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2gnLCAnNTYnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ0ROIEluZm9ybWF0aW9uOiBodHRwczovL2RvY3MuaW1naXguY29tL2FwaXMvcmVuZGVyaW5nXG4gICAgICAvLyBwYXJhbS5hdXRvOiA/YXV0bz1mb3JtYXQsY29tcHJlc3MsY3M9dGlueXNyZ2JcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2F1dG8nLCAnZm9ybWF0LGNvbXByZXNzLGNzPXRpbnlzcmdiJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY3VzdG9tRm9jYWxQb2ludCkge1xuICAgICAgLy8gY3JvcDogYCZmaXQ9Y3JvcCZjcm9wPWZvY2FscG9pbnQmZnAteD0ke3RoaXMuZm9jYWxQb2ludFh9JmZwLXk9JHt0aGlzLmZvY2FsUG9pbnRZfSZmcC16PTFgLFxuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZml0JywgJ2Nyb3AnKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2Nyb3AnLCAnZm9jYWxwb2ludCcpO1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAteCcsIHRoaXMuZm9jYWxQb2ludFgudG9TdHJpbmcoMTApKTtcbiAgICAgIGltYWdlVXJsT2JqLnNlYXJjaFBhcmFtcy5hcHBlbmQoJ2ZwLXknLCB0aGlzLmZvY2FsUG9pbnRZLnRvU3RyaW5nKDEwKSk7XG4gICAgICBpbWFnZVVybE9iai5zZWFyY2hQYXJhbXMuYXBwZW5kKCdmcC16JywgJzEnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5mb2NhbFBvaW50RGVidWcpIHtcbiAgICAgIC8vIGZvY2FsUG9pbnREZWJ1ZzogJyZmcC1kZWJ1Zz10cnVlJ1xuICAgICAgaW1hZ2VVcmxPYmouc2VhcmNoUGFyYW1zLmFwcGVuZCgnZnAtZGVidWcnLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugb2YgXCJub29wXCIgaG9zdCwgd2UgZG9uJ3QgcmV0dXJuIHRoZSBob3N0IGFuZCBtdXN0IHJlbW92ZSB0aGVcbiAgICAvLyBzdGFydGluZyBgL2Agb2YgdGhlIHBhdGhuYW1lLlxuICAgIHJldHVybiBpc0Z1bGx5UXVhbGlmaWVkVXJsXG4gICAgICA/IGltYWdlVXJsT2JqLmhyZWZcbiAgICAgIDogaW1hZ2VVcmxPYmoucGF0aG5hbWUuc3Vic3RyaW5nKDEpICsgaW1hZ2VVcmxPYmouc2VhcmNoO1xuICB9XG5cbiAgcHJpdmF0ZSBfcHJlcGFyZVBpY3R1cmVTaXplQ29uZmlncygpOiBJbnRlcmZhY2VJbWFnZUF0dHJpYnV0ZXNTaXplc0NvbmZpZ0JyZWFrcG9pbnRbXSB7XG4gICAgbGV0IHBpY3R1cmVTaXplc0NvbmZpZztcblxuICAgIGlmICh0aGlzLnBpY3R1cmVTaXplc0NvbmZpZykge1xuICAgICAgcGljdHVyZVNpemVzQ29uZmlnID0gdGhpcy5waWN0dXJlU2l6ZXNDb25maWc7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGRlZmF1bHQgY29uZmlnXG4gICAgICBwaWN0dXJlU2l6ZXNDb25maWcgPSBge1xuICAgICAgICBcImJyZWFrcG9pbnRzXCI6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogNjc1LFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDEyMDBcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBcIm1lZGlhUXVlcmllc1wiOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVcIjogXCJtaW4td2lkdGhcIixcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbkZlYXR1cmVWYWx1ZVwiOiB7XG4gICAgICAgICAgICAgICAgICBcImx5bmVEZXNpZ25Ub2tlblwiOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgXCJ2YWx1ZVwiOiBcInNiYi1icmVha3BvaW50LWxhcmdlLW1pblwiXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBcImNvbmRpdGlvbk9wZXJhdG9yXCI6IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFwiaW1hZ2VcIjoge1xuICAgICAgICAgICAgICBcImhlaWdodFwiOiA1NDksXG4gICAgICAgICAgICAgIFwid2lkdGhcIjogOTc2XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgXCJtZWRpYVF1ZXJpZXNcIjogW1xuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlXCI6IFwibWluLXdpZHRoXCIsXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25GZWF0dXJlVmFsdWVcIjoge1xuICAgICAgICAgICAgICAgICAgXCJseW5lRGVzaWduVG9rZW5cIjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgIFwidmFsdWVcIjogXCJzYmItYnJlYWtwb2ludC1taWNyby1taW5cIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBcImltYWdlXCI6IHtcbiAgICAgICAgICAgICAgXCJoZWlnaHRcIjogMTgwLFxuICAgICAgICAgICAgICBcIndpZHRoXCI6IDMyMFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFwibWVkaWFRdWVyaWVzXCI6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVwiOiBcIm1heC13aWR0aFwiLFxuICAgICAgICAgICAgICAgIFwiY29uZGl0aW9uRmVhdHVyZVZhbHVlXCI6IHtcbiAgICAgICAgICAgICAgICAgIFwibHluZURlc2lnblRva2VuXCI6IHRydWUsXG4gICAgICAgICAgICAgICAgICBcInZhbHVlXCI6IFwic2JiLWJyZWFrcG9pbnQtemVyby1tYXhcIlxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXCJjb25kaXRpb25PcGVyYXRvclwiOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfVxuICAgICAgICBdXG4gICAgICB9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gaW1hZ2VIZWxwZXJHZXRCcmVha3BvaW50cyhwaWN0dXJlU2l6ZXNDb25maWcpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlTWVkaWFRdWVyeVN0cmluZyhcbiAgICBtZWRpYVF1ZXJpZXM6IEludGVyZmFjZUltYWdlQXR0cmlidXRlc1NpemVzQ29uZmlnTWVkaWFRdWVyeVtdLFxuICApOiBzdHJpbmcge1xuICAgIGxldCBtZWRpYVF1ZXJ5ID0gJyc7XG5cbiAgICBtZWRpYVF1ZXJpZXMuZm9yRWFjaCgobXEpID0+IHtcbiAgICAgIGNvbnN0IG1xQ29uZGl0aW9uID0gbXEuY29uZGl0aW9uRmVhdHVyZTtcbiAgICAgIGxldCBtcVZhbHVlO1xuXG4gICAgICBpZiAobXEuY29uZGl0aW9uRmVhdHVyZVZhbHVlLmx5bmVEZXNpZ25Ub2tlbikge1xuICAgICAgICBtcVZhbHVlID0gdGhpcy5fbWF0Y2hNZWRpYVF1ZXJ5RGVzaWduVG9rZW4obXEuY29uZGl0aW9uRmVhdHVyZVZhbHVlLnZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG1xVmFsdWUgPSBtcS5jb25kaXRpb25GZWF0dXJlVmFsdWUudmFsdWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG1xQ29tYmluZXIgPSBtcS5jb25kaXRpb25PcGVyYXRvciA/IGAgJHttcS5jb25kaXRpb25PcGVyYXRvcn0gYCA6ICcnO1xuXG4gICAgICBtZWRpYVF1ZXJ5ICs9IGAoJHttcUNvbmRpdGlvbn06ICR7bXFWYWx1ZX0pJHttcUNvbWJpbmVyfWA7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWVkaWFRdWVyeTtcbiAgfVxuXG4gIEBldmVudE9wdGlvbnMoZXZlbnRMaXN0ZW5lck9wdGlvbnMpXG4gIHByaXZhdGUgX2ltYWdlTG9hZGVkKCk6IHZvaWQge1xuICAgIHRoaXMuX2xvZ1BlcmZvcm1hbmNlTWFya3MoKTtcbiAgICB0aGlzLnRvZ2dsZUF0dHJpYnV0ZSgnZGF0YS1sb2FkZWQnLCB0cnVlKTtcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2FkJykpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHJlbmRlcigpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgbGV0IHsgY2FwdGlvbiB9ID0gdGhpcztcbiAgICBsZXQgc2NoZW1hRGF0YSA9ICcnO1xuXG4gICAgY29uc3QgaW1hZ2VVcmxMUUlQID0gdGhpcy5fcHJlcGFyZUltYWdlVXJsKHRoaXMuaW1hZ2VTcmMsIHRydWUpO1xuICAgIGNvbnN0IGltYWdlVXJsV2l0aFBhcmFtcyA9IHRoaXMuX3ByZXBhcmVJbWFnZVVybCh0aGlzLmltYWdlU3JjLCBmYWxzZSk7XG5cbiAgICBpZiAodGhpcy5sb2FkaW5nID09PSAnbGF6eScpIHtcbiAgICAgIHRoaXMuZGVjb2RpbmcgPSAnYXN5bmMnO1xuICAgICAgdGhpcy5pbXBvcnRhbmNlID0gJ2xvdyc7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY29weXJpZ2h0KSB7XG4gICAgICBjYXB0aW9uID0gYCR7dGhpcy5jYXB0aW9ufSDCqSR7dGhpcy5jb3B5cmlnaHR9YDtcbiAgICAgIHNjaGVtYURhdGEgPSBge1xuICAgICAgICBcIkBjb250ZXh0XCI6IFwiaHR0cHM6Ly9zY2hlbWEub3JnXCIsXG4gICAgICAgIFwiQHR5cGVcIjogXCJQaG90b2dyYXBoXCIsXG4gICAgICAgIFwiaW1hZ2VcIjogXCIke3RoaXMuaW1hZ2VTcmN9XCIsXG4gICAgICAgIFwiY29weXJpZ2h0SG9sZGVyXCI6IHtcbiAgICAgICAgICBcIkB0eXBlXCI6IFwiJHt0aGlzLmNvcHlyaWdodEhvbGRlcn1cIixcbiAgICAgICAgICBcIm5hbWVcIjogXCIke3RoaXMuY29weXJpZ2h0fVwiXG4gICAgICAgIH1cbiAgICAgIH1gO1xuICAgIH1cblxuICAgIGNvbnN0IHBpY3R1cmVTaXplQ29uZmlncyA9IHRoaXMuX3ByZXBhcmVQaWN0dXJlU2l6ZUNvbmZpZ3MoKTtcblxuICAgIC8qKlxuICAgICAqIFRoZSBhbHQgYXR0cmlidXRlIHNob3VsZCBhbHdheXMgYmUgcHJlc2VudCBmb3IgdGhlIGltZyBlbGVtZW50LlxuICAgICAqIElmIGl0IGhhcyBhbiBlbXB0eSBzdHJpbmcgYXMgaXRzIHZhbHVlLCBpdCBpcyBzaW1wbHkgaWdub3JlZFxuICAgICAqIGJ5IGFzc2lzdGl2ZSB0ZWNobm9sb2dpZXMuIElmIHdlIGxlYXZlIGl0IG91dCBjb21wbGV0ZWx5LFxuICAgICAqIHRoZXkgbWlnaHQgdHJ5IHRvIGludGVycHJldCB0aGUgaW1nIGVsZW1lbnQuXG4gICAgICovXG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8ZmlndXJlIGNsYXNzPVwic2JiLWltYWdlX19maWd1cmVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1pbWFnZV9fd3JhcHBlclwiPlxuICAgICAgICAgICR7IXRoaXMuc2tpcExxaXBcbiAgICAgICAgICAgID8gaHRtbGA8aW1nXG4gICAgICAgICAgICAgICAgYWx0PVwiXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9fYmx1cnJlZFwiXG4gICAgICAgICAgICAgICAgc3JjPSR7aW1hZ2VVcmxMUUlQfVxuICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwMFwiXG4gICAgICAgICAgICAgICAgaGVpZ2h0PVwiNTYyXCJcbiAgICAgICAgICAgICAgICBsb2FkaW5nPSR7dGhpcy5sb2FkaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgZGVjb2Rpbmc9JHt0aGlzLmRlY29kaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgIC8+YFxuICAgICAgICAgICAgOiBub3RoaW5nfVxuXG4gICAgICAgICAgPHBpY3R1cmU+XG4gICAgICAgICAgICA8IS0tIHJlbmRlciBwaWN0dXJlIGVsZW1lbnQgc291cmNlcyAtLT5cbiAgICAgICAgICAgICR7cGljdHVyZVNpemVDb25maWdzLm1hcCgoY29uZmlnKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGltYWdlSGVpZ2h0ID0gY29uZmlnLmltYWdlLmhlaWdodDtcbiAgICAgICAgICAgICAgY29uc3QgaW1hZ2VXaWR0aCA9IGNvbmZpZy5pbWFnZS53aWR0aDtcbiAgICAgICAgICAgICAgY29uc3QgbWVkaWFRdWVyeSA9IHRoaXMuX2NyZWF0ZU1lZGlhUXVlcnlTdHJpbmcoY29uZmlnLm1lZGlhUXVlcmllcyk7XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgaHRtbGAgPHNvdXJjZVxuICAgICAgICAgICAgICAgICAgbWVkaWE9JHtgJHttZWRpYVF1ZXJ5fWB9XG4gICAgICAgICAgICAgICAgICBzaXplcz0ke2Ake2ltYWdlV2lkdGh9cHhgfVxuICAgICAgICAgICAgICAgICAgc3Jjc2V0PSR7XG4gICAgICAgICAgICAgICAgICAgIGAke2ltYWdlVXJsV2l0aFBhcmFtc30mdz0ke2ltYWdlV2lkdGh9Jmg9JHtpbWFnZUhlaWdodH0mcT0ke3RoaXMuX2NvbmZpZy5ub25SZXRpbmFRdWFsaXR5fSAke2ltYWdlV2lkdGh9dywgYCArXG4gICAgICAgICAgICAgICAgICAgIGAke2ltYWdlVXJsV2l0aFBhcmFtc30mdz0ke2ltYWdlV2lkdGggKiAyfSZoPSR7aW1hZ2VIZWlnaHQgKiAyfSZxPSR7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY29uZmlnLnJldGluYVF1YWxpdHlcbiAgICAgICAgICAgICAgICAgICAgfSAke2ltYWdlV2lkdGggKiAyfXdgXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPjwvc291cmNlPmAsXG4gICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9KX1cbiAgICAgICAgICAgIDxpbWdcbiAgICAgICAgICAgICAgYWx0PSR7dGhpcy5hbHQgfHwgJyd9XG4gICAgICAgICAgICAgIEBsb2FkPSR7dGhpcy5faW1hZ2VMb2FkZWR9XG4gICAgICAgICAgICAgIEBlcnJvcj0keygpID0+IHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ2Vycm9yJykpfVxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9faW1nXCJcbiAgICAgICAgICAgICAgc3JjPSR7dGhpcy5pbWFnZVNyYyF9XG4gICAgICAgICAgICAgIHdpZHRoPVwiMTAwMFwiXG4gICAgICAgICAgICAgIGhlaWdodD1cIjU2MlwiXG4gICAgICAgICAgICAgIGxvYWRpbmc9JHt0aGlzLmxvYWRpbmcgPz8gbm90aGluZ31cbiAgICAgICAgICAgICAgZGVjb2Rpbmc9JHt0aGlzLmRlY29kaW5nID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAgIC5mZXRjaFByaW9yaXR5PSR7dGhpcy5pbXBvcnRhbmNlID8/IG5vdGhpbmd9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvcGljdHVyZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7Y2FwdGlvblxuICAgICAgICAgID8gaHRtbGA8ZmlnY2FwdGlvblxuICAgICAgICAgICAgICBjbGFzcz1cInNiYi1pbWFnZV9fY2FwdGlvblwiXG4gICAgICAgICAgICAgIC5pbm5lckhUTUw9JHtjYXB0aW9ufVxuICAgICAgICAgICAgICAke3JlZigoZWwpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jYXB0aW9uRWxlbWVudCA9IGVsIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgID48L2ZpZ2NhcHRpb24+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgJHtzY2hlbWFEYXRhXG4gICAgICAgICAgPyBodG1sYDxzY3JpcHQgdHlwZT1cImFwcGxpY2F0aW9uL2xkK2pzb25cIiAuaW5uZXJIVE1MPSR7c2NoZW1hRGF0YX0+PC9zY3JpcHQ+YFxuICAgICAgICAgIDogbm90aGluZ31cbiAgICAgIDwvZmlndXJlPlxuICAgIGA7XG4gIH1cbn1cblxuZGVjbGFyZSBnbG9iYWwge1xuICBpbnRlcmZhY2UgSFRNTEVsZW1lbnRUYWdOYW1lTWFwIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgJ3NiYi1pbWFnZSc6IFNiYkltYWdlRWxlbWVudDtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIl9hIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0FBc0JPLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sdUJBQXVCO0FBQzdCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0sd0JBQXdCO0FBQzlCLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0seUJBQXlCO0FBQy9C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
|