w-component-vue 2.1.78 → 2.1.81
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/w-component-vue.umd.js +3 -3
- package/dist/w-component-vue.umd.js.map +1 -1
- package/docs/binarySearch.mjs.html +1 -1
- package/docs/examples/app.html +1 -1
- package/docs/examples/app.umd.js +2 -2
- package/docs/examples/app.umd.js.map +1 -1
- package/docs/examples/w-aggrid-vue-dyn_defCellEditable.html +1 -1
- package/docs/examples/w-aggrid-vue-dyn_kpCellEditable_kpRowStyle.html +1 -1
- package/docs/examples/w-aggrid-vue-dyn_kpHeadTooltip_kpCellTooltip.html +1 -1
- package/docs/examples/w-aggrid-vue-dyn_large data (1,000,000 items).html +1 -1
- package/docs/examples/w-aggrid-vue-dyn_simple data.html +1 -1
- package/docs/examples/w-alert_backgroundColor.html +1 -1
- package/docs/examples/w-alert_borderColor.html +1 -1
- package/docs/examples/w-alert_borderRadius.html +1 -1
- package/docs/examples/w-alert_borderWidth.html +1 -1
- package/docs/examples/w-alert_default.html +1 -1
- package/docs/examples/w-alert_icon.html +1 -1
- package/docs/examples/w-alert_position.html +1 -1
- package/docs/examples/w-alert_recive closed event by promise.html +1 -1
- package/docs/examples/w-alert_shadowStyle.html +1 -1
- package/docs/examples/w-alert_textColor.html +1 -1
- package/docs/examples/w-alert_time (6s).html +1 -1
- package/docs/examples/w-alert_type error.html +1 -1
- package/docs/examples/w-alert_type infor.html +1 -1
- package/docs/examples/w-alert_type warning.html +1 -1
- package/docs/examples/w-badge_backgroundColor.html +1 -1
- package/docs/examples/w-badge_badgeAlign.html +1 -1
- package/docs/examples/w-badge_borderColor_textColor_backgroundColor.html +1 -1
- package/docs/examples/w-badge_borderRadius.html +1 -1
- package/docs/examples/w-badge_default.html +1 -1
- package/docs/examples/w-badge_textColor_backgroundColor.html +1 -1
- package/docs/examples/w-badge_textFontSize.html +1 -1
- package/docs/examples/w-button-chip_active_backgroundColorActive.html +1 -1
- package/docs/examples/w-button-chip_active_borderColorActive.html +1 -1
- package/docs/examples/w-button-chip_active_iconColorActive.html +1 -1
- package/docs/examples/w-button-chip_active_no shadow_no shadowActive.html +1 -1
- package/docs/examples/w-button-chip_active_shadowActiveStyle.html +1 -1
- package/docs/examples/w-button-chip_active_textColorActive.html +1 -1
- package/docs/examples/w-button-chip_backgroundColor_backgroundColorHover.html +1 -1
- package/docs/examples/w-button-chip_borderColor_borderColorHover.html +1 -1
- package/docs/examples/w-button-chip_borderRadius.html +1 -1
- package/docs/examples/w-button-chip_borderRadiusStyle.html +1 -1
- package/docs/examples/w-button-chip_borderRadiusStyle_borderWidth_borderColor_borderColorHover.html +1 -1
- package/docs/examples/w-button-chip_borderWidth.html +1 -1
- package/docs/examples/w-button-chip_close.html +1 -1
- package/docs/examples/w-button-chip_close_shiftRight.html +1 -1
- package/docs/examples/w-button-chip_default.html +1 -1
- package/docs/examples/w-button-chip_icon (fontawesome).html +1 -1
- package/docs/examples/w-button-chip_icon (material).html +1 -1
- package/docs/examples/w-button-chip_icon_iconColor_iconColorHover_close.html +1 -1
- package/docs/examples/w-button-chip_icon_no text.html +1 -1
- package/docs/examples/w-button-chip_loading.html +1 -1
- package/docs/examples/w-button-chip_loading_loadingColor.html +1 -1
- package/docs/examples/w-button-chip_loading_textColor_textColorHover.html +1 -1
- package/docs/examples/w-button-chip_modify loading by callback in click.html +1 -1
- package/docs/examples/w-button-chip_modify prog by callback in click.html +1 -1
- package/docs/examples/w-button-chip_no shadow.html +1 -1
- package/docs/examples/w-button-chip_not editable.html +1 -1
- package/docs/examples/w-button-chip_not editable_disabledColor.html +1 -1
- package/docs/examples/w-button-chip_paddingStyle (equal height to using icon).html +1 -1
- package/docs/examples/w-button-chip_paddingStyle (thin style).html +1 -1
- package/docs/examples/w-button-chip_paddingStyle_icon_iconSize_textFontSize.html +1 -1
- package/docs/examples/w-button-chip_prog.html +1 -1
- package/docs/examples/w-button-chip_prog_progColor_progBackgroundColor.html +1 -1
- package/docs/examples/w-button-chip_promiseUnlock.html +1 -1
- package/docs/examples/w-button-chip_rippleColor.html +1 -1
- package/docs/examples/w-button-chip_shadowStyle.html +1 -1
- package/docs/examples/w-button-chip_shiftLeft.html +1 -1
- package/docs/examples/w-button-chip_slot_close.html +1 -1
- package/docs/examples/w-button-chip_textColor.html +1 -1
- package/docs/examples/w-button-chip_textColor_textColorHover.html +1 -1
- package/docs/examples/w-button-chip_tooltip.html +1 -1
- package/docs/examples/w-button-circle_backgroundColor_backgroundColorHover_backgroundColorFocus.html +1 -1
- package/docs/examples/w-button-circle_borderWidth_borderColor_borderColorHover_borderColorFocus.html +1 -1
- package/docs/examples/w-button-circle_icon (fontawesome).html +1 -1
- package/docs/examples/w-button-circle_icon (material).html +1 -1
- package/docs/examples/w-button-circle_iconColor_iconColorHover_iconColorFocus.html +1 -1
- package/docs/examples/w-button-circle_loading.html +1 -1
- package/docs/examples/w-button-circle_loading_loadingColor.html +1 -1
- package/docs/examples/w-button-circle_no shadow.html +1 -1
- package/docs/examples/w-button-circle_not editable.html +1 -1
- package/docs/examples/w-button-circle_not editable_disabledColor.html +1 -1
- package/docs/examples/w-button-circle_paddingStyle.html +1 -1
- package/docs/examples/w-button-circle_paddingStyle_iconSize.html +1 -1
- package/docs/examples/w-button-circle_promiseUnlock.html +1 -1
- package/docs/examples/w-button-circle_rippleColor.html +1 -1
- package/docs/examples/w-button-circle_shadowStyle.html +1 -1
- package/docs/examples/w-button-circle_tooltip.html +1 -1
- package/docs/examples/w-checkbox_checkedIconColor_checkedIconColorHover_uncheckedIconColor_uncheckedIconColorHover.html +1 -1
- package/docs/examples/w-checkbox_checkedIcon_uncheckedIcon.html +1 -1
- package/docs/examples/w-checkbox_default.html +1 -1
- package/docs/examples/w-checkbox_iconSize_textFontSize.html +1 -1
- package/docs/examples/w-checkbox_not editable.html +1 -1
- package/docs/examples/w-checkbox_not editable_checkedIconColorDisabled_uncheckedIconColorDisabled.html +1 -1
- package/docs/examples/w-checkbox_text.html +1 -1
- package/docs/examples/w-checkbox_text_textColor_textColorHover.html +1 -1
- package/docs/examples/w-checkbox_use string (y or n).html +1 -1
- package/docs/examples/w-ckeditor-vue-dyn_default.html +1 -1
- package/docs/examples/w-ckeditor-vue-dyn_height.html +1 -1
- package/docs/examples/w-ckeditor-vue-dyn_not editable.html +1 -1
- package/docs/examples/w-ckeditor-vue-dyn_settings.html +1 -1
- package/docs/examples/w-confirm_contentColor_contentIconColor_contentBackgroundColor.html +1 -1
- package/docs/examples/w-confirm_contentIcon (fontawesome).html +1 -1
- package/docs/examples/w-confirm_contentIconColor.html +1 -1
- package/docs/examples/w-confirm_contentIconSize.html +1 -1
- package/docs/examples/w-confirm_hasNoBtn_yesBtnText.html +1 -1
- package/docs/examples/w-confirm_maxWidth.html +1 -1
- package/docs/examples/w-confirm_noBtnTextColor_noBtnTextColorHover_noBtnBackgroundColor_noBtnBackgroundColorHover.html +1 -1
- package/docs/examples/w-confirm_noBtnText_yesBtnText.html +1 -1
- package/docs/examples/w-confirm_scrollable (slot content).html +1 -1
- package/docs/examples/w-confirm_scrollable.html +1 -1
- package/docs/examples/w-confirm_slot content.html +1 -1
- package/docs/examples/w-confirm_slot footer.html +1 -1
- package/docs/examples/w-confirm_slot header.html +1 -1
- package/docs/examples/w-confirm_titleColor_headerBackgroundColor_footerBackgroundColor.html +1 -1
- package/docs/examples/w-confirm_title_content.html +1 -1
- package/docs/examples/w-dialog_closeWithInterceptor.html +1 -1
- package/docs/examples/w-dialog_contentTextColor_contentBackgroundColor.html +1 -1
- package/docs/examples/w-dialog_fullscreen.html +1 -1
- package/docs/examples/w-dialog_hasSaveBtn and hasCloseBtn, no save and close button.html +1 -1
- package/docs/examples/w-dialog_hasSaveBtn, no save button.html +1 -1
- package/docs/examples/w-dialog_headerBackgroundColor.html +1 -1
- package/docs/examples/w-dialog_headerBtns.html +1 -1
- package/docs/examples/w-dialog_headerIconColor_headerTextColor_headerBackgroundColor.html +1 -1
- package/docs/examples/w-dialog_icon (fontawesome).html +1 -1
- package/docs/examples/w-dialog_maxWidth, for narrow width.html +1 -1
- package/docs/examples/w-dialog_multi dialogs.html +1 -1
- package/docs/examples/w-dialog_saveBtnTooltip_closeBtnTooltip.html +1 -1
- package/docs/examples/w-dialog_scrollable.html +1 -1
- package/docs/examples/w-dialog_separate for slot content.html +1 -1
- package/docs/examples/w-dialog_slot content.html +1 -1
- package/docs/examples/w-dialog_slot header-left_header-right.html +1 -1
- package/docs/examples/w-dialog_table in slot content.html +1 -1
- package/docs/examples/w-dialog_title.html +1 -1
- package/docs/examples/w-drawer_afloat.html +1 -1
- package/docs/examples/w-drawer_afloat_afloatByFix.html +1 -1
- package/docs/examples/w-drawer_afloat_afloatByFix_mode.html +1 -1
- package/docs/examples/w-drawer_afloat_mode.html +1 -1
- package/docs/examples/w-drawer_afloat_overlayOpacity.html +1 -1
- package/docs/examples/w-drawer_default.html +1 -1
- package/docs/examples/w-drawer_drawerWidth.html +1 -1
- package/docs/examples/w-drawer_mode.html +1 -1
- package/docs/examples/w-drawer_multiple.html +1 -1
- package/docs/examples/w-dropfiles_backgroundColor_backgroundColorDropIn_backgroundColorHover.html +1 -1
- package/docs/examples/w-dropfiles_borderColor_borderColorDropIn_borderColorHover_backgroundColorDropIn.html +1 -1
- package/docs/examples/w-dropfiles_borderRadius.html +1 -1
- package/docs/examples/w-dropfiles_borderWidth.html +1 -1
- package/docs/examples/w-dropfiles_default.html +1 -1
- package/docs/examples/w-dropfiles_timeTransition.html +1 -1
- package/docs/examples/w-dynamic-list_change rows.html +1 -1
- package/docs/examples/w-dynamic-list_change slot.html +1 -1
- package/docs/examples/w-dynamic-list_default.html +1 -1
- package/docs/examples/w-dynamic-list_filterKeywords_noResultsText.html +1 -1
- package/docs/examples/w-dynamic-list_large data (1,000,000 items).html +1 -1
- package/docs/examples/w-dynamic-list_processItems.html +1 -1
- package/docs/examples/w-dynamic-list_render.html +1 -1
- package/docs/examples/w-dynamic-list_slot item with image.html +1 -1
- package/docs/examples/w-dynamic-list_viewHeightMax.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_area.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_bar3D.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_continuous.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_heatmap.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_line.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_line3D.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_parallel.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_polar heatmap.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_polar.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_radar.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_scatter.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_stack.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_surface.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_tree.html +1 -1
- package/docs/examples/w-echarts-vue-dyn_treemap.html +1 -1
- package/docs/examples/w-group-check_backgroundColorActive.html +1 -1
- package/docs/examples/w-group-check_backgroundColor_backgroundColorHover.html +1 -1
- package/docs/examples/w-group-check_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-check_borderRadius.html +1 -1
- package/docs/examples/w-group-check_borderRadius_borderRadiusStyle_paddingStyle.html +1 -1
- package/docs/examples/w-group-check_borderWidth_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-check_click (console.log).html +1 -1
- package/docs/examples/w-group-check_default.html +1 -1
- package/docs/examples/w-group-check_group (only one).html +1 -1
- package/docs/examples/w-group-check_group_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-check_group_groupBorderRadiusStyle_groupShift_borderRadius.html +1 -1
- package/docs/examples/w-group-check_icon (fontawesome).html +1 -1
- package/docs/examples/w-group-check_icon (material).html +1 -1
- package/docs/examples/w-group-check_iconColorActive.html +1 -1
- package/docs/examples/w-group-check_iconColor_iconColorHover.html +1 -1
- package/docs/examples/w-group-check_loading.html +1 -1
- package/docs/examples/w-group-check_loading_loadingColor.html +1 -1
- package/docs/examples/w-group-check_marginStyle.html +1 -1
- package/docs/examples/w-group-check_no shadowActive.html +1 -1
- package/docs/examples/w-group-check_not editable.html +1 -1
- package/docs/examples/w-group-check_paddingStyle_borderRadius_textColor_iconColor.html +1 -1
- package/docs/examples/w-group-check_paddingStyle_iconSize_textFontSize.html +1 -1
- package/docs/examples/w-group-check_shadow.html +1 -1
- package/docs/examples/w-group-check_shadowActiveStyle.html +1 -1
- package/docs/examples/w-group-check_shadow_shadowStyle.html +1 -1
- package/docs/examples/w-group-check_shiftLeft.html +1 -1
- package/docs/examples/w-group-check_shiftLeft_shiftRight.html +1 -1
- package/docs/examples/w-group-check_slot_shadow.html +1 -1
- package/docs/examples/w-group-check_textColor.html +1 -1
- package/docs/examples/w-group-check_textColorActive.html +1 -1
- package/docs/examples/w-group-check_textColor_textColorHover.html +1 -1
- package/docs/examples/w-group-check_tooltip.html +1 -1
- package/docs/examples/w-group-dragdrop_default.html +1 -1
- package/docs/examples/w-group-dragdrop_event (dragdrop).html +1 -1
- package/docs/examples/w-group-dragdrop_items(string array).html +1 -1
- package/docs/examples/w-group-dragdrop_keyBinder.html +1 -1
- package/docs/examples/w-group-dragdrop_not draggable.html +1 -1
- package/docs/examples/w-group-dragdrop_not itemStyleInline (block).html +1 -1
- package/docs/examples/w-group-radio_backgroundColorActive.html +1 -1
- package/docs/examples/w-group-radio_backgroundColor_backgroundColorHover.html +1 -1
- package/docs/examples/w-group-radio_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-radio_borderRadius.html +1 -1
- package/docs/examples/w-group-radio_borderRadius_borderRadiusStyle_paddingStyle.html +1 -1
- package/docs/examples/w-group-radio_borderWidth_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-radio_click (console.log).html +1 -1
- package/docs/examples/w-group-radio_default.html +1 -1
- package/docs/examples/w-group-radio_group (only one).html +1 -1
- package/docs/examples/w-group-radio_group_borderColor_borderColorHover_borderColorActive.html +1 -1
- package/docs/examples/w-group-radio_group_groupBorderRadiusStyle_groupShift_borderRadius.html +1 -1
- package/docs/examples/w-group-radio_icon (fontawesome).html +1 -1
- package/docs/examples/w-group-radio_icon (material).html +1 -1
- package/docs/examples/w-group-radio_iconColorActive.html +1 -1
- package/docs/examples/w-group-radio_iconColor_iconColorHover.html +1 -1
- package/docs/examples/w-group-radio_loading.html +1 -1
- package/docs/examples/w-group-radio_loading_loadingColor.html +1 -1
- package/docs/examples/w-group-radio_marginStyle.html +1 -1
- package/docs/examples/w-group-radio_no shadowActive.html +1 -1
- package/docs/examples/w-group-radio_not editable.html +1 -1
- package/docs/examples/w-group-radio_paddingStyle_borderRadius_textColor_iconColor.html +1 -1
- package/docs/examples/w-group-radio_paddingStyle_iconSize_textFontSize.html +1 -1
- package/docs/examples/w-group-radio_shadow.html +1 -1
- package/docs/examples/w-group-radio_shadowActiveStyle.html +1 -1
- package/docs/examples/w-group-radio_shadow_shadowStyle.html +1 -1
- package/docs/examples/w-group-radio_shiftLeft.html +1 -1
- package/docs/examples/w-group-radio_shiftLeft_shiftRight.html +1 -1
- package/docs/examples/w-group-radio_slot_shadow.html +1 -1
- package/docs/examples/w-group-radio_textColor.html +1 -1
- package/docs/examples/w-group-radio_textColorActive.html +1 -1
- package/docs/examples/w-group-radio_textColor_textColorHover.html +1 -1
- package/docs/examples/w-group-radio_tooltip.html +1 -1
- package/docs/examples/w-group-tags_backgroundColor_backgroundColorHover.html +1 -1
- package/docs/examples/w-group-tags_borderColor_borderColorHover.html +1 -1
- package/docs/examples/w-group-tags_borderRadius.html +1 -1
- package/docs/examples/w-group-tags_closeWithInterceptor.html +1 -1
- package/docs/examples/w-group-tags_default.html +1 -1
- package/docs/examples/w-group-tags_editableClose(no close button).html +1 -1
- package/docs/examples/w-group-tags_editableInput(no slot input).html +1 -1
- package/docs/examples/w-group-tags_enableCloseEventOnly.html +1 -1
- package/docs/examples/w-group-tags_icon (fontawesome).html +1 -1
- package/docs/examples/w-group-tags_icon (material).html +1 -1
- package/docs/examples/w-group-tags_iconColor_iconColorHover_textColor_textColorHover.html +1 -1
- package/docs/examples/w-group-tags_icon_iconColor_iconColorHover.html +1 -1
- package/docs/examples/w-group-tags_inputTextButtonTooltip.html +1 -1
- package/docs/examples/w-group-tags_inputTextColor_inputTextBorderColor_inputTextBorderColorHover_inputTextBorderColorFocus.html +1 -1
- package/docs/examples/w-group-tags_inputTextWidth.html +1 -1
- package/docs/examples/w-group-tags_marginStyle.html +1 -1
- package/docs/examples/w-group-tags_modify loading by callback in click.html +1 -1
- package/docs/examples/w-group-tags_modify loading_textColor_textColorHover.html +1 -1
- package/docs/examples/w-group-tags_modify prog by callback in click.html +1 -1
- package/docs/examples/w-group-tags_no shadow_borderColor_borderColorHover.html +1 -1
- package/docs/examples/w-group-tags_not draggable.html +1 -1
- package/docs/examples/w-group-tags_not editable.html +1 -1
- package/docs/examples/w-group-tags_not editable_nodata.html +1 -1
- package/docs/examples/w-group-tags_object items.html +1 -1
- package/docs/examples/w-group-tags_object items_addButtonTextColor_addButtonTextColorHover_addButtonIconColor.html +1 -1
- package/docs/examples/w-group-tags_object items_addButtonText_addButtonTooltip.html +1 -1
- package/docs/examples/w-group-tags_object items_keyIcon.html +1 -1
- package/docs/examples/w-group-tags_object items_keyText.html +1 -1
- package/docs/examples/w-group-tags_object items_keyTooltip.html +1 -1
- package/docs/examples/w-group-tags_object items_slot item.html +1 -1
- package/docs/examples/w-group-tags_object items_slot item_editableInput(no slot input)_useActive.html +1 -1
- package/docs/examples/w-group-tags_object items_slot item_useColorsFromItem_editableInput(no slot input).html +1 -1
- package/docs/examples/w-group-tags_paddingStyle_icon_iconSize_textFontSize.html +1 -1
- package/docs/examples/w-group-tags_progColor_progBackgroundColor.html +1 -1
- package/docs/examples/w-group-tags_shadowStyle.html +1 -1
- package/docs/examples/w-group-tags_shiftLeft.html +1 -1
- package/docs/examples/w-group-tags_slot input.html +1 -1
- package/docs/examples/w-group-tags_slot item.html +1 -1
- package/docs/examples/w-group-tags_slot item_useActive_valueActive_paddingStyle.html +1 -1
- package/docs/examples/w-group-tags_suggests.html +1 -1
- package/docs/examples/w-group-tags_suggests_inputTextColor_inputExpansionIconColor.html +1 -1
- package/docs/examples/w-group-tags_suggests_placeholder_noResultsText.html +1 -1
- package/docs/examples/w-group-tags_suggests_suggectItemFontSize_suggectItemTextColor_suggectItemTextColorHover.html +1 -1
- package/docs/examples/w-group-tags_textColor.html +1 -1
- package/docs/examples/w-group-tags_textColor_textColorHover.html +1 -1
- package/docs/examples/w-group-tags_useActive_valueActive.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_area.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_bar.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_change options.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_heatmap.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_large heatmap.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_line.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_pie.html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_render (need w-hc2png-server) (line).html +1 -1
- package/docs/examples/w-highcharts-bitmap-dyn_scale (line).html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_area.html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_bar.html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_heatmap.html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_large heatmap.html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_line.html +1 -1
- package/docs/examples/w-highcharts-vue-dyn_pie.html +1 -1
- package/docs/examples/w-highstock-vue-dyn_area.html +1 -1
- package/docs/examples/w-highstock-vue-dyn_line.html +1 -1
- package/docs/examples/w-icon-svg_path (mdi-access-point)_size.html +1 -1
- package/docs/examples/w-icon-svg_path (mdi-account-badge-horizontal)_timeTransition.html +1 -1
- package/docs/examples/w-icon-svg_path (mdi-fruit-cherries).html +1 -1
- package/docs/examples/w-icon-svg_path (mdi-graph-outline)_color_colorHover.html +1 -1
- package/docs/examples/w-icon-svg_path (use 3 paths)_sizeOriginal.html +1 -1
- package/docs/examples/w-icon-svg_path_sizeOriginal.html +1 -1
- package/docs/examples/w-image-cascading-dyn_arrangeWhenFinish.html +1 -1
- package/docs/examples/w-image-cascading-dyn_colNum.html +1 -1
- package/docs/examples/w-image-cascading-dyn_default(imageWidth=300).html +1 -1
- package/docs/examples/w-image-cascading-dyn_imageWidth.html +1 -1
- package/docs/examples/w-image-viewer-dyn_multiple image with navbar.html +1 -1
- package/docs/examples/w-image-viewer-dyn_one image.html +1 -1
- package/docs/examples/w-json-view_default.html +4 -2
- package/docs/examples/{w-json-view_sync viewHeightMax(change-height-of-items).html → w-json-view_events.html} +6 -3
- package/docs/examples/w-json-view_filterKeywords_noResultsText.html +4 -2
- package/docs/examples/w-json-view_iconColor_keyColor_keyNumbersColor_numColor.html +4 -2
- package/docs/examples/w-json-view_large data (15,500 lines).html +4 -2
- package/docs/examples/w-json-view_no viewHeightMax.html +475 -0
- package/docs/examples/w-json-view_viewHeightMax.html +4 -2
- package/docs/examples/w-leaflet-vue-dyn_contourSet for rain data.html +1 -1
- package/docs/examples/w-leaflet-vue-dyn_contourSets.html +1 -1
- package/docs/examples/w-leaflet-vue-dyn_pointSets.html +1 -1
- package/docs/examples/w-leaflet-vue-dyn_polygonSets.html +1 -1
- package/docs/examples/w-list-vertical_auto scroll.html +1 -1
- package/docs/examples/w-list-vertical_default.html +1 -1
- package/docs/examples/w-list-vertical_itemActive.html +1 -1
- package/docs/examples/w-list-vertical_itemActive_itemBackgroundColor_itemBackgroundColorHover_itemBackgroundColorActive.html +1 -1
- package/docs/examples/w-list-vertical_itemActive_itemTextColor_itemTextColorHover_itemTextColorActive.html +1 -1
- package/docs/examples/w-list-vertical_keyText_keyIcon.html +1 -1
- package/docs/examples/w-list-vertical_paddingStyle.html +1 -1
- package/docs/examples/w-list-vertical_slot footer.html +1 -1
- package/docs/examples/w-list-vertical_slot header.html +1 -1
- package/docs/examples/w-list-vertical_slot item.html +1 -1
- package/docs/examples/w-list-vertical_string items.html +1 -1
- package/docs/examples/w-list-vertical_useActive (no active).html +1 -1
- package/docs/examples/w-list-vertical_useActive (no active)_itemRippleColor.html +1 -1
- package/docs/examples/w-panel-bulge_contentBackgroundColor.html +1 -1
- package/docs/examples/w-panel-bulge_contentBorderRadius.html +1 -1
- package/docs/examples/w-panel-bulge_default.html +1 -1
- package/docs/examples/w-panel-bulge_headerBorderRadius.html +1 -1
- package/docs/examples/w-panel-bulge_headerPadding.html +1 -1
- package/docs/examples/w-panel-bulge_headerTextColor_headerBackgroundColor.html +1 -1
- package/docs/examples/w-panel-bulge_no headerShadow_no contentShadow, with green outer.html +1 -1
- package/docs/examples/w-panel-bulge_slot for header_headerBorderRadius_headerBackgroundColor(linear-gradient).html +1 -1
- package/docs/examples/w-panel-bulge_with grey outer.html +1 -1
- package/docs/examples/w-panel-chart_cmpName (WEchartsVueDyn).html +1 -1
- package/docs/examples/w-panel-chart_cmpName (WHighchartsBitmapDyn).html +1 -1
- package/docs/examples/w-panel-chart_cmpName (WHighstockVueDyn).html +1 -1
- package/docs/examples/w-panel-chart_default (WHighchartsVueDyn).html +1 -1
- package/docs/examples/w-panel-chart_downloadPicture.html +1 -1
- package/docs/examples/w-panel-chart_downloadPicture_downloadPictureBtnIcon.html +1 -1
- package/docs/examples/w-panel-chart_downloadPicture_downloadPictureBtnIconColor_downloadPictureBtnIconColorHover_downloadPictureBtnIconColorFocus.html +1 -1
- package/docs/examples/w-panel-chart_downloadPicture_downloadPictureBtnTooltip.html +1 -1
- package/docs/examples/w-panel-chart_downloadPicture_downloadPictureFilenmae.html +1 -1
- package/docs/examples/w-panel-chart_scale.html +1 -1
- package/docs/examples/w-panel-chart_width_height.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_barBorderSize_barBorderColor.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_barColor.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_barSize.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_default.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_min_max.html +1 -1
- package/docs/examples/w-panel-divide-horizontal_ratio.html +1 -1
- package/docs/examples/w-panel-divide-vertical_barBorderSize_barBorderColor.html +1 -1
- package/docs/examples/w-panel-divide-vertical_barColor.html +1 -1
- package/docs/examples/w-panel-divide-vertical_barSize.html +1 -1
- package/docs/examples/w-panel-divide-vertical_default.html +1 -1
- package/docs/examples/w-panel-divide-vertical_min_max.html +1 -1
- package/docs/examples/w-panel-divide-vertical_ratio.html +1 -1
- package/docs/examples/w-panel-scale_for select.html +1 -1
- package/docs/examples/w-panel-scale_for v-btn.html +1 -1
- package/docs/examples/w-panel-scale_for w-panel-bulge.html +1 -1
- package/docs/examples/w-panel-scale_for w-panel-scrolly.html +1 -1
- package/docs/examples/w-panel-scale_for w-text-suggest.html +1 -1
- package/docs/examples/w-panel-scrolly_barOpacity_barOpacityHover.html +1 -1
- package/docs/examples/w-panel-scrolly_default.html +1 -1
- package/docs/examples/w-panel-scrolly_events.html +2 -1
- package/docs/examples/w-panel-scrolly_scrollTop.html +1 -1
- package/docs/examples/w-panel-stripe_borderRadius.html +1 -1
- package/docs/examples/w-panel-stripe_buttons in slot footer.html +1 -1
- package/docs/examples/w-panel-stripe_headerBackgroundColor_footerBackgroundColor.html +1 -1
- package/docs/examples/w-panel-stripe_no footer.html +1 -1
- package/docs/examples/w-panel-stripe_no header.html +1 -1
- package/docs/examples/w-panel-stripe_no shadow, with crimson outer.html +1 -1
- package/docs/examples/w-panel-stripe_only slot icon and slot title in header.html +1 -1
- package/docs/examples/w-panel-stripe_only slot title in header.html +1 -1
- package/docs/examples/w-panel-stripe_padding.html +1 -1
- package/docs/examples/w-panel-stripe_separate for slot content.html +1 -1
- package/docs/examples/w-panel-stripe_slot icon (fontawesome).html +1 -1
- package/docs/examples/w-panel-stripe_slot icon, slot title, slot description, slot content and slot footer.html +1 -1
- package/docs/examples/w-panel-stripe_table in slot content.html +1 -1
- package/docs/examples/w-panel-stripe_with grey outer.html +1 -1
- package/docs/examples/w-popup-edit-text_default.html +1 -1
- package/docs/examples/w-popup-edit-text_in table.html +1 -1
- package/docs/examples/w-popup-edit-text_minWidthForPopup.html +1 -1
- package/docs/examples/w-popup-edit-text_minWidthForValue.html +1 -1
- package/docs/examples/w-popup-edit-text_no title.html +1 -1
- package/docs/examples/w-popup-edit-text_title_contentIcon_contentIconColor_contentIconSize.html +1 -1
- package/docs/examples/w-popup-edit-text_title_footerBackgroundColor.html +1 -1
- package/docs/examples/w-popup-edit-text_title_inputTextColor_contentIconColor_contentBackgroundColor.html +1 -1
- package/docs/examples/w-popup-edit-text_title_saveBtnText_saveBtnTextColor_saveBtnTextColorHover.html +1 -1
- package/docs/examples/w-popup-edit-text_title_titleColor_titleFontSize_headerBackgroundColor.html +1 -1
- package/docs/examples/w-popup_auto flipping in scroll panel.html +1 -1
- package/docs/examples/w-popup_backgroundColor.html +1 -1
- package/docs/examples/w-popup_borderRadius.html +1 -1
- package/docs/examples/w-popup_click item by latency hiding.html +1 -1
- package/docs/examples/w-popup_default.html +1 -1
- package/docs/examples/w-popup_distY.html +1 -1
- package/docs/examples/w-popup_in dialog.html +1 -1
- package/docs/examples/w-popup_in popup.html +1 -1
- package/docs/examples/w-popup_in scroll panel.html +1 -1
- package/docs/examples/w-popup_isolated.html +1 -1
- package/docs/examples/w-popup_maxWidth.html +1 -1
- package/docs/examples/w-popup_minWidth.html +1 -1
- package/docs/examples/w-popup_no shadow_backgroundColor.html +1 -1
- package/docs/examples/w-popup_not editable.html +1 -1
- package/docs/examples/w-popup_shadowStyle.html +1 -1
- package/docs/examples/w-popup_slot for table_maxWidth.html +1 -1
- package/docs/examples/w-progress-bar_decimal.html +1 -1
- package/docs/examples/w-progress-bar_default.html +1 -1
- package/docs/examples/w-progress-bar_enableIconFinish (no iconFinish).html +1 -1
- package/docs/examples/w-progress-bar_enableIconWaiting (no iconWaiting).html +1 -1
- package/docs/examples/w-progress-bar_height.html +1 -1
- package/docs/examples/w-progress-bar_height_borderRadius.html +1 -1
- package/docs/examples/w-progress-bar_iconFinish (fontawesome).html +1 -1
- package/docs/examples/w-progress-bar_iconFinishColor.html +1 -1
- package/docs/examples/w-progress-bar_iconSize.html +1 -1
- package/docs/examples/w-progress-bar_iconWaiting (fontawesome).html +1 -1
- package/docs/examples/w-progress-bar_iconWaitingColor.html +1 -1
- package/docs/examples/w-progress-bar_progColor.html +1 -1
- package/docs/examples/w-progress-bar_progColor_progBackgroundColor.html +1 -1
- package/docs/examples/w-progress-bar_title.html +1 -1
- package/docs/examples/w-progress-bar_title_titleTextColor.html +1 -1
- package/docs/examples/w-progress-bar_title_titleTextFontSize.html +1 -1
- package/docs/examples/w-progress-bar_value=0 (waiting).html +1 -1
- package/docs/examples/w-progress-bar_value=100 (finish).html +1 -1
- package/docs/examples/w-progress-bar_valueTextColor.html +1 -1
- package/docs/examples/w-progress-bar_valueTextFontSize.html +1 -1
- package/docs/examples/w-progress-circle_color.html +1 -1
- package/docs/examples/w-progress-circle_default.html +1 -1
- package/docs/examples/w-progress-circle_small size.html +1 -1
- package/docs/examples/w-progress-circle_tooltip.html +1 -1
- package/docs/examples/w-progress-circle_very small size.html +1 -1
- package/docs/examples/w-progress-circle_width.html +1 -1
- package/docs/examples/w-progress-circle_/344/270/255/346/226/207text.html +1 -1
- package/docs/examples/w-quill-vue-dyn_default.html +1 -1
- package/docs/examples/w-quill-vue-dyn_height.html +1 -1
- package/docs/examples/w-quill-vue-dyn_not editable.html +1 -1
- package/docs/examples/w-quill-vue-dyn_settings.html +1 -1
- package/docs/examples/{w-switch_not editable_checkedSwitchColorDisabled_uncheckedSwitchColorDisabled.html → w-switch_checkedSwitchCircleColor_checkedSwitchCircleColorHover_checkedSwitchBarColor_checkedSwitchBarColorHover.html} +6 -5
- package/docs/examples/w-switch_default.html +1 -1
- package/docs/examples/w-switch_not editable.html +1 -1
- package/docs/examples/w-switch_not editable_checkedSwitchCircleColorDisabled_checkedSwitchBarColorDisabled_uncheckedSwitchCircleColorDisabled.html +182 -0
- package/docs/examples/w-switch_switchSize_textFontSize.html +1 -1
- package/docs/examples/w-switch_text.html +1 -1
- package/docs/examples/w-switch_text_textColor_textColorHover.html +3 -3
- package/docs/examples/{w-switch_checkedSwitchColor_checkedSwitchColorHover_uncheckedSwitchColor_uncheckedSwitchColorHover.html → w-switch_uncheckedSwitchCircleColor_uncheckedSwitchCircleColorHover_uncheckedSwitchBarColor_uncheckedSwitchBarColorHover.html} +6 -6
- package/docs/examples/w-switch_use string (y or n).html +1 -1
- package/docs/examples/w-table-dyn_default.html +1 -1
- package/docs/examples/w-table-dyn_editable.html +1 -1
- package/docs/examples/w-table-dyn_editable_checkId.html +1 -1
- package/docs/examples/w-table-dyn_editable_checkId_opt.modifyDataWhenSave_save(call cmp. method).html +1 -1
- package/docs/examples/w-table-dyn_editable_checkId_successMsgFromAddRow_errorMsgFromAddRow.html +1 -1
- package/docs/examples/w-table-dyn_editable_checkId_tooltipAddRow_tooltipDeleteSelectedRows.html +1 -1
- package/docs/examples/w-table-dyn_editable_inforPaddingStyle_menuBackgroundColor.html +1 -1
- package/docs/examples/w-table-dyn_editable_opt.beforeAddRow.html +1 -1
- package/docs/examples/w-table-dyn_editable_opt.kpConvertKeysWhenUploadData.html +1 -1
- package/docs/examples/w-table-dyn_editable_opt.optForUploadData.html +1 -1
- package/docs/examples/w-table-dyn_editable_slot btns.html +1 -1
- package/docs/examples/w-table-dyn_editable_textLabelDataName_textPlaceholderDataName_textLabelDataDescription.html +1 -1
- package/docs/examples/w-table-dyn_fixIds (fix id).html +1 -1
- package/docs/examples/w-table-dyn_hideIds (hide mappingId).html +1 -1
- package/docs/examples/w-table-dyn_name_description.html +1 -1
- package/docs/examples/w-table-dyn_opt.kpHead.html +1 -1
- package/docs/examples/w-table-dyn_removeIdsWhenDownload (remove id, mappingId, order, isActive).html +1 -1
- package/docs/examples/w-table-dyn_slot btns.html +1 -1
- package/docs/examples/w-table-dyn_slot infor (name_description).html +1 -1
- package/docs/examples/w-table-dyn_sortColIds (sort by order).html +1 -1
- package/docs/examples/w-text-int_borderRadius.html +1 -1
- package/docs/examples/w-text-int_border_backgroundColor_backgroundColorHover_backgroundColorFocus.html +1 -1
- package/docs/examples/w-text-int_border_borderRadius.html +1 -1
- package/docs/examples/w-text-int_border_buttonColor_buttonColorHover_buttonColorFocus.html +1 -1
- package/docs/examples/w-text-int_border_default.html +1 -1
- package/docs/examples/w-text-int_border_not editable.html +1 -1
- package/docs/examples/w-text-int_border_width.html +1 -1
- package/docs/examples/w-text-int_buttonColor_buttonColorHover_buttonColorFocus.html +1 -1
- package/docs/examples/w-text-int_buttonIconSize.html +1 -1
- package/docs/examples/w-text-int_default.html +1 -1
- package/docs/examples/w-text-int_not editable.html +1 -1
- package/docs/examples/w-text-int_textColor.html +1 -1
- package/docs/examples/w-text-int_textFontSize.html +1 -1
- package/docs/examples/w-text-int_width.html +1 -1
- package/docs/examples/w-text-select_a lot of items.html +1 -1
- package/docs/examples/w-text-select_borderRadius.html +1 -1
- package/docs/examples/w-text-select_border_a lot of items.html +1 -1
- package/docs/examples/w-text-select_border_backgroundColor_backgroundColorHover_backgroundColorFocus.html +1 -1
- package/docs/examples/w-text-select_border_borderRadius.html +1 -1
- package/docs/examples/w-text-select_border_default.html +1 -1
- package/docs/examples/w-text-select_border_events.html +1 -1
- package/docs/examples/w-text-select_border_expansionIconSize.html +1 -1
- package/docs/examples/w-text-select_border_fullwidth.html +1 -1
- package/docs/examples/w-text-select_border_itemPaddingStyle.html +1 -1
- package/docs/examples/w-text-select_border_itemTextColor_itemTextColorHover_itemBackgroundColor.html +1 -1
- package/docs/examples/w-text-select_border_itemTextFontSize_defItemHeight_width.html +1 -1
- package/docs/examples/w-text-select_border_items(string array).html +1 -1
- package/docs/examples/w-text-select_border_keyText.html +1 -1
- package/docs/examples/w-text-select_border_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text-select_border_leftIcon (material).html +1 -1
- package/docs/examples/w-text-select_border_leftIcon_leftIconColor_leftIconColorHover.html +1 -1
- package/docs/examples/w-text-select_border_leftIcon_leftIconSize.html +1 -1
- package/docs/examples/w-text-select_border_not editable.html +1 -1
- package/docs/examples/w-text-select_border_paddingStyle (equal height to using icon).html +1 -1
- package/docs/examples/w-text-select_border_paddingStyle (thin style).html +1 -1
- package/docs/examples/w-text-select_border_rightIcon_rightIconColor_rightIconColorHover.html +1 -1
- package/docs/examples/w-text-select_border_rightIcon_rightIconSize.html +1 -1
- package/docs/examples/w-text-select_border_showExpansionIcon.html +1 -1
- package/docs/examples/w-text-select_border_slot item.html +1 -1
- package/docs/examples/w-text-select_border_slot select.html +1 -1
- package/docs/examples/w-text-select_border_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-text-select_border_textFontSize.html +1 -1
- package/docs/examples/w-text-select_border_with popup.html +1 -1
- package/docs/examples/w-text-select_default.html +1 -1
- package/docs/examples/w-text-select_events.html +1 -1
- package/docs/examples/w-text-select_expansionIconSize.html +1 -1
- package/docs/examples/w-text-select_fullwidth.html +1 -1
- package/docs/examples/w-text-select_itemPaddingStyle.html +1 -1
- package/docs/examples/w-text-select_itemTextColor_itemTextColorHover_itemBackgroundColor_itemBackgroundColorHover.html +1 -1
- package/docs/examples/w-text-select_itemTextFontSize_defItemHeight_width.html +1 -1
- package/docs/examples/w-text-select_items(string array).html +1 -1
- package/docs/examples/w-text-select_keyText.html +1 -1
- package/docs/examples/w-text-select_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text-select_leftIcon (material).html +1 -1
- package/docs/examples/w-text-select_leftIcon_leftIconColor_leftIconColorHover_leftIconColorFocus.html +1 -1
- package/docs/examples/w-text-select_leftIcon_leftIconSize.html +1 -1
- package/docs/examples/w-text-select_not editable.html +1 -1
- package/docs/examples/w-text-select_paddingStyle (equal height to using icon).html +1 -1
- package/docs/examples/w-text-select_paddingStyle (thin style).html +1 -1
- package/docs/examples/w-text-select_rightIcon_rightIconColor_rightIconColorHover_rightIconColorFocus.html +1 -1
- package/docs/examples/w-text-select_rightIcon_rightIconSize.html +1 -1
- package/docs/examples/w-text-select_showExpansionIcon.html +1 -1
- package/docs/examples/w-text-select_slot item.html +1 -1
- package/docs/examples/w-text-select_slot select.html +1 -1
- package/docs/examples/w-text-select_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-text-select_textFontSize.html +1 -1
- package/docs/examples/w-text-select_with popup.html +1 -1
- package/docs/examples/w-text-suggest_a lot of items.html +1 -1
- package/docs/examples/w-text-suggest_borderRadius.html +1 -1
- package/docs/examples/w-text-suggest_border_a lot of items.html +1 -1
- package/docs/examples/w-text-suggest_border_backgroundColor_backgroundColorHover_backgroundColorFocus.html +1 -1
- package/docs/examples/w-text-suggest_border_borderRadius.html +1 -1
- package/docs/examples/w-text-suggest_border_default.html +1 -1
- package/docs/examples/w-text-suggest_border_events.html +1 -1
- package/docs/examples/w-text-suggest_border_expansionIconSize.html +1 -1
- package/docs/examples/w-text-suggest_border_fullwidth.html +1 -1
- package/docs/examples/w-text-suggest_border_itemPaddingStyle.html +1 -1
- package/docs/examples/w-text-suggest_border_itemTextColor_itemTextColorHover_itemBackgroundColor.html +1 -1
- package/docs/examples/w-text-suggest_border_itemTextFontSize_defItemHeight.html +1 -1
- package/docs/examples/w-text-suggest_border_items(string array).html +1 -1
- package/docs/examples/w-text-suggest_border_keyText.html +1 -1
- package/docs/examples/w-text-suggest_border_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text-suggest_border_leftIcon (material).html +1 -1
- package/docs/examples/w-text-suggest_border_leftIcon_leftIconColor_leftIconColorHover.html +1 -1
- package/docs/examples/w-text-suggest_border_leftIcon_leftIconSize.html +1 -1
- package/docs/examples/w-text-suggest_border_noResultsText.html +1 -1
- package/docs/examples/w-text-suggest_border_not editable.html +1 -1
- package/docs/examples/w-text-suggest_border_paddingStyle (equal height to using icon).html +1 -1
- package/docs/examples/w-text-suggest_border_paddingStyle (thin style).html +1 -1
- package/docs/examples/w-text-suggest_border_placeholder.html +1 -1
- package/docs/examples/w-text-suggest_border_rightIcon_rightIconColor_rightIconColorHover.html +1 -1
- package/docs/examples/w-text-suggest_border_rightIcon_rightIconSize.html +1 -1
- package/docs/examples/w-text-suggest_border_showExpansionIcon.html +1 -1
- package/docs/examples/w-text-suggest_border_showPanel(press enter to hide panel)_focused.html +1 -1
- package/docs/examples/w-text-suggest_border_slot item.html +1 -1
- package/docs/examples/w-text-suggest_border_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-text-suggest_border_textFontSize.html +1 -1
- package/docs/examples/w-text-suggest_border_with popup.html +1 -1
- package/docs/examples/w-text-suggest_default.html +1 -1
- package/docs/examples/w-text-suggest_events.html +1 -1
- package/docs/examples/w-text-suggest_expansionIconSize.html +1 -1
- package/docs/examples/w-text-suggest_fullwidth.html +1 -1
- package/docs/examples/w-text-suggest_itemPaddingStyle.html +1 -1
- package/docs/examples/w-text-suggest_itemTextColor_itemTextColorHover_itemBackgroundColor_itemBackgroundColorHover.html +1 -1
- package/docs/examples/w-text-suggest_itemTextFontSize_defItemHeight.html +1 -1
- package/docs/examples/w-text-suggest_items(string array).html +1 -1
- package/docs/examples/w-text-suggest_keyText.html +1 -1
- package/docs/examples/w-text-suggest_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text-suggest_leftIcon (material).html +1 -1
- package/docs/examples/w-text-suggest_leftIcon_leftIconColor_leftIconColorHover_leftIconColorFocus.html +1 -1
- package/docs/examples/w-text-suggest_leftIcon_leftIconSize.html +1 -1
- package/docs/examples/w-text-suggest_noResultsText.html +1 -1
- package/docs/examples/w-text-suggest_not editable.html +1 -1
- package/docs/examples/w-text-suggest_paddingStyle (equal height to using icon).html +1 -1
- package/docs/examples/w-text-suggest_paddingStyle (thin style).html +1 -1
- package/docs/examples/w-text-suggest_placeholder.html +1 -1
- package/docs/examples/w-text-suggest_rightIcon_rightIconColor_rightIconColorHover_rightIconColorFocus.html +1 -1
- package/docs/examples/w-text-suggest_rightIcon_rightIconSize.html +1 -1
- package/docs/examples/w-text-suggest_showExpansionIcon.html +1 -1
- package/docs/examples/w-text-suggest_showPanel(press enter to hide panel)_focused.html +1 -1
- package/docs/examples/w-text-suggest_slot item.html +1 -1
- package/docs/examples/w-text-suggest_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-text-suggest_textFontSize.html +1 -1
- package/docs/examples/w-text_border_backgroundColor_backgroundColorHover_backgroundColorFocus.html +1 -1
- package/docs/examples/w-text_border_borderRadius_paddingStyle.html +1 -1
- package/docs/examples/w-text_border_default.html +1 -1
- package/docs/examples/w-text_border_events.html +1 -1
- package/docs/examples/w-text_border_fullwidth.html +1 -1
- package/docs/examples/w-text_border_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text_border_leftIcon (material).html +1 -1
- package/docs/examples/w-text_border_leftIcon_leftIconColor_leftIconColorHover.html +1 -1
- package/docs/examples/w-text_border_not editable.html +1 -1
- package/docs/examples/w-text_border_placeholder.html +1 -1
- package/docs/examples/w-text_border_rightIcon_rightIconColorHover_rightIconColorFocus.html +1 -1
- package/docs/examples/w-text_border_textAlign.html +1 -1
- package/docs/examples/w-text_border_textColor.html +1 -1
- package/docs/examples/w-text_bottomLineBorderColor_bottomLineBorderColorHover_bottomLineBorderColorFocus.html +1 -1
- package/docs/examples/w-text_default.html +1 -1
- package/docs/examples/w-text_events.html +1 -1
- package/docs/examples/w-text_fullwidth.html +1 -1
- package/docs/examples/w-text_leftIcon (fontawesome).html +1 -1
- package/docs/examples/w-text_leftIcon (material).html +1 -1
- package/docs/examples/w-text_leftIcon_leftIconColor_leftIconColorFocus.html +1 -1
- package/docs/examples/w-text_leftIcon_leftIconSize.html +1 -1
- package/docs/examples/w-text_leftIcon_leftIconTooltip.html +1 -1
- package/docs/examples/w-text_not editable.html +1 -1
- package/docs/examples/w-text_placeholder.html +1 -1
- package/docs/examples/w-text_rightIcon.html +1 -1
- package/docs/examples/w-text_rightIcon_rightIconColor_rightIconColorFocus.html +1 -1
- package/docs/examples/w-text_rightIcon_rightIconSize.html +1 -1
- package/docs/examples/w-text_rightIcon_rightIconTooltip.html +1 -1
- package/docs/examples/w-text_textAlign.html +1 -1
- package/docs/examples/w-text_textColor.html +1 -1
- package/docs/examples/w-text_textFontSize.html +1 -1
- package/docs/examples/w-textarea_borderColorFocus.html +1 -1
- package/docs/examples/w-textarea_default.html +1 -1
- package/docs/examples/w-textarea_fullwidth.html +1 -1
- package/docs/examples/w-textarea_not editable.html +1 -1
- package/docs/examples/w-textarea_placeholder.html +1 -1
- package/docs/examples/w-timeday-range_between.html +1 -1
- package/docs/examples/w-timeday-range_borderRadius.html +1 -1
- package/docs/examples/w-timeday-range_border_between.html +1 -1
- package/docs/examples/w-timeday-range_border_borderRadius.html +1 -1
- package/docs/examples/w-timeday-range_border_default.html +1 -1
- package/docs/examples/w-timeday-range_border_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeday-range_border_icon (material).html +1 -1
- package/docs/examples/w-timeday-range_border_iconColor_iconColorFoucs_borderColor.html +1 -1
- package/docs/examples/w-timeday-range_border_iconTooltip.html +1 -1
- package/docs/examples/w-timeday-range_border_not editable.html +1 -1
- package/docs/examples/w-timeday-range_border_pickColor.html +1 -1
- package/docs/examples/w-timeday-range_border_textColor.html +1 -1
- package/docs/examples/w-timeday-range_default.html +1 -1
- package/docs/examples/w-timeday-range_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeday-range_icon (material).html +1 -1
- package/docs/examples/w-timeday-range_iconColor_iconColorFoucs.html +1 -1
- package/docs/examples/w-timeday-range_iconTooltip.html +1 -1
- package/docs/examples/w-timeday-range_icon_iconSize.html +1 -1
- package/docs/examples/w-timeday-range_not editable.html +1 -1
- package/docs/examples/w-timeday-range_pickColor.html +1 -1
- package/docs/examples/w-timeday-range_textColor.html +1 -1
- package/docs/examples/w-timeday_borderRadius.html +1 -1
- package/docs/examples/w-timeday_border_borderRadius.html +1 -1
- package/docs/examples/w-timeday_border_default.html +1 -1
- package/docs/examples/w-timeday_border_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeday_border_icon (material).html +1 -1
- package/docs/examples/w-timeday_border_iconColor_iconColorFoucs_borderColor.html +1 -1
- package/docs/examples/w-timeday_border_iconTooltip.html +1 -1
- package/docs/examples/w-timeday_border_not editable.html +1 -1
- package/docs/examples/w-timeday_border_pickColor.html +1 -1
- package/docs/examples/w-timeday_border_textColor.html +1 -1
- package/docs/examples/w-timeday_default.html +1 -1
- package/docs/examples/w-timeday_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeday_icon (material).html +1 -1
- package/docs/examples/w-timeday_iconColor_iconColorFoucs.html +1 -1
- package/docs/examples/w-timeday_iconTooltip.html +1 -1
- package/docs/examples/w-timeday_icon_iconSize.html +1 -1
- package/docs/examples/w-timeday_not editable.html +1 -1
- package/docs/examples/w-timeday_pickColor.html +1 -1
- package/docs/examples/w-timeday_textColor.html +1 -1
- package/docs/examples/w-timeminute-range_between.html +1 -1
- package/docs/examples/w-timeminute-range_borderRadius.html +1 -1
- package/docs/examples/w-timeminute-range_border_between.html +1 -1
- package/docs/examples/w-timeminute-range_border_borderRadius.html +1 -1
- package/docs/examples/w-timeminute-range_border_default.html +1 -1
- package/docs/examples/w-timeminute-range_border_hourMin_hourMax.html +1 -1
- package/docs/examples/w-timeminute-range_border_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeminute-range_border_icon (material).html +1 -1
- package/docs/examples/w-timeminute-range_border_iconColor_iconColorFoucs_borderColor.html +1 -1
- package/docs/examples/w-timeminute-range_border_iconTooltip.html +1 -1
- package/docs/examples/w-timeminute-range_border_minuteInter.html +1 -1
- package/docs/examples/w-timeminute-range_border_minutesCustom.html +1 -1
- package/docs/examples/w-timeminute-range_border_not editable.html +1 -1
- package/docs/examples/w-timeminute-range_border_pickColor.html +1 -1
- package/docs/examples/w-timeminute-range_border_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-timeminute-range_default.html +1 -1
- package/docs/examples/w-timeminute-range_hourMin_hourMax.html +1 -1
- package/docs/examples/w-timeminute-range_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeminute-range_icon (material).html +1 -1
- package/docs/examples/w-timeminute-range_iconColor_iconColorFoucs.html +1 -1
- package/docs/examples/w-timeminute-range_iconTooltip.html +1 -1
- package/docs/examples/w-timeminute-range_icon_iconSize.html +1 -1
- package/docs/examples/w-timeminute-range_minuteInter.html +1 -1
- package/docs/examples/w-timeminute-range_minutesCustom.html +1 -1
- package/docs/examples/w-timeminute-range_not editable.html +1 -1
- package/docs/examples/w-timeminute-range_pickColor.html +1 -1
- package/docs/examples/w-timeminute-range_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-timeminute_borderRadius.html +1 -1
- package/docs/examples/w-timeminute_border_borderRadius.html +1 -1
- package/docs/examples/w-timeminute_border_default.html +1 -1
- package/docs/examples/w-timeminute_border_hourMin_hourMax.html +1 -1
- package/docs/examples/w-timeminute_border_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeminute_border_icon (material).html +1 -1
- package/docs/examples/w-timeminute_border_iconColor_iconColorFoucs_borderColor.html +1 -1
- package/docs/examples/w-timeminute_border_iconTooltip.html +1 -1
- package/docs/examples/w-timeminute_border_minuteInter.html +1 -1
- package/docs/examples/w-timeminute_border_minutesCustom.html +1 -1
- package/docs/examples/w-timeminute_border_not editable.html +1 -1
- package/docs/examples/w-timeminute_border_pickColor.html +1 -1
- package/docs/examples/w-timeminute_border_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-timeminute_default.html +1 -1
- package/docs/examples/w-timeminute_hourMin_hourMax.html +1 -1
- package/docs/examples/w-timeminute_icon (fontawesome).html +1 -1
- package/docs/examples/w-timeminute_icon (material).html +1 -1
- package/docs/examples/w-timeminute_iconColor_iconColorFoucs.html +1 -1
- package/docs/examples/w-timeminute_iconTooltip.html +1 -1
- package/docs/examples/w-timeminute_icon_iconSize.html +1 -1
- package/docs/examples/w-timeminute_minuteInter.html +1 -1
- package/docs/examples/w-timeminute_minutesCustom.html +1 -1
- package/docs/examples/w-timeminute_not editable.html +1 -1
- package/docs/examples/w-timeminute_pickColor.html +1 -1
- package/docs/examples/w-timeminute_textColor_expansionIconColor.html +1 -1
- package/docs/examples/w-tinymce-vue-dyn_default.html +1 -1
- package/docs/examples/w-tinymce-vue-dyn_height.html +1 -1
- package/docs/examples/w-tinymce-vue-dyn_not editable.html +1 -1
- package/docs/examples/w-tinymce-vue-dyn_settings.html +1 -1
- package/docs/examples/w-tree_default.html +4 -5
- package/docs/examples/w-tree_defaultDisplayLevel.html +4 -5
- package/docs/examples/w-tree_draggable.html +4 -5
- package/docs/examples/w-tree_draggable_dgInsertLineColor_dgInsertBackgroundColor_dgBelongBackgroundColor.html +4 -5
- package/docs/examples/w-tree_draggable_dgPreviewOpacity_dgPreviewBorderWidth_dgBelongBackgroundColor.html +4 -5
- package/docs/examples/w-tree_draggable_dgTextDisabled_dgTextDisabledColor_dgTextDisabledPaddingLeft.html +4 -5
- package/docs/examples/{w-tree_sync viewHeightMax(change-height-of-items).html → w-tree_events.html} +6 -6
- package/docs/examples/w-tree_filterKeywords_noResultsText.html +4 -5
- package/docs/examples/w-tree_filterKeywords_noResultsText_selectable.html +4 -5
- package/docs/examples/w-tree_iconHeight.html +4 -5
- package/docs/examples/w-tree_iconHeight_defItemHeight.html +4 -5
- package/docs/examples/w-tree_iconToggleColor_iconToggleBackgroundColor_iconToggleBackgroundColorHover.html +4 -5
- package/docs/examples/w-tree_indent.html +4 -5
- package/docs/examples/w-tree_keyPrimary_keyText_keyChildren.html +4 -5
- package/docs/examples/w-tree_mouseenter_mouseleave_click_change-view-items.html +4 -5
- package/docs/examples/w-tree_no viewHeightMax.html +637 -0
- package/docs/examples/w-tree_operatable.html +4 -5
- package/docs/examples/w-tree_operatable_operateBtnBackgroundColor_operateBtnBackgroundColorHover_operateBtnBackgroundColorFocus.html +4 -5
- package/docs/examples/w-tree_operatable_operateBtnTooltip_operateItemTextForInsertBefore_perateItemTextForInsertChild.html +4 -5
- package/docs/examples/w-tree_operatable_operateItemBackgroundColor_operateItemBackgroundColorHover_operateItemTextColor.html +4 -5
- package/docs/examples/w-tree_operatable_operateItemIconSize_operateItemPaddingStyle_operatePanelWidth.html +4 -5
- package/docs/examples/w-tree_paddingStyle.html +4 -5
- package/docs/examples/w-tree_selectable.html +4 -5
- package/docs/examples/w-tree_selectable_draggable.html +4 -5
- package/docs/examples/w-tree_slot.html +4 -5
- package/docs/examples/w-tree_slot_iconUncheckedColor_iconUncheckedDisabledColor_iconCheckedColor.html +4 -5
- package/docs/examples/w-tree_slot_locked_selectable.html +4 -5
- package/docs/examples/w-tree_slot_operatable.html +4 -5
- package/docs/examples/w-tree_slot_selectable.html +4 -5
- package/docs/examples/w-tree_slot_selectable_draggable.html +4 -5
- package/docs/examples/w-tree_slot_selectable_large data (100,000 items).html +4 -5
- package/docs/examples/w-tree_viewHeightMax.html +4 -5
- package/docs/global.html +1 -1
- package/docs/highchartsSetting.mjs.html +1 -1
- package/docs/index.html +1 -1
- package/docs/module-WAggridVueDyn.html +1 -1
- package/docs/module-WBadge.html +1 -1
- package/docs/module-WButtonChip.html +1 -1
- package/docs/module-WButtonCircle.html +1 -1
- package/docs/module-WCheckbox.html +1 -1
- package/docs/module-WCkeditorVueDyn.html +1 -1
- package/docs/module-WConfirm.html +1 -1
- package/docs/module-WDialog.html +1 -1
- package/docs/module-WDrawer.html +1 -1
- package/docs/module-WDropfiles.html +1 -1
- package/docs/module-WDynamicList.html +1 -1
- package/docs/module-WEchartsVueDyn.html +1 -1
- package/docs/module-WGroupCheck.html +1 -1
- package/docs/module-WGroupDragdrop.html +1 -1
- package/docs/module-WGroupRadio.html +1 -1
- package/docs/module-WGroupTags.html +1 -1
- package/docs/module-WHighchartsBitmapDyn.html +1 -1
- package/docs/module-WHighchartsVueDyn.html +1 -1
- package/docs/module-WHighstockVueDyn.html +1 -1
- package/docs/module-WIcon.html +1 -1
- package/docs/module-WIconLoading.html +1 -1
- package/docs/module-WIconSvg.html +1 -1
- package/docs/module-WImageCascadingDyn.html +1 -1
- package/docs/module-WImageViewerDyn.html +1 -1
- package/docs/module-WJsonView.html +2 -2
- package/docs/module-WLeafletVueDyn.html +1 -1
- package/docs/module-WListVertical.html +1 -1
- package/docs/module-WListVerticalItem.html +1 -1
- package/docs/module-WPanelBulge.html +1 -1
- package/docs/module-WPanelChart.html +1 -1
- package/docs/module-WPanelDivideHorizontal.html +1 -1
- package/docs/module-WPanelDivideVertical.html +1 -1
- package/docs/module-WPanelScrolly.html +1 -1
- package/docs/module-WPanelScrollyCore.html +1 -1
- package/docs/module-WPanelStripe.html +1 -1
- package/docs/module-WPopup.html +1 -1
- package/docs/module-WPopupEditText.html +1 -1
- package/docs/module-WProgressBar.html +1 -1
- package/docs/module-WProgressCircle.html +1 -1
- package/docs/module-WQuillVueDyn.html +1 -1
- package/docs/module-WShellBottomLine.html +1 -1
- package/docs/module-WShellEllipse.html +1 -1
- package/docs/module-WShellMaterial.html +1 -1
- package/docs/module-WSwitch.html +51 -9
- package/docs/module-WTableDyn.html +1 -1
- package/docs/module-WText.html +1 -1
- package/docs/module-WTextCore.html +1 -1
- package/docs/module-WTextInt.html +1 -1
- package/docs/module-WTextIntCore.html +1 -1
- package/docs/module-WTextSelect.html +1 -1
- package/docs/module-WTextSuggest.html +1 -1
- package/docs/module-WTextSuggestCore.html +1 -1
- package/docs/module-WTextarea.html +1 -1
- package/docs/module-WTimeday.html +1 -1
- package/docs/module-WTimedayCore.html +1 -1
- package/docs/module-WTimedayRange.html +1 -1
- package/docs/module-WTimedayRangeCore.html +1 -1
- package/docs/module-WTimeminute.html +1 -1
- package/docs/module-WTimeminuteCore.html +1 -1
- package/docs/module-WTimeminuteRange.html +1 -1
- package/docs/module-WTimeminuteRangeCore.html +1 -1
- package/docs/module-WTinymceVueDyn.html +1 -1
- package/docs/module-WTree.html +2 -2
- package/docs/module-WTreeIconCheckbox.html +1 -1
- package/docs/module-WTreeIconToggle.html +1 -1
- package/docs/vuetifyColor.mjs.html +1 -1
- package/package.json +1 -1
- package/src/App.vue +1 -2
- package/src/AppZoneWJsonView.vue +20 -2
- package/src/AppZoneWPanelScrolly.vue +1 -0
- package/src/AppZoneWSwitch.vue +28 -10
- package/src/AppZoneWTree.vue +20 -5
- package/src/components/WDrawer.vue +9 -9
- package/src/components/WJsonView.vue +1 -1
- package/src/components/WListVertical.vue +8 -2
- package/src/components/WPanelScrollyCore.vue +34 -6
- package/src/components/WSwitch.vue +117 -36
- package/src/components/WTree.vue +37 -3
- package/src/js/convertToTreeWk.wk.umd.js +1 -1
- package/src/js/domVisible.mjs +86 -0
package/src/components/WTree.vue
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
<!-- 拖曳區可能超過組件區域外, 故得使用overflow:hidden -->
|
|
3
3
|
<div
|
|
4
4
|
style="position:relative; overflow:hidden;"
|
|
5
|
+
:changeViewHeightMax="changeViewHeightMax"
|
|
5
6
|
:changeDefaultDisplayLevel="changeDefaultDisplayLevel"
|
|
6
7
|
:changeDraggableAndOperatable="changeDraggableAndOperatable"
|
|
7
8
|
:changeFilterKeyWords="changeFilterKeyWords"
|
|
@@ -9,7 +10,7 @@
|
|
|
9
10
|
|
|
10
11
|
<WDynamicList
|
|
11
12
|
ref="wdl"
|
|
12
|
-
:viewHeightMax="
|
|
13
|
+
:viewHeightMax="viewHeightMaxTrans"
|
|
13
14
|
:itemMinHeight="defItemHeight"
|
|
14
15
|
:itemsPreload="itemsPreload"
|
|
15
16
|
:loadingText="loadingText"
|
|
@@ -17,7 +18,7 @@
|
|
|
17
18
|
:searchingText="searchingText"
|
|
18
19
|
:show="show"
|
|
19
20
|
@change-view-items="(msg)=>{$emit('change-view-items',msg)}"
|
|
20
|
-
@change-height-of-items="(msg)=>{
|
|
21
|
+
@change-height-of-items="(msg)=>{updateViewHeightMaxTrans(msg);$emit('change-height-of-items',msg)}"
|
|
21
22
|
>
|
|
22
23
|
<template v-slot="props">
|
|
23
24
|
|
|
@@ -237,7 +238,7 @@ let gm = globalMemory()
|
|
|
237
238
|
|
|
238
239
|
/**
|
|
239
240
|
* @vue-prop {Array|Object} [data=[]] 輸入資料陣列,預設[],各元素配合slot顯示即可,slot內提供row與irow,對應原始rows內各元素與指標,另外各元素slot時不要用margin避免計算高度有誤差
|
|
240
|
-
* @vue-prop {Number} [viewHeightMax=400] 輸入顯示區最大高度,單位為px
|
|
241
|
+
* @vue-prop {Number} [viewHeightMax=400] 輸入顯示區最大高度,單位為px,若給予非數字則自動依照當前顯隱最高內容調整,預設400
|
|
241
242
|
* @vue-prop {Number} [defaultDisplayLevel=null] 輸入初始展開層數數字,若輸入1就是預設展開至第1層,第2層(含)以下則都隱藏,若輸入null就是全展開,預設null
|
|
242
243
|
* @vue-prop {Boolean} [selectable=false] 輸入是否具有勾選模式,預設false
|
|
243
244
|
* @vue-prop {Array} [selections=[]] 輸入勾選項目陣列,當selectable=true時才可使用,預設[]
|
|
@@ -579,6 +580,8 @@ export default {
|
|
|
579
580
|
|
|
580
581
|
mmkey: null,
|
|
581
582
|
|
|
583
|
+
viewHeightMaxTrans: 2, //預設給予>=2最小內容區高度, 使能觸發顯示渲染連動機制
|
|
584
|
+
|
|
582
585
|
separation: 3,
|
|
583
586
|
defIconHeight: 34,
|
|
584
587
|
selectionsTrans: [],
|
|
@@ -632,6 +635,18 @@ export default {
|
|
|
632
635
|
},
|
|
633
636
|
computed: {
|
|
634
637
|
|
|
638
|
+
changeViewHeightMax: function() {
|
|
639
|
+
let vo = this
|
|
640
|
+
|
|
641
|
+
//save
|
|
642
|
+
if (isNumber(vo.viewHeightMax)) {
|
|
643
|
+
vo.viewHeightMaxTrans = vo.viewHeightMax
|
|
644
|
+
// console.log('changeViewHeightMax viewHeightMaxTrans', vo.viewHeightMaxTrans)
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
return ''
|
|
648
|
+
},
|
|
649
|
+
|
|
635
650
|
changeDefaultDisplayLevel: function() {
|
|
636
651
|
//console.log('computed changeDefaultDisplayLevel')
|
|
637
652
|
|
|
@@ -788,6 +803,25 @@ export default {
|
|
|
788
803
|
return { event: e, ele: e.currentTarget, row: props.row, item: props.row.item, index: props.index }
|
|
789
804
|
},
|
|
790
805
|
|
|
806
|
+
updateViewHeightMaxTrans: function(msg) {
|
|
807
|
+
//console.log('methods updateViewHeightMaxTrans', msg)
|
|
808
|
+
|
|
809
|
+
let vo = this
|
|
810
|
+
|
|
811
|
+
//check, 若viewHeightMax給予數字則將直接使用, 故不更新viewHeightMaxTrans
|
|
812
|
+
if (isNumber(vo.viewHeightMax)) {
|
|
813
|
+
return
|
|
814
|
+
}
|
|
815
|
+
|
|
816
|
+
//update viewHeightMaxTrans
|
|
817
|
+
let h = get(msg, 'height')
|
|
818
|
+
if (isNumber(h)) {
|
|
819
|
+
vo.viewHeightMaxTrans = h
|
|
820
|
+
// console.log('updateViewHeightMaxTrans viewHeightMaxTrans', vo.viewHeightMaxTrans)
|
|
821
|
+
}
|
|
822
|
+
|
|
823
|
+
},
|
|
824
|
+
|
|
791
825
|
getRowsFromData: function(data) {
|
|
792
826
|
//console.log('methods getRowsFromData', data)
|
|
793
827
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function d(d,i){(null==i||i>d.length)&&(i=d.length);for(var l=0,c=new Array(i);l<i;l++)c[l]=d[l];return c}function i(i){return function(i){if(Array.isArray(i))return d(i)}(i)||function(d){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(d))return Array.from(d)}(i)||function(i,l){if(i){if("string"==typeof i)return d(i,l);var c=Object.prototype.toString.call(i).slice(8,-1);return"Object"===c&&i.constructor&&(c=i.constructor.name),"Map"===c||"Set"===c?Array.from(i):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?d(i,l):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(d,i,l,c,t,m,I){try{var b=d[m](I),Z=b.value}catch(d){return void l(d)}b.done?i(Z):Promise.resolve(Z).then(c,t)}function c(d){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d})(d)}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function m(d){var i={exports:{}};return d(i,i.exports),i.exports}var I,b=m((function(d){var i=function(d){var i,l=Object.prototype,t=l.hasOwnProperty,m="function"==typeof Symbol?Symbol:{},I=m.iterator||"@@iterator",b=m.asyncIterator||"@@asyncIterator",Z=m.toStringTag||"@@toStringTag";function n(d,i,l){return Object.defineProperty(d,i,{value:l,enumerable:!0,configurable:!0,writable:!0}),d[i]}try{n({},"")}catch(d){n=function(d,i,l){return d[i]=l}}function X(d,i,l,c){var t=i&&i.prototype instanceof W?i:W,m=Object.create(t.prototype),I=new S(c||[]);return m._invoke=function(d,i,l){var c=u;return function(t,m){if(c===y)throw new Error("Generator is already running");if(c===p){if("throw"===t)throw m;return x()}for(l.method=t,l.arg=m;;){var I=l.delegate;if(I){var b=g(I,l);if(b){if(b===h)continue;return b}}if("next"===l.method)l.sent=l._sent=l.arg;else if("throw"===l.method){if(c===u)throw c=p,l.arg;l.dispatchException(l.arg)}else"return"===l.method&&l.abrupt("return",l.arg);c=y;var Z=o(d,i,l);if("normal"===Z.type){if(c=l.done?p:e,Z.arg===h)continue;return{value:Z.arg,done:l.done}}"throw"===Z.type&&(c=p,l.method="throw",l.arg=Z.arg)}}}(d,l,I),m}function o(d,i,l){try{return{type:"normal",arg:d.call(i,l)}}catch(d){return{type:"throw",arg:d}}}d.wrap=X;var u="suspendedStart",e="suspendedYield",y="executing",p="completed",h={};function W(){}function K(){}function C(){}var G={};G[I]=function(){return this};var r=Object.getPrototypeOf,a=r&&r(r(P([])));a&&a!==l&&t.call(a,I)&&(G=a);var V=C.prototype=W.prototype=Object.create(G);function H(d){["next","throw","return"].forEach((function(i){n(d,i,(function(d){return this._invoke(i,d)}))}))}function Y(d,i){function l(m,I,b,Z){var n=o(d[m],d,I);if("throw"!==n.type){var X=n.arg,u=X.value;return u&&"object"===c(u)&&t.call(u,"__await")?i.resolve(u.__await).then((function(d){l("next",d,b,Z)}),(function(d){l("throw",d,b,Z)})):i.resolve(u).then((function(d){X.value=d,b(X)}),(function(d){return l("throw",d,b,Z)}))}Z(n.arg)}var m;this._invoke=function(d,c){function t(){return new i((function(i,t){l(d,c,i,t)}))}return m=m?m.then(t,t):t()}}function g(d,l){var c=d.iterator[l.method];if(c===i){if(l.delegate=null,"throw"===l.method){if(d.iterator.return&&(l.method="return",l.arg=i,g(d,l),"throw"===l.method))return h;l.method="throw",l.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var t=o(c,d.iterator,l.arg);if("throw"===t.type)return l.method="throw",l.arg=t.arg,l.delegate=null,h;var m=t.arg;return m?m.done?(l[d.resultName]=m.value,l.next=d.nextLoc,"return"!==l.method&&(l.method="next",l.arg=i),l.delegate=null,h):m:(l.method="throw",l.arg=new TypeError("iterator result is not an object"),l.delegate=null,h)}function s(d){var i={tryLoc:d[0]};1 in d&&(i.catchLoc=d[1]),2 in d&&(i.finallyLoc=d[2],i.afterLoc=d[3]),this.tryEntries.push(i)}function J(d){var i=d.completion||{};i.type="normal",delete i.arg,d.completion=i}function S(d){this.tryEntries=[{tryLoc:"root"}],d.forEach(s,this),this.reset(!0)}function P(d){if(d){var l=d[I];if(l)return l.call(d);if("function"==typeof d.next)return d;if(!isNaN(d.length)){var c=-1,m=function l(){for(;++c<d.length;)if(t.call(d,c))return l.value=d[c],l.done=!1,l;return l.value=i,l.done=!0,l};return m.next=m}}return{next:x}}function x(){return{value:i,done:!0}}return K.prototype=V.constructor=C,C.constructor=K,K.displayName=n(C,Z,"GeneratorFunction"),d.isGeneratorFunction=function(d){var i="function"==typeof d&&d.constructor;return!!i&&(i===K||"GeneratorFunction"===(i.displayName||i.name))},d.mark=function(d){return Object.setPrototypeOf?Object.setPrototypeOf(d,C):(d.__proto__=C,n(d,Z,"GeneratorFunction")),d.prototype=Object.create(V),d},d.awrap=function(d){return{__await:d}},H(Y.prototype),Y.prototype[b]=function(){return this},d.AsyncIterator=Y,d.async=function(i,l,c,t,m){void 0===m&&(m=Promise);var I=new Y(X(i,l,c,t),m);return d.isGeneratorFunction(l)?I:I.next().then((function(d){return d.done?d.value:I.next()}))},H(V),n(V,Z,"Generator"),V[I]=function(){return this},V.toString=function(){return"[object Generator]"},d.keys=function(d){var i=[];for(var l in d)i.push(l);return i.reverse(),function l(){for(;i.length;){var c=i.pop();if(c in d)return l.value=c,l.done=!1,l}return l.done=!0,l}},d.values=P,S.prototype={constructor:S,reset:function(d){if(this.prev=0,this.next=0,this.sent=this._sent=i,this.done=!1,this.delegate=null,this.method="next",this.arg=i,this.tryEntries.forEach(J),!d)for(var l in this)"t"===l.charAt(0)&&t.call(this,l)&&!isNaN(+l.slice(1))&&(this[l]=i)},stop:function(){this.done=!0;var d=this.tryEntries[0].completion;if("throw"===d.type)throw d.arg;return this.rval},dispatchException:function(d){if(this.done)throw d;var l=this;function c(c,t){return b.type="throw",b.arg=d,l.next=c,t&&(l.method="next",l.arg=i),!!t}for(var m=this.tryEntries.length-1;m>=0;--m){var I=this.tryEntries[m],b=I.completion;if("root"===I.tryLoc)return c("end");if(I.tryLoc<=this.prev){var Z=t.call(I,"catchLoc"),n=t.call(I,"finallyLoc");if(Z&&n){if(this.prev<I.catchLoc)return c(I.catchLoc,!0);if(this.prev<I.finallyLoc)return c(I.finallyLoc)}else if(Z){if(this.prev<I.catchLoc)return c(I.catchLoc,!0)}else{if(!n)throw new Error("try statement without catch or finally");if(this.prev<I.finallyLoc)return c(I.finallyLoc)}}}},abrupt:function(d,i){for(var l=this.tryEntries.length-1;l>=0;--l){var c=this.tryEntries[l];if(c.tryLoc<=this.prev&&t.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var m=c;break}}m&&("break"===d||"continue"===d)&&m.tryLoc<=i&&i<=m.finallyLoc&&(m=null);var I=m?m.completion:{};return I.type=d,I.arg=i,m?(this.method="next",this.next=m.finallyLoc,h):this.complete(I)},complete:function(d,i){if("throw"===d.type)throw d.arg;return"break"===d.type||"continue"===d.type?this.next=d.arg:"return"===d.type?(this.rval=this.arg=d.arg,this.method="return",this.next="end"):"normal"===d.type&&i&&(this.next=i),h},finish:function(d){for(var i=this.tryEntries.length-1;i>=0;--i){var l=this.tryEntries[i];if(l.finallyLoc===d)return this.complete(l.completion,l.afterLoc),J(l),h}},catch:function(d){for(var i=this.tryEntries.length-1;i>=0;--i){var l=this.tryEntries[i];if(l.tryLoc===d){var c=l.completion;if("throw"===c.type){var t=c.arg;J(l)}return t}}throw new Error("illegal catch attempt")},delegateYield:function(d,l,c){return this.delegate={iterator:P(d),resultName:l,nextLoc:c},"next"===this.method&&(this.arg=i),h}},d}(d.exports);try{regeneratorRuntime=i}catch(d){Function("r","regeneratorRuntime = r")(i)}})),Z=m((function(d,i){!function(i,l){d.exports=function(i){var l,c=(i=i||{}).Base64,t="2.6.4",m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=function(d){for(var i={},l=0,c=d.length;l<c;l++)i[d.charAt(l)]=l;return i}(m),b=String.fromCharCode,Z=function(d){if(d.length<2)return(i=d.charCodeAt(0))<128?d:i<2048?b(192|i>>>6)+b(128|63&i):b(224|i>>>12&15)+b(128|i>>>6&63)+b(128|63&i);var i=65536+1024*(d.charCodeAt(0)-55296)+(d.charCodeAt(1)-56320);return b(240|i>>>18&7)+b(128|i>>>12&63)+b(128|i>>>6&63)+b(128|63&i)},n=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,X=function(d){return d.replace(n,Z)},o=function(d){var i=[0,2,1][d.length%3],l=d.charCodeAt(0)<<16|(d.length>1?d.charCodeAt(1):0)<<8|(d.length>2?d.charCodeAt(2):0);return[m.charAt(l>>>18),m.charAt(l>>>12&63),i>=2?"=":m.charAt(l>>>6&63),i>=1?"=":m.charAt(63&l)].join("")},u=i.btoa&&"function"==typeof i.btoa?function(d){return i.btoa(d)}:function(d){if(d.match(/[^\x00-\xFF]/))throw new RangeError("The string contains invalid characters.");return d.replace(/[\s\S]{1,3}/g,o)},e=function(d){return u(X(String(d)))},y=function(d){return d.replace(/[+\/]/g,(function(d){return"+"==d?"-":"_"})).replace(/=/g,"")},p=function(d,i){return i?y(e(d)):e(d)},h=function(d){return p(d,!0)};i.Uint8Array&&(l=function(d,i){for(var l="",c=0,t=d.length;c<t;c+=3){var I=d[c],b=d[c+1],Z=d[c+2],n=I<<16|b<<8|Z;l+=m.charAt(n>>>18)+m.charAt(n>>>12&63)+(void 0!==b?m.charAt(n>>>6&63):"=")+(void 0!==Z?m.charAt(63&n):"=")}return i?y(l):l});var W,K=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,C=function(d){switch(d.length){case 4:var i=((7&d.charCodeAt(0))<<18|(63&d.charCodeAt(1))<<12|(63&d.charCodeAt(2))<<6|63&d.charCodeAt(3))-65536;return b(55296+(i>>>10))+b(56320+(1023&i));case 3:return b((15&d.charCodeAt(0))<<12|(63&d.charCodeAt(1))<<6|63&d.charCodeAt(2));default:return b((31&d.charCodeAt(0))<<6|63&d.charCodeAt(1))}},G=function(d){return d.replace(K,C)},r=function(d){var i=d.length,l=i%4,c=(i>0?I[d.charAt(0)]<<18:0)|(i>1?I[d.charAt(1)]<<12:0)|(i>2?I[d.charAt(2)]<<6:0)|(i>3?I[d.charAt(3)]:0),t=[b(c>>>16),b(c>>>8&255),b(255&c)];return t.length-=[0,0,2,1][l],t.join("")},a=i.atob&&"function"==typeof i.atob?function(d){return i.atob(d)}:function(d){return d.replace(/\S{1,4}/g,r)},V=function(d){return a(String(d).replace(/[^A-Za-z0-9\+\/]/g,""))},H=function(d){return G(a(d))},Y=function(d){return String(d).replace(/[-_]/g,(function(d){return"-"==d?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,"")},g=function(d){return H(Y(d))};i.Uint8Array&&(W=function(d){return Uint8Array.from(V(Y(d)),(function(d){return d.charCodeAt(0)}))});var s=function(){var d=i.Base64;return i.Base64=c,d};if(i.Base64={VERSION:t,atob:V,btoa:u,fromBase64:g,toBase64:p,utob:X,encode:p,encodeURI:h,btou:G,decode:g,noConflict:s,fromUint8Array:l,toUint8Array:W},"function"==typeof Object.defineProperty){var J=function(d){return{value:d,enumerable:!1,writable:!0,configurable:!0}};i.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",J((function(){return g(this)}))),Object.defineProperty(String.prototype,"toBase64",J((function(d){return p(this,d)}))),Object.defineProperty(String.prototype,"toBase64URI",J((function(){return p(this,!0)})))}}i.Meteor&&(Base64=i.Base64);d.exports&&(d.exports.Base64=i.Base64);return{Base64:i.Base64}}(i)}("undefined"!=typeof self?self:"undefined"!=typeof window?window:t)})),n=m((function(d){var i=Object.prototype.hasOwnProperty,l="~";function c(){}function t(d,i,l){this.fn=d,this.context=i,this.once=l||!1}function m(d,i,c,m,I){if("function"!=typeof c)throw new TypeError("The listener must be a function");var b=new t(c,m||d,I),Z=l?l+i:i;return d._events[Z]?d._events[Z].fn?d._events[Z]=[d._events[Z],b]:d._events[Z].push(b):(d._events[Z]=b,d._eventsCount++),d}function I(d,i){0==--d._eventsCount?d._events=new c:delete d._events[i]}function b(){this._events=new c,this._eventsCount=0}Object.create&&(c.prototype=Object.create(null),(new c).__proto__||(l=!1)),b.prototype.eventNames=function(){var d,c,t=[];if(0===this._eventsCount)return t;for(c in d=this._events)i.call(d,c)&&t.push(l?c.slice(1):c);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(d)):t},b.prototype.listeners=function(d){var i=l?l+d:d,c=this._events[i];if(!c)return[];if(c.fn)return[c.fn];for(var t=0,m=c.length,I=new Array(m);t<m;t++)I[t]=c[t].fn;return I},b.prototype.listenerCount=function(d){var i=l?l+d:d,c=this._events[i];return c?c.fn?1:c.length:0},b.prototype.emit=function(d,i,c,t,m,I){var b=l?l+d:d;if(!this._events[b])return!1;var Z,n,X=this._events[b],o=arguments.length;if(X.fn){switch(X.once&&this.removeListener(d,X.fn,void 0,!0),o){case 1:return X.fn.call(X.context),!0;case 2:return X.fn.call(X.context,i),!0;case 3:return X.fn.call(X.context,i,c),!0;case 4:return X.fn.call(X.context,i,c,t),!0;case 5:return X.fn.call(X.context,i,c,t,m),!0;case 6:return X.fn.call(X.context,i,c,t,m,I),!0}for(n=1,Z=new Array(o-1);n<o;n++)Z[n-1]=arguments[n];X.fn.apply(X.context,Z)}else{var u,e=X.length;for(n=0;n<e;n++)switch(X[n].once&&this.removeListener(d,X[n].fn,void 0,!0),o){case 1:X[n].fn.call(X[n].context);break;case 2:X[n].fn.call(X[n].context,i);break;case 3:X[n].fn.call(X[n].context,i,c);break;case 4:X[n].fn.call(X[n].context,i,c,t);break;default:if(!Z)for(u=1,Z=new Array(o-1);u<o;u++)Z[u-1]=arguments[u];X[n].fn.apply(X[n].context,Z)}}return!0},b.prototype.on=function(d,i,l){return m(this,d,i,l,!1)},b.prototype.once=function(d,i,l){return m(this,d,i,l,!0)},b.prototype.removeListener=function(d,i,c,t){var m=l?l+d:d;if(!this._events[m])return this;if(!i)return I(this,m),this;var b=this._events[m];if(b.fn)b.fn!==i||t&&!b.once||c&&b.context!==c||I(this,m);else{for(var Z=0,n=[],X=b.length;Z<X;Z++)(b[Z].fn!==i||t&&!b[Z].once||c&&b[Z].context!==c)&&n.push(b[Z]);n.length?this._events[m]=1===n.length?n[0]:n:I(this,m)}return this},b.prototype.removeAllListeners=function(d){var i;return d?(i=l?l+d:d,this._events[i]&&I(this,i)):(this._events=new c,this._eventsCount=0),this},b.prototype.off=b.prototype.removeListener,b.prototype.addListener=b.prototype.on,b.prefixed=l,b.EventEmitter=b,d.exports=b}));!function(){if("browser"!==("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;function d(){return new n}function c(){var d,i,l=new Promise((function(){d=arguments[0],i=arguments[1]}));return l.resolve=d,l.reject=i,l}function t(){for(var d=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,i=[],l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),c=l.length,t=0;t<d;t++)i[t]=l[0|Math.random()*c];var m=i.join("");return m}var m,X=(m="CgoKdmFyIHQ9QXJyYXkuaXNBcnJheSxyPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXt2YXIgcj17ZXhwb3J0czp7fX07cmV0dXJuIHQocixyLmV4cG9ydHMpLHIuZXhwb3J0c312YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHImJnImJnIuT2JqZWN0PT09T2JqZWN0JiZyLG89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PW58fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxpPU9iamVjdC5wcm90b3R5cGUsYz1pLmhhc093blByb3BlcnR5LGY9aS50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIHY9ZnVuY3Rpb24odCl7dmFyIHI9Yy5jYWxsKHQsbCksZT10W2xdO3RyeXt0W2xdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89Zi5jYWxsKHQpO3JldHVybiBuJiYocj90W2xdPWU6ZGVsZXRlIHRbbF0pLG99LHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKHQpfSxwPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6cCYmcCBpbiBPYmplY3QodCk/dih0KTpiKHQpfTt2YXIgaD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fTt2YXIgZD1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGgodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT15KHQpfSxqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGc9L15cdyokLzt2YXIgXz1mdW5jdGlvbihyLGUpe2lmKHQocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHI7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9ciYmIWQocikpfHwoZy50ZXN0KHIpfHwhai50ZXN0KHIpfHxudWxsIT1lJiZyIGluIE9iamVjdChlKSl9O3ZhciBPPWZ1bmN0aW9uKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PXJ8fCJmdW5jdGlvbiI9PXIpfTt2YXIgdyxtPWZ1bmN0aW9uKHQpe2lmKCFPKHQpKXJldHVybiExO3ZhciByPXkodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09cnx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09cnx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1yfHwiW29iamVjdCBQcm94eV0iPT1yfSxBPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLFM9KHc9L1teLl0rJC8uZXhlYyhBJiZBLmtleXMmJkEua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3c6IiI7dmFyIFA9ZnVuY3Rpb24odCl7cmV0dXJuISFTJiZTIGluIHR9LHg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB6PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4geC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn0sRT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxJPUZ1bmN0aW9uLnByb3RvdHlwZSwkPU9iamVjdC5wcm90b3R5cGUsTj1JLnRvU3RyaW5nLFQ9JC5oYXNPd25Qcm9wZXJ0eSxNPVJlZ0V4cCgiXiIrTi5jYWxsKFQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3ZhciBrPWZ1bmN0aW9uKHQpe3JldHVybiEoIU8odCl8fFAodCkpJiYobSh0KT9NOkUpLnRlc3Qoeih0KSl9O3ZhciBGPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbcl19O3ZhciBDPWZ1bmN0aW9uKHQscil7dmFyIGU9Rih0LHIpO3JldHVybiBrKGUpP2U6dm9pZCAwfSxEPUMoT2JqZWN0LCJjcmVhdGUiKTt2YXIgVT1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189RD9EKG51bGwpOnt9LHRoaXMuc2l6ZT0wfTt2YXIgQj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09cj8xOjAscn0sUj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBMPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYoRCl7dmFyIGU9clt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1lP3ZvaWQgMDplfXJldHVybiBSLmNhbGwocix0KT9yW3RdOnZvaWQgMH0sVj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBLPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIEQ/dm9pZCAwIT09clt0XTpWLmNhbGwocix0KX07dmFyIFc9ZnVuY3Rpb24odCxyKXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxlW3RdPUQmJnZvaWQgMD09PXI/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOnIsdGhpc307ZnVuY3Rpb24gcSh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcjxlOyl7dmFyIG49dFtyXTt0aGlzLnNldChuWzBdLG5bMV0pfX1xLnByb3RvdHlwZS5jbGVhcj1VLHEucHJvdG90eXBlLmRlbGV0ZT1CLHEucHJvdG90eXBlLmdldD1MLHEucHJvdG90eXBlLmhhcz1LLHEucHJvdG90eXBlLnNldD1XO3ZhciBHPXE7dmFyIEg9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfTt2YXIgSj1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cnx8dCE9dCYmciE9cn07dmFyIFE9ZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOylpZihKKHRbZV1bMF0scikpcmV0dXJuIGU7cmV0dXJuLTF9LFg9QXJyYXkucHJvdG90eXBlLnNwbGljZTt2YXIgWT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fLGU9UShyLHQpO3JldHVybiEoZTwwKSYmKGU9PXIubGVuZ3RoLTE/ci5wb3AoKTpYLmNhbGwocixlLDEpLC0tdGhpcy5zaXplLCEwKX07dmFyIFo9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPVEocix0KTtyZXR1cm4gZTwwP3ZvaWQgMDpyW2VdWzFdfTt2YXIgdHQ9ZnVuY3Rpb24odCl7cmV0dXJuIFEodGhpcy5fX2RhdGFfXyx0KT4tMX07dmFyIHJ0PWZ1bmN0aW9uKHQscil7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPVEoZSx0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxlLnB1c2goW3Qscl0pKTplW25dWzFdPXIsdGhpc307ZnVuY3Rpb24gZXQodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19ZXQucHJvdG90eXBlLmNsZWFyPUgsZXQucHJvdG90eXBlLmRlbGV0ZT1ZLGV0LnByb3RvdHlwZS5nZXQ9WixldC5wcm90b3R5cGUuaGFzPXR0LGV0LnByb3RvdHlwZS5zZXQ9cnQ7dmFyIG50PWV0LG90PUModSwiTWFwIik7dmFyIHV0PWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgRyxtYXA6bmV3KG90fHxudCksc3RyaW5nOm5ldyBHfX07dmFyIGF0PWZ1bmN0aW9uKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1yfHwibnVtYmVyIj09cnx8InN5bWJvbCI9PXJ8fCJib29sZWFuIj09cj8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9O3ZhciBpdD1mdW5jdGlvbih0LHIpe3ZhciBlPXQuX19kYXRhX187cmV0dXJuIGF0KHIpP2VbInN0cmluZyI9PXR5cGVvZiByPyJzdHJpbmciOiJoYXNoIl06ZS5tYXB9O3ZhciBjdD1mdW5jdGlvbih0KXt2YXIgcj1pdCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1yPzE6MCxyfTt2YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KHRoaXMsdCkuZ2V0KHQpfTt2YXIgbHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KHRoaXMsdCkuaGFzKHQpfTt2YXIgdnQ9ZnVuY3Rpb24odCxyKXt2YXIgZT1pdCh0aGlzLHQpLG49ZS5zaXplO3JldHVybiBlLnNldCh0LHIpLHRoaXMuc2l6ZSs9ZS5zaXplPT1uPzA6MSx0aGlzfTtmdW5jdGlvbiBzdCh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcjxlOyl7dmFyIG49dFtyXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zdC5wcm90b3R5cGUuY2xlYXI9dXQsc3QucHJvdG90eXBlLmRlbGV0ZT1jdCxzdC5wcm90b3R5cGUuZ2V0PWZ0LHN0LnByb3RvdHlwZS5oYXM9bHQsc3QucHJvdG90eXBlLnNldD12dDt2YXIgYnQ9c3Q7ZnVuY3Rpb24gcHQodCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBlPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89cj9yLmFwcGx5KHRoaXMsbik6blswXSx1PWUuY2FjaGU7aWYodS5oYXMobykpcmV0dXJuIHUuZ2V0KG8pO3ZhciBhPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gZS5jYWNoZT11LnNldChvLGEpfHx1LGF9O3JldHVybiBlLmNhY2hlPW5ldyhwdC5DYWNoZXx8YnQpLGV9cHQuQ2FjaGU9YnQ7dmFyIHl0PXB0O3ZhciBodD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxkdD0vXFwoXFwpPy9nLGp0PWZ1bmN0aW9uKHQpe3ZhciByPXl0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1lLnNpemUmJmUuY2xlYXIoKSx0fSkpLGU9ci5jYWNoZTtyZXR1cm4gcn0oKGZ1bmN0aW9uKHQpe3ZhciByPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmci5wdXNoKCIiKSx0LnJlcGxhY2UoaHQsKGZ1bmN0aW9uKHQsZSxuLG8pe3IucHVzaChuP28ucmVwbGFjZShkdCwiJDEiKTplfHx0KX0pKSxyfSkpO3ZhciBndD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPUFycmF5KG4pOysrZTxuOylvW2VdPXIodFtlXSxlLHQpO3JldHVybiBvfSxfdD1hP2EucHJvdG90eXBlOnZvaWQgMCxPdD1fdD9fdC50b1N0cmluZzp2b2lkIDA7dmFyIHd0PWZ1bmN0aW9uIHIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHQoZSkpcmV0dXJuIGd0KGUscikrIiI7aWYoZChlKSlyZXR1cm4gT3Q/T3QuY2FsbChlKToiIjt2YXIgbj1lKyIiO3JldHVybiIwIj09biYmMS9lPT0tSW5maW5pdHk/Ii0wIjpufTt2YXIgbXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6d3QodCl9O3ZhciBBdD1mdW5jdGlvbihyLGUpe3JldHVybiB0KHIpP3I6XyhyLGUpP1tyXTpqdChtdChyKSl9O3ZhciBTdD1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fGQodCkpcmV0dXJuIHQ7dmFyIHI9dCsiIjtyZXR1cm4iMCI9PXImJjEvdD09LUluZmluaXR5PyItMCI6cn07dmFyIFB0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPTAsbj0ocj1BdChyLHQpKS5sZW5ndGg7bnVsbCE9dCYmZTxuOyl0PXRbU3QocltlKytdKV07cmV0dXJuIGUmJmU9PW4/dDp2b2lkIDB9O3ZhciB4dD1mdW5jdGlvbih0LHIsZSl7dmFyIG49bnVsbD09dD92b2lkIDA6UHQodCxyKTtyZXR1cm4gdm9pZCAwPT09bj9lOm59O2Z1bmN0aW9uIHp0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEV0KHQpe3JldHVybiEoIXp0KHQpfHwiIj09PXQpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uICR0KHQpe2lmKEl0KHQpKXtmb3IobGV0IHIgaW4gdClyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4hMX1mdW5jdGlvbiBOdCh0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFR0KHQpe3JldHVybiEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgVW5kZWZpbmVkXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdWxsXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtpZihJdCh0KSl7Zm9yKGxldCByIGluIHQpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4hKCF6dCh0KXx8IiIhPT10KX0odCl8fCEhZnVuY3Rpb24odCl7cmV0dXJuISFOdCh0KSYmMD09PXQubGVuZ3RofSh0KSkpKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4hIU50KHQpJiYoMCE9PXQubGVuZ3RoJiYoMSE9PXQubGVuZ3RofHwhVHQodFswXSkpKX12YXIga3Q9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fHwhMT09PXR8fGgodCkmJiJbb2JqZWN0IEJvb2xlYW5dIj09eSh0KX07ZnVuY3Rpb24gRnQodCl7cmV0dXJuIGt0KHQpfXZhciBDdD1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IG50LHRoaXMuc2l6ZT0wfTt2YXIgRHQ9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPXIuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ci5zaXplLGV9O3ZhciBVdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9O3ZhciBCdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9O3ZhciBSdD1mdW5jdGlvbih0LHIpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoZSBpbnN0YW5jZW9mIG50KXt2YXIgbj1lLl9fZGF0YV9fO2lmKCFvdHx8bi5sZW5ndGg8MTk5KXJldHVybiBuLnB1c2goW3Qscl0pLHRoaXMuc2l6ZT0rK2Uuc2l6ZSx0aGlzO2U9dGhpcy5fX2RhdGFfXz1uZXcgYnQobil9cmV0dXJuIGUuc2V0KHQsciksdGhpcy5zaXplPWUuc2l6ZSx0aGlzfTtmdW5jdGlvbiBMdCh0KXt2YXIgcj10aGlzLl9fZGF0YV9fPW5ldyBudCh0KTt0aGlzLnNpemU9ci5zaXplfUx0LnByb3RvdHlwZS5jbGVhcj1DdCxMdC5wcm90b3R5cGUuZGVsZXRlPUR0LEx0LnByb3RvdHlwZS5nZXQ9VXQsTHQucHJvdG90eXBlLmhhcz1CdCxMdC5wcm90b3R5cGUuc2V0PVJ0O3ZhciBWdD1MdDt2YXIgS3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfTt2YXIgV3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfTtmdW5jdGlvbiBxdCh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgYnQ7KytyPGU7KXRoaXMuYWRkKHRbcl0pfXF0LnByb3RvdHlwZS5hZGQ9cXQucHJvdG90eXBlLnB1c2g9S3QscXQucHJvdG90eXBlLmhhcz1XdDt2YXIgR3Q9cXQ7dmFyIEh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoOysrZTxuOylpZihyKHRbZV0sZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIEp0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaGFzKHIpfTt2YXIgUXQ9ZnVuY3Rpb24odCxyLGUsbixvLHUpe3ZhciBhPTEmZSxpPXQubGVuZ3RoLGM9ci5sZW5ndGg7aWYoaSE9YyYmIShhJiZjPmkpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLGw9dS5nZXQocik7aWYoZiYmbClyZXR1cm4gZj09ciYmbD09dDt2YXIgdj0tMSxzPSEwLGI9MiZlP25ldyBHdDp2b2lkIDA7Zm9yKHUuc2V0KHQsciksdS5zZXQocix0KTsrK3Y8aTspe3ZhciBwPXRbdl0seT1yW3ZdO2lmKG4pdmFyIGg9YT9uKHkscCx2LHIsdCx1KTpuKHAseSx2LHQscix1KTtpZih2b2lkIDAhPT1oKXtpZihoKWNvbnRpbnVlO3M9ITE7YnJlYWt9aWYoYil7aWYoIUh0KHIsKGZ1bmN0aW9uKHQscil7aWYoIUp0KGIscikmJihwPT09dHx8byhwLHQsZSxuLHUpKSlyZXR1cm4gYi5wdXNoKHIpfSkpKXtzPSExO2JyZWFrfX1lbHNlIGlmKHAhPT15JiYhbyhwLHksZSxuLHUpKXtzPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUociksc30sWHQ9dS5VaW50OEFycmF5O3ZhciBZdD1mdW5jdGlvbih0KXt2YXIgcj0tMSxlPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtlWysrcl09W24sdF19KSksZX07dmFyIFp0PWZ1bmN0aW9uKHQpe3ZhciByPS0xLGU9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlWysrcl09dH0pKSxlfSx0cj1hP2EucHJvdG90eXBlOnZvaWQgMCxycj10cj90ci52YWx1ZU9mOnZvaWQgMDt2YXIgZXI9ZnVuY3Rpb24odCxyLGUsbixvLHUsYSl7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ci5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPXIuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLHI9ci5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPXIuYnl0ZUxlbmd0aHx8IXUobmV3IFh0KHQpLG5ldyBYdChyKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIEooK3QsK3IpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PXIubmFtZSYmdC5tZXNzYWdlPT1yLm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gdD09cisiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGk9WXQ7Y2FzZSJbb2JqZWN0IFNldF0iOnZhciBjPTEmbjtpZihpfHwoaT1adCksdC5zaXplIT1yLnNpemUmJiFjKXJldHVybiExO3ZhciBmPWEuZ2V0KHQpO2lmKGYpcmV0dXJuIGY9PXI7bnw9MixhLnNldCh0LHIpO3ZhciBsPVF0KGkodCksaShyKSxuLG8sdSxhKTtyZXR1cm4gYS5kZWxldGUodCksbDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYocnIpcmV0dXJuIHJyLmNhbGwodCk9PXJyLmNhbGwocil9cmV0dXJuITF9O3ZhciBucj1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPXIubGVuZ3RoLG89dC5sZW5ndGg7KytlPG47KXRbbytlXT1yW2VdO3JldHVybiB0fTt2YXIgb3I9ZnVuY3Rpb24ocixlLG4pe3ZhciBvPWUocik7cmV0dXJuIHQocik/bzpucihvLG4ocikpfTt2YXIgdXI9ZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGgsbz0wLHU9W107KytlPG47KXt2YXIgYT10W2VdO3IoYSxlLHQpJiYodVtvKytdPWEpfXJldHVybiB1fTt2YXIgYXI9ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXI9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxjcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZyPWNyP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU9iamVjdCh0KSx1cihjcih0KSwoZnVuY3Rpb24ocil7cmV0dXJuIGlyLmNhbGwodCxyKX0pKSl9OmFyO3ZhciBscj1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPUFycmF5KHQpOysrZTx0OyluW2VdPXIoZSk7cmV0dXJuIG59O3ZhciB2cj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXkodCl9LHNyPU9iamVjdC5wcm90b3R5cGUsYnI9c3IuaGFzT3duUHJvcGVydHkscHI9c3IucHJvcGVydHlJc0VudW1lcmFibGUseXI9dnIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT92cjpmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmYnIuY2FsbCh0LCJjYWxsZWUiKSYmIXByLmNhbGwodCwiY2FsbGVlIil9O3ZhciBocj1mdW5jdGlvbigpe3JldHVybiExfSxkcj1lKChmdW5jdGlvbih0LHIpe3ZhciBlPXImJiFyLm5vZGVUeXBlJiZyLG49ZSYmdCYmIXQubm9kZVR5cGUmJnQsbz1uJiZuLmV4cG9ydHM9PT1lP3UuQnVmZmVyOnZvaWQgMCxhPShvP28uaXNCdWZmZXI6dm9pZCAwKXx8aHI7dC5leHBvcnRzPWF9KSksanI9L14oPzowfFsxLTldXGQqKSQvO3ZhciBncj1mdW5jdGlvbih0LHIpe3ZhciBlPXR5cGVvZiB0O3JldHVybiEhKHI9bnVsbD09cj85MDA3MTk5MjU0NzQwOTkxOnIpJiYoIm51bWJlciI9PWV8fCJzeW1ib2wiIT1lJiZqci50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PHJ9O3ZhciBfcj1mdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+LTEmJnQlMT09MCYmdDw9OTAwNzE5OTI1NDc0MDk5MX0sT3I9e307T3JbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPU9yWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1PclsiW29iamVjdCBJbnQ4QXJyYXldIl09T3JbIltvYmplY3QgSW50MTZBcnJheV0iXT1PclsiW29iamVjdCBJbnQzMkFycmF5XSJdPU9yWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09T3JbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09T3JbIltvYmplY3QgVWludDE2QXJyYXldIl09T3JbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsT3JbIltvYmplY3QgQXJndW1lbnRzXSJdPU9yWyJbb2JqZWN0IEFycmF5XSJdPU9yWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPU9yWyJbb2JqZWN0IEJvb2xlYW5dIl09T3JbIltvYmplY3QgRGF0YVZpZXddIl09T3JbIltvYmplY3QgRGF0ZV0iXT1PclsiW29iamVjdCBFcnJvcl0iXT1PclsiW29iamVjdCBGdW5jdGlvbl0iXT1PclsiW29iamVjdCBNYXBdIl09T3JbIltvYmplY3QgTnVtYmVyXSJdPU9yWyJbb2JqZWN0IE9iamVjdF0iXT1PclsiW29iamVjdCBSZWdFeHBdIl09T3JbIltvYmplY3QgU2V0XSJdPU9yWyJbb2JqZWN0IFN0cmluZ10iXT1PclsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciB3cj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmX3IodC5sZW5ndGgpJiYhIU9yW3kodCldfTt2YXIgbXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHIpfX0sQXI9ZSgoZnVuY3Rpb24odCxyKXt2YXIgZT1yJiYhci5ub2RlVHlwZSYmcixvPWUmJnQmJiF0Lm5vZGVUeXBlJiZ0LHU9byYmby5leHBvcnRzPT09ZSYmbi5wcm9jZXNzLGE9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9byYmby5yZXF1aXJlJiZvLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdHx8dSYmdS5iaW5kaW5nJiZ1LmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1hfSkpLFNyPUFyJiZBci5pc1R5cGVkQXJyYXksUHI9U3I/bXIoU3IpOndyLHhyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIHpyPWZ1bmN0aW9uKHIsZSl7dmFyIG49dChyKSxvPSFuJiZ5cihyKSx1PSFuJiYhbyYmZHIociksYT0hbiYmIW8mJiF1JiZQcihyKSxpPW58fG98fHV8fGEsYz1pP2xyKHIubGVuZ3RoLFN0cmluZyk6W10sZj1jLmxlbmd0aDtmb3IodmFyIGwgaW4gcikhZSYmIXhyLmNhbGwocixsKXx8aSYmKCJsZW5ndGgiPT1sfHx1JiYoIm9mZnNldCI9PWx8fCJwYXJlbnQiPT1sKXx8YSYmKCJidWZmZXIiPT1sfHwiYnl0ZUxlbmd0aCI9PWx8fCJieXRlT2Zmc2V0Ij09bCl8fGdyKGwsZikpfHxjLnB1c2gobCk7cmV0dXJuIGN9LEVyPU9iamVjdC5wcm90b3R5cGU7dmFyIElyPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxFcil9O3ZhciAkcj1mdW5jdGlvbih0LHIpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChyKGUpKX19LE5yPSRyKE9iamVjdC5rZXlzLE9iamVjdCksVHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTXI9ZnVuY3Rpb24odCl7aWYoIUlyKHQpKXJldHVybiBOcih0KTt2YXIgcj1bXTtmb3IodmFyIGUgaW4gT2JqZWN0KHQpKVRyLmNhbGwodCxlKSYmImNvbnN0cnVjdG9yIiE9ZSYmci5wdXNoKGUpO3JldHVybiByfTt2YXIga3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJl9yKHQubGVuZ3RoKSYmIW0odCl9O3ZhciBGcj1mdW5jdGlvbih0KXtyZXR1cm4ga3IodCk/enIodCk6TXIodCl9O3ZhciBDcj1mdW5jdGlvbih0KXtyZXR1cm4gb3IodCxGcixmcil9LERyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFVyPWZ1bmN0aW9uKHQscixlLG4sbyx1KXt2YXIgYT0xJmUsaT1Dcih0KSxjPWkubGVuZ3RoO2lmKGMhPUNyKHIpLmxlbmd0aCYmIWEpcmV0dXJuITE7Zm9yKHZhciBmPWM7Zi0tOyl7dmFyIGw9aVtmXTtpZighKGE/bCBpbiByOkRyLmNhbGwocixsKSkpcmV0dXJuITF9dmFyIHY9dS5nZXQodCkscz11LmdldChyKTtpZih2JiZzKXJldHVybiB2PT1yJiZzPT10O3ZhciBiPSEwO3Uuc2V0KHQsciksdS5zZXQocix0KTtmb3IodmFyIHA9YTsrK2Y8Yzspe3ZhciB5PXRbbD1pW2ZdXSxoPXJbbF07aWYobil2YXIgZD1hP24oaCx5LGwscix0LHUpOm4oeSxoLGwsdCxyLHUpO2lmKCEodm9pZCAwPT09ZD95PT09aHx8byh5LGgsZSxuLHUpOmQpKXtiPSExO2JyZWFrfXB8fChwPSJjb25zdHJ1Y3RvciI9PWwpfWlmKGImJiFwKXt2YXIgaj10LmNvbnN0cnVjdG9yLGc9ci5jb25zdHJ1Y3RvcjtqPT1nfHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gcil8fCJmdW5jdGlvbiI9PXR5cGVvZiBqJiZqIGluc3RhbmNlb2YgaiYmImZ1bmN0aW9uIj09dHlwZW9mIGcmJmcgaW5zdGFuY2VvZiBnfHwoYj0hMSl9cmV0dXJuIHUuZGVsZXRlKHQpLHUuZGVsZXRlKHIpLGJ9LEJyPUModSwiRGF0YVZpZXciKSxScj1DKHUsIlByb21pc2UiKSxMcj1DKHUsIlNldCIpLFZyPUModSwiV2Vha01hcCIpLEtyPXooQnIpLFdyPXoob3QpLHFyPXooUnIpLEdyPXooTHIpLEhyPXooVnIpLEpyPXk7KEJyJiYiW29iamVjdCBEYXRhVmlld10iIT1KcihuZXcgQnIobmV3IEFycmF5QnVmZmVyKDEpKSl8fG90JiYiW29iamVjdCBNYXBdIiE9SnIobmV3IG90KXx8UnImJiJbb2JqZWN0IFByb21pc2VdIiE9SnIoUnIucmVzb2x2ZSgpKXx8THImJiJbb2JqZWN0IFNldF0iIT1KcihuZXcgTHIpfHxWciYmIltvYmplY3QgV2Vha01hcF0iIT1KcihuZXcgVnIpKSYmKEpyPWZ1bmN0aW9uKHQpe3ZhciByPXkodCksZT0iW29iamVjdCBPYmplY3RdIj09cj90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPWU/eihlKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEtyOnJldHVybiJbb2JqZWN0IERhdGFWaWV3XSI7Y2FzZSBXcjpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIHFyOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIEdyOnJldHVybiJbb2JqZWN0IFNldF0iO2Nhc2UgSHI6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiByfSk7dmFyIFFyPUpyLFhyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFlyPWZ1bmN0aW9uKHIsZSxuLG8sdSxhKXt2YXIgaT10KHIpLGM9dChlKSxmPWk/IltvYmplY3QgQXJyYXldIjpRcihyKSxsPWM/IltvYmplY3QgQXJyYXldIjpRcihlKSx2PSJbb2JqZWN0IE9iamVjdF0iPT0oZj0iW29iamVjdCBBcmd1bWVudHNdIj09Zj8iW29iamVjdCBPYmplY3RdIjpmKSxzPSJbb2JqZWN0IE9iamVjdF0iPT0obD0iW29iamVjdCBBcmd1bWVudHNdIj09bD8iW29iamVjdCBPYmplY3RdIjpsKSxiPWY9PWw7aWYoYiYmZHIocikpe2lmKCFkcihlKSlyZXR1cm4hMTtpPSEwLHY9ITF9aWYoYiYmIXYpcmV0dXJuIGF8fChhPW5ldyBWdCksaXx8UHIocik/UXQocixlLG4sbyx1LGEpOmVyKHIsZSxmLG4sbyx1LGEpO2lmKCEoMSZuKSl7dmFyIHA9diYmWHIuY2FsbChyLCJfX3dyYXBwZWRfXyIpLHk9cyYmWHIuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKHB8fHkpe3ZhciBoPXA/ci52YWx1ZSgpOnIsZD15P2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgVnQpLHUoaCxkLG4sbyxhKX19cmV0dXJuISFiJiYoYXx8KGE9bmV3IFZ0KSxVcihyLGUsbixvLHUsYSkpfTt2YXIgWnI9ZnVuY3Rpb24gdChyLGUsbixvLHUpe3JldHVybiByPT09ZXx8KG51bGw9PXJ8fG51bGw9PWV8fCFoKHIpJiYhaChlKT9yIT1yJiZlIT1lOllyKHIsZSxuLG8sdCx1KSl9O3ZhciB0ZT1mdW5jdGlvbih0LHIsZSxuKXt2YXIgbz1lLmxlbmd0aCx1PW8sYT0hbjtpZihudWxsPT10KXJldHVybiF1O2Zvcih0PU9iamVjdCh0KTtvLS07KXt2YXIgaT1lW29dO2lmKGEmJmlbMl0/aVsxXSE9PXRbaVswXV06IShpWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288dTspe3ZhciBjPShpPWVbb10pWzBdLGY9dFtjXSxsPWlbMV07aWYoYSYmaVsyXSl7aWYodm9pZCAwPT09ZiYmIShjIGluIHQpKXJldHVybiExfWVsc2V7dmFyIHY9bmV3IFZ0O2lmKG4pdmFyIHM9bihmLGwsYyx0LHIsdik7aWYoISh2b2lkIDA9PT1zP1pyKGwsZiwzLG4sdik6cykpcmV0dXJuITF9fXJldHVybiEwfTt2YXIgcmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFPKHQpfTt2YXIgZWU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPUZyKHQpLGU9ci5sZW5ndGg7ZS0tOyl7dmFyIG49cltlXSxvPXRbbl07cltlXT1bbixvLHJlKG8pXX1yZXR1cm4gcn07dmFyIG5lPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYoZVt0XT09PXImJih2b2lkIDAhPT1yfHx0IGluIE9iamVjdChlKSkpfX07dmFyIG9lPWZ1bmN0aW9uKHQpe3ZhciByPWVlKHQpO3JldHVybiAxPT1yLmxlbmd0aCYmclswXVsyXT9uZShyWzBdWzBdLHJbMF1bMV0pOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dHx8dGUoZSx0LHIpfX07dmFyIHVlPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGwhPXQmJnIgaW4gT2JqZWN0KHQpfTt2YXIgYWU9ZnVuY3Rpb24ocixlLG4pe2Zvcih2YXIgbz0tMSx1PShlPUF0KGUscikpLmxlbmd0aCxhPSExOysrbzx1Oyl7dmFyIGk9U3QoZVtvXSk7aWYoIShhPW51bGwhPXImJm4ocixpKSkpYnJlYWs7cj1yW2ldfXJldHVybiBhfHwrK28hPXU/YTohISh1PW51bGw9PXI/MDpyLmxlbmd0aCkmJl9yKHUpJiZncihpLHUpJiYodChyKXx8eXIocikpfTt2YXIgaWU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbnVsbCE9dCYmYWUodCxyLHVlKX07dmFyIGNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIF8odCkmJnJlKHIpP25lKFN0KHQpLHIpOmZ1bmN0aW9uKGUpe3ZhciBuPXh0KGUsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1yP2llKGUsdCk6WnIocixuLDMpfX07dmFyIGZlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsPT1yP3ZvaWQgMDpyW3RdfX07dmFyIHZlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gUHQocix0KX19O3ZhciBzZT1mdW5jdGlvbih0KXtyZXR1cm4gXyh0KT9sZShTdCh0KSk6dmUodCl9O3ZhciBiZT1mdW5jdGlvbihyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm51bGw9PXI/ZmU6Im9iamVjdCI9PXR5cGVvZiByP3Qocik/Y2UoclswXSxyWzFdKTpvZShyKTpzZShyKX07dmFyIHBlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihyLGUsbil7Zm9yKHZhciBvPS0xLHU9T2JqZWN0KHIpLGE9bihyKSxpPWEubGVuZ3RoO2ktLTspe3ZhciBjPWFbdD9pOisrb107aWYoITE9PT1lKHVbY10sYyx1KSlicmVha31yZXR1cm4gcn19KCk7dmFyIHllPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm4gZTtpZigha3IoZSkpcmV0dXJuIHQoZSxuKTtmb3IodmFyIG89ZS5sZW5ndGgsdT1yP286LTEsYT1PYmplY3QoZSk7KHI/dS0tOisrdTxvKSYmITEhPT1uKGFbdV0sdSxhKTspO3JldHVybiBlfX0oKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJnBlKHQscixGcil9KSk7dmFyIGhlPWZ1bmN0aW9uKHQscil7dmFyIGU9LTEsbj1rcih0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIHllKHQsKGZ1bmN0aW9uKHQsbyx1KXtuWysrZV09cih0LG8sdSl9KSksbn07dmFyIGRlPWZ1bmN0aW9uKHIsZSl7cmV0dXJuKHQocik/Z3Q6aGUpKHIsYmUoZSkpfSxqZT1BcnJheS5wcm90b3R5cGUuam9pbjt2YXIgZ2U9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbnVsbD09dD8iIjpqZS5jYWxsKHQscil9O3ZhciBfZT1mdW5jdGlvbihyKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHJ8fCF0KHIpJiZoKHIpJiYiW29iamVjdCBTdHJpbmddIj09eShyKX0sT2U9bGUoImxlbmd0aCIpLHdlPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHdlLnRlc3QodCl9LEFlPSJbXFx1ZDgwMC1cXHVkZmZmXSIsU2U9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixQZT0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix4ZT0iW15cXHVkODAwLVxcdWRmZmZdIix6ZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsRWU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEllPSIoPzoiK1NlKyJ8IitQZSsiKSIrIj8iLCRlPSJbXFx1ZmUwZVxcdWZlMGZdPyIrSWUrKCIoPzpcXHUyMDBkKD86IitbeGUsemUsRWVdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitJZSsiKSoiKSxOZT0iKD86IitbeGUrU2UrIj8iLFNlLHplLEVlLEFlXS5qb2luKCJ8IikrIikiLFRlPVJlZ0V4cChQZSsiKD89IitQZSsiKXwiK05lKyRlLCJnIik7dmFyIE1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1UZS5sYXN0SW5kZXg9MDtUZS50ZXN0KHQpOykrK3I7cmV0dXJuIHJ9O3ZhciBrZT1mdW5jdGlvbih0KXtyZXR1cm4gbWUodCk/TWUodCk6T2UodCl9O3ZhciBGZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGtyKHQpKXJldHVybiBfZSh0KT9rZSh0KTp0Lmxlbmd0aDt2YXIgcj1Rcih0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOk1yKHQpLmxlbmd0aH07dmFyIENlPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8aCh0KSYmIltvYmplY3QgTnVtYmVyXSI9PXkodCl9O3ZhciBEZT1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK2U8biYmITEhPT1yKHRbZV0sZSx0KTspO3JldHVybiB0fSxVZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1DKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3ZhciBCZT1mdW5jdGlvbih0LHIsZSl7Il9fcHJvdG9fXyI9PXImJlVlP1VlKHQscix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZSx3cml0YWJsZTohMH0pOnRbcl09ZX0sUmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTGU9ZnVuY3Rpb24odCxyLGUpe3ZhciBuPXRbcl07UmUuY2FsbCh0LHIpJiZKKG4sZSkmJih2b2lkIDAhPT1lfHxyIGluIHQpfHxCZSh0LHIsZSl9O3ZhciBWZT1mdW5jdGlvbih0LHIsZSxuKXt2YXIgbz0hZTtlfHwoZT17fSk7Zm9yKHZhciB1PS0xLGE9ci5sZW5ndGg7Kyt1PGE7KXt2YXIgaT1yW3VdLGM9bj9uKGVbaV0sdFtpXSxpLGUsdCk6dm9pZCAwO3ZvaWQgMD09PWMmJihjPXRbaV0pLG8/QmUoZSxpLGMpOkxlKGUsaSxjKX1yZXR1cm4gZX07dmFyIEtlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJlZlKHIsRnIociksdCl9O3ZhciBXZT1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZihudWxsIT10KWZvcih2YXIgZSBpbiBPYmplY3QodCkpci5wdXNoKGUpO3JldHVybiByfSxxZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT1mdW5jdGlvbih0KXtpZighTyh0KSlyZXR1cm4gV2UodCk7dmFyIHI9SXIodCksZT1bXTtmb3IodmFyIG4gaW4gdCkoImNvbnN0cnVjdG9yIiE9bnx8IXImJnFlLmNhbGwodCxuKSkmJmUucHVzaChuKTtyZXR1cm4gZX07dmFyIEhlPWZ1bmN0aW9uKHQpe3JldHVybiBrcih0KT96cih0LCEwKTpHZSh0KX07dmFyIEplPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJlZlKHIsSGUociksdCl9LFFlPWUoKGZ1bmN0aW9uKHQscil7dmFyIGU9ciYmIXIubm9kZVR5cGUmJnIsbj1lJiZ0JiYhdC5ub2RlVHlwZSYmdCxvPW4mJm4uZXhwb3J0cz09PWU/dS5CdWZmZXI6dm9pZCAwLGE9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtpZihyKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9dC5sZW5ndGgsbj1hP2EoZSk6bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIHQuY29weShuKSxufX0pKTt2YXIgWGU9ZnVuY3Rpb24odCxyKXt2YXIgZT0tMSxuPXQubGVuZ3RoO2ZvcihyfHwocj1BcnJheShuKSk7KytlPG47KXJbZV09dFtlXTtyZXR1cm4gcn07dmFyIFllPWZ1bmN0aW9uKHQscil7cmV0dXJuIFZlKHQsZnIodCkscil9LFplPSRyKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLHRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdO3Q7KW5yKHIsZnIodCkpLHQ9WmUodCk7cmV0dXJuIHJ9OmFyO3ZhciBybj1mdW5jdGlvbih0LHIpe3JldHVybiBWZSh0LHRuKHQpLHIpfTt2YXIgZW49ZnVuY3Rpb24odCl7cmV0dXJuIG9yKHQsSGUsdG4pfSxubj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBvbj1mdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxlPW5ldyB0LmNvbnN0cnVjdG9yKHIpO3JldHVybiByJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJm5uLmNhbGwodCwiaW5kZXgiKSYmKGUuaW5kZXg9dC5pbmRleCxlLmlucHV0PXQuaW5wdXQpLGV9O3ZhciB1bj1mdW5jdGlvbih0KXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWHQocikuc2V0KG5ldyBYdCh0KSkscn07dmFyIGFuPWZ1bmN0aW9uKHQscil7dmFyIGU9cj91bih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKGUsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9LGNuPS9cdyokLzt2YXIgZm49ZnVuY3Rpb24odCl7dmFyIHI9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsY24uZXhlYyh0KSk7cmV0dXJuIHIubGFzdEluZGV4PXQubGFzdEluZGV4LHJ9LGxuPWE/YS5wcm90b3R5cGU6dm9pZCAwLHZuPWxuP2xuLnZhbHVlT2Y6dm9pZCAwO3ZhciBzbj1mdW5jdGlvbih0KXtyZXR1cm4gdm4/T2JqZWN0KHZuLmNhbGwodCkpOnt9fTt2YXIgYm49ZnVuY3Rpb24odCxyKXt2YXIgZT1yP3VuKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3IoZSx0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfTt2YXIgcG49ZnVuY3Rpb24odCxyLGUpe3ZhciBuPXQuY29uc3RydWN0b3I7c3dpdGNoKHIpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiB1bih0KTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBuKCt0KTtjYXNlIltvYmplY3QgRGF0YVZpZXddIjpyZXR1cm4gYW4odCxlKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gYm4odCxlKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBuO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBuKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZm4odCk7Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgbjtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIHNuKHQpfX0seW49T2JqZWN0LmNyZWF0ZSxobj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKCFPKHIpKXJldHVybnt9O2lmKHluKXJldHVybiB5bihyKTt0LnByb3RvdHlwZT1yO3ZhciBlPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsZX19KCk7dmFyIGRuPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxJcih0KT97fTpobihaZSh0KSl9O3ZhciBqbj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgTWFwXSI9PVFyKHQpfSxnbj1BciYmQXIuaXNNYXAsX249Z24/bXIoZ24pOmpuO3ZhciBPbj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgU2V0XSI9PVFyKHQpfSx3bj1BciYmQXIuaXNTZXQsbW49d24/bXIod24pOk9uLEFuPXt9O0FuWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1BblsiW29iamVjdCBBcnJheV0iXT1BblsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1BblsiW29iamVjdCBEYXRhVmlld10iXT1BblsiW29iamVjdCBCb29sZWFuXSJdPUFuWyJbb2JqZWN0IERhdGVdIl09QW5bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUFuWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1BblsiW29iamVjdCBJbnQ4QXJyYXldIl09QW5bIltvYmplY3QgSW50MTZBcnJheV0iXT1BblsiW29iamVjdCBJbnQzMkFycmF5XSJdPUFuWyJbb2JqZWN0IE1hcF0iXT1BblsiW29iamVjdCBOdW1iZXJdIl09QW5bIltvYmplY3QgT2JqZWN0XSJdPUFuWyJbb2JqZWN0IFJlZ0V4cF0iXT1BblsiW29iamVjdCBTZXRdIl09QW5bIltvYmplY3QgU3RyaW5nXSJdPUFuWyJbb2JqZWN0IFN5bWJvbF0iXT1BblsiW29iamVjdCBVaW50OEFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEFuWyJbb2JqZWN0IEVycm9yXSJdPUFuWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUFuWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIFNuPWZ1bmN0aW9uIHIoZSxuLG8sdSxhLGkpe3ZhciBjLGY9MSZuLGw9MiZuLHY9NCZuO2lmKG8mJihjPWE/byhlLHUsYSxpKTpvKGUpKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKCFPKGUpKXJldHVybiBlO3ZhciBzPXQoZSk7aWYocyl7aWYoYz1vbihlKSwhZilyZXR1cm4gWGUoZSxjKX1lbHNle3ZhciBiPVFyKGUpLHA9IltvYmplY3QgRnVuY3Rpb25dIj09Ynx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09YjtpZihkcihlKSlyZXR1cm4gUWUoZSxmKTtpZigiW29iamVjdCBPYmplY3RdIj09Ynx8IltvYmplY3QgQXJndW1lbnRzXSI9PWJ8fHAmJiFhKXtpZihjPWx8fHA/e306ZG4oZSksIWYpcmV0dXJuIGw/cm4oZSxKZShjLGUpKTpZZShlLEtlKGMsZSkpfWVsc2V7aWYoIUFuW2JdKXJldHVybiBhP2U6e307Yz1wbihlLGIsZil9fWl8fChpPW5ldyBWdCk7dmFyIHk9aS5nZXQoZSk7aWYoeSlyZXR1cm4geTtpLnNldChlLGMpLG1uKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5hZGQocih0LG4sbyx0LGUsaSkpfSkpOl9uKGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHQsdSl7Yy5zZXQodSxyKHQsbixvLHUsZSxpKSl9KSk7dmFyIGg9cz92b2lkIDA6KHY/bD9lbjpDcjpsP0hlOkZyKShlKTtyZXR1cm4gRGUoaHx8ZSwoZnVuY3Rpb24odCx1KXtoJiYodD1lW3U9dF0pLExlKGMsdSxyKHQsbixvLHUsZSxpKSl9KSksY307dmFyIFBuPWZ1bmN0aW9uKHQpe3JldHVybiBTbih0LDUpfTtmdW5jdGlvbiB4bih0KXtsZXQgcj0hMTtyZXR1cm4gRXQodCk/cj0haXNOYU4oTnVtYmVyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkmJihyPSEwKSxyfWZ1bmN0aW9uIHpuKHQpe2lmKCFFdCh0KSYmIXhuKHQpJiYhZCh0KSlyZXR1cm4iIjtsZXQgcj0iIjt0cnl7cj1TdHJpbmcodCl9Y2F0Y2godCl7fXRyeXtyPXQudG9TdHJpbmcoKX1jYXRjaCh0KXt9cmV0dXJuIHJ9dmFyIEVuPU1hdGguY2VpbCxJbj1NYXRoLm1heDt2YXIgJG49ZnVuY3Rpb24odCxyLGUsbil7Zm9yKHZhciBvPS0xLHU9SW4oRW4oKHItdCkvKGV8fDEpKSwwKSxhPUFycmF5KHUpO3UtLTspYVtuP3U6KytvXT10LHQrPWU7cmV0dXJuIGF9O3ZhciBObj1mdW5jdGlvbih0LHIsZSl7aWYoIU8oZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHI7cmV0dXJuISEoIm51bWJlciI9PW4/a3IoZSkmJmdyKHIsZS5sZW5ndGgpOiJzdHJpbmciPT1uJiZyIGluIGUpJiZKKGVbcl0sdCl9LFRuPS9ccy87dmFyIE1uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aDtyLS0mJlRuLnRlc3QodC5jaGFyQXQocikpOyk7cmV0dXJuIHJ9LGtuPS9eXHMrLzt2YXIgRm49ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLE1uKHQpKzEpLnJlcGxhY2Uoa24sIiIpOnR9LENuPS9eWy0rXTB4WzAtOWEtZl0rJC9pLERuPS9eMGJbMDFdKyQvaSxVbj0vXjBvWzAtN10rJC9pLEJuPXBhcnNlSW50O3ZhciBSbj1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoZCh0KSlyZXR1cm4gTmFOO2lmKE8odCkpe3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PU8ocik/cisiIjpyfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PUZuKHQpO3ZhciBlPURuLnRlc3QodCk7cmV0dXJuIGV8fFVuLnRlc3QodCk/Qm4odC5zbGljZSgyKSxlPzI6OCk6Q24udGVzdCh0KT9OYU46K3R9O3ZhciBMbj1mdW5jdGlvbih0KXtyZXR1cm4gdD9JbmZpbml0eT09PSh0PVJuKHQpKXx8LUluZmluaXR5PT09dD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9O3ZhciBWbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocixlLG4pe3JldHVybiBuJiYibnVtYmVyIiE9dHlwZW9mIG4mJk5uKHIsZSxuKSYmKGU9bj12b2lkIDApLHI9TG4ociksdm9pZCAwPT09ZT8oZT1yLHI9MCk6ZT1MbihlKSxuPXZvaWQgMD09PW4/cjxlPzE6LTE6TG4obiksJG4ocixlLG4sdCl9fSgpO2Z1bmN0aW9uIEtuKHQscj1udWxsLGU9e30pe20ocil8fChyPXQ9PnQpO2xldCBuPXh0KGUsImZvcmNlIiwhMSk7cmV0dXJuIEZ0KG4pfHwobj0hMSksZnVuY3Rpb24odCxyLGU9ITEpe2xldCBuPVtdO2lmKCFOdCh0KSYmIUl0KHQpKXJldHVybiByKHQsbnVsbCxbXSk7ZnVuY3Rpb24gbyh0KXtpZihOdCh0KSlyZXR1cm4gVm4oRmUodCkpO2lmKEl0KHQpKXtsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxuPW51bGw7cmV0dXJuIGUmJihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkpLE50KHIpfHwocj1bXSksTnQobil8fChuPVtdKSxbLi4uciwuLi5uXX1yZXR1cm4gdH1yZXR1cm4gZnVuY3Rpb24gdChlLHUpe2lmKE50KGUpKXJldHVybiBvKGUpLm1hcCgobz0+e2xldCB1PWVbb10sYT1QbihuKTtyZXR1cm4gbi5wdXNoKG8pLHU9cih1LG8sYSksdT10KHUpLG4ucG9wKCksdX0pKTtpZihJdChlKSl7bGV0IHU9byhlKSxhPXt9O3JldHVybiB1Lm1hcCgobz0+e2xldCB1PWVbb10saT1QbihuKTtuLnB1c2gobyksdT1yKHUsbyxpKSx1PXQodSksbi5wb3AoKSxhW29dPXV9KSksYX1yZXR1cm4gZX0odCl9KHQscixuKX1mdW5jdGlvbiBXbih0LHIsZSl7cmV0dXJuIHIgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtyXT1lLHR9dmFyIHFuPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZmV9O3ZhciBHbj1mdW5jdGlvbihyLGUpe3JldHVybih0KHIpP0RlOnllKShyLHFuKGUpKX07dmFyIEhuPWZ1bmN0aW9uKHQscixlLG4pe2lmKCFPKHQpKXJldHVybiB0O2Zvcih2YXIgbz0tMSx1PShyPUF0KHIsdCkpLmxlbmd0aCxhPXUtMSxpPXQ7bnVsbCE9aSYmKytvPHU7KXt2YXIgYz1TdChyW29dKSxmPWU7aWYoIl9fcHJvdG9fXyI9PT1jfHwiY29uc3RydWN0b3IiPT09Y3x8InByb3RvdHlwZSI9PT1jKXJldHVybiB0O2lmKG8hPWEpe3ZhciBsPWlbY107dm9pZCAwPT09KGY9bj9uKGwsYyxpKTp2b2lkIDApJiYoZj1PKGwpP2w6Z3IocltvKzFdKT9bXTp7fSl9TGUoaSxjLGYpLGk9aVtjXX1yZXR1cm4gdH07dmFyIEpuPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gbnVsbD09dD90OkhuKHQscixlKX07dmFyIFFuPWZ1bmN0aW9uKHQpe3ZhciByPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gcj90W3ItMV06dm9pZCAwfTt2YXIgWG49ZnVuY3Rpb24odCxyLGUpe3ZhciBuPS0xLG89dC5sZW5ndGg7cjwwJiYocj0tcj5vPzA6bytyKSwoZT1lPm8/bzplKTwwJiYoZSs9byksbz1yPmU/MDplLXI+Pj4wLHI+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK3JdO3JldHVybiB1fTt2YXIgWW49ZnVuY3Rpb24odCxyKXtyZXR1cm4gci5sZW5ndGg8Mj90OlB0KHQsWG4ociwwLC0xKSl9O3ZhciBabj1mdW5jdGlvbih0LHIpe3JldHVybiByPUF0KHIsdCksbnVsbD09KHQ9WW4odCxyKSl8fGRlbGV0ZSB0W1N0KFFuKHIpKV19LHRvPUZ1bmN0aW9uLnByb3RvdHlwZSxybz1PYmplY3QucHJvdG90eXBlLGVvPXRvLnRvU3RyaW5nLG5vPXJvLmhhc093blByb3BlcnR5LG9vPWVvLmNhbGwoT2JqZWN0KTt2YXIgdW89ZnVuY3Rpb24odCl7aWYoIWgodCl8fCJbb2JqZWN0IE9iamVjdF0iIT15KHQpKXJldHVybiExO3ZhciByPVplKHQpO2lmKG51bGw9PT1yKXJldHVybiEwO3ZhciBlPW5vLmNhbGwociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSBpbnN0YW5jZW9mIGUmJmVvLmNhbGwoZSk9PW9vfTt2YXIgYW89ZnVuY3Rpb24odCl7cmV0dXJuIHVvKHQpP3ZvaWQgMDp0fSxpbz1hP2EuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt2YXIgY289ZnVuY3Rpb24ocil7cmV0dXJuIHQocil8fHlyKHIpfHwhIShpbyYmciYmcltpb10pfTt2YXIgZm89ZnVuY3Rpb24gdChyLGUsbixvLHUpe3ZhciBhPS0xLGk9ci5sZW5ndGg7Zm9yKG58fChuPWNvKSx1fHwodT1bXSk7KythPGk7KXt2YXIgYz1yW2FdO2U+MCYmbihjKT9lPjE/dChjLGUtMSxuLG8sdSk6bnIodSxjKTpvfHwodVt1Lmxlbmd0aF09Yyl9cmV0dXJuIHV9O3ZhciBsbz1mdW5jdGlvbih0KXtyZXR1cm4obnVsbD09dD8wOnQubGVuZ3RoKT9mbyh0LDEpOltdfTt2YXIgdm89ZnVuY3Rpb24odCxyLGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwocik7Y2FzZSAxOnJldHVybiB0LmNhbGwocixlWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChyLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwocixlWzBdLGVbMV0sZVsyXSl9cmV0dXJuIHQuYXBwbHkocixlKX0sc289TWF0aC5tYXg7dmFyIGJvPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gcj1zbyh2b2lkIDA9PT1yP3QubGVuZ3RoLTE6ciwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMsbz0tMSx1PXNvKG4ubGVuZ3RoLXIsMCksYT1BcnJheSh1KTsrK288dTspYVtvXT1uW3Irb107bz0tMTtmb3IodmFyIGk9QXJyYXkocisxKTsrK288cjspaVtvXT1uW29dO3JldHVybiBpW3JdPWUoYSksdm8odCx0aGlzLGkpfX07dmFyIHBvPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0seW89VWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gVWUodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpwbyhyKSx3cml0YWJsZTohMH0pfTpmZSxobz1EYXRlLm5vdzt2YXIgam89ZnVuY3Rpb24odCl7dmFyIHI9MCxlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49aG8oKSxvPTE2LShuLWUpO2lmKGU9bixvPjApe2lmKCsrcj49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSByPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSh5byk7dmFyIGdvPWZ1bmN0aW9uKHQpe3JldHVybiBqbyhibyh0LHZvaWQgMCxsbyksdCsiIil9KChmdW5jdGlvbih0LHIpe3ZhciBlPXt9O2lmKG51bGw9PXQpcmV0dXJuIGU7dmFyIG49ITE7cj1ndChyLChmdW5jdGlvbihyKXtyZXR1cm4gcj1BdChyLHQpLG58fChuPXIubGVuZ3RoPjEpLHJ9KSksVmUodCxlbih0KSxlKSxuJiYoZT1TbihlLDcsYW8pKTtmb3IodmFyIG89ci5sZW5ndGg7by0tOylabihlLHJbb10pO3JldHVybiBlfSkpO2Z1bmN0aW9uIF9vKHQscil7dmFyIGU9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtyJiYobj1uLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKS5lbnVtZXJhYmxlfSkpKSxlLnB1c2guYXBwbHkoZSxuKX1yZXR1cm4gZX1mdW5jdGlvbiBPbyh0KXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgZT1udWxsIT1hcmd1bWVudHNbcl0/YXJndW1lbnRzW3JdOnt9O3IlMj9fbyhPYmplY3QoZSksITApLmZvckVhY2goKGZ1bmN0aW9uKHIpe1duKHQscixlW3JdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpKTpfbyhPYmplY3QoZSkpLmZvckVhY2goKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiB3byh0LHI9e30pe2xldCBlPSIkbGV2ZWwiLG49IiRwYXJlbnRzIjtpZighTXQodCkpcmV0dXJuW107bGV0IG89eHQociwiYmluZEtleSIsbnVsbCk7RXQobyl8fChvPSJpZCIpO2xldCB1PXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KHUpfHwodT0icGFyZW50SWQiKTtsZXQgYT14dChyLCJiaW5kQ2hpbGRyZW4iLG51bGwpO0V0KGEpfHwoYT0iY2hpbGRyZW4iKTtsZXQgaT14dChyLCJzYXZlRXh0UHJvcHMiLG51bGwpO3JldHVybiBGdChpKXx8KGk9ITEpLGZ1bmN0aW9uKHQpe2xldCByPVtdO2Z1bmN0aW9uIGModCl7cmV0dXJuIGk/dDpnbyh0LFtlLG5dKX1sZXQgZj17fTtyZXR1cm4gR24odCwoKGUsbik9PntpZigwPT09ZS4kbGV2ZWwpe2xldCB0PWMoZSk7ci5wdXNoKHQpLGZbZVtvXV09W25dfWVsc2V7bGV0IG49ZnVuY3Rpb24ocil7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07aWYoclt1XT09PW5bb10pcmV0dXJuIG59cmV0dXJuIG51bGx9KGUpO2lmKG51bGwhPT1uKXtsZXQgdD1mW25bb11dO3Q9Wy4uLnQsYV07bGV0IHU9eHQocix0LFtdKSxpPWMoZSk7dS5wdXNoKGkpLGZbZVtvXV09Wy4uLnQsdS5sZW5ndGgtMV0sSm4ocix0LHUpfWVsc2UgY29uc29sZS5sb2coYGNhbiBub3QgZmluZCBwYXJlbnQgZm9yICR7eHQoZSx1KX1gKX19KSkscn0odD1mdW5jdGlvbih0KXtsZXQgcj1bXTtmdW5jdGlvbiBhKGEpe2xldCBpPVtdO0duKHQsKCh0LGMpPT57bGV0IGY9eHQodCx1KSxsPXh0KGEsbyk7aWYoZiYmbCYmZj09PWwpe2xldCB1PXh0KGEsbixbXSk7dT1Qbih1KSx1LnB1c2goYVtvXSksci5wdXNoKE9vKHtbZV06YS4kbGV2ZWwrMSxbbl06dX0sdCkpfWVsc2UgaS5wdXNoKHQpfSkpLHQ9aX1pZih0PVBuKHQpLGZ1bmN0aW9uKCl7bGV0IG89W107R24odCwoKHQsYSk9PntUdCh0W3VdKT9yLnB1c2goT28oe1tlXTowLFtuXTpbXX0sdCkpOm8ucHVzaCh0KX0pKSx0PW99KCksMD09PXIubGVuZ3RoKXJldHVybiByO2xldCBpPS0xO2Zvcig7aSs9MSwhKGk+ci5sZW5ndGgtMSk7KXtpZihhKHJbaV0pLDA9PT10Lmxlbmd0aClicmVha31yZXR1cm4gcn0odD1Qbih0KSkpfWZ1bmN0aW9uIG1vKHQscj17fSl7aWYoISR0KHQpJiYhTXQodCkpcmV0dXJuW107bGV0IGU9eHQociwiYmluZEtleSIsbnVsbCk7RXQoZSl8fChlPSJpZCIpO2xldCBuPXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KG4pfHwobj0icGFyZW50SWQiKTtsZXQgbz14dChyLCJiaW5kVGV4dCIsbnVsbCk7RXQobyl8fChvPSJ0ZXh0Iik7bGV0IHU9eHQociwiYmluZENoaWxkcmVuIixudWxsKTtFdCh1KXx8KHU9ImNoaWxkcmVuIik7bGV0IGE9eHQociwiYmluZFR5cGUiLG51bGwpO0V0KGEpfHwoYT0idHlwZSIpO2xldCBpPXh0KHIsImJpbmROdW1PZkNoaWxyZW4iLG51bGwpO0V0KGkpfHwoaT0ibnVtT2ZDaGlscmVuIik7bGV0IGM9eHQociwiYmluZFJvb3QiLG51bGwpO0V0KGMpfHwoYz0icm9vdCIpO2xldCBmPXh0KHIsInNhdmVFeHRQcm9wcyIsbnVsbCk7cmV0dXJuIEZ0KGYpfHwoZj0hMSksRXQoYykmJih0PXtbY106dH0pLHdvKGZ1bmN0aW9uKHQscj17fSl7aWYoISR0KHQpJiYhTXQodCkpcmV0dXJuW107bGV0IGU9eHQociwiYmluZEtleSIsbnVsbCk7RXQoZSl8fChlPSJpZCIpO2xldCBuPXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KG4pfHwobj0icGFyZW50SWQiKTtsZXQgbz14dChyLCJiaW5kQmVsb25nIixudWxsKTtFdChvKXx8KG89ImtleSIpO2xldCB1PXh0KHIsImJpbmRUZXh0IixudWxsKTtFdCh1KXx8KHU9InRleHQiKTtsZXQgYT14dChyLCJiaW5kVHlwZSIsbnVsbCk7RXQoYSl8fChhPSJ0eXBlIik7bGV0IGk9eHQociwiYmluZE51bU9mQ2hpbHJlbiIsbnVsbCk7ZnVuY3Rpb24gYyh0LHIsZSl7dD1Qbih0KSx0PWRlKHQsKHQ9PmQodCk/em4odCk6dCkpLGQocikmJihyPXpuKHIpKSxkKGUpJiYoZT16bihlKSksKEV0KHIpfHx4bihyKSkmJnQucHVzaChyKTtsZXQgbj1nZSh0LCItIik7cmV0dXJuKEV0KGUpfHx4bihlKSkmJihuPWAke2V9LSR7bn1gKSxufUV0KGkpfHwoaT0ibnVtT2ZDaGlscmVuIik7bGV0IGY9W107cmV0dXJuIEtuKHQsKCh0LHIsbCk9PntsZXQgdj1jKGwscikscz1jKGwsbnVsbCksYj0ibm9kZSI7SXQodCk/Yj0ib2JqZWN0IjpOdCh0KSYmKGI9ImFycmF5Iik7bGV0IHA9e1tlXTp2LFtuXTpzLFthXTpifTtpZigoRXQocil8fENlKHIpKSYmKHBbb109ciksSXQodCl8fE50KHQpfHwocFt1XT10KSxJdCh0KXx8TnQodCkpe2xldCByPUZlKHQpO3BbaV09cn1yZXR1cm4gZi5wdXNoKHApLHR9KSx7Zm9yY2U6ITB9KSxmfSh0LHtiaW5kS2V5OmUsYmluZFBhcmVudDpuLGJpbmRUZXh0Om8sYmluZFR5cGU6YSxiaW5kTnVtT2ZDaGlscmVuOml9KSx7YmluZEtleTplLGJpbmRQYXJlbnQ6bixiaW5kQ2hpbGRyZW46dSxzYXZlRXh0UHJvcHM6Zn0pfWFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRUb1RyZWVXayh0LHI9e30pe3JldHVybiBtbyh0LHIpfQoKbGV0IGluc3RhbmNlID0gbnVsbApmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBjb252ZXJ0VG9UcmVlV2sKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gY29udmVydFRvVHJlZVdrCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgCiAgICAgICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdlbWl0JywKICAgICAgICAgICAgICAgIGV2TmFtZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgIG1zZzogZXJyLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICAgICAgfQogICAgICAgICAgICAKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9mdW4KICAgICAgICAgICAgbGV0IGZ1biA9IGluc3RhbmNlW2RhdGEuZnVuXQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CgogICAgICAgICAgICAvL2V4ZWMKICAgICAgICAgICAgYXdhaXQgZnVuKC4uLmlucHV0KQogICAgICAgICAgICAgICAgLnRoZW4oKHN1YykgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdzdWNjZXNzJwogICAgICAgICAgICAgICAgICAgIG1zZz1zdWMKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdlcnJvcicKICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyCiAgICAgICAgICAgICAgICB9KQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJlY3ZNZXNzYWdlKGUuZGF0YSkKICAgICAgICB9CiAgICAgICAgCgo=",Z.Base64.decode(m));function o(){var i=d();function l(d){try{var i=new Blob([d]),l=window.URL||window.webkitURL;return new Worker(l.createObjectURL(i))}catch(d){o(d)}}var m=l(X);if(!m)return o("invalid worker"),null;function I(){m?(m.terminate(),m=void 0):o("worker has been terminated")}function b(){var d={mode:"init",type:"function",input:Array.prototype.slice.call(arguments)};m.postMessage(d)}function Z(){var d=c(),l=t(),I={mode:"call",id:l,fun:"main",input:Array.prototype.slice.call(arguments)};return m.postMessage(I),i.once(l,(function(i){"success"===i.state?d.resolve(i.msg):d.reject(i.msg)})),d}function n(d){var l=d,c=l.mode;"emit"!==c&&"return"!==c||("emit"===c&&i.emit(l.evName,l.msg),"return"===c&&i.emit(l.id,l))}function o(d){i.emit("error",d)}return m.onmessage=function(d){n(d.data)},m.onerror=o,b(Array.prototype.slice.call(arguments)),i.main=Z,i.main=Z,i.terminate=I,i}I=function(){var d,c=(d=b.mark((function d(){var l,c,t,m=arguments;return b.wrap((function(d){for(;;)switch(d.prev=d.next){case 0:return l=Array.prototype.slice.call(m),c=o(),d.next=4,c.main.apply(c,i(l)).finally((function(){c.terminate()}));case 4:return t=d.sent,d.abrupt("return",t);case 6:case"end":return d.stop()}}),d)})),function(){var i=this,c=arguments;return new Promise((function(t,m){var I=d.apply(i,c);function b(d){l(I,t,m,b,Z,"next",d)}function Z(d){l(I,t,m,b,Z,"throw",d)}b(void 0)}))});return function(){return c.apply(this,arguments)}}()}();var X=I;export default X;
|
|
1
|
+
function d(d,i){(null==i||i>d.length)&&(i=d.length);for(var l=0,c=new Array(i);l<i;l++)c[l]=d[l];return c}function i(i){return function(i){if(Array.isArray(i))return d(i)}(i)||function(d){if("undefined"!=typeof Symbol&&Symbol.iterator in Object(d))return Array.from(d)}(i)||function(i,l){if(i){if("string"==typeof i)return d(i,l);var c=Object.prototype.toString.call(i).slice(8,-1);return"Object"===c&&i.constructor&&(c=i.constructor.name),"Map"===c||"Set"===c?Array.from(i):"Arguments"===c||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(c)?d(i,l):void 0}}(i)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(d,i,l,c,t,m,I){try{var b=d[m](I),Z=b.value}catch(d){return void l(d)}b.done?i(Z):Promise.resolve(Z).then(c,t)}function c(d){return(c="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(d){return typeof d}:function(d){return d&&"function"==typeof Symbol&&d.constructor===Symbol&&d!==Symbol.prototype?"symbol":typeof d})(d)}var t="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function m(d){var i={exports:{}};return d(i,i.exports),i.exports}var I,b=m((function(d){var i=function(d){var i,l=Object.prototype,t=l.hasOwnProperty,m="function"==typeof Symbol?Symbol:{},I=m.iterator||"@@iterator",b=m.asyncIterator||"@@asyncIterator",Z=m.toStringTag||"@@toStringTag";function n(d,i,l){return Object.defineProperty(d,i,{value:l,enumerable:!0,configurable:!0,writable:!0}),d[i]}try{n({},"")}catch(d){n=function(d,i,l){return d[i]=l}}function X(d,i,l,c){var t=i&&i.prototype instanceof W?i:W,m=Object.create(t.prototype),I=new S(c||[]);return m._invoke=function(d,i,l){var c=u;return function(t,m){if(c===y)throw new Error("Generator is already running");if(c===p){if("throw"===t)throw m;return x()}for(l.method=t,l.arg=m;;){var I=l.delegate;if(I){var b=g(I,l);if(b){if(b===h)continue;return b}}if("next"===l.method)l.sent=l._sent=l.arg;else if("throw"===l.method){if(c===u)throw c=p,l.arg;l.dispatchException(l.arg)}else"return"===l.method&&l.abrupt("return",l.arg);c=y;var Z=o(d,i,l);if("normal"===Z.type){if(c=l.done?p:e,Z.arg===h)continue;return{value:Z.arg,done:l.done}}"throw"===Z.type&&(c=p,l.method="throw",l.arg=Z.arg)}}}(d,l,I),m}function o(d,i,l){try{return{type:"normal",arg:d.call(i,l)}}catch(d){return{type:"throw",arg:d}}}d.wrap=X;var u="suspendedStart",e="suspendedYield",y="executing",p="completed",h={};function W(){}function K(){}function C(){}var G={};G[I]=function(){return this};var r=Object.getPrototypeOf,a=r&&r(r(P([])));a&&a!==l&&t.call(a,I)&&(G=a);var V=C.prototype=W.prototype=Object.create(G);function H(d){["next","throw","return"].forEach((function(i){n(d,i,(function(d){return this._invoke(i,d)}))}))}function Y(d,i){function l(m,I,b,Z){var n=o(d[m],d,I);if("throw"!==n.type){var X=n.arg,u=X.value;return u&&"object"===c(u)&&t.call(u,"__await")?i.resolve(u.__await).then((function(d){l("next",d,b,Z)}),(function(d){l("throw",d,b,Z)})):i.resolve(u).then((function(d){X.value=d,b(X)}),(function(d){return l("throw",d,b,Z)}))}Z(n.arg)}var m;this._invoke=function(d,c){function t(){return new i((function(i,t){l(d,c,i,t)}))}return m=m?m.then(t,t):t()}}function g(d,l){var c=d.iterator[l.method];if(c===i){if(l.delegate=null,"throw"===l.method){if(d.iterator.return&&(l.method="return",l.arg=i,g(d,l),"throw"===l.method))return h;l.method="throw",l.arg=new TypeError("The iterator does not provide a 'throw' method")}return h}var t=o(c,d.iterator,l.arg);if("throw"===t.type)return l.method="throw",l.arg=t.arg,l.delegate=null,h;var m=t.arg;return m?m.done?(l[d.resultName]=m.value,l.next=d.nextLoc,"return"!==l.method&&(l.method="next",l.arg=i),l.delegate=null,h):m:(l.method="throw",l.arg=new TypeError("iterator result is not an object"),l.delegate=null,h)}function s(d){var i={tryLoc:d[0]};1 in d&&(i.catchLoc=d[1]),2 in d&&(i.finallyLoc=d[2],i.afterLoc=d[3]),this.tryEntries.push(i)}function J(d){var i=d.completion||{};i.type="normal",delete i.arg,d.completion=i}function S(d){this.tryEntries=[{tryLoc:"root"}],d.forEach(s,this),this.reset(!0)}function P(d){if(d){var l=d[I];if(l)return l.call(d);if("function"==typeof d.next)return d;if(!isNaN(d.length)){var c=-1,m=function l(){for(;++c<d.length;)if(t.call(d,c))return l.value=d[c],l.done=!1,l;return l.value=i,l.done=!0,l};return m.next=m}}return{next:x}}function x(){return{value:i,done:!0}}return K.prototype=V.constructor=C,C.constructor=K,K.displayName=n(C,Z,"GeneratorFunction"),d.isGeneratorFunction=function(d){var i="function"==typeof d&&d.constructor;return!!i&&(i===K||"GeneratorFunction"===(i.displayName||i.name))},d.mark=function(d){return Object.setPrototypeOf?Object.setPrototypeOf(d,C):(d.__proto__=C,n(d,Z,"GeneratorFunction")),d.prototype=Object.create(V),d},d.awrap=function(d){return{__await:d}},H(Y.prototype),Y.prototype[b]=function(){return this},d.AsyncIterator=Y,d.async=function(i,l,c,t,m){void 0===m&&(m=Promise);var I=new Y(X(i,l,c,t),m);return d.isGeneratorFunction(l)?I:I.next().then((function(d){return d.done?d.value:I.next()}))},H(V),n(V,Z,"Generator"),V[I]=function(){return this},V.toString=function(){return"[object Generator]"},d.keys=function(d){var i=[];for(var l in d)i.push(l);return i.reverse(),function l(){for(;i.length;){var c=i.pop();if(c in d)return l.value=c,l.done=!1,l}return l.done=!0,l}},d.values=P,S.prototype={constructor:S,reset:function(d){if(this.prev=0,this.next=0,this.sent=this._sent=i,this.done=!1,this.delegate=null,this.method="next",this.arg=i,this.tryEntries.forEach(J),!d)for(var l in this)"t"===l.charAt(0)&&t.call(this,l)&&!isNaN(+l.slice(1))&&(this[l]=i)},stop:function(){this.done=!0;var d=this.tryEntries[0].completion;if("throw"===d.type)throw d.arg;return this.rval},dispatchException:function(d){if(this.done)throw d;var l=this;function c(c,t){return b.type="throw",b.arg=d,l.next=c,t&&(l.method="next",l.arg=i),!!t}for(var m=this.tryEntries.length-1;m>=0;--m){var I=this.tryEntries[m],b=I.completion;if("root"===I.tryLoc)return c("end");if(I.tryLoc<=this.prev){var Z=t.call(I,"catchLoc"),n=t.call(I,"finallyLoc");if(Z&&n){if(this.prev<I.catchLoc)return c(I.catchLoc,!0);if(this.prev<I.finallyLoc)return c(I.finallyLoc)}else if(Z){if(this.prev<I.catchLoc)return c(I.catchLoc,!0)}else{if(!n)throw new Error("try statement without catch or finally");if(this.prev<I.finallyLoc)return c(I.finallyLoc)}}}},abrupt:function(d,i){for(var l=this.tryEntries.length-1;l>=0;--l){var c=this.tryEntries[l];if(c.tryLoc<=this.prev&&t.call(c,"finallyLoc")&&this.prev<c.finallyLoc){var m=c;break}}m&&("break"===d||"continue"===d)&&m.tryLoc<=i&&i<=m.finallyLoc&&(m=null);var I=m?m.completion:{};return I.type=d,I.arg=i,m?(this.method="next",this.next=m.finallyLoc,h):this.complete(I)},complete:function(d,i){if("throw"===d.type)throw d.arg;return"break"===d.type||"continue"===d.type?this.next=d.arg:"return"===d.type?(this.rval=this.arg=d.arg,this.method="return",this.next="end"):"normal"===d.type&&i&&(this.next=i),h},finish:function(d){for(var i=this.tryEntries.length-1;i>=0;--i){var l=this.tryEntries[i];if(l.finallyLoc===d)return this.complete(l.completion,l.afterLoc),J(l),h}},catch:function(d){for(var i=this.tryEntries.length-1;i>=0;--i){var l=this.tryEntries[i];if(l.tryLoc===d){var c=l.completion;if("throw"===c.type){var t=c.arg;J(l)}return t}}throw new Error("illegal catch attempt")},delegateYield:function(d,l,c){return this.delegate={iterator:P(d),resultName:l,nextLoc:c},"next"===this.method&&(this.arg=i),h}},d}(d.exports);try{regeneratorRuntime=i}catch(d){Function("r","regeneratorRuntime = r")(i)}})),Z=m((function(d,i){!function(i,l){d.exports=function(i){var l,c=(i=i||{}).Base64,t="2.6.4",m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",I=function(d){for(var i={},l=0,c=d.length;l<c;l++)i[d.charAt(l)]=l;return i}(m),b=String.fromCharCode,Z=function(d){if(d.length<2)return(i=d.charCodeAt(0))<128?d:i<2048?b(192|i>>>6)+b(128|63&i):b(224|i>>>12&15)+b(128|i>>>6&63)+b(128|63&i);var i=65536+1024*(d.charCodeAt(0)-55296)+(d.charCodeAt(1)-56320);return b(240|i>>>18&7)+b(128|i>>>12&63)+b(128|i>>>6&63)+b(128|63&i)},n=/[\uD800-\uDBFF][\uDC00-\uDFFFF]|[^\x00-\x7F]/g,X=function(d){return d.replace(n,Z)},o=function(d){var i=[0,2,1][d.length%3],l=d.charCodeAt(0)<<16|(d.length>1?d.charCodeAt(1):0)<<8|(d.length>2?d.charCodeAt(2):0);return[m.charAt(l>>>18),m.charAt(l>>>12&63),i>=2?"=":m.charAt(l>>>6&63),i>=1?"=":m.charAt(63&l)].join("")},u=i.btoa&&"function"==typeof i.btoa?function(d){return i.btoa(d)}:function(d){if(d.match(/[^\x00-\xFF]/))throw new RangeError("The string contains invalid characters.");return d.replace(/[\s\S]{1,3}/g,o)},e=function(d){return u(X(String(d)))},y=function(d){return d.replace(/[+\/]/g,(function(d){return"+"==d?"-":"_"})).replace(/=/g,"")},p=function(d,i){return i?y(e(d)):e(d)},h=function(d){return p(d,!0)};i.Uint8Array&&(l=function(d,i){for(var l="",c=0,t=d.length;c<t;c+=3){var I=d[c],b=d[c+1],Z=d[c+2],n=I<<16|b<<8|Z;l+=m.charAt(n>>>18)+m.charAt(n>>>12&63)+(void 0!==b?m.charAt(n>>>6&63):"=")+(void 0!==Z?m.charAt(63&n):"=")}return i?y(l):l});var W,K=/[\xC0-\xDF][\x80-\xBF]|[\xE0-\xEF][\x80-\xBF]{2}|[\xF0-\xF7][\x80-\xBF]{3}/g,C=function(d){switch(d.length){case 4:var i=((7&d.charCodeAt(0))<<18|(63&d.charCodeAt(1))<<12|(63&d.charCodeAt(2))<<6|63&d.charCodeAt(3))-65536;return b(55296+(i>>>10))+b(56320+(1023&i));case 3:return b((15&d.charCodeAt(0))<<12|(63&d.charCodeAt(1))<<6|63&d.charCodeAt(2));default:return b((31&d.charCodeAt(0))<<6|63&d.charCodeAt(1))}},G=function(d){return d.replace(K,C)},r=function(d){var i=d.length,l=i%4,c=(i>0?I[d.charAt(0)]<<18:0)|(i>1?I[d.charAt(1)]<<12:0)|(i>2?I[d.charAt(2)]<<6:0)|(i>3?I[d.charAt(3)]:0),t=[b(c>>>16),b(c>>>8&255),b(255&c)];return t.length-=[0,0,2,1][l],t.join("")},a=i.atob&&"function"==typeof i.atob?function(d){return i.atob(d)}:function(d){return d.replace(/\S{1,4}/g,r)},V=function(d){return a(String(d).replace(/[^A-Za-z0-9\+\/]/g,""))},H=function(d){return G(a(d))},Y=function(d){return String(d).replace(/[-_]/g,(function(d){return"-"==d?"+":"/"})).replace(/[^A-Za-z0-9\+\/]/g,"")},g=function(d){return H(Y(d))};i.Uint8Array&&(W=function(d){return Uint8Array.from(V(Y(d)),(function(d){return d.charCodeAt(0)}))});var s=function(){var d=i.Base64;return i.Base64=c,d};if(i.Base64={VERSION:t,atob:V,btoa:u,fromBase64:g,toBase64:p,utob:X,encode:p,encodeURI:h,btou:G,decode:g,noConflict:s,fromUint8Array:l,toUint8Array:W},"function"==typeof Object.defineProperty){var J=function(d){return{value:d,enumerable:!1,writable:!0,configurable:!0}};i.Base64.extendString=function(){Object.defineProperty(String.prototype,"fromBase64",J((function(){return g(this)}))),Object.defineProperty(String.prototype,"toBase64",J((function(d){return p(this,d)}))),Object.defineProperty(String.prototype,"toBase64URI",J((function(){return p(this,!0)})))}}i.Meteor&&(Base64=i.Base64);d.exports&&(d.exports.Base64=i.Base64);return{Base64:i.Base64}}(i)}("undefined"!=typeof self?self:"undefined"!=typeof window?window:t)})),n=m((function(d){var i=Object.prototype.hasOwnProperty,l="~";function c(){}function t(d,i,l){this.fn=d,this.context=i,this.once=l||!1}function m(d,i,c,m,I){if("function"!=typeof c)throw new TypeError("The listener must be a function");var b=new t(c,m||d,I),Z=l?l+i:i;return d._events[Z]?d._events[Z].fn?d._events[Z]=[d._events[Z],b]:d._events[Z].push(b):(d._events[Z]=b,d._eventsCount++),d}function I(d,i){0==--d._eventsCount?d._events=new c:delete d._events[i]}function b(){this._events=new c,this._eventsCount=0}Object.create&&(c.prototype=Object.create(null),(new c).__proto__||(l=!1)),b.prototype.eventNames=function(){var d,c,t=[];if(0===this._eventsCount)return t;for(c in d=this._events)i.call(d,c)&&t.push(l?c.slice(1):c);return Object.getOwnPropertySymbols?t.concat(Object.getOwnPropertySymbols(d)):t},b.prototype.listeners=function(d){var i=l?l+d:d,c=this._events[i];if(!c)return[];if(c.fn)return[c.fn];for(var t=0,m=c.length,I=new Array(m);t<m;t++)I[t]=c[t].fn;return I},b.prototype.listenerCount=function(d){var i=l?l+d:d,c=this._events[i];return c?c.fn?1:c.length:0},b.prototype.emit=function(d,i,c,t,m,I){var b=l?l+d:d;if(!this._events[b])return!1;var Z,n,X=this._events[b],o=arguments.length;if(X.fn){switch(X.once&&this.removeListener(d,X.fn,void 0,!0),o){case 1:return X.fn.call(X.context),!0;case 2:return X.fn.call(X.context,i),!0;case 3:return X.fn.call(X.context,i,c),!0;case 4:return X.fn.call(X.context,i,c,t),!0;case 5:return X.fn.call(X.context,i,c,t,m),!0;case 6:return X.fn.call(X.context,i,c,t,m,I),!0}for(n=1,Z=new Array(o-1);n<o;n++)Z[n-1]=arguments[n];X.fn.apply(X.context,Z)}else{var u,e=X.length;for(n=0;n<e;n++)switch(X[n].once&&this.removeListener(d,X[n].fn,void 0,!0),o){case 1:X[n].fn.call(X[n].context);break;case 2:X[n].fn.call(X[n].context,i);break;case 3:X[n].fn.call(X[n].context,i,c);break;case 4:X[n].fn.call(X[n].context,i,c,t);break;default:if(!Z)for(u=1,Z=new Array(o-1);u<o;u++)Z[u-1]=arguments[u];X[n].fn.apply(X[n].context,Z)}}return!0},b.prototype.on=function(d,i,l){return m(this,d,i,l,!1)},b.prototype.once=function(d,i,l){return m(this,d,i,l,!0)},b.prototype.removeListener=function(d,i,c,t){var m=l?l+d:d;if(!this._events[m])return this;if(!i)return I(this,m),this;var b=this._events[m];if(b.fn)b.fn!==i||t&&!b.once||c&&b.context!==c||I(this,m);else{for(var Z=0,n=[],X=b.length;Z<X;Z++)(b[Z].fn!==i||t&&!b[Z].once||c&&b[Z].context!==c)&&n.push(b[Z]);n.length?this._events[m]=1===n.length?n[0]:n:I(this,m)}return this},b.prototype.removeAllListeners=function(d){var i;return d?(i=l?l+d:d,this._events[i]&&I(this,i)):(this._events=new c,this._eventsCount=0),this},b.prototype.off=b.prototype.removeListener,b.prototype.addListener=b.prototype.on,b.prefixed=l,b.EventEmitter=b,d.exports=b}));!function(){if("browser"!==("undefined"!=typeof window&&void 0!==window.document?"browser":"nodejs"))return null;function d(){return new n}function c(){var d,i,l=new Promise((function(){d=arguments[0],i=arguments[1]}));return l.resolve=d,l.reject=i,l}function t(){for(var d=arguments.length>0&&void 0!==arguments[0]?arguments[0]:10,i=[],l="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".split(""),c=l.length,t=0;t<d;t++)i[t]=l[0|Math.random()*c];var m=i.join("");return m}var m,X=(m="CgoKdmFyIHQ9QXJyYXkuaXNBcnJheSxyPSJ1bmRlZmluZWQiIT10eXBlb2YgZ2xvYmFsVGhpcz9nbG9iYWxUaGlzOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIGdsb2JhbD9nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmP3NlbGY6e307ZnVuY3Rpb24gZSh0KXt2YXIgcj17ZXhwb3J0czp7fX07cmV0dXJuIHQocixyLmV4cG9ydHMpLHIuZXhwb3J0c312YXIgbj0ib2JqZWN0Ij09dHlwZW9mIHImJnImJnIuT2JqZWN0PT09T2JqZWN0JiZyLG89Im9iamVjdCI9PXR5cGVvZiBzZWxmJiZzZWxmJiZzZWxmLk9iamVjdD09PU9iamVjdCYmc2VsZix1PW58fG98fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksYT11LlN5bWJvbCxpPU9iamVjdC5wcm90b3R5cGUsYz1pLmhhc093blByb3BlcnR5LGY9aS50b1N0cmluZyxsPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIHY9ZnVuY3Rpb24odCl7dmFyIHI9Yy5jYWxsKHQsbCksZT10W2xdO3RyeXt0W2xdPXZvaWQgMDt2YXIgbj0hMH1jYXRjaCh0KXt9dmFyIG89Zi5jYWxsKHQpO3JldHVybiBuJiYocj90W2xdPWU6ZGVsZXRlIHRbbF0pLG99LHM9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzt2YXIgYj1mdW5jdGlvbih0KXtyZXR1cm4gcy5jYWxsKHQpfSxwPWE/YS50b1N0cmluZ1RhZzp2b2lkIDA7dmFyIHk9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwPT09dD8iW29iamVjdCBVbmRlZmluZWRdIjoiW29iamVjdCBOdWxsXSI6cCYmcCBpbiBPYmplY3QodCk/dih0KTpiKHQpfTt2YXIgaD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbCE9dCYmIm9iamVjdCI9PXR5cGVvZiB0fTt2YXIgZD1mdW5jdGlvbih0KXtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHR8fGgodCkmJiJbb2JqZWN0IFN5bWJvbF0iPT15KHQpfSxqPS9cLnxcWyg/OlteW1xdXSp8KFsiJ10pKD86KD8hXDEpW15cXF18XFwuKSo/XDEpXF0vLGc9L15cdyokLzt2YXIgXz1mdW5jdGlvbihyLGUpe2lmKHQocikpcmV0dXJuITE7dmFyIG49dHlwZW9mIHI7cmV0dXJuISgibnVtYmVyIiE9biYmInN5bWJvbCIhPW4mJiJib29sZWFuIiE9biYmbnVsbCE9ciYmIWQocikpfHwoZy50ZXN0KHIpfHwhai50ZXN0KHIpfHxudWxsIT1lJiZyIGluIE9iamVjdChlKSl9O3ZhciBPPWZ1bmN0aW9uKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiBudWxsIT10JiYoIm9iamVjdCI9PXJ8fCJmdW5jdGlvbiI9PXIpfTt2YXIgdyxtPWZ1bmN0aW9uKHQpe2lmKCFPKHQpKXJldHVybiExO3ZhciByPXkodCk7cmV0dXJuIltvYmplY3QgRnVuY3Rpb25dIj09cnx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09cnx8IltvYmplY3QgQXN5bmNGdW5jdGlvbl0iPT1yfHwiW29iamVjdCBQcm94eV0iPT1yfSxBPXVbIl9fY29yZS1qc19zaGFyZWRfXyJdLFM9KHc9L1teLl0rJC8uZXhlYyhBJiZBLmtleXMmJkEua2V5cy5JRV9QUk9UT3x8IiIpKT8iU3ltYm9sKHNyYylfMS4iK3c6IiI7dmFyIFA9ZnVuY3Rpb24odCl7cmV0dXJuISFTJiZTIGluIHR9LHg9RnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO3ZhciB6PWZ1bmN0aW9uKHQpe2lmKG51bGwhPXQpe3RyeXtyZXR1cm4geC5jYWxsKHQpfWNhdGNoKHQpe310cnl7cmV0dXJuIHQrIiJ9Y2F0Y2godCl7fX1yZXR1cm4iIn0sRT0vXlxbb2JqZWN0IC4rP0NvbnN0cnVjdG9yXF0kLyxJPUZ1bmN0aW9uLnByb3RvdHlwZSwkPU9iamVjdC5wcm90b3R5cGUsTj1JLnRvU3RyaW5nLFQ9JC5oYXNPd25Qcm9wZXJ0eSxNPVJlZ0V4cCgiXiIrTi5jYWxsKFQpLnJlcGxhY2UoL1tcXF4kLiorPygpW1xde318XS9nLCJcXCQmIikucmVwbGFjZSgvaGFzT3duUHJvcGVydHl8KGZ1bmN0aW9uKS4qPyg/PVxcXCgpfCBmb3IgLis/KD89XFxcXSkvZywiJDEuKj8iKSsiJCIpO3ZhciBrPWZ1bmN0aW9uKHQpe3JldHVybiEoIU8odCl8fFAodCkpJiYobSh0KT9NOkUpLnRlc3Qoeih0KSl9O3ZhciBGPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnRbcl19O3ZhciBDPWZ1bmN0aW9uKHQscil7dmFyIGU9Rih0LHIpO3JldHVybiBrKGUpP2U6dm9pZCAwfSxEPUMoT2JqZWN0LCJjcmVhdGUiKTt2YXIgVT1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189RD9EKG51bGwpOnt9LHRoaXMuc2l6ZT0wfTt2YXIgQj1mdW5jdGlvbih0KXt2YXIgcj10aGlzLmhhcyh0KSYmZGVsZXRlIHRoaXMuX19kYXRhX19bdF07cmV0dXJuIHRoaXMuc2l6ZS09cj8xOjAscn0sUj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBMPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX19kYXRhX187aWYoRCl7dmFyIGU9clt0XTtyZXR1cm4iX19sb2Rhc2hfaGFzaF91bmRlZmluZWRfXyI9PT1lP3ZvaWQgMDplfXJldHVybiBSLmNhbGwocix0KT9yW3RdOnZvaWQgMH0sVj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBLPWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX19kYXRhX187cmV0dXJuIEQ/dm9pZCAwIT09clt0XTpWLmNhbGwocix0KX07dmFyIFc9ZnVuY3Rpb24odCxyKXt2YXIgZT10aGlzLl9fZGF0YV9fO3JldHVybiB0aGlzLnNpemUrPXRoaXMuaGFzKHQpPzA6MSxlW3RdPUQmJnZvaWQgMD09PXI/Il9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iOnIsdGhpc307ZnVuY3Rpb24gcSh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcjxlOyl7dmFyIG49dFtyXTt0aGlzLnNldChuWzBdLG5bMV0pfX1xLnByb3RvdHlwZS5jbGVhcj1VLHEucHJvdG90eXBlLmRlbGV0ZT1CLHEucHJvdG90eXBlLmdldD1MLHEucHJvdG90eXBlLmhhcz1LLHEucHJvdG90eXBlLnNldD1XO3ZhciBHPXE7dmFyIEg9ZnVuY3Rpb24oKXt0aGlzLl9fZGF0YV9fPVtdLHRoaXMuc2l6ZT0wfTt2YXIgSj1mdW5jdGlvbih0LHIpe3JldHVybiB0PT09cnx8dCE9dCYmciE9cn07dmFyIFE9ZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9dC5sZW5ndGg7ZS0tOylpZihKKHRbZV1bMF0scikpcmV0dXJuIGU7cmV0dXJuLTF9LFg9QXJyYXkucHJvdG90eXBlLnNwbGljZTt2YXIgWT1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9fZGF0YV9fLGU9UShyLHQpO3JldHVybiEoZTwwKSYmKGU9PXIubGVuZ3RoLTE/ci5wb3AoKTpYLmNhbGwocixlLDEpLC0tdGhpcy5zaXplLCEwKX07dmFyIFo9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPVEocix0KTtyZXR1cm4gZTwwP3ZvaWQgMDpyW2VdWzFdfTt2YXIgdHQ9ZnVuY3Rpb24odCl7cmV0dXJuIFEodGhpcy5fX2RhdGFfXyx0KT4tMX07dmFyIHJ0PWZ1bmN0aW9uKHQscil7dmFyIGU9dGhpcy5fX2RhdGFfXyxuPVEoZSx0KTtyZXR1cm4gbjwwPygrK3RoaXMuc2l6ZSxlLnB1c2goW3Qscl0pKTplW25dWzFdPXIsdGhpc307ZnVuY3Rpb24gZXQodCl7dmFyIHI9LTEsZT1udWxsPT10PzA6dC5sZW5ndGg7Zm9yKHRoaXMuY2xlYXIoKTsrK3I8ZTspe3ZhciBuPXRbcl07dGhpcy5zZXQoblswXSxuWzFdKX19ZXQucHJvdG90eXBlLmNsZWFyPUgsZXQucHJvdG90eXBlLmRlbGV0ZT1ZLGV0LnByb3RvdHlwZS5nZXQ9WixldC5wcm90b3R5cGUuaGFzPXR0LGV0LnByb3RvdHlwZS5zZXQ9cnQ7dmFyIG50PWV0LG90PUModSwiTWFwIik7dmFyIHV0PWZ1bmN0aW9uKCl7dGhpcy5zaXplPTAsdGhpcy5fX2RhdGFfXz17aGFzaDpuZXcgRyxtYXA6bmV3KG90fHxudCksc3RyaW5nOm5ldyBHfX07dmFyIGF0PWZ1bmN0aW9uKHQpe3ZhciByPXR5cGVvZiB0O3JldHVybiJzdHJpbmciPT1yfHwibnVtYmVyIj09cnx8InN5bWJvbCI9PXJ8fCJib29sZWFuIj09cj8iX19wcm90b19fIiE9PXQ6bnVsbD09PXR9O3ZhciBpdD1mdW5jdGlvbih0LHIpe3ZhciBlPXQuX19kYXRhX187cmV0dXJuIGF0KHIpP2VbInN0cmluZyI9PXR5cGVvZiByPyJzdHJpbmciOiJoYXNoIl06ZS5tYXB9O3ZhciBjdD1mdW5jdGlvbih0KXt2YXIgcj1pdCh0aGlzLHQpLmRlbGV0ZSh0KTtyZXR1cm4gdGhpcy5zaXplLT1yPzE6MCxyfTt2YXIgZnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KHRoaXMsdCkuZ2V0KHQpfTt2YXIgbHQ9ZnVuY3Rpb24odCl7cmV0dXJuIGl0KHRoaXMsdCkuaGFzKHQpfTt2YXIgdnQ9ZnVuY3Rpb24odCxyKXt2YXIgZT1pdCh0aGlzLHQpLG49ZS5zaXplO3JldHVybiBlLnNldCh0LHIpLHRoaXMuc2l6ZSs9ZS5zaXplPT1uPzA6MSx0aGlzfTtmdW5jdGlvbiBzdCh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5jbGVhcigpOysrcjxlOyl7dmFyIG49dFtyXTt0aGlzLnNldChuWzBdLG5bMV0pfX1zdC5wcm90b3R5cGUuY2xlYXI9dXQsc3QucHJvdG90eXBlLmRlbGV0ZT1jdCxzdC5wcm90b3R5cGUuZ2V0PWZ0LHN0LnByb3RvdHlwZS5oYXM9bHQsc3QucHJvdG90eXBlLnNldD12dDt2YXIgYnQ9c3Q7ZnVuY3Rpb24gcHQodCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdHx8bnVsbCE9ciYmImZ1bmN0aW9uIiE9dHlwZW9mIHIpdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBmdW5jdGlvbiIpO3ZhciBlPWZ1bmN0aW9uKCl7dmFyIG49YXJndW1lbnRzLG89cj9yLmFwcGx5KHRoaXMsbik6blswXSx1PWUuY2FjaGU7aWYodS5oYXMobykpcmV0dXJuIHUuZ2V0KG8pO3ZhciBhPXQuYXBwbHkodGhpcyxuKTtyZXR1cm4gZS5jYWNoZT11LnNldChvLGEpfHx1LGF9O3JldHVybiBlLmNhY2hlPW5ldyhwdC5DYWNoZXx8YnQpLGV9cHQuQ2FjaGU9YnQ7dmFyIHl0PXB0O3ZhciBodD0vW14uW1xdXSt8XFsoPzooLT9cZCsoPzpcLlxkKyk/KXwoWyInXSkoKD86KD8hXDIpW15cXF18XFwuKSo/KVwyKVxdfCg/PSg/OlwufFxbXF0pKD86XC58XFtcXXwkKSkvZyxkdD0vXFwoXFwpPy9nLGp0PWZ1bmN0aW9uKHQpe3ZhciByPXl0KHQsKGZ1bmN0aW9uKHQpe3JldHVybiA1MDA9PT1lLnNpemUmJmUuY2xlYXIoKSx0fSkpLGU9ci5jYWNoZTtyZXR1cm4gcn0oKGZ1bmN0aW9uKHQpe3ZhciByPVtdO3JldHVybiA0Nj09PXQuY2hhckNvZGVBdCgwKSYmci5wdXNoKCIiKSx0LnJlcGxhY2UoaHQsKGZ1bmN0aW9uKHQsZSxuLG8pe3IucHVzaChuP28ucmVwbGFjZShkdCwiJDEiKTplfHx0KX0pKSxyfSkpO3ZhciBndD1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aCxvPUFycmF5KG4pOysrZTxuOylvW2VdPXIodFtlXSxlLHQpO3JldHVybiBvfSxfdD1hP2EucHJvdG90eXBlOnZvaWQgMCxPdD1fdD9fdC50b1N0cmluZzp2b2lkIDA7dmFyIHd0PWZ1bmN0aW9uIHIoZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO2lmKHQoZSkpcmV0dXJuIGd0KGUscikrIiI7aWYoZChlKSlyZXR1cm4gT3Q/T3QuY2FsbChlKToiIjt2YXIgbj1lKyIiO3JldHVybiIwIj09biYmMS9lPT0tSW5maW5pdHk/Ii0wIjpufTt2YXIgbXQ9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/IiI6d3QodCl9O3ZhciBBdD1mdW5jdGlvbihyLGUpe3JldHVybiB0KHIpP3I6XyhyLGUpP1tyXTpqdChtdChyKSl9O3ZhciBTdD1mdW5jdGlvbih0KXtpZigic3RyaW5nIj09dHlwZW9mIHR8fGQodCkpcmV0dXJuIHQ7dmFyIHI9dCsiIjtyZXR1cm4iMCI9PXImJjEvdD09LUluZmluaXR5PyItMCI6cn07dmFyIFB0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPTAsbj0ocj1BdChyLHQpKS5sZW5ndGg7bnVsbCE9dCYmZTxuOyl0PXRbU3QocltlKytdKV07cmV0dXJuIGUmJmU9PW4/dDp2b2lkIDB9O3ZhciB4dD1mdW5jdGlvbih0LHIsZSl7dmFyIG49bnVsbD09dD92b2lkIDA6UHQodCxyKTtyZXR1cm4gdm9pZCAwPT09bj9lOm59O2Z1bmN0aW9uIHp0KHQpe3JldHVybiJbb2JqZWN0IFN0cmluZ10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEV0KHQpe3JldHVybiEoIXp0KHQpfHwiIj09PXQpfWZ1bmN0aW9uIEl0KHQpe3JldHVybiJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uICR0KHQpe2lmKEl0KHQpKXtmb3IobGV0IHIgaW4gdClyZXR1cm4hMDtyZXR1cm4hMX1yZXR1cm4hMX1mdW5jdGlvbiBOdCh0KXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIFR0KHQpe3JldHVybiEhZnVuY3Rpb24odCl7cmV0dXJuIltvYmplY3QgVW5kZWZpbmVkXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdWxsXSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9KHQpfHwoISFmdW5jdGlvbih0KXtpZihJdCh0KSl7Zm9yKGxldCByIGluIHQpcmV0dXJuITE7cmV0dXJuITB9cmV0dXJuITF9KHQpfHwoISFmdW5jdGlvbih0KXtyZXR1cm4hKCF6dCh0KXx8IiIhPT10KX0odCl8fCEhZnVuY3Rpb24odCl7cmV0dXJuISFOdCh0KSYmMD09PXQubGVuZ3RofSh0KSkpKX1mdW5jdGlvbiBNdCh0KXtyZXR1cm4hIU50KHQpJiYoMCE9PXQubGVuZ3RoJiYoMSE9PXQubGVuZ3RofHwhVHQodFswXSkpKX12YXIga3Q9ZnVuY3Rpb24odCl7cmV0dXJuITA9PT10fHwhMT09PXR8fGgodCkmJiJbb2JqZWN0IEJvb2xlYW5dIj09eSh0KX07ZnVuY3Rpb24gRnQodCl7cmV0dXJuIGt0KHQpfXZhciBDdD1mdW5jdGlvbigpe3RoaXMuX19kYXRhX189bmV3IG50LHRoaXMuc2l6ZT0wfTt2YXIgRHQ9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fX2RhdGFfXyxlPXIuZGVsZXRlKHQpO3JldHVybiB0aGlzLnNpemU9ci5zaXplLGV9O3ZhciBVdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQodCl9O3ZhciBCdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fX2RhdGFfXy5oYXModCl9O3ZhciBSdD1mdW5jdGlvbih0LHIpe3ZhciBlPXRoaXMuX19kYXRhX187aWYoZSBpbnN0YW5jZW9mIG50KXt2YXIgbj1lLl9fZGF0YV9fO2lmKCFvdHx8bi5sZW5ndGg8MTk5KXJldHVybiBuLnB1c2goW3Qscl0pLHRoaXMuc2l6ZT0rK2Uuc2l6ZSx0aGlzO2U9dGhpcy5fX2RhdGFfXz1uZXcgYnQobil9cmV0dXJuIGUuc2V0KHQsciksdGhpcy5zaXplPWUuc2l6ZSx0aGlzfTtmdW5jdGlvbiBMdCh0KXt2YXIgcj10aGlzLl9fZGF0YV9fPW5ldyBudCh0KTt0aGlzLnNpemU9ci5zaXplfUx0LnByb3RvdHlwZS5jbGVhcj1DdCxMdC5wcm90b3R5cGUuZGVsZXRlPUR0LEx0LnByb3RvdHlwZS5nZXQ9VXQsTHQucHJvdG90eXBlLmhhcz1CdCxMdC5wcm90b3R5cGUuc2V0PVJ0O3ZhciBWdD1MdDt2YXIgS3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uc2V0KHQsIl9fbG9kYXNoX2hhc2hfdW5kZWZpbmVkX18iKSx0aGlzfTt2YXIgV3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX19kYXRhX18uaGFzKHQpfTtmdW5jdGlvbiBxdCh0KXt2YXIgcj0tMSxlPW51bGw9PXQ/MDp0Lmxlbmd0aDtmb3IodGhpcy5fX2RhdGFfXz1uZXcgYnQ7KytyPGU7KXRoaXMuYWRkKHRbcl0pfXF0LnByb3RvdHlwZS5hZGQ9cXQucHJvdG90eXBlLnB1c2g9S3QscXQucHJvdG90eXBlLmhhcz1XdDt2YXIgR3Q9cXQ7dmFyIEh0PWZ1bmN0aW9uKHQscil7Zm9yKHZhciBlPS0xLG49bnVsbD09dD8wOnQubGVuZ3RoOysrZTxuOylpZihyKHRbZV0sZSx0KSlyZXR1cm4hMDtyZXR1cm4hMX07dmFyIEp0PWZ1bmN0aW9uKHQscil7cmV0dXJuIHQuaGFzKHIpfTt2YXIgUXQ9ZnVuY3Rpb24odCxyLGUsbixvLHUpe3ZhciBhPTEmZSxpPXQubGVuZ3RoLGM9ci5sZW5ndGg7aWYoaSE9YyYmIShhJiZjPmkpKXJldHVybiExO3ZhciBmPXUuZ2V0KHQpLGw9dS5nZXQocik7aWYoZiYmbClyZXR1cm4gZj09ciYmbD09dDt2YXIgdj0tMSxzPSEwLGI9MiZlP25ldyBHdDp2b2lkIDA7Zm9yKHUuc2V0KHQsciksdS5zZXQocix0KTsrK3Y8aTspe3ZhciBwPXRbdl0seT1yW3ZdO2lmKG4pdmFyIGg9YT9uKHkscCx2LHIsdCx1KTpuKHAseSx2LHQscix1KTtpZih2b2lkIDAhPT1oKXtpZihoKWNvbnRpbnVlO3M9ITE7YnJlYWt9aWYoYil7aWYoIUh0KHIsKGZ1bmN0aW9uKHQscil7aWYoIUp0KGIscikmJihwPT09dHx8byhwLHQsZSxuLHUpKSlyZXR1cm4gYi5wdXNoKHIpfSkpKXtzPSExO2JyZWFrfX1lbHNlIGlmKHAhPT15JiYhbyhwLHksZSxuLHUpKXtzPSExO2JyZWFrfX1yZXR1cm4gdS5kZWxldGUodCksdS5kZWxldGUociksc30sWHQ9dS5VaW50OEFycmF5O3ZhciBZdD1mdW5jdGlvbih0KXt2YXIgcj0tMSxlPUFycmF5KHQuc2l6ZSk7cmV0dXJuIHQuZm9yRWFjaCgoZnVuY3Rpb24odCxuKXtlWysrcl09W24sdF19KSksZX07dmFyIFp0PWZ1bmN0aW9uKHQpe3ZhciByPS0xLGU9QXJyYXkodC5zaXplKTtyZXR1cm4gdC5mb3JFYWNoKChmdW5jdGlvbih0KXtlWysrcl09dH0pKSxlfSx0cj1hP2EucHJvdG90eXBlOnZvaWQgMCxycj10cj90ci52YWx1ZU9mOnZvaWQgMDt2YXIgZXI9ZnVuY3Rpb24odCxyLGUsbixvLHUsYSl7c3dpdGNoKGUpe2Nhc2UiW29iamVjdCBEYXRhVmlld10iOmlmKHQuYnl0ZUxlbmd0aCE9ci5ieXRlTGVuZ3RofHx0LmJ5dGVPZmZzZXQhPXIuYnl0ZU9mZnNldClyZXR1cm4hMTt0PXQuYnVmZmVyLHI9ci5idWZmZXI7Y2FzZSJbb2JqZWN0IEFycmF5QnVmZmVyXSI6cmV0dXJuISh0LmJ5dGVMZW5ndGghPXIuYnl0ZUxlbmd0aHx8IXUobmV3IFh0KHQpLG5ldyBYdChyKSkpO2Nhc2UiW29iamVjdCBCb29sZWFuXSI6Y2FzZSJbb2JqZWN0IERhdGVdIjpjYXNlIltvYmplY3QgTnVtYmVyXSI6cmV0dXJuIEooK3QsK3IpO2Nhc2UiW29iamVjdCBFcnJvcl0iOnJldHVybiB0Lm5hbWU9PXIubmFtZSYmdC5tZXNzYWdlPT1yLm1lc3NhZ2U7Y2FzZSJbb2JqZWN0IFJlZ0V4cF0iOmNhc2UiW29iamVjdCBTdHJpbmddIjpyZXR1cm4gdD09cisiIjtjYXNlIltvYmplY3QgTWFwXSI6dmFyIGk9WXQ7Y2FzZSJbb2JqZWN0IFNldF0iOnZhciBjPTEmbjtpZihpfHwoaT1adCksdC5zaXplIT1yLnNpemUmJiFjKXJldHVybiExO3ZhciBmPWEuZ2V0KHQpO2lmKGYpcmV0dXJuIGY9PXI7bnw9MixhLnNldCh0LHIpO3ZhciBsPVF0KGkodCksaShyKSxuLG8sdSxhKTtyZXR1cm4gYS5kZWxldGUodCksbDtjYXNlIltvYmplY3QgU3ltYm9sXSI6aWYocnIpcmV0dXJuIHJyLmNhbGwodCk9PXJyLmNhbGwocil9cmV0dXJuITF9O3ZhciBucj1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPXIubGVuZ3RoLG89dC5sZW5ndGg7KytlPG47KXRbbytlXT1yW2VdO3JldHVybiB0fTt2YXIgb3I9ZnVuY3Rpb24ocixlLG4pe3ZhciBvPWUocik7cmV0dXJuIHQocik/bzpucihvLG4ocikpfTt2YXIgdXI9ZnVuY3Rpb24odCxyKXtmb3IodmFyIGU9LTEsbj1udWxsPT10PzA6dC5sZW5ndGgsbz0wLHU9W107KytlPG47KXt2YXIgYT10W2VdO3IoYSxlLHQpJiYodVtvKytdPWEpfXJldHVybiB1fTt2YXIgYXI9ZnVuY3Rpb24oKXtyZXR1cm5bXX0saXI9T2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxjcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLGZyPWNyP2Z1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P1tdOih0PU9iamVjdCh0KSx1cihjcih0KSwoZnVuY3Rpb24ocil7cmV0dXJuIGlyLmNhbGwodCxyKX0pKSl9OmFyO3ZhciBscj1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPUFycmF5KHQpOysrZTx0OyluW2VdPXIoZSk7cmV0dXJuIG59O3ZhciB2cj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgQXJndW1lbnRzXSI9PXkodCl9LHNyPU9iamVjdC5wcm90b3R5cGUsYnI9c3IuaGFzT3duUHJvcGVydHkscHI9c3IucHJvcGVydHlJc0VudW1lcmFibGUseXI9dnIoZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKT92cjpmdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmYnIuY2FsbCh0LCJjYWxsZWUiKSYmIXByLmNhbGwodCwiY2FsbGVlIil9O3ZhciBocj1mdW5jdGlvbigpe3JldHVybiExfSxkcj1lKChmdW5jdGlvbih0LHIpe3ZhciBlPXImJiFyLm5vZGVUeXBlJiZyLG49ZSYmdCYmIXQubm9kZVR5cGUmJnQsbz1uJiZuLmV4cG9ydHM9PT1lP3UuQnVmZmVyOnZvaWQgMCxhPShvP28uaXNCdWZmZXI6dm9pZCAwKXx8aHI7dC5leHBvcnRzPWF9KSksanI9L14oPzowfFsxLTldXGQqKSQvO3ZhciBncj1mdW5jdGlvbih0LHIpe3ZhciBlPXR5cGVvZiB0O3JldHVybiEhKHI9bnVsbD09cj85MDA3MTk5MjU0NzQwOTkxOnIpJiYoIm51bWJlciI9PWV8fCJzeW1ib2wiIT1lJiZqci50ZXN0KHQpKSYmdD4tMSYmdCUxPT0wJiZ0PHJ9O3ZhciBfcj1mdW5jdGlvbih0KXtyZXR1cm4ibnVtYmVyIj09dHlwZW9mIHQmJnQ+LTEmJnQlMT09MCYmdDw9OTAwNzE5OTI1NDc0MDk5MX0sT3I9e307T3JbIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPU9yWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1PclsiW29iamVjdCBJbnQ4QXJyYXldIl09T3JbIltvYmplY3QgSW50MTZBcnJheV0iXT1PclsiW29iamVjdCBJbnQzMkFycmF5XSJdPU9yWyJbb2JqZWN0IFVpbnQ4QXJyYXldIl09T3JbIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIl09T3JbIltvYmplY3QgVWludDE2QXJyYXldIl09T3JbIltvYmplY3QgVWludDMyQXJyYXldIl09ITAsT3JbIltvYmplY3QgQXJndW1lbnRzXSJdPU9yWyJbb2JqZWN0IEFycmF5XSJdPU9yWyJbb2JqZWN0IEFycmF5QnVmZmVyXSJdPU9yWyJbb2JqZWN0IEJvb2xlYW5dIl09T3JbIltvYmplY3QgRGF0YVZpZXddIl09T3JbIltvYmplY3QgRGF0ZV0iXT1PclsiW29iamVjdCBFcnJvcl0iXT1PclsiW29iamVjdCBGdW5jdGlvbl0iXT1PclsiW29iamVjdCBNYXBdIl09T3JbIltvYmplY3QgTnVtYmVyXSJdPU9yWyJbb2JqZWN0IE9iamVjdF0iXT1PclsiW29iamVjdCBSZWdFeHBdIl09T3JbIltvYmplY3QgU2V0XSJdPU9yWyJbb2JqZWN0IFN0cmluZ10iXT1PclsiW29iamVjdCBXZWFrTWFwXSJdPSExO3ZhciB3cj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmX3IodC5sZW5ndGgpJiYhIU9yW3kodCldfTt2YXIgbXI9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0KHIpfX0sQXI9ZSgoZnVuY3Rpb24odCxyKXt2YXIgZT1yJiYhci5ub2RlVHlwZSYmcixvPWUmJnQmJiF0Lm5vZGVUeXBlJiZ0LHU9byYmby5leHBvcnRzPT09ZSYmbi5wcm9jZXNzLGE9ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9byYmby5yZXF1aXJlJiZvLnJlcXVpcmUoInV0aWwiKS50eXBlcztyZXR1cm4gdHx8dSYmdS5iaW5kaW5nJiZ1LmJpbmRpbmcoInV0aWwiKX1jYXRjaCh0KXt9fSgpO3QuZXhwb3J0cz1hfSkpLFNyPUFyJiZBci5pc1R5cGVkQXJyYXksUHI9U3I/bXIoU3IpOndyLHhyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIHpyPWZ1bmN0aW9uKHIsZSl7dmFyIG49dChyKSxvPSFuJiZ5cihyKSx1PSFuJiYhbyYmZHIociksYT0hbiYmIW8mJiF1JiZQcihyKSxpPW58fG98fHV8fGEsYz1pP2xyKHIubGVuZ3RoLFN0cmluZyk6W10sZj1jLmxlbmd0aDtmb3IodmFyIGwgaW4gcikhZSYmIXhyLmNhbGwocixsKXx8aSYmKCJsZW5ndGgiPT1sfHx1JiYoIm9mZnNldCI9PWx8fCJwYXJlbnQiPT1sKXx8YSYmKCJidWZmZXIiPT1sfHwiYnl0ZUxlbmd0aCI9PWx8fCJieXRlT2Zmc2V0Ij09bCl8fGdyKGwsZikpfHxjLnB1c2gobCk7cmV0dXJuIGN9LEVyPU9iamVjdC5wcm90b3R5cGU7dmFyIElyPWZ1bmN0aW9uKHQpe3ZhciByPXQmJnQuY29uc3RydWN0b3I7cmV0dXJuIHQ9PT0oImZ1bmN0aW9uIj09dHlwZW9mIHImJnIucHJvdG90eXBlfHxFcil9O3ZhciAkcj1mdW5jdGlvbih0LHIpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdChyKGUpKX19LE5yPSRyKE9iamVjdC5rZXlzLE9iamVjdCksVHI9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTXI9ZnVuY3Rpb24odCl7aWYoIUlyKHQpKXJldHVybiBOcih0KTt2YXIgcj1bXTtmb3IodmFyIGUgaW4gT2JqZWN0KHQpKVRyLmNhbGwodCxlKSYmImNvbnN0cnVjdG9yIiE9ZSYmci5wdXNoKGUpO3JldHVybiByfTt2YXIga3I9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGwhPXQmJl9yKHQubGVuZ3RoKSYmIW0odCl9O3ZhciBGcj1mdW5jdGlvbih0KXtyZXR1cm4ga3IodCk/enIodCk6TXIodCl9O3ZhciBDcj1mdW5jdGlvbih0KXtyZXR1cm4gb3IodCxGcixmcil9LERyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFVyPWZ1bmN0aW9uKHQscixlLG4sbyx1KXt2YXIgYT0xJmUsaT1Dcih0KSxjPWkubGVuZ3RoO2lmKGMhPUNyKHIpLmxlbmd0aCYmIWEpcmV0dXJuITE7Zm9yKHZhciBmPWM7Zi0tOyl7dmFyIGw9aVtmXTtpZighKGE/bCBpbiByOkRyLmNhbGwocixsKSkpcmV0dXJuITF9dmFyIHY9dS5nZXQodCkscz11LmdldChyKTtpZih2JiZzKXJldHVybiB2PT1yJiZzPT10O3ZhciBiPSEwO3Uuc2V0KHQsciksdS5zZXQocix0KTtmb3IodmFyIHA9YTsrK2Y8Yzspe3ZhciB5PXRbbD1pW2ZdXSxoPXJbbF07aWYobil2YXIgZD1hP24oaCx5LGwscix0LHUpOm4oeSxoLGwsdCxyLHUpO2lmKCEodm9pZCAwPT09ZD95PT09aHx8byh5LGgsZSxuLHUpOmQpKXtiPSExO2JyZWFrfXB8fChwPSJjb25zdHJ1Y3RvciI9PWwpfWlmKGImJiFwKXt2YXIgaj10LmNvbnN0cnVjdG9yLGc9ci5jb25zdHJ1Y3RvcjtqPT1nfHwhKCJjb25zdHJ1Y3RvciJpbiB0KXx8ISgiY29uc3RydWN0b3IiaW4gcil8fCJmdW5jdGlvbiI9PXR5cGVvZiBqJiZqIGluc3RhbmNlb2YgaiYmImZ1bmN0aW9uIj09dHlwZW9mIGcmJmcgaW5zdGFuY2VvZiBnfHwoYj0hMSl9cmV0dXJuIHUuZGVsZXRlKHQpLHUuZGVsZXRlKHIpLGJ9LEJyPUModSwiRGF0YVZpZXciKSxScj1DKHUsIlByb21pc2UiKSxMcj1DKHUsIlNldCIpLFZyPUModSwiV2Vha01hcCIpLEtyPXooQnIpLFdyPXoob3QpLHFyPXooUnIpLEdyPXooTHIpLEhyPXooVnIpLEpyPXk7KEJyJiYiW29iamVjdCBEYXRhVmlld10iIT1KcihuZXcgQnIobmV3IEFycmF5QnVmZmVyKDEpKSl8fG90JiYiW29iamVjdCBNYXBdIiE9SnIobmV3IG90KXx8UnImJiJbb2JqZWN0IFByb21pc2VdIiE9SnIoUnIucmVzb2x2ZSgpKXx8THImJiJbb2JqZWN0IFNldF0iIT1KcihuZXcgTHIpfHxWciYmIltvYmplY3QgV2Vha01hcF0iIT1KcihuZXcgVnIpKSYmKEpyPWZ1bmN0aW9uKHQpe3ZhciByPXkodCksZT0iW29iamVjdCBPYmplY3RdIj09cj90LmNvbnN0cnVjdG9yOnZvaWQgMCxuPWU/eihlKToiIjtpZihuKXN3aXRjaChuKXtjYXNlIEtyOnJldHVybiJbb2JqZWN0IERhdGFWaWV3XSI7Y2FzZSBXcjpyZXR1cm4iW29iamVjdCBNYXBdIjtjYXNlIHFyOnJldHVybiJbb2JqZWN0IFByb21pc2VdIjtjYXNlIEdyOnJldHVybiJbb2JqZWN0IFNldF0iO2Nhc2UgSHI6cmV0dXJuIltvYmplY3QgV2Vha01hcF0ifXJldHVybiByfSk7dmFyIFFyPUpyLFhyPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7dmFyIFlyPWZ1bmN0aW9uKHIsZSxuLG8sdSxhKXt2YXIgaT10KHIpLGM9dChlKSxmPWk/IltvYmplY3QgQXJyYXldIjpRcihyKSxsPWM/IltvYmplY3QgQXJyYXldIjpRcihlKSx2PSJbb2JqZWN0IE9iamVjdF0iPT0oZj0iW29iamVjdCBBcmd1bWVudHNdIj09Zj8iW29iamVjdCBPYmplY3RdIjpmKSxzPSJbb2JqZWN0IE9iamVjdF0iPT0obD0iW29iamVjdCBBcmd1bWVudHNdIj09bD8iW29iamVjdCBPYmplY3RdIjpsKSxiPWY9PWw7aWYoYiYmZHIocikpe2lmKCFkcihlKSlyZXR1cm4hMTtpPSEwLHY9ITF9aWYoYiYmIXYpcmV0dXJuIGF8fChhPW5ldyBWdCksaXx8UHIocik/UXQocixlLG4sbyx1LGEpOmVyKHIsZSxmLG4sbyx1LGEpO2lmKCEoMSZuKSl7dmFyIHA9diYmWHIuY2FsbChyLCJfX3dyYXBwZWRfXyIpLHk9cyYmWHIuY2FsbChlLCJfX3dyYXBwZWRfXyIpO2lmKHB8fHkpe3ZhciBoPXA/ci52YWx1ZSgpOnIsZD15P2UudmFsdWUoKTplO3JldHVybiBhfHwoYT1uZXcgVnQpLHUoaCxkLG4sbyxhKX19cmV0dXJuISFiJiYoYXx8KGE9bmV3IFZ0KSxVcihyLGUsbixvLHUsYSkpfTt2YXIgWnI9ZnVuY3Rpb24gdChyLGUsbixvLHUpe3JldHVybiByPT09ZXx8KG51bGw9PXJ8fG51bGw9PWV8fCFoKHIpJiYhaChlKT9yIT1yJiZlIT1lOllyKHIsZSxuLG8sdCx1KSl9O3ZhciB0ZT1mdW5jdGlvbih0LHIsZSxuKXt2YXIgbz1lLmxlbmd0aCx1PW8sYT0hbjtpZihudWxsPT10KXJldHVybiF1O2Zvcih0PU9iamVjdCh0KTtvLS07KXt2YXIgaT1lW29dO2lmKGEmJmlbMl0/aVsxXSE9PXRbaVswXV06IShpWzBdaW4gdCkpcmV0dXJuITF9Zm9yKDsrK288dTspe3ZhciBjPShpPWVbb10pWzBdLGY9dFtjXSxsPWlbMV07aWYoYSYmaVsyXSl7aWYodm9pZCAwPT09ZiYmIShjIGluIHQpKXJldHVybiExfWVsc2V7dmFyIHY9bmV3IFZ0O2lmKG4pdmFyIHM9bihmLGwsYyx0LHIsdik7aWYoISh2b2lkIDA9PT1zP1pyKGwsZiwzLG4sdik6cykpcmV0dXJuITF9fXJldHVybiEwfTt2YXIgcmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9PXQmJiFPKHQpfTt2YXIgZWU9ZnVuY3Rpb24odCl7Zm9yKHZhciByPUZyKHQpLGU9ci5sZW5ndGg7ZS0tOyl7dmFyIG49cltlXSxvPXRbbl07cltlXT1bbixvLHJlKG8pXX1yZXR1cm4gcn07dmFyIG5lPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBudWxsIT1lJiYoZVt0XT09PXImJih2b2lkIDAhPT1yfHx0IGluIE9iamVjdChlKSkpfX07dmFyIG9lPWZ1bmN0aW9uKHQpe3ZhciByPWVlKHQpO3JldHVybiAxPT1yLmxlbmd0aCYmclswXVsyXT9uZShyWzBdWzBdLHJbMF1bMV0pOmZ1bmN0aW9uKGUpe3JldHVybiBlPT09dHx8dGUoZSx0LHIpfX07dmFyIHVlPWZ1bmN0aW9uKHQscil7cmV0dXJuIG51bGwhPXQmJnIgaW4gT2JqZWN0KHQpfTt2YXIgYWU9ZnVuY3Rpb24ocixlLG4pe2Zvcih2YXIgbz0tMSx1PShlPUF0KGUscikpLmxlbmd0aCxhPSExOysrbzx1Oyl7dmFyIGk9U3QoZVtvXSk7aWYoIShhPW51bGwhPXImJm4ocixpKSkpYnJlYWs7cj1yW2ldfXJldHVybiBhfHwrK28hPXU/YTohISh1PW51bGw9PXI/MDpyLmxlbmd0aCkmJl9yKHUpJiZncihpLHUpJiYodChyKXx8eXIocikpfTt2YXIgaWU9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbnVsbCE9dCYmYWUodCxyLHVlKX07dmFyIGNlPWZ1bmN0aW9uKHQscil7cmV0dXJuIF8odCkmJnJlKHIpP25lKFN0KHQpLHIpOmZ1bmN0aW9uKGUpe3ZhciBuPXh0KGUsdCk7cmV0dXJuIHZvaWQgMD09PW4mJm49PT1yP2llKGUsdCk6WnIocixuLDMpfX07dmFyIGZlPWZ1bmN0aW9uKHQpe3JldHVybiB0fTt2YXIgbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiBudWxsPT1yP3ZvaWQgMDpyW3RdfX07dmFyIHZlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihyKXtyZXR1cm4gUHQocix0KX19O3ZhciBzZT1mdW5jdGlvbih0KXtyZXR1cm4gXyh0KT9sZShTdCh0KSk6dmUodCl9O3ZhciBiZT1mdW5jdGlvbihyKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygcj9yOm51bGw9PXI/ZmU6Im9iamVjdCI9PXR5cGVvZiByP3Qocik/Y2UoclswXSxyWzFdKTpvZShyKTpzZShyKX07dmFyIHBlPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihyLGUsbil7Zm9yKHZhciBvPS0xLHU9T2JqZWN0KHIpLGE9bihyKSxpPWEubGVuZ3RoO2ktLTspe3ZhciBjPWFbdD9pOisrb107aWYoITE9PT1lKHVbY10sYyx1KSlicmVha31yZXR1cm4gcn19KCk7dmFyIHllPWZ1bmN0aW9uKHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsbil7aWYobnVsbD09ZSlyZXR1cm4gZTtpZigha3IoZSkpcmV0dXJuIHQoZSxuKTtmb3IodmFyIG89ZS5sZW5ndGgsdT1yP286LTEsYT1PYmplY3QoZSk7KHI/dS0tOisrdTxvKSYmITEhPT1uKGFbdV0sdSxhKTspO3JldHVybiBlfX0oKGZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJnBlKHQscixGcil9KSk7dmFyIGhlPWZ1bmN0aW9uKHQscil7dmFyIGU9LTEsbj1rcih0KT9BcnJheSh0Lmxlbmd0aCk6W107cmV0dXJuIHllKHQsKGZ1bmN0aW9uKHQsbyx1KXtuWysrZV09cih0LG8sdSl9KSksbn07dmFyIGRlPWZ1bmN0aW9uKHIsZSl7cmV0dXJuKHQocik/Z3Q6aGUpKHIsYmUoZSkpfSxqZT1BcnJheS5wcm90b3R5cGUuam9pbjt2YXIgZ2U9ZnVuY3Rpb24odCxyKXtyZXR1cm4gbnVsbD09dD8iIjpqZS5jYWxsKHQscil9O3ZhciBfZT1mdW5jdGlvbihyKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHJ8fCF0KHIpJiZoKHIpJiYiW29iamVjdCBTdHJpbmddIj09eShyKX0sT2U9bGUoImxlbmd0aCIpLHdlPVJlZ0V4cCgiW1xcdTIwMGRcXHVkODAwLVxcdWRmZmZcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZcXHVmZTBlXFx1ZmUwZl0iKTt2YXIgbWU9ZnVuY3Rpb24odCl7cmV0dXJuIHdlLnRlc3QodCl9LEFlPSJbXFx1ZDgwMC1cXHVkZmZmXSIsU2U9IltcXHUwMzAwLVxcdTAzNmZcXHVmZTIwLVxcdWZlMmZcXHUyMGQwLVxcdTIwZmZdIixQZT0iXFx1ZDgzY1tcXHVkZmZiLVxcdWRmZmZdIix4ZT0iW15cXHVkODAwLVxcdWRmZmZdIix6ZT0iKD86XFx1ZDgzY1tcXHVkZGU2LVxcdWRkZmZdKXsyfSIsRWU9IltcXHVkODAwLVxcdWRiZmZdW1xcdWRjMDAtXFx1ZGZmZl0iLEllPSIoPzoiK1NlKyJ8IitQZSsiKSIrIj8iLCRlPSJbXFx1ZmUwZVxcdWZlMGZdPyIrSWUrKCIoPzpcXHUyMDBkKD86IitbeGUsemUsRWVdLmpvaW4oInwiKSsiKVtcXHVmZTBlXFx1ZmUwZl0/IitJZSsiKSoiKSxOZT0iKD86IitbeGUrU2UrIj8iLFNlLHplLEVlLEFlXS5qb2luKCJ8IikrIikiLFRlPVJlZ0V4cChQZSsiKD89IitQZSsiKXwiK05lKyRlLCJnIik7dmFyIE1lPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1UZS5sYXN0SW5kZXg9MDtUZS50ZXN0KHQpOykrK3I7cmV0dXJuIHJ9O3ZhciBrZT1mdW5jdGlvbih0KXtyZXR1cm4gbWUodCk/TWUodCk6T2UodCl9O3ZhciBGZT1mdW5jdGlvbih0KXtpZihudWxsPT10KXJldHVybiAwO2lmKGtyKHQpKXJldHVybiBfZSh0KT9rZSh0KTp0Lmxlbmd0aDt2YXIgcj1Rcih0KTtyZXR1cm4iW29iamVjdCBNYXBdIj09cnx8IltvYmplY3QgU2V0XSI9PXI/dC5zaXplOk1yKHQpLmxlbmd0aH07dmFyIENlPWZ1bmN0aW9uKHQpe3JldHVybiJudW1iZXIiPT10eXBlb2YgdHx8aCh0KSYmIltvYmplY3QgTnVtYmVyXSI9PXkodCl9O3ZhciBEZT1mdW5jdGlvbih0LHIpe2Zvcih2YXIgZT0tMSxuPW51bGw9PXQ/MDp0Lmxlbmd0aDsrK2U8biYmITEhPT1yKHRbZV0sZSx0KTspO3JldHVybiB0fSxVZT1mdW5jdGlvbigpe3RyeXt2YXIgdD1DKE9iamVjdCwiZGVmaW5lUHJvcGVydHkiKTtyZXR1cm4gdCh7fSwiIix7fSksdH1jYXRjaCh0KXt9fSgpO3ZhciBCZT1mdW5jdGlvbih0LHIsZSl7Il9fcHJvdG9fXyI9PXImJlVlP1VlKHQscix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6ZSx3cml0YWJsZTohMH0pOnRbcl09ZX0sUmU9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTt2YXIgTGU9ZnVuY3Rpb24odCxyLGUpe3ZhciBuPXRbcl07UmUuY2FsbCh0LHIpJiZKKG4sZSkmJih2b2lkIDAhPT1lfHxyIGluIHQpfHxCZSh0LHIsZSl9O3ZhciBWZT1mdW5jdGlvbih0LHIsZSxuKXt2YXIgbz0hZTtlfHwoZT17fSk7Zm9yKHZhciB1PS0xLGE9ci5sZW5ndGg7Kyt1PGE7KXt2YXIgaT1yW3VdLGM9bj9uKGVbaV0sdFtpXSxpLGUsdCk6dm9pZCAwO3ZvaWQgMD09PWMmJihjPXRbaV0pLG8/QmUoZSxpLGMpOkxlKGUsaSxjKX1yZXR1cm4gZX07dmFyIEtlPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJlZlKHIsRnIociksdCl9O3ZhciBXZT1mdW5jdGlvbih0KXt2YXIgcj1bXTtpZihudWxsIT10KWZvcih2YXIgZSBpbiBPYmplY3QodCkpci5wdXNoKGUpO3JldHVybiByfSxxZT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBHZT1mdW5jdGlvbih0KXtpZighTyh0KSlyZXR1cm4gV2UodCk7dmFyIHI9SXIodCksZT1bXTtmb3IodmFyIG4gaW4gdCkoImNvbnN0cnVjdG9yIiE9bnx8IXImJnFlLmNhbGwodCxuKSkmJmUucHVzaChuKTtyZXR1cm4gZX07dmFyIEhlPWZ1bmN0aW9uKHQpe3JldHVybiBrcih0KT96cih0LCEwKTpHZSh0KX07dmFyIEplPWZ1bmN0aW9uKHQscil7cmV0dXJuIHQmJlZlKHIsSGUociksdCl9LFFlPWUoKGZ1bmN0aW9uKHQscil7dmFyIGU9ciYmIXIubm9kZVR5cGUmJnIsbj1lJiZ0JiYhdC5ub2RlVHlwZSYmdCxvPW4mJm4uZXhwb3J0cz09PWU/dS5CdWZmZXI6dm9pZCAwLGE9bz9vLmFsbG9jVW5zYWZlOnZvaWQgMDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtpZihyKXJldHVybiB0LnNsaWNlKCk7dmFyIGU9dC5sZW5ndGgsbj1hP2EoZSk6bmV3IHQuY29uc3RydWN0b3IoZSk7cmV0dXJuIHQuY29weShuKSxufX0pKTt2YXIgWGU9ZnVuY3Rpb24odCxyKXt2YXIgZT0tMSxuPXQubGVuZ3RoO2ZvcihyfHwocj1BcnJheShuKSk7KytlPG47KXJbZV09dFtlXTtyZXR1cm4gcn07dmFyIFllPWZ1bmN0aW9uKHQscil7cmV0dXJuIFZlKHQsZnIodCkscil9LFplPSRyKE9iamVjdC5nZXRQcm90b3R5cGVPZixPYmplY3QpLHRuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM/ZnVuY3Rpb24odCl7Zm9yKHZhciByPVtdO3Q7KW5yKHIsZnIodCkpLHQ9WmUodCk7cmV0dXJuIHJ9OmFyO3ZhciBybj1mdW5jdGlvbih0LHIpe3JldHVybiBWZSh0LHRuKHQpLHIpfTt2YXIgZW49ZnVuY3Rpb24odCl7cmV0dXJuIG9yKHQsSGUsdG4pfSxubj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O3ZhciBvbj1mdW5jdGlvbih0KXt2YXIgcj10Lmxlbmd0aCxlPW5ldyB0LmNvbnN0cnVjdG9yKHIpO3JldHVybiByJiYic3RyaW5nIj09dHlwZW9mIHRbMF0mJm5uLmNhbGwodCwiaW5kZXgiKSYmKGUuaW5kZXg9dC5pbmRleCxlLmlucHV0PXQuaW5wdXQpLGV9O3ZhciB1bj1mdW5jdGlvbih0KXt2YXIgcj1uZXcgdC5jb25zdHJ1Y3Rvcih0LmJ5dGVMZW5ndGgpO3JldHVybiBuZXcgWHQocikuc2V0KG5ldyBYdCh0KSkscn07dmFyIGFuPWZ1bmN0aW9uKHQscil7dmFyIGU9cj91bih0LmJ1ZmZlcik6dC5idWZmZXI7cmV0dXJuIG5ldyB0LmNvbnN0cnVjdG9yKGUsdC5ieXRlT2Zmc2V0LHQuYnl0ZUxlbmd0aCl9LGNuPS9cdyokLzt2YXIgZm49ZnVuY3Rpb24odCl7dmFyIHI9bmV3IHQuY29uc3RydWN0b3IodC5zb3VyY2UsY24uZXhlYyh0KSk7cmV0dXJuIHIubGFzdEluZGV4PXQubGFzdEluZGV4LHJ9LGxuPWE/YS5wcm90b3R5cGU6dm9pZCAwLHZuPWxuP2xuLnZhbHVlT2Y6dm9pZCAwO3ZhciBzbj1mdW5jdGlvbih0KXtyZXR1cm4gdm4/T2JqZWN0KHZuLmNhbGwodCkpOnt9fTt2YXIgYm49ZnVuY3Rpb24odCxyKXt2YXIgZT1yP3VuKHQuYnVmZmVyKTp0LmJ1ZmZlcjtyZXR1cm4gbmV3IHQuY29uc3RydWN0b3IoZSx0LmJ5dGVPZmZzZXQsdC5sZW5ndGgpfTt2YXIgcG49ZnVuY3Rpb24odCxyLGUpe3ZhciBuPXQuY29uc3RydWN0b3I7c3dpdGNoKHIpe2Nhc2UiW29iamVjdCBBcnJheUJ1ZmZlcl0iOnJldHVybiB1bih0KTtjYXNlIltvYmplY3QgQm9vbGVhbl0iOmNhc2UiW29iamVjdCBEYXRlXSI6cmV0dXJuIG5ldyBuKCt0KTtjYXNlIltvYmplY3QgRGF0YVZpZXddIjpyZXR1cm4gYW4odCxlKTtjYXNlIltvYmplY3QgRmxvYXQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IEZsb2F0NjRBcnJheV0iOmNhc2UiW29iamVjdCBJbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgSW50MTZBcnJheV0iOmNhc2UiW29iamVjdCBJbnQzMkFycmF5XSI6Y2FzZSJbb2JqZWN0IFVpbnQ4QXJyYXldIjpjYXNlIltvYmplY3QgVWludDhDbGFtcGVkQXJyYXldIjpjYXNlIltvYmplY3QgVWludDE2QXJyYXldIjpjYXNlIltvYmplY3QgVWludDMyQXJyYXldIjpyZXR1cm4gYm4odCxlKTtjYXNlIltvYmplY3QgTWFwXSI6cmV0dXJuIG5ldyBuO2Nhc2UiW29iamVjdCBOdW1iZXJdIjpjYXNlIltvYmplY3QgU3RyaW5nXSI6cmV0dXJuIG5ldyBuKHQpO2Nhc2UiW29iamVjdCBSZWdFeHBdIjpyZXR1cm4gZm4odCk7Y2FzZSJbb2JqZWN0IFNldF0iOnJldHVybiBuZXcgbjtjYXNlIltvYmplY3QgU3ltYm9sXSI6cmV0dXJuIHNuKHQpfX0seW49T2JqZWN0LmNyZWF0ZSxobj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIGZ1bmN0aW9uKHIpe2lmKCFPKHIpKXJldHVybnt9O2lmKHluKXJldHVybiB5bihyKTt0LnByb3RvdHlwZT1yO3ZhciBlPW5ldyB0O3JldHVybiB0LnByb3RvdHlwZT12b2lkIDAsZX19KCk7dmFyIGRuPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiB0LmNvbnN0cnVjdG9yfHxJcih0KT97fTpobihaZSh0KSl9O3ZhciBqbj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgTWFwXSI9PVFyKHQpfSxnbj1BciYmQXIuaXNNYXAsX249Z24/bXIoZ24pOmpuO3ZhciBPbj1mdW5jdGlvbih0KXtyZXR1cm4gaCh0KSYmIltvYmplY3QgU2V0XSI9PVFyKHQpfSx3bj1BciYmQXIuaXNTZXQsbW49d24/bXIod24pOk9uLEFuPXt9O0FuWyJbb2JqZWN0IEFyZ3VtZW50c10iXT1BblsiW29iamVjdCBBcnJheV0iXT1BblsiW29iamVjdCBBcnJheUJ1ZmZlcl0iXT1BblsiW29iamVjdCBEYXRhVmlld10iXT1BblsiW29iamVjdCBCb29sZWFuXSJdPUFuWyJbb2JqZWN0IERhdGVdIl09QW5bIltvYmplY3QgRmxvYXQzMkFycmF5XSJdPUFuWyJbb2JqZWN0IEZsb2F0NjRBcnJheV0iXT1BblsiW29iamVjdCBJbnQ4QXJyYXldIl09QW5bIltvYmplY3QgSW50MTZBcnJheV0iXT1BblsiW29iamVjdCBJbnQzMkFycmF5XSJdPUFuWyJbb2JqZWN0IE1hcF0iXT1BblsiW29iamVjdCBOdW1iZXJdIl09QW5bIltvYmplY3QgT2JqZWN0XSJdPUFuWyJbb2JqZWN0IFJlZ0V4cF0iXT1BblsiW29iamVjdCBTZXRdIl09QW5bIltvYmplY3QgU3RyaW5nXSJdPUFuWyJbb2JqZWN0IFN5bWJvbF0iXT1BblsiW29iamVjdCBVaW50OEFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQxNkFycmF5XSJdPUFuWyJbb2JqZWN0IFVpbnQzMkFycmF5XSJdPSEwLEFuWyJbb2JqZWN0IEVycm9yXSJdPUFuWyJbb2JqZWN0IEZ1bmN0aW9uXSJdPUFuWyJbb2JqZWN0IFdlYWtNYXBdIl09ITE7dmFyIFNuPWZ1bmN0aW9uIHIoZSxuLG8sdSxhLGkpe3ZhciBjLGY9MSZuLGw9MiZuLHY9NCZuO2lmKG8mJihjPWE/byhlLHUsYSxpKTpvKGUpKSx2b2lkIDAhPT1jKXJldHVybiBjO2lmKCFPKGUpKXJldHVybiBlO3ZhciBzPXQoZSk7aWYocyl7aWYoYz1vbihlKSwhZilyZXR1cm4gWGUoZSxjKX1lbHNle3ZhciBiPVFyKGUpLHA9IltvYmplY3QgRnVuY3Rpb25dIj09Ynx8IltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIj09YjtpZihkcihlKSlyZXR1cm4gUWUoZSxmKTtpZigiW29iamVjdCBPYmplY3RdIj09Ynx8IltvYmplY3QgQXJndW1lbnRzXSI9PWJ8fHAmJiFhKXtpZihjPWx8fHA/e306ZG4oZSksIWYpcmV0dXJuIGw/cm4oZSxKZShjLGUpKTpZZShlLEtlKGMsZSkpfWVsc2V7aWYoIUFuW2JdKXJldHVybiBhP2U6e307Yz1wbihlLGIsZil9fWl8fChpPW5ldyBWdCk7dmFyIHk9aS5nZXQoZSk7aWYoeSlyZXR1cm4geTtpLnNldChlLGMpLG1uKGUpP2UuZm9yRWFjaCgoZnVuY3Rpb24odCl7Yy5hZGQocih0LG4sbyx0LGUsaSkpfSkpOl9uKGUpJiZlLmZvckVhY2goKGZ1bmN0aW9uKHQsdSl7Yy5zZXQodSxyKHQsbixvLHUsZSxpKSl9KSk7dmFyIGg9cz92b2lkIDA6KHY/bD9lbjpDcjpsP0hlOkZyKShlKTtyZXR1cm4gRGUoaHx8ZSwoZnVuY3Rpb24odCx1KXtoJiYodD1lW3U9dF0pLExlKGMsdSxyKHQsbixvLHUsZSxpKSl9KSksY307dmFyIFBuPWZ1bmN0aW9uKHQpe3JldHVybiBTbih0LDUpfTtmdW5jdGlvbiB4bih0KXtsZXQgcj0hMTtyZXR1cm4gRXQodCk/cj0haXNOYU4oTnVtYmVyKHQpKTpmdW5jdGlvbih0KXtyZXR1cm4iW29iamVjdCBOdW1iZXJdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX0odCkmJihyPSEwKSxyfWZ1bmN0aW9uIHpuKHQpe2lmKCFFdCh0KSYmIXhuKHQpJiYhZCh0KSlyZXR1cm4iIjtsZXQgcj0iIjt0cnl7cj1TdHJpbmcodCl9Y2F0Y2godCl7fXRyeXtyPXQudG9TdHJpbmcoKX1jYXRjaCh0KXt9cmV0dXJuIHJ9dmFyIEVuPU1hdGguY2VpbCxJbj1NYXRoLm1heDt2YXIgJG49ZnVuY3Rpb24odCxyLGUsbil7Zm9yKHZhciBvPS0xLHU9SW4oRW4oKHItdCkvKGV8fDEpKSwwKSxhPUFycmF5KHUpO3UtLTspYVtuP3U6KytvXT10LHQrPWU7cmV0dXJuIGF9O3ZhciBObj1mdW5jdGlvbih0LHIsZSl7aWYoIU8oZSkpcmV0dXJuITE7dmFyIG49dHlwZW9mIHI7cmV0dXJuISEoIm51bWJlciI9PW4/a3IoZSkmJmdyKHIsZS5sZW5ndGgpOiJzdHJpbmciPT1uJiZyIGluIGUpJiZKKGVbcl0sdCl9LFRuPS9ccy87dmFyIE1uPWZ1bmN0aW9uKHQpe2Zvcih2YXIgcj10Lmxlbmd0aDtyLS0mJlRuLnRlc3QodC5jaGFyQXQocikpOyk7cmV0dXJuIHJ9LGtuPS9eXHMrLzt2YXIgRm49ZnVuY3Rpb24odCl7cmV0dXJuIHQ/dC5zbGljZSgwLE1uKHQpKzEpLnJlcGxhY2Uoa24sIiIpOnR9LENuPS9eWy0rXTB4WzAtOWEtZl0rJC9pLERuPS9eMGJbMDFdKyQvaSxVbj0vXjBvWzAtN10rJC9pLEJuPXBhcnNlSW50O3ZhciBSbj1mdW5jdGlvbih0KXtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQ7aWYoZCh0KSlyZXR1cm4gTmFOO2lmKE8odCkpe3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiB0LnZhbHVlT2Y/dC52YWx1ZU9mKCk6dDt0PU8ocik/cisiIjpyfWlmKCJzdHJpbmciIT10eXBlb2YgdClyZXR1cm4gMD09PXQ/dDordDt0PUZuKHQpO3ZhciBlPURuLnRlc3QodCk7cmV0dXJuIGV8fFVuLnRlc3QodCk/Qm4odC5zbGljZSgyKSxlPzI6OCk6Q24udGVzdCh0KT9OYU46K3R9O3ZhciBMbj1mdW5jdGlvbih0KXtyZXR1cm4gdD9JbmZpbml0eT09PSh0PVJuKHQpKXx8LUluZmluaXR5PT09dD8xNzk3NjkzMTM0ODYyMzE1N2UyOTIqKHQ8MD8tMToxKTp0PT10P3Q6MDowPT09dD90OjB9O3ZhciBWbj1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24ocixlLG4pe3JldHVybiBuJiYibnVtYmVyIiE9dHlwZW9mIG4mJk5uKHIsZSxuKSYmKGU9bj12b2lkIDApLHI9TG4ociksdm9pZCAwPT09ZT8oZT1yLHI9MCk6ZT1MbihlKSxuPXZvaWQgMD09PW4/cjxlPzE6LTE6TG4obiksJG4ocixlLG4sdCl9fSgpO2Z1bmN0aW9uIEtuKHQscj1udWxsLGU9e30pe20ocil8fChyPXQ9PnQpO2xldCBuPXh0KGUsImZvcmNlIiwhMSk7cmV0dXJuIEZ0KG4pfHwobj0hMSksZnVuY3Rpb24odCxyLGU9ITEpe2xldCBuPVtdO2lmKCFOdCh0KSYmIUl0KHQpKXJldHVybiByKHQsbnVsbCxbXSk7ZnVuY3Rpb24gbyh0KXtpZihOdCh0KSlyZXR1cm4gVm4oRmUodCkpO2lmKEl0KHQpKXtsZXQgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KSxuPW51bGw7cmV0dXJuIGUmJihuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHModCkpLE50KHIpfHwocj1bXSksTnQobil8fChuPVtdKSxbLi4uciwuLi5uXX1yZXR1cm4gdH1yZXR1cm4gZnVuY3Rpb24gdChlLHUpe2lmKE50KGUpKXJldHVybiBvKGUpLm1hcCgobz0+e2xldCB1PWVbb10sYT1QbihuKTtyZXR1cm4gbi5wdXNoKG8pLHU9cih1LG8sYSksdT10KHUpLG4ucG9wKCksdX0pKTtpZihJdChlKSl7bGV0IHU9byhlKSxhPXt9O3JldHVybiB1Lm1hcCgobz0+e2xldCB1PWVbb10saT1QbihuKTtuLnB1c2gobyksdT1yKHUsbyxpKSx1PXQodSksbi5wb3AoKSxhW29dPXV9KSksYX1yZXR1cm4gZX0odCl9KHQscixuKX1mdW5jdGlvbiBXbih0LHIsZSl7cmV0dXJuIHIgaW4gdD9PYmplY3QuZGVmaW5lUHJvcGVydHkodCxyLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6dFtyXT1lLHR9dmFyIHFuPWZ1bmN0aW9uKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6ZmV9O3ZhciBHbj1mdW5jdGlvbihyLGUpe3JldHVybih0KHIpP0RlOnllKShyLHFuKGUpKX07dmFyIEhuPWZ1bmN0aW9uKHQscixlLG4pe2lmKCFPKHQpKXJldHVybiB0O2Zvcih2YXIgbz0tMSx1PShyPUF0KHIsdCkpLmxlbmd0aCxhPXUtMSxpPXQ7bnVsbCE9aSYmKytvPHU7KXt2YXIgYz1TdChyW29dKSxmPWU7aWYoIl9fcHJvdG9fXyI9PT1jfHwiY29uc3RydWN0b3IiPT09Y3x8InByb3RvdHlwZSI9PT1jKXJldHVybiB0O2lmKG8hPWEpe3ZhciBsPWlbY107dm9pZCAwPT09KGY9bj9uKGwsYyxpKTp2b2lkIDApJiYoZj1PKGwpP2w6Z3IocltvKzFdKT9bXTp7fSl9TGUoaSxjLGYpLGk9aVtjXX1yZXR1cm4gdH07dmFyIEpuPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gbnVsbD09dD90OkhuKHQscixlKX07dmFyIFFuPWZ1bmN0aW9uKHQpe3ZhciByPW51bGw9PXQ/MDp0Lmxlbmd0aDtyZXR1cm4gcj90W3ItMV06dm9pZCAwfTt2YXIgWG49ZnVuY3Rpb24odCxyLGUpe3ZhciBuPS0xLG89dC5sZW5ndGg7cjwwJiYocj0tcj5vPzA6bytyKSwoZT1lPm8/bzplKTwwJiYoZSs9byksbz1yPmU/MDplLXI+Pj4wLHI+Pj49MDtmb3IodmFyIHU9QXJyYXkobyk7KytuPG87KXVbbl09dFtuK3JdO3JldHVybiB1fTt2YXIgWW49ZnVuY3Rpb24odCxyKXtyZXR1cm4gci5sZW5ndGg8Mj90OlB0KHQsWG4ociwwLC0xKSl9O3ZhciBabj1mdW5jdGlvbih0LHIpe3JldHVybiByPUF0KHIsdCksbnVsbD09KHQ9WW4odCxyKSl8fGRlbGV0ZSB0W1N0KFFuKHIpKV19LHRvPUZ1bmN0aW9uLnByb3RvdHlwZSxybz1PYmplY3QucHJvdG90eXBlLGVvPXRvLnRvU3RyaW5nLG5vPXJvLmhhc093blByb3BlcnR5LG9vPWVvLmNhbGwoT2JqZWN0KTt2YXIgdW89ZnVuY3Rpb24odCl7aWYoIWgodCl8fCJbb2JqZWN0IE9iamVjdF0iIT15KHQpKXJldHVybiExO3ZhciByPVplKHQpO2lmKG51bGw9PT1yKXJldHVybiEwO3ZhciBlPW5vLmNhbGwociwiY29uc3RydWN0b3IiKSYmci5jb25zdHJ1Y3RvcjtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmZSBpbnN0YW5jZW9mIGUmJmVvLmNhbGwoZSk9PW9vfTt2YXIgYW89ZnVuY3Rpb24odCl7cmV0dXJuIHVvKHQpP3ZvaWQgMDp0fSxpbz1hP2EuaXNDb25jYXRTcHJlYWRhYmxlOnZvaWQgMDt2YXIgY289ZnVuY3Rpb24ocil7cmV0dXJuIHQocil8fHlyKHIpfHwhIShpbyYmciYmcltpb10pfTt2YXIgZm89ZnVuY3Rpb24gdChyLGUsbixvLHUpe3ZhciBhPS0xLGk9ci5sZW5ndGg7Zm9yKG58fChuPWNvKSx1fHwodT1bXSk7KythPGk7KXt2YXIgYz1yW2FdO2U+MCYmbihjKT9lPjE/dChjLGUtMSxuLG8sdSk6bnIodSxjKTpvfHwodVt1Lmxlbmd0aF09Yyl9cmV0dXJuIHV9O3ZhciBsbz1mdW5jdGlvbih0KXtyZXR1cm4obnVsbD09dD8wOnQubGVuZ3RoKT9mbyh0LDEpOltdfTt2YXIgdm89ZnVuY3Rpb24odCxyLGUpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiB0LmNhbGwocik7Y2FzZSAxOnJldHVybiB0LmNhbGwocixlWzBdKTtjYXNlIDI6cmV0dXJuIHQuY2FsbChyLGVbMF0sZVsxXSk7Y2FzZSAzOnJldHVybiB0LmNhbGwocixlWzBdLGVbMV0sZVsyXSl9cmV0dXJuIHQuYXBwbHkocixlKX0sc289TWF0aC5tYXg7dmFyIGJvPWZ1bmN0aW9uKHQscixlKXtyZXR1cm4gcj1zbyh2b2lkIDA9PT1yP3QubGVuZ3RoLTE6ciwwKSxmdW5jdGlvbigpe2Zvcih2YXIgbj1hcmd1bWVudHMsbz0tMSx1PXNvKG4ubGVuZ3RoLXIsMCksYT1BcnJheSh1KTsrK288dTspYVtvXT1uW3Irb107bz0tMTtmb3IodmFyIGk9QXJyYXkocisxKTsrK288cjspaVtvXT1uW29dO3JldHVybiBpW3JdPWUoYSksdm8odCx0aGlzLGkpfX07dmFyIHBvPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0fX0seW89VWU/ZnVuY3Rpb24odCxyKXtyZXR1cm4gVWUodCwidG9TdHJpbmciLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTpwbyhyKSx3cml0YWJsZTohMH0pfTpmZSxobz1EYXRlLm5vdzt2YXIgam89ZnVuY3Rpb24odCl7dmFyIHI9MCxlPTA7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG49aG8oKSxvPTE2LShuLWUpO2lmKGU9bixvPjApe2lmKCsrcj49ODAwKXJldHVybiBhcmd1bWVudHNbMF19ZWxzZSByPTA7cmV0dXJuIHQuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9fSh5byk7dmFyIGdvPWZ1bmN0aW9uKHQpe3JldHVybiBqbyhibyh0LHZvaWQgMCxsbyksdCsiIil9KChmdW5jdGlvbih0LHIpe3ZhciBlPXt9O2lmKG51bGw9PXQpcmV0dXJuIGU7dmFyIG49ITE7cj1ndChyLChmdW5jdGlvbihyKXtyZXR1cm4gcj1BdChyLHQpLG58fChuPXIubGVuZ3RoPjEpLHJ9KSksVmUodCxlbih0KSxlKSxuJiYoZT1TbihlLDcsYW8pKTtmb3IodmFyIG89ci5sZW5ndGg7by0tOylabihlLHJbb10pO3JldHVybiBlfSkpO2Z1bmN0aW9uIF9vKHQscil7dmFyIGU9T2JqZWN0LmtleXModCk7aWYoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0KTtyJiYobj1uLmZpbHRlcigoZnVuY3Rpb24ocil7cmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKS5lbnVtZXJhYmxlfSkpKSxlLnB1c2guYXBwbHkoZSxuKX1yZXR1cm4gZX1mdW5jdGlvbiBPbyh0KXtmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXt2YXIgZT1udWxsIT1hcmd1bWVudHNbcl0/YXJndW1lbnRzW3JdOnt9O3IlMj9fbyhPYmplY3QoZSksITApLmZvckVhY2goKGZ1bmN0aW9uKHIpe1duKHQscixlW3JdKX0pKTpPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycz9PYmplY3QuZGVmaW5lUHJvcGVydGllcyh0LE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKGUpKTpfbyhPYmplY3QoZSkpLmZvckVhY2goKGZ1bmN0aW9uKHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LHIsT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpKX0pKX1yZXR1cm4gdH1mdW5jdGlvbiB3byh0LHI9e30pe2xldCBlPSIkbGV2ZWwiLG49IiRwYXJlbnRzIjtpZighTXQodCkpcmV0dXJuW107bGV0IG89eHQociwiYmluZEtleSIsbnVsbCk7RXQobyl8fChvPSJpZCIpO2xldCB1PXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KHUpfHwodT0icGFyZW50SWQiKTtsZXQgYT14dChyLCJiaW5kQ2hpbGRyZW4iLG51bGwpO0V0KGEpfHwoYT0iY2hpbGRyZW4iKTtsZXQgaT14dChyLCJzYXZlRXh0UHJvcHMiLG51bGwpO3JldHVybiBGdChpKXx8KGk9ITEpLGZ1bmN0aW9uKHQpe2xldCByPVtdO2Z1bmN0aW9uIGModCl7cmV0dXJuIGk/dDpnbyh0LFtlLG5dKX1sZXQgZj17fTtyZXR1cm4gR24odCwoKGUsbik9PntpZigwPT09ZS4kbGV2ZWwpe2xldCB0PWMoZSk7ci5wdXNoKHQpLGZbZVtvXV09W25dfWVsc2V7bGV0IG49ZnVuY3Rpb24ocil7Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKyspe2xldCBuPXRbZV07aWYoclt1XT09PW5bb10pcmV0dXJuIG59cmV0dXJuIG51bGx9KGUpO2lmKG51bGwhPT1uKXtsZXQgdD1mW25bb11dO3Q9Wy4uLnQsYV07bGV0IHU9eHQocix0LFtdKSxpPWMoZSk7dS5wdXNoKGkpLGZbZVtvXV09Wy4uLnQsdS5sZW5ndGgtMV0sSm4ocix0LHUpfWVsc2UgY29uc29sZS5sb2coYGNhbiBub3QgZmluZCBwYXJlbnQgZm9yICR7eHQoZSx1KX1gKX19KSkscn0odD1mdW5jdGlvbih0KXtsZXQgcj1bXTtmdW5jdGlvbiBhKGEpe2xldCBpPVtdO0duKHQsKCh0LGMpPT57bGV0IGY9eHQodCx1KSxsPXh0KGEsbyk7aWYoZiYmbCYmZj09PWwpe2xldCB1PXh0KGEsbixbXSk7dT1Qbih1KSx1LnB1c2goYVtvXSksci5wdXNoKE9vKHtbZV06YS4kbGV2ZWwrMSxbbl06dX0sdCkpfWVsc2UgaS5wdXNoKHQpfSkpLHQ9aX1pZih0PVBuKHQpLGZ1bmN0aW9uKCl7bGV0IG89W107R24odCwoKHQsYSk9PntUdCh0W3VdKT9yLnB1c2goT28oe1tlXTowLFtuXTpbXX0sdCkpOm8ucHVzaCh0KX0pKSx0PW99KCksMD09PXIubGVuZ3RoKXJldHVybiByO2xldCBpPS0xO2Zvcig7aSs9MSwhKGk+ci5sZW5ndGgtMSk7KXtpZihhKHJbaV0pLDA9PT10Lmxlbmd0aClicmVha31yZXR1cm4gcn0odCkpfWZ1bmN0aW9uIG1vKHQscj17fSl7aWYoISR0KHQpJiYhTXQodCkpcmV0dXJuW107bGV0IGU9eHQociwiYmluZEtleSIsbnVsbCk7RXQoZSl8fChlPSJpZCIpO2xldCBuPXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KG4pfHwobj0icGFyZW50SWQiKTtsZXQgbz14dChyLCJiaW5kVGV4dCIsbnVsbCk7RXQobyl8fChvPSJ0ZXh0Iik7bGV0IHU9eHQociwiYmluZENoaWxkcmVuIixudWxsKTtFdCh1KXx8KHU9ImNoaWxkcmVuIik7bGV0IGE9eHQociwiYmluZFR5cGUiLG51bGwpO0V0KGEpfHwoYT0idHlwZSIpO2xldCBpPXh0KHIsImJpbmROdW1PZkNoaWxyZW4iLG51bGwpO0V0KGkpfHwoaT0ibnVtT2ZDaGlscmVuIik7bGV0IGM9eHQociwiYmluZFJvb3QiLG51bGwpO0V0KGMpfHwoYz0icm9vdCIpO2xldCBmPXh0KHIsInNhdmVFeHRQcm9wcyIsbnVsbCk7cmV0dXJuIEZ0KGYpfHwoZj0hMSksRXQoYykmJih0PXtbY106dH0pLHdvKGZ1bmN0aW9uKHQscj17fSl7aWYoISR0KHQpJiYhTXQodCkpcmV0dXJuW107bGV0IGU9eHQociwiYmluZEtleSIsbnVsbCk7RXQoZSl8fChlPSJpZCIpO2xldCBuPXh0KHIsImJpbmRQYXJlbnQiLG51bGwpO0V0KG4pfHwobj0icGFyZW50SWQiKTtsZXQgbz14dChyLCJiaW5kQmVsb25nIixudWxsKTtFdChvKXx8KG89ImtleSIpO2xldCB1PXh0KHIsImJpbmRUZXh0IixudWxsKTtFdCh1KXx8KHU9InRleHQiKTtsZXQgYT14dChyLCJiaW5kVHlwZSIsbnVsbCk7RXQoYSl8fChhPSJ0eXBlIik7bGV0IGk9eHQociwiYmluZE51bU9mQ2hpbHJlbiIsbnVsbCk7ZnVuY3Rpb24gYyh0LHIsZSl7dD1Qbih0KSx0PWRlKHQsKHQ9PmQodCk/em4odCk6dCkpLGQocikmJihyPXpuKHIpKSxkKGUpJiYoZT16bihlKSksKEV0KHIpfHx4bihyKSkmJnQucHVzaChyKTtsZXQgbj1nZSh0LCItIik7cmV0dXJuKEV0KGUpfHx4bihlKSkmJihuPWAke2V9LSR7bn1gKSxufUV0KGkpfHwoaT0ibnVtT2ZDaGlscmVuIik7bGV0IGY9W107cmV0dXJuIEtuKHQsKCh0LHIsbCk9PntsZXQgdj1jKGwscikscz1jKGwsbnVsbCksYj0ibm9kZSI7SXQodCk/Yj0ib2JqZWN0IjpOdCh0KSYmKGI9ImFycmF5Iik7bGV0IHA9e1tlXTp2LFtuXTpzLFthXTpifTtpZigoRXQocil8fENlKHIpKSYmKHBbb109ciksSXQodCl8fE50KHQpfHwocFt1XT10KSxJdCh0KXx8TnQodCkpe2xldCByPUZlKHQpO3BbaV09cn1yZXR1cm4gZi5wdXNoKHApLHR9KSx7Zm9yY2U6ITB9KSxmfSh0LHtiaW5kS2V5OmUsYmluZFBhcmVudDpuLGJpbmRUZXh0Om8sYmluZFR5cGU6YSxiaW5kTnVtT2ZDaGlscmVuOml9KSx7YmluZEtleTplLGJpbmRQYXJlbnQ6bixiaW5kQ2hpbGRyZW46dSxzYXZlRXh0UHJvcHM6Zn0pfWFzeW5jIGZ1bmN0aW9uIGNvbnZlcnRUb1RyZWVXayh0LHI9e30pe3JldHVybiBtbyh0LHIpfQoKbGV0IGluc3RhbmNlID0gbnVsbApmdW5jdGlvbiBpbml0KGlucHV0KXsKCiAgICAvL2luaXQKICAgIGxldCByCiAgICAKICAgICAgICByID0gewogICAgICAgICAgICBtYWluOiBjb252ZXJ0VG9UcmVlV2sKICAgICAgICB9CiAgICAgICAgCgogICAgLy9vbgogICAgCgogICAgLy9zYXZlCiAgICBpbnN0YW5jZSA9IHIKCn0KCmZ1bmN0aW9uIHNlbmRNZXNzYWdlKGRhdGEpIHsKICAgIAogICAgICAgIHNlbGYucG9zdE1lc3NhZ2UoZGF0YSkKICAgICAgICAKfQoKYXN5bmMgZnVuY3Rpb24gcnVuKGRhdGEpIHsKICAgIC8vIGNvbnNvbGUubG9nKCdpbm5lciB3b3JrZXIgcnVuJyxkYXRhKQoKICAgIC8vbW9kZQogICAgbGV0IG1vZGUgPSBkYXRhLm1vZGUKCiAgICAvL2NoZWNrCiAgICBpZihtb2RlICE9PSAnaW5pdCcgJiYgbW9kZSAhPT0gJ2NhbGwnKXsKICAgICAgICByZXR1cm4KICAgIH0KCiAgICAvL2luaXQKICAgIGlmKG1vZGUgPT09ICdpbml0Jyl7CiAgICAgICAgCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy90eXBlCiAgICAgICAgICAgIGxldCB0eXBlID0gZGF0YS50eXBlCgogICAgICAgICAgICAvL2lucHV0CiAgICAgICAgICAgIGxldCBpbnB1dCA9IGRhdGEuaW5wdXQKICAgIAogICAgICAgICAgICAvL2luc3RhbmNlCiAgICAgICAgICAgIGlmKHR5cGUgPT09ICdmdW5jdGlvbicpewogICAgICAgICAgICAgICAgaW5pdCguLi5pbnB1dCkKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIGlmKHR5cGUgPT09ICdvYmplY3QnKXsKICAgICAgICAgICAgICAgIGluc3RhbmNlID0gY29udmVydFRvVHJlZVdrCiAgICAgICAgICAgIH0KCiAgICAgICAgfQogICAgICAgIGNhdGNoKGVycil7CiAgICAgICAgCiAgICAgICAgICAgIC8vc2VuZE1lc3NhZ2UKICAgICAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgICAgIG1vZGU6ICdlbWl0JywKICAgICAgICAgICAgICAgIGV2TmFtZTogJ2Vycm9yJywKICAgICAgICAgICAgICAgIG1zZzogZXJyLAogICAgICAgICAgICB9CiAgICAgICAgICAgIHNlbmRNZXNzYWdlKHJlcykKCiAgICAgICAgfQogICAgICAgICAgICAKICAgIH0KCiAgICAvL2NoZWNrCiAgICBpZihtb2RlID09PSAnY2FsbCcpewogICAgICAgIGxldCBzdGF0ZSA9ICcnCiAgICAgICAgbGV0IG1zZyA9IG51bGwKCiAgICAgICAgdHJ5ewoKICAgICAgICAgICAgLy9mdW4KICAgICAgICAgICAgbGV0IGZ1biA9IGluc3RhbmNlW2RhdGEuZnVuXQoKICAgICAgICAgICAgLy9pbnB1dAogICAgICAgICAgICBsZXQgaW5wdXQgPSBkYXRhLmlucHV0CgogICAgICAgICAgICAvL2V4ZWMKICAgICAgICAgICAgYXdhaXQgZnVuKC4uLmlucHV0KQogICAgICAgICAgICAgICAgLnRoZW4oKHN1YykgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdzdWNjZXNzJwogICAgICAgICAgICAgICAgICAgIG1zZz1zdWMKICAgICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4gewogICAgICAgICAgICAgICAgICAgIHN0YXRlPSdlcnJvcicKICAgICAgICAgICAgICAgICAgICBtc2c9ZXJyCiAgICAgICAgICAgICAgICB9KQoKICAgICAgICB9CiAgICAgICAgY2F0Y2goZXJyKXsKICAgICAgICAgICAgc3RhdGUgPSAnZXJyb3InCiAgICAgICAgICAgIG1zZyA9IGVycgogICAgICAgIH0KICAgICAgICAKICAgICAgICAvL3NlbmRNZXNzYWdlCiAgICAgICAgbGV0IHJlcyA9IHsKICAgICAgICAgICAgbW9kZTogJ3JldHVybicsCiAgICAgICAgICAgIGlkOiBkYXRhLmlkLAogICAgICAgICAgICBmdW46IGRhdGEuZnVuLAogICAgICAgICAgICBzdGF0ZSwKICAgICAgICAgICAgbXNnLAogICAgICAgIH0KICAgICAgICBzZW5kTWVzc2FnZShyZXMpCgogICAgfQoKfQoKZnVuY3Rpb24gcmVjdk1lc3NhZ2UoZGF0YSkgewogICAgLy8gY29uc29sZS5sb2coJ2lubmVyIHdvcmtlciByZWN2OicsIGRhdGEpCgogICAgLy9kYXRhUmVjdgogICAgbGV0IGRhdGFSZWN2ID0gZGF0YQoKICAgIC8vcnVuCiAgICBydW4oZGF0YVJlY3YpCgp9CgoKICAgICAgICBzZWxmLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7CiAgICAgICAgICAgIHJlY3ZNZXNzYWdlKGUuZGF0YSkKICAgICAgICB9CiAgICAgICAgCgo=",Z.Base64.decode(m));function o(){var i=d();function l(d){try{var i=new Blob([d]),l=window.URL||window.webkitURL;return new Worker(l.createObjectURL(i))}catch(d){o(d)}}var m=l(X);if(!m)return o("invalid worker"),null;function I(){m?(m.terminate(),m=void 0):o("worker has been terminated")}function b(){var d={mode:"init",type:"function",input:Array.prototype.slice.call(arguments)};m.postMessage(d)}function Z(){var d=c(),l=t(),I={mode:"call",id:l,fun:"main",input:Array.prototype.slice.call(arguments)};return m.postMessage(I),i.once(l,(function(i){"success"===i.state?d.resolve(i.msg):d.reject(i.msg)})),d}function n(d){var l=d,c=l.mode;"emit"!==c&&"return"!==c||("emit"===c&&i.emit(l.evName,l.msg),"return"===c&&i.emit(l.id,l))}function o(d){i.emit("error",d)}return m.onmessage=function(d){n(d.data)},m.onerror=o,b(Array.prototype.slice.call(arguments)),i.main=Z,i.main=Z,i.terminate=I,i}I=function(){var d,c=(d=b.mark((function d(){var l,c,t,m=arguments;return b.wrap((function(d){for(;;)switch(d.prev=d.next){case 0:return l=Array.prototype.slice.call(m),c=o(),d.next=4,c.main.apply(c,i(l)).finally((function(){c.terminate()}));case 4:return t=d.sent,d.abrupt("return",t);case 6:case"end":return d.stop()}}),d)})),function(){var i=this,c=arguments;return new Promise((function(t,m){var I=d.apply(i,c);function b(d){l(I,t,m,b,Z,"next",d)}function Z(d){l(I,t,m,b,Z,"throw",d)}b(void 0)}))});return function(){return c.apply(this,arguments)}}()}();var X=I;export default X;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
|
|
2
|
+
import domIsVisible from 'wsemi/src/domIsVisible.mjs'
|
|
3
|
+
import genID from 'wsemi/src/genID.mjs'
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
function domVisible() {
|
|
7
|
+
let kpDv = {}
|
|
8
|
+
|
|
9
|
+
function emit(vnode, name, data) {
|
|
10
|
+
let handlers = (vnode.data && vnode.data.on) || (vnode.componentOptions && vnode.componentOptions.listeners)
|
|
11
|
+
if (handlers && handlers[name]) {
|
|
12
|
+
handlers[name].fns(data)
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function bind(el, binding, vnode) {
|
|
17
|
+
//console.log('bind', 'el', el, 'binding', binding, 'vnode', vnode)
|
|
18
|
+
|
|
19
|
+
//id
|
|
20
|
+
let id = `r${genID()}`
|
|
21
|
+
el.setAttribute('ev-visible', id)
|
|
22
|
+
|
|
23
|
+
//visible
|
|
24
|
+
let visible = false
|
|
25
|
+
|
|
26
|
+
//timer
|
|
27
|
+
let timer = setInterval(() => {
|
|
28
|
+
|
|
29
|
+
//domIsVisible
|
|
30
|
+
domIsVisible(el)
|
|
31
|
+
.then((v) => {
|
|
32
|
+
|
|
33
|
+
//check
|
|
34
|
+
if (visible === v) {
|
|
35
|
+
return
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
//update
|
|
39
|
+
visible = v
|
|
40
|
+
|
|
41
|
+
//emit
|
|
42
|
+
emit(vnode, 'domvisible', v)
|
|
43
|
+
|
|
44
|
+
})
|
|
45
|
+
.catch(() => {})
|
|
46
|
+
|
|
47
|
+
}, 20)
|
|
48
|
+
|
|
49
|
+
//save timer
|
|
50
|
+
kpDv[id] = timer
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
function unbind(el) {
|
|
55
|
+
//console.log('unbind', 'el', el)
|
|
56
|
+
|
|
57
|
+
//id
|
|
58
|
+
let id = el.getAttribute('ev-visible')
|
|
59
|
+
|
|
60
|
+
//remove attr
|
|
61
|
+
el.setAttribute('ev-visible', null)
|
|
62
|
+
|
|
63
|
+
//clear
|
|
64
|
+
if (kpDv[id]) {
|
|
65
|
+
|
|
66
|
+
//clear
|
|
67
|
+
clearInterval(kpDv[id])
|
|
68
|
+
|
|
69
|
+
//set null
|
|
70
|
+
kpDv[id] = null
|
|
71
|
+
|
|
72
|
+
//delete
|
|
73
|
+
delete kpDv[id]
|
|
74
|
+
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return {
|
|
80
|
+
bind,
|
|
81
|
+
unbind,
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
export default domVisible
|