@sbb-esta/lyne-elements-dev 5.0.0-next-dev.1776353458 → 5.0.0-next-dev.1776358174
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/custom-elements.json +956 -956
- package/development/accordion/accordion.component.d.ts.map +1 -1
- package/development/accordion.component-DGUoG6p2.js +1 -1
- package/development/action-group/action-group.component.d.ts.map +1 -1
- package/development/action-group.component-CJT4RArG.js +1 -1
- package/development/alert/alert/alert.component.d.ts +1 -1
- package/development/alert/alert/alert.component.d.ts.map +1 -1
- package/development/alert/alert-group/alert-group.component.d.ts.map +1 -1
- package/development/alert-group.component-DeI6kuwn.js +1 -1
- package/development/alert.component-Cn36k_Hf.js +1 -1
- package/development/autocomplete/autocomplete-base-element.d.ts.map +1 -1
- package/development/autocomplete-base-element-DnpaK_k3.js +1 -1
- package/development/block-link-common-CwurjMj1.js +1 -1
- package/development/breadcrumb/breadcrumb/breadcrumb.component.d.ts.map +1 -1
- package/development/breadcrumb/breadcrumb-group/breadcrumb-group.component.d.ts.map +1 -1
- package/development/breadcrumb-group.component-DP9X9qV1.js +1 -1
- package/development/breadcrumb.component-BLxRIaje.js +1 -1
- package/development/button/accent-button/accent-button.component.d.ts.map +1 -1
- package/development/button/accent-button/accent-button.component.js +1 -1
- package/development/button/accent-button-link/accent-button-link.component.d.ts.map +1 -1
- package/development/button/accent-button-link/accent-button-link.component.js +1 -1
- package/development/button/accent-button-static/accent-button-static.component.d.ts.map +1 -1
- package/development/button/accent-button-static/accent-button-static.component.js +1 -1
- package/development/button/button/button.component.d.ts.map +1 -1
- package/development/button/button/button.component.js +1 -1
- package/development/button/button-link/button-link.component.d.ts.map +1 -1
- package/development/button/button-link/button-link.component.js +1 -1
- package/development/button/button-static/button-static.component.d.ts.map +1 -1
- package/development/button/button-static/button-static.component.js +1 -1
- package/development/button/common/button-common.d.ts +1 -1
- package/development/button/common/button-common.d.ts.map +1 -1
- package/development/button/mini-button/mini-button.component.d.ts.map +1 -1
- package/development/button/mini-button/mini-button.component.js +1 -1
- package/development/button/mini-button-group/mini-button-group.component.d.ts.map +1 -1
- package/development/button/mini-button-link/mini-button-link.component.d.ts.map +1 -1
- package/development/button/secondary-button/secondary-button.component.d.ts.map +1 -1
- package/development/button/secondary-button/secondary-button.component.js +1 -1
- package/development/button/secondary-button-link/secondary-button-link.component.d.ts.map +1 -1
- package/development/button/secondary-button-link/secondary-button-link.component.js +1 -1
- package/development/button/secondary-button-static/secondary-button-static.component.d.ts.map +1 -1
- package/development/button/secondary-button-static/secondary-button-static.component.js +1 -1
- package/development/button/transparent-button/transparent-button.component.d.ts.map +1 -1
- package/development/button/transparent-button/transparent-button.component.js +1 -1
- package/development/button/transparent-button-link/transparent-button-link.component.d.ts.map +1 -1
- package/development/button/transparent-button-link/transparent-button-link.component.js +1 -1
- package/development/button/transparent-button-static/transparent-button-static.component.d.ts.map +1 -1
- package/development/button/transparent-button-static/transparent-button-static.component.js +1 -1
- package/development/button-common-jaQVRdwS.js +1 -1
- package/development/calendar/calendar/calendar.component.d.ts.map +1 -1
- package/development/calendar/calendar-day/calendar-day.component.d.ts.map +1 -1
- package/development/calendar/calendar-month/calendar-month.component.d.ts.map +1 -1
- package/development/calendar/calendar-month/calendar-month.component.js +1 -1
- package/development/calendar/calendar-weekday/calendar-weekday.component.d.ts.map +1 -1
- package/development/calendar/calendar-weekday/calendar-weekday.component.js +1 -1
- package/development/calendar/calendar-weeknumber/calendar-weeknumber.component.d.ts.map +1 -1
- package/development/calendar/calendar-weeknumber/calendar-weeknumber.component.js +1 -1
- package/development/calendar/calendar-year/calendar-year.component.d.ts.map +1 -1
- package/development/calendar/calendar-year/calendar-year.component.js +1 -1
- package/development/calendar/common/calendar-cell-base-element.d.ts +1 -1
- package/development/calendar/common/calendar-cell-base-element.d.ts.map +1 -1
- package/development/calendar-cell-base-element-DDNYX7UQ.js +1 -1
- package/development/calendar-day.component-CnNml44_.js +1 -1
- package/development/calendar.component-CByyksy8.js +1 -1
- package/development/calendar.js +1 -1
- package/development/card/card/card.component.d.ts.map +1 -1
- package/development/card/card-badge/card-badge.component.d.ts.map +1 -1
- package/development/card/common/card-action-common.d.ts.map +1 -1
- package/development/card-action-common-HYrFMTkA.js +1 -1
- package/development/card-badge.component-Be4gXazr.js +1 -1
- package/development/card.component-B2cQYSCD.js +1 -1
- package/development/card.js +1 -1
- package/development/carousel/carousel/carousel.component.d.ts.map +1 -1
- package/development/carousel/carousel-item/carousel-item.component.d.ts.map +1 -1
- package/development/carousel/carousel-list/carousel-list.component.d.ts.map +1 -1
- package/development/carousel-item.component-MZIypyNR.js +1 -1
- package/development/carousel-list.component-z40-4ANn.js +1 -1
- package/development/carousel.component-BHYBvOm7.js +1 -1
- package/development/checkbox/checkbox.component.d.ts +1 -1
- package/development/checkbox/checkbox.component.d.ts.map +1 -1
- 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-DpE48IrV.js +1 -1
- package/development/checkbox-panel/checkbox-panel.component.d.ts.map +1 -1
- package/development/checkbox-panel/checkbox-panel.component.js +1 -1
- package/development/checkbox.component-DgrfkdyZ.js +1 -1
- package/development/chip/chip/chip.component.d.ts.map +1 -1
- package/development/chip/chip-group/chip-group.component.d.ts +1 -1
- package/development/chip/chip-group/chip-group.component.d.ts.map +1 -1
- package/development/chip-group.component-CxM8l839.js +1 -1
- package/development/chip-label/chip-label.component.d.ts.map +1 -1
- package/development/chip-label.component-C1CGL8zb.js +1 -1
- package/development/chip.component-zwTaIBf2.js +1 -1
- package/development/clock/clock.component.d.ts.map +1 -1
- package/development/clock.component-EqFTxYod.js +1 -1
- package/development/compact-paginator.component-DiMeNNTc.js +1 -1
- package/development/container/container/container.component.d.ts.map +1 -1
- package/development/container/sticky-bar/sticky-bar.component.d.ts.map +1 -1
- package/development/container.component-CM10qyHy.js +1 -1
- package/development/core/base-elements/button-base-element.d.ts +1 -1
- package/development/core/base-elements/button-base-element.d.ts.map +1 -1
- package/development/core/base-elements/button-base-element.js +1 -1
- package/development/core/base-elements/selection-group-base-element.d.ts.map +1 -1
- package/development/core/controllers/property-watcher-controller.d.ts +1 -1
- package/development/core/controllers/property-watcher-controller.d.ts.map +1 -1
- package/development/core/controllers/property-watcher-controller.js +1 -1
- package/development/core/decorators/omit-empty-converter.d.ts.map +1 -1
- package/development/core/decorators/omit-empty-converter.js +1 -1
- package/development/core/mixins/form-associated-checkbox-mixin.d.ts.map +1 -1
- package/development/core/mixins/form-associated-checkbox-mixin.js +1 -1
- package/development/core/mixins/panel-mixin.d.ts.map +1 -1
- package/development/core/screen-reader-only/screen-reader-only.component.d.ts.map +1 -1
- package/development/date-input/date-input.component.d.ts.map +1 -1
- package/development/date-input.component-osVJFOS-.js +1 -1
- package/development/datepicker/common/datepicker-button.d.ts +2 -2
- package/development/datepicker/common/datepicker-button.d.ts.map +1 -1
- package/development/datepicker/datepicker/datepicker.component.d.ts.map +1 -1
- package/development/datepicker/datepicker-next-day/datepicker-next-day.component.js +1 -1
- package/development/datepicker/datepicker-previous-day/datepicker-previous-day.component.js +1 -1
- package/development/datepicker/datepicker-toggle/datepicker-toggle.component.js +1 -1
- package/development/datepicker-button-BI5R118p.js +1 -1
- package/development/datepicker.component-AKlc7SAO.js +1 -1
- package/development/dialog/dialog/dialog.component.d.ts.map +1 -1
- package/development/dialog/dialog-actions/dialog-actions.component.d.ts.map +1 -1
- package/development/dialog/dialog-close-button/dialog-close-button.component.d.ts.map +1 -1
- package/development/dialog/dialog-content/dialog-content.component.d.ts.map +1 -1
- package/development/dialog/dialog-title/dialog-title.component.d.ts.map +1 -1
- package/development/dialog-actions.component-DErVa4WR.js +1 -1
- package/development/dialog-close-button.component-CxtWzXR4.js +1 -1
- package/development/dialog-content.component-B3VB2ptp.js +1 -1
- package/development/dialog-title.component-CNMzIUB2.js +1 -1
- package/development/dialog.component-BYVTZAUU.js +1 -1
- package/development/dialog.js +1 -1
- package/development/divider/divider.component.d.ts.map +1 -1
- package/development/divider.component-BvmLUhzD.js +1 -1
- package/development/error.component-C8JQQqSB.js +1 -1
- package/development/expansion-panel/expansion-panel/expansion-panel.component.d.ts.map +1 -1
- package/development/expansion-panel/expansion-panel-content/expansion-panel-content.component.d.ts.map +1 -1
- package/development/expansion-panel-content.component-B-SV6ier.js +1 -1
- package/development/expansion-panel-header.component-CWojFAB-.js +1 -1
- package/development/expansion-panel.component-q7cJOmUs.js +1 -1
- package/development/expansion-panel.js +1 -1
- package/development/file-selector/common/file-selector-common.d.ts +1 -1
- package/development/file-selector/common/file-selector-common.d.ts.map +1 -1
- package/development/file-selector/file-selector/file-selector.component.d.ts.map +1 -1
- package/development/file-selector/file-selector/file-selector.component.js +1 -1
- package/development/file-selector/file-selector-dropzone/file-selector-dropzone.component.d.ts.map +1 -1
- package/development/file-selector-common-DE_jT1fa.js +1 -1
- package/development/file-selector-dropzone.component-dyv_u-Ga.js +1 -1
- package/development/file-selector.js +1 -1
- package/development/flip-card/flip-card/flip-card.component.d.ts.map +1 -1
- package/development/flip-card/flip-card-details/flip-card-details.component.d.ts.map +1 -1
- package/development/flip-card/flip-card-summary/flip-card-summary.component.d.ts.map +1 -1
- package/development/flip-card-details.component-CKRovHqO.js +1 -1
- package/development/flip-card-summary.component-THvJF3Cl.js +1 -1
- package/development/flip-card.component-qnodzif2.js +1 -1
- package/development/flip-card.js +1 -1
- package/development/footer/footer.component.d.ts.map +1 -1
- package/development/footer.component-Dbc5xFqr.js +1 -1
- package/development/form-field/error/error.component.d.ts.map +1 -1
- package/development/form-field/form-field/form-field.component.d.ts.map +1 -1
- package/development/form-field/form-field-clear/form-field-clear.component.d.ts.map +1 -1
- package/development/form-field/form-field-clear/form-field-clear.component.js +1 -1
- package/development/form-field/form-field-text-counter/form-field-text-counter.component.d.ts.map +1 -1
- package/development/form-field/form-field-text-counter/form-field-text-counter.component.js +1 -1
- package/development/form-field/hint/hint.component.d.ts.map +1 -1
- package/development/form-field.component-DGOrnYkc.js +1 -1
- package/development/header/common/header-action-common.d.ts +1 -1
- package/development/header/common/header-action-common.d.ts.map +1 -1
- package/development/header/header/header.component.d.ts.map +1 -1
- package/development/header/header-environment/header-environment.component.d.ts.map +1 -1
- package/development/header-action-common-BEnsweEr.js +1 -1
- package/development/header-environment.component-D-SLP3CC.js +1 -1
- package/development/header.component-Hfgz9sSb.js +1 -1
- package/development/header.js +1 -1
- package/development/hint.component-hKw1TLvO.js +1 -1
- 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-name-mixin.js +1 -1
- package/development/icon-base-VYmbZT1-.js +1 -1
- package/development/icon-sidebar/icon-sidebar-button/icon-sidebar-button.component.d.ts.map +1 -1
- package/development/icon-sidebar/icon-sidebar-button/icon-sidebar-button.component.js +1 -1
- package/development/icon-sidebar/icon-sidebar-link/icon-sidebar-link.component.d.ts.map +1 -1
- package/development/icon-sidebar/icon-sidebar-link/icon-sidebar-link.component.js +1 -1
- package/development/icon-sidebar.js +1 -1
- package/development/image/image.component.d.ts.map +1 -1
- package/development/image.component-BuAPmhIt.js +1 -1
- package/development/inline-link-common-CONiCeR9.js +1 -1
- package/development/journey-header/journey-header.component.d.ts.map +1 -1
- package/development/journey-header.component-BKX1K6cf.js +1 -1
- package/development/lead-container/lead-container.component.d.ts.map +1 -1
- package/development/lead-container.component-B1eW6Xgb.js +1 -1
- package/development/link/block-link/block-link.component.d.ts.map +1 -1
- package/development/link/block-link/block-link.component.js +1 -1
- package/development/link/common/block-link-common.d.ts +1 -1
- package/development/link/common/block-link-common.d.ts.map +1 -1
- package/development/link/common/inline-link-common.d.ts +1 -1
- package/development/link/common/inline-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/link/link.component.d.ts.map +1 -1
- package/development/link/link/link.component.js +1 -1
- package/development/link-common-4Ag6Mio-.js +1 -1
- package/development/link-list/common/link-list-base.d.ts.map +1 -1
- package/development/link-list/link-list.component.d.ts.map +1 -1
- package/development/link-list-anchor/link-list-anchor.component.d.ts.map +1 -1
- package/development/link-list-anchor.component-Cotg5LDT.js +1 -1
- package/development/link-list-base-B7vidwUW.js +1 -1
- package/development/link-list.component-BFbrLjs0.js +1 -1
- package/development/loading-indicator/loading-indicator.component.d.ts.map +1 -1
- package/development/loading-indicator-circle/loading-indicator-circle.component.d.ts.map +1 -1
- package/development/loading-indicator-circle.component-nc-RH0jT.js +1 -1
- package/development/loading-indicator.component-DNCUlh6S.js +1 -1
- package/development/logo/logo.component.d.ts.map +1 -1
- package/development/logo.component-tFe_T36e.js +1 -1
- package/development/map-container/map-container.component.d.ts.map +1 -1
- package/development/map-container.component-mzZ_K_fR.js +1 -1
- package/development/menu/common/menu-action-common.d.ts +1 -1
- package/development/menu/common/menu-action-common.d.ts.map +1 -1
- package/development/menu/menu/menu.component.d.ts +1 -1
- package/development/menu/menu/menu.component.d.ts.map +1 -1
- package/development/menu/menu-link/menu-link.component.d.ts.map +1 -1
- package/development/menu/menu-link/menu-link.component.js +1 -1
- package/development/menu-action-common-Crx-dDgH.js +1 -1
- package/development/menu.component-DOv7PKIi.js +1 -1
- package/development/menu.js +1 -1
- package/development/message/message.component.d.ts.map +1 -1
- package/development/message.component-CrXtMprr.js +1 -1
- package/development/mini-button-group.component-DNFyLMg_.js +1 -1
- package/development/mini-button-link.component-DflgG59S.js +1 -1
- package/development/mini-calendar/mini-calendar/mini-calendar.component.d.ts +1 -1
- package/development/mini-calendar/mini-calendar/mini-calendar.component.d.ts.map +1 -1
- package/development/mini-calendar/mini-calendar-day/mini-calendar-day.component.d.ts.map +1 -1
- package/development/mini-calendar/mini-calendar-month/mini-calendar-month.component.d.ts.map +1 -1
- package/development/mini-calendar-day.component-Bmx2GYGZ.js +1 -1
- package/development/mini-calendar-month.component-CdIsxUAx.js +1 -1
- package/development/mini-calendar.component-Ddxgy4Tj.js +1 -1
- package/development/mini-calendar.js +1 -1
- 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/navigation/navigation.component.d.ts +1 -1
- package/development/navigation/navigation/navigation.component.d.ts.map +1 -1
- package/development/navigation/navigation-list/navigation-list.component.d.ts.map +1 -1
- package/development/navigation/navigation-marker/navigation-marker.component.d.ts.map +1 -1
- package/development/navigation/navigation-section/navigation-section.component.d.ts +1 -1
- package/development/navigation/navigation-section/navigation-section.component.d.ts.map +1 -1
- package/development/navigation-action-common-ZBiv0Xiw.js +1 -1
- package/development/navigation-list.component-DilKlDwx.js +1 -1
- package/development/navigation-marker.component-BsfPR_uk.js +1 -1
- package/development/navigation-section.component-C_9myQKr.js +1 -1
- package/development/navigation.component-C8MhqBLY.js +1 -1
- package/development/navigation.js +1 -1
- package/development/notification/notification.component.d.ts.map +1 -1
- package/development/notification.component-CKyNdgbx.js +1 -1
- package/development/optgroup-base-element-er7EBllh.js +1 -1
- package/development/option/optgroup/optgroup-base-element.d.ts.map +1 -1
- package/development/option/option/option-base-element.d.ts.map +1 -1
- package/development/option/option/option-base-element.js +1 -1
- package/development/option/option/option.component.d.ts +1 -1
- package/development/option/option/option.component.d.ts.map +1 -1
- package/development/option/option-hint/option-hint.component.d.ts.map +1 -1
- package/development/option-hint.component-DLp9rQrk.js +1 -1
- package/development/option.component-Dod6JgbH.js +1 -1
- 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-base-element.js +1 -1
- package/development/overlay/overlay.component.d.ts.map +1 -1
- package/development/overlay.component-BuCkqG6Q.js +1 -1
- package/development/paginator/common/paginator-common.d.ts +1 -1
- package/development/paginator/common/paginator-common.d.ts.map +1 -1
- package/development/paginator/common/paginator-common.js +1 -1
- package/development/paginator/compact-paginator/compact-paginator.component.d.ts.map +1 -1
- package/development/paginator/paginator/paginator.component.d.ts.map +1 -1
- package/development/paginator.component-Cqm7MuRD.js +1 -1
- package/development/panel-mixin-CKHxLmjh.js +1 -1
- package/development/popover/popover.component.d.ts +1 -1
- package/development/popover/popover.component.d.ts.map +1 -1
- package/development/popover.component-B15jFLe9.js +1 -1
- 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/radio-button.component.d.ts.map +1 -1
- package/development/radio-button-common-u7NYOI2p.js +1 -1
- package/development/radio-button-group/radio-button-group.component.d.ts.map +1 -1
- package/development/radio-button-group/radio-button-group.component.js +1 -1
- package/development/radio-button-panel/radio-button-panel.component.d.ts.map +1 -1
- package/development/radio-button-panel/radio-button-panel.component.js +1 -1
- package/development/radio-button.component-DAgH41z0.js +1 -1
- package/development/screen-reader-only.component-D60AmiFy.js +1 -1
- package/development/select/select.component.d.ts +1 -1
- package/development/select/select.component.d.ts.map +1 -1
- package/development/select.component-CqwBdtsN.js +1 -1
- package/development/selection-action-panel/selection-action-panel.component.d.ts.map +1 -1
- package/development/selection-action-panel.component-DvhL5Z_Q.js +1 -1
- package/development/selection-expansion-panel/selection-expansion-panel.component.d.ts.map +1 -1
- package/development/selection-expansion-panel.component-D_HF9lzq.js +1 -1
- package/development/selection-group-base-element-rKKX4OAJ.js +1 -1
- package/development/sidebar/sidebar/sidebar.component.d.ts.map +1 -1
- package/development/sidebar/sidebar-close-button/sidebar-close-button.component.d.ts.map +1 -1
- package/development/sidebar/sidebar-container/sidebar-container.component.d.ts.map +1 -1
- package/development/sidebar/sidebar-title/sidebar-title.component.d.ts.map +1 -1
- package/development/sidebar-close-button.component-DYE0tK-I.js +1 -1
- package/development/sidebar-container.component-CC9TtB6I.js +1 -1
- package/development/sidebar-title.component-DBb5MfIC.js +1 -1
- package/development/sidebar.component-CwuT6dno.js +1 -1
- package/development/sidebar.js +1 -1
- package/development/signet/signet.component.d.ts.map +1 -1
- package/development/signet.component-DO73qKor.js +1 -1
- package/development/skiplink-list/skiplink-list.component.d.ts.map +1 -1
- package/development/skiplink-list.component-DqYT2mmv.js +1 -1
- package/development/slider/slider.component.d.ts +1 -1
- package/development/slider/slider.component.d.ts.map +1 -1
- package/development/slider.component-ZBdkbZei.js +1 -1
- package/development/status/status.component.d.ts.map +1 -1
- package/development/status.component-p-egQ_U4.js +1 -1
- package/development/step-label.component-CxqPgbzK.js +1 -1
- package/development/step.component-B2qbHl0l.js +1 -1
- package/development/stepper/step/step.component.d.ts.map +1 -1
- package/development/stepper/step-label/step-label.component.d.ts.map +1 -1
- package/development/stepper/stepper/stepper.component.d.ts.map +1 -1
- package/development/stepper.component-BTwJttZt.js +1 -1
- package/development/sticky-bar.component-MMBSPa2B.js +1 -1
- package/development/tab-group.component-DX7BY7Xy.js +1 -1
- package/development/tab-label.component-Du1W0dxN.js +1 -1
- package/development/tab-nav-bar.component-BTPTHy2C.js +1 -1
- package/development/tab.component-DteuwiHv.js +1 -1
- package/development/table/table-wrapper/table-wrapper.component.d.ts.map +1 -1
- package/development/table-wrapper.component-iSeT-FPH.js +1 -1
- package/development/tabs/tab/tab.component.d.ts.map +1 -1
- package/development/tabs/tab-group/tab-group.component.d.ts.map +1 -1
- package/development/tabs/tab-label/tab-label.component.d.ts.map +1 -1
- package/development/tabs/tab-nav-bar/tab-nav-bar.component.d.ts.map +1 -1
- package/development/tag/tag/tag.component.d.ts +1 -1
- package/development/tag/tag/tag.component.d.ts.map +1 -1
- package/development/tag/tag-group/tag-group.component.d.ts.map +1 -1
- package/development/tag-group.component-SEbOfnip.js +1 -1
- package/development/tag.component-CWL9jJTW.js +1 -1
- package/development/teaser/teaser.component.d.ts.map +1 -1
- package/development/teaser-hero/teaser-hero.component.d.ts +1 -1
- package/development/teaser-hero/teaser-hero.component.d.ts.map +1 -1
- package/development/teaser-hero.component-7KeR7bPf.js +1 -1
- 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/teaser-product/teaser-product.component.d.ts +1 -1
- package/development/teaser-product/teaser-product/teaser-product.component.d.ts.map +1 -1
- package/development/teaser-product/teaser-product-static/teaser-product-static.component.d.ts.map +1 -1
- package/development/teaser-product/teaser-product-static/teaser-product-static.component.js +1 -1
- package/development/teaser-product-common-DhbAGnQN.js +1 -1
- package/development/teaser-product.component-C3PZbA5W.js +1 -1
- package/development/teaser.component-BJso_6lz.js +1 -1
- package/development/time-input/time-input.component.d.ts.map +1 -1
- package/development/time-input.component-BWMBV6fm.js +1 -1
- package/development/timetable-form/timetable-form/timetable-form.component.d.ts.map +1 -1
- package/development/timetable-form/timetable-form-details/timetable-form-details.component.d.ts.map +1 -1
- package/development/timetable-form/timetable-form-swap-button/timetable-form-swap-button.component.d.ts.map +1 -1
- package/development/timetable-form-details.component-C8EdT4rZ.js +1 -1
- package/development/timetable-form-swap-button.component-_EUhzoww.js +1 -1
- package/development/timetable-form.component-DLjBbFRv.js +1 -1
- package/development/timetable-form.js +1 -1
- package/development/timetable-occupancy/timetable-occupancy.component.d.ts +1 -1
- package/development/timetable-occupancy/timetable-occupancy.component.d.ts.map +1 -1
- package/development/timetable-occupancy-icon/timetable-occupancy-icon.component.d.ts.map +1 -1
- package/development/timetable-occupancy-icon.component-DXFUx67a.js +1 -1
- package/development/timetable-occupancy.component-By7X3Sj2.js +1 -1
- package/development/title/title-base.d.ts.map +1 -1
- package/development/title/title.component.d.ts.map +1 -1
- package/development/title-base-Bc3biGfy.js +1 -1
- package/development/title.component-B7rIqG0N.js +1 -1
- package/development/toast/toast.component.d.ts +1 -1
- package/development/toast/toast.component.d.ts.map +1 -1
- package/development/toast.component-Cy13egVy.js +1 -1
- package/development/toggle/toggle/toggle.component.d.ts +1 -1
- package/development/toggle/toggle/toggle.component.d.ts.map +1 -1
- package/development/toggle/toggle-option/toggle-option.component.d.ts.map +1 -1
- package/development/toggle-check/toggle-check.component.d.ts.map +1 -1
- package/development/toggle-check.component-CuODx4cx.js +1 -1
- package/development/toggle-option.component-DscH6K3b.js +1 -1
- package/development/toggle.component-Dap1d4rK.js +1 -1
- package/development/tooltip/tooltip.component.d.ts.map +1 -1
- package/development/tooltip.component-BtWTK2R0.js +1 -1
- package/development/train/train/train.component.d.ts.map +1 -1
- package/development/train.component-D5Z4vgej.js +1 -1
- package/development/train.js +1 -1
- package/development/visual-checkbox/visual-checkbox.component.d.ts.map +1 -1
- package/development/visual-checkbox.component-jRksxrOu.js +1 -1
- package/package.json +2 -2
|
@@ -1447,4 +1447,4 @@ var SbbCalendarElement = (() => {
|
|
|
1447
1447
|
//#endregion
|
|
1448
1448
|
export { SbbMonthChangeEvent as n, SbbCalendarElement as t };
|
|
1449
1449
|
|
|
1450
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LUNCeXlrc3k4LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBXZSBhZGQgd2lkdGggZGVmaW5pdGlvbiB0byBob3N0LCB0byBtYWtlIG92ZXJ3cml0aW5nIGVhc3kgZm9yIGNvbnN1bWVycy5cbiAgd2lkdGg6IG1heC1jb250ZW50O1xuXG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZTogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDQ0KX07XG5cbiAgLy8gTWF0Y2ggRmlnbWEgZGVzaWduXG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtYm9yZGVyLXJhZGl1czogY2FsYyhcbiAgICB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy00eCkgKyB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1ib3JkZXItd2lkdGgpXG4gICk7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpXG4gICk7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBzbWFsbCkge1xuICAgIC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoNDgpfTtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUoZW5oYW5jZWQpKSB7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtdHJhbnNpdGlvbi1kdXJhdGlvbik7XG59XG5cbi5zYmItY2FsZW5kYXJfX2NvbnRyb2xzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLWdhcCk7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLW1hcmdpbi1ibG9jay1lbmQpO1xufVxuXG4uc2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aCB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci10YWJsZXMtZ2FwKTtcbn1cblxuI3NiYi1jYWxlbmRhcl9fY29udHJvbHMtcHJldmlvdXMsXG4jc2JiLWNhbGVuZGFyX19jb250cm9scy1uZXh0IHtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGUge1xuICBAaW5jbHVkZSBzYmIuYnV0dG9uLXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbjogYXV0bztcbiAgaGVpZ2h0OiB2YXIoLS1zYmItY2FsZW5kYXItY29udHJvbC12aWV3LWNoYW5nZS1oZWlnaHQpO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1zKTtcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLXNiYi10eXBvLWxldHRlci1zcGFjaW5nLXRleHQpO1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtcGFkZGluZy1pbmxpbmUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy1pbmZpbml0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWJhY2tncm91bmQpO1xuICBjb2xvcjogdmFyKC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtY29sb3IpO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC10cmFuc2l0aW9uLWR1cmF0aW9uKTtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXRyYW5zaXRpb24tZWFzaW5nLWZ1bmN0aW9uKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgcGFkZGluZy1ibG9jay1lbmQ7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgLS1zYmItY2FsZW5kYXItY29udHJvbC12aWV3LWNoYW5nZS1iYWNrZ3JvdW5kOiBsaWdodC1kYXJrKFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLW1pbGspLFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWFudGhyYWNpdGUpXG4gICAgKTtcbiAgICAtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWNvbG9yOiBsaWdodC1kYXJrKFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWdyYW5pdGUpLFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWFsdW1pbml1bSlcbiAgICApO1xuXG4gICAgY3Vyc29yOiB1bnNldDtcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG5cbiAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xIHtcbiAgICAmOm5vdCg6YWN0aXZlLCA6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1ob3Zlci1zaGlmdCk7XG4gICAgfVxuICB9XG5cbiAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xuICAgIC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtbW9udGgtdmlldyxcbi5zYmItY2FsZW5kYXJfX3RhYmxlLXllYXItdmlldyB7XG4gIC0tc2JiLWNhbGVuZGFyLXRhYmxlLWNvbHVtbi1zcGFjZXM6IDY7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLW92ZXJmbG93LWJyZWFrIHtcbiAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG5lZ2F0aXZlIG1hcmdpbiB3aGljaCBpcyBidWlsdCBieSB0aGUgY29udGFpbmluZyBzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lci5cbiAgLy8gT3ZlcmZsb3c6IGhpZGRlbiB3b3VsZCBjdXQgdGhlIGZvY3VzIG91dGxpbmUuIFRoZXJlZm9yZSB3ZSB0YWtlIGBjb250YWluYCBoZXJlLlxuICBjb250YWluOiBsYXlvdXQ7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApO1xuICBtYXJnaW4taW5saW5lOiB2YXIoLS1zYmItY2FsZW5kYXItbWFyZ2luKTtcblxuICAvLyBUaGUgcGFkZGluZyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sdW1uIHNob3VsZCBub3QgYmUgdmlzaWJsZSBpZiBjYWxlbmRhciBpcyBzdHJldGNoZWQuXG4gIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIGEgbmVnYXRpdmUgaW5saW5lIG1hcmdpbi5cbiAgLy8gQXMgd2UgZG9uJ3Qgd2FudCB0byBzcXVlZXplLCB0aGUgbWFyZ2luIHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gemVyby5cblxuICAvLyBNaW4gd2lkdGggaXMgZXF1YWxzIHRvIHRoZSBub3JtYWwgd2lkdGggb2YgdGhlIGNhbGVuZGFyXG4gIC0tc2JiLWNhbGVuZGFyLW1pbi13aWR0aDogY2FsYyg3ICogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZSkpO1xuXG4gIC8vIFRoZSBvdmVyZmxvdyB2YXJpYWJsZSBpcyBlcXVhbHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWN0dWFsIHdpZHRoIGFuZCB0aGUgbWluIHdpZHRoLlxuICAtLXNiYi1jYWxlbmRhci1vdmVyZmxvdzogY2FsYygxMDAlIC0gdmFyKC0tc2JiLWNhbGVuZGFyLW1pbi13aWR0aCkpO1xuXG4gIC8vIFRoZSBzdGFydCBvZmZzZXQgaXMgbmVnYXRpdmUgbWFyZ2luIHdoaWNoIHNob3VsZCBvdmVybGFwIHRoZSBwYXJlbnQgY29udGFpbmVyLiBTaG91bGQgbmV2ZXIgYmUgYSBwb3NpdGl2ZSB2YWx1ZS5cbiAgLS1zYmItY2FsZW5kYXItc3RhcnQtb2Zmc2V0OiBtaW4oXG4gICAgMHB4LFxuICAgIC0xICogKHZhcigtLXNiYi1jYWxlbmRhci1vdmVyZmxvdykgLyB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtY29sdW1uLXNwYWNlcykpXG4gICk7XG4gIC0tc2JiLWNhbGVuZGFyLW1hcmdpbjogdmFyKC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldCk7XG5cbiAgOmhvc3QoOnN0YXRlKHdpZGUpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1taW4td2lkdGg6IGNhbGMoXG4gICAgICAyICogNyAqIHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpICsgdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApXG4gICAgKTtcbiAgICAtLXNiYi1jYWxlbmRhci1tYXJnaW46IGNhbGMoMC41ICogdmFyKC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldCkpO1xuICB9XG5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ11bd2Vlay1udW1iZXJzXSkgJiB7XG4gICAgLS1zYmItY2FsZW5kYXItbWluLXdpZHRoOiBjYWxjKDggKiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKSk7XG4gIH1cblxuICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXVt3ZWVrLW51bWJlcnNdOnN0YXRlKHdpZGUpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1taW4td2lkdGg6IGNhbGMoXG4gICAgICAyICogOCAqIHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpICsgdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBjb250YWluZXIncyBtaW4td2lkdGggaXMgc2V0IGluIHZlcnRpY2FsIG1vZGU7XG4gIC8vIHRoZSB2YWx1ZSBgY2FsYyg3ICogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZSkpYCBpcyBmaW5lXG4gIC8vIGNvbnNpZGVyaW5nIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdlZWtzIGluIGEgbW9udGggaXMgNiwgcGx1cyAxIGZvciB0aGUgaGVhZGVyIGF0IHRoZSB0YWJsZSdzIGxlZnQgc2lkZS5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSAmIHtcbiAgICBtaW4td2lkdGg6IHZhcigtLXNiYi1jYWxlbmRhci1taW4td2lkdGgpO1xuXG4gICAgLy8gVGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgbWFyZ2luIGlzIHNldCB0byAwIHRvIGNvcnJlY3RseSBkaXNwbGF5IHRoZSB0YWJsZSBpZiBjb25zdW1lcnMgc2V0IGEgY3VzdG9tIHdpZHRoLlxuICAgIC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldDogMDtcbiAgfVxuXG4gIC8vIFRoZSBtaW4td2lkdGggaW4gd2lkZSBpcyBjYWxjdWxhdGVkIGFzIChtYXggbnVtYmVyIG9mIHdlZWtzIGluIGEgbW9udGgpICogKGRpc3BsYXllZCBtb250aHMpICsgKGhlYWRlciBjb2x1bW4pID0gNiAqIDIgKyAxID0gMTMuXG4gIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXTpzdGF0ZSh3aWRlKSkgJiB7XG4gICAgLS1zYmItY2FsZW5kYXItbWluLXdpZHRoOiBjYWxjKFxuICAgICAgMTMgKiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKSArIHZhcigtLXNiYi1jYWxlbmRhci10YWJsZXMtZ2FwKVxuICAgICk7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgaGVpZ2h0OiBtYXgtY29udGVudDtcblxuICBhbmltYXRpb246IHtcbiAgICBuYW1lOiBzaG93O1xuICAgIGR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgfVxuXG4gICYuc2JiLWNhbGVuZGFyX190YWJsZS1oaWRlIHtcbiAgICAtLXNiYi1jYWxlbmRhci1jZWxsLXRyYW5zaXRpb24tZHVyYXRpb246IDBtcztcblxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgbmFtZTogaGlkZTtcbiAgICAgIGR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICA6aG9zdCg6bm90KDpzdGF0ZSh3aWRlKSkpICYge1xuICAgIC8vIER1ZSB0byBhIFNhZmFyaSBpT1MgcmVuZGVyaW5nIGJ1ZyB3ZSBuZWVkIHRvIGRlZmluZSBtaW4td2lkdGggYXMgd2VsbC5cbiAgICAvLyBPdGhlcndpc2UsIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZSwgdGhlcmUgaXMgYSB3cm9uZyB3aWR0aCBpZiBwbGFjZWQgaW4gYW4gc2JiLWRpYWxvZy5cbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyIHtcbiAgLy8gRGVwZW5kaW5nIHdoZXJlIGluIHRoZSBET00gaXQncyB1c2VkLCBpdCdzIHBvc3NpYmxlIHRoYXQgYnJvd3NlciBkZWZhdWx0cyBzZXQgdGV4dC1hbGlnbiB0byBsZWZ0LlxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWJvZHkge1xuICAvLyBEZXBlbmRpbmcgd2hlcmUgaW4gdGhlIERPTSBpdCdzIHVzZWQsIGl0J3MgcG9zc2libGUgdGhhdCBicm93c2VyIGRlZmF1bHRzIHNldCB0ZXh0LWFsaWduIHRvIGxlZnQuXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwsXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbCB7XG4gIHdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1oZWFkZXItY29sb3IpO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICA6aG9zdCg6bm90KFttdWx0aXBsZV0pKSAmIHtcbiAgICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpO1xuICB9XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsIHtcbiAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXBhZGRpbmctYmxvY2stZW5kKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktY2VsbCB7XG4gIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1wYWRkaW5nLWJsb2NrLWVuZCk7XG59XG5cbnNiYi1jYWxlbmRhci1kYXkge1xuICA6aG9zdCg6bm90KDpzdGF0ZShlbmhhbmNlZCkpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1jZWxsLWp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg0NCl9O1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1kaXNwbGF5OiBub25lO1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS12YWx1ZS1oZWlnaHQ6IHVuc2V0O1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1jcm9zc2VkLW91dC10b3A6IDUwJTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktY3Jvc3NlZC1vdXQtdHJhbnNsYXRlOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKC00NWRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzaG93IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlLWFuaW1hdGlvbi1zaGlmdCkpO1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGhpZGUge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gIH1cblxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlLWFuaW1hdGlvbi1zaGlmdCkpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uLnB1cmUudHMnO1xuaW1wb3J0IHtcbiAgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLFxuICByZWFkQ29uZmlnLFxuICBTYmJMYW5ndWFnZUNvbnRyb2xsZXIsXG4gIFNiYk1lZGlhTWF0Y2hlckNvbnRyb2xsZXIsXG4gIFNiYk1lZGlhUXVlcnlCcmVha3BvaW50TGFyZ2VBbmRBYm92ZSxcbiAgREFZU19QRVJfUk9XLFxuICBkZWZhdWx0RGF0ZUFkYXB0ZXIsXG4gIE1PTkRBWSxcbiAgTU9OVEhTX1BFUl9QQUdFLFxuICBNT05USFNfUEVSX1JPVyxcbiAgVEhVUlNEQVksXG4gIFRVRVNEQVksXG4gIFdFRE5FU0RBWSxcbiAgWUVBUlNfUEVSX1BBR0UsXG4gIFlFQVJTX1BFUl9ST1csXG4gIGZvcmNlVHlwZSxcbiAgaGFuZGxlRGlzdGluY3RDaGFuZ2UsXG4gIHBsYWluRGF0ZSxcbiAgaTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvbixcbiAgaTE4bkNhbGVuZGFyV2Vla051bWJlcixcbiAgaTE4bk5leHRNb250aCxcbiAgaTE4bk5leHRZZWFyLFxuICBpMThuTmV4dFllYXJSYW5nZSxcbiAgaTE4blByZXZpb3VzTW9udGgsXG4gIGkxOG5QcmV2aW91c1llYXIsXG4gIGkxOG5QcmV2aW91c1llYXJSYW5nZSxcbiAgaTE4blllYXJNb250aFNlbGVjdGlvbixcbiAgYm94U2l6aW5nU3R5bGVzLFxuICBTYmJFbGVtZW50LFxuICB0eXBlIFNiYkVsZW1lbnRUeXBlLFxuICBTYmJTY3JlZW5SZWFkZXJPbmx5RWxlbWVudCxcbiAgdHlwZSBTYmJPcmllbnRhdGlvbixcbiAgdHlwZSBEYXRlQWRhcHRlcixcbn0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgeyBTYmJJY29uRWxlbWVudCB9IGZyb20gJy4uLy4uL2ljb24ucHVyZS50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhckRheUVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci1kYXkvY2FsZW5kYXItZGF5LmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhck1vbnRoRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLW1vbnRoL2NhbGVuZGFyLW1vbnRoLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhcldlZWtkYXlFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItd2Vla2RheS9jYWxlbmRhci13ZWVrZGF5LmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhcldlZWtudW1iZXJFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItd2Vla251bWJlci9jYWxlbmRhci13ZWVrbnVtYmVyLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhclllYXJFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIteWVhci9jYWxlbmRhci15ZWFyLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29tbW9uL2NhbGVuZGFyLWNlbGwtYmFzZS1lbGVtZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vY2FsZW5kYXIuc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgY2xhc3MgU2JiTW9udGhDaGFuZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmFuZ2U6IHJlYWRvbmx5IERheVtdO1xuXG4gIHB1YmxpYyBnZXQgcmFuZ2UoKTogcmVhZG9ubHkgRGF5W10ge1xuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihyYW5nZTogcmVhZG9ubHkgRGF5W10pIHtcbiAgICBzdXBlcignbW9udGhjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pO1xuICAgIHRoaXMuX3JhbmdlID0gT2JqZWN0LmZyZWV6ZShyYW5nZSB8fCBbXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIG5lZWRlZCBpbiB5ZWFyIGFuZCBtb250aCB2aWV3cyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBuZXh0IGVsZW1lbnQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqXG4gKiBUaGUgY2VsbCdzIGluZGV4IGFuZCB0aGUgZWxlbWVudCdzIGluZGV4IGluIGl0cyBtb250aCAvIHllYXIgYmF0Y2ggbXVzdCBiZSBkaXN0aW5ndWlzaGVkOlxuICogdGhlIGZpcnN0IGlzIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgb2YgYWxsIHRoZSByZW5kZXJlZCBjZWxscywgd2hpbGUgdGhlIHNlY29uZCBpcyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIHRhYmxlLlxuICogSW4gbm9uLXdpZGUgbW9kZSwgdGhlIHd0byBhcmUgdGhlIHNhbWUsIHdoaWxlIGluIHdpZGUgbW9kZSB0aGUgY2VsbCdzIGluZGV4IGNhbiBnbyBmcm9tIDAgdG8gNDcgZm9yIHllYXJzIGFuZCBmcm9tIDAgdG8gMjMgZm9yIG1vbnRocyxcbiAqIHdoaWxlIHRoZSBlbGVtZW50IGluZGV4IGdvZXMgZnJvbSAwIHRvLCByZXNwZWN0aXZlbHksIDIzIGFuZCAxMS5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uTW9udGhZZWFyVmlld3NQYXJhbWV0ZXJzIHtcbiAgLyoqIFRoZSBlbGVtZW50IGluZGV4IHdpdGhpbiBpdHMgeWVhciBvciBtb250aCByYW5nZS4gKi9cbiAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIEluIHdpZGUgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZWNvbmQgcGFuZWwsIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBwYW5lbC4gKi9cbiAgb2Zmc2V0Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHdpdGhpbiB0aGUgZWxlbWVudCdzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGNlbGxzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3csIGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyZWQgdmlldy4gKi9cbiAgdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIG5lZWRlZCBpbiBkYXkgdmlldyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBuZXh0IGVsZW1lbnQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqXG4gKiBJbiBvcmllbnRhdGlvbj0ndmVydGljYWwnLCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIGFueSBhcnJheS9pbmRleCB0byBjYWxjdWxhdGUgdGhlIGVsZW1lbnQgdG8gbmF2aWdhdGUgdG8sXG4gKiBzbyBjYWxjdWxhdGlvbnMgb24gZGF0ZXMgbXVzdCBiZSBkb25lLCB3aGljaCBzaG91bGQgY29uc2lkZXIgdmlldyBib3VuZGFyaWVzLCBvZmZzZXRzIGFuZCBtb250aCdzIGxlbmd0aC5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMge1xuICAvKiogVGhlIGZpcnN0IGRheSByZW5kZXJlZC4gKi9cbiAgZmlyc3REYXlJblZpZXc6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgbGFzdCBkYXkgcmVuZGVyZWQuIEl0IGRlcGVuZHMgb24gdGhlICd3aWRlJyB2YWx1ZS4gKi9cbiAgbGFzdERheUluVmlldzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBvZmZzZXQgZnJvbSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIChNb25kYXkpIG9mIHRoZSBmaXJzdCByZW5kZXJlZCBtb250aC4gKi9cbiAgZmlyc3RNb250aE9mZnNldDogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBmaXJzdCByZW5kZXJlZCBtb250aC4gKi9cbiAgZmlyc3RNb250aExlbmd0aDogbnVtYmVyO1xuICAvKiogVGhlIG9mZnNldCBmcm9tIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKE1vbmRheSkgb2YgdGhlIHNlY29uZCByZW5kZXJlZCBtb250aC4gSWYgd2lkZSBpcyBmYWxzZSwgaXQncyBlcXVhbCB0byB6ZXJvLiAqL1xuICBzZWNvbmRNb250aE9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERheTxUID0gRGF0ZT4ge1xuICAvKiogRGF0ZSBhcyBJU08gc3RyaW5nLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXlWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBzdHJpbmc7XG4gIHllYXJWYWx1ZTogc3RyaW5nO1xuICBkYXRlVmFsdWU6IFQ7XG4gIHdlZWtWYWx1ZTogbnVtYmVyO1xuICB3ZWVrRGF5VmFsdWU6IG51bWJlcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkIHVzZSBNb250aENlbGwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGgge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsb25nVmFsdWU6IHN0cmluZztcbiAgbW9udGhWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoQ2VsbCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJWaWV3ID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY2FsZW5kYXIgd2hpY2ggYWxsb3dzIGNob29zaW5nIGEgZGF0ZS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjdXN0b21pemVkIGBzYmItY2FsZW5kYXItZGF5YCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNhbGVuZGFyRWxlbWVudDxUID0gRGF0ZT4gZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jYWxlbmRhcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZWxlbWVudERlcGVuZGVuY2llczogU2JiRWxlbWVudFR5cGVbXSA9IFtcbiAgICBTYmJDYWxlbmRhckRheUVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJNb250aEVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJXZWVrZGF5RWxlbWVudCxcbiAgICBTYmJDYWxlbmRhcldlZWtudW1iZXJFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyWWVhckVsZW1lbnQsXG4gICAgU2JiSWNvbkVsZW1lbnQsXG4gICAgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQsXG4gICAgU2JiU2Vjb25kYXJ5QnV0dG9uRWxlbWVudCxcbiAgXTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRhdGVzZWxlY3RlZDogJ2RhdGVzZWxlY3RlZCcsXG4gICAgbW9udGhjaGFuZ2U6ICdtb250aGNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIElmIHNldCB0byB0cnVlLCB0d28gbW9udGhzIGFyZSBkaXNwbGF5ZWQgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHdpZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiB0aGUgY2FsZW5kYXIgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBvcGVuaW5nLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgdmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIG1pbjogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBBY2NlcHRzIGEgZGF0ZSBvYmplY3Qgb3IgbnVsbC5cbiAgICogQWNjZXB0cyBhbiBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4gMjAyNC0xMi0yNCkgYXMgYXR0cmlidXRlLlxuICAgKi9cbiAgQHBsYWluRGF0ZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXg6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYWxsb3dzIGZvciBtdWx0aXBsZSBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBoYW5kbGVEaXN0aW5jdENoYW5nZSgoZTogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdGVkIGRhdGU6IGFjY2VwdHMgYSBkYXRlIG9iamVjdCwgb3IsIGlmIGBtdWx0aXBsZWAsIGFuIGFycmF5IG9mIGRhdGVzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IFRbXSB8IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWVcbiAgICAgICAgLm1hcCgoZGF0ZUxpa2U6IFQpID0+XG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGVMaWtlKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoZGF0ZTogVCB8IG51bGwpOiBkYXRlIGlzIFQgPT4gZGF0ZSAhPT0gbnVsbClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGF0ZTogVCkgPT5cbiAgICAgICAgICAgICF0aGlzLl9pc0RheUluUmFuZ2UodGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRhdGUpKSB8fCB0aGlzLl9kYXRlRmlsdGVyKGRhdGUpLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgICEhc2VsZWN0ZWREYXRlICYmXG4gICAgICAgICghdGhpcy5faXNEYXlJblJhbmdlKHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShzZWxlY3RlZERhdGUpKSB8fFxuICAgICAgICAgIHRoaXMuX2RhdGVGaWx0ZXIoc2VsZWN0ZWREYXRlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkRGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBUIHwgVFtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3NlbGVjdGVkOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgb3V0IGRhdGVzLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkYXRlLWZpbHRlcicgfSlcbiAgcHVibGljIGFjY2Vzc29yIGRhdGVGaWx0ZXI6ICgoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBvcmllbnRhdGlvbiBvZiBkYXlzIGluIHRoZSBjYWxlbmRhci4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igb3JpZW50YXRpb246IFNiYk9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnO1xuXG4gIC8qKiBXaGV0aGVyIGl0IGhhcyB0byBkaXNwbGF5IHRoZSB3ZWVrIG51bWJlcnMgaW4gYWRkaXRpb24gdG8gd2VlayBkYXlzLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnd2Vlay1udW1iZXJzJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igd2Vla051bWJlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSByZWFkQ29uZmlnKCkuZGF0ZXRpbWU/LmRhdGVBZGFwdGVyID8/IGRlZmF1bHREYXRlQWRhcHRlcjtcblxuICAvKiogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGF0ZS4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfYWN0aXZlRGF0ZTogVCA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCk7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHdpZGUgcHJvcGVydHkgY29uc2lkZXJpbmcgcHJvcGVydHkgdmFsdWUgYW5kIGJyZWFrcG9pbnRzLiBGcm9tIHplcm8gdG8gc21hbGwgYHdpZGVgIGhhcyBhbHdheXMgdG8gYmUgZmFsc2UuICovXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgc2V0IF93aWRlKHdpZGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCd3aWRlJywgd2lkZSk7XG4gICAgdGhpcy5fd2lkZUludGVybmFsID0gd2lkZTtcbiAgfVxuICBwcml2YXRlIGdldCBfd2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZUludGVybmFsO1xuICB9XG4gIC8vIFdlIGtlZXAgdGhlIHN0YXRlIGluIGEgZmllbGQgYmVjYXVzZSBvZiB0aGUgV2ViS2l0IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzNDY3LlxuICAvLyBUT0RPOiByZS1jaGVjayB3aGV0aGVyIGZpZWxkIGlzIG5lZWRlZFxuICBwcml2YXRlIF93aWRlSW50ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9jYWxlbmRhclZpZXc6IENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gIHByaXZhdGUgX25leHRDYWxlbmRhclZpZXc6IENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVuZGVyZWQgZGF5IHZpZXc7IHVzZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgcHJpdmF0ZSBfa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnM6IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMgPSB7XG4gICAgZmlyc3REYXlJblZpZXc6IG51bGwsXG4gICAgbGFzdERheUluVmlldzogbnVsbCxcbiAgICBmaXJzdE1vbnRoT2Zmc2V0OiAwLFxuICAgIGZpcnN0TW9udGhMZW5ndGg6IDAsXG4gICAgc2Vjb25kTW9udGhPZmZzZXQ6IDAsXG4gIH07XG5cbiAgLyoqIEEgbGlzdCBvZiBkYXlzLCBpbiB0d28gZm9ybWF0cyAobG9uZyBhbmQgc2luZ2xlIGNoYXIpLiAqL1xuICBwcml2YXRlIF93ZWVrZGF5cyE6IFdlZWtkYXlbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla3M6IERheTxUPltdW10gPSBbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgbW9udGhzLiAqL1xuICBwcml2YXRlIF9tb250aHMhOiBNb250aENlbGxbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB5ZWFycy4gKi9cbiAgcHJpdmF0ZSBfeWVhcnMhOiBudW1iZXJbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB5ZWFycyBmb3IgdGhlIHdpZGUgdmlldy4gKi9cbiAgcHJpdmF0ZSBfbmV4dE1vbnRoWWVhcnMhOiBudW1iZXJbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG5leHQgbW9udGguICovXG4gIHByaXZhdGUgX25leHRNb250aFdlZWtzITogRGF5PFQ+W11bXTtcblxuICAvKiogQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIG1vbnRoIG5hbWVzIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlLiAqL1xuICBwcml2YXRlIF9tb250aE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKTtcblxuICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgd2Vla3MnIG51bWJlcnMgZm9yIHRoZSBjdXJyZW50IG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrTnVtYmVycyE6IG51bWJlcltdO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB3ZWVrcycgbnVtYmVycyBmb3IgdGhlIG5leHQgbW9udGggaW4gd2lkZSBtb2RlLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhXZWVrTnVtYmVycyE6IG51bWJlcltdO1xuXG4gIHByaXZhdGUgX2VuaGFuY2VkVmFyaWFudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGxpc3Qgb2YgY2FsZW5kYXIncyBjZWxscyBjb3JyZXNwb25kaW5nIHRvIGRheXMsIG1vbnRocyBvciB5ZWFycyBkZXBlbmRpbmcgb24gdGhlIHZpZXcuICovXG4gIHByaXZhdGUgZ2V0IF9jZWxscygpOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbTxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudD4oXG4gICAgICAodGhpcy5fY2FsZW5kYXJWaWV3ID09PSAnZGF5J1xuICAgICAgICA/IChBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpKS5mbGF0TWFwKChlOiBIVE1MU2xvdEVsZW1lbnQpID0+XG4gICAgICAgICAgICBlLmFzc2lnbmVkRWxlbWVudHMoeyBmbGF0dGVuOiB0cnVlIH0pLFxuICAgICAgICAgICkgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10pXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9YCkpID8/IFtdLFxuICAgICk7XG4gIH1cblxuICAvKiogVGhlIGNob3NlbiB5ZWFyIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jaG9zZW5ZZWFyPzogbnVtYmVyO1xuXG4gIC8qKiBUaGUgY2hvc2VuIG1vbnRoIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jaG9zZW5Nb250aD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgZm9jdXMgc2hvdWxkIGJlIHJlc2V0IG9uIGZvY3VzQ2VsbC4gKi9cbiAgcHJpdmF0ZSBfcmVzZXRGb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSBjYWxlbmRhciBpcyBjdXJyZW50bHkgZm9jdXNlZC4gKi9cbiAgcHJpdmF0ZSBfY29udGFpbmluZ0ZvY3VzID0gZmFsc2U7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBhY2Nlc3NvciBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4ge1xuICAgIHRoaXMuX21vbnRoTmFtZXMgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gIH0pO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7XG4gICAgW1NiYk1lZGlhUXVlcnlCcmVha3BvaW50TGFyZ2VBbmRBYm92ZV06ICgpID0+IHRoaXMuX2luaXQoKSxcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gICAgdGhpcy5fc2V0V2Vla2RheXMoKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGZvY3VzIGFzIHdlIHNob3VsZCBvbmx5IHRha2UgZm9jdXMgaW50byB0aGUgY2FsZW5kYXIsIHdoZW4gdGhlXG4gICAgLy8gZm9jdXMgd2FzIG9uY2Ugc2V0IGludG8gdGhlIGNhbGVuZGFyLlxuICAgIC8vIEZvciBzaGFkb3cgRE9NIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byB0cmFjayB0aGlzIHByb2dyYW1tYXRpY2FsbHkuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IHRydWUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IGZhbHNlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBjb25zdCBkYXkgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3Q8U2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+Pignc2JiLWNhbGVuZGFyLWRheScpO1xuICAgICAgaWYgKGRheSkge1xuICAgICAgICB0aGlzLl9zZWxlY3REYXRlKGRheS52YWx1ZSEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICBpZiAoKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUgPT09ICdzYmItY2FsZW5kYXItZGF5Jykge1xuICAgICAgICB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KFxuICAgICAgICAgIGUsXG4gICAgICAgICAgdGhpcy5fbWFwRGF0ZVRvRGF5KChlLnRhcmdldCBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnQpLnZhbHVlISBhcyBUKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGVGaWx0ZXIoZGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXI/LihkYXRlKSA/PyB0cnVlO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRDYWxlbmRhclZpZXcoKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9vblNsb3RDaGFuZ2UsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2hhZG93Um9vdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX29uU2xvdENoYW5nZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXNDZWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd3aWRlJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdvcmllbnRhdGlvbicpKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2aWV3JykpIHtcbiAgICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuXG4gICAgLy8gV2hlbiBjaGFuZ2luZyB2aWV3IHRvIHllYXIvbW9udGgsIHRoZSB0YWJpbmRleCBpcyBjaGFuZ2VkLCBidXQgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyBnZXR0aW5nIGxvc3QuXG4gICAgLy8gV2UgbmVlZCB0byBjYWxsIGBfZm9jdXNDZWxsKClgIG1ldGhvZCBleHBsaWNpdGx5IHRvIGNvcnJlY3RseSBzZXQgdGhlIGZvY3VzLlxuICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TbG90Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2VuaGFuY2VkVmFyaWFudCA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuc29tZShcbiAgICAgIChjKSA9PiBjLmxvY2FsTmFtZSA9PT0gJ3NiYi1jYWxlbmRhci1kYXknLFxuICAgICk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnZW5oYW5jZWQnLCB0aGlzLl9lbmhhbmNlZFZhcmlhbnQpO1xuICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBgX3NlbGVjdGVkYCBzdGF0ZSBzaG91bGQgYmUgYWRhcHRlZCB3aGVuIHRoZSBgbXVsdGlwbGVgIHByb3BlcnR5IGNoYW5nZXM6XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIHRydWUsIHRoZSAnX3NlbGVjdGVkJyBpcyBzZXQgdG8gYW4gYXJyYXk7XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9wdGlvbiBpcyBzZXQgYXMgJ3ZhbHVlJyBvdGhlcndpc2UgaXQncyBzZXQgdG8gbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX29uTXVsdGlwbGVDaGFuZ2VkKGlzTXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLl9zZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPyBbdGhpcy5fc2VsZWN0ZWQgYXMgVF0gOiBbXTtcbiAgICB9XG4gICAgaWYgKCFpc011bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pLmxlbmd0aCA/ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pWzBdIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfaW5pdChhY3RpdmVEYXRlPzogVCk6IHZvaWQge1xuICAgIC8vIER1ZSB0byBpdHMgY29tcGxleGl0eSwgdGhlIGNhbGVuZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9pbml0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVEYXRlKSB7XG4gICAgICB0aGlzLl9hc3NpZ25BY3RpdmVEYXRlKGFjdGl2ZURhdGUpO1xuICAgIH1cbiAgICB0aGlzLl93aWRlID1cbiAgICAgICh0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUpID8/IGZhbHNlKSAmJiB0aGlzLndpZGU7XG4gICAgdGhpcy5fd2Vla3MgPSB0aGlzLl9jcmVhdGVXZWVrUm93cyh0aGlzLl9hY3RpdmVEYXRlKTtcbiAgICB0aGlzLl95ZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKCk7XG4gICAgdGhpcy5fd2Vla051bWJlcnMgPSB0aGlzLl93ZWVrc1xuICAgICAgLmZsYXQoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSlcbiAgICAgIC5tYXAoKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla1ZhbHVlKVxuICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKTtcbiAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyA9IFtbXV07XG4gICAgdGhpcy5fbmV4dE1vbnRoWWVhcnMgPSBbW11dO1xuICAgIGlmICh0aGlzLl93aWRlKSB7XG4gICAgICBjb25zdCBuZXh0TW9udGhEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyA9IHRoaXMuX2NyZWF0ZVdlZWtSb3dzKG5leHRNb250aERhdGUsIHRydWUpO1xuICAgICAgdGhpcy5fbmV4dE1vbnRoWWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cyhZRUFSU19QRVJfUEFHRSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhXZWVrTnVtYmVycyA9IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUpXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIG9uIGEgZGF5IGNlbGwgcHJpb3JpdGl6aW5nIHRoZSBzZWxlY3RlZCBkYXksIHRoZSBjdXJyZW50IGRheSwgYW5kIGxhc3RseSwgdGhlIGZpcnN0IHNlbGVjdGFibGUgZGF5LiAqL1xuICBwcml2YXRlIF9mb2N1c0NlbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Jlc2V0Rm9jdXMpIHtcbiAgICAgIHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk/LmZvY3VzKCk7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGFycmF5IG9mIHdlZWtkYXlzLiAqL1xuICBwcml2YXRlIF9zZXRXZWVrZGF5cygpOiB2b2lkIHtcbiAgICBjb25zdCBuYXJyb3dXZWVrZGF5czogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgY29uc3QgbG9uZ1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCdsb25nJyk7XG4gICAgY29uc3Qgd2Vla2RheXM6IFdlZWtkYXlbXSA9IGxvbmdXZWVrZGF5cy5tYXAoKGxvbmc6IHN0cmluZywgaTogbnVtYmVyKSA9PiAoe1xuICAgICAgbG9uZyxcbiAgICAgIG5hcnJvdzogbmFycm93V2Vla2RheXNbaV0sXG4gICAgfSkpO1xuXG4gICAgLy8gUm90YXRlcyB0aGUgbGFiZWxzIGZvciBkYXlzIG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICBjb25zdCBmaXJzdERheU9mV2VlazogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKTtcbiAgICB0aGlzLl93ZWVrZGF5cyA9IHdlZWtkYXlzLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKS5jb25jYXQod2Vla2RheXMuc2xpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGFsb25nIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiBhbmQgc2V0cyB0aGUgcGFyYW1ldGVycyB1c2VkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uICovXG4gIHByaXZhdGUgX2NyZWF0ZVdlZWtSb3dzKHZhbHVlOiBULCBpc1NlY29uZE1vbnRoSW5WaWV3ID0gZmFsc2UpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IHdlZWtPZmZzZXQ6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgaWYgKCFpc1NlY29uZE1vbnRoSW5WaWV3KSB7XG4gICAgICB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoTGVuZ3RoID0gZGF5c0luTW9udGg7XG4gICAgICB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoT2Zmc2V0ID0gd2Vla09mZnNldDtcbiAgICAgIHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLmZpcnN0RGF5SW5WaWV3ID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSxcbiAgICAgICAgICAxLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLmxhc3REYXlJblZpZXcgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgIGRheXNJbk1vbnRoLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMuc2Vjb25kTW9udGhPZmZzZXQgPSB3ZWVrT2Zmc2V0O1xuICAgICAgdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMubGFzdERheUluVmlldyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh2YWx1ZSksXG4gICAgICAgICAgZGF5c0luTW9udGgsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICA/IHRoaXMuX2NyZWF0ZVdlZWtSb3dzSG9yaXpvbnRhbCh2YWx1ZSwgZGF5c0luTW9udGgsIHdlZWtPZmZzZXQpXG4gICAgICA6IHRoaXMuX2NyZWF0ZVdlZWtSb3dzVmVydGljYWwodmFsdWUsIGRheXNJbk1vbnRoLCB3ZWVrT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByb3dzIGZvciBlYWNoIHdlZWsgaW4gb3JpZW50YXRpb249J2hvcml6b250YWwnLlxuICAgKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoIGFuZCBwdXNoZXMgaXQgaW50byBhbmQgYXJyYXkuXG4gICAqIEVhY2ggc2V2ZW4gZGF5cyAoY29uc2lkZXJpbmcgdGhlIG9mZnNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtb250aCkgcmVzdGFydHMgZnJvbSBhbiBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogVGhlIHJlc3VsdCBpcyBhIG1hdHJpeCBpbiB3aGljaCBldmVyeSByb3cgaXMgYSB3ZWVrIChvciBwYXJ0IG9mIGl0LCBjb25zaWRlcmluZyBvZmZzZXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NIb3Jpem9udGFsKHZhbHVlOiBULCBkYXlzSW5Nb250aDogbnVtYmVyLCB3ZWVrT2Zmc2V0OiBudW1iZXIpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCB3ZWVrczogRGF5PFQ+W11bXSA9IFtbXV07XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcm93cyBmb3IgZWFjaCB3ZWVrIGluIG9yaWVudGF0aW9uPSd2ZXJ0aWNhbCcuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBtYXRyaXggd2l0aCBzZXZlbiBlbXB0eSByb3dzLlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoXG4gICAqIGFuZCBwdXNoZXMgaXQgaW50byB0aGUgY29ycmVjdCBhcnJheSBjb25zaWRlcmluZyB0aGUgb2Zmc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1vbnRoLlxuICAgKiBFYWNoIHNldmVuIGRheXMgKGluY2x1ZGluZyBvZmZzZXQpIHJlc3RhcnRzIGZyb20gdGhlIGZpcnN0LlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGEgbWF0cml4IGluIHdoaWNoIGV2ZXJ5IHJvdyBpcyBhIHNldCBvZiB3ZWVrZGF5cywgc286XG4gICAqIC0gcm93IDA6IGFsbCB0aGUgTW9uZGF5cztcbiAgICogLSByb3cgMTogYWxsIHRoZSBUdWVzZGF5cztcbiAgICogLSAuLi5cbiAgICogLSByb3cgNzogYWxsIHRoZSBTdW5kYXlzLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NWZXJ0aWNhbCh2YWx1ZTogVCwgZGF5c0luTW9udGg6IG51bWJlciwgd2Vla09mZnNldDogbnVtYmVyKTogRGF5PFQ+W11bXSB7XG4gICAgY29uc3Qgd2Vla3M6IERheTxUPltdW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX1BFUl9ST1cgfSwgKCkgPT4gW10pO1xuICAgIGZvciAobGV0IGkgPSAwLCBjZWxsID0gd2Vla09mZnNldDsgaSA8IGRheXNJbk1vbnRoOyBpKyssIGNlbGwrKykge1xuICAgICAgaWYgKGNlbGwgPT09IERBWVNfUEVSX1JPVykge1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3NbY2VsbF0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICBwcml2YXRlIF9tYXBEYXRlVG9EYXkoZGF0ZTogVCk6IERheTxUPiB7XG4gICAgY29uc3QgaXNvRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShkYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGlzb0RhdGUsXG4gICAgICBkYXRlVmFsdWU6IGRhdGUsXG4gICAgICBkYXlWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoZGF0ZSkpLFxuICAgICAgbW9udGhWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpKSxcbiAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgLy8gVE9ETzogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGlzLCBieSBrZWVwaW5nIHRyYWNrIG9mIHRoZVxuICAgICAgLy8gd2VlayBudW1iZXIgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRheXMuXG4gICAgICB3ZWVrVmFsdWU6IHRoaXMuX2dldFdlZWsoZGF0ZSksXG4gICAgICB3ZWVrRGF5VmFsdWU6IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0V2VlayhkYXRlOiBUKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaXJzdERheU9mWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSwgMSwgMSk7XG4gICAgY29uc3Qgd2Vla2RheSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhmaXJzdERheU9mWWVhcik7XG5cbiAgICBsZXQgd2Vla0luZGV4ID0gW01PTkRBWSwgVFVFU0RBWSwgV0VETkVTREFZLCBUSFVSU0RBWV0uaW5jbHVkZXMod2Vla2RheSkgPyAxIDogMDtcbiAgICBsZXQgd2Vla1N0YXJ0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgZmlyc3REYXlPZlllYXIsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZmlyc3REYXlPZlllYXIpICogLTEsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUod2Vla1N0YXJ0LCBkYXRlKSA8PSAwKSB7XG4gICAgICBjb25zdCB3ZWVrRW5kID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHdlZWtTdGFydCwgNik7XG4gICAgICBpZiAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgd2Vla0VuZCkgPD0gMCkge1xuICAgICAgICByZXR1cm4gd2Vla0luZGV4ID4gMFxuICAgICAgICAgID8gd2Vla0luZGV4XG4gICAgICAgICAgOiB0aGlzLl9nZXRXZWVrKHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdERheU9mWWVhciwgLTEpKTtcbiAgICAgIH1cbiAgICAgIHdlZWtTdGFydCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh3ZWVrU3RhcnQsIERBWVNfUEVSX1JPVyk7XG4gICAgICB3ZWVrSW5kZXgrKztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBkYXRlIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIC8qKiBGb3JjZSB0aGUgY29udmVyc2lvbiB0byBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcuICovXG4gIHByaXZhdGUgX21hcFZhbHVlVG9JU09EYXRlKHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKHZhbHVlIGFzIFQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTW9udGhSb3dzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoczogTW9udGhDZWxsW10gPSBuZXcgQXJyYXkoMTIpLmZpbGwobnVsbCkubWFwKFxuICAgICAgKF8sIGk6IG51bWJlcik6IE1vbnRoQ2VsbCA9PiAoe1xuICAgICAgICB2YWx1ZTogU3RyaW5nKGkgKyAxKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aENlbGxbXVtdID0gW107XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgbW9udGhBcnJheS5wdXNoKG1vbnRocy5zbGljZShNT05USFNfUEVSX1JPVyAqIGksIE1PTlRIU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICB0aGlzLl9tb250aHMgPSBtb250aEFycmF5O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyUm93cyhvZmZzZXQ6IG51bWJlciA9IDApOiBudW1iZXJbXVtdIHtcbiAgICBjb25zdCBzdGFydFZhbHVlWWVhclZpZXc6IG51bWJlciA9IHRoaXMuX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpO1xuICAgIGNvbnN0IGFsbFllYXJzOiBudW1iZXJbXSA9IG5ldyBBcnJheShZRUFSU19QRVJfUEFHRSlcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpOiBudW1iZXIpID0+IHN0YXJ0VmFsdWVZZWFyVmlldyArIG9mZnNldCArIGkpO1xuICAgIGNvbnN0IHJvd3M6IG51bWJlciA9IFlFQVJTX1BFUl9QQUdFIC8gWUVBUlNfUEVSX1JPVztcbiAgICBjb25zdCB5ZWFyQXJyYXk6IG51bWJlcltdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB5ZWFyQXJyYXkucHVzaChhbGxZZWFycy5zbGljZShZRUFSU19QRVJfUk9XICogaSwgWUVBUlNfUEVSX1JPVyAqIChpICsgMSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHllYXJBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaXJzdCB5ZWFyIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgeWVhciBzZWxlY3Rpb24gcGFuZWwuXG4gICAqIElmIGBtaW5EYXRlYCBhbmQgYG1heERhdGVgIGFyZSBib3RoIG51bGwsIHRoZSBzdGFydGluZyB5ZWFyIGlzIGNhbGN1bGF0ZWQgYXNcbiAgICogdGhlIG11bHRpcGxlIG9mIFlFQVJTX1BFUl9QQUdFIGNsb3Nlc3QgdG8gYW5kIGxlc3MgdGhhbiBhY3RpdmVEYXRlLFxuICAgKiBlLmcuLCB3aXRoIGBZRUFSU19QRVJfUEFHRWAgPSAyNCBhbmQgYGFjdGl2ZURhdGVgID0gMjAyMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDIwMTYgKDI0ICogODMpLFxuICAgKiB3aGlsZSB3aXRoIGBhY3RpdmVEYXRlYCA9IDIwMDAsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxOTkyICgyNCAqIDgyKS5cbiAgICogSWYgYG1pbkRhdGVgIGlzIG5vdCBudWxsLCBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXI7IGlmIGBtYXhEYXRlYCBpcyBub3QgbnVsbCxcbiAgICogaXQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB5ZWFyIG1pbnVzIGBZRUFSU19QRVJfUEFHRWAsIHNvIHRoYXQgdGhlIGBtYXhEYXRlYCBpcyB0aGUgbGFzdCByZW5kZXJlZCB5ZWFyLlxuICAgKiBJZiBib3RoIGFyZSBub3QgbnVsbCwgYG1heERhdGVgIGhhcyBwcmlvcml0eSBvdmVyIGBtaW5EYXRlYC5cbiAgICovXG4gIHByaXZhdGUgX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpOiBudW1iZXIge1xuICAgIGxldCBzdGFydGluZ1llYXIgPSAwO1xuICAgIGlmICh0aGlzLm1heCkge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1heCkgLSBZRUFSU19QRVJfUEFHRSArIDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbikge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbik7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZVllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpO1xuICAgIHJldHVybiAoXG4gICAgICBhY3RpdmVZZWFyIC1cbiAgICAgICgoKChhY3RpdmVZZWFyIC0gc3RhcnRpbmdZZWFyKSAlIFlFQVJTX1BFUl9QQUdFKSArIFlFQVJTX1BFUl9QQUdFKSAlIFlFQVJTX1BFUl9QQUdFKVxuICAgICk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4tbWF4IHJhbmdlLiAqL1xuICBwcml2YXRlIF9pc0RheUluUmFuZ2UoZGF0ZVN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1pbiAmJiAhdGhpcy5tYXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZVN0cmluZykhO1xuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLl9kYXRlQWRhcHRlci5jbGFtcERhdGUoZGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGUgYW5kIHNldHMgaXQgaW50ZXJuYWxseS4gKi9cbiAgcHJpdmF0ZSBfc2VsZWN0RGF0ZShkYXk6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8vIENoZWNrIGlmIF9zZWxlY3RlZCBoYXMgZWxlbWVudHNcbiAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAmJiAodGhpcy5fc2VsZWN0ZWQgYXMgVFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTZWxlY3RlZERheTogbnVtYmVyID0gKHRoaXMuX3NlbGVjdGVkIGFzIFRbXSkuZmluZEluZGV4KFxuICAgICAgICAgIChzZWwpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHNlbCwgZGF5KSA9PT0gMCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYWxyZWFkeSBpbiB0aGUgX3NlbGVjdGVkIGFycmF5LCByZW1vdmUgaXQsIG90aGVyd2lzZSBhZGQgaXRcbiAgICAgICAgaWYgKGluZGV4T2ZTZWxlY3RlZERheSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXhPZlNlbGVjdGVkRGF5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IFsuLi4odGhpcy5fc2VsZWN0ZWQgYXMgVFtdKSwgZGF5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgX3NlbGVjdGVkIGlzIGVtcHR5LCBzZXQgaXRcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBbZGF5XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VtaXREYXRlU2VsZWN0ZWRFdmVudCh0aGlzLl9zZWxlY3RlZC5tYXAoKGUpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGUpISkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBzaW5nbGUgc2VsZWN0aW9uLCBjaGVjayBpZiB0aGUgZGF5IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWQgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fc2VsZWN0ZWQgYXMgVCwgZGF5KSAhPT0gMCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGRheTtcbiAgICAgICAgdGhpcy5fZW1pdERhdGVTZWxlY3RlZEV2ZW50KHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSkhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG11bHRpcGxlIGRhdGVzIHNlbGVjdGlvbiB2aWEgd2Vla051bWJlciAvIHdlZWtEYXkgYnV0dG9uczpcbiAgICogLSBpZiBDbWQgb3IgQ3RybCBhcmUgcHJlc3NlZCwgYWRkIHRoZSBuZXcgZGF0ZSB0byB0aGUgY3VycmVudCBvbmVzO1xuICAgKiAtIGlmIG5vdCxcbiAgICogICAgIC0gaWYgdGhlIG5ldyBkYXRlcyBhcmUgdGhlIHNhbWUgb2YgdGhlIGN1cnJlbnQgb25lcywgaXQgbWVhbnMgdGhhdCB0aGUgc2FtZSBidXR0b24gaGFzIGJlZW4gY2xpY2tlZCB0d2ljZSwgc28gZG8gbm90aGluZztcbiAgICogICAgIC0gaWYgbm90LCB0aGUgc2VsZWN0ZWQgZGF0ZXMgYXJlIHRoZSBuZXcgb25lcy5cbiAgICovXG4gIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5czogRGF5PFQ+W10pOiB2b2lkIHtcbiAgICAvLyBGaWx0ZXIgZGlzYWJsZWQgZGF5cyBieSBtYXRjaGluZyB0aGUgcHJvdmlkZWQgYGRheXNgIHBhcmFtZXRlciBhZ2FpbnN0IHRoZSBlbmFibGVkIGNlbGxzLlxuICAgIC8vIFNpbmNlIHRoZSBidXR0b25zJyB2YWx1ZSBpcyBzZXQgdG8gdGhlIERheSdzIGludGVyZmFjZSB2YWx1ZSAoSVNPIHN0cmluZyksIHRoZXJlJ3Mgbm8gbmVlZCB0byBkZXNlcmlhbGl6ZSBpdC5cbiAgICBjb25zdCBlbmFibGVkRGF5czogc3RyaW5nW10gPSAodGhpcy5fY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10pXG4gICAgICAuZmlsdGVyKChlKSA9PiAhZS5kaXNhYmxlZClcbiAgICAgIC5tYXAoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSk7XG4gICAgY29uc3QgZGF5c1RvQWRkOiBzdHJpbmdbXSA9IGRheXNcbiAgICAgIC5tYXAoKGU6IERheTxUPikgPT4gZS52YWx1ZSlcbiAgICAgIC5maWx0ZXIoKGlzb0RhdGU6IHN0cmluZykgPT4gZW5hYmxlZERheXMuaW5jbHVkZXMoaXNvRGF0ZSkpO1xuICAgIGNvbnN0IGRheXNUb0FkZFNldCA9IG5ldyBTZXQoZGF5c1RvQWRkKTtcbiAgICBjb25zdCBzZWxlY3RlZFNldCA9IG5ldyBTZXQoKHRoaXMuX3NlbGVjdGVkIGFzIFRbXSkubWFwKChzKSA9PiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEocykpKTtcbiAgICBjb25zdCBzZWxTdHJpbmdzID0gdGhpcy5fdXBkYXRlU2VsZWN0ZWRXaXRoTXVsdGlwbGVEYXRlcyhkYXlzVG9BZGQsIGRheXNUb0FkZFNldCwgc2VsZWN0ZWRTZXQpO1xuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsU3RyaW5ncy5tYXAoKHMpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHMpISk7XG5cbiAgICB0aGlzLl9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQodGhpcy5fc2VsZWN0ZWQubWFwKChlKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShlKSEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZGF0ZXNlbGVjdGVkIGV2ZW50IGdpdmVuIHRoZSBkZXRhaWwgKGFzIFQgb3IgVFtdIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGlwbGUgZmxhZykuXG4gICAqL1xuICBwcml2YXRlIF9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQoZGV0YWlsOiBUIHwgVFtdKTogdm9pZCB7XG4gICAgLyoqIEB0eXBlIHtDdXN0b21FdmVudDxUIHwgVFtdPn0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8VCB8IFRbXT4oJ2RhdGVzZWxlY3RlZCcsIHtcbiAgICAgICAgZGV0YWlsLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0TW9udGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gRklYTUU6IHRoZSBuYW1lIG9mIHRoaXMgdmFyaWFibGUgYXBwZWFycyBhcyBldmVudCBuYW1lIGluIHRoZSByZWFkbWVcbiAgICAvLyAgZHVlIHRvIGEgYnVnIGluIHRoZSBjdXN0b20tZWxlbWVudHMtbWFuaWZlc3QgbGlicmFyeS5cbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2MvY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0L2lzc3Vlcy8xNDlcbiAgICBjb25zdCBtb250aGNoYW5nZSA9ICh0aGlzLndpZGUgPyBbLi4udGhpcy5fd2Vla3MsIC4uLnRoaXMuX25leHRNb250aFdlZWtzXSA6IHRoaXMuX3dlZWtzKVxuICAgICAgLmZsYXQoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSkgYXMgRGF5W107XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NiYk1vbnRoQ2hhbmdlRXZlbnR9XG4gICAgICogRW1pdHMgd2hlbiB0aGUgbW9udGggY2hhbmdlcy5cbiAgICAgKiBUaGUgYHJhbmdlYCBwcm9wZXJ0eSBjb250YWlucyB0aGUgZGF5cyBhcnJheSBvZiB0aGUgY2hvc2VuIG1vbnRoLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgU2JiTW9udGhDaGFuZ2VFdmVudChtb250aGNoYW5nZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2Ugb2YgbXVsdGlwbGUgc2VsZWN0aW9uLCBuZXdseSBhZGRlZCBkYXlzIG11c3QgYmUgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIG9uZXMsIHdpdGhvdXQgZHVwbGljYXRpb24uXG4gICAqIElmIHRoZSBkYXlzIHRvIGFkZCBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0ZWQgb25lcywgdGhlIHNldCBtdXN0IGJlIGVtcHRpZWQuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVTZWxlY3RlZFdpdGhNdWx0aXBsZURhdGVzKFxuICAgIGRheXNUb0FkZDogc3RyaW5nW10sXG4gICAgZGF5c1RvQWRkU2V0OiBTZXQ8c3RyaW5nPixcbiAgICBzZWxlY3RlZFNldDogU2V0PHN0cmluZz4sXG4gICk6IHN0cmluZ1tdIHtcbiAgICBpZiAoZGF5c1RvQWRkLmV2ZXJ5KChkYXk6IHN0cmluZykgPT4gc2VsZWN0ZWRTZXQuaGFzKGRheSkpKSB7XG4gICAgICBkYXlzVG9BZGRTZXQuZm9yRWFjaCgoZGF5OiBzdHJpbmcpID0+IHNlbGVjdGVkU2V0LmRlbGV0ZShkYXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5c1RvQWRkU2V0LmZvckVhY2goKGRheTogc3RyaW5nKSA9PiBzZWxlY3RlZFNldC5hZGQoZGF5KSk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNlbGVjdGVkU2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldENob3NlblllYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgbGV0IHNlbGVjdGVkRGF0ZTogVCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHNlbGVjdGVkRGF0ZSA9ICh0aGlzLnNlbGVjdGVkIGFzIFRbXSkuYXQoLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWREYXRlID0gdGhpcy5zZWxlY3RlZCBhcyBUO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hvc2VuWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoc2VsZWN0ZWREYXRlID8/IHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2lnbkFjdGl2ZURhdGUoZGF0ZTogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1pbiAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1pbiwgZGF0ZSkgPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5taW47XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1heCAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1heCwgZGF0ZSkgPCAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5tYXg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSBkYXRlO1xuICB9XG5cbiAgLyoqIEdvZXMgdG8gdGhlIG1vbnRoIGlkZW50aWZpZWQgYnkgdGhlIHNoaWZ0LiAqL1xuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50TW9udGgobW9udGhzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIG1vbnRocykpO1xuICAgIHRoaXMuX2VtaXRNb250aENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ29Ub0RpZmZlcmVudFllYXIoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Nob3NlblllYXIhICs9IHllYXJzO1xuICAgIC8vIENhbid0IHVzZSBgX2Fzc2lnbkFjdGl2ZURhdGUoLi4uKWAgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIHNldCBpdCB0byBtaW4vbWF4IHZhbHVlIGlmIGFyZ3VtZW50IGlzIG91dCBvZiByYW5nZVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fY2hvc2VuWWVhciEsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhclJhbmdlKHllYXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fYWN0aXZlRGF0ZSwgeWVhcnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZEaXNhYmxlZChwcmV2RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLm1pbikgPCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dERpc2FibGVkKG5leHREYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobmV4dERhdGUsIHRoaXMubWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5fd2lkZSA/IDIgOiAxKTtcbiAgICBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXh0TW9udGgpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV4dE1vbnRoKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIHllYXJcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c1llYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpIC0gMSxcbiAgICAgIDEyLFxuICAgICAgMzEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfbmV4dFllYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpICsgKHRoaXMuX3dpZGUgPyAyIDogMSksXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJwcmV2aW91cyB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB5ZWFyIHZpZXcuICovXG4gIHByaXZhdGUgX3ByZXZpb3VzWWVhclJhbmdlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldlllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuX3llYXJzWzBdWzBdIC0gMSwgMTIsIDMxKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB5ZWFyIHZpZXcuICovXG4gIHByaXZhdGUgX25leHRZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB5ZWFycyA9IHRoaXMuX3dpZGUgPyB0aGlzLl9uZXh0TW9udGhZZWFycyA6IHRoaXMuX3llYXJzO1xuICAgIGNvbnN0IGxhc3RZZWFyUmFuZ2UgPSB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGxhc3RZZWFyUmFuZ2VbbGFzdFllYXJSYW5nZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUobGFzdFllYXIgKyAxLCAxLCAxKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVRhYmxlQmx1cihldmVudFRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQ/LmxvY2FsTmFtZSAhPT0gJ3NiYi1jYWxlbmRhci1kYXknKSB7XG4gICAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFRhYkluZGV4KCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy5fY2VsbHMuZmlsdGVyKChlKSA9PiBlLnRhYkluZGV4ID09PSAwKSA/PyBbXSkuZm9yRWFjaChcbiAgICAgIChkYXkpID0+IChkYXkudGFiSW5kZXggPSAtMSksXG4gICAgKTtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBmaXJzdEZvY3VzYWJsZS50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0aGUgZWxlbWVudCBpbiB0aGUgY2FsZW5kYXIgdG8gYXNzaWduIGZvY3VzLiAqL1xuICBwcml2YXRlIF9nZXRGaXJzdEZvY3VzYWJsZSgpOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLl9jYWxlbmRhclZpZXcgPT09ICdkYXknKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZE9yQ3VycmVudCA9XG4gICAgICAgIHRoaXMuX2NlbGxzLmZpbmQoKGUpID0+IGUubWF0Y2hlcygnOnN0YXRlKHNlbGVjdGVkKScpKSA/P1xuICAgICAgICB0aGlzLl9jZWxscy5maW5kKChlKSA9PiBlLm1hdGNoZXMoJzpzdGF0ZShjdXJyZW50KScpKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yQ3VycmVudCAmJiAhc2VsZWN0ZWRPckN1cnJlbnQuZGlzYWJsZWRcbiAgICAgICAgPyBzZWxlY3RlZE9yQ3VycmVudFxuICAgICAgICA6IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlRGF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3JDdXJyZW50ID1cbiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PignOnN0YXRlKHNlbGVjdGVkKScpID8/XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcjxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudD4oJzpzdGF0ZShjdXJyZW50KScpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JDdXJyZW50ICYmICFzZWxlY3RlZE9yQ3VycmVudC5kaXNhYmxlZFxuICAgICAgICA/IHNlbGVjdGVkT3JDdXJyZW50XG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PihcbiAgICAgICAgICAgIGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9Om5vdChbZGlzYWJsZWRdKWAsXG4gICAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW4gYGRheWAgdmlldyBpbiBgdmVydGljYWxgIG9yaWVudGF0aW9uLFxuICAgKiBpZiB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIGlzIG5vdCBhIE1vbmRheSwgaXQgaXMgbm90IHRoZSBmaXJzdCByZW5kZXJlZCBlbGVtZW50IGluIHRoZSB0YWJsZSxcbiAgICogc28gYHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3Rvcignc2JiLWNhbGVuZGFyLWRheTpub3QoW2Rpc2FibGVkXSknKWAgd2lsbCByZXR1cm4gYSB3cm9uZyB2YWx1ZS5cbiAgICpcbiAgICogVG8gc29sdmUgdGhpcywgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbG93ZXN0IGB2YWx1ZWAgaXMgdGFrZW4gKElTTyBTdHJpbmcgYXJlIG9yZGVyZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGVEYXkoKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY2VsbHMgPSB0aGlzLl9jZWxscyBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnRbXTtcbiAgICBjb25zdCBkYXlzSW5WaWV3ID0gY2VsbHMuZmlsdGVyKChlKSA9PiAhZS5kaXNhYmxlZCk7XG4gICAgaWYgKCFkYXlzSW5WaWV3IHx8IGRheXNJblZpZXcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gZGF5c0luVmlld1xuICAgICAgICAubWFwKChlKTogc3RyaW5nID0+IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShlLnZhbHVlISBhcyBUKSlcbiAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgIHJldHVybiBjZWxscy5maW5kKChlKSA9PiBlLm1hdGNoZXMoYFtzbG90PVwiJHtmaXJzdEVsZW1lbnR9XCJdYCkpISA/PyBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRheT86IERheTxUPik6IHZvaWQge1xuICAgIGlmIChpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBHZXRzIHRoZSBjdXJyZW50bHkgcmVuZGVyZWQgdGFibGUncyBjZWxsO1xuICAgIC8vIHRoZXkgY291bGQgYmUgZGF5cywgbW9udGhzIG9yIHllYXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB2aWV3LlxuICAgIC8vIElmIGB3aWRlYCBpcyB0cnVlLCB5ZWFycyBhcmUgZG91YmxlZCBpbiBudW1iZXIgYW5kIGRheXMgYXJlIChyb3VnaGx5KSBkb3VibGVkIHRvbywgYWZmZWN0aW5nIHRoZSBgaW5kZXhgIGNhbGN1bGF0aW9uLlxuICAgIGNvbnN0IGNlbGxzID0gdGhpcy5fY2VsbHM7XG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGNlbGxzLmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KTtcbiAgICBsZXQgbmV4dEVsOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDtcbiAgICBpZiAoZGF5KSB7XG4gICAgICBuZXh0RWwgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KGV2ZW50LCBpbmRleCwgY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10sIGRheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRFbCA9IHRoaXMuX25hdmlnYXRlQnlLZXlib2FyZChldmVudCwgaW5kZXgsIGNlbGxzKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWwgPSAodGhpcy5fZW5oYW5jZWRWYXJpYW50ID8gZG9jdW1lbnQgOiB0aGlzLnNoYWRvd1Jvb3QhKVxuICAgICAgLmFjdGl2ZUVsZW1lbnQgYXMgU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ7XG4gICAgaWYgKG5leHRFbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgIG5leHRFbC50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWw/LmZvY3VzKCk7XG4gICAgICBhY3RpdmVFbC50YWJJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZERheVZpZXcoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGRheTogRGF5PFQ+LFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IGFycm93c09mZnNldCA9XG4gICAgICB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IGxlZnRSaWdodDogMSwgdXBEb3duOiBEQVlTX1BFUl9ST1cgfVxuICAgICAgICA6IHsgbGVmdFJpZ2h0OiBEQVlTX1BFUl9ST1csIHVwRG93bjogMSB9O1xuICAgIGNvbnN0IG9mZnNldEZvclZlcnRpY2FsOiBudW1iZXIgPVxuICAgICAgaW5kZXggPCB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoTGVuZ3RoXG4gICAgICAgID8gdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMuZmlyc3RNb250aE9mZnNldFxuICAgICAgICA6IHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLnNlY29uZE1vbnRoT2Zmc2V0O1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93cyhjZWxscywgaW5kZXgsIGRheS5kYXRlVmFsdWUsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LmxlZnRSaWdodCk7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCBhcnJvd3NPZmZzZXQubGVmdFJpZ2h0KTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGNvbnN0IGZpcnN0T2ZXZWVrOiBudW1iZXIgPSArZGF5LmRheVZhbHVlICUgREFZU19QRVJfUk9XIHx8IERBWVNfUEVSX1JPVztcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gZmlyc3RPZldlZWsgLSArZGF5LmRheVZhbHVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoK2RheS5kYXlWYWx1ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIERBWVNfUEVSX1JPVyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RPZldlZWs6IG51bWJlciA9ICh3ZWVrTnVtYmVyIC0gMSkgKiBEQVlTX1BFUl9ST1cgLSBvZmZzZXRGb3JWZXJ0aWNhbCArIDE7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGZpcnN0T2ZXZWVrIC0gK2RheS5kYXlWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVBhZ2VVcERvd24oY2VsbHMsIGluZGV4LCBkYXksIGRlbHRhLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnUGFnZURvd24nOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBtb250aEluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gMSA6ICtkYXkubW9udGhWYWx1ZSArIDE7XG4gICAgICAgICAgY29uc3QgeWVhckluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gK2RheS55ZWFyVmFsdWUgKyAxIDogK2RheS55ZWFyVmFsdWU7XG4gICAgICAgICAgY29uc3QgZmlyc3ROZXh0TW9udGg6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHllYXJJbkJvdW5kcywgbW9udGhJbkJvdW5kcywgMSk7XG4gICAgICAgICAgY29uc3QgbGFzdE9mTW9udGg6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoXG4gICAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZmlyc3ROZXh0TW9udGgsIC0xKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPVxuICAgICAgICAgICAgTWF0aC50cnVuYygobGFzdE9mTW9udGggLSArZGF5LmRheVZhbHVlISkgLyBEQVlTX1BFUl9ST1cpICogREFZU19QRVJfUk9XO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB3ZWVrTnVtYmVyOiBudW1iZXIgPSBNYXRoLmNlaWwoKCtkYXkuZGF5VmFsdWUgKyBvZmZzZXRGb3JWZXJ0aWNhbCkgLyBEQVlTX1BFUl9ST1cpO1xuICAgICAgICAgIGNvbnN0IGxhc3RPZldlZWs6IG51bWJlciA9IHdlZWtOdW1iZXIgKiBEQVlTX1BFUl9ST1cgLSBvZmZzZXRGb3JWZXJ0aWNhbDtcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gbGFzdE9mV2VlayAtICtkYXkuZGF5VmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlQYWdlVXBEb3duKGNlbGxzLCBpbmRleCwgZGF5LCBkZWx0YSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdIb21lJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUZpcnN0KGNlbGxzLCBpbmRleCwgZGF5LCAxKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VuZCc6IHtcbiAgICAgICAgY29uc3QgbW9udGhJbkJvdW5kcyA9ICtkYXkubW9udGhWYWx1ZSArIDEgPiAxMiA/IDEgOiArZGF5Lm1vbnRoVmFsdWUgKyAxO1xuICAgICAgICBjb25zdCB5ZWFySW5Cb3VuZHMgPSArZGF5Lm1vbnRoVmFsdWUgKyAxID4gMTIgPyArZGF5LnllYXJWYWx1ZSArIDEgOiArZGF5LnllYXJWYWx1ZTtcbiAgICAgICAgY29uc3QgZmlyc3ROZXh0TW9udGg6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHllYXJJbkJvdW5kcywgbW9udGhJbkJvdW5kcywgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5TGFzdChjZWxscywgaW5kZXgsIGZpcnN0TmV4dE1vbnRoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNEYXlPdXRPZlZpZXcoZGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUgPCB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdERheUluVmlldyEgfHxcbiAgICAgIGRhdGUgPiB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5sYXN0RGF5SW5WaWV3IVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5QXJyb3dzKFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGU6IFQsXG4gICAgZGVsdGE6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF0ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobmV3RGF0ZVZhbHVlKSEsIGRlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheVBhZ2VVcERvd24oXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5OiBEYXk8VD4sXG4gICAgZGVsdGE6IG51bWJlcixcbiAgICBkZWx0YUlmRGlzYWJsZWQ6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF5LmRhdGVWYWx1ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEgKyBkZWx0YUlmRGlzYWJsZWQsIGRlbHRhSWZEaXNhYmxlZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlGaXJzdChcbiAgICBjZWxsczogU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk6IERheTxUPixcbiAgICBkYXRlOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudCB7XG4gICAgY29uc3QgbmV3RGF0ZVZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSgrZGF5LnllYXJWYWx1ZSwgK2RheS5tb250aFZhbHVlLCBkYXRlKSxcbiAgICApO1xuICAgIGlmICh0aGlzLl9pc0RheU91dE9mVmlldyhuZXdEYXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgICBjb25zdCBuZXh0Q2VsbCA9IGNlbGxzLmZpbmQoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSA9PT0gbmV3RGF0ZVZhbHVlKTtcbiAgICBpZiAoIW5leHRDZWxsIHx8IG5leHRDZWxsLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZERheUZpcnN0KGNlbGxzLCBpbmRleCwgZGF5LCBkYXRlICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlMYXN0KFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZpcnN0TmV4dE1vbnRoOiBULFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdE5leHRNb250aCwgLTEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5TGFzdChjZWxscywgaW5kZXgsIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG5ld0RhdGVWYWx1ZSkhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgfTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMgPVxuICAgICAgdGhpcy5fY2FsY3VsYXRlUGFyYW1ldGVyc0ZvcktleWJvYXJkTmF2aWdhdGlvbihpbmRleCwgdGhpcy5fY2FsZW5kYXJWaWV3ID09PSAneWVhcicpO1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIC0xKTtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAxKTtcbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0KGNlbGxzLCBvZmZzZXRGb3JXaWRlTW9kZSk7XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0T25Db2x1bW4oXG4gICAgICAgICAgY2VsbHMsXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgICAgICk7XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdE9uQ29sdW1uKGNlbGxzLCBpbmRleCwgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLCB2ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZExhc3QoY2VsbHMsIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSAtIDEpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGFyYW1ldGVycyBuZWVkZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbiB5ZWFyIGFuZCBtb250aCB2aWV3LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIHN0YXJ0aW5nIGVsZW1lbnQncyBpbmRleCBpbiB0aGUgY2VsbCBhcnJheS5cbiAgICogQHBhcmFtIGlzWWVhclZpZXcgV2hldGhlciB0aGUgZGlzcGxheWVkIGB2aWV3YCBpcyB0aGUgeWVhciBvbmUuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXNZZWFyVmlldzogYm9vbGVhbixcbiAgKTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMge1xuICAgIGNvbnN0IGVsZW1lbnRzUGVyUGFnZSA9IGlzWWVhclZpZXcgPyBZRUFSU19QRVJfUEFHRSA6IE1PTlRIU19QRVJfUEFHRTtcbiAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBlbGVtZW50c1BlclBhZ2UpICogZWxlbWVudHNQZXJQYWdlO1xuICAgIGNvbnN0IGluZGV4SW5WaWV3OiBudW1iZXIgPSBvZmZzZXQgPT09IDAgPyBpbmRleCA6IGluZGV4IC0gZWxlbWVudHNQZXJQYWdlO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbE9mZnNldDogaXNZZWFyVmlldyA/IFlFQVJTX1BFUl9ST1cgOiBNT05USFNfUEVSX1JPVyxcbiAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBpbmRleEluVmlldyxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBlbGVtZW50c1BlclBhZ2UgOiBlbGVtZW50c1BlclBhZ2UgKiAyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkZWx0YTogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnRbXSxcbiAgICBmaXJzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbZmlyc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBmaXJzdE9mQ3VycmVudE1vbnRoLCAxKTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRMYXN0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbbGFzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2xhc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbGFzdE9mQ3VycmVudE1vbnRoLCAtMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgZmlyc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gKGluZGV4ICUgdmVydGljYWxPZmZzZXQpICsgb2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBNYXRoLnRydW5jKChvZmZzZXQgLSBpbmRleCAtIDEpIC8gdmVydGljYWxPZmZzZXQpICogdmVydGljYWxPZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKGluaXRUcmFuc2l0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldENhbGVuZGFyVmlldyhpbml0VHJhbnNpdGlvbik7XG4gICAgdGhpcy5fZW1pdE1vbnRoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldENhbGVuZGFyVmlldyhpbml0VHJhbnNpdGlvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5pbmdGb2N1cykge1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPVxuICAgICAgKHRoaXMubXVsdGlwbGUgPyAodGhpcy5fc2VsZWN0ZWQgYXMgVFtdKS5hdCgtMSkgOiAodGhpcy5fc2VsZWN0ZWQgYXMgVCkpID8/XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpO1xuICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcblxuICAgIGlmIChpbml0VHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyRGF5VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbmV4dE1vbnRoQWN0aXZlRGF0ZSA9IHRoaXMuX3dpZGVcbiAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c01vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZUxhYmVsRm9yRGF5Vmlldyh0aGlzLl9hY3RpdmVEYXRlKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcobmV4dE1vbnRoQWN0aXZlRGF0ZSEpIDogbm90aGluZ31cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSwgbmV4dE1vbnRoQWN0aXZlRGF0ZSEpfVxuICAgICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoMSksXG4gICAgICAgICAgaTE4bk5leHRNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0TW9udGhEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1vdmVyZmxvdy1icmVha1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1kYXktdmlld1wiPlxuICAgICAgICAgICR7dGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl93ZWVrcywgdGhpcy5fd2Vla051bWJlcnMpfVxuICAgICAgICAgICAgICAgICR7dGhpcy5fd2lkZVxuICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl9uZXh0TW9udGhXZWVrcywgdGhpcy5fbmV4dE1vbnRoV2Vla051bWJlcnMsIHRydWUpXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlVmVydGljYWwodGhpcy5fd2Vla3MsIHRoaXMuX3dlZWtOdW1iZXJzKX1cbiAgICAgICAgICAgICAgICAke3RoaXMuX3dpZGVcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fY3JlYXRlRGF5VGFibGVWZXJ0aWNhbChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0TW9udGhXZWVrTnVtYmVycyxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0TW9udGhBY3RpdmVEYXRlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSBtb250aCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUxhYmVsRm9yRGF5VmlldyhkOiBUKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG1vbnRoTGFiZWwgPSBgJHtcbiAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZCkgLSAxXVxuICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fZGF0ZS1zZWxlY3Rpb24gc2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAke21vbnRoTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJpYS1sYWJlbCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcoLi4uZGF0ZXM6IFRbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1vbnRoTGFiZWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChkKSB7XG4gICAgICAgIG1vbnRoTGFiZWwgKz0gYCR7XG4gICAgICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9udGhMYWJlbDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKFxuICAgIHdlZWtzOiBEYXk8VD5bXVtdLFxuICAgIHdlZWtOdW1iZXJzOiBudW1iZXJbXSxcbiAgICBpc1dpZGVOZXh0TW9udGg6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrTnVtYmVyczogRGF5PFQ+W10gPSAoXG4gICAgICB0aGlzLl93aWRlXG4gICAgICAgID8gWy4uLnRoaXMuX3dlZWtzLCAuLi50aGlzLl9uZXh0TW9udGhXZWVrc11cbiAgICAgICAgOiBpc1dpZGVOZXh0TW9udGhcbiAgICAgICAgICA/IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgICAgOiB0aGlzLl93ZWVrc1xuICAgICkuZmxhdCgpO1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrRGF5czogRGF5PFQ+W10gPSAoXG4gICAgICBpc1dpZGVOZXh0TW9udGggPyB0aGlzLl9uZXh0TW9udGhXZWVrcyA6IHRoaXMuX3dlZWtzXG4gICAgKS5mbGF0KCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgQGZvY3Vzb3V0PSR7KGV2ZW50OiBGb2N1c0V2ZW50KSA9PlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVRhYmxlQmx1cihldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KX1cbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgICA+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgJHt0aGlzLndlZWtOdW1iZXJzID8gaHRtbGA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+PC90aD5gIDogbm90aGluZ31cbiAgICAgICAgICAgICR7dGhpcy5fd2Vla2RheXMubWFwKFxuICAgICAgICAgICAgICAod2Vla0RheTogV2Vla2RheSwgaW5kZXg6IG51bWJlcikgPT4gaHRtbGBcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtEYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBTdW5kYXlzIGhhdmUgaW5kZXggNywgd2hpbGUgdGhlaXIgd2Vla0RheVZhbHVlIGlzIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzOiBEYXk8VD5bXSA9IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrRGF5cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrRGF5VmFsdWUgPT09IChpbmRleCArIDEpICUgNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKGRheXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke3dlZWtEYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtEYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7d2Vla3MubWFwKCh3ZWVrOiBEYXk8VD5bXSwgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dPZmZzZXQ6IG51bWJlciA9IERBWVNfUEVSX1JPVyAtIHdlZWsubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwICYmIGZpcnN0Um93T2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy53ZWVrTnVtYmVyc1xuICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7d2Vla051bWJlcnNbMF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUgPT09IHdlZWtOdW1iZXJzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKGRheXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NiYi1jYWxlbmRhci13ZWVrbnVtYmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JHtgJHtpMThuQ2FsZW5kYXJXZWVrTnVtYmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3dlZWtOdW1iZXJzWzBdfWB9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyc1swXX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAgICR7Wy4uLkFycmF5KGZpcnN0Um93T2Zmc2V0KS5rZXlzKCldLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gaHRtbGA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RkPmAsXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlDZWxscyh3ZWVrKX1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtOdW1iZXJzW3Jvd0luZGV4XX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXM6IERheTxUPltdID0gd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXk6IERheTxUPikgPT4gZGF5LndlZWtWYWx1ZSA9PT0gd2Vla051bWJlcnNbcm93SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcnNbcm93SW5kZXhdfWB9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtOdW1iZXJzW3Jvd0luZGV4XX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlDZWxscyh3ZWVrKX1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgaW4gb3JpZW50YXRpb249J3ZlcnRpY2FsJy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVWZXJ0aWNhbChcbiAgICB3ZWVrczogRGF5PFQ+W11bXSxcbiAgICB3ZWVrTnVtYmVyczogbnVtYmVyW10sXG4gICAgbmV4dE1vbnRoQWN0aXZlRGF0ZT86IFQsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCB3ZWVrT2Zmc2V0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3RXZWVrT2Zmc2V0KFxuICAgICAgbmV4dE1vbnRoQWN0aXZlRGF0ZSA/PyB0aGlzLl9hY3RpdmVEYXRlLFxuICAgICk7XG4gICAgY29uc3Qgd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzOiBEYXk8VD5bXSA9IChcbiAgICAgIHRoaXMuX3dpZGVcbiAgICAgICAgPyBbLi4udGhpcy5fd2Vla3MsIC4uLnRoaXMuX25leHRNb250aFdlZWtzXVxuICAgICAgICA6IG5leHRNb250aEFjdGl2ZURhdGVcbiAgICAgICAgICA/IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgICAgOiB0aGlzLl93ZWVrc1xuICAgICkuZmxhdCgpO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgIEBmb2N1c291dD0keyhldmVudDogRm9jdXNFdmVudCkgPT5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgJHtuZXh0TW9udGhBY3RpdmVEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gbm90aGluZ1xuICAgICAgICAgICAgICAgICAgICA6IGh0bWxgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+PC90aD5gfVxuICAgICAgICAgICAgICAgICAgJHt3ZWVrTnVtYmVycy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICh3ZWVrTnVtYmVyOiBudW1iZXIpID0+IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla251bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrTnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla1ZhbHVlID09PSB3ZWVrTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcn1gfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWJvZHlcIj5cbiAgICAgICAgICAke3dlZWtzLm1hcCgod2VlazogRGF5PFQ+W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdlZWtkYXkgPSB0aGlzLl93ZWVrZGF5c1tyb3dJbmRleF07XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RhYmxlRGF5cyA9IHRoaXMuX3dpZGUgPyBbLi4ud2VlaywgLi4udGhpcy5fbmV4dE1vbnRoV2Vla3Nbcm93SW5kZXhdXSA6IHdlZWs7XG4gICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7bmV4dE1vbnRoQWN0aXZlRGF0ZVxuICAgICAgICAgICAgICAgICAgPyBub3RoaW5nXG4gICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla2RheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKHNlbGVjdGFibGVEYXlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3ZWVrZGF5Lm5hcnJvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke3dlZWtkYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtkYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgJHtyb3dJbmRleCA8IHdlZWtPZmZzZXRcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RkPmBcbiAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWspfVxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjZWxscyBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheUNlbGxzKHdlZWs6IERheTxUPltdKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXk6IERheTxUPikgPT4ge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSBzYmItY2FsZW5kYXJfX2RheS1jZWxsXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT0ke2RheS52YWx1ZX0+XG4gICAgICAgICAgICA8c2JiLWNhbGVuZGFyLWRheVxuICAgICAgICAgICAgICBzbG90PSR7ZGF5LnZhbHVlfVxuICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9zZWxlY3REYXRlKGRheS5kYXRlVmFsdWUpfVxuICAgICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZ0LCBkYXkpfVxuICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLWRheT5cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgIDwvdGQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNZZWFyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzWWVhckRpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+JHt0aGlzLl9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpfTwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoMSksXG4gICAgICAgICAgaTE4bk5leHRZZWFyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX25leHRZZWFyRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtb3ZlcmZsb3ctYnJlYWtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUtbW9udGgtdmlld1wiPlxuICAgICAgICAgICR7dGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEgKyAxKSA6IG5vdGhpbmd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSB5ZWFyIGZvciB0aGUgbW9udGhseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19tb250aC1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7YCR7aTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLl9jaG9zZW5ZZWFyfWB9XG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Nob3NlblllYXJ9ICR7dGhpcy5fd2lkZSA/IGAgLSAke3RoaXMuX2Nob3NlblllYXIhICsgMX1gIDogbm90aGluZ31cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3RoaXMuX2Nob3NlblllYXJ9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoVGFibGUobW9udGhzOiBNb250aENlbGxbXVtdLCB5ZWFyOiBudW1iZXIpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgICA+XG4gICAgICAgICR7dGhpcy5fd2lkZVxuICAgICAgICAgID8gaHRtbGA8dGhlYWQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiIGNvbHNwYW49JHtNT05USFNfUEVSX1JPV30+JHt5ZWFyfTwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7bW9udGhzLm1hcChcbiAgICAgICAgICAgIChyb3c6IE1vbnRoQ2VsbFtdKSA9PiBodG1sYFxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgJHtyb3cubWFwKChtb250aDogTW9udGhDZWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci1tb250aFxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt5ZWFyfS0ke21vbnRoLnZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9vbk1vbnRoU2VsZWN0aW9uKG1vbnRoLm1vbnRoVmFsdWUsIHllYXIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLW1vbnRoPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgdGhlIG1vbnRoIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfb25Nb250aFNlbGVjdGlvbihtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IG1vbnRoO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnZGF5JztcbiAgICB0aGlzLl9pbml0KFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgeWVhcixcbiAgICAgICAgdGhpcy5fY2hvc2VuTW9udGgsXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICApLFxuICAgICk7XG4gICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB0aGlzLl9lbWl0TW9udGhDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyWWVhclZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXJSYW5nZSgtWUVBUlNfUEVSX1BBR0UpLFxuICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aFwiPiR7dGhpcy5fY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpfTwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgaTE4bk5leHRZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX25leHRZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1vdmVyZmxvdy1icmVha1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyLXZpZXdcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl95ZWFycyl9XG4gICAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX25leHRNb250aFllYXJzLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBidXR0b24gYXJyb3cgZm9yIGFsbCB0aGUgdmlld3MuICovXG4gIHByaXZhdGUgX2dldEFycm93KFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgc2l6ZT1cIm1cIlxuICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC0ke2RpcmVjdGlvbn0tc21hbGxcIlxuICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbH1cbiAgICAgIEBjbGljaz0ke2NsaWNrfVxuICAgICAgP2Rpc2FibGVkPSR7ZGlzYWJsZWR9XG4gICAgICBpZD1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtJHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgcmFuZ2UgZm9yIHRoZSB5ZWFybHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KClbMF07XG4gICAgY29uc3QgbGFzdFllYXJBcnJheTogbnVtYmVyW10gPSAodGhpcy5fd2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnMpLmZsYXQoKTtcbiAgICBjb25zdCBsYXN0WWVhcjogbnVtYmVyID0gbGFzdFllYXJBcnJheVtsYXN0WWVhckFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHllYXJMYWJlbCA9IGAke2ZpcnN0WWVhcn0gLSAke2xhc3RZZWFyfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNiYi1jYWxlbmRhcl9feWVhci1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3llYXJMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9yZXNldENhbGVuZGFyVmlld0FuZEVtaXRNb250aENoYW5nZSh0cnVlKX1cbiAgICAgID5cbiAgICAgICAgJHt5ZWFyTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC11cC1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5IHJvbGU9XCJzdGF0dXNcIj4gJHt5ZWFyTGFiZWx9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlWWVhclRhYmxlKHllYXJzOiBudW1iZXJbXVtdLCBzaGlmdFJpZ2h0ID0gZmFsc2UpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDx0YWJsZVxuICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgID5cbiAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAke3llYXJzLm1hcChcbiAgICAgICAgICAocm93OiBudW1iZXJbXSkgPT5cbiAgICAgICAgICAgIGh0bWxgIDx0cj5cbiAgICAgICAgICAgICAgJHtyb3cubWFwKCh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXllYXJcbiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHtTdHJpbmcoeWVhcil9XG4gICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25ZZWFyU2VsZWN0aW9uKHllYXIsIHNoaWZ0UmlnaHQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXllYXI+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIC8vIFRPRE86IFdlIGRpc2FibGUgU1NSIGZvciBjYWxlbmRhciBmb3Igbm93LiBGaWd1cmUgb3V0LCBpZiB0aGVyZSBpcyBhIHdheVxuICAgICAgLy8gdG8gZW5hYmxlIGl0LCB3aGlsZSBjb25zaWRlcmluZyBpMThuIGFuZCBkYXRlIGluZm9ybWF0aW9uLlxuICAgICAgcmV0dXJuIGh0bWxgJHtub3RoaW5nfWA7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgaWYgKHRoaXMuX2NvbnRhaW5pbmdGb2N1cykge1xuICAgICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMuX25leHRDYWxlbmRhclZpZXc7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnc2hvdycpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ3RyYW5zaXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdGFydFRhYmxlVHJhbnNpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCd0cmFuc2l0aW9uJyk7XG4gICAgdGhpcy5zaGFkb3dSb290XG4gICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlJylcbiAgICAgID8uZm9yRWFjaCgoZSkgPT4gZS5jbGFzc0xpc3QudG9nZ2xlKCdzYmItY2FsZW5kYXJfX3RhYmxlLWhpZGUnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX193cmFwcGVyXCI+JHt0aGlzLl9nZXRWaWV3KCl9PC9kaXY+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWNhbGVuZGFyJzogU2JiQ2FsZW5kYXJFbGVtZW50O1xuICB9XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBtb250aGNoYW5nZTogU2JiTW9udGhDaGFuZ2VFdmVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUN5REEsSUFBYSxzQkFBYixjQUF5QyxNQUFLO0NBRzVDLElBQVcsUUFBSztBQUNkLFNBQU8sS0FBSzs7Q0FHZCxZQUFtQixPQUFxQjtBQUN0QyxRQUFNLGVBQWU7R0FBRSxTQUFTO0dBQU0sVUFBVTtHQUFNLENBQUM7QUFDdkQsT0FBSyxTQUFTLE9BQU8sT0FBTyxTQUFTLEVBQUUsQ0FBQzs7Ozs7Ozs7SUE2RS9CLDRCQUFrQjttQkFBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FBckMsMkJBQXFDLFlBQVU7Ozt1QkFtQnpELFdBQVcsRUFDWCxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQTt1QkFJM0IsVUFBVSxDQUFBO3NCQU1WLFdBQVcsRUFDWCxVQUFVLENBQUE7c0JBT1YsV0FBVyxFQUNYLFVBQVUsQ0FBQTs7SUFJVixXQUFXO0lBQ1gsc0JBQXNCLEdBQTBCLGFBQy9DLEVBQUUsbUJBQW1CLFNBQVMsQ0FDL0I7SUFDQSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUE7SUFBQzsrQkFNM0IsVUFBVSxDQUFBOzRCQThCVixPQUFPLENBQUE7NkJBR1AsU0FBUyxFQUFFLFdBQVcsZUFBZSxDQUFDLENBQUE7OEJBSXRDLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBOzhCQUczQixXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBZ0IsTUFBTTtJQUFTLENBQUMsQ0FBQTs4QkFNdEQsT0FB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
|
|
1450
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LUNCeXlrc3k4LmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5zY3NzP2lubGluZSIsIi4uLy4uLy4uL3NyYy9lbGVtZW50cy9jYWxlbmRhci9jYWxlbmRhci9jYWxlbmRhci5jb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiQHVzZSAnLi4vLi4vY29yZS9zdHlsZXMnIGFzIHNiYjtcblxuOmhvc3Qge1xuICBkaXNwbGF5OiBibG9jaztcblxuICAvLyBXZSBhZGQgd2lkdGggZGVmaW5pdGlvbiB0byBob3N0LCB0byBtYWtlIG92ZXJ3cml0aW5nIGVhc3kgZm9yIGNvbnN1bWVycy5cbiAgd2lkdGg6IG1heC1jb250ZW50O1xuXG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZTogI3tzYmIucHgtdG8tcmVtLWJ1aWxkKDQ0KX07XG5cbiAgLy8gTWF0Y2ggRmlnbWEgZGVzaWduXG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtYm9yZGVyLXJhZGl1czogY2FsYyhcbiAgICB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy00eCkgKyB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1ib3JkZXItd2lkdGgpXG4gICk7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKFxuICAgIC0tc2JiLWRpc2FibGUtYW5pbWF0aW9uLWR1cmF0aW9uLFxuICAgIHZhcigtLXNiYi1hbmltYXRpb24tZHVyYXRpb24tMngpXG4gICk7XG5cbiAgQGluY2x1ZGUgc2JiLm1xKCRmcm9tOiBzbWFsbCkge1xuICAgIC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtaGVpZ2h0OiAje3NiYi5weC10by1yZW0tYnVpbGQoNDgpfTtcbiAgfVxufVxuXG46aG9zdCg6c3RhdGUoZW5oYW5jZWQpKSB7XG4gIC0tc2JiLWNhbGVuZGFyLWNlbGwtcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1zcGFjaW5nLWZpeGVkLTN4KTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fd3JhcHBlciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBibG9jaztcbiAgdHJhbnNpdGlvbi1kdXJhdGlvbjogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtdHJhbnNpdGlvbi1kdXJhdGlvbik7XG59XG5cbi5zYmItY2FsZW5kYXJfX2NvbnRyb2xzIHtcbiAgd2lkdGg6IDEwMCU7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLWdhcCk7XG4gIG1hcmdpbi1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLW1hcmdpbi1ibG9jay1lbmQpO1xufVxuXG4uc2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aCB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IHZhcigtLXNiYi1jYWxlbmRhci10YWJsZXMtZ2FwKTtcbn1cblxuI3NiYi1jYWxlbmRhcl9fY29udHJvbHMtcHJldmlvdXMsXG4jc2JiLWNhbGVuZGFyX19jb250cm9scy1uZXh0IHtcbiAgLXdlYmtpdC10YXAtaGlnaGxpZ2h0LWNvbG9yOiB0cmFuc3BhcmVudDtcbn1cblxuLnNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGUge1xuICBAaW5jbHVkZSBzYmIuYnV0dG9uLXJlc2V0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIG1hcmdpbjogYXV0bztcbiAgaGVpZ2h0OiB2YXIoLS1zYmItY2FsZW5kYXItY29udHJvbC12aWV3LWNoYW5nZS1oZWlnaHQpO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS1zKTtcbiAgbGV0dGVyLXNwYWNpbmc6IHZhcigtLXNiYi10eXBvLWxldHRlci1zcGFjaW5nLXRleHQpO1xuICB0ZXh0LXRyYW5zZm9ybTogY2FwaXRhbGl6ZTtcbiAgY3Vyc29yOiB2YXIoLS1zYmItY3Vyc29yLXBvaW50ZXIpO1xuICBwYWRkaW5nLWlubGluZTogdmFyKC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtcGFkZGluZy1pbmxpbmUpO1xuICBib3JkZXItcmFkaXVzOiB2YXIoLS1zYmItYm9yZGVyLXJhZGl1cy1pbmZpbml0eSk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWJhY2tncm91bmQpO1xuICBjb2xvcjogdmFyKC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtY29sb3IpO1xuICB0cmFuc2l0aW9uLWR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC10cmFuc2l0aW9uLWR1cmF0aW9uKTtcbiAgdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXRyYW5zaXRpb24tZWFzaW5nLWZ1bmN0aW9uKTtcbiAgdHJhbnNpdGlvbi1wcm9wZXJ0eTogYmFja2dyb3VuZC1jb2xvciwgcGFkZGluZy1ibG9jay1lbmQ7XG5cbiAgJjpkaXNhYmxlZCB7XG4gICAgLS1zYmItY2FsZW5kYXItY29udHJvbC12aWV3LWNoYW5nZS1iYWNrZ3JvdW5kOiBsaWdodC1kYXJrKFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLW1pbGspLFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWFudGhyYWNpdGUpXG4gICAgKTtcbiAgICAtLXNiYi1jYWxlbmRhci1jb250cm9sLXZpZXctY2hhbmdlLWNvbG9yOiBsaWdodC1kYXJrKFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWdyYW5pdGUpLFxuICAgICAgdmFyKC0tc2JiLWNvbG9yLWFsdW1pbml1bSlcbiAgICApO1xuXG4gICAgY3Vyc29yOiB1bnNldDtcbiAgfVxuXG4gICY6Zm9jdXMtdmlzaWJsZSB7XG4gICAgQGluY2x1ZGUgc2JiLmZvY3VzLW91dGxpbmU7XG5cbiAgICBvdXRsaW5lLW9mZnNldDogdmFyKC0tc2JiLXNwYWNpbmctZml4ZWQtMXgpO1xuICB9XG5cbiAgQGluY2x1ZGUgc2JiLmhvdmVyLW1xIHtcbiAgICAmOm5vdCg6YWN0aXZlLCA6ZGlzYWJsZWQpOmhvdmVyIHtcbiAgICAgIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1ob3Zlci1zaGlmdCk7XG4gICAgfVxuICB9XG5cbiAgJjpub3QoOmRpc2FibGVkKTphY3RpdmUge1xuICAgIC0tc2JiLWNhbGVuZGFyLWNvbnRyb2wtdmlldy1jaGFuZ2UtYmFja2dyb3VuZDogdmFyKC0tc2JiLWJhY2tncm91bmQtY29sb3ItMyk7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtbW9udGgtdmlldyxcbi5zYmItY2FsZW5kYXJfX3RhYmxlLXllYXItdmlldyB7XG4gIC0tc2JiLWNhbGVuZGFyLXRhYmxlLWNvbHVtbi1zcGFjZXM6IDY7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLW92ZXJmbG93LWJyZWFrIHtcbiAgLy8gV2UgaGF2ZSB0byBjdXQgdGhlIG5lZ2F0aXZlIG1hcmdpbiB3aGljaCBpcyBidWlsdCBieSB0aGUgY29udGFpbmluZyBzYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lci5cbiAgLy8gT3ZlcmZsb3c6IGhpZGRlbiB3b3VsZCBjdXQgdGhlIGZvY3VzIG91dGxpbmUuIFRoZXJlZm9yZSB3ZSB0YWtlIGBjb250YWluYCBoZXJlLlxuICBjb250YWluOiBsYXlvdXQ7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGdhcDogdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApO1xuICBtYXJnaW4taW5saW5lOiB2YXIoLS1zYmItY2FsZW5kYXItbWFyZ2luKTtcblxuICAvLyBUaGUgcGFkZGluZyBvZiB0aGUgZmlyc3QgYW5kIGxhc3QgY29sdW1uIHNob3VsZCBub3QgYmUgdmlzaWJsZSBpZiBjYWxlbmRhciBpcyBzdHJldGNoZWQuXG4gIC8vIFRoZXJlZm9yZSB3ZSBuZWVkIGEgbmVnYXRpdmUgaW5saW5lIG1hcmdpbi5cbiAgLy8gQXMgd2UgZG9uJ3Qgd2FudCB0byBzcXVlZXplLCB0aGUgbWFyZ2luIHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gemVyby5cblxuICAvLyBNaW4gd2lkdGggaXMgZXF1YWxzIHRvIHRoZSBub3JtYWwgd2lkdGggb2YgdGhlIGNhbGVuZGFyXG4gIC0tc2JiLWNhbGVuZGFyLW1pbi13aWR0aDogY2FsYyg3ICogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZSkpO1xuXG4gIC8vIFRoZSBvdmVyZmxvdyB2YXJpYWJsZSBpcyBlcXVhbHMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGUgYWN0dWFsIHdpZHRoIGFuZCB0aGUgbWluIHdpZHRoLlxuICAtLXNiYi1jYWxlbmRhci1vdmVyZmxvdzogY2FsYygxMDAlIC0gdmFyKC0tc2JiLWNhbGVuZGFyLW1pbi13aWR0aCkpO1xuXG4gIC8vIFRoZSBzdGFydCBvZmZzZXQgaXMgbmVnYXRpdmUgbWFyZ2luIHdoaWNoIHNob3VsZCBvdmVybGFwIHRoZSBwYXJlbnQgY29udGFpbmVyLiBTaG91bGQgbmV2ZXIgYmUgYSBwb3NpdGl2ZSB2YWx1ZS5cbiAgLS1zYmItY2FsZW5kYXItc3RhcnQtb2Zmc2V0OiBtaW4oXG4gICAgMHB4LFxuICAgIC0xICogKHZhcigtLXNiYi1jYWxlbmRhci1vdmVyZmxvdykgLyB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtY29sdW1uLXNwYWNlcykpXG4gICk7XG4gIC0tc2JiLWNhbGVuZGFyLW1hcmdpbjogdmFyKC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldCk7XG5cbiAgOmhvc3QoOnN0YXRlKHdpZGUpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1taW4td2lkdGg6IGNhbGMoXG4gICAgICAyICogNyAqIHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpICsgdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApXG4gICAgKTtcbiAgICAtLXNiYi1jYWxlbmRhci1tYXJnaW46IGNhbGMoMC41ICogdmFyKC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldCkpO1xuICB9XG5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSdob3Jpem9udGFsJ11bd2Vlay1udW1iZXJzXSkgJiB7XG4gICAgLS1zYmItY2FsZW5kYXItbWluLXdpZHRoOiBjYWxjKDggKiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKSk7XG4gIH1cblxuICA6aG9zdChbb3JpZW50YXRpb249J2hvcml6b250YWwnXVt3ZWVrLW51bWJlcnNdOnN0YXRlKHdpZGUpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1taW4td2lkdGg6IGNhbGMoXG4gICAgICAyICogOCAqIHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpICsgdmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlcy1nYXApXG4gICAgKTtcbiAgfVxuXG4gIC8vIFRoZSBjb250YWluZXIncyBtaW4td2lkdGggaXMgc2V0IGluIHZlcnRpY2FsIG1vZGU7XG4gIC8vIHRoZSB2YWx1ZSBgY2FsYyg3ICogdmFyKC0tc2JiLWNhbGVuZGFyLWNlbGwtc2l6ZSkpYCBpcyBmaW5lXG4gIC8vIGNvbnNpZGVyaW5nIHRoYXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdlZWtzIGluIGEgbW9udGggaXMgNiwgcGx1cyAxIGZvciB0aGUgaGVhZGVyIGF0IHRoZSB0YWJsZSdzIGxlZnQgc2lkZS5cbiAgOmhvc3QoW29yaWVudGF0aW9uPSd2ZXJ0aWNhbCddKSAmIHtcbiAgICBtaW4td2lkdGg6IHZhcigtLXNiYi1jYWxlbmRhci1taW4td2lkdGgpO1xuXG4gICAgLy8gVGhlIHZhcmlhYmxlIHRoYXQgZGVmaW5lcyB0aGUgbWFyZ2luIGlzIHNldCB0byAwIHRvIGNvcnJlY3RseSBkaXNwbGF5IHRoZSB0YWJsZSBpZiBjb25zdW1lcnMgc2V0IGEgY3VzdG9tIHdpZHRoLlxuICAgIC0tc2JiLWNhbGVuZGFyLXN0YXJ0LW9mZnNldDogMDtcbiAgfVxuXG4gIC8vIFRoZSBtaW4td2lkdGggaW4gd2lkZSBpcyBjYWxjdWxhdGVkIGFzIChtYXggbnVtYmVyIG9mIHdlZWtzIGluIGEgbW9udGgpICogKGRpc3BsYXllZCBtb250aHMpICsgKGhlYWRlciBjb2x1bW4pID0gNiAqIDIgKyAxID0gMTMuXG4gIDpob3N0KFtvcmllbnRhdGlvbj0ndmVydGljYWwnXTpzdGF0ZSh3aWRlKSkgJiB7XG4gICAgLS1zYmItY2FsZW5kYXItbWluLXdpZHRoOiBjYWxjKFxuICAgICAgMTMgKiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKSArIHZhcigtLXNiYi1jYWxlbmRhci10YWJsZXMtZ2FwKVxuICAgICk7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUge1xuICB3aWR0aDogMTAwJTtcbiAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTtcbiAgaGVpZ2h0OiBtYXgtY29udGVudDtcblxuICBhbmltYXRpb246IHtcbiAgICBuYW1lOiBzaG93O1xuICAgIGR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgfVxuXG4gICYuc2JiLWNhbGVuZGFyX190YWJsZS1oaWRlIHtcbiAgICAtLXNiYi1jYWxlbmRhci1jZWxsLXRyYW5zaXRpb24tZHVyYXRpb246IDBtcztcblxuICAgIGFuaW1hdGlvbjoge1xuICAgICAgbmFtZTogaGlkZTtcbiAgICAgIGR1cmF0aW9uOiB2YXIoLS1zYmItY2FsZW5kYXItdGFibGUtYW5pbWF0aW9uLWR1cmF0aW9uKTtcbiAgICB9XG4gIH1cblxuICA6aG9zdCg6bm90KDpzdGF0ZSh3aWRlKSkpICYge1xuICAgIC8vIER1ZSB0byBhIFNhZmFyaSBpT1MgcmVuZGVyaW5nIGJ1ZyB3ZSBuZWVkIHRvIGRlZmluZSBtaW4td2lkdGggYXMgd2VsbC5cbiAgICAvLyBPdGhlcndpc2UsIGFmdGVyIG9yaWVudGF0aW9uIGNoYW5nZSwgdGhlcmUgaXMgYSB3cm9uZyB3aWR0aCBpZiBwbGFjZWQgaW4gYW4gc2JiLWRpYWxvZy5cbiAgICBtaW4td2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyIHtcbiAgLy8gRGVwZW5kaW5nIHdoZXJlIGluIHRoZSBET00gaXQncyB1c2VkLCBpdCdzIHBvc3NpYmxlIHRoYXQgYnJvd3NlciBkZWZhdWx0cyBzZXQgdGV4dC1hbGlnbiB0byBsZWZ0LlxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWJvZHkge1xuICAvLyBEZXBlbmRpbmcgd2hlcmUgaW4gdGhlIERPTSBpdCdzIHVzZWQsIGl0J3MgcG9zc2libGUgdGhhdCBicm93c2VyIGRlZmF1bHRzIHNldCB0ZXh0LWFsaWduIHRvIGxlZnQuXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyLWNlbGwsXG4uc2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbCB7XG4gIHdpZHRoOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1zaXplKTtcbiAgY29sb3I6IHZhcigtLXNiYi1jYWxlbmRhci1oZWFkZXItY29sb3IpO1xuICBwYWRkaW5nOiAwO1xuICBmb250LXNpemU6IHZhcigtLXNiYi10ZXh0LWZvbnQtc2l6ZS14cyk7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiB2YXIoLS1zYmItdHlwby1sZXR0ZXItc3BhY2luZy10ZXh0KTtcblxuICA6aG9zdCg6bm90KFttdWx0aXBsZV0pKSAmIHtcbiAgICBoZWlnaHQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXNpemUpO1xuICB9XG59XG5cbi5zYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsIHtcbiAgcGFkZGluZy1ibG9jay1lbmQ6IHZhcigtLXNiYi1jYWxlbmRhci1jZWxsLXBhZGRpbmctYmxvY2stZW5kKTtcbn1cblxuLnNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgcGFkZGluZzogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuXG4uc2JiLWNhbGVuZGFyX19kYXktY2VsbCB7XG4gIHBhZGRpbmctYmxvY2stZW5kOiB2YXIoLS1zYmItY2FsZW5kYXItY2VsbC1wYWRkaW5nLWJsb2NrLWVuZCk7XG59XG5cbnNiYi1jYWxlbmRhci1kYXkge1xuICA6aG9zdCg6bm90KDpzdGF0ZShlbmhhbmNlZCkpKSAmIHtcbiAgICAtLXNiYi1jYWxlbmRhci1jZWxsLWp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1oZWlnaHQ6ICN7c2JiLnB4LXRvLXJlbS1idWlsZCg0NCl9O1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1leHRyYS1kaXNwbGF5OiBub25lO1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS12YWx1ZS1oZWlnaHQ6IHVuc2V0O1xuICAgIC0tc2JiLWNhbGVuZGFyLWRheS1jcm9zc2VkLW91dC10b3A6IDUwJTtcbiAgICAtLXNiYi1jYWxlbmRhci1kYXktY3Jvc3NlZC1vdXQtdHJhbnNsYXRlOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgcm90YXRlKC00NWRlZyk7XG4gIH1cbn1cblxuQGtleWZyYW1lcyBzaG93IHtcbiAgZnJvbSB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlLWFuaW1hdGlvbi1zaGlmdCkpO1xuICB9XG5cbiAgdG8ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDAlKTtcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGhpZGUge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwJSk7XG4gIH1cblxuICB0byB7XG4gICAgb3BhY2l0eTogMDtcbiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkodmFyKC0tc2JiLWNhbGVuZGFyLXRhYmxlLWFuaW1hdGlvbi1zaGlmdCkpO1xuICB9XG59XG4iLCJpbXBvcnQge1xuICB0eXBlIENTU1Jlc3VsdEdyb3VwLFxuICBodG1sLFxuICBpc1NlcnZlcixcbiAgbm90aGluZyxcbiAgdHlwZSBQcm9wZXJ0eVZhbHVlcyxcbiAgdHlwZSBUZW1wbGF0ZVJlc3VsdCxcbiAgdW5zYWZlQ1NTLFxufSBmcm9tICdsaXQnO1xuaW1wb3J0IHsgcHJvcGVydHksIHN0YXRlIH0gZnJvbSAnbGl0L2RlY29yYXRvcnMuanMnO1xuXG5pbXBvcnQgeyBTYmJTZWNvbmRhcnlCdXR0b25FbGVtZW50IH0gZnJvbSAnLi4vLi4vYnV0dG9uLnB1cmUudHMnO1xuaW1wb3J0IHtcbiAgYm94U2l6aW5nU3R5bGVzLFxuICB0eXBlIERhdGVBZGFwdGVyLFxuICBEQVlTX1BFUl9ST1csXG4gIGRlZmF1bHREYXRlQWRhcHRlcixcbiAgZm9yY2VUeXBlLFxuICBoYW5kbGVEaXN0aW5jdENoYW5nZSxcbiAgaTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvbixcbiAgaTE4bkNhbGVuZGFyV2Vla051bWJlcixcbiAgaTE4bk5leHRNb250aCxcbiAgaTE4bk5leHRZZWFyLFxuICBpMThuTmV4dFllYXJSYW5nZSxcbiAgaTE4blByZXZpb3VzTW9udGgsXG4gIGkxOG5QcmV2aW91c1llYXIsXG4gIGkxOG5QcmV2aW91c1llYXJSYW5nZSxcbiAgaTE4blllYXJNb250aFNlbGVjdGlvbixcbiAgaXNBcnJvd0tleU9yUGFnZUtleXNQcmVzc2VkLFxuICBNT05EQVksXG4gIE1PTlRIU19QRVJfUEFHRSxcbiAgTU9OVEhTX1BFUl9ST1csXG4gIHBsYWluRGF0ZSxcbiAgcmVhZENvbmZpZyxcbiAgU2JiRWxlbWVudCxcbiAgdHlwZSBTYmJFbGVtZW50VHlwZSxcbiAgU2JiTGFuZ3VhZ2VDb250cm9sbGVyLFxuICBTYmJNZWRpYU1hdGNoZXJDb250cm9sbGVyLFxuICBTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUsXG4gIHR5cGUgU2JiT3JpZW50YXRpb24sXG4gIFNiYlNjcmVlblJlYWRlck9ubHlFbGVtZW50LFxuICBUSFVSU0RBWSxcbiAgVFVFU0RBWSxcbiAgV0VETkVTREFZLFxuICBZRUFSU19QRVJfUEFHRSxcbiAgWUVBUlNfUEVSX1JPVyxcbn0gZnJvbSAnLi4vLi4vY29yZS50cyc7XG5pbXBvcnQgeyBTYmJJY29uRWxlbWVudCB9IGZyb20gJy4uLy4uL2ljb24ucHVyZS50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhckRheUVsZW1lbnQgfSBmcm9tICcuLi9jYWxlbmRhci1kYXkvY2FsZW5kYXItZGF5LmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhck1vbnRoRWxlbWVudCB9IGZyb20gJy4uL2NhbGVuZGFyLW1vbnRoL2NhbGVuZGFyLW1vbnRoLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhcldlZWtkYXlFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItd2Vla2RheS9jYWxlbmRhci13ZWVrZGF5LmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhcldlZWtudW1iZXJFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXItd2Vla251bWJlci9jYWxlbmRhci13ZWVrbnVtYmVyLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgeyBTYmJDYWxlbmRhclllYXJFbGVtZW50IH0gZnJvbSAnLi4vY2FsZW5kYXIteWVhci9jYWxlbmRhci15ZWFyLmNvbXBvbmVudC50cyc7XG5pbXBvcnQgdHlwZSB7IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IH0gZnJvbSAnLi4vY29tbW9uL2NhbGVuZGFyLWNlbGwtYmFzZS1lbGVtZW50LnRzJztcblxuaW1wb3J0IHN0eWxlIGZyb20gJy4vY2FsZW5kYXIuc2Nzcz9pbmxpbmUnO1xuXG5leHBvcnQgY2xhc3MgU2JiTW9udGhDaGFuZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmFuZ2U6IHJlYWRvbmx5IERheVtdO1xuXG4gIHB1YmxpYyBnZXQgcmFuZ2UoKTogcmVhZG9ubHkgRGF5W10ge1xuICAgIHJldHVybiB0aGlzLl9yYW5nZTtcbiAgfVxuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihyYW5nZTogcmVhZG9ubHkgRGF5W10pIHtcbiAgICBzdXBlcignbW9udGhjaGFuZ2UnLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pO1xuICAgIHRoaXMuX3JhbmdlID0gT2JqZWN0LmZyZWV6ZShyYW5nZSB8fCBbXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIG5lZWRlZCBpbiB5ZWFyIGFuZCBtb250aCB2aWV3cyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBuZXh0IGVsZW1lbnQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqXG4gKiBUaGUgY2VsbCdzIGluZGV4IGFuZCB0aGUgZWxlbWVudCdzIGluZGV4IGluIGl0cyBtb250aCAvIHllYXIgYmF0Y2ggbXVzdCBiZSBkaXN0aW5ndWlzaGVkOlxuICogdGhlIGZpcnN0IGlzIHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCBpbiB0aGUgYXJyYXkgb2YgYWxsIHRoZSByZW5kZXJlZCBjZWxscywgd2hpbGUgdGhlIHNlY29uZCBpcyB0aGUgaW5kZXggb2YgdGhlIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIHRhYmxlLlxuICogSW4gbm9uLXdpZGUgbW9kZSwgdGhlIHd0byBhcmUgdGhlIHNhbWUsIHdoaWxlIGluIHdpZGUgbW9kZSB0aGUgY2VsbCdzIGluZGV4IGNhbiBnbyBmcm9tIDAgdG8gNDcgZm9yIHllYXJzIGFuZCBmcm9tIDAgdG8gMjMgZm9yIG1vbnRocyxcbiAqIHdoaWxlIHRoZSBlbGVtZW50IGluZGV4IGdvZXMgZnJvbSAwIHRvLCByZXNwZWN0aXZlbHksIDIzIGFuZCAxMS5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uTW9udGhZZWFyVmlld3NQYXJhbWV0ZXJzIHtcbiAgLyoqIFRoZSBlbGVtZW50IGluZGV4IHdpdGhpbiBpdHMgeWVhciBvciBtb250aCByYW5nZS4gKi9cbiAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIEluIHdpZGUgbW9kZSwgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZWNvbmQgcGFuZWwsIG9yLCBhbHRlcm5hdGl2ZWx5LCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBmaXJzdCBwYW5lbC4gKi9cbiAgb2Zmc2V0Rm9yV2lkZU1vZGU6IG51bWJlcjtcbiAgLyoqIFRoZSBpbmRleCBvZiB0aGUgbGFzdCBlbGVtZW50IHdpdGhpbiB0aGUgZWxlbWVudCdzIG1vbnRoIChvciB5ZWFyIHJhbmdlKS4gKi9cbiAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBudW1iZXI7XG4gIC8qKiBUaGUgbnVtYmVyIG9mIGNlbGxzIGRpc3BsYXllZCBpbiBhIHNpbmdsZSByb3csIGRlcGVuZGluZyBvbiB0aGUgcmVuZGVyZWQgdmlldy4gKi9cbiAgdmVydGljYWxPZmZzZXQ6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIG5lZWRlZCBpbiBkYXkgdmlldyB0byBjb3JyZWN0bHkgY2FsY3VsYXRlIHRoZSBuZXh0IGVsZW1lbnQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi5cbiAqXG4gKiBJbiBvcmllbnRhdGlvbj0ndmVydGljYWwnLCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIGFueSBhcnJheS9pbmRleCB0byBjYWxjdWxhdGUgdGhlIGVsZW1lbnQgdG8gbmF2aWdhdGUgdG8sXG4gKiBzbyBjYWxjdWxhdGlvbnMgb24gZGF0ZXMgbXVzdCBiZSBkb25lLCB3aGljaCBzaG91bGQgY29uc2lkZXIgdmlldyBib3VuZGFyaWVzLCBvZmZzZXRzIGFuZCBtb250aCdzIGxlbmd0aC5cbiAqL1xuaW50ZXJmYWNlIENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMge1xuICAvKiogVGhlIGZpcnN0IGRheSByZW5kZXJlZC4gKi9cbiAgZmlyc3REYXlJblZpZXc6IHN0cmluZyB8IG51bGw7XG4gIC8qKiBUaGUgbGFzdCBkYXkgcmVuZGVyZWQuIEl0IGRlcGVuZHMgb24gdGhlICd3aWRlJyB2YWx1ZS4gKi9cbiAgbGFzdERheUluVmlldzogc3RyaW5nIHwgbnVsbDtcbiAgLyoqIFRoZSBvZmZzZXQgZnJvbSB0aGUgZmlyc3QgZGF5IG9mIHRoZSB3ZWVrIChNb25kYXkpIG9mIHRoZSBmaXJzdCByZW5kZXJlZCBtb250aC4gKi9cbiAgZmlyc3RNb250aE9mZnNldDogbnVtYmVyO1xuICAvKiogVGhlIG51bWJlciBvZiBkYXlzIGluIHRoZSBmaXJzdCByZW5kZXJlZCBtb250aC4gKi9cbiAgZmlyc3RNb250aExlbmd0aDogbnVtYmVyO1xuICAvKiogVGhlIG9mZnNldCBmcm9tIHRoZSBmaXJzdCBkYXkgb2YgdGhlIHdlZWsgKE1vbmRheSkgb2YgdGhlIHNlY29uZCByZW5kZXJlZCBtb250aC4gSWYgd2lkZSBpcyBmYWxzZSwgaXQncyBlcXVhbCB0byB6ZXJvLiAqL1xuICBzZWNvbmRNb250aE9mZnNldDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERheTxUID0gRGF0ZT4ge1xuICAvKiogRGF0ZSBhcyBJU08gc3RyaW5nLiAqL1xuICB2YWx1ZTogc3RyaW5nO1xuICBkYXlWYWx1ZTogc3RyaW5nO1xuICBtb250aFZhbHVlOiBzdHJpbmc7XG4gIHllYXJWYWx1ZTogc3RyaW5nO1xuICBkYXRlVmFsdWU6IFQ7XG4gIHdlZWtWYWx1ZTogbnVtYmVyO1xuICB3ZWVrRGF5VmFsdWU6IG51bWJlcjtcbn1cblxuLyoqIEBkZXByZWNhdGVkIHVzZSBNb250aENlbGwgKi9cbmV4cG9ydCBpbnRlcmZhY2UgTW9udGgge1xuICB2YWx1ZTogc3RyaW5nO1xuICBsb25nVmFsdWU6IHN0cmluZztcbiAgbW9udGhWYWx1ZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1vbnRoQ2VsbCB7XG4gIHZhbHVlOiBzdHJpbmc7XG4gIG1vbnRoVmFsdWU6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXZWVrZGF5IHtcbiAgbG9uZzogc3RyaW5nO1xuICBuYXJyb3c6IHN0cmluZztcbn1cblxuZXhwb3J0IHR5cGUgQ2FsZW5kYXJWaWV3ID0gJ2RheScgfCAnbW9udGgnIHwgJ3llYXInO1xuXG4vKipcbiAqIEl0IGRpc3BsYXlzIGEgY2FsZW5kYXIgd2hpY2ggYWxsb3dzIGNob29zaW5nIGEgZGF0ZS5cbiAqXG4gKiBAc2xvdCAtIFVzZSB0aGUgdW5uYW1lZCBzbG90IHRvIGFkZCBjdXN0b21pemVkIGBzYmItY2FsZW5kYXItZGF5YCBlbGVtZW50cy5cbiAqL1xuZXhwb3J0IGNsYXNzIFNiYkNhbGVuZGFyRWxlbWVudDxUID0gRGF0ZT4gZXh0ZW5kcyBTYmJFbGVtZW50IHtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSByZWFkb25seSBlbGVtZW50TmFtZTogc3RyaW5nID0gJ3NiYi1jYWxlbmRhcic7XG4gIHB1YmxpYyBzdGF0aWMgb3ZlcnJpZGUgZWxlbWVudERlcGVuZGVuY2llczogU2JiRWxlbWVudFR5cGVbXSA9IFtcbiAgICBTYmJDYWxlbmRhckRheUVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJNb250aEVsZW1lbnQsXG4gICAgU2JiQ2FsZW5kYXJXZWVrZGF5RWxlbWVudCxcbiAgICBTYmJDYWxlbmRhcldlZWtudW1iZXJFbGVtZW50LFxuICAgIFNiYkNhbGVuZGFyWWVhckVsZW1lbnQsXG4gICAgU2JiSWNvbkVsZW1lbnQsXG4gICAgU2JiU2NyZWVuUmVhZGVyT25seUVsZW1lbnQsXG4gICAgU2JiU2Vjb25kYXJ5QnV0dG9uRWxlbWVudCxcbiAgXTtcbiAgcHVibGljIHN0YXRpYyBvdmVycmlkZSBzdHlsZXM6IENTU1Jlc3VsdEdyb3VwID0gW2JveFNpemluZ1N0eWxlcywgdW5zYWZlQ1NTKHN0eWxlKV07XG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgZXZlbnRzID0ge1xuICAgIGRhdGVzZWxlY3RlZDogJ2RhdGVzZWxlY3RlZCcsXG4gICAgbW9udGhjaGFuZ2U6ICdtb250aGNoYW5nZScsXG4gIH0gYXMgY29uc3Q7XG5cbiAgLyoqIElmIHNldCB0byB0cnVlLCB0d28gbW9udGhzIGFyZSBkaXNwbGF5ZWQgKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBwcm9wZXJ0eSh7IHR5cGU6IEJvb2xlYW4gfSlcbiAgcHVibGljIGFjY2Vzc29yIHdpZGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKiogVGhlIGluaXRpYWwgdmlldyBvZiB0aGUgY2FsZW5kYXIgd2hpY2ggc2hvdWxkIGJlIGRpc3BsYXllZCBvbiBvcGVuaW5nLiAqL1xuICBAcHJvcGVydHkoKSBwdWJsaWMgYWNjZXNzb3IgdmlldzogQ2FsZW5kYXJWaWV3ID0gJ2RheSc7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIHZhbGlkIGRhdGUuIEFjY2VwdHMgYSBkYXRlIG9iamVjdCBvciBudWxsLlxuICAgKiBBY2NlcHRzIGFuIElTTzg2MDEgZm9ybWF0dGVkIHN0cmluZyAoZS5nLiAyMDI0LTEyLTI0KSBhcyBhdHRyaWJ1dGUuXG4gICAqL1xuICBAcGxhaW5EYXRlKClcbiAgQHByb3BlcnR5KClcbiAgcHVibGljIGFjY2Vzc29yIG1pbjogVCB8IG51bGwgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBUaGUgbWF4aW11bSB2YWxpZCBkYXRlLiBBY2NlcHRzIGEgZGF0ZSBvYmplY3Qgb3IgbnVsbC5cbiAgICogQWNjZXB0cyBhbiBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcgKGUuZy4gMjAyNC0xMi0yNCkgYXMgYXR0cmlidXRlLlxuICAgKi9cbiAgQHBsYWluRGF0ZSgpXG4gIEBwcm9wZXJ0eSgpXG4gIHB1YmxpYyBhY2Nlc3NvciBtYXg6IFQgfCBudWxsID0gbnVsbDtcblxuICAvKiogV2hldGhlciB0aGUgY2FsZW5kYXIgYWxsb3dzIGZvciBtdWx0aXBsZSBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgQGZvcmNlVHlwZSgpXG4gIEBoYW5kbGVEaXN0aW5jdENoYW5nZSgoZTogU2JiQ2FsZW5kYXJFbGVtZW50PFQ+LCBuZXdWYWx1ZTogYm9vbGVhbikgPT5cbiAgICBlLl9vbk11bHRpcGxlQ2hhbmdlZChuZXdWYWx1ZSksXG4gIClcbiAgQHByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3IgbXVsdGlwbGU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvKipcbiAgICogVGhlIHNlbGVjdGVkIGRhdGU6IGFjY2VwdHMgYSBkYXRlIG9iamVjdCwgb3IsIGlmIGBtdWx0aXBsZWAsIGFuIGFycmF5IG9mIGRhdGVzLlxuICAgKi9cbiAgQHByb3BlcnR5KClcbiAgcHVibGljIHNldCBzZWxlY3RlZCh2YWx1ZTogVCB8IFRbXSB8IG51bGwpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gdmFsdWVcbiAgICAgICAgLm1hcCgoZGF0ZUxpa2U6IFQpID0+XG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0VmFsaWREYXRlT3JOdWxsKHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRhdGVMaWtlKSksXG4gICAgICAgIClcbiAgICAgICAgLmZpbHRlcigoZGF0ZTogVCB8IG51bGwpOiBkYXRlIGlzIFQgPT4gZGF0ZSAhPT0gbnVsbClcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAoZGF0ZTogVCkgPT5cbiAgICAgICAgICAgICF0aGlzLl9pc0RheUluUmFuZ2UodGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKGRhdGUpKSB8fCB0aGlzLl9kYXRlRmlsdGVyKGRhdGUpLFxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzZWxlY3RlZERhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRWYWxpZERhdGVPck51bGwoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHZhbHVlKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgICEhc2VsZWN0ZWREYXRlICYmXG4gICAgICAgICghdGhpcy5faXNEYXlJblJhbmdlKHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShzZWxlY3RlZERhdGUpKSB8fFxuICAgICAgICAgIHRoaXMuX2RhdGVGaWx0ZXIoc2VsZWN0ZWREYXRlKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IHNlbGVjdGVkRGF0ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX3NlbGVjdGVkID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcHVibGljIGdldCBzZWxlY3RlZCgpOiBUIHwgVFtdIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGVkO1xuICB9XG4gIEBzdGF0ZSgpIHByaXZhdGUgYWNjZXNzb3IgX3NlbGVjdGVkOiBUIHwgVFtdIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIEEgZnVuY3Rpb24gdXNlZCB0byBmaWx0ZXIgb3V0IGRhdGVzLiAqL1xuICBAcHJvcGVydHkoeyBhdHRyaWJ1dGU6ICdkYXRlLWZpbHRlcicgfSlcbiAgcHVibGljIGFjY2Vzc29yIGRhdGVGaWx0ZXI6ICgoZGF0ZTogVCB8IG51bGwpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqIFRoZSBvcmllbnRhdGlvbiBvZiBkYXlzIGluIHRoZSBjYWxlbmRhci4gKi9cbiAgQHByb3BlcnR5KHsgcmVmbGVjdDogdHJ1ZSB9KSBwdWJsaWMgYWNjZXNzb3Igb3JpZW50YXRpb246IFNiYk9yaWVudGF0aW9uID0gJ2hvcml6b250YWwnO1xuXG4gIC8qKiBXaGV0aGVyIGl0IGhhcyB0byBkaXNwbGF5IHRoZSB3ZWVrIG51bWJlcnMgaW4gYWRkaXRpb24gdG8gd2VlayBkYXlzLiAqL1xuICBAZm9yY2VUeXBlKClcbiAgQHByb3BlcnR5KHsgYXR0cmlidXRlOiAnd2Vlay1udW1iZXJzJywgdHlwZTogQm9vbGVhbiB9KVxuICBwdWJsaWMgYWNjZXNzb3Igd2Vla051bWJlcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIF9kYXRlQWRhcHRlcjogRGF0ZUFkYXB0ZXI8VD4gPSByZWFkQ29uZmlnKCkuZGF0ZXRpbWU/LmRhdGVBZGFwdGVyID8/IGRlZmF1bHREYXRlQWRhcHRlcjtcblxuICAvKiogVGhlIGN1cnJlbnRseSBhY3RpdmUgZGF0ZS4gKi9cbiAgQHN0YXRlKCkgcHJpdmF0ZSBhY2Nlc3NvciBfYWN0aXZlRGF0ZTogVCA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCk7XG5cbiAgLyoqIFRoZSBjdXJyZW50IHdpZGUgcHJvcGVydHkgY29uc2lkZXJpbmcgcHJvcGVydHkgdmFsdWUgYW5kIGJyZWFrcG9pbnRzLiBGcm9tIHplcm8gdG8gc21hbGwgYHdpZGVgIGhhcyBhbHdheXMgdG8gYmUgZmFsc2UuICovXG4gIEBzdGF0ZSgpXG4gIHByaXZhdGUgc2V0IF93aWRlKHdpZGU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLnRvZ2dsZVN0YXRlKCd3aWRlJywgd2lkZSk7XG4gICAgdGhpcy5fd2lkZUludGVybmFsID0gd2lkZTtcbiAgfVxuICBwcml2YXRlIGdldCBfd2lkZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fd2lkZUludGVybmFsO1xuICB9XG4gIC8vIFdlIGtlZXAgdGhlIHN0YXRlIGluIGEgZmllbGQgYmVjYXVzZSBvZiB0aGUgV2ViS2l0IGJ1ZyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzAzNDY3LlxuICAvLyBUT0RPOiByZS1jaGVjayB3aGV0aGVyIGZpZWxkIGlzIG5lZWRlZFxuICBwcml2YXRlIF93aWRlSW50ZXJuYWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAc3RhdGUoKSBwcml2YXRlIGFjY2Vzc29yIF9jYWxlbmRhclZpZXc6IENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gIHByaXZhdGUgX25leHRDYWxlbmRhclZpZXc6IENhbGVuZGFyVmlldyA9ICdkYXknO1xuXG4gIC8qKiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgcmVuZGVyZWQgZGF5IHZpZXc7IHVzZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbi4gKi9cbiAgcHJpdmF0ZSBfa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnM6IENhbGVuZGFyS2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMgPSB7XG4gICAgZmlyc3REYXlJblZpZXc6IG51bGwsXG4gICAgbGFzdERheUluVmlldzogbnVsbCxcbiAgICBmaXJzdE1vbnRoT2Zmc2V0OiAwLFxuICAgIGZpcnN0TW9udGhMZW5ndGg6IDAsXG4gICAgc2Vjb25kTW9udGhPZmZzZXQ6IDAsXG4gIH07XG5cbiAgLyoqIEEgbGlzdCBvZiBkYXlzLCBpbiB0d28gZm9ybWF0cyAobG9uZyBhbmQgc2luZ2xlIGNoYXIpLiAqL1xuICBwcml2YXRlIF93ZWVrZGF5cyE6IFdlZWtkYXlbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgdGhlIGRhdGVzIG9mIHRoZSBtb250aC4gKi9cbiAgcHJpdmF0ZSBfd2Vla3M6IERheTxUPltdW10gPSBbXTtcblxuICAvKiogR3JpZCBvZiBjYWxlbmRhciBjZWxscyByZXByZXNlbnRpbmcgbW9udGhzLiAqL1xuICBwcml2YXRlIF9tb250aHMhOiBNb250aENlbGxbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB5ZWFycy4gKi9cbiAgcHJpdmF0ZSBfeWVhcnMhOiBudW1iZXJbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB5ZWFycyBmb3IgdGhlIHdpZGUgdmlldy4gKi9cbiAgcHJpdmF0ZSBfbmV4dE1vbnRoWWVhcnMhOiBudW1iZXJbXVtdO1xuXG4gIC8qKiBHcmlkIG9mIGNhbGVuZGFyIGNlbGxzIHJlcHJlc2VudGluZyB0aGUgZGF0ZXMgb2YgdGhlIG5leHQgbW9udGguICovXG4gIHByaXZhdGUgX25leHRNb250aFdlZWtzITogRGF5PFQ+W11bXTtcblxuICAvKiogQW4gYXJyYXkgY29udGFpbmluZyBhbGwgdGhlIG1vbnRoIG5hbWVzIGluIHRoZSBjdXJyZW50IGxhbmd1YWdlLiAqL1xuICBwcml2YXRlIF9tb250aE5hbWVzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKTtcblxuICAvKiogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgd2Vla3MnIG51bWJlcnMgZm9yIHRoZSBjdXJyZW50IG1vbnRoLiAqL1xuICBwcml2YXRlIF93ZWVrTnVtYmVycyE6IG51bWJlcltdO1xuXG4gIC8qKiBBbiBhcnJheSBjb250YWluaW5nIHRoZSB3ZWVrcycgbnVtYmVycyBmb3IgdGhlIG5leHQgbW9udGggaW4gd2lkZSBtb2RlLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhXZWVrTnVtYmVycyE6IG51bWJlcltdO1xuXG4gIHByaXZhdGUgX2VuaGFuY2VkVmFyaWFudDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBBIGxpc3Qgb2YgY2FsZW5kYXIncyBjZWxscyBjb3JyZXNwb25kaW5nIHRvIGRheXMsIG1vbnRocyBvciB5ZWFycyBkZXBlbmRpbmcgb24gdGhlIHZpZXcuICovXG4gIHByaXZhdGUgZ2V0IF9jZWxscygpOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudFtdIHtcbiAgICByZXR1cm4gQXJyYXkuZnJvbTxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudD4oXG4gICAgICAodGhpcy5fY2FsZW5kYXJWaWV3ID09PSAnZGF5J1xuICAgICAgICA/IChBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3RvckFsbCgnc2xvdCcpKS5mbGF0TWFwKChlOiBIVE1MU2xvdEVsZW1lbnQpID0+XG4gICAgICAgICAgICBlLmFzc2lnbmVkRWxlbWVudHMoeyBmbGF0dGVuOiB0cnVlIH0pLFxuICAgICAgICAgICkgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10pXG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9YCkpID8/IFtdLFxuICAgICk7XG4gIH1cblxuICAvKiogVGhlIGNob3NlbiB5ZWFyIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jaG9zZW5ZZWFyPzogbnVtYmVyO1xuXG4gIC8qKiBUaGUgY2hvc2VuIG1vbnRoIGluIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jaG9zZW5Nb250aD86IG51bWJlcjtcblxuICAvKiogV2hldGhlciB0aGUgZm9jdXMgc2hvdWxkIGJlIHJlc2V0IG9uIGZvY3VzQ2VsbC4gKi9cbiAgcHJpdmF0ZSBfcmVzZXRGb2N1cyA9IGZhbHNlO1xuXG4gIC8qKiBXaGV0aGVyIGFuIGVsZW1lbnQgaW5zaWRlIHRoZSBjYWxlbmRhciBpcyBjdXJyZW50bHkgZm9jdXNlZC4gKi9cbiAgcHJpdmF0ZSBfY29udGFpbmluZ0ZvY3VzID0gZmFsc2U7XG5cbiAgQHN0YXRlKClcbiAgcHJpdmF0ZSBhY2Nlc3NvciBfaW5pdGlhbGl6ZWQgPSBmYWxzZTtcblxuICBwcml2YXRlIF9sYW5ndWFnZSA9IG5ldyBTYmJMYW5ndWFnZUNvbnRyb2xsZXIodGhpcykud2l0aEhhbmRsZXIoKCkgPT4ge1xuICAgIHRoaXMuX21vbnRoTmFtZXMgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aE5hbWVzKCdsb25nJyk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gIH0pO1xuICBwcml2YXRlIF9tZWRpYU1hdGNoZXIgPSBuZXcgU2JiTWVkaWFNYXRjaGVyQ29udHJvbGxlcih0aGlzLCB7XG4gICAgW1NiYk1lZGlhUXVlcnlCcmVha3BvaW50TGFyZ2VBbmRBYm92ZV06ICgpID0+IHRoaXMuX2luaXQoKSxcbiAgfSk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fY3JlYXRlTW9udGhSb3dzKCk7XG4gICAgdGhpcy5fc2V0V2Vla2RheXMoKTtcblxuICAgIC8vIFdlIG5lZWQgdG8gdHJhY2sgdGhlIGZvY3VzIGFzIHdlIHNob3VsZCBvbmx5IHRha2UgZm9jdXMgaW50byB0aGUgY2FsZW5kYXIsIHdoZW4gdGhlXG4gICAgLy8gZm9jdXMgd2FzIG9uY2Ugc2V0IGludG8gdGhlIGNhbGVuZGFyLlxuICAgIC8vIEZvciBzaGFkb3cgRE9NIGNvbXBhdGliaWxpdHkgd2UgbmVlZCB0byB0cmFjayB0aGlzIHByb2dyYW1tYXRpY2FsbHkuXG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdmb2N1c2luJywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IHRydWUpKTtcbiAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3Vzb3V0JywgKCkgPT4gKHRoaXMuX2NvbnRhaW5pbmdGb2N1cyA9IGZhbHNlKSk7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIChlKSA9PiB7XG4gICAgICBjb25zdCBkYXkgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpLmNsb3Nlc3Q8U2JiQ2FsZW5kYXJEYXlFbGVtZW50PFQ+Pignc2JiLWNhbGVuZGFyLWRheScpO1xuICAgICAgaWYgKGRheSkge1xuICAgICAgICB0aGlzLl9zZWxlY3REYXRlKGRheS52YWx1ZSEpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIChlKSA9PiB7XG4gICAgICBpZiAoKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5sb2NhbE5hbWUgPT09ICdzYmItY2FsZW5kYXItZGF5Jykge1xuICAgICAgICB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KFxuICAgICAgICAgIGUsXG4gICAgICAgICAgdGhpcy5fbWFwRGF0ZVRvRGF5KChlLnRhcmdldCBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnQpLnZhbHVlISBhcyBUKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX2RhdGVGaWx0ZXIoZGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmRhdGVGaWx0ZXI/LihkYXRlKSA/PyB0cnVlO1xuICB9XG5cbiAgLyoqIFJlc2V0cyB0aGUgYWN0aXZlIG1vbnRoIGFjY29yZGluZyB0byB0aGUgbmV3IHN0YXRlIG9mIHRoZSBjYWxlbmRhci4gKi9cbiAgcHVibGljIHJlc2V0UG9zaXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRDYWxlbmRhclZpZXcoKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgY29ubmVjdGVkQ2FsbGJhY2soKTogdm9pZCB7XG4gICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTtcbiAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoJ3Nsb3RjaGFuZ2UnLCB0aGlzLl9vblNsb3RDaGFuZ2UsIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBkaXNjb25uZWN0ZWRDYWxsYmFjaygpOiB2b2lkIHtcbiAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpO1xuICAgIHRoaXMuc2hhZG93Um9vdD8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2xvdGNoYW5nZScsIHRoaXMuX29uU2xvdENoYW5nZSwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgZm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgdGhpcy5fZm9jdXNDZWxsKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgd2lsbFVwZGF0ZShjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci53aWxsVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKTtcblxuICAgIGlmICghdGhpcy5faW5pdGlhbGl6ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd3aWRlJykgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCdvcmllbnRhdGlvbicpKSB7XG4gICAgICB0aGlzLnJlc2V0UG9zaXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCd2aWV3JykpIHtcbiAgICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICAgIHRoaXMuX2Nob3Nlbk1vbnRoID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllczogUHJvcGVydHlWYWx1ZXM8dGhpcz4pOiB2b2lkIHtcbiAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTtcbiAgICAvLyBUaGUgY2FsZW5kYXIgbmVlZHMgdG8gY2FsY3VsYXRlIHRhYi1pbmRleGVzIG9uIGZpcnN0IHJlbmRlcixcbiAgICAvLyBhbmQgZXZlcnkgdGltZSBhIGRhdGUgaXMgc2VsZWN0ZWQgb3IgdGhlIG1vbnRoIHZpZXcgY2hhbmdlcy5cbiAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuXG4gICAgLy8gV2hlbiBjaGFuZ2luZyB2aWV3IHRvIHllYXIvbW9udGgsIHRoZSB0YWJpbmRleCBpcyBjaGFuZ2VkLCBidXQgdGhlIGZvY3VzZWQgZWxlbWVudCBpcyBnZXR0aW5nIGxvc3QuXG4gICAgLy8gV2UgbmVlZCB0byBjYWxsIGBfZm9jdXNDZWxsKClgIG1ldGhvZCBleHBsaWNpdGx5IHRvIGNvcnJlY3RseSBzZXQgdGhlIGZvY3VzLlxuICAgIHRoaXMuX2ZvY3VzQ2VsbCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfb25TbG90Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuX2VuaGFuY2VkVmFyaWFudCA9IEFycmF5LmZyb20odGhpcy5jaGlsZHJlbikuc29tZShcbiAgICAgIChjKSA9PiBjLmxvY2FsTmFtZSA9PT0gJ3NiYi1jYWxlbmRhci1kYXknLFxuICAgICk7XG4gICAgdGhpcy50b2dnbGVTdGF0ZSgnZW5oYW5jZWQnLCB0aGlzLl9lbmhhbmNlZFZhcmlhbnQpO1xuICAgIHRoaXMuX3NldFRhYkluZGV4KCk7XG4gIH07XG5cbiAgLyoqXG4gICAqIFRoZSBgX3NlbGVjdGVkYCBzdGF0ZSBzaG91bGQgYmUgYWRhcHRlZCB3aGVuIHRoZSBgbXVsdGlwbGVgIHByb3BlcnR5IGNoYW5nZXM6XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIHRydWUsIHRoZSAnX3NlbGVjdGVkJyBpcyBzZXQgdG8gYW4gYXJyYXk7XG4gICAqICAgLSBpZiBpdCBjaGFuZ2VzIHRvIGZhbHNlLCB0aGUgZmlyc3QgYXZhaWxhYmxlIG9wdGlvbiBpcyBzZXQgYXMgJ3ZhbHVlJyBvdGhlcndpc2UgaXQncyBzZXQgdG8gbnVsbC5cbiAgICovXG4gIHByaXZhdGUgX29uTXVsdGlwbGVDaGFuZ2VkKGlzTXVsdGlwbGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAoaXNNdWx0aXBsZSAmJiAhQXJyYXkuaXNBcnJheSh0aGlzLl9zZWxlY3RlZCkpIHtcbiAgICAgIHRoaXMuX3NlbGVjdGVkID0gdGhpcy5fc2VsZWN0ZWQgPyBbdGhpcy5fc2VsZWN0ZWQgYXMgVF0gOiBbXTtcbiAgICB9XG4gICAgaWYgKCFpc011bHRpcGxlICYmIEFycmF5LmlzQXJyYXkodGhpcy5fc2VsZWN0ZWQpKSB7XG4gICAgICB0aGlzLl9zZWxlY3RlZCA9ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pLmxlbmd0aCA/ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pWzBdIDogbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogSW5pdGlhbGl6ZXMgdGhlIGNvbXBvbmVudC4gKi9cbiAgcHJpdmF0ZSBfaW5pdChhY3RpdmVEYXRlPzogVCk6IHZvaWQge1xuICAgIC8vIER1ZSB0byBpdHMgY29tcGxleGl0eSwgdGhlIGNhbGVuZGFyIGlzIG9ubHkgaW5pdGlhbGl6ZWQgb24gY2xpZW50IHNpZGVcbiAgICBpZiAoaXNTZXJ2ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMuaHlkcmF0aW9uQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLl9pbml0KCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChhY3RpdmVEYXRlKSB7XG4gICAgICB0aGlzLl9hc3NpZ25BY3RpdmVEYXRlKGFjdGl2ZURhdGUpO1xuICAgIH1cbiAgICB0aGlzLl93aWRlID1cbiAgICAgICh0aGlzLl9tZWRpYU1hdGNoZXIubWF0Y2hlcyhTYmJNZWRpYVF1ZXJ5QnJlYWtwb2ludExhcmdlQW5kQWJvdmUpID8/IGZhbHNlKSAmJiB0aGlzLndpZGU7XG4gICAgdGhpcy5fd2Vla3MgPSB0aGlzLl9jcmVhdGVXZWVrUm93cyh0aGlzLl9hY3RpdmVEYXRlKTtcbiAgICB0aGlzLl95ZWFycyA9IHRoaXMuX2NyZWF0ZVllYXJSb3dzKCk7XG4gICAgdGhpcy5fd2Vla051bWJlcnMgPSB0aGlzLl93ZWVrc1xuICAgICAgLmZsYXQoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSlcbiAgICAgIC5tYXAoKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla1ZhbHVlKVxuICAgICAgLmZpbHRlcigodiwgaSwgYSkgPT4gYS5pbmRleE9mKHYpID09PSBpKTtcbiAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyA9IFtbXV07XG4gICAgdGhpcy5fbmV4dE1vbnRoWWVhcnMgPSBbW11dO1xuICAgIGlmICh0aGlzLl93aWRlKSB7XG4gICAgICBjb25zdCBuZXh0TW9udGhEYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyA9IHRoaXMuX2NyZWF0ZVdlZWtSb3dzKG5leHRNb250aERhdGUsIHRydWUpO1xuICAgICAgdGhpcy5fbmV4dE1vbnRoWWVhcnMgPSB0aGlzLl9jcmVhdGVZZWFyUm93cyhZRUFSU19QRVJfUEFHRSk7XG4gICAgICB0aGlzLl9uZXh0TW9udGhXZWVrTnVtYmVycyA9IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgIC5mbGF0KClcbiAgICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSlcbiAgICAgICAgLm1hcCgoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUpXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGEpID0+IGEuaW5kZXhPZih2KSA9PT0gaSk7XG4gICAgfVxuICAgIHRoaXMuX2luaXRpYWxpemVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBGb2N1c2VzIG9uIGEgZGF5IGNlbGwgcHJpb3JpdGl6aW5nIHRoZSBzZWxlY3RlZCBkYXksIHRoZSBjdXJyZW50IGRheSwgYW5kIGxhc3RseSwgdGhlIGZpcnN0IHNlbGVjdGFibGUgZGF5LiAqL1xuICBwcml2YXRlIF9mb2N1c0NlbGwoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Jlc2V0Rm9jdXMpIHtcbiAgICAgIHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk/LmZvY3VzKCk7XG4gICAgICB0aGlzLl9yZXNldEZvY3VzID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGFycmF5IG9mIHdlZWtkYXlzLiAqL1xuICBwcml2YXRlIF9zZXRXZWVrZGF5cygpOiB2b2lkIHtcbiAgICBjb25zdCBuYXJyb3dXZWVrZGF5czogc3RyaW5nW10gPSB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXlPZldlZWtOYW1lcygnbmFycm93Jyk7XG4gICAgY29uc3QgbG9uZ1dlZWtkYXlzOiBzdHJpbmdbXSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2Vla05hbWVzKCdsb25nJyk7XG4gICAgY29uc3Qgd2Vla2RheXM6IFdlZWtkYXlbXSA9IGxvbmdXZWVrZGF5cy5tYXAoKGxvbmc6IHN0cmluZywgaTogbnVtYmVyKSA9PiAoe1xuICAgICAgbG9uZyxcbiAgICAgIG5hcnJvdzogbmFycm93V2Vla2RheXNbaV0sXG4gICAgfSkpO1xuXG4gICAgLy8gUm90YXRlcyB0aGUgbGFiZWxzIGZvciBkYXlzIG9mIHRoZSB3ZWVrIGJhc2VkIG9uIHRoZSBjb25maWd1cmVkIGZpcnN0IGRheSBvZiB0aGUgd2Vlay5cbiAgICBjb25zdCBmaXJzdERheU9mV2VlazogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3REYXlPZldlZWsoKTtcbiAgICB0aGlzLl93ZWVrZGF5cyA9IHdlZWtkYXlzLnNsaWNlKGZpcnN0RGF5T2ZXZWVrKS5jb25jYXQod2Vla2RheXMuc2xpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSByb3dzIGFsb25nIHRoZSBob3Jpem9udGFsIGRpcmVjdGlvbiBhbmQgc2V0cyB0aGUgcGFyYW1ldGVycyB1c2VkIGluIGtleWJvYXJkIG5hdmlnYXRpb24uICovXG4gIHByaXZhdGUgX2NyZWF0ZVdlZWtSb3dzKHZhbHVlOiBULCBpc1NlY29uZE1vbnRoSW5WaWV3ID0gZmFsc2UpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCBkYXlzSW5Nb250aDogbnVtYmVyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgodmFsdWUpO1xuICAgIGNvbnN0IHdlZWtPZmZzZXQ6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldEZpcnN0V2Vla09mZnNldCh2YWx1ZSk7XG4gICAgaWYgKCFpc1NlY29uZE1vbnRoSW5WaWV3KSB7XG4gICAgICB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoTGVuZ3RoID0gZGF5c0luTW9udGg7XG4gICAgICB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoT2Zmc2V0ID0gd2Vla09mZnNldDtcbiAgICAgIHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLmZpcnN0RGF5SW5WaWV3ID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIodmFsdWUpLFxuICAgICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKHZhbHVlKSxcbiAgICAgICAgICAxLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLmxhc3REYXlJblZpZXcgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih2YWx1ZSksXG4gICAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICAgIGRheXNJbk1vbnRoLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMuc2Vjb25kTW9udGhPZmZzZXQgPSB3ZWVrT2Zmc2V0O1xuICAgICAgdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMubGFzdERheUluVmlldyA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh2YWx1ZSksXG4gICAgICAgICAgZGF5c0luTW9udGgsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICA/IHRoaXMuX2NyZWF0ZVdlZWtSb3dzSG9yaXpvbnRhbCh2YWx1ZSwgZGF5c0luTW9udGgsIHdlZWtPZmZzZXQpXG4gICAgICA6IHRoaXMuX2NyZWF0ZVdlZWtSb3dzVmVydGljYWwodmFsdWUsIGRheXNJbk1vbnRoLCB3ZWVrT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSByb3dzIGZvciBlYWNoIHdlZWsgaW4gb3JpZW50YXRpb249J2hvcml6b250YWwnLlxuICAgKlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoIGFuZCBwdXNoZXMgaXQgaW50byBhbmQgYXJyYXkuXG4gICAqIEVhY2ggc2V2ZW4gZGF5cyAoY29uc2lkZXJpbmcgdGhlIG9mZnNldCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBtb250aCkgcmVzdGFydHMgZnJvbSBhbiBlbXB0eSBhcnJheS5cbiAgICpcbiAgICogVGhlIHJlc3VsdCBpcyBhIG1hdHJpeCBpbiB3aGljaCBldmVyeSByb3cgaXMgYSB3ZWVrIChvciBwYXJ0IG9mIGl0LCBjb25zaWRlcmluZyBvZmZzZXQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NIb3Jpem9udGFsKHZhbHVlOiBULCBkYXlzSW5Nb250aDogbnVtYmVyLCB3ZWVrT2Zmc2V0OiBudW1iZXIpOiBEYXk8VD5bXVtdIHtcbiAgICBjb25zdCB3ZWVrczogRGF5PFQ+W11bXSA9IFtbXV07XG4gICAgZm9yIChsZXQgaSA9IDAsIGNlbGwgPSB3ZWVrT2Zmc2V0OyBpIDwgZGF5c0luTW9udGg7IGkrKywgY2VsbCsrKSB7XG4gICAgICBpZiAoY2VsbCA9PT0gREFZU19QRVJfUk9XKSB7XG4gICAgICAgIHdlZWtzLnB1c2goW10pO1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3Nbd2Vla3MubGVuZ3RoIC0gMV0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgcm93cyBmb3IgZWFjaCB3ZWVrIGluIG9yaWVudGF0aW9uPSd2ZXJ0aWNhbCcuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBtYXRyaXggd2l0aCBzZXZlbiBlbXB0eSByb3dzLlxuICAgKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBkYXlzIG9mIHRoZSBtb250aHMsIGNyZWF0ZXMgYSBEYXkgb2JqZWN0IGZvciBlYWNoXG4gICAqIGFuZCBwdXNoZXMgaXQgaW50byB0aGUgY29ycmVjdCBhcnJheSBjb25zaWRlcmluZyB0aGUgb2Zmc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1vbnRoLlxuICAgKiBFYWNoIHNldmVuIGRheXMgKGluY2x1ZGluZyBvZmZzZXQpIHJlc3RhcnRzIGZyb20gdGhlIGZpcnN0LlxuICAgKlxuICAgKiBUaGUgcmVzdWx0IGlzIGEgbWF0cml4IGluIHdoaWNoIGV2ZXJ5IHJvdyBpcyBhIHNldCBvZiB3ZWVrZGF5cywgc286XG4gICAqIC0gcm93IDA6IGFsbCB0aGUgTW9uZGF5cztcbiAgICogLSByb3cgMTogYWxsIHRoZSBUdWVzZGF5cztcbiAgICogLSAuLi5cbiAgICogLSByb3cgNzogYWxsIHRoZSBTdW5kYXlzLlxuICAgKi9cbiAgcHJpdmF0ZSBfY3JlYXRlV2Vla1Jvd3NWZXJ0aWNhbCh2YWx1ZTogVCwgZGF5c0luTW9udGg6IG51bWJlciwgd2Vla09mZnNldDogbnVtYmVyKTogRGF5PFQ+W11bXSB7XG4gICAgY29uc3Qgd2Vla3M6IERheTxUPltdW10gPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBEQVlTX1BFUl9ST1cgfSwgKCkgPT4gW10pO1xuICAgIGZvciAobGV0IGkgPSAwLCBjZWxsID0gd2Vla09mZnNldDsgaSA8IGRheXNJbk1vbnRoOyBpKyssIGNlbGwrKykge1xuICAgICAgaWYgKGNlbGwgPT09IERBWVNfUEVSX1JPVykge1xuICAgICAgICBjZWxsID0gMDtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGRhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHZhbHVlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgodmFsdWUpLFxuICAgICAgICBpICsgMSxcbiAgICAgICkhO1xuICAgICAgd2Vla3NbY2VsbF0ucHVzaCh0aGlzLl9tYXBEYXRlVG9EYXkoZGF0ZSkpO1xuICAgIH1cbiAgICByZXR1cm4gd2Vla3M7XG4gIH1cblxuICBwcml2YXRlIF9tYXBEYXRlVG9EYXkoZGF0ZTogVCk6IERheTxUPiB7XG4gICAgY29uc3QgaXNvRGF0ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShkYXRlKTtcbiAgICByZXR1cm4ge1xuICAgICAgdmFsdWU6IGlzb0RhdGUsXG4gICAgICBkYXRlVmFsdWU6IGRhdGUsXG4gICAgICBkYXlWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoZGF0ZSkpLFxuICAgICAgbW9udGhWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldE1vbnRoKGRhdGUpKSxcbiAgICAgIHllYXJWYWx1ZTogU3RyaW5nKHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoZGF0ZSkpLFxuICAgICAgLy8gVE9ETzogSW1wcm92ZSBwZXJmb3JtYW5jZSBvZiB0aGlzLCBieSBrZWVwaW5nIHRyYWNrIG9mIHRoZVxuICAgICAgLy8gd2VlayBudW1iZXIgd2hpbGUgaXRlcmF0aW5nIHRocm91Z2ggdGhlIGRheXMuXG4gICAgICB3ZWVrVmFsdWU6IHRoaXMuX2dldFdlZWsoZGF0ZSksXG4gICAgICB3ZWVrRGF5VmFsdWU6IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhkYXRlKSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0V2VlayhkYXRlOiBUKTogbnVtYmVyIHtcbiAgICBjb25zdCBmaXJzdERheU9mWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUodGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihkYXRlKSwgMSwgMSk7XG4gICAgY29uc3Qgd2Vla2RheSA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERheU9mV2VlayhmaXJzdERheU9mWWVhcik7XG5cbiAgICBsZXQgd2Vla0luZGV4ID0gW01PTkRBWSwgVFVFU0RBWSwgV0VETkVTREFZLCBUSFVSU0RBWV0uaW5jbHVkZXMod2Vla2RheSkgPyAxIDogMDtcbiAgICBsZXQgd2Vla1N0YXJ0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKFxuICAgICAgZmlyc3REYXlPZlllYXIsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRGaXJzdFdlZWtPZmZzZXQoZmlyc3REYXlPZlllYXIpICogLTEsXG4gICAgKTtcbiAgICB3aGlsZSAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUod2Vla1N0YXJ0LCBkYXRlKSA8PSAwKSB7XG4gICAgICBjb25zdCB3ZWVrRW5kID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJEYXlzKHdlZWtTdGFydCwgNik7XG4gICAgICBpZiAodGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUoZGF0ZSwgd2Vla0VuZCkgPD0gMCkge1xuICAgICAgICByZXR1cm4gd2Vla0luZGV4ID4gMFxuICAgICAgICAgID8gd2Vla0luZGV4XG4gICAgICAgICAgOiB0aGlzLl9nZXRXZWVrKHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdERheU9mWWVhciwgLTEpKTtcbiAgICAgIH1cbiAgICAgIHdlZWtTdGFydCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyh3ZWVrU3RhcnQsIERBWVNfUEVSX1JPVyk7XG4gICAgICB3ZWVrSW5kZXgrKztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwcm92aWRlZCBkYXRlIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIC8qKiBGb3JjZSB0aGUgY29udmVyc2lvbiB0byBJU084NjAxIGZvcm1hdHRlZCBzdHJpbmcuICovXG4gIHByaXZhdGUgX21hcFZhbHVlVG9JU09EYXRlKHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKHZhbHVlIGFzIFQpO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSBtb250aCBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTW9udGhSb3dzKCk6IHZvaWQge1xuICAgIGNvbnN0IG1vbnRoczogTW9udGhDZWxsW10gPSBuZXcgQXJyYXkoMTIpLmZpbGwobnVsbCkubWFwKFxuICAgICAgKF8sIGk6IG51bWJlcik6IE1vbnRoQ2VsbCA9PiAoe1xuICAgICAgICB2YWx1ZTogU3RyaW5nKGkgKyAxKS5wYWRTdGFydCgyLCAnMCcpLFxuICAgICAgICBtb250aFZhbHVlOiBpICsgMSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgY29uc3Qgcm93czogbnVtYmVyID0gMTIgLyBNT05USFNfUEVSX1JPVztcbiAgICBjb25zdCBtb250aEFycmF5OiBNb250aENlbGxbXVtdID0gW107XG4gICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IHJvd3M7IGkrKykge1xuICAgICAgbW9udGhBcnJheS5wdXNoKG1vbnRocy5zbGljZShNT05USFNfUEVSX1JPVyAqIGksIE1PTlRIU19QRVJfUk9XICogKGkgKyAxKSkpO1xuICAgIH1cbiAgICB0aGlzLl9tb250aHMgPSBtb250aEFycmF5O1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHJvd3MgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbiB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVZZWFyUm93cyhvZmZzZXQ6IG51bWJlciA9IDApOiBudW1iZXJbXVtdIHtcbiAgICBjb25zdCBzdGFydFZhbHVlWWVhclZpZXc6IG51bWJlciA9IHRoaXMuX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpO1xuICAgIGNvbnN0IGFsbFllYXJzOiBudW1iZXJbXSA9IG5ldyBBcnJheShZRUFSU19QRVJfUEFHRSlcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpOiBudW1iZXIpID0+IHN0YXJ0VmFsdWVZZWFyVmlldyArIG9mZnNldCArIGkpO1xuICAgIGNvbnN0IHJvd3M6IG51bWJlciA9IFlFQVJTX1BFUl9QQUdFIC8gWUVBUlNfUEVSX1JPVztcbiAgICBjb25zdCB5ZWFyQXJyYXk6IG51bWJlcltdW10gPSBbXTtcbiAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgICB5ZWFyQXJyYXkucHVzaChhbGxZZWFycy5zbGljZShZRUFSU19QRVJfUk9XICogaSwgWUVBUlNfUEVSX1JPVyAqIChpICsgMSkpKTtcbiAgICB9XG4gICAgcmV0dXJuIHllYXJBcnJheTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBmaXJzdCB5ZWFyIHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgeWVhciBzZWxlY3Rpb24gcGFuZWwuXG4gICAqIElmIGBtaW5EYXRlYCBhbmQgYG1heERhdGVgIGFyZSBib3RoIG51bGwsIHRoZSBzdGFydGluZyB5ZWFyIGlzIGNhbGN1bGF0ZWQgYXNcbiAgICogdGhlIG11bHRpcGxlIG9mIFlFQVJTX1BFUl9QQUdFIGNsb3Nlc3QgdG8gYW5kIGxlc3MgdGhhbiBhY3RpdmVEYXRlLFxuICAgKiBlLmcuLCB3aXRoIGBZRUFSU19QRVJfUEFHRWAgPSAyNCBhbmQgYGFjdGl2ZURhdGVgID0gMjAyMCwgdGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIDIwMTYgKDI0ICogODMpLFxuICAgKiB3aGlsZSB3aXRoIGBhY3RpdmVEYXRlYCA9IDIwMDAsIHRoZSBmdW5jdGlvbiB3aWxsIHJldHVybiAxOTkyICgyNCAqIDgyKS5cbiAgICogSWYgYG1pbkRhdGVgIGlzIG5vdCBudWxsLCBpdCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHllYXI7IGlmIGBtYXhEYXRlYCBpcyBub3QgbnVsbCxcbiAgICogaXQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyB5ZWFyIG1pbnVzIGBZRUFSU19QRVJfUEFHRWAsIHNvIHRoYXQgdGhlIGBtYXhEYXRlYCBpcyB0aGUgbGFzdCByZW5kZXJlZCB5ZWFyLlxuICAgKiBJZiBib3RoIGFyZSBub3QgbnVsbCwgYG1heERhdGVgIGhhcyBwcmlvcml0eSBvdmVyIGBtaW5EYXRlYC5cbiAgICovXG4gIHByaXZhdGUgX2dldFN0YXJ0VmFsdWVZZWFyVmlldygpOiBudW1iZXIge1xuICAgIGxldCBzdGFydGluZ1llYXIgPSAwO1xuICAgIGlmICh0aGlzLm1heCkge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1heCkgLSBZRUFSU19QRVJfUEFHRSArIDE7XG4gICAgfSBlbHNlIGlmICh0aGlzLm1pbikge1xuICAgICAgc3RhcnRpbmdZZWFyID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbik7XG4gICAgfVxuICAgIGNvbnN0IGFjdGl2ZVllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpO1xuICAgIHJldHVybiAoXG4gICAgICBhY3RpdmVZZWFyIC1cbiAgICAgICgoKChhY3RpdmVZZWFyIC0gc3RhcnRpbmdZZWFyKSAlIFlFQVJTX1BFUl9QQUdFKSArIFlFQVJTX1BFUl9QQUdFKSAlIFlFQVJTX1BFUl9QQUdFKVxuICAgICk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIGRhdGUgaXMgd2l0aGluIHRoZSBtaW4tbWF4IHJhbmdlLiAqL1xuICBwcml2YXRlIF9pc0RheUluUmFuZ2UoZGF0ZVN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1pbiAmJiAhdGhpcy5tYXgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRlID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUoZGF0ZVN0cmluZykhO1xuICAgIHJldHVybiB0aGlzLl9kYXRlQWRhcHRlci5zYW1lRGF0ZShkYXRlLCB0aGlzLl9kYXRlQWRhcHRlci5jbGFtcERhdGUoZGF0ZSwgdGhpcy5taW4sIHRoaXMubWF4KSk7XG4gIH1cblxuICAvKiogRW1pdHMgdGhlIHNlbGVjdGVkIGRhdGUgYW5kIHNldHMgaXQgaW50ZXJuYWxseS4gKi9cbiAgcHJpdmF0ZSBfc2VsZWN0RGF0ZShkYXk6IFQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXRDaG9zZW5ZZWFyKCk7XG4gICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgIC8vIENoZWNrIGlmIF9zZWxlY3RlZCBoYXMgZWxlbWVudHNcbiAgICAgIGlmICh0aGlzLl9zZWxlY3RlZCAmJiAodGhpcy5fc2VsZWN0ZWQgYXMgVFtdKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGluZGV4T2ZTZWxlY3RlZERheTogbnVtYmVyID0gKHRoaXMuX3NlbGVjdGVkIGFzIFRbXSkuZmluZEluZGV4KFxuICAgICAgICAgIChzZWwpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHNlbCwgZGF5KSA9PT0gMCxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdGVkIGRhdGUgaXMgYWxyZWFkeSBpbiB0aGUgX3NlbGVjdGVkIGFycmF5LCByZW1vdmUgaXQsIG90aGVyd2lzZSBhZGQgaXRcbiAgICAgICAgaWYgKGluZGV4T2ZTZWxlY3RlZERheSAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9ICh0aGlzLl9zZWxlY3RlZCBhcyBUW10pLmZpbHRlcigoXywgaSkgPT4gaSAhPT0gaW5kZXhPZlNlbGVjdGVkRGF5KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IFsuLi4odGhpcy5fc2VsZWN0ZWQgYXMgVFtdKSwgZGF5XTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgX3NlbGVjdGVkIGlzIGVtcHR5LCBzZXQgaXRcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWQgPSBbZGF5XTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2VtaXREYXRlU2VsZWN0ZWRFdmVudCh0aGlzLl9zZWxlY3RlZC5tYXAoKGUpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGUpISkpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBJbiBzaW5nbGUgc2VsZWN0aW9uLCBjaGVjayBpZiB0aGUgZGF5IGlzIGFscmVhZHkgc2VsZWN0ZWRcbiAgICAgIGlmICghdGhpcy5fc2VsZWN0ZWQgfHwgdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUodGhpcy5fc2VsZWN0ZWQgYXMgVCwgZGF5KSAhPT0gMCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RlZCA9IGRheTtcbiAgICAgICAgdGhpcy5fZW1pdERhdGVTZWxlY3RlZEV2ZW50KHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKGRheSkhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIG11bHRpcGxlIGRhdGVzIHNlbGVjdGlvbiB2aWEgd2Vla051bWJlciAvIHdlZWtEYXkgYnV0dG9uczpcbiAgICogLSBpZiBDbWQgb3IgQ3RybCBhcmUgcHJlc3NlZCwgYWRkIHRoZSBuZXcgZGF0ZSB0byB0aGUgY3VycmVudCBvbmVzO1xuICAgKiAtIGlmIG5vdCxcbiAgICogICAgIC0gaWYgdGhlIG5ldyBkYXRlcyBhcmUgdGhlIHNhbWUgb2YgdGhlIGN1cnJlbnQgb25lcywgaXQgbWVhbnMgdGhhdCB0aGUgc2FtZSBidXR0b24gaGFzIGJlZW4gY2xpY2tlZCB0d2ljZSwgc28gZG8gbm90aGluZztcbiAgICogICAgIC0gaWYgbm90LCB0aGUgc2VsZWN0ZWQgZGF0ZXMgYXJlIHRoZSBuZXcgb25lcy5cbiAgICovXG4gIHByaXZhdGUgX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5czogRGF5PFQ+W10pOiB2b2lkIHtcbiAgICAvLyBGaWx0ZXIgZGlzYWJsZWQgZGF5cyBieSBtYXRjaGluZyB0aGUgcHJvdmlkZWQgYGRheXNgIHBhcmFtZXRlciBhZ2FpbnN0IHRoZSBlbmFibGVkIGNlbGxzLlxuICAgIC8vIFNpbmNlIHRoZSBidXR0b25zJyB2YWx1ZSBpcyBzZXQgdG8gdGhlIERheSdzIGludGVyZmFjZSB2YWx1ZSAoSVNPIHN0cmluZyksIHRoZXJlJ3Mgbm8gbmVlZCB0byBkZXNlcmlhbGl6ZSBpdC5cbiAgICBjb25zdCBlbmFibGVkRGF5czogc3RyaW5nW10gPSAodGhpcy5fY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10pXG4gICAgICAuZmlsdGVyKChlKSA9PiAhZS5kaXNhYmxlZClcbiAgICAgIC5tYXAoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSk7XG4gICAgY29uc3QgZGF5c1RvQWRkOiBzdHJpbmdbXSA9IGRheXNcbiAgICAgIC5tYXAoKGU6IERheTxUPikgPT4gZS52YWx1ZSlcbiAgICAgIC5maWx0ZXIoKGlzb0RhdGU6IHN0cmluZykgPT4gZW5hYmxlZERheXMuaW5jbHVkZXMoaXNvRGF0ZSkpO1xuICAgIGNvbnN0IGRheXNUb0FkZFNldCA9IG5ldyBTZXQoZGF5c1RvQWRkKTtcbiAgICBjb25zdCBzZWxlY3RlZFNldCA9IG5ldyBTZXQoKHRoaXMuX3NlbGVjdGVkIGFzIFRbXSkubWFwKChzKSA9PiB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEocykpKTtcbiAgICBjb25zdCBzZWxTdHJpbmdzID0gdGhpcy5fdXBkYXRlU2VsZWN0ZWRXaXRoTXVsdGlwbGVEYXRlcyhkYXlzVG9BZGQsIGRheXNUb0FkZFNldCwgc2VsZWN0ZWRTZXQpO1xuICAgIHRoaXMuX3NlbGVjdGVkID0gc2VsU3RyaW5ncy5tYXAoKHMpID0+IHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKHMpISk7XG5cbiAgICB0aGlzLl9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQodGhpcy5fc2VsZWN0ZWQubWFwKChlKSA9PiB0aGlzLl9kYXRlQWRhcHRlci5kZXNlcmlhbGl6ZShlKSEpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWl0cyB0aGUgZGF0ZXNlbGVjdGVkIGV2ZW50IGdpdmVuIHRoZSBkZXRhaWwgKGFzIFQgb3IgVFtdIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbXVsdGlwbGUgZmxhZykuXG4gICAqL1xuICBwcml2YXRlIF9lbWl0RGF0ZVNlbGVjdGVkRXZlbnQoZGV0YWlsOiBUIHwgVFtdKTogdm9pZCB7XG4gICAgLyoqIEB0eXBlIHtDdXN0b21FdmVudDxUIHwgVFtdPn0gRXZlbnQgZW1pdHRlZCBvbiBkYXRlIHNlbGVjdGlvbi4gKi9cbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgQ3VzdG9tRXZlbnQ8VCB8IFRbXT4oJ2RhdGVzZWxlY3RlZCcsIHtcbiAgICAgICAgZGV0YWlsLFxuICAgICAgICBjb21wb3NlZDogdHJ1ZSxcbiAgICAgICAgYnViYmxlczogdHJ1ZSxcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9lbWl0TW9udGhDaGFuZ2UoKTogdm9pZCB7XG4gICAgLy8gRklYTUU6IHRoZSBuYW1lIG9mIHRoaXMgdmFyaWFibGUgYXBwZWFycyBhcyBldmVudCBuYW1lIGluIHRoZSByZWFkbWVcbiAgICAvLyAgZHVlIHRvIGEgYnVnIGluIHRoZSBjdXN0b20tZWxlbWVudHMtbWFuaWZlc3QgbGlicmFyeS5cbiAgICAvLyAgaHR0cHM6Ly9naXRodWIuY29tL29wZW4td2MvY3VzdG9tLWVsZW1lbnRzLW1hbmlmZXN0L2lzc3Vlcy8xNDlcbiAgICBjb25zdCBtb250aGNoYW5nZSA9ICh0aGlzLndpZGUgPyBbLi4udGhpcy5fd2Vla3MsIC4uLnRoaXMuX25leHRNb250aFdlZWtzXSA6IHRoaXMuX3dlZWtzKVxuICAgICAgLmZsYXQoKVxuICAgICAgLnNvcnQoKGEsIGIpID0+IGEudmFsdWUubG9jYWxlQ29tcGFyZShiLnZhbHVlKSkgYXMgRGF5W107XG4gICAgLyoqXG4gICAgICogQHR5cGUge1NiYk1vbnRoQ2hhbmdlRXZlbnR9XG4gICAgICogRW1pdHMgd2hlbiB0aGUgbW9udGggY2hhbmdlcy5cbiAgICAgKiBUaGUgYHJhbmdlYCBwcm9wZXJ0eSBjb250YWlucyB0aGUgZGF5cyBhcnJheSBvZiB0aGUgY2hvc2VuIG1vbnRoLlxuICAgICAqL1xuICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgU2JiTW9udGhDaGFuZ2VFdmVudChtb250aGNoYW5nZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluIGNhc2Ugb2YgbXVsdGlwbGUgc2VsZWN0aW9uLCBuZXdseSBhZGRlZCBkYXlzIG11c3QgYmUgYWRkZWQgdG8gdGhlIGV4aXN0aW5nIG9uZXMsIHdpdGhvdXQgZHVwbGljYXRpb24uXG4gICAqIElmIHRoZSBkYXlzIHRvIGFkZCBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyB0aGUgc2VsZWN0ZWQgb25lcywgdGhlIHNldCBtdXN0IGJlIGVtcHRpZWQuXG4gICAqL1xuICBwcml2YXRlIF91cGRhdGVTZWxlY3RlZFdpdGhNdWx0aXBsZURhdGVzKFxuICAgIGRheXNUb0FkZDogc3RyaW5nW10sXG4gICAgZGF5c1RvQWRkU2V0OiBTZXQ8c3RyaW5nPixcbiAgICBzZWxlY3RlZFNldDogU2V0PHN0cmluZz4sXG4gICk6IHN0cmluZ1tdIHtcbiAgICBpZiAoZGF5c1RvQWRkLmV2ZXJ5KChkYXk6IHN0cmluZykgPT4gc2VsZWN0ZWRTZXQuaGFzKGRheSkpKSB7XG4gICAgICBkYXlzVG9BZGRTZXQuZm9yRWFjaCgoZGF5OiBzdHJpbmcpID0+IHNlbGVjdGVkU2V0LmRlbGV0ZShkYXkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGF5c1RvQWRkU2V0LmZvckVhY2goKGRheTogc3RyaW5nKSA9PiBzZWxlY3RlZFNldC5hZGQoZGF5KSk7XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5mcm9tKHNlbGVjdGVkU2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3NldENob3NlblllYXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMudmlldyA9PT0gJ21vbnRoJykge1xuICAgICAgbGV0IHNlbGVjdGVkRGF0ZTogVCB8IHVuZGVmaW5lZDtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIHNlbGVjdGVkRGF0ZSA9ICh0aGlzLnNlbGVjdGVkIGFzIFRbXSkuYXQoLTEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VsZWN0ZWREYXRlID0gdGhpcy5zZWxlY3RlZCBhcyBUO1xuICAgICAgfVxuICAgICAgdGhpcy5fY2hvc2VuWWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldFllYXIoc2VsZWN0ZWREYXRlID8/IHRoaXMuX2RhdGVBZGFwdGVyLnRvZGF5KCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaG9zZW5ZZWFyID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2Fzc2lnbkFjdGl2ZURhdGUoZGF0ZTogVCk6IHZvaWQge1xuICAgIGlmICh0aGlzLm1pbiAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1pbiwgZGF0ZSkgPiAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5taW47XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLm1heCAmJiB0aGlzLl9kYXRlQWRhcHRlci5jb21wYXJlRGF0ZSh0aGlzLm1heCwgZGF0ZSkgPCAwKSB7XG4gICAgICB0aGlzLl9hY3RpdmVEYXRlID0gdGhpcy5tYXg7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSBkYXRlO1xuICB9XG5cbiAgLyoqIEdvZXMgdG8gdGhlIG1vbnRoIGlkZW50aWZpZWQgYnkgdGhlIHNoaWZ0LiAqL1xuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50TW9udGgobW9udGhzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuX2FjdGl2ZURhdGUsIG1vbnRocykpO1xuICAgIHRoaXMuX2VtaXRNb250aENoYW5nZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ29Ub0RpZmZlcmVudFllYXIoeWVhcnM6IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuX2Nob3NlblllYXIhICs9IHllYXJzO1xuICAgIC8vIENhbid0IHVzZSBgX2Fzc2lnbkFjdGl2ZURhdGUoLi4uKWAgaGVyZSwgYmVjYXVzZSBpdCB3aWxsIHNldCBpdCB0byBtaW4vbWF4IHZhbHVlIGlmIGFyZ3VtZW50IGlzIG91dCBvZiByYW5nZVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fY2hvc2VuWWVhciEsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgKTtcbiAgICB0aGlzLl9pbml0KCk7XG4gIH1cblxuICBwcml2YXRlIF9nb1RvRGlmZmVyZW50WWVhclJhbmdlKHllYXJzOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9pbml0KHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyWWVhcnModGhpcy5fYWN0aXZlRGF0ZSwgeWVhcnMpKTtcbiAgfVxuXG4gIHByaXZhdGUgX3ByZXZEaXNhYmxlZChwcmV2RGF0ZTogVCk6IGJvb2xlYW4ge1xuICAgIGlmICghdGhpcy5taW4pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2RhdGVBZGFwdGVyLmNvbXBhcmVEYXRlKHByZXZEYXRlLCB0aGlzLm1pbikgPCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBfbmV4dERpc2FibGVkKG5leHREYXRlOiBUKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm1heCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5fZGF0ZUFkYXB0ZXIuY29tcGFyZURhdGUobmV4dERhdGUsIHRoaXMubWF4KSA+IDA7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIG1vbnRoXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNNb250aERpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHByZXZNb250aCA9IHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhcbiAgICAgIHRoaXMuX2FjdGl2ZURhdGUsXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXREYXRlKHRoaXMuX2FjdGl2ZURhdGUpICogLTEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcIm5leHQgbW9udGhcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9uZXh0TW9udGhEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgbmV4dE1vbnRoID0gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgdGhpcy5fd2lkZSA/IDIgOiAxKTtcbiAgICBuZXh0TW9udGggPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0WWVhcihuZXh0TW9udGgpLFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgobmV4dE1vbnRoKSxcbiAgICAgIDEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRNb250aCk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIHRoZSBcInByZXZpb3VzIHllYXJcIiBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLiAqL1xuICBwcml2YXRlIF9wcmV2aW91c1llYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBwcmV2WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpIC0gMSxcbiAgICAgIDEyLFxuICAgICAgMzEsXG4gICAgKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZC4gKi9cbiAgcHJpdmF0ZSBfbmV4dFllYXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKHRoaXMuX2FjdGl2ZURhdGUpICsgKHRoaXMuX3dpZGUgPyAyIDogMSksXG4gICAgICAxLFxuICAgICAgMSxcbiAgICApO1xuICAgIHJldHVybiB0aGlzLl9uZXh0RGlzYWJsZWQobmV4dFllYXIpO1xuICB9XG5cbiAgLyoqIENoZWNrcyBpZiB0aGUgXCJwcmV2aW91cyB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB5ZWFyIHZpZXcuICovXG4gIHByaXZhdGUgX3ByZXZpb3VzWWVhclJhbmdlRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldlllYXIgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHRoaXMuX3llYXJzWzBdWzBdIC0gMSwgMTIsIDMxKTtcbiAgICByZXR1cm4gdGhpcy5fcHJldkRpc2FibGVkKHByZXZZZWFyKTtcbiAgfVxuXG4gIC8qKiBDaGVja3MgaWYgdGhlIFwibmV4dCB5ZWFyXCIgYnV0dG9uIHNob3VsZCBiZSBkaXNhYmxlZCBpbiB5ZWFyIHZpZXcuICovXG4gIHByaXZhdGUgX25leHRZZWFyUmFuZ2VEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCB5ZWFycyA9IHRoaXMuX3dpZGUgPyB0aGlzLl9uZXh0TW9udGhZZWFycyA6IHRoaXMuX3llYXJzO1xuICAgIGNvbnN0IGxhc3RZZWFyUmFuZ2UgPSB5ZWFyc1t5ZWFycy5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBsYXN0WWVhciA9IGxhc3RZZWFyUmFuZ2VbbGFzdFllYXJSYW5nZS5sZW5ndGggLSAxXTtcbiAgICBjb25zdCBuZXh0WWVhciA9IHRoaXMuX2RhdGVBZGFwdGVyLmNyZWF0ZURhdGUobGFzdFllYXIgKyAxLCAxLCAxKTtcbiAgICByZXR1cm4gdGhpcy5fbmV4dERpc2FibGVkKG5leHRZZWFyKTtcbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZVRhYmxlQmx1cihldmVudFRhcmdldDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnRUYXJnZXQ/LmxvY2FsTmFtZSAhPT0gJ3NiYi1jYWxlbmRhci1kYXknKSB7XG4gICAgICB0aGlzLl9zZXRUYWJJbmRleCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3NldFRhYkluZGV4KCk6IHZvaWQge1xuICAgIEFycmF5LmZyb20odGhpcy5fY2VsbHMuZmlsdGVyKChlKSA9PiBlLnRhYkluZGV4ID09PSAwKSA/PyBbXSkuZm9yRWFjaChcbiAgICAgIChkYXkpID0+IChkYXkudGFiSW5kZXggPSAtMSksXG4gICAgKTtcbiAgICBjb25zdCBmaXJzdEZvY3VzYWJsZSA9IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlKCk7XG4gICAgaWYgKGZpcnN0Rm9jdXNhYmxlKSB7XG4gICAgICBmaXJzdEZvY3VzYWJsZS50YWJJbmRleCA9IDA7XG4gICAgfVxuICB9XG5cbiAgLyoqIEdldCB0aGUgZWxlbWVudCBpbiB0aGUgY2FsZW5kYXIgdG8gYXNzaWduIGZvY3VzLiAqL1xuICBwcml2YXRlIF9nZXRGaXJzdEZvY3VzYWJsZSgpOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB8IG51bGwge1xuICAgIGlmICh0aGlzLl9jYWxlbmRhclZpZXcgPT09ICdkYXknKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZE9yQ3VycmVudCA9XG4gICAgICAgIHRoaXMuX2NlbGxzLmZpbmQoKGUpID0+IGUubWF0Y2hlcygnOnN0YXRlKHNlbGVjdGVkKScpKSA/P1xuICAgICAgICB0aGlzLl9jZWxscy5maW5kKChlKSA9PiBlLm1hdGNoZXMoJzpzdGF0ZShjdXJyZW50KScpKTtcbiAgICAgIHJldHVybiBzZWxlY3RlZE9yQ3VycmVudCAmJiAhc2VsZWN0ZWRPckN1cnJlbnQuZGlzYWJsZWRcbiAgICAgICAgPyBzZWxlY3RlZE9yQ3VycmVudFxuICAgICAgICA6IHRoaXMuX2dldEZpcnN0Rm9jdXNhYmxlRGF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHNlbGVjdGVkT3JDdXJyZW50ID1cbiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PignOnN0YXRlKHNlbGVjdGVkKScpID8/XG4gICAgICAgIHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcjxTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudD4oJzpzdGF0ZShjdXJyZW50KScpO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkT3JDdXJyZW50ICYmICFzZWxlY3RlZE9yQ3VycmVudC5kaXNhYmxlZFxuICAgICAgICA/IHNlbGVjdGVkT3JDdXJyZW50XG4gICAgICAgIDogdGhpcy5zaGFkb3dSb290IS5xdWVyeVNlbGVjdG9yPFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50PihcbiAgICAgICAgICAgIGBzYmItY2FsZW5kYXItJHt0aGlzLl9jYWxlbmRhclZpZXd9Om5vdChbZGlzYWJsZWRdKWAsXG4gICAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW4gYGRheWAgdmlldyBpbiBgdmVydGljYWxgIG9yaWVudGF0aW9uLFxuICAgKiBpZiB0aGUgZmlyc3Qgb2YgdGhlIG1vbnRoIGlzIG5vdCBhIE1vbmRheSwgaXQgaXMgbm90IHRoZSBmaXJzdCByZW5kZXJlZCBlbGVtZW50IGluIHRoZSB0YWJsZSxcbiAgICogc28gYHRoaXMuc2hhZG93Um9vdCEucXVlcnlTZWxlY3Rvcignc2JiLWNhbGVuZGFyLWRheTpub3QoW2Rpc2FibGVkXSknKWAgd2lsbCByZXR1cm4gYSB3cm9uZyB2YWx1ZS5cbiAgICpcbiAgICogVG8gc29sdmUgdGhpcywgdGhlIGVsZW1lbnQgd2l0aCB0aGUgbG93ZXN0IGB2YWx1ZWAgaXMgdGFrZW4gKElTTyBTdHJpbmcgYXJlIG9yZGVyZWQpLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Rmlyc3RGb2N1c2FibGVEYXkoKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHwgbnVsbCB7XG4gICAgY29uc3QgY2VsbHMgPSB0aGlzLl9jZWxscyBhcyBTYmJDYWxlbmRhckRheUVsZW1lbnRbXTtcbiAgICBjb25zdCBkYXlzSW5WaWV3ID0gY2VsbHMuZmlsdGVyKChlKSA9PiAhZS5kaXNhYmxlZCk7XG4gICAgaWYgKCFkYXlzSW5WaWV3IHx8IGRheXNJblZpZXcubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZmlyc3RFbGVtZW50ID0gZGF5c0luVmlld1xuICAgICAgICAubWFwKChlKTogc3RyaW5nID0+IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShlLnZhbHVlISBhcyBUKSlcbiAgICAgICAgLnNvcnQoKVswXTtcbiAgICAgIHJldHVybiBjZWxscy5maW5kKChlKSA9PiBlLm1hdGNoZXMoYFtzbG90PVwiJHtmaXJzdEVsZW1lbnR9XCJdYCkpISA/PyBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZlbnQ6IEtleWJvYXJkRXZlbnQsIGRheT86IERheTxUPik6IHZvaWQge1xuICAgIGlmIChpc0Fycm93S2V5T3JQYWdlS2V5c1ByZXNzZWQoZXZlbnQpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICAvLyBHZXRzIHRoZSBjdXJyZW50bHkgcmVuZGVyZWQgdGFibGUncyBjZWxsO1xuICAgIC8vIHRoZXkgY291bGQgYmUgZGF5cywgbW9udGhzIG9yIHllYXJzIGJhc2VkIG9uIHRoZSBjdXJyZW50IHNlbGVjdGlvbiB2aWV3LlxuICAgIC8vIElmIGB3aWRlYCBpcyB0cnVlLCB5ZWFycyBhcmUgZG91YmxlZCBpbiBudW1iZXIgYW5kIGRheXMgYXJlIChyb3VnaGx5KSBkb3VibGVkIHRvbywgYWZmZWN0aW5nIHRoZSBgaW5kZXhgIGNhbGN1bGF0aW9uLlxuICAgIGNvbnN0IGNlbGxzID0gdGhpcy5fY2VsbHM7XG4gICAgY29uc3QgaW5kZXg6IG51bWJlciA9IGNlbGxzLmZpbmRJbmRleCgoZSkgPT4gZSA9PT0gZXZlbnQudGFyZ2V0KTtcbiAgICBsZXQgbmV4dEVsOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudDtcbiAgICBpZiAoZGF5KSB7XG4gICAgICBuZXh0RWwgPSB0aGlzLl9uYXZpZ2F0ZUJ5S2V5Ym9hcmREYXlWaWV3KGV2ZW50LCBpbmRleCwgY2VsbHMgYXMgU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10sIGRheSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRFbCA9IHRoaXMuX25hdmlnYXRlQnlLZXlib2FyZChldmVudCwgaW5kZXgsIGNlbGxzKTtcbiAgICB9XG4gICAgY29uc3QgYWN0aXZlRWwgPSAodGhpcy5fZW5oYW5jZWRWYXJpYW50ID8gZG9jdW1lbnQgOiB0aGlzLnNoYWRvd1Jvb3QhKVxuICAgICAgLmFjdGl2ZUVsZW1lbnQgYXMgU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnQ7XG4gICAgaWYgKG5leHRFbCAhPT0gYWN0aXZlRWwpIHtcbiAgICAgIG5leHRFbC50YWJJbmRleCA9IDA7XG4gICAgICBuZXh0RWw/LmZvY3VzKCk7XG4gICAgICBhY3RpdmVFbC50YWJJbmRleCA9IC0xO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX25hdmlnYXRlQnlLZXlib2FyZERheVZpZXcoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGRheTogRGF5PFQ+LFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IGFycm93c09mZnNldCA9XG4gICAgICB0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCdcbiAgICAgICAgPyB7IGxlZnRSaWdodDogMSwgdXBEb3duOiBEQVlTX1BFUl9ST1cgfVxuICAgICAgICA6IHsgbGVmdFJpZ2h0OiBEQVlTX1BFUl9ST1csIHVwRG93bjogMSB9O1xuICAgIGNvbnN0IG9mZnNldEZvclZlcnRpY2FsOiBudW1iZXIgPVxuICAgICAgaW5kZXggPCB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdE1vbnRoTGVuZ3RoXG4gICAgICAgID8gdGhpcy5fa2V5Ym9hcmROYXZpZ2F0aW9uRGF5Vmlld1BhcmFtZXRlcnMuZmlyc3RNb250aE9mZnNldFxuICAgICAgICA6IHRoaXMuX2tleWJvYXJkTmF2aWdhdGlvbkRheVZpZXdQYXJhbWV0ZXJzLnNlY29uZE1vbnRoT2Zmc2V0O1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LnVwRG93bik7XG4gICAgICBjYXNlICdBcnJvd0Rvd24nOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUFycm93cyhjZWxscywgaW5kZXgsIGRheS5kYXRlVmFsdWUsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgY2FzZSAnQXJyb3dMZWZ0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCAtYXJyb3dzT2Zmc2V0LmxlZnRSaWdodCk7XG4gICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlBcnJvd3MoY2VsbHMsIGluZGV4LCBkYXkuZGF0ZVZhbHVlLCBhcnJvd3NPZmZzZXQubGVmdFJpZ2h0KTtcbiAgICAgIGNhc2UgJ1BhZ2VVcCc6IHtcbiAgICAgICAgaWYgKHRoaXMub3JpZW50YXRpb24gPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGNvbnN0IGZpcnN0T2ZXZWVrOiBudW1iZXIgPSArZGF5LmRheVZhbHVlICUgREFZU19QRVJfUk9XIHx8IERBWVNfUEVSX1JPVztcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gZmlyc3RPZldlZWsgLSArZGF5LmRheVZhbHVlO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIGFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHdlZWtOdW1iZXI6IG51bWJlciA9IE1hdGguY2VpbCgoK2RheS5kYXlWYWx1ZSArIG9mZnNldEZvclZlcnRpY2FsKSAvIERBWVNfUEVSX1JPVyk7XG4gICAgICAgICAgY29uc3QgZmlyc3RPZldlZWs6IG51bWJlciA9ICh3ZWVrTnVtYmVyIC0gMSkgKiBEQVlTX1BFUl9ST1cgLSBvZmZzZXRGb3JWZXJ0aWNhbCArIDE7XG4gICAgICAgICAgY29uc3QgZGVsdGE6IG51bWJlciA9IGZpcnN0T2ZXZWVrIC0gK2RheS5kYXlWYWx1ZTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheVBhZ2VVcERvd24oY2VsbHMsIGluZGV4LCBkYXksIGRlbHRhLCBhcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY2FzZSAnUGFnZURvd24nOiB7XG4gICAgICAgIGlmICh0aGlzLm9yaWVudGF0aW9uID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBjb25zdCBtb250aEluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gMSA6ICtkYXkubW9udGhWYWx1ZSArIDE7XG4gICAgICAgICAgY29uc3QgeWVhckluQm91bmRzID0gK2RheS5tb250aFZhbHVlICsgMSA+IDEyID8gK2RheS55ZWFyVmFsdWUgKyAxIDogK2RheS55ZWFyVmFsdWU7XG4gICAgICAgICAgY29uc3QgZmlyc3ROZXh0TW9udGg6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHllYXJJbkJvdW5kcywgbW9udGhJbkJvdW5kcywgMSk7XG4gICAgICAgICAgY29uc3QgbGFzdE9mTW9udGg6IG51bWJlciA9IHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUoXG4gICAgICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZmlyc3ROZXh0TW9udGgsIC0xKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IGRlbHRhOiBudW1iZXIgPVxuICAgICAgICAgICAgTWF0aC50cnVuYygobGFzdE9mTW9udGggLSArZGF5LmRheVZhbHVlISkgLyBEQVlTX1BFUl9ST1cpICogREFZU19QRVJfUk9XO1xuICAgICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEsIC1hcnJvd3NPZmZzZXQudXBEb3duKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB3ZWVrTnVtYmVyOiBudW1iZXIgPSBNYXRoLmNlaWwoKCtkYXkuZGF5VmFsdWUgKyBvZmZzZXRGb3JWZXJ0aWNhbCkgLyBEQVlTX1BFUl9ST1cpO1xuICAgICAgICAgIGNvbnN0IGxhc3RPZldlZWs6IG51bWJlciA9IHdlZWtOdW1iZXIgKiBEQVlTX1BFUl9ST1cgLSBvZmZzZXRGb3JWZXJ0aWNhbDtcbiAgICAgICAgICBjb25zdCBkZWx0YTogbnVtYmVyID0gbGFzdE9mV2VlayAtICtkYXkuZGF5VmFsdWU7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmREYXlQYWdlVXBEb3duKGNlbGxzLCBpbmRleCwgZGF5LCBkZWx0YSwgLWFycm93c09mZnNldC51cERvd24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjYXNlICdIb21lJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5fZmluZERheUZpcnN0KGNlbGxzLCBpbmRleCwgZGF5LCAxKTtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ0VuZCc6IHtcbiAgICAgICAgY29uc3QgbW9udGhJbkJvdW5kcyA9ICtkYXkubW9udGhWYWx1ZSArIDEgPiAxMiA/IDEgOiArZGF5Lm1vbnRoVmFsdWUgKyAxO1xuICAgICAgICBjb25zdCB5ZWFySW5Cb3VuZHMgPSArZGF5Lm1vbnRoVmFsdWUgKyAxID4gMTIgPyArZGF5LnllYXJWYWx1ZSArIDEgOiArZGF5LnllYXJWYWx1ZTtcbiAgICAgICAgY29uc3QgZmlyc3ROZXh0TW9udGg6IFQgPSB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKHllYXJJbkJvdW5kcywgbW9udGhJbkJvdW5kcywgMSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5TGFzdChjZWxscywgaW5kZXgsIGZpcnN0TmV4dE1vbnRoKTtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfaXNEYXlPdXRPZlZpZXcoZGF0ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGRhdGUgPCB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5maXJzdERheUluVmlldyEgfHxcbiAgICAgIGRhdGUgPiB0aGlzLl9rZXlib2FyZE5hdmlnYXRpb25EYXlWaWV3UGFyYW1ldGVycy5sYXN0RGF5SW5WaWV3IVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIF9maW5kRGF5QXJyb3dzKFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGRhdGU6IFQsXG4gICAgZGVsdGE6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF0ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5QXJyb3dzKGNlbGxzLCBpbmRleCwgdGhpcy5fZGF0ZUFkYXB0ZXIuZGVzZXJpYWxpemUobmV3RGF0ZVZhbHVlKSEsIGRlbHRhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgcHJpdmF0ZSBfZmluZERheVBhZ2VVcERvd24oXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyRGF5RWxlbWVudFtdLFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgZGF5OiBEYXk8VD4sXG4gICAgZGVsdGE6IG51bWJlcixcbiAgICBkZWx0YUlmRGlzYWJsZWQ6IG51bWJlcixcbiAgKTogU2JiQ2FsZW5kYXJEYXlFbGVtZW50IHtcbiAgICBjb25zdCBuZXdEYXRlVmFsdWUgPSB0aGlzLl9kYXRlQWRhcHRlci50b0lzbzg2MDEoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5hZGRDYWxlbmRhckRheXMoZGF5LmRhdGVWYWx1ZSwgZGVsdGEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5UGFnZVVwRG93bihjZWxscywgaW5kZXgsIGRheSwgZGVsdGEgKyBkZWx0YUlmRGlzYWJsZWQsIGRlbHRhSWZEaXNhYmxlZCk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlGaXJzdChcbiAgICBjZWxsczogU2JiQ2FsZW5kYXJEYXlFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkYXk6IERheTxUPixcbiAgICBkYXRlOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyRGF5RWxlbWVudCB7XG4gICAgY29uc3QgbmV3RGF0ZVZhbHVlID0gdGhpcy5fZGF0ZUFkYXB0ZXIudG9Jc284NjAxKFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZSgrZGF5LnllYXJWYWx1ZSwgK2RheS5tb250aFZhbHVlLCBkYXRlKSxcbiAgICApO1xuICAgIGlmICh0aGlzLl9pc0RheU91dE9mVmlldyhuZXdEYXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gY2VsbHNbaW5kZXhdO1xuICAgIH1cbiAgICBjb25zdCBuZXh0Q2VsbCA9IGNlbGxzLmZpbmQoKGUpID0+IHRoaXMuX21hcFZhbHVlVG9JU09EYXRlKGUudmFsdWUhKSA9PT0gbmV3RGF0ZVZhbHVlKTtcbiAgICBpZiAoIW5leHRDZWxsIHx8IG5leHRDZWxsLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZmluZERheUZpcnN0KGNlbGxzLCBpbmRleCwgZGF5LCBkYXRlICsgMSk7XG4gICAgfVxuICAgIHJldHVybiBuZXh0Q2VsbDtcbiAgfVxuXG4gIHByaXZhdGUgX2ZpbmREYXlMYXN0KFxuICAgIGNlbGxzOiBTYmJDYWxlbmRhckRheUVsZW1lbnRbXSxcbiAgICBpbmRleDogbnVtYmVyLFxuICAgIGZpcnN0TmV4dE1vbnRoOiBULFxuICApOiBTYmJDYWxlbmRhckRheUVsZW1lbnQge1xuICAgIGNvbnN0IG5ld0RhdGVWYWx1ZSA9IHRoaXMuX2RhdGVBZGFwdGVyLnRvSXNvODYwMShcbiAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmFkZENhbGVuZGFyRGF5cyhmaXJzdE5leHRNb250aCwgLTEpLFxuICAgICk7XG4gICAgaWYgKHRoaXMuX2lzRGF5T3V0T2ZWaWV3KG5ld0RhdGVWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBjZWxsc1tpbmRleF07XG4gICAgfVxuICAgIGNvbnN0IG5leHRDZWxsID0gY2VsbHMuZmluZCgoZSkgPT4gdGhpcy5fbWFwVmFsdWVUb0lTT0RhdGUoZS52YWx1ZSEpID09PSBuZXdEYXRlVmFsdWUpO1xuICAgIGlmICghbmV4dENlbGwgfHwgbmV4dENlbGwuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5kRGF5TGFzdChjZWxscywgaW5kZXgsIHRoaXMuX2RhdGVBZGFwdGVyLmRlc2VyaWFsaXplKG5ld0RhdGVWYWx1ZSkhKTtcbiAgICB9XG4gICAgcmV0dXJuIG5leHRDZWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGluZGV4IG9mIHRoZSBlbGVtZW50IHRvIG1vdmUgdG8sIGJhc2VkIG9uIGEgbGlzdCBvZiBlbGVtZW50cyAod2hpY2ggY2FuIGJlIHBvdGVudGlhbGx5IGRpc2FibGVkKSxcbiAgICogdGhlIGtleWJvYXJkIGlucHV0IGFuZCB0aGUgcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgZWxlbWVudCBpbiB0aGUgbGlzdC5cbiAgICogSW4gdGhlIGRheSB2aWV3LCB0aGUgYGRheT86IERheWAgcGFyYW1ldGVyIGlzIG1hbmRhdG9yeSBmb3IgY2FsY3VsYXRpb24sXG4gICAqIHdoaWxlIGluIG1vbnRoIGFuZCB5ZWFyIHZpZXcgaXQncyBub3QgZHVlIHRvIHRoZSBmaXhlZCBhbW91bnQgb2YgcmVuZGVyZWQgY2VsbHMuXG4gICAqL1xuICBwcml2YXRlIF9uYXZpZ2F0ZUJ5S2V5Ym9hcmQoXG4gICAgZXZ0OiBLZXlib2FyZEV2ZW50LFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgY2VsbHM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50SW5kZXhGb3JXaWRlTW9kZSxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlLFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLFxuICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgfTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMgPVxuICAgICAgdGhpcy5fY2FsY3VsYXRlUGFyYW1ldGVyc0ZvcktleWJvYXJkTmF2aWdhdGlvbihpbmRleCwgdGhpcy5fY2FsZW5kYXJWaWV3ID09PSAneWVhcicpO1xuXG4gICAgc3dpdGNoIChldnQua2V5KSB7XG4gICAgICBjYXNlICdBcnJvd1VwJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ZpbmROZXh0KGNlbGxzLCBpbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTmV4dChjZWxscywgaW5kZXgsIC0xKTtcbiAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZE5leHQoY2VsbHMsIGluZGV4LCAxKTtcbiAgICAgIGNhc2UgJ0hvbWUnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0KGNlbGxzLCBvZmZzZXRGb3JXaWRlTW9kZSk7XG4gICAgICBjYXNlICdQYWdlVXAnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZEZpcnN0T25Db2x1bW4oXG4gICAgICAgICAgY2VsbHMsXG4gICAgICAgICAgZWxlbWVudEluZGV4Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgb2Zmc2V0Rm9yV2lkZU1vZGUsXG4gICAgICAgICAgdmVydGljYWxPZmZzZXQsXG4gICAgICAgICk7XG4gICAgICBjYXNlICdQYWdlRG93bic6XG4gICAgICAgIHJldHVybiB0aGlzLl9maW5kTGFzdE9uQ29sdW1uKGNlbGxzLCBpbmRleCwgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlLCB2ZXJ0aWNhbE9mZnNldCk7XG4gICAgICBjYXNlICdFbmQnOlxuICAgICAgICByZXR1cm4gdGhpcy5fZmluZExhc3QoY2VsbHMsIGxhc3RFbGVtZW50SW5kZXhGb3JXaWRlTW9kZSAtIDEpO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNlbGxzW2luZGV4XTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgcGFyYW1ldGVycyBuZWVkZWQgaW4ga2V5Ym9hcmQgbmF2aWdhdGlvbiBpbiB5ZWFyIGFuZCBtb250aCB2aWV3LlxuICAgKiBAcGFyYW0gaW5kZXggVGhlIHN0YXJ0aW5nIGVsZW1lbnQncyBpbmRleCBpbiB0aGUgY2VsbCBhcnJheS5cbiAgICogQHBhcmFtIGlzWWVhclZpZXcgV2hldGhlciB0aGUgZGlzcGxheWVkIGB2aWV3YCBpcyB0aGUgeWVhciBvbmUuXG4gICAqL1xuICBwcml2YXRlIF9jYWxjdWxhdGVQYXJhbWV0ZXJzRm9yS2V5Ym9hcmROYXZpZ2F0aW9uKFxuICAgIGluZGV4OiBudW1iZXIsXG4gICAgaXNZZWFyVmlldzogYm9vbGVhbixcbiAgKTogQ2FsZW5kYXJLZXlib2FyZE5hdmlnYXRpb25Nb250aFllYXJWaWV3c1BhcmFtZXRlcnMge1xuICAgIGNvbnN0IGVsZW1lbnRzUGVyUGFnZSA9IGlzWWVhclZpZXcgPyBZRUFSU19QRVJfUEFHRSA6IE1PTlRIU19QRVJfUEFHRTtcbiAgICBjb25zdCBvZmZzZXQ6IG51bWJlciA9IE1hdGgudHJ1bmMoaW5kZXggLyBlbGVtZW50c1BlclBhZ2UpICogZWxlbWVudHNQZXJQYWdlO1xuICAgIGNvbnN0IGluZGV4SW5WaWV3OiBudW1iZXIgPSBvZmZzZXQgPT09IDAgPyBpbmRleCA6IGluZGV4IC0gZWxlbWVudHNQZXJQYWdlO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJ0aWNhbE9mZnNldDogaXNZZWFyVmlldyA/IFlFQVJTX1BFUl9ST1cgOiBNT05USFNfUEVSX1JPVyxcbiAgICAgIGVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBpbmRleEluVmlldyxcbiAgICAgIG9mZnNldEZvcldpZGVNb2RlOiBpbmRleCAtIGluZGV4SW5WaWV3LFxuICAgICAgbGFzdEVsZW1lbnRJbmRleEZvcldpZGVNb2RlOiBvZmZzZXQgPT09IDAgPyBlbGVtZW50c1BlclBhZ2UgOiBlbGVtZW50c1BlclBhZ2UgKiAyLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbmV4dCBlbGVtZW50IG9mIHRoZSBwcm92aWRlZCBhcnJheSBzdGFydGluZyBmcm9tIGBpbmRleGAgYnkgYWRkaW5nIGBkZWx0YWAuXG4gICAqIElmIHRoZSBmb3VuZCBlbGVtZW50IGlzIGRpc2FibGVkLCBpdCBjb250aW51ZXMgYWRkaW5nIGBkZWx0YWAgdW50aWwgaXQgZmluZHMgYW4gZW5hYmxlZCBvbmUgaW4gdGhlIGFycmF5IGJvdW5kcy5cbiAgICovXG4gIHByaXZhdGUgX2ZpbmROZXh0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBkZWx0YTogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgbGV0IG5leHRJbmRleCA9IGluZGV4ICsgZGVsdGE7XG4gICAgd2hpbGUgKG5leHRJbmRleCA8IGRheXMubGVuZ3RoICYmIGRheXNbbmV4dEluZGV4XT8uZGlzYWJsZWQpIHtcbiAgICAgIG5leHRJbmRleCArPSBkZWx0YTtcbiAgICB9XG4gICAgcmV0dXJuIGRheXNbbmV4dEluZGV4XSA/PyBkYXlzW2luZGV4XTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBmaXJzdCBlbmFibGVkIGVsZW1lbnQgaW4gdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kRmlyc3QoXG4gICAgZGF5czogU2JiQ2FsZW5kYXJDZWxsQmFzZUVsZW1lbnRbXSxcbiAgICBmaXJzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbZmlyc3RPZkN1cnJlbnRNb250aF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tmaXJzdE9mQ3VycmVudE1vbnRoXVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBmaXJzdE9mQ3VycmVudE1vbnRoLCAxKTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRMYXN0KFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgbGFzdE9mQ3VycmVudE1vbnRoOiBudW1iZXIsXG4gICk6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50IHtcbiAgICByZXR1cm4gIWRheXNbbGFzdE9mQ3VycmVudE1vbnRoXS5kaXNhYmxlZFxuICAgICAgPyBkYXlzW2xhc3RPZkN1cnJlbnRNb250aF1cbiAgICAgIDogdGhpcy5fZmluZE5leHQoZGF5cywgbGFzdE9mQ3VycmVudE1vbnRoLCAtMSk7XG4gIH1cblxuICAvKiogRmluZCB0aGUgZmlyc3QgZW5hYmxlZCBlbGVtZW50IGluIHRoZSBzYW1lIGNvbHVtbiBvZiB0aGUgcHJvdmlkZWQgYXJyYXkuICovXG4gIHByaXZhdGUgX2ZpbmRGaXJzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gKGluZGV4ICUgdmVydGljYWxPZmZzZXQpICsgb2Zmc2V0O1xuICAgIHJldHVybiAhZGF5c1tuZXh0SW5kZXhdLmRpc2FibGVkXG4gICAgICA/IGRheXNbbmV4dEluZGV4XVxuICAgICAgOiB0aGlzLl9maW5kTmV4dChkYXlzLCBuZXh0SW5kZXgsIHZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIC8qKiBGaW5kIHRoZSBsYXN0IGVuYWJsZWQgZWxlbWVudCBpbiB0aGUgc2FtZSBjb2x1bW4gb2YgdGhlIHByb3ZpZGVkIGFycmF5LiAqL1xuICBwcml2YXRlIF9maW5kTGFzdE9uQ29sdW1uKFxuICAgIGRheXM6IFNiYkNhbGVuZGFyQ2VsbEJhc2VFbGVtZW50W10sXG4gICAgaW5kZXg6IG51bWJlcixcbiAgICBvZmZzZXQ6IG51bWJlcixcbiAgICB2ZXJ0aWNhbE9mZnNldDogbnVtYmVyLFxuICApOiBTYmJDYWxlbmRhckNlbGxCYXNlRWxlbWVudCB7XG4gICAgY29uc3QgbmV4dEluZGV4ID0gaW5kZXggKyBNYXRoLnRydW5jKChvZmZzZXQgLSBpbmRleCAtIDEpIC8gdmVydGljYWxPZmZzZXQpICogdmVydGljYWxPZmZzZXQ7XG4gICAgcmV0dXJuICFkYXlzW25leHRJbmRleF0uZGlzYWJsZWRcbiAgICAgID8gZGF5c1tuZXh0SW5kZXhdXG4gICAgICA6IHRoaXMuX2ZpbmROZXh0KGRheXMsIG5leHRJbmRleCwgLXZlcnRpY2FsT2Zmc2V0KTtcbiAgfVxuXG4gIHByaXZhdGUgX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKGluaXRUcmFuc2l0aW9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICB0aGlzLl9yZXNldENhbGVuZGFyVmlldyhpbml0VHJhbnNpdGlvbik7XG4gICAgdGhpcy5fZW1pdE1vbnRoQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIF9yZXNldENhbGVuZGFyVmlldyhpbml0VHJhbnNpdGlvbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NvbnRhaW5pbmdGb2N1cykge1xuICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMuX2FjdGl2ZURhdGUgPVxuICAgICAgKHRoaXMubXVsdGlwbGUgPyAodGhpcy5fc2VsZWN0ZWQgYXMgVFtdKS5hdCgtMSkgOiAodGhpcy5fc2VsZWN0ZWQgYXMgVCkpID8/XG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci50b2RheSgpO1xuICAgIHRoaXMuX3NldENob3NlblllYXIoKTtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pbml0KCk7XG4gICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9IHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMudmlldztcblxuICAgIGlmIChpbml0VHJhbnNpdGlvbikge1xuICAgICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB9XG4gIH1cblxuICAvKiogUmVuZGVyIHRoZSB2aWV3IGZvciB0aGUgZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyRGF5VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgbmV4dE1vbnRoQWN0aXZlRGF0ZSA9IHRoaXMuX3dpZGVcbiAgICAgID8gdGhpcy5fZGF0ZUFkYXB0ZXIuYWRkQ2FsZW5kYXJNb250aHModGhpcy5fYWN0aXZlRGF0ZSwgMSlcbiAgICAgIDogdW5kZWZpbmVkO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudE1vbnRoKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9wcmV2aW91c01vbnRoRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtbW9udGhcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZUxhYmVsRm9yRGF5Vmlldyh0aGlzLl9hY3RpdmVEYXRlKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVMYWJlbEZvckRheVZpZXcobmV4dE1vbnRoQWN0aXZlRGF0ZSEpIDogbm90aGluZ31cbiAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seSByb2xlPVwic3RhdHVzXCI+XG4gICAgICAgICAgICAke3RoaXMuX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcodGhpcy5fYWN0aXZlRGF0ZSwgbmV4dE1vbnRoQWN0aXZlRGF0ZSEpfVxuICAgICAgICAgIDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAoKSA9PiB0aGlzLl9nb1RvRGlmZmVyZW50TW9udGgoMSksXG4gICAgICAgICAgaTE4bk5leHRNb250aFt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XSxcbiAgICAgICAgICB0aGlzLl9uZXh0TW9udGhEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1vdmVyZmxvdy1icmVha1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS1kYXktdmlld1wiPlxuICAgICAgICAgICR7dGhpcy5vcmllbnRhdGlvbiA9PT0gJ2hvcml6b250YWwnXG4gICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl93ZWVrcywgdGhpcy5fd2Vla051bWJlcnMpfVxuICAgICAgICAgICAgICAgICR7dGhpcy5fd2lkZVxuICAgICAgICAgICAgICAgICAgPyB0aGlzLl9jcmVhdGVEYXlUYWJsZSh0aGlzLl9uZXh0TW9udGhXZWVrcywgdGhpcy5fbmV4dE1vbnRoV2Vla051bWJlcnMsIHRydWUpXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGBcbiAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheVRhYmxlVmVydGljYWwodGhpcy5fd2Vla3MsIHRoaXMuX3dlZWtOdW1iZXJzKX1cbiAgICAgICAgICAgICAgICAke3RoaXMuX3dpZGVcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5fY3JlYXRlRGF5VGFibGVWZXJ0aWNhbChcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0TW9udGhXZWVrcyxcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9uZXh0TW9udGhXZWVrTnVtYmVycyxcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0TW9udGhBY3RpdmVEYXRlLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgIGB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSBtb250aCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUxhYmVsRm9yRGF5VmlldyhkOiBUKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IG1vbnRoTGFiZWwgPSBgJHtcbiAgICAgIHRoaXMuX21vbnRoTmFtZXNbdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0TW9udGgoZCkgLSAxXVxuICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fZGF0ZS1zZWxlY3Rpb24gc2JiLWNhbGVuZGFyX19jb250cm9scy1jaGFuZ2UtZGF0ZVwiXG4gICAgICAgIGFyaWEtbGFiZWw9XCIke2kxOG5ZZWFyTW9udGhTZWxlY3Rpb25bdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7bW9udGhMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fcmVzZXRGb2N1cyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fbmV4dENhbGVuZGFyVmlldyA9ICd5ZWFyJztcbiAgICAgICAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICAgICAgICB9fVxuICAgICAgPlxuICAgICAgICAke21vbnRoTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC1kb3duLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgYXJpYS1sYWJlbCBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZUFyaWFMYWJlbEZvckRheVZpZXcoLi4uZGF0ZXM6IFRbXSk6IHN0cmluZyB7XG4gICAgbGV0IG1vbnRoTGFiZWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGQgb2YgZGF0ZXMpIHtcbiAgICAgIGlmIChkKSB7XG4gICAgICAgIG1vbnRoTGFiZWwgKz0gYCR7XG4gICAgICAgICAgdGhpcy5fbW9udGhOYW1lc1t0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aChkKSAtIDFdXG4gICAgICAgIH0gJHt0aGlzLl9kYXRlQWRhcHRlci5nZXRZZWFyKGQpfSBgO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbW9udGhMYWJlbDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjYWxlbmRhciB0YWJsZSBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheVRhYmxlKFxuICAgIHdlZWtzOiBEYXk8VD5bXVtdLFxuICAgIHdlZWtOdW1iZXJzOiBudW1iZXJbXSxcbiAgICBpc1dpZGVOZXh0TW9udGg6IGJvb2xlYW4gPSBmYWxzZSxcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrTnVtYmVyczogRGF5PFQ+W10gPSAoXG4gICAgICB0aGlzLl93aWRlXG4gICAgICAgID8gWy4uLnRoaXMuX3dlZWtzLCAuLi50aGlzLl9uZXh0TW9udGhXZWVrc11cbiAgICAgICAgOiBpc1dpZGVOZXh0TW9udGhcbiAgICAgICAgICA/IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgICAgOiB0aGlzLl93ZWVrc1xuICAgICkuZmxhdCgpO1xuICAgIGNvbnN0IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrRGF5czogRGF5PFQ+W10gPSAoXG4gICAgICBpc1dpZGVOZXh0TW9udGggPyB0aGlzLl9uZXh0TW9udGhXZWVrcyA6IHRoaXMuX3dlZWtzXG4gICAgKS5mbGF0KCk7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgQGZvY3Vzb3V0PSR7KGV2ZW50OiBGb2N1c0V2ZW50KSA9PlxuICAgICAgICAgIHRoaXMuX2hhbmRsZVRhYmxlQmx1cihldmVudC5yZWxhdGVkVGFyZ2V0IGFzIEhUTUxFbGVtZW50KX1cbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgICA+XG4gICAgICAgIDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgPHRyPlxuICAgICAgICAgICAgJHt0aGlzLndlZWtOdW1iZXJzID8gaHRtbGA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+PC90aD5gIDogbm90aGluZ31cbiAgICAgICAgICAgICR7dGhpcy5fd2Vla2RheXMubWFwKFxuICAgICAgICAgICAgICAod2Vla0RheTogV2Vla2RheSwgaW5kZXg6IG51bWJlcikgPT4gaHRtbGBcbiAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsXCI+XG4gICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrZGF5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtEYXl9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBOT1RFOiBTdW5kYXlzIGhhdmUgaW5kZXggNywgd2hpbGUgdGhlaXIgd2Vla0RheVZhbHVlIGlzIDBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzOiBEYXk8VD5bXSA9IHdlZWtzRm9yU2VsZWN0TXVsdGlwbGVXZWVrRGF5cy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrRGF5VmFsdWUgPT09IChpbmRleCArIDEpICUgNyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApITtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKGRheXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke3dlZWtEYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtEYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvdHI+XG4gICAgICAgIDwvdGhlYWQ+XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7d2Vla3MubWFwKCh3ZWVrOiBEYXk8VD5bXSwgcm93SW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RSb3dPZmZzZXQ6IG51bWJlciA9IERBWVNfUEVSX1JPVyAtIHdlZWsubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKHJvd0luZGV4ID09PSAwICYmIGZpcnN0Um93T2Zmc2V0KSB7XG4gICAgICAgICAgICAgIHJldHVybiBodG1sYFxuICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICR7dGhpcy53ZWVrTnVtYmVyc1xuICAgICAgICAgICAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5tdWx0aXBsZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7d2Vla051bWJlcnNbMF19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF5OiBEYXk8VD4pID0+IGRheS53ZWVrVmFsdWUgPT09IHdlZWtOdW1iZXJzWzBdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKGRheXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3NiYi1jYWxlbmRhci13ZWVrbnVtYmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+JHtgJHtpMThuQ2FsZW5kYXJXZWVrTnVtYmVyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3dlZWtOdW1iZXJzWzBdfWB9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyc1swXX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAgICR7Wy4uLkFycmF5KGZpcnN0Um93T2Zmc2V0KS5rZXlzKCldLm1hcChcbiAgICAgICAgICAgICAgICAgICAgKCkgPT4gaHRtbGA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RkPmAsXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlDZWxscyh3ZWVrKX1cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICBgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlci1jZWxsLXZlcnRpY2FsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMubXVsdGlwbGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBodG1sYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci13ZWVrbnVtYmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3dlZWtOdW1iZXJzW3Jvd0luZGV4XX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheXM6IERheTxUPltdID0gd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzLmZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXk6IERheTxUPikgPT4gZGF5LndlZWtWYWx1ZSA9PT0gd2Vla051bWJlcnNbcm93SW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcnNbcm93SW5kZXhdfWB9PC9zYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtOdW1iZXJzW3Jvd0luZGV4XX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYH1cbiAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgICAgICAgICAgJHt0aGlzLl9jcmVhdGVEYXlDZWxscyh3ZWVrKX1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIGA7XG4gICAgICAgICAgfSl9XG4gICAgICAgIDwvdGJvZHk+XG4gICAgICA8L3RhYmxlPlxuICAgIGA7XG4gIH1cblxuICAvKiogQ3JlYXRlcyB0aGUgdGFibGUgaW4gb3JpZW50YXRpb249J3ZlcnRpY2FsJy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlRGF5VGFibGVWZXJ0aWNhbChcbiAgICB3ZWVrczogRGF5PFQ+W11bXSxcbiAgICB3ZWVrTnVtYmVyczogbnVtYmVyW10sXG4gICAgbmV4dE1vbnRoQWN0aXZlRGF0ZT86IFQsXG4gICk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICBjb25zdCB3ZWVrT2Zmc2V0ID0gdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0Rmlyc3RXZWVrT2Zmc2V0KFxuICAgICAgbmV4dE1vbnRoQWN0aXZlRGF0ZSA/PyB0aGlzLl9hY3RpdmVEYXRlLFxuICAgICk7XG4gICAgY29uc3Qgd2Vla3NGb3JTZWxlY3RNdWx0aXBsZVdlZWtOdW1iZXJzOiBEYXk8VD5bXSA9IChcbiAgICAgIHRoaXMuX3dpZGVcbiAgICAgICAgPyBbLi4udGhpcy5fd2Vla3MsIC4uLnRoaXMuX25leHRNb250aFdlZWtzXVxuICAgICAgICA6IG5leHRNb250aEFjdGl2ZURhdGVcbiAgICAgICAgICA/IHRoaXMuX25leHRNb250aFdlZWtzXG4gICAgICAgICAgOiB0aGlzLl93ZWVrc1xuICAgICkuZmxhdCgpO1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPHRhYmxlXG4gICAgICAgIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZVwiXG4gICAgICAgIEBmb2N1c291dD0keyhldmVudDogRm9jdXNFdmVudCkgPT5cbiAgICAgICAgICB0aGlzLl9oYW5kbGVUYWJsZUJsdXIoZXZlbnQucmVsYXRlZFRhcmdldCBhcyBIVE1MRWxlbWVudCl9XG4gICAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMud2Vla051bWJlcnNcbiAgICAgICAgICA/IGh0bWxgXG4gICAgICAgICAgICAgIDx0aGVhZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtaGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgJHtuZXh0TW9udGhBY3RpdmVEYXRlXG4gICAgICAgICAgICAgICAgICAgID8gbm90aGluZ1xuICAgICAgICAgICAgICAgICAgICA6IGh0bWxgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+PC90aD5gfVxuICAgICAgICAgICAgICAgICAgJHt3ZWVrTnVtYmVycy5tYXAoXG4gICAgICAgICAgICAgICAgICAgICh3ZWVrTnVtYmVyOiBudW1iZXIpID0+IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla251bWJlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrTnVtYmVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF5czogRGF5PFQ+W10gPSB3ZWVrc0ZvclNlbGVjdE11bHRpcGxlV2Vla051bWJlcnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRheTogRGF5PFQ+KSA9PiBkYXkud2Vla1ZhbHVlID09PSB3ZWVrTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkhO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3NlbGVjdE11bHRpcGxlRGF0ZXMoZGF5cyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9zYmItY2FsZW5kYXItd2Vla251bWJlcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4ke2Ake2kxOG5DYWxlbmRhcldlZWtOdW1iZXJbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF19ICR7d2Vla051bWJlcn1gfTwvc2JiLXNjcmVlbi1yZWFkZXItb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JHt3ZWVrTnVtYmVyfTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIGAsXG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICBgXG4gICAgICAgICAgOiBub3RoaW5nfVxuICAgICAgICA8dGJvZHkgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWJvZHlcIj5cbiAgICAgICAgICAke3dlZWtzLm1hcCgod2VlazogRGF5PFQ+W10sIHJvd0luZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHdlZWtkYXkgPSB0aGlzLl93ZWVrZGF5c1tyb3dJbmRleF07XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RhYmxlRGF5cyA9IHRoaXMuX3dpZGUgPyBbLi4ud2VlaywgLi4udGhpcy5fbmV4dE1vbnRoV2Vla3Nbcm93SW5kZXhdXSA6IHdlZWs7XG4gICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICR7bmV4dE1vbnRoQWN0aXZlRGF0ZVxuICAgICAgICAgICAgICAgICAgPyBub3RoaW5nXG4gICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbC12ZXJ0aWNhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLm11bHRpcGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzYmItY2FsZW5kYXItd2Vla2RheVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt3ZWVrZGF5fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9zZWxlY3RNdWx0aXBsZURhdGVzKHNlbGVjdGFibGVEYXlzKX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt3ZWVrZGF5Lm5hcnJvd31cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXdlZWtkYXk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYFxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGh0bWxgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c2JiLXNjcmVlbi1yZWFkZXItb25seT4ke3dlZWtkYXkubG9uZ308L3NiYi1zY3JlZW4tcmVhZGVyLW9ubHk+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBhcmlhLWhpZGRlbj1cInRydWVcIj4ke3dlZWtkYXkubmFycm93fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfVxuICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIGB9XG4gICAgICAgICAgICAgICAgJHtyb3dJbmRleCA8IHdlZWtPZmZzZXRcbiAgICAgICAgICAgICAgICAgID8gaHRtbGA8dGQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWRhdGFcIj48L3RkPmBcbiAgICAgICAgICAgICAgICAgIDogbm90aGluZ31cbiAgICAgICAgICAgICAgICAke3RoaXMuX2NyZWF0ZURheUNlbGxzKHdlZWspfVxuICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9KX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBjZWxscyBmb3IgdGhlIGRhaWx5IHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZURheUNlbGxzKHdlZWs6IERheTxUPltdKTogVGVtcGxhdGVSZXN1bHRbXSB7XG4gICAgcmV0dXJuIHdlZWsubWFwKChkYXk6IERheTxUPikgPT4ge1xuICAgICAgcmV0dXJuIGh0bWxgXG4gICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YSBzYmItY2FsZW5kYXJfX2RheS1jZWxsXCI+XG4gICAgICAgICAgPHNsb3QgbmFtZT0ke2RheS52YWx1ZX0+XG4gICAgICAgICAgICA8c2JiLWNhbGVuZGFyLWRheVxuICAgICAgICAgICAgICBzbG90PSR7ZGF5LnZhbHVlfVxuICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9zZWxlY3REYXRlKGRheS5kYXRlVmFsdWUpfVxuICAgICAgICAgICAgICBAa2V5ZG93bj0keyhldnQ6IEtleWJvYXJkRXZlbnQpID0+IHRoaXMuX2hhbmRsZUtleWJvYXJkRXZlbnQoZXZ0LCBkYXkpfVxuICAgICAgICAgICAgPjwvc2JiLWNhbGVuZGFyLWRheT5cbiAgICAgICAgICA8L3Nsb3Q+XG4gICAgICAgIDwvdGQ+XG4gICAgICBgO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIFJlbmRlciB0aGUgdmlldyBmb3IgdGhlIG1vbnRoIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyTW9udGhWaWV3KCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGBcbiAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzXCI+XG4gICAgICAgICR7dGhpcy5fZ2V0QXJyb3coXG4gICAgICAgICAgJ2xlZnQnLFxuICAgICAgICAgICgpID0+IHRoaXMuX2dvVG9EaWZmZXJlbnRZZWFyKC0xKSxcbiAgICAgICAgICBpMThuUHJldmlvdXNZZWFyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX3ByZXZpb3VzWWVhckRpc2FibGVkKCksXG4gICAgICAgICl9XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzYmItY2FsZW5kYXJfX2NvbnRyb2xzLW1vbnRoXCI+JHt0aGlzLl9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpfTwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXIoMSksXG4gICAgICAgICAgaTE4bk5leHRZZWFyW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX25leHRZZWFyRGlzYWJsZWQoKSxcbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtb3ZlcmZsb3ctYnJlYWtcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtY29udGFpbmVyIHNiYi1jYWxlbmRhcl9fdGFibGUtbW9udGgtdmlld1wiPlxuICAgICAgICAgICR7dGhpcy5fY3JlYXRlTW9udGhUYWJsZSh0aGlzLl9tb250aHMsIHRoaXMuX2Nob3NlblllYXIhKX1cbiAgICAgICAgICAke3RoaXMuX3dpZGUgPyB0aGlzLl9jcmVhdGVNb250aFRhYmxlKHRoaXMuX21vbnRocywgdGhpcy5fY2hvc2VuWWVhciEgKyAxKSA6IG5vdGhpbmd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBsYWJlbCB3aXRoIHRoZSB5ZWFyIGZvciB0aGUgbW9udGhseSB2aWV3LiAqL1xuICBwcml2YXRlIF9jcmVhdGVMYWJlbEZvck1vbnRoVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDxidXR0b25cbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIGlkPVwic2JiLWNhbGVuZGFyX19tb250aC1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPSR7YCR7aTE4bkNhbGVuZGFyRGF0ZVNlbGVjdGlvblt0aGlzLl9sYW5ndWFnZS5jdXJyZW50XX0gJHt0aGlzLl9jaG9zZW5ZZWFyfWB9XG4gICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuX3Jlc2V0Q2FsZW5kYXJWaWV3QW5kRW1pdE1vbnRoQ2hhbmdlKHRydWUpfVxuICAgICAgPlxuICAgICAgICAke3RoaXMuX2Nob3NlblllYXJ9ICR7dGhpcy5fd2lkZSA/IGAgLSAke3RoaXMuX2Nob3NlblllYXIhICsgMX1gIDogbm90aGluZ31cbiAgICAgICAgPHNiYi1pY29uIG5hbWU9XCJjaGV2cm9uLXNtYWxsLXVwLXNtYWxsXCI+PC9zYmItaWNvbj5cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPHNiYi1zY3JlZW4tcmVhZGVyLW9ubHkgcm9sZT1cInN0YXR1c1wiPiAke3RoaXMuX2Nob3NlblllYXJ9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgbW9udGggc2VsZWN0aW9uIHZpZXcuICovXG4gIHByaXZhdGUgX2NyZWF0ZU1vbnRoVGFibGUobW9udGhzOiBNb250aENlbGxbXVtdLCB5ZWFyOiBudW1iZXIpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8dGFibGVcbiAgICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgICAgQGFuaW1hdGlvbmVuZD0keyhlOiBBbmltYXRpb25FdmVudCkgPT4gdGhpcy5fdGFibGVBbmltYXRpb25FbmQoZSl9XG4gICAgICA+XG4gICAgICAgICR7dGhpcy5fd2lkZVxuICAgICAgICAgID8gaHRtbGA8dGhlYWQgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlLWhlYWRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1oZWFkZXItY2VsbFwiIGNvbHNwYW49JHtNT05USFNfUEVSX1JPV30+JHt5ZWFyfTwvdGg+XG4gICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPmBcbiAgICAgICAgICA6IG5vdGhpbmd9XG4gICAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAgICR7bW9udGhzLm1hcChcbiAgICAgICAgICAgIChyb3c6IE1vbnRoQ2VsbFtdKSA9PiBodG1sYFxuICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgJHtyb3cubWFwKChtb250aDogTW9udGhDZWxsKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1kYXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPHNiYi1jYWxlbmRhci1tb250aFxuICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPVwiJHt5ZWFyfS0ke21vbnRoLnZhbHVlfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9vbk1vbnRoU2VsZWN0aW9uKG1vbnRoLm1vbnRoVmFsdWUsIHllYXIpfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9XG4gICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLW1vbnRoPlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgYDtcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIGAsXG4gICAgICAgICAgKX1cbiAgICAgICAgPC90Ym9keT5cbiAgICAgIDwvdGFibGU+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBTZWxlY3QgdGhlIG1vbnRoIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gZGF5IHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfb25Nb250aFNlbGVjdGlvbihtb250aDogbnVtYmVyLCB5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5Nb250aCA9IG1vbnRoO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnZGF5JztcbiAgICB0aGlzLl9pbml0KFxuICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgeWVhcixcbiAgICAgICAgdGhpcy5fY2hvc2VuTW9udGgsXG4gICAgICAgIHRoaXMuX2RhdGVBZGFwdGVyLmdldERhdGUodGhpcy5fYWN0aXZlRGF0ZSksXG4gICAgICApLFxuICAgICk7XG4gICAgdGhpcy5fc3RhcnRUYWJsZVRyYW5zaXRpb24oKTtcbiAgICB0aGlzLl9lbWl0TW9udGhDaGFuZ2UoKTtcbiAgfVxuXG4gIC8qKiBSZW5kZXIgdGhlIHZpZXcgZm9yIHRoZSB5ZWFyIHNlbGVjdGlvbi4gKi9cbiAgcHJpdmF0ZSBfcmVuZGVyWWVhclZpZXcoKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYFxuICAgICAgPGRpdiBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHNcIj5cbiAgICAgICAgJHt0aGlzLl9nZXRBcnJvdyhcbiAgICAgICAgICAnbGVmdCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXJSYW5nZSgtWUVBUlNfUEVSX1BBR0UpLFxuICAgICAgICAgIGkxOG5QcmV2aW91c1llYXJSYW5nZShZRUFSU19QRVJfUEFHRSlbdGhpcy5fbGFuZ3VhZ2UuY3VycmVudF0sXG4gICAgICAgICAgdGhpcy5fcHJldmlvdXNZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX19jb250cm9scy1tb250aFwiPiR7dGhpcy5fY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpfTwvZGl2PlxuICAgICAgICAke3RoaXMuX2dldEFycm93KFxuICAgICAgICAgICdyaWdodCcsXG4gICAgICAgICAgKCkgPT4gdGhpcy5fZ29Ub0RpZmZlcmVudFllYXJSYW5nZShZRUFSU19QRVJfUEFHRSksXG4gICAgICAgICAgaTE4bk5leHRZZWFyUmFuZ2UoWUVBUlNfUEVSX1BBR0UpW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdLFxuICAgICAgICAgIHRoaXMuX25leHRZZWFyUmFuZ2VEaXNhYmxlZCgpLFxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1vdmVyZmxvdy1icmVha1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX190YWJsZS1jb250YWluZXIgc2JiLWNhbGVuZGFyX190YWJsZS15ZWFyLXZpZXdcIj5cbiAgICAgICAgICAke3RoaXMuX2NyZWF0ZVllYXJUYWJsZSh0aGlzLl95ZWFycyl9XG4gICAgICAgICAgJHt0aGlzLl93aWRlID8gdGhpcy5fY3JlYXRlWWVhclRhYmxlKHRoaXMuX25leHRNb250aFllYXJzLCB0cnVlKSA6IG5vdGhpbmd9XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgYDtcbiAgfVxuXG4gIC8qKiBDcmVhdGVzIHRoZSBidXR0b24gYXJyb3cgZm9yIGFsbCB0aGUgdmlld3MuICovXG4gIHByaXZhdGUgX2dldEFycm93KFxuICAgIGRpcmVjdGlvbjogJ2xlZnQnIHwgJ3JpZ2h0JyxcbiAgICBjbGljazogKCkgPT4gdm9pZCxcbiAgICBhcmlhTGFiZWw6IHN0cmluZyxcbiAgICBkaXNhYmxlZDogYm9vbGVhbixcbiAgKTogVGVtcGxhdGVSZXN1bHQge1xuICAgIHJldHVybiBodG1sYDxzYmItc2Vjb25kYXJ5LWJ1dHRvblxuICAgICAgc2l6ZT1cIm1cIlxuICAgICAgaWNvbi1uYW1lPVwiY2hldnJvbi1zbWFsbC0ke2RpcmVjdGlvbn0tc21hbGxcIlxuICAgICAgYXJpYS1sYWJlbD0ke2FyaWFMYWJlbH1cbiAgICAgIEBjbGljaz0ke2NsaWNrfVxuICAgICAgP2Rpc2FibGVkPSR7ZGlzYWJsZWR9XG4gICAgICBpZD1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtJHtkaXJlY3Rpb24gPT09ICdsZWZ0JyA/ICdwcmV2aW91cycgOiAnbmV4dCd9XCJcbiAgICA+PC9zYmItc2Vjb25kYXJ5LWJ1dHRvbj5gO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIGxhYmVsIHdpdGggdGhlIHllYXIgcmFuZ2UgZm9yIHRoZSB5ZWFybHkgdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlTGFiZWxGb3JZZWFyVmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgY29uc3QgZmlyc3RZZWFyOiBudW1iZXIgPSB0aGlzLl95ZWFycy5mbGF0KClbMF07XG4gICAgY29uc3QgbGFzdFllYXJBcnJheTogbnVtYmVyW10gPSAodGhpcy5fd2lkZSA/IHRoaXMuX25leHRNb250aFllYXJzIDogdGhpcy5feWVhcnMpLmZsYXQoKTtcbiAgICBjb25zdCBsYXN0WWVhcjogbnVtYmVyID0gbGFzdFllYXJBcnJheVtsYXN0WWVhckFycmF5Lmxlbmd0aCAtIDFdO1xuICAgIGNvbnN0IHllYXJMYWJlbCA9IGAke2ZpcnN0WWVhcn0gLSAke2xhc3RZZWFyfWA7XG4gICAgcmV0dXJuIGh0bWxgXG4gICAgICA8YnV0dG9uXG4gICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICBpZD1cInNiYi1jYWxlbmRhcl9feWVhci1zZWxlY3Rpb25cIlxuICAgICAgICBjbGFzcz1cInNiYi1jYWxlbmRhcl9fY29udHJvbHMtY2hhbmdlLWRhdGVcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiJHtpMThuQ2FsZW5kYXJEYXRlU2VsZWN0aW9uW3RoaXMuX2xhbmd1YWdlLmN1cnJlbnRdfSAke3llYXJMYWJlbH1cIlxuICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLl9yZXNldENhbGVuZGFyVmlld0FuZEVtaXRNb250aENoYW5nZSh0cnVlKX1cbiAgICAgID5cbiAgICAgICAgJHt5ZWFyTGFiZWx9XG4gICAgICAgIDxzYmItaWNvbiBuYW1lPVwiY2hldnJvbi1zbWFsbC11cC1zbWFsbFwiPjwvc2JiLWljb24+XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxzYmItc2NyZWVuLXJlYWRlci1vbmx5IHJvbGU9XCJzdGF0dXNcIj4gJHt5ZWFyTGFiZWx9IDwvc2JiLXNjcmVlbi1yZWFkZXItb25seT5cbiAgICBgO1xuICB9XG5cbiAgLyoqIENyZWF0ZXMgdGhlIHRhYmxlIGZvciB0aGUgeWVhciBzZWxlY3Rpb24gdmlldy4gKi9cbiAgcHJpdmF0ZSBfY3JlYXRlWWVhclRhYmxlKHllYXJzOiBudW1iZXJbXVtdLCBzaGlmdFJpZ2h0ID0gZmFsc2UpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgcmV0dXJuIGh0bWxgIDx0YWJsZVxuICAgICAgY2xhc3M9XCJzYmItY2FsZW5kYXJfX3RhYmxlXCJcbiAgICAgIEBhbmltYXRpb25lbmQ9JHsoZTogQW5pbWF0aW9uRXZlbnQpID0+IHRoaXMuX3RhYmxlQW5pbWF0aW9uRW5kKGUpfVxuICAgID5cbiAgICAgIDx0Ym9keSBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtYm9keVwiPlxuICAgICAgICAke3llYXJzLm1hcChcbiAgICAgICAgICAocm93OiBudW1iZXJbXSkgPT5cbiAgICAgICAgICAgIGh0bWxgIDx0cj5cbiAgICAgICAgICAgICAgJHtyb3cubWFwKCh5ZWFyOiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaHRtbGBcbiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInNiYi1jYWxlbmRhcl9fdGFibGUtZGF0YVwiPlxuICAgICAgICAgICAgICAgICAgICA8c2JiLWNhbGVuZGFyLXllYXJcbiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHtTdHJpbmcoeWVhcil9XG4gICAgICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0OiBLZXlib2FyZEV2ZW50KSA9PiB0aGlzLl9oYW5kbGVLZXlib2FyZEV2ZW50KGV2dCl9XG4gICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5fb25ZZWFyU2VsZWN0aW9uKHllYXIsIHNoaWZ0UmlnaHQpfVxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIDwvc2JiLWNhbGVuZGFyLXllYXI+XG4gICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIGA7XG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgPC90cj5gLFxuICAgICAgICApfVxuICAgICAgPC90Ym9keT5cbiAgICA8L3RhYmxlPmA7XG4gIH1cblxuICAvKiogU2VsZWN0IHRoZSB5ZWFyIGFuZCBjaGFuZ2UgdGhlIHZpZXcgdG8gbW9udGggc2VsZWN0aW9uLiAqL1xuICBwcml2YXRlIF9vblllYXJTZWxlY3Rpb24oeWVhcjogbnVtYmVyLCByaWdodFNpZGU6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9jaG9zZW5ZZWFyID0gcmlnaHRTaWRlID8geWVhciAtIDEgOiB5ZWFyO1xuICAgIHRoaXMuX25leHRDYWxlbmRhclZpZXcgPSAnbW9udGgnO1xuICAgIHRoaXMuX2Fzc2lnbkFjdGl2ZURhdGUoXG4gICAgICB0aGlzLl9kYXRlQWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICB0aGlzLl9jaG9zZW5ZZWFyLFxuICAgICAgICB0aGlzLl9kYXRlQWRhcHRlci5nZXRNb250aCh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICAgdGhpcy5fZGF0ZUFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLl9hY3RpdmVEYXRlKSxcbiAgICAgICksXG4gICAgKTtcbiAgICB0aGlzLl9zdGFydFRhYmxlVHJhbnNpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBfZ2V0VmlldygpOiBUZW1wbGF0ZVJlc3VsdCB7XG4gICAgaWYgKGlzU2VydmVyIHx8IHRoaXMuaHlkcmF0aW9uUmVxdWlyZWQpIHtcbiAgICAgIC8vIFRPRE86IFdlIGRpc2FibGUgU1NSIGZvciBjYWxlbmRhciBmb3Igbm93LiBGaWd1cmUgb3V0LCBpZiB0aGVyZSBpcyBhIHdheVxuICAgICAgLy8gdG8gZW5hYmxlIGl0LCB3aGlsZSBjb25zaWRlcmluZyBpMThuIGFuZCBkYXRlIGluZm9ybWF0aW9uLlxuICAgICAgcmV0dXJuIGh0bWxgJHtub3RoaW5nfWA7XG4gICAgfVxuICAgIHN3aXRjaCAodGhpcy5fY2FsZW5kYXJWaWV3KSB7XG4gICAgICBjYXNlICd5ZWFyJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX3JlbmRlclllYXJWaWV3KCk7XG4gICAgICBjYXNlICdtb250aCc6XG4gICAgICAgIHJldHVybiB0aGlzLl9yZW5kZXJNb250aFZpZXcoKTtcbiAgICAgIGNhc2UgJ2RheSc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gdGhpcy5fcmVuZGVyRGF5VmlldygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3RhYmxlQW5pbWF0aW9uRW5kKGV2ZW50OiBBbmltYXRpb25FdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRhYmxlID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnaGlkZScpIHtcbiAgICAgIHRhYmxlLmNsYXNzTGlzdC5yZW1vdmUoJ3NiYi1jYWxlbmRhcl9fdGFibGUtaGlkZScpO1xuICAgICAgaWYgKHRoaXMuX2NvbnRhaW5pbmdGb2N1cykge1xuICAgICAgICB0aGlzLl9yZXNldEZvY3VzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2NhbGVuZGFyVmlldyA9IHRoaXMuX25leHRDYWxlbmRhclZpZXc7XG4gICAgfSBlbHNlIGlmIChldmVudC5hbmltYXRpb25OYW1lID09PSAnc2hvdycpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxzLnN0YXRlcy5kZWxldGUoJ3RyYW5zaXRpb24nKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIF9zdGFydFRhYmxlVHJhbnNpdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLmludGVybmFscy5zdGF0ZXMuYWRkKCd0cmFuc2l0aW9uJyk7XG4gICAgdGhpcy5zaGFkb3dSb290XG4gICAgICA/LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RhYmxlJylcbiAgICAgID8uZm9yRWFjaCgoZSkgPT4gZS5jbGFzc0xpc3QudG9nZ2xlKCdzYmItY2FsZW5kYXJfX3RhYmxlLWhpZGUnKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcmVuZGVyKCk6IFRlbXBsYXRlUmVzdWx0IHtcbiAgICByZXR1cm4gaHRtbGA8ZGl2IGNsYXNzPVwic2JiLWNhbGVuZGFyX193cmFwcGVyXCI+JHt0aGlzLl9nZXRWaWV3KCl9PC9kaXY+YDtcbiAgfVxufVxuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb25cbiAgICAnc2JiLWNhbGVuZGFyJzogU2JiQ2FsZW5kYXJFbGVtZW50O1xuICB9XG4gIGludGVyZmFjZSBIVE1MRWxlbWVudEV2ZW50TWFwIHtcbiAgICBtb250aGNoYW5nZTogU2JiTW9udGhDaGFuZ2VFdmVudDtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUN5REEsSUFBYSxzQkFBYixjQUF5QyxNQUFLO0NBRzVDLElBQVcsUUFBSztBQUNkLFNBQU8sS0FBSzs7Q0FHZCxZQUFtQixPQUFxQjtBQUN0QyxRQUFNLGVBQWU7R0FBRSxTQUFTO0dBQU0sVUFBVTtHQUFNLENBQUM7QUFDdkQsT0FBSyxTQUFTLE9BQU8sT0FBTyxTQUFTLEVBQUUsQ0FBQzs7Ozs7Ozs7SUE2RS9CLDRCQUFrQjttQkFBbUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Y0FBckMsMkJBQXFDLFlBQVU7Ozt1QkFtQnpELFdBQVcsRUFDWCxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQTt1QkFJM0IsVUFBVSxDQUFBO3NCQU1WLFdBQVcsRUFDWCxVQUFVLENBQUE7c0JBT1YsV0FBVyxFQUNYLFVBQVUsQ0FBQTs7SUFJVixXQUFXO0lBQ1gsc0JBQXNCLEdBQTBCLGFBQy9DLEVBQUUsbUJBQW1CLFNBQVMsQ0FDL0I7SUFDQSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUE7SUFBQzsrQkFNM0IsVUFBVSxDQUFBOzRCQThCVixPQUFPLENBQUE7NkJBR1AsU0FBUyxFQUFFLFdBQVcsZUFBZSxDQUFDLENBQUE7OEJBSXRDLFNBQVMsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUFBOzhCQUczQixXQUFXLEVBQ1gsU0FBUztJQUFFLFdBQVc7SUFBZ0IsTUFBTTtJQUFTLENBQUMsQ0FBQTs4QkFNdEQsT0FBTyxDQUFBOzRCQUdQLE9BQU8sQ0FBQTtnQ0FZUCxPQUFPLENBQUE7K0JBaUVQLE9BQU8sQ0FBQTtBQS9KUixnQkFBQSxNQUFBLE1BQUEsa0JBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxVQUFBO0tBQUEsTUFBQSxRQUFBLElBQWdCO0tBQUksTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFKLE9BQUk7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSxvQkFBQSx3QkFBQTtBQUdSLGdCQUFBLE1BQUEsTUFBQSxrQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFVBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBSSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUosT0FBSTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG9CQUFBLHdCQUFBO0FBUWhDLGdCQUFBLE1BQUEsTUFBQSxpQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBRyxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUgsTUFBRzs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG1CQUFBLHVCQUFBO0FBUW5CLGdCQUFBLE1BQUEsTUFBQSxpQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLFNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBRyxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQUgsTUFBRzs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLG1CQUFBLHVCQUFBO0FBUW5CLGdCQUFBLE1BQUEsTUFBQSxzQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGNBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBUSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVIsV0FBUTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLHdCQUFBLDRCQUFBO0FBTXhCLGdCQUFBLE1BQUEsTUFBQSwwQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGNBQUE7S0FBQSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVcsV0FBUTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLE1BQUEsMkJBQUE7QUE2QlYsZ0JBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsZUFBQTtLQUFBLE1BQUEsUUFBQSxJQUFpQjtLQUFTLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBVCxZQUFTOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEseUJBQUEsNkJBQUE7QUFJbkMsZ0JBQUEsTUFBQSxNQUFBLHdCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsZ0JBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBVSxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVYsYUFBVTs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLDBCQUFBLDhCQUFBO0FBR0csZ0JBQUEsTUFBQSxNQUFBLHlCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsaUJBQUE7S0FBQSxNQUFBLFFBQUEsSUFBZ0I7S0FBVyxNQUFBLEtBQUEsVUFBQTtBQUFBLFVBQVgsY0FBVzs7S0FBQTtJQUFBLFVBQUE7SUFBQSxFQUFBLDJCQUFBLCtCQUFBO0FBS3hELGdCQUFBLE1BQUEsTUFBQSx5QkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGlCQUFBO0tBQUEsTUFBQSxRQUFBLElBQWdCO0tBQVcsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFYLGNBQVc7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSwyQkFBQSwrQkFBQTtBQUtsQixnQkFBQSxNQUFBLE1BQUEseUJBQUE7SUFBQSxNQUFBO0lBQUEsTUFBQTtJQUFBLFFBQUE7SUFBQSxTQUFBO0lBQUEsUUFBQTtLQUFBLE1BQUEsUUFBQSxpQkFBQTtLQUFBLE1BQUEsUUFBQSxJQUFpQjtLQUFXLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBWCxjQUFXOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsMkJBQUEsK0JBQUE7QUFJckMsZ0JBQUEsTUFBQSxNQUFBLHVCQUFBO0lBQUEsTUFBQTtJQUFBLE1BQUE7SUFBQSxRQUFBO0lBQUEsU0FBQTtJQUFBLFFBQUE7S0FBQSxNQUFBLFFBQUEsV0FBQTtLQUFBLE1BQUEsS0FBQSxVQUFBO0FBQUEsVUFBWSxRQUFLOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsTUFBQSwyQkFBQTtBQVdSLGdCQUFBLE1BQUEsTUFBQSwyQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLG1CQUFBO0tBQUEsTUFBQSxRQUFBLElBQWlCO0tBQWEsTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFiLGdCQUFhOztLQUFBO0lBQUEsVUFBQTtJQUFBLEVBQUEsNkJBQUEsaUNBQUE7QUFrRXZDLGdCQUFBLE1BQUEsTUFBQSwwQkFBQTtJQUFBLE1BQUE7SUFBQSxNQUFBO0lBQUEsUUFBQTtJQUFBLFNBQUE7SUFBQSxRQUFBO0tBQUEsTUFBQSxRQUFBLGtCQUFBO0tBQUEsTUFBQSxRQUFBLElBQWlCO0tBQVksTUFBQSxLQUFBLFVBQUE7QUFBQSxVQUFaLGVBQVk7O0tBQUE7SUFBQSxVQUFBO0lBQUEsRUFBQSw0QkFBQSxnQ0FBQTs7Ozs7Ozs7O0FBcExHLFFBQUEsY0FBc0I7OztBQUMvQixRQUFBLHNCQUF3QztJQUM3RDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0Q7OztBQUNzQixRQUFBLFNBQXlCLENBQUMsaUJBQWlCLFVBQVUsaUJBQU0sQ0FBQzs7O0FBQzVELFFBQUEsU0FBUztJQUM5QixjQUFjO0lBQ2QsYUFBYTtJQUNMOztFQUtWOztFQUFBLElBQWdCLE9BQUk7QUFBQSxVQUFBLE1BQUE7O0VBQXBCLElBQWdCLEtBQUksT0FBQTtBQUFBLFNBQUEsd0JBQUE7O0VBR1I7O0VBQUEsSUFBZ0IsT0FBSTtBQUFBLFVBQUEsTUFBQTs7RUFBcEIsSUFBZ0IsS0FBSSxPQUFBO0FBQUEsU0FBQSx3QkFBQTs7RUFRaEM7Ozs7O0VBQUEsSUFBZ0IsTUFBRztBQUFBLFVBQUEsTUFBQTs7RUFBbkIsSUFBZ0IsSUFBRyxPQUFBO0FBQUEsU0FBQSx1QkFBQTs7RUFRbkI7Ozs7O0VBQUEsSUFBZ0IsTUFBRztBQUFBLFVBQUEsTUFBQTs7RUFBbkIsSUFBZ0IsSUFBRyxPQUFBO0FBQUEsU0FBQSx1QkFBQTs7RUFRbkI7O0VBQUEsSUFBZ0IsV0FBUTtBQUFBLFVBQUEsTUFBQTs7RUFBeEIsSUFBZ0IsU0FBUSxPQUFBO0FBQUEsU0FBQSw0QkFBQTs7Ozs7RUFNeEIsSUFBVyxTQUFTLE9BQXFCO0FBQ3ZDLE9BQUksTUFBTSxRQUFRLE1BQU0sQ0FDdEIsTUFBSyxZQUFZLE1BQ2QsS0FBSyxhQUNKLEtBQUssYUFBYSxtQkFBbUIsS0FBSyxhQUFhLFlBQVksU0FBUyxDQUFDLENBQzlFLENBQ0EsUUFBUSxTQUE4QixTQUFTLEtBQUssQ0FDcEQsUUFDRSxTQUNDLENBQUMsS0FBSyxjQUFjLEtBQUssYUFBYSxVQUFVLEtBQUssQ0FBQyxJQUFJLEtBQUssWUFBWSxLQUFLLENBQ25GO1FBQ0U7SUFDTCxNQUFNLGVBQWUsS0FBSyxhQUFhLG1CQUNyQyxLQUFLLGFBQWEsWUFBWSxNQUFNLENBQ3JDO0FBQ0QsUUFDRSxDQUFDLENBQUMsaUJBQ0QsQ0FBQyxLQUFLLGNBQWMsS0FBSyxhQUFhLFVBQVUsYUFBYSxDQUFDLElBQzdELEtBQUssWUFBWSxhQUFhLEVBRWhDLE1BQUssWUFBWTtRQUVqQixNQUFLLFlBQVk7OztFQUl2QixJQUFXLFdBQVE7QUFDakIsVUFBTyxLQUFLOztFQUVMO0VBQUEsSUFBaUIsWUFBUztBQUFBLFVBQUEsTUFBQTs7RUFBMUIsSUFBaUIsVUFBUyxPQUFBO0FBQUEsU0FBQSw2QkFBQTs7RUFJbkM7O0VBQUEsSUFBZ0IsYUFBVTtBQUFBLFVBQUEsTUFBQTs7RUFBMUIsSUFBZ0IsV0FBVSxPQUFBO0FBQUEsU0FBQSw4QkFBQTs7RUFHRzs7RUFBQSxJQUFnQixjQUFXO0FBQUEsVUFBQSxNQUFBOztFQUEzQixJQUFnQixZQUFXLE9BQUE7QUFBQSxTQUFBLCtCQUFBOztFQUt4RDs7RUFBQSxJQUFnQixjQUFXO0FBQUEsVUFBQSxNQUFBOztFQUEzQixJQUFnQixZQUFXLE9BQUE7QUFBQSxTQUFBLCtCQUFBOztFQUtsQjs7RUFBQSxJQUFpQixjQUFXO0FBQUEsVUFBQSxNQUFBOztFQUE1QixJQUFpQixZQUFXLE9BQUE7QUFBQSxTQUFBLCtCQUFBOzs7RUFJckMsSUFBWSxNQUFNLE1BQWE7QUFDN0IsUUFBSyxZQUFZLFFBQVEsS0FBSztBQUM5QixRQUFLLGdCQUFnQjs7RUFFdkIsSUFBWSxRQUFLO0FBQ2YsVUFBTyxLQUFLOztFQU1MO0VBQUEsSUFBaUIsZ0JBQWE7QUFBQSxVQUFBLE1BQUE7O0VBQTlCLElBQWlCLGNBQWEsT0FBQTtBQUFBLFNBQUEsaUNBQUE7OztFQTJDdkMsSUFBWSxTQUFNO0FBQ2hCLFVBQU8sTUFBTSxNQUNWLEtBQUssa0JBQWtCLFFBQ25CLE1BQU0sS0FBSyxLQUFLLFdBQVksaUJBQWlCLE9BQU8sQ0FBQyxDQUFDLFNBQVMsTUFDOUQsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLE1BQU0sQ0FBQyxDQUNWLEdBQzdCLEtBQUssWUFBWSxpQkFBaUIsZ0JBQWdCLEtBQUssZ0JBQWdCLEtBQUssRUFBRSxDQUNuRjs7RUFnQkg7RUFBQSxJQUFpQixlQUFZO0FBQUEsVUFBQSxNQUFBOztFQUE3QixJQUFpQixhQUFZLE9BQUE7QUFBQSxTQUFBLGdDQUFBOztFQVU3QixjQUFBO0FBQ0UsVUFBTztBQTNLTyxTQUFBLHlCQXJCTCxrQkFBQSxNQUFBLDJCQUFrQixFQUFBLGtCQUFBLE1BQUEsb0JBcUJHLE1BQUs7QUFHVCxTQUFBLHlCQUFBLGtCQUFBLE1BQUEsd0JBQUEsRUFBQSxrQkFBQSxNQUFBLG9CQUFxQixNQUFLO0FBUXRDLFNBQUEsd0JBQUEsa0JBQUEsTUFBQSx3QkFBQSxFQUFBLGtCQUFBLE1BQUEsbUJBQWdCLEtBQUk7QUFRcEIsU0FBQSx3QkFBQSxrQkFBQSxNQUFBLHVCQUFBLEVBQUEsa0JBQUEsTUFBQSxtQkFBZ0IsS0FBSTtBQVFwQixTQUFBLDZCQUFBLGtCQUFBLE1BQUEsdUJBQUEsRUFBQSxrQkFBQSxNQUFBLHdCQUFvQixNQUFLO0FBbUNmLFNBQUEsOEJBQUEsa0JBQUEsTUFBQSw0QkFBQSxFQUFBLGtCQUFBLE1BQUEseUJBQTRCLEtBQUk7QUFJMUMsU0FBQSwrQkFBQSxrQkFBQSxNQUFBLDZCQUFBLEVBQUEsa0JBQUEsTUFBQSwwQkFBbUQsS0FBSTtBQUcxQixTQUFBLGdDQUFBLGtCQUFBLE1BQUEsOEJBQUEsRUFBQSxrQkFBQSxNQUFBLDJCQUE4QixhQUFZO0FBS3ZFLFNBQUEsZ0NBQUEsa0JBQUEsTUFBQSwrQkFBQSxFQUFBLGtCQUFBLE1BQUEsMkJBQXVCLE1BQUs7QUFFcEMsUUFBQSxnQkFBWSxrQkFBQSxNQUFBLCtCQUFBLEVBQW1CLFlBQVksQ0FBQyxVQUFVLGVBQWU7QUFHbkQsU0FBQSwrQkFBQSxrQkFBQSxNQUFBLDJCQUFpQixLQUFLLGFBQWEsT0FBTyxDQUFBO0FBYTVELFFBQUEsaUJBQWEsa0JBQUEsTUFBQSwrQkFBQSxFQUFZO0FBRVAsU0FBQSxpQ0FBQSxrQkFBQSxNQUFBLDZCQUE4QixNQUFLO0FBRXJELFFBQUEscUJBQWlCLGtCQUFBLE1BQUEsaUNBQUEsRUFBaUI7O0FBR2xDLFFBQUEsdUNBQW9GO0lBQzFGLGdCQUFnQjtJQUNoQixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLGtCQUFrQjtJQUNsQixtQkFBbUI7SUFDcEI7O0FBTU8sUUFBQSxTQUFxQixFQUFFOztBQWV2QixRQUFBLGNBQXdCLEtBQUssYUFBYSxjQUFjLE9BQU87QUFRL0QsUUFBQSxtQkFBNEI7O0FBb0I1QixRQUFBLGNBQWM7O0FBR2QsUUFBQSxtQkFBbUI7QUFHVixTQUFBLGdDQUFBLGtCQUFBLE1BQUEsNEJBQWUsTUFBSztBQUU3QixRQUFBLGFBQVMsa0JBQUEsTUFBQSxnQ0FBQSxFQUFHLElBQUksc0JBQXNCLEtBQUssQ0FBQyxrQkFBaUI7QUFDbkUsU0FBSyxjQUFjLEtBQUssYUFBYSxjQUFjLE9BQU87QUFDMUQsU0FBSyxrQkFBa0I7S0FDdkI7QUFDTSxRQUFBLGdCQUFnQixJQUFJLDBCQUEwQixNQUFNLEdBQ3pELDZDQUE2QyxLQUFLLE9BQU8sRUFDM0QsQ0FBQztBQW9GTSxRQUFBLHNCQUEyQjtBQUNqQyxTQUFLLG1CQUFtQixNQUFNLEtBQUssS0FBSyxTQUFTLENBQUMsTUFDL0MsTUFBTSxFQUFFLGNBQWMsbUJBQ3hCO0FBQ0QsU0FBSyxZQUFZLFlBQVksS0FBSyxpQkFBaUI7QUFDbkQsU0FBSyxjQUFjOztBQXJGbkIsUUFBSyxrQkFBa0I7QUFDdkIsUUFBSyxjQUFjO0FBS25CLFFBQUssaUJBQWlCLGlCQUFrQixLQUFLLG1CQUFtQixLQUFNO0FBQ3RFLFFBQUssaUJBQWlCLGtCQUFtQixLQUFLLG1CQUFtQixNQUFPO0FBQ3hFLFFBQUssaUJBQWlCLFVBQVUsTUFBSztJQUNuQyxNQUFNLE1BQU8sRUFBRSxPQUF1QixRQUFrQyxtQkFBbUI7QUFDM0YsUUFBSSxJQUNGLE1BQUssWUFBWSxJQUFJLE1BQU87S0FFOUI7QUFDRixRQUFLLGlCQUFpQixZQUFZLE1BQUs7QUFDckMsUUFBSyxFQUFFLE9BQXVCLGNBQWMsbUJBQzFDLE1BQUsscUJBQ0gsR0FDQSxLQUFLLGNBQWUsRUFBRSxPQUFpQyxNQUFZLENBQ3BFO0tBRUg7O0VBR0ksWUFBWSxNQUFPO0FBQ3pCLFVBQU8sS0FBSyxhQUFhLEtBQUssSUFBSTs7O0VBSTdCLGdCQUFhO0FBQ2xCLFFBQUssb0JBQW9CO0FBQ3pCLFFBQUssT0FBTzs7RUFHRSxvQkFBaUI7QUFDL0IsU0FBTSxtQkFBbUI7QUFDekIsUUFBSyxlQUFlO0FBQ3BCLFFBQUssWUFBWSxpQkFBaUIsY0FBYyxLQUFLLGVBQWUsRUFBRSxTQUFTLE1BQU0sQ0FBQzs7RUFHeEUsdUJBQW9CO0FBQ2xDLFNBQU0sc0JBQXNCO0FBQzVCLFFBQUssWUFBWSxvQkFBb0IsY0FBYyxLQUFLLGVBQWUsRUFBRSxTQUFTLE1BQU0sQ0FBQzs7O0VBSTNFLFFBQUs7QUFDbkIsUUFBSyxjQUFjO0FBQ25CLFFBQUssWUFBWTs7RUFHQSxXQUFXLG1CQUF1QztBQUNuRSxTQUFNLFdBQVcsa0JBQWtCO0FBRW5DLE9BQUksQ0FBQyxLQUFLLGFBQ1I7QUFHRixPQUFJLGtCQUFrQixJQUFJLE9BQU8sSUFBSSxrQkFBa0IsSUFBSSxjQUFjLENBQ3ZFLE1BQUssZUFBZTtBQUd0QixPQUFJLGtCQUFrQixJQUFJLE9BQU8sRUFBRTtBQUNqQyxTQUFLLGdCQUFnQjtBQUNyQixTQUFLLGVBQWUsS0FBQTtBQUNwQixTQUFLLG9CQUFvQixLQUFLLGdCQUFnQixLQUFLOzs7RUFJcEMsUUFBUSxtQkFBdUM7QUFDaEUsU0FBTSxRQUFRLGtCQUFrQjtBQUdoQyxRQUFLLGNBQWM7QUFJbkIsUUFBSyxZQUFZOzs7Ozs7O0VBZ0JYLG1CQUFtQixZQUFtQjtBQUM1QyxPQUFJLGNBQWMsQ0FBQyxNQUFNLFFBQVEsS0FBSyxVQUFVLENBQzlDLE1BQUssWUFBWSxLQUFLLFlBQVksQ0FBQyxLQUFLLFVBQWUsR0FBRyxFQUFFO0FBRTlELE9BQUksQ0FBQyxjQUFjLE1BQU0sUUFBUSxLQUFLLFVBQVUsQ0FDOUMsTUFBSyxZQUFhLEtBQUssVUFBa0IsU0FBVSxLQUFLLFVBQWtCLEtBQUs7OztFQUszRSxNQUFNLFlBQWM7QUFFMUIsT0FBSSxTQUNGO1lBQ1MsS0FBSyxtQkFBbUI7QUFDakMsU0FBSyxrQkFBa0IsV0FBVyxLQUFLLE9BQU8sQ0FBQztBQUMvQzs7QUFHRixPQUFJLFdBQ0YsTUFBSyxrQkFBa0IsV0FBVztBQUVwQyxRQUFLLFNBQ0YsS0FBSyxjQUFjLFFBQVEscUNBQXFDLElBQUksVUFBVSxLQUFLO0FBQ3RGLFFBQUssU0FBUyxLQUFLLGdCQUFnQixLQUFLLFlBQVk7QUFDcEQsUUFBSyxTQUFTLEtBQUssaUJBQWlCO0FBQ3BDLFFBQUssZUFBZSxLQUFLLE9BQ3RCLE1BQU0sQ0FDTixNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUM5QyxLQUFLLFFBQWdCLElBQUksVUFBVSxDQUNuQyxRQUFRLEdBQUcsR0FBRyxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtBQUMxQyxRQUFLLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztBQUMzQixRQUFLLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztBQUMzQixPQUFJLEtBQUssT0FBTztJQUNkLE1BQU0sZ0JBQWdCLEtBQUssYUFBYSxrQkFBa0IsS0FBSyxhQUFhLEVBQUU7QUFDOUUsU0FBSyxrQkFBa0IsS0FBSyxnQkFBZ0IsZUFBZSxLQUFLO0FBQ2hFLFNBQUssa0JBQWtCLEtBQUssZ0JBQWdCLGVBQWU7QUFDM0QsU0FBSyx3QkFBd0IsS0FBSyxnQkFDL0IsTUFBTSxDQUNOLE1BQU0sR0FBRyxNQUFNLEVBQUUsTUFBTSxjQUFjLEVBQUUsTUFBTSxDQUFDLENBQzlDLEtBQUssUUFBZ0IsSUFBSSxVQUFVLENBQ25DLFFBQVEsR0FBRyxHQUFHLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFOztBQUU1QyxRQUFLLGVBQWU7OztFQUlkLGFBQVU7QUFDaEIsT0FBSSxLQUFLLGFBQWE7QUFDcEIsU0FBSyxvQkFBb0IsRUFBRSxPQUFPO0FBQ2xDLFNBQUssY0FBYzs7OztFQUtmLGVBQVk7R0FDbEIsTUFBTSxpQkFBMkIsS0FBSyxhQUFhLGtCQUFrQixTQUFTO0dBRTlFLE1BQU0sV0FEeUIsS0FBSyxhQUFhLGtCQUFrQixPQUFPLENBQ2pDLEtBQUssTUFBYyxPQUFlO0lBQ3pFO0lBQ0EsUUFBUSxlQUFlO0lBQ3hCLEVBQUU7R0FHSCxNQUFNLGlCQUF5QixLQUFLLGFBQWEsbUJBQW1CO0FBQ3BFLFFBQUssWUFBWSxTQUFTLE1BQU0sZUFBZSxDQUFDLE9BQU8sU0FBUyxNQUFNLEdBQUcsZUFBZSxDQUFDOzs7RUFJbkYsZ0JBQWdCLE9BQVUsc0JBQXNCLE9BQUs7R0FDM0QsTUFBTSxjQUFzQixLQUFLLGFBQWEsa0JBQWtCLE1BQU07R0FDdEUsTUFBTSxhQUFxQixLQUFLLGFBQWEsbUJBQW1CLE1BQU07QUFDdEUsT0FBSSxDQUFDLHFCQUFxQjtBQUN4QixTQUFLLHFDQUFxQyxtQkFBbUI7QUFDN0QsU0FBSyxxQ0FBcUMsbUJBQW1CO0FBQzdELFNBQUsscUNBQXFDLGlCQUFpQixLQUFLLGFBQWEsVUFDM0UsS0FBSyxhQUFhLFdBQ2hCLEtBQUssYUFBYSxRQUFRLE1BQU0sRUFDaEMsS0FBSyxhQUFhLFNBQVMsTUFBTSxFQUNqQyxFQUNELENBQ0Y7QUFDRCxTQUFLLHFDQUFxQyxnQkFBZ0IsS0FBSyxhQUFhLFVBQzFFLEtBQUssYUFBYSxXQUNoQixLQUFLLGFBQWEsUUFBUSxNQUFNLEVBQ2hDLEtBQUssYUFBYSxTQUFTLE1BQU0sRUFDakMsWUFDRCxDQUNGO1VBQ0k7QUFDTCxTQUFLLHFDQUFxQyxvQkFBb0I7QUFDOUQsU0FBSyxxQ0FBcUMsZ0JBQWdCLEtBQUssYUFBYSxVQUMxRSxLQUFLLGFBQWEsV0FDaEIsS0FBSyxhQUFhLFFBQVEsTUFBTSxFQUNoQyxLQUFLLGFBQWEsU0FBUyxNQUFNLEVBQ2pDLFlBQ0QsQ0FDRjs7QUFFSCxVQUFPLEtBQUssZ0JBQWdCLGVBQ3hCLEtBQUssMEJBQTBCLE9BQU8sYUFBYSxXQUFXLEdBQzlELEtBQUssd0JBQXdCLE9BQU8sYUFBYSxXQUFXOzs7Ozs7Ozs7O0VBVzFELDBCQUEwQixPQUFVLGFBQXFCLFlBQWtCO0dBQ2pGLE1BQU0sUUFBb0IsQ0FBQyxFQUFFLENBQUM7QUFDOUIsUUFBSyxJQUFJLElBQUksR0FBRyxPQUFPLFlBQVksSUFBSSxhQUFhLEtBQUssUUFBUTtBQUMvRCxRQUFJLFNBQVMsY0FBYztBQUN6QixXQUFNLEtBQUssRUFBRSxDQUFDO0FBQ2QsWUFBTzs7SUFFVCxNQUFNLE9BQU8sS0FBSyxhQUFhLFdBQzdCLEtBQUssYUFBYSxRQUFRLE1BQU0sRUFDaEMsS0FBSyxhQUFhLFNBQVMsTUFBTSxFQUNqQyxJQUFJLEVBQ0o7QUFDRixVQUFNLE1BQU0sU0FBUyxHQUFHLEtBQUssS0FBSyxjQUFjLEtBQUssQ0FBQzs7QUFFeEQsVUFBTzs7Ozs7Ozs7Ozs7Ozs7OztFQWlCRCx3QkFBd0IsT0FBVSxhQUFxQixZQUFrQjtHQUMvRSxNQUFNLFFBQW9CLE1BQU0sS0FBSyxFQUFFLFFBQVEsY0FBYyxRQUFRLEVBQUUsQ0FBQztBQUN4RSxRQUFLLElBQUksSUFBSSxHQUFHLE9BQU8sWUFBWSxJQUFJLGFBQWEsS0FBSyxRQUFRO0FBQy9ELFFBQUksU0FBUyxhQUNYLFFBQU87SUFFVCxNQUFNLE9BQU8sS0FBSyxhQUFhLFdBQzdCLEtBQUssYUFBYSxRQUFRLE1BQU0sRUFDaEMsS0FBSyxhQUFhLFNBQVMsTUFBTSxFQUNqQyxJQUFJLEVBQ0o7QUFDRixVQUFNLE1BQU0sS0FBSyxLQUFLLGNBQWMsS0FBSyxDQUFDOztBQUU1QyxVQUFPOztFQUdELGNBQWMsTUFBTztBQUUzQixVQUFPO0lBQ0wsT0FGYyxLQUFLLGFBQWEsVUFBVSxLQUFLO0lBRy9DLFdBQVc7SUFDWCxVQUFVLE9BQU8sS0FBSyxhQUFhLFFBQVEsS0FBSyxDQUFDO0lBQ2pELFlBQVksT0FBTyxLQUFLLGFBQWEsU0FBUyxLQUFLLENBQUM7SUFDcEQsV0FBVyxPQUFPLEtBQUssYUFBYSxRQUFRLEtBQUssQ0FBQztJQUdsRCxXQUFXLEtBQUssU0FBUyxLQUFLO0lBQzlCLGNBQWMsS0FBSyxhQUFhLGFBQWEsS0FBQTtJQUM5Qzs7RUFHSyxTQUFTLE1BQU87R0FDdEIsTUFBTSxpQkFBaUIsS0FBSyxhQUFhLFdBQVcsS0FBSyxhQUFhLFFBQVEsS0FBSyxFQUFFLEdBQUcsRUFBRTtHQUMxRixNQUFNLFVBQVUsS0FBSyxhQUFhLGFBQWEsZUFBZTtHQUU5RCxJQUFJLFlBQVk7SUFBQztJQUFRO0lBQVM7SUFBVztJQUFTLENBQUMsU0FBUyxRQUFRLEdBQUcsSUFBSTtHQUMvRSxJQUFJLFlBQVksS0FBSyxhQUFhLGdCQUNoQyxnQkFDQSxLQUFLLGFBQWEsbUJBQW1CLGVBQWUsR0FBRyxHQUN4RDtBQUNELFVBQU8sS0FBSyxhQUFhLFlBQVksV0FBVyxLQUFLLElBQUksR0FBRztJQUMxRCxNQUFNLFVBQVUsS0FBSyxhQUFhLGdCQUFnQixXQUFXLEVBQUU7QUFDL0QsUUFBSSxLQUFLLGFBQWEsWUFBWSxNQUFNLFFBQVEsSUFBSSxFQUNsRCxRQUFPLFlBQVksSUFDZixZQUNBLEtBQUssU0FBUyxLQUFLLGFBQWEsZ0JBQWdCLGdCQUFnQixHQUFHLENBQUM7QUFFMUUsZ0JBQVksS0FBSyxhQUFhLGdCQUFnQixXQUFXLGFBQWE7QUFDdEU7O0FBR0YsU0FBTSxJQUFJLE1BQU0sK0JBQStCOzs7RUFJekMsbUJBQW1CLE9BQW9CO0FBQzdDLFVBQU8sT0FBTyxVQUFVLFdBQVcsUUFBUSxLQUFLLGFBQWEsVUFBVSxNQUFXOzs7RUFJNUUsbUJBQWdCO0dBQ3RCLE1BQU0sU0FBc0IsSUFBSSxNQUFNLEdBQUcsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUNsRCxHQUFHLE9BQTBCO0lBQzVCLE9BQU8sT0FBTyxJQUFJLEVBQUUsQ0FBQyxTQUFTLEdBQUcsSUFBSTtJQUNyQyxZQUFZLElBQUk7SUFDakIsRUFDRjtHQUNELE1BQU0sT0FBZSxLQUFLO0dBQzFCLE1BQU0sYUFBNEIsRUFBRTtBQUNwQyxRQUFLLElBQUksSUFBWSxHQUFHLElBQUksTUFBTSxJQUNoQyxZQUFXLEtBQUssT0FBTyxNQUFNLGlCQUFpQixHQUFHLGtCQUFrQixJQUFJLEdBQUcsQ0FBQztBQUU3RSxRQUFLLFVBQVU7OztFQUlULGdCQUFnQixTQUFpQixHQUFDO0dBQ3hDLE1BQU0scUJBQTZCLEtBQUssd0JBQXdCO0dBQ2hFLE1BQU0sV0FBcUIsSUFBSSxNQUFNLGVBQWUsQ0FDakQsS0FBSyxFQUFFLENBQ1AsS0FBSyxHQUFHLE1BQWMscUJBQXFCLFNBQVMsRUFBRTtHQUN6RCxNQUFNLE9BQWUsaUJBQWlCO0dBQ3RDLE1BQU0sWUFBd0IsRUFBRTtBQUNoQyxRQUFLLElBQUksSUFBWSxHQUFHLElBQUksTUFBTSxJQUNoQyxXQUFVLEtBQUssU0FBUyxNQUFNLGdCQUFnQixHQUFHLGlCQUFpQixJQUFJLEdBQUcsQ0FBQztBQUU1RSxVQUFPOzs7Ozs7Ozs7Ozs7RUFhRCx5QkFBc0I7R0FDNUIsSUFBSSxlQUFlO0FBQ25CLE9BQUksS0FBSyxJQUNQLGdCQUFlLEtBQUssYUFBYSxRQUFRLEtBQUssSUFBSSxHQUFHLGlCQUFpQjtZQUM3RCxLQUFLLElBQ2QsZ0JBQWUsS0FBSyxhQUFhLFFBQVEsS0FBSyxJQUFJO0dBRXBELE1BQU0sYUFBYSxLQUFLLGFBQWEsUUFBUSxLQUFLLFlBQVk7QUFDOUQsVUFDRSxlQUNJLGFBQWEsZ0JBQWdCLGlCQUFrQixrQkFBa0I7OztFQUtqRSxjQUFjLFlBQWtCO0FBQ3RDLE9BQUksQ0FBQyxLQUFLLE9BQU8sQ0FBQyxLQUFLLElBQ3JCLFFBQU87R0FFVCxNQUFNLE9BQU8sS0FBSyxhQUFhLFlBQVksV0FBWTtBQUN2RCxVQUFPLEtBQUssYUFBYSxTQUFTLE1BQU0sS0FBSyxhQUFhLFVBQVUsTUFBTSxLQUFLLEtBQUssS0FBSyxJQUFJLENBQUM7OztFQUl4RixZQUFZLEtBQU07QUFDeEIsUUFBSyxlQUFlLEtBQUE7QUFDcEIsUUFBSyxnQkFBZ0I7QUFDckIsT0FBSSxLQUFLLFVBQVU7QUFFakIsUUFBSSxLQUFLLGFBQWMsS0FBSyxVQUFrQixTQUFTLEdBQUc7S0FDeEQsTUFBTSxxQkFBOEIsS0FBSyxVQUFrQixXQUN4RCxRQUFRLEtBQUssYUFBYSxZQUFZLEtBQUssSUFBSSxLQUFLLEVBQ3REO0FBRUQsU0FBSSx1QkFBdUIsR0FDekIsTUFBSyxZQUFhLEtBQUssVUFBa0IsUUFBUSxHQUFHLE1BQU0sTUFBTSxtQkFBbUI7U0FFbkYsTUFBSyxZQUFZLENBQUMsR0FBSSxLQUFLLFdBQW1CLElBQUk7VUFJcEQsTUFBSyxZQUFZLENBQUMsSUFBSTtBQUV4QixTQUFLLHVCQUF1QixLQUFLLFVBQVUsS0FBSyxNQUFNLEtBQUssYUFBYSxZQUFZLEVBQUcsQ0FBQyxDQUFDO2NBR3JGLENBQUMsS0FBSyxhQUFhLEtBQUssYUFBYSxZQUFZLEtBQUssV0FBZ0IsSUFBSSxLQUFLLEdBQUc7QUFDcEYsU0FBSyxZQUFZO0FBQ2pCLFNBQUssdUJBQXVCLEtBQUssYUFBYSxZQUFZLElBQUssQ0FBQzs7Ozs7Ozs7OztFQVk5RCxxQkFBcUIsTUFBYztHQUd6QyxNQUFNLGNBQXlCLEtBQUssT0FDakMsUUFBUSxNQUFNLENBQUMsRUFBRSxTQUFTLENBQzFCLEtBQUssTUFBTSxLQUFLLG1CQUFtQixFQUFFLE1BQU8sQ0FBQztHQUNoRCxNQUFNLFlBQXNCLEtBQ3pCLEtBQUssTUFBYyxFQUFFLE1BQU0sQ0FDM0IsUUFBUSxZQUFvQixZQUFZLFNBQVMsUUFBUSxDQUFDO0dBQzdELE1BQU0sZUFBZSxJQUFJLElBQUksVUFBVTtHQUN2QyxNQUFNLGNBQWMsSUFBSSxJQUFLLEtBQUssVUFBa0IsS0FBSyxNQUFNLEtBQUssYUFBYSxVQUFVLEVBQUUsQ0FBQyxDQUFDO0FBRS9GLFFBQUssWUFEYyxLQUFLLGlDQUFpQyxXQUFXLGNBQWMsWUFBWSxDQUNsRSxLQUFLLE1BQU0sS0FBSyxhQUFhLFlBQVksRUFBRyxDQUFDO0FBRXpFLFFBQUssdUJBQXVCLEtBQUssVUFBVSxLQUFLLE1BQU0sS0FBSyxhQUFhLFlBQVksRUFBRyxDQUFDLENBQUM7Ozs7O0VBTW5GLHVCQUF1QixRQUFlOztBQUU1QyxRQUFLLGNBQ0gsSUFBSSxZQUFxQixnQkFBZ0I7SUFDdkM7SUFDQSxVQUFVO0lBQ1YsU0FBUztJQUNWLENBQUMsQ0FDSDs7RUFHSyxtQkFBZ0I7R0FJdEIsTUFBTSxlQUFlLEtBQUssT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLEdBQUcsS0FBSyxnQkFBZ0IsR0FBRyxLQUFLLFFBQy9FLE1BQU0sQ0FDTixNQUFNLEdBQUcsTUFBTSxFQUFFLE1BQU0sY0FBYyxFQUFFLE1BQU0sQ0FBVTs7Ozs7O0FBTTFELFFBQUssY0FBYyxJQUFJLG9CQUFvQixZQUFZLENBQUM7Ozs7OztFQU9sRCxpQ0FDTixXQUNBLGNBQ0EsYUFBd0I7QUFFeEIsT0FBSSxVQUFVLE9BQU8sUUFBZ0IsWUFBWSxJQUFJLElBQUksQ0FBQyxDQUN4RCxjQUFhLFNBQVMsUUFBZ0IsWUFBWSxPQUFPLElBQUksQ0FBQztPQUU5RCxjQUFhLFNBQVMsUUFBZ0IsWUFBWSxJQUFJLElBQUksQ0FBQztBQUU3RCxVQUFPLE1BQU0sS0FBSyxZQUFZOztFQUd4QixpQkFBYztBQUNwQixPQUFJLEtBQUssU0FBUyxTQUFTO0lBQ3pCLElBQUk7QUFDSixRQUFJLEtBQUssU0FDUCxnQkFBZ0IsS0FBSyxTQUFpQixHQUFHLEdBQUc7UUFFNUMsZ0JBQWUsS0FBSztBQUV0QixTQUFLLGNBQWMsS0FBSyxhQUFhLFFBQVEsZ0JBQWdCLEtBQUssYUFBYSxPQUFPLENBQUM7U0FFdkYsTUFBSyxjQUFjLEtBQUE7O0VBSWYsa0JBQWtCLE1BQU87QUFDL0IsT0FBSSxLQUFLLE9BQU8sS0FBSyxhQUFhLFlBQVksS0FBSyxLQUFLLEtBQUssR0FBRyxHQUFHO0FBQ2pFLFNBQUssY0FBYyxLQUFLO0FBQ3hCOztBQUVGLE9BQUksS0FBSyxPQUFPLEtBQUssYUFBYSxZQUFZLEtBQUssS0FBSyxLQUFLLEdBQUcsR0FBRztBQUNqRSxTQUFLLGNBQWMsS0FBSztBQUN4Qjs7QUFFRixRQUFLLGNBQWM7OztFQUliLG9CQUFvQixRQUFjO0FBQ3hDLFFBQUssTUFBTSxLQUFLLGFBQWEsa0JBQWtCLEtBQUssYUFBYSxPQUFPLENBQUM7QUFDekUsUUFBSyxrQkFBa0I7O0VBR2pCLG1CQUFtQixPQUFhO0FBQ3RDLFFBQUssZUFBZ0I7QUFFckIsUUFBSyxjQUFjLEtBQUssYUFBYSxXQUNuQyxLQUFLLGFBQ0wsS0FBSyxhQUFhLFNBQVMsS0FBSyxZQUFZLEVBQzVDLEtBQUssYUFBYSxRQUFRLEtBQUssWUFBWSxDQUM1QztBQUNELFFBQUssT0FBTzs7RUFHTix3QkFBd0IsT0FBYTtBQUMzQyxRQUFLLE1BQU0sS0FBSyxhQUFhLGlCQUFpQixLQUFLLGFBQWEsTUFBTSxDQUFDOztFQUdqRSxjQUFjLFVBQVc7QUFDL0IsT0FBSSxDQUFDLEtBQUssSUFDUixRQUFPO0FBRVQsVUFBTyxLQUFLLGFBQWEsWUFBWSxVQUFVLEtBQUssSUFBSSxHQUFHOztFQUdyRCxjQUFjLFVBQVc7QUFDL0IsT0FBSSxDQUFDLEtBQUssSUFDUixRQUFPO0FBRVQsVUFBTyxLQUFLLGFBQWEsWUFBWSxVQUFVLEtBQUssSUFBSSxHQUFHOzs7RUFJckQseUJBQXNCO0dBQzVCLE1BQU0sWUFBWSxLQUFLLGFBQWEsZ0JBQ2xDLEtBQUssYUFDTCxLQUFLLGFBQWEsUUFBUSxLQUFLLFlBQVksR0FBRyxHQUMvQztBQUNELFVBQU8sS0FBSyxjQUFjLFVBQVU7OztFQUk5QixxQkFBa0I7R0FDeEIsSUFBSSxZQUFZLEtBQUssYUFBYSxrQkFBa0IsS0FBSyxhQUFhLEtBQUssUUFBUSxJQUFJLEVBQUU7QUFDekYsZUFBWSxLQUFLLGFBQWEsV0FDNUIsS0FBSyxhQUFhLFFBQVEsVUFBVSxFQUNwQyxLQUFLLGFBQWEsU0FBUyxVQUFVLEVBQ3JDLEVBQ0Q7QUFDRCxVQUFPLEtBQUssY0FBYyxVQUFVOzs7RUFJOUIsd0JBQXFCO0dBQzNCLE1BQU0sV0FBVyxLQUFLLGFBQWEsV0FDakMsS0FBSyxhQUFhLFFBQVEsS0FBSyxZQUFZLEdBQUcsR0FDOUMsSUFDQSxHQUNEO0FBQ0QsVUFBTyxLQUFLLGNBQWMsU0FBUzs7O0VBSTdCLG9CQUFpQjtHQUN2QixNQUFNLFdBQVcsS0FBSyxhQUFhLFdBQ2pDLEtBQUssYUFBYSxRQUFRLEtBQUssWUFBWSxJQUFJLEtBQUssUUFBUSxJQUFJLElBQ2hFLEdBQ0EsRUFDRDtBQUNELFVBQU8sS0FBSyxjQUFjLFNBQVM7OztFQUk3Qiw2QkFBMEI7R0FDaEMsTUFBTSxXQUFXLEtBQUssYUFBYSxXQUFXLEtBQUssT0FBTyxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUc7QUFDNUUsVUFBTyxLQUFLLGNBQWMsU0FBUzs7O0VBSTdCLHlCQUFzQjtHQUM1QixNQUFNLFFBQVEsS0FBSyxRQUFRLEtBQUssa0JBQWtCLEtBQUs7R0FDdkQsTUFBTSxnQkFBZ0IsTUFBTSxNQUFNLFNBQVM7R0FDM0MsTUFBTSxXQUFXLGNBQWMsY0FBYyxTQUFTO0dBQ3RELE1BQU0sV0FBVyxLQUFLLGFBQWEsV0FBVyxXQUFXLEdBQUcsR0FBRyxFQUFFO0FBQ2pFLFVBQU8sS0FBSyxjQUFjLFNBQVM7O0VBRzdCLGlCQUFpQixhQUF3QjtBQUMvQyxPQUFJLGFBQWEsY0FBYyxtQkFDN0IsTUFBSyxjQUFjOztFQUlmLGVBQVk7QUFDbEIsU0FBTSxLQUFLLEtBQUssT0FBTyxRQUFRLE1BQU0sRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUMzRCxRQUFTLElBQUksV0FBVyxHQUMxQjtHQUNELE1BQU0saUJBQWlCLEtBQUssb0JBQW9CO0FBQ2hELE9BQUksZUFDRixnQkFBZSxXQUFXOzs7RUFLdEIscUJBQWtCO0FBQ3hCLE9BQUksS0FBSyxrQkFBa0IsT0FBTztJQUNoQyxNQUFNLG9CQUNKLEtBQUssT0FBTyxNQUFNLE1BQU0sRUFBRSxRQUFRLDBDQUFtQixDQUFDLElBQ3RELEtBQUssT0FBTyxNQUFNLE1BQU0sRUFBRSxRQUFRLHdDQUFrQixDQUFDO0FBQ3ZELFdBQU8scUJBQXFCLENBQUMsa0JBQWtCLFdBQzNDLG9CQUNBLEtBQUssdUJBQXVCO1VBQzNCO0lBQ0wsTUFBTSxvQkFDSixLQUFLLFlBQVksY0FBMEMsMENBQW1CLElBQzlFLEtBQUssWUFBWSxjQUEwQyx3Q0FBa0I7QUFDL0UsV0FBTyxxQkFBcUIsQ0FBQyxrQkFBa0IsV0FDM0Msb0JBQ0EsS0FBSyxXQUFZLGNBQ2YsZ0JBQWdCLEtBQUssY0FBYSxrQkFDbkM7Ozs7Ozs7Ozs7RUFXRCx3QkFBcUI7R0FDM0IsTUFBTSxRQUFRLEtBQUs7R0FDbkIsTUFBTSxhQUFhLE1BQU0sUUFBUSxNQUFNLENBQUMsRUFBRSxTQUFTO0FBQ25ELE9BQUksQ0FBQyxjQUFjLFdBQVcsV0FBVyxFQUN2QyxRQUFPO1FBQ0Y7SUFDTCxNQUFNLGVBQWUsV0FDbEIsS0FBSyxNQUFjLEtBQUssYUFBYSxVQUFVLEVBQUUsTUFBWSxDQUFDLENBQzlELE1BQU0sQ0FBQztBQUNWLFdBQU8sTUFBTSxNQUFNLE1BQU0sRUFBRSxRQUFRLFVBQVUsYUFBWSxJQUFLLENBQUUsSUFBSTs7O0VBSWhFLHFCQUFxQixPQUFzQixLQUFZO0FBQzdELE9BQUksNEJBQTRCLE1BQU0sQ0FDcEMsT0FBTSxnQkFBZ0I7R0FLeEIsTUFBTSxRQUFRLEtBQUs7R0FDbkIsTUFBTSxRQUFnQixNQUFNLFdBQVcsTUFBTSxNQUFNLE1BQU0sT0FBTztHQUNoRSxJQUFJO0FBQ0osT0FBSSxJQUNGLFVBQVMsS0FBSywyQkFBMkIsT0FBTyxPQUFPLE9BQWtDLElBQUk7T0FFN0YsVUFBUyxLQUFLLG9CQUFvQixPQUFPLE9BQU8sTUFBTTtHQUV4RCxNQUFNLFlBQVksS0FBSyxtQkFBbUIsV0FBVyxLQUFLLFlBQ3ZEO0FBQ0gsT0FBSSxXQUFXLFVBQVU7QUFDdkIsV0FBTyxXQUFXO0FBQ2xCLFlBQVEsT0FBTztBQUNmLGFBQVMsV0FBVzs7O0VBSWhCLDJCQUNOLEtBQ0EsT0FDQSxPQUNBLEtBQVc7R0FFWCxNQUFNLGVBQ0osS0FBSyxnQkFBZ0IsZUFDakI7SUFBRSxXQUFXO0lBQUcsUUFBUTtJQUFjLEdBQ3RDO0lBQUUsV0FBVztJQUFjLFFBQVE7SUFBRztHQUM1QyxNQUFNLG9CQUNKLFFBQVEsS0FBSyxxQ0FBcUMsbUJBQzlDLEtBQUsscUNBQXFDLG1CQUMxQyxLQUFLLHFDQUFxQztBQUVoRCxXQUFRLElBQUksS0FBWjtJQUNFLEtBQUssVUFDSCxRQUFPLEtBQUssZUFBZSxPQUFPLE9BQU8sSUFBSSxXQUFXLENBQUMsYUFBYSxPQUFPO0lBQy9FLEtBQUssWUFDSCxRQUFPLEtBQUssZUFBZSxPQUFPLE9BQU8sSUFBSSxXQUFXLGFBQWEsT0FBTztJQUM5RSxLQUFLLFlBQ0gsUUFBTyxLQUFLLGVBQWUsT0FBTyxPQUFPLElBQUksV0FBVyxDQUFDLGFBQWEsVUFBVTtJQUNsRixLQUFLLGFBQ0gsUUFBTyxLQUFLLGVBQWUsT0FBTyxPQUFPLElBQUksV0FBVyxhQUFhLFVBQVU7SUFDakYsS0FBSyxTQUNILEtBQUksS0FBSyxnQkFBZ0IsY0FBYztLQUVyQyxNQUFNLFNBRHNCLENBQUMsSUFBSSxXQUFXLGdCQUFnQixnQkFDeEIsQ0FBQyxJQUFJO0FBQ3pDLFlBQU8sS0FBSyxtQkFBbUIsT0FBTyxPQUFPLEtBQUssT0FBTyxhQUFhLE9BQU87V0FDeEU7S0FHTCxNQUFNLFNBRnFCLEtBQUssTUFBTSxDQUFDLElBQUksV0FBVyxxQkFBcUIsYUFBYSxHQUM5QyxLQUFLLGVBQWUsb0JBQW9CLElBQzlDLENBQUMsSUFBSTtBQUN6QyxZQUFPLEtBQUssbUJBQW1CLE9BQU8sT0FBTyxLQUFLLE9BQU8sYUFBYSxPQUFPOztJQUdqRixLQUFLLFdBQ0gsS0FBSSxLQUFLLGdCQUFnQixjQUFjO0tBQ3JDLE1BQU0sZ0JBQWdCLENBQUMsSUFBSSxhQUFhLElBQUksS0FBSyxJQUFJLENBQUMsSUFBSSxhQUFhO0tBQ3ZFLE1BQU0sZUFBZSxDQUFDLElBQUksYUFBYSxJQUFJLEtBQUssQ0FBQyxJQUFJLFlBQVksSUFBSSxDQUFDLElBQUk7S0FDMUUsTUFBTSxpQkFBb0IsS0FBSyxhQUFhLFdBQVcsY0FBYyxlQUFlLEVBQUU7S0FDdEYsTUFBTSxjQUFzQixLQUFLLGFBQWEsUUFDNUMsS0FBSyxhQUFhLGdCQUFnQixnQkFBZ0IsR0FBRyxDQUN0RDtLQUNELE1BQU0sUUFDSixLQUFLLE9BQU8sY0FBYyxDQUFDLElBQUksWUFBYSxhQUFhLEdBQUc7QUFDOUQsWUFBTyxLQUFLLG1CQUFtQixPQUFPLE9BQU8sS0FBSyxPQUFPLENBQUMsYUFBYSxPQUFPO1dBQ3pFO0tBR0wsTUFBTSxRQUZxQixLQUFLLE1BQU0sQ0FBQyxJQUFJLFdBQVcscUJBQXFCLGFBQWEsR0FDaEQsZUFBZSxvQkFDcEIsQ0FBQyxJQUFJO0FBQ3hDLFlBQU8sS0FBSyxtQkFBbUIsT0FBTyxPQUFPLEtBQUssT0FBTyxDQUFDLGFBQWEsT0FBTzs7SUFHbEYsS0FBSyxPQUNILFFBQU8sS0FBSyxjQUFjLE9BQU8sT0FBTyxLQUFLLEVBQUU7SUFFakQsS0FBSyxPQUFPO0tBQ1YsTUFBTSxnQkFBZ0IsQ0FBQyxJQUFJLGFBQWEsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLGFBQWE7S0FDdkUsTUFBTSxlQUFlLENBQUMsSUFBSSxhQUFhLElBQUksS0FBSyxDQUFDLElBQUksWUFBWSxJQUFJLENBQUMsSUFBSTtLQUMxRSxNQUFNLGlCQUFvQixLQUFLLGFBQWEsV0FBVyxjQUFjLGVBQWUsRUFBRTtBQUN0RixZQUFPLEtBQUssYUFBYSxPQUFPLE9BQU8sZUFBZTs7SUFFeEQsUUFDRSxRQUFPLE1BQU07OztFQUlYLGdCQUFnQixNQUFZO0FBQ2xDLFVBQ0UsT0FBTyxLQUFLLHFDQUFxQyxrQkFDakQsT0FBTyxLQUFLLHFDQUFxQzs7RUFJN0MsZUFDTixPQUNBLE9BQ0EsTUFDQSxPQUFhO0dBRWIsTUFBTSxlQUFlLEtBQUssYUFBYSxVQUNyQyxLQUFLLGFBQWEsZ0JBQWdCLE1BQU0sTUFBTSxDQUMvQztBQUNELE9BQUksS0FBSyxnQkFBZ0IsYUFBYSxDQUNwQyxRQUFPLE1BQU07R0FFZixNQUFNLFdBQVcsTUFBTSxNQUFNLE1BQU0sS0FBSyxtQkFBbUIsRUFBRSxNQUFPLEtBQUssYUFBYTtBQUN0RixPQUFJLENBQUMsWUFBWSxTQUFTLFNBQ3hCLFFBQU8sS0FBSyxlQUFlLE9BQU8sT0FBTyxLQUFLLGFBQWEsWUFBWSxhQUFjLEVBQUUsTUFBTTtBQUUvRixVQUFPOztFQUdELG1CQUNOLE9BQ0EsT0FDQSxLQUNBLE9BQ0EsaUJBQXVCO0dBRXZCLE1BQU0sZUFBZSxLQUFLLGFBQWEsVUFDckMsS0FBSyxhQUFhLGdCQUFnQixJQUFJLFdBQVcsTUFBTSxDQUN4RDtBQUNELE9BQUksS0FBSyxnQkFBZ0IsYUFBYSxDQUNwQyxRQUFPLE1BQU07R0FFZixNQUFNLFdBQVcsTUFBTSxNQUFNLE1BQU0sS0FBSyxtQkFBbUIsRUFBRSxNQUFPLEtBQUssYUFBYTtBQUN0RixPQUFJLENBQUMsWUFBWSxTQUFTLFNBQ3hCLFFBQU8sS0FBSyxtQkFBbUIsT0FBTyxPQUFPLEtBQUssUUFBUSxpQkFBaUIsZ0JBQWdCO0FBRTdGLFVBQU87O0VBR0QsY0FDTixPQUNBLE9BQ0EsS0FDQSxNQUFZO0dBRVosTUFBTSxlQUFlLEtBQUssYUFBYSxVQUNyQyxLQUFLLGFBQWEsV0FBVyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksWUFBWSxLQUFLLENBQ3BFO0FBQ0QsT0FBSSxLQUFLLGdCQUFnQixhQUFhLENBQ3BDLFFBQU8sTUFBTTtHQUVmLE1BQU0sV0FBVyxNQUFNLE1BQU0sTUFBTSxLQUFLLG1CQUFtQixFQUFFLE1BQU8sS0FBSyxhQUFhO0FBQ3RGLE9BQUksQ0FBQyxZQUFZLFNBQVMsU0FDeEIsUUFBTyxLQUFLLGNBQWMsT0FBTyxPQUFPLEtBQUssT0FBTyxFQUFFO0FBRXhELFVBQU87O0VBR0QsYUFDTixPQUNBLE9BQ0EsZ0JBQWlCO0dBRWpCLE1BQU0sZUFBZSxLQUFLLGFBQWEsVUFDckMsS0FBSyxhQUFhLGdCQUFnQixnQkFBZ0IsR0FBRyxDQUN0RDtBQUNELE9BQUksS0FBSyxnQkFBZ0IsYUFBYSxDQUNwQyxRQUFPLE1BQU07R0FFZixNQUFNLFdBQVcsTUFBTSxNQUFNLE1BQU0sS0FBSyxtQkFBbUIsRUFBRSxNQUFPLEtBQUssYUFBYTtBQUN0RixPQUFJLENBQUMsWUFBWSxTQUFTLFNBQ3hCLFFBQU8sS0FBSyxhQUFhLE9BQU8sT0FBTyxLQUFLLGFBQWEsWUFBWSxhQUFjLENBQUM7QUFFdEYsVUFBTzs7Ozs7Ozs7RUFTRCxvQkFDTixLQUNBLE9BQ0EsT0FBbUM7R0FFbkMsTUFBTSxFQUNKLHlCQUNBLG1CQUNBLDZCQUNBLG1CQUVBLEtBQUssMENBQTBDLE9BQU8sS0FBSyxrQkFBa0IsT0FBTztBQUV0RixXQUFRLElBQUksS0FBWjtJQUNFLEtBQUssVUFDSCxRQUFPLEtBQUssVUFBVSxPQUFPLE9BQU8sQ0FBQyxlQUFlO0lBQ3RELEtBQUssWUFDSCxRQUFPLEtBQUssVUFBVSxPQUFPLE9BQU8sZUFBZTtJQUNyRCxLQUFLLFlBQ0gsUUFBTyxLQUFLLFVBQVUsT0FBTyxPQUFPLEdBQUc7SUFDekMsS0FBSyxhQUNILFFBQU8sS0FBSyxVQUFVLE9BQU8sT0FBTyxFQUFFO0lBQ3hDLEtBQUssT0FDSCxRQUFPLEtBQUssV0FBVyxPQUFPLGtCQUFrQjtJQUNsRCxLQUFLLFNBQ0gsUUFBTyxLQUFLLG1CQUNWLE9BQ0EseUJBQ0EsbUJBQ0EsZUFDRDtJQUNILEtBQUssV0FDSCxRQUFPLEtBQUssa0JBQWtCLE9BQU8sT0FBTyw2QkFBNkIsZUFBZTtJQUMxRixLQUFLLE1BQ0gsUUFBTyxLQUFLLFVBQVUsT0FBTyw4QkFBOEIsRUFBRTtJQUMvRCxRQUNFLFFBQU8sTUFBTTs7Ozs7Ozs7RUFTWCwwQ0FDTixPQUNBLFlBQW1CO0dBRW5CLE1BQU0sa0JBQWtCLGFBQWEsaUJBQWlCO0dBQ3RELE1BQU0sU0FBaUIsS0FBSyxNQUFNLFFBQVEsZ0JBQWdCLEdBQUc7R0FDN0QsTUFBTSxjQUFzQixXQUFXLElBQUksUUFBUSxRQUFRO0FBQzNELFVBQU87SUFDTCxnQkFBZ0IsYUFBYSxnQkFBZ0I7SUFDN0MseUJBQXlCO0lBQ3pCLG1CQUFtQixRQUFRO0lBQzNCLDZCQUE2QixXQUFXLElBQUksa0JBQWtCLGtCQUFrQjtJQUNqRjs7Ozs7O0VBT0ssVUFDTixNQUNBLE9BQ0EsT0FBYTtHQUViLElBQUksWUFBWSxRQUFRO0FBQ3hCLFVBQU8sWUFBWSxLQUFLLFVBQVUsS0FBSyxZQUFZLFNBQ2pELGNBQWE7QUFFZixVQUFPLEtBQUssY0FBYyxLQUFLOzs7RUFJekIsV0FDTixNQUNBLHFCQUEyQjtBQUUzQixVQUFPLENBQUMsS0FBSyxxQkFBcUIsV0FDOUIsS0FBSyx1QkFDTCxLQUFLLFVBQVUsTUFBTSxxQkFBcUIsRUFBRTs7O0VBSTFDLFVBQ04sTUFDQSxvQkFBMEI7QUFFMUIsVUFBTyxDQUFDLEtBQUssb0JBQW9CLFdBQzdCLEtBQUssc0JBQ0wsS0FBSyxVQUFVLE1BQU0sb0JBQW9CLEdBQUc7OztFQUkxQyxtQkFDTixNQUNBLE9BQ0EsUUFDQSxnQkFBc0I7R0FFdEIsTUFBTSxZQUFhLFFBQVEsaUJBQWtCO0FBQzdDLFVBQU8sQ0FBQyxLQUFLLFdBQVcsV0FDcEIsS0FBSyxhQUNMLEtBQUssVUFBVSxNQUFNLFdBQVcsZUFBZTs7O0VBSTdDLGtCQUNOLE1BQ0EsT0FDQSxRQUNBLGdCQUFzQjtHQUV0QixNQUFNLFlBQVksUUFBUSxLQUFLLE9BQU8sU0FBUyxRQUFRLEtBQUssZUFBZSxHQUFHO0FBQzlFLFVBQU8sQ0FBQyxLQUFLLFdBQVcsV0FDcEIsS0FBSyxhQUNMLEtBQUssVUFBVSxNQUFNLFdBQVcsQ0FBQyxlQUFlOztFQUc5QyxxQ0FBcUMsaUJBQWlCLE9BQUs7QUFDakUsUUFBSyxtQkFBbUIsZUFBZTtBQUN2QyxRQUFLLGtCQUFrQjs7RUFHakIsbUJBQW1CLGlCQUFpQixPQUFLO0FBQy9DLE9BQUksS0FBSyxpQkFDUCxNQUFLLGNBQWM7QUFFckIsUUFBSyxlQUNGLEtBQUssV0FBWSxLQUFLLFVBQWtCLEdBQUcsR0FBRyxHQUFJLEtBQUssY0FDeEQsS0FBSyxhQUFhLE9BQU87QUFDM0IsUUFBSyxnQkFBZ0I7QUFDckIsUUFBSyxlQUFlLEtBQUE7QUFDcEIsUUFBSyxPQUFPO0FBQ1osUUFBSyxvQkFBb0IsS0FBSyxnQkFBZ0IsS0FBSztBQUVuRCxPQUFJLGVBQ0YsTUFBSyx1QkFBdUI7OztFQUt4QixpQkFBYztHQUNwQixNQUFNLHNCQUFzQixLQUFLLFFBQzdCLEtBQUssYUFBYSxrQkFBa0IsS0FBSyxhQUFhLEVBQUUsR0FDeEQsS0FBQTtBQUNKLFVBQU8sSUFBSTs7VUFFTCxLQUFLLFVBQ0wsY0FDTSxLQUFLLG9CQUFvQixHQUFHLEVBQ2xDLGtCQUFrQixLQUFLLFVBQVUsVUFDakMsS0FBSyx3QkFBd0IsQ0FDOUIsQ0FBQTs7WUFFRyxLQUFLLHVCQUF1QixLQUFLLFlBQVksQ0FBQTtZQUM3QyxLQUFLLFFBQVEsS0FBSyx1QkFBdUIsb0JBQXFCLEdBQUcsUUFBQTs7Y0FFL0QsS0FBSywyQkFBMkIsS0FBSyxhQUFhLG9CQUFxQixDQUFBOzs7VUFHM0UsS0FBSyxVQUNMLGVBQ00sS0FBSyxvQkFBb0IsRUFBRSxFQUNqQyxjQUFjLEtBQUssVUFBVSxVQUM3QixLQUFLLG9CQUFvQixDQUMxQixDQUFBOzs7O1lBSUcsS0FBSyxnQkFBZ0IsZUFDbkIsSUFBSTtrQkFDQSxLQUFLLGdCQUFnQixLQUFLLFFBQVEsS0FBSyxhQUFhLENBQUE7a0JBQ3BELEtBQUssUUFDSCxLQUFLLGdCQUFnQixLQUFLLGlCQUFpQixLQUFLLHVCQUF1QixLQUFLLEdBQzVFLFFBQUE7a0JBRU4sSUFBSTtrQkFDQSxLQUFLLHdCQUF3QixLQUFLLFFBQVEsS0FBSyxhQUFhLENBQUE7a0JBQzVELEtBQUssUUFDSCxLQUFLLHdCQUNILEtBQUssaUJBQ0wsS0FBSyx1QkFDTCxvQkFDRCxHQUNELFFBQUE7Ozs7Ozs7RUFRVix1QkFBdUIsR0FBSTtHQUNqQyxNQUFNLGFBQWEsR0FDakIsS0FBSyxZQUFZLEtBQUssYUFBYSxTQUFTLEVBQUUsR0FBRyxHQUNuRCxHQUFJLEtBQUssYUFBYSxRQUFRLEVBQUU7QUFDaEMsVUFBTyxJQUFJOzs7O3NCQUlPLHVCQUF1QixLQUFLLFVBQVUsU0FBUSxHQUFJLFdBQVU7dUJBQzVEO0FBQ1osU0FBSyxjQUFjO0FBQ25CLFNBQUssb0JBQW9CO0FBQ3pCLFNBQUssdUJBQXVCOzs7VUFHNUIsV0FBQTs7Ozs7O0VBT0EsMkJBQTJCLEdBQUcsT0FBVTtHQUM5QyxJQUFJLGFBQWE7QUFDakIsUUFBSyxNQUFNLEtBQUssTUFDZCxLQUFJLEVBQ0YsZUFBYyxHQUNaLEtBQUssWUFBWSxLQUFLLGFBQWEsU0FBUyxFQUFFLEdBQUcsR0FDbkQsR0FBSSxLQUFLLGFBQWEsUUFBUSxFQUFFLENBQUE7QUFHcEMsVUFBTzs7O0VBSUQsZ0JBQ04sT0FDQSxhQUNBLGtCQUEyQixPQUFLO0dBRWhDLE1BQU0scUNBQ0osS0FBSyxRQUNELENBQUMsR0FBRyxLQUFLLFFBQVEsR0FBRyxLQUFLLGdCQUFnQixHQUN6QyxrQkFDRSxLQUFLLGtCQUNMLEtBQUssUUFDWCxNQUFNO0dBQ1IsTUFBTSxrQ0FDSixrQkFBa0IsS0FBSyxrQkFBa0IsS0FBSyxRQUM5QyxNQUFNO0FBQ1IsVUFBTyxJQUFJOzs7cUJBR00sVUFDWCxLQUFLLGlCQUFpQixNQUFNLGNBQTZCLENBQUE7eUJBQzFDLE1BQXNCLEtBQUssbUJBQW1CLEVBQUUsQ0FBQTs7OztjQUkzRCxLQUFLLGNBQWMsSUFBSSxzREFBc0QsUUFBQTtjQUM3RSxLQUFLLFVBQVUsS0FDZCxTQUFrQixVQUFrQixJQUFJOztvQkFFbkMsS0FBSyxXQUNILElBQUk7O21DQUVTLFFBQUE7eUNBQ0s7SUFFWixNQUFNLE9BQWlCLCtCQUErQixRQUNuRCxRQUFnQixJQUFJLGtCQUFrQixRQUFRLEtBQUssRUFDcEQ7QUFDRixTQUFLLHFCQUFxQixLQUFLOzs7MEJBSXJDLElBQUk7a0RBQ3dCLFFBQVEsS0FBSTttREFDWCxRQUFRLE9BQU07OztnQkFJcEQsQ0FBQTs7OztZQUlELE1BQU0sS0FBSyxNQUFnQixhQUFvQjtJQUMvQyxNQUFNLGlCQUF5QixlQUFlLEtBQUs7QUFDbkQsUUFBSSxhQUFhLEtBQUssZUFDcEIsUUFBTyxJQUFJOztvQkFFTCxLQUFLLGNBQ0gsSUFBSTs7NEJBRUUsS0FBSyxXQUNILElBQUk7OzJDQUVTLFlBQVksR0FBQTtpREFDUDtLQUNaLE1BQU0sT0FBaUIsa0NBQWtDLFFBQ3RELFFBQWdCLElBQUksY0FBYyxZQUFZLEdBQy9DO0FBQ0YsVUFBSyxxQkFBcUIsS0FBSzs7O2tDQUlyQyxJQUFJOztxQ0FFRyxHQUFHLHVCQUF1QixLQUFLLFVBQVUsU0FBUSxHQUFJLFlBQVksS0FBSTs7MkRBRS9DLFlBQVksR0FBRTs7OzBCQUluRCxRQUFBO29CQUNGLENBQUMsR0FBRyxNQUFNLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxVQUM1QixJQUFJLDZDQUNYLENBQUE7b0JBQ0MsS0FBSyxnQkFBZ0IsS0FBSyxDQUFBOzs7QUFJbEMsV0FBTyxJQUFJOztrQkFFTCxLQUFLLGNBQ0gsSUFBSTs7MEJBRUUsS0FBSyxXQUNILElBQUk7O3lDQUVTLFlBQVksVUFBQTsrQ0FDUDtLQUNaLE1BQU0sT0FBaUIsa0NBQWtDLFFBQ3RELFFBQWdCLElBQUksY0FBYyxZQUFZLFVBQy9DO0FBQ0YsVUFBSyxxQkFBcUIsS0FBSzs7O2dDQUlyQyxJQUFJOzttQ0FFRyxHQUFHLHVCQUF1QixLQUFLLFVBQVUsU0FBUSxHQUFJLFlBQVksWUFBVzs7eURBRXRELFlBQVksVUFBUzs7O3dCQUkxRCxRQUFBO2tCQUNGLEtBQUssZ0JBQWdCLEtBQUssQ0FBQTs7O0tBR2hDLENBQUE7Ozs7OztFQU9GLHdCQUNOLE9BQ0EsYUFDQSxxQkFBdUI7R0FFdkIsTUFBTSxhQUFhLEtBQUssYUFBYSxtQkFDbkMsdUJBQXVCLEtBQUssWUFDN0I7R0FDRCxNQUFNLHFDQUNKLEtBQUssUUFDRCxDQUFDLEdBQUcsS0FBSyxRQUFRLEdBQUcsS0FBSyxnQkFBZ0IsR0FDekMsc0JBQ0UsS0FBSyxrQkFDTCxLQUFLLFFBQ1gsTUFBTTtBQUNSLFVBQU8sSUFBSTs7O3FCQUdNLFVBQ1gsS0FBSyxpQkFBaUIsTUFBTSxjQUE2QixDQUFBO3lCQUMxQyxNQUFzQixLQUFLLG1CQUFtQixFQUFFLENBQUE7O1VBRS9ELEtBQUssY0FDSCxJQUFJOzs7b0JBR0ksc0JBQ0UsVUFDQSxJQUFJLDZDQUFBO29CQUNOLFlBQVksS0FDWCxlQUF1QixJQUFJOzswQkFFdEIsS0FBSyxXQUNILElBQUk7O3lDQUVTLFdBQUE7K0NBQ0s7SUFDWixNQUFNLE9BQWlCLGtDQUFrQyxRQUN0RCxRQUFnQixJQUFJLGNBQWMsV0FDbkM7QUFDRixTQUFLLHFCQUFxQixLQUFLOzs7Z0NBSXJDLElBQUk7O21DQUVHLEdBQUcsdUJBQXVCLEtBQUssVUFBVSxTQUFRLEdBQUksYUFBWTs7eURBRTNDLFdBQVU7OztzQkFJaEQsQ0FBQTs7O2dCQUlQLFFBQUE7O1lBRUEsTUFBTSxLQUFLLE1BQWdCLGFBQW9CO0lBQy9DLE1BQU0sVUFBVSxLQUFLLFVBQVU7SUFDL0IsTUFBTSxpQkFBaUIsS0FBSyxRQUFRLENBQUMsR0FBRyxNQUFNLEdBQUcsS0FBSyxnQkFBZ0IsVUFBVSxHQUFHO0FBQ25GLFdBQU8sSUFBSTs7a0JBRUwsc0JBQ0UsVUFDQSxJQUFJOzswQkFFRSxLQUFLLFdBQ0gsSUFBSTs7eUNBRVMsUUFBQTsrQ0FDTSxLQUFLLHFCQUFxQixlQUFlLENBQUE7O2tDQUV0RCxRQUFRLE9BQUE7O2dDQUdkLElBQUk7d0RBQ3dCLFFBQVEsS0FBSTt5REFDWCxRQUFRLE9BQU07Ozs7a0JBSXJELFdBQVcsYUFDVCxJQUFJLCtDQUNKLFFBQUE7a0JBQ0YsS0FBSyxnQkFBZ0IsS0FBSyxDQUFBOzs7S0FHaEMsQ0FBQTs7Ozs7O0VBT0YsZ0JBQWdCLE1BQWM7QUFDcEMsVUFBTyxLQUFLLEtBQUssUUFBZTtBQUM5QixXQUFPLElBQUk7O3VCQUVNLElBQUksTUFBSzs7cUJBRVgsSUFBSSxNQUFBOzZCQUNJLEtBQUssWUFBWSxJQUFJLFVBQVUsQ0FBQTswQkFDbEMsUUFBdUIsS0FBSyxxQkFBcUIsS0FBSyxJQUFJLENBQUE7Ozs7O0tBSzlFOzs7RUFJSSxtQkFBZ0I7QUFDdEIsVUFBTyxJQUFJOztVQUVMLEtBQUssVUFDTCxjQUNNLEtBQUssbUJBQW1CLEdBQUcsRUFDakMsaUJBQWlCLEtBQUssVUFBVSxVQUNoQyxLQUFLLHVCQUF1QixDQUM3QixDQUFBO29EQUMyQyxLQUFLLDBCQUEwQixDQUFBO1VBQ3pFLEtBQUssVUFDTCxlQUNNLEtBQUssbUJBQW1CLEVBQUUsRUFDaEMsYUFBYSxLQUFLLFVBQVUsVUFDNUIsS0FBSyxtQkFBbUIsQ0FDekIsQ0FBQTs7OztZQUlHLEtBQUssa0JBQWtCLEtBQUssU0FBUyxLQUFLLFlBQWEsQ0FBQTtZQUN2RCxLQUFLLFFBQVEsS0FBSyxrQkFBa0IsS0FBSyxTQUFTLEtBQUssY0FBZSxFQUFFLEdBQUcsUUFBQTs7Ozs7O0VBTzdFLDJCQUF3QjtBQUM5QixVQUFPLElBQUk7Ozs7cUJBSU0sR0FBRywwQkFBMEIsS0FBSyxVQUFVLFNBQVEsR0FBSSxLQUFLLGNBQUE7dUJBQzNELEtBQUsscUNBQXFDLEtBQUssQ0FBQTs7VUFFNUQsS0FBSyxZQUFXLEdBQUksS0FBSyxRQUFRLE1BQU0sS0FBSyxjQUFlLE1BQU0sUUFBQTs7OytDQUc1QixLQUFLLFlBQVc7OztFQUlyRCxrQkFBa0IsUUFBdUIsTUFBWTtBQUMzRCxVQUFPLElBQUk7Ozt5QkFHVSxNQUFzQixLQUFLLG1CQUFtQixFQUFFLENBQUE7O1VBRS9ELEtBQUssUUFDSCxJQUFJOztzRUFFc0QsZUFBYyxHQUFJLEtBQUk7O3dCQUdoRixRQUFBOztZQUVBLE9BQU8sS0FDTixRQUFxQixJQUFJOztrQkFFcEIsSUFBSSxLQUFLLFVBQW9CO0FBQzdCLFdBQU8sSUFBSTs7O2tDQUdLLEtBQUksR0FBSSxNQUFNLE1BQUs7dUNBQ2QsS0FBSyxrQkFBa0IsTUFBTSxZQUFZLEtBQUssQ0FBQTtvQ0FDakQsUUFBdUIsS0FBSyxxQkFBcUIsSUFBSSxDQUFBOzs7OztLQUt2RSxDQUFBOztjQUdQLENBQUE7Ozs7OztFQU9ELGtCQUFrQixPQUFlLE1BQVk7QUFDbkQsUUFBSyxlQUFlO0FBQ3BCLFFBQUssb0JBQW9CO0FBQ3pCLFFBQUssTUFDSCxLQUFLLGFBQWEsV0FDaEIsTUFDQSxLQUFLLGNBQ0wsS0FBSyxhQUFhLFFBQVEsS0FBSyxZQUFZLENBQzVDLENBQ0Y7QUFDRCxRQUFLLHVCQUF1QjtBQUM1QixRQUFLLGtCQUFrQjs7O0VBSWpCLGtCQUFlO0FBQ3JCLFVBQU8sSUFBSTs7VUFFTCxLQUFLLFVBQ0wsY0FDTSxLQUFLLHdCQUF3QixDQUFDLGVBQWUsRUFDbkQsc0JBQXNCLGVBQWUsQ0FBQyxLQUFLLFVBQVUsVUFDckQsS0FBSyw0QkFBNEIsQ0FDbEMsQ0FBQTtvREFDMkMsS0FBSyx5QkFBeUIsQ0FBQTtVQUN4RSxLQUFLLFVBQ0wsZUFDTSxLQUFLLHdCQUF3QixlQUFlLEVBQ2xELGtCQUFrQixlQUFlLENBQUMsS0FBSyxVQUFVLFVBQ2pELEtBQUssd0JBQXdCLENBQzlCLENBQUE7Ozs7WUFJRyxLQUFLLGlCQUFpQixLQUFLLE9BQU8sQ0FBQTtZQUNsQyxLQUFLLFFBQVEsS0FBSyxpQkFBaUIsS0FBSyxpQkFBaUIsS0FBSyxHQUFHLFFBQUE7Ozs7OztFQU9uRSxVQUNOLFdBQ0EsT0FDQSxXQUNBLFVBQWlCO0FBRWpCLFVBQU8sSUFBSTs7aUNBRWtCLFVBQVM7bUJBQ3ZCLFVBQUE7ZUFDSixNQUFBO2tCQUNHLFNBQUE7bUNBQ2lCLGNBQWMsU0FBUyxhQUFhLE9BQU07Ozs7RUFLbkUsMEJBQXVCO0dBQzdCLE1BQU0sWUFBb0IsS0FBSyxPQUFPLE1BQU0sQ0FBQztHQUM3QyxNQUFNLGlCQUEyQixLQUFLLFFBQVEsS0FBSyxrQkFBa0IsS0FBSyxRQUFRLE1BQU07R0FFeEYsTUFBTSxZQUFZLEdBQUcsVUFBUyxLQURMLGNBQWMsY0FBYyxTQUFTO0FBRTlELFVBQU8sSUFBSTs7Ozs7c0JBS08sMEJBQTBCLEtBQUssVUFBVSxTQUFRLEdBQUksVUFBUzt1QkFDN0QsS0FBSyxxQ0FBcUMsS0FBSyxDQUFBOztVQUU1RCxVQUFBOzs7K0NBR3FDLFVBQVM7Ozs7RUFLOUMsaUJBQWlCLE9BQW1CLGFBQWEsT0FBSztBQUM1RCxVQUFPLElBQUk7O3VCQUVRLE1BQXNCLEtBQUssbUJBQW1CLEVBQUUsQ0FBQTs7O1VBRzdELE1BQU0sS0FDTCxRQUNDLElBQUk7Z0JBQ0EsSUFBSSxLQUFLLFNBQWdCO0FBQ3pCLFdBQU8sSUFBSTs7OytCQUdJLE9BQU8sS0FBSyxDQUFBO2tDQUNULFFBQXVCLEtBQUsscUJBQXFCLElBQUksQ0FBQTtxQ0FDbEQsS0FBSyxpQkFBaUIsTUFBTSxXQUFXLENBQUE7Ozs7O0tBSzVELENBQUE7bUJBRVAsQ0FBQTs7Ozs7RUFNQyxpQkFBaUIsTUFBYyxXQUFrQjtBQUN2RCxRQUFLLGNBQWMsWUFBWSxPQUFPLElBQUk7QUFDMUMsUUFBSyxvQkFBb0I7QUFDekIsUUFBSyxrQkFDSCxLQUFLLGFBQWEsV0FDaEIsS0FBSyxhQUNMLEtBQUssYUFBYSxTQUFTLEtBQUssWUFBWSxFQUM1QyxLQUFLLGFBQWEsUUFBUSxLQUFLLFlBQVksQ0FDNUMsQ0FDRjtBQUNELFFBQUssdUJBQXVCOztFQUd0QixXQUFRO0FBQ2QsT0FBSSxZQUFZLEtBQUssa0JBR25CLFFBQU8sSUFBSSxHQUFHO0FBRWhCLFdBQVEsS0FBSyxlQUFiO0lBQ0UsS0FBSyxPQUNILFFBQU8sS0FBSyxpQkFBaUI7SUFDL0IsS0FBSyxRQUNILFFBQU8sS0FBSyxrQkFBa0I7SUFFaEMsUUFDRSxRQUFPLEtBQUssZ0JBQWdCOzs7RUFJMUIsbUJBQW1CLE9BQXFCO0dBQzlDLE1BQU0sUUFBUSxNQUFNO0FBQ3BCLE9BQUksTUFBTSxrQkFBa0IsUUFBUTtBQUNsQyxVQUFNLFVBQVUsT0FBTywyQkFBMkI7QUFDbEQsUUFBSSxLQUFLLGlCQUNQLE1BQUssY0FBYztBQUVyQixTQUFLLGdCQUFnQixLQUFLO2NBQ2pCLE1BQU0sa0JBQWtCLE9BQ2pDLE1BQUssVUFBVSxPQUFPLE9BQU8sYUFBYTs7RUFJdEMsd0JBQXFCO0FBQzNCLFFBQUssVUFBVSxPQUFPLElBQUksYUFBYTtBQUN2QyxRQUFLLFlBQ0QsaUJBQWlCLFFBQVEsRUFDekIsU0FBUyxNQUFNLEVBQUUsVUFBVSxPQUFPLDJCQUEyQixDQUFDOztFQUdqRCxTQUFNO0FBQ3ZCLFVBQU8sSUFBSSxzQ0FBc0MsS0FBSyxVQUFVLENBQUEifQ==
|