@sapui5/sap.fe.core 1.121.2 → 1.123.0
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 +1 -1
- package/src/sap/fe/core/ActionRuntime.js +2 -2
- package/src/sap/fe/core/ActionRuntime.ts +1 -2
- package/src/sap/fe/core/CommonUtils.js +14 -171
- package/src/sap/fe/core/CommonUtils.ts +15 -221
- package/src/sap/fe/core/PageController.js +13 -1
- package/src/sap/fe/core/PageController.ts +16 -0
- package/src/sap/fe/core/TemplateComponent.js +6 -1
- package/src/sap/fe/core/TemplateComponent.ts +8 -0
- package/src/sap/fe/core/UIProvider.js +23 -0
- package/src/sap/fe/core/UIProvider.ts +38 -0
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +97 -43
- package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.ts +120 -50
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +6 -3
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +12 -18
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +2 -2
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -3
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.js +1 -1
- package/src/sap/fe/core/buildingBlocks/templating/RuntimeBuildingBlockFragment.ts +1 -0
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +42 -1
- package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +40 -0
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +5 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +5 -3
- package/src/sap/fe/core/controllerextensions/EditFlow.js +151 -60
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +165 -68
- package/src/sap/fe/core/controllerextensions/HookSupport.js +32 -14
- package/src/sap/fe/core/controllerextensions/HookSupport.ts +35 -14
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +5 -17
- package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.ts +0 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +6 -6
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +15 -10
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +108 -287
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +117 -309
- package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -2
- package/src/sap/fe/core/controllerextensions/KPIManagement.ts +6 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +2 -2
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +1 -1
- package/src/sap/fe/core/controllerextensions/PageReady.js +6 -6
- package/src/sap/fe/core/controllerextensions/PageReady.ts +5 -4
- package/src/sap/fe/core/controllerextensions/Paginator.js +17 -110
- package/src/sap/fe/core/controllerextensions/Paginator.ts +13 -130
- package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -3
- package/src/sap/fe/core/controllerextensions/Placeholder.ts +1 -2
- package/src/sap/fe/core/controllerextensions/Recommendations.js +36 -31
- package/src/sap/fe/core/controllerextensions/Recommendations.ts +32 -37
- package/src/sap/fe/core/controllerextensions/Share.js +7 -7
- package/src/sap/fe/core/controllerextensions/Share.ts +6 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.js +52 -6
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +56 -4
- package/src/sap/fe/core/controllerextensions/ViewState.js +32 -46
- package/src/sap/fe/core/controllerextensions/ViewState.ts +24 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.js +42 -31
- package/src/sap/fe/core/controllerextensions/dialog/OperationsDialog.block.tsx +6 -0
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +168 -276
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +182 -310
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +3 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +4 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +3 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +74 -52
- package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +95 -55
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +3 -17
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +10 -23
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.js +3 -3
- package/src/sap/fe/core/controllerextensions/recommendations/Telemetry.ts +2 -2
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.js +225 -0
- package/src/sap/fe/core/controllerextensions/routing/ContextPathHelper.ts +241 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.js +69 -48
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.block.tsx +56 -33
- package/src/sap/fe/core/controls/FormElementWrapper.js +8 -11
- package/src/sap/fe/core/controls/FormElementWrapper.ts +9 -0
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +6 -14
- package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +12 -23
- package/src/sap/fe/core/converters/ConverterContext.js +17 -9
- package/src/sap/fe/core/converters/ConverterContext.ts +55 -41
- package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +19 -5
- package/src/sap/fe/core/converters/ManifestWrapper.js +14 -4
- package/src/sap/fe/core/converters/ManifestWrapper.ts +21 -10
- package/src/sap/fe/core/converters/MetaModelConverter.js +402 -383
- package/src/sap/fe/core/converters/MetaModelConverter.ts +538 -338
- package/src/sap/fe/core/converters/TemplateConverter.js +4 -2
- package/src/sap/fe/core/converters/TemplateConverter.ts +18 -13
- package/src/sap/fe/core/converters/annotations/DataField.js +30 -28
- package/src/sap/fe/core/converters/annotations/DataField.ts +58 -35
- package/src/sap/fe/core/converters/common/AnnotationConverter.js +24 -23
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -4
- package/src/sap/fe/core/converters/controls/Common/Action.ts +34 -28
- package/src/sap/fe/core/converters/controls/Common/Chart.js +37 -33
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +64 -46
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +15 -4
- package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +31 -15
- package/src/sap/fe/core/converters/controls/Common/Form.js +6 -4
- package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -11
- package/src/sap/fe/core/converters/controls/Common/KPI.js +5 -3
- package/src/sap/fe/core/converters/controls/Common/KPI.ts +17 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +197 -101
- package/src/sap/fe/core/converters/controls/Common/Table.ts +393 -182
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +4 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +38 -27
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +41 -11
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +112 -45
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +7 -7
- package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +18 -12
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/Avatar.ts +5 -4
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.js +1 -1
- package/src/sap/fe/core/converters/controls/ObjectPage/HeaderFacet.ts +19 -9
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +64 -63
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +109 -100
- package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -11
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +35 -30
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.js +4 -1
- package/src/sap/fe/core/converters/helpers/ConfigurableObject.ts +12 -9
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +1 -1
- package/src/sap/fe/core/converters/helpers/ID.js +1 -1
- package/src/sap/fe/core/converters/helpers/ID.ts +6 -6
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.js +3 -3
- package/src/sap/fe/core/converters/helpers/InsightsHelpers.ts +11 -6
- package/src/sap/fe/core/converters/helpers/Key.js +2 -2
- package/src/sap/fe/core/converters/helpers/Key.ts +4 -4
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.js +1 -1
- package/src/sap/fe/core/converters/helpers/SelectionVariantHelper.ts +2 -2
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.js +21 -19
- package/src/sap/fe/core/converters/objectPage/FormMenuActions.ts +43 -31
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +1 -1
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +16 -12
- package/src/sap/fe/core/converters/templates/ListReportConverter.js +8 -3
- package/src/sap/fe/core/converters/templates/ListReportConverter.ts +41 -21
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +5 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +24 -19
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +2 -1
- package/src/sap/fe/core/filter/DraftEditState.fragment.xml +1 -1
- package/src/sap/fe/core/formatters/CollaborationFormatter.js +4 -6
- package/src/sap/fe/core/formatters/CollaborationFormatter.ts +5 -4
- package/src/sap/fe/core/formatters/FPMFormatter.js +5 -13
- package/src/sap/fe/core/formatters/FPMFormatter.ts +11 -10
- package/src/sap/fe/core/formatters/FiscalFormat.js +1 -1
- package/src/sap/fe/core/formatters/FiscalFormat.ts +1 -1
- package/src/sap/fe/core/formatters/KPIFormatter.js +4 -7
- package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/StandardFormatter.js +4 -7
- package/src/sap/fe/core/formatters/StandardFormatter.ts +3 -3
- package/src/sap/fe/core/formatters/ValueFormatter.js +35 -6
- package/src/sap/fe/core/formatters/ValueFormatter.ts +31 -3
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/AppStartupHelper.js +54 -33
- package/src/sap/fe/core/helpers/AppStartupHelper.ts +62 -41
- package/src/sap/fe/core/helpers/BindingToolkit.js +17 -3
- package/src/sap/fe/core/helpers/BindingToolkit.ts +28 -6
- package/src/sap/fe/core/helpers/ClassSupport.js +32 -13
- package/src/sap/fe/core/helpers/ClassSupport.ts +35 -15
- package/src/sap/fe/core/helpers/DeleteHelper.js +71 -61
- package/src/sap/fe/core/helpers/DeleteHelper.ts +125 -103
- package/src/sap/fe/core/helpers/DraftEditState.js +5 -3
- package/src/sap/fe/core/helpers/DraftEditState.ts +3 -1
- package/src/sap/fe/core/helpers/FPMHelper.js +43 -46
- package/src/sap/fe/core/helpers/FPMHelper.ts +50 -56
- package/src/sap/fe/core/helpers/MetaModelFunction.js +77 -53
- package/src/sap/fe/core/helpers/MetaModelFunction.ts +78 -57
- package/src/sap/fe/core/helpers/ModelHelper.js +10 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +12 -6
- package/src/sap/fe/core/helpers/PasteHelper.js +194 -7
- package/src/sap/fe/core/helpers/PasteHelper.ts +265 -13
- package/src/sap/fe/core/helpers/PromiseKeeper.js +66 -0
- package/src/sap/fe/core/helpers/PromiseKeeper.ts +56 -0
- package/src/sap/fe/core/helpers/SemanticKeyHelper.js +30 -19
- package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +34 -22
- package/src/sap/fe/core/helpers/StableIdHelper.js +1 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +7 -2
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.js +26 -52
- package/src/sap/fe/core/helpers/StandardRecommendationHelper.ts +37 -63
- package/src/sap/fe/core/helpers/TitleHelper.js +1 -1
- package/src/sap/fe/core/helpers/TitleHelper.ts +17 -14
- package/src/sap/fe/core/helpers/TypeGuards.js +27 -3
- package/src/sap/fe/core/helpers/TypeGuards.ts +37 -7
- package/src/sap/fe/core/jsx-runtime/jsx-xml.js +48 -8
- package/src/sap/fe/core/jsx-runtime/jsx-xml.ts +40 -9
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +5 -2
- package/src/sap/fe/core/messagebundle_da.properties +1 -1
- package/src/sap/fe/core/messagebundle_en.properties +267 -2
- package/src/sap/fe/core/messagebundle_sl.properties +1 -1
- package/src/sap/fe/core/operationsHelper.js +2 -1
- package/src/sap/fe/core/operationsHelper.ts +1 -0
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +3 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -2
- package/src/sap/fe/core/services/RoutingServiceFactory.js +27 -14
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +27 -14
- package/src/sap/fe/core/services/ShellServicesFactory.js +49 -12
- package/src/sap/fe/core/services/ShellServicesFactory.ts +62 -13
- package/src/sap/fe/core/services/SideEffectsServiceFactory.js +156 -82
- package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +218 -100
- package/src/sap/fe/core/services/TelemetryServiceFactory.js +3 -3
- package/src/sap/fe/core/services/TelemetryServiceFactory.ts +6 -6
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.js +3 -2
- package/src/sap/fe/core/services/ValueHelpHistoryServiceFactory.ts +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +1 -1
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
- package/src/sap/fe/core/services/view/TemplatingErrorPage.view.xml +1 -1
- package/src/sap/fe/core/templating/CommonFormatters.js +6 -3
- package/src/sap/fe/core/templating/CommonFormatters.ts +13 -12
- package/src/sap/fe/core/templating/CriticalityFormatters.js +2 -2
- package/src/sap/fe/core/templating/CriticalityFormatters.ts +37 -14
- package/src/sap/fe/core/templating/DataFieldFormatters.js +12 -11
- package/src/sap/fe/core/templating/DataFieldFormatters.ts +35 -24
- package/src/sap/fe/core/templating/DataModelPathHelper.js +22 -18
- package/src/sap/fe/core/templating/DataModelPathHelper.ts +61 -51
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +8 -3
- package/src/sap/fe/core/templating/EntityTypeHelper.js +1 -1
- package/src/sap/fe/core/templating/EntityTypeHelper.ts +1 -1
- package/src/sap/fe/core/templating/FieldControlHelper.js +3 -3
- package/src/sap/fe/core/templating/FieldControlHelper.ts +27 -8
- package/src/sap/fe/core/templating/FilterHelper.js +13 -10
- package/src/sap/fe/core/templating/FilterHelper.ts +80 -46
- package/src/sap/fe/core/templating/FilterTemplating.js +1 -1
- package/src/sap/fe/core/templating/FilterTemplating.ts +2 -2
- package/src/sap/fe/core/templating/PropertyFormatters.js +6 -8
- package/src/sap/fe/core/templating/PropertyFormatters.ts +11 -11
- package/src/sap/fe/core/templating/PropertyHelper.js +3 -3
- package/src/sap/fe/core/templating/PropertyHelper.ts +4 -4
- package/src/sap/fe/core/templating/SemanticObjectHelper.js +157 -13
- package/src/sap/fe/core/templating/SemanticObjectHelper.ts +182 -16
- package/src/sap/fe/core/templating/UIFormatters.js +23 -22
- package/src/sap/fe/core/templating/UIFormatters.ts +94 -66
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +1 -1
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +2 -2
- package/src/sap/fe/core/type/EDM.js +1 -1
- package/src/sap/fe/core/type/EDM.ts +2 -2
- package/src/sap/fe/core/type/Email.js +1 -1
- package/src/sap/fe/core/type/Email.ts +1 -1
- package/src/sap/fe/core/type/FiscalDate.js +2 -2
- package/src/sap/fe/core/type/FiscalDate.ts +2 -2
|
@@ -63,19 +63,17 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
|
-
"sap.
|
|
67
|
-
retrieve: function (
|
|
66
|
+
"sap.fe.templates.ListReport.controls.MultipleModeControl": {
|
|
67
|
+
retrieve: function (multipleModeControl) {
|
|
68
68
|
return {
|
|
69
|
-
selectedKey:
|
|
69
|
+
selectedKey: multipleModeControl.content.getSelectedKey()
|
|
70
70
|
};
|
|
71
71
|
},
|
|
72
|
-
apply: function (
|
|
73
|
-
if (
|
|
74
|
-
const
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
if (oSelectedItem) {
|
|
78
|
-
oTabBar.setSelectedKey(oControlState.selectedKey);
|
|
72
|
+
apply: function (multipleModeControl, controlState) {
|
|
73
|
+
if (controlState !== null && controlState !== void 0 && controlState.selectedKey) {
|
|
74
|
+
const tabBar = multipleModeControl.content;
|
|
75
|
+
if (tabBar.getItems().find(item => item.getKey() === controlState.selectedKey)) {
|
|
76
|
+
tabBar.setSelectedKey(controlState.selectedKey);
|
|
79
77
|
}
|
|
80
78
|
}
|
|
81
79
|
}
|
|
@@ -167,11 +165,12 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
167
165
|
const oTableBinding = oTable.getRowBinding();
|
|
168
166
|
if (oTableBinding) {
|
|
169
167
|
const oRootBinding = oTableBinding.getRootBinding();
|
|
170
|
-
|
|
171
|
-
|
|
168
|
+
const aggregation = oTableBinding.getAggregation();
|
|
169
|
+
if (oRootBinding === oTableBinding && (aggregation === null || aggregation === void 0 ? void 0 : aggregation.hierarchyQualifier) === undefined) {
|
|
170
|
+
// absolute binding (except TreeTable, where we want to keep expansion states)
|
|
172
171
|
oTableBinding.refresh();
|
|
173
172
|
} else {
|
|
174
|
-
// relative binding
|
|
173
|
+
// relative binding or TreeTable
|
|
175
174
|
const oHeaderContext = oTableBinding.getHeaderContext();
|
|
176
175
|
const sGroupId = oTableBinding.getGroupId();
|
|
177
176
|
if (oHeaderContext) {
|
|
@@ -186,42 +185,29 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
186
185
|
}
|
|
187
186
|
},
|
|
188
187
|
"sap.ui.mdc.Chart": {
|
|
189
|
-
|
|
190
|
-
|
|
188
|
+
//The StateUtil is designed to apply state in additive manner so we are bringiing back diffState usage for chart - DINC0040651
|
|
189
|
+
retrieve: async function (chart) {
|
|
190
|
+
const controlStateKey = this.getStateKey(chart);
|
|
191
|
+
const chartState = await StateUtil.retrieveExternalState(chart);
|
|
192
|
+
return this._getControlState(controlStateKey, chartState);
|
|
191
193
|
},
|
|
192
|
-
apply: async function (
|
|
193
|
-
|
|
194
|
-
|
|
194
|
+
apply: async function (chart, controlState) {
|
|
195
|
+
try {
|
|
196
|
+
if (controlState) {
|
|
197
|
+
//Extra condition added to apply the diff state logic for mdc control
|
|
198
|
+
const isInitialStateApplicable = (controlState === null || controlState === void 0 ? void 0 : controlState.initialState) && !this.invalidateInitialStateForApply.includes(chart.getId()) && !this.controlsVariantIdUnavailable.includes(chart.getId());
|
|
199
|
+
if (isInitialStateApplicable) {
|
|
200
|
+
const diffState = await StateUtil.diffState(chart, controlState.initialState, controlState.fullState);
|
|
201
|
+
return await StateUtil.applyExternalState(chart, diffState);
|
|
202
|
+
} else {
|
|
203
|
+
return await StateUtil.applyExternalState(chart, (controlState === null || controlState === void 0 ? void 0 : controlState.fullState) ?? controlState);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
} catch (error) {
|
|
207
|
+
Log.error(error);
|
|
195
208
|
}
|
|
196
209
|
}
|
|
197
|
-
// TODO: uncomment after mdc fix is merged
|
|
198
|
-
/* retrieve: async function (chart: Chart) {
|
|
199
|
-
const controlStateKey = this.getStateKey(chart);
|
|
200
|
-
const chartState = await StateUtil.retrieveExternalState(chart);
|
|
201
|
-
return this._getControlState(controlStateKey, chartState);
|
|
202
|
-
},
|
|
203
|
-
apply: async function (chart: Chart, controlState: ControlState) {
|
|
204
|
-
try {
|
|
205
|
-
if (controlState) {
|
|
206
|
-
// Extra condition added to apply the diff state logic for mdc control
|
|
207
|
-
const isInitialStateApplicable = controlState?.initialState && this.invalidateInitialStateForApply.indexOf(chart.getId()) === -1 && this.controlsVariantIdUnavailable.indexOf(chart.getId()) === -1;
|
|
208
|
-
if (isInitialStateApplicable) {
|
|
209
|
-
const diffState = await StateUtil.diffState(
|
|
210
|
-
chart,
|
|
211
|
-
controlState.initialState as object,
|
|
212
|
-
controlState.fullState as object
|
|
213
|
-
);
|
|
214
|
-
return await StateUtil.applyExternalState(chart, diffState);
|
|
215
|
-
} else {
|
|
216
|
-
return await StateUtil.applyExternalState(chart, controlState?.fullState ?? controlState);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
} catch (error) {
|
|
220
|
-
Log.error(error as string);
|
|
221
|
-
}
|
|
222
|
-
} */
|
|
223
210
|
},
|
|
224
|
-
|
|
225
211
|
"sap.uxap.ObjectPageLayout": {
|
|
226
212
|
retrieve: function (oOPLayout) {
|
|
227
213
|
return {
|
|
@@ -935,4 +921,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/core/CommonUtils",
|
|
|
935
921
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "refreshViewBindings", [_dec2, _dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshViewBindings"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshControls", [_dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "refreshControlBinding", [_dec6, _dec7], Object.getOwnPropertyDescriptor(_class2.prototype, "refreshControlBinding"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlRefreshBindingHandler", [_dec8, _dec9], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlRefreshBindingHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptBindingRefreshHandler", [_dec10, _dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptBindingRefreshHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onSuspend", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "onSuspend"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onRestore", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "onRestore"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "collectResults", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "collectResults"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptControlStateHandler", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getControlStateHandler", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "getControlStateHandler"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "adaptStateControls", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "adaptStateControls"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getStateKey", [_dec24, _dec25], Object.getOwnPropertyDescriptor(_class2.prototype, "getStateKey"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveViewState", [_dec26, _dec27], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveAdditionalStates", [_dec28, _dec29], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "retrieveControlState", [_dec30, _dec31], Object.getOwnPropertyDescriptor(_class2.prototype, "retrieveControlState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyInitialStateOnly", [_dec32, _dec33], Object.getOwnPropertyDescriptor(_class2.prototype, "applyInitialStateOnly"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyViewState", [_dec34, _dec35], Object.getOwnPropertyDescriptor(_class2.prototype, "applyViewState"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable", [_dec36], Object.getOwnPropertyDescriptor(_class2.prototype, "_checkIfVariantIdIsAvailable"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onBeforeStateApplied", [_dec37, _dec38], Object.getOwnPropertyDescriptor(_class2.prototype, "onBeforeStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onAfterStateApplied", [_dec39, _dec40], Object.getOwnPropertyDescriptor(_class2.prototype, "onAfterStateApplied"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyAdditionalStates", [_dec41, _dec42], Object.getOwnPropertyDescriptor(_class2.prototype, "applyAdditionalStates"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar", [_dec43], Object.getOwnPropertyDescriptor(_class2.prototype, "_applyNavigationParametersToFilterbar"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyNavigationParameters", [_dec44, _dec45], Object.getOwnPropertyDescriptor(_class2.prototype, "applyNavigationParameters"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "applyControlState", [_dec46, _dec47], Object.getOwnPropertyDescriptor(_class2.prototype, "applyControlState"), _class2.prototype)), _class2)) || _class);
|
|
936
922
|
return ViewState;
|
|
937
923
|
}, false);
|
|
938
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsImNvbnRyb2xTdGF0ZSIsInVuZGVmaW5lZCIsImlzVmFyaWFudElkQXZhaWxhYmxlIiwiX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZSIsInNWYXJpYW50UmVmZXJlbmNlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZSIsInB1c2giLCJnZXRGb3IiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSIsImVycm9yIiwiTG9nIiwiaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5Iiwib1RhYkJhciIsInNlbGVjdGVkS2V5IiwiZ2V0U2VsZWN0ZWRLZXkiLCJvQ29udHJvbFN0YXRlIiwib1NlbGVjdGVkSXRlbSIsImdldEl0ZW1zIiwiZmluZCIsIm9JdGVtIiwiZ2V0S2V5Iiwic2V0U2VsZWN0ZWRLZXkiLCJmaWx0ZXJCYXIiLCJjb250cm9sU3RhdGVLZXkiLCJnZXRTdGF0ZUtleSIsImZpbHRlckJhclN0YXRlIiwiU3RhdGVVdGlsIiwicmV0cmlldmVFeHRlcm5hbFN0YXRlIiwicHJvcGVydGllc0luZm8iLCJnZXRQcm9wZXJ0eUluZm9TZXQiLCJmaWx0ZXIiLCJwcm9wZXJ0eUluZm8iLCJPYmplY3QiLCJrZXlzIiwibGVuZ3RoIiwicGF0aCIsInJlbW92ZUZyb21BcHBTdGF0ZSIsImZvckVhY2giLCJQcm9wZXJ0eUluZm8iLCJfZ2V0Q29udHJvbFN0YXRlIiwibmF2UGFyYW1ldGVyIiwic2tpcE1lcmdlIiwiaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlIiwiX2lzSW5pdGlhbFN0YXRlc0FwcGxpY2FibGUiLCJpbml0aWFsU3RhdGUiLCJuYXZpZ2F0aW9uVHlwZSIsImh5YnJpZCIsImZ1bGxTdGF0ZSIsImZpbHRlckJhckFQSSIsImdldFBhcmVudCIsInhBcHBTdGF0ZUZpbHRlcnMiLCJjb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzIiwic2VsZWN0aW9uVmFyaWFudCIsIm1lcmdlZEZ1bGxTdGF0ZSIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiY2xlYXJFZGl0RmlsdGVyIiwiYXBwbHlFeHRlcm5hbFN0YXRlIiwiZGlmZlN0YXRlIiwidGFibGUiLCJ0YWJsZVN0YXRlIiwibmF2UGFyYW1ldGVycyIsInN1cHBsZW1lbnRhcnlDb25maWciLCJvRGlmZlN0YXRlIiwicmVmcmVzaEJpbmRpbmciLCJvVGFibGUiLCJvVGFibGVCaW5kaW5nIiwiZ2V0Um93QmluZGluZyIsIm9Sb290QmluZGluZyIsImdldFJvb3RCaW5kaW5nIiwicmVmcmVzaCIsIm9IZWFkZXJDb250ZXh0IiwiZ2V0SGVhZGVyQ29udGV4dCIsInNHcm91cElkIiwiZ2V0R3JvdXBJZCIsInJlcXVlc3RTaWRlRWZmZWN0cyIsIiROYXZpZ2F0aW9uUHJvcGVydHlQYXRoIiwiaW5mbyIsImdldElkIiwib0NoYXJ0Iiwib09QTGF5b3V0Iiwic2VsZWN0ZWRTZWN0aW9uIiwiZ2V0U2VsZWN0ZWRTZWN0aW9uIiwic2V0U2VsZWN0ZWRTZWN0aW9uIiwib0JpbmRpbmdDb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJvQmluZGluZyIsImdldEJpbmRpbmciLCJzTWV0YVBhdGgiLCJNb2RlbEhlbHBlciIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsInNTdHJhdGVneSIsIktlZXBBbGl2ZUhlbHBlciIsImdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aCIsIm9Nb2RlbCIsImdldE1vZGVsIiwib01ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsIm9OYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbW1vblV0aWxzIiwiZ2V0Q29udGV4dFBhdGhQcm9wZXJ0aWVzIiwiJGtpbmQiLCJhTmF2UHJvcGVydGllc1RvUmVxdWVzdCIsInJlZHVjZSIsImFQcmV2Iiwic05hdlByb3AiLCIkaXNDb2xsZWN0aW9uIiwiYVByb3BlcnRpZXMiLCIkUHJvcGVydHlQYXRoIiwiY29uY2F0Iiwib1NlZ21lbnRlZEJ1dHRvbiIsImlzQSIsImZpcmVFdmVudCIsIm9TZWxlY3QiLCJvRHluYW1pY1BhZ2UiLCJoZWFkZXJFeHBhbmRlZCIsImdldEhlYWRlckV4cGFuZGVkIiwic2V0SGVhZGVyRXhwYW5kZWQiLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsInZpZXdTdGF0ZSIsInJldHJpZXZlVmlld1N0YXRlIiwib05hdlBhcmFtZXRlcnMiLCJhcHBseVZpZXdTdGF0ZSIsInJlZnJlc2hWaWV3QmluZGluZ3MiLCJvQ29tcG9uZW50Q29udGFpbmVyIiwib0NvbXBvbmVudCIsImdldENvbXBvbmVudEluc3RhbmNlIiwicmV0cmlldmVDb250cm9sU3RhdGUiLCJnZXRSb290Q29udHJvbCIsImFwcGx5Q29udHJvbFN0YXRlIiwiY29udHJvbCIsIl9nZXRNdWx0aURpbU1vZGVsIiwic2VyaWFsaXplIiwiZGVzZXJpYWxpemUiLCJWaWV3U3RhdGUiLCJkZWZpbmVVSTVDbGFzcyIsInB1YmxpY0V4dGVuc2lvbiIsImZpbmFsRXh0ZW5zaW9uIiwiZXh0ZW5zaWJsZSIsIk92ZXJyaWRlRXhlY3V0aW9uIiwiQWZ0ZXIiLCJwcml2YXRlRXh0ZW5zaW9uIiwiSW5zdGVhZCIsImluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyIiwidmlld1N0YXRlQ29udHJvbHMiLCJ2YXJpYW50TWFuYWdlbWVudCIsImFkYXB0Q29udHJvbHMiLCJleHRlcm5hbFN0YXRlUHJvbWlzZXMiLCJpbml0aWFsQ29udHJvbFN0YXRlcyIsInZhcmlhbnRDb250cm9scyIsImluY2x1ZGVzIiwiX2FkZEV2ZW50TGlzdGVuZXJzVG9WYXJpYW50TWFuYWdlbWVudCIsImV4dGVybmFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImluaXRpYWxDb250cm9sU3RhdGUiLCJpIiwiZSIsIl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZCIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiYUNvbnRyb2xzIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwidGhlbiIsInJlZnJlc2hDb250cm9sQmluZGluZyIsImJpbmQiLCJhQ29sbGVjdGVkQ29udHJvbHMiLCJvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwic1R5cGUiLCJhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlciIsIl9vQ29udHJvbCIsIl9vQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJhcmdzIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsImFzc2lnbiIsImFkYXB0U3RhdGVDb250cm9scyIsIl9hQ29sbGVjdGVkQ29udHJvbHMiLCJnZXRWaWV3IiwiZ2V0TG9jYWxJZCIsIm9WaWV3U3RhdGUiLCJhUmVzb2x2ZWRTdGF0ZXMiLCJtYXAiLCJ2UmVzdWx0Iiwia2V5IiwidmFsdWUiLCJvU3RhdGVzIiwibVN0YXRlIiwib0N1cnJlbnRTdGF0ZSIsIm1lcmdlT2JqZWN0cyIsIm1BZGRpdGlvbmFsU3RhdGVzIiwiX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFDb250cm9sU3RhdGVIYW5kbGVycyIsIm1Db250cm9sU3RhdGVIYW5kbGVyIiwiRXJyb3IiLCJjYWxsIiwiYVN0YXRlcyIsIm9GaW5hbFN0YXRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5Iiwib05hdlBhcmFtZXRlciIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfX2lzUm9vdFZpZXdDb250cm9sbGVyIiwib25CZWZvcmVTdGF0ZUFwcGxpZWQiLCJoYXNWYXJpYW50TWFuYWdlbWVudCIsInNvcnRlZEFkYXB0U3RhdGVDb250cm9scyIsIm1vZGlmaWVkQ29udHJvbHMiLCJpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInNLZXkiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiX2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhciIsIm9uQWZ0ZXJTdGF0ZUFwcGxpZWQiLCJfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsInNWYXJpYW50SWQiLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJvVmFyaWFudCIsInBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsIm5hdlR5cGUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJhUHJvbWlzZXMiLCJfb05hdlBhcmFtZXRlciIsIl9hUHJvbWlzZXMiLCJnZXRJbnRlcmZhY2UiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0IiwiY29udHJvbEtleSIsInZtQXNzb2NpYXRlZGNvbnRyb2xLZXkiLCJpc05hdkh5YnJpZCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgTmF2TGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkJhciBmcm9tIFwic2FwL20vSWNvblRhYkJhclwiO1xuaW1wb3J0IHR5cGUgSWNvblRhYkZpbHRlciBmcm9tIFwic2FwL20vSWNvblRhYkZpbHRlclwiO1xuaW1wb3J0IHR5cGUgU2VnbWVudGVkQnV0dG9uIGZyb20gXCJzYXAvbS9TZWdtZW50ZWRCdXR0b25cIjtcbmltcG9ydCB0eXBlIFNlbGVjdCBmcm9tIFwic2FwL20vU2VsZWN0XCI7XG5pbXBvcnQgdHlwZSBNdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlciBmcm9tIFwic2FwL3NhYy9kZi9jaGFuZ2VIYW5kbGVyL011bHRpRGltTW9kZWxDaGFuZ2VIYW5kbGVyXCI7XG5pbXBvcnQgdHlwZSBNYW5hZ2VkT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBCYXNlT2JqZWN0IGZyb20gXCJzYXAvdWkvYmFzZS9PYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBPdmVycmlkZUV4ZWN1dGlvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL092ZXJyaWRlRXhlY3V0aW9uXCI7XG5pbXBvcnQgQ29udHJvbFZhcmlhbnRBcHBseUFQSSBmcm9tIFwic2FwL3VpL2ZsL2FwcGx5L2FwaS9Db250cm9sVmFyaWFudEFwcGx5QVBJXCI7XG5pbXBvcnQgdHlwZSBWYXJpYW50TWFuYWdlbWVudCBmcm9tIFwic2FwL3VpL2ZsL3ZhcmlhbnRzL1ZhcmlhbnRNYW5hZ2VtZW50XCI7XG5pbXBvcnQgdHlwZSBDaGFydCBmcm9tIFwic2FwL3VpL21kYy9DaGFydFwiO1xuaW1wb3J0IHR5cGUgTURDQ29udHJvbCBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgdHlwZSBNRENUYWJsZSBmcm9tIFwic2FwL3VpL21kYy9UYWJsZVwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyQmFzZSBmcm9tIFwic2FwL3VpL21kYy9maWx0ZXJiYXIvRmlsdGVyQmFyQmFzZVwiO1xuaW1wb3J0IFN0YXRlVXRpbCBmcm9tIFwic2FwL3VpL21kYy9wMTNuL1N0YXRlVXRpbFwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUluZm8gfSBmcm9tIFwic2FwL3VpL21kYy91dGlsL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9iamVjdFBhZ2VMYXlvdXQgZnJvbSBcInNhcC91eGFwL09iamVjdFBhZ2VMYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgTWV0YU1vZGVsTmF2UHJvcGVydHkgfSBmcm9tIFwidHlwZXMvbWV0YW1vZGVsX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBGY2xDb250cm9sbGVyIGZyb20gXCIuLi9yb290Vmlldy9GY2wuY29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvTmF2Q29udGFpbmVyLmNvbnRyb2xsZXJcIjtcblxuLy8gYWRkaXRpb25hbFN0YXRlcyBhcmUgc3RvcmVkIG5leHQgdG8gY29udHJvbCBJRHMsIHNvIG5hbWUgY2xhc2ggYXZvaWRhbmNlIG5lZWRlZC4gRm9ydHVuYXRlbHkgSURzIGhhdmUgcmVzdHJpY3Rpb25zOlxuLy8gXCJBbGxvd2VkIGlzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyAoY2FwaXRhbC9sb3dlcmNhc2UpLCBkaWdpdHMsIHVuZGVyc2NvcmVzLCBkYXNoZXMsIHBvaW50cyBhbmQvb3IgY29sb25zLlwiXG4vLyBUaGVyZWZvcmUgYWRkaW5nIGEgc3ltYm9sIGxpa2UgIyBvciBAXG5jb25zdCBOYXZUeXBlID0gTmF2TGlicmFyeS5OYXZUeXBlO1xuXG4vKipcbiAqIERlZmluaXRpb24gb2YgYSBjdXN0b20gYWN0aW9uIHRvIGJlIHVzZWQgaW5zaWRlIHRoZSB0YWJsZSB0b29sYmFyXG4gKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgdHlwZSBOYXZpZ2F0aW9uUGFyYW1ldGVyID0ge1xuXHQvKipcblx0ICogIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlLlxuXHQgKlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGZyb20gdGhlIG5hdmlnYXRpb24uXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50O1xuXHQvKipcblx0ICogVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogU2VsZWN0aW9uVmFyaWFudDtcblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqXG5cdCAqICBAcHVibGljXG5cdCAqL1xuXHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW47XG59O1xuXG5jb25zdCBBRERJVElPTkFMX1NUQVRFU19LRVkgPSBcIiNhZGRpdGlvbmFsU3RhdGVzXCI7XG5cbmV4cG9ydCB0eXBlIENvbnRyb2xTdGF0ZSA9XG5cdHwgKHtcblx0XHRcdGluaXRpYWxTdGF0ZT86IHtcblx0XHRcdFx0c3VwcGxlbWVudGFyeUNvbmZpZz86IG9iamVjdDtcblx0XHRcdH07XG5cdFx0XHRmdWxsU3RhdGU/OiB7XG5cdFx0XHRcdGZpbHRlcj86IG9iamVjdDtcblx0XHRcdH07XG5cdCAgfSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVxuXHR8IHVuZGVmaW5lZDtcblxuZXhwb3J0IHR5cGUgRmlsdGVyQmFyU3RhdGUgPSB7XG5cdGZpbHRlcj86IFJlY29yZDxzdHJpbmcsIEFycmF5PG9iamVjdD4+O1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBtZXRob2RzIHRvIHJldHJpZXZlICYgYXBwbHkgc3RhdGVzIGZvciB0aGUgZGlmZmVyZW50IGNvbnRyb2xzIC8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG50eXBlIENvbnRyb2xTdGF0ZUhhbmRsZXI8VCBleHRlbmRzIE1hbmFnZWRPYmplY3QsIEsgZXh0ZW5kcyB1bmtub3duIHwgdW5kZWZpbmVkPiA9IHtcblx0cmV0cmlldmU6IChvQ29udHJvbDogVCkgPT4gSyB8IFByb21pc2U8Sz47XG5cdGFwcGx5OiAob0NvbnRyb2w6IFQsIGNvbnRyb2xTdGF0ZTogSywgbmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuXHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogVCkgPT4gdm9pZDtcbn07XG50eXBlIENvbnRyb2xTdGF0ZU1hcCA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxWYXJpYW50TWFuYWdlbWVudCwgeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfT47XG5cdFwic2FwLm0uSWNvblRhYkJhclwiOiBDb250cm9sU3RhdGVIYW5kbGVyPEljb25UYWJCYXIsIHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9Pjtcblx0XCJzYXAudWkubWRjLkZpbHRlckJhclwiOiBDb250cm9sU3RhdGVIYW5kbGVyPEZpbHRlckJhciwgQ29udHJvbFN0YXRlPjtcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TURDVGFibGUsIENvbnRyb2xTdGF0ZT47XG5cdFwic2FwLnVpLm1kYy5DaGFydFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPENoYXJ0LCBvYmplY3Q+O1xuXHRcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxPYmplY3RQYWdlTGF5b3V0LCB7IHNlbGVjdGVkU2VjdGlvbjogc3RyaW5nIH0+O1xuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlZ21lbnRlZEJ1dHRvbiwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5tLlNlbGVjdFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPFNlbGVjdCwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC5mLkR5bmFtaWNQYWdlXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RHluYW1pY1BhZ2UsIHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfT47XG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8Q29tcG9uZW50Q29udGFpbmVyLCBvYmplY3Q+O1xuXHRcInNhcC51aS5jb3JlLm12Yy5WaWV3XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RkVWaWV3LCBDb250cm9sU3RhdGU+O1xuXHRcInNhcC5zYWMuZGYuY2hhbmdlSGFuZGxlci5NdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlclwiOiBDb250cm9sU3RhdGVIYW5kbGVyPE11bHRpRGltTW9kZWxDaGFuZ2VIYW5kbGVyLCB1bmtub3duPjtcbn07XG5jb25zdCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXA6IENvbnRyb2xTdGF0ZU1hcCA9IHtcblx0XCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZNOiBWYXJpYW50TWFuYWdlbWVudCk6IHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0dmFyaWFudElkOiBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvVk06IFZhcmlhbnRNYW5hZ2VtZW50LCBjb250cm9sU3RhdGU/OiB7IHZhcmlhbnRJZD86IHN0cmluZyB8IG51bGwgfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSB1bmRlZmluZWQgJiYgY29udHJvbFN0YXRlLnZhcmlhbnRJZCAhPT0gb1ZNLmdldEN1cnJlbnRWYXJpYW50S2V5KCkpIHtcblx0XHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRJZEF2YWlsYWJsZSA9IHRoaXMuX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZShvVk0sIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQpO1xuXHRcdFx0XHRcdGxldCBzVmFyaWFudFJlZmVyZW5jZTtcblx0XHRcdFx0XHRpZiAoaXNWYXJpYW50SWRBdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHNWYXJpYW50UmVmZXJlbmNlID0gY29udHJvbFN0YXRlLnZhcmlhbnRJZDtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBvVk0uZ2V0U3RhbmRhcmRWYXJpYW50S2V5KCk7XG5cdFx0XHRcdFx0XHR0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0YXdhaXQgQ29udHJvbFZhcmlhbnRBcHBseUFQSS5hY3RpdmF0ZVZhcmlhbnQoe1xuXHRcdFx0XHRcdFx0XHRlbGVtZW50OiBvVk0sXG5cdFx0XHRcdFx0XHRcdHZhcmlhbnRSZWZlcmVuY2U6IHNWYXJpYW50UmVmZXJlbmNlIGFzIHN0cmluZ1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHRcdFx0dGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkucHVzaCguLi5vVk0uZ2V0Rm9yKCkpO1xuXHRcdFx0XHRcdFx0YXdhaXQgdGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZShvVk0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5JY29uVGFiQmFyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9UYWJCYXI6IEljb25UYWJCYXIpOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1RhYkJhci5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChvVGFiQmFyOiBJY29uVGFiQmFyLCBvQ29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpIHtcblx0XHRcdFx0Y29uc3Qgb1NlbGVjdGVkSXRlbSA9IG9UYWJCYXIuZ2V0SXRlbXMoKS5maW5kKGZ1bmN0aW9uIChvSXRlbSkge1xuXHRcdFx0XHRcdHJldHVybiAob0l0ZW0gYXMgSWNvblRhYkZpbHRlcikuZ2V0S2V5KCkgPT09IG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRpZiAob1NlbGVjdGVkSXRlbSkge1xuXHRcdFx0XHRcdG9UYWJCYXIuc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIjoge1xuXHRcdHJldHJpZXZlOiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBmaWx0ZXJCYXI6IEZpbHRlckJhckJhc2UpOiBQcm9taXNlPENvbnRyb2xTdGF0ZT4ge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShmaWx0ZXJCYXIpO1xuXHRcdFx0Y29uc3QgZmlsdGVyQmFyU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKGZpbHRlckJhcik7XG5cdFx0XHQvLyByZW1vdmUgc2Vuc2l0aXZlIG9yIHZpZXcgc3RhdGUgaXJyZWxldmFudCBmaWVsZHNcblx0XHRcdGNvbnN0IHByb3BlcnRpZXNJbmZvID0gZmlsdGVyQmFyLmdldFByb3BlcnR5SW5mb1NldCgpO1xuXHRcdFx0Y29uc3QgZmlsdGVyID0gZmlsdGVyQmFyU3RhdGUuZmlsdGVyIHx8IHt9O1xuXHRcdFx0cHJvcGVydGllc0luZm9cblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAocHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8gJiB7IHJlbW92ZUZyb21BcHBTdGF0ZT86IGJvb2xlYW4gfSkge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRPYmplY3Qua2V5cyhmaWx0ZXIpLmxlbmd0aCA+IDAgJiZcblx0XHRcdFx0XHRcdHByb3BlcnR5SW5mby5wYXRoICYmXG5cdFx0XHRcdFx0XHRmaWx0ZXJbcHJvcGVydHlJbmZvLnBhdGhdICYmXG5cdFx0XHRcdFx0XHQocHJvcGVydHlJbmZvLnJlbW92ZUZyb21BcHBTdGF0ZSB8fCBmaWx0ZXJbcHJvcGVydHlJbmZvLnBhdGhdLmxlbmd0aCA9PT0gMClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaChmdW5jdGlvbiAoUHJvcGVydHlJbmZvOiBQcm9wZXJ0eUluZm8pIHtcblx0XHRcdFx0XHRpZiAoUHJvcGVydHlJbmZvLnBhdGgpIHtcblx0XHRcdFx0XHRcdGRlbGV0ZSBmaWx0ZXJbUHJvcGVydHlJbmZvLnBhdGhdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZUtleSwgZmlsdGVyQmFyU3RhdGUpO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uIChcblx0XHRcdHRoaXM6IFZpZXdTdGF0ZSxcblx0XHRcdGZpbHRlckJhcjogRmlsdGVyQmFyLFxuXHRcdFx0Y29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUsXG5cdFx0XHRuYXZQYXJhbWV0ZXI/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSAmJiBuYXZQYXJhbWV0ZXIpIHtcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPSB0aGlzLl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlKGNvbnRyb2xTdGF0ZT8uaW5pdGlhbFN0YXRlLCBmaWx0ZXJCYXIsIHNraXBNZXJnZSk7XG5cdFx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblR5cGUgPSBuYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGU7XG5cdFx0XHRcdFx0Ly9XaGVuIG5hdmlnYXRpb24gdHlwZSBpcyBoeWJyaWQsIHdlIG92ZXJyaWRlIHRoZSBmaWx0ZXIgY29uZGl0aW9ucyBpbiBJQXBwU3RhdGUgd2l0aCBTViByZWNlaXZlZCBmcm9tIFhhcHBTdGF0ZVxuXHRcdFx0XHRcdGlmIChuYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQgJiYgY29udHJvbFN0YXRlLmZ1bGxTdGF0ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJLFxuXHRcdFx0XHRcdFx0XHR4QXBwU3RhdGVGaWx0ZXJzID0gYXdhaXQgZmlsdGVyQmFyQVBJLmNvbnZlcnRTZWxlY3Rpb25WYXJpYW50VG9TdGF0ZUZpbHRlcnMoXG5cdFx0XHRcdFx0XHRcdFx0bmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgYXMgU2VsZWN0aW9uVmFyaWFudCxcblx0XHRcdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdGNvbnN0IG1lcmdlZEZ1bGxTdGF0ZSA9IHtcblx0XHRcdFx0XHRcdFx0Li4uY29udHJvbFN0YXRlLmZ1bGxTdGF0ZSxcblx0XHRcdFx0XHRcdFx0ZmlsdGVyOiB7XG5cdFx0XHRcdFx0XHRcdFx0Li4uY29udHJvbFN0YXRlLmZ1bGxTdGF0ZS5maWx0ZXIsXG5cdFx0XHRcdFx0XHRcdFx0Li4ueEFwcFN0YXRlRmlsdGVyc1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0Ly93aGVuIG5hdmlnYXRpbmcgZnJvbSBjYXJkLCByZW1vdmUgYWxsIGV4aXN0aW5nIGZpbHRlcnMgdmFsdWVzIChkZWZhdWx0IG9yIG90aGVyd2lzZSkgYW5kIHRoZW4gYXBwbHkgdGhlIHN0YXRlXG5cdFx0XHRcdFx0XHRhd2FpdCAoZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCB7IGNsZWFyRWRpdEZpbHRlcjogdHJ1ZSB9KTtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGZpbHRlckJhciwgbWVyZ2VkRnVsbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkaWZmU3RhdGU6IG9iamVjdCA9IGF3YWl0IFN0YXRlVXRpbC5kaWZmU3RhdGUoXG5cdFx0XHRcdFx0XHRcdGZpbHRlckJhcixcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCBkaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoc2tpcE1lcmdlKSB7XG5cdFx0XHRcdFx0XHQvL3NraXBNZXJnZSBpcyB0cnVlIHdoZW4gY29taW5nIGZyb20gdGhlIGR5bmFtaWMgdGlsZSwgaW4gdGhpcyBjYXNlLCByZW1vdmUgYWxsIGV4aXN0aW5nIGZpbHRlcnMgdmFsdWVzIChkZWZhdWx0IG9yIG90aGVyd2lzZSlcblx0XHRcdFx0XHRcdGF3YWl0IChmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJKS5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXIsIHsgY2xlYXJFZGl0RmlsdGVyOiB0cnVlIH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIsIGNvbnRyb2xTdGF0ZT8uZnVsbFN0YXRlID8/IGNvbnRyb2xTdGF0ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkubWRjLlRhYmxlXCI6IHtcblx0XHRyZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgdGFibGU6IE1EQ1RhYmxlKSB7XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGVLZXkgPSB0aGlzLmdldFN0YXRlS2V5KHRhYmxlKTtcblx0XHRcdGNvbnN0IHRhYmxlU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKHRhYmxlKTtcblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCB0YWJsZVN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHR0aGlzOiBWaWV3U3RhdGUsXG5cdFx0XHR0YWJsZTogTURDVGFibGUsXG5cdFx0XHRjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSxcblx0XHRcdG5hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHRcdCkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIEV4dHJhIGNvbmRpdGlvbiBhZGRlZCB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZSBsb2dpYyBmb3IgbWRjIGNvbnRyb2xcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPSB0aGlzLl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlKFxuXHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlPy5pbml0aWFsU3RhdGUsXG5cdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdHNraXBNZXJnZSxcblx0XHRcdFx0XHRcdG5hdlBhcmFtZXRlcnM/Lm5hdmlnYXRpb25UeXBlICE9PSBOYXZUeXBlLmh5YnJpZFxuXHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRpZiAoY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSAmJiAhY29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZT8uc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuaW5pdGlhbFN0YXRlLnN1cHBsZW1lbnRhcnlDb25maWcgPSB7fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IG9EaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGFibGUsIG9EaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpZiAoIWNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZSh0YWJsZSwgY29udHJvbFN0YXRlPy5mdWxsU3RhdGUgPz8gY29udHJvbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvVGFibGU6IE1EQ1RhYmxlKSB7XG5cdFx0XHRjb25zdCBvVGFibGVCaW5kaW5nID0gb1RhYmxlLmdldFJvd0JpbmRpbmcoKTtcblx0XHRcdGlmIChvVGFibGVCaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb290QmluZGluZyA9IG9UYWJsZUJpbmRpbmcuZ2V0Um9vdEJpbmRpbmcoKTtcblx0XHRcdFx0aWYgKG9Sb290QmluZGluZyA9PT0gb1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRcdC8vIGFic29sdXRlIGJpbmRpbmdcblx0XHRcdFx0XHRvVGFibGVCaW5kaW5nLnJlZnJlc2goKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyByZWxhdGl2ZSBiaW5kaW5nXG5cdFx0XHRcdFx0Y29uc3Qgb0hlYWRlckNvbnRleHQgPSBvVGFibGVCaW5kaW5nLmdldEhlYWRlckNvbnRleHQoKTtcblx0XHRcdFx0XHRjb25zdCBzR3JvdXBJZCA9IG9UYWJsZUJpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdFx0aWYgKG9IZWFkZXJDb250ZXh0KSB7XG5cdFx0XHRcdFx0XHRvSGVhZGVyQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoW3sgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IFwiXCIgfV0sIHNHcm91cElkKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBUYWJsZTogJHtvVGFibGUuZ2V0SWQoKX0gd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuQ2hhcnRcIjoge1xuXHRcdHJldHJpZXZlOiBhc3luYyBmdW5jdGlvbiAob0NoYXJ0OiBDaGFydCk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0cmV0dXJuIFN0YXRlVXRpbC5yZXRyaWV2ZUV4dGVybmFsU3RhdGUob0NoYXJ0KTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvQ2hhcnQ6IENoYXJ0LCBvQ29udHJvbFN0YXRlOiB1bmtub3duKSB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShvQ2hhcnQsIG9Db250cm9sU3RhdGUpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHQvLyBUT0RPOiB1bmNvbW1lbnQgYWZ0ZXIgbWRjIGZpeCBpcyBtZXJnZWRcblx0XHQvKiByZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKGNoYXJ0OiBDaGFydCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShjaGFydCk7XG5cdFx0XHRjb25zdCBjaGFydFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjaGFydCk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBjaGFydFN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoY2hhcnQ6IENoYXJ0LCBjb250cm9sU3RhdGU6IENvbnRyb2xTdGF0ZSkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRcdC8vIEV4dHJhIGNvbmRpdGlvbiBhZGRlZCB0byBhcHBseSB0aGUgZGlmZiBzdGF0ZSBsb2dpYyBmb3IgbWRjIGNvbnRyb2xcblx0XHRcdFx0XHRjb25zdCBpc0luaXRpYWxTdGF0ZUFwcGxpY2FibGUgPSBjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSAmJiB0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5pbmRleE9mKGNoYXJ0LmdldElkKCkpID09PSAtMSAmJiB0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5kZXhPZihjaGFydC5nZXRJZCgpKSA9PT0gLTE7XG5cblx0XHRcdFx0XHRpZiAoaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBkaWZmU3RhdGUgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHRjaGFydCxcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZSBhcyBvYmplY3QsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgYXMgb2JqZWN0XG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoY2hhcnQsIGRpZmZTdGF0ZSk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNoYXJ0LCBjb250cm9sU3RhdGU/LmZ1bGxTdGF0ZSA/PyBjb250cm9sU3RhdGUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fSAqL1xuXHR9LFxuXHRcInNhcC51eGFwLk9iamVjdFBhZ2VMYXlvdXRcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob09QTGF5b3V0OiBPYmplY3RQYWdlTGF5b3V0KTogeyBzZWxlY3RlZFNlY3Rpb246IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkU2VjdGlvbjogb09QTGF5b3V0LmdldFNlbGVjdGVkU2VjdGlvbigpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9PUExheW91dDogT2JqZWN0UGFnZUxheW91dCwgb0NvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRTZWN0aW9uOiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUpIHtcblx0XHRcdFx0b09QTGF5b3V0LnNldFNlbGVjdGVkU2VjdGlvbihvQ29udHJvbFN0YXRlLnNlbGVjdGVkU2VjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogZnVuY3Rpb24gKG9PUExheW91dDogT2JqZWN0UGFnZUxheW91dCkge1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gb09QTGF5b3V0LmdldEJpbmRpbmdDb250ZXh0KCkgYXMgT0RhdGFWNENvbnRleHQgfCB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBvQmluZGluZyA9IG9CaW5kaW5nQ29udGV4dCAmJiBvQmluZGluZ0NvbnRleHQuZ2V0QmluZGluZygpO1xuXHRcdFx0aWYgKG9CaW5kaW5nKSB7XG5cdFx0XHRcdGNvbnN0IHNNZXRhUGF0aCA9IE1vZGVsSGVscGVyLmdldE1ldGFQYXRoRm9yQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXHRcdFx0XHRjb25zdCBzU3RyYXRlZ3kgPSBLZWVwQWxpdmVIZWxwZXIuZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoKG9PUExheW91dCwgc01ldGFQYXRoKTtcblx0XHRcdFx0aWYgKHNTdHJhdGVneSA9PT0gXCJzZWxmXCIpIHtcblx0XHRcdFx0XHQvLyBSZWZyZXNoIG1haW4gY29udGV4dCBhbmQgMS0xIG5hdmlnYXRpb24gcHJvcGVydGllcyBvciBPUFxuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLFxuXHRcdFx0XHRcdFx0b01ldGFNb2RlbCA9IG9Nb2RlbC5nZXRNZXRhTW9kZWwoKSxcblx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uUHJvcGVydGllczogUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+ID1cblx0XHRcdFx0XHRcdFx0KENvbW1vblV0aWxzLmdldENvbnRleHRQYXRoUHJvcGVydGllcyhvTWV0YU1vZGVsLCBzTWV0YVBhdGgsIHtcblx0XHRcdFx0XHRcdFx0XHQka2luZDogXCJOYXZpZ2F0aW9uUHJvcGVydHlcIlxuXHRcdFx0XHRcdFx0XHR9KSBhcyBSZWNvcmQ8c3RyaW5nLCBNZXRhTW9kZWxOYXZQcm9wZXJ0eT4pIHx8IHt9LFxuXHRcdFx0XHRcdFx0YU5hdlByb3BlcnRpZXNUb1JlcXVlc3QgPSBPYmplY3Qua2V5cyhvTmF2aWdhdGlvblByb3BlcnRpZXMpLnJlZHVjZShmdW5jdGlvbiAoXG5cdFx0XHRcdFx0XHRcdGFQcmV2OiB7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfVtdLFxuXHRcdFx0XHRcdFx0XHRzTmF2UHJvcDogc3RyaW5nXG5cdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9OYXZpZ2F0aW9uUHJvcGVydGllc1tzTmF2UHJvcF0uJGlzQ29sbGVjdGlvbiAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdGFQcmV2LnB1c2goeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc05hdlByb3AgfSk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIGFQcmV2O1xuXHRcdFx0XHRcdFx0fSwgW10pLFxuXHRcdFx0XHRcdFx0YVByb3BlcnRpZXM6ICh7ICROYXZpZ2F0aW9uUHJvcGVydHlQYXRoOiBzdHJpbmcgfSB8IHsgJFByb3BlcnR5UGF0aDogc3RyaW5nIH0pW10gPSBbeyAkUHJvcGVydHlQYXRoOiBcIipcIiB9XSxcblx0XHRcdFx0XHRcdHNHcm91cElkID0gb0JpbmRpbmcuZ2V0R3JvdXBJZCgpO1xuXG5cdFx0XHRcdFx0b0JpbmRpbmdDb250ZXh0LnJlcXVlc3RTaWRlRWZmZWN0cyhhUHJvcGVydGllcy5jb25jYXQoYU5hdlByb3BlcnRpZXNUb1JlcXVlc3QpLCBzR3JvdXBJZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1N0cmF0ZWd5ID09PSBcImluY2x1ZGluZ0RlcGVuZGVudHNcIikge1xuXHRcdFx0XHRcdC8vIENvbXBsZXRlIHJlZnJlc2hcblx0XHRcdFx0XHRvQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBPYmplY3RQYWdlOiAke29PUExheW91dC5nZXRJZCgpfSB3YXMgbm90IHJlZnJlc2hlZC4gTm8gYmluZGluZyBmb3VuZCFgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9TZWdtZW50ZWRCdXR0b246IFNlZ21lbnRlZEJ1dHRvbik6IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdHNlbGVjdGVkS2V5OiBvU2VnbWVudGVkQnV0dG9uLmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgb1NlZ21lbnRlZEJ1dHRvbjogU2VnbWVudGVkQnV0dG9uLCBvQ29udHJvbFN0YXRlPzogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSAmJiBvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5ICE9PSBvU2VnbWVudGVkQnV0dG9uLmdldFNlbGVjdGVkS2V5KCkpIHtcblx0XHRcdFx0b1NlZ21lbnRlZEJ1dHRvbi5zZXRTZWxlY3RlZEtleShvQ29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KTtcblx0XHRcdFx0aWYgKG9TZWdtZW50ZWRCdXR0b24uZ2V0UGFyZW50KCk/LmlzQShcInNhcC51aS5tZGMuQWN0aW9uVG9vbGJhclwiKSkge1xuXHRcdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uZmlyZUV2ZW50KFwic2VsZWN0aW9uQ2hhbmdlXCIpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlbGVjdFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VsZWN0OiBTZWxlY3QpOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlbGVjdC5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9TZWxlY3Q6IFNlbGVjdCwgb0NvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSAhPT0gb1NlbGVjdC5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRcdG9TZWxlY3Quc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdGlmIChvU2VsZWN0LmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0XHRvU2VsZWN0LmZpcmVFdmVudChcImNoYW5nZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAuZi5EeW5hbWljUGFnZVwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvRHluYW1pY1BhZ2U6IER5bmFtaWNQYWdlKTogeyBoZWFkZXJFeHBhbmRlZDogYm9vbGVhbiB9IHtcblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGhlYWRlckV4cGFuZGVkOiBvRHluYW1pY1BhZ2UuZ2V0SGVhZGVyRXhwYW5kZWQoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAob0R5bmFtaWNQYWdlOiBEeW5hbWljUGFnZSwgb0NvbnRyb2xTdGF0ZT86IHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGUpIHtcblx0XHRcdFx0b0R5bmFtaWNQYWdlLnNldEhlYWRlckV4cGFuZGVkKG9Db250cm9sU3RhdGUuaGVhZGVyRXhwYW5kZWQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudWkuY29yZS5tdmMuVmlld1wiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVmlldzogRkVWaWV3KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZXRyaWV2ZVZpZXdTdGF0ZSgpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uIChvVmlldzogRkVWaWV3LCBvQ29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlciwgc2tpcE1lcmdlPzogYm9vbGVhbikge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlICYmIG9OYXZQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUuYXBwbHlWaWV3U3RhdGUob0NvbnRyb2xTdGF0ZSwgb05hdlBhcmFtZXRlcnMsIHNraXBNZXJnZSk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRyZWZyZXNoQmluZGluZzogYXN5bmMgZnVuY3Rpb24gKG9WaWV3OiBGRVZpZXcpIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLnJlZnJlc2hWaWV3QmluZGluZ3MoKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUuQ29tcG9uZW50Q29udGFpbmVyXCI6IHtcblx0XHRyZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgb0NvbXBvbmVudENvbnRhaW5lcjogQ29tcG9uZW50Q29udGFpbmVyKTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29tcG9uZW50Q29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRpZiAob0NvbXBvbmVudCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCkpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHt9IGFzIG9iamVjdDtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHR0aGlzOiBWaWV3U3RhdGUsXG5cdFx0XHRvQ29tcG9uZW50Q29udGFpbmVyOiBDb21wb25lbnRDb250YWluZXIsXG5cdFx0XHRvQ29udHJvbFN0YXRlOiBvYmplY3QsXG5cdFx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXJcblx0XHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRcdGNvbnN0IG9Db21wb25lbnQgPSBvQ29tcG9uZW50Q29udGFpbmVyLmdldENvbXBvbmVudEluc3RhbmNlKCk7XG5cdFx0XHRpZiAob0NvbXBvbmVudCkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5hcHBseUNvbnRyb2xTdGF0ZShvQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCksIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnNhYy5kZi5jaGFuZ2VIYW5kbGVyLk11bHRpRGltTW9kZWxDaGFuZ2VIYW5kbGVyXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKGNvbnRyb2w6IE11bHRpRGltTW9kZWxDaGFuZ2VIYW5kbGVyKTogdW5rbm93biB7XG5cdFx0XHRyZXR1cm4gY29udHJvbC5fZ2V0TXVsdGlEaW1Nb2RlbCgpLnNlcmlhbGl6ZShcIklOQV9SRVBPU0lUT1JZX0RFTFRBXCIpO1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uIChjb250cm9sOiBNdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlciwgY29udHJvbFN0YXRlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBjb250cm9sLl9nZXRNdWx0aURpbU1vZGVsKCkuZGVzZXJpYWxpemUoY29udHJvbFN0YXRlLCBcIklOQV9SRVBPU0lUT1JZX0RFTFRBXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcbi8qKlxuICogQSBjb250cm9sbGVyIGV4dGVuc2lvbiBvZmZlcmluZyBob29rcyBmb3Igc3RhdGUgaGFuZGxpbmdcbiAqXG4gKiBJZiB5b3UgbmVlZCB0byBtYWludGFpbiBhIHNwZWNpZmljIHN0YXRlIGZvciB5b3VyIGFwcGxpY2F0aW9uLCB5b3UgY2FuIHVzZSB0aGUgY29udHJvbGxlciBleHRlbnNpb24uXG4gKlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICogQHNpbmNlIDEuODUuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5WaWV3U3RhdGVcIilcbmNsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIF9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjogbnVtYmVyO1xuXG5cdHByaXZhdGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkOiBQcm9taXNlPHVua25vd24+O1xuXG5cdHByaXZhdGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZT86IEZ1bmN0aW9uO1xuXG5cdHByb3RlY3RlZCBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cblx0Y29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZTogc3RyaW5nW10gPSBbXTtcblxuXHRpbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHk6IHN0cmluZ1tdID0gW107XG5cblx0dmlld1N0YXRlQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBDb25zdHJ1Y3Rvci5cblx0ICovXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXIgPSAwO1xuXHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHRcdHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0fSk7XG5cdH1cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmVmcmVzaFZpZXdCaW5kaW5ncygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhQ29udHJvbHMgPSBhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKTtcblx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGFDb250cm9sc1xuXHRcdFx0LmZpbHRlcigob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4ge1xuXHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKHRoaXMucmVmcmVzaENvbnRyb2xCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHRcdH0pO1xuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGFkZCBhbGwgY29udHJvbHMgcmVsZXZhbnQgZm9yIHJlZnJlc2hpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzKGFDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hDb250cm9sQmluZGluZyhvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyID0gdGhpcy5nZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sKTtcblx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdGlmICh0eXBlb2Ygb0NvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIucmVmcmVzaEJpbmRpbmcgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0TG9nLmluZm8oYHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9IGlzIG5vdCBwcm92aWRlZGApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nLmJpbmQodGhpcywgb0NvbnRyb2wpKTtcblx0XHR9XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBhIG1hcCBvZiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEByZXR1cm5zIEEgcGxhaW4gb2JqZWN0IHdpdGggb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICovXG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KToge1xuXHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHR9IHtcblx0XHRjb25zdCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyOiB7XG5cdFx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0XHR9ID0ge307XG5cdFx0aWYgKG9Db250cm9sKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUeXBlIGluIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCkge1xuXHRcdFx0XHRpZiAob0NvbnRyb2wuaXNBKHNUeXBlKSkge1xuXHRcdFx0XHRcdC8vIHBhc3Mgb25seSB0aGUgcmVmcmVzaEJpbmRpbmcgaGFuZGxlciBpbiBhbiBvYmplY3Qgc28gdGhhdCA6XG5cdFx0XHRcdFx0Ly8gMS4gQXBwbGljYXRpb24gaGFzIGFjY2VzcyBvbmx5IHRvIHJlZnJlc2hCaW5kaW5nIGFuZCBub3QgYXBwbHkgYW5kIHJldGVyaXZlIGF0IHRoaXMgc3RhZ2Vcblx0XHRcdFx0XHQvLyAyLiBBcHBsaWNhdGlvbiBtb2RpZmljYXRpb25zIHRvIHRoZSBvYmplY3Qgd2lsbCBiZSByZWZsZWN0ZWQgaGVyZSAoYXMgd2UgcGFzcyBieSByZWZlcmVuY2UpXG5cdFx0XHRcdFx0b1JlZnJlc2hCaW5kaW5nSGFuZGxlcltcInJlZnJlc2hCaW5kaW5nXCJdID1cblx0XHRcdFx0XHRcdChfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBbc1R5cGUgYXMga2V5b2YgQ29udHJvbFN0YXRlTWFwXS5yZWZyZXNoQmluZGluZyBhcyAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQpIHx8XG5cdFx0XHRcdFx0XHR7fTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hIYW5kbGVyKG9Db250cm9sLCBvUmVmcmVzaEJpbmRpbmdIYW5kbGVyKTtcblx0XHRyZXR1cm4gb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJlZnJlc2hCaW5kaW5nPC9jb2RlPiBmdW5jdGlvbiBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2wgVGhlIGNvbnRyb2wgZm9yIHdoaWNoIHRoZSByZWZyZXNoIGhhbmRsZXIgaXMgYWRhcHRlZC5cblx0ICogQHBhcmFtIF9vQ29udHJvbEhhbmRsZXIgQSBwbGFpbiBvYmplY3Qgd2hpY2ggY2FuIGhhdmUgb25lIGZ1bmN0aW9uOiA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT5cblx0ICogQHBhcmFtIF9vQ29udHJvbEhhbmRsZXIucmVmcmVzaEJpbmRpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihcblx0XHRfb0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0X29Db250cm9sSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fVxuXHQpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgc3VzcGVuZGVkIGR1ZSB0byBrZWVwLWFsaXZlIG1vZGUuXG5cdCAqXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0b25TdXNwZW5kKCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIENhbGxlZCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyByZXN0b3JlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uUmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXN0cnVjdG9yIG1ldGhvZCBmb3Igb2JqZWN0cy5cblx0ICovXG5cdGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0ZGVsZXRlIHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRzdXBlci5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZ1bmN0aW9uIHRvIGVuYWJsZSBtdWx0aSBvdmVycmlkZS4gSXQgaXMgYWRkaW5nIGFuIGFkZGl0aW9uYWwgcGFyYW1ldGVyIChhcnJheSkgdG8gdGhlIHByb3ZpZGVkXG5cdCAqIGZ1bmN0aW9uIChhbmQgaXRzIHBhcmFtZXRlcnMpLCB0aGF0IHdpbGwgYmUgZXZhbHVhdGVkIHZpYSA8Y29kZT5Qcm9taXNlLmFsbDwvY29kZT4uXG5cdCAqXG5cdCAqIEBwYXJhbSBmbkNhbGwgVGhlIGZ1bmN0aW9uIHRvIGJlIGNhbGxlZFxuXHQgKiBAcGFyYW0gYXJnc1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgdG8gYmUgcmVzb2x2ZWQgd2l0aCB0aGUgcmVzdWx0IG9mIGFsbCBvdmVycmlkZXNcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgY29sbGVjdFJlc3VsdHMoZm5DYWxsOiBGdW5jdGlvbiwgLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTxDb250cm9sW10+IHtcblx0XHRjb25zdCBhUmVzdWx0czogQ29udHJvbFtdID0gW107XG5cdFx0YXJncy5wdXNoKGFSZXN1bHRzKTtcblx0XHRmbkNhbGwuYXBwbHkodGhpcywgYXJncyk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXN1bHRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDdXN0b21pemUgdGhlIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHBhcmFtIGFDb250cm9sSGFuZGxlciBBIGxpc3Qgb2YgcGxhaW4gb2JqZWN0cyB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhZGFwdENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsIGFDb250cm9sSGFuZGxlcjogb2JqZWN0W10pIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmV0cmlldmU8L2NvZGU+IGFuZCA8Y29kZT5hcHBseTwvY29kZT4gZnVuY3Rpb25zIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIHR3byBmdW5jdGlvbnM6IDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+XG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBDb250cm9sU3RhdGVIYW5kbGVyPE1hbmFnZWRPYmplY3QsIG9iamVjdD5bXSB7XG5cdFx0Y29uc3QgYUludGVybmFsQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXSxcblx0XHRcdGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyOiBDb250cm9sU3RhdGVIYW5kbGVyPE1hbmFnZWRPYmplY3QsIG9iamVjdD5bXSA9IFtdO1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBhdm9pZCBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIGludGVybmFsIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFxuXHRcdFx0XHRcdGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIucHVzaChcblx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sIF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcFtzVHlwZSBhcyBrZXlvZiBDb250cm9sU3RhdGVNYXBdKSBhcyBDb250cm9sU3RhdGVIYW5kbGVyPFxuXHRcdFx0XHRcdFx0XHRNYW5hZ2VkT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRvYmplY3Rcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sLCBhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdFx0cmV0dXJuIGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIuY29uY2F0KGFDdXN0b21Db250cm9sU3RhdGVIYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIGZvciBnaXZlbiB2aWV3IHRoYXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIHRoZSBzdGF0ZSBoYW5kbGluZyB0byB0aGUgcHJvdmlkZWQgY29udHJvbCBhcnJheS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIF9hQ29sbGVjdGVkQ29udHJvbHMgVGhlIGNvbGxlY3RlZCBjb250cm9sc1xuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdGFkYXB0U3RhdGVDb250cm9scyhfYUNvbGxlY3RlZENvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIGtleSB0byBiZSB1c2VkIGZvciBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGtleSBmb3Jcblx0ICogQHJldHVybnMgVGhlIGtleSB0byBiZSB1c2VkIGZvciBzdG9yaW5nIHRoZSBjb250cm9scyBzdGF0ZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFN0YXRlS2V5KG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRWaWV3KCkuZ2V0TG9jYWxJZChvQ29udHJvbC5nZXRJZCgpKSB8fCBvQ29udHJvbC5nZXRJZCgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB2aWV3IHN0YXRlIG9mIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIG1vcmUgdGhhbiBvbmNlIGJlZm9yZSBmaW5pc2hpbmcsIGFsbCBidXQgdGhlIGZpbmFsIHJlc3BvbnNlIHdpbGwgcmVzb2x2ZSB0byA8Y29kZT51bmRlZmluZWQ8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBIHByb21pc2UgcmVzb2x2aW5nIHRoZSB2aWV3IHN0YXRlXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZXRyaWV2ZVZpZXdTdGF0ZSgpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG5cdFx0Kyt0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlcjtcblx0XHRsZXQgb1ZpZXdTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0XHR0cnkge1xuXHRcdFx0YXdhaXQgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWQ7XG5cdFx0XHRjb25zdCBhQ29udHJvbHM6IChNYW5hZ2VkT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHRjb25zdCBhUmVzb2x2ZWRTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChcblx0XHRcdFx0KFxuXHRcdFx0XHRcdGFDb250cm9scy5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gb0NvbnRyb2wgJiYgb0NvbnRyb2wuaXNBICYmIG9Db250cm9sLmlzQTxNYW5hZ2VkT2JqZWN0PihcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdFx0fSkgYXMgTWFuYWdlZE9iamVjdFtdXG5cdFx0XHRcdCkubWFwKGFzeW5jIChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJldHJpZXZlQ29udHJvbFN0YXRlKG9Db250cm9sKS50aGVuKCh2UmVzdWx0OiB1bmtub3duKSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRrZXk6IHRoaXMuZ2V0U3RhdGVLZXkob0NvbnRyb2wpLFxuXHRcdFx0XHRcdFx0XHR2YWx1ZTogdlJlc3VsdFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0XHRvVmlld1N0YXRlID0gYVJlc29sdmVkU3RhdGVzLnJlZHVjZShmdW5jdGlvbiAob1N0YXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG1TdGF0ZTogeyBrZXk6IHN0cmluZzsgdmFsdWU6IHVua25vd24gfSkge1xuXHRcdFx0XHRjb25zdCBvQ3VycmVudFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0XHRvQ3VycmVudFN0YXRlW21TdGF0ZS5rZXldID0gbVN0YXRlLnZhbHVlO1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9TdGF0ZXMsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdFx0Y29uc3QgbUFkZGl0aW9uYWxTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLnJlc29sdmUodGhpcy5fcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCkpO1xuXHRcdFx0aWYgKG1BZGRpdGlvbmFsU3RhdGVzICYmIE9iamVjdC5rZXlzKG1BZGRpdGlvbmFsU3RhdGVzKS5sZW5ndGgpIHtcblx0XHRcdFx0b1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldID0gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdC0tdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID09PSAwID8gb1ZpZXdTdGF0ZSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFeHRlbmQgdGhlIG1hcCBvZiBhZGRpdGlvbmFsIHN0YXRlcyAobm90IGNvbnRyb2wgYm91bmQpIHRvIGJlIGFkZGVkIHRvIHRoZSBjdXJyZW50IHZpZXcgc3RhdGUgb2YgdGhlIGdpdmVuIHZpZXcuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBtQWRkaXRpb25hbFN0YXRlcyBUaGUgYWRkaXRpb25hbCBzdGF0ZVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0cmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzOiBvYmplY3QpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBAcmV0dXJucyBBZGRpdGlvbmFsIHZpZXcgc3RhdGVzXG5cdCAqL1xuXHRfcmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKCk6IHVua25vd24ge1xuXHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0ge307XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5yZXRyaWV2ZUFkZGl0aW9uYWxTdGF0ZXMobUFkZGl0aW9uYWxTdGF0ZXMpO1xuXHRcdHJldHVybiBtQWRkaXRpb25hbFN0YXRlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBvYmplY3QgdG8gZ2V0IHRoZSBzdGF0ZSBmb3Jcblx0ICogQHJldHVybnMgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IFByb21pc2U8b2JqZWN0PiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xTdGF0ZUhhbmRsZXJzID0gdGhpcy5nZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMubWFwKGFzeW5jIChtQ29udHJvbFN0YXRlSGFuZGxlcikgPT4ge1xuXHRcdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIucmV0cmlldmUgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1Db250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlLmNhbGwodGhpcywgb0NvbnRyb2wpO1xuXHRcdFx0fSlcblx0XHQpLnRoZW4oKGFTdGF0ZXM6IG9iamVjdFtdKSA9PiB7XG5cdFx0XHRyZXR1cm4gYVN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9GaW5hbFN0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb0N1cnJlbnRTdGF0ZTogb2JqZWN0KSB7XG5cdFx0XHRcdHJldHVybiBtZXJnZU9iamVjdHMob0ZpbmFsU3RhdGUsIG9DdXJyZW50U3RhdGUpO1xuXHRcdFx0fSwge30pO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIERlZmluZXMgd2hldGhlciB0aGUgdmlldyBzdGF0ZSBzaG91bGQgb25seSBiZSBhcHBsaWVkIG9uY2UgaW5pdGlhbGx5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uSW5zdGVhZH0uXG5cdCAqXG5cdCAqIEltcG9ydGFudDpcblx0ICogWW91IHNob3VsZCBvbmx5IG92ZXJyaWRlIHRoaXMgbWV0aG9kIGZvciBjdXN0b20gcGFnZXMgYW5kIG5vdCBmb3IgdGhlIHN0YW5kYXJkIExpc3RSZXBvcnRQYWdlIGFuZCBPYmplY3RQYWdlIVxuXHQgKlxuXHQgKiBAcmV0dXJucyBJZiA8Y29kZT50cnVlPC9jb2RlPiwgb25seSB0aGUgaW5pdGlhbCB2aWV3IHN0YXRlIGlzIGFwcGxpZWQgb25jZSxcblx0ICogZWxzZSBhbnkgbmV3IHZpZXcgc3RhdGUgaXMgYWxzbyBhcHBsaWVkIG9uIGZvbGxvdy11cCBjYWxscyAoZGVmYXVsdClcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGFwcGx5SW5pdGlhbFN0YXRlT25seSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBsaWVzIHRoZSBnaXZlbiB2aWV3IHN0YXRlIHRvIHRoaXMgZXh0ZW5zaW9ucyB2aWV3LlxuXHQgKlxuXHQgKiBAcGFyYW0gb1ZpZXdTdGF0ZSBUaGUgdmlldyBzdGF0ZSB0byBhcHBseSAoY2FuIGJlIHVuZGVmaW5lZClcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIgVGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBwYXJhbWV0ZXJcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgVGhlIGFjdHVhbCBuYXZpZ2F0aW9uIHR5cGVcblx0ICogQHBhcmFtIG9OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudCBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnREZWZhdWx0cyBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnJlcXVpcmVzU3RhbmRhcmRWYXJpYW50IERlZmluZXMgd2hldGhlciB0aGUgc3RhbmRhcmQgdmFyaWFudCBtdXN0IGJlIHVzZWQgaW4gdmFyaWFudCBtYW5hZ2VtZW50XG5cdCAqIEBwYXJhbSBza2lwTWVyZ2UgQm9vbGVhbiB3aGljaCBkZXRlcm1pbmVzIHRvIHNraXAgdGhlIGtleSB1c2VyIHNoaW5lIHRocm91Z2hcblx0ICogQHJldHVybnMgUHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Vmlld1N0YXRlKFxuXHRcdG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLFxuXHRcdG9OYXZQYXJhbWV0ZXI6IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseUluaXRpYWxTdGF0ZU9ubHkoKSAmJiB0aGlzLl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCkpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dHJ5IHtcblx0XHRcdC8vU05PVzogQ1MyMDIzMDAwNjc2NTg5NyBGb3IgdHJhbnNpZW50IEFwcFN0YXRlLCB3ZSByZXR1cm4gd2l0aG91dCBhcHBseWluZyB0aGUgc3RhdGUgdG8gY29udHJvbHMgaW4gUm9vdENvbnRhaW5lcidzIGNoaWxkcmVuIHZpZXdzIGFzIHRoZXJlIGlzIG5vIHN0YXRlIHRvIGFwcGx5XG5cdFx0XHQvL09ubHkgbmVlZCBpcyB0byByZXNvbHZlIHRoZSBfcEluaXRpYWxTdGF0ZUFwcGxpZWQgc28gdGhhdCB1cGRhdGUgb2YgQXBwU3RhdGUgY2FuIHN0aWxsIGhhcHBlblxuXHRcdFx0aWYgKHRoaXMuX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUob1ZpZXdTdGF0ZSwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSkgJiYgIXRoaXMuX19pc1Jvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5vbkJlZm9yZVN0YXRlQXBwbGllZCwgW10sIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10gPSBhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYWRhcHRTdGF0ZUNvbnRyb2xzKTtcblx0XHRcdHRoaXMudmlld1N0YXRlQ29udHJvbHMgPSBhQ29udHJvbHM7XG5cdFx0XHRsZXQgb1Byb21pc2VDaGFpbiA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdFx0bGV0IGhhc1ZhcmlhbnRNYW5hZ2VtZW50ID0gZmFsc2U7XG5cdFx0XHQvKipcblx0XHRcdCAqIHRoaXMgZW5zdXJlcyB0aGF0IHZhcmlhbnRNYW5hZ2VtZW50IGNvbnRyb2wgaXMgYXBwbGllZCBmaXJzdCB0byBjYWxjdWxhdGUgaW5pdGlhbCBzdGF0ZSBmb3IgZGVsdGEgbG9naWNcblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgc29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzLnJlZHVjZSgobW9kaWZpZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdLCBjb250cm9sKSA9PiB7XG5cdFx0XHRcdGlmICghY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sID0gY29udHJvbC5pc0EoXCJzYXAudWkuZmwudmFyaWFudHMuVmFyaWFudE1hbmFnZW1lbnRcIik7XG5cdFx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRoYXNWYXJpYW50TWFuYWdlbWVudCA9IGlzVmFyaWFudE1hbmFnZW1lbnRDb250cm9sO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG1vZGlmaWVkQ29udHJvbHMgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA/IFtjb250cm9sLCAuLi5tb2RpZmllZENvbnRyb2xzXSA6IFsuLi5tb2RpZmllZENvbnRyb2xzLCBjb250cm9sXTtcblx0XHRcdFx0cmV0dXJuIG1vZGlmaWVkQ29udHJvbHM7XG5cdFx0XHR9LCBbXSk7XG5cblx0XHRcdC8vIEluIGNhc2Ugb2Ygbm8gVmFyaWFudCBNYW5hZ2VtZW50LCB0aGlzIGVuc3VyZXMgdGhhdCBpbml0aWFsIHN0YXRlcyBpcyBzZXRcblx0XHRcdGlmICghaGFzVmFyaWFudE1hbmFnZW1lbnQpIHtcblx0XHRcdFx0dGhpcy5fc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSgpO1xuXHRcdFx0fVxuXHRcdFx0c29ydGVkQWRhcHRTdGF0ZUNvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKG9Db250cm9sKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sLmlzQShcInNhcC51aS5iYXNlLk1hbmFnZWRPYmplY3RcIik7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChvQ29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHNLZXkgPSB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKTtcblx0XHRcdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKFxuXHRcdFx0XHRcdFx0dGhpcy5hcHBseUNvbnRyb2xTdGF0ZS5iaW5kKFxuXHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRvQ29udHJvbCxcblx0XHRcdFx0XHRcdFx0KG9WaWV3U3RhdGUgPyBvVmlld1N0YXRlW3NLZXldIDogdW5kZWZpbmVkKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdFx0b05hdlBhcmFtZXRlcixcblx0XHRcdFx0XHRcdFx0c2tpcE1lcmdlID8/IGZhbHNlXG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGF3YWl0IG9Qcm9taXNlQ2hhaW47XG5cdFx0XHRpZiAob05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5pQXBwU3RhdGUgfHwgb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSA9PT0gTmF2VHlwZS5oeWJyaWQpIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyhcblx0XHRcdFx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5QWRkaXRpb25hbFN0YXRlcyxcblx0XHRcdFx0XHRvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtBRERJVElPTkFMX1NUQVRFU19LRVldIDogdW5kZWZpbmVkXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycywgb05hdlBhcmFtZXRlcik7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5fYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyLCBvTmF2UGFyYW1ldGVyKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0aWYgKCF0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpKSB7XG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLm9uQWZ0ZXJTdGF0ZUFwcGxpZWQpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTtcblx0XHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGUgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9jaGVja0lmVmFyaWFudElkSXNBdmFpbGFibGUob1ZNOiBWYXJpYW50TWFuYWdlbWVudCwgc1ZhcmlhbnRJZDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IGFWYXJpYW50cyA9IG9WTS5nZXRWYXJpYW50cygpO1xuXHRcdGxldCBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlID0gZmFsc2U7XG5cdFx0YVZhcmlhbnRzLmZvckVhY2goZnVuY3Rpb24gKG9WYXJpYW50KSB7XG5cdFx0XHRpZiAob1ZhcmlhbnQuZ2V0S2V5KCkgPT09IHNWYXJpYW50SWQpIHtcblx0XHRcdFx0YklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGU7XG5cdH1cblxuXHRfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKSB7XG5cdFx0XHRjb25zdCBwSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0XHRkZWxldGUgdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0cEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0X2dldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICF0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdH1cblxuXHRfaXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZSh2aWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkLCBuYXZUeXBlOiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKCF2aWV3U3RhdGUgfHwgT2JqZWN0LmtleXModmlld1N0YXRlKS5sZW5ndGggPT09IDApICYmIG5hdlR5cGUgPT0gTmF2VHlwZS5pQXBwU3RhdGU7XG5cdH1cblxuXHRfX2lzUm9vdFZpZXdDb250cm9sbGVyKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHJvb3RWaWV3Q29udHJvbGxlciA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpO1xuXHRcdHJldHVybiAoXG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPE5hdkNvbnRhaW5lckNvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIpIHx8XG5cdFx0XHRyb290Vmlld0NvbnRyb2xsZXIuaXNBPEZjbENvbnRyb2xsZXI+KFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIpXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIb29rIHRvIHJlYWN0IGJlZm9yZSBhIHN0YXRlIGZvciBnaXZlbiB2aWV3IGlzIGFwcGxpZWQuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBhUHJvbWlzZXMgRXh0ZW5zaWJsZSBhcnJheSBvZiBwcm9taXNlcyB0byBiZSByZXNvbHZlZCBiZWZvcmUgY29udGludWluZ1xuXHQgKiBAcGFyYW0gbmF2aWdhdGlvblR5cGUgTmF2aWdhdGlvbiB0eXBlIHJlc3BvbnNpYmxlIGZvciB0aGUgYXBwbHlpbmcgdGhlIHN0YXRlXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkJlZm9yZVN0YXRlQXBwbGllZChhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4sIG5hdmlnYXRpb25UeXBlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogSG9vayB0byByZWFjdCB3aGVuIHN0YXRlIGZvciBnaXZlbiB2aWV3IHdhcyBhcHBsaWVkLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdG9uQWZ0ZXJTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgYWRkaXRpb25hbCwgbm90IGNvbnRyb2wgcmVsYXRlZCwgc3RhdGVzIC0gaXMgY2FsbGVkIG9ubHkgaWYgbmF2aWdhdGlvbiB0eXBlIGlzIGlBcHBTdGF0ZS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIGN1cnJlbnQgdmlldyBzdGF0ZVxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFwcGx5QWRkaXRpb25hbFN0YXRlcyhvVmlld1N0YXRlOiBvYmplY3QsIGFQcm9taXNlczogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdF9hcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzVG9GaWx0ZXJiYXIoXG5cdFx0X29OYXZQYXJhbWV0ZXI6IHtcblx0XHRcdG5hdmlnYXRpb25UeXBlOiBzdHJpbmc7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50Pzogb2JqZWN0O1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudERlZmF1bHRzPzogb2JqZWN0O1xuXHRcdFx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuO1xuXHRcdH0sXG5cdFx0X2FQcm9taXNlczogUHJvbWlzZTx1bmtub3duPlxuXHQpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5IG5hdmlnYXRpb24gcGFyYW1ldGVycyBpcyBub3QgY2FsbGVkIGlmIHRoZSBuYXZpZ2F0aW9uIHR5cGUgaXMgaUFwcFN0YXRlXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50XSBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHNdIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICogQHBhcmFtIFtvTmF2UGFyYW1ldGVyLnJlcXVpcmVzU3RhbmRhcmRWYXJpYW50XSBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRvTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc3RyaW5nO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdCB8IHVuZGVmaW5lZDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblx0XHR9LFxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0XHRhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseWluZyB0aGUgZ2l2ZW4gc3RhdGUgdG8gdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGFwcGx5IHRoZSBnaXZlbiBzdGF0ZVxuXHQgKiBAcGFyYW0gb0NvbnRyb2xTdGF0ZSBUaGUgc3RhdGUgZm9yIHRoZSBnaXZlbiBjb250cm9sXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlcnNdIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gW3NraXBNZXJnZV0gV2hldGhlciBtZXJnZSBzaG91bGQgYmUgc2tpcHBlZCBvciBub3Rcblx0ICogQHJldHVybnMgUmV0dXJuIGEgcHJvbWlzZSBmb3IgYXN5bmMgc3RhdGUgaGFuZGxpbmdcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgYXBwbHlDb250cm9sU3RhdGUoXG5cdFx0b0NvbnRyb2w6IE1hbmFnZWRPYmplY3QsXG5cdFx0b0NvbnRyb2xTdGF0ZTogb2JqZWN0LFxuXHRcdG9OYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRza2lwTWVyZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbFN0YXRlSGFuZGxlcnMuZm9yRWFjaCgobUNvbnRyb2xTdGF0ZUhhbmRsZXIpID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbUNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgIT09IFwiZnVuY3Rpb25cIikge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYGNvbnRyb2xTdGF0ZUhhbmRsZXIuYXBwbHkgaXMgbm90IGEgZnVuY3Rpb24gZm9yIGNvbnRyb2w6ICR7b0NvbnRyb2wuZ2V0TWV0YWRhdGEoKS5nZXROYW1lKCl9YCk7XG5cdFx0XHR9XG5cdFx0XHRvUHJvbWlzZUNoYWluID0gb1Byb21pc2VDaGFpbi50aGVuKG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5LmJpbmQodGhpcywgb0NvbnRyb2wsIG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBza2lwTWVyZ2UpKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdC8vIG1ldGhvZCB0byBnZXQgdGhlIGNvbnRyb2wgc3RhdGUgZm9yIG1kYyBjb250cm9scyBhcHBseWluZyB0aGUgZGVsdGEgbG9naWNcblx0X2dldENvbnRyb2xTdGF0ZShjb250cm9sU3RhdGVLZXk6IHN0cmluZywgY29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUpOiBDb250cm9sU3RhdGUge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjtcblx0XHRpZiAoT2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIpLmxlbmd0aCA+IDAgJiYgaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSkge1xuXHRcdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gYXMgb2JqZWN0KS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSA9IHsgLi4uY29udHJvbFN0YXRlIH07XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4geyBmdWxsU3RhdGU6IGNvbnRyb2xTdGF0ZSBhcyBvYmplY3QsIGluaXRpYWxTdGF0ZTogaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5XSBhcyBvYmplY3QgfTtcblx0XHR9XG5cdFx0cmV0dXJuIGNvbnRyb2xTdGF0ZTtcblx0fVxuXG5cdC8vbWV0aG9kIHRvIHN0b3JlIHRoZSBpbml0aWFsIHN0YXRlcyBmb3IgZGVsdGEgY29tcHV0YXRpb24gb2YgbWRjIGNvbnRyb2xzXG5cdF9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlID0gYXN5bmMgKHZhcmlhbnRNYW5hZ2VtZW50PzogVmFyaWFudE1hbmFnZW1lbnQpOiBQcm9taXNlPHZvaWQ+ID0+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgYWRhcHRDb250cm9scyA9IHRoaXMudmlld1N0YXRlQ29udHJvbHM7XG5cblx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlczogUHJvbWlzZTxvYmplY3Q+W10gPSBbXTtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleTogc3RyaW5nW10gPSBbXTtcblx0XHRcdGxldCBpbml0aWFsQ29udHJvbFN0YXRlczogb2JqZWN0W10gPSBbXTtcblx0XHRcdGNvbnN0IHZhcmlhbnRDb250cm9sczogc3RyaW5nW10gPSB2YXJpYW50TWFuYWdlbWVudD8uZ2V0Rm9yKCkgPz8gW107XG5cblx0XHRcdGFkYXB0Q29udHJvbHNcblx0XHRcdFx0LmZpbHRlcihmdW5jdGlvbiAoY29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRjb250cm9sICYmXG5cdFx0XHRcdFx0XHQoIXZhcmlhbnRNYW5hZ2VtZW50IHx8IHZhcmlhbnRDb250cm9scy5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpKSAmJlxuXHRcdFx0XHRcdFx0KGNvbnRyb2wuaXNBKFwic2FwLnVpLm1kYy5UYWJsZVwiKSB8fFxuXHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkZpbHRlckJhclwiKSB8fFxuXHRcdFx0XHRcdFx0XHQoY29udHJvbCBhcyBCYXNlT2JqZWN0KS5pc0EoXCJzYXAudWkubWRjLkNoYXJ0XCIpKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5mb3JFYWNoKChjb250cm9sKSA9PiB7XG5cdFx0XHRcdFx0aWYgKHZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0XHR0aGlzLl9hZGRFdmVudExpc3RlbmVyc1RvVmFyaWFudE1hbmFnZW1lbnQodmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9scyk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3QgZXh0ZXJuYWxTdGF0ZVByb21pc2UgPSBTdGF0ZVV0aWwucmV0cmlldmVFeHRlcm5hbFN0YXRlKGNvbnRyb2wgYXMgTURDQ29udHJvbCk7XG5cdFx0XHRcdFx0ZXh0ZXJuYWxTdGF0ZVByb21pc2VzLnB1c2goZXh0ZXJuYWxTdGF0ZVByb21pc2UpO1xuXHRcdFx0XHRcdGNvbnRyb2xTdGF0ZUtleS5wdXNoKHRoaXMuZ2V0U3RhdGVLZXkoY29udHJvbCkpO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChleHRlcm5hbFN0YXRlUHJvbWlzZXMpO1xuXHRcdFx0aW5pdGlhbENvbnRyb2xTdGF0ZXMuZm9yRWFjaCgoaW5pdGlhbENvbnRyb2xTdGF0ZTogb2JqZWN0LCBpOiBudW1iZXIpID0+IHtcblx0XHRcdFx0dGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXlbaV1dID0gaW5pdGlhbENvbnRyb2xTdGF0ZTtcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKGU6IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9O1xuXG5cdC8vIEF0dGFjaCBldmVudCB0byBzYXZlIGFuZCBzZWxlY3Qgb2YgVmFyaWFudCBNYW5hZ2VtZW50IHRvIHVwZGF0ZSB0aGUgaW5pdGlhbCBDb250cm9sIFN0YXRlcyBvbiB2YXJpYW50IGNoYW5nZVxuXHRfYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50OiBWYXJpYW50TWFuYWdlbWVudCwgdmFyaWFudENvbnRyb2xzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IG9QYXlsb2FkID0geyB2YXJpYW50TWFuYWdlZENvbnRyb2xzOiB2YXJpYW50Q29udHJvbHMgfTtcblx0XHRjb25zdCBmbkV2ZW50ID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5fdXBkYXRlSW5pdGlhbFN0YXRlc09uVmFyaWFudENoYW5nZSh2YXJpYW50Q29udHJvbHMpO1xuXHRcdH07XG5cdFx0dmFyaWFudE1hbmFnZW1lbnQuYXR0YWNoU2F2ZShvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LmF0dGFjaFNlbGVjdChvUGF5bG9hZCwgZm5FdmVudCwge30pO1xuXHR9XG5cblx0X3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2Uodm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0OiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyID0gdGhpcy5pbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcjtcblx0XHRPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcikuZm9yRWFjaCgoY29udHJvbEtleSkgPT4ge1xuXHRcdFx0Zm9yIChjb25zdCB2bUFzc29jaWF0ZWRjb250cm9sS2V5IG9mIHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldCkge1xuXHRcdFx0XHRpZiAodm1Bc3NvY2lhdGVkY29udHJvbEtleS5pbmNsdWRlcyhjb250cm9sS2V5KSkge1xuXHRcdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xLZXldID0ge307XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdF9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlKFxuXHRcdGluaXRpYWxTdGF0ZTogb2JqZWN0IHwgdW5kZWZpbmVkLFxuXHRcdGNvbnRyb2w6IEZpbHRlckJhciB8IE1EQ1RhYmxlLFxuXHRcdHNraXBNZXJnZTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcblx0XHRpc05hdkh5YnJpZD86IGJvb2xlYW5cblx0KTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIChcblx0XHRcdCEhaW5pdGlhbFN0YXRlICYmXG5cdFx0XHQhdGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0IXRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5pbmNsdWRlcyhjb250cm9sLmdldElkKCkpICYmXG5cdFx0XHQoaXNOYXZIeWJyaWQgPz8gdHJ1ZSkgJiZcblx0XHRcdHNraXBNZXJnZSAhPT0gdHJ1ZVxuXHRcdCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgVmlld1N0YXRlO1xuIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7O0VBc0NBO0VBQ0E7RUFDQTtFQUNBLE1BQU1BLE9BQU8sR0FBR0MsVUFBVSxDQUFDRCxPQUFPOztFQUVsQztBQUNBO0FBQ0E7QUFDQTtBQUNBOztFQTRCQSxNQUFNRSxxQkFBcUIsR0FBRyxtQkFBbUI7RUF1Q2pELE1BQU1DLHdCQUF5QyxHQUFHO0lBQ2pELHNDQUFzQyxFQUFFO01BQ3ZDQyxRQUFRLEVBQUUsVUFBVUMsR0FBc0IsRUFBZ0M7UUFDekUsT0FBTztVQUNOQyxTQUFTLEVBQUVELEdBQUcsQ0FBQ0Usb0JBQW9CO1FBQ3BDLENBQUM7TUFDRixDQUFDO01BQ0RDLEtBQUssRUFB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
|
|
924
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJOYXZUeXBlIiwiTmF2TGlicmFyeSIsIkFERElUSU9OQUxfU1RBVEVTX0tFWSIsIl9tQ29udHJvbFN0YXRlSGFuZGxlck1hcCIsInJldHJpZXZlIiwib1ZNIiwidmFyaWFudElkIiwiZ2V0Q3VycmVudFZhcmlhbnRLZXkiLCJhcHBseSIsImNvbnRyb2xTdGF0ZSIsInVuZGVmaW5lZCIsImlzVmFyaWFudElkQXZhaWxhYmxlIiwiX2NoZWNrSWZWYXJpYW50SWRJc0F2YWlsYWJsZSIsInNWYXJpYW50UmVmZXJlbmNlIiwiZ2V0U3RhbmRhcmRWYXJpYW50S2V5IiwiY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZSIsInB1c2giLCJnZXRGb3IiLCJDb250cm9sVmFyaWFudEFwcGx5QVBJIiwiYWN0aXZhdGVWYXJpYW50IiwiZWxlbWVudCIsInZhcmlhbnRSZWZlcmVuY2UiLCJfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSIsImVycm9yIiwiTG9nIiwiaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5IiwibXVsdGlwbGVNb2RlQ29udHJvbCIsInNlbGVjdGVkS2V5IiwiY29udGVudCIsImdldFNlbGVjdGVkS2V5IiwidGFiQmFyIiwiZ2V0SXRlbXMiLCJmaW5kIiwiaXRlbSIsImdldEtleSIsInNldFNlbGVjdGVkS2V5IiwiZmlsdGVyQmFyIiwiY29udHJvbFN0YXRlS2V5IiwiZ2V0U3RhdGVLZXkiLCJmaWx0ZXJCYXJTdGF0ZSIsIlN0YXRlVXRpbCIsInJldHJpZXZlRXh0ZXJuYWxTdGF0ZSIsInByb3BlcnRpZXNJbmZvIiwiZ2V0UHJvcGVydHlJbmZvU2V0IiwiZmlsdGVyIiwicHJvcGVydHlJbmZvIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsInBhdGgiLCJyZW1vdmVGcm9tQXBwU3RhdGUiLCJmb3JFYWNoIiwiUHJvcGVydHlJbmZvIiwiX2dldENvbnRyb2xTdGF0ZSIsIm5hdlBhcmFtZXRlciIsInNraXBNZXJnZSIsImlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSIsIl9pc0luaXRpYWxTdGF0ZXNBcHBsaWNhYmxlIiwiaW5pdGlhbFN0YXRlIiwibmF2aWdhdGlvblR5cGUiLCJoeWJyaWQiLCJmdWxsU3RhdGUiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJ4QXBwU3RhdGVGaWx0ZXJzIiwiY29udmVydFNlbGVjdGlvblZhcmlhbnRUb1N0YXRlRmlsdGVycyIsInNlbGVjdGlvblZhcmlhbnQiLCJtZXJnZWRGdWxsU3RhdGUiLCJfY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyIsImNsZWFyRWRpdEZpbHRlciIsImFwcGx5RXh0ZXJuYWxTdGF0ZSIsImRpZmZTdGF0ZSIsInRhYmxlIiwidGFibGVTdGF0ZSIsIm5hdlBhcmFtZXRlcnMiLCJzdXBwbGVtZW50YXJ5Q29uZmlnIiwib0RpZmZTdGF0ZSIsInJlZnJlc2hCaW5kaW5nIiwib1RhYmxlIiwib1RhYmxlQmluZGluZyIsImdldFJvd0JpbmRpbmciLCJvUm9vdEJpbmRpbmciLCJnZXRSb290QmluZGluZyIsImFnZ3JlZ2F0aW9uIiwiZ2V0QWdncmVnYXRpb24iLCJoaWVyYXJjaHlRdWFsaWZpZXIiLCJyZWZyZXNoIiwib0hlYWRlckNvbnRleHQiLCJnZXRIZWFkZXJDb250ZXh0Iiwic0dyb3VwSWQiLCJnZXRHcm91cElkIiwicmVxdWVzdFNpZGVFZmZlY3RzIiwiJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGgiLCJpbmZvIiwiZ2V0SWQiLCJjaGFydCIsImNoYXJ0U3RhdGUiLCJpbmNsdWRlcyIsIm9PUExheW91dCIsInNlbGVjdGVkU2VjdGlvbiIsImdldFNlbGVjdGVkU2VjdGlvbiIsIm9Db250cm9sU3RhdGUiLCJzZXRTZWxlY3RlZFNlY3Rpb24iLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9CaW5kaW5nIiwiZ2V0QmluZGluZyIsInNNZXRhUGF0aCIsIk1vZGVsSGVscGVyIiwiZ2V0TWV0YVBhdGhGb3JDb250ZXh0Iiwic1N0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0Q29udHJvbFJlZnJlc2hTdHJhdGVneUZvckNvbnRleHRQYXRoIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJvTWV0YU1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwib05hdmlnYXRpb25Qcm9wZXJ0aWVzIiwiQ29tbW9uVXRpbHMiLCJnZXRDb250ZXh0UGF0aFByb3BlcnRpZXMiLCIka2luZCIsImFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0IiwicmVkdWNlIiwiYVByZXYiLCJzTmF2UHJvcCIsIiRpc0NvbGxlY3Rpb24iLCJhUHJvcGVydGllcyIsIiRQcm9wZXJ0eVBhdGgiLCJjb25jYXQiLCJvU2VnbWVudGVkQnV0dG9uIiwiaXNBIiwiZmlyZUV2ZW50Iiwib1NlbGVjdCIsIm9EeW5hbWljUGFnZSIsImhlYWRlckV4cGFuZGVkIiwiZ2V0SGVhZGVyRXhwYW5kZWQiLCJzZXRIZWFkZXJFeHBhbmRlZCIsIm9WaWV3Iiwib0NvbnRyb2xsZXIiLCJnZXRDb250cm9sbGVyIiwidmlld1N0YXRlIiwicmV0cmlldmVWaWV3U3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsImFwcGx5Vmlld1N0YXRlIiwicmVmcmVzaFZpZXdCaW5kaW5ncyIsIm9Db21wb25lbnRDb250YWluZXIiLCJvQ29tcG9uZW50IiwiZ2V0Q29tcG9uZW50SW5zdGFuY2UiLCJyZXRyaWV2ZUNvbnRyb2xTdGF0ZSIsImdldFJvb3RDb250cm9sIiwiYXBwbHlDb250cm9sU3RhdGUiLCJjb250cm9sIiwiX2dldE11bHRpRGltTW9kZWwiLCJzZXJpYWxpemUiLCJkZXNlcmlhbGl6ZSIsIlZpZXdTdGF0ZSIsImRlZmluZVVJNUNsYXNzIiwicHVibGljRXh0ZW5zaW9uIiwiZmluYWxFeHRlbnNpb24iLCJleHRlbnNpYmxlIiwiT3ZlcnJpZGVFeGVjdXRpb24iLCJBZnRlciIsInByaXZhdGVFeHRlbnNpb24iLCJJbnN0ZWFkIiwiaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIiLCJ2aWV3U3RhdGVDb250cm9scyIsInZhcmlhbnRNYW5hZ2VtZW50IiwiYWRhcHRDb250cm9scyIsImV4dGVybmFsU3RhdGVQcm9taXNlcyIsImluaXRpYWxDb250cm9sU3RhdGVzIiwidmFyaWFudENvbnRyb2xzIiwiX2FkZEV2ZW50TGlzdGVuZXJzVG9WYXJpYW50TWFuYWdlbWVudCIsImV4dGVybmFsU3RhdGVQcm9taXNlIiwiUHJvbWlzZSIsImFsbCIsImluaXRpYWxDb250cm9sU3RhdGUiLCJpIiwiZSIsIl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciIsIl9wSW5pdGlhbFN0YXRlQXBwbGllZCIsInJlc29sdmUiLCJfcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlIiwiYUNvbnRyb2xzIiwiY29sbGVjdFJlc3VsdHMiLCJiYXNlIiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwib1Byb21pc2VDaGFpbiIsIm9Db250cm9sIiwidGhlbiIsInJlZnJlc2hDb250cm9sQmluZGluZyIsImJpbmQiLCJhQ29sbGVjdGVkQ29udHJvbHMiLCJvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciIsImdldENvbnRyb2xSZWZyZXNoQmluZGluZ0hhbmRsZXIiLCJnZXRNZXRhZGF0YSIsImdldE5hbWUiLCJvUmVmcmVzaEJpbmRpbmdIYW5kbGVyIiwic1R5cGUiLCJhZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlciIsIl9vQ29udHJvbCIsIl9vQ29udHJvbEhhbmRsZXIiLCJvblN1c3BlbmQiLCJvblJlc3RvcmUiLCJkZXN0cm95IiwiZm5DYWxsIiwiYVJlc3VsdHMiLCJhcmdzIiwiYWRhcHRDb250cm9sU3RhdGVIYW5kbGVyIiwiYUNvbnRyb2xIYW5kbGVyIiwiZ2V0Q29udHJvbFN0YXRlSGFuZGxlciIsImFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXIiLCJhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlciIsImFzc2lnbiIsImFkYXB0U3RhdGVDb250cm9scyIsIl9hQ29sbGVjdGVkQ29udHJvbHMiLCJnZXRWaWV3IiwiZ2V0TG9jYWxJZCIsIm9WaWV3U3RhdGUiLCJhUmVzb2x2ZWRTdGF0ZXMiLCJtYXAiLCJ2UmVzdWx0Iiwia2V5IiwidmFsdWUiLCJvU3RhdGVzIiwibVN0YXRlIiwib0N1cnJlbnRTdGF0ZSIsIm1lcmdlT2JqZWN0cyIsIm1BZGRpdGlvbmFsU3RhdGVzIiwiX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsInJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyIsImFDb250cm9sU3RhdGVIYW5kbGVycyIsIm1Db250cm9sU3RhdGVIYW5kbGVyIiwiRXJyb3IiLCJjYWxsIiwiYVN0YXRlcyIsIm9GaW5hbFN0YXRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5Iiwib05hdlBhcmFtZXRlciIsIl9nZXRJbml0aWFsU3RhdGVBcHBsaWVkIiwiX2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUiLCJfX2lzUm9vdFZpZXdDb250cm9sbGVyIiwib25CZWZvcmVTdGF0ZUFwcGxpZWQiLCJoYXNWYXJpYW50TWFuYWdlbWVudCIsInNvcnRlZEFkYXB0U3RhdGVDb250cm9scyIsIm1vZGlmaWVkQ29udHJvbHMiLCJpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCIsInNLZXkiLCJpQXBwU3RhdGUiLCJhcHBseUFkZGl0aW9uYWxTdGF0ZXMiLCJhcHBseU5hdmlnYXRpb25QYXJhbWV0ZXJzIiwiX2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhciIsIm9uQWZ0ZXJTdGF0ZUFwcGxpZWQiLCJfc2V0SW5pdGlhbFN0YXRlQXBwbGllZCIsInNWYXJpYW50SWQiLCJhVmFyaWFudHMiLCJnZXRWYXJpYW50cyIsImJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUiLCJvVmFyaWFudCIsInBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSIsIm5hdlR5cGUiLCJyb290Vmlld0NvbnRyb2xsZXIiLCJhUHJvbWlzZXMiLCJfb05hdlBhcmFtZXRlciIsIl9hUHJvbWlzZXMiLCJnZXRJbnRlcmZhY2UiLCJvUGF5bG9hZCIsInZhcmlhbnRNYW5hZ2VkQ29udHJvbHMiLCJmbkV2ZW50IiwiX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UiLCJhdHRhY2hTYXZlIiwiYXR0YWNoU2VsZWN0Iiwidm1Bc3NvY2lhdGVkQ29udHJvbHNUb1Jlc2V0IiwiY29udHJvbEtleSIsInZtQXNzb2NpYXRlZGNvbnRyb2xLZXkiLCJpc05hdkh5YnJpZCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpZXdTdGF0ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCBtZXJnZU9iamVjdHMgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB0eXBlIER5bmFtaWNQYWdlIGZyb20gXCJzYXAvZi9EeW5hbWljUGFnZVwiO1xuaW1wb3J0IHR5cGUgeyBGRVZpZXcgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBDb21tb25VdGlscyBmcm9tIFwic2FwL2ZlL2NvcmUvQ29tbW9uVXRpbHNcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBLZWVwQWxpdmVIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckFQSSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWx0ZXJCYXIvRmlsdGVyQmFyQVBJXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgTmF2TGlicmFyeSBmcm9tIFwic2FwL2ZlL25hdmlnYXRpb24vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgTXVsdGlwbGVNb2RlQ29udHJvbCBmcm9tIFwic2FwL2ZlL3RlbXBsYXRlcy9MaXN0UmVwb3J0L2NvbnRyb2xzL011bHRpcGxlTW9kZUNvbnRyb2xcIjtcbmltcG9ydCB0eXBlIEljb25UYWJGaWx0ZXIgZnJvbSBcInNhcC9tL0ljb25UYWJGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIFNlZ21lbnRlZEJ1dHRvbiBmcm9tIFwic2FwL20vU2VnbWVudGVkQnV0dG9uXCI7XG5pbXBvcnQgdHlwZSBTZWxlY3QgZnJvbSBcInNhcC9tL1NlbGVjdFwiO1xuaW1wb3J0IHR5cGUgTXVsdGlEaW1Nb2RlbENoYW5nZUhhbmRsZXIgZnJvbSBcInNhcC9zYWMvZGYvY2hhbmdlSGFuZGxlci9NdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlclwiO1xuaW1wb3J0IHR5cGUgTWFuYWdlZE9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQmFzZU9iamVjdCBmcm9tIFwic2FwL3VpL2Jhc2UvT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgT3ZlcnJpZGVFeGVjdXRpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9PdmVycmlkZUV4ZWN1dGlvblwiO1xuaW1wb3J0IENvbnRyb2xWYXJpYW50QXBwbHlBUEkgZnJvbSBcInNhcC91aS9mbC9hcHBseS9hcGkvQ29udHJvbFZhcmlhbnRBcHBseUFQSVwiO1xuaW1wb3J0IHR5cGUgVmFyaWFudE1hbmFnZW1lbnQgZnJvbSBcInNhcC91aS9mbC92YXJpYW50cy9WYXJpYW50TWFuYWdlbWVudFwiO1xuaW1wb3J0IHR5cGUgQ2hhcnQgZnJvbSBcInNhcC91aS9tZGMvQ2hhcnRcIjtcbmltcG9ydCB0eXBlIE1EQ0NvbnRyb2wgZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgRmlsdGVyQmFyIGZyb20gXCJzYXAvdWkvbWRjL0ZpbHRlckJhclwiO1xuaW1wb3J0IHR5cGUgTURDVGFibGUgZnJvbSBcInNhcC91aS9tZGMvVGFibGVcIjtcbmltcG9ydCB0eXBlIEZpbHRlckJhckJhc2UgZnJvbSBcInNhcC91aS9tZGMvZmlsdGVyYmFyL0ZpbHRlckJhckJhc2VcIjtcbmltcG9ydCBTdGF0ZVV0aWwgZnJvbSBcInNhcC91aS9tZGMvcDEzbi9TdGF0ZVV0aWxcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlJbmZvIH0gZnJvbSBcInNhcC91aS9tZGMvdXRpbC9Qcm9wZXJ0eUhlbHBlclwiO1xuaW1wb3J0IHR5cGUgT0RhdGFWNENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPYmplY3RQYWdlTGF5b3V0IGZyb20gXCJzYXAvdXhhcC9PYmplY3RQYWdlTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSB7IE1ldGFNb2RlbE5hdlByb3BlcnR5IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lckNvbnRyb2xsZXIgZnJvbSBcIi4uL3Jvb3RWaWV3L05hdkNvbnRhaW5lci5jb250cm9sbGVyXCI7XG5cbi8vIGFkZGl0aW9uYWxTdGF0ZXMgYXJlIHN0b3JlZCBuZXh0IHRvIGNvbnRyb2wgSURzLCBzbyBuYW1lIGNsYXNoIGF2b2lkYW5jZSBuZWVkZWQuIEZvcnR1bmF0ZWx5IElEcyBoYXZlIHJlc3RyaWN0aW9uczpcbi8vIFwiQWxsb3dlZCBpcyBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgKGNhcGl0YWwvbG93ZXJjYXNlKSwgZGlnaXRzLCB1bmRlcnNjb3JlcywgZGFzaGVzLCBwb2ludHMgYW5kL29yIGNvbG9ucy5cIlxuLy8gVGhlcmVmb3JlIGFkZGluZyBhIHN5bWJvbCBsaWtlICMgb3IgQFxuY29uc3QgTmF2VHlwZSA9IE5hdkxpYnJhcnkuTmF2VHlwZTtcblxuLyoqXG4gKiBEZWZpbml0aW9uIG9mIGEgY3VzdG9tIGFjdGlvbiB0byBiZSB1c2VkIGluc2lkZSB0aGUgdGFibGUgdG9vbGJhclxuICpcbiAqIEBwdWJsaWNcbiAqL1xuZXhwb3J0IHR5cGUgTmF2aWdhdGlvblBhcmFtZXRlciA9IHtcblx0LyoqXG5cdCAqICBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZS5cblx0ICpcblx0ICogIEBwdWJsaWNcblx0ICovXG5cdG5hdmlnYXRpb25UeXBlOiBzdHJpbmc7XG5cdC8qKlxuXHQgKiBUaGUgc2VsZWN0aW9uVmFyaWFudCBmcm9tIHRoZSBuYXZpZ2F0aW9uLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRzZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudDtcblx0LyoqXG5cdCAqIFRoZSBzZWxlY3Rpb25WYXJpYW50IGRlZmF1bHRzIGZyb20gdGhlIG5hdmlnYXRpb25cblx0ICpcblx0ICogIEBwdWJsaWNcblx0ICovXG5cdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IFNlbGVjdGlvblZhcmlhbnQ7XG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKlxuXHQgKiAgQHB1YmxpY1xuXHQgKi9cblx0cmVxdWlyZXNTdGFuZGFyZFZhcmlhbnQ/OiBib29sZWFuO1xufTtcblxuY29uc3QgQURESVRJT05BTF9TVEFURVNfS0VZID0gXCIjYWRkaXRpb25hbFN0YXRlc1wiO1xuXG5leHBvcnQgdHlwZSBDb250cm9sU3RhdGUgPVxuXHR8ICh7XG5cdFx0XHRpbml0aWFsU3RhdGU/OiB7XG5cdFx0XHRcdHN1cHBsZW1lbnRhcnlDb25maWc/OiBvYmplY3Q7XG5cdFx0XHR9O1xuXHRcdFx0ZnVsbFN0YXRlPzoge1xuXHRcdFx0XHRmaWx0ZXI/OiBvYmplY3Q7XG5cdFx0XHR9O1xuXHQgIH0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilcblx0fCB1bmRlZmluZWQ7XG5cbmV4cG9ydCB0eXBlIEZpbHRlckJhclN0YXRlID0ge1xuXHRmaWx0ZXI/OiBSZWNvcmQ8c3RyaW5nLCBBcnJheTxvYmplY3Q+Pjtcbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gbWV0aG9kcyB0byByZXRyaWV2ZSAmIGFwcGx5IHN0YXRlcyBmb3IgdGhlIGRpZmZlcmVudCBjb250cm9scyAvL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xudHlwZSBDb250cm9sU3RhdGVIYW5kbGVyPFQgZXh0ZW5kcyBNYW5hZ2VkT2JqZWN0LCBLIGV4dGVuZHMgdW5rbm93biB8IHVuZGVmaW5lZD4gPSB7XG5cdHJldHJpZXZlOiAob0NvbnRyb2w6IFQpID0+IEsgfCBQcm9taXNlPEs+O1xuXHRhcHBseTogKG9Db250cm9sOiBULCBjb250cm9sU3RhdGU6IEssIG5hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLCBza2lwTWVyZ2U/OiBib29sZWFuKSA9PiBQcm9taXNlPHZvaWQ+IHwgdm9pZDtcblx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IFQpID0+IHZvaWQ7XG59O1xudHlwZSBDb250cm9sU3RhdGVNYXAgPSB7XG5cdFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8VmFyaWFudE1hbmFnZW1lbnQsIHsgdmFyaWFudElkOiBzdHJpbmcgfCBudWxsIH0+O1xuXHRcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5jb250cm9scy5NdWx0aXBsZU1vZGVDb250cm9sXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TXVsdGlwbGVNb2RlQ29udHJvbCwgeyBzZWxlY3RlZEtleTogc3RyaW5nIH0+O1xuXHRcInNhcC51aS5tZGMuRmlsdGVyQmFyXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8RmlsdGVyQmFyLCBDb250cm9sU3RhdGU+O1xuXHRcInNhcC51aS5tZGMuVGFibGVcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxNRENUYWJsZSwgQ29udHJvbFN0YXRlPjtcblx0XCJzYXAudWkubWRjLkNoYXJ0XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8Q2hhcnQsIENvbnRyb2xTdGF0ZT47XG5cdFwic2FwLnV4YXAuT2JqZWN0UGFnZUxheW91dFwiOiBDb250cm9sU3RhdGVIYW5kbGVyPE9iamVjdFBhZ2VMYXlvdXQsIHsgc2VsZWN0ZWRTZWN0aW9uOiBzdHJpbmcgfT47XG5cdFwic2FwLm0uU2VnbWVudGVkQnV0dG9uXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8U2VnbWVudGVkQnV0dG9uLCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLm0uU2VsZWN0XCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8U2VsZWN0LCB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfT47XG5cdFwic2FwLmYuRHluYW1pY1BhZ2VcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxEeW5hbWljUGFnZSwgeyBoZWFkZXJFeHBhbmRlZDogYm9vbGVhbiB9Pjtcblx0XCJzYXAudWkuY29yZS5Db21wb25lbnRDb250YWluZXJcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxDb21wb25lbnRDb250YWluZXIsIG9iamVjdD47XG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjogQ29udHJvbFN0YXRlSGFuZGxlcjxGRVZpZXcsIENvbnRyb2xTdGF0ZT47XG5cdFwic2FwLnNhYy5kZi5jaGFuZ2VIYW5kbGVyLk11bHRpRGltTW9kZWxDaGFuZ2VIYW5kbGVyXCI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TXVsdGlEaW1Nb2RlbENoYW5nZUhhbmRsZXIsIHVua25vd24+O1xufTtcbmNvbnN0IF9tQ29udHJvbFN0YXRlSGFuZGxlck1hcDogQ29udHJvbFN0YXRlTWFwID0ge1xuXHRcInNhcC51aS5mbC52YXJpYW50cy5WYXJpYW50TWFuYWdlbWVudFwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvVk06IFZhcmlhbnRNYW5hZ2VtZW50KTogeyB2YXJpYW50SWQ6IHN0cmluZyB8IG51bGwgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHR2YXJpYW50SWQ6IG9WTS5nZXRDdXJyZW50VmFyaWFudEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIGNvbnRyb2xTdGF0ZT86IHsgdmFyaWFudElkPzogc3RyaW5nIHwgbnVsbCB9KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlICYmIGNvbnRyb2xTdGF0ZS52YXJpYW50SWQgIT09IHVuZGVmaW5lZCAmJiBjb250cm9sU3RhdGUudmFyaWFudElkICE9PSBvVk0uZ2V0Q3VycmVudFZhcmlhbnRLZXkoKSkge1xuXHRcdFx0XHRcdGNvbnN0IGlzVmFyaWFudElkQXZhaWxhYmxlID0gdGhpcy5fY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTSwgY29udHJvbFN0YXRlLnZhcmlhbnRJZCk7XG5cdFx0XHRcdFx0bGV0IHNWYXJpYW50UmVmZXJlbmNlO1xuXHRcdFx0XHRcdGlmIChpc1ZhcmlhbnRJZEF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0c1ZhcmlhbnRSZWZlcmVuY2UgPSBjb250cm9sU3RhdGUudmFyaWFudElkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzVmFyaWFudFJlZmVyZW5jZSA9IG9WTS5nZXRTdGFuZGFyZFZhcmlhbnRLZXkoKTtcblx0XHRcdFx0XHRcdHRoaXMuY29udHJvbHNWYXJpYW50SWRVbmF2YWlsYWJsZS5wdXNoKC4uLm9WTS5nZXRGb3IoKSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRhd2FpdCBDb250cm9sVmFyaWFudEFwcGx5QVBJLmFjdGl2YXRlVmFyaWFudCh7XG5cdFx0XHRcdFx0XHRcdGVsZW1lbnQ6IG9WTSxcblx0XHRcdFx0XHRcdFx0dmFyaWFudFJlZmVyZW5jZTogc1ZhcmlhbnRSZWZlcmVuY2UgYXMgc3RyaW5nXG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdGF3YWl0IHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdFx0XHR0aGlzLmludmFsaWRhdGVJbml0aWFsU3RhdGVGb3JBcHBseS5wdXNoKC4uLm9WTS5nZXRGb3IoKSk7XG5cdFx0XHRcdFx0XHRhd2FpdCB0aGlzLl9zZXRJbml0aWFsU3RhdGVzRm9yRGVsdGFDb21wdXRlKG9WTSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUob1ZNKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBjYXRjaCAoZXJyb3I6IHVua25vd24pIHtcblx0XHRcdFx0TG9nLmVycm9yKGVycm9yIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydC5jb250cm9scy5NdWx0aXBsZU1vZGVDb250cm9sXCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG11bHRpcGxlTW9kZUNvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wpOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogbXVsdGlwbGVNb2RlQ29udHJvbC5jb250ZW50LmdldFNlbGVjdGVkS2V5KClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG11bHRpcGxlTW9kZUNvbnRyb2w6IE11bHRpcGxlTW9kZUNvbnRyb2wsIGNvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KSB7XG5cdFx0XHRpZiAoY29udHJvbFN0YXRlPy5zZWxlY3RlZEtleSkge1xuXHRcdFx0XHRjb25zdCB0YWJCYXIgPSBtdWx0aXBsZU1vZGVDb250cm9sLmNvbnRlbnQ7XG5cdFx0XHRcdGlmICh0YWJCYXIuZ2V0SXRlbXMoKS5maW5kKChpdGVtKSA9PiAoaXRlbSBhcyBJY29uVGFiRmlsdGVyKS5nZXRLZXkoKSA9PT0gY29udHJvbFN0YXRlLnNlbGVjdGVkS2V5KSkge1xuXHRcdFx0XHRcdHRhYkJhci5zZXRTZWxlY3RlZEtleShjb250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5tZGMuRmlsdGVyQmFyXCI6IHtcblx0XHRyZXRyaWV2ZTogYXN5bmMgZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgZmlsdGVyQmFyOiBGaWx0ZXJCYXJCYXNlKTogUHJvbWlzZTxDb250cm9sU3RhdGU+IHtcblx0XHRcdGNvbnN0IGNvbnRyb2xTdGF0ZUtleSA9IHRoaXMuZ2V0U3RhdGVLZXkoZmlsdGVyQmFyKTtcblx0XHRcdGNvbnN0IGZpbHRlckJhclN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIpO1xuXHRcdFx0Ly8gcmVtb3ZlIHNlbnNpdGl2ZSBvciB2aWV3IHN0YXRlIGlycmVsZXZhbnQgZmllbGRzXG5cdFx0XHRjb25zdCBwcm9wZXJ0aWVzSW5mbyA9IGZpbHRlckJhci5nZXRQcm9wZXJ0eUluZm9TZXQoKTtcblx0XHRcdGNvbnN0IGZpbHRlciA9IGZpbHRlckJhclN0YXRlLmZpbHRlciB8fCB7fTtcblx0XHRcdHByb3BlcnRpZXNJbmZvXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvICYgeyByZW1vdmVGcm9tQXBwU3RhdGU/OiBib29sZWFuIH0pIHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0T2JqZWN0LmtleXMoZmlsdGVyKS5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eUluZm8ucGF0aCAmJlxuXHRcdFx0XHRcdFx0ZmlsdGVyW3Byb3BlcnR5SW5mby5wYXRoXSAmJlxuXHRcdFx0XHRcdFx0KHByb3BlcnR5SW5mby5yZW1vdmVGcm9tQXBwU3RhdGUgfHwgZmlsdGVyW3Byb3BlcnR5SW5mby5wYXRoXS5sZW5ndGggPT09IDApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSlcblx0XHRcdFx0LmZvckVhY2goZnVuY3Rpb24gKFByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvKSB7XG5cdFx0XHRcdFx0aWYgKFByb3BlcnR5SW5mby5wYXRoKSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgZmlsdGVyW1Byb3BlcnR5SW5mby5wYXRoXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIHRoaXMuX2dldENvbnRyb2xTdGF0ZShjb250cm9sU3RhdGVLZXksIGZpbHRlckJhclN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAoXG5cdFx0XHR0aGlzOiBWaWV3U3RhdGUsXG5cdFx0XHRmaWx0ZXJCYXI6IEZpbHRlckJhcixcblx0XHRcdGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlLFxuXHRcdFx0bmF2UGFyYW1ldGVyPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb250cm9sU3RhdGUgJiYgbmF2UGFyYW1ldGVyKSB7XG5cdFx0XHRcdFx0Y29uc3QgaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlID0gdGhpcy5faXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShjb250cm9sU3RhdGU/LmluaXRpYWxTdGF0ZSwgZmlsdGVyQmFyLCBza2lwTWVyZ2UpO1xuXHRcdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25UeXBlID0gbmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlO1xuXHRcdFx0XHRcdC8vV2hlbiBuYXZpZ2F0aW9uIHR5cGUgaXMgaHlicmlkLCB3ZSBvdmVycmlkZSB0aGUgZmlsdGVyIGNvbmRpdGlvbnMgaW4gSUFwcFN0YXRlIHdpdGggU1YgcmVjZWl2ZWQgZnJvbSBYYXBwU3RhdGVcblx0XHRcdFx0XHRpZiAobmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUuaHlicmlkICYmIGNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSxcblx0XHRcdFx0XHRcdFx0eEFwcFN0YXRlRmlsdGVycyA9IGF3YWl0IGZpbHRlckJhckFQSS5jb252ZXJ0U2VsZWN0aW9uVmFyaWFudFRvU3RhdGVGaWx0ZXJzKFxuXHRcdFx0XHRcdFx0XHRcdG5hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50IGFzIFNlbGVjdGlvblZhcmlhbnQsXG5cdFx0XHRcdFx0XHRcdFx0dHJ1ZVxuXHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBtZXJnZWRGdWxsU3RhdGUgPSB7XG5cdFx0XHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUsXG5cdFx0XHRcdFx0XHRcdGZpbHRlcjoge1xuXHRcdFx0XHRcdFx0XHRcdC4uLmNvbnRyb2xTdGF0ZS5mdWxsU3RhdGUuZmlsdGVyLFxuXHRcdFx0XHRcdFx0XHRcdC4uLnhBcHBTdGF0ZUZpbHRlcnNcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdC8vd2hlbiBuYXZpZ2F0aW5nIGZyb20gY2FyZCwgcmVtb3ZlIGFsbCBleGlzdGluZyBmaWx0ZXJzIHZhbHVlcyAoZGVmYXVsdCBvciBvdGhlcndpc2UpIGFuZCB0aGVuIGFwcGx5IHRoZSBzdGF0ZVxuXHRcdFx0XHRcdFx0YXdhaXQgKGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEkpLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgeyBjbGVhckVkaXRGaWx0ZXI6IHRydWUgfSk7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShmaWx0ZXJCYXIsIG1lcmdlZEZ1bGxTdGF0ZSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0aWYgKGlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGlmZlN0YXRlOiBvYmplY3QgPSBhd2FpdCBTdGF0ZVV0aWwuZGlmZlN0YXRlKFxuXHRcdFx0XHRcdFx0XHRmaWx0ZXJCYXIsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGZpbHRlckJhciwgZGlmZlN0YXRlKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKHNraXBNZXJnZSkge1xuXHRcdFx0XHRcdFx0Ly9za2lwTWVyZ2UgaXMgdHJ1ZSB3aGVuIGNvbWluZyBmcm9tIHRoZSBkeW5hbWljIHRpbGUsIGluIHRoaXMgY2FzZSwgcmVtb3ZlIGFsbCBleGlzdGluZyBmaWx0ZXJzIHZhbHVlcyAoZGVmYXVsdCBvciBvdGhlcndpc2UpXG5cdFx0XHRcdFx0XHRhd2FpdCAoZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSSkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCB7IGNsZWFyRWRpdEZpbHRlcjogdHJ1ZSB9KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUoZmlsdGVyQmFyLCBjb250cm9sU3RhdGU/LmZ1bGxTdGF0ZSA/PyBjb250cm9sU3RhdGUpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5UYWJsZVwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIHRhYmxlOiBNRENUYWJsZSkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleSh0YWJsZSk7XG5cdFx0XHRjb25zdCB0YWJsZVN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZSh0YWJsZSk7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Q29udHJvbFN0YXRlKGNvbnRyb2xTdGF0ZUtleSwgdGFibGVTdGF0ZSk7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdFx0dGFibGU6IE1EQ1RhYmxlLFxuXHRcdFx0Y29udHJvbFN0YXRlOiBDb250cm9sU3RhdGUsXG5cdFx0XHRuYXZQYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcixcblx0XHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0XHQpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmIChjb250cm9sU3RhdGUpIHtcblx0XHRcdFx0XHQvLyBFeHRyYSBjb25kaXRpb24gYWRkZWQgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUgbG9naWMgZm9yIG1kYyBjb250cm9sXG5cdFx0XHRcdFx0Y29uc3QgaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlID0gdGhpcy5faXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShcblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZT8uaW5pdGlhbFN0YXRlLFxuXHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRza2lwTWVyZ2UsXG5cdFx0XHRcdFx0XHRuYXZQYXJhbWV0ZXJzPy5uYXZpZ2F0aW9uVHlwZSAhPT0gTmF2VHlwZS5oeWJyaWRcblx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0aWYgKGlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSkge1xuXHRcdFx0XHRcdFx0aWYgKGNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGUgJiYgIWNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGU/LnN1cHBsZW1lbnRhcnlDb25maWcpIHtcblx0XHRcdFx0XHRcdFx0Y29udHJvbFN0YXRlLmluaXRpYWxTdGF0ZS5zdXBwbGVtZW50YXJ5Q29uZmlnID0ge307XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCBvRGlmZlN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLmRpZmZTdGF0ZShcblx0XHRcdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKHRhYmxlLCBvRGlmZlN0YXRlKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0aWYgKCFjb250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZykge1xuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuc3VwcGxlbWVudGFyeUNvbmZpZyA9IHt9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0cmV0dXJuIGF3YWl0IFN0YXRlVXRpbC5hcHBseUV4dGVybmFsU3RhdGUodGFibGUsIGNvbnRyb2xTdGF0ZT8uZnVsbFN0YXRlID8/IGNvbnRyb2xTdGF0ZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0XHRMb2cuZXJyb3IoZXJyb3IgYXMgc3RyaW5nKTtcblx0XHRcdH1cblx0XHR9LFxuXHRcdHJlZnJlc2hCaW5kaW5nOiBmdW5jdGlvbiAob1RhYmxlOiBNRENUYWJsZSkge1xuXHRcdFx0Y29uc3Qgb1RhYmxlQmluZGluZyA9IG9UYWJsZS5nZXRSb3dCaW5kaW5nKCk7XG5cdFx0XHRpZiAob1RhYmxlQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBvUm9vdEJpbmRpbmcgPSBvVGFibGVCaW5kaW5nLmdldFJvb3RCaW5kaW5nKCk7XG5cdFx0XHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gb1RhYmxlQmluZGluZy5nZXRBZ2dyZWdhdGlvbigpIGFzIHsgaGllcmFyY2h5UXVhbGlmaWVyPzogc3RyaW5nIH0gfCB1bmRlZmluZWQ7XG5cdFx0XHRcdGlmIChvUm9vdEJpbmRpbmcgPT09IG9UYWJsZUJpbmRpbmcgJiYgYWdncmVnYXRpb24/LmhpZXJhcmNoeVF1YWxpZmllciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Ly8gYWJzb2x1dGUgYmluZGluZyAoZXhjZXB0IFRyZWVUYWJsZSwgd2hlcmUgd2Ugd2FudCB0byBrZWVwIGV4cGFuc2lvbiBzdGF0ZXMpXG5cdFx0XHRcdFx0b1RhYmxlQmluZGluZy5yZWZyZXNoKCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gcmVsYXRpdmUgYmluZGluZyBvciBUcmVlVGFibGVcblx0XHRcdFx0XHRjb25zdCBvSGVhZGVyQ29udGV4dCA9IG9UYWJsZUJpbmRpbmcuZ2V0SGVhZGVyQ29udGV4dCgpO1xuXHRcdFx0XHRcdGNvbnN0IHNHcm91cElkID0gb1RhYmxlQmluZGluZy5nZXRHcm91cElkKCk7XG5cblx0XHRcdFx0XHRpZiAob0hlYWRlckNvbnRleHQpIHtcblx0XHRcdFx0XHRcdG9IZWFkZXJDb250ZXh0LnJlcXVlc3RTaWRlRWZmZWN0cyhbeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogXCJcIiB9XSwgc0dyb3VwSWQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFRhYmxlOiAke29UYWJsZS5nZXRJZCgpfSB3YXMgbm90IHJlZnJlc2hlZC4gTm8gYmluZGluZyBmb3VuZCFgKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLm1kYy5DaGFydFwiOiB7XG5cdFx0Ly9UaGUgU3RhdGVVdGlsIGlzIGRlc2lnbmVkIHRvIGFwcGx5IHN0YXRlIGluIGFkZGl0aXZlIG1hbm5lciBzbyB3ZSBhcmUgYnJpbmdpaW5nIGJhY2sgZGlmZlN0YXRlIHVzYWdlIGZvciBjaGFydCAtIERJTkMwMDQwNjUxXG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGNoYXJ0OiBDaGFydCkge1xuXHRcdFx0Y29uc3QgY29udHJvbFN0YXRlS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShjaGFydCk7XG5cdFx0XHRjb25zdCBjaGFydFN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjaGFydCk7XG5cblx0XHRcdHJldHVybiB0aGlzLl9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5LCBjaGFydFN0YXRlKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBjaGFydDogQ2hhcnQsIGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKSB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRpZiAoY29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdFx0Ly9FeHRyYSBjb25kaXRpb24gYWRkZWQgdG8gYXBwbHkgdGhlIGRpZmYgc3RhdGUgbG9naWMgZm9yIG1kYyBjb250cm9sXG5cdFx0XHRcdFx0Y29uc3QgaXNJbml0aWFsU3RhdGVBcHBsaWNhYmxlID1cblx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZT8uaW5pdGlhbFN0YXRlICYmXG5cdFx0XHRcdFx0XHQhdGhpcy5pbnZhbGlkYXRlSW5pdGlhbFN0YXRlRm9yQXBwbHkuaW5jbHVkZXMoY2hhcnQuZ2V0SWQoKSkgJiZcblx0XHRcdFx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMoY2hhcnQuZ2V0SWQoKSk7XG5cdFx0XHRcdFx0aWYgKGlzSW5pdGlhbFN0YXRlQXBwbGljYWJsZSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZGlmZlN0YXRlID0gYXdhaXQgU3RhdGVVdGlsLmRpZmZTdGF0ZShcblx0XHRcdFx0XHRcdFx0Y2hhcnQsXG5cdFx0XHRcdFx0XHRcdGNvbnRyb2xTdGF0ZS5pbml0aWFsU3RhdGUgYXMgb2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRjb250cm9sU3RhdGUuZnVsbFN0YXRlIGFzIG9iamVjdFxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdHJldHVybiBhd2FpdCBTdGF0ZVV0aWwuYXBwbHlFeHRlcm5hbFN0YXRlKGNoYXJ0LCBkaWZmU3RhdGUpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gYXdhaXQgU3RhdGVVdGlsLmFwcGx5RXh0ZXJuYWxTdGF0ZShjaGFydCwgY29udHJvbFN0YXRlPy5mdWxsU3RhdGUgPz8gY29udHJvbFN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAudXhhcC5PYmplY3RQYWdlTGF5b3V0XCI6IHtcblx0XHRyZXRyaWV2ZTogZnVuY3Rpb24gKG9PUExheW91dDogT2JqZWN0UGFnZUxheW91dCk6IHsgc2VsZWN0ZWRTZWN0aW9uOiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZFNlY3Rpb246IG9PUExheW91dC5nZXRTZWxlY3RlZFNlY3Rpb24oKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvT1BMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQsIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkU2VjdGlvbjogc3RyaW5nIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9PUExheW91dC5zZXRTZWxlY3RlZFNlY3Rpb24ob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZFNlY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGZ1bmN0aW9uIChvT1BMYXlvdXQ6IE9iamVjdFBhZ2VMYXlvdXQpIHtcblx0XHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9PUExheW91dC5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIE9EYXRhVjRDb250ZXh0IHwgdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvQmluZGluZ0NvbnRleHQgJiYgb0JpbmRpbmdDb250ZXh0LmdldEJpbmRpbmcoKTtcblx0XHRcdGlmIChvQmluZGluZykge1xuXHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0Y29uc3Qgc1N0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldENvbnRyb2xSZWZyZXNoU3RyYXRlZ3lGb3JDb250ZXh0UGF0aChvT1BMYXlvdXQsIHNNZXRhUGF0aCk7XG5cdFx0XHRcdGlmIChzU3RyYXRlZ3kgPT09IFwic2VsZlwiKSB7XG5cdFx0XHRcdFx0Ly8gUmVmcmVzaCBtYWluIGNvbnRleHQgYW5kIDEtMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgb3IgT1Bcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvQmluZGluZ0NvbnRleHQuZ2V0TW9kZWwoKSxcblx0XHRcdFx0XHRcdG9NZXRhTW9kZWwgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCksXG5cdFx0XHRcdFx0XHRvTmF2aWdhdGlvblByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIE1ldGFNb2RlbE5hdlByb3BlcnR5PiA9XG5cdFx0XHRcdFx0XHRcdChDb21tb25VdGlscy5nZXRDb250ZXh0UGF0aFByb3BlcnRpZXMob01ldGFNb2RlbCwgc01ldGFQYXRoLCB7XG5cdFx0XHRcdFx0XHRcdFx0JGtpbmQ6IFwiTmF2aWdhdGlvblByb3BlcnR5XCJcblx0XHRcdFx0XHRcdFx0fSkgYXMgUmVjb3JkPHN0cmluZywgTWV0YU1vZGVsTmF2UHJvcGVydHk+KSB8fCB7fSxcblx0XHRcdFx0XHRcdGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0ID0gT2JqZWN0LmtleXMob05hdmlnYXRpb25Qcm9wZXJ0aWVzKS5yZWR1Y2UoZnVuY3Rpb24gKFxuXHRcdFx0XHRcdFx0XHRhUHJldjogeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIH1bXSxcblx0XHRcdFx0XHRcdFx0c05hdlByb3A6IHN0cmluZ1xuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvTmF2aWdhdGlvblByb3BlcnRpZXNbc05hdlByb3BdLiRpc0NvbGxlY3Rpb24gIT09IHRydWUpIHtcblx0XHRcdFx0XHRcdFx0XHRhUHJldi5wdXNoKHsgJE5hdmlnYXRpb25Qcm9wZXJ0eVBhdGg6IHNOYXZQcm9wIH0pO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBhUHJldjtcblx0XHRcdFx0XHRcdH0sIFtdKSxcblx0XHRcdFx0XHRcdGFQcm9wZXJ0aWVzOiAoeyAkTmF2aWdhdGlvblByb3BlcnR5UGF0aDogc3RyaW5nIH0gfCB7ICRQcm9wZXJ0eVBhdGg6IHN0cmluZyB9KVtdID0gW3sgJFByb3BlcnR5UGF0aDogXCIqXCIgfV0sXG5cdFx0XHRcdFx0XHRzR3JvdXBJZCA9IG9CaW5kaW5nLmdldEdyb3VwSWQoKTtcblxuXHRcdFx0XHRcdG9CaW5kaW5nQ29udGV4dC5yZXF1ZXN0U2lkZUVmZmVjdHMoYVByb3BlcnRpZXMuY29uY2F0KGFOYXZQcm9wZXJ0aWVzVG9SZXF1ZXN0KSwgc0dyb3VwSWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNTdHJhdGVneSA9PT0gXCJpbmNsdWRpbmdEZXBlbmRlbnRzXCIpIHtcblx0XHRcdFx0XHQvLyBDb21wbGV0ZSByZWZyZXNoXG5cdFx0XHRcdFx0b0JpbmRpbmcucmVmcmVzaCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgT2JqZWN0UGFnZTogJHtvT1BMYXlvdXQuZ2V0SWQoKX0gd2FzIG5vdCByZWZyZXNoZWQuIE5vIGJpbmRpbmcgZm91bmQhYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5tLlNlZ21lbnRlZEJ1dHRvblwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChvU2VnbWVudGVkQnV0dG9uOiBTZWdtZW50ZWRCdXR0b24pOiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRzZWxlY3RlZEtleTogb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpXG5cdFx0XHR9O1xuXHRcdH0sXG5cdFx0YXBwbHk6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9TZWdtZW50ZWRCdXR0b246IFNlZ21lbnRlZEJ1dHRvbiwgb0NvbnRyb2xTdGF0ZT86IHsgc2VsZWN0ZWRLZXk6IHN0cmluZyB9KTogdm9pZCB7XG5cdFx0XHRpZiAob0NvbnRyb2xTdGF0ZT8uc2VsZWN0ZWRLZXkgJiYgb0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSAhPT0gb1NlZ21lbnRlZEJ1dHRvbi5nZXRTZWxlY3RlZEtleSgpKSB7XG5cdFx0XHRcdG9TZWdtZW50ZWRCdXR0b24uc2V0U2VsZWN0ZWRLZXkob0NvbnRyb2xTdGF0ZS5zZWxlY3RlZEtleSk7XG5cdFx0XHRcdGlmIChvU2VnbWVudGVkQnV0dG9uLmdldFBhcmVudCgpPy5pc0EoXCJzYXAudWkubWRjLkFjdGlvblRvb2xiYXJcIikpIHtcblx0XHRcdFx0XHRvU2VnbWVudGVkQnV0dG9uLmZpcmVFdmVudChcInNlbGVjdGlvbkNoYW5nZVwiKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0XCJzYXAubS5TZWxlY3RcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1NlbGVjdDogU2VsZWN0KTogeyBzZWxlY3RlZEtleTogc3RyaW5nIH0ge1xuXHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0c2VsZWN0ZWRLZXk6IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKVxuXHRcdFx0fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBvU2VsZWN0OiBTZWxlY3QsIG9Db250cm9sU3RhdGU/OiB7IHNlbGVjdGVkS2V5OiBzdHJpbmcgfSk6IHZvaWQge1xuXHRcdFx0aWYgKG9Db250cm9sU3RhdGU/LnNlbGVjdGVkS2V5ICYmIG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkgIT09IG9TZWxlY3QuZ2V0U2VsZWN0ZWRLZXkoKSkge1xuXHRcdFx0XHRvU2VsZWN0LnNldFNlbGVjdGVkS2V5KG9Db250cm9sU3RhdGUuc2VsZWN0ZWRLZXkpO1xuXHRcdFx0XHRpZiAob1NlbGVjdC5nZXRQYXJlbnQoKT8uaXNBKFwic2FwLnVpLm1kYy5BY3Rpb25Ub29sYmFyXCIpKSB7XG5cdFx0XHRcdFx0b1NlbGVjdC5maXJlRXZlbnQoXCJjaGFuZ2VcIik7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLmYuRHluYW1pY1BhZ2VcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob0R5bmFtaWNQYWdlOiBEeW5hbWljUGFnZSk6IHsgaGVhZGVyRXhwYW5kZWQ6IGJvb2xlYW4gfSB7XG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRoZWFkZXJFeHBhbmRlZDogb0R5bmFtaWNQYWdlLmdldEhlYWRlckV4cGFuZGVkKClcblx0XHRcdH07XG5cdFx0fSxcblx0XHRhcHBseTogZnVuY3Rpb24gKG9EeW5hbWljUGFnZTogRHluYW1pY1BhZ2UsIG9Db250cm9sU3RhdGU/OiB7IGhlYWRlckV4cGFuZGVkOiBib29sZWFuIH0pOiB2b2lkIHtcblx0XHRcdGlmIChvQ29udHJvbFN0YXRlKSB7XG5cdFx0XHRcdG9EeW5hbWljUGFnZS5zZXRIZWFkZXJFeHBhbmRlZChvQ29udHJvbFN0YXRlLmhlYWRlckV4cGFuZGVkKTtcblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIjoge1xuXHRcdHJldHJpZXZlOiBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldykge1xuXHRcdFx0Y29uc3Qgb0NvbnRyb2xsZXIgPSBvVmlldy5nZXRDb250cm9sbGVyKCk7XG5cdFx0XHRpZiAob0NvbnRyb2xsZXIgJiYgb0NvbnRyb2xsZXIudmlld1N0YXRlKSB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbGxlci52aWV3U3RhdGUucmV0cmlldmVWaWV3U3RhdGUoKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fTtcblx0XHR9LFxuXHRcdGFwcGx5OiBhc3luYyBmdW5jdGlvbiAob1ZpZXc6IEZFVmlldywgb0NvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsIHNraXBNZXJnZT86IGJvb2xlYW4pIHtcblx0XHRcdGNvbnN0IG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXHRcdFx0aWYgKG9Db250cm9sbGVyICYmIG9Db250cm9sbGVyLnZpZXdTdGF0ZSAmJiBvTmF2UGFyYW1ldGVycykge1xuXHRcdFx0XHRyZXR1cm4gb0NvbnRyb2xsZXIudmlld1N0YXRlLmFwcGx5Vmlld1N0YXRlKG9Db250cm9sU3RhdGUsIG9OYXZQYXJhbWV0ZXJzLCBza2lwTWVyZ2UpO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0cmVmcmVzaEJpbmRpbmc6IGFzeW5jIGZ1bmN0aW9uIChvVmlldzogRkVWaWV3KSB7XG5cdFx0XHRjb25zdCBvQ29udHJvbGxlciA9IG9WaWV3LmdldENvbnRyb2xsZXIoKTtcblx0XHRcdGlmIChvQ29udHJvbGxlciAmJiBvQ29udHJvbGxlci52aWV3U3RhdGUpIHtcblx0XHRcdFx0cmV0dXJuIG9Db250cm9sbGVyLnZpZXdTdGF0ZS5yZWZyZXNoVmlld0JpbmRpbmdzKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC51aS5jb3JlLkNvbXBvbmVudENvbnRhaW5lclwiOiB7XG5cdFx0cmV0cmlldmU6IGFzeW5jIGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIG9Db21wb25lbnRDb250YWluZXI6IENvbXBvbmVudENvbnRhaW5lcik6IFByb21pc2U8b2JqZWN0PiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMucmV0cmlldmVDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB7fSBhcyBvYmplY3Q7XG5cdFx0fSxcblx0XHRhcHBseTogYXN5bmMgZnVuY3Rpb24gKFxuXHRcdFx0dGhpczogVmlld1N0YXRlLFxuXHRcdFx0b0NvbXBvbmVudENvbnRhaW5lcjogQ29tcG9uZW50Q29udGFpbmVyLFxuXHRcdFx0b0NvbnRyb2xTdGF0ZTogb2JqZWN0LFxuXHRcdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyXG5cdFx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0XHRjb25zdCBvQ29tcG9uZW50ID0gb0NvbXBvbmVudENvbnRhaW5lci5nZXRDb21wb25lbnRJbnN0YW5jZSgpO1xuXHRcdFx0aWYgKG9Db21wb25lbnQpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuYXBwbHlDb250cm9sU3RhdGUob0NvbXBvbmVudC5nZXRSb290Q29udHJvbCgpLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRcInNhcC5zYWMuZGYuY2hhbmdlSGFuZGxlci5NdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlclwiOiB7XG5cdFx0cmV0cmlldmU6IGZ1bmN0aW9uIChjb250cm9sOiBNdWx0aURpbU1vZGVsQ2hhbmdlSGFuZGxlcik6IHVua25vd24ge1xuXHRcdFx0cmV0dXJuIGNvbnRyb2wuX2dldE11bHRpRGltTW9kZWwoKS5zZXJpYWxpemUoXCJJTkFfUkVQT1NJVE9SWV9ERUxUQVwiKTtcblx0XHR9LFxuXHRcdGFwcGx5OiBmdW5jdGlvbiAoY29udHJvbDogTXVsdGlEaW1Nb2RlbENoYW5nZUhhbmRsZXIsIGNvbnRyb2xTdGF0ZTogdW5rbm93bik6IHZvaWQge1xuXHRcdFx0aWYgKGNvbnRyb2xTdGF0ZSkge1xuXHRcdFx0XHRyZXR1cm4gY29udHJvbC5fZ2V0TXVsdGlEaW1Nb2RlbCgpLmRlc2VyaWFsaXplKGNvbnRyb2xTdGF0ZSwgXCJJTkFfUkVQT1NJVE9SWV9ERUxUQVwiKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gb2ZmZXJpbmcgaG9va3MgZm9yIHN0YXRlIGhhbmRsaW5nXG4gKlxuICogSWYgeW91IG5lZWQgdG8gbWFpbnRhaW4gYSBzcGVjaWZpYyBzdGF0ZSBmb3IgeW91ciBhcHBsaWNhdGlvbiwgeW91IGNhbiB1c2UgdGhlIGNvbnRyb2xsZXIgZXh0ZW5zaW9uLlxuICpcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjg1LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuVmlld1N0YXRlXCIpXG5jbGFzcyBWaWV3U3RhdGUgZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBfaVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI6IG51bWJlcjtcblxuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZDogUHJvbWlzZTx1bmtub3duPjtcblxuXHRwcml2YXRlIF9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU/OiBGdW5jdGlvbjtcblxuXHRwcm90ZWN0ZWQgYmFzZSE6IFBhZ2VDb250cm9sbGVyO1xuXG5cdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG5cdGNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGU6IHN0cmluZ1tdID0gW107XG5cblx0aW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5OiBzdHJpbmdbXSA9IFtdO1xuXG5cdHZpZXdTdGF0ZUNvbnRyb2xzOiBNYW5hZ2VkT2JqZWN0W10gPSBbXTtcblxuXHQvKipcblx0ICogQ29uc3RydWN0b3IuXG5cdCAqL1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyID0gMDtcblx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZCA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG5cdFx0XHR0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmUgPSByZXNvbHZlO1xuXHRcdH0pO1xuXHR9XG5cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIHJlZnJlc2hWaWV3QmluZGluZ3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYUNvbnRyb2xzID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRhQ29udHJvbHNcblx0XHRcdC5maWx0ZXIoKG9Db250cm9sKSA9PiB7XG5cdFx0XHRcdHJldHVybiBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBPE1hbmFnZWRPYmplY3Q+KFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHtcblx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbih0aGlzLnJlZnJlc2hDb250cm9sQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gb1Byb21pc2VDaGFpbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBhZGQgYWxsIGNvbnRyb2xzIHJlbGV2YW50IGZvciByZWZyZXNoaW5nIHRvIHRoZSBwcm92aWRlZCBjb250cm9sIGFycmF5LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9scyhhQ29sbGVjdGVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSkge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyByZWZyZXNoQ29udHJvbEJpbmRpbmcob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlciA9IHRoaXMuZ2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRpZiAodHlwZW9mIG9Db250cm9sUmVmcmVzaEJpbmRpbmdIYW5kbGVyLnJlZnJlc2hCaW5kaW5nICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdExvZy5pbmZvKGByZWZyZXNoQmluZGluZyBoYW5kbGVyIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfSBpcyBub3QgcHJvdmlkZWRgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihvQ29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlci5yZWZyZXNoQmluZGluZy5iaW5kKHRoaXMsIG9Db250cm9sKSk7XG5cdFx0fVxuXHRcdHJldHVybiBvUHJvbWlzZUNoYWluO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgYSBtYXAgb2YgPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+IGZ1bmN0aW9uIGZvciBhIGNlcnRhaW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBoYW5kbGVyIGZvclxuXHQgKiBAcmV0dXJucyBBIHBsYWluIG9iamVjdCB3aXRoIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqL1xuXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0Z2V0Q29udHJvbFJlZnJlc2hCaW5kaW5nSGFuZGxlcihvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHtcblx0XHRyZWZyZXNoQmluZGluZz86IChvQ29udHJvbDogTWFuYWdlZE9iamVjdCkgPT4gdm9pZDtcblx0fSB7XG5cdFx0Y29uc3Qgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcjoge1xuXHRcdFx0cmVmcmVzaEJpbmRpbmc/OiAob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpID0+IHZvaWQ7XG5cdFx0fSA9IHt9O1xuXHRcdGlmIChvQ29udHJvbCkge1xuXHRcdFx0Zm9yIChjb25zdCBzVHlwZSBpbiBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXApIHtcblx0XHRcdFx0aWYgKG9Db250cm9sLmlzQShzVHlwZSkpIHtcblx0XHRcdFx0XHQvLyBwYXNzIG9ubHkgdGhlIHJlZnJlc2hCaW5kaW5nIGhhbmRsZXIgaW4gYW4gb2JqZWN0IHNvIHRoYXQgOlxuXHRcdFx0XHRcdC8vIDEuIEFwcGxpY2F0aW9uIGhhcyBhY2Nlc3Mgb25seSB0byByZWZyZXNoQmluZGluZyBhbmQgbm90IGFwcGx5IGFuZCByZXRlcml2ZSBhdCB0aGlzIHN0YWdlXG5cdFx0XHRcdFx0Ly8gMi4gQXBwbGljYXRpb24gbW9kaWZpY2F0aW9ucyB0byB0aGUgb2JqZWN0IHdpbGwgYmUgcmVmbGVjdGVkIGhlcmUgKGFzIHdlIHBhc3MgYnkgcmVmZXJlbmNlKVxuXHRcdFx0XHRcdG9SZWZyZXNoQmluZGluZ0hhbmRsZXJbXCJyZWZyZXNoQmluZGluZ1wiXSA9XG5cdFx0XHRcdFx0XHQoX21Db250cm9sU3RhdGVIYW5kbGVyTWFwW3NUeXBlIGFzIGtleW9mIENvbnRyb2xTdGF0ZU1hcF0ucmVmcmVzaEJpbmRpbmcgYXMgKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkKSB8fFxuXHRcdFx0XHRcdFx0e307XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdEJpbmRpbmdSZWZyZXNoSGFuZGxlcihvQ29udHJvbCwgb1JlZnJlc2hCaW5kaW5nSGFuZGxlcik7XG5cdFx0cmV0dXJuIG9SZWZyZXNoQmluZGluZ0hhbmRsZXI7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZWZyZXNoQmluZGluZzwvY29kZT4gZnVuY3Rpb24gZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gX29Db250cm9sIFRoZSBjb250cm9sIGZvciB3aGljaCB0aGUgcmVmcmVzaCBoYW5kbGVyIGlzIGFkYXB0ZWQuXG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyIEEgcGxhaW4gb2JqZWN0IHdoaWNoIGNhbiBoYXZlIG9uZSBmdW5jdGlvbjogPGNvZGU+cmVmcmVzaEJpbmRpbmc8L2NvZGU+XG5cdCAqIEBwYXJhbSBfb0NvbnRyb2xIYW5kbGVyLnJlZnJlc2hCaW5kaW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YWRhcHRCaW5kaW5nUmVmcmVzaEhhbmRsZXIoXG5cdFx0X29Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdF9vQ29udHJvbEhhbmRsZXI6IHtcblx0XHRcdHJlZnJlc2hCaW5kaW5nPzogKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiB2b2lkO1xuXHRcdH1cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogQ2FsbGVkIHdoZW4gdGhlIGFwcGxpY2F0aW9uIGlzIHN1c3BlbmRlZCBkdWUgdG8ga2VlcC1hbGl2ZSBtb2RlLlxuXHQgKlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdG9uU3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZW5cblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxsZWQgd2hlbiB0aGUgYXBwbGljYXRpb24gaXMgcmVzdG9yZWQgZHVlIHRvIGtlZXAtYWxpdmUgbW9kZS5cblx0ICpcblx0ICogQHB1YmxpY1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRvblJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGVuXG5cdH1cblxuXHQvKipcblx0ICogRGVzdHJ1Y3RvciBtZXRob2QgZm9yIG9iamVjdHMuXG5cdCAqL1xuXHRkZXN0cm95KCk6IHZvaWQge1xuXHRcdGRlbGV0ZSB0aGlzLl9wSW5pdGlhbFN0YXRlQXBwbGllZFJlc29sdmU7XG5cdFx0c3VwZXIuZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhlbHBlciBmdW5jdGlvbiB0byBlbmFibGUgbXVsdGkgb3ZlcnJpZGUuIEl0IGlzIGFkZGluZyBhbiBhZGRpdGlvbmFsIHBhcmFtZXRlciAoYXJyYXkpIHRvIHRoZSBwcm92aWRlZFxuXHQgKiBmdW5jdGlvbiAoYW5kIGl0cyBwYXJhbWV0ZXJzKSwgdGhhdCB3aWxsIGJlIGV2YWx1YXRlZCB2aWEgPGNvZGU+UHJvbWlzZS5hbGw8L2NvZGU+LlxuXHQgKlxuXHQgKiBAcGFyYW0gZm5DYWxsIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWRcblx0ICogQHBhcmFtIGFyZ3Ncblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRvIGJlIHJlc29sdmVkIHdpdGggdGhlIHJlc3VsdCBvZiBhbGwgb3ZlcnJpZGVzXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGNvbGxlY3RSZXN1bHRzKGZuQ2FsbDogRnVuY3Rpb24sIC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8Q29udHJvbFtdPiB7XG5cdFx0Y29uc3QgYVJlc3VsdHM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdGFyZ3MucHVzaChhUmVzdWx0cyk7XG5cdFx0Zm5DYWxsLmFwcGx5KHRoaXMsIGFyZ3MpO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdWx0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ3VzdG9taXplIHRoZSA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPiBmdW5jdGlvbnMgZm9yIGEgY2VydGFpbiBjb250cm9sLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIGNvbnRyb2wgdG8gZ2V0IHN0YXRlIGhhbmRsZXIgZm9yXG5cdCAqIEBwYXJhbSBhQ29udHJvbEhhbmRsZXIgQSBsaXN0IG9mIHBsYWluIG9iamVjdHMgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0YWRhcHRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LCBhQ29udHJvbEhhbmRsZXI6IG9iamVjdFtdKSB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIDxjb2RlPnJldHJpZXZlPC9jb2RlPiBhbmQgPGNvZGU+YXBwbHk8L2NvZGU+IGZ1bmN0aW9ucyBmb3IgYSBjZXJ0YWluIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgY29udHJvbCB0byBnZXQgc3RhdGUgaGFuZGxlciBmb3Jcblx0ICogQHJldHVybnMgQSBwbGFpbiBvYmplY3Qgd2l0aCB0d28gZnVuY3Rpb25zOiA8Y29kZT5yZXRyaWV2ZTwvY29kZT4gYW5kIDxjb2RlPmFwcGx5PC9jb2RlPlxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRDb250cm9sU3RhdGVIYW5kbGVyKG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0KTogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10ge1xuXHRcdGNvbnN0IGFJbnRlcm5hbENvbnRyb2xTdGF0ZUhhbmRsZXI6IENvbnRyb2xTdGF0ZUhhbmRsZXI8TWFuYWdlZE9iamVjdCwgb2JqZWN0PltdID0gW10sXG5cdFx0XHRhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcjogQ29udHJvbFN0YXRlSGFuZGxlcjxNYW5hZ2VkT2JqZWN0LCBvYmplY3Q+W10gPSBbXTtcblx0XHRpZiAob0NvbnRyb2wpIHtcblx0XHRcdGZvciAoY29uc3Qgc1R5cGUgaW4gX21Db250cm9sU3RhdGVIYW5kbGVyTWFwKSB7XG5cdFx0XHRcdGlmIChvQ29udHJvbC5pc0Eoc1R5cGUpKSB7XG5cdFx0XHRcdFx0Ly8gYXZvaWQgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiBpbnRlcm5hbCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBcblx0XHRcdFx0XHRhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLnB1c2goXG5cdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKHt9LCBfbUNvbnRyb2xTdGF0ZUhhbmRsZXJNYXBbc1R5cGUgYXMga2V5b2YgQ29udHJvbFN0YXRlTWFwXSkgYXMgQ29udHJvbFN0YXRlSGFuZGxlcjxcblx0XHRcdFx0XHRcdFx0TWFuYWdlZE9iamVjdCxcblx0XHRcdFx0XHRcdFx0b2JqZWN0XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCwgYUN1c3RvbUNvbnRyb2xTdGF0ZUhhbmRsZXIpO1xuXHRcdHJldHVybiBhSW50ZXJuYWxDb250cm9sU3RhdGVIYW5kbGVyLmNvbmNhdChhQ3VzdG9tQ29udHJvbFN0YXRlSGFuZGxlcik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBzaG91bGQgYWRkIGFsbCBjb250cm9scyBmb3IgZ2l2ZW4gdmlldyB0aGF0IHNob3VsZCBiZSBjb25zaWRlcmVkIGZvciB0aGUgc3RhdGUgaGFuZGxpbmcgdG8gdGhlIHByb3ZpZGVkIGNvbnRyb2wgYXJyYXkuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBfYUNvbGxlY3RlZENvbnRyb2xzIFRoZSBjb2xsZWN0ZWQgY29udHJvbHNcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHRhZGFwdFN0YXRlQ29udHJvbHMoX2FDb2xsZWN0ZWRDb250cm9sczogTWFuYWdlZE9iamVjdFtdKTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBrZXkgdG8gYmUgdXNlZCBmb3IgZ2l2ZW4gY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIG9Db250cm9sIFRoZSBjb250cm9sIHRvIGdldCBzdGF0ZSBrZXkgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBrZXkgdG8gYmUgdXNlZCBmb3Igc3RvcmluZyB0aGUgY29udHJvbHMgc3RhdGVcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRnZXRTdGF0ZUtleShvQ29udHJvbDogTWFuYWdlZE9iamVjdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0VmlldygpLmdldExvY2FsSWQob0NvbnRyb2wuZ2V0SWQoKSkgfHwgb0NvbnRyb2wuZ2V0SWQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgdmlldyBzdGF0ZSBvZiB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICogV2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBtb3JlIHRoYW4gb25jZSBiZWZvcmUgZmluaXNoaW5nLCBhbGwgYnV0IHRoZSBmaW5hbCByZXNwb25zZSB3aWxsIHJlc29sdmUgdG8gPGNvZGU+dW5kZWZpbmVkPC9jb2RlPi5cblx0ICpcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHJlc29sdmluZyB0aGUgdmlldyBzdGF0ZVxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVWaWV3U3RhdGUoKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuXHRcdCsrdGhpcy5faVJldHJpZXZpbmdTdGF0ZUNvdW50ZXI7XG5cdFx0bGV0IG9WaWV3U3RhdGU6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5cdFx0dHJ5IHtcblx0XHRcdGF3YWl0IHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkO1xuXHRcdFx0Y29uc3QgYUNvbnRyb2xzOiAoTWFuYWdlZE9iamVjdCB8IHVuZGVmaW5lZClbXSA9IGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5hZGFwdFN0YXRlQ29udHJvbHMpO1xuXHRcdFx0Y29uc3QgYVJlc29sdmVkU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG5cdFx0XHRcdChcblx0XHRcdFx0XHRhQ29udHJvbHMuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIG9Db250cm9sICYmIG9Db250cm9sLmlzQSAmJiBvQ29udHJvbC5pc0E8TWFuYWdlZE9iamVjdD4oXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHRcdH0pIGFzIE1hbmFnZWRPYmplY3RbXVxuXHRcdFx0XHQpLm1hcChhc3luYyAob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXRyaWV2ZUNvbnRyb2xTdGF0ZShvQ29udHJvbCkudGhlbigodlJlc3VsdDogdW5rbm93bikgPT4ge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0a2V5OiB0aGlzLmdldFN0YXRlS2V5KG9Db250cm9sKSxcblx0XHRcdFx0XHRcdFx0dmFsdWU6IHZSZXN1bHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pXG5cdFx0XHQpO1xuXHRcdFx0b1ZpZXdTdGF0ZSA9IGFSZXNvbHZlZFN0YXRlcy5yZWR1Y2UoZnVuY3Rpb24gKG9TdGF0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBtU3RhdGU6IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH0pIHtcblx0XHRcdFx0Y29uc3Qgb0N1cnJlbnRTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0b0N1cnJlbnRTdGF0ZVttU3RhdGUua2V5XSA9IG1TdGF0ZS52YWx1ZTtcblx0XHRcdFx0cmV0dXJuIG1lcmdlT2JqZWN0cyhvU3RhdGVzLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHRcdGNvbnN0IG1BZGRpdGlvbmFsU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKHRoaXMuX3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpKTtcblx0XHRcdGlmIChtQWRkaXRpb25hbFN0YXRlcyAmJiBPYmplY3Qua2V5cyhtQWRkaXRpb25hbFN0YXRlcykubGVuZ3RoKSB7XG5cdFx0XHRcdG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA9IG1BZGRpdGlvbmFsU3RhdGVzO1xuXHRcdFx0fVxuXHRcdH0gZmluYWxseSB7XG5cdFx0XHQtLXRoaXMuX2lSZXRyaWV2aW5nU3RhdGVDb3VudGVyO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLl9pUmV0cmlldmluZ1N0YXRlQ291bnRlciA9PT0gMCA/IG9WaWV3U3RhdGUgOiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXh0ZW5kIHRoZSBtYXAgb2YgYWRkaXRpb25hbCBzdGF0ZXMgKG5vdCBjb250cm9sIGJvdW5kKSB0byBiZSBhZGRlZCB0byB0aGUgY3VycmVudCB2aWV3IHN0YXRlIG9mIHRoZSBnaXZlbiB2aWV3LlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gbUFkZGl0aW9uYWxTdGF0ZXMgVGhlIGFkZGl0aW9uYWwgc3RhdGVcblx0ICogQHByb3RlY3RlZFxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdHJldHJpZXZlQWRkaXRpb25hbFN0YXRlcyhtQWRkaXRpb25hbFN0YXRlczogb2JqZWN0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbWFwIG9mIGFkZGl0aW9uYWwgc3RhdGVzIChub3QgY29udHJvbCBib3VuZCkgdG8gYmUgYWRkZWQgdG8gdGhlIGN1cnJlbnQgdmlldyBzdGF0ZSBvZiB0aGUgZ2l2ZW4gdmlldy5cblx0ICpcblx0ICogQHJldHVybnMgQWRkaXRpb25hbCB2aWV3IHN0YXRlc1xuXHQgKi9cblx0X3JldHJpZXZlQWRkaXRpb25hbFN0YXRlcygpOiB1bmtub3duIHtcblx0XHRjb25zdCBtQWRkaXRpb25hbFN0YXRlcyA9IHt9O1xuXHRcdHRoaXMuYmFzZS52aWV3U3RhdGUucmV0cmlldmVBZGRpdGlvbmFsU3RhdGVzKG1BZGRpdGlvbmFsU3RhdGVzKTtcblx0XHRyZXR1cm4gbUFkZGl0aW9uYWxTdGF0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBwYXJhbSBvQ29udHJvbCBUaGUgb2JqZWN0IHRvIGdldCB0aGUgc3RhdGUgZm9yXG5cdCAqIEByZXR1cm5zIFRoZSBzdGF0ZSBmb3IgdGhlIGdpdmVuIGNvbnRyb2xcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgcmV0cmlldmVDb250cm9sU3RhdGUob0NvbnRyb2w6IE1hbmFnZWRPYmplY3QpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdGNvbnN0IGFDb250cm9sU3RhdGVIYW5kbGVycyA9IHRoaXMuZ2V0Q29udHJvbFN0YXRlSGFuZGxlcihvQ29udHJvbCk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLm1hcChhc3luYyAobUNvbnRyb2xTdGF0ZUhhbmRsZXIpID0+IHtcblx0XHRcdFx0aWYgKHR5cGVvZiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZSAhPT0gXCJmdW5jdGlvblwiKSB7XG5cdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjb250cm9sU3RhdGVIYW5kbGVyLnJldHJpZXZlIGlzIG5vdCBhIGZ1bmN0aW9uIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBtQ29udHJvbFN0YXRlSGFuZGxlci5yZXRyaWV2ZS5jYWxsKHRoaXMsIG9Db250cm9sKTtcblx0XHRcdH0pXG5cdFx0KS50aGVuKChhU3RhdGVzOiBvYmplY3RbXSkgPT4ge1xuXHRcdFx0cmV0dXJuIGFTdGF0ZXMucmVkdWNlKGZ1bmN0aW9uIChvRmluYWxTdGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9DdXJyZW50U3RhdGU6IG9iamVjdCkge1xuXHRcdFx0XHRyZXR1cm4gbWVyZ2VPYmplY3RzKG9GaW5hbFN0YXRlLCBvQ3VycmVudFN0YXRlKTtcblx0XHRcdH0sIHt9KTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBEZWZpbmVzIHdoZXRoZXIgdGhlIHZpZXcgc3RhdGUgc2hvdWxkIG9ubHkgYmUgYXBwbGllZCBvbmNlIGluaXRpYWxseS5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWR9LlxuXHQgKlxuXHQgKiBJbXBvcnRhbnQ6XG5cdCAqIFlvdSBzaG91bGQgb25seSBvdmVycmlkZSB0aGlzIG1ldGhvZCBmb3IgY3VzdG9tIHBhZ2VzIGFuZCBub3QgZm9yIHRoZSBzdGFuZGFyZCBMaXN0UmVwb3J0UGFnZSBhbmQgT2JqZWN0UGFnZSFcblx0ICpcblx0ICogQHJldHVybnMgSWYgPGNvZGU+dHJ1ZTwvY29kZT4sIG9ubHkgdGhlIGluaXRpYWwgdmlldyBzdGF0ZSBpcyBhcHBsaWVkIG9uY2UsXG5cdCAqIGVsc2UgYW55IG5ldyB2aWV3IHN0YXRlIGlzIGFsc28gYXBwbGllZCBvbiBmb2xsb3ctdXAgY2FsbHMgKGRlZmF1bHQpXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5JbnN0ZWFkKVxuXHRhcHBseUluaXRpYWxTdGF0ZU9ubHkoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHQvKipcblx0ICogQXBwbGllcyB0aGUgZ2l2ZW4gdmlldyBzdGF0ZSB0byB0aGlzIGV4dGVuc2lvbnMgdmlldy5cblx0ICpcblx0ICogQHBhcmFtIG9WaWV3U3RhdGUgVGhlIHZpZXcgc3RhdGUgdG8gYXBwbHkgKGNhbiBiZSB1bmRlZmluZWQpXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyIFRoZSBjdXJyZW50IG5hdmlnYXRpb24gcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlIFRoZSBhY3R1YWwgbmF2aWdhdGlvbiB0eXBlXG5cdCAqIEBwYXJhbSBvTmF2UGFyYW1ldGVyLnNlbGVjdGlvblZhcmlhbnQgVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5zZWxlY3Rpb25WYXJpYW50RGVmYXVsdHMgVGhlIHNlbGVjdGlvblZhcmlhbnQgZGVmYXVsdHMgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudCBEZWZpbmVzIHdoZXRoZXIgdGhlIHN0YW5kYXJkIHZhcmlhbnQgbXVzdCBiZSB1c2VkIGluIHZhcmlhbnQgbWFuYWdlbWVudFxuXHQgKiBAcGFyYW0gc2tpcE1lcmdlIEJvb2xlYW4gd2hpY2ggZGV0ZXJtaW5lcyB0byBza2lwIHRoZSBrZXkgdXNlciBzaGluZSB0aHJvdWdoXG5cdCAqIEByZXR1cm5zIFByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRhc3luYyBhcHBseVZpZXdTdGF0ZShcblx0XHRvVmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCxcblx0XHRvTmF2UGFyYW1ldGVyOiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdHNraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuYmFzZS52aWV3U3RhdGUuYXBwbHlJbml0aWFsU3RhdGVPbmx5KCkgJiYgdGhpcy5fZ2V0SW5pdGlhbFN0YXRlQXBwbGllZCgpKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRyeSB7XG5cdFx0XHQvL1NOT1c6IENTMjAyMzAwMDY3NjU4OTcgRm9yIHRyYW5zaWVudCBBcHBTdGF0ZSwgd2UgcmV0dXJuIHdpdGhvdXQgYXBwbHlpbmcgdGhlIHN0YXRlIHRvIGNvbnRyb2xzIGluIFJvb3RDb250YWluZXIncyBjaGlsZHJlbiB2aWV3cyBhcyB0aGVyZSBpcyBubyBzdGF0ZSB0byBhcHBseVxuXHRcdFx0Ly9Pbmx5IG5lZWQgaXMgdG8gcmVzb2x2ZSB0aGUgX3BJbml0aWFsU3RhdGVBcHBsaWVkIHNvIHRoYXQgdXBkYXRlIG9mIEFwcFN0YXRlIGNhbiBzdGlsbCBoYXBwZW5cblx0XHRcdGlmICh0aGlzLl9pc1N0YXRlRW1wdHlGb3JJQXBwU3RhdGVOYXZUeXBlKG9WaWV3U3RhdGUsIG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUpICYmICF0aGlzLl9faXNSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUub25CZWZvcmVTdGF0ZUFwcGxpZWQsIFtdLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKTtcblx0XHRcdGNvbnN0IGFDb250cm9sczogTWFuYWdlZE9iamVjdFtdID0gYXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFkYXB0U3RhdGVDb250cm9scyk7XG5cdFx0XHR0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzID0gYUNvbnRyb2xzO1xuXHRcdFx0bGV0IG9Qcm9taXNlQ2hhaW4gPSBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdGxldCBoYXNWYXJpYW50TWFuYWdlbWVudCA9IGZhbHNlO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiB0aGlzIGVuc3VyZXMgdGhhdCB2YXJpYW50TWFuYWdlbWVudCBjb250cm9sIGlzIGFwcGxpZWQgZmlyc3QgdG8gY2FsY3VsYXRlIGluaXRpYWwgc3RhdGUgZm9yIGRlbHRhIGxvZ2ljXG5cdFx0XHQgKi9cblx0XHRcdGNvbnN0IHNvcnRlZEFkYXB0U3RhdGVDb250cm9scyA9IGFDb250cm9scy5yZWR1Y2UoKG1vZGlmaWVkQ29udHJvbHM6IE1hbmFnZWRPYmplY3RbXSwgY29udHJvbCkgPT4ge1xuXHRcdFx0XHRpZiAoIWNvbnRyb2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gbW9kaWZpZWRDb250cm9scztcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbCA9IGNvbnRyb2wuaXNBKFwic2FwLnVpLmZsLnZhcmlhbnRzLlZhcmlhbnRNYW5hZ2VtZW50XCIpO1xuXHRcdFx0XHRpZiAoIWhhc1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0aGFzVmFyaWFudE1hbmFnZW1lbnQgPSBpc1ZhcmlhbnRNYW5hZ2VtZW50Q29udHJvbDtcblx0XHRcdFx0fVxuXHRcdFx0XHRtb2RpZmllZENvbnRyb2xzID0gaXNWYXJpYW50TWFuYWdlbWVudENvbnRyb2wgPyBbY29udHJvbCwgLi4ubW9kaWZpZWRDb250cm9sc10gOiBbLi4ubW9kaWZpZWRDb250cm9scywgY29udHJvbF07XG5cdFx0XHRcdHJldHVybiBtb2RpZmllZENvbnRyb2xzO1xuXHRcdFx0fSwgW10pO1xuXG5cdFx0XHQvLyBJbiBjYXNlIG9mIG5vIFZhcmlhbnQgTWFuYWdlbWVudCwgdGhpcyBlbnN1cmVzIHRoYXQgaW5pdGlhbCBzdGF0ZXMgaXMgc2V0XG5cdFx0XHRpZiAoIWhhc1ZhcmlhbnRNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdHRoaXMuX3NldEluaXRpYWxTdGF0ZXNGb3JEZWx0YUNvbXB1dGUoKTtcblx0XHRcdH1cblx0XHRcdHNvcnRlZEFkYXB0U3RhdGVDb250cm9sc1xuXHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChvQ29udHJvbCkge1xuXHRcdFx0XHRcdHJldHVybiBvQ29udHJvbC5pc0EoXCJzYXAudWkuYmFzZS5NYW5hZ2VkT2JqZWN0XCIpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgob0NvbnRyb2wpID0+IHtcblx0XHRcdFx0XHRjb25zdCBzS2V5ID0gdGhpcy5nZXRTdGF0ZUtleShvQ29udHJvbCk7XG5cdFx0XHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihcblx0XHRcdFx0XHRcdHRoaXMuYXBwbHlDb250cm9sU3RhdGUuYmluZChcblx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0b0NvbnRyb2wsXG5cdFx0XHRcdFx0XHRcdChvVmlld1N0YXRlID8gb1ZpZXdTdGF0ZVtzS2V5XSA6IHVuZGVmaW5lZCkgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0XHRcdFx0XHRcdG9OYXZQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0XHRcdHNraXBNZXJnZSA/PyBmYWxzZVxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRhd2FpdCBvUHJvbWlzZUNoYWluO1xuXHRcdFx0aWYgKG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUuaUFwcFN0YXRlIHx8IG9OYXZQYXJhbWV0ZXIubmF2aWdhdGlvblR5cGUgPT09IE5hdlR5cGUuaHlicmlkKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHMoXG5cdFx0XHRcdFx0dGhpcy5iYXNlLnZpZXdTdGF0ZS5hcHBseUFkZGl0aW9uYWxTdGF0ZXMsXG5cdFx0XHRcdFx0b1ZpZXdTdGF0ZSA/IG9WaWV3U3RhdGVbQURESVRJT05BTF9TVEFURVNfS0VZXSA6IHVuZGVmaW5lZFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YXdhaXQgdGhpcy5jb2xsZWN0UmVzdWx0cyh0aGlzLmJhc2Uudmlld1N0YXRlLmFwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnMsIG9OYXZQYXJhbWV0ZXIpO1xuXHRcdFx0XHRhd2FpdCB0aGlzLmNvbGxlY3RSZXN1bHRzKHRoaXMuYmFzZS52aWV3U3RhdGUuX2FwcGx5TmF2aWdhdGlvblBhcmFtZXRlcnNUb0ZpbHRlcmJhciwgb05hdlBhcmFtZXRlcik7XG5cdFx0XHR9XG5cdFx0fSBmaW5hbGx5IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGlmICghdGhpcy5faXNTdGF0ZUVtcHR5Rm9ySUFwcFN0YXRlTmF2VHlwZShvVmlld1N0YXRlLCBvTmF2UGFyYW1ldGVyLm5hdmlnYXRpb25UeXBlKSkge1xuXHRcdFx0XHRcdGF3YWl0IHRoaXMuY29sbGVjdFJlc3VsdHModGhpcy5iYXNlLnZpZXdTdGF0ZS5vbkFmdGVyU3RhdGVBcHBsaWVkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0aGlzLl9zZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk7XG5cdFx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRcdExvZy5lcnJvcihlIGFzIHN0cmluZyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRfY2hlY2tJZlZhcmlhbnRJZElzQXZhaWxhYmxlKG9WTTogVmFyaWFudE1hbmFnZW1lbnQsIHNWYXJpYW50SWQ6IHN0cmluZyB8IG51bGwpOiBib29sZWFuIHtcblx0XHRjb25zdCBhVmFyaWFudHMgPSBvVk0uZ2V0VmFyaWFudHMoKTtcblx0XHRsZXQgYklzQ29udHJvbFN0YXRlVmFyaWFudEF2YWlsYWJsZSA9IGZhbHNlO1xuXHRcdGFWYXJpYW50cy5mb3JFYWNoKGZ1bmN0aW9uIChvVmFyaWFudCkge1xuXHRcdFx0aWYgKG9WYXJpYW50LmdldEtleSgpID09PSBzVmFyaWFudElkKSB7XG5cdFx0XHRcdGJJc0NvbnRyb2xTdGF0ZVZhcmlhbnRBdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBiSXNDb250cm9sU3RhdGVWYXJpYW50QXZhaWxhYmxlO1xuXHR9XG5cblx0X3NldEluaXRpYWxTdGF0ZUFwcGxpZWQoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSkge1xuXHRcdFx0Y29uc3QgcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlID0gdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHRcdFx0ZGVsZXRlIHRoaXMuX3BJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZTtcblx0XHRcdHBJbml0aWFsU3RhdGVBcHBsaWVkUmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdF9nZXRJbml0aWFsU3RhdGVBcHBsaWVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhdGhpcy5fcEluaXRpYWxTdGF0ZUFwcGxpZWRSZXNvbHZlO1xuXHR9XG5cblx0X2lzU3RhdGVFbXB0eUZvcklBcHBTdGF0ZU5hdlR5cGUodmlld1N0YXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZCwgbmF2VHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuICghdmlld1N0YXRlIHx8IE9iamVjdC5rZXlzKHZpZXdTdGF0ZSkubGVuZ3RoID09PSAwKSAmJiBuYXZUeXBlID09IE5hdlR5cGUuaUFwcFN0YXRlO1xuXHR9XG5cblx0X19pc1Jvb3RWaWV3Q29udHJvbGxlcigpOiBib29sZWFuIHtcblx0XHRjb25zdCByb290Vmlld0NvbnRyb2xsZXIgPSB0aGlzLmJhc2UuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmlzQTxOYXZDb250YWluZXJDb250cm9sbGVyPihcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiKSB8fFxuXHRcdFx0cm9vdFZpZXdDb250cm9sbGVyLmlzQTxGY2xDb250cm9sbGVyPihcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiKVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSG9vayB0byByZWFjdCBiZWZvcmUgYSBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyBpcyBhcHBsaWVkLlxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gYVByb21pc2VzIEV4dGVuc2libGUgYXJyYXkgb2YgcHJvbWlzZXMgdG8gYmUgcmVzb2x2ZWQgYmVmb3JlIGNvbnRpbnVpbmdcblx0ICogQHBhcmFtIG5hdmlnYXRpb25UeXBlIE5hdmlnYXRpb24gdHlwZSByZXNwb25zaWJsZSBmb3IgdGhlIGFwcGx5aW5nIHRoZSBzdGF0ZVxuXHQgKiBAcHJvdGVjdGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGV4dGVuc2libGUoT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXIpXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcblx0b25CZWZvcmVTdGF0ZUFwcGxpZWQoYVByb21pc2VzOiBQcm9taXNlPHVua25vd24+LCBuYXZpZ2F0aW9uVHlwZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEhvb2sgdG8gcmVhY3Qgd2hlbiBzdGF0ZSBmb3IgZ2l2ZW4gdmlldyB3YXMgYXBwbGllZC5cblx0ICpcblx0ICogVGhpcyBmdW5jdGlvbiBpcyBtZWFudCB0byBiZSBpbmRpdmlkdWFsbHkgb3ZlcnJpZGRlbiBieSBjb25zdW1pbmcgY29udHJvbGxlcnMsIGJ1dCBub3QgdG8gYmUgY2FsbGVkIGRpcmVjdGx5LlxuXHQgKiBUaGUgb3ZlcnJpZGUgZXhlY3V0aW9uIGlzOiB7QGxpbmsgc2FwLnVpLmNvcmUubXZjLk92ZXJyaWRlRXhlY3V0aW9uLkFmdGVyfS5cblx0ICpcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRvbkFmdGVyU3RhdGVBcHBsaWVkKGFQcm9taXNlczogUHJvbWlzZTx1bmtub3duPik6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRlblxuXHR9XG5cblx0LyoqXG5cdCAqIEFwcGx5aW5nIGFkZGl0aW9uYWwsIG5vdCBjb250cm9sIHJlbGF0ZWQsIHN0YXRlcyAtIGlzIGNhbGxlZCBvbmx5IGlmIG5hdmlnYXRpb24gdHlwZSBpcyBpQXBwU3RhdGUuXG5cdCAqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgbWVhbnQgdG8gYmUgaW5kaXZpZHVhbGx5IG92ZXJyaWRkZW4gYnkgY29uc3VtaW5nIGNvbnRyb2xsZXJzLCBidXQgbm90IHRvIGJlIGNhbGxlZCBkaXJlY3RseS5cblx0ICogVGhlIG92ZXJyaWRlIGV4ZWN1dGlvbiBpczoge0BsaW5rIHNhcC51aS5jb3JlLm12Yy5PdmVycmlkZUV4ZWN1dGlvbi5BZnRlcn0uXG5cdCAqXG5cdCAqIEBwYXJhbSBvVmlld1N0YXRlIFRoZSBjdXJyZW50IHZpZXcgc3RhdGVcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuXHRhcHBseUFkZGl0aW9uYWxTdGF0ZXMob1ZpZXdTdGF0ZTogb2JqZWN0LCBhUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj4pOiB2b2lkIHtcblx0XHQvLyB0byBiZSBvdmVycmlkZGVuIGlmIG5lZWRlZFxuXHR9XG5cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRfYXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVyc1RvRmlsdGVyYmFyKFxuXHRcdF9vTmF2UGFyYW1ldGVyOiB7XG5cdFx0XHRuYXZpZ2F0aW9uVHlwZTogc3RyaW5nO1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudD86IG9iamVjdDtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnREZWZhdWx0cz86IG9iamVjdDtcblx0XHRcdHJlcXVpcmVzU3RhbmRhcmRWYXJpYW50PzogYm9vbGVhbjtcblx0XHR9LFxuXHRcdF9hUHJvbWlzZXM6IFByb21pc2U8dW5rbm93bj5cblx0KTogdm9pZCB7XG5cdFx0Ly8gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWVkZWRcblx0fVxuXG5cdC8qKlxuXHQgKiBBcHBseSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaXMgbm90IGNhbGxlZCBpZiB0aGUgbmF2aWdhdGlvbiB0eXBlIGlzIGlBcHBTdGF0ZVxuXHQgKlxuXHQgKiBUaGlzIGZ1bmN0aW9uIGlzIG1lYW50IHRvIGJlIGluZGl2aWR1YWxseSBvdmVycmlkZGVuIGJ5IGNvbnN1bWluZyBjb250cm9sbGVycywgYnV0IG5vdCB0byBiZSBjYWxsZWQgZGlyZWN0bHkuXG5cdCAqIFRoZSBvdmVycmlkZSBleGVjdXRpb24gaXM6IHtAbGluayBzYXAudWkuY29yZS5tdmMuT3ZlcnJpZGVFeGVjdXRpb24uQWZ0ZXJ9LlxuXHQgKlxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlciBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gb05hdlBhcmFtZXRlci5uYXZpZ2F0aW9uVHlwZSBUaGUgYWN0dWFsIG5hdmlnYXRpb24gdHlwZVxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudF0gVGhlIHNlbGVjdGlvblZhcmlhbnQgZnJvbSB0aGUgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXIuc2VsZWN0aW9uVmFyaWFudERlZmF1bHRzXSBUaGUgc2VsZWN0aW9uVmFyaWFudCBkZWZhdWx0cyBmcm9tIHRoZSBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbb05hdlBhcmFtZXRlci5yZXF1aXJlc1N0YW5kYXJkVmFyaWFudF0gRGVmaW5lcyB3aGV0aGVyIHRoZSBzdGFuZGFyZCB2YXJpYW50IG11c3QgYmUgdXNlZCBpbiB2YXJpYW50IG1hbmFnZW1lbnRcblx0ICogQHBhcmFtIGFQcm9taXNlcyBFeHRlbnNpYmxlIGFycmF5IG9mIHByb21pc2VzIHRvIGJlIHJlc29sdmVkIGJlZm9yZSBjb250aW51aW5nXG5cdCAqIEBwcm90ZWN0ZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZXh0ZW5zaWJsZShPdmVycmlkZUV4ZWN1dGlvbi5BZnRlcilcblx0YXBwbHlOYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0b05hdlBhcmFtZXRlcjoge1xuXHRcdFx0bmF2aWdhdGlvblR5cGU6IHN0cmluZztcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQ/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50RGVmYXVsdHM/OiBvYmplY3QgfCB1bmRlZmluZWQ7XG5cdFx0XHRyZXF1aXJlc1N0YW5kYXJkVmFyaWFudD86IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cdFx0fSxcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG5cdFx0YVByb21pc2VzOiBQcm9taXNlPHVua25vd24+XG5cdCk6IHZvaWQge1xuXHRcdC8vIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVlZGVkXG5cdH1cblxuXHQvKipcblx0ICogQXBwbHlpbmcgdGhlIGdpdmVuIHN0YXRlIHRvIHRoZSBnaXZlbiBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0NvbnRyb2wgVGhlIG9iamVjdCB0byBhcHBseSB0aGUgZ2l2ZW4gc3RhdGVcblx0ICogQHBhcmFtIG9Db250cm9sU3RhdGUgVGhlIHN0YXRlIGZvciB0aGUgZ2l2ZW4gY29udHJvbFxuXHQgKiBAcGFyYW0gW29OYXZQYXJhbWV0ZXJzXSBUaGUgY3VycmVudCBuYXZpZ2F0aW9uIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIFtza2lwTWVyZ2VdIFdoZXRoZXIgbWVyZ2Ugc2hvdWxkIGJlIHNraXBwZWQgb3Igbm90XG5cdCAqIEByZXR1cm5zIFJldHVybiBhIHByb21pc2UgZm9yIGFzeW5jIHN0YXRlIGhhbmRsaW5nXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGFzeW5jIGFwcGx5Q29udHJvbFN0YXRlKFxuXHRcdG9Db250cm9sOiBNYW5hZ2VkT2JqZWN0LFxuXHRcdG9Db250cm9sU3RhdGU6IG9iamVjdCxcblx0XHRvTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIsXG5cdFx0c2tpcE1lcmdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBhQ29udHJvbFN0YXRlSGFuZGxlcnMgPSB0aGlzLmdldENvbnRyb2xTdGF0ZUhhbmRsZXIob0NvbnRyb2wpO1xuXHRcdGxldCBvUHJvbWlzZUNoYWluID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0YUNvbnRyb2xTdGF0ZUhhbmRsZXJzLmZvckVhY2goKG1Db250cm9sU3RhdGVIYW5kbGVyKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIG1Db250cm9sU3RhdGVIYW5kbGVyLmFwcGx5ICE9PSBcImZ1bmN0aW9uXCIpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKGBjb250cm9sU3RhdGVIYW5kbGVyLmFwcGx5IGlzIG5vdCBhIGZ1bmN0aW9uIGZvciBjb250cm9sOiAke29Db250cm9sLmdldE1ldGFkYXRhKCkuZ2V0TmFtZSgpfWApO1xuXHRcdFx0fVxuXHRcdFx0b1Byb21pc2VDaGFpbiA9IG9Qcm9taXNlQ2hhaW4udGhlbihtQ29udHJvbFN0YXRlSGFuZGxlci5hcHBseS5iaW5kKHRoaXMsIG9Db250cm9sLCBvQ29udHJvbFN0YXRlLCBvTmF2UGFyYW1ldGVycywgc2tpcE1lcmdlKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG9Qcm9taXNlQ2hhaW47XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHQvLyBtZXRob2QgdG8gZ2V0IHRoZSBjb250cm9sIHN0YXRlIGZvciBtZGMgY29udHJvbHMgYXBwbHlpbmcgdGhlIGRlbHRhIGxvZ2ljXG5cdF9nZXRDb250cm9sU3RhdGUoY29udHJvbFN0YXRlS2V5OiBzdHJpbmcsIGNvbnRyb2xTdGF0ZTogQ29udHJvbFN0YXRlKTogQ29udHJvbFN0YXRlIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0aWYgKE9iamVjdC5rZXlzKGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyKS5sZW5ndGggPiAwICYmIGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0pIHtcblx0XHRcdGlmIChPYmplY3Qua2V5cyhpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sU3RhdGVLZXldIGFzIG9iamVjdCkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gPSB7IC4uLmNvbnRyb2xTdGF0ZSB9O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHsgZnVsbFN0YXRlOiBjb250cm9sU3RhdGUgYXMgb2JqZWN0LCBpbml0aWFsU3RhdGU6IGluaXRpYWxDb250cm9sU3RhdGVzTWFwcGVyW2NvbnRyb2xTdGF0ZUtleV0gYXMgb2JqZWN0IH07XG5cdFx0fVxuXHRcdHJldHVybiBjb250cm9sU3RhdGU7XG5cdH1cblxuXHQvL21ldGhvZCB0byBzdG9yZSB0aGUgaW5pdGlhbCBzdGF0ZXMgZm9yIGRlbHRhIGNvbXB1dGF0aW9uIG9mIG1kYyBjb250cm9sc1xuXHRfc2V0SW5pdGlhbFN0YXRlc0ZvckRlbHRhQ29tcHV0ZSA9IGFzeW5jICh2YXJpYW50TWFuYWdlbWVudD86IFZhcmlhbnRNYW5hZ2VtZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGFkYXB0Q29udHJvbHMgPSB0aGlzLnZpZXdTdGF0ZUNvbnRyb2xzO1xuXG5cdFx0XHRjb25zdCBleHRlcm5hbFN0YXRlUHJvbWlzZXM6IFByb21pc2U8b2JqZWN0PltdID0gW107XG5cdFx0XHRjb25zdCBjb250cm9sU3RhdGVLZXk6IHN0cmluZ1tdID0gW107XG5cdFx0XHRsZXQgaW5pdGlhbENvbnRyb2xTdGF0ZXM6IG9iamVjdFtdID0gW107XG5cdFx0XHRjb25zdCB2YXJpYW50Q29udHJvbHM6IHN0cmluZ1tdID0gdmFyaWFudE1hbmFnZW1lbnQ/LmdldEZvcigpID8/IFtdO1xuXG5cdFx0XHRhZGFwdENvbnRyb2xzXG5cdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKGNvbnRyb2wpIHtcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0Y29udHJvbCAmJlxuXHRcdFx0XHRcdFx0KCF2YXJpYW50TWFuYWdlbWVudCB8fCB2YXJpYW50Q29udHJvbHMuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSkgJiZcblx0XHRcdFx0XHRcdChjb250cm9sLmlzQShcInNhcC51aS5tZGMuVGFibGVcIikgfHxcblx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5GaWx0ZXJCYXJcIikgfHxcblx0XHRcdFx0XHRcdFx0KGNvbnRyb2wgYXMgQmFzZU9iamVjdCkuaXNBKFwic2FwLnVpLm1kYy5DaGFydFwiKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZm9yRWFjaCgoY29udHJvbCkgPT4ge1xuXHRcdFx0XHRcdGlmICh2YXJpYW50TWFuYWdlbWVudCkge1xuXHRcdFx0XHRcdFx0dGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnNUb1ZhcmlhbnRNYW5hZ2VtZW50KHZhcmlhbnRNYW5hZ2VtZW50LCB2YXJpYW50Q29udHJvbHMpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGNvbnN0IGV4dGVybmFsU3RhdGVQcm9taXNlID0gU3RhdGVVdGlsLnJldHJpZXZlRXh0ZXJuYWxTdGF0ZShjb250cm9sIGFzIE1EQ0NvbnRyb2wpO1xuXHRcdFx0XHRcdGV4dGVybmFsU3RhdGVQcm9taXNlcy5wdXNoKGV4dGVybmFsU3RhdGVQcm9taXNlKTtcblx0XHRcdFx0XHRjb250cm9sU3RhdGVLZXkucHVzaCh0aGlzLmdldFN0YXRlS2V5KGNvbnRyb2wpKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzID0gYXdhaXQgUHJvbWlzZS5hbGwoZXh0ZXJuYWxTdGF0ZVByb21pc2VzKTtcblx0XHRcdGluaXRpYWxDb250cm9sU3RhdGVzLmZvckVhY2goKGluaXRpYWxDb250cm9sU3RhdGU6IG9iamVjdCwgaTogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXJbY29udHJvbFN0YXRlS2V5W2ldXSA9IGluaXRpYWxDb250cm9sU3RhdGU7XG5cdFx0XHR9KTtcblx0XHR9IGNhdGNoIChlOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoZSBhcyBzdHJpbmcpO1xuXHRcdH1cblx0fTtcblxuXHQvLyBBdHRhY2ggZXZlbnQgdG8gc2F2ZSBhbmQgc2VsZWN0IG9mIFZhcmlhbnQgTWFuYWdlbWVudCB0byB1cGRhdGUgdGhlIGluaXRpYWwgQ29udHJvbCBTdGF0ZXMgb24gdmFyaWFudCBjaGFuZ2Vcblx0X2FkZEV2ZW50TGlzdGVuZXJzVG9WYXJpYW50TWFuYWdlbWVudCh2YXJpYW50TWFuYWdlbWVudDogVmFyaWFudE1hbmFnZW1lbnQsIHZhcmlhbnRDb250cm9sczogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBvUGF5bG9hZCA9IHsgdmFyaWFudE1hbmFnZWRDb250cm9sczogdmFyaWFudENvbnRyb2xzIH07XG5cdFx0Y29uc3QgZm5FdmVudCA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuX3VwZGF0ZUluaXRpYWxTdGF0ZXNPblZhcmlhbnRDaGFuZ2UodmFyaWFudENvbnRyb2xzKTtcblx0XHR9O1xuXHRcdHZhcmlhbnRNYW5hZ2VtZW50LmF0dGFjaFNhdmUob1BheWxvYWQsIGZuRXZlbnQsIHt9KTtcblx0XHR2YXJpYW50TWFuYWdlbWVudC5hdHRhY2hTZWxlY3Qob1BheWxvYWQsIGZuRXZlbnQsIHt9KTtcblx0fVxuXG5cdF91cGRhdGVJbml0aWFsU3RhdGVzT25WYXJpYW50Q2hhbmdlKHZtQXNzb2NpYXRlZENvbnRyb2xzVG9SZXNldDogc3RyaW5nW10pOiB2b2lkIHtcblx0XHRjb25zdCBpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlciA9IHRoaXMuaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXI7XG5cdFx0T2JqZWN0LmtleXMoaW5pdGlhbENvbnRyb2xTdGF0ZXNNYXBwZXIpLmZvckVhY2goKGNvbnRyb2xLZXkpID0+IHtcblx0XHRcdGZvciAoY29uc3Qgdm1Bc3NvY2lhdGVkY29udHJvbEtleSBvZiB2bUFzc29jaWF0ZWRDb250cm9sc1RvUmVzZXQpIHtcblx0XHRcdFx0aWYgKHZtQXNzb2NpYXRlZGNvbnRyb2xLZXkuaW5jbHVkZXMoY29udHJvbEtleSkpIHtcblx0XHRcdFx0XHRpbml0aWFsQ29udHJvbFN0YXRlc01hcHBlcltjb250cm9sS2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRfaXNJbml0aWFsU3RhdGVzQXBwbGljYWJsZShcblx0XHRpbml0aWFsU3RhdGU6IG9iamVjdCB8IHVuZGVmaW5lZCxcblx0XHRjb250cm9sOiBGaWx0ZXJCYXIgfCBNRENUYWJsZSxcblx0XHRza2lwTWVyZ2U6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG5cdFx0aXNOYXZIeWJyaWQ/OiBib29sZWFuXG5cdCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQhIWluaXRpYWxTdGF0ZSAmJlxuXHRcdFx0IXRoaXMuaW52YWxpZGF0ZUluaXRpYWxTdGF0ZUZvckFwcGx5LmluY2x1ZGVzKGNvbnRyb2wuZ2V0SWQoKSkgJiZcblx0XHRcdCF0aGlzLmNvbnRyb2xzVmFyaWFudElkVW5hdmFpbGFibGUuaW5jbHVkZXMoY29udHJvbC5nZXRJZCgpKSAmJlxuXHRcdFx0KGlzTmF2SHlicmlkID8/IHRydWUpICYmXG5cdFx0XHRza2lwTWVyZ2UgIT09IHRydWVcblx0XHQpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZXdTdGF0ZTtcbiJdLCJtYXBwaW5ncyI6IjtBQUFBO0FBQUE7QUFBQTs7Ozs7Ozs7Ozs7OztFQXNDQTtFQUNBO0VBQ0E7RUFDQSxNQUFNQSxPQUFPLEdBQUdDLFVBQVUsQ0FBQ0QsT0FBTzs7RUFFbEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7RUE0QkEsTUFBTUUscUJBQXFCLEdBQUcsbUJBQW1CO0VBdUNqRCxNQUFNQyx3QkFBeUMsR0FBRztJQUNqRCxzQ0FBc0MsRUFBRTtNQUN2Q0MsUUFBUSxFQUFFLFVBQVVDLEdBQXNCLEVBQWdDO1FBQ3pFLE9BQU87VUFDTkMsU0FBUyxFQUFFRCxHQUFHLENBQUNFLG9CQUFvQjtRQUNwQyxDQUFDO01BQ0YsQ0FBQztNQUNEQyxLQUFLLEVBQUUsZ0JBQWlDSCxHQUFzQixFQUFFSSxZQUE0QyxFQUFpQjtRQUM1SCxJQUFJO1VBQ0gsSUFBSUEsWUFBWSxJQUFJQSxZQUFZLENBQUNILFNBQVMsS0FBS0ksU0FBUyxJQUFJRCxZQUFZLENBQUNILFNBQVMsS0FBS0QsR0FBRyxDQUFDRSxvQkFBb0IsRUFBRSxFQUFFO1lBQ2xILE1BQU1JLG9CQUFvQixHQUFHLElBQUksQ0FBQ0MsNEJBQTRCLENBQUNQLEdBQUcsRUFBRUksWUFBWSxDQUFDSCxTQUFTLENBQUM7WUFDM0YsSUFBSU8saUJBQWlCO1lBQ3JCLElBQUlGLG9CQUFvQixFQUFFO2NBQ3pCRSxpQkFBaUIsR0FBR0osWUFBWSxDQUFDSCxTQUFTO1lBQzNDLENBQUMsTUFBTTtjQUNOTyxpQkFBaUIsR0FBR1IsR0FBRyxDQUFDUyxxQkFBcUIsRUFBRTtjQUMvQyxJQUFJLENBQUNDLDRCQUE0QixDQUFDQyxJQUFJLENBQUMsR0FBR1gsR0FBRyxDQUFDWSxNQUFNLEVBQUUsQ0FBQztZQUN4RDtZQUNBLElBQUk7Y0FDSCxNQUFNQyxzQkFBc0IsQ0FBQ0MsZUFBZSxDQUFDO2dCQUM1Q0MsT0FBTyxFQUFFZixHQUFHO2dCQUNaZ0IsZ0JBQWdCLEVBQUVSO2NBQ25CLENBQUMsQ0FBQztjQUNGLE1BQU0sSUFBSSxDQUFDUyxnQ0FBZ0MsQ0FBQ2pCLEdBQUcsQ0FBQztZQUNqRCxDQUFDLENBQUMsT0FBT2tCLEtBQWMsRUFBRTtjQUN4QkMsR0FBRyxDQUFDRCxLQUFLLENBQUNBLEtBQUssQ0FBVztjQUMxQixJQUFJLENBQUNFLDhCQUE4QixDQUFDVCxJQUFJLENBQUMsR0FBR1gsR0FBRyxDQUFDWSxNQUFNLEVBQUUsQ0FBQztjQUN6RCxNQUFNLElBQUksQ0FBQ0ssZ0NBQWdDLENBQUNqQixHQUFHLENBQUM7WUFDakQ7VUFDRCxDQUFDLE1BQU07WUFDTixJQUFJLENBQUNpQixnQ0FBZ0MsQ0FBQ2pCLEdBQUcsQ0FBQztVQUMzQztRQUNELENBQUMsQ0FBQyxPQUFPa0IsS0FBYyxFQUFFO1VBQ3hCQyxHQUFHLENBQUNELEtBQUssQ0FBQ0EsS0FBSyxDQUFXO1FBQzNCO01BQ0Q7SUFDRCxDQUFDO0lBQ0QsMERBQTBELEVBQUU7TUFDM0RuQixRQUFRLEVBQUUsVUFBVXNCLG1CQUF3QyxFQUEyQjtRQUN0RixPQUFPO1VBQ05DLFdBQVcsRUFBRUQsbUJBQW1CLENBQUNFLE9BQU8sQ0FBQ0MsY0FBYztRQUN4RCxDQUFDO01BQ0YsQ0FBQztNQUNEckIsS0FBSyxFQUFFLFVBQVVrQixtQkFBd0MsRUFBRWpCLFlBQXNDLEVBQUU7UUFDbEcsSUFBSUEsWUFBWSxhQUFaQSxZQUFZLGVBQVpBLFlBQVksQ0FBRWtCLFdBQVcsRUFBRTtVQUM5QixNQUFNRyxNQUFNLEdBQUdKLG1CQUFtQixDQUFDRSxPQUFPO1VBQzFDLElBQUlFLE1BQU0sQ0FBQ0MsUUFBUSxFQUFFLENBQUNDLElBQUksQ0FBRUMsSUFBSSxJQUFNQSxJQUFJLENBQW1CQyxNQUFNLEVBQUUsS0FBS3pCLFlBQVksQ0FBQ2tCLFdBQVcsQ0FBQyxFQUFFO1lBQ3BHRyxNQUFNLENBQUNLLGNBQWMsQ0FBQzFCLFlBQVksQ0FBQ2tCLFdBQVcsQ0FBQztVQUNoRDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0Qsc0JBQXNCLEVBQUU7TUFDdkJ2QixRQUFRLEVBQUUsZ0JBQWlDZ0MsU0FBd0IsRUFBeUI7UUFDM0YsTUFBTUMsZUFBZSxHQUFHLElBQUksQ0FBQ0MsV0FBVyxDQUFDRixTQUFTLENBQUM7UUFDbkQsTUFBTUcsY0FBYyxHQUFHLE1BQU1DLFNBQVMsQ0FBQ0MscUJBQXFCLENBQUNMLFNBQVMsQ0FBQztRQUN2RTtRQUNBLE1BQU1NLGNBQWMsR0FBR04sU0FBUyxDQUFDTyxrQkFBa0IsRUFBRTtRQUNyRCxNQUFNQyxNQUFNLEdBQUdMLGNBQWMsQ0FBQ0ssTUFBTSxJQUFJLENBQUMsQ0FBQztRQUMxQ0YsY0FBYyxDQUNaRSxNQUFNLENBQUMsVUFBVUMsWUFBNkQsRUFBRTtVQUNoRixPQUNDQyxNQUFNLENBQUNDLElBQUksQ0FBQ0gsTUFBTSxDQUFDLENBQUNJLE1BQU0sR0FBRyxDQUFDLElBQzlCSCxZQUFZLENBQUNJLElBQUksSUFDakJMLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDSSxJQUFJLENBQUMsS0FDeEJKLFlBQVksQ0FBQ0ssa0JBQWtCLElBQUlOLE1BQU0sQ0FBQ0MsWUFBWSxDQUFDSSxJQUFJLENBQUMsQ0FBQ0QsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUU3RSxDQUFDLENBQUMsQ0FDREcsT0FBTyxDQUFDLFVBQVVDLFlBQTBCLEVBQUU7VUFDOUMsSUFBSUEsWUFBWSxDQUFDSCxJQUFJLEVBQUU7WUFDdEIsT0FBT0wsTUFBTSxDQUFDUSxZQUFZLENBQUNILElBQUksQ0FBQztVQUNqQztRQUNELENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDSSxnQkFBZ0IsQ0FBQ2hCLGVBQWUsRUFBRUUsY0FBYyxDQUFDO01BQzlELENBQUM7TUFDRC9CLEtBQUssRUFBRSxnQkFFTjRCLFNBQW9CLEVBQ3BCM0IsWUFBMEIsRUFDMUI2QyxZQUFrQyxFQUNsQ0MsU0FBbUIsRUFDbEI7UUFDRCxJQUFJO1VBQ0gsSUFBSTlDLFlBQVksSUFBSTZDLFlBQVksRUFBRTtZQUNqQyxNQUFNRSx3QkFBd0IsR0FBRyxJQUFJLENBQUNDLDBCQUEwQixDQUFDaEQsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVpRCxZQUFZLEVBQUV0QixTQUFTLEVBQUVtQixTQUFTLENBQUM7WUFDbEgsTUFBTUksY0FBYyxHQUFHTCxZQUFZLENBQUNLLGNBQWM7WUFDbEQ7WUFDQSxJQUFJQSxjQUFjLEtBQUszRCxPQUFPLENBQUM0RCxNQUFNLElBQUluRCxZQUFZLENBQUNvRCxTQUFTLEtBQUtuRCxTQUFTLEVBQUU7Y0FDOUUsTUFBTW9ELFlBQVksR0FBRzFCLFNBQVMsQ0FBQzJCLFNBQVMsRUFBa0I7Z0JBQ3pEQyxnQkFBZ0IsR0FBRyxNQUFNRixZQUFZLENBQUNHLHFDQUFxQyxDQUMxRVgsWUFBWSxDQUFDWSxnQkFBZ0IsRUFDN0IsSUFBSSxDQUNKO2NBRUYsTUFBTUMsZUFBZSxHQUFHO2dCQUN2QixHQUFHMUQsWUFBWSxDQUFDb0QsU0FBUztnQkFDekJqQixNQUFNLEVBQUU7a0JBQ1AsR0FBR25DLFlBQVksQ0FBQ29ELFNBQVMsQ0FBQ2pCLE1BQU07a0JBQ2hDLEdBQUdvQjtnQkFDSjtjQUNELENBQUM7Y0FDRDtjQUNBLE1BQU81QixTQUFTLENBQUMyQixTQUFTLEVBQUUsQ0FBa0JLLDZCQUE2QixDQUFDaEMsU0FBUyxFQUFFO2dCQUFFaUMsZUFBZSxFQUFFO2NBQUssQ0FBQyxDQUFDO2NBQ2pILE9BQU8sTUFBTTdCLFNBQVMsQ0FBQzhCLGtCQUFrQixDQUFDbEMsU0FBUyxFQUFFK0IsZUFBZSxDQUFDO1lBQ3RFO1lBRUEsSUFBSVgsd0JBQXdCLEVBQUU7Y0FDN0IsTUFBTWUsU0FBaUIsR0FBRyxNQUFNL0IsU0FBUyxDQUFDK0IsU0FBUyxDQUNsRG5DLFNBQVMsRUFDVDNCLFlBQVksQ0FBQ2lELFlBQVksRUFDekJqRCxZQUFZLENBQUNvRCxTQUFTLENBQ3RCO2NBQ0QsT0FBTyxNQUFNckIsU0FBUyxDQUFDOEIsa0JBQWtCLENBQUNsQyxTQUFTLEVBQUVtQyxTQUFTLENBQUM7WUFDaEUsQ0FBQyxNQUFNLElBQUloQixTQUFTLEVBQUU7Y0FDckI7Y0FDQSxNQUFPbkIsU0FBUyxDQUFDMkIsU0FBUyxFQUFFLENBQWtCSyw2QkFBNkIsQ0FBQ2hDLFNBQVMsRUFBRTtnQkFBRWlDLGVBQWUsRUFBRTtjQUFLLENBQUMsQ0FBQztZQUNsSDtZQUNBLE9BQU8sTUFBTTdCLFNBQVMsQ0FBQzhCLGtCQUFrQixDQUFDbEMsU0FBUyxFQUFFLENBQUEzQixZQUFZLGFBQVpBLFlBQVksdUJBQVpBLFlBQVksQ0FBRW9ELFNBQVMsS0FBSXBELFlBQVksQ0FBQztVQUM5RjtRQUNELENBQUMsQ0FBQyxPQUFPYyxLQUFjLEVBQUU7VUFDeEJDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDQSxLQUFLLENBQVc7UUFDM0I7TUFDRDtJQUNELENBQUM7SUFDRCxrQkFBa0IsRUFBRTtNQUNuQm5CLFFBQVEsRUFBRSxnQkFBaUNvRSxLQUFlLEVBQUU7UUFDM0QsTUFBTW5DLGVBQWUsR0FBRyxJQUFJLENBQUNDLFdBQVcsQ0FBQ2tDLEtBQUssQ0FBQztRQUMvQyxNQUFNQyxVQUFVLEdBQUcsTUFBTWpDLFNBQVMsQ0FBQ0MscUJBQXFCLENBQUMrQixLQUFLLENBQUM7UUFDL0QsT0FBTyxJQUFJLENBQUNuQixnQkFBZ0IsQ0FBQ2hCLGVBQWUsRUFBRW9DLFVBQVUsQ0FBQztNQUMxRCxDQUFDO01BQ0RqRSxLQUFLLEVBQUUsZ0JBRU5nRSxLQUFlLEVBQ2YvRCxZQUEwQixFQUMxQmlFLGFBQW1DLEVBQ25DbkIsU0FBbUIsRUFDbEI7UUFDRCxJQUFJO1VBQ0gsSUFBSTlDLFlBQVksRUFBRTtZQUNqQjtZQUNBLE1BQU0rQyx3QkFBd0IsR0FBRyxJQUFJLENBQUNDLDBCQUEwQixDQUMvRGhELFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFaUQsWUFBWSxFQUMxQmMsS0FBSyxFQUNMakIsU0FBUyxFQUNULENBQUFtQixhQUFhLGFBQWJBLGFBQWEsdUJBQWJBLGFBQWEsQ0FBRWYsY0FBYyxNQUFLM0QsT0FBTyxDQUFDNEQsTUFBTSxDQUNoRDtZQUVELElBQUlKLHdCQUF3QixFQUFFO2NBQUE7Y0FDN0IsSUFBSS9DLFlBQVksQ0FBQ2lELFlBQVksSUFBSSwyQkFBQ2pELFlBQVksQ0FBQ2lELFlBQVksa0RBQXpCLHNCQUEyQmlCLG1CQUFtQixHQUFFO2dCQUNqRmxFLFlBQVksQ0FBQ2lELFlBQVksQ0FBQ2lCLG1CQUFtQixHQUFHLENBQUMsQ0FBQztjQUNuRDtjQUNBLE1BQU1DLFVBQVUsR0FBRyxNQUFNcEMsU0FBUyxDQUFDK0IsU0FBUyxDQUMzQ0MsS0FBSyxFQUNML0QsWUFBWSxDQUFDaUQsWUFBWSxFQUN6QmpELFlBQVksQ0FBQ29ELFNBQVMsQ0FDdEI7Y0FDRCxPQUFPLE1BQU1yQixTQUFTLENBQUM4QixrQkFBa0IsQ0FBQ0UsS0FBSyxFQUFFSSxVQUFVLENBQUM7WUFDN0QsQ0FBQyxNQUFNO2NBQ04sSUFBSSxDQUFDbkUsWUFBWSxDQUFDa0UsbUJBQW1CLEVBQUU7Z0JBQ3RDbEUsWUFBWSxDQUFDa0UsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO2NBQ3RDO2NBQ0EsT0FBTyxNQUFNbkMsU0FBUyxDQUFDOEIsa0JBQWtCLENBQUNFLEtBQUssRUFBRSxDQUFBL0QsWUFBWSxhQUFaQSxZQUFZLHVCQUFaQSxZQUFZLENBQUVvRCxTQUFTLEtBQUlwRCxZQUFZLENBQUM7WUFDMUY7VUFDRDtRQUNELENBQUMsQ0FBQyxPQUFPYyxLQUFLLEVBQUU7VUFDZkMsR0FBRyxDQUFDRCxLQUFLLENBQUNBLEtBQUssQ0FBVztRQUMzQjtNQUNELENBQUM7TUFDRHNELGNBQWMsRUFBRSxVQUFVQyxNQUFnQixFQUFFO1FBQzNDLE1BQU1DLGFBQWEsR0FBR0QsTUFBTSxDQUFDRSxhQUFhLEVBQUU7UUFDNUMsSUFBSUQsYUFBYSxFQUFFO1VBQ2xCLE1BQU1FLFlBQVksR0FBR0YsYUFBYSxDQUFDRyxjQUFjLEVBQUU7VUFDbkQsTUFBTUMsV0FBVyxHQUFHSixhQUFhLENBQUNLLGNBQWMsRUFBaUQ7VUFDakcsSUFBSUgsWUFBWSxLQUFLRixhQUFhLElBQUksQ0FBQUksV0FBVyxhQUFYQSxXQUFXLHVCQUFYQSxXQUFXLENBQUVFLGtCQUFrQixNQUFLM0UsU0FBUyxFQUFFO1lBQ3BGO1lBQ0FxRSxhQUFhLENBQUNPLE9BQU8sRUFBRTtVQUN4QixDQUFDLE1BQU07WUFDTjtZQUNBLE1BQU1DLGNBQWMsR0FBR1IsYUFBYSxDQUFDUyxnQkFBZ0IsRUFBRTtZQUN2RCxNQUFNQyxRQUFRLEdBQUdWLGFBQWEsQ0FBQ1csVUFBVSxFQUFFO1lBRTNDLElBQUlILGNBQWMsRUFBRTtjQUNuQkEsY0FBYyxDQUFDSSxrQkFBa0IsQ0FBQyxDQUFDO2dCQUFFQyx1QkFBdUIsRUFBRTtjQUFHLENBQUMsQ0FBQyxFQUFFSCxRQUFRLENBQUM7WUFDL0U7VUFDRDtRQUNELENBQUMsTUFBTTtVQUNOakUsR0FBRyxDQUFDcUUsSUFBSSxDQUFFLFVBQVNmLE1BQU0sQ0FBQ2dCLEtBQUssRUFBRyx1Q0FBc0MsQ0FBQztRQUMxRTtNQUNEO0lBQ0QsQ0FBQztJQUNELGtCQUFrQixFQUFFO01BQ25CO01BQ0ExRixRQUFRLEVBQUUsZ0JBQWlDMkYsS0FBWSxFQUFFO1FBQ3hELE1BQU0xRCxlQUFlLEdBQUcsSUFBSSxDQUFDQyxXQUFXLENBQUN5RCxLQUFLLENBQUM7UUFDL0MsTUFBTUMsVUFBVSxHQUFHLE1BQU14RCxTQUFTLENBQUNDLHFCQUFxQixDQUFDc0QsS0FBSyxDQUFDO1FBRS9ELE9BQU8sSUFBSSxDQUFDMUMsZ0JBQWdCLENBQUNoQixlQUFlLEVBQUUyRCxVQUFVLENBQUM7TUFDMUQsQ0FBQztNQUNEeEYsS0FBSyxFQUFFLGdCQUFpQ3VGLEtBQVksRUFBRXRGLFlBQTBCLEVBQUU7UUFDakYsSUFBSTtVQUNILElBQUlBLFlBQVksRUFBRTtZQUNqQjtZQUNBLE1BQU0rQyx3QkFBd0IsR0FDN0IsQ0FBQS9DLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFaUQsWUFBWSxLQUMxQixDQUFDLElBQUksQ0FBQ2pDLDhCQUE4QixDQUFDd0UsUUFBUSxDQUFDRixLQUFLLENBQUNELEtBQUssRUFBRSxDQUFDLElBQzVELENBQUMsSUFBSSxDQUFDL0UsNEJBQTRCLENBQUNrRixRQUFRLENBQUNGLEtBQUssQ0FBQ0QsS0FBSyxFQUFFLENBQUM7WUFDM0QsSUFBSXRDLHdCQUF3QixFQUFFO2NBQzdCLE1BQU1lLFNBQVMsR0FBRyxNQUFNL0IsU0FBUyxDQUFDK0IsU0FBUyxDQUMxQ3dCLEtBQUssRUFDTHRGLFlBQVksQ0FBQ2lELFlBQVksRUFDekJqRCxZQUFZLENBQUNvRCxTQUFTLENBQ3RCO2NBQ0QsT0FBTyxNQUFNckIsU0FBUyxDQUFDOEIsa0JBQWtCLENBQUN5QixLQUFLLEVBQUV4QixTQUFTLENBQUM7WUFDNUQsQ0FBQyxNQUFNO2NBQ04sT0FBTyxNQUFNL0IsU0FBUyxDQUFDOEIsa0JBQWtCLENBQUN5QixLQUFLLEVBQUUsQ0FBQXRGLFlBQVksYUFBWkEsWUFBWSx1QkFBWkEsWUFBWSxDQUFFb0QsU0FBUyxLQUFJcEQsWUFBWSxDQUFDO1lBQzFGO1VBQ0Q7UUFDRCxDQUFDLENBQUMsT0FBT2MsS0FBSyxFQUFFO1VBQ2ZDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDQSxLQUFLLENBQVc7UUFDM0I7TUFDRDtJQUNELENBQUM7SUFDRCwyQkFBMkIsRUFBRTtNQUM1Qm5CLFFBQVEsRUFBRSxVQUFVOEYsU0FBMkIsRUFBK0I7UUFDN0UsT0FBTztVQUNOQyxlQUFlLEVBQUVELFNBQVMsQ0FBQ0Usa0JBQWtCO1FBQzlDLENBQUM7TUFDRixDQUFDO01BQ0Q1RixLQUFLLEVBQUUsVUFBMkIwRixTQUEyQixFQUFFRyxhQUEyQyxFQUFRO1FBQ2pILElBQUlBLGFBQWEsRUFBRTtVQUNsQkgsU0FBUyxDQUFDSSxrQkFBa0IsQ0FBQ0QsYUFBYSxDQUFDRixlQUFlLENBQUM7UUFDNUQ7TUFDRCxDQUFDO01BQ0R0QixjQUFjLEVBQUUsVUFBVXFCLFNBQTJCLEVBQUU7UUFDdEQsTUFBTUssZUFBZSxHQUFHTCxTQUFTLENBQUNNLGlCQUFpQixFQUFnQztRQUNuRixNQUFNQyxRQUFRLEdBQUdGLGVBQWUsSUFBSUEsZUFBZSxDQUFDRyxVQUFVLEVBQUU7UUFDaEUsSUFBSUQsUUFBUSxFQUFFO1VBQ2IsTUFBTUUsU0FBUyxHQUFHQyxXQUFXLENBQUNDLHFCQUFxQixDQUFDTixlQUFlLENBQUM7VUFDcEUsTUFBTU8sU0FBUyxHQUFHQyxlQUFlLENBQUNDLHVDQUF1QyxDQUFDZCxTQUFTLEVBQUVTLFNBQVMsQ0FBQztVQUMvRixJQUFJRyxTQUFTLEtBQUssTUFBTSxFQUFFO1lBQ3pCO1lBQ0EsTUFBTUcsTUFBTSxHQUFHVixlQUFlLENBQUNXLFFBQVEsRUFBRTtjQUN4Q0MsVUFBVSxHQUFHRixNQUFNLENBQUNHLFlBQVksRUFBRTtjQUNsQ0MscUJBQTJELEdBQ3pEQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDSixVQUFVLEVBQUVSLFNBQVMsRUFBRTtnQkFDNURhLEtBQUssRUFBRTtjQUNSLENBQUMsQ0FBQyxJQUE2QyxDQUFDLENBQUM7Y0FDbERDLHVCQUF1QixHQUFHM0UsTUFBTSxDQUFDQyxJQUFJLENBQUNzRSxxQkFBcUIsQ0FBQyxDQUFDSyxNQUFNLENBQUMsVUFDbkVDLEtBQTRDLEVBQzVDQyxRQUFnQixFQUNmO2dCQUNELElBQUlQLHFCQUFxQixDQUFDTyxRQUFRLENBQUMsQ0FBQ0MsYUFBYSxLQUFLLElBQUksRUFBRTtrQkFDM0RGLEtBQUssQ0FBQzNHLElBQUksQ0FBQztvQkFBRTRFLHVCQUF1QixFQUFFZ0M7a0JBQVMsQ0FBQyxDQUFDO2dCQUNsRDtnQkFDQSxPQUFPRCxLQUFLO2NBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQztjQUNORyxXQUFnRixHQUFHLENBQUM7Z0JBQUVDLGFBQWEsRUFBRTtjQUFJLENBQUMsQ0FBQztjQUMzR3RDLFFBQVEsR0FBR2dCLFFBQVEsQ0FBQ2YsVUFBVSxFQUFFO1lBRWpDYSxlQUFlLENBQUNaLGtCQUFrQixDQUFDbUMsV0FBVyxDQUFDRSxNQUFNLENBQUNQLHVCQUF1QixDQUFDLEVBQUVoQyxRQUFRLENBQUM7VUFDMUYsQ0FBQyxNQUFNLElBQUlxQixTQUFTLEtBQUsscUJBQXFCLEVBQUU7WUFDL0M7WUFDQUwsUUFBUSxDQUFDbkIsT0FBTyxFQUFFO1VBQ25CO1FBQ0QsQ0FBQyxNQUFNO1VBQ045RCxHQUFHLENBQUNxRSxJQUFJLENBQUUsZUFBY0ssU0FBUyxDQUFDSixLQUFLLEVBQUcsdUNBQXNDLENBQUM7UUFDbEY7TUFDRDtJQUNELENBQUM7SUFDRCx1QkFBdUIsRUFBRTtNQUN4QjFGLFFBQVEsRUFBRSxVQUFVNkgsZ0JBQWlDLEVBQTJCO1FBQy9FLE9BQU87VUFDTnRHLFdBQVcsRUFBRXNHLGdCQUFnQixDQUFDcEcsY0FBYztRQUM3QyxDQUFDO01BQ0YsQ0FBQztNQUNEckIsS0FBSyxFQUFFLFVBQTJCeUgsZ0JBQWlDLEVBQUU1QixhQUF1QyxFQUFRO1FBQ25ILElBQUlBLGFBQWEsYUFBYkEsYUFBYSxlQUFiQSxhQUFhLENBQUUxRSxXQUFXLElBQUkwRSxhQUFhLENBQUMxRSxXQUFXLEtBQUtzRyxnQkFBZ0IsQ0FBQ3BHLGNBQWMsRUFBRSxFQUFFO1VBQUE7VUFDbEdvRyxnQkFBZ0IsQ0FBQzlGLGNBQWMsQ0FBQ2tFLGFBQWEsQ0FBQzFFLFdBQVcsQ0FBQztVQUMxRCw2QkFBSXNHLGdCQUFnQixDQUFDbEUsU0FBUyxFQUFFLGtEQUE1QixzQkFBOEJtRSxHQUFHLENBQUMsMEJBQTBCLENBQUMsRUFBRTtZQUNsRUQsZ0JBQWdCLENBQUNFLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztVQUM5QztRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0QsY0FBYyxFQUFFO01BQ2YvSCxRQUFRLEVBQUUsVUFBVWdJLE9BQWUsRUFBMkI7UUFDN0QsT0FBTztVQUNOekcsV0FBVyxFQUFFeUcsT0FBTyxDQUFDdkcsY0FBYztRQUNwQyxDQUFDO01BQ0YsQ0FBQztNQUNEckIsS0FBSyxFQUFFLFVBQTJCNEgsT0FBZSxFQUFFL0IsYUFBdUMsRUFBUTtRQUNqRyxJQUFJQSxhQUFhLGFBQWJBLGFBQWEsZUFBYkEsYUFBYSxDQUFFMUUsV0FBVyxJQUFJMEUsYUFBYSxDQUFDMUUsV0FBVyxLQUFLeUcsT0FBTyxDQUFDdkcsY0FBYyxFQUFFLEVBQUU7VUFBQTtVQUN6RnVHLE9BQU8sQ0FBQ2pHLGNBQWMsQ0FBQ2tFLGFBQWEsQ0FBQzFFLFdBQVcsQ0FBQztVQUNqRCwwQkFBSXlHLE9BQU8sQ0FBQ3JFLFNBQVMsRUFBRSwrQ0FBbkIsbUJBQXFCbUUsR0FBRyxDQUFDLDBCQUEwQixDQUFDLEVBQUU7WUFDekRFLE9BQU8sQ0FBQ0QsU0FBUyxDQUFDLFFBQVEsQ0FBQztVQUM1QjtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0QsbUJBQW1CLEVBQUU7TUFDcEIvSCxRQUFRLEVBQUUsVUFBVWlJLFlBQXlCLEVBQStCO1FBQzNFLE9BQU87VUFDTkMsY0FBYyxFQUFFRCxZQUFZLENBQUNFLGlCQUFpQjtRQUMvQyxDQUFDO01BQ0YsQ0FBQztNQUNEL0gsS0FBSyxFQUFFLFVBQVU2SCxZQUF5QixFQUFFaEMsYUFBMkMsRUFBUTtRQUM5RixJQUFJQSxhQUFhLEVBQUU7VUFDbEJnQyxZQUFZLENBQUNHLGlCQUFpQixDQUFDbkMsYUFBYSxDQUFDaUMsY0FBYyxDQUFDO1FBQzdEO01BQ0Q7SUFDRCxDQUFDO0lBQ0Qsc0JBQXNCLEVBQUU7TUFDdkJsSSxRQUFRLEVBQUUsVUFBVXFJLEtBQWEsRUFBRTtRQUNsQyxNQUFNQyxXQUFXLEdBQUdELEtBQUssQ0FBQ0UsYUFBYSxFQUFFO1FBQ3pDLElBQUlELFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxTQUFTLEVBQUU7VUFDekMsT0FBT0YsV0FBVyxDQUFDRSxTQUFTLENBQUNDLGlCQUFpQixFQUFFO1FBQ2pEO1FBQ0EsT0FBTyxDQUFDLENBQUM7TUFDVixDQUFDO01BQ0RySSxLQUFLLEVBQUUsZ0JBQWdCaUksS0FBYSxFQUFFcEMsYUFBMkIsRUFBRXlDLGNBQW9DLEVBQUV2RixTQUFtQixFQUFFO1FBQzdILE1BQU1tRixXQUFXLEdBQUdELEtBQUssQ0FBQ0UsYUFBYSxFQUFFO1FBQ3pDLElBQUlELFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxTQUFTLElBQUlFLGNBQWMsRUFBRTtVQUMzRCxPQUFPSixXQUFXLENBQUNFLFNBQVMsQ0FBQ0csY0FBYyxDQUFDMUMsYUFBYSxFQUFFeUMsY0FBYyxFQUFFdkYsU0FBUyxDQUFDO1FBQ3RGO01BQ0QsQ0FBQztNQUNEc0IsY0FBYyxFQUFFLGdCQUFnQjRELEtBQWEsRUFBRTtRQUM5QyxNQUFNQyxXQUFXLEdBQUdELEtBQUssQ0FBQ0UsYUFBYSxFQUFFO1FBQ3pDLElBQUlELFdBQVcsSUFBSUEsV0FBVyxDQUFDRSxTQUFTLEVBQUU7VUFDekMsT0FBT0YsV0FBVyxDQUFDRSxTQUFTLENBQUNJLG1CQUFtQixFQUFFO1FBQ25EO01BQ0Q7SUFDRCxDQUFDO0lBQ0QsZ0NBQWdDLEVBQUU7TUFDakM1SSxRQUFRLEVBQUUsZ0JBQWlDNkksbUJBQXVDLEVBQW1CO1FBQ3BHLE1BQU1DLFVBQVUsR0FBR0QsbUJBQW1CLENBQUNFLG9CQUFvQixFQUFFO1FBQzdELElBQUlELFVBQVUsRUFBRTtVQUNmLE9BQU8sSUFBSSxDQUFDRSxvQkFBb0IsQ0FBQ0YsVUFBVSxDQUFDRyxjQUFjLEVBQUUsQ0FBQztRQUM5RDtRQUNBLE9BQU8sQ0FBQyxDQUFDO01BQ1YsQ0FBQztNQUNEN0ksS0FBSyxFQUFFLGdCQUVOeUksbUJBQXVDLEVBQ3ZDNUMsYUFBcUIsRUFDckJ5QyxjQUFvQyxFQUNwQjtRQUNoQixNQUFNSSxVQUFVLEdBQUdELG1CQUFtQixDQUFDRSxvQkFBb0IsRUFBRTtRQUM3RCxJQUFJRCxVQUFVLEVBQUU7VUFDZixPQUFPLElBQUksQ0FBQ0ksaUJBQWlCLENBQUNKLFVBQVUsQ0FBQ0csY0FBYyxFQUFFLEVBQUVoRCxhQUFhLEVBQUV5QyxjQUFjLENBQUM7UUFDMUY7TUFDRDtJQUNELENBQUM7SUFDRCxxREFBcUQsRUFBRTtNQUN0RDFJLFFBQVEsRUFBRSxVQUFVbUosT0FBbUMsRUFBVztRQUNqRSxPQUFPQSxPQUFPLENBQUNDLGlCQUFpQixFQUFFLENBQUNDLFNBQVMsQ0FBQyxzQkFBc0IsQ0FBQztNQUNyRSxDQUFDO01BQ0RqSixLQUFLLEVBQUUsVUFBVStJLE9BQW1DLEVBQUU5SSxZQUFxQixFQUFRO1FBQ2xGLElBQUlBLFlBQVksRUFBRTtVQUNqQixPQUFPOEksT0FBTyxDQUFDQyxpQkFBaUIsRUFBRSxDQUFDRSxXQUFXLENBQUNqSixZQUFZLEVBQUUsc0JBQXNCLENBQUM7UUFDckY7TUFDRDtJQUNEO0VBQ0QsQ0FBQztFQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVJBLElBVU1rSixTQUFTLFdBRGRDLGNBQWMsQ0FBQyw0Q0FBNEMsQ0FBQyxVQTZCM0RDLGVBQWUsRUFBRSxVQUNqQkMsY0FBYyxFQUFFLFVBdUJoQkQsZUFBZSxFQUFFLFVBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsVUFNbkNDLGdCQUFnQixFQUFFLFVBQ2xCSixjQUFjLEVBQUUsVUFtQmhCSSxnQkFBZ0IsRUFBRSxVQUNsQkosY0FBYyxFQUFFLFdBbUNoQkQsZUFBZSxFQUFFLFdBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0FlbkNKLGVBQWUsRUFBRSxXQUNqQkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFdBVW5DSixlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQXFCbkNDLGdCQUFnQixFQUFFLFdBQ2xCSixjQUFjLEVBQUUsV0FrQmhCRCxlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQVluQ0MsZ0JBQWdCLEVBQUUsV0FDbEJKLGNBQWMsRUFBRSxXQStCaEJELGVBQWUsRUFBRSxXQUNqQkUsVUFBVSxDQUFDQyxpQkFBaUIsQ0FBQ0MsS0FBSyxDQUFDLFdBV25DSixlQUFlLEVBQUUsV0FDakJDLGNBQWMsRUFBRSxXQVloQkQsZUFBZSxFQUFFLFdBQ2pCQyxjQUFjLEVBQUUsV0ErQ2hCRCxlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQXVCbkNDLGdCQUFnQixFQUFFLFdBQ2xCSixjQUFjLEVBQUUsV0E4QmhCRCxlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNHLE9BQU8sQ0FBQyxXQWtCckNOLGVBQWUsRUFBRSxXQUNqQkMsY0FBYyxFQUFFLFdBOEVoQkksZ0JBQWdCLEVBQUUsV0E4Q2xCTCxlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQWVuQ0osZUFBZSxFQUFFLFdBQ2pCRSxVQUFVLENBQUNDLGlCQUFpQixDQUFDQyxLQUFLLENBQUMsV0FnQm5DSixlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQU1uQ0MsZ0JBQWdCLEVBQUUsV0EyQmxCTCxlQUFlLEVBQUUsV0FDakJFLFVBQVUsQ0FBQ0MsaUJBQWlCLENBQUNDLEtBQUssQ0FBQyxXQXdCbkNDLGdCQUFnQixFQUFFLFdBQ2xCSixjQUFjLEVBQUU7SUFBQTtJQWhrQmpCO0FBQ0Q7QUFDQTtJQUNDLHFCQUFjO01BQUE7TUFDYix1Q0FBTztNQUFDLE1BWlRNLDBCQUEwQixHQUE0QixDQUFDLENBQUM7TUFBQSxNQUV4RHJKLDRCQUE0QixHQUFhLEVBQUU7TUFBQSxNQUUzQ1UsOEJBQThCLEdBQWEsRUFBRTtNQUFBLE1BRTdDNEksaUJBQWlCLEdBQW9CLEVBQUU7TUFBQSxNQXFtQnZDL0ksZ0NBQWdDLEdBQUcsTUFBT2dKLGlCQUFxQyxJQUFvQjtRQUNsRyxJQUFJO1VBQ0gsTUFBTUMsYUFBYSxHQUFHLE1BQUtGLGlCQUFpQjtVQUU1QyxNQUFNRyxxQkFBd0MsR0FBRyxFQUFFO1VBQ25ELE1BQU1uSSxlQUF5QixHQUFHLEVBQUU7VUFDcEMsSUFBSW9JLG9CQUE4QixHQUFHLEVBQUU7VUFDdkMsTUFBTUMsZUFBeUIsR0FBRyxDQUFBSixpQkFBaUIsYUFBakJBLGlCQUFpQix1QkFBakJBLGlCQUFpQixDQUFFckosTUFBTSxFQUFFLEtBQUksRUFBRTtVQUVuRXNKLGFBQWEsQ0FDWDNILE1BQU0sQ0FBQyxVQUFVMkcsT0FBTyxFQUFFO1lBQzFCLE9BQ0NBLE9BQU8sS0FDTixDQUFDZSxpQkFBaUIsSUFBSUksZUFBZSxDQUFDekUsUUFBUSxDQUFDc0QsT0FBTyxDQUFDekQsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUNoRXlELE9BQU8sQ0FBQ3JCLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxJQUM5QnFCLE9BQU8sQ0FBZ0JyQixHQUFHLENBQUMsc0JBQXNCLENBQUMsSUFDbERxQixPQUFPLENBQWdCckIsR0FBRyxDQUFDLGtCQUFrQixDQUFDLENBQUM7VUFFbkQsQ0FBQyxDQUFDLENBQ0QvRSxPQUFPLENBQUVvRyxPQUFPLElBQUs7WUFDckIsSUFBSWUsaUJBQWlCLEVBQUU7Y0FDdEIsTUFBS0sscUNBQXFDLENBQUNMLGlCQUFpQixFQUFFSSxlQUFlLENBQUM7WUFDL0U7WUFFQSxNQUFNRSxvQkFBb0IsR0FBR3BJLFNBQVMsQ0FBQ0MscUJBQXFCLENBQUM4RyxPQUFPLENBQWU7WUFDbkZpQixxQkFBcUIsQ0FBQ3hKLElBQUksQ0FBQzRKLG9CQUFvQixDQUFDO1lBQ2hEdkksZUFBZSxDQUFDckIsSUFBSSxDQUFDLE1BQUtzQixXQUFXLENBQUNpSCxPQUFPLENBQUMsQ0FBQztVQUNoRCxDQUFDLENBQUM7VUFFSGtCLG9CQUFvQixHQUFHLE1BQU1JLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDTixxQkFBcUIsQ0FBQztVQUMvREMsb0JBQW9CLENBQUN0SCxPQUFPLENBQUMsQ0FBQzRILG1CQUEyQixFQUFFQyxDQUFTLEtBQUs7WUFDeEUsTUFBS1osMEJBQTBCLENBQUMvSCxlQUFlLENBQUMySSxDQUFDLENBQUMsQ0FBQyxHQUFHRCxtQkFBbUI7VUFDMUUsQ0FBQyxDQUFDO1FBQ0gsQ0FBQyxDQUFDLE9BQU9FLENBQVUsRUFBRTtVQUNwQnpKLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDMEosQ0FBQyxDQUFXO1FBQ3ZCO01BQ0QsQ0FBQztNQWxvQkEsTUFBS0Msd0JBQXdCLEdBQUcsQ0FBQztNQUNqQyxNQUFLQyxxQkFBcUIsR0FBRyxJQUFJTixPQUFPLENBQUVPLE9BQU8sSUFBSztRQUNyRCxNQUFLQyw0QkFBNEIsR0FBR0QsT0FBTztNQUM1QyxDQUFDLENBQUM7TUFBQztJQUNKO0lBQUM7SUFBQSxPQUlLcEMsbUJBQW1CLEdBRnpCLHFDQUUyQztNQUMxQyxNQUFNc0MsU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUM1QyxTQUFTLENBQUM2QywyQkFBMkIsQ0FBQztNQUM1RixJQUFJQyxhQUFhLEdBQUdiLE9BQU8sQ0FBQ08sT0FBTyxFQUFFO01BQ3JDRSxTQUFTLENBQ1AxSSxNQUFNLENBQUUrSSxRQUFRLElBQUs7UUFDckIsT0FBT0EsUUFBUSxJQUFJQSxRQUFRLENBQUN6RCxHQUFHLElBQUl5RCxRQUFRLENBQUN6RCxHQUFHLENBQWdCLDJCQUEyQixDQUFDO01BQzVGLENBQUMsQ0FBQyxDQUNEL0UsT0FBTyxDQUFFd0ksUUFBdUIsSUFBSztRQUNyQ0QsYUFBYSxHQUFHQSxhQUFhLENBQUNFLElBQUksQ0FBQyxJQUFJLENBQUNDLHFCQUFxQixDQUFDQyxJQUFJLENBQUMsSUFBSSxFQUFFSCxRQUFRLENBQUMsQ0FBQztNQUNwRixDQUFDLENBQUM7TUFDSCxPQUFPRCxhQUFhO0lBQ3JCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJDO0lBQUE7SUFXQTtJQUNBRCwyQkFBMkIsR0FIM0IscUNBRzRCTSxrQkFBbUMsRUFBRTtNQUNoRTtJQUFBLENBQ0E7SUFBQSxPQUlLRixxQkFBcUIsR0FGM0IscUNBRTRCRixRQUF1QixFQUFpQjtNQUNuRSxNQUFNSyw2QkFBNkIsR0FBRyxJQUFJLENBQUNDLCtCQUErQixDQUFDTixRQUFRLENBQUM7TUFDcEYsSUFBSUQsYUFBYSxHQUFHYixPQUFPLENBQUNPLE9BQU8sRUFBRTtNQUNyQyxJQUFJLE9BQU9ZLDZCQUE2QixDQUFDbkgsY0FBYyxLQUFLLFVBQVUsRUFBRTtRQUN2RXJELEdBQUcsQ0FBQ3FFLElBQUksQ0FBRSx1Q0FBc0M4RixRQUFRLENBQUNPLFdBQVcsRUFBRSxDQUFDQyxPQUFPLEVBQUcsa0JBQWlCLENBQUM7TUFDcEcsQ0FBQyxNQUFNO1FBQ05ULGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxJQUFJLENBQUNJLDZCQUE2QixDQUFDbkgsY0FBYyxDQUFDaUgsSUFBSSxDQUFDLElBQUksRUFBRUgsUUFBUSxDQUFDLENBQUM7TUFDdEc7TUFDQSxPQUFPRCxhQUFhO0lBQ3JCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUEsT0FTQU8sK0JBQStCLEdBRi9CLHlDQUVnQ04sUUFBdUIsRUFFckQ7TUFDRCxNQUFNUyxzQkFFTCxHQUFHLENBQUMsQ0FBQztNQUNOLElBQUlULFFBQVEsRUFBRTtRQUNiLEtBQUssTUFBTVUsS0FBSyxJQUFJbE0sd0JBQXdCLEVBQUU7VUFDN0MsSUFBSXdMLFFBQVEsQ0FBQ3pELEdBQUcsQ0FBQ21FLEtBQUssQ0FBQyxFQUFFO1lBQ3hCO1lBQ0E7WUFDQTtZQUNBRCxzQkFBc0IsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUN0Q2pNLHdCQUF3QixDQUFDa00sS0FBSyxDQUEwQixDQUFDeEgsY0FBYyxJQUN4RSxDQUFDLENBQUM7WUFDSDtVQUNEO1FBQ0Q7TUFDRDtNQUNBLElBQUksQ0FBQzJHLElBQUksQ0FBQzVDLFNBQVMsQ0FBQzBELDBCQUEwQixDQUFDWCxRQUFRLEVBQUVTLHNCQUFzQixDQUFDO01BQ2hGLE9BQU9BLHNCQUFzQjtJQUM5Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVkM7SUFBQSxPQWFBRSwwQkFBMEIsR0FGMUIsb0NBR0NDLFNBQXdCLEVBQ3hCQyxnQkFFQyxFQUNNO01BQ1A7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQSxPQU9BQyxTQUFTLEdBRlQscUJBRWtCO01BQ2pCO0lBQUE7O0lBR0Q7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEsT0FPQUMsU0FBUyxHQUZULHFCQUVrQjtNQUNqQjtJQUFBOztJQUdEO0FBQ0Q7QUFDQSxPQUZDO0lBQUEsT0FHQUMsT0FBTyxHQUFQLG1CQUFnQjtNQUNmLE9BQU8sSUFBSSxDQUFDdEIsNEJBQTRCO01BQ3hDLCtCQUFNc0IsT0FBTztJQUNkOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FQQztJQUFBLE9BVU1wQixjQUFjLEdBRnBCLDhCQUVxQnFCLE1BQWdCLEVBQTBDO01BQzlFLE1BQU1DLFFBQW1CLEdBQUcsRUFBRTtNQUFDLGtDQURVQyxJQUFJO1FBQUpBLElBQUk7TUFBQTtNQUU3Q0EsSUFBSSxDQUFDOUwsSUFBSSxDQUFDNkwsUUFBUSxDQUFDO01BQ25CRCxNQUFNLENBQUNwTSxLQUFLLENBQUMsSUFBSSxFQUFFc00sSUFBSSxDQUFDO01BQ3hCLE9BQU9qQyxPQUFPLENBQUNDLEdBQUcsQ0FBQytCLFFBQVEsQ0FBQztJQUM3Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVRDO0lBQUE7SUFZQTtJQUNBRSx3QkFBd0IsR0FIeEIsa0NBR3lCcEIsUUFBdUIsRUFBRXFCLGVBQXlCLEVBQUU7TUFDNUU7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLE9BUUFDLHNCQUFzQixHQUZ0QixnQ0FFdUJ0QixRQUF1QixFQUFnRDtNQUM3RixNQUFNdUIsNEJBQTBFLEdBQUcsRUFBRTtRQUNwRkMsMEJBQXdFLEdBQUcsRUFBRTtNQUM5RSxJQUFJeEIsUUFBUSxFQUFFO1FBQ2IsS0FBSyxNQUFNVSxLQUFLLElBQUlsTSx3QkFBd0IsRUFBRTtVQUM3QyxJQUFJd0wsUUFBUSxDQUFDekQsR0FBRyxDQUFDbUUsS0FBSyxDQUFDLEVBQUU7WUFDeEI7WUFDQWEsNEJBQTRCLENBQUNsTSxJQUFJLENBQ2hDOEIsTUFBTSxDQUFDc0ssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFak4sd0JBQXdCLENBQUNrTSxLQUFLLENBQTBCLENBQUMsQ0FJM0U7WUFDRDtVQUNEO1FBQ0Q7TUFDRDtNQUNBLElBQUksQ0FBQ2IsSUFBSSxDQUFDNUMsU0FBUyxDQUFDbUUsd0JBQXdCLENBQUNwQixRQUFRLEVBQUV3QiwwQkFBMEIsQ0FBQztNQUNsRixPQUFPRCw0QkFBNEIsQ0FBQ2xGLE1BQU0sQ0FBQ21GLDBCQUEwQixDQUFDO0lBQ3ZFOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJDO0lBQUEsT0FXQUUsa0JBQWtCLEdBRmxCLDRCQUVtQkMsbUJBQW9DLEVBQVE7TUFDOUQ7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBLE9BUUFoTCxXQUFXLEdBRlgscUJBRVlxSixRQUF1QixFQUFVO01BQzVDLE9BQU8sSUFBSSxDQUFDNEIsT0FBTyxFQUFFLENBQUNDLFVBQVUsQ0FBQzdCLFFBQVEsQ0FBQzdGLEtBQUssRUFBRSxDQUFDLElBQUk2RixRQUFRLENBQUM3RixLQUFLLEVBQUU7SUFDdkU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBLE9BU00rQyxpQkFBaUIsR0FGdkIsbUNBRXdFO01BQ3ZFLEVBQUUsSUFBSSxDQUFDcUMsd0JBQXdCO01BQy9CLElBQUl1QyxVQUFtQztNQUV2QyxJQUFJO1FBQ0gsTUFBTSxJQUFJLENBQUN0QyxxQkFBcUI7UUFDaEMsTUFBTUcsU0FBd0MsR0FBRyxNQUFNLElBQUksQ0FBQ0MsY0FBYyxDQUFDLElBQUksQ0FBQ0MsSUFBSSxDQUFDNUMsU0FBUyxDQUFDeUUsa0JBQWtCLENBQUM7UUFDbEgsTUFBTUssZUFBZSxHQUFHLE1BQU03QyxPQUFPLENBQUNDLEdBQUcsQ0FFdkNRLFNBQVMsQ0FBQzFJLE1BQU0sQ0FBQyxVQUFVK0ksUUFBUSxFQUFFO1VBQ3BDLE9BQU9BLFFBQVEsSUFBSUEsUUFBUSxDQUFDekQsR0FBRyxJQUFJeUQsUUFBUSxDQUFDekQsR0FBRyxDQUFnQiwyQkFBMkIsQ0FBQztRQUM1RixDQUFDLENBQUMsQ0FDRHlGLEdBQUcsQ0FBQyxNQUFPaEMsUUFBUSxJQUFLO1VBQ3pCLE9BQU8sSUFBSSxDQUFDdkMsb0JBQW9CLENBQUN1QyxRQUFRLENBQUMsQ0FBQ0MsSUFBSSxDQUFFZ0MsT0FBZ0IsSUFBSztZQUNyRSxPQUFPO2NBQ05DLEdBQUcsRUFBRSxJQUFJLENBQUN2TCxXQUFXLENBQUNxSixRQUFRLENBQUM7Y0FDL0JtQyxLQUFLLEVBQUVGO1lBQ1IsQ0FBQztVQUNGLENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUNGO1FBQ0RILFVBQVUsR0FBR0MsZUFBZSxDQUFDaEcsTUFBTSxDQUFDLFVBQVVxRyxPQUFnQyxFQUFFQyxNQUF1QyxFQUFFO1VBQ3hILE1BQU1DLGFBQXNDLEdBQUcsQ0FBQyxDQUFDO1VBQ2pEQSxhQUFhLENBQUNELE1BQU0sQ0FBQ0gsR0FBRyxDQUFDLEdBQUdHLE1BQU0sQ0FBQ0YsS0FBSztVQUN4QyxPQUFPSSxZQUFZLENBQUNILE9BQU8sRUFBRUUsYUFBYSxDQUFDO1FBQzVDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNOLE1BQU1FLGlCQUFpQixHQUFHLE1BQU10RCxPQUFPLENBQUNPLE9BQU8sQ0FBQyxJQUFJLENBQUNnRCx5QkFBeUIsRUFBRSxDQUFDO1FBQ2pGLElBQUlELGlCQUFpQixJQUFJckwsTUFBTSxDQUFDQyxJQUFJLENBQUNvTCxpQkFBaUIsQ0FBQyxDQUFDbkwsTUFBTSxFQUFFO1VBQy9EeUssVUFBVSxDQUFDdk4scUJBQXFCLENBQUMsR0FBR2lPLGlCQUFpQjtRQUN0RDtNQUNELENBQUMsU0FBUztRQUNULEVBQUUsSUFBSSxDQUFDakQsd0JBQXdCO01BQ2hDO01BRUEsT0FBTyxJQUFJLENBQUNBLHdCQUF3QixLQUFLLENBQUMsR0FBR3VDLFVBQVUsR0FBRy9NLFNBQVM7SUFDcEU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQTtJQVdBO0lBQ0EyTix3QkFBd0IsR0FIeEIsa0NBR3lCRixpQkFBeUIsRUFBUTtNQUN6RDtJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBLE9BS0FDLHlCQUF5QixHQUF6QixxQ0FBcUM7TUFDcEMsTUFBTUQsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO01BQzVCLElBQUksQ0FBQzNDLElBQUksQ0FBQzVDLFNBQVMsQ0FBQ3lGLHdCQUF3QixDQUFDRixpQkFBaUIsQ0FBQztNQUMvRCxPQUFPQSxpQkFBaUI7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQSxPQVFNL0Usb0JBQW9CLEdBRjFCLG9DQUUyQnVDLFFBQXVCLEVBQW1CO01BQ3BFLE1BQU0yQyxxQkFBcUIsR0FBRyxJQUFJLENBQUNyQixzQkFBc0IsQ0FBQ3RCLFFBQVEsQ0FBQztNQUNuRSxPQUFPZCxPQUFPLENBQUNDLEdBQUcsQ0FDakJ3RCxxQkFBcUIsQ0FBQ1gsR0FBRyxDQUFDLE1BQU9ZLG9CQUFvQixJQUFLO1FBQ3pELElBQUksT0FBT0Esb0JBQW9CLENBQUNuTyxRQUFRLEtBQUssVUFBVSxFQUFFO1VBQ3hELE1BQU0sSUFBSW9PLEtBQUssQ0FBRSwrREFBOEQ3QyxRQUFRLENBQUNPLFdBQVcsRUFBRSxDQUFDQyxPQUFPLEVBQUcsRUFBQyxDQUFDO1FBQ25IO1FBQ0EsT0FBT29DLG9CQUFvQixDQUFDbk8sUUFBUSxDQUFDcU8sSUFBSSxDQUFDLElBQUksRUFBRTlDLFFBQVEsQ0FBQztNQUMxRCxDQUFDLENBQUMsQ0FDRixDQUFDQyxJQUFJLENBQUU4QyxPQUFpQixJQUFLO1FBQzdCLE9BQU9BLE9BQU8sQ0FBQ2hILE1BQU0sQ0FBQyxVQUFVaUgsV0FBb0MsRUFBRVYsYUFBcUIsRUFBRTtVQUM1RixPQUFPQyxZQUFZLENBQUNTLFdBQVcsRUFBRVYsYUFBYSxDQUFDO1FBQ2hELENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNQLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWkM7SUFBQSxPQWVBVyxxQkFBcUIsR0FGckIsaUNBRWlDO01BQ2hDLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWkM7SUFBQSxPQWVNN0YsY0FBYyxHQUZwQiw4QkFHQzBFLFVBQStDLEVBQy9Db0IsYUFBa0MsRUFDbEN0TCxTQUFtQixFQUNIO01BQ2hCLElBQUksSUFBSSxDQUFDaUksSUFBSSxDQUFDNUMsU0FBUyxDQUFDZ0cscUJBQXFCLEVBQUUsSUFBSSxJQUFJLENBQUNFLHVCQUF1QixFQUFFLEVBQUU7UUFDbEY7TUFDRDtNQUNBLElBQUk7UUFDSDtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUNDLGdDQUFnQyxDQUFDdEIsVUFBVSxFQUFFb0IsYUFBYSxDQUFDbEwsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUNxTCxzQkFBc0IsRUFBRSxFQUFFO1VBQ3RIO1FBQ0Q7UUFDQSxNQUFNLElBQUksQ0FBQ3pELGNBQWMsQ0FBQyxJQUFJLENBQUNDLElBQUksQ0FBQzVDLFNBQVMsQ0FBQ3FHLG9CQUFvQixFQUFFLEVBQUUsRUFBRUosYUFBYSxDQUFDbEwsY0FBYyxDQUFDO1FBQ3JHLE1BQU0ySCxTQUEwQixHQUFHLE1BQU0sSUFBSSxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUM1QyxTQUFTLENBQUN5RSxrQkFBa0IsQ0FBQztRQUNwRyxJQUFJLENBQUNoRCxpQkFBaUIsR0FBR2lCLFNBQVM7UUFDbEMsSUFBSUksYUFBYSxHQUFHYixPQUFPLENBQUNPLE9BQU8sRUFBRTtRQUNyQyxJQUFJOEQsb0JBQW9CLEdBQUcsS0FBSztRQUNoQztBQUNIO0FBQ0E7UUFDRyxNQUFNQyx3QkFBd0IsR0FBRzdELFNBQVMsQ0FBQzVELE1BQU0sQ0FBQyxDQUFDMEgsZ0JBQWlDLEVBQUU3RixPQUFPLEtBQUs7VUFDakcsSUFBSSxDQUFDQSxPQUFPLEVBQUU7WUFDYixPQUFPNkYsZ0JBQWdCO1VBQ3hCO1VBQ0EsTUFBTUMsMEJBQTBCLEdBQUc5RixPQUFPLENBQUNyQixHQUFHLENBQUMsc0NBQXNDLENBQUM7VUFDdEYsSUFBSSxDQUFDZ0gsb0JBQW9CLEVBQUU7WUFDMUJBLG9CQUFvQixHQUFHRywwQkFBMEI7VUFDbEQ7VUFDQUQsZ0JBQWdCLEdBQUdDLDBCQUEwQixHQUFHLENBQUM5RixPQUFPLEVBQUUsR0FBRzZGLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxHQUFHQSxnQkFBZ0IsRUFBRTdGLE9BQU8sQ0FBQztVQUMvRyxPQUFPNkYsZ0JBQWdCO1FBQ3hCLENBQUMsRUFBRSxFQUFFLENBQUM7O1FBRU47UUFDQSxJQUFJLENBQUNGLG9CQUFvQixFQUFFO1VBQzFCLElBQUksQ0FBQzVOLGdDQUFnQyxFQUFFO1FBQ3hDO1FBQ0E2Tix3QkFBd0IsQ0FDdEJ2TSxNQUFNLENBQUMsVUFBVStJLFFBQVEsRUFBRTtVQUMzQixPQUFPQSxRQUFRLENBQUN6RCxHQUFHLENBQUMsMkJBQTJCLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQ0QvRSxPQUFPLENBQUV3SSxRQUFRLElBQUs7VUFDdEIsTUFBTTJELElBQUksR0FBRyxJQUFJLENBQUNoTixXQUFXLENBQUNxSixRQUFRLENBQUM7VUFDdkNELGFBQWEsR0FBR0EsYUFBYSxDQUFDRSxJQUFJLENBQ2pDLElBQUksQ0FBQ3RDLGlCQUFpQixDQUFDd0MsSUFBSSxDQUMxQixJQUFJLEVBQ0pILFFBQVEsRUFDUDhCLFVBQVUsR0FBR0EsVUFBVSxDQUFDNkIsSUFBSSxDQUFDLEdBQUc1TyxTQUFTLEVBQzFDbU8sYUFBYSxFQUNidEwsU0FBUyxJQUFJLEtBQUssQ0FDbEIsQ0FDRDtRQUNGLENBQUMsQ0FBQztRQUVILE1BQU1tSSxhQUFhO1FBQ25CLElBQUltRCxhQUFhLENBQUNsTCxjQUFjLEtBQUszRCxPQUFPLENBQUN1UCxTQUFTLElBQUlWLGFBQWEsQ0FBQ2xMLGNBQWMsS0FBSzNELE9BQU8sQ0FBQzRELE1BQU0sRUFBRTtVQUMxRyxNQUFNLElBQUksQ0FBQzJILGNBQWMsQ0FDeEIsSUFBSSxDQUFDQyxJQUFJLENBQUM1QyxTQUFTLENBQUM0RyxxQkFBcUIsRUFDekMvQixVQUFVLEdBQUdBLFVBQVUsQ0FBQ3ZOLHFCQUFxQixDQUFDLEdBQUdRLFNBQVMsQ0FDMUQ7UUFDRixDQUFDLE1BQU07VUFDTixNQUFNLElBQUksQ0FBQzZLLGNBQWMsQ0FBQyxJQUFJLENBQUNDLElBQUksQ0FBQzVDLFNBQVMsQ0FBQzZHLHlCQUF5QixFQUFFWixhQUFhLENBQUM7VUFDdkYsTUFBTSxJQUFJLENBQUN0RCxjQUFjLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUM1QyxTQUFTLENBQUM4RyxxQ0FBcUMsRUFBRWIsYUFBYSxDQUFDO1FBQ3BHO01BQ0QsQ0FBQyxTQUFTO1FBQ1QsSUFBSTtVQUNILElBQUksQ0FBQyxJQUFJLENBQUNFLGdDQUFnQyxDQUFDdEIsVUFBVSxFQUFFb0IsYUFBYSxDQUFDbEwsY0FBYyxDQUFDLEVBQUU7WUFDckYsTUFBTSxJQUFJLENBQUM0SCxjQUFjLENBQUMsSUFBSSxDQUFDQyxJQUFJLENBQUM1QyxTQUFTLENBQUMrRyxtQkFBbUIsQ0FBQztVQUNuRTtVQUNBLElBQUksQ0FBQ0MsdUJBQXVCLEVBQUU7UUFDL0IsQ0FBQyxDQUFDLE9BQU8zRSxDQUFVLEVBQUU7VUFDcEJ6SixHQUFHLENBQUNELEtBQUssQ0FBQzBKLENBQUMsQ0FBVztRQUN2QjtNQUNEO0lBQ0QsQ0FBQztJQUFBLE9BR0RySyw0QkFBNEIsR0FENUIsc0NBQzZCUCxHQUFzQixFQUFFd1AsVUFBeUIsRUFBVztNQUN4RixNQUFNQyxTQUFTLEdBQUd6UCxHQUFHLENBQUMwUCxXQUFXLEVBQUU7TUFDbkMsSUFBSUMsK0JBQStCLEdBQUcsS0FBSztNQUMzQ0YsU0FBUyxDQUFDM00sT0FBTyxDQUFDLFVBQVU4TSxRQUFRLEVBQUU7UUFDckMsSUFBSUEsUUFBUSxDQUFDL04sTUFBTSxFQUFFLEtBQUsyTixVQUFVLEVBQUU7VUFDckNHLCtCQUErQixHQUFHLElBQUk7UUFDdkM7TUFDRCxDQUFDLENBQUM7TUFDRixPQUFPQSwrQkFBK0I7SUFDdkMsQ0FBQztJQUFBLE9BRURKLHVCQUF1QixHQUF2QixtQ0FBZ0M7TUFDL0IsSUFBSSxJQUFJLENBQUN2RSw0QkFBNEIsRUFBRTtRQUN0QyxNQUFNNkUsMkJBQTJCLEdBQUcsSUFBSSxDQUFDN0UsNEJBQTRCO1FBQ3JFLE9BQU8sSUFBSSxDQUFDQSw0QkFBNEI7UUFDeEM2RSwyQkFBMkIsRUFBRTtNQUM5QjtJQUNELENBQUM7SUFBQSxPQUVEcEIsdUJBQXVCLEdBQXZCLG1DQUFtQztNQUNsQyxPQUFPLENBQUMsSUFBSSxDQUFDekQsNEJBQTRCO0lBQzFDLENBQUM7SUFBQSxPQUVEMEQsZ0NBQWdDLEdBQWhDLDBDQUFpQ25HLFNBQThDLEVBQUV1SCxPQUFlLEVBQVc7TUFDMUcsT0FBTyxDQUFDLENBQUN2SCxTQUFTLElBQUk5RixNQUFNLENBQUNDLElBQUksQ0FBQzZGLFNBQVMsQ0FBQyxDQUFDNUYsTUFBTSxLQUFLLENBQUMsS0FBS21OLE9BQU8sSUFBSW5RLE9BQU8sQ0FBQ3VQLFNBQVM7SUFDM0YsQ0FBQztJQUFBLE9BRURQLHNCQUFzQixHQUF0QixrQ0FBa0M7TUFDakMsTUFBTW9CLGtCQUFrQixHQUFHLElBQUksQ0FBQzVFLElBQUksQ0FBQytCLE9BQU8sRUFBRSxDQUFDNUUsYUFBYSxFQUFFO01BQzlELE9BQ0N5SCxrQkFBa0IsQ0FBQ2xJLEdBQUcsQ0FBeUIsbUNBQW1DLENBQUMsSUFDbkZrSSxrQkFBa0IsQ0FBQ2xJLEdBQUcsQ0FBZ0IsMEJBQTBCLENBQUM7SUFFbkU7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FUQztJQUFBO0lBWUE7SUFDQStHLG9CQUFvQixHQUhwQiw4QkFHcUJvQixTQUEyQixFQUFFMU0sY0FBdUIsRUFBUTtNQUNoRjtJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVJDO0lBQUE7SUFXQTtJQUNBZ00sbUJBQW1CLEdBSG5CLDZCQUdvQlUsU0FBMkIsRUFBUTtNQUN0RDtJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BVEM7SUFBQTtJQVlBO0lBQ0FiLHFCQUFxQixHQUhyQiwrQkFHc0IvQixVQUFrQixFQUFFNEMsU0FBMkIsRUFBUTtNQUM1RTtJQUFBLENBQ0E7SUFBQSxPQUdEWCxxQ0FBcUMsR0FEckMsK0NBRUNZLGNBS0MsRUFDREMsVUFBNEIsRUFDckI7TUFDUDtJQUFBOztJQUdEO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FiQztJQUFBLE9BZ0JBZCx5QkFBeUIsR0FGekI7SUFHQztJQUNBWixhQUtDO0lBQ0Q7SUFDQXdCLFNBQTJCLEVBQ3BCO01BQ1A7SUFBQTs7SUFHRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBLE9BV00vRyxpQkFBaUIsR0FGdkIsaUNBR0NxQyxRQUF1QixFQUN2QnRGLGFBQXFCLEVBQ3JCeUMsY0FBb0MsRUFDcEN2RixTQUFtQixFQUNIO01BQ2hCLE1BQU0rSyxxQkFBcUIsR0FBRyxJQUFJLENBQUNyQixzQkFBc0IsQ0FBQ3RCLFFBQVEsQ0FBQztNQUNuRSxJQUFJRCxhQUFhLEdBQUdiLE9BQU8sQ0FBQ08sT0FBTyxFQUFFO01BQ3JDa0QscUJBQXFCLENBQUNuTCxPQUFPLENBQUVvTCxvQkFBb0IsSUFBSztRQUN2RCxJQUFJLE9BQU9BLG9CQUFvQixDQUFDL04sS0FBSyxLQUFLLFVBQVUsRUFBRTtVQUNyRCxNQUFNLElBQUlnTyxLQUFLLENBQUUsNERBQTJEN0MsUUFBUSxDQUFDTyxXQUFXLEVBQUUsQ0FBQ0MsT0FBTyxFQUFHLEVBQUMsQ0FBQztRQUNoSDtRQUNBVCxhQUFhLEdBQUdBLGFBQWEsQ0FBQ0UsSUFBSSxDQUFDMkMsb0JBQW9CLENBQUMvTixLQUFLLENBQUNzTCxJQUFJLENBQUMsSUFBSSxFQUFFSCxRQUFRLEVBQUV0RixhQUFhLEVBQUV5QyxjQUFjLEVBQUV2RixTQUFTLENBQUMsQ0FBQztNQUM5SCxDQUFDLENBQUM7TUFDRixPQUFPbUksYUFBYTtJQUNyQixDQUFDO0lBQUEsT0FFRDhFLFlBQVksR0FBWix3QkFBcUI7TUFDcEIsT0FBTyxJQUFJO0lBQ1o7O0lBRUE7SUFBQTtJQUFBLE9BQ0FuTixnQkFBZ0IsR0FBaEIsMEJBQWlCaEIsZUFBdUIsRUFBRTVCLFlBQTBCLEVBQWdCO01BQ25GLE1BQU0ySiwwQkFBMEIsR0FBRyxJQUFJLENBQUNBLDBCQUEwQjtNQUNsRSxJQUFJdEgsTUFBTSxDQUFDQyxJQUFJLENBQUNxSCwwQkFBMEIsQ0FBQyxDQUFDcEgsTUFBTSxHQUFHLENBQUMsSUFBSW9ILDBCQUEwQixDQUFDL0gsZUFBZSxDQUFDLEVBQUU7UUFDdEcsSUFBSVMsTUFBTSxDQUFDQyxJQUFJLENBQUNxSCwwQkFBMEIsQ0FBQy9ILGVBQWUsQ0FBQyxDQUFXLENBQUNXLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDcEZvSCwwQkFBMEIsQ0FBQy9ILGVBQWUsQ0FBQyxHQUFHO1lBQUUsR0FBRzVCO1VBQWEsQ0FBQztRQUNsRTtRQUNBLE9BQU87VUFBRW9ELFNBQVMsRUFBRXBELFlBQXNCO1VBQUVpRCxZQUFZLEVBQUUwRywwQkFBMEIsQ0FBQy9ILGVBQWU7UUFBWSxDQUFDO01BQ2xIO01BQ0EsT0FBTzVCLFlBQVk7SUFDcEI7O0lBRUE7SUFBQTtJQXVDQTtJQUFBLE9BQ0FrSyxxQ0FBcUMsR0FBckMsK0NBQXNDTCxpQkFBb0MsRUFBRUksZUFBeUIsRUFBUTtNQUM1RyxNQUFNK0YsUUFBUSxHQUFHO1FBQUVDLHNCQUFzQixFQUFFaEc7TUFBZ0IsQ0FBQztNQUM1RCxNQUFNaUcsT0FBTyxHQUFHLE1BQVk7UUFDM0IsSUFBSSxDQUFDQyxtQ0FBbUMsQ0FBQ2xHLGVBQWUsQ0FBQztNQUMxRCxDQUFDO01BQ0RKLGlCQUFpQixDQUFDdUcsVUFBVSxDQUFDSixRQUFRLEVBQUVFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztNQUNuRHJHLGlCQUFpQixDQUFDd0csWUFBWSxDQUFDTCxRQUFRLEVBQUVFLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBQUEsT0FFREMsbUNBQW1DLEdBQW5DLDZDQUFvQ0csMkJBQXFDLEVBQVE7TUFDaEYsTUFBTTNHLDBCQUEwQixHQUFHLElBQUksQ0FBQ0EsMEJBQTBCO01BQ2xFdEgsTUFBTSxDQUFDQyxJQUFJLENBQUNxSCwwQkFBMEIsQ0FBQyxDQUFDakgsT0FBTyxDQUFFNk4sVUFBVSxJQUFLO1FBQy9ELEtBQUssTUFBTUMsc0JBQXNCLElBQUlGLDJCQUEyQixFQUFFO1VBQ2pFLElBQUlFLHNCQUFzQixDQUFDaEwsUUFBUSxDQUFDK0ssVUFBVSxDQUFDLEVBQUU7WUFDaEQ1RywwQkFBMEIsQ0FBQzRHLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztVQUM1QztRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBLE9BRUR2TiwwQkFBMEIsR0FBMUIsb0NBQ0NDLFlBQWdDLEVBQ2hDNkYsT0FBNkIsRUFDN0JoRyxTQUE4QixFQUM5QjJOLFdBQXFCLEVBQ1g7TUFDVixPQUNDLENBQUMsQ0FBQ3hOLFlBQVksSUFDZCxDQUFDLElBQUksQ0FBQ2pDLDhCQUE4QixDQUFDd0UsUUFBUSxDQUFDc0QsT0FBTyxDQUFDekQsS0FBSyxFQUFFLENBQUMsSUFDOUQsQ0FBQyxJQUFJLENBQUMvRSw0QkFBNEIsQ0FBQ2tGLFFBQVEsQ0FBQ3NELE9BQU8sQ0FBQ3pELEtBQUssRUFBRSxDQUFDLEtBQzNEb0wsV0FBVyxJQUFJLElBQUksQ0FBQyxJQUNyQjNOLFNBQVMsS0FBSyxJQUFJO0lBRXBCLENBQUM7SUFBQTtFQUFBLEVBNXJCc0I0TixtQkFBbUI7RUFBQSxPQStyQjVCeEgsU0FBUztBQUFBIn0=
|