@rotki/ui-library 2.8.1 → 2.8.2
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/dist/README.md +276 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +11 -0
- package/dist/_virtual/_plugin-vue_export-helper.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue.js +11 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue2.js +66 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue2.js.map +1 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue3.js +18 -0
- package/dist/components/accordions/accordion/RuiAccordion.vue3.js.map +1 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue.js +78 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue.js.map +1 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue2.js +5 -0
- package/dist/components/accordions/accordions/RuiAccordions.vue2.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue.d.ts +2 -2
- package/dist/components/alerts/RuiAlert.vue.js +11 -0
- package/dist/components/alerts/RuiAlert.vue.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue2.js +123 -0
- package/dist/components/alerts/RuiAlert.vue2.js.map +1 -0
- package/dist/components/alerts/RuiAlert.vue3.js +50 -0
- package/dist/components/alerts/RuiAlert.vue3.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue.d.ts +1 -1
- package/dist/components/buttons/button/RuiButton.vue.js +11 -0
- package/dist/components/buttons/button/RuiButton.vue.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue2.js +94 -0
- package/dist/components/buttons/button/RuiButton.vue2.js.map +1 -0
- package/dist/components/buttons/button/RuiButton.vue3.js +74 -0
- package/dist/components/buttons/button/RuiButton.vue3.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.d.ts +1 -1
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.js +11 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js +112 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue2.js.map +1 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js +58 -0
- package/dist/components/buttons/button-group/RuiButtonGroup.vue3.js.map +1 -0
- package/dist/components/calendar/RuiCalendar.vue.js +128 -0
- package/dist/components/calendar/RuiCalendar.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendar.vue3.js +6 -0
- package/dist/components/calendar/RuiCalendar.vue3.js.map +1 -0
- package/dist/components/calendar/RuiCalendarGrid.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarGrid.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarGrid.vue2.js +149 -0
- package/dist/components/calendar/RuiCalendarGrid.vue2.js.map +1 -0
- package/dist/components/calendar/RuiCalendarHeader.vue.d.ts +1 -1
- package/dist/components/calendar/RuiCalendarHeader.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarHeader.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarHeader.vue2.js +112 -0
- package/dist/components/calendar/RuiCalendarHeader.vue2.js.map +1 -0
- package/dist/components/calendar/RuiCalendarMenu.vue.d.ts +1 -1
- package/dist/components/calendar/RuiCalendarMenu.vue.js +8 -0
- package/dist/components/calendar/RuiCalendarMenu.vue.js.map +1 -0
- package/dist/components/calendar/RuiCalendarMenu.vue2.js +261 -0
- package/dist/components/calendar/RuiCalendarMenu.vue2.js.map +1 -0
- package/dist/components/calendar/state.js +25 -0
- package/dist/components/calendar/state.js.map +1 -0
- package/dist/components/cards/RuiCard.vue.js +11 -0
- package/dist/components/cards/RuiCard.vue.js.map +1 -0
- package/dist/components/cards/RuiCard.vue2.js +88 -0
- package/dist/components/cards/RuiCard.vue2.js.map +1 -0
- package/dist/components/cards/RuiCard.vue3.js +40 -0
- package/dist/components/cards/RuiCard.vue3.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue.js +11 -0
- package/dist/components/cards/RuiCardHeader.vue.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue2.js +51 -0
- package/dist/components/cards/RuiCardHeader.vue2.js.map +1 -0
- package/dist/components/cards/RuiCardHeader.vue3.js +27 -0
- package/dist/components/cards/RuiCardHeader.vue3.js.map +1 -0
- package/dist/components/chips/RuiChip.vue.d.ts +2 -2
- package/dist/components/chips/RuiChip.vue.js +11 -0
- package/dist/components/chips/RuiChip.vue.js.map +1 -0
- package/dist/components/chips/RuiChip.vue2.js +95 -0
- package/dist/components/chips/RuiChip.vue2.js.map +1 -0
- package/dist/components/chips/RuiChip.vue3.js +88 -0
- package/dist/components/chips/RuiChip.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorBoard.vue.js +11 -0
- package/dist/components/color-picker/RuiColorBoard.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue2.js +102 -0
- package/dist/components/color-picker/RuiColorBoard.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorBoard.vue3.js +18 -0
- package/dist/components/color-picker/RuiColorBoard.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorDisplay.vue.js +49 -0
- package/dist/components/color-picker/RuiColorDisplay.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorDisplay.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorDisplay.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue.js +11 -0
- package/dist/components/color-picker/RuiColorHue.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue2.js +89 -0
- package/dist/components/color-picker/RuiColorHue.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorHue.vue3.js +12 -0
- package/dist/components/color-picker/RuiColorHue.vue3.js.map +1 -0
- package/dist/components/color-picker/RuiColorInput.vue.d.ts +1 -1
- package/dist/components/color-picker/RuiColorInput.vue.js +139 -0
- package/dist/components/color-picker/RuiColorInput.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorInput.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorInput.vue2.js.map +1 -0
- package/dist/components/color-picker/RuiColorPicker.vue.js +72 -0
- package/dist/components/color-picker/RuiColorPicker.vue.js.map +1 -0
- package/dist/components/color-picker/RuiColorPicker.vue2.js +5 -0
- package/dist/components/color-picker/RuiColorPicker.vue2.js.map +1 -0
- package/dist/components/color-picker/utils.js +182 -0
- package/dist/components/color-picker/utils.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.d.ts +1 -1
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.js +11 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js +570 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue2.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js +66 -0
- package/dist/components/date-time-picker/RuiDateTimePicker.vue3.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.d.ts +2 -2
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js +120 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue.js.map +1 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js +5 -0
- package/dist/components/date-time-picker/RuiDateTimePickerMenu.vue2.js.map +1 -0
- package/dist/components/date-time-picker/timezones.js +601 -0
- package/dist/components/date-time-picker/timezones.js.map +1 -0
- package/dist/components/date-time-picker/types.js +17 -0
- package/dist/components/date-time-picker/types.js.map +1 -0
- package/dist/components/date-time-picker/use-input-handler.d.ts +2 -2
- package/dist/components/date-time-picker/use-input-handler.js +31 -0
- package/dist/components/date-time-picker/use-input-handler.js.map +1 -0
- package/dist/components/date-time-picker/use-keyboard-handler.d.ts +2 -2
- package/dist/components/date-time-picker/use-keyboard-handler.js +308 -0
- package/dist/components/date-time-picker/use-keyboard-handler.js.map +1 -0
- package/dist/components/date-time-picker/utils.d.ts +1 -1
- package/dist/components/date-time-picker/utils.js +19 -0
- package/dist/components/date-time-picker/utils.js.map +1 -0
- package/dist/components/divider/RuiDivider.vue.js +22 -0
- package/dist/components/divider/RuiDivider.vue.js.map +1 -0
- package/dist/components/divider/RuiDivider.vue2.js +5 -0
- package/dist/components/divider/RuiDivider.vue2.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.d.ts +2 -2
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js +11 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js +585 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue2.js.map +1 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js +60 -0
- package/dist/components/forms/auto-complete/RuiAutoComplete.vue3.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue.d.ts +1 -1
- package/dist/components/forms/checkbox/RuiCheckbox.vue.js +11 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js +137 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue2.js.map +1 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue3.js +54 -0
- package/dist/components/forms/checkbox/RuiCheckbox.vue3.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.js +11 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js +115 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue2.js.map +1 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js +54 -0
- package/dist/components/forms/radio-button/radio/RuiRadio.vue3.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.d.ts +1 -1
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js +11 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js +78 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue2.js.map +1 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js +9 -0
- package/dist/components/forms/radio-button/radio-group/RuiRadioGroup.vue3.js.map +1 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.d.ts +5 -5
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js +82 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue.js.map +1 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js +5 -0
- package/dist/components/forms/revealable-text-field/RuiRevealableTextField.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue.d.ts +2 -2
- package/dist/components/forms/select/RuiMenuSelect.vue.js +11 -0
- package/dist/components/forms/select/RuiMenuSelect.vue.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue2.js +297 -0
- package/dist/components/forms/select/RuiMenuSelect.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiMenuSelect.vue3.js +60 -0
- package/dist/components/forms/select/RuiMenuSelect.vue3.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue.js +11 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js +67 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue2.js.map +1 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue3.js +21 -0
- package/dist/components/forms/select/RuiSimpleSelect.vue3.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue.d.ts +1 -1
- package/dist/components/forms/slider/RuiSlider.vue.js +11 -0
- package/dist/components/forms/slider/RuiSlider.vue.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue2.js +165 -0
- package/dist/components/forms/slider/RuiSlider.vue2.js.map +1 -0
- package/dist/components/forms/slider/RuiSlider.vue3.js +80 -0
- package/dist/components/forms/slider/RuiSlider.vue3.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue.d.ts +1 -1
- package/dist/components/forms/switch/RuiSwitch.vue.js +11 -0
- package/dist/components/forms/switch/RuiSwitch.vue.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue2.js +89 -0
- package/dist/components/forms/switch/RuiSwitch.vue2.js.map +1 -0
- package/dist/components/forms/switch/RuiSwitch.vue3.js +54 -0
- package/dist/components/forms/switch/RuiSwitch.vue3.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue.d.ts +2 -2
- package/dist/components/forms/text-area/RuiTextArea.vue.js +11 -0
- package/dist/components/forms/text-area/RuiTextArea.vue.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue2.js +252 -0
- package/dist/components/forms/text-area/RuiTextArea.vue2.js.map +1 -0
- package/dist/components/forms/text-area/RuiTextArea.vue3.js +92 -0
- package/dist/components/forms/text-area/RuiTextArea.vue3.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue.d.ts +2 -2
- package/dist/components/forms/text-field/RuiTextField.vue.js +11 -0
- package/dist/components/forms/text-field/RuiTextField.vue.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue2.js +220 -0
- package/dist/components/forms/text-field/RuiTextField.vue2.js.map +1 -0
- package/dist/components/forms/text-field/RuiTextField.vue3.js +89 -0
- package/dist/components/forms/text-field/RuiTextField.vue3.js.map +1 -0
- package/dist/components/helpers/RuiFormTextDetail.vue.js +54 -0
- package/dist/components/helpers/RuiFormTextDetail.vue.js.map +1 -0
- package/dist/components/helpers/RuiFormTextDetail.vue2.js +5 -0
- package/dist/components/helpers/RuiFormTextDetail.vue2.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue.d.ts +2 -2
- package/dist/components/icons/RuiIcon.vue.js +11 -0
- package/dist/components/icons/RuiIcon.vue.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue2.js +60 -0
- package/dist/components/icons/RuiIcon.vue2.js.map +1 -0
- package/dist/components/icons/RuiIcon.vue3.js +29 -0
- package/dist/components/icons/RuiIcon.vue3.js.map +1 -0
- package/dist/components/index.d.ts +45 -45
- package/dist/components/index.js +92 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue.js +11 -0
- package/dist/components/loaders/RuiSkeletonBase.vue.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue2.js +22 -0
- package/dist/components/loaders/RuiSkeletonBase.vue2.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonBase.vue3.js +12 -0
- package/dist/components/loaders/RuiSkeletonBase.vue3.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue.d.ts +1 -1
- package/dist/components/loaders/RuiSkeletonLoader.vue.js +11 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js +47 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue2.js.map +1 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue3.js +33 -0
- package/dist/components/loaders/RuiSkeletonLoader.vue3.js.map +1 -0
- package/dist/components/logos/RuiLogo.vue.js +114 -0
- package/dist/components/logos/RuiLogo.vue.js.map +1 -0
- package/dist/components/logos/RuiLogo.vue2.js +5 -0
- package/dist/components/logos/RuiLogo.vue2.js.map +1 -0
- package/dist/components/logos/logo.svg.js +5 -0
- package/dist/components/logos/logo.svg.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue.d.ts +2 -2
- package/dist/components/overlays/badge/RuiBadge.vue.js +11 -0
- package/dist/components/overlays/badge/RuiBadge.vue.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue2.js +95 -0
- package/dist/components/overlays/badge/RuiBadge.vue2.js.map +1 -0
- package/dist/components/overlays/badge/RuiBadge.vue3.js +77 -0
- package/dist/components/overlays/badge/RuiBadge.vue3.js.map +1 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js +34 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue.js.map +1 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js +5 -0
- package/dist/components/overlays/bottom-sheet/RuiBottomSheet.vue2.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue.js +11 -0
- package/dist/components/overlays/dialog/RuiDialog.vue.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue2.js +172 -0
- package/dist/components/overlays/dialog/RuiDialog.vue2.js.map +1 -0
- package/dist/components/overlays/dialog/RuiDialog.vue3.js +18 -0
- package/dist/components/overlays/dialog/RuiDialog.vue3.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue.d.ts +1 -1
- package/dist/components/overlays/menu/RuiMenu.vue.js +11 -0
- package/dist/components/overlays/menu/RuiMenu.vue.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue2.js +221 -0
- package/dist/components/overlays/menu/RuiMenu.vue2.js.map +1 -0
- package/dist/components/overlays/menu/RuiMenu.vue3.js +21 -0
- package/dist/components/overlays/menu/RuiMenu.vue3.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js +11 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js +112 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue2.js.map +1 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js +28 -0
- package/dist/components/overlays/navigation-drawer/RuiNavigationDrawer.vue3.js.map +1 -0
- package/dist/components/overlays/notification/RuiNotification.vue.js +74 -0
- package/dist/components/overlays/notification/RuiNotification.vue.js.map +1 -0
- package/dist/components/overlays/notification/RuiNotification.vue2.js +5 -0
- package/dist/components/overlays/notification/RuiNotification.vue2.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue.d.ts +1 -1
- package/dist/components/overlays/tooltip/RuiTooltip.vue.js +11 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js +105 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue2.js.map +1 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue3.js +27 -0
- package/dist/components/overlays/tooltip/RuiTooltip.vue3.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue.d.ts +1 -1
- package/dist/components/progress/RuiProgress.vue.js +11 -0
- package/dist/components/progress/RuiProgress.vue.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue2.js +98 -0
- package/dist/components/progress/RuiProgress.vue2.js.map +1 -0
- package/dist/components/progress/RuiProgress.vue3.js +48 -0
- package/dist/components/progress/RuiProgress.vue3.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue.js +11 -0
- package/dist/components/steppers/RuiFooterStepper.vue.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue2.js +143 -0
- package/dist/components/steppers/RuiFooterStepper.vue2.js.map +1 -0
- package/dist/components/steppers/RuiFooterStepper.vue3.js +31 -0
- package/dist/components/steppers/RuiFooterStepper.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepper.vue.js +11 -0
- package/dist/components/steppers/RuiStepper.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue2.js +130 -0
- package/dist/components/steppers/RuiStepper.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepper.vue3.js +58 -0
- package/dist/components/steppers/RuiStepper.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepperCustomIcon.vue.js +11 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js +38 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue3.js +15 -0
- package/dist/components/steppers/RuiStepperCustomIcon.vue3.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue.d.ts +1 -1
- package/dist/components/steppers/RuiStepperIcon.vue.js +11 -0
- package/dist/components/steppers/RuiStepperIcon.vue.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue2.js +43 -0
- package/dist/components/steppers/RuiStepperIcon.vue2.js.map +1 -0
- package/dist/components/steppers/RuiStepperIcon.vue3.js +21 -0
- package/dist/components/steppers/RuiStepperIcon.vue3.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue.d.ts +2 -2
- package/dist/components/tables/RuiDataTable.vue.js +11 -0
- package/dist/components/tables/RuiDataTable.vue.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue2.js +943 -0
- package/dist/components/tables/RuiDataTable.vue2.js.map +1 -0
- package/dist/components/tables/RuiDataTable.vue3.js +79 -0
- package/dist/components/tables/RuiDataTable.vue3.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue.d.ts +1 -1
- package/dist/components/tables/RuiExpandButton.vue.js +11 -0
- package/dist/components/tables/RuiExpandButton.vue.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue2.js +42 -0
- package/dist/components/tables/RuiExpandButton.vue2.js.map +1 -0
- package/dist/components/tables/RuiExpandButton.vue3.js +15 -0
- package/dist/components/tables/RuiExpandButton.vue3.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue.js +11 -0
- package/dist/components/tables/RuiTableHead.vue.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue2.js +195 -0
- package/dist/components/tables/RuiTableHead.vue2.js.map +1 -0
- package/dist/components/tables/RuiTableHead.vue3.js +69 -0
- package/dist/components/tables/RuiTableHead.vue3.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue.js +11 -0
- package/dist/components/tables/RuiTablePagination.vue.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue2.js +196 -0
- package/dist/components/tables/RuiTablePagination.vue2.js.map +1 -0
- package/dist/components/tables/RuiTablePagination.vue3.js +28 -0
- package/dist/components/tables/RuiTablePagination.vue3.js.map +1 -0
- package/dist/components/tables/table_no_data_placeholder.svg.js +5 -0
- package/dist/components/tables/table_no_data_placeholder.svg.js.map +1 -0
- package/dist/components/tables/table_no_data_placeholder_dark.svg.js +5 -0
- package/dist/components/tables/table_no_data_placeholder_dark.svg.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue.d.ts +1 -1
- package/dist/components/tabs/tab/RuiTab.vue.js +11 -0
- package/dist/components/tabs/tab/RuiTab.vue.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue2.js +135 -0
- package/dist/components/tabs/tab/RuiTab.vue2.js.map +1 -0
- package/dist/components/tabs/tab/RuiTab.vue3.js +17 -0
- package/dist/components/tabs/tab/RuiTab.vue3.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue.js +11 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js +51 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue2.js.map +1 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue3.js +9 -0
- package/dist/components/tabs/tab-item/RuiTabItem.vue3.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue.js +11 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js +90 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue2.js.map +1 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue3.js +9 -0
- package/dist/components/tabs/tab-items/RuiTabItems.vue3.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue.d.ts +1 -1
- package/dist/components/tabs/tabs/RuiTabs.vue.js +11 -0
- package/dist/components/tabs/tabs/RuiTabs.vue.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue2.js +281 -0
- package/dist/components/tabs/tabs/RuiTabs.vue2.js.map +1 -0
- package/dist/components/tabs/tabs/RuiTabs.vue3.js +20 -0
- package/dist/components/tabs/tabs/RuiTabs.vue3.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue.d.ts +1 -1
- package/dist/components/time-picker/RuiTimePicker.vue.js +11 -0
- package/dist/components/time-picker/RuiTimePicker.vue.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue2.js +414 -0
- package/dist/components/time-picker/RuiTimePicker.vue2.js.map +1 -0
- package/dist/components/time-picker/RuiTimePicker.vue3.js +21 -0
- package/dist/components/time-picker/RuiTimePicker.vue3.js.map +1 -0
- package/dist/composables/breakpoint.js +49 -0
- package/dist/composables/breakpoint.js.map +1 -0
- package/dist/composables/defaults/table.js +23 -0
- package/dist/composables/defaults/table.js.map +1 -0
- package/dist/composables/dropdown-menu.js +218 -0
- package/dist/composables/dropdown-menu.js.map +1 -0
- package/dist/composables/forms/auto-complete/focus.js +71 -0
- package/dist/composables/forms/auto-complete/focus.js.map +1 -0
- package/dist/composables/forms/auto-complete/index.d.ts +4 -4
- package/dist/composables/forms/auto-complete/keyboard-navigation.js +133 -0
- package/dist/composables/forms/auto-complete/keyboard-navigation.js.map +1 -0
- package/dist/composables/forms/auto-complete/search.js +93 -0
- package/dist/composables/forms/auto-complete/search.js.map +1 -0
- package/dist/composables/forms/auto-complete/value.js +129 -0
- package/dist/composables/forms/auto-complete/value.js.map +1 -0
- package/dist/composables/icons.js +60 -0
- package/dist/composables/icons.js.map +1 -0
- package/dist/composables/index.d.ts +3 -3
- package/dist/composables/index.js +9 -0
- package/dist/composables/index.js.map +1 -0
- package/dist/composables/popper.js +164 -0
- package/dist/composables/popper.js.map +1 -0
- package/dist/composables/sticky-header.js +105 -0
- package/dist/composables/sticky-header.js.map +1 -0
- package/dist/composables/theme.d.ts +1 -1
- package/dist/composables/theme.js +75 -0
- package/dist/composables/theme.js.map +1 -0
- package/dist/composables/timeout-manager.js +21 -0
- package/dist/composables/timeout-manager.js.map +1 -0
- package/dist/composables/use-rui-i18n.js +24 -0
- package/dist/composables/use-rui-i18n.js.map +1 -0
- package/dist/consts/colors.js +50 -0
- package/dist/consts/colors.js.map +1 -0
- package/dist/consts/time-accuracy.js +9 -0
- package/dist/consts/time-accuracy.js.map +1 -0
- package/dist/i18n/keys.js +20 -0
- package/dist/i18n/keys.js.map +1 -0
- package/dist/icons/icons_1.js +2503 -0
- package/dist/icons/icons_1.js.map +1 -0
- package/dist/icons/icons_2.js +2503 -0
- package/dist/icons/icons_2.js.map +1 -0
- package/dist/icons/icons_3.js +2503 -0
- package/dist/icons/icons_3.js.map +1 -0
- package/dist/icons/icons_4.js +923 -0
- package/dist/icons/icons_4.js.map +1 -0
- package/dist/icons/index.d.ts +4 -4
- package/dist/icons/index.js +9 -0
- package/dist/icons/index.js.map +1 -0
- package/dist/index.d.ts +11 -11
- package/dist/index.js +1852 -0
- package/dist/index.js.map +1 -0
- package/dist/style.css +12852 -1
- package/dist/theme/index.js +185 -0
- package/dist/theme/index.js.map +1 -0
- package/dist/types/stepper.js +17 -0
- package/dist/types/stepper.js.map +1 -0
- package/dist/types/theme.js +27 -0
- package/dist/types/theme.js.map +1 -0
- package/dist/utils/assert.js +14 -0
- package/dist/utils/assert.js.map +1 -0
- package/dist/utils/blockie.js +79 -0
- package/dist/utils/blockie.js.map +1 -0
- package/dist/utils/form-text-detail.js +31 -0
- package/dist/utils/form-text-detail.js.map +1 -0
- package/dist/utils/generate-id.js +21 -0
- package/dist/utils/generate-id.js.map +1 -0
- package/dist/utils/helpers.js +51 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/is-equal.js +33 -0
- package/dist/utils/is-equal.js.map +1 -0
- package/dist/web-types.json +1 -1
- package/package.json +16 -14
- package/dist/components/index.es.js +0 -8030
- package/dist/composables/index-CC7A7CEh.js +0 -737
- package/dist/composables/index.es.js +0 -7
- package/dist/consts/colors-D563Ic3q.js +0 -48
- package/dist/consts/forms/auto-complete/index-l0sNRNKZ.js +0 -2
- package/dist/consts/time-accuracy-BnKA5GyT.js +0 -9
- package/dist/i18n/keys-CNGXWOJX.js +0 -20
- package/dist/icons/icons_1.es.js +0 -2004
- package/dist/icons/icons_2.es.js +0 -2004
- package/dist/icons/icons_3.es.js +0 -2004
- package/dist/icons/icons_4.es.js +0 -740
- package/dist/icons/index.es.js +0 -1697
- package/dist/index-D7l4d7N2.js +0 -54
- package/dist/index.es.js +0 -1757
- package/dist/theme/index.es.js +0 -177
- package/dist/types/index-CN6Ip1GL.js +0 -39
- package/dist/utils/index-DJ-ueLCs.js +0 -158
- package/dist/vendor-Hqbg5uCG.js +0 -1931
|
@@ -1,737 +0,0 @@
|
|
|
1
|
-
import { useWindowSize as ie, breakpointsTailwind as se, useBreakpoints as ce, createSharedComposable as ae, useColorMode as Q, useResizeObserver as te, isDefined as le, unrefElement as Z, useVirtualList as ue, useArrayMap as fe, watchOnce as he, watchDebounced as de, refDebounced as pe, useEventListener as X, useMutationObserver as me } from "@vueuse/core";
|
|
2
|
-
import { c as J, a as ge } from "../vendor-Hqbg5uCG.js";
|
|
3
|
-
import { a as H, c as ye } from "../utils/index-DJ-ueLCs.js";
|
|
4
|
-
import { computed as E, inject as Y, ref as L, watch as R, onMounted as ne, watchEffect as ve, nextTick as z, onUnmounted as be } from "vue";
|
|
5
|
-
import { get as e, set as p } from "@vueuse/shared";
|
|
6
|
-
import { LuChevronsUpDown as we, LuArrowUp as Se, LuArrowDown as Ae, LuArrowLeft as Ce, LuArrowRight as xe, LuChevronUp as Ie, LuChevronDown as Oe, LuChevronLeft as Le, LuChevronRight as Te, LuChevronsLeft as Ve, LuChevronsRight as Ee, LuCircleAlert as ke, LuCheck as Pe, LuCircleX as De, LuCircleCheck as je, LuCheckboxBlank as Me, LuCheckboxFill as Fe, LuCheckboxIndeterminateFill as Re, LuCheckboxBlankCircle as $e, LuCheckboxBlankCircleFill as Be, LuRadioButtonFill as _e, LuClock as He } from "../icons/icons_1.es.js";
|
|
7
|
-
import { LuEllipsis as ze, LuInfo as qe, LuEye as Ue, LuEyeOff as We } from "../icons/icons_2.es.js";
|
|
8
|
-
import { LuTriangleAlert as Ne, LuX as Ke } from "../icons/icons_4.es.js";
|
|
9
|
-
import { d as oe, T as D } from "../types/index-CN6Ip1GL.js";
|
|
10
|
-
function ut() {
|
|
11
|
-
const { width: r } = ie(), t = {
|
|
12
|
-
xs: 0,
|
|
13
|
-
...se
|
|
14
|
-
}, i = ce(t), a = Object.keys, h = a(t), C = h.map(
|
|
15
|
-
(c, n) => {
|
|
16
|
-
if (n < h.length - 1) {
|
|
17
|
-
const u = h[n + 1];
|
|
18
|
-
return H(u), [c, i.between(c, u)];
|
|
19
|
-
}
|
|
20
|
-
return [c, i[c]];
|
|
21
|
-
}
|
|
22
|
-
), b = C.map(([c, n]) => [
|
|
23
|
-
J(`is_${c}`),
|
|
24
|
-
n
|
|
25
|
-
]), m = h.map((c) => [
|
|
26
|
-
J(`is_${c}_and_up`),
|
|
27
|
-
i.greaterOrEqual(c)
|
|
28
|
-
]), x = h.map((c) => [
|
|
29
|
-
J(`is_${c}_and_down`),
|
|
30
|
-
i.smaller(c)
|
|
31
|
-
]), l = E(() => C.find((c) => e(c[1]))?.[0] || "");
|
|
32
|
-
return {
|
|
33
|
-
...Object.fromEntries(b),
|
|
34
|
-
...Object.fromEntries(m),
|
|
35
|
-
...Object.fromEntries(x),
|
|
36
|
-
name: l,
|
|
37
|
-
width: r
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
const Xe = [
|
|
41
|
-
we,
|
|
42
|
-
ze,
|
|
43
|
-
Ne,
|
|
44
|
-
Ke,
|
|
45
|
-
qe,
|
|
46
|
-
Se,
|
|
47
|
-
Ae,
|
|
48
|
-
Ce,
|
|
49
|
-
xe,
|
|
50
|
-
Ie,
|
|
51
|
-
Oe,
|
|
52
|
-
Le,
|
|
53
|
-
Te,
|
|
54
|
-
Ve,
|
|
55
|
-
Ee,
|
|
56
|
-
ke,
|
|
57
|
-
Ue,
|
|
58
|
-
We,
|
|
59
|
-
Pe,
|
|
60
|
-
De,
|
|
61
|
-
je,
|
|
62
|
-
Me,
|
|
63
|
-
Fe,
|
|
64
|
-
Re,
|
|
65
|
-
$e,
|
|
66
|
-
Be,
|
|
67
|
-
_e,
|
|
68
|
-
He
|
|
69
|
-
], Je = Symbol.for("rui:icons");
|
|
70
|
-
function ft(r) {
|
|
71
|
-
const t = r?.registeredIcons || [];
|
|
72
|
-
return {
|
|
73
|
-
registeredIcons: {
|
|
74
|
-
...Object.fromEntries(
|
|
75
|
-
[
|
|
76
|
-
...Xe,
|
|
77
|
-
...t
|
|
78
|
-
].map(({ components: i, name: a }) => [a, i])
|
|
79
|
-
)
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function ht() {
|
|
84
|
-
const r = Y(Je);
|
|
85
|
-
return H(r, "Could not find icons injection"), r;
|
|
86
|
-
}
|
|
87
|
-
const W = L({ ...oe }), dt = ae(() => {
|
|
88
|
-
const { state: r, store: t } = Q(), { state: i } = Q({
|
|
89
|
-
attribute: "data-theme"
|
|
90
|
-
});
|
|
91
|
-
R(r, (n) => {
|
|
92
|
-
p(i, n);
|
|
93
|
-
});
|
|
94
|
-
const a = E(() => e(t) === D.auto), h = E(() => e(r) === D.light), C = E(() => e(r) === D.dark), b = E(() => e(h) ? e(W).light : e(W).dark), m = (n) => {
|
|
95
|
-
p(t, n || D.auto);
|
|
96
|
-
}, x = () => {
|
|
97
|
-
e(a) ? m(D.light) : e(h) ? m(D.dark) : e(C) && m(D.auto);
|
|
98
|
-
}, l = (n) => {
|
|
99
|
-
p(W, n);
|
|
100
|
-
};
|
|
101
|
-
return {
|
|
102
|
-
config: W,
|
|
103
|
-
init: (n) => {
|
|
104
|
-
m(n.mode ?? D.auto), l(n.config ?? { ...oe }), typeof window < "u" && R([h, b], ([u, y]) => {
|
|
105
|
-
const o = /* @__PURE__ */ new Map();
|
|
106
|
-
Object.entries(y).forEach(([g, s]) => {
|
|
107
|
-
o.set(`--rui-${g}-darker`, s.darker), o.set(`--rui-${g}-lighter`, s.lighter), o.set(`--rui-${g}-main`, s.DEFAULT);
|
|
108
|
-
});
|
|
109
|
-
const f = u ? D.light : D.dark;
|
|
110
|
-
o.set("--rui-text-disabled", `var(--rui-${f}-text-disabled)`), o.set("--rui-text-primary", `var(--rui-${f}-text-primary)`), o.set("--rui-text-secondary", `var(--rui-${f}-text-secondary)`);
|
|
111
|
-
const v = document.documentElement.style;
|
|
112
|
-
o.forEach((g, s) => {
|
|
113
|
-
v.setProperty(s, g);
|
|
114
|
-
});
|
|
115
|
-
}, { immediate: !0 });
|
|
116
|
-
},
|
|
117
|
-
isAutoControlled: a,
|
|
118
|
-
isDark: C,
|
|
119
|
-
isLight: h,
|
|
120
|
-
setThemeConfig: l,
|
|
121
|
-
state: r,
|
|
122
|
-
store: t,
|
|
123
|
-
switchThemeScheme: m,
|
|
124
|
-
theme: b,
|
|
125
|
-
toggleThemeMode: x
|
|
126
|
-
};
|
|
127
|
-
});
|
|
128
|
-
function ee() {
|
|
129
|
-
const r = L(), t = () => {
|
|
130
|
-
e(r) && (clearTimeout(e(r)), p(r, void 0));
|
|
131
|
-
};
|
|
132
|
-
return { clear: t, create: (h, C) => {
|
|
133
|
-
t(), p(r, setTimeout(h, C));
|
|
134
|
-
}, isActive: () => !!e(r) };
|
|
135
|
-
}
|
|
136
|
-
const j = {
|
|
137
|
-
adaptive: !0,
|
|
138
|
-
gpuAcceleration: !0,
|
|
139
|
-
locked: !1,
|
|
140
|
-
offsetDistance: 8,
|
|
141
|
-
offsetSkid: 0,
|
|
142
|
-
overflowPadding: 8,
|
|
143
|
-
placement: "bottom",
|
|
144
|
-
resize: !0,
|
|
145
|
-
scroll: !0,
|
|
146
|
-
strategy: "absolute"
|
|
147
|
-
};
|
|
148
|
-
function pt(r, t = L(!1), i = L(0), a = L(0), h) {
|
|
149
|
-
const C = L(void 0), b = L(void 0), m = L(void 0), x = L(!1), l = L(!1), c = L(!1), n = ee(), u = ee(), y = () => {
|
|
150
|
-
p(l, !1);
|
|
151
|
-
}, o = async () => {
|
|
152
|
-
await e(m)?.update();
|
|
153
|
-
}, f = (O = !1) => {
|
|
154
|
-
e(t) || (u.clear(), p(c, !1), n.isActive() || (p(l, !0), n.create(() => {
|
|
155
|
-
p(x, !0);
|
|
156
|
-
}, O ? 0 : e(i))));
|
|
157
|
-
}, v = (O = !1) => {
|
|
158
|
-
e(t) || (n.clear(), u.isActive() || u.create(() => {
|
|
159
|
-
e(x) || y(), p(x, !1);
|
|
160
|
-
}, O ? 0 : e(a)));
|
|
161
|
-
}, g = () => {
|
|
162
|
-
p(c, !0);
|
|
163
|
-
}, s = E(() => {
|
|
164
|
-
const {
|
|
165
|
-
adaptive: O = j.adaptive,
|
|
166
|
-
gpuAcceleration: w = j.gpuAcceleration,
|
|
167
|
-
locked: M = j.locked,
|
|
168
|
-
offsetDistance: V = j.offsetDistance,
|
|
169
|
-
offsetSkid: B = j.offsetSkid,
|
|
170
|
-
overflowPadding: q = j.overflowPadding,
|
|
171
|
-
resize: U = j.resize,
|
|
172
|
-
scroll: _ = j.scroll
|
|
173
|
-
} = e(r);
|
|
174
|
-
return [{
|
|
175
|
-
enabled: !1,
|
|
176
|
-
name: "hide"
|
|
177
|
-
}, {
|
|
178
|
-
enabled: !M,
|
|
179
|
-
name: "flip"
|
|
180
|
-
}, {
|
|
181
|
-
name: "preventOverflow",
|
|
182
|
-
options: {
|
|
183
|
-
padding: q
|
|
184
|
-
}
|
|
185
|
-
}, {
|
|
186
|
-
name: "offset",
|
|
187
|
-
options: {
|
|
188
|
-
offset: [B, V]
|
|
189
|
-
}
|
|
190
|
-
}, {
|
|
191
|
-
name: "computeStyles",
|
|
192
|
-
options: {
|
|
193
|
-
adaptive: O,
|
|
194
|
-
gpuAcceleration: w
|
|
195
|
-
}
|
|
196
|
-
}, {
|
|
197
|
-
name: "eventListeners",
|
|
198
|
-
options: {
|
|
199
|
-
resize: U,
|
|
200
|
-
scroll: _
|
|
201
|
-
}
|
|
202
|
-
}, {
|
|
203
|
-
name: "arrow",
|
|
204
|
-
options: {
|
|
205
|
-
padding: 4
|
|
206
|
-
}
|
|
207
|
-
}];
|
|
208
|
-
}), A = E(() => {
|
|
209
|
-
const {
|
|
210
|
-
placement: O = j.placement,
|
|
211
|
-
strategy: w = j.strategy
|
|
212
|
-
} = e(r);
|
|
213
|
-
return {
|
|
214
|
-
modifiers: e(s),
|
|
215
|
-
placement: O,
|
|
216
|
-
strategy: w
|
|
217
|
-
};
|
|
218
|
-
});
|
|
219
|
-
function I() {
|
|
220
|
-
if (!e(b) || !e(C) && !e(h))
|
|
221
|
-
return null;
|
|
222
|
-
const O = Z(b), w = e(h) || Z(C);
|
|
223
|
-
return !(O instanceof HTMLElement) || !w ? null : { popperEl: O, referenceEl: w };
|
|
224
|
-
}
|
|
225
|
-
function T(O) {
|
|
226
|
-
const w = I();
|
|
227
|
-
if (!w)
|
|
228
|
-
return;
|
|
229
|
-
const { popperEl: M, referenceEl: V } = w, B = ge(V, M, e(A));
|
|
230
|
-
p(m, B), O(B.destroy);
|
|
231
|
-
}
|
|
232
|
-
return te([C, b], async () => {
|
|
233
|
-
le(m) && await e(m).update();
|
|
234
|
-
}), ne(() => {
|
|
235
|
-
ve((O) => {
|
|
236
|
-
T(O);
|
|
237
|
-
});
|
|
238
|
-
}), {
|
|
239
|
-
instance: m,
|
|
240
|
-
leavePending: c,
|
|
241
|
-
onClose: v,
|
|
242
|
-
onLeavePending: g,
|
|
243
|
-
onOpen: f,
|
|
244
|
-
onPopperLeave: y,
|
|
245
|
-
open: x,
|
|
246
|
-
popper: b,
|
|
247
|
-
popperEnter: l,
|
|
248
|
-
reference: C,
|
|
249
|
-
updatePopper: o
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
function Ye({
|
|
253
|
-
keyAttr: r,
|
|
254
|
-
textAttr: t
|
|
255
|
-
}) {
|
|
256
|
-
function i(h) {
|
|
257
|
-
return t ? typeof t == "function" ? t(h) : h[t]?.toString() : h?.toString();
|
|
258
|
-
}
|
|
259
|
-
function a(h) {
|
|
260
|
-
return r ? h[r] : h;
|
|
261
|
-
}
|
|
262
|
-
return {
|
|
263
|
-
getIdentifier: a,
|
|
264
|
-
getText: i
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
function mt({
|
|
268
|
-
appendWidth: r,
|
|
269
|
-
autoFocus: t,
|
|
270
|
-
autoSelectFirst: i,
|
|
271
|
-
dense: a,
|
|
272
|
-
disabled: h = L(!1),
|
|
273
|
-
hideSelected: C,
|
|
274
|
-
itemHeight: b = 48,
|
|
275
|
-
keyAttr: m,
|
|
276
|
-
menuRef: x,
|
|
277
|
-
options: l,
|
|
278
|
-
overscan: c = 5,
|
|
279
|
-
prependWidth: n,
|
|
280
|
-
setValue: u,
|
|
281
|
-
textAttr: y,
|
|
282
|
-
value: o
|
|
283
|
-
}) {
|
|
284
|
-
const f = E(() => {
|
|
285
|
-
const d = e(l);
|
|
286
|
-
return C ? d.filter((S) => !_(S)) : d;
|
|
287
|
-
}), { getIdentifier: v, getText: g } = Ye({
|
|
288
|
-
keyAttr: m,
|
|
289
|
-
textAttr: y
|
|
290
|
-
}), { containerProps: s, list: A, scrollTo: I, wrapperProps: T } = ue(
|
|
291
|
-
f,
|
|
292
|
-
{
|
|
293
|
-
itemHeight: b,
|
|
294
|
-
overscan: c
|
|
295
|
-
}
|
|
296
|
-
), O = fe(A, ({ data: d, index: S }) => ({ _index: S, item: d })), w = L(!1), M = E(() => {
|
|
297
|
-
const d = e(o);
|
|
298
|
-
return !m || !d ? d : Array.isArray(d) ? d.map((S) => S[m]) : d[m];
|
|
299
|
-
}), V = L(e(i) ? 0 : -1), B = E(() => {
|
|
300
|
-
const d = { max: 0, min: 0 }, S = 30, P = 1.5, k = e(a) ? 12 : 13;
|
|
301
|
-
e(f).forEach((K) => {
|
|
302
|
-
const F = g(K)?.toString()?.length ?? 0;
|
|
303
|
-
d.min === 0 && d.max === 0 ? (d.min = F, d.max = F) : F < d.min ? d.min = F : F > d.max && (d.max = F);
|
|
304
|
-
});
|
|
305
|
-
const $ = d.max - d.min;
|
|
306
|
-
function G(K) {
|
|
307
|
-
const F = (n ? n + 0.5 : 0) + (r ? r + 0.5 : 0);
|
|
308
|
-
return `${Math.min(K * k / 16 + P + F, S)}rem`;
|
|
309
|
-
}
|
|
310
|
-
return $ <= 5 ? G(d.max) : G(d.min + $ / 2);
|
|
311
|
-
});
|
|
312
|
-
function q(d = !1) {
|
|
313
|
-
p(w, d);
|
|
314
|
-
}
|
|
315
|
-
function U(d) {
|
|
316
|
-
const S = e(o), P = Array.isArray(S) ? S : S ? [S] : [];
|
|
317
|
-
return P.length === 0 ? -1 : P.findIndex((k) => m ? k[m] === d[m] : k === d);
|
|
318
|
-
}
|
|
319
|
-
function _(d) {
|
|
320
|
-
return U(d) !== -1;
|
|
321
|
-
}
|
|
322
|
-
async function N(d = !1) {
|
|
323
|
-
const S = e(V);
|
|
324
|
-
S > -1 && await z(() => {
|
|
325
|
-
if (e(x)?.parentElement) {
|
|
326
|
-
const k = e(x).getElementsByClassName("highlighted")[0];
|
|
327
|
-
if (k)
|
|
328
|
-
k.scrollIntoView?.({ behavior: d ? "smooth" : "auto", block: "nearest" }), e(t) && "focus" in k && typeof k.focus == "function" && k?.focus();
|
|
329
|
-
else if (I(S), e(t)) {
|
|
330
|
-
const $ = e(x).getElementsByClassName("highlighted")[0];
|
|
331
|
-
$ && "focus" in $ && typeof $.focus == "function" && $.focus();
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
});
|
|
335
|
-
}
|
|
336
|
-
async function re(d) {
|
|
337
|
-
await z(() => {
|
|
338
|
-
if (d) {
|
|
339
|
-
const S = e(o);
|
|
340
|
-
if (Array.isArray(S) && S.length > 0 || S) {
|
|
341
|
-
const P = e(f).findIndex(_);
|
|
342
|
-
P > -1 && p(V, P);
|
|
343
|
-
}
|
|
344
|
-
he(A, async () => {
|
|
345
|
-
await N();
|
|
346
|
-
});
|
|
347
|
-
}
|
|
348
|
-
});
|
|
349
|
-
}
|
|
350
|
-
return R([w, h], async ([d, S]) => {
|
|
351
|
-
await re(d);
|
|
352
|
-
}), R(V, async (d, S) => {
|
|
353
|
-
d !== S && await N(!0);
|
|
354
|
-
}), R(f, async () => {
|
|
355
|
-
e(V) !== -1 ? e(i) ? (p(V, 0), await N()) : (p(V, -1), I(0)) : I(0);
|
|
356
|
-
}), {
|
|
357
|
-
applyHighlighted: () => {
|
|
358
|
-
if (!u || !e(w))
|
|
359
|
-
return;
|
|
360
|
-
const d = e(V);
|
|
361
|
-
if (d === -1)
|
|
362
|
-
return;
|
|
363
|
-
const S = e(f).find((P, k) => d === k);
|
|
364
|
-
S && u(S);
|
|
365
|
-
},
|
|
366
|
-
containerProps: s,
|
|
367
|
-
getIdentifier: v,
|
|
368
|
-
getText: g,
|
|
369
|
-
highlightedIndex: V,
|
|
370
|
-
isActiveItem: _,
|
|
371
|
-
isOpen: w,
|
|
372
|
-
itemIndexInValue: U,
|
|
373
|
-
menuWidth: B,
|
|
374
|
-
moveHighlight: (d) => {
|
|
375
|
-
if (!e(w)) {
|
|
376
|
-
q(!0);
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
let S = e(V);
|
|
380
|
-
S += d ? -1 : 1;
|
|
381
|
-
const k = e(f).length;
|
|
382
|
-
S >= k ? p(V, 0) : S < 0 ? p(V, k - 1) : p(V, S);
|
|
383
|
-
},
|
|
384
|
-
optionsWithSelectedHidden: f,
|
|
385
|
-
renderedData: O,
|
|
386
|
-
toggle: q,
|
|
387
|
-
valueKey: M,
|
|
388
|
-
wrapperProps: T
|
|
389
|
-
};
|
|
390
|
-
}
|
|
391
|
-
function gt(r, t) {
|
|
392
|
-
const i = E(
|
|
393
|
-
() => e(t.activatorFocusedWithin) || e(t.menuWrapperFocusedWithin)
|
|
394
|
-
), a = E(() => {
|
|
395
|
-
const m = e(i), x = e(r.disabled), l = e(r.shouldApplyValueAsSearch), c = e(t.internalSearch);
|
|
396
|
-
return (!m || x) && !l ? "w-0 h-0" : c ? "flex-1 min-w-[4rem]" : "flex-1 min-w-0";
|
|
397
|
-
});
|
|
398
|
-
async function h() {
|
|
399
|
-
await z(() => {
|
|
400
|
-
p(t.searchInputFocused, !0);
|
|
401
|
-
});
|
|
402
|
-
}
|
|
403
|
-
async function C() {
|
|
404
|
-
await z(() => {
|
|
405
|
-
e(t.activatorFocused) || p(t.searchInputFocused, !0);
|
|
406
|
-
});
|
|
407
|
-
}
|
|
408
|
-
function b() {
|
|
409
|
-
p(t.focusedValueIndex, -1), e(r.shouldApplyValueAsSearch) && e(t.textInput)?.select(), e(t.isOpen) || p(t.justOpened, !0);
|
|
410
|
-
}
|
|
411
|
-
return de(i, (m) => {
|
|
412
|
-
if (!m) {
|
|
413
|
-
p(t.isOpen, !1);
|
|
414
|
-
const x = e(r.customValue), l = e(t.filteredOptions), c = e(t.internalSearch);
|
|
415
|
-
x && l.length === 0 && c && t.setSearchAsValue(), e(r.shouldApplyValueAsSearch) || t.updateInternalSearch();
|
|
416
|
-
}
|
|
417
|
-
}, {
|
|
418
|
-
debounce: 200,
|
|
419
|
-
maxWait: 400
|
|
420
|
-
}), {
|
|
421
|
-
anyFocused: i,
|
|
422
|
-
inputClass: a,
|
|
423
|
-
onActivatorFocused: C,
|
|
424
|
-
onInputFocused: b,
|
|
425
|
-
setInputFocus: h
|
|
426
|
-
};
|
|
427
|
-
}
|
|
428
|
-
function yt(r, t) {
|
|
429
|
-
const i = L(-1), a = L(/* @__PURE__ */ new Map());
|
|
430
|
-
function h(l) {
|
|
431
|
-
p(i, l);
|
|
432
|
-
}
|
|
433
|
-
function C(l, c) {
|
|
434
|
-
const n = e(r.multiple), u = e(t.internalSearch);
|
|
435
|
-
if (!n || u.length > 0)
|
|
436
|
-
return;
|
|
437
|
-
l.preventDefault();
|
|
438
|
-
const y = e(t.value).length;
|
|
439
|
-
let o = e(i);
|
|
440
|
-
if (o === -1) {
|
|
441
|
-
p(i, c ? 0 : y - 1);
|
|
442
|
-
return;
|
|
443
|
-
}
|
|
444
|
-
o += c ? 1 : -1, o < 0 || o >= y ? (p(i, -1), p(t.searchInputFocused, !0)) : p(i, o);
|
|
445
|
-
}
|
|
446
|
-
function b(l) {
|
|
447
|
-
const c = e(t.filteredOptions), n = e(t.highlightedIndex), u = e(t.isOpen), y = e(r.customValue), o = e(r.multiple), f = e(t.value), v = e(t.internalSearch);
|
|
448
|
-
if (y && v && u) {
|
|
449
|
-
let g = !1;
|
|
450
|
-
if (n > -1 && n < c.length) {
|
|
451
|
-
const s = c[n];
|
|
452
|
-
typeof s == "string" ? g = s === v : s && typeof s == "object" && (g = (s.label || s.value || "") === v);
|
|
453
|
-
}
|
|
454
|
-
if (!g) {
|
|
455
|
-
t.setSearchAsValue(), o || p(t.isOpen, !1), l.preventDefault();
|
|
456
|
-
return;
|
|
457
|
-
}
|
|
458
|
-
}
|
|
459
|
-
if (c.length > 0 && n > -1 && u)
|
|
460
|
-
t.applyHighlighted(), l.preventDefault();
|
|
461
|
-
else if (c.length === 0 && y && v)
|
|
462
|
-
t.setSearchAsValue(), o || p(t.isOpen, !1), l.preventDefault();
|
|
463
|
-
else if (!u && f.length === 0)
|
|
464
|
-
p(t.isOpen, !0), l.preventDefault();
|
|
465
|
-
else {
|
|
466
|
-
const s = e(t.activator)?.closest("form");
|
|
467
|
-
s && s.dispatchEvent(new Event("submit"));
|
|
468
|
-
}
|
|
469
|
-
}
|
|
470
|
-
function m(l) {
|
|
471
|
-
const c = e(t.isOpen), n = e(t.filteredOptions), u = e(t.highlightedIndex), y = e(r.multiple);
|
|
472
|
-
c && n.length > 0 && u > -1 && !y && (t.applyHighlighted(), l.preventDefault());
|
|
473
|
-
}
|
|
474
|
-
function x() {
|
|
475
|
-
const l = e(t.internalSearch), n = e(t.value).length, u = e(r.multiple);
|
|
476
|
-
!l && n > 0 && (u ? p(i, n - 1) : t.clear());
|
|
477
|
-
}
|
|
478
|
-
return R(t.value, () => {
|
|
479
|
-
h(-1), e(a).clear();
|
|
480
|
-
}), R(i, async (l) => {
|
|
481
|
-
const c = e(r.multiple);
|
|
482
|
-
l === -1 || !c || await z(() => {
|
|
483
|
-
const n = e(a);
|
|
484
|
-
let u = n.get(l);
|
|
485
|
-
if (!u) {
|
|
486
|
-
const o = e(t.activator)?.querySelector(`[data-index="${l}"]`);
|
|
487
|
-
o && (u = o, n.set(l, o));
|
|
488
|
-
}
|
|
489
|
-
u && "focus" in u && typeof u.focus == "function" && u.focus();
|
|
490
|
-
});
|
|
491
|
-
}), {
|
|
492
|
-
focusedValueIndex: i,
|
|
493
|
-
moveSelectedValueHighlight: C,
|
|
494
|
-
onEnter: b,
|
|
495
|
-
onInputDeletePressed: x,
|
|
496
|
-
onTab: m,
|
|
497
|
-
setValueFocus: h
|
|
498
|
-
};
|
|
499
|
-
}
|
|
500
|
-
function vt(r, t, i) {
|
|
501
|
-
const a = L(""), h = pe(a, 50), C = L(!1), b = /* @__PURE__ */ new Map(), m = (n) => {
|
|
502
|
-
if (b.has(n))
|
|
503
|
-
return b.get(n);
|
|
504
|
-
const u = ye(n);
|
|
505
|
-
return b.set(n, u), u;
|
|
506
|
-
}, x = E(() => {
|
|
507
|
-
const n = e(h), u = e(r);
|
|
508
|
-
if (e(i.noFilter) || !n || e(C))
|
|
509
|
-
return u;
|
|
510
|
-
const o = e(i.keyAttr), f = e(i.textAttr), v = e(i.filter), g = m(n), s = v || ((w) => {
|
|
511
|
-
if (!w)
|
|
512
|
-
return !1;
|
|
513
|
-
const M = [o ? m(w[o]) : w.toString()];
|
|
514
|
-
return f && typeof w == "object" && M.push(m(w[f])), M.some((V) => m(V).includes(g));
|
|
515
|
-
}), A = u.filter((w) => s(w, n)), I = e(i.customValue), T = e(i.hideCustomValue);
|
|
516
|
-
return !I || T || !n || A.some((w) => w ? (f ? w[f] : w.toString()) === n : !1) ? A : [l(n, {
|
|
517
|
-
keyAttr: o,
|
|
518
|
-
returnObject: e(i.returnObject),
|
|
519
|
-
textAttr: f
|
|
520
|
-
}), ...A];
|
|
521
|
-
});
|
|
522
|
-
function l(n, u) {
|
|
523
|
-
const { keyAttr: y, returnObject: o, textAttr: f } = u;
|
|
524
|
-
return !y || o ? n : {
|
|
525
|
-
[y]: n,
|
|
526
|
-
...f ? { [f]: n } : {}
|
|
527
|
-
};
|
|
528
|
-
}
|
|
529
|
-
function c(n = "") {
|
|
530
|
-
p(t, n), p(a, n);
|
|
531
|
-
}
|
|
532
|
-
return R(t, (n) => {
|
|
533
|
-
p(a, n);
|
|
534
|
-
}, { immediate: !0 }), be(() => {
|
|
535
|
-
b.clear();
|
|
536
|
-
}), {
|
|
537
|
-
debouncedInternalSearch: h,
|
|
538
|
-
filteredOptions: x,
|
|
539
|
-
internalSearch: a,
|
|
540
|
-
justOpened: C,
|
|
541
|
-
textValueToProperValue: (n, u = !1) => l(n, {
|
|
542
|
-
keyAttr: e(i.keyAttr),
|
|
543
|
-
returnObject: u || e(i.returnObject),
|
|
544
|
-
textAttr: e(i.textAttr)
|
|
545
|
-
}),
|
|
546
|
-
updateInternalSearch: c
|
|
547
|
-
};
|
|
548
|
-
}
|
|
549
|
-
function bt(r, t, i, a) {
|
|
550
|
-
const h = E(() => Array.isArray(e(r))), C = E(() => {
|
|
551
|
-
const o = /* @__PURE__ */ new Map(), f = e(t);
|
|
552
|
-
for (const v of f)
|
|
553
|
-
o.set(a.getIdentifier(v), v);
|
|
554
|
-
return o;
|
|
555
|
-
});
|
|
556
|
-
function b(o) {
|
|
557
|
-
return o ? Array.isArray(o) ? o : [o] : [];
|
|
558
|
-
}
|
|
559
|
-
function m(o, f, v, g) {
|
|
560
|
-
const s = [];
|
|
561
|
-
s.length = o.length;
|
|
562
|
-
let A = 0;
|
|
563
|
-
for (const I of o) {
|
|
564
|
-
const T = a.getIdentifier(I), O = f.get(T);
|
|
565
|
-
O ? s[A++] = O : v && (s[A++] = a.textValueToProperValue(I, g));
|
|
566
|
-
}
|
|
567
|
-
return s.length = A, s;
|
|
568
|
-
}
|
|
569
|
-
function x(o, f, v, g) {
|
|
570
|
-
const s = [];
|
|
571
|
-
s.length = o.length;
|
|
572
|
-
let A = 0;
|
|
573
|
-
for (const I of o) {
|
|
574
|
-
const T = f.get(I);
|
|
575
|
-
T ? s[A++] = T : v && (s[A++] = a.textValueToProperValue(I, g));
|
|
576
|
-
}
|
|
577
|
-
return s.length = A, s;
|
|
578
|
-
}
|
|
579
|
-
function l(o, f, v, g, s) {
|
|
580
|
-
const A = Array.isArray(o), I = b(o), T = m(I, f, g, v);
|
|
581
|
-
if (A || T.length === 0)
|
|
582
|
-
return s && a.updateInternalSearch(), T;
|
|
583
|
-
const O = T[0];
|
|
584
|
-
return H(O), s && a.updateInternalSearch(a.getText(O)), [O];
|
|
585
|
-
}
|
|
586
|
-
function c(o, f, v, g, s) {
|
|
587
|
-
const A = b(o), I = x(A, f, g, v);
|
|
588
|
-
if (s)
|
|
589
|
-
if (I.length > 0) {
|
|
590
|
-
const T = I[0];
|
|
591
|
-
H(T), a.updateInternalSearch(a.getText(T));
|
|
592
|
-
} else
|
|
593
|
-
a.updateInternalSearch();
|
|
594
|
-
return I;
|
|
595
|
-
}
|
|
596
|
-
function n(o) {
|
|
597
|
-
p(r, o);
|
|
598
|
-
}
|
|
599
|
-
function u(o) {
|
|
600
|
-
const f = e(i.keyAttr), v = e(i.returnObject), g = f && !v ? o.map((s) => s[f]) : o;
|
|
601
|
-
return e(h) ? n(g) : g.length === 0 ? n(void 0) : n(g[0]);
|
|
602
|
-
}
|
|
603
|
-
const y = E({
|
|
604
|
-
get: () => {
|
|
605
|
-
const o = e(r), f = e(i.keyAttr), v = e(i.returnObject) ?? !1, g = e(i.customValue) ?? !1, s = e(C), A = e(a.shouldApplyValueAsSearch) && !e(a.isOpen);
|
|
606
|
-
return f && v ? l(
|
|
607
|
-
o,
|
|
608
|
-
s,
|
|
609
|
-
v,
|
|
610
|
-
g,
|
|
611
|
-
A
|
|
612
|
-
) : c(
|
|
613
|
-
o,
|
|
614
|
-
s,
|
|
615
|
-
v,
|
|
616
|
-
g,
|
|
617
|
-
A
|
|
618
|
-
);
|
|
619
|
-
},
|
|
620
|
-
set: (o) => {
|
|
621
|
-
u(o);
|
|
622
|
-
}
|
|
623
|
-
});
|
|
624
|
-
return {
|
|
625
|
-
setSelected: u,
|
|
626
|
-
value: y
|
|
627
|
-
};
|
|
628
|
-
}
|
|
629
|
-
const Ge = Symbol("rui:i18n");
|
|
630
|
-
function wt() {
|
|
631
|
-
const r = Y(Ge, void 0), t = (a, h) => {
|
|
632
|
-
if (r?.te(a))
|
|
633
|
-
return r?.t(a, h);
|
|
634
|
-
};
|
|
635
|
-
return { t: (a, h, C) => typeof h == "string" ? t(a) ?? h ?? a : t(a, h) ?? C ?? a };
|
|
636
|
-
}
|
|
637
|
-
const Qe = Symbol.for("rui:table");
|
|
638
|
-
function St(r) {
|
|
639
|
-
return {
|
|
640
|
-
globalItemsPerPage: !1,
|
|
641
|
-
itemsPerPage: L(10),
|
|
642
|
-
limits: [10, 25, 50, 100],
|
|
643
|
-
stickyOffset: L(0),
|
|
644
|
-
...r
|
|
645
|
-
};
|
|
646
|
-
}
|
|
647
|
-
function At() {
|
|
648
|
-
const r = Y(Qe);
|
|
649
|
-
if (!r)
|
|
650
|
-
throw new Error("Could not find rui table options injection");
|
|
651
|
-
return r;
|
|
652
|
-
}
|
|
653
|
-
function Ct(r = L(!1), t) {
|
|
654
|
-
const i = L(null), a = L(null), h = L(!1), C = -0.5, b = {
|
|
655
|
-
head: ":scope > thead[data-id=head-main]",
|
|
656
|
-
headClone: ":scope > thead[data-id=head-clone]",
|
|
657
|
-
row: ":scope > tbody > tr:not([hidden])",
|
|
658
|
-
th: ":scope > th"
|
|
659
|
-
}, m = () => {
|
|
660
|
-
const l = e(i);
|
|
661
|
-
if (!e(r) || !l)
|
|
662
|
-
return;
|
|
663
|
-
const c = l.querySelector(
|
|
664
|
-
`${b.headClone} > tr`
|
|
665
|
-
), n = l.querySelector(`${b.head} > tr`) ?? null, u = () => {
|
|
666
|
-
const y = n?.querySelectorAll(
|
|
667
|
-
b.th
|
|
668
|
-
);
|
|
669
|
-
c?.querySelectorAll(b.th)?.forEach((f, v) => {
|
|
670
|
-
te(f, (g) => {
|
|
671
|
-
const s = g[0];
|
|
672
|
-
H(s);
|
|
673
|
-
const A = s.target.getBoundingClientRect(), I = y?.item(v);
|
|
674
|
-
I && (I.style.width = `${A.width}px`);
|
|
675
|
-
});
|
|
676
|
-
});
|
|
677
|
-
};
|
|
678
|
-
me(c, (y) => {
|
|
679
|
-
for (const o of y)
|
|
680
|
-
(o.type === "childList" || o.type === "attributes") && u();
|
|
681
|
-
}, {
|
|
682
|
-
attributes: !0,
|
|
683
|
-
childList: !0,
|
|
684
|
-
subtree: !0
|
|
685
|
-
}), u();
|
|
686
|
-
}, x = () => {
|
|
687
|
-
const l = e(i);
|
|
688
|
-
if (!e(r) || !l)
|
|
689
|
-
return;
|
|
690
|
-
const c = l.getBoundingClientRect(), n = l.querySelector(
|
|
691
|
-
b.headClone
|
|
692
|
-
), u = n?.getBoundingClientRect(), y = l.querySelector(b.head) ?? null, o = y?.getBoundingClientRect();
|
|
693
|
-
if (!c || !u || !y || !n || !o)
|
|
694
|
-
return;
|
|
695
|
-
const {
|
|
696
|
-
height: f,
|
|
697
|
-
left: v,
|
|
698
|
-
width: g
|
|
699
|
-
} = u, { bottom: s, top: A } = c, I = e(t) ?? 0;
|
|
700
|
-
y.style.width = `${g}px`;
|
|
701
|
-
const T = l.querySelectorAll(b.row), O = T.item(T.length - 1)?.getBoundingClientRect();
|
|
702
|
-
if (A <= I && s > I && T.length > 1) {
|
|
703
|
-
p(h, !0), y.style.left = `${v + C}px`;
|
|
704
|
-
const w = O?.height ?? 0;
|
|
705
|
-
s <= w + f + I ? y.style.top = `${s - w - f}px` : y.style.top = `${I}px`;
|
|
706
|
-
} else
|
|
707
|
-
p(h, !1), y.style.left = `${C}px`, y.style.top = "0";
|
|
708
|
-
};
|
|
709
|
-
return ne(() => {
|
|
710
|
-
x(), X(a, "scroll", x), X(document.body, "scroll", x), X(window, "resize", x), m();
|
|
711
|
-
}), {
|
|
712
|
-
stick: h,
|
|
713
|
-
table: i,
|
|
714
|
-
tableScroller: a
|
|
715
|
-
};
|
|
716
|
-
}
|
|
717
|
-
export {
|
|
718
|
-
Je as I,
|
|
719
|
-
Ge as R,
|
|
720
|
-
Qe as T,
|
|
721
|
-
pt as a,
|
|
722
|
-
dt as b,
|
|
723
|
-
Ye as c,
|
|
724
|
-
vt as d,
|
|
725
|
-
bt as e,
|
|
726
|
-
mt as f,
|
|
727
|
-
yt as g,
|
|
728
|
-
gt as h,
|
|
729
|
-
wt as i,
|
|
730
|
-
At as j,
|
|
731
|
-
Ct as k,
|
|
732
|
-
St as l,
|
|
733
|
-
ft as m,
|
|
734
|
-
ut as n,
|
|
735
|
-
ht as u
|
|
736
|
-
};
|
|
737
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgtQ0M3QTdDRWguanMiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9icmVha3BvaW50LnRzIiwiLi4vLi4vc3JjL2NvbXBvc2FibGVzL2ljb25zLnRzIiwiLi4vLi4vc3JjL2NvbXBvc2FibGVzL3RoZW1lLnRzIiwiLi4vLi4vc3JjL2NvbXBvc2FibGVzL3RpbWVvdXQtbWFuYWdlci50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9wb3BwZXIudHMiLCIuLi8uLi9zcmMvY29tcG9zYWJsZXMvZHJvcGRvd24tbWVudS50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9mb3Jtcy9hdXRvLWNvbXBsZXRlL2ZvY3VzLnRzIiwiLi4vLi4vc3JjL2NvbXBvc2FibGVzL2Zvcm1zL2F1dG8tY29tcGxldGUva2V5Ym9hcmQtbmF2aWdhdGlvbi50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9mb3Jtcy9hdXRvLWNvbXBsZXRlL3NlYXJjaC50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9mb3Jtcy9hdXRvLWNvbXBsZXRlL3ZhbHVlLnRzIiwiLi4vLi4vc3JjL2NvbXBvc2FibGVzL3VzZS1ydWktaTE4bi50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9kZWZhdWx0cy90YWJsZS50cyIsIi4uLy4uL3NyYy9jb21wb3NhYmxlcy9zdGlja3ktaGVhZGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGJyZWFrcG9pbnRzVGFpbHdpbmQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IHsgY2FtZWxDYXNlIH0gZnJvbSAnc2N1bGUnO1xuaW1wb3J0IHsgYXNzZXJ0IH0gZnJvbSAnQC91dGlscy9hc3NlcnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlQnJlYWtwb2ludCgpIHtcbiAgY29uc3QgeyB3aWR0aCB9ID0gdXNlV2luZG93U2l6ZSgpO1xuXG4gIGNvbnN0IGJyZWFrcG9pbnRMaXN0ID0ge1xuICAgIHhzOiAwLFxuICAgIC4uLmJyZWFrcG9pbnRzVGFpbHdpbmQsXG4gIH0gYXMgY29uc3Q7XG5cbiAgdHlwZSBCcmVha3BvaW50ID0ga2V5b2YgdHlwZW9mIGJyZWFrcG9pbnRMaXN0O1xuXG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gdXNlQnJlYWtwb2ludHMoYnJlYWtwb2ludExpc3QpO1xuXG4gIGNvbnN0IGdldEtleXMgPSBPYmplY3Qua2V5cyBhcyA8VCBleHRlbmRzIG9iamVjdD4ob2JqOiBUKSA9PiBBcnJheTxrZXlvZiBUPjtcblxuICBjb25zdCBsaXN0ID0gZ2V0S2V5cyhicmVha3BvaW50TGlzdCk7XG5cbiAgY29uc3QgcmF3U2l6ZXM6IFtCcmVha3BvaW50LCBSZWY8Ym9vbGVhbj5dW10gPSBsaXN0Lm1hcChcbiAgICAoYnJlYWtwb2ludCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA8IGxpc3QubGVuZ3RoIC0gMSkge1xuICAgICAgICBjb25zdCBuZXh0QnJlYWtwb2ludCA9IGxpc3RbaW5kZXggKyAxXTtcbiAgICAgICAgYXNzZXJ0KG5leHRCcmVha3BvaW50KTtcbiAgICAgICAgcmV0dXJuIFticmVha3BvaW50LCBicmVha3BvaW50cy5iZXR3ZWVuKGJyZWFrcG9pbnQsIG5leHRCcmVha3BvaW50KV07XG4gICAgICB9XG4gICAgICByZXR1cm4gW2JyZWFrcG9pbnQsIGJyZWFrcG9pbnRzW2JyZWFrcG9pbnRdXTtcbiAgICB9LFxuICApO1xuXG4gIGNvbnN0IHNpemVzID0gcmF3U2l6ZXMubWFwKChbYnJlYWtwb2ludCwgdmFsdWVdKSA9PiBbXG4gICAgY2FtZWxDYXNlKGBpc18ke2JyZWFrcG9pbnR9YCksXG4gICAgdmFsdWUsXG4gIF0pO1xuXG4gIGNvbnN0IHNpemVzVXAgPSBsaXN0Lm1hcChicmVha3BvaW50ID0+IFtcbiAgICBjYW1lbENhc2UoYGlzXyR7YnJlYWtwb2ludH1fYW5kX3VwYCksXG4gICAgYnJlYWtwb2ludHMuZ3JlYXRlck9yRXF1YWwoYnJlYWtwb2ludCksXG4gIF0pO1xuXG4gIGNvbnN0IHNpemVzRG93biA9IGxpc3QubWFwKGJyZWFrcG9pbnQgPT4gW1xuICAgIGNhbWVsQ2FzZShgaXNfJHticmVha3BvaW50fV9hbmRfZG93bmApLFxuICAgIGJyZWFrcG9pbnRzLnNtYWxsZXIoYnJlYWtwb2ludCksXG4gIF0pO1xuXG4gIGNvbnN0IG5hbWUgPSBjb21wdXRlZCgoKSA9PiByYXdTaXplcy5maW5kKGl0ZW0gPT4gZ2V0KGl0ZW1bMV0pKT8uWzBdIHx8ICcnKTtcblxuICByZXR1cm4ge1xuICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhzaXplcyksXG4gICAgLi4uT2JqZWN0LmZyb21FbnRyaWVzKHNpemVzVXApLFxuICAgIC4uLk9iamVjdC5mcm9tRW50cmllcyhzaXplc0Rvd24pLFxuICAgIG5hbWUsXG4gICAgd2lkdGgsXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IEluamVjdGlvbktleSB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgdHlwZSB7IEdlbmVyYXRlZEljb24gfSBmcm9tICdAL3R5cGVzL2ljb25zJztcbmltcG9ydCB7XG4gIEx1QXJyb3dEb3duLFxuICBMdUFycm93TGVmdCxcbiAgTHVBcnJvd1JpZ2h0LFxuICBMdUFycm93VXAsXG4gIEx1Q2hlY2ssXG4gIEx1Q2hlY2tib3hCbGFuayxcbiAgTHVDaGVja2JveEJsYW5rQ2lyY2xlLFxuICBMdUNoZWNrYm94QmxhbmtDaXJjbGVGaWxsLFxuICBMdUNoZWNrYm94RmlsbCxcbiAgTHVDaGVja2JveEluZGV0ZXJtaW5hdGVGaWxsLFxuICBMdUNoZXZyb25Eb3duLFxuICBMdUNoZXZyb25MZWZ0LFxuICBMdUNoZXZyb25SaWdodCxcbiAgTHVDaGV2cm9uc0xlZnQsXG4gIEx1Q2hldnJvbnNSaWdodCxcbiAgTHVDaGV2cm9uc1VwRG93bixcbiAgTHVDaGV2cm9uVXAsXG4gIEx1Q2lyY2xlQWxlcnQsXG4gIEx1Q2lyY2xlQ2hlY2ssXG4gIEx1Q2lyY2xlWCxcbiAgTHVDbG9jayxcbiAgTHVFbGxpcHNpcyxcbiAgTHVFeWUsXG4gIEx1RXllT2ZmLFxuICBMdUluZm8sXG4gIEx1UmFkaW9CdXR0b25GaWxsLFxuICBMdVRyaWFuZ2xlQWxlcnQsXG4gIEx1WCxcbn0gZnJvbSAnQC9pY29ucyc7XG5cbmNvbnN0IHJlcXVpcmVkSWNvbnM6IEdlbmVyYXRlZEljb25bXSA9IFtcbiAgTHVDaGV2cm9uc1VwRG93bixcbiAgTHVFbGxpcHNpcyxcbiAgTHVUcmlhbmdsZUFsZXJ0LFxuICBMdVgsXG4gIEx1SW5mbyxcbiAgTHVBcnJvd1VwLFxuICBMdUFycm93RG93bixcbiAgTHVBcnJvd0xlZnQsXG4gIEx1QXJyb3dSaWdodCxcbiAgTHVDaGV2cm9uVXAsXG4gIEx1Q2hldnJvbkRvd24sXG4gIEx1Q2hldnJvbkxlZnQsXG4gIEx1Q2hldnJvblJpZ2h0LFxuICBMdUNoZXZyb25zTGVmdCxcbiAgTHVDaGV2cm9uc1JpZ2h0LFxuICBMdUNpcmNsZUFsZXJ0LFxuICBMdUV5ZSxcbiAgTHVFeWVPZmYsXG4gIEx1Q2hlY2ssXG4gIEx1Q2lyY2xlWCxcbiAgTHVDaXJjbGVDaGVjayxcbiAgTHVDaGVja2JveEJsYW5rLFxuICBMdUNoZWNrYm94RmlsbCxcbiAgTHVDaGVja2JveEluZGV0ZXJtaW5hdGVGaWxsLFxuICBMdUNoZWNrYm94QmxhbmtDaXJjbGUsXG4gIEx1Q2hlY2tib3hCbGFua0NpcmNsZUZpbGwsXG4gIEx1UmFkaW9CdXR0b25GaWxsLFxuICBMdUNsb2NrLFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBJY29uc09wdGlvbnMge1xuICByZWdpc3RlcmVkSWNvbnM6IEdlbmVyYXRlZEljb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVc2VJY29uc1JldHVybiB7XG4gIHJlZ2lzdGVyZWRJY29uczogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgW3N0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPl1bXT4+O1xufVxuXG5leHBvcnQgY29uc3QgSWNvbnNTeW1ib2w6IEluamVjdGlvbktleTxVc2VJY29uc1JldHVybj4gPSBTeW1ib2wuZm9yKCdydWk6aWNvbnMnKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUljb25EZWZhdWx0cyhvcHRpb25zPzogUGFydGlhbDxJY29uc09wdGlvbnM+KTogVXNlSWNvbnNSZXR1cm4ge1xuICBjb25zdCBpY29uc1RvQWRkID0gb3B0aW9ucz8ucmVnaXN0ZXJlZEljb25zIHx8IFtdO1xuICByZXR1cm4ge1xuICAgIHJlZ2lzdGVyZWRJY29uczoge1xuICAgICAgLi4uT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBbXG4gICAgICAgICAgLi4ucmVxdWlyZWRJY29ucyxcbiAgICAgICAgICAuLi5pY29uc1RvQWRkLFxuICAgICAgICBdLm1hcCgoeyBjb21wb25lbnRzLCBuYW1lIH0pID0+IFtuYW1lLCBjb21wb25lbnRzXSksXG4gICAgICApLFxuICAgIH0sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VJY29ucygpOiBVc2VJY29uc1JldHVybiB7XG4gIGNvbnN0IGljb25zID0gaW5qZWN0KEljb25zU3ltYm9sKTtcbiAgYXNzZXJ0KGljb25zLCAnQ291bGQgbm90IGZpbmQgaWNvbnMgaW5qZWN0aW9uJyk7XG4gIHJldHVybiBpY29ucztcbn1cbiIsImltcG9ydCB7IHVzZUNvbG9yTW9kZSB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgeyBjb21wdXRlZCwgdHlwZSBDb21wdXRlZFJlZiwgdHlwZSBSZWYsIHJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQge1xuICB0eXBlIENvbG9ySW50ZW5zaXR5LFxuICBkZWZhdWx0VGhlbWUsXG4gIHR5cGUgSW5pdFRoZW1lT3B0aW9ucyxcbiAgdHlwZSBUaGVtZUNvbmZpZyxcbiAgdHlwZSBUaGVtZUNvbnRlbnQsXG4gIHR5cGUgVGhlbWVEYXRhLFxuICBUaGVtZU1vZGUsXG59IGZyb20gJ0AvdHlwZXMvdGhlbWUnO1xuXG5jb25zdCBjb25maWc6IFJlZjxUaGVtZUNvbmZpZz4gPSByZWYoeyAuLi5kZWZhdWx0VGhlbWUgfSk7XG5cbi8qKlxuICogVGhlbWUgbWFuYWdlclxuICogQHJldHVybnMge1RoZW1lQ29udGVudH1cbiAqL1xuZXhwb3J0IGNvbnN0IHVzZVJvdGtpVGhlbWUgPSBjcmVhdGVTaGFyZWRDb21wb3NhYmxlPCgpID0+IFRoZW1lQ29udGVudD4oKCkgPT4ge1xuICBjb25zdCB7IHN0YXRlLCBzdG9yZSB9ID0gdXNlQ29sb3JNb2RlPFRoZW1lTW9kZT4oKTtcblxuICBjb25zdCB7IHN0YXRlOiBhdHRyaWJ1dGVTdGF0ZSB9ID0gdXNlQ29sb3JNb2RlPFRoZW1lTW9kZT4oe1xuICAgIGF0dHJpYnV0ZTogJ2RhdGEtdGhlbWUnLFxuICB9KTtcblxuICAvLyBLZWVwIGF0dHJpYnV0ZVN0YXRlIGluIHN5bmMgd2l0aCBzdGF0ZVxuICB3YXRjaChzdGF0ZSwgKG5ld1N0YXRlKSA9PiB7XG4gICAgc2V0KGF0dHJpYnV0ZVN0YXRlLCBuZXdTdGF0ZSk7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiB3aGV0aGVyIHRoZSBjdXJyZW50IHRoZW1lIGlzIGNvbnRyb2xsZWQgYnkgc3lzdGVtIG9yIHVzZXJcbiAgICogQHR5cGUge0NvbXB1dGVkUmVmPGJvb2xlYW4+fVxuICAgKi9cbiAgY29uc3QgaXNBdXRvQ29udHJvbGxlZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiBnZXQoc3RvcmUpID09PSBUaGVtZU1vZGUuYXV0byk7XG5cbiAgLyoqXG4gICAqIHRydXRoeSBmb3IgbGlnaHQgdGhlbWVcbiAgICogQHR5cGUge0NvbXB1dGVkUmVmPGJvb2xlYW4+fVxuICAgKi9cbiAgY29uc3QgaXNMaWdodDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj4gPSBjb21wdXRlZCgoKSA9PiBnZXQoc3RhdGUpID09PSBUaGVtZU1vZGUubGlnaHQpO1xuXG4gIC8qKlxuICAgKiB0cnV0aHkgZm9yIGRhcmsgdGhlbWVcbiAgICogQHR5cGUge0NvbXB1dGVkUmVmPGJvb2xlYW4+fVxuICAgKi9cbiAgY29uc3QgaXNEYXJrOiBDb21wdXRlZFJlZjxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IGdldChzdGF0ZSkgPT09IFRoZW1lTW9kZS5kYXJrKTtcblxuICAvKipcbiAgICogY3VycmVudCB0aGVtZSBiYXNlZCBvbiBsaWdodCBvciBkYXJrIG1vZGVcbiAgICogQHR5cGUge0NvbXB1dGVkUmVmPFRoZW1lRGF0YT59XG4gICAqL1xuICBjb25zdCB0aGVtZTogQ29tcHV0ZWRSZWY8VGhlbWVEYXRhPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBpZiAoZ2V0KGlzTGlnaHQpKVxuICAgICAgcmV0dXJuIGdldChjb25maWcpLmxpZ2h0O1xuXG4gICAgcmV0dXJuIGdldChjb25maWcpLmRhcms7XG4gIH0pO1xuXG4gIC8qKlxuICAgKiBzd2l0Y2ggdGhlbWUgdGhyb3VnaCBkYXJrL2xpZ2h0L2F1dG8gbW9kZXNcbiAgICogQHBhcmFtIHtUaGVtZU1vZGV9IG1vZGVcbiAgICovXG4gIGNvbnN0IHN3aXRjaFRoZW1lU2NoZW1lID0gKG1vZGU6IFRoZW1lTW9kZSkgPT4ge1xuICAgIHNldChzdG9yZSwgbW9kZSB8fCBUaGVtZU1vZGUuYXV0byk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHRvZ2dsZSBiZXR3ZWVuIGF1dG98bGlnaHR8ZGFya1xuICAgKi9cbiAgY29uc3QgdG9nZ2xlVGhlbWVNb2RlID0gKCkgPT4ge1xuICAgIGlmIChnZXQoaXNBdXRvQ29udHJvbGxlZCkpXG4gICAgICBzd2l0Y2hUaGVtZVNjaGVtZShUaGVtZU1vZGUubGlnaHQpO1xuICAgIGVsc2UgaWYgKGdldChpc0xpZ2h0KSlcbiAgICAgIHN3aXRjaFRoZW1lU2NoZW1lKFRoZW1lTW9kZS5kYXJrKTtcbiAgICBlbHNlIGlmIChnZXQoaXNEYXJrKSlcbiAgICAgIHN3aXRjaFRoZW1lU2NoZW1lKFRoZW1lTW9kZS5hdXRvKTtcbiAgfTtcblxuICAvKipcbiAgICogc2V0cyB0aGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRoZW1lXG4gICAqIEBwYXJhbSB7VGhlbWVDb25maWd9IG5ld0NvbmZpZ1xuICAgKi9cbiAgY29uc3Qgc2V0VGhlbWVDb25maWcgPSAobmV3Q29uZmlnOiBUaGVtZUNvbmZpZykgPT4ge1xuICAgIHNldChjb25maWcsIG5ld0NvbmZpZyk7XG4gIH07XG5cbiAgLyoqXG4gICAqIHRoZW1lIGluaXRpYWxpemVyLCBtdXN0IGJlIGNhbGxlZCBvbmNlIGZyb20gdGhlIGFwcCdzIGVudHJ5XG4gICAqIEBwYXJhbSB7SW5pdFRoZW1lT3B0aW9uc30gb3B0aW9uc1xuICAgKi9cbiAgY29uc3QgaW5pdCA9IChvcHRpb25zOiBJbml0VGhlbWVPcHRpb25zKSA9PiB7XG4gICAgc3dpdGNoVGhlbWVTY2hlbWUob3B0aW9ucy5tb2RlID8/IFRoZW1lTW9kZS5hdXRvKTtcbiAgICBzZXRUaGVtZUNvbmZpZyhvcHRpb25zLmNvbmZpZyA/PyB7IC4uLmRlZmF1bHRUaGVtZSB9KTtcblxuICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgd2F0Y2goW2lzTGlnaHQsIHRoZW1lXSwgKFtpc0xpZ2h0LCB0aGVtZV0pID0+IHtcbiAgICAgICAgY29uc3Qgc3R5bGVWYXJpYWJsZXMgPSBuZXcgTWFwKCk7XG5cbiAgICAgICAgLy8gQ29tcHV0ZSBjb250ZXh0IHZhcmlhYmxlc1xuICAgICAgICBPYmplY3QuZW50cmllcyh0aGVtZSkuZm9yRWFjaCgoW2NvbnRleHQsIGNvbnRleHRPYmplY3RdOiBbc3RyaW5nLCBDb2xvckludGVuc2l0eV0pID0+IHtcbiAgICAgICAgICBzdHlsZVZhcmlhYmxlcy5zZXQoYC0tcnVpLSR7Y29udGV4dH0tZGFya2VyYCwgY29udGV4dE9iamVjdC5kYXJrZXIpO1xuICAgICAgICAgIHN0eWxlVmFyaWFibGVzLnNldChgLS1ydWktJHtjb250ZXh0fS1saWdodGVyYCwgY29udGV4dE9iamVjdC5saWdodGVyKTtcbiAgICAgICAgICBzdHlsZVZhcmlhYmxlcy5zZXQoYC0tcnVpLSR7Y29udGV4dH0tbWFpbmAsIGNvbnRleHRPYmplY3QuREVGQVVMVCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIC8vIERldGVybWluZSB0aGUgdGhlbWUgbW9kZVxuICAgICAgICBjb25zdCBzdGF0ZSA9IGlzTGlnaHQgPyBUaGVtZU1vZGUubGlnaHQgOiBUaGVtZU1vZGUuZGFyaztcblxuICAgICAgICAvLyBBZGQgdGV4dCBjb2xvciB2YXJpYWJsZXNcbiAgICAgICAgc3R5bGVWYXJpYWJsZXMuc2V0KCctLXJ1aS10ZXh0LWRpc2FibGVkJywgYHZhcigtLXJ1aS0ke3N0YXRlfS10ZXh0LWRpc2FibGVkKWApO1xuICAgICAgICBzdHlsZVZhcmlhYmxlcy5zZXQoJy0tcnVpLXRleHQtcHJpbWFyeScsIGB2YXIoLS1ydWktJHtzdGF0ZX0tdGV4dC1wcmltYXJ5KWApO1xuICAgICAgICBzdHlsZVZhcmlhYmxlcy5zZXQoJy0tcnVpLXRleHQtc2Vjb25kYXJ5JywgYHZhcigtLXJ1aS0ke3N0YXRlfS10ZXh0LXNlY29uZGFyeSlgKTtcblxuICAgICAgICAvLyBBcHBseSBhbGwgc3R5bGUgdmFyaWFibGVzIGluIG9uZSBvcGVyYXRpb25cbiAgICAgICAgY29uc3Qgcm9vdFN0eWxlID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlO1xuICAgICAgICBzdHlsZVZhcmlhYmxlcy5mb3JFYWNoKCh2YWx1ZSwgdmFyaWFibGVOYW1lKSA9PiB7XG4gICAgICAgICAgcm9vdFN0eWxlLnNldFByb3BlcnR5KHZhcmlhYmxlTmFtZSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGNvbmZpZyxcbiAgICBpbml0LFxuICAgIGlzQXV0b0NvbnRyb2xsZWQsXG4gICAgaXNEYXJrLFxuICAgIGlzTGlnaHQsXG4gICAgc2V0VGhlbWVDb25maWcsXG4gICAgc3RhdGUsXG4gICAgc3RvcmUsXG4gICAgc3dpdGNoVGhlbWVTY2hlbWUsXG4gICAgdGhlbWUsXG4gICAgdG9nZ2xlVGhlbWVNb2RlLFxuICB9O1xufSk7XG4iLCJpbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gJ0B2dWV1c2Uvc2hhcmVkJztcbmltcG9ydCB7IHJlZiB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUaW1lb3V0TWFuYWdlcigpIHtcbiAgY29uc3QgdGltZW91dCA9IHJlZjxOb2RlSlMuVGltZW91dD4oKTtcblxuICBjb25zdCBjbGVhciA9ICgpID0+IHtcbiAgICBpZiAoZ2V0KHRpbWVvdXQpKSB7XG4gICAgICBjbGVhclRpbWVvdXQoZ2V0KHRpbWVvdXQpKTtcbiAgICAgIHNldCh0aW1lb3V0LCB1bmRlZmluZWQpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBjcmVhdGUgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQsIGRlbGF5OiBudW1iZXIpID0+IHtcbiAgICBjbGVhcigpO1xuICAgIHNldCh0aW1lb3V0LCBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkpO1xuICB9O1xuXG4gIGNvbnN0IGlzQWN0aXZlID0gKCkgPT4gISFnZXQodGltZW91dCk7XG5cbiAgcmV0dXJuIHsgY2xlYXIsIGNyZWF0ZSwgaXNBY3RpdmUgfTtcbn1cbiIsImltcG9ydCB7IGNyZWF0ZVBvcHBlciwgdHlwZSBJbnN0YW5jZSwgdHlwZSBQbGFjZW1lbnQsIHR5cGUgUG9zaXRpb25pbmdTdHJhdGVneSwgdHlwZSBWaXJ0dWFsRWxlbWVudCB9IGZyb20gJ0Bwb3BwZXJqcy9jb3JlJztcbmltcG9ydCB7IHR5cGUgTWF5YmVFbGVtZW50LCB1bnJlZkVsZW1lbnQgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IHsgb25Nb3VudGVkLCB0eXBlIFJlZiwgcmVmLCB3YXRjaEVmZmVjdCB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyB1c2VUaW1lb3V0TWFuYWdlciB9IGZyb20gJy4vdGltZW91dC1tYW5hZ2VyJztcblxuZXhwb3J0IGludGVyZmFjZSBQb3BwZXJPcHRpb25zIHtcbiAgbG9ja2VkPzogYm9vbGVhbjtcbiAgb3ZlcmZsb3dQYWRkaW5nPzogbnVtYmVyO1xuICBvZmZzZXREaXN0YW5jZT86IG51bWJlcjtcbiAgb2Zmc2V0U2tpZD86IG51bWJlcjtcbiAgcGxhY2VtZW50PzogUGxhY2VtZW50O1xuICBzdHJhdGVneT86IFBvc2l0aW9uaW5nU3RyYXRlZ3k7XG4gIGdwdUFjY2VsZXJhdGlvbj86IGJvb2xlYW47XG4gIGFkYXB0aXZlPzogYm9vbGVhbjtcbiAgc2Nyb2xsPzogYm9vbGVhbjtcbiAgcmVzaXplPzogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfUE9QUEVSX09QVElPTlM6IFBvcHBlck9wdGlvbnMgPSB7XG4gIGFkYXB0aXZlOiB0cnVlLFxuICBncHVBY2NlbGVyYXRpb246IHRydWUsXG4gIGxvY2tlZDogZmFsc2UsXG4gIG9mZnNldERpc3RhbmNlOiA4LFxuICBvZmZzZXRTa2lkOiAwLFxuICBvdmVyZmxvd1BhZGRpbmc6IDgsXG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIHJlc2l6ZTogdHJ1ZSxcbiAgc2Nyb2xsOiB0cnVlLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbn07XG5cbmludGVyZmFjZSBVc2VQb3BwZXJSZXR1cm4ge1xuICBpbnN0YW5jZTogUmVmPEluc3RhbmNlIHwgdW5kZWZpbmVkPjtcbiAgbGVhdmVQZW5kaW5nOiBSZWY8Ym9vbGVhbj47XG4gIG9uQ2xvc2U6IChpbW1lZGlhdGU/OiBib29sZWFuKSA9PiB2b2lkO1xuICBvbkxlYXZlUGVuZGluZzogKCkgPT4gdm9pZDtcbiAgb25PcGVuOiAoaW1tZWRpYXRlPzogYm9vbGVhbikgPT4gdm9pZDtcbiAgb25Qb3BwZXJMZWF2ZTogKCkgPT4gdm9pZDtcbiAgb3BlbjogUmVmPGJvb2xlYW4sIGJvb2xlYW4+O1xuICBwb3BwZXI6IFJlZjxNYXliZUVsZW1lbnQ+O1xuICBwb3BwZXJFbnRlcjogUmVmPGJvb2xlYW4+O1xuICByZWZlcmVuY2U6IFJlZjxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD47XG4gIHVwZGF0ZVBvcHBlcjogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZVBvcHBlcihcbiAgb3B0aW9uczogUmVmPFBvcHBlck9wdGlvbnM+LFxuICBkaXNhYmxlZDogUmVmPGJvb2xlYW4+ID0gcmVmKGZhbHNlKSxcbiAgb3BlbkRlbGF5OiBSZWY8bnVtYmVyPiA9IHJlZigwKSxcbiAgY2xvc2VEZWxheTogUmVmPG51bWJlcj4gPSByZWYoMCksXG4gIHZpcnR1YWxSZWZlcmVuY2U/OiBSZWY8RWxlbWVudCB8IFZpcnR1YWxFbGVtZW50Pixcbik6IFVzZVBvcHBlclJldHVybiB7XG4gIGNvbnN0IHJlZmVyZW5jZSA9IHJlZjxIVE1MRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgcG9wcGVyID0gcmVmPE1heWJlRWxlbWVudCB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgY29uc3QgaW5zdGFuY2UgPSByZWY8SW5zdGFuY2UgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG4gIGNvbnN0IG9wZW4gPSByZWY8Ym9vbGVhbj4oZmFsc2UpO1xuICBjb25zdCBwb3BwZXJFbnRlciA9IHJlZjxib29sZWFuPihmYWxzZSk7XG4gIGNvbnN0IGxlYXZlUGVuZGluZyA9IHJlZjxib29sZWFuPihmYWxzZSk7XG5cbiAgY29uc3Qgb3BlblRpbWVvdXRNYW5hZ2VyID0gdXNlVGltZW91dE1hbmFnZXIoKTtcbiAgY29uc3QgY2xvc2VUaW1lb3V0TWFuYWdlciA9IHVzZVRpbWVvdXRNYW5hZ2VyKCk7XG5cbiAgY29uc3Qgb25Qb3BwZXJMZWF2ZSA9ICgpID0+IHtcbiAgICBzZXQocG9wcGVyRW50ZXIsIGZhbHNlKTtcbiAgfTtcblxuICBjb25zdCB1cGRhdGVQb3BwZXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgYXdhaXQgZ2V0KGluc3RhbmNlKT8udXBkYXRlKCk7XG4gIH07XG5cbiAgY29uc3Qgb25PcGVuID0gKGltbWVkaWF0ZSA9IGZhbHNlKSA9PiB7XG4gICAgaWYgKGdldChkaXNhYmxlZCkpXG4gICAgICByZXR1cm47XG5cbiAgICBjbG9zZVRpbWVvdXRNYW5hZ2VyLmNsZWFyKCk7XG5cbiAgICBzZXQobGVhdmVQZW5kaW5nLCBmYWxzZSk7XG4gICAgaWYgKCFvcGVuVGltZW91dE1hbmFnZXIuaXNBY3RpdmUoKSkge1xuICAgICAgc2V0KHBvcHBlckVudGVyLCB0cnVlKTtcblxuICAgICAgb3BlblRpbWVvdXRNYW5hZ2VyLmNyZWF0ZSgoKSA9PiB7XG4gICAgICAgIHNldChvcGVuLCB0cnVlKTtcbiAgICAgIH0sIGltbWVkaWF0ZSA/IDAgOiBnZXQob3BlbkRlbGF5KSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2xvc2UgPSAoaW1tZWRpYXRlID0gZmFsc2UpID0+IHtcbiAgICBpZiAoZ2V0KGRpc2FibGVkKSlcbiAgICAgIHJldHVybjtcblxuICAgIG9wZW5UaW1lb3V0TWFuYWdlci5jbGVhcigpO1xuXG4gICAgaWYgKCFjbG9zZVRpbWVvdXRNYW5hZ2VyLmlzQWN0aXZlKCkpIHtcbiAgICAgIGNsb3NlVGltZW91dE1hbmFnZXIuY3JlYXRlKCgpID0+IHtcbiAgICAgICAgaWYgKCFnZXQob3BlbikpXG4gICAgICAgICAgb25Qb3BwZXJMZWF2ZSgpO1xuXG4gICAgICAgIHNldChvcGVuLCBmYWxzZSk7XG4gICAgICB9LCBpbW1lZGlhdGUgPyAwIDogZ2V0KGNsb3NlRGVsYXkpKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25MZWF2ZVBlbmRpbmcgPSAoKSA9PiB7XG4gICAgc2V0KGxlYXZlUGVuZGluZywgdHJ1ZSk7XG4gIH07XG5cbiAgY29uc3QgbW9kaWZpZXJzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGFkYXB0aXZlID0gREVGQVVMVF9QT1BQRVJfT1BUSU9OUy5hZGFwdGl2ZSxcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IERFRkFVTFRfUE9QUEVSX09QVElPTlMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgbG9ja2VkID0gREVGQVVMVF9QT1BQRVJfT1BUSU9OUy5sb2NrZWQsXG4gICAgICBvZmZzZXREaXN0YW5jZSA9IERFRkFVTFRfUE9QUEVSX09QVElPTlMub2Zmc2V0RGlzdGFuY2UsXG4gICAgICBvZmZzZXRTa2lkID0gREVGQVVMVF9QT1BQRVJfT1BUSU9OUy5vZmZzZXRTa2lkLFxuICAgICAgb3ZlcmZsb3dQYWRkaW5nID0gREVGQVVMVF9QT1BQRVJfT1BUSU9OUy5vdmVyZmxvd1BhZGRpbmcsXG4gICAgICByZXNpemUgPSBERUZBVUxUX1BPUFBFUl9PUFRJT05TLnJlc2l6ZSxcbiAgICAgIHNjcm9sbCA9IERFRkFVTFRfUE9QUEVSX09QVElPTlMuc2Nyb2xsLFxuICAgIH0gPSBnZXQob3B0aW9ucyk7XG5cbiAgICByZXR1cm4gW3tcbiAgICAgIGVuYWJsZWQ6IGZhbHNlLFxuICAgICAgbmFtZTogJ2hpZGUnLFxuICAgIH0sIHtcbiAgICAgIGVuYWJsZWQ6ICFsb2NrZWQsXG4gICAgICBuYW1lOiAnZmxpcCcsXG4gICAgfSwge1xuICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIHBhZGRpbmc6IG92ZXJmbG93UGFkZGluZyxcbiAgICAgIH0sXG4gICAgfSwge1xuICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICBvcHRpb25zOiB7XG4gICAgICAgIG9mZnNldDogW29mZnNldFNraWQsIG9mZnNldERpc3RhbmNlXSxcbiAgICAgIH0sXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICBhZGFwdGl2ZSxcbiAgICAgICAgZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgfSxcbiAgICB9LCB7XG4gICAgICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICAgICAgb3B0aW9uczoge1xuICAgICAgICByZXNpemUsXG4gICAgICAgIHNjcm9sbCxcbiAgICAgIH0sXG4gICAgfSwge1xuICAgICAgbmFtZTogJ2Fycm93JyxcbiAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgcGFkZGluZzogNCxcbiAgICAgIH0sXG4gICAgfV07XG4gIH0pO1xuXG4gIGNvbnN0IHBvcHBlckNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwbGFjZW1lbnQgPSBERUZBVUxUX1BPUFBFUl9PUFRJT05TLnBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5ID0gREVGQVVMVF9QT1BQRVJfT1BUSU9OUy5zdHJhdGVneSxcbiAgICB9ID0gZ2V0KG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG1vZGlmaWVyczogZ2V0KG1vZGlmaWVycyksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBzdHJhdGVneSxcbiAgICB9O1xuICB9KTtcblxuICBmdW5jdGlvbiBnZXRWYWxpZEVsZW1lbnRzKCk6IHsgcG9wcGVyRWw6IEhUTUxFbGVtZW50OyByZWZlcmVuY2VFbDogRWxlbWVudCB8IFZpcnR1YWxFbGVtZW50IH0gfCBudWxsIHtcbiAgICBpZiAoIWdldChwb3BwZXIpIHx8ICghZ2V0KHJlZmVyZW5jZSkgJiYgIWdldCh2aXJ0dWFsUmVmZXJlbmNlKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IHBvcHBlckVsID0gdW5yZWZFbGVtZW50KHBvcHBlcik7XG4gICAgY29uc3QgcmVmZXJlbmNlRWwgPSBnZXQodmlydHVhbFJlZmVyZW5jZSkgfHwgdW5yZWZFbGVtZW50KHJlZmVyZW5jZSk7XG5cbiAgICBpZiAoIShwb3BwZXJFbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSB8fCAhcmVmZXJlbmNlRWwpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7IHBvcHBlckVsLCByZWZlcmVuY2VFbCB9O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5pdGlhbGl6ZVBvcHBlcihvbkludmFsaWRhdGU6IChjbGVhbnVwRm46ICgpID0+IHZvaWQpID0+IHZvaWQpIHtcbiAgICBjb25zdCBlbGVtZW50cyA9IGdldFZhbGlkRWxlbWVudHMoKTtcbiAgICBpZiAoIWVsZW1lbnRzKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgeyBwb3BwZXJFbCwgcmVmZXJlbmNlRWwgfSA9IGVsZW1lbnRzO1xuXG4gICAgY29uc3QgdmFsdWUgPSBjcmVhdGVQb3BwZXIocmVmZXJlbmNlRWwsIHBvcHBlckVsLCBnZXQocG9wcGVyQ29uZmlnKSk7XG5cbiAgICBzZXQoaW5zdGFuY2UsIHZhbHVlKTtcbiAgICBvbkludmFsaWRhdGUodmFsdWUuZGVzdHJveSk7XG4gIH1cblxuICB1c2VSZXNpemVPYnNlcnZlcihbcmVmZXJlbmNlLCBwb3BwZXJdLCBhc3luYyAoKSA9PiB7XG4gICAgaWYgKGlzRGVmaW5lZChpbnN0YW5jZSkpXG4gICAgICBhd2FpdCBnZXQoaW5zdGFuY2UpLnVwZGF0ZSgpO1xuICB9KTtcblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIHdhdGNoRWZmZWN0KChvbkludmFsaWRhdGUpID0+IHtcbiAgICAgIGluaXRpYWxpemVQb3BwZXIob25JbnZhbGlkYXRlKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBpbnN0YW5jZSxcbiAgICBsZWF2ZVBlbmRpbmcsXG4gICAgb25DbG9zZSxcbiAgICBvbkxlYXZlUGVuZGluZyxcbiAgICBvbk9wZW4sXG4gICAgb25Qb3BwZXJMZWF2ZSxcbiAgICBvcGVuLFxuICAgIHBvcHBlcixcbiAgICBwb3BwZXJFbnRlcixcbiAgICByZWZlcmVuY2UsXG4gICAgdXBkYXRlUG9wcGVyLFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgdHlwZSBLZXlPZlR5cGU8VCwgVj4gPSBUIGV4dGVuZHMgc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiB8IHN5bWJvbCB8IG51bGwgfCB1bmRlZmluZWRcbiAgPyBuZXZlclxuICA6IFYgZXh0ZW5kcyBvYmplY3RcbiAgICA/IGtleW9mIFRcbiAgICA6IGtleW9mIHtcbiAgICAgIFtQIGluIGtleW9mIFQgYXMgVFtQXSBleHRlbmRzIFZcbiAgICAgICAgPyBQXG4gICAgICAgIDogViBleHRlbmRzIFRbUF1cbiAgICAgICAgICA/IFBcbiAgICAgICAgICA6IG5ldmVyXTogYW55XG4gICAgfTtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93bkl0ZW1BdHRyPFRWYWx1ZSwgVEl0ZW0+IHtcbiAga2V5QXR0cj86IEtleU9mVHlwZTxUSXRlbSwgVFZhbHVlIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBVIDogVFZhbHVlPjtcbiAgdGV4dEF0dHI/OiBrZXlvZiBUSXRlbSB8ICgoaXRlbTogVEl0ZW0pID0+IHN0cmluZyk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25PcHRpb25zPFRWYWx1ZSwgVEl0ZW0+IHtcbiAgb3B0aW9uczogUmVmPFRJdGVtW10+O1xuICBkZW5zZT86IFJlZjxib29sZWFuPjtcbiAgZGlzYWJsZWQ/OiBSZWY8Ym9vbGVhbj47XG4gIHZhbHVlOiBSZWY8VEl0ZW0gfCBUSXRlbVtdIHwgdW5kZWZpbmVkPjtcbiAgbWVudVJlZjogUmVmPEhUTUxFbGVtZW50PjtcbiAga2V5QXR0cj86IEtleU9mVHlwZTxUSXRlbSwgVFZhbHVlIGV4dGVuZHMgQXJyYXk8aW5mZXIgVT4gPyBVIDogVFZhbHVlPjtcbiAgdGV4dEF0dHI/OiBrZXlvZiBUSXRlbSB8ICgoaXRlbTogVEl0ZW0pID0+IHN0cmluZyk7XG4gIGFwcGVuZFdpZHRoPzogbnVtYmVyO1xuICBwcmVwZW5kV2lkdGg/OiBudW1iZXI7XG4gIGl0ZW1IZWlnaHQ/OiBudW1iZXI7XG4gIG92ZXJzY2FuPzogbnVtYmVyO1xuICBhdXRvU2VsZWN0Rmlyc3Q/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBzZXRWYWx1ZT86ICh2YWw6IFRJdGVtKSA9PiB2b2lkO1xuICBoaWRlU2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlRHJvcGRvd25PcHRpb25Qcm9wZXJ0eTxUVmFsdWUsIFRJdGVtPih7XG4gIGtleUF0dHIsXG4gIHRleHRBdHRyLFxufTogRHJvcGRvd25JdGVtQXR0cjxUVmFsdWUsIFRJdGVtPikge1xuICBmdW5jdGlvbiBnZXRUZXh0KGl0ZW06IFRJdGVtKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGV4dEF0dHIpIHtcbiAgICAgIGlmICh0eXBlb2YgdGV4dEF0dHIgPT09ICdmdW5jdGlvbicpXG4gICAgICAgIHJldHVybiB0ZXh0QXR0cihpdGVtKTtcblxuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gaXRlbVt0ZXh0QXR0cl0/LnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZW0/LnRvU3RyaW5nKCk7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRJZGVudGlmaWVyKGl0ZW06IFRJdGVtKTogVEl0ZW0gfCBUSXRlbVtLZXlPZlR5cGU8VEl0ZW0sIFRWYWx1ZSBleHRlbmRzIEFycmF5PGluZmVyIFU+ID8gVSA6IFRWYWx1ZT5dIHtcbiAgICBpZiAoa2V5QXR0cilcbiAgICAgIHJldHVybiBpdGVtW2tleUF0dHJdO1xuXG4gICAgcmV0dXJuIGl0ZW07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGdldElkZW50aWZpZXIsXG4gICAgZ2V0VGV4dCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVzZURyb3Bkb3duTWVudTxUVmFsdWUsIFRJdGVtPih7XG4gIGFwcGVuZFdpZHRoLFxuICBhdXRvRm9jdXMsXG4gIGF1dG9TZWxlY3RGaXJzdCxcbiAgZGVuc2UsXG4gIGRpc2FibGVkID0gcmVmKGZhbHNlKSxcbiAgaGlkZVNlbGVjdGVkLFxuICBpdGVtSGVpZ2h0ID0gNDgsXG4gIGtleUF0dHIsXG4gIG1lbnVSZWYsXG4gIG9wdGlvbnM6IGFsbE9wdGlvbnMsXG4gIG92ZXJzY2FuID0gNSxcbiAgcHJlcGVuZFdpZHRoLFxuICBzZXRWYWx1ZSxcbiAgdGV4dEF0dHIsXG4gIHZhbHVlLFxufTogRHJvcGRvd25PcHRpb25zPFRWYWx1ZSwgVEl0ZW0+KSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGdldChhbGxPcHRpb25zKTtcbiAgICBpZiAoIWhpZGVTZWxlY3RlZClcbiAgICAgIHJldHVybiBvcHRpb25zO1xuXG4gICAgcmV0dXJuIG9wdGlvbnMuZmlsdGVyKGl0ZW0gPT4gIWlzQWN0aXZlSXRlbShpdGVtKSk7XG4gIH0pO1xuXG4gIGNvbnN0IHsgZ2V0SWRlbnRpZmllciwgZ2V0VGV4dCB9ID0gdXNlRHJvcGRvd25PcHRpb25Qcm9wZXJ0eSh7XG4gICAga2V5QXR0cixcbiAgICB0ZXh0QXR0cixcbiAgfSk7XG5cbiAgY29uc3QgeyBjb250YWluZXJQcm9wcywgbGlzdCwgc2Nyb2xsVG8sIHdyYXBwZXJQcm9wcyB9ID0gdXNlVmlydHVhbExpc3Q8VEl0ZW0+KFxuICAgIG9wdGlvbnMsXG4gICAge1xuICAgICAgaXRlbUhlaWdodCxcbiAgICAgIG92ZXJzY2FuLFxuICAgIH0sXG4gICk7XG5cbiAgY29uc3QgcmVuZGVyZWREYXRhID0gdXNlQXJyYXlNYXAobGlzdCwgKHsgZGF0YSwgaW5kZXg6IF9pbmRleCB9KSA9PiAoeyBfaW5kZXgsIGl0ZW06IGRhdGEgfSkpO1xuXG4gIGNvbnN0IGlzT3BlbiA9IHJlZihmYWxzZSk7XG5cbiAgY29uc3QgdmFsdWVLZXkgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXQodmFsdWUpO1xuICAgIGlmICgha2V5QXR0ciB8fCAhc2VsZWN0ZWQpXG4gICAgICByZXR1cm4gc2VsZWN0ZWQ7XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc2VsZWN0ZWQpID8gc2VsZWN0ZWQubWFwKGl0ZW0gPT4gaXRlbVtrZXlBdHRyXSkgOiBzZWxlY3RlZFtrZXlBdHRyXTtcbiAgfSk7XG5cbiAgY29uc3QgaGlnaGxpZ2h0ZWRJbmRleDogUmVmPG51bWJlcj4gPSByZWYoZ2V0KGF1dG9TZWxlY3RGaXJzdCkgPyAwIDogLTEpO1xuXG4gIGNvbnN0IG1lbnVXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICBjb25zdCB3aWR0aHMgPSB7IG1heDogMCwgbWluOiAwIH07XG4gICAgY29uc3QgbWF4V2lkdGggPSAzMDtcbiAgICBjb25zdCBwYWRkaW5nWCA9IDEuNTtcbiAgICBjb25zdCBmb250TXVsdGlwbGllciA9IGdldChkZW5zZSkgPyAxMiA6IDEzO1xuXG4gICAgZ2V0KG9wdGlvbnMpLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgbGVuZ3RoID0gZ2V0VGV4dChvcHRpb24pPy50b1N0cmluZygpPy5sZW5ndGggPz8gMDtcbiAgICAgIGlmICh3aWR0aHMubWluID09PSAwICYmIHdpZHRocy5tYXggPT09IDApIHtcbiAgICAgICAgd2lkdGhzLm1pbiA9IGxlbmd0aDtcbiAgICAgICAgd2lkdGhzLm1heCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA8IHdpZHRocy5taW4pIHtcbiAgICAgICAgd2lkdGhzLm1pbiA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGxlbmd0aCA+IHdpZHRocy5tYXgpIHtcbiAgICAgICAgd2lkdGhzLm1heCA9IGxlbmd0aDtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IGRpZmZlcmVuY2UgPSB3aWR0aHMubWF4IC0gd2lkdGhzLm1pbjtcblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVWYWx1ZSh3aWR0aDogbnVtYmVyKSB7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsV2lkdGhzID0gKHByZXBlbmRXaWR0aCA/IHByZXBlbmRXaWR0aCArIDAuNSA6IDApICsgKGFwcGVuZFdpZHRoID8gYXBwZW5kV2lkdGggKyAwLjUgOiAwKTtcbiAgICAgIHJldHVybiBgJHtNYXRoLm1pbigod2lkdGggKiBmb250TXVsdGlwbGllcikgLyAxNiArIHBhZGRpbmdYICsgYWRkaXRpb25hbFdpZHRocywgbWF4V2lkdGgpfXJlbWA7XG4gICAgfVxuXG4gICAgaWYgKGRpZmZlcmVuY2UgPD0gNSlcbiAgICAgIHJldHVybiBjb21wdXRlVmFsdWUod2lkdGhzLm1heCk7XG5cbiAgICByZXR1cm4gY29tcHV0ZVZhbHVlKHdpZHRocy5taW4gKyBkaWZmZXJlbmNlIC8gMik7XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRvZ2dsZShzdGF0ZTogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgc2V0KGlzT3Blbiwgc3RhdGUpO1xuICB9XG5cbiAgZnVuY3Rpb24gaXRlbUluZGV4SW5WYWx1ZShpdGVtOiBUSXRlbSk6IG51bWJlciB7XG4gICAgY29uc3QgdmFsID0gZ2V0KHZhbHVlKTtcbiAgICBjb25zdCBzZWxlY3RlZDogVEl0ZW1bXSA9IEFycmF5LmlzQXJyYXkodmFsKSA/IHZhbCA6ICh2YWwgPyBbdmFsXSA6IFtdKTtcblxuICAgIGlmIChzZWxlY3RlZC5sZW5ndGggPT09IDApXG4gICAgICByZXR1cm4gLTE7XG5cbiAgICByZXR1cm4gc2VsZWN0ZWQuZmluZEluZGV4KChzZWxlY3RlZEl0ZW0pID0+IHtcbiAgICAgIGlmIChrZXlBdHRyKVxuICAgICAgICByZXR1cm4gc2VsZWN0ZWRJdGVtW2tleUF0dHJdID09PSBpdGVtW2tleUF0dHJdO1xuICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbSA9PT0gaXRlbTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGlzQWN0aXZlSXRlbShpdGVtOiBUSXRlbSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpdGVtSW5kZXhJblZhbHVlKGl0ZW0pICE9PSAtMTtcbiAgfVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGFkanVzdFNjcm9sbEJ5SGlnaGxpZ2h0ZWRJbmRleChzbW9vdGg6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIGNvbnN0IGluZGV4ID0gZ2V0KGhpZ2hsaWdodGVkSW5kZXgpO1xuICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICBhd2FpdCBuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGdldChtZW51UmVmKT8ucGFyZW50RWxlbWVudDtcbiAgICAgICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgICAgIGNvbnN0IGhpZ2hsaWdodGVkRWxlbSA9IGdldChtZW51UmVmKS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdoaWdobGlnaHRlZCcpWzBdO1xuXG4gICAgICAgICAgaWYgKGhpZ2hsaWdodGVkRWxlbSkge1xuICAgICAgICAgICAgaGlnaGxpZ2h0ZWRFbGVtLnNjcm9sbEludG9WaWV3Py4oeyBiZWhhdmlvcjogc21vb3RoID8gJ3Ntb290aCcgOiAnYXV0bycsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgICAgICAgICBpZiAoZ2V0KGF1dG9Gb2N1cykgJiYgJ2ZvY3VzJyBpbiBoaWdobGlnaHRlZEVsZW0gJiYgdHlwZW9mIGhpZ2hsaWdodGVkRWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgaGlnaGxpZ2h0ZWRFbGVtPy5mb2N1cygpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNjcm9sbFRvKGluZGV4KTtcbiAgICAgICAgICAgIGlmIChnZXQoYXV0b0ZvY3VzKSkge1xuICAgICAgICAgICAgICBjb25zdCBlbGVtID0gZ2V0KG1lbnVSZWYpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2hpZ2hsaWdodGVkJylbMF07XG4gICAgICAgICAgICAgIGlmIChlbGVtICYmICdmb2N1cycgaW4gZWxlbSAmJiB0eXBlb2YgZWxlbS5mb2N1cyA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgICAgICBlbGVtLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiB1cGRhdGVPcGVuKG9wZW46IGJvb2xlYW4pIHtcbiAgICBhd2FpdCBuZXh0VGljaygoKSA9PiB7XG4gICAgICBpZiAob3Blbikge1xuICAgICAgICBjb25zdCB2YWwgPSBnZXQodmFsdWUpO1xuXG4gICAgICAgIC8vIHNldCBoaWdobGlnaHRlZCBpbmRleCB0byBhY3RpdmUgaXRlbVxuICAgICAgICBpZiAoKEFycmF5LmlzQXJyYXkodmFsKSAmJiB2YWwubGVuZ3RoID4gMCkgfHwgISF2YWwpIHtcbiAgICAgICAgICBjb25zdCBpbmRleCA9IGdldChvcHRpb25zKS5maW5kSW5kZXgoaXNBY3RpdmVJdGVtKTtcbiAgICAgICAgICBpZiAoaW5kZXggPiAtMSlcbiAgICAgICAgICAgIHNldChoaWdobGlnaHRlZEluZGV4LCBpbmRleCk7XG4gICAgICAgIH1cblxuICAgICAgICB3YXRjaE9uY2UobGlzdCwgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgIGF3YWl0IGFkanVzdFNjcm9sbEJ5SGlnaGxpZ2h0ZWRJbmRleCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHdhdGNoKFtpc09wZW4sIGRpc2FibGVkXSwgYXN5bmMgKFtvcGVuLCBfXSkgPT4ge1xuICAgIGF3YWl0IHVwZGF0ZU9wZW4ob3Blbik7XG4gIH0pO1xuXG4gIHdhdGNoKGhpZ2hsaWdodGVkSW5kZXgsIGFzeW5jIChjdXJyLCBwcmV2KSA9PiB7XG4gICAgaWYgKGN1cnIgIT09IHByZXYpXG4gICAgICBhd2FpdCBhZGp1c3RTY3JvbGxCeUhpZ2hsaWdodGVkSW5kZXgodHJ1ZSk7XG4gIH0pO1xuXG4gIHdhdGNoKG9wdGlvbnMsIGFzeW5jICgpID0+IHtcbiAgICBpZiAoZ2V0KGhpZ2hsaWdodGVkSW5kZXgpICE9PSAtMSkge1xuICAgICAgaWYgKGdldChhdXRvU2VsZWN0Rmlyc3QpKSB7XG4gICAgICAgIHNldChoaWdobGlnaHRlZEluZGV4LCAwKTtcbiAgICAgICAgYXdhaXQgYWRqdXN0U2Nyb2xsQnlIaWdobGlnaHRlZEluZGV4KCk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgc2V0KGhpZ2hsaWdodGVkSW5kZXgsIC0xKTtcbiAgICAgICAgc2Nyb2xsVG8oMCk7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgc2Nyb2xsVG8oMCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBtb3ZlSGlnaGxpZ2h0ID0gKHVwOiBib29sZWFuKSA9PiB7XG4gICAgaWYgKCFnZXQoaXNPcGVuKSkge1xuICAgICAgdG9nZ2xlKHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBwb3NpdGlvbiA9IGdldChoaWdobGlnaHRlZEluZGV4KTtcbiAgICBjb25zdCBtb3ZlID0gdXAgPyAtMSA6IDE7XG5cbiAgICBwb3NpdGlvbiArPSBtb3ZlO1xuXG4gICAgY29uc3QgdG90YWwgPSBnZXQob3B0aW9ucykubGVuZ3RoO1xuXG4gICAgaWYgKHBvc2l0aW9uID49IHRvdGFsKVxuICAgICAgc2V0KGhpZ2hsaWdodGVkSW5kZXgsIDApO1xuICAgIGVsc2UgaWYgKHBvc2l0aW9uIDwgMClcbiAgICAgIHNldChoaWdobGlnaHRlZEluZGV4LCB0b3RhbCAtIDEpO1xuICAgIGVsc2VcbiAgICAgIHNldChoaWdobGlnaHRlZEluZGV4LCBwb3NpdGlvbik7XG4gIH07XG5cbiAgY29uc3QgYXBwbHlIaWdobGlnaHRlZCA9ICgpID0+IHtcbiAgICBpZiAoIXNldFZhbHVlIHx8ICFnZXQoaXNPcGVuKSlcbiAgICAgIHJldHVybjtcblxuICAgIGNvbnN0IGhpZ2hsaWdodGVkSW5kZXhWYWwgPSBnZXQoaGlnaGxpZ2h0ZWRJbmRleCk7XG4gICAgaWYgKGhpZ2hsaWdodGVkSW5kZXhWYWwgPT09IC0xKVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgZW50cnkgPSBnZXQob3B0aW9ucykuZmluZCgoX2RhdGEsIGluZGV4KSA9PiBoaWdobGlnaHRlZEluZGV4VmFsID09PSBpbmRleCk7XG4gICAgaWYgKGVudHJ5KVxuICAgICAgc2V0VmFsdWUoZW50cnkpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYXBwbHlIaWdobGlnaHRlZCxcbiAgICBjb250YWluZXJQcm9wcyxcbiAgICBnZXRJZGVudGlmaWVyLFxuICAgIGdldFRleHQsXG4gICAgaGlnaGxpZ2h0ZWRJbmRleCxcbiAgICBpc0FjdGl2ZUl0ZW0sXG4gICAgaXNPcGVuLFxuICAgIGl0ZW1JbmRleEluVmFsdWUsXG4gICAgbWVudVdpZHRoLFxuICAgIG1vdmVIaWdobGlnaHQsXG4gICAgb3B0aW9uc1dpdGhTZWxlY3RlZEhpZGRlbjogb3B0aW9ucyxcbiAgICByZW5kZXJlZERhdGEsXG4gICAgdG9nZ2xlLFxuICAgIHZhbHVlS2V5LFxuICAgIHdyYXBwZXJQcm9wcyxcbiAgfTtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29tcHV0ZWRSZWYsIE1heWJlUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZUZvY3VzT3B0aW9ucyB7XG4gIGN1c3RvbVZhbHVlOiBNYXliZVJlZjxib29sZWFuPjtcbiAgc2hvdWxkQXBwbHlWYWx1ZUFzU2VhcmNoOiBNYXliZVJlZjxib29sZWFuPjtcbiAgZGlzYWJsZWQ6IE1heWJlUmVmPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZUZvY3VzRGVwczxUSXRlbT4ge1xuICBhY3RpdmF0b3JGb2N1c2VkOiBSZWY8Ym9vbGVhbj47XG4gIGFjdGl2YXRvckZvY3VzZWRXaXRoaW46IFJlZjxib29sZWFuPjtcbiAgZm9jdXNlZFZhbHVlSW5kZXg6IFJlZjxudW1iZXI+O1xuICBmaWx0ZXJlZE9wdGlvbnM6IFJlZjxUSXRlbVtdPjtcbiAgaW50ZXJuYWxTZWFyY2g6IFJlZjxzdHJpbmc+O1xuICBpc09wZW46IFJlZjxib29sZWFuPjtcbiAganVzdE9wZW5lZDogUmVmPGJvb2xlYW4+O1xuICBtZW51V3JhcHBlckZvY3VzZWRXaXRoaW46IFJlZjxib29sZWFuPjtcbiAgc2VhcmNoSW5wdXRGb2N1c2VkOiBSZWY8Ym9vbGVhbj47XG4gIHRleHRJbnB1dDogUmVmPEhUTUxJbnB1dEVsZW1lbnQgfCB1bmRlZmluZWQ+O1xuICBzZXRTZWFyY2hBc1ZhbHVlOiAoKSA9PiB2b2lkO1xuICB1cGRhdGVJbnRlcm5hbFNlYXJjaDogKHZhbHVlPzogc3RyaW5nKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZUZvY3VzUmV0dXJuIHtcbiAgYW55Rm9jdXNlZDogQ29tcHV0ZWRSZWY8Ym9vbGVhbj47XG4gIGlucHV0Q2xhc3M6IENvbXB1dGVkUmVmPHN0cmluZz47XG4gIG9uQWN0aXZhdG9yRm9jdXNlZDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgb25JbnB1dEZvY3VzZWQ6ICgpID0+IHZvaWQ7XG4gIHNldElucHV0Rm9jdXM6ICgpID0+IFByb21pc2U8dm9pZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvQ29tcGxldGVGb2N1czxUSXRlbT4oXG4gIG9wdGlvbnM6IFVzZUF1dG9Db21wbGV0ZUZvY3VzT3B0aW9ucyxcbiAgZGVwczogVXNlQXV0b0NvbXBsZXRlRm9jdXNEZXBzPFRJdGVtPixcbik6IFVzZUF1dG9Db21wbGV0ZUZvY3VzUmV0dXJuIHtcbiAgY29uc3QgYW55Rm9jdXNlZCA9IGNvbXB1dGVkPGJvb2xlYW4+KCgpID0+XG4gICAgZ2V0KGRlcHMuYWN0aXZhdG9yRm9jdXNlZFdpdGhpbikgfHwgZ2V0KGRlcHMubWVudVdyYXBwZXJGb2N1c2VkV2l0aGluKSxcbiAgKTtcblxuICBjb25zdCBpbnB1dENsYXNzID0gY29tcHV0ZWQ8c3RyaW5nPigoKSA9PiB7XG4gICAgY29uc3QgaXNGb2N1c2VkID0gZ2V0KGFueUZvY3VzZWQpO1xuICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBnZXQob3B0aW9ucy5kaXNhYmxlZCk7XG4gICAgY29uc3Qgc2hvdWxkQXBwbHkgPSBnZXQob3B0aW9ucy5zaG91bGRBcHBseVZhbHVlQXNTZWFyY2gpO1xuICAgIGNvbnN0IGhhc1NlYXJjaCA9IGdldChkZXBzLmludGVybmFsU2VhcmNoKTtcblxuICAgIGlmICgoIWlzRm9jdXNlZCB8fCBpc0Rpc2FibGVkKSAmJiAhc2hvdWxkQXBwbHkpXG4gICAgICByZXR1cm4gJ3ctMCBoLTAnO1xuICAgIGlmIChoYXNTZWFyY2gpXG4gICAgICByZXR1cm4gJ2ZsZXgtMSBtaW4tdy1bNHJlbV0nO1xuICAgIHJldHVybiAnZmxleC0xIG1pbi13LTAnO1xuICB9KTtcblxuICBhc3luYyBmdW5jdGlvbiBzZXRJbnB1dEZvY3VzKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IG5leHRUaWNrKCgpID0+IHtcbiAgICAgIHNldChkZXBzLnNlYXJjaElucHV0Rm9jdXNlZCwgdHJ1ZSk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmdW5jdGlvbiBvbkFjdGl2YXRvckZvY3VzZWQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgbmV4dFRpY2soKCkgPT4ge1xuICAgICAgaWYgKCFnZXQoZGVwcy5hY3RpdmF0b3JGb2N1c2VkKSkge1xuICAgICAgICBzZXQoZGVwcy5zZWFyY2hJbnB1dEZvY3VzZWQsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25JbnB1dEZvY3VzZWQoKTogdm9pZCB7XG4gICAgc2V0KGRlcHMuZm9jdXNlZFZhbHVlSW5kZXgsIC0xKTtcblxuICAgIGNvbnN0IHNob3VsZEFwcGx5ID0gZ2V0KG9wdGlvbnMuc2hvdWxkQXBwbHlWYWx1ZUFzU2VhcmNoKTtcbiAgICBpZiAoc2hvdWxkQXBwbHkpIHtcbiAgICAgIGNvbnN0IHRleHRJbnB1dCA9IGdldChkZXBzLnRleHRJbnB1dCk7XG4gICAgICB0ZXh0SW5wdXQ/LnNlbGVjdCgpO1xuICAgIH1cblxuICAgIGlmICghZ2V0KGRlcHMuaXNPcGVuKSkge1xuICAgICAgc2V0KGRlcHMuanVzdE9wZW5lZCwgdHJ1ZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xvc2UgbWVudSBpZiB0aGUgYWN0aXZhdG9yIGlzIG5vdCBmb2N1c2VkIGFueW1vcmVcbiAgLy8gVXNpbmcgZGVib3VuY2VkIHRvIGF2b2lkIHRoZSBtZW51IGNsb3NpbmcgbW9tZW50YXJpbHkgd2hpbGUgZm9jdXMgc3dpdGNoZXMuXG4gIHdhdGNoRGVib3VuY2VkKGFueUZvY3VzZWQsIChmb2N1c2VkKSA9PiB7XG4gICAgaWYgKCFmb2N1c2VkKSB7XG4gICAgICBzZXQoZGVwcy5pc09wZW4sIGZhbHNlKTtcblxuICAgICAgY29uc3QgY3VzdG9tVmFsdWUgPSBnZXQob3B0aW9ucy5jdXN0b21WYWx1ZSk7XG4gICAgICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSBnZXQoZGVwcy5maWx0ZXJlZE9wdGlvbnMpO1xuICAgICAgY29uc3QgaW50ZXJuYWxTZWFyY2ggPSBnZXQoZGVwcy5pbnRlcm5hbFNlYXJjaCk7XG5cbiAgICAgIGlmIChjdXN0b21WYWx1ZSAmJiBmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwICYmIGludGVybmFsU2VhcmNoKSB7XG4gICAgICAgIGRlcHMuc2V0U2VhcmNoQXNWYWx1ZSgpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBzaG91bGRBcHBseSA9IGdldChvcHRpb25zLnNob3VsZEFwcGx5VmFsdWVBc1NlYXJjaCk7XG4gICAgICBpZiAoIXNob3VsZEFwcGx5KSB7XG4gICAgICAgIGRlcHMudXBkYXRlSW50ZXJuYWxTZWFyY2goKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBkZWJvdW5jZTogMjAwLFxuICAgIG1heFdhaXQ6IDQwMCxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBhbnlGb2N1c2VkLFxuICAgIGlucHV0Q2xhc3MsXG4gICAgb25BY3RpdmF0b3JGb2N1c2VkLFxuICAgIG9uSW5wdXRGb2N1c2VkLFxuICAgIHNldElucHV0Rm9jdXMsXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IE1heWJlUmVmLCBSZWYgfSBmcm9tICd2dWUnO1xuaW1wb3J0IHsgZ2V0LCBzZXQgfSBmcm9tICdAdnVldXNlL3NoYXJlZCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQXV0b0NvbXBsZXRlS2V5Ym9hcmROYXZpZ2F0aW9uT3B0aW9ucyB7XG4gIG11bHRpcGxlOiBNYXliZVJlZjxib29sZWFuPjtcbiAgY3VzdG9tVmFsdWU6IE1heWJlUmVmPGJvb2xlYW4+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZUtleWJvYXJkTmF2aWdhdGlvbkRlcHM8VEl0ZW0+IHtcbiAgaW50ZXJuYWxTZWFyY2g6IFJlZjxzdHJpbmc+O1xuICB2YWx1ZTogUmVmPFRJdGVtW10+O1xuICBmaWx0ZXJlZE9wdGlvbnM6IFJlZjxUSXRlbVtdPjtcbiAgb3B0aW9uczogUmVmPFRJdGVtW10+O1xuICBpc09wZW46IFJlZjxib29sZWFuPjtcbiAgaGlnaGxpZ2h0ZWRJbmRleDogUmVmPG51bWJlcj47XG4gIHNlYXJjaElucHV0Rm9jdXNlZDogUmVmPGJvb2xlYW4+O1xuICBhcHBseUhpZ2hsaWdodGVkOiAoKSA9PiB2b2lkO1xuICBjbGVhcjogKCkgPT4gdm9pZDtcbiAgc2V0U2VhcmNoQXNWYWx1ZTogKCkgPT4gdm9pZDtcbiAgYWN0aXZhdG9yOiBSZWY8SFRNTEVsZW1lbnQgfCB1bmRlZmluZWQ+O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZUtleWJvYXJkTmF2aWdhdGlvblJldHVybiB7XG4gIGZvY3VzZWRWYWx1ZUluZGV4OiBSZWY8bnVtYmVyPjtcbiAgbW92ZVNlbGVjdGVkVmFsdWVIaWdobGlnaHQ6IChldmVudDogS2V5Ym9hcmRFdmVudCwgbmV4dDogYm9vbGVhbikgPT4gdm9pZDtcbiAgb25FbnRlcjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICBvblRhYjogKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB2b2lkO1xuICBvbklucHV0RGVsZXRlUHJlc3NlZDogKCkgPT4gdm9pZDtcbiAgc2V0VmFsdWVGb2N1czogKGluZGV4OiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvQ29tcGxldGVLZXlib2FyZE5hdmlnYXRpb248VEl0ZW0+KFxuICBvcHRpb25zOiBVc2VBdXRvQ29tcGxldGVLZXlib2FyZE5hdmlnYXRpb25PcHRpb25zLFxuICBkZXBzOiBVc2VBdXRvQ29tcGxldGVLZXlib2FyZE5hdmlnYXRpb25EZXBzPFRJdGVtPixcbik6IFVzZUF1dG9Db21wbGV0ZUtleWJvYXJkTmF2aWdhdGlvblJldHVybiB7XG4gIGNvbnN0IGZvY3VzZWRWYWx1ZUluZGV4ID0gcmVmPG51bWJlcj4oLTEpO1xuICBjb25zdCBjaGlwRWxlbWVudHNDYWNoZSA9IHJlZjxNYXA8bnVtYmVyLCBIVE1MRWxlbWVudD4+KG5ldyBNYXAoKSk7XG5cbiAgZnVuY3Rpb24gc2V0VmFsdWVGb2N1cyhpbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgc2V0KGZvY3VzZWRWYWx1ZUluZGV4LCBpbmRleCk7XG4gIH1cblxuICBmdW5jdGlvbiBtb3ZlU2VsZWN0ZWRWYWx1ZUhpZ2hsaWdodChldmVudDogS2V5Ym9hcmRFdmVudCwgbmV4dDogYm9vbGVhbik6IHZvaWQge1xuICAgIGNvbnN0IG11bHRpcGxlID0gZ2V0KG9wdGlvbnMubXVsdGlwbGUpO1xuICAgIGNvbnN0IGludGVybmFsU2VhcmNoVmFsdWUgPSBnZXQoZGVwcy5pbnRlcm5hbFNlYXJjaCk7XG5cbiAgICBpZiAoIW11bHRpcGxlIHx8IGludGVybmFsU2VhcmNoVmFsdWUubGVuZ3RoID4gMClcbiAgICAgIHJldHVybjtcblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY29uc3QgdG90YWwgPSBnZXQoZGVwcy52YWx1ZSkubGVuZ3RoO1xuXG4gICAgbGV0IGN1cnJlbnQgPSBnZXQoZm9jdXNlZFZhbHVlSW5kZXgpO1xuXG4gICAgaWYgKGN1cnJlbnQgPT09IC0xKSB7XG4gICAgICBzZXQoZm9jdXNlZFZhbHVlSW5kZXgsIG5leHQgPyAwIDogdG90YWwgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtb3ZlID0gbmV4dCA/IDEgOiAtMTtcbiAgICBjdXJyZW50ICs9IG1vdmU7XG5cbiAgICBpZiAoY3VycmVudCA8IDAgfHwgY3VycmVudCA+PSB0b3RhbCkge1xuICAgICAgc2V0KGZvY3VzZWRWYWx1ZUluZGV4LCAtMSk7XG4gICAgICBzZXQoZGVwcy5zZWFyY2hJbnB1dEZvY3VzZWQsIHRydWUpO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHNldChmb2N1c2VkVmFsdWVJbmRleCwgY3VycmVudCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gb25FbnRlcihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGdldChkZXBzLmZpbHRlcmVkT3B0aW9ucyk7XG4gICAgY29uc3QgaGlnaGxpZ2h0ZWRJbmRleCA9IGdldChkZXBzLmhpZ2hsaWdodGVkSW5kZXgpO1xuICAgIGNvbnN0IGlzT3BlbiA9IGdldChkZXBzLmlzT3Blbik7XG4gICAgY29uc3QgY3VzdG9tVmFsdWUgPSBnZXQob3B0aW9ucy5jdXN0b21WYWx1ZSk7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBnZXQob3B0aW9ucy5tdWx0aXBsZSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXQoZGVwcy52YWx1ZSk7XG4gICAgY29uc3QgaW50ZXJuYWxTZWFyY2ggPSBnZXQoZGVwcy5pbnRlcm5hbFNlYXJjaCk7XG5cbiAgICAvLyBDaGVjayBpZiB3ZSBzaG91bGQgdXNlIGN1c3RvbSB2YWx1ZVxuICAgIGlmIChjdXN0b21WYWx1ZSAmJiBpbnRlcm5hbFNlYXJjaCAmJiBpc09wZW4pIHtcbiAgICAgIC8vIENoZWNrIGlmIGFueSBvcHRpb24gZXhhY3RseSBtYXRjaGVzIHRoZSBzZWFyY2ggdGVybVxuICAgICAgbGV0IGhhc0V4YWN0TWF0Y2ggPSBmYWxzZTtcblxuICAgICAgaWYgKGhpZ2hsaWdodGVkSW5kZXggPiAtMSAmJiBoaWdobGlnaHRlZEluZGV4IDwgZmlsdGVyZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBoaWdobGlnaHRlZE9wdGlvbiA9IGZpbHRlcmVkT3B0aW9uc1toaWdobGlnaHRlZEluZGV4XTtcbiAgICAgICAgaWYgKHR5cGVvZiBoaWdobGlnaHRlZE9wdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICBoYXNFeGFjdE1hdGNoID0gaGlnaGxpZ2h0ZWRPcHRpb24gPT09IGludGVybmFsU2VhcmNoO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhpZ2hsaWdodGVkT3B0aW9uICYmIHR5cGVvZiBoaWdobGlnaHRlZE9wdGlvbiA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9IChoaWdobGlnaHRlZE9wdGlvbiBhcyBhbnkpLmxhYmVsIHx8IChoaWdobGlnaHRlZE9wdGlvbiBhcyBhbnkpLnZhbHVlIHx8ICcnO1xuICAgICAgICAgIGhhc0V4YWN0TWF0Y2ggPSBsYWJlbCA9PT0gaW50ZXJuYWxTZWFyY2g7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgbm8gZXhhY3QgbWF0Y2ggd2l0aCBoaWdobGlnaHRlZCBvcHRpb24sIHVzZSBjdXN0b20gdmFsdWVcbiAgICAgIGlmICghaGFzRXhhY3RNYXRjaCkge1xuICAgICAgICBkZXBzLnNldFNlYXJjaEFzVmFsdWUoKTtcbiAgICAgICAgaWYgKCFtdWx0aXBsZSlcbiAgICAgICAgICBzZXQoZGVwcy5pc09wZW4sIGZhbHNlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID4gMCAmJiBoaWdobGlnaHRlZEluZGV4ID4gLTEgJiYgaXNPcGVuKSB7XG4gICAgICBkZXBzLmFwcGx5SGlnaGxpZ2h0ZWQoKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPT09IDAgJiYgY3VzdG9tVmFsdWUgJiYgaW50ZXJuYWxTZWFyY2gpIHtcbiAgICAgIGRlcHMuc2V0U2VhcmNoQXNWYWx1ZSgpO1xuICAgICAgaWYgKCFtdWx0aXBsZSlcbiAgICAgICAgc2V0KGRlcHMuaXNPcGVuLCBmYWxzZSk7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIH1cbiAgICBlbHNlIGlmICghaXNPcGVuICYmIHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgc2V0KGRlcHMuaXNPcGVuLCB0cnVlKTtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY29uc3QgYWN0aXZhdG9yID0gZ2V0KGRlcHMuYWN0aXZhdG9yKTtcbiAgICAgIGNvbnN0IGZvcm0gPSBhY3RpdmF0b3I/LmNsb3Nlc3QoJ2Zvcm0nKTtcbiAgICAgIGlmIChmb3JtKSB7XG4gICAgICAgIGZvcm0uZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3N1Ym1pdCcpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvblRhYihldmVudDogS2V5Ym9hcmRFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGlzT3BlbiA9IGdldChkZXBzLmlzT3Blbik7XG4gICAgY29uc3QgZmlsdGVyZWRPcHRpb25zID0gZ2V0KGRlcHMuZmlsdGVyZWRPcHRpb25zKTtcbiAgICBjb25zdCBoaWdobGlnaHRlZEluZGV4ID0gZ2V0KGRlcHMuaGlnaGxpZ2h0ZWRJbmRleCk7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBnZXQob3B0aW9ucy5tdWx0aXBsZSk7XG5cbiAgICBpZiAoaXNPcGVuICYmIGZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPiAwICYmIGhpZ2hsaWdodGVkSW5kZXggPiAtMSAmJiAhbXVsdGlwbGUpIHtcbiAgICAgIGRlcHMuYXBwbHlIaWdobGlnaHRlZCgpO1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBvbklucHV0RGVsZXRlUHJlc3NlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBpbnRlcm5hbFNlYXJjaCA9IGdldChkZXBzLmludGVybmFsU2VhcmNoKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldChkZXBzLnZhbHVlKTtcbiAgICBjb25zdCB0b3RhbCA9IHZhbHVlLmxlbmd0aDtcbiAgICBjb25zdCBtdWx0aXBsZSA9IGdldChvcHRpb25zLm11bHRpcGxlKTtcblxuICAgIGlmICghaW50ZXJuYWxTZWFyY2ggJiYgdG90YWwgPiAwKSB7XG4gICAgICBpZiAobXVsdGlwbGUpXG4gICAgICAgIHNldChmb2N1c2VkVmFsdWVJbmRleCwgdG90YWwgLSAxKTtcbiAgICAgIGVsc2VcbiAgICAgICAgZGVwcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIC8vIFdhdGNoIHZhbHVlIGNoYW5nZXMgdG8gcmVzZXQgZm9jdXNlZCBpbmRleCBhbmQgY2xlYXIgY2FjaGVcbiAgd2F0Y2goZGVwcy52YWx1ZSwgKCkgPT4ge1xuICAgIHNldFZhbHVlRm9jdXMoLTEpO1xuICAgIGdldChjaGlwRWxlbWVudHNDYWNoZSkuY2xlYXIoKTtcbiAgfSk7XG5cbiAgLy8gV2F0Y2ggZm9jdXNlZCB2YWx1ZSBpbmRleCB0byBoYW5kbGUgY2hpcCBmb2N1c1xuICB3YXRjaChmb2N1c2VkVmFsdWVJbmRleCwgYXN5bmMgKGluZGV4KSA9PiB7XG4gICAgY29uc3QgbXVsdGlwbGUgPSBnZXQob3B0aW9ucy5tdWx0aXBsZSk7XG4gICAgaWYgKGluZGV4ID09PSAtMSB8fCAhbXVsdGlwbGUpXG4gICAgICByZXR1cm47XG5cbiAgICBhd2FpdCBuZXh0VGljaygoKSA9PiB7XG4gICAgICBjb25zdCBjYWNoZSA9IGdldChjaGlwRWxlbWVudHNDYWNoZSk7XG4gICAgICBsZXQgYWN0aXZlQ2hpcCA9IGNhY2hlLmdldChpbmRleCk7XG5cbiAgICAgIGlmICghYWN0aXZlQ2hpcCkge1xuICAgICAgICBjb25zdCBhY3RpdmF0b3IgPSBnZXQoZGVwcy5hY3RpdmF0b3IpO1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gYWN0aXZhdG9yPy5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pbmRleD1cIiR7aW5kZXh9XCJdYCkgYXMgSFRNTEVsZW1lbnQgfCBudWxsO1xuICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgIGFjdGl2ZUNoaXAgPSBlbGVtZW50O1xuICAgICAgICAgIGNhY2hlLnNldChpbmRleCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZUNoaXAgJiYgJ2ZvY3VzJyBpbiBhY3RpdmVDaGlwICYmIHR5cGVvZiBhY3RpdmVDaGlwLmZvY3VzID09PSAnZnVuY3Rpb24nKVxuICAgICAgICBhY3RpdmVDaGlwLmZvY3VzKCk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZm9jdXNlZFZhbHVlSW5kZXgsXG4gICAgbW92ZVNlbGVjdGVkVmFsdWVIaWdobGlnaHQsXG4gICAgb25FbnRlcixcbiAgICBvbklucHV0RGVsZXRlUHJlc3NlZCxcbiAgICBvblRhYixcbiAgICBzZXRWYWx1ZUZvY3VzLFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBNYXliZVJlZiwgUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGdldCwgc2V0IH0gZnJvbSAnQHZ1ZXVzZS9zaGFyZWQnO1xuaW1wb3J0IHsgZ2V0VGV4dFRva2VuIH0gZnJvbSAnQC91dGlscy9oZWxwZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VBdXRvQ29tcGxldGVTZWFyY2hPcHRpb25zPFRJdGVtPiB7XG4gIGtleUF0dHI/OiBNYXliZVJlZjxrZXlvZiBUSXRlbSB8IHVuZGVmaW5lZD47XG4gIHRleHRBdHRyPzogTWF5YmVSZWY8a2V5b2YgVEl0ZW0gfCB1bmRlZmluZWQ+O1xuICBub0ZpbHRlcj86IE1heWJlUmVmPGJvb2xlYW4+O1xuICBmaWx0ZXI/OiBNYXliZVJlZjwoKGl0ZW06IFRJdGVtLCBxdWVyeVRleHQ6IHN0cmluZykgPT4gYm9vbGVhbikgfCB1bmRlZmluZWQ+O1xuICBjdXN0b21WYWx1ZT86IE1heWJlUmVmPGJvb2xlYW4+O1xuICBoaWRlQ3VzdG9tVmFsdWU/OiBNYXliZVJlZjxib29sZWFuPjtcbiAgcmV0dXJuT2JqZWN0PzogTWF5YmVSZWY8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQXV0b0NvbXBsZXRlU2VhcmNoUmV0dXJuPFRJdGVtPiB7XG4gIGludGVybmFsU2VhcmNoOiBSZWY8c3RyaW5nPjtcbiAgZGVib3VuY2VkSW50ZXJuYWxTZWFyY2g6IFJlYWRvbmx5PFJlZjxzdHJpbmc+PjtcbiAgZmlsdGVyZWRPcHRpb25zOiBSZWFkb25seTxSZWY8VEl0ZW1bXT4+O1xuICBqdXN0T3BlbmVkOiBSZWY8Ym9vbGVhbj47XG4gIHVwZGF0ZUludGVybmFsU2VhcmNoOiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG4gIHRleHRWYWx1ZVRvUHJvcGVyVmFsdWU6ICh2YWw6IGFueSwgcmV0dXJuT2JqZWN0PzogYm9vbGVhbikgPT4gVEl0ZW07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvQ29tcGxldGVTZWFyY2g8VEl0ZW0+KFxuICBvcHRpb25zOiBNYXliZVJlZjxUSXRlbVtdPixcbiAgc2VhcmNoTW9kZWw6IFJlZjxzdHJpbmc+LFxuICBvcHRzOiBVc2VBdXRvQ29tcGxldGVTZWFyY2hPcHRpb25zPFRJdGVtPixcbik6IFVzZUF1dG9Db21wbGV0ZVNlYXJjaFJldHVybjxUSXRlbT4ge1xuICBjb25zdCBpbnRlcm5hbFNlYXJjaCA9IHJlZjxzdHJpbmc+KCcnKTtcbiAgY29uc3QgZGVib3VuY2VkSW50ZXJuYWxTZWFyY2ggPSByZWZEZWJvdW5jZWQoaW50ZXJuYWxTZWFyY2gsIDUwKTtcbiAgY29uc3QganVzdE9wZW5lZCA9IHJlZjxib29sZWFuPihmYWxzZSk7XG5cbiAgLy8gTWVtb2l6ZSB0b2tlbiBjb21wdXRhdGlvbiB0byBhdm9pZCByZXBlYXRlZCBzdHJpbmcgcHJvY2Vzc2luZ1xuICBjb25zdCB0b2tlbkNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgY29uc3QgZ2V0Q2FjaGVkVGV4dFRva2VuID0gKHRleHQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHRva2VuQ2FjaGUuaGFzKHRleHQpKSB7XG4gICAgICByZXR1cm4gdG9rZW5DYWNoZS5nZXQodGV4dCkhO1xuICAgIH1cbiAgICBjb25zdCB0b2tlbiA9IGdldFRleHRUb2tlbih0ZXh0KTtcbiAgICB0b2tlbkNhY2hlLnNldCh0ZXh0LCB0b2tlbik7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IGNvbXB1dGVkPFRJdGVtW10+KCgpID0+IHtcbiAgICBjb25zdCBzZWFyY2ggPSBnZXQoZGVib3VuY2VkSW50ZXJuYWxTZWFyY2gpO1xuICAgIGNvbnN0IG9wdGlvbnNWYWx1ZSA9IGdldChvcHRpb25zKTtcblxuICAgIGNvbnN0IG5vRmlsdGVyID0gZ2V0KG9wdHMubm9GaWx0ZXIpO1xuICAgIGlmIChub0ZpbHRlciB8fCAhc2VhcmNoIHx8IGdldChqdXN0T3BlbmVkKSlcbiAgICAgIHJldHVybiBvcHRpb25zVmFsdWU7XG5cbiAgICBjb25zdCBrZXlBdHRyID0gZ2V0KG9wdHMua2V5QXR0cik7XG4gICAgY29uc3QgdGV4dEF0dHIgPSBnZXQob3B0cy50ZXh0QXR0cik7XG4gICAgY29uc3QgZmlsdGVyID0gZ2V0KG9wdHMuZmlsdGVyKTtcblxuICAgIC8vIENhY2hlIHRoZSBzZWFyY2ggdG9rZW4gb25jZVxuICAgIGNvbnN0IHNlYXJjaFRva2VuID0gZ2V0Q2FjaGVkVGV4dFRva2VuKHNlYXJjaCk7XG5cbiAgICBjb25zdCB1c2VkRmlsdGVyID0gZmlsdGVyIHx8ICgoaXRlbSkgPT4ge1xuICAgICAgaWYgKCFpdGVtKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGtleXdvcmRzOiBzdHJpbmdbXSA9IFtrZXlBdHRyID8gZ2V0Q2FjaGVkVGV4dFRva2VuKChpdGVtIGFzIGFueSlba2V5QXR0cl0pIDogaXRlbS50b1N0cmluZygpXTtcblxuICAgICAgaWYgKHRleHRBdHRyICYmIHR5cGVvZiBpdGVtID09PSAnb2JqZWN0JylcbiAgICAgICAga2V5d29yZHMucHVzaChnZXRDYWNoZWRUZXh0VG9rZW4oKGl0ZW0gYXMgYW55KVt0ZXh0QXR0cl0pKTtcblxuICAgICAgcmV0dXJuIGtleXdvcmRzLnNvbWUoa2V5d29yZCA9PiBnZXRDYWNoZWRUZXh0VG9rZW4oa2V5d29yZCkuaW5jbHVkZXMoc2VhcmNoVG9rZW4pKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGZpbHRlcmVkID0gb3B0aW9uc1ZhbHVlLmZpbHRlcihpdGVtID0+IHVzZWRGaWx0ZXIoaXRlbSwgc2VhcmNoKSk7XG5cbiAgICBjb25zdCBjdXN0b21WYWx1ZSA9IGdldChvcHRzLmN1c3RvbVZhbHVlKTtcbiAgICBjb25zdCBoaWRlQ3VzdG9tVmFsdWUgPSBnZXQob3B0cy5oaWRlQ3VzdG9tVmFsdWUpO1xuICAgIGlmICghY3VzdG9tVmFsdWUgfHwgaGlkZUN1c3RvbVZhbHVlIHx8ICFzZWFyY2gpIHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICB9XG5cbiAgICAvLyBVc2UgYSBtb3JlIGVmZmljaWVudCBjaGVjayBmb3IgY3VzdG9tIHZhbHVlIGluY2x1c2lvblxuICAgIGNvbnN0IGlzQ3VzdG9tVmFsdWVJbmNsdWRlZCA9IGZpbHRlcmVkLnNvbWUoKGl0ZW0pID0+IHtcbiAgICAgIGlmICghaXRlbSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZhbCA9IHRleHRBdHRyID8gKGl0ZW0gYXMgYW55KVt0ZXh0QXR0cl0gOiBpdGVtLnRvU3RyaW5nKCk7XG4gICAgICByZXR1cm4gdmFsID09PSBzZWFyY2g7XG4gICAgfSk7XG5cbiAgICBpZiAoaXNDdXN0b21WYWx1ZUluY2x1ZGVkKSB7XG4gICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIFt0ZXh0VmFsdWVUb1Byb3BlclZhbHVlKHNlYXJjaCwge1xuICAgICAga2V5QXR0cixcbiAgICAgIHJldHVybk9iamVjdDogZ2V0KG9wdHMucmV0dXJuT2JqZWN0KSxcbiAgICAgIHRleHRBdHRyLFxuICAgIH0pLCAuLi5maWx0ZXJlZF07XG4gIH0pO1xuXG4gIGZ1bmN0aW9uIHRleHRWYWx1ZVRvUHJvcGVyVmFsdWUodmFsOiBhbnksIG9wdGlvbnM6IHsga2V5QXR0cj86IGtleW9mIFRJdGVtOyB0ZXh0QXR0cj86IGtleW9mIFRJdGVtOyByZXR1cm5PYmplY3Q/OiBib29sZWFuIH0pOiBUSXRlbSB7XG4gICAgY29uc3QgeyBrZXlBdHRyLCByZXR1cm5PYmplY3QsIHRleHRBdHRyIH0gPSBvcHRpb25zO1xuICAgIGlmICgha2V5QXR0ciB8fCByZXR1cm5PYmplY3QpXG4gICAgICByZXR1cm4gdmFsO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIFtrZXlBdHRyXTogdmFsLFxuICAgICAgLi4uKFxuICAgICAgICB0ZXh0QXR0clxuICAgICAgICAgID8geyBbdGV4dEF0dHJdOiB2YWwgfVxuICAgICAgICAgIDoge31cbiAgICAgICksXG4gICAgfSBhcyBUSXRlbTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZUludGVybmFsU2VhcmNoKHZhbHVlOiBzdHJpbmcgPSAnJyk6IHZvaWQge1xuICAgIHNldChzZWFyY2hNb2RlbCwgdmFsdWUpO1xuICAgIHNldChpbnRlcm5hbFNlYXJjaCwgdmFsdWUpO1xuICB9XG5cbiAgd2F0Y2goc2VhcmNoTW9kZWwsIChzZWFyY2gpID0+IHtcbiAgICBzZXQoaW50ZXJuYWxTZWFyY2gsIHNlYXJjaCk7XG4gIH0sIHsgaW1tZWRpYXRlOiB0cnVlIH0pO1xuXG4gIC8vIENsZWFyIHRva2VuIGNhY2hlIHdoZW4gY29tcG9uZW50IHVubW91bnRzIHRvIHByZXZlbnQgbWVtb3J5IGxlYWtzXG4gIG9uVW5tb3VudGVkKCgpID0+IHtcbiAgICB0b2tlbkNhY2hlLmNsZWFyKCk7XG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZGVib3VuY2VkSW50ZXJuYWxTZWFyY2gsXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIGludGVybmFsU2VhcmNoLFxuICAgIGp1c3RPcGVuZWQsXG4gICAgdGV4dFZhbHVlVG9Qcm9wZXJWYWx1ZTogKHZhbDogYW55LCByZXR1cm5PYmplY3RPdmVycmlkZTogYm9vbGVhbiA9IGZhbHNlKSA9PiB0ZXh0VmFsdWVUb1Byb3BlclZhbHVlKHZhbCwge1xuICAgICAga2V5QXR0cjogZ2V0KG9wdHMua2V5QXR0ciksXG4gICAgICByZXR1cm5PYmplY3Q6IHJldHVybk9iamVjdE92ZXJyaWRlIHx8IGdldChvcHRzLnJldHVybk9iamVjdCksXG4gICAgICB0ZXh0QXR0cjogZ2V0KG9wdHMudGV4dEF0dHIpLFxuICAgIH0pLFxuICAgIHVwZGF0ZUludGVybmFsU2VhcmNoLFxuICB9O1xufVxuIiwiaW1wb3J0IHR5cGUgeyBDb21wdXRlZFJlZiwgTWF5YmVSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgeyBnZXQsIHNldCB9IGZyb20gJ0B2dWV1c2Uvc2hhcmVkJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0AvdXRpbHMvYXNzZXJ0JztcblxuZXhwb3J0IGludGVyZmFjZSBVc2VBdXRvQ29tcGxldGVWYWx1ZU9wdGlvbnM8VEl0ZW0+IHtcbiAga2V5QXR0cj86IE1heWJlUmVmPGtleW9mIFRJdGVtIHwgdW5kZWZpbmVkPjtcbiAgcmV0dXJuT2JqZWN0PzogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIGN1c3RvbVZhbHVlPzogTWF5YmVSZWY8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXNlQXV0b0NvbXBsZXRlVmFsdWVSZXR1cm48VEl0ZW0+IHtcbiAgdmFsdWU6IENvbXB1dGVkUmVmPFRJdGVtW10+O1xuICBzZXRTZWxlY3RlZDogKHNlbGVjdGVkOiBUSXRlbVtdKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVzZUF1dG9Db21wbGV0ZVZhbHVlRGVwczxUSXRlbT4ge1xuICBnZXRJZGVudGlmaWVyOiAoaXRlbTogVEl0ZW0pID0+IGFueTtcbiAgZ2V0VGV4dDogKGl0ZW06IFRJdGVtKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHRleHRWYWx1ZVRvUHJvcGVyVmFsdWU6ICh2YWw6IGFueSwgcmV0dXJuT2JqZWN0PzogYm9vbGVhbikgPT4gVEl0ZW07XG4gIHNob3VsZEFwcGx5VmFsdWVBc1NlYXJjaDogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIGlzT3BlbjogTWF5YmVSZWY8Ym9vbGVhbj47XG4gIHVwZGF0ZUludGVybmFsU2VhcmNoOiAodmFsdWU/OiBzdHJpbmcpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VBdXRvQ29tcGxldGVWYWx1ZTxUVmFsdWUsIFRJdGVtPihcbiAgbW9kZWxWYWx1ZTogUmVmPFRWYWx1ZSB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IE1heWJlUmVmPFRJdGVtW10+LFxuICBvcHRzOiBVc2VBdXRvQ29tcGxldGVWYWx1ZU9wdGlvbnM8VEl0ZW0+LFxuICBkZXBzOiBVc2VBdXRvQ29tcGxldGVWYWx1ZURlcHM8VEl0ZW0+LFxuKTogVXNlQXV0b0NvbXBsZXRlVmFsdWVSZXR1cm48VEl0ZW0+IHtcbiAgY29uc3QgbXVsdGlwbGUgPSBjb21wdXRlZDxib29sZWFuPigoKSA9PiBBcnJheS5pc0FycmF5KGdldChtb2RlbFZhbHVlKSkpO1xuXG4gIC8vIENyZWF0ZSBtYXBzIGZvciBPKDEpIGxvb2t1cCBwZXJmb3JtYW5jZVxuICBjb25zdCBvcHRpb25zTWFwID0gY29tcHV0ZWQ8TWFwPGFueSwgVEl0ZW0+PigoKSA9PiB7XG4gICAgY29uc3QgbWFwID0gbmV3IE1hcDxhbnksIFRJdGVtPigpO1xuICAgIGNvbnN0IG9wdGlvbnNEYXRhID0gZ2V0KG9wdGlvbnMpO1xuICAgIGZvciAoY29uc3QgaXRlbSBvZiBvcHRpb25zRGF0YSkge1xuICAgICAgbWFwLnNldChkZXBzLmdldElkZW50aWZpZXIoaXRlbSksIGl0ZW0pO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9KTtcblxuICBmdW5jdGlvbiBjb252ZXJ0TW9kZWxWYWx1ZVRvQXJyYXkobW9kZWxWYWx1ZURhdGE6IFRWYWx1ZSB8IHVuZGVmaW5lZCk6IGFueVtdIHtcbiAgICBpZiAoIW1vZGVsVmFsdWVEYXRhKVxuICAgICAgcmV0dXJuIFtdO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KG1vZGVsVmFsdWVEYXRhKSA/IG1vZGVsVmFsdWVEYXRhIDogW21vZGVsVmFsdWVEYXRhXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGZpbHRlclZhbHVlc0J5T3B0aW9ucyhcbiAgICB2YWx1ZUFycmF5OiBhbnlbXSxcbiAgICBvcHRpb25zTWFwRGF0YTogTWFwPGFueSwgVEl0ZW0+LFxuICAgIGN1c3RvbVZhbHVlOiBib29sZWFuLFxuICAgIHJldHVybk9iamVjdDogYm9vbGVhbixcbiAgKTogVEl0ZW1bXSB7XG4gICAgY29uc3QgZmlsdGVyZWQ6IFRJdGVtW10gPSBbXTtcbiAgICBmaWx0ZXJlZC5sZW5ndGggPSB2YWx1ZUFycmF5Lmxlbmd0aDsgLy8gUHJlLWFsbG9jYXRlIGFycmF5IHNpemVcbiAgICBsZXQgaW5kZXggPSAwO1xuXG4gICAgZm9yIChjb25zdCB2YWwgb2YgdmFsdWVBcnJheSkge1xuICAgICAgY29uc3QgaWRlbnRpZmllciA9IGRlcHMuZ2V0SWRlbnRpZmllcih2YWwpO1xuICAgICAgY29uc3QgaW5PcHRpb25zID0gb3B0aW9uc01hcERhdGEuZ2V0KGlkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoaW5PcHRpb25zKSB7XG4gICAgICAgIGZpbHRlcmVkW2luZGV4KytdID0gaW5PcHRpb25zO1xuICAgICAgfVxuICAgICAgZWxzZSBpZiAoY3VzdG9tVmFsdWUpIHtcbiAgICAgICAgZmlsdGVyZWRbaW5kZXgrK10gPSBkZXBzLnRleHRWYWx1ZVRvUHJvcGVyVmFsdWUodmFsLCByZXR1cm5PYmplY3QpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpbHRlcmVkLmxlbmd0aCA9IGluZGV4OyAvLyBUcmltIHRvIGFjdHVhbCBzaXplXG4gICAgcmV0dXJuIGZpbHRlcmVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZmlsdGVyVmFsdWVzQnlJZGVudGlmaWVyKFxuICAgIHZhbHVlQXJyYXk6IGFueVtdLFxuICAgIG9wdGlvbnNNYXBEYXRhOiBNYXA8YW55LCBUSXRlbT4sXG4gICAgY3VzdG9tVmFsdWU6IGJvb2xlYW4sXG4gICAgcmV0dXJuT2JqZWN0OiBib29sZWFuLFxuICApOiBUSXRlbVtdIHtcbiAgICBjb25zdCBmaWx0ZXJlZDogVEl0ZW1bXSA9IFtdO1xuICAgIGZpbHRlcmVkLmxlbmd0aCA9IHZhbHVlQXJyYXkubGVuZ3RoOyAvLyBQcmUtYWxsb2NhdGUgYXJyYXkgc2l6ZVxuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZUFycmF5KSB7XG4gICAgICBjb25zdCBpbk9wdGlvbnMgPSBvcHRpb25zTWFwRGF0YS5nZXQodmFsKTtcblxuICAgICAgaWYgKGluT3B0aW9ucykge1xuICAgICAgICBmaWx0ZXJlZFtpbmRleCsrXSA9IGluT3B0aW9ucztcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGN1c3RvbVZhbHVlKSB7XG4gICAgICAgIGZpbHRlcmVkW2luZGV4KytdID0gZGVwcy50ZXh0VmFsdWVUb1Byb3BlclZhbHVlKHZhbCwgcmV0dXJuT2JqZWN0KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmaWx0ZXJlZC5sZW5ndGggPSBpbmRleDsgLy8gVHJpbSB0byBhY3R1YWwgc2l6ZVxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHByb2Nlc3NSZXR1cm5PYmplY3RWYWx1ZShcbiAgICBtb2RlbFZhbHVlRGF0YTogVFZhbHVlIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNNYXBEYXRhOiBNYXA8YW55LCBUSXRlbT4sXG4gICAgcmV0dXJuT2JqZWN0OiBib29sZWFuLFxuICAgIGN1c3RvbVZhbHVlOiBib29sZWFuLFxuICAgIHNob3VsZFVwZGF0ZUludGVybmFsU2VhcmNoOiBib29sZWFuLFxuICApOiBUSXRlbVtdIHtcbiAgICBjb25zdCBtdWx0aXBsZVZhbHVlID0gQXJyYXkuaXNBcnJheShtb2RlbFZhbHVlRGF0YSk7XG4gICAgY29uc3QgdmFsdWVBcnJheSA9IGNvbnZlcnRNb2RlbFZhbHVlVG9BcnJheShtb2RlbFZhbHVlRGF0YSk7XG4gICAgY29uc3QgZmlsdGVyZWQgPSBmaWx0ZXJWYWx1ZXNCeU9wdGlvbnModmFsdWVBcnJheSwgb3B0aW9uc01hcERhdGEsIGN1c3RvbVZhbHVlLCByZXR1cm5PYmplY3QpO1xuXG4gICAgaWYgKG11bHRpcGxlVmFsdWUgfHwgZmlsdGVyZWQubGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAoc2hvdWxkVXBkYXRlSW50ZXJuYWxTZWFyY2gpXG4gICAgICAgIGRlcHMudXBkYXRlSW50ZXJuYWxTZWFyY2goKTtcbiAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICB9XG5cbiAgICBjb25zdCB2YWwgPSBmaWx0ZXJlZFswXTtcbiAgICBhc3NlcnQodmFsKTtcbiAgICBpZiAoc2hvdWxkVXBkYXRlSW50ZXJuYWxTZWFyY2gpXG4gICAgICBkZXBzLnVwZGF0ZUludGVybmFsU2VhcmNoKGRlcHMuZ2V0VGV4dCh2YWwpKTtcbiAgICByZXR1cm4gW3ZhbF07XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzU3RhbmRhcmRWYWx1ZShcbiAgICBtb2RlbFZhbHVlRGF0YTogVFZhbHVlIHwgdW5kZWZpbmVkLFxuICAgIG9wdGlvbnNNYXBEYXRhOiBNYXA8YW55LCBUSXRlbT4sXG4gICAgcmV0dXJuT2JqZWN0OiBib29sZWFuLFxuICAgIGN1c3RvbVZhbHVlOiBib29sZWFuLFxuICAgIHNob3VsZFVwZGF0ZUludGVybmFsU2VhcmNoOiBib29sZWFuLFxuICApOiBUSXRlbVtdIHtcbiAgICBjb25zdCB2YWx1ZUFycmF5ID0gY29udmVydE1vZGVsVmFsdWVUb0FycmF5KG1vZGVsVmFsdWVEYXRhKTtcbiAgICBjb25zdCBmaWx0ZXJlZCA9IGZpbHRlclZhbHVlc0J5SWRlbnRpZmllcih2YWx1ZUFycmF5LCBvcHRpb25zTWFwRGF0YSwgY3VzdG9tVmFsdWUsIHJldHVybk9iamVjdCk7XG5cbiAgICBpZiAoc2hvdWxkVXBkYXRlSW50ZXJuYWxTZWFyY2gpIHtcbiAgICAgIGlmIChmaWx0ZXJlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IGZpcnN0SXRlbSA9IGZpbHRlcmVkWzBdO1xuICAgICAgICBhc3NlcnQoZmlyc3RJdGVtKTtcbiAgICAgICAgZGVwcy51cGRhdGVJbnRlcm5hbFNlYXJjaChkZXBzLmdldFRleHQoZmlyc3RJdGVtKSk7XG4gICAgICB9XG4gICAgICBlbHNlIHtcbiAgICAgICAgZGVwcy51cGRhdGVJbnRlcm5hbFNlYXJjaCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVXBkYXRlTW9kZWxWYWx1ZSh2YWx1ZTogVFZhbHVlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgc2V0KG1vZGVsVmFsdWUsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNldFNlbGVjdGVkKHNlbGVjdGVkOiBUSXRlbVtdKTogdm9pZCB7XG4gICAgY29uc3Qga2V5QXR0ciA9IGdldChvcHRzLmtleUF0dHIpO1xuICAgIGNvbnN0IHJldHVybk9iamVjdCA9IGdldChvcHRzLnJldHVybk9iamVjdCk7XG4gICAgY29uc3Qgc2VsZWN0aW9uID0ga2V5QXR0ciAmJiAhcmV0dXJuT2JqZWN0ID8gc2VsZWN0ZWQubWFwKGl0ZW0gPT4gaXRlbVtrZXlBdHRyXSkgOiBzZWxlY3RlZDtcblxuICAgIGlmIChnZXQobXVsdGlwbGUpKVxuICAgICAgcmV0dXJuIG9uVXBkYXRlTW9kZWxWYWx1ZShzZWxlY3Rpb24gYXMgVFZhbHVlKTtcblxuICAgIGlmIChzZWxlY3Rpb24ubGVuZ3RoID09PSAwKVxuICAgICAgcmV0dXJuIG9uVXBkYXRlTW9kZWxWYWx1ZSh1bmRlZmluZWQpO1xuXG4gICAgcmV0dXJuIG9uVXBkYXRlTW9kZWxWYWx1ZShzZWxlY3Rpb25bMF0gYXMgVFZhbHVlKTtcbiAgfVxuXG4gIGNvbnN0IHZhbHVlID0gY29tcHV0ZWQ8VEl0ZW1bXT4oe1xuICAgIGdldDogKCkgPT4ge1xuICAgICAgY29uc3QgbW9kZWxWYWx1ZURhdGEgPSBnZXQobW9kZWxWYWx1ZSk7XG4gICAgICBjb25zdCBrZXlBdHRyID0gZ2V0KG9wdHMua2V5QXR0cik7XG4gICAgICBjb25zdCByZXR1cm5PYmplY3QgPSBnZXQob3B0cy5yZXR1cm5PYmplY3QpID8/IGZhbHNlO1xuICAgICAgY29uc3QgY3VzdG9tVmFsdWUgPSBnZXQob3B0cy5jdXN0b21WYWx1ZSkgPz8gZmFsc2U7XG4gICAgICBjb25zdCBvcHRpb25zTWFwRGF0YSA9IGdldChvcHRpb25zTWFwKTtcbiAgICAgIGNvbnN0IHNob3VsZFVwZGF0ZUludGVybmFsU2VhcmNoID0gZ2V0KGRlcHMuc2hvdWxkQXBwbHlWYWx1ZUFzU2VhcmNoKSAmJiAhZ2V0KGRlcHMuaXNPcGVuKTtcblxuICAgICAgaWYgKGtleUF0dHIgJiYgcmV0dXJuT2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBwcm9jZXNzUmV0dXJuT2JqZWN0VmFsdWUoXG4gICAgICAgICAgbW9kZWxWYWx1ZURhdGEsXG4gICAgICAgICAgb3B0aW9uc01hcERhdGEsXG4gICAgICAgICAgcmV0dXJuT2JqZWN0LFxuICAgICAgICAgIGN1c3RvbVZhbHVlLFxuICAgICAgICAgIHNob3VsZFVwZGF0ZUludGVybmFsU2VhcmNoLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcHJvY2Vzc1N0YW5kYXJkVmFsdWUoXG4gICAgICAgIG1vZGVsVmFsdWVEYXRhLFxuICAgICAgICBvcHRpb25zTWFwRGF0YSxcbiAgICAgICAgcmV0dXJuT2JqZWN0LFxuICAgICAgICBjdXN0b21WYWx1ZSxcbiAgICAgICAgc2hvdWxkVXBkYXRlSW50ZXJuYWxTZWFyY2gsXG4gICAgICApO1xuICAgIH0sXG4gICAgc2V0OiAoc2VsZWN0ZWQ6IFRJdGVtW10pOiB2b2lkID0+IHtcbiAgICAgIHNldFNlbGVjdGVkKHNlbGVjdGVkKTtcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHNldFNlbGVjdGVkLFxuICAgIHZhbHVlLFxuICB9O1xufVxuIiwiaW1wb3J0IHsgaW5qZWN0IH0gZnJvbSAndnVlJztcblxuZXhwb3J0IGNvbnN0IFJVSV9JMThOX0lOSkVDVElPTl9LRVkgPSBTeW1ib2woJ3J1aTppMThuJyk7XG5cbmludGVyZmFjZSBJMThuUHJvdmlkZXIge1xuICB0OiB7XG4gICAgKGtleTogc3RyaW5nLCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nO1xuICAgIChrZXk6IHN0cmluZywgcGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBmYWxsYmFjazogc3RyaW5nKTogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJ1aUkxOG5Qcm92aWRlciB7XG4gIHQ6IChrZXk6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgYW55PikgPT4gc3RyaW5nO1xuICB0ZTogKGtleTogc3RyaW5nKSA9PiBib29sZWFuO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdXNlUnVpSThuKCk6IEkxOG5Qcm92aWRlciB7XG4gIGNvbnN0IGkxOG5Qcm92aWRlciA9IGluamVjdDxSdWlJMThuUHJvdmlkZXIgfCB1bmRlZmluZWQ+KFJVSV9JMThOX0lOSkVDVElPTl9LRVksIHVuZGVmaW5lZCk7XG5cbiAgY29uc3QgdHJhbnNsYXRlID0gKGtleTogc3RyaW5nLCBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogc3RyaW5nIHwgdW5kZWZpbmVkID0+IHtcbiAgICBpZiAoaTE4blByb3ZpZGVyPy50ZShrZXkpKSB7XG4gICAgICByZXR1cm4gaTE4blByb3ZpZGVyPy50KGtleSwgcGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfTtcblxuICBjb25zdCB0ID0gKFxuICAgIGtleTogc3RyaW5nLFxuICAgIHBhcmFtc09yRmFsbGJhY2s/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nLFxuICAgIGZhbGxiYWNrPzogc3RyaW5nLFxuICApOiBzdHJpbmcgPT4ge1xuICAgIGlmICh0eXBlb2YgcGFyYW1zT3JGYWxsYmFjayA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiB0cmFuc2xhdGUoa2V5KSA/PyBwYXJhbXNPckZhbGxiYWNrID8/IGtleTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICByZXR1cm4gdHJhbnNsYXRlKGtleSwgcGFyYW1zT3JGYWxsYmFjaykgPz8gZmFsbGJhY2sgPz8ga2V5O1xuICAgIH1cbiAgfTtcblxuICByZXR1cm4geyB0IH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IEluamVjdGlvbktleSwgTWF5YmVSZWYsIFJlZiB9IGZyb20gJ3Z1ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVPcHRpb25zIHtcbiAgaXRlbXNQZXJQYWdlOiBSZWY8bnVtYmVyPjtcbiAgZ2xvYmFsSXRlbXNQZXJQYWdlOiBNYXliZVJlZjxib29sZWFuPjtcbiAgbGltaXRzOiBNYXliZVJlZjxudW1iZXJbXT47XG4gIHN0aWNreU9mZnNldDogTWF5YmVSZWY8bnVtYmVyPjtcbn1cblxuZXhwb3J0IGNvbnN0IFRhYmxlU3ltYm9sOiBJbmplY3Rpb25LZXk8VGFibGVPcHRpb25zPiA9IFN5bWJvbC5mb3IoJ3J1aTp0YWJsZScpO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVGFibGVEZWZhdWx0cyhvcHRpb25zPzogUGFydGlhbDxUYWJsZU9wdGlvbnM+KTogVGFibGVPcHRpb25zIHtcbiAgcmV0dXJuIHtcbiAgICBnbG9iYWxJdGVtc1BlclBhZ2U6IGZhbHNlLFxuICAgIGl0ZW1zUGVyUGFnZTogcmVmKDEwKSxcbiAgICBsaW1pdHM6IFsxMCwgMjUsIDUwLCAxMDBdLFxuICAgIHN0aWNreU9mZnNldDogcmVmKDApLFxuICAgIC4uLm9wdGlvbnMsXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VUYWJsZSgpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IGluamVjdChUYWJsZVN5bWJvbCk7XG5cbiAgaWYgKCFvcHRpb25zKVxuICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgcnVpIHRhYmxlIG9wdGlvbnMgaW5qZWN0aW9uJyk7XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG4iLCJpbXBvcnQgdHlwZSB7IE1heWJlUmVmIH0gZnJvbSAndnVlJztcbmltcG9ydCB7IGFzc2VydCB9IGZyb20gJ0AvdXRpbHMvYXNzZXJ0JztcblxuLyoqXG4gKiBTZXR1cCBzdGlja3kgdGFibGUgaGVhZGVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1c2VTdGlja3lUYWJsZUhlYWRlcihzdGlja3k6IE1heWJlUmVmPGJvb2xlYW4+ID0gcmVmKGZhbHNlKSwgb2Zmc2V0VG9wPzogTWF5YmVSZWY8bnVtYmVyPikge1xuICBjb25zdCB0YWJsZTogUmVmPEhUTUxUYWJsZUVsZW1lbnQgfCBudWxsPiA9IHJlZihudWxsKTtcbiAgY29uc3QgdGFibGVTY3JvbGxlcjogUmVmPEhUTUxFbGVtZW50IHwgbnVsbD4gPSByZWYobnVsbCk7XG4gIGNvbnN0IHN0aWNrOiBSZWY8Ym9vbGVhbj4gPSByZWYoZmFsc2UpO1xuICBjb25zdCBib3JkZXJQcmVjaXNpb24gPSAtMC41O1xuICBjb25zdCBzZWxlY3RvcnMgPSB7XG4gICAgaGVhZDogJzpzY29wZSA+IHRoZWFkW2RhdGEtaWQ9aGVhZC1tYWluXScsXG4gICAgaGVhZENsb25lOiAnOnNjb3BlID4gdGhlYWRbZGF0YS1pZD1oZWFkLWNsb25lXScsXG4gICAgcm93OiAnOnNjb3BlID4gdGJvZHkgPiB0cjpub3QoW2hpZGRlbl0pJyxcbiAgICB0aDogJzpzY29wZSA+IHRoJyxcbiAgfTtcblxuICBjb25zdCB3YXRjaENlbGxXaWR0aCA9ICgpID0+IHtcbiAgICBjb25zdCByb290ID0gZ2V0KHRhYmxlKTtcblxuICAgIGlmICghZ2V0KHN0aWNreSkgfHwgIXJvb3QpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB0aGVhZENsb25lOiBIVE1MSGVhZEVsZW1lbnQgfCBudWxsID0gcm9vdC5xdWVyeVNlbGVjdG9yKFxuICAgICAgYCR7c2VsZWN0b3JzLmhlYWRDbG9uZX0gPiB0cmAsXG4gICAgKTtcblxuICAgIGNvbnN0IGhlYWQ6IEhUTUxIZWFkRWxlbWVudCB8IG51bGxcbiAgICAgID0gcm9vdC5xdWVyeVNlbGVjdG9yKGAke3NlbGVjdG9ycy5oZWFkfSA+IHRyYCkgPz8gbnVsbDtcblxuICAgIGNvbnN0IG9ic2VydmVDaGlsZFRoID0gKCkgPT4ge1xuICAgICAgY29uc3QgY29sdW1uczogTm9kZUxpc3RPZjxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQgPSBoZWFkPy5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBzZWxlY3RvcnMudGgsXG4gICAgICApO1xuXG4gICAgICBjb25zdCBjbG9uZWRDb2x1bW5zOiBOb2RlTGlzdE9mPEhUTUxFbGVtZW50PiB8IHVuZGVmaW5lZFxuICAgICAgICA9IHRoZWFkQ2xvbmU/LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzLnRoKTtcblxuICAgICAgY2xvbmVkQ29sdW1ucz8uZm9yRWFjaCgodGg6IEhUTUxFbGVtZW50LCBpOiBudW1iZXIpID0+IHtcbiAgICAgICAgdXNlUmVzaXplT2JzZXJ2ZXIodGgsIChlbnRyaWVzKSA9PiB7XG4gICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdO1xuICAgICAgICAgIGFzc2VydChlbnRyeSk7XG4gICAgICAgICAgY29uc3QgY2VsbFJlY3QgPSBlbnRyeS50YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgY29uc3QgY29sdW1uID0gY29sdW1ucz8uaXRlbShpKTtcbiAgICAgICAgICBpZiAoY29sdW1uKVxuICAgICAgICAgICAgY29sdW1uLnN0eWxlLndpZHRoID0gYCR7Y2VsbFJlY3Qud2lkdGh9cHhgO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICB1c2VNdXRhdGlvbk9ic2VydmVyKHRoZWFkQ2xvbmUsIChtdXRhdGlvbnNMaXN0KSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9uc0xpc3QpIHtcbiAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT09ICdjaGlsZExpc3QnIHx8IG11dGF0aW9uLnR5cGUgPT09ICdhdHRyaWJ1dGVzJylcbiAgICAgICAgICBvYnNlcnZlQ2hpbGRUaCgpO1xuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgLy8gSW5pdGlhbCBzZXR1cCB0byBvYnNlcnZlIHRoZSBleGlzdGluZyB0aCBlbGVtZW50c1xuICAgIG9ic2VydmVDaGlsZFRoKCk7XG4gIH07XG5cbiAgY29uc3QgdG9nZ2xlU3RpY2t5Q2xhc3MgPSAoKSA9PiB7XG4gICAgY29uc3Qgcm9vdCA9IGdldCh0YWJsZSk7XG5cbiAgICBpZiAoIWdldChzdGlja3kpIHx8ICFyb290KVxuICAgICAgcmV0dXJuO1xuXG4gICAgY29uc3QgcmVjdCA9IHJvb3QuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdGhlYWRDbG9uZTogSFRNTEhlYWRFbGVtZW50IHwgbnVsbCA9IHJvb3QucXVlcnlTZWxlY3RvcihcbiAgICAgIHNlbGVjdG9ycy5oZWFkQ2xvbmUsXG4gICAgKTtcblxuICAgIGNvbnN0IGNsb25lZFJlY3Q6IERPTVJlY3QgfCB1bmRlZmluZWQgPSB0aGVhZENsb25lPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGNvbnN0IGhlYWQ6IEhUTUxIZWFkRWxlbWVudCB8IG51bGxcbiAgICAgID0gcm9vdC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9ycy5oZWFkKSA/PyBudWxsO1xuXG4gICAgY29uc3QgaGVhZFJlY3Q6IERPTVJlY3QgfCB1bmRlZmluZWQgPSBoZWFkPy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgIGlmICghcmVjdCB8fCAhY2xvbmVkUmVjdCB8fCAhaGVhZCB8fCAhdGhlYWRDbG9uZSB8fCAhaGVhZFJlY3QpXG4gICAgICByZXR1cm47XG5cbiAgICBjb25zdCB7XG4gICAgICBoZWlnaHQ6IHRoZWFkSGVpZ2h0LFxuICAgICAgbGVmdDogdGhlYWRMZWZ0LFxuICAgICAgd2lkdGg6IHRoZWFkV2lkdGgsXG4gICAgfSA9IGNsb25lZFJlY3Q7XG5cbiAgICBjb25zdCB7IGJvdHRvbTogdGFibGVCb3R0b20sIHRvcDogdGFibGVUb3AgfSA9IHJlY3Q7XG4gICAgY29uc3QgdG9wID0gZ2V0KG9mZnNldFRvcCkgPz8gMDtcblxuICAgIGhlYWQuc3R5bGUud2lkdGggPSBgJHt0aGVhZFdpZHRofXB4YDtcblxuICAgIGNvbnN0IHJvd3MgPSByb290LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3JzLnJvdyk7XG5cbiAgICBjb25zdCBsYXN0Um93UmVjdDogRE9NUmVjdCB8IHVuZGVmaW5lZCA9IHJvd3NcbiAgICAgIC5pdGVtKHJvd3MubGVuZ3RoIC0gMSlcbiAgICAgID8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cbiAgICBpZiAodGFibGVUb3AgPD0gdG9wICYmIHRhYmxlQm90dG9tID4gdG9wICYmIHJvd3MubGVuZ3RoID4gMSkge1xuICAgICAgc2V0KHN0aWNrLCB0cnVlKTtcbiAgICAgIGhlYWQuc3R5bGUubGVmdCA9IGAke3RoZWFkTGVmdCArIGJvcmRlclByZWNpc2lvbn1weGA7XG5cbiAgICAgIGNvbnN0IGxhc3RSb3dIZWlnaHQgPSBsYXN0Um93UmVjdD8uaGVpZ2h0ID8/IDA7XG4gICAgICBpZiAodGFibGVCb3R0b20gPD0gbGFzdFJvd0hlaWdodCArIHRoZWFkSGVpZ2h0ICsgdG9wKVxuICAgICAgICBoZWFkLnN0eWxlLnRvcCA9IGAke3RhYmxlQm90dG9tIC0gbGFzdFJvd0hlaWdodCAtIHRoZWFkSGVpZ2h0fXB4YDtcbiAgICAgIGVsc2VcbiAgICAgICAgaGVhZC5zdHlsZS50b3AgPSBgJHt0b3B9cHhgO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgIHNldChzdGljaywgZmFsc2UpO1xuICAgICAgaGVhZC5zdHlsZS5sZWZ0ID0gYCR7Ym9yZGVyUHJlY2lzaW9ufXB4YDtcbiAgICAgIGhlYWQuc3R5bGUudG9wID0gJzAnO1xuICAgIH1cbiAgfTtcblxuICBvbk1vdW50ZWQoKCkgPT4ge1xuICAgIHRvZ2dsZVN0aWNreUNsYXNzKCk7XG4gICAgdXNlRXZlbnRMaXN0ZW5lcih0YWJsZVNjcm9sbGVyLCAnc2Nyb2xsJywgdG9nZ2xlU3RpY2t5Q2xhc3MpO1xuICAgIHVzZUV2ZW50TGlzdGVuZXIoZG9jdW1lbnQuYm9keSwgJ3Njcm9sbCcsIHRvZ2dsZVN0aWNreUNsYXNzKTtcbiAgICB1c2VFdmVudExpc3RlbmVyKHdpbmRvdywgJ3Jlc2l6ZScsIHRvZ2dsZVN0aWNreUNsYXNzKTtcbiAgICB3YXRjaENlbGxXaWR0aCgpO1xuICB9KTtcblxuICByZXR1cm4ge1xuICAgIHN0aWNrLFxuICAgIHRhYmxlLFxuICAgIHRhYmxlU2Nyb2xsZXIsXG4gIH07XG59XG4iXSwibmFtZXMiOlsidXNlQnJlYWtwb2ludCIsIndpZHRoIiwidXNlV2luZG93U2l6ZSIsImJyZWFrcG9pbnRMaXN0IiwiYnJlYWtwb2ludHNUYWlsd2luZCIsImJyZWFrcG9pbnRzIiwidXNlQnJlYWtwb2ludHMiLCJnZXRLZXlzIiwibGlzdCIsInJhd1NpemVzIiwiYnJlYWtwb2ludCIsImluZGV4IiwibmV4dEJyZWFrcG9pbnQiLCJhc3NlcnQiLCJzaXplcyIsInZhbHVlIiwiY2FtZWxDYXNlIiwic2l6ZXNVcCIsInNpemVzRG93biIsIm5hbWUiLCJjb21wdXRlZCIsIml0ZW0iLCJnZXQiLCJyZXF1aXJlZEljb25zIiwiTHVDaGV2cm9uc1VwRG93biIsIkx1RWxsaXBzaXMiLCJMdVRyaWFuZ2xlQWxlcnQiLCJMdVgiLCJMdUluZm8iLCJMdUFycm93VXAiLCJMdUFycm93RG93biIsIkx1QXJyb3dMZWZ0IiwiTHVBcnJvd1JpZ2h0IiwiTHVDaGV2cm9uVXAiLCJMdUNoZXZyb25Eb3duIiwiTHVDaGV2cm9uTGVmdCIsIkx1Q2hldnJvblJpZ2h0IiwiTHVDaGV2cm9uc0xlZnQiLCJMdUNoZXZyb25zUmlnaHQiLCJMdUNpcmNsZUFsZXJ0IiwiTHVFeWUiLCJMdUV5ZU9mZiIsIkx1Q2hlY2siLCJMdUNpcmNsZVgiLCJMdUNpcmNsZUNoZWNrIiwiTHVDaGVja2JveEJsYW5rIiwiTHVDaGVja2JveEZpbGwiLCJMdUNoZWNrYm94SW5kZXRlcm1pbmF0ZUZpbGwiLCJMdUNoZWNrYm94QmxhbmtDaXJjbGUiLCJMdUNoZWNrYm94QmxhbmtDaXJjbGVGaWxsIiwiTHVSYWRpb0J1dHRvbkZpbGwiLCJMdUNsb2NrIiwiSWNvbnNTeW1ib2wiLCJjcmVhdGVJY29uRGVmYXVsdHMiLCJvcHRpb25zIiwiaWNvbnNUb0FkZCIsImNvbXBvbmVudHMiLCJ1c2VJY29ucyIsImljb25zIiwiaW5qZWN0IiwiY29uZmlnIiwicmVmIiwiZGVmYXVsdFRoZW1lIiwidXNlUm90a2lUaGVtZSIsImNyZWF0ZVNoYXJlZENvbXBvc2FibGUiLCJzdGF0ZSIsInN0b3JlIiwidXNlQ29sb3JNb2RlIiwiYXR0cmlidXRlU3RhdGUiLCJ3YXRjaCIsIm5ld1N0YXRlIiwic2V0IiwiaXNBdXRvQ29udHJvbGxlZCIsIlRoZW1lTW9kZSIsImlzTGlnaHQiLCJpc0RhcmsiLCJ0aGVtZSIsInN3aXRjaFRoZW1lU2NoZW1lIiwibW9kZSIsInRvZ2dsZVRoZW1lTW9kZSIsInNldFRoZW1lQ29uZmlnIiwibmV3Q29uZmlnIiwic3R5bGVWYXJpYWJsZXMiLCJjb250ZXh0IiwiY29udGV4dE9iamVjdCIsInJvb3RTdHlsZSIsInZhcmlhYmxlTmFtZSIsInVzZVRpbWVvdXRNYW5hZ2VyIiwidGltZW91dCIsImNsZWFyIiwiY2FsbGJhY2siLCJkZWxheSIsIkRFRkFVTFRfUE9QUEVSX09QVElPTlMiLCJ1c2VQb3BwZXIiLCJkaXNhYmxlZCIsIm9wZW5EZWxheSIsImNsb3NlRGVsYXkiLCJ2aXJ0dWFsUmVmZXJlbmNlIiwicmVmZXJlbmNlIiwicG9wcGVyIiwiaW5zdGFuY2UiLCJvcGVuIiwicG9wcGVyRW50ZXIiLCJsZWF2ZVBlbmRpbmciLCJvcGVuVGltZW91dE1hbmFnZXIiLCJjbG9zZVRpbWVvdXRNYW5hZ2VyIiwib25Qb3BwZXJMZWF2ZSIsInVwZGF0ZVBvcHBlciIsIm9uT3BlbiIsImltbWVkaWF0ZSIsIm9uQ2xvc2UiLCJvbkxlYXZlUGVuZGluZyIsIm1vZGlmaWVycyIsImFkYXB0aXZlIiwiZ3B1QWNjZWxlcmF0aW9uIiwibG9ja2VkIiwib2Zmc2V0RGlzdGFuY2UiLCJvZmZzZXRTa2lkIiwib3ZlcmZsb3dQYWRkaW5nIiwicmVzaXplIiwic2Nyb2xsIiwicG9wcGVyQ29uZmlnIiwicGxhY2VtZW50Iiwic3RyYXRlZ3kiLCJnZXRWYWxpZEVsZW1lbnRzIiwicG9wcGVyRWwiLCJ1bnJlZkVsZW1lbnQiLCJyZWZlcmVuY2VFbCIsImluaXRpYWxpemVQb3BwZXIiLCJvbkludmFsaWRhdGUiLCJlbGVtZW50cyIsImNyZWF0ZVBvcHBlciIsInVzZVJlc2l6ZU9ic2VydmVyIiwiaXNEZWZpbmVkIiwib25Nb3VudGVkIiwid2F0Y2hFZmZlY3QiLCJ1c2VEcm9wZG93bk9wdGlvblByb3BlcnR5Iiwia2V5QXR0ciIsInRleHRBdHRyIiwiZ2V0VGV4dCIsImdldElkZW50aWZpZXIiLCJ1c2VEcm9wZG93bk1lbnUiLCJhcHBlbmRXaWR0aCIsImF1dG9Gb2N1cyIsImF1dG9TZWxlY3RGaXJzdCIsImRlbnNlIiwiaGlkZVNlbGVjdGVkIiwiaXRlbUhlaWdodCIsIm1lbnVSZWYiLCJhbGxPcHRpb25zIiwib3ZlcnNjYW4iLCJwcmVwZW5kV2lkdGgiLCJzZXRWYWx1ZSIsImlzQWN0aXZlSXRlbSIsImNvbnRhaW5lclByb3BzIiwic2Nyb2xsVG8iLCJ3cmFwcGVyUHJvcHMiLCJ1c2VWaXJ0dWFsTGlzdCIsInJlbmRlcmVkRGF0YSIsInVzZUFycmF5TWFwIiwiZGF0YSIsIl9pbmRleCIsImlzT3BlbiIsInZhbHVlS2V5Iiwic2VsZWN0ZWQiLCJoaWdobGlnaHRlZEluZGV4IiwibWVudVdpZHRoIiwid2lkdGhzIiwibWF4V2lkdGgiLCJwYWRkaW5nWCIsImZvbnRNdWx0aXBsaWVyIiwib3B0aW9uIiwibGVuZ3RoIiwiZGlmZmVyZW5jZSIsImNvbXB1dGVWYWx1ZSIsImFkZGl0aW9uYWxXaWR0aHMiLCJ0b2dnbGUiLCJpdGVtSW5kZXhJblZhbHVlIiwidmFsIiwic2VsZWN0ZWRJdGVtIiwiYWRqdXN0U2Nyb2xsQnlIaWdobGlnaHRlZEluZGV4Iiwic21vb3RoIiwibmV4dFRpY2siLCJoaWdobGlnaHRlZEVsZW0iLCJlbGVtIiwidXBkYXRlT3BlbiIsIndhdGNoT25jZSIsIl8iLCJjdXJyIiwicHJldiIsImhpZ2hsaWdodGVkSW5kZXhWYWwiLCJlbnRyeSIsIl9kYXRhIiwidXAiLCJwb3NpdGlvbiIsInRvdGFsIiwidXNlQXV0b0NvbXBsZXRlRm9jdXMiLCJkZXBzIiwiYW55Rm9jdXNlZCIsImlucHV0Q2xhc3MiLCJpc0ZvY3VzZWQiLCJpc0Rpc2FibGVkIiwic2hvdWxkQXBwbHkiLCJoYXNTZWFyY2giLCJzZXRJbnB1dEZvY3VzIiwib25BY3RpdmF0b3JGb2N1c2VkIiwib25JbnB1dEZvY3VzZWQiLCJ3YXRjaERlYm91bmNlZCIsImZvY3VzZWQiLCJjdXN0b21WYWx1ZSIsImZpbHRlcmVkT3B0aW9ucyIsImludGVybmFsU2VhcmNoIiwidXNlQXV0b0NvbXBsZXRlS2V5Ym9hcmROYXZpZ2F0aW9uIiwiZm9jdXNlZFZhbHVlSW5kZXgiLCJjaGlwRWxlbWVudHNDYWNoZSIsInNldFZhbHVlRm9jdXMiLCJtb3ZlU2VsZWN0ZWRWYWx1ZUhpZ2hsaWdodCIsImV2ZW50IiwibmV4dCIsIm11bHRpcGxlIiwiaW50ZXJuYWxTZWFyY2hWYWx1ZSIsImN1cnJlbnQiLCJvbkVudGVyIiwiaGFzRXhhY3RNYXRjaCIsImhpZ2hsaWdodGVkT3B0aW9uIiwiZm9ybSIsIm9uVGFiIiwib25JbnB1dERlbGV0ZVByZXNzZWQiLCJjYWNoZSIsImFjdGl2ZUNoaXAiLCJlbGVtZW50IiwidXNlQXV0b0NvbXBsZXRlU2VhcmNoIiwic2VhcmNoTW9kZWwiLCJvcHRzIiwiZGVib3VuY2VkSW50ZXJuYWxTZWFyY2giLCJyZWZEZWJvdW5jZWQiLCJqdXN0T3BlbmVkIiwidG9rZW5DYWNoZSIsImdldENhY2hlZFRleHRUb2tlbiIsInRleHQiLCJ0b2tlbiIsImdldFRleHRUb2tlbiIsInNlYXJjaCIsIm9wdGlvbnNWYWx1ZSIsImZpbHRlciIsInNlYXJjaFRva2VuIiwidXNlZEZpbHRlciIsImtleXdvcmRzIiwia2V5d29yZCIsImZpbHRlcmVkIiwiaGlkZUN1c3RvbVZhbHVlIiwidGV4dFZhbHVlVG9Qcm9wZXJWYWx1ZSIsInJldHVybk9iamVjdCIsInVwZGF0ZUludGVybmFsU2VhcmNoIiwib25Vbm1vdW50ZWQiLCJyZXR1cm5PYmplY3RPdmVycmlkZSIsInVzZUF1dG9Db21wbGV0ZVZhbHVlIiwibW9kZWxWYWx1ZSIsIm9wdGlvbnNNYXAiLCJtYXAiLCJvcHRpb25zRGF0YSIsImNvbnZlcnRNb2RlbFZhbHVlVG9BcnJheSIsIm1vZGVsVmFsdWVEYXRhIiwiZmlsdGVyVmFsdWVzQnlPcHRpb25zIiwidmFsdWVBcnJheSIsIm9wdGlvbnNNYXBEYXRhIiwiaWRlbnRpZmllciIsImluT3B0aW9ucyIsImZpbHRlclZhbHVlc0J5SWRlbnRpZmllciIsInByb2Nlc3NSZXR1cm5PYmplY3RWYWx1ZSIsInNob3VsZFVwZGF0ZUludGVybmFsU2VhcmNoIiwibXVsdGlwbGVWYWx1ZSIsInByb2Nlc3NTdGFuZGFyZFZhbHVlIiwiZmlyc3RJdGVtIiwib25VcGRhdGVNb2RlbFZhbHVlIiwic2V0U2VsZWN0ZWQiLCJzZWxlY3Rpb24iLCJSVUlfSTE4Tl9JTkpFQ1RJT05fS0VZIiwidXNlUnVpSThuIiwiaTE4blByb3ZpZGVyIiwidHJhbnNsYXRlIiwia2V5IiwicGFyYW1zIiwicGFyYW1zT3JGYWxsYmFjayIsImZhbGxiYWNrIiwiVGFibGVTeW1ib2wiLCJjcmVhdGVUYWJsZURlZmF1bHRzIiwidXNlVGFibGUiLCJ1c2VTdGlja3lUYWJsZUhlYWRlciIsInN0aWNreSIsIm9mZnNldFRvcCIsInRhYmxlIiwidGFibGVTY3JvbGxlciIsInN0aWNrIiwiYm9yZGVyUHJlY2lzaW9uIiwic2VsZWN0b3JzIiwid2F0Y2hDZWxsV2lkdGgiLCJyb290IiwidGhlYWRDbG9uZSIsImhlYWQiLCJvYnNlcnZlQ2hpbGRUaCIsImNvbHVtbnMiLCJ0aCIsImkiLCJlbnRyaWVzIiwiY2VsbFJlY3QiLCJjb2x1bW4iLCJ1c2VNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zTGlzdCIsIm11dGF0aW9uIiwidG9nZ2xlU3RpY2t5Q2xhc3MiLCJyZWN0IiwiY2xvbmVkUmVjdCIsImhlYWRSZWN0IiwidGhlYWRIZWlnaHQiLCJ0aGVhZExlZnQiLCJ0aGVhZFdpZHRoIiwidGFibGVCb3R0b20iLCJ0YWJsZVRvcCIsInRvcCIsInJvd3MiLCJsYXN0Um93UmVjdCIsImxhc3RSb3dIZWlnaHQiLCJ1c2VFdmVudExpc3RlbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFLTyxTQUFTQSxLQUFnQjtBQUM5QixRQUFNLEVBQUUsT0FBQUMsRUFBQSxJQUFVQyxHQUFBLEdBRVpDLElBQWlCO0FBQUEsSUFDckIsSUFBSTtBQUFBLElBQ0osR0FBR0M7QUFBQSxFQUFBLEdBS0NDLElBQWNDLEdBQWVILENBQWMsR0FFM0NJLElBQVUsT0FBTyxNQUVqQkMsSUFBT0QsRUFBUUosQ0FBYyxHQUU3Qk0sSUFBeUNELEVBQUs7QUFBQSxJQUNsRCxDQUFD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
|