@sapui5/sap.fe.core 1.141.2 → 1.142.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 +1 -1
- package/src/sap/fe/core/.library +4 -1
- package/src/sap/fe/core/ActionRuntime.js +48 -23
- package/src/sap/fe/core/ActionRuntime.ts +61 -35
- package/src/sap/fe/core/AppComponent.js +76 -6
- package/src/sap/fe/core/AppComponent.ts +94 -8
- package/src/sap/fe/core/AppStateHandler.js +9 -8
- package/src/sap/fe/core/AppStateHandler.ts +13 -9
- package/src/sap/fe/core/BaseController.js +8 -5
- package/src/sap/fe/core/BaseController.ts +6 -1
- package/src/sap/fe/core/CommonUtils.js +4 -123
- package/src/sap/fe/core/CommonUtils.ts +3 -172
- package/src/sap/fe/core/ExtensionAPI.js +3 -10
- package/src/sap/fe/core/ExtensionAPI.ts +2 -14
- package/src/sap/fe/core/PageController.js +64 -43
- package/src/sap/fe/core/PageController.ts +62 -47
- package/src/sap/fe/core/TemplateComponent.js +20 -1
- package/src/sap/fe/core/TemplateComponent.ts +24 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
- package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +4 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -39
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
- package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +8 -9
- package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
- package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
- package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
- package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
- package/src/sap/fe/core/controllerextensions/Routing.js +9 -5
- package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
- package/src/sap/fe/core/controllerextensions/Share.js +5 -5
- package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
- package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +33 -11
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +7 -7
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -5
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
- package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
- package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
- package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
- package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
- package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
- package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
- package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
- package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
- package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
- package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
- package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
- package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
- package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
- package/src/sap/fe/core/converters/helpers/ID.js +3 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
- package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
- package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
- package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
- package/src/sap/fe/core/fpm/Component.js +8 -1
- package/src/sap/fe/core/fpm/Component.ts +8 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
- package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
- package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
- package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
- package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
- package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
- package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
- package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
- package/src/sap/fe/core/helpers/WebSocket.js +6 -7
- package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
- package/src/sap/fe/core/library.js +30 -3
- package/src/sap/fe/core/library.ts +28 -1
- package/src/sap/fe/core/messagebundle.properties +8 -1
- package/src/sap/fe/core/messagebundle_ar.properties +7 -0
- package/src/sap/fe/core/messagebundle_bg.properties +10 -3
- package/src/sap/fe/core/messagebundle_ca.properties +7 -0
- package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
- package/src/sap/fe/core/messagebundle_cs.properties +7 -0
- package/src/sap/fe/core/messagebundle_cy.properties +8 -1
- package/src/sap/fe/core/messagebundle_da.properties +7 -0
- package/src/sap/fe/core/messagebundle_de.properties +7 -0
- package/src/sap/fe/core/messagebundle_el.properties +7 -0
- package/src/sap/fe/core/messagebundle_en.properties +8 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
- package/src/sap/fe/core/messagebundle_es.properties +8 -1
- package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
- package/src/sap/fe/core/messagebundle_et.properties +7 -0
- package/src/sap/fe/core/messagebundle_fi.properties +7 -0
- package/src/sap/fe/core/messagebundle_fr.properties +16 -9
- package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
- package/src/sap/fe/core/messagebundle_hi.properties +8 -1
- package/src/sap/fe/core/messagebundle_hr.properties +7 -0
- package/src/sap/fe/core/messagebundle_hu.properties +7 -0
- package/src/sap/fe/core/messagebundle_id.properties +7 -0
- package/src/sap/fe/core/messagebundle_it.properties +7 -0
- package/src/sap/fe/core/messagebundle_iw.properties +7 -0
- package/src/sap/fe/core/messagebundle_ja.properties +8 -1
- package/src/sap/fe/core/messagebundle_kk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ko.properties +7 -0
- package/src/sap/fe/core/messagebundle_lt.properties +7 -0
- package/src/sap/fe/core/messagebundle_lv.properties +7 -0
- package/src/sap/fe/core/messagebundle_mk.properties +7 -0
- package/src/sap/fe/core/messagebundle_ms.properties +7 -0
- package/src/sap/fe/core/messagebundle_nl.properties +7 -0
- package/src/sap/fe/core/messagebundle_no.properties +7 -0
- package/src/sap/fe/core/messagebundle_pl.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt.properties +7 -0
- package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
- package/src/sap/fe/core/messagebundle_ro.properties +7 -0
- package/src/sap/fe/core/messagebundle_ru.properties +7 -0
- package/src/sap/fe/core/messagebundle_sh.properties +7 -0
- package/src/sap/fe/core/messagebundle_sk.properties +7 -0
- package/src/sap/fe/core/messagebundle_sl.properties +7 -0
- package/src/sap/fe/core/messagebundle_sr.properties +7 -0
- package/src/sap/fe/core/messagebundle_sv.properties +7 -0
- package/src/sap/fe/core/messagebundle_th.properties +7 -0
- package/src/sap/fe/core/messagebundle_tr.properties +7 -0
- package/src/sap/fe/core/messagebundle_uk.properties +7 -0
- package/src/sap/fe/core/messagebundle_vi.properties +7 -0
- package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
- package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
- package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
- package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
- package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
- package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
- package/src/sap/fe/core/templating/UIFormatters.js +17 -2
- package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
- package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
- package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
- package/ui5.yaml +2 -0
|
@@ -1,6 +1,4 @@
|
|
|
1
1
|
import type { ActionParameter as EdmActionParameter } from "@sap-ux/vocabularies-types";
|
|
2
|
-
import type * as Edm from "@sap-ux/vocabularies-types/Edm";
|
|
3
|
-
import type { FilterRestrictionsType } from "@sap-ux/vocabularies-types/vocabularies/Capabilities";
|
|
4
2
|
import type {
|
|
5
3
|
SemanticObjectMappingAbstractTypes,
|
|
6
4
|
SemanticObjectMappingTypeTypes,
|
|
@@ -10,7 +8,6 @@ import { CommonAnnotationTerms } from "@sap-ux/vocabularies-types/vocabularies/C
|
|
|
10
8
|
import type { SelectionPresentationVariant, SelectionVariantType, TextArrangement } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
11
9
|
import { UIAnnotationTypes } from "@sap-ux/vocabularies-types/vocabularies/UI";
|
|
12
10
|
import Log from "sap/base/Log";
|
|
13
|
-
import uniqueSort from "sap/base/util/array/uniqueSort";
|
|
14
11
|
import mergeObjects from "sap/base/util/merge";
|
|
15
12
|
import type AppComponent from "sap/fe/core/AppComponent";
|
|
16
13
|
import type { ComponentData } from "sap/fe/core/AppComponent";
|
|
@@ -58,18 +55,10 @@ import type { Link } from "sap/ushell/services/Navigation";
|
|
|
58
55
|
import type ObjectPageDynamicHeaderTitle from "sap/uxap/ObjectPageDynamicHeaderTitle";
|
|
59
56
|
import type ObjectPageLayout from "sap/uxap/ObjectPageLayout";
|
|
60
57
|
import type ObjectPageSubSection from "sap/uxap/ObjectPageSubSection";
|
|
61
|
-
import type {
|
|
62
|
-
ExpandPathType,
|
|
63
|
-
MetaModelEntityType,
|
|
64
|
-
MetaModelEnum,
|
|
65
|
-
MetaModelNavProperty,
|
|
66
|
-
MetaModelProperty,
|
|
67
|
-
MetaModelType
|
|
68
|
-
} from "types/metamodel_types";
|
|
58
|
+
import type { MetaModelEntityType, MetaModelEnum, MetaModelNavProperty, MetaModelProperty, MetaModelType } from "types/metamodel_types";
|
|
69
59
|
import type { BindContextParameters } from "./controllerextensions/editFlow/draft";
|
|
70
60
|
import AnyElement from "./controls/AnyElement";
|
|
71
61
|
import { getRangeDefinition } from "./converters/helpers/SelectionVariantHelper";
|
|
72
|
-
import * as MetaModelFunction from "./helpers/MetaModelFunction";
|
|
73
62
|
|
|
74
63
|
type MyInboxIntent = {
|
|
75
64
|
semanticObject: string;
|
|
@@ -90,7 +79,7 @@ function normalizeSearchTerm(sSearchTerm: string | undefined): string | undefine
|
|
|
90
79
|
if (convertedSearchTerm === "" || convertedSearchTerm === " ") {
|
|
91
80
|
return undefined;
|
|
92
81
|
}
|
|
93
|
-
return convertedSearchTerm;
|
|
82
|
+
return convertedSearchTerm.trim();
|
|
94
83
|
}
|
|
95
84
|
|
|
96
85
|
async function waitForContextRequested(bindingContext: ODataV4Context): Promise<void> {
|
|
@@ -483,7 +472,7 @@ function getCurrentPageView(oAppComponent: AppComponent): FEView {
|
|
|
483
472
|
const rootViewController = oAppComponent.getRootViewController();
|
|
484
473
|
return rootViewController.isFclEnabled()
|
|
485
474
|
? rootViewController.getRightmostView()
|
|
486
|
-
: CommonUtils.getTargetView((oAppComponent.getRootContainer() as NavContainer).getCurrentPage());
|
|
475
|
+
: CommonUtils.getTargetView((oAppComponent.getRootContainer() as NavContainer).getCurrentPage?.());
|
|
487
476
|
}
|
|
488
477
|
|
|
489
478
|
function getTargetView(oControl: ManagedObject | null): FEView {
|
|
@@ -1122,163 +1111,6 @@ async function fnGetSemanticObjectPromise(oMetaModel: ODataMetaModel, sPath: str
|
|
|
1122
1111
|
return CommonUtils.getSemanticObjectsFromPath(oMetaModel, sPath, sQualifier);
|
|
1123
1112
|
}
|
|
1124
1113
|
|
|
1125
|
-
function getFilterAllowedExpression(oFilterRestrictionsAnnotation?: MetaModelType<FilterRestrictionsType>): _FilterAllowedExpressions {
|
|
1126
|
-
const mAllowedExpressions: _FilterAllowedExpressions = {};
|
|
1127
|
-
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation.FilterExpressionRestrictions !== undefined) {
|
|
1128
|
-
oFilterRestrictionsAnnotation.FilterExpressionRestrictions.forEach(function (oProperty) {
|
|
1129
|
-
if (oProperty.Property && oProperty.AllowedExpressions !== undefined) {
|
|
1130
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1131
|
-
if (mAllowedExpressions[oProperty.Property.$PropertyPath] !== undefined) {
|
|
1132
|
-
mAllowedExpressions[oProperty.Property.$PropertyPath].push(oProperty.AllowedExpressions);
|
|
1133
|
-
} else {
|
|
1134
|
-
mAllowedExpressions[oProperty.Property.$PropertyPath] = [oProperty.AllowedExpressions];
|
|
1135
|
-
}
|
|
1136
|
-
}
|
|
1137
|
-
});
|
|
1138
|
-
}
|
|
1139
|
-
return mAllowedExpressions;
|
|
1140
|
-
}
|
|
1141
|
-
function getFilterRestrictions(
|
|
1142
|
-
oFilterRestrictionsAnnotation?: MetaModelType<FilterRestrictionsType>,
|
|
1143
|
-
sRestriction?: "RequiredProperties" | "NonFilterableProperties"
|
|
1144
|
-
): string[] {
|
|
1145
|
-
let aProps: string[] = [];
|
|
1146
|
-
if (oFilterRestrictionsAnnotation && oFilterRestrictionsAnnotation[sRestriction as keyof MetaModelType<FilterRestrictionsType>]) {
|
|
1147
|
-
aProps = (
|
|
1148
|
-
oFilterRestrictionsAnnotation[sRestriction as keyof MetaModelType<FilterRestrictionsType>] as ExpandPathType<Edm.PropertyPath>[]
|
|
1149
|
-
).map(function (oProperty: ExpandPathType<Edm.PropertyPath>) {
|
|
1150
|
-
return oProperty.$PropertyPath;
|
|
1151
|
-
});
|
|
1152
|
-
}
|
|
1153
|
-
return aProps;
|
|
1154
|
-
}
|
|
1155
|
-
|
|
1156
|
-
function _fetchPropertiesForNavPath(paths: string[], navPath: string, props: string[]): string[] {
|
|
1157
|
-
const navPathPrefix = navPath + "/";
|
|
1158
|
-
return paths.reduce((outPaths: string[], pathToCheck: string) => {
|
|
1159
|
-
if (pathToCheck.startsWith(navPathPrefix)) {
|
|
1160
|
-
const outPath = pathToCheck.replace(navPathPrefix, "");
|
|
1161
|
-
if (!outPaths.includes(outPath)) {
|
|
1162
|
-
outPaths.push(outPath);
|
|
1163
|
-
}
|
|
1164
|
-
}
|
|
1165
|
-
return outPaths;
|
|
1166
|
-
}, props);
|
|
1167
|
-
}
|
|
1168
|
-
type _FilterAllowedExpressions = Record<string, string[]>;
|
|
1169
|
-
export type _FilterRestrictions = {
|
|
1170
|
-
RequiredProperties: string[];
|
|
1171
|
-
NonFilterableProperties: string[];
|
|
1172
|
-
FilterAllowedExpressions: _FilterAllowedExpressions;
|
|
1173
|
-
};
|
|
1174
|
-
function getFilterRestrictionsByPath(entityPath: string, oContext: ODataMetaModel): _FilterRestrictions {
|
|
1175
|
-
// NOTE: For getting FilterAllowedExpressions please use 'getAllowedFilterExpressionForProperty' from 'sap/fe/core/converters/controls/ListReport/FilterField.ts'.
|
|
1176
|
-
const oRet: _FilterRestrictions = {
|
|
1177
|
-
RequiredProperties: [],
|
|
1178
|
-
NonFilterableProperties: [],
|
|
1179
|
-
FilterAllowedExpressions: {}
|
|
1180
|
-
};
|
|
1181
|
-
let oFilterRestrictions;
|
|
1182
|
-
const navigationText = "$NavigationPropertyBinding";
|
|
1183
|
-
const frTerm = "@Org.OData.Capabilities.V1.FilterRestrictions";
|
|
1184
|
-
const entityTypePathParts = entityPath.replaceAll("%2F", "/").split("/").filter(ModelHelper.filterOutNavPropBinding);
|
|
1185
|
-
const entityTypePath = `/${entityTypePathParts.join("/")}/`;
|
|
1186
|
-
const entitySetPath = ModelHelper.getEntitySetPath(entityPath, oContext);
|
|
1187
|
-
const entitySetPathParts = entitySetPath.split("/").filter(ModelHelper.filterOutNavPropBinding);
|
|
1188
|
-
const isContainment = oContext.getObject(`${entityTypePath}$ContainsTarget`);
|
|
1189
|
-
const containmentNavPath = !!isContainment && entityTypePathParts[entityTypePathParts.length - 1];
|
|
1190
|
-
|
|
1191
|
-
//LEAST PRIORITY - Filter restrictions directly at Entity Set
|
|
1192
|
-
//e.g. FR in "NS.EntityContainer/SalesOrderManage" ContextPath: /SalesOrderManage
|
|
1193
|
-
if (!isContainment) {
|
|
1194
|
-
oFilterRestrictions = oContext.getObject(`${entitySetPath}${frTerm}`) as MetaModelType<FilterRestrictionsType> | undefined;
|
|
1195
|
-
oRet.RequiredProperties = getFilterRestrictions(oFilterRestrictions, "RequiredProperties") || [];
|
|
1196
|
-
const resultContextCheck = oContext.getObject(`${entityTypePath}@com.sap.vocabularies.Common.v1.ResultContext`);
|
|
1197
|
-
if (!resultContextCheck) {
|
|
1198
|
-
oRet.NonFilterableProperties = getFilterRestrictions(oFilterRestrictions, "NonFilterableProperties") || [];
|
|
1199
|
-
}
|
|
1200
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1201
|
-
oRet.FilterAllowedExpressions = getFilterAllowedExpression(oFilterRestrictions) || {};
|
|
1202
|
-
}
|
|
1203
|
-
|
|
1204
|
-
if (entityTypePathParts.length > 1) {
|
|
1205
|
-
const navPath = isContainment ? (containmentNavPath as string) : entitySetPathParts[entitySetPathParts.length - 1];
|
|
1206
|
-
// In case of containment we take entitySet provided as parent. And in case of normal we would remove the last navigation from entitySetPath.
|
|
1207
|
-
const parentEntitySetPath = isContainment ? entitySetPath : `/${entitySetPathParts.slice(0, -1).join(`/${navigationText}/`)}`;
|
|
1208
|
-
//THIRD HIGHEST PRIORITY - Reading property path restrictions - Annotation at main entity but directly on navigation property path
|
|
1209
|
-
//e.g. Parent Customer with PropertyPath="Set/CityName" ContextPath: Customer/Set
|
|
1210
|
-
const oParentRet: _FilterRestrictions = {
|
|
1211
|
-
RequiredProperties: [],
|
|
1212
|
-
NonFilterableProperties: [],
|
|
1213
|
-
FilterAllowedExpressions: {}
|
|
1214
|
-
};
|
|
1215
|
-
if (!navPath.includes("%2F")) {
|
|
1216
|
-
const oParentFR = oContext.getObject(`${parentEntitySetPath}${frTerm}`) as MetaModelType<FilterRestrictionsType> | undefined;
|
|
1217
|
-
oRet.RequiredProperties = _fetchPropertiesForNavPath(
|
|
1218
|
-
getFilterRestrictions(oParentFR, "RequiredProperties") || [],
|
|
1219
|
-
navPath,
|
|
1220
|
-
oRet.RequiredProperties || []
|
|
1221
|
-
);
|
|
1222
|
-
oRet.NonFilterableProperties = _fetchPropertiesForNavPath(
|
|
1223
|
-
getFilterRestrictions(oParentFR, "NonFilterableProperties") || [],
|
|
1224
|
-
navPath,
|
|
1225
|
-
oRet.NonFilterableProperties || []
|
|
1226
|
-
);
|
|
1227
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1228
|
-
const completeAllowedExps = getFilterAllowedExpression(oParentFR) || {};
|
|
1229
|
-
oParentRet.FilterAllowedExpressions = Object.keys(completeAllowedExps).reduce(
|
|
1230
|
-
(outProp: Record<string, string[]>, propPath: string) => {
|
|
1231
|
-
if (propPath.startsWith(navPath + "/")) {
|
|
1232
|
-
const outPropPath = propPath.replace(navPath + "/", "");
|
|
1233
|
-
outProp[outPropPath] = completeAllowedExps[propPath];
|
|
1234
|
-
}
|
|
1235
|
-
return outProp;
|
|
1236
|
-
},
|
|
1237
|
-
{} as Record<string, string[]>
|
|
1238
|
-
);
|
|
1239
|
-
}
|
|
1240
|
-
|
|
1241
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1242
|
-
oRet.FilterAllowedExpressions = mergeObjects(
|
|
1243
|
-
{},
|
|
1244
|
-
oRet.FilterAllowedExpressions || {},
|
|
1245
|
-
oParentRet.FilterAllowedExpressions || {}
|
|
1246
|
-
) as Record<string, string[]>;
|
|
1247
|
-
|
|
1248
|
-
//SECOND HIGHEST priority - Navigation restrictions
|
|
1249
|
-
//e.g. Parent "/Customer" with NavigationPropertyPath="Set" ContextPath: Customer/Set
|
|
1250
|
-
const oNavRestrictions = MetaModelFunction.getNavigationRestrictions(oContext, parentEntitySetPath, navPath.replaceAll("%2F", "/"));
|
|
1251
|
-
const oNavFilterRest = oNavRestrictions && (oNavRestrictions["FilterRestrictions"] as MetaModelType<FilterRestrictionsType>);
|
|
1252
|
-
const navResReqProps = getFilterRestrictions(oNavFilterRest, "RequiredProperties") || [];
|
|
1253
|
-
oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navResReqProps));
|
|
1254
|
-
const navNonFilterProps = getFilterRestrictions(oNavFilterRest, "NonFilterableProperties") || [];
|
|
1255
|
-
oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navNonFilterProps));
|
|
1256
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1257
|
-
oRet.FilterAllowedExpressions = mergeObjects(
|
|
1258
|
-
{},
|
|
1259
|
-
oRet.FilterAllowedExpressions || {},
|
|
1260
|
-
getFilterAllowedExpression(oNavFilterRest) || {}
|
|
1261
|
-
) as Record<string, string[]>;
|
|
1262
|
-
|
|
1263
|
-
//HIGHEST priority - Restrictions having target with navigation association entity
|
|
1264
|
-
// e.g. FR in "CustomerParameters/Set" ContextPath: "Customer/Set"
|
|
1265
|
-
const navAssociationEntityRest = oContext.getObject(
|
|
1266
|
-
`/${entityTypePathParts.join("/")}${frTerm}`
|
|
1267
|
-
) as MetaModelType<FilterRestrictionsType>;
|
|
1268
|
-
const navAssocReqProps = getFilterRestrictions(navAssociationEntityRest, "RequiredProperties") || [];
|
|
1269
|
-
oRet.RequiredProperties = uniqueSort(oRet.RequiredProperties.concat(navAssocReqProps));
|
|
1270
|
-
const navAssocNonFilterProps = getFilterRestrictions(navAssociationEntityRest, "NonFilterableProperties") || [];
|
|
1271
|
-
oRet.NonFilterableProperties = uniqueSort(oRet.NonFilterableProperties.concat(navAssocNonFilterProps));
|
|
1272
|
-
//SingleValue | MultiValue | SingleRange | MultiRange | SearchExpression | MultiRangeOrSearchExpression
|
|
1273
|
-
oRet.FilterAllowedExpressions = mergeObjects(
|
|
1274
|
-
{},
|
|
1275
|
-
oRet.FilterAllowedExpressions,
|
|
1276
|
-
getFilterAllowedExpression(navAssociationEntityRest) || {}
|
|
1277
|
-
) as _FilterAllowedExpressions;
|
|
1278
|
-
}
|
|
1279
|
-
return oRet;
|
|
1280
|
-
}
|
|
1281
|
-
|
|
1282
1114
|
export type PreprocessorSettings = {
|
|
1283
1115
|
appComponent?: AppComponent;
|
|
1284
1116
|
bindingContexts: object;
|
|
@@ -1627,7 +1459,6 @@ const CommonUtils = {
|
|
|
1627
1459
|
getSemanticObjectPromise: fnGetSemanticObjectPromise,
|
|
1628
1460
|
getSemanticObjectsFromPath: fnGetSemanticObjectsFromPath,
|
|
1629
1461
|
waitForContextRequested: waitForContextRequested,
|
|
1630
|
-
getFilterRestrictionsByPath: getFilterRestrictionsByPath,
|
|
1631
1462
|
getSpecificAllowedExpression: getSpecificAllowedExpression,
|
|
1632
1463
|
getAdditionalParamsForCreate: getAdditionalParamsForCreate,
|
|
1633
1464
|
requestSingletonProperty: requestSingletonProperty,
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* SAP UI development toolkit for HTML5 (SAPUI5)
|
|
3
3
|
* (c) Copyright 2009-2025 SAP SE. All rights reserved
|
|
4
4
|
*/
|
|
5
|
-
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/DataWatcher", "sap/fe/core/formatters/
|
|
5
|
+
sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/CommonUtils", "sap/fe/core/controls/DataWatcher", "sap/fe/core/formatters/Scope", "sap/ui/base/Object", "sap/ui/core/Component", "sap/ui/model/json/JSONModel"], function (Log, BindingToolkit, ClassSupport, CommonUtils, DataWatcher, Scope, BaseObject, Component, JSONModel) {
|
|
6
6
|
"use strict";
|
|
7
7
|
|
|
8
8
|
var _dec, _dec2, _dec3, _dec4, _dec5, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4;
|
|
@@ -60,14 +60,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
60
60
|
* @since 1.141.0
|
|
61
61
|
*/
|
|
62
62
|
_initializerDefineProperty(_this, "collaborativeDraft", _descriptor4, _this);
|
|
63
|
-
_this._formatters =
|
|
64
|
-
ValueFormatter: ValueFormatter,
|
|
65
|
-
StandardFormatter: StandardFormatter,
|
|
66
|
-
CriticalityFormatter: CriticalityFormatter,
|
|
67
|
-
FPMFormatter: FPMFormatter,
|
|
68
|
-
KPIFormatter: KPIFormatter,
|
|
69
|
-
CollaborationFormatter: CollaborationFormatter
|
|
70
|
-
};
|
|
63
|
+
_this._formatters = Scope._formatters;
|
|
71
64
|
_this._controller = oController;
|
|
72
65
|
_this._view = oController.getView();
|
|
73
66
|
_this.extension = _this._controller.extension;
|
|
@@ -368,4 +361,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
|
|
|
368
361
|
}), _class2)) || _class);
|
|
369
362
|
return ExtensionAPI;
|
|
370
363
|
}, false);
|
|
371
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZU9iamVjdCIsIm9Db250cm9sbGVyIiwic0lkIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9mb3JtYXR0ZXJzIiwiVmFsdWVGb3JtYXR0ZXIiLCJTdGFuZGFyZEZvcm1hdHRlciIsIkNyaXRpY2FsaXR5Rm9ybWF0dGVyIiwiRlBNRm9ybWF0dGVyIiwiS1BJRm9ybWF0dGVyIiwiQ29sbGFib3JhdGlvbkZvcm1hdHRlciIsIl9jb250cm9sbGVyIiwiX3ZpZXciLCJnZXRWaWV3IiwiZXh0ZW5zaW9uIiwiZWRpdEZsb3ciLCJyb3V0aW5nIiwiaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiY29sbGFib3JhdGl2ZURyYWZ0IiwiX3JvdXRpbmciLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiX3ByZWZpeCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0RWRpdEZsb3ciLCJnZXRSb3V0aW5nIiwiZ2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uIiwiYnlJZCIsImlkIiwiY29udHJvbCIsInVuZGVmaW5lZCIsImlzQSIsInBhcmVudCIsImdldFBhcmVudCIsIkVycm9yIiwiZ2V0SWQiLCJnZXRNb2RlbCIsInNNb2RlbE5hbWUiLCJvQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRNYW5pZmVzdEVudHJ5IiwibW9kZWxzIiwiYWRkRGVwZW5kZW50Iiwib0NvbnRyb2wiLCJyZW1vdmVEZXBlbmRlbnQiLCJuYXZpZ2F0ZVRvVGFyZ2V0Iiwic1RhcmdldCIsIm9Db250ZXh0IiwibG9hZEZyYWdtZW50IiwibVNldHRpbmdzIiwiX3RoaXMyIiwib1RlbXBsYXRlQ29tcG9uZW50IiwiQ29tcG9uZW50IiwiZ2V0T3duZXJDb21wb25lbnRGb3IiLCJnZXRTZXJ2aWNlIiwib1BhZ2VNb2RlbCIsImkxOG5Nb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJtVmlld0RhdGEiLCJnZXRWaWV3RGF0YSIsInRhcmdldENvbnRleHRQYXRoIiwiZ2V0RW50aXR5U2V0IiwiZ2V0Q29udGV4dFBhdGgiLCJvVmlld0RhdGFNb2RlbCIsIkpTT05Nb2RlbCIsIm9QcmVwcm9jZXNzb3JTZXR0aW5ncyIsImJpbmRpbmdDb250ZXh0cyIsImNvbnRleHRQYXRoIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb252ZXJ0ZXJDb250ZXh0Iiwibm9SZXNvbHZlIiwidmlld0RhdGEiLCJtZXRhTW9kZWwiLCJhcHBDb21wb25lbnQiLCJjb250cm9sbGVySW5zdGFuY2UiLCJjb250cm9sbGVyIiwic3ViQ2xhc3MiLCJnZXRNZXRhZGF0YSIsImdldENsYXNzIiwiZXh0ZW5kIiwiY29udHJvbGxlckVsZW1lbnRLZXkiLCJjb250cm9sbGVyRWxlbWVudCIsImJpbmQiLCJib3VuZEZ1bmN0aW9uIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJydW5Bc093bmVyIiwiYXBwbHkiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldCIsInNldCIsInYiLCJuZXdJc0EiLCJjbGFzc05hbWUiLCJvVGVtcGxhdGVQcm9taXNlIiwidGVtcGxhdGVDb250cm9sRnJhZ21lbnQiLCJuYW1lIiwiaXNYTUwiLCJjb250YWluaW5nVmlldyIsIm9GcmFnbWVudCIsImluaXRpYWxCaW5kaW5nQ29udGV4dCIsInNldEJpbmRpbmdDb250ZXh0Iiwib0Vycm9yIiwiTG9nIiwiZXJyb3IiLCJ1cGRhdGVBcHBTdGF0ZSIsInZpZXciLCJhcHBTdGF0ZUluZm8iLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJjcmVhdGVBcHBTdGF0ZSIsInZpZXdJZCIsImFwcFN0YXRlRGF0YSIsInJ1bldpdGhGUE1Db250ZXh0IiwiZm4iLCJ0ZW1wbGF0ZUNvbXBvbmVudCIsIndhdGNoUHJvcGVydHkiLCJwcm9wZXJ0eU5hbWUiLCJjYWxsYmFjayIsIkRhdGFXYXRjaGVyIiwicHJvcGVydHlCaW5kaW5nIiwiY29tcGlsZUV4cHJlc3Npb24iLCJwYXRoSW5Nb2RlbCIsInZhbHVlQ2hhbmdlZCIsImUiLCJnZXRQYXJhbWV0ZXIiLCJCYXNlT2JqZWN0IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFeHRlbnNpb25BUEkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgcGF0aEluTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgcHJvcGVydHkgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCJzYXAvZmUvY29yZS9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIEVkaXRGbG93IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9FZGl0Rmxvd1wiO1xuaW1wb3J0IHR5cGUgSW50ZW50QmFzZWROYXZpZ2F0aW9uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcbmltcG9ydCB0eXBlIEludGVybmFsUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxSb3V0aW5nXCI7XG5pbXBvcnQgdHlwZSBSb3V0aW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9Sb3V0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IFdhdGNoZXJDYWxsYmFjayB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9EYXRhV2F0Y2hlclwiO1xuaW1wb3J0IERhdGFXYXRjaGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9EYXRhV2F0Y2hlclwiO1xuaW1wb3J0IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvQ29sbGFib3JhdGlvbkZvcm1hdHRlclwiO1xuaW1wb3J0IENyaXRpY2FsaXR5Rm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0NyaXRpY2FsaXR5Rm9ybWF0dGVyXCI7XG5pbXBvcnQgRlBNRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL0ZQTUZvcm1hdHRlclwiO1xuaW1wb3J0IEtQSUZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9LUElGb3JtYXR0ZXJcIjtcbmltcG9ydCBTdGFuZGFyZEZvcm1hdHRlciBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9TdGFuZGFyZEZvcm1hdHRlclwiO1xuaW1wb3J0IFZhbHVlRm9ybWF0dGVyIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSBNYWNyb0FQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9NYWNyb0FQSVwiO1xuaW1wb3J0IHR5cGUgRm9ybUFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9mb3JtL0Zvcm1BUElcIjtcbmltcG9ydCBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCBDb21wb25lbnQgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFRTRnVuY3Rpb24gfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vLi4vdHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBDb2xsYWJvcmF0aXZlRHJhZnQgZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvQ29sbGFib3JhdGl2ZURyYWZ0XCI7XG5pbXBvcnQgdHlwZSBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9JbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvblwiO1xuXG4vKipcbiAqIENvbW1vbiBFeHRlbnNpb24gQVBJIGZvciBhbGwgcGFnZXMgb2YgU0FQIEZpb3JpIGVsZW1lbnRzIGZvciBPRGF0YSBWNC5cbiAqXG4gKiBUbyBjb3JyZWN0bHkgaW50ZWdyYXRlIHlvdXIgYXBwIGV4dGVuc2lvbiBjb2Rpbmcgd2l0aCBTQVAgRmlvcmkgZWxlbWVudHMsIHVzZSBvbmx5IHRoZSBleHRlbnNpb25BUEkgb2YgU0FQIEZpb3JpIGVsZW1lbnRzLiBEb24ndCBhY2Nlc3Mgb3IgbWFuaXB1bGF0ZSBjb250cm9scywgcHJvcGVydGllcywgbW9kZWxzLCBvciBvdGhlciBpbnRlcm5hbCBvYmplY3RzIGNyZWF0ZWQgYnkgdGhlIFNBUCBGaW9yaSBlbGVtZW50cyBmcmFtZXdvcmsuXG4gKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9jb250cm9sbGVyRXh0ZW5zaW9ucy9jb250cm9sbGVyRXh0ZW5zaW9uc092ZXJ2aWV3IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuICogQHB1YmxpY1xuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNpbmNlIDEuNzkuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIilcbmNsYXNzIEV4dGVuc2lvbkFQSSBleHRlbmRzIEJhc2VPYmplY3Qge1xuXHQvKipcblx0ICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBpbnRvIHRoZSBlZGl0IGZsb3cgb2YgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiB7QGxpbmsgZGVtbzpzYXAvZmUvY29yZS9mcG1FeHBsb3Jlci9pbmRleC5odG1sIy9jb250cm9sbGVyRXh0ZW5zaW9ucy9iYXNpY0V4dGVuc2liaWxpdHkgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2t9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuRWRpdEZsb3dcIiB9KVxuXHRlZGl0RmxvdzogRWRpdEZsb3c7XG5cblx0LyoqXG5cdCAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgcm91dGluZyBmbG93IG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvcm91dGluZ0V4dGVuc2liaWxpdHkgT3ZlcnZpZXcgb2YgQnVpbGRpbmcgQmxvY2t9XG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuUm91dGluZ1wiIH0pXG5cdHJvdXRpbmc6IFJvdXRpbmc7XG5cblx0LyoqXG5cdCAqIEV4dGVuc2lvbkFQSSBmb3IgaW50ZW50LWJhc2VkIG5hdmlnYXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5JbnRlbnRCYXNlZE5hdmlnYXRpb25cIiB9KVxuXHRpbnRlbnRCYXNlZE5hdmlnYXRpb246IEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHQvKipcblx0ICogRXh0ZW5zaW9uQVBJIGZvciBjb2xsYWJvcmF0aXZlIGRyYWZ0IGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICogQHVpNS1leHBlcmltZW50YWwtc2luY2UgMS4xNDEuMFxuXHQgKiBAc2luY2UgMS4xNDEuMFxuXHQgKi9cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5Db2xsYWJvcmF0aXZlRHJhZnRcIiB9KVxuXHRjb2xsYWJvcmF0aXZlRHJhZnQ6IENvbGxhYm9yYXRpdmVEcmFmdDtcblxuXHRwdWJsaWMgX2NvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyO1xuXG5cdHByb3RlY3RlZCBfdmlldzogRkVWaWV3O1xuXG5cdHByaXZhdGUgX3JvdXRpbmc6IEludGVybmFsUm91dGluZztcblxuXHRwcml2YXRlIF9pbnRlbnRCYXNlZE5hdmlnYXRpb246IEludGVybmFsSW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXG5cdHByaXZhdGUgX3ByZWZpeD86IHN0cmluZztcblxuXHRwcml2YXRlIGV4dGVuc2lvbjogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0cHJvdGVjdGVkIF9mb3JtYXR0ZXJzID0ge1xuXHRcdFZhbHVlRm9ybWF0dGVyOiBWYWx1ZUZvcm1hdHRlcixcblx0XHRTdGFuZGFyZEZvcm1hdHRlcjogU3RhbmRhcmRGb3JtYXR0ZXIsXG5cdFx0Q3JpdGljYWxpdHlGb3JtYXR0ZXI6IENyaXRpY2FsaXR5Rm9ybWF0dGVyLFxuXHRcdEZQTUZvcm1hdHRlcjogRlBNRm9ybWF0dGVyLFxuXHRcdEtQSUZvcm1hdHRlcjogS1BJRm9ybWF0dGVyLFxuXHRcdENvbGxhYm9yYXRpb25Gb3JtYXR0ZXI6IENvbGxhYm9yYXRpb25Gb3JtYXR0ZXJcblx0fTtcblxuXHRjb25zdHJ1Y3RvcihvQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIsIHNJZD86IHN0cmluZykge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fY29udHJvbGxlciA9IG9Db250cm9sbGVyO1xuXHRcdHRoaXMuX3ZpZXcgPSBvQ29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0dGhpcy5leHRlbnNpb24gPSB0aGlzLl9jb250cm9sbGVyLmV4dGVuc2lvbjtcblx0XHR0aGlzLmVkaXRGbG93ID0gdGhpcy5fY29udHJvbGxlci5lZGl0Rmxvdztcblx0XHR0aGlzLnJvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLnJvdXRpbmc7XG5cdFx0dGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLmludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLmNvbGxhYm9yYXRpdmVEcmFmdCA9IHRoaXMuX2NvbnRyb2xsZXIuY29sbGFib3JhdGl2ZURyYWZ0O1xuXG5cdFx0Ly8gU2V0dGluZyBpbnRlcm5hbCBjb250cm9sbGVyIGV4dGVuc2lvbnMgZm9yIGRlZmF1bHQgYnVpbGRpbmcgYmxvY2sgaGFuZGxlciB0byB3b3JrIHdoZW4gdXNpbmcgRXh0ZW5zaW9uQVBJIGFzIGNvbnRyb2xsZXIgaW4gY3VzdG9tIGZyYWdtZW50IHNjbmVhcmlvcy5cblx0XHR0aGlzLl9yb3V0aW5nID0gdGhpcy5fY29udHJvbGxlci5fcm91dGluZztcblx0XHR0aGlzLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24gPSB0aGlzLl9jb250cm9sbGVyLl9pbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdFx0dGhpcy5fcHJlZml4ID0gc0lkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgZWRpdEZsb3cgY29udHJvbGxlciBleHRlbnNpb25cblx0ICovXG5cdGdldEVkaXRGbG93KCk6IEVkaXRGbG93IHtcblx0XHRyZXR1cm4gdGhpcy5lZGl0Rmxvdztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHJvdXRpbmcgY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgcm91dGluZyBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0Um91dGluZygpOiBSb3V0aW5nIHtcblx0XHRyZXR1cm4gdGhpcy5yb3V0aW5nO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgaW50ZW50QmFzZWROYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciB0aGlzIHBhZ2UuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgVGhlIGludGVudEJhc2VkTmF2aWdhdGlvbiBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0SW50ZW50QmFzZWROYXZpZ2F0aW9uKCk6IEludGVudEJhc2VkTmF2aWdhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuaW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEFjY2VzcyBhIGNvbnRyb2wgYnkgaXRzIElELiBJZiB5b3UgYXR0ZW1wdCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbCBpbnN0ZWFkIG9mIHRoZSBzdGFibGUgQVBJLCB0aGUgbWV0aG9kIHdpbGwgcmFpc2UgYW4gZXJyb3IuXG5cdCAqIEBwYXJhbSBpZCBJRCBvZiB0aGUgY29udHJvbCB3aXRob3V0IHZpZXcgYW5kIHNlY3Rpb24gcHJlZml4LlxuXHQgKiBAcmV0dXJucyBUaGUgcmVxdWVzdGVkIGNvbnRyb2wsIGlmIGZvdW5kIGluIHRoZSB2aWV3IC8gc2VjdGlvbi5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YnlJZChpZDogc3RyaW5nKTogVUk1RWxlbWVudCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IGNvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoaWQpO1xuXG5cdFx0aWYgKCFjb250cm9sICYmIHRoaXMuX3ByZWZpeCkge1xuXHRcdFx0Ly8gZ2l2ZSBpdCBhIHRyeSB3aXRoIHRoZSBwcmVmaXhcblx0XHRcdGNvbnRyb2wgPSB0aGlzLl92aWV3LmJ5SWQoYCR7dGhpcy5fcHJlZml4fS0tJHtpZH1gKTtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0aWYgKCFjb250cm9sLmlzQTxNYWNyb0FQST4oXCJzYXAuZmUubWFjcm9zLk1hY3JvQVBJXCIpKSB7XG5cdFx0XHQvLyBjaGVjayBpZiBhcHAgdHJpZWQgdG8gYWNjZXNzIGFuIGludGVybmFsIGNvbnRyb2wgd3JhcHBlZCBieSBhIG1hY3JvIEFQSVxuXHRcdFx0bGV0IHBhcmVudCA9IGNvbnRyb2wuZ2V0UGFyZW50KCk7XG5cblx0XHRcdHdoaWxlIChwYXJlbnQpIHtcblx0XHRcdFx0aWYgKHBhcmVudC5pc0E8Rm9ybUFQST4oXCJzYXAuZmUubWFjcm9zLmZvcm0uRm9ybUFQSVwiKSkge1xuXHRcdFx0XHRcdC8vIHdlIHJlYWNoZWQgdGhlIGZvcm1BUEkgYnV0IG5vIGZpZWxkIC0gdGhlIGFwcCB0cmllcyB0byBhY2Nlc3MgYW55IGN1c3RvbSBjb250cm9sIHdoaWNoIGlzIGZpbmVcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYXJlbnQuaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIikpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXG5cdFx0XHRcdFx0XHRgWW91IGF0dGVtcHRlZCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbC4gVGhpcyBpcyByaXNreSBhbmQgbWlnaHQgY2hhbmdlIGxhdGVyLiBJbnN0ZWFkIGFjY2VzcyBpdHMgc3RhYmxlIEFQSSBieSB1c2luZyBJRCAke3BhcmVudC5nZXRJZCgpfWBcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cGFyZW50ID0gcGFyZW50LmdldFBhcmVudCgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBjb250cm9sO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhY2Nlc3MgdG8gbW9kZWxzIG1hbmFnZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzLjxicj5cblx0ICogVGhlIGZvbGxvd2luZyBtb2RlbHMgY2FuIGJlIGFjY2Vzc2VkOlxuXHQgKiA8dWw+XG5cdCAqIDxsaT51bmRlZmluZWQ6IHRoZSB1bmRlZmluZWQgbW9kZWwgcmV0dXJucyB0aGUgU0FQVUk1IE9EYXRhIFY0IG1vZGVsIGJvdW5kIHRvIHRoaXMgcGFnZTwvbGk+XG5cdCAqIDxsaT5pMThuIC8gZnVydGhlciBkYXRhIG1vZGVscyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdDwvbGk+XG5cdCAqIDxsaT51aTogcmV0dXJucyBhIFNBUFVJNSBKU09OIG1vZGVsIGNvbnRhaW5pbmcgVUkgaW5mb3JtYXRpb24uXG5cdCAqIE9ubHkgdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzIGFyZSBwdWJsaWMgYW5kIHN1cHBvcnRlZDpcblx0ICogPHVsPlxuXHQgKiA8bGk+aXNFZGl0YWJsZTogc2V0IHRvIHRydWUgaWYgdGhlIGFwcGxpY2F0aW9uIGlzIGluIGVkaXQgbW9kZTwvbGk+XG5cdCAqIDwvdWw+XG5cdCAqIDwvbGk+XG5cdCAqIDwvdWw+LlxuXHQgKiBlZGl0TW9kZSBpcyBkZXByZWNhdGVkIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYW55bW9yZS4gVXNlIGlzRWRpdGFibGUgaW5zdGVhZC5cblx0ICogQHBhcmFtIHNNb2RlbE5hbWUgTmFtZSBvZiB0aGUgbW9kZWxcblx0ICogQHJldHVybnMgVGhlIHJlcXVpcmVkIG1vZGVsXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGdldE1vZGVsKHNNb2RlbE5hbWU/OiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IG9BcHBDb21wb25lbnQ7XG5cblx0XHRpZiAoc01vZGVsTmFtZSAmJiBzTW9kZWxOYW1lICE9PSBcInVpXCIpIHtcblx0XHRcdG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldyk7XG5cdFx0XHRpZiAoIW9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikubW9kZWxzW3NNb2RlbE5hbWVdKSB7XG5cdFx0XHRcdC8vIGRvbid0IGFsbG93IGFjY2VzcyB0byBvdXIgaW50ZXJuYWwgbW9kZWxzXG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXcuZ2V0TW9kZWwoc01vZGVsTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkIGFueSBjb250cm9sIGFzIGEgZGVwZW5kZW50IGNvbnRyb2wgdG8gdGhpcyBTQVAgRmlvcmkgZWxlbWVudHMgcGFnZS5cblx0ICogQHBhcmFtIG9Db250cm9sIENvbnRyb2wgdG8gYmUgYWRkZWQgYXMgYSBkZXBlbmRlbnQgY29udHJvbFxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhZGREZXBlbmRlbnQob0NvbnRyb2w6IENvbnRyb2wpOiB2b2lkIHtcblx0XHR0aGlzLl92aWV3LmFkZERlcGVuZGVudChvQ29udHJvbCk7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIGEgZGVwZW5kZW50IGNvbnRyb2wgZnJvbSB0aGlzIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJlbW92ZURlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcucmVtb3ZlRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZSB0byBhbm90aGVyIHRhcmdldC5cblx0ICogQHBhcmFtIHNUYXJnZXQgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb0NvbnRleHRdIE9EYXRhIHY0IGNvbnRleHQgaW5zdGFuY2Vcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGVUb1RhcmdldChzVGFyZ2V0OiBzdHJpbmcsIG9Db250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHZvaWQge1xuXHRcdHRoaXMuX2NvbnRyb2xsZXIuX3JvdXRpbmcubmF2aWdhdGVUb1RhcmdldChvQ29udGV4dCwgc1RhcmdldCk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZCBhIGZyYWdtZW50IGFuZCBnbyB0aHJvdWdoIHRoZSB0ZW1wbGF0ZSBwcmVwcm9jZXNzb3Igd2l0aCB0aGUgY3VycmVudCBwYWdlIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MgVGhlIHNldHRpbmdzIG9iamVjdFxuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmlkIFRoZSBJRCBvZiB0aGUgZnJhZ21lbnQgaXRzZWxmXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MubmFtZSBUaGUgbmFtZSBvZiB0aGUgZnJhZ21lbnQgdG8gYmUgbG9hZGVkXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuY29udHJvbGxlciBUaGUgY29udHJvbGxlciB0byBiZSBhdHRhY2hlZCB0byB0aGUgZnJhZ21lbnRcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5jb250ZXh0UGF0aCBUaGUgY29udGV4dFBhdGggdG8gYmUgdXNlZCBmb3IgdGhlIHRlbXBsYXRpbmcgcHJvY2Vzc1xuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCBUaGUgaW5pdGlhbCBiaW5kaW5nIGNvbnRleHRcblx0ICogQHJldHVybnMgVGhlIGZyYWdtZW50IGRlZmluaXRpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgbG9hZEZyYWdtZW50KG1TZXR0aW5nczoge1xuXHRcdGlkOiBzdHJpbmc7XG5cdFx0bmFtZTogc3RyaW5nO1xuXHRcdGNvbnRyb2xsZXI/OiBvYmplY3Q7XG5cdFx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdFx0aW5pdGlhbEJpbmRpbmdDb250ZXh0PzogQ29udGV4dDtcblx0fSk6IFByb21pc2U8VUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXT4ge1xuXHRcdGNvbnN0IG9UZW1wbGF0ZUNvbXBvbmVudCA9IENvbXBvbmVudC5nZXRPd25lckNvbXBvbmVudEZvcih0aGlzLl92aWV3KSBhcyBFbmhhbmNlV2l0aFVJNTxUZW1wbGF0ZUNvbXBvbmVudD47XG5cdFx0YXdhaXQgb1RlbXBsYXRlQ29tcG9uZW50LmdldFNlcnZpY2UoXCJ0ZW1wbGF0ZWRWaWV3U2VydmljZVwiKTtcblx0XHRjb25zdCBvUGFnZU1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbChcIl9wYWdlTW9kZWxcIik7XG5cdFx0Y29uc3QgaTE4bk1vZGVsID0gdGhpcy5fdmlldy5nZXRNb2RlbChcInNhcC5mZS5pMThuXCIpO1xuXHRcdGNvbnN0IG9NZXRhTW9kZWwgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgbVZpZXdEYXRhID0gb1RlbXBsYXRlQ29tcG9uZW50LmdldFZpZXdEYXRhKCk7XG5cdFx0Y29uc3QgdGFyZ2V0Q29udGV4dFBhdGggPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0RW50aXR5U2V0KClcblx0XHRcdD8gYC8ke29UZW1wbGF0ZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKSF9YFxuXHRcdFx0OiBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Q29udGV4dFBhdGgoKSE7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhTW9kZWwgPSBuZXcgSlNPTk1vZGVsKG1WaWV3RGF0YSksXG5cdFx0XHRvUHJlcHJvY2Vzc29yU2V0dGluZ3MgPSB7XG5cdFx0XHRcdGJpbmRpbmdDb250ZXh0czoge1xuXHRcdFx0XHRcdGNvbnRleHRQYXRoOiBvTWV0YU1vZGVsPy5jcmVhdGVCaW5kaW5nQ29udGV4dChtU2V0dGluZ3MuY29udGV4dFBhdGggfHwgdGFyZ2V0Q29udGV4dFBhdGgpLFxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG9QYWdlTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIsIHVuZGVmaW5lZCwgeyBub1Jlc29sdmU6IHRydWUgfSksXG5cdFx0XHRcdFx0dmlld0RhdGE6IG1WaWV3RGF0YSA/IG9WaWV3RGF0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKSA6IG51bGxcblx0XHRcdFx0fSxcblx0XHRcdFx0bW9kZWxzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbCxcblx0XHRcdFx0XHRtZXRhTW9kZWw6IG9NZXRhTW9kZWwsXG5cdFx0XHRcdFx0dmlld0RhdGE6IG9WaWV3RGF0YU1vZGVsLFxuXHRcdFx0XHRcdFwic2FwLmZlLmkxOG5cIjogaTE4bk1vZGVsXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFwcENvbXBvbmVudDogQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX3ZpZXcpXG5cdFx0XHR9O1xuXG5cdFx0Ly8gV2Ugc2NvcGUgdGhlIGZyYWdtZW50IHdpdGggb3VyIEV4dGVuc2lvbkFQSS4gSWYgYSBjb250cm9sbGVyIG9iamVjdCBpcyBwYXNzZWQgd2UgbWVyZ2UgaXQgd2l0aCB0aGUgZXh0ZW5zaW9uQVBJXG5cdFx0bGV0IGNvbnRyb2xsZXJJbnN0YW5jZTogRXh0ZW5zaW9uQVBJO1xuXHRcdGlmIChtU2V0dGluZ3MuY29udHJvbGxlciAmJiAhKG1TZXR0aW5ncy5jb250cm9sbGVyIGFzIEV4dGVuc2lvbkFQSSk/LmlzQT8uKFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpKSB7XG5cdFx0XHRjb25zdCBzdWJDbGFzcyA9IChcblx0XHRcdFx0dGhpcy5nZXRNZXRhZGF0YSgpLmdldENsYXNzKCkgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0ZXh0ZW5kOiAoaWQ6IHN0cmluZywgY29udGVudDogb2JqZWN0KSA9PiB7IG5ldyAocGFnZUNvbnRyb2xsZXI6IFBhZ2VDb250cm9sbGVyKTogRXh0ZW5zaW9uQVBJIH07XG5cdFx0XHRcdH1cblx0XHRcdCkuZXh0ZW5kKG1TZXR0aW5ncy5pZCArIFwiLWNvbnRyb2xsZXJcIiwge30pO1xuXHRcdFx0Zm9yIChjb25zdCBjb250cm9sbGVyRWxlbWVudEtleSBpbiBtU2V0dGluZ3MuY29udHJvbGxlcikge1xuXHRcdFx0XHRjb25zdCBjb250cm9sbGVyRWxlbWVudCA9IG1TZXR0aW5ncy5jb250cm9sbGVyW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl07XG5cdFx0XHRcdGlmICgoY29udHJvbGxlckVsZW1lbnQgYXMgRnVuY3Rpb24pPy5iaW5kKSB7XG5cdFx0XHRcdFx0Y29uc3QgYm91bmRGdW5jdGlvbiA9IChjb250cm9sbGVyRWxlbWVudCBhcyBGdW5jdGlvbikuYmluZChtU2V0dGluZ3MuY29udHJvbGxlcik7XG5cdFx0XHRcdFx0aWYgKG9UZW1wbGF0ZUNvbXBvbmVudCkge1xuXHRcdFx0XHRcdFx0c3ViQ2xhc3MucHJvdG90eXBlW2NvbnRyb2xsZXJFbGVtZW50S2V5XSA9ICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9UZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKCgpID0+IGJvdW5kRnVuY3Rpb24uYXBwbHkodGhpcywgYXJncykpO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c3ViQ2xhc3MucHJvdG90eXBlW2NvbnRyb2xsZXJFbGVtZW50S2V5XSA9IGJvdW5kRnVuY3Rpb247XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdWJDbGFzcy5wcm90b3R5cGUsIGNvbnRyb2xsZXJFbGVtZW50S2V5LCB7XG5cdFx0XHRcdFx0XHRnZXQoKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBtU2V0dGluZ3MuY29udHJvbGxlcj8uW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl07XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0c2V0KHY6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdFx0aWYgKG1TZXR0aW5ncy5jb250cm9sbGVyKSB7XG5cdFx0XHRcdFx0XHRcdFx0KG1TZXR0aW5ncy5jb250cm9sbGVyW2NvbnRyb2xsZXJFbGVtZW50S2V5IGFzIGtleW9mIHR5cGVvZiBtU2V0dGluZ3MuY29udHJvbGxlcl0gYXMgdW5rbm93bikgPSB2O1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZSA9IG5ldyBzdWJDbGFzcyh0aGlzLl9jb250cm9sbGVyKTtcblx0XHRcdGNvbnN0IG5ld0lzQSA9IGNvbnRyb2xsZXJJbnN0YW5jZS5pc0E7XG5cdFx0XHRjb250cm9sbGVySW5zdGFuY2UuaXNBID0gKGNsYXNzTmFtZTogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG5cdFx0XHRcdC8vIFdlIGtlZXAgdGhlIFx0c2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJIGFzIGEgdmFsaWQgdHlwZSBmb3IgdGhpcyBuZXcgY2xhc3Ncblx0XHRcdFx0Ly8gdGhpcyB0eXBlIGlzIGxvc3QgYXMgc29vbiBhcyB0aGUgbWVyZ2VkIGNvbnRyb2xsZXIgb2JqZWN0IGdldHMgYSBtZXRob2QgaXNBXG5cdFx0XHRcdHJldHVybiBuZXdJc0EuYmluZChjb250cm9sbGVySW5zdGFuY2UpKGNsYXNzTmFtZSkgfHwgdGhpcy5pc0EoY2xhc3NOYW1lKTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZSA9IChtU2V0dGluZ3MuY29udHJvbGxlciBhcyBFeHRlbnNpb25BUEkpID8/IHRoaXM7XG5cdFx0fVxuXHRcdHJldHVybiBvVGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihhc3luYyAoKSA9PiB7XG5cdFx0XHRjb25zdCBvVGVtcGxhdGVQcm9taXNlID0gQ29tbW9uVXRpbHMudGVtcGxhdGVDb250cm9sRnJhZ21lbnQobVNldHRpbmdzLm5hbWUsIG9QcmVwcm9jZXNzb3JTZXR0aW5ncywge1xuXHRcdFx0XHRjb250cm9sbGVyOiBjb250cm9sbGVySW5zdGFuY2UsXG5cdFx0XHRcdGlzWE1MOiBmYWxzZSxcblx0XHRcdFx0aWQ6IG1TZXR0aW5ncy5pZCxcblx0XHRcdFx0Y29udGFpbmluZ1ZpZXc6IHRoaXMuX3ZpZXcsXG5cdFx0XHRcdGNvbnRleHRQYXRoOiBtU2V0dGluZ3MuY29udGV4dFBhdGggPz8gdGFyZ2V0Q29udGV4dFBhdGhcblx0XHRcdH0pIGFzIFByb21pc2U8Q29udHJvbD47XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBvRnJhZ21lbnQ6IENvbnRyb2wgPSBhd2FpdCBvVGVtcGxhdGVQcm9taXNlO1xuXHRcdFx0XHRpZiAobVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0b0ZyYWdtZW50LnNldEJpbmRpbmdDb250ZXh0KG1TZXR0aW5ncy5pbml0aWFsQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KG9GcmFnbWVudCk7XG5cdFx0XHRcdHJldHVybiBvRnJhZ21lbnQ7XG5cdFx0XHR9IGNhdGNoIChvRXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0pIGFzIFByb21pc2U8VUk1RWxlbWVudCB8IFVJNUVsZW1lbnRbXT47XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gdXBkYXRlIG9mIHRoZSBhcHAgc3RhdGUuXG5cdCAqIFNob3VsZCBiZSBjYWxsZWQgaWYgdGhlIHN0YXRlIG9mIGEgY29udHJvbCwgb3IgYW55IG90aGVyIHN0YXRlLXJlbGV2YW50IGluZm9ybWF0aW9uLCB3YXMgY2hhbmdlZC5cblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgbmV3IGFwcCBzdGF0ZSBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFzeW5jIHVwZGF0ZUFwcFN0YXRlKCk6IFByb21pc2U8dm9pZCB8IHsgYXBwU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCB9PiB7XG5cdFx0Y29uc3QgdmlldyA9IHRoaXMuX2NvbnRyb2xsZXIuZ2V0VmlldygpO1xuXHRcdGNvbnN0IGFwcENvbXBvbmVudCA9IHRoaXMuX2NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCk7XG5cdFx0Y29uc3QgYXBwU3RhdGVJbmZvID0gYXdhaXQgYXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLmNyZWF0ZUFwcFN0YXRlKHtcblx0XHRcdHZpZXdJZDogdmlldy5nZXRJZCgpXG5cdFx0fSk7XG5cdFx0cmV0dXJuIGFwcFN0YXRlSW5mbz8uYXBwU3RhdGVEYXRhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJ1biB0aGUgZ2l2ZW4gZnVuY3Rpb24gd2l0aCB0aGUgRlBNIGNvbnRleHQgb2YgdGhlIGN1cnJlbnQgcGFnZS5cblx0ICogVGhpcyBhbGxvd3MgdG8gaW5pdGlhbGl6ZSBhbGwgdGhlIGVsZW1lbnRzIHJlcXVpcmVkIGJ5IGJ1aWxkaW5nIGJsb2NrcyB0byByZW5kZXIgY29ycmVjdGx5LlxuXHQgKiBAcGFyYW0gZm4gVGhlIEZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG5cdCAqIEByZXR1cm5zIFRoZSByZXN1bHQgb2YgdGhlIGZ1bmN0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHJ1bldpdGhGUE1Db250ZXh0KGZuOiBGdW5jdGlvbik6IHVua25vd24ge1xuXHRcdGNvbnN0IHRlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX3ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRyZXR1cm4gdGVtcGxhdGVDb21wb25lbnQucnVuQXNPd25lcihmbiBhcyBUU0Z1bmN0aW9uKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBXYXRjaCBhIHByb3BlcnR5IGZyb20gdGhlIG1haW4gcGFnZSBjb250ZXh0IGFuZCB0cmlnZ2VyIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgY2hhbmdlcy5cblx0ICogQHBhcmFtIHByb3BlcnR5TmFtZSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkgdG8gd2F0Y2hcblx0ICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byB0cmlnZ2VyIHdoZW4gdGhlIHZhbHVlIGNoYW5nZXNcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0d2F0Y2hQcm9wZXJ0eShwcm9wZXJ0eU5hbWU6IHN0cmluZywgY2FsbGJhY2s6IFdhdGNoZXJDYWxsYmFjayk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KFxuXHRcdFx0bmV3IERhdGFXYXRjaGVyKHtcblx0XHRcdFx0cHJvcGVydHlCaW5kaW5nOiBjb21waWxlRXhwcmVzc2lvbihwYXRoSW5Nb2RlbChwcm9wZXJ0eU5hbWUpKSxcblx0XHRcdFx0dmFsdWVDaGFuZ2VkOiAoZSk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdGNhbGxiYWNrKGUuZ2V0UGFyYW1ldGVyKFwidmFsdWVcIiksIGUuZ2V0UGFyYW1ldGVyKFwib2xkVmFsdWVcIiksIGUuZ2V0UGFyYW1ldGVyKFwiaXNJbml0aWFsXCIpLCBlLmdldFBhcmFtZXRlcihcImNvbnRleHRcIikpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRXh0ZW5zaW9uQVBJO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7OztFQWtDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNQSxZQUFZLElBQUFDLElBQUEsR0FEakJDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBT3pDQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQTRDLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBUS9ERixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQTJDLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBTzlESCxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXlELENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBUzVFSixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQXNELENBQUMsQ0FBQyxFQUFBSixJQUFBLENBQUFRLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsV0FBQTtJQXdCMUUsU0FBQVgsYUFBWVksV0FBMkIsRUFBRUMsR0FBWSxFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUN0REEsS0FBQSxHQUFBSCxXQUFBLENBQUFJLElB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
|
|
364
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFeHRlbnNpb25BUEkiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsInByb3BlcnR5IiwidHlwZSIsIl9kZWMzIiwiX2RlYzQiLCJfZGVjNSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQmFzZU9iamVjdCIsIm9Db250cm9sbGVyIiwic0lkIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9mb3JtYXR0ZXJzIiwiU2NvcGUiLCJfY29udHJvbGxlciIsIl92aWV3IiwiZ2V0VmlldyIsImV4dGVuc2lvbiIsImVkaXRGbG93Iiwicm91dGluZyIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImNvbGxhYm9yYXRpdmVEcmFmdCIsIl9yb3V0aW5nIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIl9wcmVmaXgiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEVkaXRGbG93IiwiZ2V0Um91dGluZyIsImdldEludGVudEJhc2VkTmF2aWdhdGlvbiIsImJ5SWQiLCJpZCIsImNvbnRyb2wiLCJ1bmRlZmluZWQiLCJpc0EiLCJwYXJlbnQiLCJnZXRQYXJlbnQiLCJFcnJvciIsImdldElkIiwiZ2V0TW9kZWwiLCJzTW9kZWxOYW1lIiwib0FwcENvbXBvbmVudCIsIkNvbW1vblV0aWxzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0TWFuaWZlc3RFbnRyeSIsIm1vZGVscyIsImFkZERlcGVuZGVudCIsIm9Db250cm9sIiwicmVtb3ZlRGVwZW5kZW50IiwibmF2aWdhdGVUb1RhcmdldCIsInNUYXJnZXQiLCJvQ29udGV4dCIsImxvYWRGcmFnbWVudCIsIm1TZXR0aW5ncyIsIl90aGlzMiIsIm9UZW1wbGF0ZUNvbXBvbmVudCIsIkNvbXBvbmVudCIsImdldE93bmVyQ29tcG9uZW50Rm9yIiwiZ2V0U2VydmljZSIsIm9QYWdlTW9kZWwiLCJpMThuTW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwibVZpZXdEYXRhIiwiZ2V0Vmlld0RhdGEiLCJ0YXJnZXRDb250ZXh0UGF0aCIsImdldEVudGl0eVNldCIsImdldENvbnRleHRQYXRoIiwib1ZpZXdEYXRhTW9kZWwiLCJKU09OTW9kZWwiLCJvUHJlcHJvY2Vzc29yU2V0dGluZ3MiLCJiaW5kaW5nQ29udGV4dHMiLCJjb250ZXh0UGF0aCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udmVydGVyQ29udGV4dCIsIm5vUmVzb2x2ZSIsInZpZXdEYXRhIiwibWV0YU1vZGVsIiwiYXBwQ29tcG9uZW50IiwiY29udHJvbGxlckluc3RhbmNlIiwiY29udHJvbGxlciIsInN1YkNsYXNzIiwiZ2V0TWV0YWRhdGEiLCJnZXRDbGFzcyIsImV4dGVuZCIsImNvbnRyb2xsZXJFbGVtZW50S2V5IiwiY29udHJvbGxlckVsZW1lbnQiLCJiaW5kIiwiYm91bmRGdW5jdGlvbiIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwicnVuQXNPd25lciIsImFwcGx5IiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJzZXQiLCJ2IiwibmV3SXNBIiwiY2xhc3NOYW1lIiwib1RlbXBsYXRlUHJvbWlzZSIsInRlbXBsYXRlQ29udHJvbEZyYWdtZW50IiwibmFtZSIsImlzWE1MIiwiY29udGFpbmluZ1ZpZXciLCJvRnJhZ21lbnQiLCJpbml0aWFsQmluZGluZ0NvbnRleHQiLCJzZXRCaW5kaW5nQ29udGV4dCIsIm9FcnJvciIsIkxvZyIsImVycm9yIiwidXBkYXRlQXBwU3RhdGUiLCJ2aWV3IiwiYXBwU3RhdGVJbmZvIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiY3JlYXRlQXBwU3RhdGUiLCJ2aWV3SWQiLCJhcHBTdGF0ZURhdGEiLCJydW5XaXRoRlBNQ29udGV4dCIsImZuIiwidGVtcGxhdGVDb21wb25lbnQiLCJ3YXRjaFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwiY2FsbGJhY2siLCJEYXRhV2F0Y2hlciIsInByb3BlcnR5QmluZGluZyIsImNvbXBpbGVFeHByZXNzaW9uIiwicGF0aEluTW9kZWwiLCJ2YWx1ZUNoYW5nZWQiLCJlIiwiZ2V0UGFyYW1ldGVyIiwiQmFzZU9iamVjdCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRXh0ZW5zaW9uQVBJLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIHBhdGhJbk1vZGVsIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHByb3BlcnR5IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgVGVtcGxhdGVDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBFZGl0RmxvdyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvRWRpdEZsb3dcIjtcbmltcG9ydCB0eXBlIEludGVudEJhc2VkTmF2aWdhdGlvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZW50QmFzZWROYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSBJbnRlcm5hbFJvdXRpbmcgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0ludGVybmFsUm91dGluZ1wiO1xuaW1wb3J0IHR5cGUgUm91dGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvUm91dGluZ1wiO1xuaW1wb3J0IHR5cGUgeyBXYXRjaGVyQ2FsbGJhY2sgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRGF0YVdhdGNoZXJcIjtcbmltcG9ydCBEYXRhV2F0Y2hlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRGF0YVdhdGNoZXJcIjtcbmltcG9ydCBTY29wZSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9TY29wZVwiO1xuaW1wb3J0IHR5cGUgTWFjcm9BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvTWFjcm9BUElcIjtcbmltcG9ydCB0eXBlIEZvcm1BUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZm9ybS9Gb3JtQVBJXCI7XG5pbXBvcnQgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL01vZGVsXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhVjRDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBUU0Z1bmN0aW9uIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHR5cGUgQ29sbGFib3JhdGl2ZURyYWZ0IGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0NvbGxhYm9yYXRpdmVEcmFmdFwiO1xuaW1wb3J0IHR5cGUgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZnJvbSBcIi4vY29udHJvbGxlcmV4dGVuc2lvbnMvSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb25cIjtcblxuLyoqXG4gKiBDb21tb24gRXh0ZW5zaW9uIEFQSSBmb3IgYWxsIHBhZ2VzIG9mIFNBUCBGaW9yaSBlbGVtZW50cyBmb3IgT0RhdGEgVjQuXG4gKlxuICogVG8gY29ycmVjdGx5IGludGVncmF0ZSB5b3VyIGFwcCBleHRlbnNpb24gY29kaW5nIHdpdGggU0FQIEZpb3JpIGVsZW1lbnRzLCB1c2Ugb25seSB0aGUgZXh0ZW5zaW9uQVBJIG9mIFNBUCBGaW9yaSBlbGVtZW50cy4gRG9uJ3QgYWNjZXNzIG9yIG1hbmlwdWxhdGUgY29udHJvbHMsIHByb3BlcnRpZXMsIG1vZGVscywgb3Igb3RoZXIgaW50ZXJuYWwgb2JqZWN0cyBjcmVhdGVkIGJ5IHRoZSBTQVAgRmlvcmkgZWxlbWVudHMgZnJhbWV3b3JrLlxuICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvY29udHJvbGxlckV4dGVuc2lvbnNPdmVydmlldyBPdmVydmlldyBvZiBCdWlsZGluZyBCbG9ja31cbiAqIEBwdWJsaWNcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzaW5jZSAxLjc5LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuRXh0ZW5zaW9uQVBJXCIpXG5jbGFzcyBFeHRlbnNpb25BUEkgZXh0ZW5kcyBCYXNlT2JqZWN0IHtcblx0LyoqXG5cdCAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgaW50byB0aGUgZWRpdCBmbG93IG9mIHRoZSBhcHBsaWNhdGlvbi5cblx0ICoge0BsaW5rIGRlbW86c2FwL2ZlL2NvcmUvZnBtRXhwbG9yZXIvaW5kZXguaHRtbCMvY29udHJvbGxlckV4dGVuc2lvbnMvYmFzaWNFeHRlbnNpYmlsaXR5IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLkVkaXRGbG93XCIgfSlcblx0ZWRpdEZsb3c6IEVkaXRGbG93O1xuXG5cdC8qKlxuXHQgKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIG9mZmVyaW5nIGhvb2tzIGludG8gdGhlIHJvdXRpbmcgZmxvdyBvZiB0aGUgYXBwbGljYXRpb24uXG5cdCAqIHtAbGluayBkZW1vOnNhcC9mZS9jb3JlL2ZwbUV4cGxvcmVyL2luZGV4Lmh0bWwjL2NvbnRyb2xsZXJFeHRlbnNpb25zL3JvdXRpbmdFeHRlbnNpYmlsaXR5IE92ZXJ2aWV3IG9mIEJ1aWxkaW5nIEJsb2NrfVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlJvdXRpbmdcIiB9KVxuXHRyb3V0aW5nOiBSb3V0aW5nO1xuXG5cdC8qKlxuXHQgKiBFeHRlbnNpb25BUEkgZm9yIGludGVudC1iYXNlZCBuYXZpZ2F0aW9uXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIgfSlcblx0aW50ZW50QmFzZWROYXZpZ2F0aW9uOiBJbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cblx0LyoqXG5cdCAqIEV4dGVuc2lvbkFQSSBmb3IgY29sbGFib3JhdGl2ZSBkcmFmdCBoYW5kbGluZ1xuXHQgKiBAcHVibGljXG5cdCAqIEB1aTUtZXhwZXJpbWVudGFsLXNpbmNlIDEuMTQxLjBcblx0ICogQHNpbmNlIDEuMTQxLjBcblx0ICovXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuQ29sbGFib3JhdGl2ZURyYWZ0XCIgfSlcblx0Y29sbGFib3JhdGl2ZURyYWZ0OiBDb2xsYWJvcmF0aXZlRHJhZnQ7XG5cblx0cHVibGljIF9jb250cm9sbGVyOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcm90ZWN0ZWQgX3ZpZXc6IEZFVmlldztcblxuXHRwcml2YXRlIF9yb3V0aW5nOiBJbnRlcm5hbFJvdXRpbmc7XG5cblx0cHJpdmF0ZSBfaW50ZW50QmFzZWROYXZpZ2F0aW9uOiBJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbjtcblxuXHRwcml2YXRlIF9wcmVmaXg/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBleHRlbnNpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdHByb3RlY3RlZCBfZm9ybWF0dGVycyA9IFNjb3BlLl9mb3JtYXR0ZXJzO1xuXG5cdGNvbnN0cnVjdG9yKG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlciwgc0lkPzogc3RyaW5nKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl9jb250cm9sbGVyID0gb0NvbnRyb2xsZXI7XG5cdFx0dGhpcy5fdmlldyA9IG9Db250cm9sbGVyLmdldFZpZXcoKTtcblx0XHR0aGlzLmV4dGVuc2lvbiA9IHRoaXMuX2NvbnRyb2xsZXIuZXh0ZW5zaW9uO1xuXHRcdHRoaXMuZWRpdEZsb3cgPSB0aGlzLl9jb250cm9sbGVyLmVkaXRGbG93O1xuXHRcdHRoaXMucm91dGluZyA9IHRoaXMuX2NvbnRyb2xsZXIucm91dGluZztcblx0XHR0aGlzLmludGVudEJhc2VkTmF2aWdhdGlvbiA9IHRoaXMuX2NvbnRyb2xsZXIuaW50ZW50QmFzZWROYXZpZ2F0aW9uO1xuXHRcdHRoaXMuY29sbGFib3JhdGl2ZURyYWZ0ID0gdGhpcy5fY29udHJvbGxlci5jb2xsYWJvcmF0aXZlRHJhZnQ7XG5cblx0XHQvLyBTZXR0aW5nIGludGVybmFsIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBmb3IgZGVmYXVsdCBidWlsZGluZyBibG9jayBoYW5kbGVyIHRvIHdvcmsgd2hlbiB1c2luZyBFeHRlbnNpb25BUEkgYXMgY29udHJvbGxlciBpbiBjdXN0b20gZnJhZ21lbnQgc2NuZWFyaW9zLlxuXHRcdHRoaXMuX3JvdXRpbmcgPSB0aGlzLl9jb250cm9sbGVyLl9yb3V0aW5nO1xuXHRcdHRoaXMuX2ludGVudEJhc2VkTmF2aWdhdGlvbiA9IHRoaXMuX2NvbnRyb2xsZXIuX2ludGVudEJhc2VkTmF2aWdhdGlvbjtcblx0XHR0aGlzLl9wcmVmaXggPSBzSWQ7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBlZGl0RmxvdyBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgdGhpcyBwYWdlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSBlZGl0RmxvdyBjb250cm9sbGVyIGV4dGVuc2lvblxuXHQgKi9cblx0Z2V0RWRpdEZsb3coKTogRWRpdEZsb3cge1xuXHRcdHJldHVybiB0aGlzLmVkaXRGbG93O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgcm91dGluZyBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgdGhpcyBwYWdlLlxuXHQgKiBAcHVibGljXG5cdCAqIEByZXR1cm5zIFRoZSByb3V0aW5nIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdCAqL1xuXHRnZXRSb3V0aW5nKCk6IFJvdXRpbmcge1xuXHRcdHJldHVybiB0aGlzLnJvdXRpbmc7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBpbnRlbnRCYXNlZE5hdmlnYXRpb24gY29udHJvbGxlciBleHRlbnNpb24gZm9yIHRoaXMgcGFnZS5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBUaGUgaW50ZW50QmFzZWROYXZpZ2F0aW9uIGNvbnRyb2xsZXIgZXh0ZW5zaW9uXG5cdCAqL1xuXHRnZXRJbnRlbnRCYXNlZE5hdmlnYXRpb24oKTogSW50ZW50QmFzZWROYXZpZ2F0aW9uIHtcblx0XHRyZXR1cm4gdGhpcy5pbnRlbnRCYXNlZE5hdmlnYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogQWNjZXNzIGEgY29udHJvbCBieSBpdHMgSUQuIElmIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBhbiBpbnRlcm5hbCBjb250cm9sIGluc3RlYWQgb2YgdGhlIHN0YWJsZSBBUEksIHRoZSBtZXRob2Qgd2lsbCByYWlzZSBhbiBlcnJvci5cblx0ICogQHBhcmFtIGlkIElEIG9mIHRoZSBjb250cm9sIHdpdGhvdXQgdmlldyBhbmQgc2VjdGlvbiBwcmVmaXguXG5cdCAqIEByZXR1cm5zIFRoZSByZXF1ZXN0ZWQgY29udHJvbCwgaWYgZm91bmQgaW4gdGhlIHZpZXcgLyBzZWN0aW9uLlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRieUlkKGlkOiBzdHJpbmcpOiBVSTVFbGVtZW50IHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgY29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChpZCk7XG5cblx0XHRpZiAoIWNvbnRyb2wgJiYgdGhpcy5fcHJlZml4KSB7XG5cdFx0XHQvLyBnaXZlIGl0IGEgdHJ5IHdpdGggdGhlIHByZWZpeFxuXHRcdFx0Y29udHJvbCA9IHRoaXMuX3ZpZXcuYnlJZChgJHt0aGlzLl9wcmVmaXh9LS0ke2lkfWApO1xuXHRcdH1cblxuXHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHRpZiAoIWNvbnRyb2wuaXNBPE1hY3JvQVBJPihcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIikpIHtcblx0XHRcdC8vIGNoZWNrIGlmIGFwcCB0cmllZCB0byBhY2Nlc3MgYW4gaW50ZXJuYWwgY29udHJvbCB3cmFwcGVkIGJ5IGEgbWFjcm8gQVBJXG5cdFx0XHRsZXQgcGFyZW50ID0gY29udHJvbC5nZXRQYXJlbnQoKTtcblxuXHRcdFx0d2hpbGUgKHBhcmVudCkge1xuXHRcdFx0XHRpZiAocGFyZW50LmlzQTxGb3JtQVBJPihcInNhcC5mZS5tYWNyb3MuZm9ybS5Gb3JtQVBJXCIpKSB7XG5cdFx0XHRcdFx0Ly8gd2UgcmVhY2hlZCB0aGUgZm9ybUFQSSBidXQgbm8gZmllbGQgLSB0aGUgYXBwIHRyaWVzIHRvIGFjY2VzcyBhbnkgY3VzdG9tIGNvbnRyb2wgd2hpY2ggaXMgZmluZVxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKHBhcmVudC5pc0E8TWFjcm9BUEk+KFwic2FwLmZlLm1hY3Jvcy5NYWNyb0FQSVwiKSkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcblx0XHRcdFx0XHRcdGBZb3UgYXR0ZW1wdGVkIHRvIGFjY2VzcyBhbiBpbnRlcm5hbCBjb250cm9sLiBUaGlzIGlzIHJpc2t5IGFuZCBtaWdodCBjaGFuZ2UgbGF0ZXIuIEluc3RlYWQgYWNjZXNzIGl0cyBzdGFibGUgQVBJIGJ5IHVzaW5nIElEICR7cGFyZW50LmdldElkKCl9YFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRwYXJlbnQgPSBwYXJlbnQuZ2V0UGFyZW50KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbnRyb2w7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFjY2VzcyB0byBtb2RlbHMgbWFuYWdlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMuPGJyPlxuXHQgKiBUaGUgZm9sbG93aW5nIG1vZGVscyBjYW4gYmUgYWNjZXNzZWQ6XG5cdCAqIDx1bD5cblx0ICogPGxpPnVuZGVmaW5lZDogdGhlIHVuZGVmaW5lZCBtb2RlbCByZXR1cm5zIHRoZSBTQVBVSTUgT0RhdGEgVjQgbW9kZWwgYm91bmQgdG8gdGhpcyBwYWdlPC9saT5cblx0ICogPGxpPmkxOG4gLyBmdXJ0aGVyIGRhdGEgbW9kZWxzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0PC9saT5cblx0ICogPGxpPnVpOiByZXR1cm5zIGEgU0FQVUk1IEpTT04gbW9kZWwgY29udGFpbmluZyBVSSBpbmZvcm1hdGlvbi5cblx0ICogT25seSB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXMgYXJlIHB1YmxpYyBhbmQgc3VwcG9ydGVkOlxuXHQgKiA8dWw+XG5cdCAqIDxsaT5pc0VkaXRhYmxlOiBzZXQgdG8gdHJ1ZSBpZiB0aGUgYXBwbGljYXRpb24gaXMgaW4gZWRpdCBtb2RlPC9saT5cblx0ICogPC91bD5cblx0ICogPC9saT5cblx0ICogPC91bD4uXG5cdCAqIGVkaXRNb2RlIGlzIGRlcHJlY2F0ZWQgYW5kIHNob3VsZCBub3QgYmUgdXNlZCBhbnltb3JlLiBVc2UgaXNFZGl0YWJsZSBpbnN0ZWFkLlxuXHQgKiBAcGFyYW0gc01vZGVsTmFtZSBOYW1lIG9mIHRoZSBtb2RlbFxuXHQgKiBAcmV0dXJucyBUaGUgcmVxdWlyZWQgbW9kZWxcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0Z2V0TW9kZWwoc01vZGVsTmFtZT86IHN0cmluZyk6IE1vZGVsIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgb0FwcENvbXBvbmVudDtcblxuXHRcdGlmIChzTW9kZWxOYW1lICYmIHNNb2RlbE5hbWUgIT09IFwidWlcIikge1xuXHRcdFx0b0FwcENvbXBvbmVudCA9IENvbW1vblV0aWxzLmdldEFwcENvbXBvbmVudCh0aGlzLl92aWV3KTtcblx0XHRcdGlmICghb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5tb2RlbHNbc01vZGVsTmFtZV0pIHtcblx0XHRcdFx0Ly8gZG9uJ3QgYWxsb3cgYWNjZXNzIHRvIG91ciBpbnRlcm5hbCBtb2RlbHNcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5fdmlldy5nZXRNb2RlbChzTW9kZWxOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBZGQgYW55IGNvbnRyb2wgYXMgYSBkZXBlbmRlbnQgY29udHJvbCB0byB0aGlzIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlLlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgQ29udHJvbCB0byBiZSBhZGRlZCBhcyBhIGRlcGVuZGVudCBjb250cm9sXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGFkZERlcGVuZGVudChvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdHRoaXMuX3ZpZXcuYWRkRGVwZW5kZW50KG9Db250cm9sKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZW1vdmUgYSBkZXBlbmRlbnQgY29udHJvbCBmcm9tIHRoaXMgU0FQIEZpb3JpIGVsZW1lbnRzIHBhZ2UuXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBDb250cm9sIHRvIGJlIGFkZGVkIGFzIGEgZGVwZW5kZW50IGNvbnRyb2xcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cmVtb3ZlRGVwZW5kZW50KG9Db250cm9sOiBDb250cm9sKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldy5yZW1vdmVEZXBlbmRlbnQob0NvbnRyb2wpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlIHRvIGFub3RoZXIgdGFyZ2V0LlxuXHQgKiBAcGFyYW0gc1RhcmdldCBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIFtvQ29udGV4dF0gT0RhdGEgdjQgY29udGV4dCBpbnN0YW5jZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRuYXZpZ2F0ZVRvVGFyZ2V0KHNUYXJnZXQ6IHN0cmluZywgb0NvbnRleHQ6IE9EYXRhVjRDb250ZXh0KTogdm9pZCB7XG5cdFx0dGhpcy5fY29udHJvbGxlci5fcm91dGluZy5uYXZpZ2F0ZVRvVGFyZ2V0KG9Db250ZXh0LCBzVGFyZ2V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkIGEgZnJhZ21lbnQgYW5kIGdvIHRocm91Z2ggdGhlIHRlbXBsYXRlIHByZXByb2Nlc3NvciB3aXRoIHRoZSBjdXJyZW50IHBhZ2UgY29udGV4dC5cblx0ICogQHBhcmFtIG1TZXR0aW5ncyBUaGUgc2V0dGluZ3Mgb2JqZWN0XG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuaWQgVGhlIElEIG9mIHRoZSBmcmFnbWVudCBpdHNlbGZcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5uYW1lIFRoZSBuYW1lIG9mIHRoZSBmcmFnbWVudCB0byBiZSBsb2FkZWRcblx0ICogQHBhcmFtIG1TZXR0aW5ncy5jb250cm9sbGVyIFRoZSBjb250cm9sbGVyIHRvIGJlIGF0dGFjaGVkIHRvIHRoZSBmcmFnbWVudFxuXHQgKiBAcGFyYW0gbVNldHRpbmdzLmNvbnRleHRQYXRoIFRoZSBjb250ZXh0UGF0aCB0byBiZSB1c2VkIGZvciB0aGUgdGVtcGxhdGluZyBwcm9jZXNzXG5cdCAqIEBwYXJhbSBtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0IFRoZSBpbml0aWFsIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBUaGUgZnJhZ21lbnQgZGVmaW5pdGlvblxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRhc3luYyBsb2FkRnJhZ21lbnQobVNldHRpbmdzOiB7XG5cdFx0aWQ6IHN0cmluZztcblx0XHRuYW1lOiBzdHJpbmc7XG5cdFx0Y29udHJvbGxlcj86IG9iamVjdDtcblx0XHRjb250ZXh0UGF0aD86IHN0cmluZztcblx0XHRpbml0aWFsQmluZGluZ0NvbnRleHQ/OiBDb250ZXh0O1xuXHR9KTogUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdPiB7XG5cdFx0Y29uc3Qgb1RlbXBsYXRlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHRoaXMuX3ZpZXcpIGFzIEVuaGFuY2VXaXRoVUk1PFRlbXBsYXRlQ29tcG9uZW50Pjtcblx0XHRhd2FpdCBvVGVtcGxhdGVDb21wb25lbnQuZ2V0U2VydmljZShcInRlbXBsYXRlZFZpZXdTZXJ2aWNlXCIpO1xuXHRcdGNvbnN0IG9QYWdlTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwiX3BhZ2VNb2RlbFwiKTtcblx0XHRjb25zdCBpMThuTW9kZWwgPSB0aGlzLl92aWV3LmdldE1vZGVsKFwic2FwLmZlLmkxOG5cIik7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbCA9IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBtVmlld0RhdGEgPSBvVGVtcGxhdGVDb21wb25lbnQuZ2V0Vmlld0RhdGEoKTtcblx0XHRjb25zdCB0YXJnZXRDb250ZXh0UGF0aCA9IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRFbnRpdHlTZXQoKVxuXHRcdFx0PyBgLyR7b1RlbXBsYXRlQ29tcG9uZW50LmdldEVudGl0eVNldCgpIX1gXG5cdFx0XHQ6IG9UZW1wbGF0ZUNvbXBvbmVudC5nZXRDb250ZXh0UGF0aCgpITtcblx0XHRjb25zdCBvVmlld0RhdGFNb2RlbCA9IG5ldyBKU09OTW9kZWwobVZpZXdEYXRhKSxcblx0XHRcdG9QcmVwcm9jZXNzb3JTZXR0aW5ncyA9IHtcblx0XHRcdFx0YmluZGluZ0NvbnRleHRzOiB7XG5cdFx0XHRcdFx0Y29udGV4dFBhdGg6IG9NZXRhTW9kZWw/LmNyZWF0ZUJpbmRpbmdDb250ZXh0KG1TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCB0YXJnZXRDb250ZXh0UGF0aCksXG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dDogb1BhZ2VNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChcIi9cIiwgdW5kZWZpbmVkLCB7IG5vUmVzb2x2ZTogdHJ1ZSB9KSxcblx0XHRcdFx0XHR2aWV3RGF0YTogbVZpZXdEYXRhID8gb1ZpZXdEYXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpIDogbnVsbFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRtb2RlbHM6IHtcblx0XHRcdFx0XHRjb250ZXh0UGF0aDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0OiBvUGFnZU1vZGVsLFxuXHRcdFx0XHRcdG1ldGFNb2RlbDogb01ldGFNb2RlbCxcblx0XHRcdFx0XHR2aWV3RGF0YTogb1ZpZXdEYXRhTW9kZWwsXG5cdFx0XHRcdFx0XCJzYXAuZmUuaTE4blwiOiBpMThuTW9kZWxcblx0XHRcdFx0fSxcblx0XHRcdFx0YXBwQ29tcG9uZW50OiBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQodGhpcy5fdmlldylcblx0XHRcdH07XG5cblx0XHQvLyBXZSBzY29wZSB0aGUgZnJhZ21lbnQgd2l0aCBvdXIgRXh0ZW5zaW9uQVBJLiBJZiBhIGNvbnRyb2xsZXIgb2JqZWN0IGlzIHBhc3NlZCB3ZSBtZXJnZSBpdCB3aXRoIHRoZSBleHRlbnNpb25BUElcblx0XHRsZXQgY29udHJvbGxlckluc3RhbmNlOiBFeHRlbnNpb25BUEk7XG5cdFx0aWYgKG1TZXR0aW5ncy5jb250cm9sbGVyICYmICEobVNldHRpbmdzLmNvbnRyb2xsZXIgYXMgRXh0ZW5zaW9uQVBJKT8uaXNBPy4oXCJzYXAuZmUuY29yZS5FeHRlbnNpb25BUElcIikpIHtcblx0XHRcdGNvbnN0IHN1YkNsYXNzID0gKFxuXHRcdFx0XHR0aGlzLmdldE1ldGFkYXRhKCkuZ2V0Q2xhc3MoKSBhcyB1bmtub3duIGFzIHtcblx0XHRcdFx0XHRleHRlbmQ6IChpZDogc3RyaW5nLCBjb250ZW50OiBvYmplY3QpID0+IHsgbmV3IChwYWdlQ29udHJvbGxlcjogUGFnZUNvbnRyb2xsZXIpOiBFeHRlbnNpb25BUEkgfTtcblx0XHRcdFx0fVxuXHRcdFx0KS5leHRlbmQobVNldHRpbmdzLmlkICsgXCItY29udHJvbGxlclwiLCB7fSk7XG5cdFx0XHRmb3IgKGNvbnN0IGNvbnRyb2xsZXJFbGVtZW50S2V5IGluIG1TZXR0aW5ncy5jb250cm9sbGVyKSB7XG5cdFx0XHRcdGNvbnN0IGNvbnRyb2xsZXJFbGVtZW50ID0gbVNldHRpbmdzLmNvbnRyb2xsZXJbY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXTtcblx0XHRcdFx0aWYgKChjb250cm9sbGVyRWxlbWVudCBhcyBGdW5jdGlvbik/LmJpbmQpIHtcblx0XHRcdFx0XHRjb25zdCBib3VuZEZ1bmN0aW9uID0gKGNvbnRyb2xsZXJFbGVtZW50IGFzIEZ1bmN0aW9uKS5iaW5kKG1TZXR0aW5ncy5jb250cm9sbGVyKTtcblx0XHRcdFx0XHRpZiAob1RlbXBsYXRlQ29tcG9uZW50KSB7XG5cdFx0XHRcdFx0XHRzdWJDbGFzcy5wcm90b3R5cGVbY29udHJvbGxlckVsZW1lbnRLZXldID0gKC4uLmFyZ3M6IHVua25vd25bXSk6IHVua25vd24gPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gb1RlbXBsYXRlQ29tcG9uZW50LnJ1bkFzT3duZXIoKCkgPT4gYm91bmRGdW5jdGlvbi5hcHBseSh0aGlzLCBhcmdzKSk7XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzdWJDbGFzcy5wcm90b3R5cGVbY29udHJvbGxlckVsZW1lbnRLZXldID0gYm91bmRGdW5jdGlvbjtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN1YkNsYXNzLnByb3RvdHlwZSwgY29udHJvbGxlckVsZW1lbnRLZXksIHtcblx0XHRcdFx0XHRcdGdldCgpIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG1TZXR0aW5ncy5jb250cm9sbGVyPy5bY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXTtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRzZXQodjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0XHRpZiAobVNldHRpbmdzLmNvbnRyb2xsZXIpIHtcblx0XHRcdFx0XHRcdFx0XHQobVNldHRpbmdzLmNvbnRyb2xsZXJbY29udHJvbGxlckVsZW1lbnRLZXkgYXMga2V5b2YgdHlwZW9mIG1TZXR0aW5ncy5jb250cm9sbGVyXSBhcyB1bmtub3duKSA9IHY7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0Y29udHJvbGxlckluc3RhbmNlID0gbmV3IHN1YkNsYXNzKHRoaXMuX2NvbnRyb2xsZXIpO1xuXHRcdFx0Y29uc3QgbmV3SXNBID0gY29udHJvbGxlckluc3RhbmNlLmlzQTtcblx0XHRcdGNvbnRyb2xsZXJJbnN0YW5jZS5pc0EgPSAoY2xhc3NOYW1lOiBzdHJpbmcpOiBib29sZWFuID0+IHtcblx0XHRcdFx0Ly8gV2Uga2VlcCB0aGUgXHRzYXAuZmUuY29yZS5FeHRlbnNpb25BUEkgYXMgYSB2YWxpZCB0eXBlIGZvciB0aGlzIG5ldyBjbGFzc1xuXHRcdFx0XHQvLyB0aGlzIHR5cGUgaXMgbG9zdCBhcyBzb29uIGFzIHRoZSBtZXJnZWQgY29udHJvbGxlciBvYmplY3QgZ2V0cyBhIG1ldGhvZCBpc0Fcblx0XHRcdFx0cmV0dXJuIG5ld0lzQS5iaW5kKGNvbnRyb2xsZXJJbnN0YW5jZSkoY2xhc3NOYW1lKSB8fCB0aGlzLmlzQShjbGFzc05hbWUpO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Y29udHJvbGxlckluc3RhbmNlID0gKG1TZXR0aW5ncy5jb250cm9sbGVyIGFzIEV4dGVuc2lvbkFQSSkgPz8gdGhpcztcblx0XHR9XG5cdFx0cmV0dXJuIG9UZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGFzeW5jICgpID0+IHtcblx0XHRcdGNvbnN0IG9UZW1wbGF0ZVByb21pc2UgPSBDb21tb25VdGlscy50ZW1wbGF0ZUNvbnRyb2xGcmFnbWVudChtU2V0dGluZ3MubmFtZSwgb1ByZXByb2Nlc3NvclNldHRpbmdzLCB7XG5cdFx0XHRcdGNvbnRyb2xsZXI6IGNvbnRyb2xsZXJJbnN0YW5jZSxcblx0XHRcdFx0aXNYTUw6IGZhbHNlLFxuXHRcdFx0XHRpZDogbVNldHRpbmdzLmlkLFxuXHRcdFx0XHRjb250YWluaW5nVmlldzogdGhpcy5fdmlldyxcblx0XHRcdFx0Y29udGV4dFBhdGg6IG1TZXR0aW5ncy5jb250ZXh0UGF0aCA/PyB0YXJnZXRDb250ZXh0UGF0aFxuXHRcdFx0fSkgYXMgUHJvbWlzZTxDb250cm9sPjtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG9GcmFnbWVudDogQ29udHJvbCA9IGF3YWl0IG9UZW1wbGF0ZVByb21pc2U7XG5cdFx0XHRcdGlmIChtU2V0dGluZ3MuaW5pdGlhbEJpbmRpbmdDb250ZXh0ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRvRnJhZ21lbnQuc2V0QmluZGluZ0NvbnRleHQobVNldHRpbmdzLmluaXRpYWxCaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5hZGREZXBlbmRlbnQob0ZyYWdtZW50KTtcblx0XHRcdFx0cmV0dXJuIG9GcmFnbWVudDtcblx0XHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3Iob0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSkgYXMgUHJvbWlzZTxVSTVFbGVtZW50IHwgVUk1RWxlbWVudFtdPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUcmlnZ2VycyBhbiB1cGRhdGUgb2YgdGhlIGFwcCBzdGF0ZS5cblx0ICogU2hvdWxkIGJlIGNhbGxlZCBpZiB0aGUgc3RhdGUgb2YgYSBjb250cm9sLCBvciBhbnkgb3RoZXIgc3RhdGUtcmVsZXZhbnQgaW5mb3JtYXRpb24sIHdhcyBjaGFuZ2VkLlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aXRoIHRoZSBuZXcgYXBwIHN0YXRlIG9iamVjdC5cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0YXN5bmMgdXBkYXRlQXBwU3RhdGUoKTogUHJvbWlzZTx2b2lkIHwgeyBhcHBTdGF0ZTogb2JqZWN0IHwgdW5kZWZpbmVkIH0+IHtcblx0XHRjb25zdCB2aWV3ID0gdGhpcy5fY29udHJvbGxlci5nZXRWaWV3KCk7XG5cdFx0Y29uc3QgYXBwQ29tcG9uZW50ID0gdGhpcy5fY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKTtcblx0XHRjb25zdCBhcHBTdGF0ZUluZm8gPSBhd2FpdCBhcHBDb21wb25lbnQuZ2V0QXBwU3RhdGVIYW5kbGVyKCkuY3JlYXRlQXBwU3RhdGUoe1xuXHRcdFx0dmlld0lkOiB2aWV3LmdldElkKClcblx0XHR9KTtcblx0XHRyZXR1cm4gYXBwU3RhdGVJbmZvPy5hcHBTdGF0ZURhdGE7XG5cdH1cblxuXHQvKipcblx0ICogUnVuIHRoZSBnaXZlbiBmdW5jdGlvbiB3aXRoIHRoZSBGUE0gY29udGV4dCBvZiB0aGUgY3VycmVudCBwYWdlLlxuXHQgKiBUaGlzIGFsbG93cyB0byBpbml0aWFsaXplIGFsbCB0aGUgZWxlbWVudHMgcmVxdWlyZWQgYnkgYnVpbGRpbmcgYmxvY2tzIHRvIHJlbmRlciBjb3JyZWN0bHkuXG5cdCAqIEBwYXJhbSBmbiBUaGUgRnVuY3Rpb24gdG8gYmUgZXhlY3V0ZWRcblx0ICogQHJldHVybnMgVGhlIHJlc3VsdCBvZiB0aGUgZnVuY3Rpb25cblx0ICogQHB1YmxpY1xuXHQgKi9cblx0cnVuV2l0aEZQTUNvbnRleHQoZm46IEZ1bmN0aW9uKTogdW5rbm93biB7XG5cdFx0Y29uc3QgdGVtcGxhdGVDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3IodGhpcy5fdmlldykgYXMgRW5oYW5jZVdpdGhVSTU8VGVtcGxhdGVDb21wb25lbnQ+O1xuXHRcdHJldHVybiB0ZW1wbGF0ZUNvbXBvbmVudC5ydW5Bc093bmVyKGZuIGFzIFRTRnVuY3Rpb24pO1xuXHR9XG5cblx0LyoqXG5cdCAqIFdhdGNoIGEgcHJvcGVydHkgZnJvbSB0aGUgbWFpbiBwYWdlIGNvbnRleHQgYW5kIHRyaWdnZXIgYSBjYWxsYmFjayB3aGVuIHRoZSB2YWx1ZSBjaGFuZ2VzLlxuXHQgKiBAcGFyYW0gcHJvcGVydHlOYW1lIFRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eSB0byB3YXRjaFxuXHQgKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHRyaWdnZXIgd2hlbiB0aGUgdmFsdWUgY2hhbmdlc1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHR3YXRjaFByb3BlcnR5KHByb3BlcnR5TmFtZTogc3RyaW5nLCBjYWxsYmFjazogV2F0Y2hlckNhbGxiYWNrKTogdm9pZCB7XG5cdFx0dGhpcy5fdmlldy5hZGREZXBlbmRlbnQoXG5cdFx0XHRuZXcgRGF0YVdhdGNoZXIoe1xuXHRcdFx0XHRwcm9wZXJ0eUJpbmRpbmc6IGNvbXBpbGVFeHByZXNzaW9uKHBhdGhJbk1vZGVsKHByb3BlcnR5TmFtZSkpLFxuXHRcdFx0XHR2YWx1ZUNoYW5nZWQ6IChlKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSwgZS5nZXRQYXJhbWV0ZXIoXCJvbGRWYWx1ZVwiKSwgZS5nZXRQYXJhbWV0ZXIoXCJpc0luaXRpYWxcIiksIGUuZ2V0UGFyYW1ldGVyKFwiY29udGV4dFwiKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pXG5cdFx0KTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBFeHRlbnNpb25BUEk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLElBVU1BLFlBQVksSUFBQUMsSUFBQSxHQURqQkMsY0FBYyxDQUFDLDBCQUEwQixDQUFDLEVBQUFDLEtBQUEsR0FPekNDLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBNEMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRL0RGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBMkMsQ0FBQyxDQUFDLEVBQUFFLEtBQUEsR0FPOURILFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBeUQsQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FTNUVKLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBc0QsQ0FBQyxDQUFDLEVBQUFKLElBQUEsQ0FBQVEsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxXQUFBO0lBaUIxRSxTQUFBWCxhQUFZWSxXQUEyQixFQUFFQyxHQUFZLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3REQSxLQUFBLEdBQUFILFdBQUEsQ0FBQUksSUFBQSxLQUFNLENBQUM7TUEvQ1I7QUFDRDtBQUNBO0FBQ0E7QUFDQTtNQUpDQywwQkFBQSxDQUFBRixLQUFBLGNBQUFHLFdBQUEsRUFBQUgsS0FBQTtNQVFBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7TUFKQ0UsMEJBQUEsQ0FBQUYsS0FBQSxhQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFRQTtBQUNEO0FBQ0E7QUFDQTtNQUhDRSwwQkFBQSxDQUFBRixLQUFBLDJCQUFBSyxZQUFBLEVBQUFMLEtBQUE7TUFPQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7TUFMQ0UsMEJBQUEsQ0FBQUYsS0FBQSx3QkFBQU0sWUFBQSxFQUFBTixLQUFBO01BQUFBLEtBQUEsQ0FxQlVPLFdBQVcsR0FBR0MsS0FBSyxDQUFDRCxXQUFXO01BSXhDUCxLQUFBLENBQUtTLFdBQVcsR0FBR1gsV0FBVztNQUM5QkUsS0FBQSxDQUFLVSxLQUFLLEdBQUdaLFdBQVcsQ0FBQ2EsT0FBTyxDQUFDLENBQUM7TUFDbENYLEtBQUEsQ0FBS1ksU0FBUyxHQUFHWixLQUFBLENBQUtTLFdBQVcsQ0FBQ0csU0FBUztNQUMzQ1osS0FBQSxDQUFLYSxRQUFRLEdBQUdiLEtBQUEsQ0FBS1MsV0FBVyxDQUFDSSxRQUFRO01BQ3pDYixLQUFBLENBQUtjLE9BQU8sR0FBR2QsS0FBQSxDQUFLUyxXQUFXLENBQUNLLE9BQU87TUFDdkNkLEtBQUEsQ0FBS2UscUJBQXFCLEdBQUdmLEtBQUEsQ0FBS1MsV0FBVyxDQUFDTSxxQkFBcUI7TUFDbkVmLEtBQUEsQ0FBS2dCLGtCQUFrQixHQUFHaEIsS0FBQSxDQUFLUyxXQUFXLENBQUNPLGtCQUFrQjs7TUFFN0Q7TUFDQWhCLEtBQUEsQ0FBS2lCLFFBQVEsR0FBR2pCLEtBQUEsQ0FBS1MsV0FBVyxDQUFDUSxRQUFRO01BQ3pDakIsS0FBQSxDQUFLa0Isc0JBQXNCLEdBQUdsQixLQUFBLENBQUtTLFdBQVcsQ0FBQ1Msc0JBQXNCO01BQ3JFbEIsS0FBQSxDQUFLbUIsT0FBTyxHQUFHcEIsR0FBRztNQUFDLE9BQUFDLEtBQUE7SUFDcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtJQUpDb0IsY0FBQSxDQUFBbEMsWUFBQSxFQUFBVyxXQUFBO0lBQUEsSUFBQXdCLE1BQUEsR0FBQW5DLFlBQUEsQ0FBQW9DLFNBQUE7SUFBQUQsTUFBQSxDQUtBRSxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFhO01BQ3ZCLE9BQU8sSUFBSSxDQUFDVixRQUFRO0lBQ3JCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBUSxNQUFBLENBS0FHLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQVk7TUFDckIsT0FBTyxJQUFJLENBQUNWLE9BQU87SUFDcEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFPLE1BQUEsQ0FLQUksd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQSxFQUEwQjtNQUNqRCxPQUFPLElBQUksQ0FBQ1YscUJBQXFCO0lBQ2xDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFNLE1BQUEsQ0FNQUssSUFBSSxHQUFKLFNBQUFBLElBQUlBLENBQUNDLEVBQVUsRUFBMEI7TUFDeEMsSUFBSUMsT0FBTyxHQUFHLElBQUksQ0FBQ2xCLEtBQUssQ0FBQ2dCLElBQUksQ0FBQ0MsRUFBRSxDQUFDO01BRWpDLElBQUksQ0FBQ0MsT0FBTyxJQUFJLElBQUksQ0FBQ1QsT0FBTyxFQUFFO1FBQzdCO1FBQ0FTLE9BQU8sR0FBRyxJQUFJLENBQUNsQixLQUFLLENBQUNnQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUNQLE9BQU8sS0FBS1EsRUFBRSxFQUFFLENBQUM7TUFDcEQ7TUFFQSxJQUFJLENBQUNDLE9BQU8sRUFBRTtRQUNiLE9BQU9DLFNBQVM7TUFDakI7TUFFQSxJQUFJLENBQUNELE9BQU8sQ0FBQ0UsR0FBRyxDQUFXLHdCQUF3QixDQUFDLEVBQUU7UUFDckQ7UUFDQSxJQUFJQyxNQUFNLEdBQUdILE9BQU8sQ0FBQ0ksU0FBUyxDQUFDLENBQUM7UUFFaEMsT0FBT0QsTUFBTSxFQUFFO1VBQ2QsSUFBSUEsTUFBTSxDQUFDRCxHQUFHLENBQVUsNEJBQTRCLENBQUMsRUFBRTtZQUN0RDtZQUNBO1VBQ0Q7VUFFQSxJQUFJQyxNQUFNLENBQUNELEdBQUcsQ0FBVyx3QkFBd0IsQ0FBQyxFQUFFO1lBQ25ELE1BQU0sSUFBSUcsS0FBSyxDQUNkLGdJQUFnSUYsTUFBTSxDQUFDRyxLQUFLLENBQUMsQ0FBQyxFQUMvSSxDQUFDO1VBQ0Y7VUFFQUgsTUFBTSxHQUFHQSxNQUFNLENBQUNDLFNBQVMsQ0FBQyxDQUFDO1FBQzVCO01BQ0Q7TUFFQSxPQUFPSixPQUFPO0lBQ2Y7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BakJDO0lBQUFQLE1BQUEsQ0FrQkFjLFFBQVEsR0FBUixTQUFBQSxRQUFRQSxDQUFDQyxVQUFtQixFQUFxQjtNQUNoRCxJQUFJQyxhQUFhO01BRWpCLElBQUlELFVBQVUsSUFBSUEsVUFBVSxLQUFLLElBQUksRUFBRTtRQUN0Q0MsYUFBYSxHQUFHQyxXQUFXLENBQUNDLGVBQWUsQ0FBQyxJQUFJLENBQUM3QixLQUFLLENBQUM7UUFDdkQsSUFBSSxDQUFDMkIsYUFBYSxDQUFDRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQ0MsTUFBTSxDQUFDTCxVQUFVLENBQUMsRUFBRTtVQUNsRTtVQUNBLE9BQU9QLFNBQVM7UUFDakI7TUFDRDtNQUVBLE9BQU8sSUFBSSxDQUFDbkIsS0FBSyxDQUFDeUIsUUFBUSxDQUFDQyxVQUFVLENBQUM7SUFDdkM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFmLE1BQUEsQ0FLQXFCLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDQyxRQUFpQixFQUFRO01BQ3JDLElBQUksQ0FBQ2pDLEtBQUssQ0FBQ2dDLFlBQVksQ0FBQ0MsUUFBUSxDQUFDO0lBQ2xDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBdEIsTUFBQSxDQUtBdUIsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNELFFBQWlCLEVBQVE7TUFDeEMsSUFBSSxDQUFDakMsS0FBSyxDQUFDa0MsZUFBZSxDQUFDRCxRQUFRLENBQUM7SUFDckM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXRCLE1BQUEsQ0FNQXdCLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNDLE9BQWUsRUFBRUMsUUFBd0IsRUFBUTtNQUNqRSxJQUFJLENBQUN0QyxXQUFXLENBQUNRLFFBQVEsQ0FBQzRCLGdCQUFnQixDQUFDRSxRQUFRLEVBQUVELE9BQU8sQ0FBQztJQUM5RDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQXpCLE1BQUEsQ0FXTTJCLFlBQVksR0FBbEIsZUFBTUEsWUFBWUEsQ0FBQ0MsU0FNbEIsRUFBc0M7TUFBQSxJQUFBQyxNQUFBO01BQ3RDLE1BQU1DLGtCQUFrQixHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDLElBQUksQ0FBQzNDLEtBQUssQ0FBc0M7TUFDMUcsTUFBTXlDLGtCQUFrQixDQUFDRyxVQUFVLENBQUMsc0JBQXNCLENBQUM7TUFDM0QsTUFBTUMsVUFBVSxHQUFHLElBQUksQ0FBQzdDLEtBQUssQ0FBQ3lCLFFBQVEsQ0FBQyxZQUFZLENBQUM7TUFDcEQsTUFBTXFCLFNBQVMsR0FBRyxJQUFJLENBQUM5QyxLQUFLLENBQUN5QixRQUFRLENBQUMsYUFBYSxDQUFDO01BQ3BELE1BQU1zQixVQUFVLEdBQUdOLGtCQUFrQixDQUFDTyxZQUFZLENBQUMsQ0FBQztNQUNwRCxNQUFNQyxTQUFTLEdBQUdSLGtCQUFrQixDQUFDUyxXQUFXLENBQUMsQ0FBQztNQUNsRCxNQUFNQyxpQkFBaUIsR0FBR1Ysa0JBQWtCLENBQUNXLFlBQVksQ0FBQyxDQUFDLEdBQ3hELElBQUlYLGtCQUFrQixDQUFDVyxZQUFZLENBQUMsQ0FBQyxFQUFHLEdBQ3hDWCxrQkFBa0IsQ0FBQ1ksY0FBYyxDQUFDLENBQUU7TUFDdkMsTUFBTUMsY0FBYyxHQUFHLElBQUlDLFNBQVMsQ0FBQ04sU0FBUyxDQUFDO1FBQzlDTyxxQkFBcUIsR0FBRztVQUN2QkMsZUFBZSxFQUFFO1lBQ2hCQyxXQUFXLEVBQUVYLFVBQVUsRUFBRVksb0JBQW9CLENBQUNwQixTQUFTLENBQUNtQixXQUFXLElBQUlQLGlCQUFpQixDQUFDO1lBQ3pGUyxnQkFBZ0IsRUFBRWYsVUFBVSxDQUFDYyxvQkFBb0IsQ0FBQyxHQUFHLEVBQUV4QyxTQUFTLEVBQUU7Y0FBRTBDLFNBQVMsRUFBRTtZQUFLLENBQUMsQ0FBQztZQUN0RkMsUUFBUSxFQUFFYixTQUFTLEdBQUdLLGNBQWMsQ0FBQ0ssb0JBQW9CLENBQUMsR0FBRyxDQUFDLEdBQUc7VUFDbEUsQ0FBQztVQUNENUIsTUFBTSxFQUFFO1lBQ1AyQixXQUFXLEVBQUVYLFVBQVU7WUFDdkJhLGdCQUFnQixFQUFFZixVQUFVO1lBQzVCa0IsU0FBUyxFQUFFaEIsVUFBVTtZQUNyQmUsUUFBUSxFQUFFUixjQUFjO1lBQ3hCLGFBQWEsRUFBRVI7VUFDaEIsQ0FBQztVQUNEa0IsWUFBWSxFQUFFcEMsV0FBVyxDQUFDQyxlQUFlLENBQUMsSUFBSSxDQUFDN0IsS0FBSztRQUNyRCxDQUFDOztNQUVGO01BQ0EsSUFBSWlFLGtCQUFnQztNQUNwQyxJQUFJMUIsU0FBUyxDQUFDMkIsVUFBVSxJQUFJLENBQUUzQixTQUFTLENBQUMyQixVQUFVLEVBQW1COUMsR0FBRyxHQUFHLDBCQUEwQixDQUFDLEVBQUU7UUFDdkcsTUFBTStDLFFBQVEsR0FDYixJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLFFBQVEsQ0FBQyxDQUFDLENBRzVCQyxNQUFNLENBQUMvQixTQUFTLENBQUN0QixFQUFFLEdBQUcsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFDLEtBQUssTUFBTXNELG9CQUFvQixJQUFJaEMsU0FBUyxDQUFDMkIsVUFBVSxFQUFFO1VBQ3hELE1BQU1NLGlCQUFpQixHQUFHakMsU0FBUyxDQUFDMkIsVUFBVSxDQUFDSyxvQkFBb0IsQ0FBc0M7VUFDekcsSUFBS0MsaUJBQWlCLEVBQWVDLElBQUksRUFBRTtZQUMxQyxNQUFNQyxhQUFhLEdBQUlGLGlCQUFpQixDQUFjQyxJQUFJLENBQUNsQyxTQUFTLENBQUMyQixVQUFVLENBQUM7WUFDaEYsSUFBSXpCLGtCQUFrQixFQUFFO2NBQ3ZCMEIsUUFBUSxDQUFDdkQsU0FBUyxDQUFDMkQsb0JBQW9CLENBQUMsR0FBRyxZQUFpQztnQkFBQSxTQUFBSSxJQUFBLEdBQUFDLFNBQUEsQ0FBQUMsTUFBQSxFQUE3QkMsSUFBSSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtrQkFBSkYsSUFBSSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtnQkFBQTtnQkFDbEQsT0FBT3ZDLGtCQUFrQixDQUFDd0MsVUFBVSxDQUFDLE1BQU1QLGFBQWEsQ0FBQ1EsS0FBSyxDQUFDMUMsTUFBSSxFQUFFc0MsSUFBSSxDQUFDLENBQUM7Y0FDNUUsQ0FBQztZQUNGLENBQUMsTUFBTTtjQUNOWCxRQUFRLENBQUN2RCxTQUFTLENBQUMyRCxvQkFBb0IsQ0FBQyxHQUFHRyxhQUFhO1lBQ3pEO1VBQ0QsQ0FBQyxNQUFNO1lBQ05TLE1BQU0sQ0FBQ0MsY0FBYyxDQUFDakIsUUFBUSxDQUFDdkQsU0FBUyxFQUFFMkQsb0JBQW9CLEVBQUU7Y0FDL0RjLEdBQUdBLENBQUEsRUFBRztnQkFDTCxPQUFPOUMsU0FBUyxDQUFDMkIsVUFBVSxHQUFHSyxvQkFBb0IsQ0FBc0M7Y0FDekYsQ0FBQztjQUNEZSxHQUFHQSxDQUFDQyxDQUFVLEVBQUU7Z0JBQ2YsSUFBSWhELFNBQVMsQ0FBQzJCLFVBQVUsRUFBRTtrQkFDeEIzQixTQUFTLENBQUMyQixVQUFVLENBQUNLLG9CQUFvQixDQUFzQyxHQUFlZ0IsQ0FBQztnQkFDakc7Y0FDRDtZQUNELENBQUMsQ0FBQztVQUNIO1FBQ0Q7UUFDQXRCLGtCQUFrQixHQUFHLElBQUlFLFFBQVEsQ0FBQyxJQUFJLENBQUNwRSxXQUFXLENBQUM7UUFDbkQsTUFBTXlGLE1BQU0sR0FBR3ZCLGtCQUFrQixDQUFDN0MsR0FBRztRQUNyQzZDLGtCQUFrQixDQUFDN0MsR0FBRyxHQUFJcUUsU0FBaUIsSUFBYztVQUN4RDtVQUNBO1VBQ0EsT0FBT0QsTUFBTSxDQUFDZixJQUFJLENBQUNSLGtCQUFrQixDQUFDLENBQUN3QixTQUFTLENBQUMsSUFBSSxJQUFJLENBQUNyRSxHQUFHLENBQUNxRSxTQUFTLENBQUM7UUFDekUsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUNOeEIsa0JBQWtCLEdBQUkxQixTQUFTLENBQUMyQixVQUFVLElBQXFCLElBQUk7TUFDcEU7TUFDQSxPQUFPekIsa0JBQWtCLENBQUN3QyxVQUFVLENBQUMsWUFBWTtRQUNoRCxNQUFNUyxnQkFBZ0IsR0FBRzlELFdBQVcsQ0FBQytELHVCQUF1QixDQUFDcEQsU0FBUyxDQUFDcUQsSUFBSSxFQUFFcEMscUJBQXFCLEVBQUU7VUFDbkdVLFVBQVUsRUFBRUQsa0JBQWtCO1VBQzlCNEIsS0FBSyxFQUFFLEtBQUs7VUFDWjVFLEVBQUUsRUFBRXNCLFNBQVMsQ0FBQ3RCLEVBQUU7VUFDaEI2RSxjQUFjLEVBQUUsSUFBSSxDQUFDOUYsS0FBSztVQUMxQjBELFdBQVcsRUFBRW5CLFNBQVMsQ0FBQ21CLFdBQVcsSUFBSVA7UUFDdkMsQ0FBQyxDQUFxQjtRQUN0QixJQUFJO1VBQ0gsTUFBTTRDLFNBQWtCLEdBQUcsTUFBTUwsZ0JBQWdCO1VBQ2pELElBQUluRCxTQUFTLENBQUN5RCxxQkFBcUIsS0FBSzdFLFNBQVMsRUFBRTtZQUNsRDRFLFNBQVMsQ0FBQ0UsaUJBQWlCLENBQUMxRCxTQUFTLENBQUN5RCxxQkFBcUIsQ0FBQztVQUM3RDtVQUNBLElBQUksQ0FBQ2hFLFlBQVksQ0FBQytELFNBQVMsQ0FBQztVQUM1QixPQUFPQSxTQUFTO1FBQ2pCLENBQUMsQ0FBQyxPQUFPRyxNQUFNLEVBQUU7VUFDaEJDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDRixNQUFnQixDQUFDO1FBQzVCO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXZGLE1BQUEsQ0FNTTBGLGNBQWMsR0FBcEIsZUFBTUEsY0FBY0EsQ0FBQSxFQUFxRDtNQUN4RSxNQUFNQyxJQUFJLEdBQUcsSUFBSSxDQUFDdkcsV0FBVyxDQUFDRSxPQUFPLENBQUMsQ0FBQztNQUN2QyxNQUFNK0QsWUFBWSxHQUFHLElBQUksQ0FBQ2pFLFdBQVcsQ0FBQzhCLGVBQWUsQ0FBQyxDQUFDO01BQ3ZELE1BQU0wRSxZQUFZLEdBQUcsTUFBTXZDLFlBQVksQ0FBQ3dDLGtCQUFrQixDQUFDLENBQUMsQ0FBQ0MsY0FBYyxDQUFDO1FBQzNFQyxNQUFNLEVBQUVKLElBQUksQ0FBQzlFLEtBQUssQ0FBQztNQUNwQixDQUFDLENBQUM7TUFDRixPQUFPK0UsWUFBWSxFQUFFSSxZQUFZO0lBQ2xDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQWhHLE1BQUEsQ0FPQWlHLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNDLEVBQVksRUFBVztNQUN4QyxNQUFNQyxpQkFBaUIsR0FBR3BFLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUMsSUFBSSxDQUFDM0MsS0FBSyxDQUFzQztNQUN6RyxPQUFPOEcsaUJBQWlCLENBQUM3QixVQUFVLENBQUM0QixFQUFnQixDQUFDO0lBQ3REOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFsRyxNQUFBLENBTUFvRyxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQ0MsWUFBb0IsRUFBRUMsUUFBeUIsRUFBUTtNQUNwRSxJQUFJLENBQUNqSCxLQUFLLENBQUNnQyxZQUFZLENBQ3RCLElBQUlrRixXQUFXLENBQUM7UUFDZkMsZUFBZSxFQUFFQyxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDTCxZQUFZLENBQUMsQ0FBQztRQUM3RE0sWUFBWSxFQUFHQyxDQUFDLElBQVc7VUFDMUJOLFFBQVEsQ0FBQ00sQ0FBQyxDQUFDQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUVELENBQUMsQ0FBQ0MsWUFBWSxDQUFDLFVBQVUsQ0FBQyxFQUFFRCxDQUFDLENBQUNDLFlBQVksQ0FBQyxXQUFXLENBQUMsRUFBRUQsQ0FBQyxDQUFDQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDdEg7TUFDRCxDQUFDLENBQ0YsQ0FBQztJQUNGLENBQUM7SUFBQSxPQUFBaEosWUFBQTtFQUFBLEVBcFZ5QmlKLFVBQVUsR0FBQWhJLFdBQUEsR0FBQWlJLHlCQUFBLENBQUF4SSxPQUFBLENBQUEwQixTQUFBLGVBQUFqQyxLQUFBO0lBQUFnSixZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXBJLFlBQUEsR0FBQWdJLHlCQUFBLENBQUF4SSxPQUFBLENBQUEwQixTQUFBLGNBQUE5QixLQUFBO0lBQUE2SSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQW5JLFlBQUEsR0FBQStILHlCQUFBLENBQUF4SSxPQUFBLENBQUEwQixTQUFBLDRCQUFBN0IsS0FBQTtJQUFBNEksWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFsSSxZQUFBLEdBQUE4SCx5QkFBQSxDQUFBeEksT0FBQSxDQUFBMEIsU0FBQSx5QkFBQTVCLEtBQUE7SUFBQTJJLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBNUksT0FBQSxNQUFBRCxNQUFBO0VBQUEsT0F1VnRCVCxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
|
|
@@ -12,12 +12,7 @@ import type InternalRouting from "sap/fe/core/controllerextensions/InternalRouti
|
|
|
12
12
|
import type Routing from "sap/fe/core/controllerextensions/Routing";
|
|
13
13
|
import type { WatcherCallback } from "sap/fe/core/controls/DataWatcher";
|
|
14
14
|
import DataWatcher from "sap/fe/core/controls/DataWatcher";
|
|
15
|
-
import
|
|
16
|
-
import CriticalityFormatter from "sap/fe/core/formatters/CriticalityFormatter";
|
|
17
|
-
import FPMFormatter from "sap/fe/core/formatters/FPMFormatter";
|
|
18
|
-
import KPIFormatter from "sap/fe/core/formatters/KPIFormatter";
|
|
19
|
-
import StandardFormatter from "sap/fe/core/formatters/StandardFormatter";
|
|
20
|
-
import ValueFormatter from "sap/fe/core/formatters/ValueFormatter";
|
|
15
|
+
import Scope from "sap/fe/core/formatters/Scope";
|
|
21
16
|
import type MacroAPI from "sap/fe/macros/MacroAPI";
|
|
22
17
|
import type FormAPI from "sap/fe/macros/form/FormAPI";
|
|
23
18
|
import BaseObject from "sap/ui/base/Object";
|
|
@@ -87,14 +82,7 @@ class ExtensionAPI extends BaseObject {
|
|
|
87
82
|
|
|
88
83
|
private extension: Record<string, unknown>;
|
|
89
84
|
|
|
90
|
-
protected _formatters =
|
|
91
|
-
ValueFormatter: ValueFormatter,
|
|
92
|
-
StandardFormatter: StandardFormatter,
|
|
93
|
-
CriticalityFormatter: CriticalityFormatter,
|
|
94
|
-
FPMFormatter: FPMFormatter,
|
|
95
|
-
KPIFormatter: KPIFormatter,
|
|
96
|
-
CollaborationFormatter: CollaborationFormatter
|
|
97
|
-
};
|
|
85
|
+
protected _formatters = Scope._formatters;
|
|
98
86
|
|
|
99
87
|
constructor(oController: PageController, sId?: string) {
|
|
100
88
|
super();
|