@sapui5/sap.fe.templates 1.104.1 → 1.105.1
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/package.json +3 -3
- package/src/sap/fe/templates/.library +1 -1
- package/src/sap/fe/templates/AnalyticalListPage/Component.js +2 -2
- package/src/sap/fe/templates/AnalyticalListPage/chart/FEChartDelegate.js +1 -1
- package/src/sap/fe/templates/Feedback.js +1 -1
- package/src/sap/fe/templates/ListComponent.js +2 -2
- package/src/sap/fe/templates/ListReport/Component.js +2 -2
- package/src/sap/fe/templates/ListReport/ExtensionAPI.js +5 -3
- package/src/sap/fe/templates/ListReport/ExtensionAPI.ts +2 -1
- package/src/sap/fe/templates/ListReport/ListReport.view.xml +10 -73
- package/src/sap/fe/templates/ListReport/ListReportController.controller.js +30 -116
- package/src/sap/fe/templates/ListReport/ListReportController.controller.ts +25 -105
- package/src/sap/fe/templates/ListReport/ListReportTemplating.js +1 -1
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.js +166 -62
- package/src/sap/fe/templates/ListReport/controls/MultipleModeControl.ts +129 -41
- package/src/sap/fe/templates/ListReport/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ListReport/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ListReport/view/fragments/Chart.fragment.xml +3 -0
- package/src/sap/fe/templates/ListReport/view/fragments/CollectionVisualization.fragment.xml +10 -4
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/MacroChart.fragment.xml +3 -2
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.js +3 -3
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleMode.fragment.ts +6 -2
- package/src/sap/fe/templates/{controls → ListReport/view/fragments}/Table.fragment.xml +6 -6
- package/src/sap/fe/templates/ListReport/view/fragments/VariantManagement.fragment.xml +31 -0
- package/src/sap/fe/templates/ObjectPage/Component.js +9 -9
- package/src/sap/fe/templates/ObjectPage/Component.ts +10 -6
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.js +24 -11
- package/src/sap/fe/templates/ObjectPage/ExtensionAPI.ts +16 -3
- package/src/sap/fe/templates/ObjectPage/ObjectPage.view.xml +48 -143
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.js +51 -36
- package/src/sap/fe/templates/ObjectPage/ObjectPageController.controller.ts +47 -30
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.js +25 -11
- package/src/sap/fe/templates/ObjectPage/ObjectPageTemplating.ts +20 -8
- package/src/sap/fe/templates/ObjectPage/components/DraftHandlerButton.js +178 -0
- package/src/sap/fe/templates/ObjectPage/controls/StashableHBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/StashableVBox.js +2 -2
- package/src/sap/fe/templates/ObjectPage/controls/SubSectionBlock.js +2 -2
- package/src/sap/fe/templates/ObjectPage/designtime/FlexBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableHBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/designtime/StashableVBox.designtime.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableHBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/flexibility/StashableVBox.flexibility.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/IntentBasedNavigation.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/InternalRouting.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/MessageHandler.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Paginator.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/Share.js +1 -1
- package/src/sap/fe/templates/ObjectPage/overrides/ViewState.js +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Chart.fragment.xml +13 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/EditableHeaderFacet.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeaderDataPoint.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Heading.fragment.xml +2 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/HeadingTitle.fragment.xml +2 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/MacroChart.fragment.xml +22 -0
- package/src/sap/fe/templates/ObjectPage/view/fragments/ObjectPageHeaderForm.fragment.xml +7 -2
- package/src/sap/fe/templates/ObjectPage/view/fragments/Section.fragment.xml +8 -49
- package/src/sap/fe/templates/ObjectPage/view/fragments/SectionPresentationVisualization.fragment.xml +1 -1
- package/src/sap/fe/templates/ObjectPage/view/fragments/Table.fragment.xml +23 -0
- package/src/sap/fe/templates/RootContainer/controller/Fcl.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/NavContainer.controller.js +2 -2
- package/src/sap/fe/templates/RootContainer/controller/RootContainerBaseController.js +2 -2
- package/src/sap/fe/templates/RootContainer/overrides/EditFlow.js +1 -1
- package/src/sap/fe/templates/TableScroller.js +1 -1
- package/src/sap/fe/templates/library.js +2 -2
- package/src/sap/fe/templates/messagebundle_bg.properties +2 -2
- package/src/sap/fe/templates/messagebundle_cy.properties +2 -2
- package/src/sap/fe/templates/messagebundle_en_US_saptrc.properties +2 -7
- package/src/sap/fe/templates/messagebundle_lv.properties +2 -2
- package/src/sap/fe/templates/ListReport/view/fragments/MultipleModeOld.fragment.xml +0 -50
- package/src/sap/fe/templates/controls/Chart.fragment.xml +0 -25
|
@@ -2,6 +2,7 @@ import type ResourceBundle from "sap/base/i18n/ResourceBundle";
|
|
|
2
2
|
import Log from "sap/base/Log";
|
|
3
3
|
import ObjectPath from "sap/base/util/ObjectPath";
|
|
4
4
|
import type DynamicPage from "sap/f/DynamicPage";
|
|
5
|
+
import ActionRuntime from "sap/fe/core/ActionRuntime";
|
|
5
6
|
import CommonUtils from "sap/fe/core/CommonUtils";
|
|
6
7
|
import EditFlow from "sap/fe/core/controllerextensions/EditFlow";
|
|
7
8
|
import IntentBasedNavigation from "sap/fe/core/controllerextensions/IntentBasedNavigation";
|
|
@@ -40,7 +41,6 @@ import type SegmentedButton from "sap/m/SegmentedButton";
|
|
|
40
41
|
import type Control from "sap/ui/core/Control";
|
|
41
42
|
import OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
|
|
42
43
|
import { system } from "sap/ui/Device";
|
|
43
|
-
import ControlPersonalizationWriteAPI from "sap/ui/fl/write/api/ControlPersonalizationWriteAPI";
|
|
44
44
|
import StateUtil from "sap/ui/mdc/p13n/StateUtil";
|
|
45
45
|
import type Table from "sap/ui/mdc/Table";
|
|
46
46
|
import type JSONModel from "sap/ui/model/json/JSONModel";
|
|
@@ -94,12 +94,9 @@ class ListReportController extends PageController {
|
|
|
94
94
|
@usingExtension(MassEdit)
|
|
95
95
|
massEdit!: MassEdit;
|
|
96
96
|
private extensionAPI?: ExtensionAPI;
|
|
97
|
-
private _oListReportControl?: Control;
|
|
98
97
|
private filterBarConditions?: any;
|
|
99
|
-
private _bMultiMode?: boolean;
|
|
100
98
|
private sUpdateTimer?: any;
|
|
101
99
|
private oResourceBundle?: ResourceBundle;
|
|
102
|
-
private _sEntitySet?: string;
|
|
103
100
|
private hasPendingChartChanges?: boolean;
|
|
104
101
|
private hasPendingTableChanges?: boolean;
|
|
105
102
|
|
|
@@ -146,7 +143,6 @@ class ListReportController extends PageController {
|
|
|
146
143
|
|
|
147
144
|
onExit() {
|
|
148
145
|
delete this.filterBarConditions;
|
|
149
|
-
delete this._oListReportControl;
|
|
150
146
|
if (this.extensionAPI) {
|
|
151
147
|
this.extensionAPI.destroy();
|
|
152
148
|
}
|
|
@@ -156,8 +152,7 @@ class ListReportController extends PageController {
|
|
|
156
152
|
_onAfterBinding() {
|
|
157
153
|
const aTables = this._getControls("table");
|
|
158
154
|
if (EditState.isEditStateDirty()) {
|
|
159
|
-
|
|
160
|
-
oMultiModeControl?.invalidateContent();
|
|
155
|
+
this._getMultiModeControl()?.invalidateContent();
|
|
161
156
|
const oTableBinding = this._getTableBinding();
|
|
162
157
|
if (oTableBinding) {
|
|
163
158
|
if (CommonUtils.getAppComponent(this.getView())._isFclEnabled()) {
|
|
@@ -281,11 +276,9 @@ class ListReportController extends PageController {
|
|
|
281
276
|
}
|
|
282
277
|
|
|
283
278
|
getCurrentEntitySet() {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
this.
|
|
287
|
-
}
|
|
288
|
-
return this._sEntitySet;
|
|
279
|
+
return this._isMultiMode()
|
|
280
|
+
? this._getMultiModeControl()?.getDisplayedEntitySet()
|
|
281
|
+
: this._getTable()?.data("targetCollectionPath").slice(1);
|
|
289
282
|
}
|
|
290
283
|
|
|
291
284
|
/**
|
|
@@ -306,7 +299,7 @@ class ListReportController extends PageController {
|
|
|
306
299
|
),
|
|
307
300
|
aSelectedContexts = oTable.getSelectedContexts();
|
|
308
301
|
|
|
309
|
-
|
|
302
|
+
ActionRuntime.setActionEnablement(oInternalModelContext, oActionOperationAvailableMap, aSelectedContexts, "table");
|
|
310
303
|
});
|
|
311
304
|
CommonUtils.updateDataFieldForIBNButtonsVisibility(aIBNActions, this.getView());
|
|
312
305
|
}
|
|
@@ -388,20 +381,10 @@ class ListReportController extends PageController {
|
|
|
388
381
|
return this.getView().getContent()[0].data("singleTableId");
|
|
389
382
|
}
|
|
390
383
|
|
|
391
|
-
_getCurrentControl(): Control {
|
|
392
|
-
if (!this._oListReportControl) {
|
|
393
|
-
const oMultiModeTab = this._getMultiModeControl().content;
|
|
394
|
-
this._oListReportControl = this.getView().byId(
|
|
395
|
-
oMultiModeTab.getSelectedKey() || (oMultiModeTab.getItems()[0] as any).getKey()
|
|
396
|
-
) as Control;
|
|
397
|
-
}
|
|
398
|
-
return this._oListReportControl;
|
|
399
|
-
}
|
|
400
|
-
|
|
401
384
|
_getTable(): Table | undefined {
|
|
402
385
|
if (this._isMultiMode()) {
|
|
403
|
-
const oControl = this.
|
|
404
|
-
return oControl
|
|
386
|
+
const oControl = this._getMultiModeControl()?.getSelectedInnerControl()?.content;
|
|
387
|
+
return oControl?.isA("sap.ui.mdc.Table") ? (oControl as Table) : undefined;
|
|
405
388
|
}
|
|
406
389
|
return this.getView().byId(this._getTableControlId()) as Table;
|
|
407
390
|
}
|
|
@@ -459,11 +442,8 @@ class ListReportController extends PageController {
|
|
|
459
442
|
* @name _isMultiMode
|
|
460
443
|
* @returns Is Multiple Table mode set?
|
|
461
444
|
*/
|
|
462
|
-
_isMultiMode() {
|
|
463
|
-
|
|
464
|
-
this._bMultiMode = !!this._getMultiModeControl();
|
|
465
|
-
}
|
|
466
|
-
return this._bMultiMode;
|
|
445
|
+
_isMultiMode(): boolean {
|
|
446
|
+
return !!this.getView().getModel("_pageModel")?.getProperty("/multiViewsControl");
|
|
467
447
|
}
|
|
468
448
|
|
|
469
449
|
/**
|
|
@@ -585,26 +565,21 @@ class ListReportController extends PageController {
|
|
|
585
565
|
oInternalModelContext.setProperty("controls/ignoredFields", ignoredFields);
|
|
586
566
|
}
|
|
587
567
|
|
|
588
|
-
_updateMultiModeSelectedControl() {
|
|
589
|
-
this._sEntitySet = undefined;
|
|
590
|
-
this._oListReportControl = undefined;
|
|
591
|
-
this._getCurrentControl();
|
|
592
|
-
}
|
|
593
|
-
/**
|
|
594
|
-
* Method to determine if a tab from the list report is a custom tab.
|
|
595
|
-
*
|
|
596
|
-
* @function
|
|
597
|
-
* @name _isCustomTab
|
|
598
|
-
* @returns Determines if the tab is a custom tab.
|
|
599
|
-
*/
|
|
600
|
-
_isCustomTab() {
|
|
601
|
-
return this._getMultiModeControl()?.content.getSelectedKey().indexOf("::CustomTab::") > -1;
|
|
602
|
-
}
|
|
603
|
-
|
|
604
568
|
_isFilterBarHidden() {
|
|
605
569
|
return (this.getView().getViewData() as any).hideFilterBar;
|
|
606
570
|
}
|
|
607
571
|
|
|
572
|
+
_getApplyAutomaticallyOnVariant(VariantManagement: any, key: string): Boolean {
|
|
573
|
+
if (!VariantManagement || !key) {
|
|
574
|
+
return false;
|
|
575
|
+
}
|
|
576
|
+
const variants = VariantManagement.getVariants();
|
|
577
|
+
const currentVariant = variants.find(function (variant: any) {
|
|
578
|
+
return variant && variant.key === key;
|
|
579
|
+
});
|
|
580
|
+
return (currentVariant && currentVariant.executeOnSelect) || false;
|
|
581
|
+
}
|
|
582
|
+
|
|
608
583
|
_shouldAutoTriggerSearch(oVM: any) {
|
|
609
584
|
if (
|
|
610
585
|
(this.getView().getViewData() as any).initialLoad === InitialLoadMode.Auto &&
|
|
@@ -644,44 +619,6 @@ class ListReportController extends PageController {
|
|
|
644
619
|
}
|
|
645
620
|
|
|
646
621
|
handlers = {
|
|
647
|
-
onTabMultiModeChange(this: ListReportController, oEvent: any) {
|
|
648
|
-
const sPreviousSelectedKey = oEvent && oEvent.mParameters ? oEvent.mParameters.previousKey : undefined;
|
|
649
|
-
this._updateMultiModeSelectedControl();
|
|
650
|
-
|
|
651
|
-
if (oEvent && oEvent.mParameters && sPreviousSelectedKey !== oEvent.mParameters.selectedKey) {
|
|
652
|
-
const sSelectedKey = oEvent.mParameters.selectedKey;
|
|
653
|
-
const oFilterBar = this._getFilterBarControl();
|
|
654
|
-
const oMultiModeControl = this._getMultiModeControl();
|
|
655
|
-
const oInternalModelContext = this.getView().getBindingContext("internal");
|
|
656
|
-
if (oInternalModelContext) {
|
|
657
|
-
if (oFilterBar && oInternalModelContext.getProperty("hasPendingFilters") !== true) {
|
|
658
|
-
if (this._isCustomTab()) {
|
|
659
|
-
const oFilterConditions = oFilterBar.getFilterConditions();
|
|
660
|
-
this.onViewNeedsRefresh({
|
|
661
|
-
filterConditions: oFilterConditions,
|
|
662
|
-
currentTabId: sSelectedKey,
|
|
663
|
-
refreshCause: "tabChanged"
|
|
664
|
-
});
|
|
665
|
-
}
|
|
666
|
-
}
|
|
667
|
-
}
|
|
668
|
-
ControlPersonalizationWriteAPI.add({
|
|
669
|
-
changes: [
|
|
670
|
-
{
|
|
671
|
-
changeSpecificData: {
|
|
672
|
-
changeType: "selectIconTabBarFilter",
|
|
673
|
-
content: {
|
|
674
|
-
selectedKey: sSelectedKey,
|
|
675
|
-
previousSelectedKey: sPreviousSelectedKey
|
|
676
|
-
}
|
|
677
|
-
},
|
|
678
|
-
selectorElement: oMultiModeControl.content
|
|
679
|
-
}
|
|
680
|
-
]
|
|
681
|
-
});
|
|
682
|
-
}
|
|
683
|
-
this.getExtensionAPI().updateAppState();
|
|
684
|
-
},
|
|
685
622
|
onFiltersChanged(this: ListReportController, oEvent: any) {
|
|
686
623
|
const oFilterBar = this._getFilterBarControl();
|
|
687
624
|
if (oFilterBar) {
|
|
@@ -690,13 +627,13 @@ class ListReportController extends PageController {
|
|
|
690
627
|
this.onPendingFilters();
|
|
691
628
|
oInternalModelContext.setProperty("appliedFilters", oFilterBar.getAssignedFiltersText().filtersText);
|
|
692
629
|
if (oEvent.getParameter("conditionsBased")) {
|
|
693
|
-
this._getMultiModeControl()?.setFreezeContent(true);
|
|
694
630
|
oInternalModelContext.setProperty("hasPendingFilters", true);
|
|
695
631
|
}
|
|
696
632
|
}
|
|
697
633
|
},
|
|
698
634
|
onVariantSelected(this: ListReportController, oEvent: any) {
|
|
699
635
|
const oVM = oEvent.getSource();
|
|
636
|
+
const currentVariantKey = oEvent.getParameter("key");
|
|
700
637
|
const oMultiModeControl = this._getMultiModeControl();
|
|
701
638
|
|
|
702
639
|
oMultiModeControl?.invalidateContent();
|
|
@@ -706,7 +643,7 @@ class ListReportController extends PageController {
|
|
|
706
643
|
if (this._shouldAutoTriggerSearch(oVM)) {
|
|
707
644
|
// the app state will be updated via onSearch handler
|
|
708
645
|
return this._getFilterBarControl().triggerSearch();
|
|
709
|
-
} else {
|
|
646
|
+
} else if (!this._getApplyAutomaticallyOnVariant(oVM, currentVariantKey)) {
|
|
710
647
|
this.getExtensionAPI().updateAppState();
|
|
711
648
|
}
|
|
712
649
|
}, 0);
|
|
@@ -724,25 +661,8 @@ class ListReportController extends PageController {
|
|
|
724
661
|
const bHideDraft = FilterUtils.getEditStateIsHideDraft(oFilterBar.getConditions());
|
|
725
662
|
oInternalModelContext.setProperty("hasPendingFilters", false);
|
|
726
663
|
oInternalModelContext.setProperty("hideDraftInfo", bHideDraft);
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
oMultiModeControl.setCountsOutDated(true);
|
|
730
|
-
oMultiModeControl.setFreezeContent(false);
|
|
731
|
-
if (!this._isCustomTab()) {
|
|
732
|
-
oMultiModeControl.updateMultiTabNotApplicableFields(
|
|
733
|
-
oFilterBar,
|
|
734
|
-
oFilterBar.data("entityType"),
|
|
735
|
-
this.oResourceBundle as ResourceBundle
|
|
736
|
-
);
|
|
737
|
-
} else {
|
|
738
|
-
const oFilterConditions = oFilterBar.getFilterConditions();
|
|
739
|
-
this.onViewNeedsRefresh({
|
|
740
|
-
filterConditions: oFilterConditions,
|
|
741
|
-
currentTabId: oMultiModeControl.content.getSelectedKey(),
|
|
742
|
-
refreshCause: "search"
|
|
743
|
-
});
|
|
744
|
-
}
|
|
745
|
-
} else {
|
|
664
|
+
|
|
665
|
+
if (!this._getMultiModeControl()) {
|
|
746
666
|
this._updateALPNotApplicableFields(oInternalModelContext, oFilterBar);
|
|
747
667
|
}
|
|
748
668
|
if (oMdcChart) {
|
|
@@ -42,4 +42,4 @@ sap.ui.define(["sap/fe/core/helpers/StableIdHelper"], function (StableIdHelper)
|
|
|
42
42
|
_exports.getDefaultPath = getDefaultPath;
|
|
43
43
|
return _exports;
|
|
44
44
|
}, false);
|
|
45
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRWYXJpYW50QmFja1JlZmVyZW5jZSIsIm9WaWV3RGF0YSIsIm9Db252ZXJ0ZXJDb250ZXh0IiwidmFyaWFudE1hbmFnZW1lbnQiLCJnZW5lcmF0ZSIsImZpbHRlckJhcklkIiwidW5kZWZpbmVkIiwiZ2V0RGVmYXVsdFBhdGgiLCJhVmlld3MiLCJpIiwibGVuZ3RoIiwiZGVmYXVsdFBhdGgiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkxpc3RSZXBvcnRUZW1wbGF0aW5nLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRlbXBsYXRlIEhlbHBlcnMgZm9yIHRoZSBMaXN0IFJlcG9ydFxuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuXG4vKipcbiAqIE1ldGhvZCByZXR1cm5zIGFuIFZhcmlhbnRCYWNrUmVmZXJlbmNlIGV4cHJlc3Npb24gYmFzZWQgb24gdmFyaWFudE1hbmFnZW1lbnQgYW5kIG9Db252ZXJ0ZXJDb250ZXh0IHZhbHVlLlxuICpcbiAqIEBmdW5jdGlvblxuICogQG5hbWUgZ2V0VmFyaWFudEJhY2tSZWZlcmVuY2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBvVmlld0RhdGEgT2JqZWN0IENvbnRhaW5pbmcgVmlldyBEYXRhXG4gKiBAcGFyYW0ge29iamVjdH0gb0NvbnZlcnRlckNvbnRleHQgT2JqZWN0IGNvbnRhaW5pbmcgY29udmVydGVkIGNvbnRleHRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuZXhwb3J0IGNvbnN0IGdldFZhcmlhbnRCYWNrUmVmZXJlbmNlID0gZnVuY3Rpb24gKG9WaWV3RGF0YTogYW55LCBvQ29udmVydGVyQ29udGV4dDogYW55KSB7XG5cdGlmIChvVmlld0RhdGEgJiYgb1ZpZXdEYXRhLnZhcmlhbnRNYW5hZ2VtZW50ID09PSBcIlBhZ2VcIikge1xuXHRcdHJldHVybiBcImZlOjpQYWdlVmFyaWFudE1hbmFnZW1lbnRcIjtcblx0fVxuXHRpZiAob1ZpZXdEYXRhICYmIG9WaWV3RGF0YS52YXJpYW50TWFuYWdlbWVudCA9PT0gXCJDb250cm9sXCIpIHtcblx0XHRyZXR1cm4gZ2VuZXJhdGUoW29Db252ZXJ0ZXJDb250ZXh0LmZpbHRlckJhcklkLCBcIlZhcmlhbnRNYW5hZ2VtZW50XCJdKTtcblx0fVxuXHRyZXR1cm4gdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRQYXRoID0gZnVuY3Rpb24gKGFWaWV3czogYW55KSB7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwgYVZpZXdzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKGFWaWV3c1tpXS5kZWZhdWx0UGF0aCkge1xuXHRcdFx0cmV0dXJuIGFWaWV3c1tpXS5kZWZhdWx0UGF0aDtcblx0XHR9XG5cdH1cbn07XG4iXSwibWFwcGluZ3MiOiI7QUFBQTtBQUFBO0FBQUE7Ozs7Ozs7RUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFFTyxJQUFNQSx1QkFBdUIsR0FBRyxVQUFVQyxTQUFWLEVBQTBCQyxpQkFBMUIsRUFBa0Q7SUFDeEYsSUFBSUQsU0FBUyxJQUFJQSxTQUFTLENBQUNFLGlCQUFWLEtBQWdDLE1BQWpELEVBQXlEO01BQ3hELE9BQU8sMkJBQVA7SUFDQTs7SUFDRCxJQUFJRixTQUFTLElBQUlBLFNBQVMsQ0FBQ0UsaUJBQVYsS0FBZ0MsU0FBakQsRUFBNEQ7TUFDM0QsT0FBT0MsUUFBUSxDQUFDLENBQUNGLGlCQUFpQixDQUFDRyxXQUFuQixFQUFnQyxtQkFBaEMsQ0FBRCxDQUFmO0lBQ0E7O0lBQ0QsT0FBT0MsU0FBUDtFQUNBLENBUk07Ozs7RUFVQSxJQUFNQyxjQUFjLEdBQUcsVUFBVUMsTUFBVixFQUF1QjtJQUNwRCxLQUFLLElBQUlDLENBQUMsR0FBRyxDQUFiLEVBQWdCQSxDQUFDLEdBQUdELE1BQU0sQ0FBQ0UsTUFBM0IsRUFBbUNELENBQUMsRUFBcEMsRUFBd0M7TUFDdkMsSUFBSUQsTUFBTSxDQUFDQyxDQUFELENBQU4sQ0FBVUUsV0FBZCxFQUEyQjtRQUMxQixPQUFPSCxNQUFNLENBQUNDLENBQUQsQ0FBTixDQUFVRSxXQUFqQjtNQUNBO0lBQ0Q7RUFDRCxDQU5NIn0=
|