@sapui5/sap.fe.core 1.101.1 → 1.102.2
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/AppComponent.js +5 -5
- package/src/sap/fe/core/AppComponent.ts +19 -18
- package/src/sap/fe/core/AppStateHandler.js +4 -4
- package/src/sap/fe/core/AppStateHandler.ts +9 -9
- package/src/sap/fe/core/CommonUtils.js +59 -93
- package/src/sap/fe/core/CommonUtils.ts +80 -99
- package/src/sap/fe/core/ExtensionAPI.js +2 -4
- package/src/sap/fe/core/ExtensionAPI.ts +1 -3
- package/src/sap/fe/core/PageController.js +14 -9
- package/src/sap/fe/core/PageController.ts +8 -2
- package/src/sap/fe/core/TemplateComponent.js +6 -6
- package/src/sap/fe/core/TemplateComponent.ts +5 -5
- package/src/sap/fe/core/TemplateModel.js +2 -2
- package/src/sap/fe/core/TemplateModel.ts +2 -2
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.js +303 -75
- package/src/sap/fe/core/buildingBlocks/BuildingBlockRuntime.ts +273 -64
- package/src/sap/fe/core/{BusyLocker.js → controllerextensions/BusyLocker.js} +1 -1
- package/src/sap/fe/core/{BusyLocker.ts → controllerextensions/BusyLocker.ts} +7 -7
- package/src/sap/fe/core/controllerextensions/EditFlow.js +234 -123
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +176 -114
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +34 -10
- package/src/sap/fe/core/controllerextensions/InternalEditFlow.ts +44 -12
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +30 -28
- package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +38 -31
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +157 -102
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +155 -103
- package/src/sap/fe/core/controllerextensions/MassEdit.js +4 -3
- package/src/sap/fe/core/controllerextensions/MassEdit.ts +15 -14
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +3 -3
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -2
- package/src/sap/fe/core/controllerextensions/Paginator.js +12 -3
- package/src/sap/fe/core/controllerextensions/Paginator.ts +11 -2
- package/src/sap/fe/core/controllerextensions/Share.js +19 -1
- package/src/sap/fe/core/controllerextensions/Share.ts +18 -0
- package/src/sap/fe/core/controllerextensions/SideEffects.js +2 -2
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
- package/src/sap/fe/core/controllerextensions/ViewState.js +11 -1
- package/src/sap/fe/core/controllerextensions/ViewState.ts +10 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +105 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +98 -0
- package/src/sap/fe/core/controllerextensions/collaboration/ActivitySync.js +360 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ActivitySync.ts +57 -106
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +146 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/CollaborationCommon.ts +6 -6
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.js +4 -4
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/Manage.ts +3 -3
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/ManageDialog.fragment.xml +0 -0
- package/src/sap/fe/core/{actions → controllerextensions}/collaboration/UserDetails.fragment.xml +5 -7
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +1587 -0
- package/src/sap/fe/core/{TransactionHelper.ts → controllerextensions/editFlow/TransactionHelper.ts} +26 -13
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +785 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/draft.ts +179 -22
- package/src/sap/fe/core/controllerextensions/editFlow/operations.js +1175 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/operations.ts +203 -98
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +190 -0
- package/src/sap/fe/core/{actions → controllerextensions/editFlow}/sticky.ts +76 -12
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +597 -0
- package/src/sap/fe/core/{actions → controllerextensions/messageHandler}/messageHandling.ts +46 -27
- package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +940 -0
- package/src/sap/fe/core/{RouterProxy.ts → controllerextensions/routing/RouterProxy.ts} +20 -18
- package/src/sap/fe/core/controls/ActionParameterDialog.fragment.xml +21 -18
- package/src/sap/fe/core/controls/CommandExecution.js +14 -3
- package/src/sap/fe/core/controls/CommandExecution.ts +11 -2
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.js +34 -29
- package/src/sap/fe/core/controls/CustomFilterFieldContentWrapper.ts +33 -29
- package/src/sap/fe/core/controls/CustomQuickViewPage.js +2 -1
- package/src/sap/fe/core/controls/CustomQuickViewPage.ts +1 -0
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossDraft.fragment.xml +11 -3
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +17 -7
- package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.ts +9 -3
- package/src/sap/fe/core/controls/FileWrapper.js +49 -2
- package/src/sap/fe/core/controls/FileWrapper.ts +34 -1
- package/src/sap/fe/core/controls/FormElementWrapper.js +12 -2
- package/src/sap/fe/core/controls/FormElementWrapper.ts +12 -1
- package/src/sap/fe/core/controls/MassEditSelect.js +33 -0
- package/src/sap/fe/core/controls/MassEditSelect.ts +45 -0
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +2 -2
- package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.ts +23 -28
- package/src/sap/fe/core/controls/massEdit/MassEditDialog.fragment.xml +28 -63
- package/src/sap/fe/core/controls/massEdit/MassEditField.fragment.xml +107 -0
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +550 -36
- package/src/sap/fe/core/controls/massEdit/MassEditHandlers.ts +604 -36
- package/src/sap/fe/core/converters/ManifestSettings.js +2 -1
- package/src/sap/fe/core/converters/ManifestSettings.ts +4 -1
- package/src/sap/fe/core/converters/MetaModelConverter.js +11 -40
- package/src/sap/fe/core/converters/MetaModelConverter.ts +56 -84
- package/src/sap/fe/core/converters/annotations/DataField.js +20 -4
- package/src/sap/fe/core/converters/annotations/DataField.ts +24 -2
- package/src/sap/fe/core/converters/controls/Common/Action.js +5 -12
- package/src/sap/fe/core/converters/controls/Common/Action.ts +3 -9
- package/src/sap/fe/core/converters/controls/Common/Chart.js +10 -3
- package/src/sap/fe/core/converters/controls/Common/Chart.ts +8 -3
- package/src/sap/fe/core/converters/controls/Common/Form.js +12 -14
- package/src/sap/fe/core/converters/controls/Common/Form.ts +17 -19
- package/src/sap/fe/core/converters/controls/Common/Table.js +149 -66
- package/src/sap/fe/core/converters/controls/Common/Table.ts +136 -52
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +22 -12
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +23 -12
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -5
- package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +15 -10
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +26 -24
- package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +35 -33
- package/src/sap/fe/core/converters/helpers/Aggregation.js +10 -2
- package/src/sap/fe/core/converters/helpers/Aggregation.ts +18 -13
- package/src/sap/fe/core/converters/helpers/BindingHelper.js +3 -2
- package/src/sap/fe/core/converters/helpers/BindingHelper.ts +6 -5
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +25 -25
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +35 -38
- package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -3
- package/src/sap/fe/core/designtime/AppComponent.designtime.ts +8 -6
- package/src/sap/fe/core/formatters/TableFormatter.js +73 -12
- package/src/sap/fe/core/formatters/TableFormatter.ts +70 -15
- package/src/sap/fe/core/fpm/Component.js +2 -2
- package/src/sap/fe/core/fpm/Component.ts +1 -1
- package/src/sap/fe/core/helpers/BindingExpression.js +10 -7
- package/src/sap/fe/core/helpers/BindingExpression.ts +37 -35
- package/src/sap/fe/core/helpers/ClassSupport.js +1 -1
- package/src/sap/fe/core/helpers/ClassSupport.ts +1 -0
- package/src/sap/fe/core/helpers/FPMHelper.js +3 -2
- package/src/sap/fe/core/helpers/FPMHelper.ts +9 -8
- package/src/sap/fe/core/helpers/MassEditHelper.js +399 -152
- package/src/sap/fe/core/helpers/MassEditHelper.ts +385 -163
- package/src/sap/fe/core/helpers/ModelHelper.js +1 -1
- package/src/sap/fe/core/helpers/ModelHelper.ts +20 -30
- package/src/sap/fe/core/helpers/StableIdHelper.js +5 -1
- package/src/sap/fe/core/helpers/StableIdHelper.ts +8 -4
- package/src/sap/fe/core/{Synchronization.js → helpers/Synchronization.js} +1 -1
- package/src/sap/fe/core/{Synchronization.ts → helpers/Synchronization.ts} +1 -1
- package/src/sap/fe/core/library.js +12 -3
- package/src/sap/fe/core/library.ts +9 -0
- package/src/sap/fe/core/messagebundle.properties +125 -180
- package/src/sap/fe/core/messagebundle_ar.properties +30 -63
- package/src/sap/fe/core/messagebundle_bg.properties +30 -63
- package/src/sap/fe/core/messagebundle_ca.properties +30 -63
- package/src/sap/fe/core/messagebundle_cs.properties +30 -63
- package/src/sap/fe/core/messagebundle_cy.properties +30 -63
- package/src/sap/fe/core/messagebundle_da.properties +31 -64
- package/src/sap/fe/core/messagebundle_de.properties +30 -63
- package/src/sap/fe/core/messagebundle_el.properties +31 -64
- package/src/sap/fe/core/messagebundle_en.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_GB.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +40 -73
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +31 -64
- package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +49 -82
- package/src/sap/fe/core/messagebundle_es.properties +30 -63
- package/src/sap/fe/core/messagebundle_es_MX.properties +30 -63
- package/src/sap/fe/core/messagebundle_et.properties +30 -63
- package/src/sap/fe/core/messagebundle_fi.properties +30 -63
- package/src/sap/fe/core/messagebundle_fr.properties +33 -66
- package/src/sap/fe/core/messagebundle_fr_CA.properties +30 -63
- package/src/sap/fe/core/messagebundle_hi.properties +30 -63
- package/src/sap/fe/core/messagebundle_hr.properties +30 -63
- package/src/sap/fe/core/messagebundle_hu.properties +29 -62
- package/src/sap/fe/core/messagebundle_id.properties +31 -64
- package/src/sap/fe/core/messagebundle_it.properties +30 -63
- package/src/sap/fe/core/messagebundle_iw.properties +30 -63
- package/src/sap/fe/core/messagebundle_ja.properties +30 -63
- package/src/sap/fe/core/messagebundle_kk.properties +30 -63
- package/src/sap/fe/core/messagebundle_ko.properties +30 -63
- package/src/sap/fe/core/messagebundle_lt.properties +30 -63
- package/src/sap/fe/core/messagebundle_lv.properties +30 -63
- package/src/sap/fe/core/messagebundle_ms.properties +31 -64
- package/src/sap/fe/core/messagebundle_nl.properties +31 -64
- package/src/sap/fe/core/messagebundle_no.properties +30 -63
- package/src/sap/fe/core/messagebundle_pl.properties +31 -64
- package/src/sap/fe/core/messagebundle_pt.properties +31 -64
- package/src/sap/fe/core/messagebundle_pt_PT.properties +30 -63
- package/src/sap/fe/core/messagebundle_ro.properties +30 -63
- package/src/sap/fe/core/messagebundle_ru.properties +30 -63
- package/src/sap/fe/core/messagebundle_sh.properties +30 -63
- package/src/sap/fe/core/messagebundle_sk.properties +30 -63
- package/src/sap/fe/core/messagebundle_sl.properties +32 -65
- package/src/sap/fe/core/messagebundle_sv.properties +30 -63
- package/src/sap/fe/core/messagebundle_th.properties +30 -63
- package/src/sap/fe/core/messagebundle_tr.properties +30 -63
- package/src/sap/fe/core/messagebundle_uk.properties +31 -64
- package/src/sap/fe/core/messagebundle_vi.properties +31 -64
- package/src/sap/fe/core/messagebundle_zh_CN.properties +30 -63
- package/src/sap/fe/core/messagebundle_zh_TW.properties +31 -64
- package/src/sap/fe/core/services/EnvironmentServiceFactory.js +6 -3
- package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +10 -9
- package/src/sap/fe/core/services/NavigationServiceFactory.js +2 -2
- package/src/sap/fe/core/services/NavigationServiceFactory.ts +8 -4
- package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -6
- package/src/sap/fe/core/services/RoutingServiceFactory.ts +10 -9
- package/src/sap/fe/core/services/ShellServicesFactory.js +36 -1
- package/src/sap/fe/core/services/ShellServicesFactory.ts +38 -1
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -4
- package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +34 -36
- package/src/sap/fe/core/templating/DisplayModeFormatter.js +1 -1
- package/src/sap/fe/core/templating/DisplayModeFormatter.ts +1 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +1 -9
- package/src/sap/fe/core/templating/EntitySetHelper.ts +11 -13
- package/src/sap/fe/core/templating/FilterHelper.js +4 -4
- package/src/sap/fe/core/templating/FilterHelper.ts +6 -5
- package/src/sap/fe/core/templating/PropertyHelper.js +58 -35
- package/src/sap/fe/core/templating/PropertyHelper.ts +19 -4
- package/src/sap/fe/core/templating/UIFormatters.js +16 -5
- package/src/sap/fe/core/templating/UIFormatters.ts +14 -5
- package/src/sap/fe/core/type/DateTimeWithTimezone.js +47 -0
- package/src/sap/fe/core/type/DateTimeWithTimezone.ts +23 -0
- package/src/sap/fe/core/AnnotationHelper.js +0 -331
- package/src/sap/fe/core/AnnotationHelper.ts +0 -321
- package/src/sap/fe/core/RouterProxy.js +0 -938
- package/src/sap/fe/core/TransactionHelper.js +0 -1577
- package/src/sap/fe/core/actions/collaboration/ActivitySync.js +0 -406
- package/src/sap/fe/core/actions/collaboration/CollaborationCommon.js +0 -146
- package/src/sap/fe/core/actions/draft.js +0 -665
- package/src/sap/fe/core/actions/messageHandling.js +0 -579
- package/src/sap/fe/core/actions/nonDraft.js +0 -20
- package/src/sap/fe/core/actions/nonDraft.ts +0 -12
- package/src/sap/fe/core/actions/operations.js +0 -1096
- package/src/sap/fe/core/actions/sticky.js +0 -130
- package/src/sap/fe/core/formatters/CriticalityFormatter.js +0 -77
- package/src/sap/fe/core/formatters/CriticalityFormatter.ts +0 -58
|
@@ -336,7 +336,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/field/FieldRuntime", "sap/ui/core/
|
|
|
336
336
|
if (sFieldHelperId) {
|
|
337
337
|
var oFilterHelp = Core.byId(sFieldHelperId);
|
|
338
338
|
|
|
339
|
-
if (oFilterHelp) {
|
|
339
|
+
if (oFilterHelp && oFilterHelp.getOutParameters) {
|
|
340
340
|
return Promise.all(oFilterHelp.getOutParameters().map(function (oOutParameter) {
|
|
341
341
|
var oBinding = oOutParameter.getBinding("value");
|
|
342
342
|
return oBinding ? oBinding.requestValue() : Promise.resolve();
|
|
@@ -666,4 +666,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/macros/field/FieldRuntime", "sap/ui/core/
|
|
|
666
666
|
}(ControllerExtension), (_applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "clearPropertiesStatus", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "clearPropertiesStatus"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getRegisteredFailedRequests", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "getRegisteredFailedRequests"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldChange", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "handleFieldGroupChange", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "handleFieldGroupChange"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "addControlSideEffects", [_dec11, _dec12], Object.getOwnPropertyDescriptor(_class2.prototype, "addControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeFailedSideEffects", [_dec13, _dec14], Object.getOwnPropertyDescriptor(_class2.prototype, "removeFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "requestSideEffects", [_dec15, _dec16], Object.getOwnPropertyDescriptor(_class2.prototype, "requestSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeControlSideEffects", [_dec17, _dec18], Object.getOwnPropertyDescriptor(_class2.prototype, "removeControlSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_addFailedSideEffects", [_dec19, _dec20], Object.getOwnPropertyDescriptor(_class2.prototype, "_addFailedSideEffects"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "_getContextForSideEffects", [_dec21, _dec22], Object.getOwnPropertyDescriptor(_class2.prototype, "_getContextForSideEffects"), _class2.prototype)), _class2)) || _class);
|
|
667
667
|
return SideEffectsControllerExtension;
|
|
668
668
|
}, false);
|
|
669
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJvbkluaXQiLCJfb1ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9vQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJfb1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9tRmllbGRHcm91cFF1ZXVlIiwiX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSIsIlNldCIsIl9tRmFpbGVkU2lkZUVmZmVjdHMiLCJjbGVhclByb3BlcnRpZXNTdGF0dXMiLCJjbGVhciIsImdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwib0V2ZW50Iiwib0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJtRXZlbnRGaWVsZFByb3BlcnRpZXMiLCJfZ2V0RmllbGRQcm9wZXJ0aWVzIiwiYUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcyIsIl9pbml0aWFsaXplRmllbGRTaWRlRWZmZWN0cyIsImJJc0ltbWVkaWF0ZVRyaWdnZXJlZCIsIl9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UiLCJ0aGVuIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsIm1TaWRlRWZmZWN0c1Byb3BlcnR5IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJjb250ZXh0IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJkZWJ1ZyIsImZpbHRlciIsIm1JbW1lZGlhdGVTaWRlRWZmZWN0cyIsInByZXZpb3VzbHlGYWlsZWQiLCJmb3JFYWNoIiwiX2FkZEZhaWxlZFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsInRoYXQiLCJhRGVmZXJyZWRTaWRlRWZmZWN0cyIsImFGaWVsZEdyb3VwSWRzIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlIiwib0RlZmVycmVkU2lkZUVmZmVjdCIsImJJc1JlcXVlc3RzVHJpZ2dlcmVkIiwib1NpZGVFZmZlY3RQcm9wZXJ0eSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsIm9Db250ZXh0Iiwic0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibUVudGl0eVR5cGUiLCJfZ2V0RW50aXR5VHlwZUZyb21GUU4iLCJwcm9taXNlcyIsIlNvdXJjZVByb3BlcnRpZXMiLCJldmVyeSIsInNvdXJjZVByb3BlcnR5IiwidHlwZSIsInNJZCIsIl9nZW5lcmF0ZVN0YXR1c0luZGV4IiwidmFsdWUiLCJoYXMiLCJmaW5hbGx5IiwibmFtZSIsInNGaWVsZEdyb3VwSWQiLCJzU2lkZUVmZmVjdE5hbWUiLCJyZXBsYWNlIiwibUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsInByb2Nlc3NTdGFydGVkIiwicHVzaCIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsIm9TaWRlRWZmZWN0cyIsInJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzIiwiZlJlc29sdmVyIiwiZlJlamVjdG9yIiwib1Byb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYVRhcmdldHMiLCJUYXJnZXRFbnRpdGllcyIsImNvbmNhdCIsIlRhcmdldFByb3BlcnRpZXMiLCJzVHJpZ2dlckFjdGlvbiIsIlRyaWdnZXJBY3Rpb24iLCJleGVjdXRlQWN0aW9uIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwib0NvbnRyb2wiLCJzQ29udHJvbElkIiwiaXNBIiwiZ2V0SWQiLCJiSXNOb3RBbHJlYWR5TGlzdGVkIiwibUZhaWxlZFNpZGVFZmZlY3RzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UiLCJiUHJvbWlzZVN1Y2Nlc3MiLCJwcm9taXNlIiwiX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMiLCJmaWVsZCIsIm9GaWVsZCIsInNGaWVsZEhlbHBlcklkIiwiZ2V0RmllbGRIZWxwIiwib0ZpbHRlckhlbHAiLCJDb3JlIiwiYnlJZCIsImdldE91dFBhcmFtZXRlcnMiLCJvT3V0UGFyYW1ldGVyIiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwic1Byb3BlcnR5UGF0aCIsIm1Qcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiX3R5cGUiLCJqb2luIiwidW5kZWZpbmVkIiwiX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsIm9Tb3VyY2VGaWVsZCIsInNTaWRlRWZmZWN0RW50aXR5VHlwZSIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0NvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldENvbnRleHQiLCJzRnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwib0VudGl0eVR5cGUiLCJfZ2V0RmllbGRQcm9taXNlIiwiRmllbGRSdW50aW1lIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJ2YWxpZGl0eSIsImdldFNvdXJjZSIsInNpZGVFZmZlY3RzTWFwIiwiX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAiLCJtU2lkZUVmZmVjdHNNYXAiLCJnZXRGaWVsZEdyb3VwSWRzIiwic1ZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJvVmlld0VudGl0eVNldCIsImVudGl0eVNldHMiLCJvRW50aXR5U2V0IiwiYklzSW1tZWRpYXRlIiwiaW5kZXhPZiIsInNOYW1lIiwiYVNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic1NpZGVFZmZlY3RQYXRoIiwibGVuZ3RoIiwib1NpZGVFZmZlY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiaW1tZWRpYXRlIiwic1ZpZXdFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsIm1GaWVsZFBhdGgiLCJnZXRBZ2dyZWdhdGlvbiIsIm9DdXN0b21EYXRhIiwiZ2V0S2V5Iiwic0ZpZWxkUGF0aCIsImdldFZhbHVlIiwibUNvbnRyb2xFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwic0NvbnRyb2xOYW1lIiwib0NvbnRyb2xTaWRlRWZmZWN0cyIsImluY2x1ZGVzIiwibUZpZWxkU2lkZUVmZmVjdHNNYXAiLCJvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCIsIm1GYWlsZWRTaWRlRWZmZWN0c05hbWUiLCJzU2lkZUVmZmVjdENvbnRleHRQYXRoIiwiYUZhaWxlZFNpZGVFZmZlY3RzIiwibVNpZGVFZmZlY3RDb250ZXh0UGF0aCIsImJTdWNjZXNzIiwib0ZpZWxkQmluZGluZyIsIl9nZXRCaW5kaW5nRm9yRmllbGQiLCJhRmllbGRQYXRocyIsImdldEJpbmRpbmdzIiwic1BhdGgiLCJzQmluZGluZ05hbWUiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFxRE1BLDhCLFdBRExDLGNBQWMsQ0FBQyw4Q0FBRCxDLFVBU2JDLGNBQWMsRSxVQWdCZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVlkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBaUJkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBNkNkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0ZkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBV2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FjZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWdDZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWtCZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRSxXQThHZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRTs7Ozs7Ozs7O1dBOVdSRSxNLEdBRFAsa0JBQ2dCO0FBQ2YsV0FBS0MsTUFB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LE9BQVosQ0FBb0IsVUFBQytILFVBQUQsRUFBd0I7QUFDM0MsY0FBTXZHLEdBQUcsR0FBRyxNQUFJLENBQUNDLG9CQUFMLENBQTBCUixXQUExQixFQUF1QzhHLFVBQXZDLEVBQW1EekMsZUFBbkQsQ0FBWjs7QUFDQSxjQUFJOUQsR0FBSixFQUFTO0FBQ1IsWUFBQSxNQUFJLENBQUN0RCx5QkFBTCxDQUErQjBLLFFBQVEsR0FBRyxRQUFILEdBQWMsS0FBckQsRUFBNERwSCxHQUE1RDtBQUNBO0FBQ0QsU0FMRDtBQU1BO0FBQ0Q7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNTc0gsbUIsR0FBUiw2QkFBNEI1RSxNQUE1QixFQUEyRDtBQUMxRCxVQUFJZ0YsWUFBWSxHQUFHLE9BQW5COztBQUNBLFVBQUloRixNQUFNLENBQUNWLEdBQVAsQ0FBVyxnQkFBWCxDQUFKLEVBQWtDO0FBQ2pDMEYsUUFBQUEsWUFBWSxHQUFHLFVBQWY7QUFDQSxPQUZELE1BRU8sSUFBSWhGLE1BQU0sQ0FBQ1YsR0FBUCxDQUFXLGtDQUFYLENBQUosRUFBb0Q7QUFDMUQwRixRQUFBQSxZQUFZLEdBQUcsV0FBZjtBQUNBOztBQUNELGFBQU9oRixNQUFNLENBQUNTLFVBQVAsQ0FBa0J1RSxZQUFsQixDQUFQO0FBQ0EsSzs7O0lBM25CMkNDLG1CO1NBOG5COUJqTSw4QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udmVydGVyT3V0cHV0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQge1xuXHRDb250cm9sU2lkZUVmZmVjdHNFbnRpdHlEaWN0aW9uYXJ5LFxuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgeyBGaWVsZFJ1bnRpbWUgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZFwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcblxudHlwZSBGaWVsZENvbnRyb2wgPSBDb250cm9sICYge1xuXHRnZXRGaWVsZEhlbHAoKTogc3RyaW5nO1xuXHRnZXRGaWVsZEdyb3VwSWRzKCk6IHN0cmluZ1tdO1xufTtcblxudHlwZSBGaWVsZEV2ZW50UHJvcGVydHlUeXBlID0ge1xuXHRwcm9taXNlOiBQcm9taXNlPGFueT47XG5cdGZpZWxkOiBGaWVsZENvbnRyb2w7XG5cdHNpZGVFZmZlY3RzTWFwOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xufTtcblxudHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0aW1tZWRpYXRlPzogYm9vbGVhbjtcblx0Y29udGV4dDogQ29udGV4dDtcblx0c2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZTtcblx0cHJldmlvdXNseUZhaWxlZD86IGJvb2xlYW47XG59O1xuXG50eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG50eXBlIEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdHNUeXBlW10+O1xuXG50eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZXM6IFByb21pc2U8YW55PltdO1xuXHRzaWRlRWZmZWN0UHJvcGVydHk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZTtcblx0cHJvY2Vzc1N0YXJ0ZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZEdyb3VwUXVldWVNYXBUeXBlID0ge1xuXHRbc2lkZUVmZmVjdE5hbWU6IHN0cmluZ106IHtcblx0XHRbY29udGV4dFBhdGg6IHN0cmluZ106IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZTtcblx0fTtcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlNpZGVFZmZlY3RzXCIpXG5jbGFzcyBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBfb1ZpZXc6IGFueTtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0cHJpdmF0ZSBfbUZpZWxkR3JvdXBRdWV1ZSE6IEZpZWxkR3JvdXBRdWV1ZU1hcFR5cGU7XG5cdHByaXZhdGUgX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSE6IFNldDxzdHJpbmc+O1xuXHRwcml2YXRlIF9vU2lkZUVmZmVjdHNTZXJ2aWNlITogYW55O1xuXHRwcml2YXRlIF9tRmFpbGVkU2lkZUVmZmVjdHMhOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCkge1xuXHRcdHRoaXMuX29WaWV3ID0gKHRoaXMgYXMgYW55KS5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlID0gKHRoaXMuX29BcHBDb21wb25lbnQgYXMgYW55KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlID0ge307XG5cdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlID0gbmV3IFNldCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGNsZWFyUHJvcGVydGllc1N0YXR1c1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBjbGVhclByb3BlcnRpZXNTdGF0dXMoKTogdm9pZCB7XG5cdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlLmNsZWFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHNcblx0ICogQHJldHVybnMge29iamVjdH0gUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSB3b3JrZmxvdyBmb3IgU2lkZUVmZmVjdHMgd2l0aCByZWxhdGVkIGNoYW5nZXMgdG8gYSBmaWVsZFxuXHQgKiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhcmUgbWFuYWdlZDpcblx0ICogIC0gRXhlY3V0ZTogdHJpZ2dlcnMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGlmIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZXZlbnQgaXMgZnVsZmlsbGVkXG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaGFuZGxlRmllbGRDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9ICBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3Qocylcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50OiBFdmVudCwgb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG1FdmVudEZpZWxkUHJvcGVydGllcyA9IHRoaXMuX2dldEZpZWxkUHJvcGVydGllcyhvRXZlbnQpLFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSB0aGlzLl9pbml0aWFsaXplRmllbGRTaWRlRWZmZWN0cyhcblx0XHRcdFx0bUV2ZW50RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZVxuXHRcdFx0KTtcblxuXHRcdGxldCBiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5tYXAoKG1TaWRlRWZmZWN0c1Byb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMobVNpZGVFZmZlY3RzUHJvcGVydHkuc2lkZUVmZmVjdHMsIG1TaWRlRWZmZWN0c1Byb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH0pIHx8IFtdXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0aWYgKGJJc0ltbWVkaWF0ZVRyaWdnZXJlZCkge1xuXHRcdFx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGQgU2lkZUVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBTaWRlRWZmZWN0cyBoYXZlIG5vdCBiZWVuIHRyaWdnZXJlZCBzaW5jZSBwcmVSZXF1aXNpdGUgdmFsaWRhdGlvbiBmYWlscyBzbyB3ZSBuZWVkXG5cdFx0XHRcdFx0ICogdG8ga2VlcCBwcmV2aW91c2x5IGZhaWxlZCByZXF1ZXN0IGFzIEZhaWxlZCByZXF1ZXN0ICh0byBiZSByZXRyaWdnZXIgb24gbmV4dCBjaGFuZ2UpXG5cdFx0XHRcdFx0ICovXG5cblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChtSW1tZWRpYXRlU2lkZUVmZmVjdHMpID0+IG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5wcmV2aW91c2x5RmFpbGVkID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0LmZvckVhY2goKG1JbW1lZGlhdGVTaWRlRWZmZWN0cykgPT5cblx0XHRcdFx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMobUltbWVkaWF0ZVNpZGVFZmZlY3RzLnNpZGVFZmZlY3RzLCBtSW1tZWRpYXRlU2lkZUVmZmVjdHMuY29udGV4dClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2l0aCBhIHJlbGF0ZWQgJ2ZvY3VzIG91dCcgdG8gYSBmaWVsZCBncm91cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Uob0V2ZW50OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10gPSBbXSxcblx0XHRcdGFGaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpO1xuXG5cdFx0Y29uc3QgZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlID0gZnVuY3Rpb24gKG9EZWZlcnJlZFNpZGVFZmZlY3Q6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSkge1xuXHRcdFx0bGV0IGJJc1JlcXVlc3RzVHJpZ2dlcmVkID0gZmFsc2U7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5ID0gb0RlZmVycmVkU2lkZUVmZmVjdC5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dDtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhhdC5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgbUVudGl0eVR5cGUgPSB0aGF0Ll9nZXRFbnRpdHlUeXBlRnJvbUZRTihzRW50aXR5VHlwZSk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChvRGVmZXJyZWRTaWRlRWZmZWN0LnByb21pc2VzKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YklzUmVxdWVzdHNUcmlnZ2VyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly9EZWZlcnJlZCBTaWRlRWZmZWN0cyBhcmUgZXhlY3V0ZWQgb25seSBpZiBhbGwgc291cmNlUHJvcGVydGllcyBoYXZlIG5vIHJlZ2lzdGVyZWQgZmFpbHVyZS5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRtRW50aXR5VHlwZSAmJlxuXHRcdFx0XHRcdFx0KG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMuU291cmNlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXSkuZXZlcnkoKHNvdXJjZVByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChzb3VyY2VQcm9wZXJ0eS50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0lkID0gdGhhdC5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc291cmNlUHJvcGVydHkudmFsdWUsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc0lkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXRoYXQuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZS5oYXMoc0lkKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQucmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMsIG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKG9FcnJvcikgPT4ge1xuXHRcdFx0XHRcdGlmIChiSXNSZXF1ZXN0c1RyaWdnZXJlZCkge1xuXHRcdFx0XHRcdFx0TG9nLmRlYnVnKFwiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgXCIgKyBzQ29udGV4dFBhdGgsIG9FcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoYXQuX21GaWVsZEdyb3VwUXVldWVbb1NpZGVFZmZlY3RQcm9wZXJ0eS5uYW1lXVtzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0YUZpZWxkR3JvdXBJZHMuZm9yRWFjaCgoc0ZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBzdHJpbmcgXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiBpcyBhZGRlZCB0byB0aGUgU2lkZUVmZmVjdHMgbmFtZSBkdXJpbmcgdGVtcGxhdGluZyB0byBrbm93XG5cdFx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHRcdCAqIGJlIGRlZmVycmVkIChvbiBmaWVsZCBncm91cCBmb2N1cyBvdXQpXG5cdFx0XHQgKlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzU2lkZUVmZmVjdE5hbWU6IHN0cmluZyA9IHNGaWVsZEdyb3VwSWQucmVwbGFjZShcIiQkSW1tZWRpYXRlUmVxdWVzdFwiLCBcIlwiKTtcblx0XHRcdGNvbnN0IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cyA9IHRoYXQuX21GaWVsZEdyb3VwUXVldWU/LltzU2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0aWYgKG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHMpLmZvckVhY2goKHNDb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9EZWZlcnJlZFNpZGVFZmZlY3QgPSBtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHRpZiAoIW9EZWZlcnJlZFNpZGVFZmZlY3QucHJvY2Vzc1N0YXJ0ZWQpIHtcblx0XHRcdFx0XHRcdG9EZWZlcnJlZFNpZGVFZmZlY3QucHJvY2Vzc1N0YXJ0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHMucHVzaChvRGVmZXJyZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHMubWFwKChvRGVmZXJyZWRTaWRlRWZmZWN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWVsZEdyb3VwUmVxdWVzdFByb21pc2Uob0RlZmVycmVkU2lkZUVmZmVjdCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIFNpZGVFZmZlY3RzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBhZGRDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbnRpdHlUeXBlIE5hbWUgb2YgdGhlIGVudGl0eSB3aGVyZSB0aGUgU2lkZUVmZmVjdHMgY29udHJvbCB3aWxsIGJlIHJlZ2lzdGVyZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byByZWdpc3Rlci4gRW5zdXJlIHRoZSBzb3VyY2VDb250cm9sSWQgbWF0Y2hlcyB0aGUgYXNzb2NpYXRlZCBTQVBVSTUgY29udHJvbCBJRC5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgYWRkQ29udHJvbFNpZGVFZmZlY3RzKHNFbnRpdHlUeXBlOiBzdHJpbmcsIG9TaWRlRWZmZWN0czogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuYWRkQ29udHJvbFNpZGVFZmZlY3RzKHNFbnRpdHlUeXBlLCBvU2lkZUVmZmVjdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIHF1ZXVlIGNvbnRhaW5pbmcgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzKCk6IHZvaWQge1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVxdWVzdFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSwgb0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGxldCBmUmVzb2x2ZXI6IGFueSwgZlJlamVjdG9yOiBhbnk7XG5cdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmUmVzb2x2ZXIgPSByZXNvbHZlO1xuXHRcdFx0ZlJlamVjdG9yID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFUYXJnZXRzOiBhbnlbXSA9ICgob1NpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzIGFzIGFueVtdKSB8fCBbXSkuY29uY2F0KChvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcyBhcyBhbnlbXSkgfHwgW10pLFxuXHRcdFx0c1RyaWdnZXJBY3Rpb246IFN0cmluZyB8IHVuZGVmaW5lZCA9IChvU2lkZUVmZmVjdHMgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLlRyaWdnZXJBY3Rpb247XG5cblx0XHRpZiAoc1RyaWdnZXJBY3Rpb24pIHtcblx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb0NvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2Vcblx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldHMsIG9Db250ZXh0KVxuXHRcdFx0LnRoZW4oKCkgPT4gZlJlc29sdmVyKCkpXG5cdFx0XHQuY2F0Y2goKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0cywgb0NvbnRleHQpO1xuXHRcdFx0XHRmUmVqZWN0b3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgU2lkZUVmZmVjdHMgY3JlYXRlZCBieSBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZW1vdmVDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sIFNBUFVJNSBDb250cm9sXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250cm9sSWQgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKSAmJiBvQ29udHJvbC5nZXRJZCgpO1xuXG5cdFx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UucmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKHNDb250cm9sSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyB3aWxsIGJlIHJldHJpZ2dlcmVkIG9uIHRoZSBuZXh0IGNoYW5nZSBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2FkZEZhaWxlZFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByaXZhdGUgX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gfHwgW107XG5cdFx0Y29uc3QgYklzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0KG1GYWlsZWRTaWRlRWZmZWN0cykgPT4gb1NpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cdFx0aWYgKGJJc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLnB1c2gob1NpZGVFZmZlY3RzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZ3JvdXAgdGhhdCBpcyByZXF1aXJlZCBiZWZvcmUgcmVxdWVzdGluZyBTaWRlRWZmZWN0cy5cblx0ICogSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgYW5kIG9ubHkgdGhlIGZpZWxkIHJlcXVpcmVzIHRoZSBTaWRlRWZmZWN0cyBvbiB0aGlzIGNvbnRleHQsIHRoZSBTaWRlRWZmZWN0cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuXHQgKiBTaWRlRWZmZWN0cyBxdWV1ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIHRvIGJlIHVzZWQgZm9yIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZShtRXZlbnRGaWVsZFByb3BlcnRpZXM6IEZpZWxkRXZlbnRQcm9wZXJ0eVR5cGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXG5cdFx0bGV0IGJQcm9taXNlU3VjY2VzcyA9IHRydWU7XG5cdFx0cmV0dXJuIG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0YlByb21pc2VTdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTmVlZCB0byBzdG9yZSB0aGUgc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGlzIGZpZWxkIGZvciBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHRcdFx0XHQgKiBzaW5jZSBhbGwgU291cmNlUHJvcGVydGllcyBmb3IgdGhpcyBraW5kIG9mIFNpZGVFZmZlY3RzIG11c3QgYmUgdmFsaWRcblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoYXQuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMobUV2ZW50RmllbGRQcm9wZXJ0aWVzLmZpZWxkLCBiUHJvbWlzZVN1Y2Nlc3MpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgdGhhdCBpcyByZXF1aXJlZCBiZWZvcmUgcmVxdWVzdGluZyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIHRvIGJlIHVzZWQgZm9yIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgb1Byb21pc2UgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMucHJvbWlzZTtcblx0XHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIElmIHRoZSBmaWVsZCBnZXRzIGEgRmllbGRIZWxwZXIsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhbGwgZmllbGRzIGNoYW5nZWQgYnkgdGhpcyBGaWVsZEhlbHBlciBoYXZlIGJlZW4gc2V0LlxuXHRcdFx0ICogVG8gYWNoaWV2ZSB0aGlzLCB3ZSBlbnN1cmUgdGhhdCBhbGwgcmVsYXRlZCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVzb2x2ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyByZXNvbHV0aW9uIHByb2Nlc3MgaXMgbm90IG1hbmFnZWQgYnkgdGhlIEZpZWxkIEV2ZW50IFByb21pc2UsIHNvIGZvciBmYXN0IHVzZXIgYWN0aW9ucyAobGlrZSBhdXRvbWF0aW9uKSBpdCBjYW4gbG9jayB0aGUgbW9kZWxcblx0XHRcdCAqIGFuZCBubyByZXF1ZXN0IGNhbiBiZSBleGVjdXRlZC5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb0ZpZWxkID0gbUV2ZW50RmllbGRQcm9wZXJ0aWVzLmZpZWxkO1xuXHRcdFx0Y29uc3Qgc0ZpZWxkSGVscGVySWQgPSBvRmllbGQuZ2V0RmllbGRIZWxwICYmIG9GaWVsZC5nZXRGaWVsZEhlbHAoKTtcblx0XHRcdGlmIChzRmllbGRIZWxwZXJJZCkge1xuXHRcdFx0XHRjb25zdCBvRmlsdGVySGVscDogYW55ID0gQ29yZS5ieUlkKHNGaWVsZEhlbHBlcklkKTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJIZWxwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0XHRcdFx0KG9GaWx0ZXJIZWxwLmdldE91dFBhcmFtZXRlcnMoKSBhcyBhbnlbXSkubWFwKChvT3V0UGFyYW1ldGVyKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9CaW5kaW5nID0gb091dFBhcmFtZXRlci5nZXRCaW5kaW5nKFwidmFsdWVcIik7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBvQmluZGluZyA/IG9CaW5kaW5nLnJlcXVlc3RWYWx1ZSgpIDogUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChbXSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIGEgc3RhdHVzIGluZGV4LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dlbmVyYXRlU3RhdHVzSW5kZXhcblx0ICogQHBhcmFtIHtvYmplY3R9IG1FbnRpdHlUeXBlIFRoZSBlbnRpdHkgdHlwZVxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc1Byb3BlcnR5UGF0aCBUaGUgcHJvcGVydHkgcGF0aFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRleHQgU0FQVUk1IENvbnRleHRcblx0ICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0gSW5kZXhcblx0ICovXG5cdHByaXZhdGUgX2dlbmVyYXRlU3RhdHVzSW5kZXgobUVudGl0eVR5cGU6IEVudGl0eVR5cGUsIHNQcm9wZXJ0eVBhdGg6IHN0cmluZywgb0NvbnRleHQ/OiBDb250ZXh0IHwgbnVsbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb0NvbnRleHQ/LmdldFBhdGgoKTtcblx0XHRjb25zdCBtUHJvcGVydHkgPSBtRW50aXR5VHlwZS5yZXNvbHZlUGF0aChzUHJvcGVydHlQYXRoKTtcblx0XHRpZiAobVByb3BlcnR5KSB7XG5cdFx0XHRpZiAobVByb3BlcnR5ICYmIG1Qcm9wZXJ0eS5fdHlwZSA9PT0gXCJQcm9wZXJ0eVwiKSB7XG5cdFx0XHRcdHJldHVybiBbbVByb3BlcnR5LmZ1bGx5UXVhbGlmaWVkTmFtZSwgc0NvbnRleHRQYXRoXS5qb2luKFwiX19cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgYXBwcm9wcmlhdGUgY29udGV4dCBvbiB3aGljaCBTaWRlRWZmZWN0cyBjYW4gYmUgcmVxdWVzdGVkLlxuXHQgKiBUaGUgY29ycmVjdCBvbmUgbXVzdCBoYXZlIHRoZSBiaW5kaW5nIHBhcmFtZXRlciAkJHBhdGNoV2l0aG91dFNpZGVFZmZlY3RzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldENvbnRleHRGb3JTaWRlRWZmZWN0c1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb1NvdXJjZUZpZWxkIEZpZWxkXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzU2lkZUVmZmVjdEVudGl0eVR5cGUgVGFyZ2V0IGVudGl0eSB0eXBlIG9mIHRoZSBTaWRlRWZmZWN0cyBhbm5vdGF0aW9uXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFNBUFVJNSBDb250ZXh0XG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByaXZhdGUgX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyhvU291cmNlRmllbGQ6IEZpZWxkQ29udHJvbCwgc1NpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvU291cmNlRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRsZXQgb0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IG9CaW5kaW5nQ29udGV4dCxcblx0XHRcdHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblxuXHRcdGlmIChzU2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gKG9CaW5kaW5nQ29udGV4dCBhcyBhbnkpLmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCk7XG5cdFx0XHRpZiAob0NvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpO1xuXHRcdFx0XHRpZiAoc1NpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSAob0NvbnRleHRGb3JTaWRlRWZmZWN0cyBhcyBhbnkpLmdldEJpbmRpbmcoKS5nZXRDb250ZXh0KCk7XG5cdFx0XHRcdFx0aWYgKG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0XHRcdHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0NvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdFx0XHRpZiAoc1NpZGVFZmZlY3RFbnRpdHlUeXBlICE9PSBzRW50aXR5VHlwZSkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvQ29udGV4dEZvclNpZGVFZmZlY3RzIHx8IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIEVudGl0eVR5cGUgYmFzZWQgb24gaXRzIGZ1bGx5LXF1YWxpZmllZCBuYW1lLlxuXHQgKlxuXHQgKiBAcGFyYW0ge3N0cmluZ30gc0Z1bGx5UXVhbGlmaWVkTmFtZSBUaGUgZnVsbHktcXVhbGlmaWVkIG5hbWVcblx0ICogQHJldHVybnMge29iamVjdH0gVGhlIGVudGl0eSB0eXBlXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRFbnRpdHlUeXBlRnJvbUZRTihzRnVsbHlRdWFsaWZpZWROYW1lOiBzdHJpbmcpOiBFbnRpdHlUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtRW50aXR5VHlwZSA9ICh0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnZlcnRlZE1ldGFNb2RlbCgpIGFzIENvbnZlcnRlck91dHB1dCkuZW50aXR5VHlwZXMuZmluZCgob0VudGl0eVR5cGUpID0+IHtcblx0XHRcdHJldHVybiBvRW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUgPT09IHNGdWxseVF1YWxpZmllZE5hbWU7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1FbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb21pc2Ugb2YgdGhlIGZpZWxkIHZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIFNpZGVFZmZlY3RzIHByb2Nlc3MuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRXZlbnQgRmllbGQgY2hhbmdlIGV2ZW50XG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IEZpZWxkIHByb21pc2Vcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkUHJvbWlzZShvRXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxhbnk+IHtcblx0XHRjb25zdCBwcm9taXNlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInByb21pc2VcIikgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IHtcblx0XHRcdGNvbnN0IG9Qcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuXHRcdFx0XHRpZiAoIUZpZWxkUnVudGltZS5nZXRGaWVsZFN0YXRlT25DaGFuZ2Uob0V2ZW50KS5zdGF0ZS52YWxpZGl0eSkge1xuXHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHByb3BlcnRpZXMgb2YgdGhlIGZpZWxkIHRoYXQgYXJlIHJlcXVpcmVkIGZvciB0aGUgU2lkZUVmZmVjdHMgcHJvY2Vzcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFByb3BlcnRpZXNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBGaWVsZCBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gRmllbGQgcHJvcGVydGllcyAoZXZlbnQgY2hhbmdlIHByb21pc2UsIGZpZWxkLCBTaWRlRWZmZWN0cyByZWxhdGVkIHRvIHRoaXMgZmllbGQpXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFByb3BlcnRpZXMob0V2ZW50OiBFdmVudCk6IEZpZWxkRXZlbnRQcm9wZXJ0eVR5cGUge1xuXHRcdGNvbnN0IG9GaWVsZDogRmllbGRDb250cm9sID0gb0V2ZW50LmdldFNvdXJjZSgpIGFzIEZpZWxkQ29udHJvbDtcblxuXHRcdHJldHVybiB7XG5cdFx0XHRwcm9taXNlOiB0aGlzLl9nZXRGaWVsZFByb21pc2Uob0V2ZW50KSxcblx0XHRcdGZpZWxkOiBvRmllbGQsXG5cdFx0XHRzaWRlRWZmZWN0c01hcDogdGhpcy5fZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQpXG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBTaWRlRWZmZWN0cyBtYXBcblx0ICogVGhlc2UgU2lkZUVmZmVjdHMgYXJlXG5cdCAqIC0gbGlzdGVkIGludG8gRmllbGRHcm91cElkcyAoY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZSlcblx0ICogLSBnZW5lcmF0ZWQgYnkgYSBjb250cm9sIG9yIGNvbnRyb2xzIGFuZCB0aGF0IGNvbmZpZ3VyZSB0aGlzIGZpZWxkIGFzIFNvdXJjZVByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcFxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkIEZpZWxkXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9IFNpZGVFZmZlY3RzIG1hcFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRTaWRlRWZmZWN0c01hcChvRmllbGQ6IEZpZWxkQ29udHJvbCk6IEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkge1xuXHRcdGNvbnN0IG1TaWRlRWZmZWN0c01hcDogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSA9IHt9LFxuXHRcdFx0YUZpZWxkR3JvdXBJZHM6IHN0cmluZ1tdID0gb0ZpZWxkLmdldEZpZWxkR3JvdXBJZHMoKSxcblx0XHRcdHNWaWV3RW50aXR5U2V0U2V0TmFtZSA9IHRoaXMuX29WaWV3LmdldFZpZXdEYXRhKCkuZW50aXR5U2V0LFxuXHRcdFx0b1ZpZXdFbnRpdHlTZXQgPSAodGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb252ZXJ0ZWRNZXRhTW9kZWwoKSBhcyBDb252ZXJ0ZXJPdXRwdXQpLmVudGl0eVNldHMuZmluZCgob0VudGl0eVNldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gb0VudGl0eVNldC5uYW1lID09PSBzVmlld0VudGl0eVNldFNldE5hbWU7XG5cdFx0XHR9KTtcblxuXHRcdC8vIFNpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGFuIE9EYXRhIFNlcnZpY2Vcblx0XHRhRmllbGRHcm91cElkcy5mb3JFYWNoKChzRmllbGRHcm91cElkKSA9PiB7XG5cdFx0XHRjb25zdCBiSXNJbW1lZGlhdGU6IGJvb2xlYW4gPSBzRmllbGRHcm91cElkLmluZGV4T2YoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIikgIT09IC0xLFxuXHRcdFx0XHRzTmFtZTogc3RyaW5nID0gc0ZpZWxkR3JvdXBJZC5yZXBsYWNlKFwiJCRJbW1lZGlhdGVSZXF1ZXN0XCIsIFwiXCIpLFxuXHRcdFx0XHRhU2lkZUVmZmVjdFBhcnRzOiBzdHJpbmdbXSA9IHNOYW1lLnNwbGl0KFwiI1wiKSxcblx0XHRcdFx0c1NpZGVFZmZlY3RFbnRpdHlUeXBlOiBzdHJpbmcgPSBhU2lkZUVmZmVjdFBhcnRzWzBdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdFBhdGg6IHN0cmluZyA9XG5cdFx0XHRcdFx0c1NpZGVFZmZlY3RFbnRpdHlUeXBlICtcblx0XHRcdFx0XHRcIkBjb20uc2FwLnZvY2FidWxhcmllcy5Db21tb24udjEuU2lkZUVmZmVjdHNcIiArXG5cdFx0XHRcdFx0KGFTaWRlRWZmZWN0UGFydHMubGVuZ3RoID09PSAyID8gXCIjXCIgKyBhU2lkZUVmZmVjdFBhcnRzWzFdIDogXCJcIiksXG5cdFx0XHRcdG9TaWRlRWZmZWN0OiBTaWRlRWZmZWN0c1R5cGUgfCB1bmRlZmluZWQgPVxuXHRcdFx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0T0RhdGFFbnRpdHlTaWRlRWZmZWN0cyhzU2lkZUVmZmVjdEVudGl0eVR5cGUpPy5bc1NpZGVFZmZlY3RQYXRoXSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgPSB0aGlzLl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob0ZpZWxkLCBzU2lkZUVmZmVjdEVudGl0eVR5cGUpO1xuXHRcdFx0aWYgKG9TaWRlRWZmZWN0ICYmIG9Db250ZXh0KSB7XG5cdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc05hbWUsXG5cdFx0XHRcdFx0aW1tZWRpYXRlOiBiSXNJbW1lZGlhdGUsXG5cdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0LFxuXHRcdFx0XHRcdGNvbnRleHQ6IG9Db250ZXh0XG5cdFx0XHRcdH07XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvL1NpZGVFZmZlY3RzIGNvbWluZyBmcm9tIGNvbnRyb2wocylcblx0XHRpZiAoc1ZpZXdFbnRpdHlTZXRTZXROYW1lICYmIG9WaWV3RW50aXR5U2V0KSB7XG5cdFx0XHRjb25zdCBzVmlld0VudGl0eVR5cGUgPSBvVmlld0VudGl0eVNldC5lbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSxcblx0XHRcdFx0bUZpZWxkUGF0aDogYW55ID0gKG9GaWVsZC5nZXRBZ2dyZWdhdGlvbihcImN1c3RvbURhdGFcIikgYXMgYW55W10pLmZpbmQoKG9DdXN0b21EYXRhKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIG9DdXN0b21EYXRhLmdldEtleSgpID09PSBcInNvdXJjZVBhdGhcIjtcblx0XHRcdFx0fSksXG5cdFx0XHRcdG9Db250ZXh0OiBDb250ZXh0IHwgdW5kZWZpbmVkID0gdGhpcy5fZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9GaWVsZCwgc1ZpZXdFbnRpdHlUeXBlKTtcblxuXHRcdFx0aWYgKG1GaWVsZFBhdGggJiYgb0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc0ZpZWxkUGF0aCA9IG1GaWVsZFBhdGguZ2V0VmFsdWUoKS5yZXBsYWNlKFwiL1wiICsgc1ZpZXdFbnRpdHlTZXRTZXROYW1lICsgXCIvXCIsIFwiXCIpLFxuXHRcdFx0XHRcdG1Db250cm9sRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzKFxuXHRcdFx0XHRcdFx0c1ZpZXdFbnRpdHlUeXBlXG5cdFx0XHRcdFx0KSBhcyBDb250cm9sU2lkZUVmZmVjdHNFbnRpdHlEaWN0aW9uYXJ5O1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udHJvbEVudGl0eVR5cGUpLmZvckVhY2goKHNDb250cm9sTmFtZSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9Db250cm9sU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSA9IG1Db250cm9sRW50aXR5VHlwZVtzQ29udHJvbE5hbWVdO1xuXHRcdFx0XHRcdGlmICgob0NvbnRyb2xTaWRlRWZmZWN0cy5Tb3VyY2VQcm9wZXJ0aWVzIGFzIHN0cmluZ1tdKS5pbmNsdWRlcyhzRmllbGRQYXRoKSkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgc05hbWUgPSBzQ29udHJvbE5hbWUgKyBcIjo6XCIgKyBzVmlld0VudGl0eVR5cGU7XG5cdFx0XHRcdFx0XHRtU2lkZUVmZmVjdHNNYXBbc05hbWVdID0ge1xuXHRcdFx0XHRcdFx0XHRuYW1lOiBzTmFtZSxcblx0XHRcdFx0XHRcdFx0aW1tZWRpYXRlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb0NvbnRyb2xTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdFx0Y29udGV4dDogb0NvbnRleHRcblx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIG1TaWRlRWZmZWN0c01hcDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSBTaWRlRWZmZWN0cyB3aXRoIHJlbGF0ZWQgY2hhbmdlcyB0byBhIGZpZWxkXG5cdCAqIExpc3Q6IGdldHMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzXG5cdCAqIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgZXZlbnQgcHJvcGVydGllc1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgYmVmb3JlIGV4ZWN1dGluZyBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHQgKiBAcmV0dXJucyB7QXJyYXl9ICBBcnJheSBvZiBpbW1lZGlhdGUgU2lkZUVmZmVjdHNcblx0ICovXG5cdHByaXZhdGUgX2luaXRpYWxpemVGaWVsZFNpZGVFZmZlY3RzKFxuXHRcdG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSxcblx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZT86IFByb21pc2U8YW55PlxuXHQpOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSB7XG5cdFx0Y29uc3QgbUZpZWxkU2lkZUVmZmVjdHNNYXAgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMuc2lkZUVmZmVjdHNNYXAsXG5cdFx0XHRvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCA9IHRoaXMuX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKSwgLy8gUHJvbWlzZSBtYW5hZ2luZyBGaWVsZEdyb3VwIHJlcXVlc3RzIGlmIEZpZWxkIHByb21pc2UgZmFpbHNcblx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWU6IGFueSA9IHt9LFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSBbXTtcblxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlID0gb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgfHwgUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0XHRPYmplY3Qua2V5cyhtRmllbGRTaWRlRWZmZWN0c01hcCkuZm9yRWFjaCgoc1NpZGVFZmZlY3ROYW1lKSA9PiB7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5OiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSBtRmllbGRTaWRlRWZmZWN0c01hcFtzU2lkZUVmZmVjdE5hbWVdLFxuXHRcdFx0XHRzU2lkZUVmZmVjdENvbnRleHRQYXRoID0gb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0LmdldFBhdGgoKSxcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdO1xuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGVyZSBpcyBhbnkgcHJldmlvdXNseSBmYWlsZWQgcmVxdWVzdCBmb3IgdGhpcyBjb250ZXh0XG5cdFx0XHRpZiAoYUZhaWxlZFNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdGRlbGV0ZSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF07XG5cdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSB7fTtcblx0XHRcdFx0YUZhaWxlZFNpZGVFZmZlY3RzLmZvckVhY2goKG1GYWlsZWRTaWRlRWZmZWN0cykgPT4ge1xuXHRcdFx0XHRcdG1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF1bbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0gPSB0cnVlO1xuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBzU2lkZUVmZmVjdE5hbWUsXG5cdFx0XHRcdFx0XHRwcmV2aW91c2x5RmFpbGVkOiB0cnVlLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG1GYWlsZWRTaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGlmIChvU2lkZUVmZmVjdFByb3BlcnR5LmltbWVkaWF0ZSkge1xuXHRcdFx0XHQvLyBTaWRlRWZmZWN0cyB3aWxsIGJlIGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFmdGVyIGV2ZW50IHByb21pc2UgdmFsaWRhdGlvblxuXHRcdFx0XHRpZiAoIW1GYWlsZWRTaWRlRWZmZWN0c05hbWVbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0/LltvU2lkZUVmZmVjdFByb3BlcnR5LnNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZV0pIHtcblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzLnB1c2goe1xuXHRcdFx0XHRcdFx0bmFtZTogc1NpZGVFZmZlY3ROYW1lLFxuXHRcdFx0XHRcdFx0c2lkZUVmZmVjdHM6IG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMsXG5cdFx0XHRcdFx0XHRjb250ZXh0OiBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQWRkIGRlZmVycmVkIFNpZGVFZmZlY3RzIHRvIHRoZSByZWxhdGVkIGRpY3Rpb25hcnlcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdIHx8IHt9O1xuXHRcdFx0XHRjb25zdCBtU2lkZUVmZmVjdENvbnRleHRQYXRoID0gdGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdIHx8IHtcblx0XHRcdFx0XHRwcm9taXNlczogW10sXG5cdFx0XHRcdFx0c2lkZUVmZmVjdFByb3BlcnR5OiBvU2lkZUVmZmVjdFByb3BlcnR5LFxuXHRcdFx0XHRcdHByb2Nlc3NTdGFydGVkOiBmYWxzZVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRtU2lkZUVmZmVjdENvbnRleHRQYXRoLnByb21pc2VzID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aC5wcm9taXNlcy5jb25jYXQoW1xuXHRcdFx0XHRcdG9GaWVsZFByb21pc2VGb3JGaWVsZEdyb3VwLFxuXHRcdFx0XHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlIGFzIFByb21pc2U8YW55PlxuXHRcdFx0XHRdKTtcblx0XHRcdFx0dGhpcy5fbUZpZWxkR3JvdXBRdWV1ZVtzU2lkZUVmZmVjdE5hbWVdW3NTaWRlRWZmZWN0Q29udGV4dFBhdGhdID0gbVNpZGVFZmZlY3RDb250ZXh0UGF0aDtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gYUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBTYXZlcyB0aGUgdmFsaWRhdGlvbiBzdGF0dXMgb2YgcHJvcGVydGllcyByZWxhdGVkIHRvIGEgZmllbGQgY29udHJvbC5cblx0ICpcblx0ICogQHBhcmFtIHtvYmplY3R9IG9GaWVsZCBGaWVsZFxuXHQgKiBAcGFyYW0ge2Jvb2xlYW59IGJTdWNjZXNzIFN0YXR1cyBvZiB0aGUgZmllbGQgdmFsaWRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBfc2F2ZUZpZWxkUHJvcGVydGllc1N0YXR1cyhvRmllbGQ6IEZpZWxkQ29udHJvbCwgYlN1Y2Nlc3M6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRjb25zdCBvQmluZGluZ0NvbnRleHQgPSBvRmllbGQuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRjb25zdCBzRW50aXR5VHlwZSA9IHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0KG9CaW5kaW5nQ29udGV4dCk7XG5cdFx0Y29uc3QgbUVudGl0eVR5cGUgPSB0aGlzLl9nZXRFbnRpdHlUeXBlRnJvbUZRTihzRW50aXR5VHlwZSk7XG5cdFx0aWYgKG1FbnRpdHlUeXBlKSB7XG5cdFx0XHQvLyBSZXRyaWV2ZXMgYWxsIHByb3BlcnRpZXMgdXNlZCBieSB0aGUgZmllbGRcblx0XHRcdGNvbnN0IG9GaWVsZEJpbmRpbmc6IGFueSA9IHRoaXMuX2dldEJpbmRpbmdGb3JGaWVsZChvRmllbGQpO1xuXHRcdFx0Y29uc3QgYUZpZWxkUGF0aHMgPSBvRmllbGRCaW5kaW5nLmlzQShcInNhcC51aS5tb2RlbC5Db21wb3NpdGVCaW5kaW5nXCIpXG5cdFx0XHRcdD8gKG9GaWVsZEJpbmRpbmcuZ2V0QmluZGluZ3MoKSB8fCBbXSkubWFwKChvQmluZGluZzogYW55KSA9PiBvQmluZGluZy5zUGF0aClcblx0XHRcdFx0OiBbb0ZpZWxkQmluZGluZy5nZXRQYXRoKCldO1xuXG5cdFx0XHQvLyBTdG9yZXMgc3RhdHVzIGZvciBhbGwgcHJvcGVydGllc1xuXHRcdFx0YUZpZWxkUGF0aHMuZm9yRWFjaCgoc0ZpZWxkUGF0aDogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNJZCA9IHRoaXMuX2dlbmVyYXRlU3RhdHVzSW5kZXgobUVudGl0eVR5cGUsIHNGaWVsZFBhdGgsIG9CaW5kaW5nQ29udGV4dCk7XG5cdFx0XHRcdGlmIChzSWQpIHtcblx0XHRcdFx0XHR0aGlzLl9hU291cmNlUHJvcGVydGllc0ZhaWx1cmVbYlN1Y2Nlc3MgPyBcImRlbGV0ZVwiIDogXCJhZGRcIl0oc0lkKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgcHJvcGVydHkgYmluZGluZyB0byB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0ZpZWxkIEZpZWxkXG5cdCAqIEByZXR1cm5zIHtCaW5kaW5nfSAgQmluZGluZyB0byB0aGUgdmFsdWVcblx0ICovXG5cdHByaXZhdGUgX2dldEJpbmRpbmdGb3JGaWVsZChvRmllbGQ6IEZpZWxkQ29udHJvbCk6IEJpbmRpbmcge1xuXHRcdGxldCBzQmluZGluZ05hbWUgPSBcInZhbHVlXCI7XG5cdFx0aWYgKG9GaWVsZC5pc0EoXCJzYXAubS5DaGVja0JveFwiKSkge1xuXHRcdFx0c0JpbmRpbmdOYW1lID0gXCJzZWxlY3RlZFwiO1xuXHRcdH0gZWxzZSBpZiAob0ZpZWxkLmlzQShcInNhcC5mZS5jb3JlLmNvbnRyb2xzLkZpbGVXcmFwcGVyXCIpKSB7XG5cdFx0XHRzQmluZGluZ05hbWUgPSBcInVwbG9hZFVybFwiO1xuXHRcdH1cblx0XHRyZXR1cm4gb0ZpZWxkLmdldEJpbmRpbmcoc0JpbmRpbmdOYW1lKTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb247XG4iXX0=
|
|
669
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlNpZGVFZmZlY3RzLnRzIl0sIm5hbWVzIjpbIlNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbiIsImRlZmluZVVJNUNsYXNzIiwibWV0aG9kT3ZlcnJpZGUiLCJwdWJsaWNFeHRlbnNpb24iLCJmaW5hbEV4dGVuc2lvbiIsInByaXZhdGVFeHRlbnNpb24iLCJvbkluaXQiLCJfb1ZpZXciLCJiYXNlIiwiZ2V0VmlldyIsIl9vQXBwQ29tcG9uZW50IiwiQ29tbW9uVXRpbHMiLCJnZXRBcHBDb21wb25lbnQiLCJfb1NpZGVFZmZlY3RzU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsIl9tRmllbGRHcm91cFF1ZXVlIiwiX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSIsIlNldCIsIl9tRmFpbGVkU2lkZUVmZmVjdHMiLCJjbGVhclByb3BlcnRpZXNTdGF0dXMiLCJjbGVhciIsImdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cyIsImhhbmRsZUZpZWxkQ2hhbmdlIiwib0V2ZW50Iiwib0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUiLCJtRXZlbnRGaWVsZFByb3BlcnRpZXMiLCJfZ2V0RmllbGRQcm9wZXJ0aWVzIiwiYUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcyIsIl9pbml0aWFsaXplRmllbGRTaWRlRWZmZWN0cyIsImJJc0ltbWVkaWF0ZVRyaWdnZXJlZCIsIl9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UiLCJ0aGVuIiwiUHJvbWlzZSIsImFsbCIsIm1hcCIsIm1TaWRlRWZmZWN0c1Byb3BlcnR5IiwicmVxdWVzdFNpZGVFZmZlY3RzIiwic2lkZUVmZmVjdHMiLCJjb250ZXh0IiwiY2F0Y2giLCJvRXJyb3IiLCJMb2ciLCJkZWJ1ZyIsImZpbHRlciIsIm1JbW1lZGlhdGVTaWRlRWZmZWN0cyIsInByZXZpb3VzbHlGYWlsZWQiLCJmb3JFYWNoIiwiX2FkZEZhaWxlZFNpZGVFZmZlY3RzIiwiaGFuZGxlRmllbGRHcm91cENoYW5nZSIsInRoYXQiLCJhRGVmZXJyZWRTaWRlRWZmZWN0cyIsImFGaWVsZEdyb3VwSWRzIiwiZ2V0UGFyYW1ldGVyIiwiZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlIiwib0RlZmVycmVkU2lkZUVmZmVjdCIsImJJc1JlcXVlc3RzVHJpZ2dlcmVkIiwib1NpZGVFZmZlY3RQcm9wZXJ0eSIsInNpZGVFZmZlY3RQcm9wZXJ0eSIsIm9Db250ZXh0Iiwic0NvbnRleHRQYXRoIiwiZ2V0UGF0aCIsInNFbnRpdHlUeXBlIiwiZ2V0RW50aXR5VHlwZUZyb21Db250ZXh0IiwibUVudGl0eVR5cGUiLCJfZ2V0RW50aXR5VHlwZUZyb21GUU4iLCJwcm9taXNlcyIsIlNvdXJjZVByb3BlcnRpZXMiLCJldmVyeSIsInNvdXJjZVByb3BlcnR5IiwidHlwZSIsInNJZCIsIl9nZW5lcmF0ZVN0YXR1c0luZGV4IiwidmFsdWUiLCJoYXMiLCJmaW5hbGx5IiwibmFtZSIsInNGaWVsZEdyb3VwSWQiLCJzU2lkZUVmZmVjdE5hbWUiLCJyZXBsYWNlIiwibUNvbnRleHREZWZlcnJlZFNpZGVFZmZlY3RzIiwiT2JqZWN0Iiwia2V5cyIsInByb2Nlc3NTdGFydGVkIiwicHVzaCIsImFkZENvbnRyb2xTaWRlRWZmZWN0cyIsIm9TaWRlRWZmZWN0cyIsInJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzIiwiZlJlc29sdmVyIiwiZlJlamVjdG9yIiwib1Byb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiYVRhcmdldHMiLCJUYXJnZXRFbnRpdGllcyIsImNvbmNhdCIsIlRhcmdldFByb3BlcnRpZXMiLCJzVHJpZ2dlckFjdGlvbiIsIlRyaWdnZXJBY3Rpb24iLCJleGVjdXRlQWN0aW9uIiwicmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzIiwib0NvbnRyb2wiLCJzQ29udHJvbElkIiwiaXNBIiwiZ2V0SWQiLCJiSXNOb3RBbHJlYWR5TGlzdGVkIiwibUZhaWxlZFNpZGVFZmZlY3RzIiwiZnVsbHlRdWFsaWZpZWROYW1lIiwiX2dlbmVyYXRlRmllbGRHcm91cFByb21pc2UiLCJiUHJvbWlzZVN1Y2Nlc3MiLCJwcm9taXNlIiwiX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMiLCJmaWVsZCIsIm9GaWVsZCIsInNGaWVsZEhlbHBlcklkIiwiZ2V0RmllbGRIZWxwIiwib0ZpbHRlckhlbHAiLCJDb3JlIiwiYnlJZCIsImdldE91dFBhcmFtZXRlcnMiLCJvT3V0UGFyYW1ldGVyIiwib0JpbmRpbmciLCJnZXRCaW5kaW5nIiwicmVxdWVzdFZhbHVlIiwic1Byb3BlcnR5UGF0aCIsIm1Qcm9wZXJ0eSIsInJlc29sdmVQYXRoIiwiX3R5cGUiLCJqb2luIiwidW5kZWZpbmVkIiwiX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyIsIm9Tb3VyY2VGaWVsZCIsInNTaWRlRWZmZWN0RW50aXR5VHlwZSIsIm9CaW5kaW5nQ29udGV4dCIsImdldEJpbmRpbmdDb250ZXh0Iiwib0NvbnRleHRGb3JTaWRlRWZmZWN0cyIsImdldENvbnRleHQiLCJzRnVsbHlRdWFsaWZpZWROYW1lIiwiZ2V0Q29udmVydGVkTWV0YU1vZGVsIiwiZW50aXR5VHlwZXMiLCJmaW5kIiwib0VudGl0eVR5cGUiLCJfZ2V0RmllbGRQcm9taXNlIiwiRmllbGRSdW50aW1lIiwiZ2V0RmllbGRTdGF0ZU9uQ2hhbmdlIiwic3RhdGUiLCJ2YWxpZGl0eSIsImdldFNvdXJjZSIsInNpZGVFZmZlY3RzTWFwIiwiX2dldEZpZWxkU2lkZUVmZmVjdHNNYXAiLCJtU2lkZUVmZmVjdHNNYXAiLCJnZXRGaWVsZEdyb3VwSWRzIiwic1ZpZXdFbnRpdHlTZXRTZXROYW1lIiwiZ2V0Vmlld0RhdGEiLCJlbnRpdHlTZXQiLCJvVmlld0VudGl0eVNldCIsImVudGl0eVNldHMiLCJvRW50aXR5U2V0IiwiYklzSW1tZWRpYXRlIiwiaW5kZXhPZiIsInNOYW1lIiwiYVNpZGVFZmZlY3RQYXJ0cyIsInNwbGl0Iiwic1NpZGVFZmZlY3RQYXRoIiwibGVuZ3RoIiwib1NpZGVFZmZlY3QiLCJnZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzIiwiaW1tZWRpYXRlIiwic1ZpZXdFbnRpdHlUeXBlIiwiZW50aXR5VHlwZSIsIm1GaWVsZFBhdGgiLCJnZXRBZ2dyZWdhdGlvbiIsIm9DdXN0b21EYXRhIiwiZ2V0S2V5Iiwic0ZpZWxkUGF0aCIsImdldFZhbHVlIiwibUNvbnRyb2xFbnRpdHlUeXBlIiwiZ2V0Q29udHJvbEVudGl0eVNpZGVFZmZlY3RzIiwic0NvbnRyb2xOYW1lIiwib0NvbnRyb2xTaWRlRWZmZWN0cyIsImluY2x1ZGVzIiwibUZpZWxkU2lkZUVmZmVjdHNNYXAiLCJvRmllbGRQcm9taXNlRm9yRmllbGRHcm91cCIsIm1GYWlsZWRTaWRlRWZmZWN0c05hbWUiLCJzU2lkZUVmZmVjdENvbnRleHRQYXRoIiwiYUZhaWxlZFNpZGVFZmZlY3RzIiwibVNpZGVFZmZlY3RDb250ZXh0UGF0aCIsImJTdWNjZXNzIiwib0ZpZWxkQmluZGluZyIsIl9nZXRCaW5kaW5nRm9yRmllbGQiLCJhRmllbGRQYXRocyIsImdldEJpbmRpbmdzIiwic1BhdGgiLCJzQmluZGluZ05hbWUiLCJDb250cm9sbGVyRXh0ZW5zaW9uIl0sIm1hcHBpbmdzIjoiO0FBQUE7QUFDQTtBQUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFxRE1BLDhCLFdBRExDLGNBQWMsQ0FBQyw4Q0FBRCxDLFVBU2JDLGNBQWMsRSxVQWdCZEMsZUFBZSxFLFVBQ2ZDLGNBQWMsRSxVQVlkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBaUJkRCxlQUFlLEUsVUFDZkMsY0FBYyxFLFVBNkNkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBa0ZkRCxlQUFlLEUsV0FDZkMsY0FBYyxFLFdBV2RELGVBQWUsRSxXQUNmQyxjQUFjLEUsV0FjZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWdDZEQsZUFBZSxFLFdBQ2ZDLGNBQWMsRSxXQWtCZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRSxXQThHZEMsZ0JBQWdCLEUsV0FDaEJELGNBQWMsRTs7Ozs7Ozs7O1dBOVdSRSxNLEdBRFAsa0JBQ2dCO0FBQ2YsV0FBS0MsTUFB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QUFDQWlJLFFBQUFBLFdBQVcsQ0FBQy9JLE9BQVosQ0FBb0IsVUFBQytILFVBQUQsRUFBd0I7QUFDM0MsY0FBTXZHLEdBQUcsR0FBRyxNQUFJLENBQUNDLG9CQUFMLENBQTBCUixXQUExQixFQUF1QzhHLFVBQXZDLEVBQW1EekMsZUFBbkQsQ0FBWjs7QUFDQSxjQUFJOUQsR0FBSixFQUFTO0FBQ1IsWUFBQSxNQUFJLENBQUN0RCx5QkFBTCxDQUErQjBLLFFBQVEsR0FBRyxRQUFILEdBQWMsS0FBckQsRUFBNERwSCxHQUE1RDtBQUNBO0FBQ0QsU0FMRDtBQU1BO0FBQ0Q7QUFFRDtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztXQUNTc0gsbUIsR0FBUiw2QkFBNEI1RSxNQUE1QixFQUEyRDtBQUMxRCxVQUFJZ0YsWUFBWSxHQUFHLE9BQW5COztBQUNBLFVBQUloRixNQUFNLENBQUNWLEdBQVAsQ0FBVyxnQkFBWCxDQUFKLEVBQWtDO0FBQ2pDMEYsUUFBQUEsWUFBWSxHQUFHLFVBQWY7QUFDQSxPQUZELE1BRU8sSUFBSWhGLE1BQU0sQ0FBQ1YsR0FBUCxDQUFXLGtDQUFYLENBQUosRUFBb0Q7QUFDMUQwRixRQUFBQSxZQUFZLEdBQUcsV0FBZjtBQUNBOztBQUNELGFBQU9oRixNQUFNLENBQUNTLFVBQVAsQ0FBa0J1RSxZQUFsQixDQUFQO0FBQ0EsSzs7O0lBM25CMkNDLG1CO1NBOG5COUJqTSw4QiIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udmVydGVyT3V0cHV0LCBFbnRpdHlUeXBlLCBQcm9wZXJ0eVBhdGggfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQge1xuXHRDb250cm9sU2lkZUVmZmVjdHNFbnRpdHlEaWN0aW9uYXJ5LFxuXHRDb250cm9sU2lkZUVmZmVjdHNUeXBlLFxuXHRPRGF0YVNpZGVFZmZlY3RzVHlwZSxcblx0U2lkZUVmZmVjdHNUeXBlXG59IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaWRlRWZmZWN0c1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRmllbGRSdW50aW1lIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZVwiO1xuaW1wb3J0IEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb3JlIGZyb20gXCJzYXAvdWkvY29yZS9Db3JlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCBCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvQmluZGluZ1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZmluYWxFeHRlbnNpb24sIG1ldGhvZE92ZXJyaWRlLCBwcml2YXRlRXh0ZW5zaW9uLCBwdWJsaWNFeHRlbnNpb24gfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcblxudHlwZSBGaWVsZENvbnRyb2wgPSBDb250cm9sICYge1xuXHRnZXRGaWVsZEhlbHAoKTogc3RyaW5nO1xuXHRnZXRGaWVsZEdyb3VwSWRzKCk6IHN0cmluZ1tdO1xufTtcblxudHlwZSBGaWVsZEV2ZW50UHJvcGVydHlUeXBlID0ge1xuXHRwcm9taXNlOiBQcm9taXNlPGFueT47XG5cdGZpZWxkOiBGaWVsZENvbnRyb2w7XG5cdHNpZGVFZmZlY3RzTWFwOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5O1xufTtcblxudHlwZSBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGUgPSB7XG5cdG5hbWU6IHN0cmluZztcblx0aW1tZWRpYXRlPzogYm9vbGVhbjtcblx0Y29udGV4dDogQ29udGV4dDtcblx0c2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZTtcblx0cHJldmlvdXNseUZhaWxlZD86IGJvb2xlYW47XG59O1xuXG50eXBlIEZpZWxkU2lkZUVmZmVjdERpY3Rpb25hcnkgPSBSZWNvcmQ8c3RyaW5nLCBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGU+O1xuXG50eXBlIEZhaWxlZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgU2lkZUVmZmVjdHNUeXBlW10+O1xuXG50eXBlIEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSA9IHtcblx0cHJvbWlzZXM6IFByb21pc2U8YW55PltdO1xuXHRzaWRlRWZmZWN0UHJvcGVydHk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZTtcblx0cHJvY2Vzc1N0YXJ0ZWQ/OiBib29sZWFuO1xufTtcblxudHlwZSBGaWVsZEdyb3VwUXVldWVNYXBUeXBlID0ge1xuXHRbc2lkZUVmZmVjdE5hbWU6IHN0cmluZ106IHtcblx0XHRbY29udGV4dFBhdGg6IHN0cmluZ106IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZTtcblx0fTtcbn07XG5cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLlNpZGVFZmZlY3RzXCIpXG5jbGFzcyBTaWRlRWZmZWN0c0NvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBfb1ZpZXc6IGFueTtcblx0cHJpdmF0ZSBfb0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblx0cHJpdmF0ZSBfbUZpZWxkR3JvdXBRdWV1ZSE6IEZpZWxkR3JvdXBRdWV1ZU1hcFR5cGU7XG5cdHByaXZhdGUgX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZSE6IFNldDxzdHJpbmc+O1xuXHRwcml2YXRlIF9vU2lkZUVmZmVjdHNTZXJ2aWNlITogYW55O1xuXHRwcml2YXRlIF9tRmFpbGVkU2lkZUVmZmVjdHMhOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeTtcblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCkge1xuXHRcdHRoaXMuX29WaWV3ID0gKHRoaXMgYXMgYW55KS5iYXNlLmdldFZpZXcoKTtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KHRoaXMuX29WaWV3KTtcblx0XHR0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlID0gKHRoaXMuX29BcHBDb21wb25lbnQgYXMgYW55KS5nZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTtcblx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlID0ge307XG5cdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlID0gbmV3IFNldCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFyIHJlY29yZGVkIHZhbGlkYXRpb24gc3RhdHVzIGZvciBhbGwgcHJvcGVydGllcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGNsZWFyUHJvcGVydGllc1N0YXR1c1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHB1YmxpYyBjbGVhclByb3BlcnRpZXNTdGF0dXMoKTogdm9pZCB7XG5cdFx0dGhpcy5fYVNvdXJjZVByb3BlcnRpZXNGYWlsdXJlLmNsZWFyKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyBmYWlsZWQgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBnZXRSZWdpc3RlcmVkRmFpbGVkUmVxdWVzdHNcblx0ICogQHJldHVybnMge29iamVjdH0gUmVnaXN0ZXJlZCBTaWRlRWZmZWN0cyByZXF1ZXN0cyB0aGF0IGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGdldFJlZ2lzdGVyZWRGYWlsZWRSZXF1ZXN0cygpOiBGYWlsZWRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0cmV0dXJuIHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cztcblx0fVxuXG5cdC8qKlxuXHQgKiBNYW5hZ2VzIHRoZSB3b3JrZmxvdyBmb3IgU2lkZUVmZmVjdHMgd2l0aCByZWxhdGVkIGNoYW5nZXMgdG8gYSBmaWVsZFxuXHQgKiBUaGUgZm9sbG93aW5nIHNjZW5hcmlvcyBhcmUgbWFuYWdlZDpcblx0ICogIC0gRXhlY3V0ZTogdHJpZ2dlcnMgaW1tZWRpYXRlIFNpZGVFZmZlY3RzIHJlcXVlc3RzIGlmIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZXZlbnQgaXMgZnVsZmlsbGVkXG5cdCAqICAtIFJlZ2lzdGVyOiBjYWNoZXMgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIEZpZWxkR3JvdXAgaXMgdW5mb2N1c2VkLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgaGFuZGxlRmllbGRDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgZXZlbnQgdGhhdCBjb21lcyBmcm9tIGEgZmllbGQgY2hhbmdlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIHtvYmplY3R9ICBQcm9taXNlIG9uIFNpZGVFZmZlY3RzIHJlcXVlc3Qocylcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgaGFuZGxlRmllbGRDaGFuZ2Uob0V2ZW50OiBFdmVudCwgb0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGU/OiBQcm9taXNlPGFueT4pOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IG1FdmVudEZpZWxkUHJvcGVydGllcyA9IHRoaXMuX2dldEZpZWxkUHJvcGVydGllcyhvRXZlbnQpLFxuXHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllczogRmllbGRTaWRlRWZmZWN0UHJvcGVydHlUeXBlW10gPSB0aGlzLl9pbml0aWFsaXplRmllbGRTaWRlRWZmZWN0cyhcblx0XHRcdFx0bUV2ZW50RmllbGRQcm9wZXJ0aWVzLFxuXHRcdFx0XHRvRmllbGRHcm91cFByZVJlcXVpc2l0ZVxuXHRcdFx0KTtcblxuXHRcdGxldCBiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSBmYWxzZTtcblxuXHRcdHJldHVybiB0aGlzLl9nZW5lcmF0ZUltbWVkaWF0ZVByb21pc2UobUV2ZW50RmllbGRQcm9wZXJ0aWVzKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRiSXNJbW1lZGlhdGVUcmlnZ2VyZWQgPSB0cnVlO1xuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5tYXAoKG1TaWRlRWZmZWN0c1Byb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5yZXF1ZXN0U2lkZUVmZmVjdHMobVNpZGVFZmZlY3RzUHJvcGVydHkuc2lkZUVmZmVjdHMsIG1TaWRlRWZmZWN0c1Byb3BlcnR5LmNvbnRleHQpO1xuXHRcdFx0XHRcdH0pIHx8IFtdXG5cdFx0XHRcdCk7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChvRXJyb3IpID0+IHtcblx0XHRcdFx0aWYgKGJJc0ltbWVkaWF0ZVRyaWdnZXJlZCkge1xuXHRcdFx0XHRcdExvZy5kZWJ1ZyhcIkVycm9yIHdoaWxlIHByb2Nlc3NpbmcgRmllbGQgU2lkZUVmZmVjdHNcIiwgb0Vycm9yKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvKipcblx0XHRcdFx0XHQgKiBTaWRlRWZmZWN0cyBoYXZlIG5vdCBiZWVuIHRyaWdnZXJlZCBzaW5jZSBwcmVSZXF1aXNpdGUgdmFsaWRhdGlvbiBmYWlscyBzbyB3ZSBuZWVkXG5cdFx0XHRcdFx0ICogdG8ga2VlcCBwcmV2aW91c2x5IGZhaWxlZCByZXF1ZXN0IGFzIEZhaWxlZCByZXF1ZXN0ICh0byBiZSByZXRyaWdnZXIgb24gbmV4dCBjaGFuZ2UpXG5cdFx0XHRcdFx0ICovXG5cblx0XHRcdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHQuZmlsdGVyKChtSW1tZWRpYXRlU2lkZUVmZmVjdHMpID0+IG1JbW1lZGlhdGVTaWRlRWZmZWN0cy5wcmV2aW91c2x5RmFpbGVkID09PSB0cnVlKVxuXHRcdFx0XHRcdFx0LmZvckVhY2goKG1JbW1lZGlhdGVTaWRlRWZmZWN0cykgPT5cblx0XHRcdFx0XHRcdFx0dGhpcy5fYWRkRmFpbGVkU2lkZUVmZmVjdHMobUltbWVkaWF0ZVNpZGVFZmZlY3RzLnNpZGVFZmZlY3RzLCBtSW1tZWRpYXRlU2lkZUVmZmVjdHMuY29udGV4dClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgU2lkZUVmZmVjdHMgd2l0aCBhIHJlbGF0ZWQgJ2ZvY3VzIG91dCcgdG8gYSBmaWVsZCBncm91cC5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBTQVBVSTUgRXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gUHJvbWlzZSBvbiBTaWRlRWZmZWN0cyByZXF1ZXN0KHMpXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIGhhbmRsZUZpZWxkR3JvdXBDaGFuZ2Uob0V2ZW50OiBFdmVudCk6IFByb21pc2U8YW55PiB7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG5cdFx0Y29uc3QgdGhhdCA9IHRoaXMsXG5cdFx0XHRhRGVmZXJyZWRTaWRlRWZmZWN0czogRmllbGRHcm91cFNpZGVFZmZlY3RUeXBlW10gPSBbXSxcblx0XHRcdGFGaWVsZEdyb3VwSWRzOiBzdHJpbmdbXSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJmaWVsZEdyb3VwSWRzXCIpO1xuXG5cdFx0Y29uc3QgZ2V0RmllbGRHcm91cFJlcXVlc3RQcm9taXNlID0gZnVuY3Rpb24gKG9EZWZlcnJlZFNpZGVFZmZlY3Q6IEZpZWxkR3JvdXBTaWRlRWZmZWN0VHlwZSkge1xuXHRcdFx0bGV0IGJJc1JlcXVlc3RzVHJpZ2dlcmVkID0gZmFsc2U7XG5cdFx0XHRjb25zdCBvU2lkZUVmZmVjdFByb3BlcnR5ID0gb0RlZmVycmVkU2lkZUVmZmVjdC5zaWRlRWZmZWN0UHJvcGVydHk7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dDtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhhdC5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0Y29uc3QgbUVudGl0eVR5cGUgPSB0aGF0Ll9nZXRFbnRpdHlUeXBlRnJvbUZRTihzRW50aXR5VHlwZSk7XG5cblx0XHRcdHJldHVybiBQcm9taXNlLmFsbChvRGVmZXJyZWRTaWRlRWZmZWN0LnByb21pc2VzKVxuXHRcdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0YklzUmVxdWVzdHNUcmlnZ2VyZWQgPSB0cnVlO1xuXG5cdFx0XHRcdFx0Ly9EZWZlcnJlZCBTaWRlRWZmZWN0cyBhcmUgZXhlY3V0ZWQgb25seSBpZiBhbGwgc291cmNlUHJvcGVydGllcyBoYXZlIG5vIHJlZ2lzdGVyZWQgZmFpbHVyZS5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRtRW50aXR5VHlwZSAmJlxuXHRcdFx0XHRcdFx0KG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMuU291cmNlUHJvcGVydGllcyBhcyBQcm9wZXJ0eVBhdGhbXSkuZXZlcnkoKHNvdXJjZVByb3BlcnR5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChzb3VyY2VQcm9wZXJ0eS50eXBlID09PSBcIlByb3BlcnR5UGF0aFwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc0lkID0gdGhhdC5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc291cmNlUHJvcGVydHkudmFsdWUsIG9Db250ZXh0KTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc0lkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gIXRoYXQuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZS5oYXMoc0lkKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoYXQucmVxdWVzdFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMsIG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKG9FcnJvcikgPT4ge1xuXHRcdFx0XHRcdGlmIChiSXNSZXF1ZXN0c1RyaWdnZXJlZCkge1xuXHRcdFx0XHRcdFx0TG9nLmRlYnVnKFwiRXJyb3Igd2hpbGUgcHJvY2Vzc2luZyBGaWVsZEdyb3VwIFNpZGVFZmZlY3RzIG9uIGNvbnRleHQgXCIgKyBzQ29udGV4dFBhdGgsIG9FcnJvcik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KVxuXHRcdFx0XHQuZmluYWxseSgoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHRoYXQuX21GaWVsZEdyb3VwUXVldWVbb1NpZGVFZmZlY3RQcm9wZXJ0eS5uYW1lXVtzQ29udGV4dFBhdGhdO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0YUZpZWxkR3JvdXBJZHMuZm9yRWFjaCgoc0ZpZWxkR3JvdXBJZCkgPT4ge1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBzdHJpbmcgXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiBpcyBhZGRlZCB0byB0aGUgU2lkZUVmZmVjdHMgbmFtZSBkdXJpbmcgdGVtcGxhdGluZyB0byBrbm93XG5cdFx0XHQgKiBpZiB0aGlzIFNpZGVFZmZlY3RzIG11c3QgYmUgaW1tZWRpYXRlbHkgZXhlY3V0ZWQgcmVxdWVzdGVkIChvbiBmaWVsZCBjaGFuZ2UpIG9yIG11c3Rcblx0XHRcdCAqIGJlIGRlZmVycmVkIChvbiBmaWVsZCBncm91cCBmb2N1cyBvdXQpXG5cdFx0XHQgKlxuXHRcdFx0ICovXG5cdFx0XHRjb25zdCBzU2lkZUVmZmVjdE5hbWU6IHN0cmluZyA9IHNGaWVsZEdyb3VwSWQucmVwbGFjZShcIiQkSW1tZWRpYXRlUmVxdWVzdFwiLCBcIlwiKTtcblx0XHRcdGNvbnN0IG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cyA9IHRoYXQuX21GaWVsZEdyb3VwUXVldWU/LltzU2lkZUVmZmVjdE5hbWVdO1xuXHRcdFx0aWYgKG1Db250ZXh0RGVmZXJyZWRTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRPYmplY3Qua2V5cyhtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHMpLmZvckVhY2goKHNDb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9EZWZlcnJlZFNpZGVFZmZlY3QgPSBtQ29udGV4dERlZmVycmVkU2lkZUVmZmVjdHNbc0NvbnRleHRQYXRoXTtcblx0XHRcdFx0XHRpZiAoIW9EZWZlcnJlZFNpZGVFZmZlY3QucHJvY2Vzc1N0YXJ0ZWQpIHtcblx0XHRcdFx0XHRcdG9EZWZlcnJlZFNpZGVFZmZlY3QucHJvY2Vzc1N0YXJ0ZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHMucHVzaChvRGVmZXJyZWRTaWRlRWZmZWN0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKFxuXHRcdFx0YURlZmVycmVkU2lkZUVmZmVjdHMubWFwKChvRGVmZXJyZWRTaWRlRWZmZWN0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRGaWVsZEdyb3VwUmVxdWVzdFByb21pc2Uob0RlZmVycmVkU2lkZUVmZmVjdCk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogQWRkcyBhIFNpZGVFZmZlY3RzIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBhZGRDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNFbnRpdHlUeXBlIE5hbWUgb2YgdGhlIGVudGl0eSB3aGVyZSB0aGUgU2lkZUVmZmVjdHMgY29udHJvbCB3aWxsIGJlIHJlZ2lzdGVyZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9TaWRlRWZmZWN0cyBTaWRlRWZmZWN0cyB0byByZWdpc3Rlci4gRW5zdXJlIHRoZSBzb3VyY2VDb250cm9sSWQgbWF0Y2hlcyB0aGUgYXNzb2NpYXRlZCBTQVBVSTUgY29udHJvbCBJRC5cblx0ICpcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRwdWJsaWMgYWRkQ29udHJvbFNpZGVFZmZlY3RzKHNFbnRpdHlUeXBlOiBzdHJpbmcsIG9TaWRlRWZmZWN0czogT21pdDxDb250cm9sU2lkZUVmZmVjdHNUeXBlLCBcImZ1bGx5UXVhbGlmaWVkTmFtZVwiPik6IHZvaWQge1xuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuYWRkQ29udHJvbFNpZGVFZmZlY3RzKHNFbnRpdHlUeXBlLCBvU2lkZUVmZmVjdHMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgdGhlIHF1ZXVlIGNvbnRhaW5pbmcgdGhlIGZhaWxlZCBTaWRlRWZmZWN0cy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIHJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlbW92ZUZhaWxlZFNpZGVFZmZlY3RzKCk6IHZvaWQge1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0cyA9IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlcXVlc3QgU2lkZUVmZmVjdHMgb24gYSBzcGVjaWZpYyBjb250ZXh0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgcmVxdWVzdFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdG8gYmUgZXhlY3V0ZWRcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250ZXh0IENvbnRleHQgd2hlcmUgU2lkZUVmZmVjdHMgbmVlZCB0byBiZSBleGVjdXRlZFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBTaWRlRWZmZWN0cyByZXF1ZXN0IG9uIFNBUFVJNSBjb250ZXh0XG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlcXVlc3RTaWRlRWZmZWN0cyhvU2lkZUVmZmVjdHM6IFNpZGVFZmZlY3RzVHlwZSwgb0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGxldCBmUmVzb2x2ZXI6IGFueSwgZlJlamVjdG9yOiBhbnk7XG5cdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRmUmVzb2x2ZXIgPSByZXNvbHZlO1xuXHRcdFx0ZlJlamVjdG9yID0gcmVqZWN0O1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFUYXJnZXRzOiBhbnlbXSA9ICgob1NpZGVFZmZlY3RzLlRhcmdldEVudGl0aWVzIGFzIGFueVtdKSB8fCBbXSkuY29uY2F0KChvU2lkZUVmZmVjdHMuVGFyZ2V0UHJvcGVydGllcyBhcyBhbnlbXSkgfHwgW10pLFxuXHRcdFx0c1RyaWdnZXJBY3Rpb246IFN0cmluZyB8IHVuZGVmaW5lZCA9IChvU2lkZUVmZmVjdHMgYXMgT0RhdGFTaWRlRWZmZWN0c1R5cGUpLlRyaWdnZXJBY3Rpb247XG5cblx0XHRpZiAoc1RyaWdnZXJBY3Rpb24pIHtcblx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZXhlY3V0ZUFjdGlvbihzVHJpZ2dlckFjdGlvbiwgb0NvbnRleHQpO1xuXHRcdH1cblxuXHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2Vcblx0XHRcdC5yZXF1ZXN0U2lkZUVmZmVjdHMoYVRhcmdldHMsIG9Db250ZXh0KVxuXHRcdFx0LnRoZW4oKCkgPT4gZlJlc29sdmVyKCkpXG5cdFx0XHQuY2F0Y2goKG9FcnJvcjogYW55KSA9PiB7XG5cdFx0XHRcdHRoaXMuX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0cywgb0NvbnRleHQpO1xuXHRcdFx0XHRmUmVqZWN0b3Iob0Vycm9yKTtcblx0XHRcdH0pO1xuXG5cdFx0cmV0dXJuIG9Qcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgU2lkZUVmZmVjdHMgY3JlYXRlZCBieSBhIGNvbnRyb2wuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSByZW1vdmVDb250cm9sU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG9Db250cm9sIFNBUFVJNSBDb250cm9sXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHVibGljIHJlbW92ZUNvbnRyb2xTaWRlRWZmZWN0cyhvQ29udHJvbDogQ29udHJvbCk6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250cm9sSWQgPSBvQ29udHJvbCAmJiBvQ29udHJvbC5pc0EgJiYgb0NvbnRyb2wuaXNBKFwic2FwLnVpLmJhc2UuTWFuYWdlZE9iamVjdFwiKSAmJiBvQ29udHJvbC5nZXRJZCgpO1xuXG5cdFx0aWYgKHNDb250cm9sSWQpIHtcblx0XHRcdHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UucmVtb3ZlQ29udHJvbFNpZGVFZmZlY3RzKHNDb250cm9sSWQpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBBZGRzIFNpZGVFZmZlY3RzIHRvIHRoZSBxdWV1ZSBvZiB0aGUgZmFpbGVkIFNpZGVFZmZlY3RzXG5cdCAqIFRoZSBTaWRlRWZmZWN0cyB3aWxsIGJlIHJldHJpZ2dlcmVkIG9uIHRoZSBuZXh0IGNoYW5nZSBvbiB0aGUgc2FtZSBjb250ZXh0LlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2FkZEZhaWxlZFNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU2lkZUVmZmVjdHMgU2lkZUVmZmVjdHMgdGhhdCBuZWVkIHRvIGJlIHJldHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBDb250ZXh0IHdoZXJlIFNpZGVFZmZlY3RzIGhhdmUgZmFpbGVkXG5cdCAqL1xuXHRAcHJpdmF0ZUV4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByaXZhdGUgX2FkZEZhaWxlZFNpZGVFZmZlY3RzKG9TaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlLCBvQ29udGV4dDogQ29udGV4dCk6IHZvaWQge1xuXHRcdGNvbnN0IHNDb250ZXh0UGF0aDogc3RyaW5nID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdID0gdGhpcy5fbUZhaWxlZFNpZGVFZmZlY3RzW3NDb250ZXh0UGF0aF0gfHwgW107XG5cdFx0Y29uc3QgYklzTm90QWxyZWFkeUxpc3RlZCA9IHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLmV2ZXJ5KFxuXHRcdFx0KG1GYWlsZWRTaWRlRWZmZWN0cykgPT4gb1NpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZSAhPT0gbUZhaWxlZFNpZGVFZmZlY3RzLmZ1bGx5UXVhbGlmaWVkTmFtZVxuXHRcdCk7XG5cdFx0aWYgKGJJc05vdEFscmVhZHlMaXN0ZWQpIHtcblx0XHRcdHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzQ29udGV4dFBhdGhdLnB1c2gob1NpZGVFZmZlY3RzKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgZ3JvdXAgdGhhdCBpcyByZXF1aXJlZCBiZWZvcmUgcmVxdWVzdGluZyBTaWRlRWZmZWN0cy5cblx0ICogSWYgdGhlIHByb21pc2UgaXMgcmVqZWN0ZWQgYW5kIG9ubHkgdGhlIGZpZWxkIHJlcXVpcmVzIHRoZSBTaWRlRWZmZWN0cyBvbiB0aGlzIGNvbnRleHQsIHRoZSBTaWRlRWZmZWN0cyBhcmUgcmVtb3ZlZCBmcm9tIHRoZVxuXHQgKiBTaWRlRWZmZWN0cyBxdWV1ZS5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZW5lcmF0ZUZpZWxkR3JvdXBQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIHRvIGJlIHVzZWQgZm9yIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZShtRXZlbnRGaWVsZFByb3BlcnRpZXM6IEZpZWxkRXZlbnRQcm9wZXJ0eVR5cGUpOiBQcm9taXNlPGFueT4ge1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuXHRcdGNvbnN0IHRoYXQgPSB0aGlzO1xuXG5cdFx0bGV0IGJQcm9taXNlU3VjY2VzcyA9IHRydWU7XG5cdFx0cmV0dXJuIG1FdmVudEZpZWxkUHJvcGVydGllcy5wcm9taXNlXG5cdFx0XHQudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0YlByb21pc2VTdWNjZXNzID0gZmFsc2U7XG5cdFx0XHRcdHJldHVybiBiUHJvbWlzZVN1Y2Nlc3M7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbmFsbHkoKCkgPT4ge1xuXHRcdFx0XHQvKipcblx0XHRcdFx0ICogTmVlZCB0byBzdG9yZSB0aGUgc3RhdHVzIG9mIHByb3BlcnRpZXMgcmVsYXRlZCB0byB0aGlzIGZpZWxkIGZvciBkZWZlcnJlZCBTaWRlRWZmZWN0c1xuXHRcdFx0XHQgKiBzaW5jZSBhbGwgU291cmNlUHJvcGVydGllcyBmb3IgdGhpcyBraW5kIG9mIFNpZGVFZmZlY3RzIG11c3QgYmUgdmFsaWRcblx0XHRcdFx0ICovXG5cdFx0XHRcdHRoYXQuX3NhdmVGaWVsZFByb3BlcnRpZXNTdGF0dXMobUV2ZW50RmllbGRQcm9wZXJ0aWVzLmZpZWxkLCBiUHJvbWlzZVN1Y2Nlc3MpO1xuXHRcdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBwcm9taXNlIGZvciB0aGUgZmllbGQgdGhhdCBpcyByZXF1aXJlZCBiZWZvcmUgcmVxdWVzdGluZyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBtRXZlbnRGaWVsZFByb3BlcnRpZXMgRmllbGQgcHJvcGVydGllc1xuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBQcm9taXNlIHRvIGJlIHVzZWQgZm9yIHRoZSB2YWxpZGF0aW9uIG9mIHRoZSBmaWVsZFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVJbW1lZGlhdGVQcm9taXNlKG1FdmVudEZpZWxkUHJvcGVydGllczogRmllbGRFdmVudFByb3BlcnR5VHlwZSk6IFByb21pc2U8YW55PiB7XG5cdFx0Y29uc3Qgb1Byb21pc2UgPSBtRXZlbnRGaWVsZFByb3BlcnRpZXMucHJvbWlzZTtcblx0XHRyZXR1cm4gb1Byb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG5cdFx0XHQvKipcblx0XHRcdCAqIElmIHRoZSBmaWVsZCBnZXRzIGEgRmllbGRIZWxwZXIsIHdlIG5lZWQgdG8gd2FpdCB1bnRpbCBhbGwgZmllbGRzIGNoYW5nZWQgYnkgdGhpcyBGaWVsZEhlbHBlciBoYXZlIGJlZW4gc2V0LlxuXHRcdFx0ICogVG8gYWNoaWV2ZSB0aGlzLCB3ZSBlbnN1cmUgdGhhdCBhbGwgcmVsYXRlZCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVzb2x2ZWQuXG5cdFx0XHQgKlxuXHRcdFx0ICogVGhpcyByZXNvbHV0aW9uIHByb2Nlc3MgaXMgbm90IG1hbmFnZWQgYnkgdGhlIEZpZWxkIEV2ZW50IFByb21pc2UsIHNvIGZvciBmYXN0IHVzZXIgYWN0aW9ucyAobGlrZSBhdXRvbWF0aW9uKSBpdCBjYW4gbG9jayB0aGUgbW9kZWxcblx0XHRcdCAqIGFuZCBubyByZXF1ZXN0IGNhbiBiZSBleGVjdXRlZC5cblx0XHRcdCAqL1xuXHRcdFx0Y29uc3Qgb0ZpZWxkID0gbUV2ZW50RmllbGRQcm9wZXJ0aWVzLmZpZWxkO1xuXHRcdFx0Y29uc3Qgc0ZpZWxkSGVscGVySWQgPSBvRmllbGQuZ2V0RmllbGRIZWxwICYmIG9GaWVsZC5nZXRGaWVsZEhlbHAoKTtcblx0XHRcdGlmIChzRmllbGRIZWxwZXJJZCkge1xuXHRcdFx0XHRjb25zdCBvRmlsdGVySGVscDogYW55ID0gQ29yZS5ieUlkKHNGaWVsZEhlbHBlcklkKTtcblx0XHRcdFx0aWYgKG9GaWx0ZXJIZWxwICYmIG9GaWx0ZXJIZWxwLmdldE91dFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoXG5cdFx0XHRcdFx0XHQob0ZpbHRlckhlbHAuZ2V0T3V0UGFyYW1ldGVycygpIGFzIGFueVtdKS5tYXAoKG9PdXRQYXJhbWV0ZXIpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0JpbmRpbmcgPSBvT3V0UGFyYW1ldGVyLmdldEJpbmRpbmcoXCJ2YWx1ZVwiKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIG9CaW5kaW5nID8gb0JpbmRpbmcucmVxdWVzdFZhbHVlKCkgOiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKFtdKTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgYSBzdGF0dXMgaW5kZXguXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2VuZXJhdGVTdGF0dXNJbmRleFxuXHQgKiBAcGFyYW0ge29iamVjdH0gbUVudGl0eVR5cGUgVGhlIGVudGl0eSB0eXBlXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzUHJvcGVydHlQYXRoIFRoZSBwcm9wZXJ0eSBwYXRoXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvQ29udGV4dCBTQVBVSTUgQ29udGV4dFxuXHQgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfSBJbmRleFxuXHQgKi9cblx0cHJpdmF0ZSBfZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZTogRW50aXR5VHlwZSwgc1Byb3BlcnR5UGF0aDogc3RyaW5nLCBvQ29udGV4dD86IENvbnRleHQgfCBudWxsKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dD8uZ2V0UGF0aCgpO1xuXHRcdGNvbnN0IG1Qcm9wZXJ0eSA9IG1FbnRpdHlUeXBlLnJlc29sdmVQYXRoKHNQcm9wZXJ0eVBhdGgpO1xuXHRcdGlmIChtUHJvcGVydHkpIHtcblx0XHRcdGlmIChtUHJvcGVydHkgJiYgbVByb3BlcnR5Ll90eXBlID09PSBcIlByb3BlcnR5XCIpIHtcblx0XHRcdFx0cmV0dXJuIFttUHJvcGVydHkuZnVsbHlRdWFsaWZpZWROYW1lLCBzQ29udGV4dFBhdGhdLmpvaW4oXCJfX1wiKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBjb250ZXh0IG9uIHdoaWNoIFNpZGVFZmZlY3RzIGNhbiBiZSByZXF1ZXN0ZWQuXG5cdCAqIFRoZSBjb3JyZWN0IG9uZSBtdXN0IGhhdmUgdGhlIGJpbmRpbmcgcGFyYW1ldGVyICQkcGF0Y2hXaXRob3V0U2lkZUVmZmVjdHMuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvU291cmNlRmllbGQgRmllbGRcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNTaWRlRWZmZWN0RW50aXR5VHlwZSBUYXJnZXQgZW50aXR5IHR5cGUgb2YgdGhlIFNpZGVFZmZlY3RzIGFubm90YXRpb25cblx0ICogQHJldHVybnMge29iamVjdH0gU0FQVUk1IENvbnRleHRcblx0ICovXG5cdEBwcml2YXRlRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0cHJpdmF0ZSBfZ2V0Q29udGV4dEZvclNpZGVFZmZlY3RzKG9Tb3VyY2VGaWVsZDogRmllbGRDb250cm9sLCBzU2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyk6IENvbnRleHQgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9Tb3VyY2VGaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGxldCBvQ29udGV4dEZvclNpZGVFZmZlY3RzID0gb0JpbmRpbmdDb250ZXh0LFxuXHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQmluZGluZ0NvbnRleHQpO1xuXG5cdFx0aWYgKHNTaWRlRWZmZWN0RW50aXR5VHlwZSAhPT0gc0VudGl0eVR5cGUpIHtcblx0XHRcdG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgPSAob0JpbmRpbmdDb250ZXh0IGFzIGFueSkuZ2V0QmluZGluZygpLmdldENvbnRleHQoKTtcblx0XHRcdGlmIChvQ29udGV4dEZvclNpZGVFZmZlY3RzKSB7XG5cdFx0XHRcdHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0NvbnRleHRGb3JTaWRlRWZmZWN0cyk7XG5cdFx0XHRcdGlmIChzU2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0b0NvbnRleHRGb3JTaWRlRWZmZWN0cyA9IChvQ29udGV4dEZvclNpZGVFZmZlY3RzIGFzIGFueSkuZ2V0QmluZGluZygpLmdldENvbnRleHQoKTtcblx0XHRcdFx0XHRpZiAob0NvbnRleHRGb3JTaWRlRWZmZWN0cykge1xuXHRcdFx0XHRcdFx0c0VudGl0eVR5cGUgPSB0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldEVudGl0eVR5cGVGcm9tQ29udGV4dChvQ29udGV4dEZvclNpZGVFZmZlY3RzKTtcblx0XHRcdFx0XHRcdGlmIChzU2lkZUVmZmVjdEVudGl0eVR5cGUgIT09IHNFbnRpdHlUeXBlKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9Db250ZXh0Rm9yU2lkZUVmZmVjdHMgfHwgdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgRW50aXR5VHlwZSBiYXNlZCBvbiBpdHMgZnVsbHktcXVhbGlmaWVkIG5hbWUuXG5cdCAqXG5cdCAqIEBwYXJhbSB7c3RyaW5nfSBzRnVsbHlRdWFsaWZpZWROYW1lIFRoZSBmdWxseS1xdWFsaWZpZWQgbmFtZVxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBUaGUgZW50aXR5IHR5cGVcblx0ICovXG5cdHByaXZhdGUgX2dldEVudGl0eVR5cGVGcm9tRlFOKHNGdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1FbnRpdHlUeXBlID0gKHRoaXMuX29TaWRlRWZmZWN0c1NlcnZpY2UuZ2V0Q29udmVydGVkTWV0YU1vZGVsKCkgYXMgQ29udmVydGVyT3V0cHV0KS5lbnRpdHlUeXBlcy5maW5kKChvRW50aXR5VHlwZSkgPT4ge1xuXHRcdFx0cmV0dXJuIG9FbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSA9PT0gc0Z1bGx5UXVhbGlmaWVkTmFtZTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbUVudGl0eVR5cGU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvbWlzZSBvZiB0aGUgZmllbGQgdmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkIGZvciB0aGUgU2lkZUVmZmVjdHMgcHJvY2Vzcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFByb21pc2Vcblx0ICogQHBhcmFtIHtvYmplY3R9IG9FdmVudCBGaWVsZCBjaGFuZ2UgZXZlbnRcblx0ICogQHJldHVybnMge29iamVjdH0gRmllbGQgcHJvbWlzZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0RmllbGRQcm9taXNlKG9FdmVudDogRXZlbnQpOiBQcm9taXNlPGFueT4ge1xuXHRcdGNvbnN0IHByb21pc2UgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicHJvbWlzZVwiKSB8fCBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb1Byb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG5cdFx0XHRcdGlmICghRmllbGRSdW50aW1lLmdldEZpZWxkU3RhdGVPbkNoYW5nZShvRXZlbnQpLnN0YXRlLnZhbGlkaXR5KSB7XG5cdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gb1Byb21pc2U7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcHJvcGVydGllcyBvZiB0aGUgZmllbGQgdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHRoZSBTaWRlRWZmZWN0cyBwcm9jZXNzLlxuXHQgKlxuXHQgKiBAZnVuY3Rpb25cblx0ICogQG5hbWUgX2dldEZpZWxkUHJvcGVydGllc1xuXHQgKiBAcGFyYW0ge29iamVjdH0gb0V2ZW50IEZpZWxkIGNoYW5nZSBldmVudFxuXHQgKiBAcmV0dXJucyB7b2JqZWN0fSBGaWVsZCBwcm9wZXJ0aWVzIChldmVudCBjaGFuZ2UgcHJvbWlzZSwgZmllbGQsIFNpZGVFZmZlY3RzIHJlbGF0ZWQgdG8gdGhpcyBmaWVsZClcblx0ICovXG5cdHByaXZhdGUgX2dldEZpZWxkUHJvcGVydGllcyhvRXZlbnQ6IEV2ZW50KTogRmllbGRFdmVudFByb3BlcnR5VHlwZSB7XG5cdFx0Y29uc3Qgb0ZpZWxkOiBGaWVsZENvbnRyb2wgPSBvRXZlbnQuZ2V0U291cmNlKCkgYXMgRmllbGRDb250cm9sO1xuXG5cdFx0cmV0dXJuIHtcblx0XHRcdHByb21pc2U6IHRoaXMuX2dldEZpZWxkUHJvbWlzZShvRXZlbnQpLFxuXHRcdFx0ZmllbGQ6IG9GaWVsZCxcblx0XHRcdHNpZGVFZmZlY3RzTWFwOiB0aGlzLl9nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKG9GaWVsZClcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIFNpZGVFZmZlY3RzIG1hcFxuXHQgKiBUaGVzZSBTaWRlRWZmZWN0cyBhcmVcblx0ICogLSBsaXN0ZWQgaW50byBGaWVsZEdyb3VwSWRzIChjb21pbmcgZnJvbSBhbiBPRGF0YSBTZXJ2aWNlKVxuXHQgKiAtIGdlbmVyYXRlZCBieSBhIGNvbnRyb2wgb3IgY29udHJvbHMgYW5kIHRoYXQgY29uZmlndXJlIHRoaXMgZmllbGQgYXMgU291cmNlUHJvcGVydGllcy5cblx0ICpcblx0ICogQGZ1bmN0aW9uXG5cdCAqIEBuYW1lIF9nZXRGaWVsZFNpZGVFZmZlY3RzTWFwXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGQgRmllbGRcblx0ICogQHJldHVybnMge29iamVjdH0gU2lkZUVmZmVjdHMgbWFwXG5cdCAqL1xuXHRwcml2YXRlIF9nZXRGaWVsZFNpZGVFZmZlY3RzTWFwKG9GaWVsZDogRmllbGRDb250cm9sKTogRmllbGRTaWRlRWZmZWN0RGljdGlvbmFyeSB7XG5cdFx0Y29uc3QgbVNpZGVFZmZlY3RzTWFwOiBGaWVsZFNpZGVFZmZlY3REaWN0aW9uYXJ5ID0ge30sXG5cdFx0XHRhRmllbGRHcm91cElkczogc3RyaW5nW10gPSBvRmllbGQuZ2V0RmllbGRHcm91cElkcygpLFxuXHRcdFx0c1ZpZXdFbnRpdHlTZXRTZXROYW1lID0gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXQsXG5cdFx0XHRvVmlld0VudGl0eVNldCA9ICh0aGlzLl9vU2lkZUVmZmVjdHNTZXJ2aWNlLmdldENvbnZlcnRlZE1ldGFNb2RlbCgpIGFzIENvbnZlcnRlck91dHB1dCkuZW50aXR5U2V0cy5maW5kKChvRW50aXR5U2V0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBvRW50aXR5U2V0Lm5hbWUgPT09IHNWaWV3RW50aXR5U2V0U2V0TmFtZTtcblx0XHRcdH0pO1xuXG5cdFx0Ly8gU2lkZUVmZmVjdHMgY29taW5nIGZyb20gYW4gT0RhdGEgU2VydmljZVxuXHRcdGFGaWVsZEdyb3VwSWRzLmZvckVhY2goKHNGaWVsZEdyb3VwSWQpID0+IHtcblx0XHRcdGNvbnN0IGJJc0ltbWVkaWF0ZTogYm9vbGVhbiA9IHNGaWVsZEdyb3VwSWQuaW5kZXhPZihcIiQkSW1tZWRpYXRlUmVxdWVzdFwiKSAhPT0gLTEsXG5cdFx0XHRcdHNOYW1lOiBzdHJpbmcgPSBzRmllbGRHcm91cElkLnJlcGxhY2UoXCIkJEltbWVkaWF0ZVJlcXVlc3RcIiwgXCJcIiksXG5cdFx0XHRcdGFTaWRlRWZmZWN0UGFydHM6IHN0cmluZ1tdID0gc05hbWUuc3BsaXQoXCIjXCIpLFxuXHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGU6IHN0cmluZyA9IGFTaWRlRWZmZWN0UGFydHNbMF0sXG5cdFx0XHRcdHNTaWRlRWZmZWN0UGF0aDogc3RyaW5nID1cblx0XHRcdFx0XHRzU2lkZUVmZmVjdEVudGl0eVR5cGUgK1xuXHRcdFx0XHRcdFwiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5TaWRlRWZmZWN0c1wiICtcblx0XHRcdFx0XHQoYVNpZGVFZmZlY3RQYXJ0cy5sZW5ndGggPT09IDIgPyBcIiNcIiArIGFTaWRlRWZmZWN0UGFydHNbMV0gOiBcIlwiKSxcblx0XHRcdFx0b1NpZGVFZmZlY3Q6IFNpZGVFZmZlY3RzVHlwZSB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0dGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRPRGF0YUVudGl0eVNpZGVFZmZlY3RzKHNTaWRlRWZmZWN0RW50aXR5VHlwZSk/LltzU2lkZUVmZmVjdFBhdGhdLFxuXHRcdFx0XHRvQ29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCA9IHRoaXMuX2dldENvbnRleHRGb3JTaWRlRWZmZWN0cyhvRmllbGQsIHNTaWRlRWZmZWN0RW50aXR5VHlwZSk7XG5cdFx0XHRpZiAob1NpZGVFZmZlY3QgJiYgb0NvbnRleHQpIHtcblx0XHRcdFx0bVNpZGVFZmZlY3RzTWFwW3NOYW1lXSA9IHtcblx0XHRcdFx0XHRuYW1lOiBzTmFtZSxcblx0XHRcdFx0XHRpbW1lZGlhdGU6IGJJc0ltbWVkaWF0ZSxcblx0XHRcdFx0XHRzaWRlRWZmZWN0czogb1NpZGVFZmZlY3QsXG5cdFx0XHRcdFx0Y29udGV4dDogb0NvbnRleHRcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vU2lkZUVmZmVjdHMgY29taW5nIGZyb20gY29udHJvbChzKVxuXHRcdGlmIChzVmlld0VudGl0eVNldFNldE5hbWUgJiYgb1ZpZXdFbnRpdHlTZXQpIHtcblx0XHRcdGNvbnN0IHNWaWV3RW50aXR5VHlwZSA9IG9WaWV3RW50aXR5U2V0LmVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lLFxuXHRcdFx0XHRtRmllbGRQYXRoOiBhbnkgPSAob0ZpZWxkLmdldEFnZ3JlZ2F0aW9uKFwiY3VzdG9tRGF0YVwiKSBhcyBhbnlbXSkuZmluZCgob0N1c3RvbURhdGEpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gb0N1c3RvbURhdGEuZ2V0S2V5KCkgPT09IFwic291cmNlUGF0aFwiO1xuXHRcdFx0XHR9KSxcblx0XHRcdFx0b0NvbnRleHQ6IENvbnRleHQgfCB1bmRlZmluZWQgPSB0aGlzLl9nZXRDb250ZXh0Rm9yU2lkZUVmZmVjdHMob0ZpZWxkLCBzVmlld0VudGl0eVR5cGUpO1xuXG5cdFx0XHRpZiAobUZpZWxkUGF0aCAmJiBvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBzRmllbGRQYXRoID0gbUZpZWxkUGF0aC5nZXRWYWx1ZSgpLnJlcGxhY2UoXCIvXCIgKyBzVmlld0VudGl0eVNldFNldE5hbWUgKyBcIi9cIiwgXCJcIiksXG5cdFx0XHRcdFx0bUNvbnRyb2xFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRDb250cm9sRW50aXR5U2lkZUVmZmVjdHMoXG5cdFx0XHRcdFx0XHRzVmlld0VudGl0eVR5cGVcblx0XHRcdFx0XHQpIGFzIENvbnRyb2xTaWRlRWZmZWN0c0VudGl0eURpY3Rpb25hcnk7XG5cdFx0XHRcdE9iamVjdC5rZXlzKG1Db250cm9sRW50aXR5VHlwZSkuZm9yRWFjaCgoc0NvbnRyb2xOYW1lKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb0NvbnRyb2xTaWRlRWZmZWN0czogU2lkZUVmZmVjdHNUeXBlID0gbUNvbnRyb2xFbnRpdHlUeXBlW3NDb250cm9sTmFtZV07XG5cdFx0XHRcdFx0aWYgKChvQ29udHJvbFNpZGVFZmZlY3RzLlNvdXJjZVByb3BlcnRpZXMgYXMgc3RyaW5nW10pLmluY2x1ZGVzKHNGaWVsZFBhdGgpKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTmFtZSA9IHNDb250cm9sTmFtZSArIFwiOjpcIiArIHNWaWV3RW50aXR5VHlwZTtcblx0XHRcdFx0XHRcdG1TaWRlRWZmZWN0c01hcFtzTmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRcdG5hbWU6IHNOYW1lLFxuXHRcdFx0XHRcdFx0XHRpbW1lZGlhdGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdHNpZGVFZmZlY3RzOiBvQ29udHJvbFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0XHRjb250ZXh0OiBvQ29udGV4dFxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gbVNpZGVFZmZlY3RzTWFwO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIFNpZGVFZmZlY3RzIHdpdGggcmVsYXRlZCBjaGFuZ2VzIHRvIGEgZmllbGRcblx0ICogTGlzdDogZ2V0cyBpbW1lZGlhdGUgU2lkZUVmZmVjdHMgcmVxdWVzdHNcblx0ICogUmVnaXN0ZXI6IGNhY2hlcyBkZWZlcnJlZCBTaWRlRWZmZWN0cyB0aGF0IHdpbGwgYmUgZXhlY3V0ZWQgd2hlbiB0aGUgRmllbGRHcm91cCBpcyB1bmZvY3VzZWQuXG5cdCAqXG5cdCAqIEBmdW5jdGlvblxuXHQgKiBAbmFtZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHNcblx0ICogQHBhcmFtIHtvYmplY3R9IG1FdmVudEZpZWxkUHJvcGVydGllcyBGaWVsZCBldmVudCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSBQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBiZWZvcmUgZXhlY3V0aW5nIGRlZmVycmVkIFNpZGVFZmZlY3RzXG5cdCAqIEByZXR1cm5zIHtBcnJheX0gIEFycmF5IG9mIGltbWVkaWF0ZSBTaWRlRWZmZWN0c1xuXHQgKi9cblx0cHJpdmF0ZSBfaW5pdGlhbGl6ZUZpZWxkU2lkZUVmZmVjdHMoXG5cdFx0bUV2ZW50RmllbGRQcm9wZXJ0aWVzOiBGaWVsZEV2ZW50UHJvcGVydHlUeXBlLFxuXHRcdG9GaWVsZEdyb3VwUHJlUmVxdWlzaXRlPzogUHJvbWlzZTxhbnk+XG5cdCk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZVtdIHtcblx0XHRjb25zdCBtRmllbGRTaWRlRWZmZWN0c01hcCA9IG1FdmVudEZpZWxkUHJvcGVydGllcy5zaWRlRWZmZWN0c01hcCxcblx0XHRcdG9GaWVsZFByb21pc2VGb3JGaWVsZEdyb3VwID0gdGhpcy5fZ2VuZXJhdGVGaWVsZEdyb3VwUHJvbWlzZShtRXZlbnRGaWVsZFByb3BlcnRpZXMpLCAvLyBQcm9taXNlIG1hbmFnaW5nIEZpZWxkR3JvdXAgcmVxdWVzdHMgaWYgRmllbGQgcHJvbWlzZSBmYWlsc1xuXHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzTmFtZTogYW55ID0ge30sXG5cdFx0XHRhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzOiBGaWVsZFNpZGVFZmZlY3RQcm9wZXJ0eVR5cGVbXSA9IFtdO1xuXG5cdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgPSBvRmllbGRHcm91cFByZVJlcXVpc2l0ZSB8fCBQcm9taXNlLnJlc29sdmUoKTtcblxuXHRcdE9iamVjdC5rZXlzKG1GaWVsZFNpZGVFZmZlY3RzTWFwKS5mb3JFYWNoKChzU2lkZUVmZmVjdE5hbWUpID0+IHtcblx0XHRcdGNvbnN0IG9TaWRlRWZmZWN0UHJvcGVydHk6IEZpZWxkU2lkZUVmZmVjdFByb3BlcnR5VHlwZSA9IG1GaWVsZFNpZGVFZmZlY3RzTWFwW3NTaWRlRWZmZWN0TmFtZV0sXG5cdFx0XHRcdHNTaWRlRWZmZWN0Q29udGV4dFBhdGggPSBvU2lkZUVmZmVjdFByb3BlcnR5LmNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0XHRhRmFpbGVkU2lkZUVmZmVjdHMgPSB0aGlzLl9tRmFpbGVkU2lkZUVmZmVjdHNbc1NpZGVFZmZlY3RDb250ZXh0UGF0aF07XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZXJlIGlzIGFueSBwcmV2aW91c2x5IGZhaWxlZCByZXF1ZXN0IGZvciB0aGlzIGNvbnRleHRcblx0XHRcdGlmIChhRmFpbGVkU2lkZUVmZmVjdHMpIHtcblx0XHRcdFx0ZGVsZXRlIHRoaXMuX21GYWlsZWRTaWRlRWZmZWN0c1tzU2lkZUVmZmVjdENvbnRleHRQYXRoXTtcblx0XHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzTmFtZVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXSA9IHt9O1xuXHRcdFx0XHRhRmFpbGVkU2lkZUVmZmVjdHMuZm9yRWFjaCgobUZhaWxlZFNpZGVFZmZlY3RzKSA9PiB7XG5cdFx0XHRcdFx0bUZhaWxlZFNpZGVFZmZlY3RzTmFtZVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXVttRmFpbGVkU2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXSA9IHRydWU7XG5cdFx0XHRcdFx0YUltbWVkaWF0ZVNpZGVFZmZlY3RzUHJvcGVydGllcy5wdXNoKHtcblx0XHRcdFx0XHRcdG5hbWU6IHNTaWRlRWZmZWN0TmFtZSxcblx0XHRcdFx0XHRcdHByZXZpb3VzbHlGYWlsZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogbUZhaWxlZFNpZGVFZmZlY3RzLFxuXHRcdFx0XHRcdFx0Y29udGV4dDogb1NpZGVFZmZlY3RQcm9wZXJ0eS5jb250ZXh0XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0aWYgKG9TaWRlRWZmZWN0UHJvcGVydHkuaW1tZWRpYXRlKSB7XG5cdFx0XHRcdC8vIFNpZGVFZmZlY3RzIHdpbGwgYmUgZXhlY3V0ZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZXZlbnQgcHJvbWlzZSB2YWxpZGF0aW9uXG5cdFx0XHRcdGlmICghbUZhaWxlZFNpZGVFZmZlY3RzTmFtZVtzU2lkZUVmZmVjdENvbnRleHRQYXRoXT8uW29TaWRlRWZmZWN0UHJvcGVydHkuc2lkZUVmZmVjdHMuZnVsbHlRdWFsaWZpZWROYW1lXSkge1xuXHRcdFx0XHRcdGFJbW1lZGlhdGVTaWRlRWZmZWN0c1Byb3BlcnRpZXMucHVzaCh7XG5cdFx0XHRcdFx0XHRuYW1lOiBzU2lkZUVmZmVjdE5hbWUsXG5cdFx0XHRcdFx0XHRzaWRlRWZmZWN0czogb1NpZGVFZmZlY3RQcm9wZXJ0eS5zaWRlRWZmZWN0cyxcblx0XHRcdFx0XHRcdGNvbnRleHQ6IG9TaWRlRWZmZWN0UHJvcGVydHkuY29udGV4dFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyBBZGQgZGVmZXJyZWQgU2lkZUVmZmVjdHMgdG8gdGhlIHJlbGF0ZWQgZGljdGlvbmFyeVxuXHRcdFx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV0gPSB0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV0gfHwge307XG5cdFx0XHRcdGNvbnN0IG1TaWRlRWZmZWN0Q29udGV4dFBhdGggPSB0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV1bc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gfHwge1xuXHRcdFx0XHRcdHByb21pc2VzOiBbXSxcblx0XHRcdFx0XHRzaWRlRWZmZWN0UHJvcGVydHk6IG9TaWRlRWZmZWN0UHJvcGVydHksXG5cdFx0XHRcdFx0cHJvY2Vzc1N0YXJ0ZWQ6IGZhbHNlXG5cdFx0XHRcdH07XG5cdFx0XHRcdG1TaWRlRWZmZWN0Q29udGV4dFBhdGgucHJvbWlzZXMgPSBtU2lkZUVmZmVjdENvbnRleHRQYXRoLnByb21pc2VzLmNvbmNhdChbXG5cdFx0XHRcdFx0b0ZpZWxkUHJvbWlzZUZvckZpZWxkR3JvdXAsXG5cdFx0XHRcdFx0b0ZpZWxkR3JvdXBQcmVSZXF1aXNpdGUgYXMgUHJvbWlzZTxhbnk+XG5cdFx0XHRcdF0pO1xuXHRcdFx0XHR0aGlzLl9tRmllbGRHcm91cFF1ZXVlW3NTaWRlRWZmZWN0TmFtZV1bc1NpZGVFZmZlY3RDb250ZXh0UGF0aF0gPSBtU2lkZUVmZmVjdENvbnRleHRQYXRoO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBhSW1tZWRpYXRlU2lkZUVmZmVjdHNQcm9wZXJ0aWVzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNhdmVzIHRoZSB2YWxpZGF0aW9uIHN0YXR1cyBvZiBwcm9wZXJ0aWVzIHJlbGF0ZWQgdG8gYSBmaWVsZCBjb250cm9sLlxuXHQgKlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0ZpZWxkIEZpZWxkXG5cdCAqIEBwYXJhbSB7Ym9vbGVhbn0gYlN1Y2Nlc3MgU3RhdHVzIG9mIHRoZSBmaWVsZCB2YWxpZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIF9zYXZlRmllbGRQcm9wZXJ0aWVzU3RhdHVzKG9GaWVsZDogRmllbGRDb250cm9sLCBiU3VjY2VzczogYm9vbGVhbik6IHZvaWQge1xuXHRcdGNvbnN0IG9CaW5kaW5nQ29udGV4dCA9IG9GaWVsZC5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdGNvbnN0IHNFbnRpdHlUeXBlID0gdGhpcy5fb1NpZGVFZmZlY3RzU2VydmljZS5nZXRFbnRpdHlUeXBlRnJvbUNvbnRleHQob0JpbmRpbmdDb250ZXh0KTtcblx0XHRjb25zdCBtRW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRlFOKHNFbnRpdHlUeXBlKTtcblx0XHRpZiAobUVudGl0eVR5cGUpIHtcblx0XHRcdC8vIFJldHJpZXZlcyBhbGwgcHJvcGVydGllcyB1c2VkIGJ5IHRoZSBmaWVsZFxuXHRcdFx0Y29uc3Qgb0ZpZWxkQmluZGluZzogYW55ID0gdGhpcy5fZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZCk7XG5cdFx0XHRjb25zdCBhRmllbGRQYXRocyA9IG9GaWVsZEJpbmRpbmcuaXNBKFwic2FwLnVpLm1vZGVsLkNvbXBvc2l0ZUJpbmRpbmdcIilcblx0XHRcdFx0PyAob0ZpZWxkQmluZGluZy5nZXRCaW5kaW5ncygpIHx8IFtdKS5tYXAoKG9CaW5kaW5nOiBhbnkpID0+IG9CaW5kaW5nLnNQYXRoKVxuXHRcdFx0XHQ6IFtvRmllbGRCaW5kaW5nLmdldFBhdGgoKV07XG5cblx0XHRcdC8vIFN0b3JlcyBzdGF0dXMgZm9yIGFsbCBwcm9wZXJ0aWVzXG5cdFx0XHRhRmllbGRQYXRocy5mb3JFYWNoKChzRmllbGRQYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgc0lkID0gdGhpcy5fZ2VuZXJhdGVTdGF0dXNJbmRleChtRW50aXR5VHlwZSwgc0ZpZWxkUGF0aCwgb0JpbmRpbmdDb250ZXh0KTtcblx0XHRcdFx0aWYgKHNJZCkge1xuXHRcdFx0XHRcdHRoaXMuX2FTb3VyY2VQcm9wZXJ0aWVzRmFpbHVyZVtiU3VjY2VzcyA/IFwiZGVsZXRlXCIgOiBcImFkZFwiXShzSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBwcm9wZXJ0eSBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBvZiB0aGUgZmllbGQuXG5cdCAqXG5cdCAqIEBwYXJhbSBvRmllbGQgRmllbGRcblx0ICogQHJldHVybnMge0JpbmRpbmd9ICBCaW5kaW5nIHRvIHRoZSB2YWx1ZVxuXHQgKi9cblx0cHJpdmF0ZSBfZ2V0QmluZGluZ0ZvckZpZWxkKG9GaWVsZDogRmllbGRDb250cm9sKTogQmluZGluZyB7XG5cdFx0bGV0IHNCaW5kaW5nTmFtZSA9IFwidmFsdWVcIjtcblx0XHRpZiAob0ZpZWxkLmlzQShcInNhcC5tLkNoZWNrQm94XCIpKSB7XG5cdFx0XHRzQmluZGluZ05hbWUgPSBcInNlbGVjdGVkXCI7XG5cdFx0fSBlbHNlIGlmIChvRmllbGQuaXNBKFwic2FwLmZlLmNvcmUuY29udHJvbHMuRmlsZVdyYXBwZXJcIikpIHtcblx0XHRcdHNCaW5kaW5nTmFtZSA9IFwidXBsb2FkVXJsXCI7XG5cdFx0fVxuXHRcdHJldHVybiBvRmllbGQuZ2V0QmluZGluZyhzQmluZGluZ05hbWUpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNpZGVFZmZlY3RzQ29udHJvbGxlckV4dGVuc2lvbjtcbiJdfQ==
|
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
ODataSideEffectsType,
|
|
8
8
|
SideEffectsType
|
|
9
9
|
} from "sap/fe/core/services/SideEffectsServiceFactory";
|
|
10
|
-
import
|
|
10
|
+
import FieldRuntime from "sap/fe/macros/field/FieldRuntime";
|
|
11
11
|
import Event from "sap/ui/base/Event";
|
|
12
12
|
import Control from "sap/ui/core/Control";
|
|
13
13
|
import Core from "sap/ui/core/Core";
|
|
@@ -383,7 +383,7 @@ class SideEffectsControllerExtension extends ControllerExtension {
|
|
|
383
383
|
const sFieldHelperId = oField.getFieldHelp && oField.getFieldHelp();
|
|
384
384
|
if (sFieldHelperId) {
|
|
385
385
|
const oFilterHelp: any = Core.byId(sFieldHelperId);
|
|
386
|
-
if (oFilterHelp) {
|
|
386
|
+
if (oFilterHelp && oFilterHelp.getOutParameters) {
|
|
387
387
|
return Promise.all(
|
|
388
388
|
(oFilterHelp.getOutParameters() as any[]).map((oOutParameter) => {
|
|
389
389
|
const oBinding = oOutParameter.getBinding("value");
|