@cuby-ui/core 0.0.567 → 0.0.569
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/components/sidebar/sidebar-header/sidebar-header.component.d.ts +1 -1
- package/components/sidebar/sidebar-navigation-item/sidebar-navigation-item.component.d.ts +1 -1
- package/editor/editor.component.d.ts +1 -0
- package/esm2022/editor/editor.component.mjs +15 -3
- package/fesm2022/cuby-ui-core.mjs +14 -2
- package/fesm2022/cuby-ui-core.mjs.map +1 -1
- package/package.json +4 -4
- package/widgets/ui/categories/components/category-item/category-item.component.d.ts +2 -2
- package/widgets/ui/loader/components/stated-loader/stated-loader.component.d.ts +1 -1
- package/widgets/ui/storage-list/components/storage-list-item/storage-list-item.component.d.ts +1 -1
|
@@ -4,7 +4,7 @@ export declare class CuiSidebarHeaderComponent {
|
|
|
4
4
|
private readonly document;
|
|
5
5
|
private readonly sidebarService;
|
|
6
6
|
protected readonly isOpened: import("@angular/core").Signal<boolean>;
|
|
7
|
-
protected readonly buttonIcon: import("@angular/core").Signal<"cuiIconLock2" | "cuiIconClipboardListBold" | "cuiIconClipboardCompletedBold" | "cuiIconStarOutlined" | "cuiIconSlashSm" | "cuiIconTextSm" | "cuiIconSlash" | "cuiIconSaveSm" | "cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconVector" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconMinusCircleSm" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconPlusCircleSm" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconDangerTriangleBold" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlay" | "cuiIconPlaySm" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoardBold" | "cuiIconClipBoard" | "cuiIconClipBoardSm" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconChecklistBold" | "cuiIconChecklistBoldSm" | "cuiIconChatBoldSm" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMaximize2" | "cuiIconMaximize2Sm" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapse" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello" | "cuiIconLogOut" | "cuiIconOrderSm" | "cuiIconCalendarSm" | "cuiIconMapPin" | "cuiIconBuildingSm" | "cuiIconStopCircleSm" | "cuiIconPauseCircleSm" | "cuiIconPlayCircleFilledSm" | "cuiIconMenuSm" | "cuiIconTeaCupSm" | "cuiIconSubstageInstructionSm" | "cuiIconTaskInstructionSm" | "cuiIconToolsInstructionSm" | "cuiIconApprovalInstructionSm" | "cuiIconQuestionCircleBold" | "cuiIconClockBold" | "cuiIconHammerBold" | "cuiIconAlignLeftSm" | "cuiIconChecklistSm" | "cuiIconMessageSquare" | "cuiIconMessageSquareSm" | "cuiIconHideSidebarL" | "cuiIconHideSidebarR" | "cuiIconHideSidebarLSm" | "cuiIconHideSidebarRSm" | "cuiIconSurfaceArea" | "cuiIconMinimize2" | "cuiIconMinimize2Sm" | "cuiIconHistorySm" | "cuiIconSun" | "cuiIconGlobeSm" | "cuiIconPaletteSm" | "cuiIconLogOutSm" | "cuiIconLogo" | "cuiIconBoldFileDefaultSm" | "cuiIconEyeBold" | "cuiIconEyeBoldSm" | "cuiIconCardsSm" | "cuiIconToolsPlaceholder" | "cuiIconPartsPlaceholder" | "cuiIconMaterialsPlaceholder" | "cuiIconDefaultPlaceholder" | "cuiIconLinear" | "cuiIconReversed" | "cuiIconFeatherPenSolid" | "cuiIconMagicSm" | "cuiIconSafetyBlockSm" | "cuiIconSandglassSm" | "cuiIconGameSm" | "cuiIconGame" | "cuiIconFlowLogic" | "cuiIconTarget" | "cuiIconTargetSm" | "cuiIconBlocking" | "cuiIconCrosshair0" | "cuiIconMic" | "cuiIconSend" | "cuiIconWarehouse" | "cuiIconAuxiliary" | "cuiIconLaserAndMilling" | "cuiIconPipeCutter" | "cuiIconConductor" | "cuiIconWorkbench" | "cuiIconTransitional" | "cuiIconConveyor" | "cuiIconCombinedConveyor" | "cuiIconCombined" | "cuiIconReviewSm" | "cuiIconOnlineReviewSm">;
|
|
7
|
+
protected readonly buttonIcon: import("@angular/core").Signal<"cuiIconLock2" | "cuiIconClipboardListBold" | "cuiIconClipboardCompletedBold" | "cuiIconStarOutlined" | "cuiIconSlashSm" | "cuiIconTextSm" | "cuiIconSlash" | "cuiIconSaveSm" | "cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconVector" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconMinusCircleSm" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconPlusCircleSm" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconDangerTriangleBold" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlay" | "cuiIconPlaySm" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoardBold" | "cuiIconClipBoard" | "cuiIconClipBoardSm" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconChecklistBold" | "cuiIconChecklistBoldSm" | "cuiIconChatBoldSm" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMaximize2" | "cuiIconMaximize2Sm" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapse" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello" | "cuiIconLogOut" | "cuiIconOrderSm" | "cuiIconCalendarSm" | "cuiIconMapPin" | "cuiIconBuildingSm" | "cuiIconStopCircleSm" | "cuiIconPauseCircleSm" | "cuiIconPlayCircleFilledSm" | "cuiIconMenuSm" | "cuiIconTeaCupSm" | "cuiIconSubstageInstructionSm" | "cuiIconTaskInstructionSm" | "cuiIconToolsInstructionSm" | "cuiIconApprovalInstructionSm" | "cuiIconQuestionCircleBold" | "cuiIconClockBold" | "cuiIconHammerBold" | "cuiIconAlignLeftSm" | "cuiIconChecklistSm" | "cuiIconMessageSquare" | "cuiIconMessageSquareSm" | "cuiIconHideSidebarL" | "cuiIconHideSidebarR" | "cuiIconHideSidebarLSm" | "cuiIconHideSidebarRSm" | "cuiIconSurfaceArea" | "cuiIconMinimize2" | "cuiIconMinimize2Sm" | "cuiIconHistorySm" | "cuiIconSun" | "cuiIconGlobe" | "cuiIconGlobeSm" | "cuiIconPaletteSm" | "cuiIconLogOutSm" | "cuiIconLogo" | "cuiIconBoldFileDefaultSm" | "cuiIconEyeBold" | "cuiIconEyeBoldSm" | "cuiIconCardsSm" | "cuiIconToolsPlaceholder" | "cuiIconPartsPlaceholder" | "cuiIconMaterialsPlaceholder" | "cuiIconDefaultPlaceholder" | "cuiIconLinear" | "cuiIconReversed" | "cuiIconFeatherPenSolid" | "cuiIconMagicSm" | "cuiIconSafetyBlockSm" | "cuiIconSandglassSm" | "cuiIconGameSm" | "cuiIconGame" | "cuiIconFlowLogic" | "cuiIconTarget" | "cuiIconTargetSm" | "cuiIconBlocking" | "cuiIconCrosshair0" | "cuiIconMic" | "cuiIconSend" | "cuiIconWarehouse" | "cuiIconAuxiliary" | "cuiIconLaserAndMilling" | "cuiIconPipeCutter" | "cuiIconConductor" | "cuiIconWorkbench" | "cuiIconTransitional" | "cuiIconConveyor" | "cuiIconCombinedConveyor" | "cuiIconCombined" | "cuiIconReviewSm" | "cuiIconOnlineReviewSm" | "cuiIconBlockingSm" | "cuiIconFlowOnSm" | "cuiIconFileGBLSm" | "cuiIconUploadImageSm">;
|
|
8
8
|
readonly headerSlot: import("@angular/core").InputSignal<TemplateRef<unknown>>;
|
|
9
9
|
protected onSwitch(event: MouseEvent): void;
|
|
10
10
|
static ɵfac: i0.ɵɵFactoryDeclaration<CuiSidebarHeaderComponent, never>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from "@angular/core";
|
|
2
2
|
export declare class CuiSidebarNavigationItemComponent {
|
|
3
3
|
readonly text: import("@angular/core").InputSignal<string>;
|
|
4
|
-
readonly icon: import("@angular/core").InputSignal<"cuiIconLock2" | "cuiIconClipboardListBold" | "cuiIconClipboardCompletedBold" | "cuiIconStarOutlined" | "cuiIconSlashSm" | "cuiIconTextSm" | "cuiIconSlash" | "cuiIconSaveSm" | "cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconVector" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconMinusCircleSm" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconPlusCircleSm" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconDangerTriangleBold" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlay" | "cuiIconPlaySm" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoardBold" | "cuiIconClipBoard" | "cuiIconClipBoardSm" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconChecklistBold" | "cuiIconChecklistBoldSm" | "cuiIconChatBoldSm" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMaximize2" | "cuiIconMaximize2Sm" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapse" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello" | "cuiIconLogOut" | "cuiIconOrderSm" | "cuiIconCalendarSm" | "cuiIconMapPin" | "cuiIconBuildingSm" | "cuiIconStopCircleSm" | "cuiIconPauseCircleSm" | "cuiIconPlayCircleFilledSm" | "cuiIconMenuSm" | "cuiIconTeaCupSm" | "cuiIconSubstageInstructionSm" | "cuiIconTaskInstructionSm" | "cuiIconToolsInstructionSm" | "cuiIconApprovalInstructionSm" | "cuiIconQuestionCircleBold" | "cuiIconClockBold" | "cuiIconHammerBold" | "cuiIconAlignLeftSm" | "cuiIconChecklistSm" | "cuiIconMessageSquare" | "cuiIconMessageSquareSm" | "cuiIconHideSidebarL" | "cuiIconHideSidebarR" | "cuiIconHideSidebarLSm" | "cuiIconHideSidebarRSm" | "cuiIconSurfaceArea" | "cuiIconMinimize2" | "cuiIconMinimize2Sm" | "cuiIconHistorySm" | "cuiIconSun" | "cuiIconGlobeSm" | "cuiIconPaletteSm" | "cuiIconLogOutSm" | "cuiIconLogo" | "cuiIconBoldFileDefaultSm" | "cuiIconEyeBold" | "cuiIconEyeBoldSm" | "cuiIconCardsSm" | "cuiIconToolsPlaceholder" | "cuiIconPartsPlaceholder" | "cuiIconMaterialsPlaceholder" | "cuiIconDefaultPlaceholder" | "cuiIconLinear" | "cuiIconReversed" | "cuiIconFeatherPenSolid" | "cuiIconMagicSm" | "cuiIconSafetyBlockSm" | "cuiIconSandglassSm" | "cuiIconGameSm" | "cuiIconGame" | "cuiIconFlowLogic" | "cuiIconTarget" | "cuiIconTargetSm" | "cuiIconBlocking" | "cuiIconCrosshair0" | "cuiIconMic" | "cuiIconSend" | "cuiIconWarehouse" | "cuiIconAuxiliary" | "cuiIconLaserAndMilling" | "cuiIconPipeCutter" | "cuiIconConductor" | "cuiIconWorkbench" | "cuiIconTransitional" | "cuiIconConveyor" | "cuiIconCombinedConveyor" | "cuiIconCombined" | "cuiIconReviewSm" | "cuiIconOnlineReviewSm" | undefined>;
|
|
4
|
+
readonly icon: import("@angular/core").InputSignal<"cuiIconLock2" | "cuiIconClipboardListBold" | "cuiIconClipboardCompletedBold" | "cuiIconStarOutlined" | "cuiIconSlashSm" | "cuiIconTextSm" | "cuiIconSlash" | "cuiIconSaveSm" | "cuiIconLoading" | "cuiIconCheck" | "cuiIconCheckSm" | "cuiIconCheckCircle" | "cuiIconCheckCircleSm" | "cuiIconCheckCircleV2" | "cuiIconMoreVertical" | "cuiIconMoreVerticalSm" | "cuiIconTrash" | "cuiIconTrashSm" | "cuiIconEdit" | "cuiIconEditSm" | "cuiIconArrowSortSm" | "cuiIconX" | "cuiIconXSm" | "cuiIconXCircle" | "cuiIconXCircleSm" | "cuiIconVector" | "cuiIconClear" | "cuiIconClearSm" | "cuiIconEye" | "cuiIconEyeSm" | "cuiIconEyeOff" | "cuiIconEyeOffSm" | "cuiIconChevronUp" | "cuiIconChevronUpSm" | "cuiIconChevronRight" | "cuiIconChevronRightSm" | "cuiIconChevronDown" | "cuiIconChevronDownSm" | "cuiIconChevronLeft" | "cuiIconChevronLeftSm" | "cuiIconChevronsRight" | "cuiIconChevronsRightSm" | "cuiIconChevronsLeft" | "cuiIconMinusCircleSm" | "cuiIconChevronsLeftSm" | "cuiIconChevronsSwitch" | "cuiIconDatabase" | "cuiIconDatabaseSm" | "cuiIconHome" | "cuiIconHomeSm" | "cuiIconUser" | "cuiIconUserSm" | "cuiIconUsers" | "cuiIconUsersBg" | "cuiIconUsersSm" | "cuiIconUserPlus" | "cuiIconUserPlusSm" | "cuiIconFormula" | "cuiIconSettings" | "cuiIconSettingsSm" | "cuiIconSettingsBold" | "cuiIconCopy" | "cuiIconCopySm" | "cuiIconSidebar" | "cuiIconSidebarSm" | "cuiIconChart" | "cuiIconFolder" | "cuiIconFolderSm" | "cuiIconFolderOpen" | "cuiIconFolderOpenSm" | "cuiIconPlus" | "cuiIconPlusSm" | "cuiIconPlusCircle" | "cuiIconPlusCircleSm" | "cuiIconFiltersLines" | "cuiIconFiltersLinesSm" | "cuiIconSearch" | "cuiIconSearchSm" | "cuiIconGrid" | "cuiIconGridSm" | "cuiIconList" | "cuiIconListSm" | "cuiIconProgress" | "cuiIconSortAZSm" | "cuiIconFlagBold" | "cuiIconFileText" | "cuiIconFileTextSm" | "cuiIconLink" | "cuiIconExternalLinkSm" | "cuiIconLinkBroken" | "cuiIconLinkBrokenSm" | "cuiIconClock" | "cuiIconClockSm" | "cuiIconInfo" | "cuiIconInfoSm" | "cuiIconInfoCircle" | "cuiIconInfoCircleBg" | "cuiIconDangerTriangleBold" | "cuiIconAlertTriangle" | "cuiIconAlertTriangleSm" | "cuiIconAlertCircle" | "cuiIcon2Layers" | "cuiIcon2LayersSm" | "cuiIcon3Layers" | "cuiIcon3LayersSm" | "cuiIconLearningSm" | "cuiIconBellSm" | "cuiIconMessageCircle" | "cuiIconMessageCircleSm" | "cuiIconSlashDivider" | "cuiIconCaretDownFillXxs" | "cuiIconCaretDownFill" | "cuiIconDragHandleDots" | "cuiIconPlay" | "cuiIconPlaySm" | "cuiIconPlayCircle" | "cuiIconPlayCircleSm" | "cuiIconClipBoardBold" | "cuiIconClipBoard" | "cuiIconClipBoardSm" | "cuiIconUpload" | "cuiIconUploadSm" | "cuiIconMaximize" | "cuiIconMaximizeSm" | "cuiIconArrowUpRight" | "cuiIconArrowUpRightSm" | "cuiIconAddBranchSm" | "cuiIconBranch" | "cuiIconBranchSm" | "cuiIconPaperclip" | "cuiIconPaperclipSm" | "cuiIconToolsSm" | "cuiIconPartsSm" | "cuiIconEquipmentSm" | "cuiIconPrimitive" | "cuiIconPrimitiveSm" | "cuiIconSpool" | "cuiIconSpoolSm" | "cuiIconTank" | "cuiIconTankSm" | "cuiIconAssembly" | "cuiIconAssemblySm" | "cuiIconVariant" | "cuiIconVariantSm" | "cuiIconRichText" | "cuiIconRichTextSm" | "cuiIconChecklist" | "cuiIconChecklistBold" | "cuiIconChecklistBoldSm" | "cuiIconChatBoldSm" | "cuiIconRefreshCcwSm" | "cuiIconRefreshCcw" | "cuiIconBarChartSm" | "cuiIconBarChart" | "cuiIconCurvedArrow" | "cuiIconBulletFillSm" | "cuiIconBulletSm" | "cuiIconArrowRight" | "cuiIconArrowRightSm" | "cuiIconImage" | "cuiIconCutLinearSm" | "cuiIconCutLinear" | "cuiIconForkLift" | "cuiIconForkLiftSm" | "cuiIconPartPrimitive" | "cuiIconPartPrimitiveSm" | "cuiIconChecklistsSm" | "cuiIconViewInAr" | "cuiIconViewInArSm" | "cuiIconFloorplanSolid" | "cuiIconFloorplanSolidSm" | "cuiIconMoon" | "cuiIconMaximize2" | "cuiIconMaximize2Sm" | "cuiIconMoonSm" | "cuiIconSunSm" | "cuiIconTool" | "cuiIconToolSm" | "cuiIconCamera" | "cuiIconPanModeSm" | "cuiIconCrane" | "cuiIconCraneSm" | "cuiIconBin" | "cuiIconBinSm" | "cuiIconAuxSm" | "cuiIcon5sSm" | "cuiIconRackSm" | "cuiIconComputerChipSm" | "cuiIconRack" | "cuiIconAccessories" | "cuiIconAccessoriesSm" | "cuiIconLogisticVehicle" | "cuiIconLogisticVehicleSm" | "cuiIconCollapse" | "cuiIconCollapseSm" | "cuiIconBookOpenSm" | "cuiIconBriefcaseSm" | "cuiIconCreditCardSm" | "cuiIconTrelloSm" | "cuiIconBookOpen" | "cuiIconBriefcase" | "cuiIconCreditCard" | "cuiIconTrello" | "cuiIconLogOut" | "cuiIconOrderSm" | "cuiIconCalendarSm" | "cuiIconMapPin" | "cuiIconBuildingSm" | "cuiIconStopCircleSm" | "cuiIconPauseCircleSm" | "cuiIconPlayCircleFilledSm" | "cuiIconMenuSm" | "cuiIconTeaCupSm" | "cuiIconSubstageInstructionSm" | "cuiIconTaskInstructionSm" | "cuiIconToolsInstructionSm" | "cuiIconApprovalInstructionSm" | "cuiIconQuestionCircleBold" | "cuiIconClockBold" | "cuiIconHammerBold" | "cuiIconAlignLeftSm" | "cuiIconChecklistSm" | "cuiIconMessageSquare" | "cuiIconMessageSquareSm" | "cuiIconHideSidebarL" | "cuiIconHideSidebarR" | "cuiIconHideSidebarLSm" | "cuiIconHideSidebarRSm" | "cuiIconSurfaceArea" | "cuiIconMinimize2" | "cuiIconMinimize2Sm" | "cuiIconHistorySm" | "cuiIconSun" | "cuiIconGlobe" | "cuiIconGlobeSm" | "cuiIconPaletteSm" | "cuiIconLogOutSm" | "cuiIconLogo" | "cuiIconBoldFileDefaultSm" | "cuiIconEyeBold" | "cuiIconEyeBoldSm" | "cuiIconCardsSm" | "cuiIconToolsPlaceholder" | "cuiIconPartsPlaceholder" | "cuiIconMaterialsPlaceholder" | "cuiIconDefaultPlaceholder" | "cuiIconLinear" | "cuiIconReversed" | "cuiIconFeatherPenSolid" | "cuiIconMagicSm" | "cuiIconSafetyBlockSm" | "cuiIconSandglassSm" | "cuiIconGameSm" | "cuiIconGame" | "cuiIconFlowLogic" | "cuiIconTarget" | "cuiIconTargetSm" | "cuiIconBlocking" | "cuiIconCrosshair0" | "cuiIconMic" | "cuiIconSend" | "cuiIconWarehouse" | "cuiIconAuxiliary" | "cuiIconLaserAndMilling" | "cuiIconPipeCutter" | "cuiIconConductor" | "cuiIconWorkbench" | "cuiIconTransitional" | "cuiIconConveyor" | "cuiIconCombinedConveyor" | "cuiIconCombined" | "cuiIconReviewSm" | "cuiIconOnlineReviewSm" | "cuiIconBlockingSm" | "cuiIconFlowOnSm" | "cuiIconFileGBLSm" | "cuiIconUploadImageSm" | undefined>;
|
|
5
5
|
readonly active: import("@angular/core").InputSignal<boolean | undefined>;
|
|
6
6
|
readonly isOpen: import("@angular/core").InputSignal<boolean | undefined>;
|
|
7
7
|
static ɵfac: i0.ɵɵFactoryDeclaration<CuiSidebarNavigationItemComponent, never>;
|
|
@@ -44,6 +44,7 @@ export declare class CuiEditorComponent implements OnDestroy {
|
|
|
44
44
|
private onAddedCombinedBlock;
|
|
45
45
|
private onUpdatedCombinedBlock;
|
|
46
46
|
private onRemovedCombinedBlock;
|
|
47
|
+
private recalculateAllBlocksAfterRemoval;
|
|
47
48
|
private initEditorEffect;
|
|
48
49
|
private initEditorChanges;
|
|
49
50
|
private initEditor;
|
|
@@ -76,7 +76,6 @@ export class CuiEditorComponent {
|
|
|
76
76
|
if (!Array.isArray(event)) {
|
|
77
77
|
event = [event];
|
|
78
78
|
}
|
|
79
|
-
recalculateIndexes(this.editor.blocks);
|
|
80
79
|
if (this.isChanging) {
|
|
81
80
|
this.changesQueue.unshift(event);
|
|
82
81
|
}
|
|
@@ -104,7 +103,19 @@ export class CuiEditorComponent {
|
|
|
104
103
|
if (!blockIds.length) {
|
|
105
104
|
return;
|
|
106
105
|
}
|
|
107
|
-
this.
|
|
106
|
+
this.recalculateAllBlocksAfterRemoval(blockIds);
|
|
107
|
+
}
|
|
108
|
+
recalculateAllBlocksAfterRemoval(blockIds) {
|
|
109
|
+
const remainingRemovedBlockIds = new Set(blockIds);
|
|
110
|
+
this.updatedBlocks = this.updatedBlocks.filter((updatedBlock) => !remainingRemovedBlockIds.has(updatedBlock.id ?? ''));
|
|
111
|
+
this.addedBlocks = this.addedBlocks.filter((addedBlock) => {
|
|
112
|
+
if (!remainingRemovedBlockIds.has(addedBlock.id)) {
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
remainingRemovedBlockIds.delete(addedBlock.id);
|
|
116
|
+
return false;
|
|
117
|
+
});
|
|
118
|
+
this.removedBlocksIds.push(...remainingRemovedBlockIds.values());
|
|
108
119
|
}
|
|
109
120
|
initEditorEffect() {
|
|
110
121
|
effect(() => {
|
|
@@ -188,6 +199,7 @@ export class CuiEditorComponent {
|
|
|
188
199
|
this.isChanging = true;
|
|
189
200
|
try {
|
|
190
201
|
const editorOutput = await this.editor.save();
|
|
202
|
+
recalculateIndexes(this.editor.blocks);
|
|
191
203
|
const events = event.filter((data) => data.detail.target.name !== COMBINED_TEXT_BLOCK_NAME);
|
|
192
204
|
const blocks = this.editorService.sortEventsByTypes(events);
|
|
193
205
|
const { addBlocks$, addedBlocks } = this.collectAddedBlocksRequest(blocks, editorOutput);
|
|
@@ -409,4 +421,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
409
421
|
}
|
|
410
422
|
], template: "<div\n #editor\n [id]=\"editorId\"\n data-editor\n [class._readonly]=\"config().readOnly\"\n></div>\n", styles: [":host{--textColor: var(--cui-base-900);--menuBackground: var(--cui-base-0);--menuBorder: var(--cui-base-200);--menuItemHover: var(--cui-base-10);--menuItemBackground: var(cui-base-900);--menuIconBackground: var(--cui-base-50);--menuIconHover: var(--cui-base-10);font-weight:400;font-size:14px;line-height:20px;font-family:var(--cui-main-font)}:host ::ng-deep .ce-popover{--color-background: var(--menuBackground);--color-text-primary: var(--textColor);--color-border: var(--menuBorder);--color-border-icon: var(--menuBorder);--color-background-item: var(--menuItemBackground);--color-background-item-hover: var(--menuItemHover)}:host ::ng-deep .ce-popover__search{background:var(--menuIconBackground)}:host ::ng-deep .ce-popover .ce-popover-item__icon{background:var(--menuIconBackground)}:host ::ng-deep .ce-conversion-toolbar{background-color:var(--menuBackground);border-color:var(--menuBorder)}:host ::ng-deep .ce-conversion-toolbar__tools{padding:0 6px 6px}:host ::ng-deep .ce-conversion-tool{padding:3px;border-radius:6px}:host ::ng-deep .ce-conversion-tool__icon{border:1px solid var(--menuBorder);background-color:var(--menuIconBackground);box-shadow:none}:host ::ng-deep .ce-conversion-tool:hover{background-color:var(--menuItemHover)}:host ::ng-deep .ce-conversion-tool:hover .ce-conversion-tool__icon{border-color:var(--menuIconHover)}:host ::ng-deep .combined-text-block{padding:.4em 0;line-height:1.6em;outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part{outline:none}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child,:host ::ng-deep .combined-text-block .combined-text-block-part._selected{display:list-item}:host ::ng-deep .combined-text-block .combined-text-block-part:only-child::marker,:host ::ng-deep .combined-text-block .combined-text-block-part._selected::marker{content:\"\"}:host ::ng-deep .image-tool__image{border:1px solid var(--cui-base-200);background-color:var(--cui-base-0)}:host ::ng-deep .image-tool__image-preloader{background-color:var(--cui-base-200)}:host ::ng-deep .image-tool__image-preloader:after{border:1px solid var(--cui-base-200);border-top:1px solid var(--cui-blue-600)}:host ::ng-deep .cdx-button{border-radius:8px;border:1px solid var(--cui-base-200);color:var(--textColor);background-color:var(--cui-base-10);box-shadow:none}:host ::ng-deep .ce-inline-toolbar{border-color:var(--cui-base-100);color:var(--textColor);background-color:var(--cui-base-0)}:host ::ng-deep .ce-inline-toolbar__dropdown:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-inline-tool:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{color:var(--cui-base-500)}:host ::ng-deep .ce-toolbar__plus:hover,:host ::ng-deep .ce-toolbar__settings-btn:hover{background-color:var(--cui-base-100)}:host ::ng-deep .ce-toolbar__actions{right:100%}:host ::ng-deep .ce-toolbar__content{max-width:none}@media (max-width: 650px){:host ::ng-deep .ce-toolbar__plus,:host ::ng-deep .ce-toolbar__settings-btn{border-color:var(--menuBorder);background-color:var(--menuBackground)}:host ::ng-deep .ce-toolbar__actions{inset:0 auto auto 0}}:host ::ng-deep .ce-block--selected .ce-block__content{background-color:var(--cui-base-200)}:host ::ng-deep .ce-block__content{max-width:100%}:host ::ng-deep .ce-block:only-of-type .combined-text-block[data-placeholder-active][data-empty=true]:before{content:attr(data-placeholder-active);position:absolute;color:var(--cui-base-400)}:host ::ng-deep [data-editor]{padding-right:4px;width:100%;height:100%;min-height:200px;overflow:hidden auto;scrollbar-gutter:stable}:host ::ng-deep [data-editor] .codex-editor{margin-left:60px}:host ::ng-deep [data-editor] .codex-editor--narrow .ce-popover{right:auto}:host ::ng-deep [data-editor] .codex-editor__redactor{margin-right:auto;padding-bottom:260px!important}@media (max-width: 650px){:host ::ng-deep [data-editor] .codex-editor{margin-left:0}}:host ::ng-deep [data-editor]._readonly{min-height:auto}:host ::ng-deep [data-editor]._readonly .codex-editor{margin:auto}:host ::ng-deep [data-editor]._readonly .codex-editor__redactor{padding-bottom:0!important}:host ::ng-deep [data-editor]._readonly .combined-text-block{padding:0}:host ::ng-deep [data-editor] [data-item-name=move-up],:host ::ng-deep [data-editor] [data-item-name=move-down],:host ::ng-deep [data-editor] [data-tool=paragraph]{display:none}:host ::ng-deep [data-editor] *::selection{background:var(--cui-base-200)}:host ::ng-deep [data-editor] a{color:var(--cui-light-blue-600)}:host ::ng-deep .marker{cursor:pointer;text-decoration:underline;color:var(--cui-light-blue-600);background-color:transparent}:host ::ng-deep .tool-marker,:host ::ng-deep .role-marker{margin:0 5px}:host ::ng-deep .tool-marker{color:#e97c00}:host ::ng-deep .role-marker{color:#8803f1}.form{height:100%}\n"] }]
|
|
411
423
|
}], ctorParameters: () => [] });
|
|
412
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBaUJqRSxNQUFNLE9BQU8s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LGdCQUFnQjt3QkFDaEI7NEJBQ0csT0FBTyxFQUFFLHFCQUFxQjs0QkFDOUIsVUFBVSxFQUFFLEdBQUcsRUFBRSxDQUNaLE1BQU0sQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksSUFBSSxrQkFBa0IsRUFBRTt5QkFDcEc7cUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVsZW1lbnRSZWYsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDb21wb25lbnQsXG4gICAgY29tcHV0ZWQsXG4gICAgRGVzdHJveVJlZixcbiAgICBlZmZlY3QsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICB2aWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgdHlwZSB7IEN1aU51bGxhYmxlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB7IEN1aUlkU2VydmljZSB9IGZyb20gJ0BjdWJ5LXVpL2Nkayc7XG5pbXBvcnQgdHlwZSB7IEFQSSwgQmxvY2tNdXRhdGlvbkV2ZW50LCBPdXRwdXREYXRhIH0gZnJvbSAnQGVkaXRvcmpzL2VkaXRvcmpzJztcbmltcG9ydCBFZGl0b3JKUyBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IHR5cGUgeyBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7XG4gICAgY29uY2F0TWFwLFxuICAgIGRlbGF5LFxuICAgIGZpbmFsaXplLFxuICAgIGZyb21FdmVudCxcbiAgICBtYXAsXG4gICAgU3ViamVjdCxcbiAgICB0YWtlV2hpbGUsXG4gICAgdGFwLFxuICAgIHRocm90dGxlVGltZSxcbiAgICB0aW1lcixcbiAgICB0b0FycmF5XG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ1VJX0pURVhUX0FQSV9TRVJWSUNFLCBDdWlCbG9jaywgQ3VpSlRleHRBcGlTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvYXBpJztcblxuaW1wb3J0IHsgZ2V0RWRpdG9yQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IHsgQ09NQklORURfVEVYVF9CTE9DS19OQU1FLCBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQsIERFRkFVTFRfQ09ORklHIH0gZnJvbSAnLi9jb25zdGFudHMvZWRpdG9yLmNvbnN0YW50cyc7XG5pbXBvcnQgeyBzZXRFZGl0b3JFdmVudHMgfSBmcm9tICcuL2V2ZW50cy9zZXQtZWRpdG9yLWV2ZW50cyc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQ3VpQmxvY2tEYXRhLFxuICAgIEN1aUJsb2Nrc1JlcXVlc3REYXRhLFxuICAgIEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCxcbiAgICBDdWlDb21iaW5lZEJsb2NrVG9vbERhdGEsXG4gICAgQ3VpQ29tYmluZWRQYXJ0QmxvY2ssXG4gICAgQ3VpRWRpdG9yQ29uZmlnLFxuICAgIEN1aUV2ZW50QWN0aW9uRGF0YSxcbiAgICBDdWlGdWxsQmxvY2tEYXRhXG59IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBDdWlFZGl0b3JTZXJ2aWNlLCBFdmVudEFjdGlvbnMgfSBmcm9tICcuL3NlcnZpY2VzJztcbmltcG9ydCB7IHJlY2FsY3VsYXRlSW5kZXhlcyB9IGZyb20gJy4vdXRpbHMvcmVjYWxjdWxhdGUtaW5kZXhlcyc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnY3VpLWVkaXRvcicsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZVVybDogJy4vZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9lZGl0b3IuY29tcG9uZW50LnNjc3MnXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgQ3VpRWRpdG9yU2VydmljZSxcbiAgICAgICAge1xuICAgICAgICAgICBwcm92aWRlOiBDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsXG4gICAgICAgICAgIHVzZUZhY3Rvcnk6ICgpID0+XG4gICAgICAgICAgICAgICAgaW5qZWN0KENVSV9KVEVYVF9BUElfU0VSVklDRSwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSkgPz8gbmV3IEN1aUpUZXh0QXBpU2VydmljZSgpXG4gICAgICAgIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIEN1aUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95ID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY3VpSWRTZXJ2aWNlID0gaW5qZWN0KEN1aUlkU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBlZGl0b3JTZXJ2aWNlID0gaW5qZWN0KEN1aUVkaXRvclNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgalRleHRTZXJ2aWNlID0gaW5qZWN0KENVSV9KVEVYVF9BUElfU0VSVklDRSk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IFBPT0xJTkdfREVMQVkgPSAxMDA7XG4gICAgcHJpdmF0ZSByZWFkb25seSBFTEVNRU5UX1NQQUNFX1RPX0JPVFRPTSA9IDE1MDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IFNDUk9MTF9USFJPVFRMRV9USU1FID0gMjAwO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbXB0eVF1ZXVlID0gbmV3IFN1YmplY3QoKTtcblxuICAgIHByaXZhdGUgcG9vbGluZ1N1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHNjcm9sbFN1YnNjcmlwdGlvbiE6IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIGlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZTogYm9vbGVhbltdID0gW107XG4gICAgcHJpdmF0ZSBpc0ZpcnN0ID0gdHJ1ZTtcbiAgICBwcml2YXRlIGlzQ2hhbmdpbmcgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzU2tpcCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICBwcml2YXRlIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgLy8g0J3Rg9C20LXQvSDQtNC70Y8g0YHQvtC+0YLQvdC+0YjQtdC90LjRjyDQu9C+0LrQsNC70YzQvdC+0LPQviBJRCDQuCDQvtGB0L3QvtCy0L3QvtCz0L4gSUQg0L/QvtGB0LvQtSDRgdC+0LfQtNCw0L3QuNGPINGN0LvQtdC80LXQvdGC0LBcbiAgICBwcml2YXRlIGJsb2NrSWRzTWFwID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBwcml2YXRlIGNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgaW5kZXggPSAwO1xuICAgIHByaXZhdGUgcGFnZSA9IDA7XG4gICAgcHJpdmF0ZSBhZGRlZEJsb2NrczogQ3VpQmxvY2tEYXRhW10gPSBbXTtcbiAgICBwcml2YXRlIHVwZGF0ZWRCbG9ja3M6IEN1aUJsb2NrW10gPSBbXTtcbiAgICBwcml2YXRlIHJlbW92ZWRCbG9ja3NJZHM6IHN0cmluZ1tdID0gW107XG4gICAgcHJpdmF0ZSBjaGFuZ2VzUXVldWU6IEJsb2NrTXV0YXRpb25FdmVudFtdW10gPSBbXTtcbiAgICBwcml2YXRlIGFib3J0Q29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JJZCA9IHRoaXMuY3VpSWRTZXJ2aWNlLmdlbmVyYXRlKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGlzUmVhZG9ubHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbmZpZygpPy5yZWFkT25seSk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZWRpdG9yUmVmID0gdmlld0NoaWxkLnJlcXVpcmVkPEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+PignZWRpdG9yJyk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yQXBpSWQgPSBpbnB1dC5yZXF1aXJlZDxzdHJpbmc+KCk7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbmZpZyA9IGlucHV0PEN1aUVkaXRvckNvbmZpZz4oREVGQVVMVF9DT05GSUcpO1xuICAgIHB1YmxpYyByZWFkb25seSByZXF1ZXN0U2l6ZSA9IGlucHV0PG51bWJlcj4oNDApO1xuXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRvckVtcHR5ID0gb3V0cHV0PGJvb2xlYW4+KCk7XG5cbiAgICBwdWJsaWMgZWRpdG9yITogRWRpdG9ySlM7XG4gICAgcHVibGljIGVkaXRvckVsZW1lbnQhOiBIVE1MRWxlbWVudDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLmluaXRFZGl0b3JFZmZlY3QoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNEZXN0cm95ZWQgPSB0cnVlO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25TY3JvbGxFdmVudChlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCBvdmVyYWxsSGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSB0aGlzLkVMRU1FTlRfU1BBQ0VfVE9fQk9UVE9NO1xuICAgICAgICBjb25zdCBjdXJyZW50SGVpZ2h0ID0gZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodDtcblxuICAgICAgICBpZiAoY3VycmVudEhlaWdodCA8IG92ZXJhbGxIZWlnaHQgfHwgdGhpcy5pc1JlcXVlc3RlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IHRydWU7XG5cbiAgICAgICAgY29uc3Qgc2l6ZSA9IHRoaXMucmVxdWVzdFNpemUoKTtcbiAgICAgICAgbGV0IGJsb2Nrc0NvdW50ID0gMDtcblxuICAgICAgICB0aGlzLmdldEJsb2Nrcyh0aGlzLnBhZ2UsIHNpemUpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJsb2NrcykgPT4gKGJsb2Nrc0NvdW50ID0gYmxvY2tzLmxlbmd0aCkpLFxuICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pc1JlcXVlc3RlZCA9IGZhbHNlO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChibG9ja3NDb3VudCA+PSBzaXplKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgdGhpcy5wYWdlKys7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbkVkaXRvckNoYW5nZShfOiBBUEksIGV2ZW50OiBCbG9ja011dGF0aW9uRXZlbnQgfCBCbG9ja011dGF0aW9uRXZlbnRbXSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkgfHwgdGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgICAgZXZlbnQgPSBbZXZlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG5cbiAgICAgICAgaWYgKHRoaXMuaXNDaGFuZ2luZykge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUudW5zaGlmdChldmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnN0YXJ0Q2hhbmdlcyhldmVudCk7XG4gICAgICAgIHRoaXMuZWRpdG9yRW1wdHkuZW1pdCh0aGlzLmNoZWNrSXNFbXB0eSgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uQWRkZWRDb21iaW5lZEJsb2NrKGRhdGE6IEN1aUNvbWJpbmVkQmxvY2tBZGRpbmdFdmVudCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wb3AoKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmxvY2tzV2l0aG91dElkID0gZGF0YS5ibG9ja3MubWFwKChibG9jaykgPT4gKHtcbiAgICAgICAgICAgIGJsb2NrOiB7IC4uLmJsb2NrLCBpZDogdW5kZWZpbmVkIH0sXG4gICAgICAgICAgICBpZDogYmxvY2suaWQhXG4gICAgICAgIH0pKTtcblxuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzLnB1c2goLi4uYmxvY2tzV2l0aG91dElkKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uVXBkYXRlZENvbWJpbmVkQmxvY2sodXBkYXRlZEJsb2NrczogQ3VpQmxvY2tbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIXVwZGF0ZWRCbG9ja3MubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MucHVzaCguLi51cGRhdGVkQmxvY2tzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uUmVtb3ZlZENvbWJpbmVkQmxvY2soYmxvY2tJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMucHVzaCguLi5ibG9ja0lkcyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRWZmZWN0KCk6IHZvaWQge1xuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yQXBpSWQoKSB8fCB0aGlzLmNvbmZpZygpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckNoYW5nZXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgeyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5qVGV4dFNlcnZpY2UuYWRkT3B0aW9ucyh0aGlzLmNvbmZpZygpPy5yZXF1ZXN0T3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5lZGl0b3IgPSB0aGlzLmluaXRFZGl0b3IodGhpcy5lZGl0b3JJZCk7XG4gICAgICAgIHRoaXMuZWRpdG9yLmlzUmVhZHkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50ID0gdGhpcy5lZGl0b3JSZWYoKS5uYXRpdmVFbGVtZW50O1xuXG4gICAgICAgICAgICB0aGlzLmluaXRFZGl0b3JFdmVudHModGhpcy5lZGl0b3JFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFNjcm9sbE9ic2VydmVyKCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0UG9vbGluZyh0aGlzLnJlcXVlc3RTaXplKCkpO1xuICAgICAgICAgICAgdGhpcy5zZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3IoaWQ6IHN0cmluZyk6IEVkaXRvckpTIHtcbiAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5jb25maWcoKTtcblxuICAgICAgICB0aGlzLmRlc3Ryb3lFZGl0b3IoKTtcbiAgICAgICAgdGhpcy5lZGl0b3IgPSBuZXcgRWRpdG9ySlMoe1xuICAgICAgICAgICAgLi4uZ2V0RWRpdG9yQ29uZmlnKGlkLCBjb25maWcpLFxuICAgICAgICAgICAgb25DaGFuZ2U6IHRoaXMub25FZGl0b3JDaGFuZ2UuYmluZCh0aGlzKVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5lZGl0b3I7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0U2Nyb2xsT2JzZXJ2ZXIoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmNvbmZpZygpPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgc2Nyb2xsT2JzZXJ2ZXIgPSBmcm9tRXZlbnQoZWxlbWVudCwgJ3Njcm9sbCcpO1xuXG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uID0gc2Nyb2xsT2JzZXJ2ZXJcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3kpLFxuICAgICAgICAgICAgICAgIHRocm90dGxlVGltZSh0aGlzLlNDUk9MTF9USFJPVFRMRV9USU1FLCB1bmRlZmluZWQsIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmc6IHRydWVcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBtYXAoKCkgPT4gdGhpcy5vblNjcm9sbEV2ZW50KGVsZW1lbnQpKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvckV2ZW50cyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgICAgICBjb25zdCByZWFkT25seSA9IHRoaXMuaXNSZWFkb25seSgpO1xuXG4gICAgICAgIGlmIChyZWFkT25seSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2V0RWRpdG9yRXZlbnRzKGVsZW1lbnQsIHRoaXMuYWJvcnRDb250cm9sbGVyLnNpZ25hbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydFBvb2xpbmcoc2l6ZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHNjcm9sbEVsZW1lbnQgPSB0aGlzLmNvbmZpZygpPy5lbGVtZW50ID8/IHRoaXMuZWRpdG9yRWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2l0aG91dFByZWxvYWQgPSB0aGlzLmNvbmZpZygpPy53aXRob3V0UHJlbG9hZDtcblxuICAgICAgICB0aGlzLnBvb2xpbmdTdWJzY3JpcHRpb24gPSB0aW1lcigwLCB0aGlzLlBPT0xJTkdfREVMQVkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5nZXRCbG9ja3ModGhpcy5wYWdlLCBzaXplKS5waXBlKGRlbGF5KHRoaXMuUE9PTElOR19ERUxBWSkpKSxcbiAgICAgICAgICAgICAgICB0YXAoKCkgPT4gdGhpcy5wYWdlKyspLFxuICAgICAgICAgICAgICAgIHRha2VXaGlsZShcbiAgICAgICAgICAgICAgICAgICAgKGJsb2NrcykgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgICF3aXRob3V0UHJlbG9hZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2Nyb2xsRWxlbWVudC5zY3JvbGxIZWlnaHQgPD0gc2Nyb2xsRWxlbWVudC5jbGllbnRIZWlnaHQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5sZW5ndGggPj0gc2l6ZVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc0Rlc3Ryb3llZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRTdGFydEJsb2NrKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3lFZGl0b3IoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyLmFib3J0KCk7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKCk7XG4gICAgICAgIC8vIFRPRE86INCyINGA0LDQvdC00L7QvCDQutC10LnRgdCw0YUg0L/QsNC00LDQtdGCINC+0YjQuNCx0LrQsCDQtdGB0LvQuCDRg9Cx0YDQsNGC0Ywg0L/RgNC+0LLQtdGA0LrRgyDQvdCwINCy0YvQt9C+0LIgZGVzdHJveVxuICAgICAgICB0aGlzLmVkaXRvcj8uZGVzdHJveT8uKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRMaXN0ZW5lcnNPbkN1c3RvbUJsb2NrQ2hhbmdlcygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldExpc3RlbmVyc09uQ3VzdG9tQmxvY2tDaGFuZ2VzKHRoaXMuZWRpdG9yLCB7XG4gICAgICAgICAgICByZW1vdmVkQ2FsbGJhY2s6IHRoaXMub25SZW1vdmVkQ29tYmluZWRCbG9jay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgdXBkYXRlZENhbGxiYWNrOiB0aGlzLm9uVXBkYXRlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGFkZGVkQ2FsbGJhY2s6IHRoaXMub25BZGRlZENvbWJpbmVkQmxvY2suYmluZCh0aGlzKVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIHN0YXJ0Q2hhbmdlcyhldmVudDogQmxvY2tNdXRhdGlvbkV2ZW50W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgaWYgKHRoaXMuaXNTa2lwIHx8IHRoaXMuaXNDaGFuZ2luZykge1xuICAgICAgICAgICAgdGhpcy5pc1NraXAgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gdHJ1ZTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yT3V0cHV0ID0gYXdhaXQgdGhpcy5lZGl0b3Iuc2F2ZSgpO1xuICAgICAgICAgICAgY29uc3QgZXZlbnRzID0gZXZlbnQuZmlsdGVyKChkYXRhKSA9PiBkYXRhLmRldGFpbC50YXJnZXQubmFtZSAhPT0gQ09NQklORURfVEVYVF9CTE9DS19OQU1FKTtcbiAgICAgICAgICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuZWRpdG9yU2VydmljZS5zb3J0RXZlbnRzQnlUeXBlcyhldmVudHMpO1xuICAgICAgICAgICAgY29uc3QgeyBhZGRCbG9ja3MkLCBhZGRlZEJsb2NrcyB9ID0gdGhpcy5jb2xsZWN0QWRkZWRCbG9ja3NSZXF1ZXN0KGJsb2NrcywgZWRpdG9yT3V0cHV0KTtcblxuICAgICAgICAgICAgdGhpcy5hZGRlZEJsb2NrcyA9IFtdO1xuXG4gICAgICAgICAgICBhZGRCbG9ja3MkXG4gICAgICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgIHRhcCgoYmxvY2tJZHMpID0+IHRoaXMuc2V0QmxvY2tJZHNUb01hcChibG9ja0lkcywgYWRkZWRCbG9ja3MpKSxcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuY29sbGVjdFVwZGF0ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrcywgZWRpdG9yT3V0cHV0KSksXG4gICAgICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3MpKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgY29tcGxldGU6ICgpID0+IHRoaXMuc3RhcnROZXh0Q2hhbmdlKCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB0aGlzLnN0YXJ0TmV4dENoYW5nZSgpXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc3RhcnROZXh0Q2hhbmdlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzQ2hhbmdpbmcgPSBmYWxzZTtcblxuICAgICAgICBjb25zdCBuZXh0RXZlbnRzID0gdGhpcy5jaGFuZ2VzUXVldWUucG9wKCk7XG5cbiAgICAgICAgaWYgKG5leHRFdmVudHMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRDaGFuZ2VzKG5leHRFdmVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lbXB0eVF1ZXVlLm5leHQobnVsbCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0QWRkZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhLCBlZGl0b3JPdXRwdXQ6IE91dHB1dERhdGEpOiBDdWlCbG9ja3NSZXF1ZXN0RGF0YSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRCbG9ja3NXaXRoSW5kZXggPSBibG9ja3NbRXZlbnRBY3Rpb25zLmFkZF0ubWFwKChhZGRlZEJsb2NrKSA9PlxuICAgICAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLmdldEZ1bGxCbG9ja0RhdGEoYWRkZWRCbG9jaywgZWRpdG9yT3V0cHV0KVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBjb21iaW5lZEJsb2Nrc1dpdGhJbmRleCA9IHRoaXMuYWRkZWRCbG9ja3MubWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudC5xdWVyeVNlbGVjdG9yKGBbZGF0YS1pZD1cIiR7YmxvY2suaWR9XCJdYCkgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IE51bWJlcihlbGVtZW50Py5kYXRhc2V0WydpbmRleCddKTtcblxuICAgICAgICAgICAgcmV0dXJuIHsgLi4uYmxvY2ssIGluZGV4IH07XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGFkZGVkQmxvY2tzID0gWy4uLmRlZmF1bHRCbG9ja3NXaXRoSW5kZXgsIC4uLmNvbWJpbmVkQmxvY2tzV2l0aEluZGV4XS5zb3J0KFxuICAgICAgICAgICAgKGZpcnN0LCBzZWNvbmQpID0+IGZpcnN0LmluZGV4IC0gc2Vjb25kLmluZGV4XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGFkZEJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdEFkZGVkQmxvY2tzUmVxdWVzdCh0aGlzLmVkaXRvckFwaUlkKCksIGFkZGVkQmxvY2tzKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWRkZWRCbG9ja3MsXG4gICAgICAgICAgICBhZGRCbG9ja3MkXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsZWN0VXBkYXRlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEsIGVkaXRvck91dHB1dDogT3V0cHV0RGF0YSk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnVwZGF0ZV0uZm9yRWFjaCgodXBkYXRlQmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWQsIGJsb2NrIH0gPSB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0RnVsbEJsb2NrRGF0YSh1cGRhdGVCbG9jaywgZWRpdG9yT3V0cHV0KTtcbiAgICAgICAgICAgIGJsb2NrLmlkID0gaWQ7XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlZEJsb2Nrcy5wdXNoKGJsb2NrKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdXBkYXRlQmxvY2tzJCA9IHRoaXMuZWRpdG9yU2VydmljZS5jb2xsZWN0VXBkYXRlZEJsb2Nrc1JlcXVlc3QodGhpcy51cGRhdGVkQmxvY2tzLCB0aGlzLmJsb2NrSWRzTWFwKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcblxuICAgICAgICByZXR1cm4gdXBkYXRlQmxvY2tzJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgICAgICBibG9ja3NbRXZlbnRBY3Rpb25zLnJlbW92ZV0uZm9yRWFjaCgoYmxvY2spID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGlkID0gYmxvY2suZGV0YWlsLnRhcmdldC5pZDtcblxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goaWQpO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCByZW1vdmVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RSZW1vdmVkQmxvY2tzUmVxdWVzdChcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yQXBpSWQoKSxcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlZEJsb2Nrc0lkcyxcbiAgICAgICAgICAgIHRoaXMuYmxvY2tJZHNNYXBcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG5cbiAgICAgICAgcmV0dXJuIHJlbW92ZUJsb2NrcyQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRCbG9ja3MocGFnZSA9IDAsIHNpemUgPSA0MCk6IE9ic2VydmFibGU8Q3VpQmxvY2tbXT4ge1xuICAgICAgICBsZXQgY29tYmluZWRCbG9jazogQ3VpTnVsbGFibGU8Q3VpQmxvY2s+O1xuXG4gICAgICAgIHJldHVybiB0aGlzLmpUZXh0U2VydmljZS5nZXRCbG9ja3ModGhpcy5lZGl0b3JBcGlJZCgpLCBwYWdlLCBzaXplKS5waXBlKFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXG4gICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZWNhbGN1bGF0ZUluZGV4ZXModGhpcy5lZGl0b3IuYmxvY2tzKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgbWFwKChibG9jaykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChibG9jay50eXBlID09PSBDT01CSU5FRF9URVhUX0JMT0NLX1BBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYmxvY2tEYXRhID0gYmxvY2suZGF0YSBhcyB7IHBhcmVudElkOiBzdHJpbmcgfTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jayAmJiBibG9ja0RhdGEucGFyZW50SWQhICE9PSBjb21iaW5lZEJsb2NrPy5pZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tYmluZWRCbG9jayA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gdGhpcy5zZXRDb21iaW5lZEJsb2NrKGJsb2NrKTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGNvbWJpbmVkQmxvY2spIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2spO1xuICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLmFkZEJsb2NrKGJsb2NrKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdG9BcnJheSgpXG4gICAgICAgICkgYXMgdW5rbm93biBhcyBPYnNlcnZhYmxlPEN1aUJsb2NrW10+O1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQmxvY2soYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICh0eXBlb2YgYmxvY2sudHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcbiAgICAgICAgdGhpcy5pbnNlcnQoYmxvY2spO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQ29tYmluZWRCbG9jayhjb21iaW5lZEJsb2NrOiBDdWlCbG9jayk6IHZvaWQge1xuICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuICAgICAgICBjb25zdCBibG9jayA9IHRoaXMuZWRpdG9yLmJsb2Nrcy5nZXRCeUlkKGNvbWJpbmVkQmxvY2suaWQgfHwgJycpO1xuXG4gICAgICAgIGlmIChibG9jaykge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLnVwZGF0ZShibG9jay5pZCwgY29tYmluZWRCbG9jay5kYXRhIGFzIEN1aUNvbWJpbmVkUGFydEJsb2NrKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pbnNlcnQoY29tYmluZWRCbG9jayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbnNlcnQoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY2hlY2tGaXJzdChibG9jayk7XG4gICAgICAgIHRoaXMuaW5kZXgrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrRmlyc3QoYmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5pc0ZpcnN0KSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MuaW5zZXJ0KGJsb2NrLnR5cGUsIGJsb2NrLmRhdGEsIHt9LCB0aGlzLmluZGV4LCBmYWxzZSwgZmFsc2UsIGJsb2NrLmlkKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVE9ETzog0LXRgdGC0Ywg0LLQsNGA0LjQuiDRh9GC0L4g0YfRgtC+INGC0L4g0L/QvtC50LTQtdGCINC90LUg0YLQsNC6XG4gICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy5yZW5kZXIoeyBibG9ja3M6IFtibG9ja10gfSkudGhlbigoKSA9PiAodGhpcy5pc1NraXAgPSBmYWxzZSkpO1xuICAgICAgICB0aGlzLmlzRmlyc3QgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbWJpbmVkQmxvY2soYmxvY2s6IEN1aUJsb2NrKTogQ3VpQmxvY2sge1xuICAgICAgICBjb25zdCBjb21iaW5lZEJsb2NrRGF0YSA9IGJsb2NrLmRhdGEgYXMgeyBwYXJlbnRJZDogc3RyaW5nIH07XG4gICAgICAgIGNvbnN0IHBhcmVudCA9IHRoaXMuY29tYmluZWRCbG9ja3MuZ2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkKTtcblxuICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9jay5pZCEsIGJsb2NrLmlkISk7XG5cbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50RGF0YSA9IHBhcmVudC5kYXRhIGFzIHsgdGV4dEJsb2NrczogQ3VpQmxvY2tbXSB9O1xuICAgICAgICAgICAgcGFyZW50RGF0YS50ZXh0QmxvY2tzLnB1c2goYmxvY2spO1xuXG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFyZW50T2JqZWN0OiBDdWlCbG9jayA9IHtcbiAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgIHR5cGU6IENPTUJJTkVEX1RFWFRfQkxPQ0tfTkFNRSxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpZDogY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsXG4gICAgICAgICAgICAgICAgdGV4dEJsb2NrczogW2Jsb2NrXVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3Muc2V0KGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLCBwYXJlbnRPYmplY3QpO1xuXG4gICAgICAgIHJldHVybiBwYXJlbnRPYmplY3Q7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRCbG9ja0lkc1RvTWFwKGJsb2NrSWRzOiBzdHJpbmdbXSwgYWRkZWRCbG9ja3M6IEN1aUZ1bGxCbG9ja0RhdGFbXSk6IHZvaWQge1xuICAgICAgICBpZiAoIWJsb2NrSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy51cGRhdGVFbGVtZW50TG9jYWxJZFdpdGhNYWluSWQoYmxvY2tJZHMsIGFkZGVkQmxvY2tzKTtcbiAgICAgICAgYWRkZWRCbG9ja3MuZm9yRWFjaCgoYmxvY2tEYXRhLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2tEYXRhLmlkLCBibG9ja0lkc1tpbmRleF0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZUVsZW1lbnRMb2NhbElkV2l0aE1haW5JZChibG9ja0lkczogc3RyaW5nW10sIGJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGJsb2Nrcy5mb3JFYWNoKChibG9jaywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVkaXRvckVsZW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oYFtkYXRhLWlkPVwiJHtibG9jay5pZH1cIl1gKTtcblxuICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBlbGVtZW50LmRhdGFzZXRbJ2lkJ10gPSBibG9ja0lkc1tpbmRleF07XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0U3RhcnRCbG9jaygpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuYmxvY2tJZHNNYXAuc2l6ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc1JlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLnJlbmRlcih7IGJsb2NrczogW10gfSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yU2VydmljZS5zZXRTdGFydEJsb2NrKFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBcGlJZCgpLFxuICAgICAgICAgICAgYXN5bmMgKGJsb2NrOiBDdWlCbG9jazxDdWlDb21iaW5lZEJsb2NrVG9vbERhdGE+LCBpZDogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoaWQsIGlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5wdXNoKHRydWUpO1xuXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lZGl0b3IucmVuZGVyKHsgYmxvY2tzOiBbYmxvY2tdIH0pO1xuXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGb2N1cygpO1xuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Rm9jdXMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb25maWcoKT8uYXV0b2ZvY3VzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVkaXRvci5jYXJldC5mb2N1cygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tJc0VtcHR5KCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBibG9ja3NDb3VudCA9IHRoaXMuZWRpdG9yLmJsb2Nrcz8uZ2V0QmxvY2tzQ291bnQoKSA/PyAwO1xuXG4gICAgICAgIGlmICghYmxvY2tzQ291bnQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgUkVEQUNUT1JfU0VMRUNUT1IgPSAnLmNvZGV4LWVkaXRvcl9fcmVkYWN0b3InO1xuICAgICAgICBjb25zdCByZWRhY3RvclRleHRDb250ZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50XG4gICAgICAgICAgICAucXVlcnlTZWxlY3RvcihSRURBQ1RPUl9TRUxFQ1RPUilcbiAgICAgICAgICAgID8udGV4dENvbnRlbnQ/LnRyaW0oKTtcblxuICAgICAgICByZXR1cm4gIXJlZGFjdG9yVGV4dENvbnRlbnQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZXNldERhdGEoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLnBvb2xpbmdTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlID0gW107XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzU2tpcCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmlzUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgICAgICB0aGlzLmNvbWJpbmVkQmxvY2tzID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLmluZGV4ID0gMDtcbiAgICAgICAgdGhpcy5wYWdlID0gMDtcbiAgICAgICAgdGhpcy5hZGRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnVwZGF0ZWRCbG9ja3MgPSBbXTtcbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzID0gW107XG4gICAgICAgIHRoaXMuY2hhbmdlc1F1ZXVlID0gW107XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICAgIH1cbn1cbiIsIjxkaXZcbiAgICAjZWRpdG9yXG4gICAgW2lkXT1cImVkaXRvcklkXCJcbiAgICBkYXRhLWVkaXRvclxuICAgIFtjbGFzcy5fcmVhZG9ubHldPVwiY29uZmlnKCkucmVhZE9ubHlcIlxuPjwvZGl2PlxuIl19
|
|
424
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NvcmUvZWRpdG9yL2VkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb3JlL2VkaXRvci9lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsUUFBUSxFQUNSLFVBQVUsRUFDVixNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUMsT0FBTyxRQUFRLE1BQU0sb0JBQW9CLENBQUM7QUFFMUMsT0FBTyxFQUNILFNBQVMsRUFDVCxLQUFLLEVBQ0wsUUFBUSxFQUNSLFNBQVMsRUFDVCxHQUFHLEVBQ0gsT0FBTyxFQUNQLFNBQVMsRUFDVCxHQUFHLEVBQ0gsWUFBWSxFQUNaLEtBQUssRUFDTCxPQUFPLEVBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUscUJBQXFCLEVBQVksa0JBQWtCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFbkYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsd0JBQXdCLEVBQUUsY0FBYyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDbEgsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBVzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBZ0IsTUFBTSxZQUFZLENBQUM7QUFDNUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7O0FBaUJqRSxNQUFNLE9BQU8s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S0FBSyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2QsSUFBSSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7UUFDdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7SUFDakQsQ0FBQzsrR0E5aUJRLGtCQUFrQjttR0FBbEIsa0JBQWtCLDRmQVRoQjtZQUNQLGdCQUFnQjtZQUNoQjtnQkFDRyxPQUFPLEVBQUUscUJBQXFCO2dCQUM5QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQ1osTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFO2FBQ3BHO1NBQ0osK0lDOURMLG1IQU1BOzs0RkQwRGEsa0JBQWtCO2tCQWY5QixTQUFTOytCQUNJLFlBQVksY0FDVixJQUFJLG1CQUdDLHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7d0JBQ1AsZ0JBQWdCO3dCQUNoQjs0QkFDRyxPQUFPLEVBQUUscUJBQXFCOzRCQUM5QixVQUFVLEVBQUUsR0FBRyxFQUFFLENBQ1osTUFBTSxDQUFDLHFCQUFxQixFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJLGtCQUFrQixFQUFFO3lCQUNwRztxQkFDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRWxlbWVudFJlZiwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIGVmZmVjdCxcbiAgICBpbmplY3QsXG4gICAgaW5wdXQsXG4gICAgb3V0cHV0LFxuICAgIHZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB0eXBlIHsgQ3VpTnVsbGFibGUgfSBmcm9tICdAY3VieS11aS9jZGsnO1xuaW1wb3J0IHsgQ3VpSWRTZXJ2aWNlIH0gZnJvbSAnQGN1YnktdWkvY2RrJztcbmltcG9ydCB0eXBlIHsgQVBJLCBCbG9ja011dGF0aW9uRXZlbnQsIE91dHB1dERhdGEgfSBmcm9tICdAZWRpdG9yanMvZWRpdG9yanMnO1xuaW1wb3J0IEVkaXRvckpTIGZyb20gJ0BlZGl0b3Jqcy9lZGl0b3Jqcyc7XG5pbXBvcnQgdHlwZSB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHtcbiAgICBjb25jYXRNYXAsXG4gICAgZGVsYXksXG4gICAgZmluYWxpemUsXG4gICAgZnJvbUV2ZW50LFxuICAgIG1hcCxcbiAgICBTdWJqZWN0LFxuICAgIHRha2VXaGlsZSxcbiAgICB0YXAsXG4gICAgdGhyb3R0bGVUaW1lLFxuICAgIHRpbWVyLFxuICAgIHRvQXJyYXlcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBDVUlfSlRFWFRfQVBJX1NFUlZJQ0UsIEN1aUJsb2NrLCBDdWlKVGV4dEFwaVNlcnZpY2UgfSBmcm9tICdAY3VieS11aS9hcGknO1xuXG5pbXBvcnQgeyBnZXRFZGl0b3JDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5pbXBvcnQgeyBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUsIENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCwgREVGQVVMVF9DT05GSUcgfSBmcm9tICcuL2NvbnN0YW50cy9lZGl0b3IuY29uc3RhbnRzJztcbmltcG9ydCB7IHNldEVkaXRvckV2ZW50cyB9IGZyb20gJy4vZXZlbnRzL3NldC1lZGl0b3ItZXZlbnRzJztcbmltcG9ydCB0eXBlIHtcbiAgICBDdWlCbG9ja0RhdGEsXG4gICAgQ3VpQmxvY2tzUmVxdWVzdERhdGEsXG4gICAgQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50LFxuICAgIEN1aUNvbWJpbmVkQmxvY2tUb29sRGF0YSxcbiAgICBDdWlDb21iaW5lZFBhcnRCbG9jayxcbiAgICBDdWlFZGl0b3JDb25maWcsXG4gICAgQ3VpRXZlbnRBY3Rpb25EYXRhLFxuICAgIEN1aUZ1bGxCbG9ja0RhdGFcbn0gZnJvbSAnLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IEN1aUVkaXRvclNlcnZpY2UsIEV2ZW50QWN0aW9ucyB9IGZyb20gJy4vc2VydmljZXMnO1xuaW1wb3J0IHsgcmVjYWxjdWxhdGVJbmRleGVzIH0gZnJvbSAnLi91dGlscy9yZWNhbGN1bGF0ZS1pbmRleGVzJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjdWktZWRpdG9yJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9lZGl0b3IuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2VkaXRvci5jb21wb25lbnQuc2NzcyddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICBDdWlFZGl0b3JTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgIHByb3ZpZGU6IENVSV9KVEVYVF9BUElfU0VSVklDRSxcbiAgICAgICAgICAgdXNlRmFjdG9yeTogKCkgPT5cbiAgICAgICAgICAgICAgICBpbmplY3QoQ1VJX0pURVhUX0FQSV9TRVJWSUNFLCB7IG9wdGlvbmFsOiB0cnVlLCBza2lwU2VsZjogdHJ1ZSB9KSA/PyBuZXcgQ3VpSlRleHRBcGlTZXJ2aWNlKClcbiAgICAgICAgfVxuICAgIF1cbn0pXG5leHBvcnQgY2xhc3MgQ3VpRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjdWlJZFNlcnZpY2UgPSBpbmplY3QoQ3VpSWRTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVkaXRvclNlcnZpY2UgPSBpbmplY3QoQ3VpRWRpdG9yU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBqVGV4dFNlcnZpY2UgPSBpbmplY3QoQ1VJX0pURVhUX0FQSV9TRVJWSUNFKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgUE9PTElOR19ERUxBWSA9IDEwMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IEVMRU1FTlRfU1BBQ0VfVE9fQk9UVE9NID0gMTUwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgU0NST0xMX1RIUk9UVExFX1RJTUUgPSAyMDA7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVtcHR5UXVldWUgPSBuZXcgU3ViamVjdCgpO1xuXG4gICAgcHJpdmF0ZSBwb29saW5nU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgc2Nyb2xsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xuICAgIHByaXZhdGUgaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlOiBib29sZWFuW10gPSBbXTtcbiAgICBwcml2YXRlIGlzRmlyc3QgPSB0cnVlO1xuICAgIHByaXZhdGUgaXNDaGFuZ2luZyA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNTa2lwID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc1JlcXVlc3RlZCA9IGZhbHNlO1xuICAgIHByaXZhdGUgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICAvLyDQndGD0LbQtdC9INC00LvRjyDRgdC+0L7RgtC90L7RiNC10L3QuNGPINC70L7QutCw0LvRjNC90L7Qs9C+IElEINC4INC+0YHQvdC+0LLQvdC+0LPQviBJRCDQv9C+0YHQu9C1INGB0L7Qt9C00LDQvdC40Y8g0Y3Qu9C10LzQtdC90YLQsFxuICAgIHByaXZhdGUgYmxvY2tJZHNNYXAgPSBuZXcgTWFwPHN0cmluZywgc3RyaW5nPigpO1xuICAgIHByaXZhdGUgY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBpbmRleCA9IDA7XG4gICAgcHJpdmF0ZSBwYWdlID0gMDtcbiAgICBwcml2YXRlIGFkZGVkQmxvY2tzOiBDdWlCbG9ja0RhdGFbXSA9IFtdO1xuICAgIHByaXZhdGUgdXBkYXRlZEJsb2NrczogQ3VpQmxvY2tbXSA9IFtdO1xuICAgIHByaXZhdGUgcmVtb3ZlZEJsb2Nrc0lkczogc3RyaW5nW10gPSBbXTtcbiAgICBwcml2YXRlIGNoYW5nZXNRdWV1ZTogQmxvY2tNdXRhdGlvbkV2ZW50W11bXSA9IFtdO1xuICAgIHByaXZhdGUgYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGVkaXRvcklkID0gdGhpcy5jdWlJZFNlcnZpY2UuZ2VuZXJhdGUoKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaXNSZWFkb25seSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY29uZmlnKCk/LnJlYWRPbmx5KTtcblxuICAgIHByb3RlY3RlZCByZWFkb25seSBlZGl0b3JSZWYgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+KCdlZGl0b3InKTtcblxuICAgIHB1YmxpYyByZWFkb25seSBlZGl0b3JBcGlJZCA9IGlucHV0LnJlcXVpcmVkPHN0cmluZz4oKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29uZmlnID0gaW5wdXQ8Q3VpRWRpdG9yQ29uZmlnPihERUZBVUxUX0NPTkZJRyk7XG4gICAgcHVibGljIHJlYWRvbmx5IHJlcXVlc3RTaXplID0gaW5wdXQ8bnVtYmVyPig0MCk7XG5cbiAgICBwdWJsaWMgcmVhZG9ubHkgZWRpdG9yRW1wdHkgPSBvdXRwdXQ8Ym9vbGVhbj4oKTtcblxuICAgIHB1YmxpYyBlZGl0b3IhOiBFZGl0b3JKUztcbiAgICBwdWJsaWMgZWRpdG9yRWxlbWVudCE6IEhUTUxFbGVtZW50O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuaW5pdEVkaXRvckVmZmVjdCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pc0Rlc3Ryb3llZCA9IHRydWU7XG5cbiAgICAgICAgdGhpcy5kZXN0cm95RWRpdG9yKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvblNjcm9sbEV2ZW50KGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IG92ZXJhbGxIZWlnaHQgPSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIHRoaXMuRUxFTUVOVF9TUEFDRV9UT19CT1RUT007XG4gICAgICAgIGNvbnN0IGN1cnJlbnRIZWlnaHQgPSBlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuXG4gICAgICAgIGlmIChjdXJyZW50SGVpZ2h0IDwgb3ZlcmFsbEhlaWdodCB8fCB0aGlzLmlzUmVxdWVzdGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzUmVxdWVzdGVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBzaXplID0gdGhpcy5yZXF1ZXN0U2l6ZSgpO1xuICAgICAgICBsZXQgYmxvY2tzQ291bnQgPSAwO1xuXG4gICAgICAgIHRoaXMuZ2V0QmxvY2tzKHRoaXMucGFnZSwgc2l6ZSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoYmxvY2tzKSA9PiAoYmxvY2tzQ291bnQgPSBibG9ja3MubGVuZ3RoKSksXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlzUmVxdWVzdGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2Nrc0NvdW50ID49IHNpemUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcblxuICAgICAgICB0aGlzLnBhZ2UrKztcbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRWRpdG9yQ2hhbmdlKF86IEFQSSwgZXZlbnQ6IEJsb2NrTXV0YXRpb25FdmVudCB8IEJsb2NrTXV0YXRpb25FdmVudFtdKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkoKSB8fCB0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgICAgICBldmVudCA9IFtldmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0NoYW5naW5nKSB7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZXNRdWV1ZS51bnNoaWZ0KGV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RhcnRDaGFuZ2VzKGV2ZW50KTtcbiAgICAgICAgdGhpcy5lZGl0b3JFbXB0eS5lbWl0KHRoaXMuY2hlY2tJc0VtcHR5KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25BZGRlZENvbWJpbmVkQmxvY2soZGF0YTogQ3VpQ29tYmluZWRCbG9ja0FkZGluZ0V2ZW50KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzU2tpcENvbWJpbmVkQmxvY2tPbkNoYW5nZS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnBvcCgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBibG9ja3NXaXRob3V0SWQgPSBkYXRhLmJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoe1xuICAgICAgICAgICAgYmxvY2s6IHsgLi4uYmxvY2ssIGlkOiB1bmRlZmluZWQgfSxcbiAgICAgICAgICAgIGlkOiBibG9jay5pZCFcbiAgICAgICAgfSkpO1xuXG4gICAgICAgIHRoaXMuYWRkZWRCbG9ja3MucHVzaCguLi5ibG9ja3NXaXRob3V0SWQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25VcGRhdGVkQ29tYmluZWRCbG9jayh1cGRhdGVkQmxvY2tzOiBDdWlCbG9ja1tdKTogdm9pZCB7XG4gICAgICAgIGlmICghdXBkYXRlZEJsb2Nrcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2Nrcy5wdXNoKC4uLnVwZGF0ZWRCbG9ja3MpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb25SZW1vdmVkQ29tYmluZWRCbG9jayhibG9ja0lkczogc3RyaW5nW10pOiB2b2lkIHtcbiAgICAgICAgaWYgKCFibG9ja0lkcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmVjYWxjdWxhdGVBbGxCbG9ja3NBZnRlclJlbW92YWwoYmxvY2tJZHMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVjYWxjdWxhdGVBbGxCbG9ja3NBZnRlclJlbW92YWwoYmxvY2tJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcyA9IG5ldyBTZXQoYmxvY2tJZHMpO1xuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IHRoaXMudXBkYXRlZEJsb2Nrcy5maWx0ZXIoXG4gICAgICAgICAgICAodXBkYXRlZEJsb2NrKSA9PiAhcmVtYWluaW5nUmVtb3ZlZEJsb2NrSWRzLmhhcyh1cGRhdGVkQmxvY2suaWQgPz8gJycpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuYWRkZWRCbG9ja3MgPSB0aGlzLmFkZGVkQmxvY2tzLmZpbHRlcigoYWRkZWRCbG9jaykgPT4ge1xuICAgICAgICAgICAgaWYgKCFyZW1haW5pbmdSZW1vdmVkQmxvY2tJZHMuaGFzKGFkZGVkQmxvY2suaWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJlbWFpbmluZ1JlbW92ZWRCbG9ja0lkcy5kZWxldGUoYWRkZWRCbG9jay5pZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLnB1c2goLi4ucmVtYWluaW5nUmVtb3ZlZEJsb2NrSWRzLnZhbHVlcygpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JFZmZlY3QoKTogdm9pZCB7XG4gICAgICAgIGVmZmVjdChcbiAgICAgICAgICAgICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JBcGlJZCgpIHx8IHRoaXMuY29uZmlnKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbml0RWRpdG9yQ2hhbmdlcygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRFZGl0b3JDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmpUZXh0U2VydmljZS5hZGRPcHRpb25zKHRoaXMuY29uZmlnKCk/LnJlcXVlc3RPcHRpb25zKTtcblxuICAgICAgICB0aGlzLmVkaXRvciA9IHRoaXMuaW5pdEVkaXRvcih0aGlzLmVkaXRvcklkKTtcbiAgICAgICAgdGhpcy5lZGl0b3IuaXNSZWFkeS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQgPSB0aGlzLmVkaXRvclJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICAgICAgICAgIHRoaXMuaW5pdEVkaXRvckV2ZW50cyh0aGlzLmVkaXRvckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5pbml0U2Nyb2xsT2JzZXJ2ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRQb29saW5nKHRoaXMucmVxdWVzdFNpemUoKSk7XG4gICAgICAgICAgICB0aGlzLnNldExpc3RlbmVyc09uQ3VzdG9tQmxvY2tDaGFuZ2VzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaW5pdEVkaXRvcihpZDogc3RyaW5nKTogRWRpdG9ySlMge1xuICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLmNvbmZpZygpO1xuXG4gICAgICAgIHRoaXMuZGVzdHJveUVkaXRvcigpO1xuICAgICAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3JKUyh7XG4gICAgICAgICAgICAuLi5nZXRFZGl0b3JDb25maWcoaWQsIGNvbmZpZyksXG4gICAgICAgICAgICBvbkNoYW5nZTogdGhpcy5vbkVkaXRvckNoYW5nZS5iaW5kKHRoaXMpXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmVkaXRvcjtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRTY3JvbGxPYnNlcnZlcigpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuY29uZmlnKCk/LmVsZW1lbnQgPz8gdGhpcy5lZGl0b3JFbGVtZW50O1xuICAgICAgICBjb25zdCBzY3JvbGxPYnNlcnZlciA9IGZyb21FdmVudChlbGVtZW50LCAnc2Nyb2xsJyk7XG5cbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24gPSBzY3JvbGxPYnNlcnZlclxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveSksXG4gICAgICAgICAgICAgICAgdGhyb3R0bGVUaW1lKHRoaXMuU0NST0xMX1RIUk9UVExFX1RJTUUsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICBsZWFkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB0cmFpbGluZzogdHJ1ZVxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiB0aGlzLm9uU2Nyb2xsRXZlbnQoZWxlbWVudCkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0RWRpdG9yRXZlbnRzKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5ID0gdGhpcy5pc1JlYWRvbmx5KCk7XG5cbiAgICAgICAgaWYgKHJlYWRPbmx5KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzZXRFZGl0b3JFdmVudHMoZWxlbWVudCwgdGhpcy5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHN0YXJ0UG9vbGluZyhzaXplOiBudW1iZXIpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsRWxlbWVudCA9IHRoaXMuY29uZmlnKCk/LmVsZW1lbnQgPz8gdGhpcy5lZGl0b3JFbGVtZW50O1xuICAgICAgICBjb25zdCB3aXRob3V0UHJlbG9hZCA9IHRoaXMuY29uZmlnKCk/LndpdGhvdXRQcmVsb2FkO1xuXG4gICAgICAgIHRoaXMucG9vbGluZ1N1YnNjcmlwdGlvbiA9IHRpbWVyKDAsIHRoaXMuUE9PTElOR19ERUxBWSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB0aGlzLmdldEJsb2Nrcyh0aGlzLnBhZ2UsIHNpemUpLnBpcGUoZGVsYXkodGhpcy5QT09MSU5HX0RFTEFZKSkpLFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB0aGlzLnBhZ2UrKyksXG4gICAgICAgICAgICAgICAgdGFrZVdoaWxlKFxuICAgICAgICAgICAgICAgICAgICAoYmxvY2tzKSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgIXdpdGhvdXRQcmVsb2FkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodCA8PSBzY3JvbGxFbGVtZW50LmNsaWVudEhlaWdodCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmxlbmd0aCA+PSBzaXplXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldFN0YXJ0QmxvY2soKTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZGVzdHJveUVkaXRvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKTtcbiAgICAgICAgLy8gVE9ETzog0LIg0YDQsNC90LTQvtC8INC60LXQudGB0LDRhSDQv9Cw0LTQsNC10YIg0L7RiNC40LHQutCwINC10YHQu9C4INGD0LHRgNCw0YLRjCDQv9GA0L7QstC10YDQutGDINC90LAg0LLRi9C30L7QsiBkZXN0cm95XG4gICAgICAgIHRoaXMuZWRpdG9yPy5kZXN0cm95Py4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldExpc3RlbmVyc09uQ3VzdG9tQmxvY2tDaGFuZ2VzKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2Uuc2V0TGlzdGVuZXJzT25DdXN0b21CbG9ja0NoYW5nZXModGhpcy5lZGl0b3IsIHtcbiAgICAgICAgICAgIHJlbW92ZWRDYWxsYmFjazogdGhpcy5vblJlbW92ZWRDb21iaW5lZEJsb2NrLmJpbmQodGhpcyksXG4gICAgICAgICAgICB1cGRhdGVkQ2FsbGJhY2s6IHRoaXMub25VcGRhdGVkQ29tYmluZWRCbG9jay5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgYWRkZWRDYWxsYmFjazogdGhpcy5vbkFkZGVkQ29tYmluZWRCbG9jay5iaW5kKHRoaXMpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgc3RhcnRDaGFuZ2VzKGV2ZW50OiBCbG9ja011dGF0aW9uRXZlbnRbXSk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5pc1NraXAgfHwgdGhpcy5pc0NoYW5naW5nKSB7XG4gICAgICAgICAgICB0aGlzLmlzU2tpcCA9IGZhbHNlO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzQ2hhbmdpbmcgPSB0cnVlO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JPdXRwdXQgPSBhd2FpdCB0aGlzLmVkaXRvci5zYXZlKCk7XG5cbiAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuXG4gICAgICAgICAgICBjb25zdCBldmVudHMgPSBldmVudC5maWx0ZXIoKGRhdGEpID0+IGRhdGEuZGV0YWlsLnRhcmdldC5uYW1lICE9PSBDT01CSU5FRF9URVhUX0JMT0NLX05BTUUpO1xuICAgICAgICAgICAgY29uc3QgYmxvY2tzID0gdGhpcy5lZGl0b3JTZXJ2aWNlLnNvcnRFdmVudHNCeVR5cGVzKGV2ZW50cyk7XG4gICAgICAgICAgICBjb25zdCB7IGFkZEJsb2NrcyQsIGFkZGVkQmxvY2tzIH0gPSB0aGlzLmNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzLCBlZGl0b3JPdXRwdXQpO1xuXG4gICAgICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gW107XG5cbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICAgICAgdGFwKChibG9ja0lkcykgPT4gdGhpcy5zZXRCbG9ja0lkc1RvTWFwKGJsb2NrSWRzLCBhZGRlZEJsb2NrcykpLFxuICAgICAgICAgICAgICAgICAgICBjb25jYXRNYXAoKCkgPT4gdGhpcy5jb2xsZWN0VXBkYXRlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzLCBlZGl0b3JPdXRwdXQpKSxcbiAgICAgICAgICAgICAgICAgICAgY29uY2F0TWFwKCgpID0+IHRoaXMuY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrcykpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZTogKCkgPT4gdGhpcy5zdGFydE5leHRDaGFuZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6ICgpID0+IHRoaXMuc3RhcnROZXh0Q2hhbmdlKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGFydE5leHRDaGFuZ2UoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNDaGFuZ2luZyA9IGZhbHNlO1xuXG4gICAgICAgIGNvbnN0IG5leHRFdmVudHMgPSB0aGlzLmNoYW5nZXNRdWV1ZS5wb3AoKTtcblxuICAgICAgICBpZiAobmV4dEV2ZW50cykge1xuICAgICAgICAgICAgdGhpcy5zdGFydENoYW5nZXMobmV4dEV2ZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmVtcHR5UXVldWUubmV4dChudWxsKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RBZGRlZEJsb2Nrc1JlcXVlc3QoYmxvY2tzOiBDdWlFdmVudEFjdGlvbkRhdGEsIGVkaXRvck91dHB1dDogT3V0cHV0RGF0YSk6IEN1aUJsb2Nrc1JlcXVlc3REYXRhIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEJsb2Nrc1dpdGhJbmRleCA9IGJsb2Nrc1tFdmVudEFjdGlvbnMuYWRkXS5tYXAoKGFkZGVkQmxvY2spID0+XG4gICAgICAgICAgICB0aGlzLmVkaXRvclNlcnZpY2UuZ2V0RnVsbEJsb2NrRGF0YShhZGRlZEJsb2NrLCBlZGl0b3JPdXRwdXQpXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkQmxvY2tzV2l0aEluZGV4ID0gdGhpcy5hZGRlZEJsb2Nrcy5tYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lZGl0b3JFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWlkPVwiJHtibG9jay5pZH1cIl1gKSBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gTnVtYmVyKGVsZW1lbnQ/LmRhdGFzZXRbJ2luZGV4J10pO1xuXG4gICAgICAgICAgICByZXR1cm4geyAuLi5ibG9jaywgaW5kZXggfTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgYWRkZWRCbG9ja3MgPSBbLi4uZGVmYXVsdEJsb2Nrc1dpdGhJbmRleCwgLi4uY29tYmluZWRCbG9ja3NXaXRoSW5kZXhdLnNvcnQoXG4gICAgICAgICAgICAoZmlyc3QsIHNlY29uZCkgPT4gZmlyc3QuaW5kZXggLSBzZWNvbmQuaW5kZXhcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgYWRkQmxvY2tzJCA9IHRoaXMuZWRpdG9yU2VydmljZS5jb2xsZWN0QWRkZWRCbG9ja3NSZXF1ZXN0KHRoaXMuZWRpdG9yQXBpSWQoKSwgYWRkZWRCbG9ja3MpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhZGRlZEJsb2NrcyxcbiAgICAgICAgICAgIGFkZEJsb2NrcyRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdChibG9ja3M6IEN1aUV2ZW50QWN0aW9uRGF0YSwgZWRpdG9yT3V0cHV0OiBPdXRwdXREYXRhKTogT2JzZXJ2YWJsZTxDdWlCbG9ja1tdPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMudXBkYXRlXS5mb3JFYWNoKCh1cGRhdGVCbG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZCwgYmxvY2sgfSA9IHRoaXMuZWRpdG9yU2VydmljZS5nZXRGdWxsQmxvY2tEYXRhKHVwZGF0ZUJsb2NrLCBlZGl0b3JPdXRwdXQpO1xuICAgICAgICAgICAgYmxvY2suaWQgPSBpZDtcblxuICAgICAgICAgICAgdGhpcy51cGRhdGVkQmxvY2tzLnB1c2goYmxvY2spO1xuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCB1cGRhdGVCbG9ja3MkID0gdGhpcy5lZGl0b3JTZXJ2aWNlLmNvbGxlY3RVcGRhdGVkQmxvY2tzUmVxdWVzdCh0aGlzLnVwZGF0ZWRCbG9ja3MsIHRoaXMuYmxvY2tJZHNNYXApO1xuXG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuXG4gICAgICAgIHJldHVybiB1cGRhdGVCbG9ja3MkO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KGJsb2NrczogQ3VpRXZlbnRBY3Rpb25EYXRhKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgICAgIGJsb2Nrc1tFdmVudEFjdGlvbnMucmVtb3ZlXS5mb3JFYWNoKChibG9jaykgPT4ge1xuICAgICAgICAgICAgY29uc3QgaWQgPSBibG9jay5kZXRhaWwudGFyZ2V0LmlkO1xuXG4gICAgICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMucHVzaChpZCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHJlbW92ZUJsb2NrcyQgPSB0aGlzLmVkaXRvclNlcnZpY2UuY29sbGVjdFJlbW92ZWRCbG9ja3NSZXF1ZXN0KFxuICAgICAgICAgICAgdGhpcy5lZGl0b3JBcGlJZCgpLFxuICAgICAgICAgICAgdGhpcy5yZW1vdmVkQmxvY2tzSWRzLFxuICAgICAgICAgICAgdGhpcy5ibG9ja0lkc01hcFxuICAgICAgICApO1xuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMgPSBbXTtcblxuICAgICAgICByZXR1cm4gcmVtb3ZlQmxvY2tzJDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEJsb2NrcyhwYWdlID0gMCwgc2l6ZSA9IDQwKTogT2JzZXJ2YWJsZTxDdWlCbG9ja1tdPiB7XG4gICAgICAgIGxldCBjb21iaW5lZEJsb2NrOiBDdWlOdWxsYWJsZTxDdWlCbG9jaz47XG5cbiAgICAgICAgcmV0dXJuIHRoaXMualRleHRTZXJ2aWNlLmdldEJsb2Nrcyh0aGlzLmVkaXRvckFwaUlkKCksIHBhZ2UsIHNpemUpLnBpcGUoXG4gICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95KSxcbiAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJlY2FsY3VsYXRlSW5kZXhlcyh0aGlzLmVkaXRvci5ibG9ja3MpO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBtYXAoKGJsb2NrKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09IENPTUJJTkVEX1RFWFRfQkxPQ0tfUEFSVCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBibG9ja0RhdGEgPSBibG9jay5kYXRhIGFzIHsgcGFyZW50SWQ6IHN0cmluZyB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb21iaW5lZEJsb2NrICYmIGJsb2NrRGF0YS5wYXJlbnRJZCEgIT09IGNvbWJpbmVkQmxvY2s/LmlkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21iaW5lZEJsb2NrID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSB0aGlzLnNldENvbWJpbmVkQmxvY2soYmxvY2spO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tYmluZWRCbG9jaykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZENvbWJpbmVkQmxvY2soY29tYmluZWRCbG9jayk7XG4gICAgICAgICAgICAgICAgICAgIGNvbWJpbmVkQmxvY2sgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuYWRkQmxvY2soYmxvY2spO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0b0FycmF5KClcbiAgICAgICAgKSBhcyB1bmtub3duIGFzIE9ic2VydmFibGU8Q3VpQmxvY2tbXT47XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRCbG9jayhibG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgaWYgKHR5cGVvZiBibG9jay50eXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcC5zZXQoYmxvY2suaWQhLCBibG9jay5pZCEpO1xuICAgICAgICB0aGlzLmluc2VydChibG9jayk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRDb21iaW5lZEJsb2NrKGNvbWJpbmVkQmxvY2s6IEN1aUJsb2NrKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnB1c2godHJ1ZSk7XG4gICAgICAgIGNvbnN0IGJsb2NrID0gdGhpcy5lZGl0b3IuYmxvY2tzLmdldEJ5SWQoY29tYmluZWRCbG9jay5pZCB8fCAnJyk7XG5cbiAgICAgICAgaWYgKGJsb2NrKSB7XG4gICAgICAgICAgICB0aGlzLmVkaXRvci5ibG9ja3MudXBkYXRlKGJsb2NrLmlkLCBjb21iaW5lZEJsb2NrLmRhdGEgYXMgQ3VpQ29tYmluZWRQYXJ0QmxvY2spO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmluc2VydChjb21iaW5lZEJsb2NrKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluc2VydChibG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jaGVja0ZpcnN0KGJsb2NrKTtcbiAgICAgICAgdGhpcy5pbmRleCsrO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tGaXJzdChibG9jazogQ3VpQmxvY2spOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzRmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuaXNTa2lwID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZWRpdG9yLmJsb2Nrcy5pbnNlcnQoYmxvY2sudHlwZSwgYmxvY2suZGF0YSwge30sIHRoaXMuaW5kZXgsIGZhbHNlLCBmYWxzZSwgYmxvY2suaWQpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUT0RPOiDQtdGB0YLRjCDQstCw0YDQuNC6INGH0YLQviDRh9GC0L4g0YLQviDQv9C+0LnQtNC10YIg0L3QtSDRgtCw0LpcbiAgICAgICAgdGhpcy5lZGl0b3IuYmxvY2tzLnJlbmRlcih7IGJsb2NrczogW2Jsb2NrXSB9KS50aGVuKCgpID0+ICh0aGlzLmlzU2tpcCA9IGZhbHNlKSk7XG4gICAgICAgIHRoaXMuaXNGaXJzdCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29tYmluZWRCbG9jayhibG9jazogQ3VpQmxvY2spOiBDdWlCbG9jayB7XG4gICAgICAgIGNvbnN0IGNvbWJpbmVkQmxvY2tEYXRhID0gYmxvY2suZGF0YSBhcyB7IHBhcmVudElkOiBzdHJpbmcgfTtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy5jb21iaW5lZEJsb2Nrcy5nZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQpO1xuXG4gICAgICAgIHRoaXMuYmxvY2tJZHNNYXAuc2V0KGJsb2NrLmlkISwgYmxvY2suaWQhKTtcblxuICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnREYXRhID0gcGFyZW50LmRhdGEgYXMgeyB0ZXh0QmxvY2tzOiBDdWlCbG9ja1tdIH07XG4gICAgICAgICAgICBwYXJlbnREYXRhLnRleHRCbG9ja3MucHVzaChibG9jayk7XG5cbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXJlbnRPYmplY3Q6IEN1aUJsb2NrID0ge1xuICAgICAgICAgICAgaWQ6IGNvbWJpbmVkQmxvY2tEYXRhLnBhcmVudElkLFxuICAgICAgICAgICAgdHlwZTogQ09NQklORURfVEVYVF9CTE9DS19OQU1FLFxuICAgICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgICAgIGlkOiBjb21iaW5lZEJsb2NrRGF0YS5wYXJlbnRJZCxcbiAgICAgICAgICAgICAgICB0ZXh0QmxvY2tzOiBbYmxvY2tdXG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgdGhpcy5jb21iaW5lZEJsb2Nrcy5zZXQoY29tYmluZWRCbG9ja0RhdGEucGFyZW50SWQsIHBhcmVudE9iamVjdCk7XG5cbiAgICAgICAgcmV0dXJuIHBhcmVudE9iamVjdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEJsb2NrSWRzVG9NYXAoYmxvY2tJZHM6IHN0cmluZ1tdLCBhZGRlZEJsb2NrczogQ3VpRnVsbEJsb2NrRGF0YVtdKTogdm9pZCB7XG4gICAgICAgIGlmICghYmxvY2tJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnVwZGF0ZUVsZW1lbnRMb2NhbElkV2l0aE1haW5JZChibG9ja0lkcywgYWRkZWRCbG9ja3MpO1xuICAgICAgICBhZGRlZEJsb2Nrcy5mb3JFYWNoKChibG9ja0RhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChibG9ja0RhdGEuaWQsIGJsb2NrSWRzW2luZGV4XSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRWxlbWVudExvY2FsSWRXaXRoTWFpbklkKGJsb2NrSWRzOiBzdHJpbmdbXSwgYmxvY2tzOiBDdWlGdWxsQmxvY2tEYXRhW10pOiB2b2lkIHtcbiAgICAgICAgYmxvY2tzLmZvckVhY2goKGJsb2NrLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZWRpdG9yRWxlbWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PihgW2RhdGEtaWQ9XCIke2Jsb2NrLmlkfVwiXWApO1xuXG4gICAgICAgICAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGVsZW1lbnQuZGF0YXNldFsnaWQnXSA9IGJsb2NrSWRzW2luZGV4XTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRTdGFydEJsb2NrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5ibG9ja0lkc01hcC5zaXplKSB7XG4gICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICB0aGlzLmVkaXRvckVtcHR5LmVtaXQodGhpcy5jaGVja0lzRW1wdHkoKSk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgdGhpcy5lZGl0b3IucmVuZGVyKHsgYmxvY2tzOiBbXSB9KTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5lZGl0b3JTZXJ2aWNlLnNldFN0YXJ0QmxvY2soXG4gICAgICAgICAgICB0aGlzLmVkaXRvckFwaUlkKCksXG4gICAgICAgICAgICBhc3luYyAoYmxvY2s6IEN1aUJsb2NrPEN1aUNvbWJpbmVkQmxvY2tUb29sRGF0YT4sIGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJsb2NrSWRzTWFwLnNldChpZCwgaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMuaXNTa2lwQ29tYmluZWRCbG9ja09uQ2hhbmdlLnB1c2godHJ1ZSk7XG5cbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVkaXRvci5yZW5kZXIoeyBibG9ja3M6IFtibG9ja10gfSk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNldEZvY3VzKCk7XG4gICAgICAgICAgICAgICAgcmVjYWxjdWxhdGVJbmRleGVzKHRoaXMuZWRpdG9yLmJsb2Nrcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGb2N1cygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZygpPy5hdXRvZm9jdXMpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZWRpdG9yLmNhcmV0LmZvY3VzKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0lzRW1wdHkoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IGJsb2Nrc0NvdW50ID0gdGhpcy5lZGl0b3IuYmxvY2tzPy5nZXRCbG9ja3NDb3VudCgpID8/IDA7XG5cbiAgICAgICAgaWYgKCFibG9ja3NDb3VudCkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBSRURBQ1RPUl9TRUxFQ1RPUiA9ICcuY29kZXgtZWRpdG9yX19yZWRhY3Rvcic7XG4gICAgICAgIGNvbnN0IHJlZGFjdG9yVGV4dENvbnRlbnQgPSB0aGlzLmVkaXRvckVsZW1lbnRcbiAgICAgICAgICAgIC5xdWVyeVNlbGVjdG9yKFJFREFDVE9SX1NFTEVDVE9SKVxuICAgICAgICAgICAgPy50ZXh0Q29udGVudD8udHJpbSgpO1xuXG4gICAgICAgIHJldHVybiAhcmVkYWN0b3JUZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0RGF0YSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY3JvbGxTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMucG9vbGluZ1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5pc1NraXBDb21iaW5lZEJsb2NrT25DaGFuZ2UgPSBbXTtcbiAgICAgICAgdGhpcy5pc0ZpcnN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5pc0NoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNTa2lwID0gZmFsc2U7XG4gICAgICAgIHRoaXMuaXNSZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5ibG9ja0lkc01hcCA9IG5ldyBNYXA8c3RyaW5nLCBzdHJpbmc+KCk7XG4gICAgICAgIHRoaXMuY29tYmluZWRCbG9ja3MgPSBuZXcgTWFwKCk7XG4gICAgICAgIHRoaXMuaW5kZXggPSAwO1xuICAgICAgICB0aGlzLnBhZ2UgPSAwO1xuICAgICAgICB0aGlzLmFkZGVkQmxvY2tzID0gW107XG4gICAgICAgIHRoaXMudXBkYXRlZEJsb2NrcyA9IFtdO1xuICAgICAgICB0aGlzLnJlbW92ZWRCbG9ja3NJZHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VzUXVldWUgPSBbXTtcbiAgICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gICAgfVxufVxuIiwiPGRpdlxuICAgICNlZGl0b3JcbiAgICBbaWRdPVwiZWRpdG9ySWRcIlxuICAgIGRhdGEtZWRpdG9yXG4gICAgW2NsYXNzLl9yZWFkb25seV09XCJjb25maWcoKS5yZWFkT25seVwiXG4+PC9kaXY+XG4iXX0=
|
|
@@ -8411,7 +8411,6 @@ class CuiEditorComponent {
|
|
|
8411
8411
|
if (!Array.isArray(event)) {
|
|
8412
8412
|
event = [event];
|
|
8413
8413
|
}
|
|
8414
|
-
recalculateIndexes(this.editor.blocks);
|
|
8415
8414
|
if (this.isChanging) {
|
|
8416
8415
|
this.changesQueue.unshift(event);
|
|
8417
8416
|
}
|
|
@@ -8439,7 +8438,19 @@ class CuiEditorComponent {
|
|
|
8439
8438
|
if (!blockIds.length) {
|
|
8440
8439
|
return;
|
|
8441
8440
|
}
|
|
8442
|
-
this.
|
|
8441
|
+
this.recalculateAllBlocksAfterRemoval(blockIds);
|
|
8442
|
+
}
|
|
8443
|
+
recalculateAllBlocksAfterRemoval(blockIds) {
|
|
8444
|
+
const remainingRemovedBlockIds = new Set(blockIds);
|
|
8445
|
+
this.updatedBlocks = this.updatedBlocks.filter((updatedBlock) => !remainingRemovedBlockIds.has(updatedBlock.id ?? ''));
|
|
8446
|
+
this.addedBlocks = this.addedBlocks.filter((addedBlock) => {
|
|
8447
|
+
if (!remainingRemovedBlockIds.has(addedBlock.id)) {
|
|
8448
|
+
return true;
|
|
8449
|
+
}
|
|
8450
|
+
remainingRemovedBlockIds.delete(addedBlock.id);
|
|
8451
|
+
return false;
|
|
8452
|
+
});
|
|
8453
|
+
this.removedBlocksIds.push(...remainingRemovedBlockIds.values());
|
|
8443
8454
|
}
|
|
8444
8455
|
initEditorEffect() {
|
|
8445
8456
|
effect(() => {
|
|
@@ -8523,6 +8534,7 @@ class CuiEditorComponent {
|
|
|
8523
8534
|
this.isChanging = true;
|
|
8524
8535
|
try {
|
|
8525
8536
|
const editorOutput = await this.editor.save();
|
|
8537
|
+
recalculateIndexes(this.editor.blocks);
|
|
8526
8538
|
const events = event.filter((data) => data.detail.target.name !== COMBINED_TEXT_BLOCK_NAME);
|
|
8527
8539
|
const blocks = this.editorService.sortEventsByTypes(events);
|
|
8528
8540
|
const { addBlocks$, addedBlocks } = this.collectAddedBlocksRequest(blocks, editorOutput);
|