@seniorsistemas/angular-components 19.0.5 → 19.0.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/accordion/lib/accordion/accordion.component.d.ts +25 -0
- package/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.d.ts +60 -0
- package/alert/lib/alert/alert.component.d.ts +40 -0
- package/autocomplete/lib/autocomplete/autocomplete.component.d.ts +51 -0
- package/badge/lib/badge/badge.component.d.ts +20 -0
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +46 -1
- package/breadcrumb/lib/breadcrumb/breadcrumb.component.d.ts +12 -0
- package/button/lib/button/button.component.d.ts +101 -0
- package/calendar-mask/lib/calendar-mask/calendar-mask.directive.d.ts +24 -0
- package/card/lib/card/card.component.d.ts +18 -0
- package/chat/lib/chat/chat.component.d.ts +20 -2
- package/chat/lib/chat/components/chat-message/chat-message.component.d.ts +18 -2
- package/checkbox/lib/checkbox/checkbox.component.d.ts +23 -3
- package/checkbox-list/lib/checkbox-list/checkbox-list.component.d.ts +20 -0
- package/chips/lib/chips/chip-item/chip-item.component.d.ts +15 -0
- package/chips/lib/chips/chips/chips.component.d.ts +41 -0
- package/code-editor/lib/code-editor/code-editor.component.d.ts +40 -0
- package/collapse-link/lib/collapse-link/collapse-link.component.d.ts +18 -0
- package/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.d.ts +5 -0
- package/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.d.ts +19 -0
- package/content-generator/lib/content-generator/content-generator.component.d.ts +30 -0
- package/control-errors/lib/control-errors/control-errors.component.d.ts +36 -0
- package/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.d.ts +36 -0
- package/currency/lib/currency.service.d.ts +15 -2
- package/custom-fields/lib/custom-fields/custom-fields.component.d.ts +31 -0
- package/dialog/lib/src/dialog/dialog.component.d.ts +51 -0
- package/dialog/lib/src/dialog/services/dialog.service.d.ts +2 -2
- package/dialog/lib/src/dialog/services/internal-dialog.service.d.ts +1 -1
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +6 -5
- package/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.d.ts +5 -0
- package/dynamic-form/dynamic-form/configurations/structure/fieldset.d.ts +14 -0
- package/dynamic-form/dynamic-form/configurations/structure/row.d.ts +67 -0
- package/dynamic-form/dynamic-form/configurations/structure/section.d.ts +8 -0
- package/dynamic-form/dynamic-form/configurations/structure/structure.d.ts +19 -0
- package/dynamic-form/dynamic-form/dynamic-form.component.d.ts +21 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.d.ts +45 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.d.ts +59 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.d.ts +55 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.d.ts +35 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.d.ts +17 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.d.ts +23 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.d.ts +66 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.d.ts +15 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.d.ts +30 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.d.ts +47 -2
- package/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.d.ts +26 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.d.ts +18 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/field.d.ts +44 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.d.ts +112 -4
- package/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.d.ts +42 -3
- package/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.d.ts +48 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.d.ts +62 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.d.ts +34 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.d.ts +63 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.d.ts +47 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.d.ts +23 -0
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.d.ts +37 -1
- package/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.d.ts +65 -2
- package/dynamic-form/public-api.d.ts +1 -0
- package/editable-overlay/lib/editable-overlay/editable-overlay.directive.d.ts +16 -0
- package/empty-state/lib/empty-state/empty-state.component.d.ts +59 -0
- package/esm2022/accordion/lib/accordion/accordion.component.mjs +26 -1
- package/esm2022/accordion/lib/accordion/components/accordion-panel/accordion-panel.component.mjs +61 -1
- package/esm2022/alert/lib/alert/alert.component.mjs +41 -1
- package/esm2022/autocomplete/lib/autocomplete/autocomplete.component.mjs +52 -1
- package/esm2022/badge/lib/badge/badge.component.mjs +21 -1
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +47 -2
- package/esm2022/breadcrumb/lib/breadcrumb/breadcrumb.component.mjs +13 -1
- package/esm2022/button/lib/button/button.component.mjs +102 -1
- package/esm2022/calendar-mask/lib/calendar-mask/calendar-mask.directive.mjs +72 -47
- package/esm2022/card/lib/card/card.component.mjs +21 -6
- package/esm2022/chat/lib/chat/chat.component.mjs +23 -5
- package/esm2022/chat/lib/chat/components/chat-message/chat-message.component.mjs +20 -4
- package/esm2022/checkbox/lib/checkbox/checkbox.component.mjs +24 -4
- package/esm2022/checkbox-list/lib/checkbox-list/checkbox-list.component.mjs +22 -2
- package/esm2022/chips/lib/chips/chip-item/chip-item.component.mjs +17 -2
- package/esm2022/chips/lib/chips/chips/chips.component.mjs +42 -1
- package/esm2022/code-editor/lib/code-editor/code-editor.component.mjs +41 -1
- package/esm2022/collapse-link/lib/collapse-link/collapse-link.component.mjs +19 -1
- package/esm2022/common/lib/svg-factory/components/iassist-icon/iassist-icon.component.mjs +6 -1
- package/esm2022/confirm-dialog/lib/popup-confirm-dialog/popup-confirm-dialog.component.mjs +20 -1
- package/esm2022/content-generator/lib/content-generator/content-generator.component.mjs +31 -1
- package/esm2022/control-errors/lib/control-errors/control-errors.component.mjs +37 -1
- package/esm2022/country-phone-picker/lib/country-phone-picker/country-phone-picker.component.mjs +37 -1
- package/esm2022/currency/lib/currency.service.mjs +21 -8
- package/esm2022/custom-fields/lib/custom-fields/custom-fields.component.mjs +32 -1
- package/esm2022/dialog/lib/src/dialog/dialog.component.mjs +66 -11
- package/esm2022/dialog/lib/src/dialog/services/dialog.service.mjs +13 -10
- package/esm2022/dialog/lib/src/dialog/services/internal-dialog.service.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/components/lookup/models/lookup-api.model.mjs +2 -0
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/fieldset.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/row.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/section.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/configurations/structure/structure.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/dynamic-form.component.mjs +22 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/autocomplete-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/bignumber-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/blob-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/boolean-switch-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/button-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/calendar-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/checkbox-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/chips-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/content-generator-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/country-phone-picker-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/currency-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/field.mjs +1 -2
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/lookup-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/number-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/password-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/profile-picture.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/radio-button-field.mjs +6 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/select-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/slider-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/star-rating-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-area-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/configurations/fields/text-field.mjs +1 -1
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/text-area/text-area-field.component.mjs +3 -3
- package/esm2022/dynamic-form/public-api.mjs +2 -2
- package/esm2022/editable-overlay/lib/editable-overlay/editable-overlay.directive.mjs +17 -1
- package/esm2022/empty-state/lib/empty-state/empty-state.component.mjs +60 -1
- package/esm2022/fieldset/lib/fieldset/fieldset.component.mjs +25 -5
- package/esm2022/file-picker/lib/file-picker/file-picker.component.mjs +48 -1
- package/esm2022/gantt/lib/gantt/gantt.component.mjs +32 -1
- package/esm2022/global-search/lib/global-search/global-search.component.mjs +30 -1
- package/esm2022/grid-menu/lib/grid-menu/grid-menu.component.mjs +40 -1
- package/esm2022/help-popover/lib/help-popover/help-popover.directive.mjs +83 -27
- package/esm2022/image-cropper/lib/image-cropper/image-cropper.component.mjs +40 -3
- package/esm2022/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.mjs +18 -2
- package/esm2022/info-sign/lib/info-sign/info-sign.directive.mjs +33 -4
- package/esm2022/inline-edit/lib/inline-edit/inline-edit.component.mjs +16 -1
- package/esm2022/insights/lib/insights/insights.component.mjs +23 -1
- package/esm2022/interactive-content/lib/interactive-content/interactive-content.directive.mjs +21 -1
- package/esm2022/kanban/lib/kanban/kanban.component.mjs +35 -17
- package/esm2022/label-value/lib/label-value/label-value.component.mjs +14 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.component.mjs +37 -1
- package/esm2022/loading-state/lib/loading-state/loading-state.directive.mjs +24 -1
- package/esm2022/locale/lib/locale/locale.service.mjs +8 -1
- package/esm2022/localized-number-input/lib/localized-number-input/localized-number-input.directive.mjs +17 -1
- package/esm2022/mask/lib/mask/mask-formatter.pipe.mjs +13 -1
- package/esm2022/mouse-events/lib/mouse-events/double-click.directive.mjs +16 -3
- package/esm2022/mouse-events/lib/mouse-events/long-press.directive.mjs +24 -10
- package/esm2022/navigation-button/lib/navigation-button/navigation-button.component.mjs +20 -1
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +32 -12
- package/esm2022/numeric/lib/numeric.pipe.mjs +16 -1
- package/esm2022/numeric/lib/numeric.service.mjs +21 -1
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +9 -6
- package/esm2022/object-card/lib/object-card/object-card.component.mjs +24 -1
- package/esm2022/optional-fields/editor/editor-field.mjs +1 -1
- package/esm2022/paginator/lib/paginator/paginator.component.mjs +20 -1
- package/esm2022/panel/lib/panel/panel.component.mjs +44 -23
- package/esm2022/password-strength/lib/password-strength/password-strength.component.mjs +25 -1
- package/esm2022/password-strength/lib/password-strength/password-strength.directive.mjs +54 -1
- package/esm2022/picklist/lib/picklist/picklist.component.mjs +33 -2
- package/esm2022/pin-code-field/lib/pin-code-field/pin-code-field.component.mjs +29 -34
- package/esm2022/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.mjs +86 -2
- package/esm2022/progressbar/lib/progressbar/progressbar.component.mjs +53 -3
- package/esm2022/radio-button/lib/radio-button/radio-button.component.mjs +28 -1
- package/esm2022/radio-button/lib/radio-button-group/radio-button-group.component.mjs +27 -1
- package/esm2022/rating-scale/lib/rating-scale/rating-scale.component.mjs +39 -7
- package/esm2022/select/lib/select/select.component.mjs +35 -1
- package/esm2022/select-button/lib/select-button/select-button.component.mjs +35 -1
- package/esm2022/shared/lib/shared/border-button/border-button.component.mjs +11 -3
- package/esm2022/sidebar/lib/sidebar/sidebar.component.mjs +54 -1
- package/esm2022/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.mjs +76 -36
- package/esm2022/slider/lib/slider/slider.component.mjs +90 -9
- package/esm2022/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.mjs +25 -4
- package/esm2022/split-button/lib/split-button/split-button.component.mjs +24 -2
- package/esm2022/star-rating/star-rating/star-rating.component.mjs +17 -1
- package/esm2022/stats-card/lib/stats-card/stats-card.component.mjs +32 -10
- package/esm2022/stepper/lib/stepper/stepper.component.mjs +20 -1
- package/esm2022/structure/lib/structure/footer.component.mjs +11 -1
- package/esm2022/switch/lib/switch/switch.component.mjs +22 -2
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +16 -1
- package/esm2022/table-header/lib/table-header/table-header-checkbox.component.mjs +29 -3
- package/esm2022/tabs/lib/tab-item/tab-item.component.mjs +33 -2
- package/esm2022/tabs/lib/tabs/tabs.component.mjs +35 -3
- package/esm2022/template/lib/template/template.directive.mjs +14 -2
- package/esm2022/text-area/lib/text-area/text-area.component.mjs +28 -1
- package/esm2022/thumbnail/lib/thumbnail/thumbnail.component.mjs +25 -1
- package/esm2022/thumbnails/lib/thumbnails/thumbnails.component.mjs +28 -3
- package/esm2022/tiered-menu/lib/tiered-menu/tiered-menu.directive.mjs +30 -1
- package/esm2022/tile/lib/tile/tile.component.mjs +26 -1
- package/esm2022/timeline/lib/timeline/timeline.component.mjs +26 -3
- package/esm2022/toast/lib/toast/toast.component.mjs +24 -4
- package/esm2022/token-list/lib/token-list/token-list.component.mjs +22 -1
- package/esm2022/tooltip/lib/tooltip/tooltip.directive.mjs +66 -1
- package/esm2022/topbar/lib/topbar/topbar.component.mjs +18 -1
- package/esm2022/tree/lib/tree/tree.component.mjs +28 -1
- package/esm2022/workspace-switch/lib/workspace-switch/workspace-switch.component.mjs +47 -1
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs +85 -0
- package/fesm2022/seniorsistemas-angular-components-accordion.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-alert.mjs +40 -0
- package/fesm2022/seniorsistemas-angular-components-alert.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs +51 -0
- package/fesm2022/seniorsistemas-angular-components-autocomplete.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-badge.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-badge.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +46 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs +12 -0
- package/fesm2022/seniorsistemas-angular-components-breadcrumb.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-button.mjs +101 -0
- package/fesm2022/seniorsistemas-angular-components-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs +71 -46
- package/fesm2022/seniorsistemas-angular-components-calendar-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-card.mjs +19 -4
- package/fesm2022/seniorsistemas-angular-components-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chat.mjs +39 -5
- package/fesm2022/seniorsistemas-angular-components-chat.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs +21 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs +23 -3
- package/fesm2022/seniorsistemas-angular-components-checkbox.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs +57 -1
- package/fesm2022/seniorsistemas-angular-components-chips.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs +40 -0
- package/fesm2022/seniorsistemas-angular-components-code-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs +18 -0
- package/fesm2022/seniorsistemas-angular-components-collapse-link.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-common.mjs +5 -0
- package/fesm2022/seniorsistemas-angular-components-common.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-confirm-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs +30 -0
- package/fesm2022/seniorsistemas-angular-components-content-generator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs +36 -0
- package/fesm2022/seniorsistemas-angular-components-control-errors.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs +36 -0
- package/fesm2022/seniorsistemas-angular-components-country-phone-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-currency.mjs +19 -6
- package/fesm2022/seniorsistemas-angular-components-currency.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs +31 -0
- package/fesm2022/seniorsistemas-angular-components-custom-fields.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs +74 -16
- package/fesm2022/seniorsistemas-angular-components-dialog.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +29 -4
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-editable-overlay.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs +59 -0
- package/fesm2022/seniorsistemas-angular-components-empty-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs +21 -1
- package/fesm2022/seniorsistemas-angular-components-fieldset.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs +47 -0
- package/fesm2022/seniorsistemas-angular-components-file-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs +31 -0
- package/fesm2022/seniorsistemas-angular-components-gantt.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs +29 -0
- package/fesm2022/seniorsistemas-angular-components-global-search.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs +39 -0
- package/fesm2022/seniorsistemas-angular-components-grid-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs +80 -24
- package/fesm2022/seniorsistemas-angular-components-help-popover.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs +38 -1
- package/fesm2022/seniorsistemas-angular-components-image-cropper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs +17 -1
- package/fesm2022/seniorsistemas-angular-components-infinite-scroll.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs +30 -1
- package/fesm2022/seniorsistemas-angular-components-info-sign.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +15 -0
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-insights.mjs +22 -0
- package/fesm2022/seniorsistemas-angular-components-insights.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-interactive-content.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs +29 -11
- package/fesm2022/seniorsistemas-angular-components-kanban.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs +13 -0
- package/fesm2022/seniorsistemas-angular-components-label-value.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs +59 -0
- package/fesm2022/seniorsistemas-angular-components-loading-state.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +7 -0
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-localized-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mask.mjs +12 -0
- package/fesm2022/seniorsistemas-angular-components-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs +35 -8
- package/fesm2022/seniorsistemas-angular-components-mouse-events.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-navigation-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +31 -11
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +8 -5
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs +35 -0
- package/fesm2022/seniorsistemas-angular-components-numeric.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs +23 -0
- package/fesm2022/seniorsistemas-angular-components-object-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-optional-fields-editor.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-paginator.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-panel.mjs +39 -18
- package/fesm2022/seniorsistemas-angular-components-panel.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs +77 -0
- package/fesm2022/seniorsistemas-angular-components-password-strength.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs +32 -1
- package/fesm2022/seniorsistemas-angular-components-picklist.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs +28 -33
- package/fesm2022/seniorsistemas-angular-components-pin-code-field.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs +85 -1
- package/fesm2022/seniorsistemas-angular-components-profile-picture-picker.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs +52 -2
- package/fesm2022/seniorsistemas-angular-components-progressbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs +53 -0
- package/fesm2022/seniorsistemas-angular-components-radio-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs +36 -4
- package/fesm2022/seniorsistemas-angular-components-rating-scale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs +34 -0
- package/fesm2022/seniorsistemas-angular-components-select-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-select.mjs +34 -0
- package/fesm2022/seniorsistemas-angular-components-select.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs +9 -1
- package/fesm2022/seniorsistemas-angular-components-shared.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs +53 -0
- package/fesm2022/seniorsistemas-angular-components-sidebar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs +71 -31
- package/fesm2022/seniorsistemas-angular-components-slide-in-bar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-slider.mjs +89 -8
- package/fesm2022/seniorsistemas-angular-components-slider.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs +24 -3
- package/fesm2022/seniorsistemas-angular-components-speech-recognition.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs +22 -0
- package/fesm2022/seniorsistemas-angular-components-split-button.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs +16 -0
- package/fesm2022/seniorsistemas-angular-components-star-rating.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs +30 -8
- package/fesm2022/seniorsistemas-angular-components-stats-card.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs +19 -0
- package/fesm2022/seniorsistemas-angular-components-stepper.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-structure.mjs +10 -0
- package/fesm2022/seniorsistemas-angular-components-structure.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-switch.mjs +20 -0
- package/fesm2022/seniorsistemas-angular-components-switch.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs +28 -2
- package/fesm2022/seniorsistemas-angular-components-table-header.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +15 -0
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs +65 -2
- package/fesm2022/seniorsistemas-angular-components-tabs.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs +13 -1
- package/fesm2022/seniorsistemas-angular-components-template.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs +27 -0
- package/fesm2022/seniorsistemas-angular-components-text-area.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs +24 -0
- package/fesm2022/seniorsistemas-angular-components-thumbnail.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs +26 -1
- package/fesm2022/seniorsistemas-angular-components-thumbnails.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs +29 -0
- package/fesm2022/seniorsistemas-angular-components-tiered-menu.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tile.mjs +25 -0
- package/fesm2022/seniorsistemas-angular-components-tile.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs +25 -2
- package/fesm2022/seniorsistemas-angular-components-timeline.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-toast.mjs +22 -2
- package/fesm2022/seniorsistemas-angular-components-toast.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs +21 -0
- package/fesm2022/seniorsistemas-angular-components-token-list.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs +65 -0
- package/fesm2022/seniorsistemas-angular-components-tooltip.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs +17 -0
- package/fesm2022/seniorsistemas-angular-components-topbar.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-tree.mjs +27 -0
- package/fesm2022/seniorsistemas-angular-components-tree.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs +46 -0
- package/fesm2022/seniorsistemas-angular-components-workspace-switch.mjs.map +1 -1
- package/fieldset/lib/fieldset/fieldset.component.d.ts +23 -3
- package/file-picker/lib/file-picker/file-picker.component.d.ts +47 -0
- package/gantt/lib/gantt/gantt.component.d.ts +31 -0
- package/global-search/lib/global-search/global-search.component.d.ts +29 -0
- package/grid-menu/lib/grid-menu/grid-menu.component.d.ts +39 -0
- package/help-popover/lib/help-popover/help-popover.directive.d.ts +67 -17
- package/image-cropper/lib/image-cropper/image-cropper.component.d.ts +38 -0
- package/infinite-scroll/lib/infinite-scroll/infinite-scroll.directive.d.ts +15 -0
- package/info-sign/lib/info-sign/info-sign.directive.d.ts +30 -1
- package/inline-edit/lib/inline-edit/inline-edit.component.d.ts +15 -0
- package/insights/lib/insights/insights.component.d.ts +22 -0
- package/interactive-content/lib/interactive-content/interactive-content.directive.d.ts +20 -0
- package/kanban/lib/kanban/kanban.component.d.ts +25 -5
- package/label-value/lib/label-value/label-value.component.d.ts +13 -0
- package/loading-state/lib/loading-state/loading-state.component.d.ts +36 -0
- package/loading-state/lib/loading-state/loading-state.directive.d.ts +23 -0
- package/locale/lib/locale/locale.service.d.ts +7 -0
- package/localized-number-input/lib/localized-number-input/localized-number-input.directive.d.ts +16 -0
- package/mask/lib/mask/mask-formatter.pipe.d.ts +12 -0
- package/mouse-events/lib/mouse-events/double-click.directive.d.ts +13 -0
- package/mouse-events/lib/mouse-events/long-press.directive.d.ts +16 -2
- package/navigation-button/lib/navigation-button/navigation-button.component.d.ts +19 -0
- package/number-input/lib/number-input/number-input.directive.d.ts +19 -1
- package/numeric/lib/numeric.pipe.d.ts +15 -0
- package/numeric/lib/numeric.service.d.ts +20 -0
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +5 -4
- package/object-card/lib/object-card/object-card.component.d.ts +23 -0
- package/optional-fields/editor/editor-field.d.ts +19 -0
- package/package.json +18 -18
- package/paginator/lib/paginator/paginator.component.d.ts +19 -0
- package/panel/lib/panel/panel.component.d.ts +24 -3
- package/password-strength/lib/password-strength/password-strength.component.d.ts +24 -0
- package/password-strength/lib/password-strength/password-strength.directive.d.ts +53 -0
- package/picklist/lib/picklist/picklist.component.d.ts +29 -0
- package/pin-code-field/lib/pin-code-field/pin-code-field.component.d.ts +28 -33
- package/profile-picture-picker/lib/profile-picture-picker/profile-picture-picker.component.d.ts +85 -1
- package/progressbar/lib/progressbar/progressbar.component.d.ts +50 -0
- package/radio-button/lib/radio-button/radio-button.component.d.ts +27 -0
- package/radio-button/lib/radio-button-group/radio-button-group.component.d.ts +26 -0
- package/rating-scale/lib/rating-scale/rating-scale.component.d.ts +30 -2
- package/select/lib/select/select.component.d.ts +34 -0
- package/select-button/lib/select-button/select-button.component.d.ts +34 -0
- package/shared/lib/shared/border-button/border-button.component.d.ts +10 -2
- package/sidebar/lib/sidebar/sidebar.component.d.ts +53 -0
- package/slide-in-bar/lib/slide-in-bar/slide-in-bar.component.d.ts +53 -2
- package/slider/lib/slider/slider.component.d.ts +72 -0
- package/speech-recognition/lib/speech-recognition/speech-recognition/speech-recognition.component.d.ts +18 -0
- package/split-button/lib/split-button/split-button.component.d.ts +22 -0
- package/star-rating/star-rating/star-rating.component.d.ts +16 -0
- package/stats-card/lib/stats-card/stats-card.component.d.ts +28 -0
- package/stepper/lib/stepper/stepper.component.d.ts +19 -0
- package/structure/lib/structure/footer.component.d.ts +10 -0
- package/switch/lib/switch/switch.component.d.ts +20 -0
- package/table/lib/table/table-column/table-columns.component.d.ts +15 -0
- package/table-header/lib/table-header/table-header-checkbox.component.d.ts +18 -0
- package/tabs/lib/tab-item/tab-item.component.d.ts +31 -0
- package/tabs/lib/tabs/tabs.component.d.ts +28 -0
- package/template/lib/template/template.directive.d.ts +12 -0
- package/text-area/lib/text-area/text-area.component.d.ts +27 -0
- package/thumbnail/lib/thumbnail/thumbnail.component.d.ts +24 -0
- package/thumbnails/lib/thumbnails/thumbnails.component.d.ts +27 -2
- package/tiered-menu/lib/tiered-menu/tiered-menu.directive.d.ts +29 -0
- package/tile/lib/tile/tile.component.d.ts +25 -0
- package/timeline/lib/timeline/timeline.component.d.ts +24 -0
- package/toast/lib/toast/toast.component.d.ts +22 -2
- package/token-list/lib/token-list/token-list.component.d.ts +21 -0
- package/tooltip/lib/tooltip/tooltip.directive.d.ts +65 -0
- package/topbar/lib/topbar/topbar.component.d.ts +17 -0
- package/tree/lib/tree/tree.component.d.ts +27 -0
- package/workspace-switch/lib/workspace-switch/workspace-switch.component.d.ts +46 -0
|
@@ -8,21 +8,50 @@ import * as i2 from "@angular/cdk/drag-drop";
|
|
|
8
8
|
import * as i3 from "@angular/forms";
|
|
9
9
|
import * as i4 from "@seniorsistemas/angular-components/button";
|
|
10
10
|
import * as i5 from "@ngx-translate/core";
|
|
11
|
+
/**
|
|
12
|
+
* @description Componente de lista de dupla seleção (picklist) com suporte a
|
|
13
|
+
* arrastar e soltar, filtro, checkboxes e template customizável para cada item.
|
|
14
|
+
* Emite eventos ao mover itens entre as listas.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```html
|
|
18
|
+
* <s-picklist
|
|
19
|
+
* [itensToSelect]="itensDisponiveis"
|
|
20
|
+
* [selectedItens]="itensSelecionados"
|
|
21
|
+
* (selectedItensChange)="onSelecaoMudou($event)" />
|
|
22
|
+
* ```
|
|
23
|
+
*
|
|
24
|
+
* @category Data
|
|
25
|
+
*/
|
|
11
26
|
export class PicklistComponent {
|
|
12
27
|
cdr;
|
|
28
|
+
/** @description Lista de itens disponíveis para seleção (coluna esquerda). @default [] */
|
|
13
29
|
itensToSelect = [];
|
|
30
|
+
/** @description Lista de itens já selecionados (coluna direita). @default [] */
|
|
14
31
|
selectedItens = [];
|
|
32
|
+
/** @description Rótulo do título da lista de disponíveis. */
|
|
15
33
|
availableItensLabel;
|
|
34
|
+
/** @description Placeholder da busca na lista de disponíveis. */
|
|
16
35
|
availableItensPlaceholder;
|
|
36
|
+
/** @description Rótulo do botão de adicionar itens selecionados. */
|
|
17
37
|
addSelectedItensLabel;
|
|
38
|
+
/** @description Rótulo do botão de adicionar todos os itens. */
|
|
18
39
|
addAllItensLabel;
|
|
40
|
+
/** @description Rótulo do título da lista de selecionados. */
|
|
19
41
|
selectedItensLabel;
|
|
42
|
+
/** @description Placeholder da busca na lista de selecionados. */
|
|
20
43
|
selectedItensPlaceholder;
|
|
44
|
+
/** @description Rótulo do botão de remover itens selecionados. */
|
|
21
45
|
removeSelectedItemsLabel;
|
|
46
|
+
/** @description Rótulo do botão de remover todos os itens. */
|
|
22
47
|
removeAllItemsLabel;
|
|
48
|
+
/** @description Exibe checkbox nos itens das listas. @default false */
|
|
23
49
|
showCheckbox = false;
|
|
50
|
+
/** @description Propriedade usada para filtrar os itens das listas. @default '' */
|
|
24
51
|
filterBy = '';
|
|
52
|
+
/** @description Emitido quando a lista de selecionados muda. */
|
|
25
53
|
selectedItensChange = new EventEmitter();
|
|
54
|
+
/** @description Emitido quando a lista de disponíveis muda. */
|
|
26
55
|
itensToSelectChange = new EventEmitter();
|
|
27
56
|
availableItensFilter = '';
|
|
28
57
|
selectedItensFilter = '';
|
|
@@ -216,7 +245,9 @@ export class PicklistComponent {
|
|
|
216
245
|
this.cdr.detectChanges();
|
|
217
246
|
}
|
|
218
247
|
getAllElementsByListId(listId) {
|
|
219
|
-
return listId === this.selectedItensId
|
|
248
|
+
return listId === this.selectedItensId
|
|
249
|
+
? this.selectedItensFilterUtil.rawSelectedItens
|
|
250
|
+
: this.itensToSelectFilterUtil.rawItensToSelect;
|
|
220
251
|
}
|
|
221
252
|
getOppositiveId(listId) {
|
|
222
253
|
return listId === this.selectedItensId ? this.itensToSelectId : this.selectedItensId;
|
|
@@ -296,4 +327,4 @@ export const parseItensPickList = (array, disabledFn) => {
|
|
|
296
327
|
};
|
|
297
328
|
});
|
|
298
329
|
};
|
|
299
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFjaEYsTUFBTSxPQUFPLGlCQUFpQjtJQTJFTjtJQXpFYixhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxhQUFhLEdBQXdCLEVBQUUsQ0FBQztJQUd4QyxtQkFBbUIsQ0FBVTtJQUc3Qix5QkFBeUIsQ0FBVTtJQUduQyxxQkFBcUIsQ0FBVTtJQUcvQixnQkFBZ0IsQ0FBVTtJQUcxQixrQkFBa0IsQ0FBVTtJQUc1Qix3QkFBd0IsQ0FBVTtJQUdsQyx3QkFBd0IsQ0FBVTtJQUdsQyxtQkFBbUIsQ0FBVTtJQUc3QixZQUFZLEdBQUcsS0FBSyxDQUFDO0lBR3JCLFFBQVEsR0FBRyxFQUFFLENBQUM7SUFHZCxtQkFBbUIsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBR2hELG1CQUFtQixHQUFHLElBQUksWUFBWSxFQUFTLENBQUM7SUFFaEQsb0JBQW9CLEdBQUcsRUFBRSxDQUFDO0lBRTFCLG1CQUFtQixHQUFHLEVB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QUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waWNrbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3BpY2tsaXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9waWNrbGlzdC5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBQaWNrbGlzdENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcyB7XG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdDogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuczogUGlja0xpc3RJdGVtPGFueT5bXSA9IFtdO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGF2YWlsYWJsZUl0ZW5zUGxhY2Vob2xkZXI/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc1BsYWNlaG9sZGVyPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlQWxsSXRlbXNMYWJlbD86IHN0cmluZztcblxuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgZmlsdGVyQnkgPSAnJztcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0Q2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0ZpbHRlciA9ICcnO1xuXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBpdGVtVG9TZWxlY3RUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW1TZWxlY3RlZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdEZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogW10sXG4gICAgICAgIH07XG5cbiAgICBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbDoge1xuICAgICAgICByYXdTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgfSA9IHtcbiAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBbXSxcbiAgICAgICAgfTtcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zTWFwOiBTZXQ8SW50ZXJuYWxQaWNrbGlzdEl0ZW0+ID0gbmV3IFNldCgpO1xuICAgIHB1YmxpYyBpdGVuc1RvU2VsZWN0SWQgPSByYW5kb21IYXNoKCdpdGVuc1RvU2VsZWN0Jyk7XG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNJZCA9IHJhbmRvbUhhc2goJ3NlbGVjdGVkSXRlbnMnKTtcblxuICAgIHByaXZhdGUgX2xvZ0Vycm9yVGVtcGxhdGUgPSB0cnVlO1xuICAgIEBDb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZURpcmVjdGl2ZT4gfCBudWxsID0gbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikgeyB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcigoaXRlbSkgPT5cbiAgICAgICAgICAgICAgICBjb21wYXJlU3RyaW5ncyhpdGVtLmRhdGFbdGhpcy5maWx0ZXJCeV0sIHNlYXJjaFRlcm0pLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJTZWxlY3RlZEl0ZW5zKCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlcjtcbiAgICAgICAgc2VhcmNoVGVybSA9IHNlYXJjaFRlcm0udHJpbSgpO1xuICAgICAgICBpZiAoc2VhcmNoVGVybSkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMuZmlsdGVyKChpdGVtKSA9PlxuICAgICAgICAgICAgICAgIGNvbXBhcmVTdHJpbmdzKGl0ZW0uZGF0YVt0aGlzLmZpbHRlckJ5XSwgc2VhcmNoVGVybSksXG4gICAgICAgICAgICApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkcm9wKGV2ZW50OiBDZGtEcmFnRHJvcDxJbnRlcm5hbFBpY2tsaXN0SXRlbVtdPikge1xuICAgICAgICBjb25zdCBpc0RpZmZlcmVudENvbnRhaW5lciA9IGV2ZW50LmNvbnRhaW5lciAhPT0gZXZlbnQucHJldmlvdXNDb250YWluZXI7XG4gICAgICAgIGlmICghaXNEaWZmZXJlbnRDb250YWluZXIpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzUmVtb3ZlZEl0ZW5zID0gZXZlbnQucHJldmlvdXNDb250YWluZXIuaWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgICAgICBpZiAoaXNSZW1vdmVkSXRlbnMpIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmFkZCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdTdGFydChldmVudDogQ2RrRHJhZ0V2ZW50LCBkcmFnTGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZCh0aGlzLmdldE9wcG9zaXRpdmVJZChkcmFnTGlzdElkKSk7XG4gICAgICAgIGV2ZW50LnNvdXJjZS5kYXRhLnNlbGVjdGVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmFkZChldmVudC5zb3VyY2UuZGF0YSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKCh4KSA9PiAoeC5pbnZpc2libGUgPSB0cnVlKSk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBvbkRyYWdSZWxlYXNlKCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZm9yRWFjaCgoaXRlbSkgPT4gKGl0ZW0uaW52aXNpYmxlID0gZmFsc2UpKTtcbiAgICB9XG5cbiAgICBjaGVja0FsbEF2YWlsYWJsZUl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkLCB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCwgdGhpcy5pdGVuc1RvU2VsZWN0SWQpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZSh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgY2hlY2tlZCA9IHRhcmdldC5jaGVja2VkO1xuICAgICAgICB0aGlzLl9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZCwgdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsIHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCgpIHtcbiAgICAgICAgcmV0dXJuIGZpbHRlckVuYWJsZWQodGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5maWx0ZXJlZEl0ZW5zVG9TZWxlY3QpLmxlbmd0aCA9PT0gMDtcbiAgICB9XG5cbiAgICBnZXQgaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRCeUxpc3QodGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMpO1xuICAgIH1cblxuICAgIGdldCBjYW5BZGRJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLml0ZW5zVG9TZWxlY3QgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBnZXQgY2FuUmVtb3ZlSXRlbnMoKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEl0ZW5zIGFzIEludGVybmFsUGlja2xpc3RJdGVtW10pLmZpbHRlcigoeCkgPT4geD8uc2VsZWN0ZWQpLmxlbmd0aCA+IDA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdChsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKSB7XG4gICAgICAgIGNvbnN0IF9saXN0SXRlbnMgPSBmaWx0ZXJFbmFibGVkKGxpc3QpO1xuICAgICAgICBpZiAoIV9saXN0SXRlbnMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gX2xpc3RJdGVucy5ldmVyeSgoeCkgPT4geC5zZWxlY3RlZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UoY2hlY2tlZDogYm9vbGVhbiwgbGlzdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSwgbGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy51bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkID8gdGhpcy5pdGVuc1RvU2VsZWN0SWQgOiB0aGlzLnNlbGVjdGVkSXRlbnNJZCk7XG4gICAgICAgIGZpbHRlckVuYWJsZWQobGlzdCkuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaXRlbS5zZWxlY3RlZCA9IGNoZWNrZWQ7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGl0ZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgY2xlYXJMaXN0ID0gdGhpcy5nZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZCk7XG4gICAgICAgIGNsZWFyTGlzdC5mb3JFYWNoKCh4KSA9PiB7XG4gICAgICAgICAgICB4LnNlbGVjdGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuZGVsZXRlKHgpO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0QWxsRWxlbWVudHNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucyA6IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE9wcG9zaXRpdmVJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbGlzdElkID09PSB0aGlzLnNlbGVjdGVkSXRlbnNJZCA/IHRoaXMuaXRlbnNUb1NlbGVjdElkIDogdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBlbWl0RGF0YSgpIHtcbiAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0Q2hhbmdlLmVtaXQocGFyc2VWYWx1ZUVtaXQodGhpcy5pdGVuc1RvU2VsZWN0KSk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0NoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuc2VsZWN0ZWRJdGVucykpO1xuICAgIH1cbn1cblxuY29uc3Qgbm9ybWFsaXplU3RyaW5nID0gKHN0cjogc3RyaW5nKSA9PiB7XG4gICAgcmV0dXJuIHN0clxuICAgICAgICAubm9ybWFsaXplKCdORkQnKVxuICAgICAgICAucmVwbGFjZSgvW1xcdTAzMDAtXFx1MDM2Zl0vZywgJycpXG4gICAgICAgIC50b0xvd2VyQ2FzZSgpO1xufTtcblxuLyoqXG4gKiBDb21wYXJlcyB0d28gc3RyaW5ncyBieSBub3JtYWxpemluZyB0aGVtIHRvIGEgY2FzZS1pbnNlbnNpdGl2ZSBhbmQgYWNjZW50LWZyZWUgZm9ybSxcbiAqIGFuZCBjaGVja3MgaWYgdGhlIG1haW4gc3RyaW5nIGNvbnRhaW5zIHRoZSBzdWJzdHJpbmcuXG4gKlxuICogQHBhcmFtIG1haW5TdHJpbmcgLSBUaGUgc3RyaW5nIHRvIGJlIHNlYXJjaGVkLlxuICogQHBhcmFtIHN1YnN0cmluZyAtIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvciB3aXRoaW4gdGhlIG1haW4gc3RyaW5nLlxuICogQHJldHVybnMgQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgbm9ybWFsaXplZCBtYWluIHN0cmluZyBjb250YWlucyB0aGUgbm9ybWFsaXplZCBzdWJzdHJpbmcuXG4gKi9cblxuY29uc3QgY29tcGFyZVN0cmluZ3MgPSAobWFpblN0cmluZzogc3RyaW5nLCBzdWJzdHJpbmc6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBub3JtYWxpemVTdHJpbmcobWFpblN0cmluZykuaW5jbHVkZXMobm9ybWFsaXplU3RyaW5nKHN1YnN0cmluZykpO1xufTtcblxuY29uc3QgZmlsdGVyRW5hYmxlZCA9IChsaXN0OiBQaWNrTGlzdEl0ZW08YW55PltdIHwgU2V0PEludGVybmFsUGlja2xpc3RJdGVtPik6IEludGVybmFsUGlja2xpc3RJdGVtW10gPT4ge1xuICAgIGNvbnN0IF9saXN0ID0gbGlzdCBpbnN0YW5jZW9mIFNldCA/IEFycmF5LmZyb20obGlzdCkgOiBsaXN0O1xuICAgIHJldHVybiBfbGlzdC5maWx0ZXIoKHgpID0+ICF4LmRpc2FibGVkKTtcbn07XG5cbmNvbnN0IG1hcERhdGEgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSkgPT4ge1xuICAgIHJldHVybiBsaXN0Lm1hcCgoeCkgPT4geC5kYXRhKTtcbn07XG5cbmNvbnN0IHBhcnNlVmFsdWVFbWl0ID0gcGlwZShmaWx0ZXJFbmFibGVkLCBtYXBEYXRhKTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlSXRlbnNQaWNrTGlzdCA9IDxUPihhcnJheTogVFtdLCBkaXNhYmxlZEZuPzogKGl0ZW06IFQpID0+IGJvb2xlYW4pOiBQaWNrTGlzdEl0ZW08VD5bXSA9PiB7XG4gICAgcmV0dXJuIGFycmF5Lm1hcCgoeCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGF0YTogeCxcbiAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZEZuID8gZGlzYWJsZWRGbih4KSA6IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH0pO1xufTtcbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja2xpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3BpY2tsaXN0L3NyYy9saWIvcGlja2xpc3QvcGlja2xpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUdILFNBQVMsRUFDVCxlQUFlLEVBQ2YsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEdBSVQsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUU1QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7Ozs7QUFTaEY7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFNSCxNQUFNLE9BQU8saUJBQWlCO0lBeUZOO0lBeEZwQiwwRkFBMEY7SUFFbkYsYUFBYSxHQUF3QixFQUFFLENBQUM7SUFFL0MsZ0ZBQWdGO0lBRXpFLGFBQWEsR0FBd0IsRUFBRSxDQUFDO0lBRS9DLDZEQUE2RDtJQUV0RCxtQkFBbUIsQ0FBVTtJQUVwQyxpRUFBaUU7SUFFMUQseUJBQXlCLENBQVU7SUFFMUMsb0VBQW9FO0lBRTdELHFCQUFxQixDQUFVO0lBRXRDLGdFQUFnRTtJQUV6RCxnQkFBZ0IsQ0FBVTtJQUVqQyw4REFBOEQ7SUFFdkQsa0JBQWtCLENBQVU7SUFFbkMsa0VBQWtFO0lBRTNELHdCQUF3QixDQUFVO0lBRXpDLGtFQUFrRTtJQUUzRCx3QkFBd0IsQ0FBVTtJQUV6Qyw4REFBOEQ7SUFFdkQsbUJBQW1CLENBQVU7SUFFcEMsdUVBQXVFO0lBRWhFLFlB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Q0FBQztBQUVwRCxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxDQUFJLEtBQVUsRUFBRSxVQUFpQyxFQUFxQixFQUFFO0lBQ3RHLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1FBQ25CLE9BQU87WUFDSCxJQUFJLEVBQUUsQ0FBQztZQUNQLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztTQUMvQyxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDZGtEcmFnLCBDZGtEcmFnRHJvcCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9kcmFnLWRyb3AnO1xuaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRXZlbnRFbWl0dGVyLFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBPdXRwdXQsXG4gICAgUXVlcnlMaXN0LFxuICAgIFNpbXBsZUNoYW5nZXMsXG4gICAgVGVtcGxhdGVSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgcGlwZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUGlja0xpc3RJdGVtIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyByYW5kb21IYXNoIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy91dGlscyc7XG5pbXBvcnQgeyBUZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdGVtcGxhdGUnO1xuXG5pbnRlcmZhY2UgSW50ZXJuYWxQaWNrbGlzdEl0ZW08VCA9IGFueT4gZXh0ZW5kcyBQaWNrTGlzdEl0ZW08VD4ge1xuICAgIGludmlzaWJsZT86IGJvb2xlYW47XG4gICAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG50eXBlIENka0RyYWdFdmVudCA9IHsgc291cmNlOiBDZGtEcmFnPEludGVybmFsUGlja2xpc3RJdGVtPGFueT4+IH07XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgbGlzdGEgZGUgZHVwbGEgc2VsZcOnw6NvIChwaWNrbGlzdCkgY29tIHN1cG9ydGUgYVxuICogYXJyYXN0YXIgZSBzb2x0YXIsIGZpbHRybywgY2hlY2tib3hlcyBlIHRlbXBsYXRlIGN1c3RvbWl6w6F2ZWwgcGFyYSBjYWRhIGl0ZW0uXG4gKiBFbWl0ZSBldmVudG9zIGFvIG1vdmVyIGl0ZW5zIGVudHJlIGFzIGxpc3Rhcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPHMtcGlja2xpc3RcbiAqICAgW2l0ZW5zVG9TZWxlY3RdPVwiaXRlbnNEaXNwb25pdmVpc1wiXG4gKiAgIFtzZWxlY3RlZEl0ZW5zXT1cIml0ZW5zU2VsZWNpb25hZG9zXCJcbiAqICAgKHNlbGVjdGVkSXRlbnNDaGFuZ2UpPVwib25TZWxlY2FvTXVkb3UoJGV2ZW50KVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgRGF0YVxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ3MtcGlja2xpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9waWNrbGlzdC5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vcGlja2xpc3QuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgUGlja2xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkNoYW5nZXMge1xuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgZGlzcG9uw612ZWlzIHBhcmEgc2VsZcOnw6NvIChjb2x1bmEgZXNxdWVyZGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgaXRlbnMgasOhIHNlbGVjaW9uYWRvcyAoY29sdW5hIGRpcmVpdGEpLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnM6IFBpY2tMaXN0SXRlbTxhbnk+W10gPSBbXTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyB0w610dWxvIGRhIGxpc3RhIGRlIGRpc3BvbsOtdmVpcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhdmFpbGFibGVJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQbGFjZWhvbGRlciBkYSBidXNjYSBuYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgYWRpY2lvbmFyIGl0ZW5zIHNlbGVjaW9uYWRvcy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRTZWxlY3RlZEl0ZW5zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIFLDs3R1bG8gZG8gYm90w6NvIGRlIGFkaWNpb25hciB0b2RvcyBvcyBpdGVucy4gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBhZGRBbGxJdGVuc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIHTDrXR1bG8gZGEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNMYWJlbD86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUGxhY2Vob2xkZXIgZGEgYnVzY2EgbmEgbGlzdGEgZGUgc2VsZWNpb25hZG9zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlcj86IHN0cmluZztcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gUsOzdHVsbyBkbyBib3TDo28gZGUgcmVtb3ZlciBpdGVucyBzZWxlY2lvbmFkb3MuICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcmVtb3ZlU2VsZWN0ZWRJdGVtc0xhYmVsPzogc3RyaW5nO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBSw7N0dWxvIGRvIGJvdMOjbyBkZSByZW1vdmVyIHRvZG9zIG9zIGl0ZW5zLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJlbW92ZUFsbEl0ZW1zTGFiZWw/OiBzdHJpbmc7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIEV4aWJlIGNoZWNrYm94IG5vcyBpdGVucyBkYXMgbGlzdGFzLiBAZGVmYXVsdCBmYWxzZSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHNob3dDaGVja2JveCA9IGZhbHNlO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBQcm9wcmllZGFkZSB1c2FkYSBwYXJhIGZpbHRyYXIgb3MgaXRlbnMgZGFzIGxpc3Rhcy4gQGRlZmF1bHQgJycgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBmaWx0ZXJCeSA9ICcnO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyBhIGxpc3RhIGRlIHNlbGVjaW9uYWRvcyBtdWRhLiAqL1xuICAgIEBPdXRwdXQoKVxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnlbXT4oKTtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gRW1pdGlkbyBxdWFuZG8gYSBsaXN0YSBkZSBkaXNwb27DrXZlaXMgbXVkYS4gKi9cbiAgICBAT3V0cHV0KClcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XG5cbiAgICBwdWJsaWMgYXZhaWxhYmxlSXRlbnNGaWx0ZXIgPSAnJztcblxuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zRmlsdGVyID0gJyc7XG5cbiAgICBwdWJsaWMgaXRlbVRvU2VsZWN0VGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIHB1YmxpYyBpdGVtU2VsZWN0ZWRUZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PiB8IG51bGwgPSBudWxsO1xuXG4gICAgcHVibGljIGl0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsOiB7XG4gICAgICAgIHJhd0l0ZW5zVG9TZWxlY3Q6IEludGVybmFsUGlja2xpc3RJdGVtW107XG4gICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICB9ID0ge1xuICAgICAgICByYXdJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICAgICAgZmlsdGVyZWRJdGVuc1RvU2VsZWN0OiBbXSxcbiAgICB9O1xuXG4gICAgc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWw6IHtcbiAgICAgICAgcmF3U2VsZWN0ZWRJdGVuczogSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXTtcbiAgICAgICAgZmlsdGVyZWRTZWxlY3RlZEl0ZW5zOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdO1xuICAgIH0gPSB7XG4gICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IFtdLFxuICAgICAgICBmaWx0ZXJlZFNlbGVjdGVkSXRlbnM6IFtdLFxuICAgIH07XG5cbiAgICBwdWJsaWMgc2VsZWN0ZWRJdGVuc01hcDogU2V0PEludGVybmFsUGlja2xpc3RJdGVtPiA9IG5ldyBTZXQoKTtcbiAgICBwdWJsaWMgaXRlbnNUb1NlbGVjdElkID0gcmFuZG9tSGFzaCgnaXRlbnNUb1NlbGVjdCcpO1xuICAgIHB1YmxpYyBzZWxlY3RlZEl0ZW5zSWQgPSByYW5kb21IYXNoKCdzZWxlY3RlZEl0ZW5zJyk7XG5cbiAgICBwcml2YXRlIF9sb2dFcnJvclRlbXBsYXRlID0gdHJ1ZTtcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlRGlyZWN0aXZlKVxuICAgIHByaXZhdGUgdGVtcGxhdGVzOiBRdWVyeUxpc3Q8VGVtcGxhdGVEaXJlY3RpdmU+IHwgbnVsbCA9IG51bGw7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUgPSB0aGlzLnRlbXBsYXRlcz8uZmluZCgoeCkgPT4geC50eXBlID09PSAnaXRlbS10by1zZWxlY3QnKT8udGVtcGxhdGUgPz8gbnVsbDtcbiAgICAgICAgdGhpcy5pdGVtU2VsZWN0ZWRUZW1wbGF0ZSA9IHRoaXMudGVtcGxhdGVzPy5maW5kKCh4KSA9PiB4LnR5cGUgPT09ICdzZWxlY3RlZC1pdGVtJyk/LnRlbXBsYXRlID8/IG51bGw7XG4gICAgICAgIGlmICh0aGlzLl9sb2dFcnJvclRlbXBsYXRlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVRvU2VsZWN0VGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnaXRlbS10by1zZWxlY3QnIGFkZCB0aGlzIHRlbXBsYXRlIHVzaW5nIHNUZW1wbGF0ZSBkaXJlY3RpdmUuYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXRoaXMuaXRlbVNlbGVjdGVkVGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBNaXNzaW5nIHRlbXBsYXRlIGZvciAnc2VsZWN0ZWQtaXRlbScgYWRkIHRoaXMgdGVtcGxhdGUgdXNpbmcgc1RlbXBsYXRlIGRpcmVjdGl2ZS5gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXNbJ2l0ZW5zVG9TZWxlY3QnXT8uZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwgPSB7XG4gICAgICAgICAgICAgICAgcmF3SXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgIGZpbHRlcmVkSXRlbnNUb1NlbGVjdDogdGhpcy5pdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChjaGFuZ2VzWydzZWxlY3RlZEl0ZW5zJ10/LmZpcnN0Q2hhbmdlKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsID0ge1xuICAgICAgICAgICAgICAgIGZpbHRlcmVkU2VsZWN0ZWRJdGVuczogdGhpcy5zZWxlY3RlZEl0ZW5zLFxuICAgICAgICAgICAgICAgIHJhd1NlbGVjdGVkSXRlbnM6IHRoaXMuc2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b2dnbGVTZWxlY3RlZChpbnRlcm5hbFBpY2tsaXN0SXRlbTogSW50ZXJuYWxQaWNrbGlzdEl0ZW0sIGNvbnRhaW5lckxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpbnRlcm5hbFBpY2tsaXN0SXRlbS5kaXNhYmxlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudW5zZWxlY3RlZEl0ZW5zQnlMaXN0SWQodGhpcy5nZXRPcHBvc2l0aXZlSWQoY29udGFpbmVyTGlzdElkKSk7XG4gICAgICAgIGludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkID0gIWludGVybmFsUGlja2xpc3RJdGVtLnNlbGVjdGVkO1xuICAgICAgICBpZiAoaW50ZXJuYWxQaWNrbGlzdEl0ZW0uc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaW50ZXJuYWxQaWNrbGlzdEl0ZW0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpbnRlcm5hbFBpY2tsaXN0SXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIHJlbW92ZShhbGwgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBpdGVucyA9IGZpbHRlckVuYWJsZWQoYWxsID8gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zIDogdGhpcy5zZWxlY3RlZEl0ZW5zTWFwKTtcbiAgICAgICAgaWYgKCFpdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpdGVucy5mb3JFYWNoKChpdGVtUmVtb3ZlKSA9PiB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3QucHVzaChpdGVtUmVtb3ZlKTtcbiAgICAgICAgICAgIGl0ZW1SZW1vdmUuc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoaXRlbVJlbW92ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnMuZmlsdGVyKCh4KSA9PiAhaXRlbnMuaW5jbHVkZXMoeCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLnJhd1NlbGVjdGVkSXRlbnMgPSB0aGlzLnNlbGVjdGVkSXRlbnM7XG4gICAgICAgIHRoaXMuZmlsdGVyU2VsZWN0ZWRJdGVucygpO1xuICAgICAgICB0aGlzLmZpbHRlckl0ZW5zVG9TZWxlY3QoKTtcbiAgICAgICAgdGhpcy5lbWl0RGF0YSgpO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgYWRkKGFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGl0ZW5zID0gZmlsdGVyRW5hYmxlZChhbGwgPyB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3QgOiB0aGlzLnNlbGVjdGVkSXRlbnNNYXApO1xuICAgICAgICBpZiAoIWl0ZW5zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGl0ZW5zLmZvckVhY2goKGl0ZW1SZW1vdmUpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVucy5wdXNoKGl0ZW1SZW1vdmUpO1xuICAgICAgICAgICAgaXRlbVJlbW92ZS5zZWxlY3RlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmRlbGV0ZShpdGVtUmVtb3ZlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdC5maWx0ZXIoKHgpID0+ICFpdGVucy5pbmNsdWRlcyh4KSk7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdDtcbiAgICAgICAgdGhpcy5maWx0ZXJTZWxlY3RlZEl0ZW5zKCk7XG4gICAgICAgIHRoaXMuZmlsdGVySXRlbnNUb1NlbGVjdCgpO1xuICAgICAgICB0aGlzLmVtaXREYXRhKCk7XG4gICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG5cbiAgICBmaWx0ZXJJdGVuc1RvU2VsZWN0KCkge1xuICAgICAgICBsZXQgc2VhcmNoVGVybSA9IHRoaXMuYXZhaWxhYmxlSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0ID0gdGhpcy5pdGVuc1RvU2VsZWN0RmlsdGVyVXRpbC5yYXdJdGVuc1RvU2VsZWN0LmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCA9IHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwucmF3SXRlbnNUb1NlbGVjdDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgZmlsdGVyU2VsZWN0ZWRJdGVucygpIHtcbiAgICAgICAgbGV0IHNlYXJjaFRlcm0gPSB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXI7XG4gICAgICAgIHNlYXJjaFRlcm0gPSBzZWFyY2hUZXJtLnRyaW0oKTtcbiAgICAgICAgaWYgKHNlYXJjaFRlcm0pIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwuZmlsdGVyZWRTZWxlY3RlZEl0ZW5zID0gdGhpcy5zZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5yYXdTZWxlY3RlZEl0ZW5zLmZpbHRlcihcbiAgICAgICAgICAgICAgICAoaXRlbSkgPT4gY29tcGFyZVN0cmluZ3MoaXRlbS5kYXRhW3RoaXMuZmlsdGVyQnldLCBzZWFyY2hUZXJtKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyA9IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVucztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRyb3AoZXZlbnQ6IENka0RyYWdEcm9wPEludGVybmFsUGlja2xpc3RJdGVtW10+KSB7XG4gICAgICAgIGNvbnN0IGlzRGlmZmVyZW50Q29udGFpbmVyID0gZXZlbnQuY29udGFpbmVyICE9PSBldmVudC5wcmV2aW91c0NvbnRhaW5lcjtcbiAgICAgICAgaWYgKCFpc0RpZmZlcmVudENvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgaXNSZW1vdmVkSXRlbnMgPSBldmVudC5wcmV2aW91c0NvbnRhaW5lci5pZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQ7XG4gICAgICAgIGlmIChpc1JlbW92ZWRJdGVucykge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWRkKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1N0YXJ0KGV2ZW50OiBDZGtEcmFnRXZlbnQsIGRyYWdMaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKHRoaXMuZ2V0T3Bwb3NpdGl2ZUlkKGRyYWdMaXN0SWQpKTtcbiAgICAgICAgZXZlbnQuc291cmNlLmRhdGEuc2VsZWN0ZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNNYXAuYWRkKGV2ZW50LnNvdXJjZS5kYXRhKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW5zTWFwLmZvckVhY2goKHgpID0+ICh4LmludmlzaWJsZSA9IHRydWUpKTtcbiAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgIH1cblxuICAgIG9uRHJhZ1JlbGVhc2UoKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5mb3JFYWNoKChpdGVtKSA9PiAoaXRlbS5pbnZpc2libGUgPSBmYWxzZSkpO1xuICAgIH1cblxuICAgIGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UodGFyZ2V0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWQgPSB0YXJnZXQuY2hlY2tlZDtcbiAgICAgICAgdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKFxuICAgICAgICAgICAgY2hlY2tlZCxcbiAgICAgICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgdGhpcy5pdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgY2hlY2tBbGxTZWxlY3RlZEl0ZW5zQ2hhbmdlKHRhcmdldDogSFRNTElucHV0RWxlbWVudCkge1xuICAgICAgICBjb25zdCBjaGVja2VkID0gdGFyZ2V0LmNoZWNrZWQ7XG4gICAgICAgIHRoaXMuX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShcbiAgICAgICAgICAgIGNoZWNrZWQsXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyxcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc0lkLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlU2VsZWN0ZWRJdGVuc0NoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucykubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBkaXNhYmxlSXRlbnNUb1NlbGVjdENoZWNrYm94KCkge1xuICAgICAgICByZXR1cm4gZmlsdGVyRW5hYmxlZCh0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLmZpbHRlcmVkSXRlbnNUb1NlbGVjdCkubGVuZ3RoID09PSAwO1xuICAgIH1cblxuICAgIGdldCBpdGVuc1RvU2VsZWN0QWxsU2VsZWN0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KHRoaXMuaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0KTtcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRJdGVuc0FsbFNlbGVjdGVkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY2hlY2tBbGxTZWxlY3RlZEJ5TGlzdCh0aGlzLnNlbGVjdGVkSXRlbnNGaWx0ZXJVdGlsLmZpbHRlcmVkU2VsZWN0ZWRJdGVucyk7XG4gICAgfVxuXG4gICAgZ2V0IGNhbkFkZEl0ZW5zKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXRlbnNUb1NlbGVjdCBhcyBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdKS5maWx0ZXIoKHgpID0+IHg/LnNlbGVjdGVkKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIGdldCBjYW5SZW1vdmVJdGVucygpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkSXRlbnMgYXMgSW50ZXJuYWxQaWNrbGlzdEl0ZW1bXSkuZmlsdGVyKCh4KSA9PiB4Py5zZWxlY3RlZCkubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jaGVja0FsbFNlbGVjdGVkQnlMaXN0KGxpc3Q6IEludGVybmFsUGlja2xpc3RJdGVtW10pIHtcbiAgICAgICAgY29uc3QgX2xpc3RJdGVucyA9IGZpbHRlckVuYWJsZWQobGlzdCk7XG4gICAgICAgIGlmICghX2xpc3RJdGVucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfbGlzdEl0ZW5zLmV2ZXJ5KCh4KSA9PiB4LnNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2NoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZShjaGVja2VkOiBib29sZWFuLCBsaXN0OiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdLCBsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLnVuc2VsZWN0ZWRJdGVuc0J5TGlzdElkKGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkKTtcbiAgICAgICAgZmlsdGVyRW5hYmxlZChsaXN0KS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBpdGVtLnNlbGVjdGVkID0gY2hlY2tlZDtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5hZGQoaXRlbSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bnNlbGVjdGVkSXRlbnNCeUxpc3RJZChsaXN0SWQ6IHN0cmluZykge1xuICAgICAgICBjb25zdCBjbGVhckxpc3QgPSB0aGlzLmdldEFsbEVsZW1lbnRzQnlMaXN0SWQobGlzdElkKTtcbiAgICAgICAgY2xlYXJMaXN0LmZvckVhY2goKHgpID0+IHtcbiAgICAgICAgICAgIHguc2VsZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVuc01hcC5kZWxldGUoeCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmNkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBbGxFbGVtZW50c0J5TGlzdElkKGxpc3RJZDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBsaXN0SWQgPT09IHRoaXMuc2VsZWN0ZWRJdGVuc0lkXG4gICAgICAgICAgICA/IHRoaXMuc2VsZWN0ZWRJdGVuc0ZpbHRlclV0aWwucmF3U2VsZWN0ZWRJdGVuc1xuICAgICAgICAgICAgOiB0aGlzLml0ZW5zVG9TZWxlY3RGaWx0ZXJVdGlsLnJhd0l0ZW5zVG9TZWxlY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPcHBvc2l0aXZlSWQobGlzdElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIGxpc3RJZCA9PT0gdGhpcy5zZWxlY3RlZEl0ZW5zSWQgPyB0aGlzLml0ZW5zVG9TZWxlY3RJZCA6IHRoaXMuc2VsZWN0ZWRJdGVuc0lkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZW1pdERhdGEoKSB7XG4gICAgICAgIHRoaXMuaXRlbnNUb1NlbGVjdENoYW5nZS5lbWl0KHBhcnNlVmFsdWVFbWl0KHRoaXMuaXRlbnNUb1NlbGVjdCkpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbnNDaGFuZ2UuZW1pdChwYXJzZVZhbHVlRW1pdCh0aGlzLnNlbGVjdGVkSXRlbnMpKTtcbiAgICB9XG59XG5cbmNvbnN0IG5vcm1hbGl6ZVN0cmluZyA9IChzdHI6IHN0cmluZykgPT4ge1xuICAgIHJldHVybiBzdHJcbiAgICAgICAgLm5vcm1hbGl6ZSgnTkZEJylcbiAgICAgICAgLnJlcGxhY2UoL1tcXHUwMzAwLVxcdTAzNmZdL2csICcnKVxuICAgICAgICAudG9Mb3dlckNhc2UoKTtcbn07XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHN0cmluZ3MgYnkgbm9ybWFsaXppbmcgdGhlbSB0byBhIGNhc2UtaW5zZW5zaXRpdmUgYW5kIGFjY2VudC1mcmVlIGZvcm0sXG4gKiBhbmQgY2hlY2tzIGlmIHRoZSBtYWluIHN0cmluZyBjb250YWlucyB0aGUgc3Vic3RyaW5nLlxuICpcbiAqIEBwYXJhbSBtYWluU3RyaW5nIC0gVGhlIHN0cmluZyB0byBiZSBzZWFyY2hlZC5cbiAqIEBwYXJhbSBzdWJzdHJpbmcgLSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBmb3Igd2l0aGluIHRoZSBtYWluIHN0cmluZy5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5vcm1hbGl6ZWQgbWFpbiBzdHJpbmcgY29udGFpbnMgdGhlIG5vcm1hbGl6ZWQgc3Vic3RyaW5nLlxuICovXG5cbmNvbnN0IGNvbXBhcmVTdHJpbmdzID0gKG1haW5TdHJpbmc6IHN0cmluZywgc3Vic3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgICByZXR1cm4gbm9ybWFsaXplU3RyaW5nKG1haW5TdHJpbmcpLmluY2x1ZGVzKG5vcm1hbGl6ZVN0cmluZyhzdWJzdHJpbmcpKTtcbn07XG5cbmNvbnN0IGZpbHRlckVuYWJsZWQgPSAobGlzdDogUGlja0xpc3RJdGVtPGFueT5bXSB8IFNldDxJbnRlcm5hbFBpY2tsaXN0SXRlbT4pOiBJbnRlcm5hbFBpY2tsaXN0SXRlbVtdID0+IHtcbiAgICBjb25zdCBfbGlzdCA9IGxpc3QgaW5zdGFuY2VvZiBTZXQgPyBBcnJheS5mcm9tKGxpc3QpIDogbGlzdDtcbiAgICByZXR1cm4gX2xpc3QuZmlsdGVyKCh4KSA9PiAheC5kaXNhYmxlZCk7XG59O1xuXG5jb25zdCBtYXBEYXRhID0gKGxpc3Q6IFBpY2tMaXN0SXRlbTxhbnk+W10pID0+IHtcbiAgICByZXR1cm4gbGlzdC5tYXAoKHgpID0+IHguZGF0YSk7XG59O1xuXG5jb25zdCBwYXJzZVZhbHVlRW1pdCA9IHBpcGUoZmlsdGVyRW5hYmxlZCwgbWFwRGF0YSk7XG5cbmV4cG9ydCBjb25zdCBwYXJzZUl0ZW5zUGlja0xpc3QgPSA8VD4oYXJyYXk6IFRbXSwgZGlzYWJsZWRGbj86IChpdGVtOiBUKSA9PiBib29sZWFuKTogUGlja0xpc3RJdGVtPFQ+W10gPT4ge1xuICAgIHJldHVybiBhcnJheS5tYXAoKHgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGE6IHgsXG4gICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWRGbiA/IGRpc2FibGVkRm4oeCkgOiBmYWxzZSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn07XG5cbiIsIjxuZy10ZW1wbGF0ZVxuICAgICNwcmV2aWV3UmVuZGVyXG4gICAgbGV0LWl0ZW5zPVwiaXRlbnNcIlxuICAgIGxldC10ZW1wbGF0ZT1cInRlbXBsYXRlXCJcbj5cbiAgICA8c2VjdGlvbiBjbGFzcz1cInBpY2tsaXN0LWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRlbXBsYXRlOyBjb250ZXh0OiB7IGl0ZW06IGl0ZW0uZGF0YSB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIH1cbiAgICA8L3NlY3Rpb24+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGVcbiAgICAjcGlja2xpc3RJdGVuc1JlbmRlclxuICAgIGxldC1pZD1cImlkXCJcbiAgICBsZXQtaXRlbnM9XCJpdGVuc1wiXG4gICAgbGV0LXRlbXBsYXRlPVwidGVtcGxhdGVcIlxuICAgIGxldC1saXN0Q29ubmVjdGVkVG89XCJsaXN0Q29ubmVjdGVkVG9cIlxuPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJwaWNrbGlzdC1pdGVtc1wiXG4gICAgICAgIGNka0Ryb3BMaXN0XG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtjZGtEcm9wTGlzdFNvcnRpbmdEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgW2Nka0Ryb3BMaXN0RGF0YV09XCJpdGVuc1wiXG4gICAgICAgIFtjZGtEcm9wTGlzdENvbm5lY3RlZFRvXT1cImxpc3RDb25uZWN0ZWRUb1wiXG4gICAgICAgIChjZGtEcm9wTGlzdERyb3BwZWQpPVwiZHJvcCgkZXZlbnQpXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGl0ZW0gb2YgaXRlbnM7IHRyYWNrICRpbmRleCkge1xuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNka0RyYWdcbiAgICAgICAgICAgICAgICBbY2RrRHJhZ0Rpc2FibGVkXT1cIml0ZW0uZGlzYWJsZWRcIlxuICAgICAgICAgICAgICAgIFtjZGtEcmFnRGF0YV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlU2VsZWN0ZWQoaXRlbSwgaWQpXCJcbiAgICAgICAgICAgICAgICAoY2RrRHJhZ1N0YXJ0ZWQpPVwib25EcmFnU3RhcnQoJGV2ZW50LCBpZClcIlxuICAgICAgICAgICAgICAgIChjZGtEcmFnUmVsZWFzZWQpPVwib25EcmFnUmVsZWFzZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInBpY2tsaXN0LWl0ZW1cIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1kaXNhYmxlZF09XCJpdGVtLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucGlja2xpc3QtaXRlbS1pbnZpc2libGVdPVwiaXRlbS5pbnZpc2libGVcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5waWNrbGlzdC1pdGVtLWFjdGl2ZV09XCJpdGVtLnNlbGVjdGVkXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dDaGVja2JveCkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImlucHV0LWNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiaXRlbS5zZWxlY3RlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXRlbS5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1jb250ZW50XCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0ZW1wbGF0ZTsgY29udGV4dDogeyBpdGVtOiBpdGVtLmRhdGEsIHNlbGVjdGVkOiBpdGVtLnNlbGVjdGVkLCBkaXNhYmxlZDogaXRlbS5kaXNhYmxlZCB9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqY2RrRHJhZ1ByZXZpZXc+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJwcmV2aWV3UmVuZGVyOyBjb250ZXh0OiB7IGl0ZW5zOiBzZWxlY3RlZEl0ZW5zTWFwLCB0ZW1wbGF0ZTogdGVtcGxhdGUgfVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZVxuICAgICNjaGVja2JveFRpdGxlUmVuZGVyXG4gICAgbGV0LWRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIGxldC1jaGVja2VkPVwiY2hlY2tlZFwiXG4gICAgbGV0LWNoYW5nZUZuPVwiY2hhbmdlRm5cIlxuPlxuICAgIEBpZiAoc2hvd0NoZWNrYm94KSB7XG4gICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgY2xhc3M9XCJpbnB1dC1jaGVja2JveFwiXG4gICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgIFtjaGVja2VkXT1cImNoZWNrZWRcIlxuICAgICAgICAgICAgKGNoYW5nZSk9XCJjaGFuZ2VGbigkZXZlbnQudGFyZ2V0KVwiXG4gICAgICAgIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cblxuPGRpdiBjbGFzcz1cInBpY2tsaXN0LWNvbnRhaW5lclwiPlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVJdGVuc1RvU2VsZWN0Q2hlY2tib3gsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IGl0ZW5zVG9TZWxlY3RBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlRm46IGNoZWNrQWxsQXZhaWxhYmxlSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGlja2xpc3QtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgYXZhaWxhYmxlSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLmF2YWlsYWJsZS1pdGVtcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQnkgJiYgc2hvd0NoZWNrYm94KSB7XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInBpY2tsaXN0LWZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrYm94VGl0bGVSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZUl0ZW5zVG9TZWxlY3RDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tlZDogaXRlbnNUb1NlbGVjdEFsbFNlbGVjdGVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VGbjogY2hlY2tBbGxBdmFpbGFibGVJdGVuc0NoYW5nZS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImF2YWlsYWJsZUl0ZW5zRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJJdGVuc1RvU2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJhdmFpbGFibGVJdGVuc1BsYWNlaG9sZGVyIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGlja2xpc3QtcGxhY2Vob2xkZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIHBpY2tsaXN0SXRlbnNSZW5kZXI7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBpdGVuc1RvU2VsZWN0SWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVuczogaXRlbnNUb1NlbGVjdEZpbHRlclV0aWwuZmlsdGVyZWRJdGVuc1RvU2VsZWN0LFxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGU6IGl0ZW1Ub1NlbGVjdFRlbXBsYXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGlzdENvbm5lY3RlZFRvOiBzZWxlY3RlZEl0ZW5zSWQsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRTZWxlY3RlZEl0ZW5zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5hZGQnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBwcmlvcml0eT1cInByaW1hcnlcIlxuICAgICAgICAgICAgICAgIHJpZ2h0SWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctcmlnaHRcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY2FuQWRkSXRlbnNcIlxuICAgICAgICAgICAgICAgIChjbGlja2VkKT1cImFkZCgpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICBbY2FyZXRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgICAgIDxzLWJ1dHRvblxuICAgICAgICAgICAgICAgIFtsYWJlbF09XCJhZGRBbGxJdGVuc0xhYmVsIHx8ICdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMuYWRkX2FsbCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwibGlua1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwiYWRkKHRydWUpXCJcbiAgICAgICAgICAgICAgICBbYXV4aWxpYXJ5XT1cImZhbHNlXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvcy1idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJwaWNrbGlzdC1pdGVtLWNvbnRhaW5lclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtYm94XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGlja2xpc3QtdGl0bGUtY29udGFpbmVyXCI+XG4gICAgICAgICAgICAgICAgQGlmICghZmlsdGVyQnkpIHtcbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja2JveFRpdGxlUmVuZGVyO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZVNlbGVjdGVkSXRlbnNDaGVja2JveCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZUZuOiBjaGVja0FsbFNlbGVjdGVkSXRlbnNDaGFuZ2UuYmluZCh0aGlzKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBpY2tsaXN0LXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgIHt7IHNlbGVjdGVkSXRlbnNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnNlbGVjdGVkLWl0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzPVwicGlja2xpc3QtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAqbmdJZj1cImZpbHRlckJ5ICYmIHNob3dDaGVja2JveFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tib3hUaXRsZVJlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHsgZGlzYWJsZWQ6IGRpc2FibGVTZWxlY3RlZEl0ZW5zQ2hlY2tib3gsIGNoZWNrZWQ6IHNlbGVjdGVkSXRlbnNBbGxTZWxlY3RlZCwgY2hhbmdlRm46IGNoZWNrQWxsU2VsZWN0ZWRJdGVuc0NoYW5nZS5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgICAgICAgICAgXCJcbiAgICAgICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgQGlmIChmaWx0ZXJCeSkge1xuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiaW5wdXQtc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwic2VsZWN0ZWRJdGVuc0ZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJmaWx0ZXJTZWxlY3RlZEl0ZW5zKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInNlbGVjdGVkSXRlbnNQbGFjZWhvbGRlciB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpY2tsaXN0LXBsYWNlaG9sZGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgICAgICAgcGlja2xpc3RJdGVuc1JlbmRlcjtcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHNlbGVjdGVkSXRlbnNJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW5zOiBzZWxlY3RlZEl0ZW5zRmlsdGVyVXRpbC5maWx0ZXJlZFNlbGVjdGVkSXRlbnMsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZTogaXRlbVNlbGVjdGVkVGVtcGxhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaXN0Q29ubmVjdGVkVG86IGl0ZW5zVG9TZWxlY3RJZCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJidXR0b25zLWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZVNlbGVjdGVkSXRlbXNMYWJlbCB8fCAncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnJlbW92ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIHByaW9yaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgaWNvbkNsYXNzPVwiZmEgZmEtZncgZmEtYXJyb3ctbGVmdFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjYW5SZW1vdmVJdGVuc1wiXG4gICAgICAgICAgICAgICAgW2F1eGlsaWFyeV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrZWQpPVwicmVtb3ZlKClcIlxuICAgICAgICAgICAgICAgIFtjYXJldF09XCJmYWxzZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICA8L3MtYnV0dG9uPlxuICAgICAgICAgICAgPHMtYnV0dG9uXG4gICAgICAgICAgICAgICAgW2xhYmVsXT1cInJlbW92ZUFsbEl0ZW1zTGFiZWwgfHwgJ3BsYXRmb3JtLmFuZ3VsYXJfY29tcG9uZW50cy5yZW1vdmVfYWxsJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgcHJpb3JpdHk9XCJsaW5rXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tlZCk9XCJyZW1vdmUodHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFthdXhpbGlhcnldPVwiZmFsc2VcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC9zLWJ1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -6,19 +6,18 @@ import * as i0 from "@angular/core";
|
|
|
6
6
|
import * as i1 from "@angular/common";
|
|
7
7
|
import * as i2 from "@ngx-translate/core";
|
|
8
8
|
/**
|
|
9
|
-
*
|
|
9
|
+
* @description Componente de entrada de código PIN/OTP com campos individuais para cada dígito.
|
|
10
|
+
* Implementa {@link ControlValueAccessor} para integração nativa com Reactive Forms
|
|
11
|
+
* e Template-driven Forms do Angular.
|
|
10
12
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* -
|
|
18
|
-
* -
|
|
19
|
-
* - Error state display via the `invalid` input
|
|
20
|
-
* - Full accessibility support (ARIA labels, semantic roles)
|
|
21
|
-
* - Signal-based state management
|
|
13
|
+
* Funcionalidades:
|
|
14
|
+
* - Campos separados e navegáveis para cada dígito do código
|
|
15
|
+
* - Comprimento configurável via input `length`
|
|
16
|
+
* - Suporte a entrada numérica ou alfanumérica
|
|
17
|
+
* - Navegação por teclado (setas, backspace)
|
|
18
|
+
* - Suporte a colar (paste) com truncamento automático ao tamanho definido
|
|
19
|
+
* - Estado de erro via input `invalid`
|
|
20
|
+
* - Acessibilidade completa com ARIA labels e roles semânticos
|
|
22
21
|
*
|
|
23
22
|
* @example
|
|
24
23
|
* ```html
|
|
@@ -28,46 +27,42 @@ import * as i2 from "@ngx-translate/core";
|
|
|
28
27
|
* [length]="6"
|
|
29
28
|
* [alphanumeric]="false"
|
|
30
29
|
* [invalid]="(form.get('code')?.invalid && form.get('code')?.dirty) || false"
|
|
31
|
-
* helpText="
|
|
30
|
+
* helpText="Digite seu código de 6 dígitos"
|
|
32
31
|
* (codeFilled)="onCodeFilled($event)">
|
|
33
32
|
* </s-pin-code-field>
|
|
34
33
|
* </form>
|
|
35
34
|
* ```
|
|
36
35
|
*
|
|
37
|
-
* @
|
|
38
|
-
* ```typescript
|
|
39
|
-
* form = this.fb.group({
|
|
40
|
-
* code: ['', [Validators.required]],
|
|
41
|
-
* });
|
|
42
|
-
* ```
|
|
36
|
+
* @category Inputs
|
|
43
37
|
*/
|
|
44
38
|
export class PinCodeFieldComponent {
|
|
45
39
|
static LAST_INDEX_OFFSET = 1;
|
|
46
40
|
static EMPTY_VALUE = '';
|
|
47
41
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
42
|
+
* @description Número de campos de entrada (comprimento do código PIN).
|
|
43
|
+
* Deve ser ao menos 1.
|
|
50
44
|
*
|
|
51
45
|
* @default 6
|
|
52
46
|
*/
|
|
53
47
|
length = input(6);
|
|
54
48
|
/**
|
|
55
|
-
*
|
|
56
|
-
*
|
|
49
|
+
* @description Permite entrada alfanumérica e de caracteres especiais.
|
|
50
|
+
* Quando `false`, aceita apenas dígitos numéricos (0–9).
|
|
57
51
|
*
|
|
58
52
|
* @default false
|
|
59
53
|
*/
|
|
60
54
|
alphanumeric = input(false);
|
|
61
55
|
/**
|
|
62
|
-
*
|
|
56
|
+
* @description Texto de ajuda exibido abaixo dos campos de entrada,
|
|
57
|
+
* fornecendo instruções adicionais ao usuário.
|
|
63
58
|
*
|
|
64
59
|
* @default ''
|
|
65
60
|
*/
|
|
66
61
|
helpText = input('');
|
|
67
62
|
/**
|
|
68
|
-
*
|
|
69
|
-
*
|
|
70
|
-
*
|
|
63
|
+
* @description Controla a visualização do estado de erro do componente.
|
|
64
|
+
* Quando `true`, exibe borda vermelha nos campos de entrada.
|
|
65
|
+
* Normalmente vinculado ao estado `invalid && dirty` do `FormControl`.
|
|
71
66
|
*
|
|
72
67
|
* @example
|
|
73
68
|
* ```html
|
|
@@ -77,15 +72,15 @@ export class PinCodeFieldComponent {
|
|
|
77
72
|
*/
|
|
78
73
|
invalid = input(false);
|
|
79
74
|
/**
|
|
80
|
-
*
|
|
81
|
-
*
|
|
75
|
+
* @description Controla o estado desabilitado do componente via two-way binding.
|
|
76
|
+
* Quando `true`, todos os campos ficam desabilitados e a interação do usuário é bloqueada.
|
|
82
77
|
*
|
|
83
78
|
* @default false
|
|
84
79
|
*/
|
|
85
80
|
disabled = model(false);
|
|
86
81
|
/**
|
|
87
|
-
*
|
|
88
|
-
*
|
|
82
|
+
* @description Emitido quando todos os campos do código PIN são preenchidos.
|
|
83
|
+
* Emite o código completo como string.
|
|
89
84
|
*
|
|
90
85
|
* @example
|
|
91
86
|
* ```html
|
|
@@ -94,8 +89,8 @@ export class PinCodeFieldComponent {
|
|
|
94
89
|
*/
|
|
95
90
|
codeFilled = output();
|
|
96
91
|
/**
|
|
97
|
-
* Signal
|
|
98
|
-
*
|
|
92
|
+
* @description Signal com os valores atuais de cada campo de entrada.
|
|
93
|
+
* O comprimento do array corresponde ao valor do input `length`.
|
|
99
94
|
*/
|
|
100
95
|
inputs = signal([]);
|
|
101
96
|
/**
|
|
@@ -456,4 +451,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
456
451
|
},
|
|
457
452
|
], template: "<div class=\"gap-xsmall flex flex-col\">\n <div\n class=\"flex gap-2\"\n role=\"group\"\n aria-label=\"PIN code input\"\n [attr.aria-labelledby]=\"helpText() ? 'pin-help-text' : null\"\n >\n @for (input of inputs(); let i = $index; track i) {\n <input\n #pinInput\n type=\"text\"\n class=\"h-12 w-12 rounded-xbig border text-center text-lg font-medium transition-all duration-200\"\n [ngClass]=\"{\n 'border-criticality-red focus:ring-criticality-red': hasError(),\n 'border-grayscale-30 focus:border-primary focus:ring-primary': !hasError(),\n 'cursor-not-allowed bg-grayscale-10 text-grayscale-60': disabled(),\n 'bg-grayscale-0 text-grayscale-100 focus:outline-none': !disabled(),\n }\"\n [value]=\"input\"\n [disabled]=\"disabled()\"\n [attr.maxlength]=\"1\"\n [attr.inputmode]=\"alphanumeric() ? 'text' : 'numeric'\"\n [attr.aria-label]=\"\n alphanumeric()\n ? ('platform.angular_components.pin_code_character_index_of_total'\n | translate: { index: i + 1, length: length() })\n : ('platform.angular_components.pin_code_digit_index_of_total'\n | translate: { index: i + 1, length: length() })\n \"\n [attr.aria-describedby]=\"helpText() ? 'pin-help-text' : null\"\n [attr.aria-required]=\"true\"\n autocomplete=\"off\"\n (input)=\"onInput(i, $event)\"\n (keydown)=\"onKeyDown(i, $event)\"\n (paste)=\"onPaste($event)\"\n (focus)=\"onFocus(i)\"\n (blur)=\"onBlur(i)\"\n />\n }\n </div>\n\n @if (helpText()) {\n <div\n id=\"pin-help-text\"\n class=\"mt-small text-sm text-grayscale-60\"\n >\n {{ helpText() }}\n </div>\n }\n</div>\n\n" }]
|
|
458
453
|
}], ctorParameters: () => [] });
|
|
459
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1DRztBQWNILE1BQU0sT0FBTyxxQkFBcUI7SUFDdEIsTUFBTSxDQUFVLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekI7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DOzs7O09BSUc7SUFDSSxRQUFRLEdBQUcsS0FBSyxDQUFD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VUFBVSxDQUFDLEdBQUcsRUFBRSxzQkFBc0IsQ0FBQzs0QkFDcEQsS0FBSyxFQUFFLElBQUk7eUJBQ2Q7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBmb3J3YXJkUmVmLFxuICAgIHZpZXdDaGlsZHJlbixcbiAgICBFbGVtZW50UmVmLFxuICAgIHNpZ25hbCxcbiAgICBpbnB1dCxcbiAgICBvdXRwdXQsXG4gICAgZWZmZWN0LFxuICAgIGNvbXB1dGVkLFxuICAgIG1vZGVsLFxuICAgIGluamVjdCxcbiAgICBEZXN0cm95UmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDb250cm9sVmFsdWVBY2Nlc3NvciwgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBUcmFuc2xhdGVNb2R1bGUgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLyoqXG4gKiBQaW4gQ29kZSBGaWVsZCBDb21wb25lbnRcbiAqXG4gKiBBIGZsZXhpYmxlLCBhY2Nlc3NpYmxlIFBJTiBjb2RlIGlucHV0IGNvbXBvbmVudCB0aGF0IGltcGxlbWVudHMge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfVxuICogZm9yIHNlYW1sZXNzIGludGVncmF0aW9uIHdpdGggQW5ndWxhciBSZWFjdGl2ZSBGb3JtcyBhbmQgVGVtcGxhdGUtZHJpdmVuIEZvcm1zLlxuICpcbiAqIEZlYXR1cmVzOlxuICogLSBNdWx0aXBsZSBpbnB1dCBmaWVsZHMgZm9yIFBJTi9PVFAgY29kZSBlbnRyeVxuICogLSBDb25maWd1cmFibGUgY29kZSBsZW5ndGggYW5kIGNoYXJhY3RlciB2YWxpZGF0aW9uXG4gKiAtIEtleWJvYXJkIG5hdmlnYXRpb24gKGFycm93IGtleXMsIGJhY2tzcGFjZSlcbiAqIC0gUGFzdGUgc3VwcG9ydCB3aXRoIGF1dG9tYXRpYyB0cnVuY2F0aW9uXG4gKiAtIEVycm9yIHN0YXRlIGRpc3BsYXkgdmlhIHRoZSBgaW52YWxpZGAgaW5wdXRcbiAqIC0gRnVsbCBhY2Nlc3NpYmlsaXR5IHN1cHBvcnQgKEFSSUEgbGFiZWxzLCBzZW1hbnRpYyByb2xlcylcbiAqIC0gU2lnbmFsLWJhc2VkIHN0YXRlIG1hbmFnZW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxzLXBpbi1jb2RlLWZpZWxkXG4gKiAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcbiAqICAgICBbYWxwaGFudW1lcmljXT1cImZhbHNlXCJcbiAqICAgICBbaW52YWxpZF09XCIoZm9ybS5nZXQoJ2NvZGUnKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnY29kZScpPy5kaXJ0eSkgfHwgZmFsc2VcIlxuICogICAgIGhlbHBUZXh0PVwiRW50ZXIgeW91ciA2LWRpZ2l0IGNvZGVcIlxuICogICAgIChjb2RlRmlsbGVkKT1cIm9uQ29kZUZpbGxlZCgkZXZlbnQpXCI+XG4gKiAgIDwvcy1waW4tY29kZS1maWVsZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBmb3JtID0gdGhpcy5mYi5ncm91cCh7XG4gKiAgIGNvZGU6IFsnJywgW1ZhbGlkYXRvcnMucmVxdWlyZWRdXSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAncy1waW4tY29kZS1maWVsZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3Bpbi1jb2RlLWZpZWxkLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtDb21tb25Nb2R1bGUsIFRyYW5zbGF0ZU1vZHVsZV0sXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUGluQ29kZUZpZWxkQ29tcG9uZW50KSxcbiAgICAgICAgICAgIG11bHRpOiB0cnVlLFxuICAgICAgICB9LFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFBpbkNvZGVGaWVsZENvbXBvbmVudCBpbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIHtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBMQVNUX0lOREVYX09GRlNFVCA9IDE7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRU1QVFlfVkFMVUUgPSAnJztcblxuICAgIC8qKlxuICAgICAqIE51bWJlciBvZiBpbnB1dCBmaWVsZHMgKFBJTiBjb2RlIGxlbmd0aCkuXG4gICAgICogTXVzdCBiZSBhdCBsZWFzdCAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEFsbG93cyBhbHBoYW51bWVyaWMgYW5kIHNwZWNpYWwgY2hhcmFjdGVycyBpbnB1dC5cbiAgICAgKiBXaGVuIGZhbHNlLCBvbmx5IG51bWVyaWMgaW5wdXQgKDAtOSkgaXMgYWNjZXB0ZWQuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBhbHBoYW51bWVyaWMgPSBpbnB1dChmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBIZWxwIHRleHQgZGlzcGxheWVkIGJlbG93IHRoZSBpbnB1dCBmaWVsZHMuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCAnJ1xuICAgICAqL1xuICAgIHB1YmxpYyBoZWxwVGV4dCA9IGlucHV0KCcnKTtcblxuICAgIC8qKlxuICAgICAqIENvbnRyb2xzIHRoZSBlcnJvciBzdGF0ZSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogV2hlbiB0cnVlLCBkaXNwbGF5cyByZWQgYm9yZGVyIG9uIGlucHV0IGZpZWxkcy5cbiAgICAgKiBUeXBpY2FsbHkgYm91bmQgdG8gRm9ybUNvbnRyb2wncyBpbnZhbGlkIGFuZCBkaXJ0eSBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIFR3by13YXkgYmluZGluZyBmb3IgdGhlIGRpc2FibGVkIHN0YXRlIG9mIHRoZSBjb21wb25lbnQuXG4gICAgICogRGlzYWJsZXMgYWxsIGlucHV0IGZpZWxkcyBhbmQgcHJldmVudHMgdXNlciBpbnRlcmFjdGlvbi5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGRpc2FibGVkID0gbW9kZWwoZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogRW1pdHRlZCB3aGVuIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBFbWl0cyB0aGUgY29tcGxldGUgUElOIGNvZGUgYXMgYSBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgdmFsdWVzIG9mIGVhY2ggaW5wdXQgZmllbGQuXG4gICAgICogQXJyYXkgbGVuZ3RoIG1hdGNoZXMgdGhlIGBsZW5ndGhgIGlucHV0IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbnB1dHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqIFNpZ25hbCB0cmFja2luZyB3aGV0aGVyIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdG91Y2hlZCBieSB0aGUgdXNlci5cbiAgICAgKiBTZXQgdG8gdHJ1ZSB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzIChibHVyIGV2ZW50KS5cbiAgICAgKi9cbiAgICBwdWJsaWMgdG91Y2hlZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyB3aGV0aGVyIGFsbCBQSU4gY29kZSBmaWVsZHMgYXJlIGZpbGxlZC5cbiAgICAgKiBUcnVlIG9ubHkgd2hlbiBldmVyeSBmaWVsZCBjb250YWlucyBhIG5vbi1lbXB0eSB2YWx1ZS5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wbGV0ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuZXZlcnkoKGlucHV0KSA9PiBpbnB1dCAhPT0gJycpKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBjb250YWluaW5nIHRoZSBjb21wbGV0ZSBQSU4gY29kZSBhcyBhIGpvaW5lZCBzdHJpbmcuXG4gICAgICogUmV0dXJucyBlbXB0eSBzdHJpbmcgaWYgbm8gaW5wdXRzIGFyZSBmaWxsZWQuXG4gICAgICovXG4gICAgcHVibGljIGN1cnJlbnRWYWx1ZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW5wdXRzKCkuam9pbignJykpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBjb21wb25lbnQgaG9zdCBoYXMgdGhlIG5nLWludmFsaWQgY2xhc3MgZnJvbSBGb3JtQ29udHJvbCB2YWxpZGF0b3JzLlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgaW52YWxpZCBzdGF0ZSBjaGFuZ2VzLlxuICAgICAqL1xuICAgIHByaXZhdGUgaGFzTmdJbnZhbGlkQ2xhc3MgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIGlmIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eS5cbiAgICAgKiBVcGRhdGVkIHJlYWN0aXZlbHkgd2hlbmV2ZXIgdGhlIGRpcnR5IHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc0NvbnRyb2xEaXJ0eSA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBDb21wdXRlZCBzaWduYWwgaW5kaWNhdGluZyBpZiB0aGUgY29tcG9uZW50IHNob3VsZCBzaG93IGVycm9yIHN0YXRlLlxuICAgICAqIFJldHVybnMgdHJ1ZSBpZjpcbiAgICAgKiAtIFRoZSBgaW52YWxpZGAgaW5wdXQgaXMgdHJ1ZSwgT1JcbiAgICAgKiAtIFRoZSBjb21wb25lbnQgaGFzIHRoZSBgbmctaW52YWxpZGAgY2xhc3MgQU5EIHRoZSBGb3JtQ29udHJvbCBpcyBkaXJ0eSAodG91Y2hlZC9tb2RpZmllZClcbiAgICAgKiBUaGlzIGVuc3VyZXMgZXJyb3JzIGFyZSBvbmx5IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIHRoZXkndmUgaW50ZXJhY3RlZCB3aXRoIHRoZSBmaWVsZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaGFzRXJyb3IgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmludmFsaWQoKSB8fCAodGhpcy5oYXNOZ0ludmFsaWRDbGFzcygpICYmIHRoaXMuaXNDb250cm9sRGlydHkoKSkpO1xuXG4gICAgLyoqXG4gICAgICogVmlld0NoaWxkcmVuIHJlZmVyZW5jZSB0byBhbGwgaW5wdXQgRE9NIGVsZW1lbnRzLlxuICAgICAqIFVzZWQgZm9yIERPTSBtYW5pcHVsYXRpb24gKGZvY3VzLCBzZWxlY3Rpb24pLlxuICAgICAqL1xuICAgIHB1YmxpYyBwaW5JbnB1dHMgPSB2aWV3Q2hpbGRyZW48RWxlbWVudFJlZj4oJ3BpbklucHV0Jyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgcHJpdmF0ZSBvbkNoYW5nZTogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQgPSAoKSA9PiB7fTtcbiAgICBwcml2YXRlIG9uVG91Y2hlZDogKCkgPT4gdm9pZCA9ICgpID0+IHt9O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdMZW5ndGggPSB0aGlzLmxlbmd0aCgpO1xuICAgICAgICAgICAgICAgIGlmIChuZXdMZW5ndGggPCAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybignUElOIGNvZGUgbGVuZ3RoIG11c3QgYmUgYXQgbGVhc3QgMScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0cygpLmxlbmd0aCAhPT0gbmV3TGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChBcnJheS5mcm9tKHsgbGVuZ3RoOiBuZXdMZW5ndGggfSwgKCkgPT4gJycpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuXG4gICAgICAgIC8vIE1vbml0b3IgbmctaW52YWxpZCBhbmQgbmctZGlydHkgY2xhc3NlcyBvbiB0aGUgaG9zdCBlbGVtZW50IGZvciByZWFjdGl2ZSBlcnJvciBzdGF0ZVxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQWNjZXNzIGlucHV0cyB0byBjcmVhdGUgZGVwZW5kZW5jeSBvbiBjaGFuZ2VzXG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmludmFsaWQoKTtcblxuICAgICAgICAgICAgICAgIC8vIFVzZSBzZXRUaW1lb3V0IHRvIGRlZmVyIHRoZSBjaGVjayB0byBuZXh0IHRpY2sgdG8gZW5zdXJlIEFuZ3VsYXIgaGFzIHVwZGF0ZWQgRE9NIGNsYXNzZXNcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGhhc05nSW52YWxpZCA9IGhvc3RFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucygnbmctaW52YWxpZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpc0RpcnR5ID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1kaXJ0eScpO1xuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFzTmdJbnZhbGlkQ2xhc3Muc2V0KGhhc05nSW52YWxpZCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaXNDb250cm9sRGlydHkuc2V0KGlzRGlydHkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgLy8gQ2xlYW51cCB0aW1lb3V0IG9uIGNvbXBvbmVudCBkZXN0cm95XG4gICAgICAgICAgICAgICAgdGhpcy5kZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGlucHV0IGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBWYWxpZGF0ZXMgY2hhcmFjdGVyIGlucHV0LCBwcmV2ZW50cyBtdWx0aXBsZSBjaGFyYWN0ZXJzIHBlciBmaWVsZCxcbiAgICAgKiBhdXRvLWFkdmFuY2VzIHRvIG5leHQgZmllbGQgd2hlbiBjaGFyYWN0ZXIgaXMgZW50ZXJlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgaW5wdXQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25JbnB1dChpbmRleDogbnVtYmVyLCBldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50O1xuICAgICAgICBjb25zdCB2YWx1ZSA9IHRhcmdldC52YWx1ZTtcblxuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID4gMSB8fCAodmFsdWUgJiYgIXRoaXMuaXNWYWxpZENoYXJhY3Rlcih2YWx1ZSkpKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFySW5wdXQodGFyZ2V0KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICYmIGluZGV4IDwgdGhpcy5sZW5ndGgoKSAtIDEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMga2V5Ym9hcmQgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBTdXBwb3J0cyBhcnJvdyBuYXZpZ2F0aW9uIChsZWZ0L3JpZ2h0KSBhbmQgYmFja3NwYWNlIGtleS5cbiAgICAgKlxuICAgICAqIEtleWJvYXJkIGJlaGF2aW9yOlxuICAgICAqIC0gQXJyb3dSaWdodDogTW92ZSBmb2N1cyB0byBuZXh0IGZpZWxkXG4gICAgICogLSBBcnJvd0xlZnQ6IE1vdmUgZm9jdXMgdG8gcHJldmlvdXMgZmllbGRcbiAgICAgKiAtIEJhY2tzcGFjZTogQ2xlYXIgY3VycmVudCBvciBwcmV2aW91cyBmaWVsZCBhbmQgYWRqdXN0IGZvY3VzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGtleWJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uS2V5RG93bihpbmRleDogbnVtYmVyLCBldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2V5ID0gZXZlbnQua2V5O1xuXG4gICAgICAgIHN3aXRjaCAoa2V5KSB7XG4gICAgICAgICAgICBjYXNlICdBcnJvd1JpZ2h0JzpcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdBcnJvd0xlZnQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnQmFja3NwYWNlJzpcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQmFja3NwYWNlKGluZGV4KTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgcGFzdGUgKGNsaXBib2FyZCkgZXZlbnRzIG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQsIGZpbHRlcnMgYnkgY2hhcmFjdGVyIHR5cGUsXG4gICAgICogYW5kIGF1dG9tYXRpY2FsbHkgdHJ1bmNhdGVzIHRvIG1hdGNoIGZpZWxkIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEJlaGF2aW9yOlxuICAgICAqIC0gRmlsdGVycyBjaGFyYWN0ZXJzIGJhc2VkIG9uIGBhbHBoYW51bWVyaWNgIHNldHRpbmdcbiAgICAgKiAtIFRydW5jYXRlcyB0byBtYXhpbXVtIGZpZWxkIGNvdW50XG4gICAgICogLSBGaWxscyBhdmFpbGFibGUgZmllbGRzIHdpdGggcGFzdGVkIGNvbnRlbnRcbiAgICAgKiAtIEVtaXRzIGNvZGVGaWxsZWQgZXZlbnQgaWYgYWxsIGZpZWxkcyBhcmUgZmlsbGVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUgY2xpcGJvYXJkIGV2ZW50XG4gICAgICovXG4gICAgcHVibGljIG9uUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGNvbnN0IHZhbGlkQ2hhcnMgPSB0aGlzLmV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQpO1xuXG4gICAgICAgIGlmICh2YWxpZENoYXJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsbGVkSW5wdXRzID0gWy4uLnZhbGlkQ2hhcnMsIC4uLkFycmF5KHRoaXMubGVuZ3RoKCkgLSB2YWxpZENoYXJzLmxlbmd0aCkuZmlsbCgnJyldO1xuXG4gICAgICAgIHRoaXMuaW5wdXRzLnNldChmaWxsZWRJbnB1dHMpO1xuICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7XG5cbiAgICAgICAgLy8gRm9jdXMgb24gdGhlIGZpcnN0IGVtcHR5IGlucHV0IG9yIHRoZSBsYXN0IGZpbGxlZCBpbnB1dCBpZiBhbGwgYXJlIGZpbGxlZFxuICAgICAgICBjb25zdCBmaXJzdEVtcHR5SW5kZXggPSB2YWxpZENoYXJzLmxlbmd0aCA8IHRoaXMubGVuZ3RoKCkgPyB2YWxpZENoYXJzLmxlbmd0aCA6IHZhbGlkQ2hhcnMubGVuZ3RoIC0gMTtcbiAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGZpcnN0RW1wdHlJbmRleCk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDb21wbGV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvZGVGaWxsZWQuZW1pdCh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgZm9jdXMgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFNlbGVjdHMgYWxsIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIHdoZW4gZm9jdXNlZC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwdWJsaWMgb25Gb2N1cyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5waW5JbnB1dHMoKVtpbmRleF07XG4gICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5zZWxlY3QoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgYmx1ciBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogTWFya3MgdGhlIGNvbXBvbmVudCBhcyB0b3VjaGVkIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICogQWxzbyBub3RpZmllcyB0aGUgcmVnaXN0ZXJlZCBvblRvdWNoZWQgY2FsbGJhY2sgZm9yIEZvcm1Db250cm9sIGludGVncmF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkJsdXIoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICAvLyBPbmx5IG1hcmsgYXMgdG91Y2hlZCB3aGVuIHRoZSBMQVNUIGlucHV0IGxvc2VzIGZvY3VzXG4gICAgICAgIGlmIChpbmRleCA9PT0gdGhpcy5sZW5ndGgoKSAtIFBpbkNvZGVGaWVsZENvbXBvbmVudC5MQVNUX0lOREVYX09GRlNFVCkge1xuICAgICAgICAgICAgdGhpcy50b3VjaGVkLnNldCh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaGVkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIGlucHV0IHZhbHVlIGF0IHNwZWNpZmllZCBpbmRleCBhbmQgYWRqdXN0cyBmb2N1cyBhY2NvcmRpbmdseS5cbiAgICAgKiBJZiBjdXJyZW50IGZpZWxkIGlzIGVtcHR5LCBtb3ZlcyB0byBwcmV2aW91cyBmaWVsZCBhbmQgY2xlYXJzIGl0LlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYW5kbGVCYWNrc3BhY2UoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcblxuICAgICAgICAvLyBJZiBjdXJyZW50IGlucHV0IGhhcyB2YWx1ZSwgY2xlYXIgaXRcbiAgICAgICAgaWYgKGN1cnJlbnRJbnB1dHNbaW5kZXhdKSB7XG4gICAgICAgICAgICB0aGlzLnNldElucHV0QXRJbmRleChpbmRleCwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgY2xlYXIgcHJldmlvdXMgaW5wdXQgYW5kIGZvY3VzIGl0XG4gICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4IC0gMSwgUGluQ29kZUZpZWxkQ29tcG9uZW50LkVNUFRZX1ZBTFVFKTtcbiAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogU2V0cyB0aGUgdmFsdWUgYXQgYSBzcGVjaWZpYyBpbnB1dCBmaWVsZCBpbmRleCBhbmQgdXBkYXRlcyB0aGUgZm9ybSB2YWx1ZS5cbiAgICAgKiBVcGRhdGVzIHRoZSBzaWduYWwgYW5kIHRyaWdnZXJzIHRoZSBjaGFuZ2UgZGV0ZWN0aW9uIHZpYSBvbkNoYW5nZSBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBzZXQgaW4gdGhlIGZpZWxkXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJbnB1dEF0SW5kZXgoaW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBjdXJyZW50SW5wdXRzID0gdGhpcy5pbnB1dHMoKTtcbiAgICAgICAgY3VycmVudElucHV0c1tpbmRleF0gPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KFsuLi5jdXJyZW50SW5wdXRzXSk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBGb2N1c2VzIG9uIGFuZCBzZWxlY3RzIHRleHQgaW4gdGhlIGlucHV0IGZpZWxkIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguXG4gICAgICogVXNlcyBxdWV1ZU1pY3JvdGFzayB0byBlbnN1cmUgRE9NIGlzIHVwZGF0ZWQgYmVmb3JlIGZvY3VzaW5nLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHJpdmF0ZSBmb2N1c0FuZFNlbGVjdElucHV0KGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgICAgIGlmIChpbnB1dCkge1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQuXG4gICAgICogVXNlZCBmb3IgaW5wdXQgdmFsaWRhdGlvbiB0byByZWplY3QgaW52YWxpZCBjaGFyYWN0ZXJzLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gdGFyZ2V0IC0gVGhlIEhUTUwgaW5wdXQgZWxlbWVudCB0byBjbGVhclxuICAgICAqL1xuICAgIHByaXZhdGUgY2xlYXJJbnB1dCh0YXJnZXQ6IEhUTUxJbnB1dEVsZW1lbnQpOiB2b2lkIHtcbiAgICAgICAgdGFyZ2V0LnZhbHVlID0gJyc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogRXh0cmFjdHMgdmFsaWQgY2hhcmFjdGVycyBmcm9tIHBhc3RlZCBjb250ZW50LlxuICAgICAqIEZpbHRlcnMgYmFzZWQgb24gYWxwaGFudW1lcmljIHNldHRpbmcgYW5kIGxpbWl0cyB0byBjb21wb25lbnQncyBsZW5ndGguXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBjbGlwYm9hcmQgZXZlbnRcbiAgICAgKiBAcmV0dXJucyBBcnJheSBvZiB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gdGhlIHBhc3RlZCBjb250ZW50XG4gICAgICovXG4gICAgcHJpdmF0ZSBleHRyYWN0VmFsaWRDaGFyYWN0ZXJzRnJvbVBhc3RlKGV2ZW50OiBDbGlwYm9hcmRFdmVudCk6IHN0cmluZ1tdIHtcbiAgICAgICAgY29uc3QgcGFzdGVkVGV4dCA9IChldmVudC5jbGlwYm9hcmREYXRhPy5nZXREYXRhKCd0ZXh0JykgfHwgJycpLnRyaW0oKTtcbiAgICAgICAgcmV0dXJuIHBhc3RlZFRleHRcbiAgICAgICAgICAgIC5zcGxpdCgnJylcbiAgICAgICAgICAgIC5maWx0ZXIoKGNoYXIpID0+IHRoaXMuaXNWYWxpZENoYXJhY3RlcihjaGFyKSlcbiAgICAgICAgICAgIC5zbGljZSgwLCB0aGlzLmxlbmd0aCgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBWYWxpZGF0ZXMgaWYgYSBjaGFyYWN0ZXIgaXMgYWNjZXB0YWJsZSBiYXNlZCBvbiBjb21wb25lbnQgY29uZmlndXJhdGlvbi5cbiAgICAgKiBGb3IgbnVtZXJpYyBtb2RlLCBhY2NlcHRzIG9ubHkgZGlnaXRzIDAtOS5cbiAgICAgKiBGb3IgYWxwaGFudW1lcmljIG1vZGUsIGFjY2VwdHMgYW55IG5vbi13aGl0ZXNwYWNlIGNoYXJhY3Rlci5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGNoYXIgLSBUaGUgY2hhcmFjdGVyIHRvIHZhbGlkYXRlXG4gICAgICogQHJldHVybnMgdHJ1ZSBpZiBjaGFyYWN0ZXIgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZVxuICAgICAqL1xuICAgIHByaXZhdGUgaXNWYWxpZENoYXJhY3RlcihjaGFyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKHRoaXMuYWxwaGFudW1lcmljKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGFyLnRyaW0oKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAvXlswLTldJC8udGVzdChjaGFyKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBVcGRhdGVzIHRoZSBmb3JtIHZhbHVlIGJ5IGNhbGxpbmcgdGhlIG9uQ2hhbmdlIGNhbGxiYWNrIHJlZ2lzdGVyZWQgYnkgRm9ybUNvbnRyb2wuXG4gICAgICogVGhpcyBlbnN1cmVzIHRoZSByZWFjdGl2ZSBmb3JtIHN0YXlzIHN5bmNocm9uaXplZCB3aXRoIGNvbXBvbmVudCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICovXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vbkNoYW5nZSh0aGlzLmN1cnJlbnRWYWx1ZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHdyaXRlIGEgdmFsdWUgdG8gdGhlIGNvbXBvbmVudC5cbiAgICAgKiBPbmx5IGFjY2VwdHMgc3RyaW5nIHZhbHVlcyB3aXRoIGxlbmd0aCBtYXRjaGluZyB0aGUgY29tcG9uZW50J3MgbGVuZ3RoIHNldHRpbmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgdmFsdWUgdG8gd3JpdGUgKHR5cGljYWxseSBmcm9tIHRoZSBGb3JtQ29udHJvbClcbiAgICAgKi9cbiAgICBwdWJsaWMgd3JpdGVWYWx1ZSh2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qgc3RyaW5nVmFsdWUgPSBTdHJpbmcodmFsdWUpO1xuICAgICAgICAgICAgaWYgKHN0cmluZ1ZhbHVlLmxlbmd0aCA9PT0gdGhpcy5sZW5ndGgoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXRzLnNldChzdHJpbmdWYWx1ZS5zcGxpdCgnJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB3aGVuIHZhbHVlIGNoYW5nZXMuXG4gICAgICogUmVnaXN0ZXJzIHRoZSBjYWxsYmFjayB0byBiZSBjYWxsZWQgd2hlbiB0aGUgY29tcG9uZW50IHZhbHVlIGNoYW5nZXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgdmFsdWUgY2hhbmdlc1xuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uQ2hhbmdlKGZuOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlID0gZm47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW1wbGVtZW50cyBDb250cm9sVmFsdWVBY2Nlc3NvciBpbnRlcmZhY2UuXG4gICAgICogQ2FsbGVkIGJ5IHRoZSBGb3JtQ29udHJvbCB0byByZWdpc3RlciB0aGUgdG91Y2hlZCBjYWxsYmFjay5cbiAgICAgKiBUaGUgY2FsbGJhY2sgaXMgaW52b2tlZCB3aGVuIHRoZSBsYXN0IGlucHV0IGZpZWxkIGxvc2VzIGZvY3VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIGZuIC0gQ2FsbGJhY2sgZnVuY3Rpb24gdG8gaW52b2tlIHdoZW4gY29tcG9uZW50IGlzIHRvdWNoZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJPblRvdWNoZWQoZm46ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHNldCB0aGUgZGlzYWJsZWQgc3RhdGUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICAgKiBVcGRhdGVzIHRoZSBkaXNhYmxlZCBtb2RlbCB0byByZWZsZWN0IHRoZSBmb3JtJ3MgZGlzYWJsZWQgc3RhdGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXNEaXNhYmxlZCAtIFdoZXRoZXIgdGhlIGNvbXBvbmVudCBzaG91bGQgYmUgZGlzYWJsZWRcbiAgICAgKi9cbiAgICBwdWJsaWMgc2V0RGlzYWJsZWRTdGF0ZShpc0Rpc2FibGVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGlzYWJsZWQuc2V0KGlzRGlzYWJsZWQpO1xuICAgIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImdhcC14c21hbGwgZmxleCBmbGV4LWNvbFwiPlxuICAgIDxkaXZcbiAgICAgICAgY2xhc3M9XCJmbGV4IGdhcC0yXCJcbiAgICAgICAgcm9sZT1cImdyb3VwXCJcbiAgICAgICAgYXJpYS1sYWJlbD1cIlBJTiBjb2RlIGlucHV0XCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbGxlZGJ5XT1cImhlbHBUZXh0KCkgPyAncGluLWhlbHAtdGV4dCcgOiBudWxsXCJcbiAgICA+XG4gICAgICAgIEBmb3IgKGlucHV0IG9mIGlucHV0cygpOyBsZXQgaSA9ICRpbmRleDsgdHJhY2sgaSkge1xuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgI3BpbklucHV0XG4gICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiaC0xMiB3LTEyIHJvdW5kZWQteGJpZyBib3JkZXIgdGV4dC1jZW50ZXIgdGV4dC1sZyBmb250LW1lZGl1bSB0cmFuc2l0aW9uLWFsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIntcbiAgICAgICAgICAgICAgICAgICAgJ2JvcmRlci1jcml0aWNhbGl0eS1yZWQgZm9jdXM6cmluZy1jcml0aWNhbGl0eS1yZWQnOiBoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWdyYXlzY2FsZS0zMCBmb2N1czpib3JkZXItcHJpbWFyeSBmb2N1czpyaW5nLXByaW1hcnknOiAhaGFzRXJyb3IoKSxcbiAgICAgICAgICAgICAgICAgICAgJ2N1cnNvci1ub3QtYWxsb3dlZCBiZy1ncmF5c2NhbGUtMTAgdGV4dC1ncmF5c2NhbGUtNjAnOiBkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgICAgICAnYmctZ3JheXNjYWxlLTAgdGV4dC1ncmF5c2NhbGUtMTAwIGZvY3VzOm91dGxpbmUtbm9uZSc6ICFkaXNhYmxlZCgpLFxuICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJpbnB1dFwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgIFthdHRyLm1heGxlbmd0aF09XCIxXCJcbiAgICAgICAgICAgICAgICBbYXR0ci5pbnB1dG1vZGVdPVwiYWxwaGFudW1lcmljKCkgPyAndGV4dCcgOiAnbnVtZXJpYydcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwiXG4gICAgICAgICAgICAgICAgICAgIGFscGhhbnVtZXJpYygpXG4gICAgICAgICAgICAgICAgICAgICAgICA/ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2NoYXJhY3Rlcl9pbmRleF9vZl90b3RhbCdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfCB0cmFuc2xhdGU6IHsgaW5kZXg6IGkgKyAxLCBsZW5ndGg6IGxlbmd0aCgpIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICA6ICgncGxhdGZvcm0uYW5ndWxhcl9jb21wb25lbnRzLnBpbl9jb2RlX2RpZ2l0X2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtZGVzY3JpYmVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgICAgICAgICAgICAgIFthdHRyLmFyaWEtcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25JbnB1dChpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCJvbktleURvd24oaSwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKHBhc3RlKT1cIm9uUGFzdGUoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvY3VzKT1cIm9uRm9jdXMoaSlcIlxuICAgICAgICAgICAgICAgIChibHVyKT1cIm9uQmx1cihpKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG5cbiAgICBAaWYgKGhlbHBUZXh0KCkpIHtcbiAgICAgICAgPGRpdlxuICAgICAgICAgICAgaWQ9XCJwaW4taGVscC10ZXh0XCJcbiAgICAgICAgICAgIGNsYXNzPVwibXQtc21hbGwgdGV4dC1zbSB0ZXh0LWdyYXlzY2FsZS02MFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIHt7IGhlbHBUZXh0KCkgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5cbiJdfQ==
|
|
454
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGluLWNvZGUtZmllbGQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jb21wb25lbnRzL3Bpbi1jb2RlLWZpZWxkL3NyYy9saWIvcGluLWNvZGUtZmllbGQvcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFVBQVUsRUFDVixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxNQUFNLEVBQ04sVUFBVSxHQUNiLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBRXREOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTZCRztBQWNILE1BQU0sT0FBTyxxQkFBcUI7SUFDdEIsTUFBTSxDQUFVLGlCQUFpQixHQUFHLENBQUMsQ0FBQztJQUN0QyxNQUFNLENBQVUsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUV6Qzs7Ozs7T0FLRztJQUNJLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFekI7Ozs7O09BS0c7SUFDSSxZQUFZLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRW5DOzs7OztPQUtHO0lBQ0ksUUFBUSxHQUFHLEtBQUssQ0FBQyxFQUFF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Q0FBQyxHQUFHLEVBQUUsc0JBQXNCLENBQUM7NEJBQ3BELEtBQUssRUFBRSxJQUFJO3lCQUNkO3FCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgZm9yd2FyZFJlZixcbiAgICB2aWV3Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBzaWduYWwsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIGVmZmVjdCxcbiAgICBjb21wdXRlZCxcbiAgICBtb2RlbCxcbiAgICBpbmplY3QsXG4gICAgRGVzdHJveVJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlTW9kdWxlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIENvbXBvbmVudGUgZGUgZW50cmFkYSBkZSBjw7NkaWdvIFBJTi9PVFAgY29tIGNhbXBvcyBpbmRpdmlkdWFpcyBwYXJhIGNhZGEgZMOtZ2l0by5cbiAqIEltcGxlbWVudGEge0BsaW5rIENvbnRyb2xWYWx1ZUFjY2Vzc29yfSBwYXJhIGludGVncmHDp8OjbyBuYXRpdmEgY29tIFJlYWN0aXZlIEZvcm1zXG4gKiBlIFRlbXBsYXRlLWRyaXZlbiBGb3JtcyBkbyBBbmd1bGFyLlxuICpcbiAqIEZ1bmNpb25hbGlkYWRlczpcbiAqIC0gQ2FtcG9zIHNlcGFyYWRvcyBlIG5hdmVnw6F2ZWlzIHBhcmEgY2FkYSBkw61naXRvIGRvIGPDs2RpZ29cbiAqIC0gQ29tcHJpbWVudG8gY29uZmlndXLDoXZlbCB2aWEgaW5wdXQgYGxlbmd0aGBcbiAqIC0gU3Vwb3J0ZSBhIGVudHJhZGEgbnVtw6lyaWNhIG91IGFsZmFudW3DqXJpY2FcbiAqIC0gTmF2ZWdhw6fDo28gcG9yIHRlY2xhZG8gKHNldGFzLCBiYWNrc3BhY2UpXG4gKiAtIFN1cG9ydGUgYSBjb2xhciAocGFzdGUpIGNvbSB0cnVuY2FtZW50byBhdXRvbcOhdGljbyBhbyB0YW1hbmhvIGRlZmluaWRvXG4gKiAtIEVzdGFkbyBkZSBlcnJvIHZpYSBpbnB1dCBgaW52YWxpZGBcbiAqIC0gQWNlc3NpYmlsaWRhZGUgY29tcGxldGEgY29tIEFSSUEgbGFiZWxzIGUgcm9sZXMgc2Vtw6JudGljb3NcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgaHRtbFxuICogPGZvcm0gW2Zvcm1Hcm91cF09XCJmb3JtXCI+XG4gKiAgIDxzLXBpbi1jb2RlLWZpZWxkXG4gKiAgICAgZm9ybUNvbnRyb2xOYW1lPVwiY29kZVwiXG4gKiAgICAgW2xlbmd0aF09XCI2XCJcbiAqICAgICBbYWxwaGFudW1lcmljXT1cImZhbHNlXCJcbiAqICAgICBbaW52YWxpZF09XCIoZm9ybS5nZXQoJ2NvZGUnKT8uaW52YWxpZCAmJiBmb3JtLmdldCgnY29kZScpPy5kaXJ0eSkgfHwgZmFsc2VcIlxuICogICAgIGhlbHBUZXh0PVwiRGlnaXRlIHNldSBjw7NkaWdvIGRlIDYgZMOtZ2l0b3NcIlxuICogICAgIChjb2RlRmlsbGVkKT1cIm9uQ29kZUZpbGxlZCgkZXZlbnQpXCI+XG4gKiAgIDwvcy1waW4tY29kZS1maWVsZD5cbiAqIDwvZm9ybT5cbiAqIGBgYFxuICpcbiAqIEBjYXRlZ29yeSBJbnB1dHNcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdzLXBpbi1jb2RlLWZpZWxkJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vcGluLWNvZGUtZmllbGQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgVHJhbnNsYXRlTW9kdWxlXSxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICAgICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQaW5Db2RlRmllbGRDb21wb25lbnQpLFxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgUGluQ29kZUZpZWxkQ29tcG9uZW50IGltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3Ige1xuICAgIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IExBU1RfSU5ERVhfT0ZGU0VUID0gMTtcbiAgICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBFTVBUWV9WQUxVRSA9ICcnO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIE7Dum1lcm8gZGUgY2FtcG9zIGRlIGVudHJhZGEgKGNvbXByaW1lbnRvIGRvIGPDs2RpZ28gUElOKS5cbiAgICAgKiBEZXZlIHNlciBhbyBtZW5vcyAxLlxuICAgICAqXG4gICAgICogQGRlZmF1bHQgNlxuICAgICAqL1xuICAgIHB1YmxpYyBsZW5ndGggPSBpbnB1dCg2KTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBQZXJtaXRlIGVudHJhZGEgYWxmYW51bcOpcmljYSBlIGRlIGNhcmFjdGVyZXMgZXNwZWNpYWlzLlxuICAgICAqIFF1YW5kbyBgZmFsc2VgLCBhY2VpdGEgYXBlbmFzIGTDrWdpdG9zIG51bcOpcmljb3MgKDDigJM5KS5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0IGZhbHNlXG4gICAgICovXG4gICAgcHVibGljIGFscGhhbnVtZXJpYyA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBUZXh0byBkZSBhanVkYSBleGliaWRvIGFiYWl4byBkb3MgY2FtcG9zIGRlIGVudHJhZGEsXG4gICAgICogZm9ybmVjZW5kbyBpbnN0cnXDp8O1ZXMgYWRpY2lvbmFpcyBhbyB1c3XDoXJpby5cbiAgICAgKlxuICAgICAqIEBkZWZhdWx0ICcnXG4gICAgICovXG4gICAgcHVibGljIGhlbHBUZXh0ID0gaW5wdXQoJycpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIENvbnRyb2xhIGEgdmlzdWFsaXphw6fDo28gZG8gZXN0YWRvIGRlIGVycm8gZG8gY29tcG9uZW50ZS5cbiAgICAgKiBRdWFuZG8gYHRydWVgLCBleGliZSBib3JkYSB2ZXJtZWxoYSBub3MgY2FtcG9zIGRlIGVudHJhZGEuXG4gICAgICogTm9ybWFsbWVudGUgdmluY3VsYWRvIGFvIGVzdGFkbyBgaW52YWxpZCAmJiBkaXJ0eWAgZG8gYEZvcm1Db250cm9sYC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogYGBgaHRtbFxuICAgICAqIFtpbnZhbGlkXT1cIihjb250cm9sPy5pbnZhbGlkICYmIGNvbnRyb2w/LmRpcnR5KSB8fCBmYWxzZVwiXG4gICAgICogYGBgXG4gICAgICogQGRlZmF1bHQgZmFsc2VcbiAgICAgKi9cbiAgICBwdWJsaWMgaW52YWxpZCA9IGlucHV0KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBDb250cm9sYSBvIGVzdGFkbyBkZXNhYmlsaXRhZG8gZG8gY29tcG9uZW50ZSB2aWEgdHdvLXdheSBiaW5kaW5nLlxuICAgICAqIFF1YW5kbyBgdHJ1ZWAsIHRvZG9zIG9zIGNhbXBvcyBmaWNhbSBkZXNhYmlsaXRhZG9zIGUgYSBpbnRlcmHDp8OjbyBkbyB1c3XDoXJpbyDDqSBibG9xdWVhZGEuXG4gICAgICpcbiAgICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgICAqL1xuICAgIHB1YmxpYyBkaXNhYmxlZCA9IG1vZGVsKGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIEBkZXNjcmlwdGlvbiBFbWl0aWRvIHF1YW5kbyB0b2RvcyBvcyBjYW1wb3MgZG8gY8OzZGlnbyBQSU4gc8OjbyBwcmVlbmNoaWRvcy5cbiAgICAgKiBFbWl0ZSBvIGPDs2RpZ28gY29tcGxldG8gY29tbyBzdHJpbmcuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGBgYGh0bWxcbiAgICAgKiAoY29kZUZpbGxlZCk9XCJvbkNvZGVGaWxsZWQoJGV2ZW50KVwiXG4gICAgICogYGBgXG4gICAgICovXG4gICAgcHVibGljIGNvZGVGaWxsZWQgPSBvdXRwdXQ8c3RyaW5nPigpO1xuXG4gICAgLyoqXG4gICAgICogQGRlc2NyaXB0aW9uIFNpZ25hbCBjb20gb3MgdmFsb3JlcyBhdHVhaXMgZGUgY2FkYSBjYW1wbyBkZSBlbnRyYWRhLlxuICAgICAqIE8gY29tcHJpbWVudG8gZG8gYXJyYXkgY29ycmVzcG9uZGUgYW8gdmFsb3IgZG8gaW5wdXQgYGxlbmd0aGAuXG4gICAgICovXG4gICAgcHVibGljIGlucHV0cyA9IHNpZ25hbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICogU2lnbmFsIHRyYWNraW5nIHdoZXRoZXIgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB0b3VjaGVkIGJ5IHRoZSB1c2VyLlxuICAgICAqIFNldCB0byB0cnVlIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMgKGJsdXIgZXZlbnQpLlxuICAgICAqL1xuICAgIHB1YmxpYyB0b3VjaGVkID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIHdoZXRoZXIgYWxsIFBJTiBjb2RlIGZpZWxkcyBhcmUgZmlsbGVkLlxuICAgICAqIFRydWUgb25seSB3aGVuIGV2ZXJ5IGZpZWxkIGNvbnRhaW5zIGEgbm9uLWVtcHR5IHZhbHVlLlxuICAgICAqL1xuICAgIHB1YmxpYyBpc0NvbXBsZXRlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5ldmVyeSgoaW5wdXQpID0+IGlucHV0ICE9PSAnJykpO1xuXG4gICAgLyoqXG4gICAgICogQ29tcHV0ZWQgc2lnbmFsIGNvbnRhaW5pbmcgdGhlIGNvbXBsZXRlIFBJTiBjb2RlIGFzIGEgam9pbmVkIHN0cmluZy5cbiAgICAgKiBSZXR1cm5zIGVtcHR5IHN0cmluZyBpZiBubyBpbnB1dHMgYXJlIGZpbGxlZC5cbiAgICAgKi9cbiAgICBwdWJsaWMgY3VycmVudFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5pbnB1dHMoKS5qb2luKCcnKSk7XG5cbiAgICAvKipcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBob3N0IGhhcyB0aGUgbmctaW52YWxpZCBjbGFzcyBmcm9tIEZvcm1Db250cm9sIHZhbGlkYXRvcnMuXG4gICAgICogVXBkYXRlZCByZWFjdGl2ZWx5IHdoZW5ldmVyIHRoZSBpbnZhbGlkIHN0YXRlIGNoYW5nZXMuXG4gICAgICovXG4gICAgcHJpdmF0ZSBoYXNOZ0ludmFsaWRDbGFzcyA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiBTaWduYWwgdHJhY2tpbmcgaWYgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5LlxuICAgICAqIFVwZGF0ZWQgcmVhY3RpdmVseSB3aGVuZXZlciB0aGUgZGlydHkgc3RhdGUgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzQ29udHJvbERpcnR5ID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqIENvbXB1dGVkIHNpZ25hbCBpbmRpY2F0aW5nIGlmIHRoZSBjb21wb25lbnQgc2hvdWxkIHNob3cgZXJyb3Igc3RhdGUuXG4gICAgICogUmV0dXJucyB0cnVlIGlmOlxuICAgICAqIC0gVGhlIGBpbnZhbGlkYCBpbnB1dCBpcyB0cnVlLCBPUlxuICAgICAqIC0gVGhlIGNvbXBvbmVudCBoYXMgdGhlIGBuZy1pbnZhbGlkYCBjbGFzcyBBTkQgdGhlIEZvcm1Db250cm9sIGlzIGRpcnR5ICh0b3VjaGVkL21vZGlmaWVkKVxuICAgICAqIFRoaXMgZW5zdXJlcyBlcnJvcnMgYXJlIG9ubHkgc2hvd24gdG8gdGhlIHVzZXIgYWZ0ZXIgdGhleSd2ZSBpbnRlcmFjdGVkIHdpdGggdGhlIGZpZWxkLlxuICAgICAqL1xuICAgIHB1YmxpYyBoYXNFcnJvciA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaW52YWxpZCgpIHx8ICh0aGlzLmhhc05nSW52YWxpZENsYXNzKCkgJiYgdGhpcy5pc0NvbnRyb2xEaXJ0eSgpKSk7XG5cbiAgICAvKipcbiAgICAgKiBWaWV3Q2hpbGRyZW4gcmVmZXJlbmNlIHRvIGFsbCBpbnB1dCBET00gZWxlbWVudHMuXG4gICAgICogVXNlZCBmb3IgRE9NIG1hbmlwdWxhdGlvbiAoZm9jdXMsIHNlbGVjdGlvbikuXG4gICAgICovXG4gICAgcHVibGljIHBpbklucHV0cyA9IHZpZXdDaGlsZHJlbjxFbGVtZW50UmVmPigncGluSW5wdXQnKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudFJlZiA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICBwcml2YXRlIG9uQ2hhbmdlOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZCA9ICgpID0+IHt9O1xuICAgIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkID0gKCkgPT4ge307XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0xlbmd0aCA9IHRoaXMubGVuZ3RoKCk7XG4gICAgICAgICAgICAgICAgaWYgKG5ld0xlbmd0aCA8IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdQSU4gY29kZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAxJyk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaW5wdXRzKCkubGVuZ3RoICE9PSBuZXdMZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMuc2V0KEFycmF5LmZyb20oeyBsZW5ndGg6IG5ld0xlbmd0aCB9LCAoKSA9PiAnJykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gTW9uaXRvciBuZy1pbnZhbGlkIGFuZCBuZy1kaXJ0eSBjbGFzc2VzIG9uIHRoZSBob3N0IGVsZW1lbnQgZm9yIHJlYWN0aXZlIGVycm9yIHN0YXRlXG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBBY2Nlc3MgaW5wdXRzIHRvIGNyZWF0ZSBkZXBlbmRlbmN5IG9uIGNoYW5nZXNcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0cygpO1xuICAgICAgICAgICAgICAgIHRoaXMuaW52YWxpZCgpO1xuXG4gICAgICAgICAgICAgICAgLy8gVXNlIHNldFRpbWVvdXQgdG8gZGVmZXIgdGhlIGNoZWNrIHRvIG5leHQgdGljayB0byBlbnN1cmUgQW5ndWxhciBoYXMgdXBkYXRlZCBET00gY2xhc3Nlc1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IHdpbmRvdy5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaG9zdEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaGFzTmdJbnZhbGlkID0gaG9zdEVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCduZy1pbnZhbGlkJyk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzRGlydHkgPSBob3N0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ25nLWRpcnR5Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYXNOZ0ludmFsaWRDbGFzcy5zZXQoaGFzTmdJbnZhbGlkKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc0NvbnRyb2xEaXJ0eS5zZXQoaXNEaXJ0eSk7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAvLyBDbGVhbnVwIHRpbWVvdXQgb24gY29tcG9uZW50IGRlc3Ryb3lcbiAgICAgICAgICAgICAgICB0aGlzLmRlc3Ryb3lSZWYub25EZXN0cm95KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEhhbmRsZXMgaW5wdXQgZXZlbnQgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFZhbGlkYXRlcyBjaGFyYWN0ZXIgaW5wdXQsIHByZXZlbnRzIG11bHRpcGxlIGNoYXJhY3RlcnMgcGVyIGZpZWxkLFxuICAgICAqIGF1dG8tYWR2YW5jZXMgdG8gbmV4dCBmaWVsZCB3aGVuIGNoYXJhY3RlciBpcyBlbnRlcmVkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBpbnB1dCBldmVudFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0KGluZGV4OiBudW1iZXIsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5kaXNhYmxlZCgpKSB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGFyZ2V0LnZhbHVlO1xuXG4gICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAxIHx8ICh2YWx1ZSAmJiAhdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKHZhbHVlKSkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJJbnB1dCh0YXJnZXQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5zZXRJbnB1dEF0SW5kZXgoaW5kZXgsIHZhbHVlKTtcblxuICAgICAgICBpZiAodmFsdWUgJiYgaW5kZXggPCB0aGlzLmxlbmd0aCgpIC0gMSkge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4ICsgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIFN1cHBvcnRzIGFycm93IG5hdmlnYXRpb24gKGxlZnQvcmlnaHQpIGFuZCBiYWNrc3BhY2Uga2V5LlxuICAgICAqXG4gICAgICogS2V5Ym9hcmQgYmVoYXZpb3I6XG4gICAgICogLSBBcnJvd1JpZ2h0OiBNb3ZlIGZvY3VzIHRvIG5leHQgZmllbGRcbiAgICAgKiAtIEFycm93TGVmdDogTW92ZSBmb2N1cyB0byBwcmV2aW91cyBmaWVsZFxuICAgICAqIC0gQmFja3NwYWNlOiBDbGVhciBjdXJyZW50IG9yIHByZXZpb3VzIGZpZWxkIGFuZCBhZGp1c3QgZm9jdXNcbiAgICAgKlxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKiBAcGFyYW0gZXZlbnQgLSBUaGUga2V5Ym9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25LZXlEb3duKGluZGV4OiBudW1iZXIsIGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmRpc2FibGVkKCkpIHtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBrZXkgPSBldmVudC5rZXk7XG5cbiAgICAgICAgc3dpdGNoIChrZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93UmlnaHQnOlxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IHRoaXMubGVuZ3RoKCkgLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZm9jdXNBbmRTZWxlY3RJbnB1dChpbmRleCArIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93TGVmdCc6XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXggLSAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdCYWNrc3BhY2UnOlxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVCYWNrc3BhY2UoaW5kZXgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBwYXN0ZSAoY2xpcGJvYXJkKSBldmVudHMgb24gUElOIGNvZGUgZmllbGRzLlxuICAgICAqIEV4dHJhY3RzIHZhbGlkIGNoYXJhY3RlcnMgZnJvbSBwYXN0ZWQgY29udGVudCwgZmlsdGVycyBieSBjaGFyYWN0ZXIgdHlwZSxcbiAgICAgKiBhbmQgYXV0b21hdGljYWxseSB0cnVuY2F0ZXMgdG8gbWF0Y2ggZmllbGQgbGVuZ3RoLlxuICAgICAqXG4gICAgICogQmVoYXZpb3I6XG4gICAgICogLSBGaWx0ZXJzIGNoYXJhY3RlcnMgYmFzZWQgb24gYGFscGhhbnVtZXJpY2Agc2V0dGluZ1xuICAgICAqIC0gVHJ1bmNhdGVzIHRvIG1heGltdW0gZmllbGQgY291bnRcbiAgICAgKiAtIEZpbGxzIGF2YWlsYWJsZSBmaWVsZHMgd2l0aCBwYXN0ZWQgY29udGVudFxuICAgICAqIC0gRW1pdHMgY29kZUZpbGxlZCBldmVudCBpZiBhbGwgZmllbGRzIGFyZSBmaWxsZWRcbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCAtIFRoZSBjbGlwYm9hcmQgZXZlbnRcbiAgICAgKi9cbiAgICBwdWJsaWMgb25QYXN0ZShldmVudDogQ2xpcGJvYXJkRXZlbnQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZWQoKSkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRDaGFycyA9IHRoaXMuZXh0cmFjdFZhbGlkQ2hhcmFjdGVyc0Zyb21QYXN0ZShldmVudCk7XG5cbiAgICAgICAgaWYgKHZhbGlkQ2hhcnMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmaWxsZWRJbnB1dHMgPSBbLi4udmFsaWRDaGFycywgLi4uQXJyYXkodGhpcy5sZW5ndGgoKSAtIHZhbGlkQ2hhcnMubGVuZ3RoKS5maWxsKCcnKV07XG5cbiAgICAgICAgdGhpcy5pbnB1dHMuc2V0KGZpbGxlZElucHV0cyk7XG4gICAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTtcblxuICAgICAgICAvLyBGb2N1cyBvbiB0aGUgZmlyc3QgZW1wdHkgaW5wdXQgb3IgdGhlIGxhc3QgZmlsbGVkIGlucHV0IGlmIGFsbCBhcmUgZmlsbGVkXG4gICAgICAgIGNvbnN0IGZpcnN0RW1wdHlJbmRleCA9IHZhbGlkQ2hhcnMubGVuZ3RoIDwgdGhpcy5sZW5ndGgoKSA/IHZhbGlkQ2hhcnMubGVuZ3RoIDogdmFsaWRDaGFycy5sZW5ndGggLSAxO1xuICAgICAgICB0aGlzLmZvY3VzQW5kU2VsZWN0SW5wdXQoZmlyc3RFbXB0eUluZGV4KTtcblxuICAgICAgICBpZiAodGhpcy5pc0NvbXBsZXRlKCkpIHtcbiAgICAgICAgICAgIHRoaXMuY29kZUZpbGxlZC5lbWl0KHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBmb2N1cyBldmVudCBvbiBQSU4gY29kZSBmaWVsZHMuXG4gICAgICogU2VsZWN0cyBhbGwgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgd2hlbiBmb2N1c2VkLlxuICAgICAqXG4gICAgICogQHBhcmFtIGluZGV4IC0gVGhlIGlucHV0IGZpZWxkIGluZGV4ICgwLWJhc2VkKVxuICAgICAqL1xuICAgIHB1YmxpYyBvbkZvY3VzKGluZGV4OiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnBpbklucHV0cygpW2luZGV4XTtcbiAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICBpbnB1dC5uYXRpdmVFbGVtZW50LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSGFuZGxlcyBibHVyIGV2ZW50IG9uIFBJTiBjb2RlIGZpZWxkcy5cbiAgICAgKiBNYXJrcyB0aGUgY29tcG9uZW50IGFzIHRvdWNoZWQgd2hlbiB0aGUgbGFzdCBpbnB1dCBmaWVsZCBsb3NlcyBmb2N1cy5cbiAgICAgKiBBbHNvIG5vdGlmaWVzIHRoZSByZWdpc3RlcmVkIG9uVG91Y2hlZCBjYWxsYmFjayBmb3IgRm9ybUNvbnRyb2wgaW50ZWdyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICovXG4gICAgcHVibGljIG9uQmx1cihpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIC8vIE9ubHkgbWFyayBhcyB0b3VjaGVkIHdoZW4gdGhlIExBU1QgaW5wdXQgbG9zZXMgZm9jdXNcbiAgICAgICAgaWYgKGluZGV4ID09PSB0aGlzLmxlbmd0aCgpIC0gUGluQ29kZUZpZWxkQ29tcG9uZW50LkxBU1RfSU5ERVhfT0ZGU0VUKSB7XG4gICAgICAgICAgICB0aGlzLnRvdWNoZWQuc2V0KHRydWUpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoZWQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgaW5wdXQgdmFsdWUgYXQgc3BlY2lmaWVkIGluZGV4IGFuZCBhZGp1c3RzIGZvY3VzIGFjY29yZGluZ2x5LlxuICAgICAqIElmIGN1cnJlbnQgZmllbGQgaXMgZW1wdHksIG1vdmVzIHRvIHByZXZpb3VzIGZpZWxkIGFuZCBjbGVhcnMgaXQuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGhhbmRsZUJhY2tzcGFjZShpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuXG4gICAgICAgIC8vIElmIGN1cnJlbnQgaW5wdXQgaGFzIHZhbHVlLCBjbGVhciBpdFxuICAgICAgICBpZiAoY3VycmVudElucHV0c1tpbmRleF0pIHtcbiAgICAgICAgICAgIHRoaXMuc2V0SW5wdXRBdEluZGV4KGluZGV4LCBQaW5Db2RlRmllbGRDb21wb25lbnQuRU1QVFlfVkFMVUUpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBjbGVhciBwcmV2aW91cyBpbnB1dCBhbmQgZm9jdXMgaXRcbiAgICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZXRJbnB1dEF0SW5kZXgoaW5kZXggLSAxLCBQaW5Db2RlRmllbGRDb21wb25lbnQuRU1QVFlfVkFMVUUpO1xuICAgICAgICAgICAgdGhpcy5mb2N1c0FuZFNlbGVjdElucHV0KGluZGV4IC0gMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTZXRzIHRoZSB2YWx1ZSBhdCBhIHNwZWNpZmljIGlucHV0IGZpZWxkIGluZGV4IGFuZCB1cGRhdGVzIHRoZSBmb3JtIHZhbHVlLlxuICAgICAqIFVwZGF0ZXMgdGhlIHNpZ25hbCBhbmQgdHJpZ2dlcnMgdGhlIGNoYW5nZSBkZXRlY3Rpb24gdmlhIG9uQ2hhbmdlIGNhbGxiYWNrLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gaW5kZXggLSBUaGUgaW5wdXQgZmllbGQgaW5kZXggKDAtYmFzZWQpXG4gICAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHZhbHVlIHRvIHNldCBpbiB0aGUgZmllbGRcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldElucHV0QXRJbmRleChpbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnB1dHMgPSB0aGlzLmlucHV0cygpO1xuICAgICAgICBjdXJyZW50SW5wdXRzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICB0aGlzLmlucHV0cy5zZXQoWy4uLmN1cnJlbnRJbnB1dHNdKTtcbiAgICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZvY3VzZXMgb24gYW5kIHNlbGVjdHMgdGV4dCBpbiB0aGUgaW5wdXQgZmllbGQgYXQgdGhlIHNwZWNpZmllZCBpbmRleC5cbiAgICAgKiBVc2VzIHF1ZXVlTWljcm90YXNrIHRvIGVuc3VyZSBET00gaXMgdXBkYXRlZCBiZWZvcmUgZm9jdXNpbmcuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSBpbmRleCAtIFRoZSBpbnB1dCBmaWVsZCBpbmRleCAoMC1iYXNlZClcbiAgICAgKi9cbiAgICBwcml2YXRlIGZvY3VzQW5kU2VsZWN0SW5wdXQoaW5kZXg6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMucGluSW5wdXRzKClbaW5kZXhdO1xuICAgICAgICAgICAgaWYgKGlucHV0KSB7XG4gICAgICAgICAgICAgICAgaW5wdXQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIGlucHV0Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgdmFsdWUgb2YgYW4gaW5wdXQgZWxlbWVudC5cbiAgICAgKiBVc2VkIGZvciBpbnB1dCB2YWxpZGF0aW9uIHRvIHJlamVjdCBpbnZhbGlkIGNoYXJhY3RlcnMuXG4gICAgICpcbiAgICAgKiBAcHJpdmF0ZVxuICAgICAqIEBwYXJhbSB0YXJnZXQgLSBUaGUgSFRNTCBpbnB1dCBlbGVtZW50IHRvIGNsZWFyXG4gICAgICovXG4gICAgcHJpdmF0ZSBjbGVhcklucHV0KHRhcmdldDogSFRNTElucHV0RWxlbWVudCk6IHZvaWQge1xuICAgICAgICB0YXJnZXQudmFsdWUgPSAnJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBFeHRyYWN0cyB2YWxpZCBjaGFyYWN0ZXJzIGZyb20gcGFzdGVkIGNvbnRlbnQuXG4gICAgICogRmlsdGVycyBiYXNlZCBvbiBhbHBoYW51bWVyaWMgc2V0dGluZyBhbmQgbGltaXRzIHRvIGNvbXBvbmVudCdzIGxlbmd0aC5cbiAgICAgKlxuICAgICAqIEBwcml2YXRlXG4gICAgICogQHBhcmFtIGV2ZW50IC0gVGhlIGNsaXBib2FyZCBldmVudFxuICAgICAqIEByZXR1cm5zIEFycmF5IG9mIHZhbGlkIGNoYXJhY3RlcnMgZnJvbSB0aGUgcGFzdGVkIGNvbnRlbnRcbiAgICAgKi9cbiAgICBwcml2YXRlIGV4dHJhY3RWYWxpZENoYXJhY3RlcnNGcm9tUGFzdGUoZXZlbnQ6IENsaXBib2FyZEV2ZW50KTogc3RyaW5nW10ge1xuICAgICAgICBjb25zdCBwYXN0ZWRUZXh0ID0gKGV2ZW50LmNsaXBib2FyZERhdGE/LmdldERhdGEoJ3RleHQnKSB8fCAnJykudHJpbSgpO1xuICAgICAgICByZXR1cm4gcGFzdGVkVGV4dFxuICAgICAgICAgICAgLnNwbGl0KCcnKVxuICAgICAgICAgICAgLmZpbHRlcigoY2hhcikgPT4gdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyKGNoYXIpKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHRoaXMubGVuZ3RoKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFZhbGlkYXRlcyBpZiBhIGNoYXJhY3RlciBpcyBhY2NlcHRhYmxlIGJhc2VkIG9uIGNvbXBvbmVudCBjb25maWd1cmF0aW9uLlxuICAgICAqIEZvciBudW1lcmljIG1vZGUsIGFjY2VwdHMgb25seSBkaWdpdHMgMC05LlxuICAgICAqIEZvciBhbHBoYW51bWVyaWMgbW9kZSwgYWNjZXB0cyBhbnkgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVyLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKiBAcGFyYW0gY2hhciAtIFRoZSBjaGFyYWN0ZXIgdG8gdmFsaWRhdGVcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIGNoYXJhY3RlciBpcyB2YWxpZCwgZmFsc2Ugb3RoZXJ3aXNlXG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkQ2hhcmFjdGVyKGNoYXI6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5hbHBoYW51bWVyaWMoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGNoYXIudHJpbSgpLmxlbmd0aCA+IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC9eWzAtOV0kLy50ZXN0KGNoYXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFVwZGF0ZXMgdGhlIGZvcm0gdmFsdWUgYnkgY2FsbGluZyB0aGUgb25DaGFuZ2UgY2FsbGJhY2sgcmVnaXN0ZXJlZCBieSBGb3JtQ29udHJvbC5cbiAgICAgKiBUaGlzIGVuc3VyZXMgdGhlIHJlYWN0aXZlIGZvcm0gc3RheXMgc3luY2hyb25pemVkIHdpdGggY29tcG9uZW50IHN0YXRlLlxuICAgICAqXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBwcml2YXRlIHVwZGF0ZVZhbHVlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKHRoaXMuY3VycmVudFZhbHVlKCkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gd3JpdGUgYSB2YWx1ZSB0byB0aGUgY29tcG9uZW50LlxuICAgICAqIE9ubHkgYWNjZXB0cyBzdHJpbmcgdmFsdWVzIHdpdGggbGVuZ3RoIG1hdGNoaW5nIHRoZSBjb21wb25lbnQncyBsZW5ndGggc2V0dGluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byB3cml0ZSAodHlwaWNhbGx5IGZyb20gdGhlIEZvcm1Db250cm9sKVxuICAgICAqL1xuICAgIHB1YmxpYyB3cml0ZVZhbHVlKHZhbHVlOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdWYWx1ZSA9IFN0cmluZyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoc3RyaW5nVmFsdWUubGVuZ3RoID09PSB0aGlzLmxlbmd0aCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dHMuc2V0KHN0cmluZ1ZhbHVlLnNwbGl0KCcnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHdoZW4gdmFsdWUgY2hhbmdlcy5cbiAgICAgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSBjb21wb25lbnQgdmFsdWUgY2hhbmdlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBmbiAtIENhbGxiYWNrIGZ1bmN0aW9uIHRvIGludm9rZSB3aGVuIGNvbXBvbmVudCB2YWx1ZSBjaGFuZ2VzXG4gICAgICovXG4gICAgcHVibGljIHJlZ2lzdGVyT25DaGFuZ2UoZm46ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbXBsZW1lbnRzIENvbnRyb2xWYWx1ZUFjY2Vzc29yIGludGVyZmFjZS5cbiAgICAgKiBDYWxsZWQgYnkgdGhlIEZvcm1Db250cm9sIHRvIHJlZ2lzdGVyIHRoZSB0b3VjaGVkIGNhbGxiYWNrLlxuICAgICAqIFRoZSBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4gdGhlIGxhc3QgaW5wdXQgZmllbGQgbG9zZXMgZm9jdXMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZm4gLSBDYWxsYmFjayBmdW5jdGlvbiB0byBpbnZva2Ugd2hlbiBjb21wb25lbnQgaXMgdG91Y2hlZFxuICAgICAqL1xuICAgIHB1YmxpYyByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgICAgICB0aGlzLm9uVG91Y2hlZCA9IGZuO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEltcGxlbWVudHMgQ29udHJvbFZhbHVlQWNjZXNzb3IgaW50ZXJmYWNlLlxuICAgICAqIENhbGxlZCBieSB0aGUgRm9ybUNvbnRyb2wgdG8gc2V0IHRoZSBkaXNhYmxlZCBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgICAqIFVwZGF0ZXMgdGhlIGRpc2FibGVkIG1vZGVsIHRvIHJlZmxlY3QgdGhlIGZvcm0ncyBkaXNhYmxlZCBzdGF0ZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpc0Rpc2FibGVkIC0gV2hldGhlciB0aGUgY29tcG9uZW50IHNob3VsZCBiZSBkaXNhYmxlZFxuICAgICAqL1xuICAgIHB1YmxpYyBzZXREaXNhYmxlZFN0YXRlKGlzRGlzYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kaXNhYmxlZC5zZXQoaXNEaXNhYmxlZCk7XG4gICAgfVxufVxuXG4iLCI8ZGl2IGNsYXNzPVwiZ2FwLXhzbWFsbCBmbGV4IGZsZXgtY29sXCI+XG4gICAgPGRpdlxuICAgICAgICBjbGFzcz1cImZsZXggZ2FwLTJcIlxuICAgICAgICByb2xlPVwiZ3JvdXBcIlxuICAgICAgICBhcmlhLWxhYmVsPVwiUElOIGNvZGUgaW5wdXRcIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsbGVkYnldPVwiaGVscFRleHQoKSA/ICdwaW4taGVscC10ZXh0JyA6IG51bGxcIlxuICAgID5cbiAgICAgICAgQGZvciAoaW5wdXQgb2YgaW5wdXRzKCk7IGxldCBpID0gJGluZGV4OyB0cmFjayBpKSB7XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAjcGluSW5wdXRcbiAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJoLTEyIHctMTIgcm91bmRlZC14YmlnIGJvcmRlciB0ZXh0LWNlbnRlciB0ZXh0LWxnIGZvbnQtbWVkaXVtIHRyYW5zaXRpb24tYWxsIGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAnYm9yZGVyLWNyaXRpY2FsaXR5LXJlZCBmb2N1czpyaW5nLWNyaXRpY2FsaXR5LXJlZCc6IGhhc0Vycm9yKCksXG4gICAgICAgICAgICAgICAgICAgICdib3JkZXItZ3JheXNjYWxlLTMwIGZvY3VzOmJvcmRlci1wcmltYXJ5IGZvY3VzOnJpbmctcHJpbWFyeSc6ICFoYXNFcnJvcigpLFxuICAgICAgICAgICAgICAgICAgICAnY3Vyc29yLW5vdC1hbGxvd2VkIGJnLWdyYXlzY2FsZS0xMCB0ZXh0LWdyYXlzY2FsZS02MCc6IGRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgICAgICdiZy1ncmF5c2NhbGUtMCB0ZXh0LWdyYXlzY2FsZS0xMDAgZm9jdXM6b3V0bGluZS1ub25lJzogIWRpc2FibGVkKCksXG4gICAgICAgICAgICAgICAgfVwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlXT1cImlucHV0XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgW2F0dHIubWF4bGVuZ3RoXT1cIjFcIlxuICAgICAgICAgICAgICAgIFthdHRyLmlucHV0bW9kZV09XCJhbHBoYW51bWVyaWMoKSA/ICd0ZXh0JyA6ICdudW1lcmljJ1wiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJcbiAgICAgICAgICAgICAgICAgICAgYWxwaGFudW1lcmljKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGluX2NvZGVfY2hhcmFjdGVyX2luZGV4X29mX3RvdGFsJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICB8IHRyYW5zbGF0ZTogeyBpbmRleDogaSArIDEsIGxlbmd0aDogbGVuZ3RoKCkgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogKCdwbGF0Zm9ybS5hbmd1bGFyX2NvbXBvbmVudHMucGluX2NvZGVfZGlnaXRfaW5kZXhfb2ZfdG90YWwnXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHwgdHJhbnNsYXRlOiB7IGluZGV4OiBpICsgMSwgbGVuZ3RoOiBsZW5ndGgoKSB9KVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1kZXNjcmliZWRieV09XCJoZWxwVGV4dCgpID8gJ3Bpbi1oZWxwLXRleHQnIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgW2F0dHIuYXJpYS1yZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJvbklucHV0KGksICRldmVudClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bihpLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAocGFzdGUpPVwib25QYXN0ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoZm9jdXMpPVwib25Gb2N1cyhpKVwiXG4gICAgICAgICAgICAgICAgKGJsdXIpPVwib25CbHVyKGkpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cblxuICAgIEBpZiAoaGVscFRleHQoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBpZD1cInBpbi1oZWxwLXRleHRcIlxuICAgICAgICAgICAgY2xhc3M9XCJtdC1zbWFsbCB0ZXh0LXNtIHRleHQtZ3JheXNjYWxlLTYwXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgaGVscFRleHQoKSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG48L2Rpdj5cblxuIl19
|