@sapui5/sap.fe.core 1.136.1 → 1.136.3
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 +7 -1
- package/src/sap/fe/core/AppComponent.ts +10 -0
- package/src/sap/fe/core/AppStateHandler.js +9 -2
- package/src/sap/fe/core/AppStateHandler.ts +8 -2
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +2 -1
- package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +1 -0
- package/src/sap/fe/core/controllerextensions/EditFlow.js +63 -35
- package/src/sap/fe/core/controllerextensions/EditFlow.ts +80 -47
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
- package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
- package/src/sap/fe/core/controllerextensions/InternalRouting.js +16 -2
- package/src/sap/fe/core/controllerextensions/InternalRouting.ts +15 -1
- package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
- package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
- package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -5
- package/src/sap/fe/core/controllerextensions/SideEffects.ts +10 -7
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
- package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
- package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +30 -3
- package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +26 -3
- package/src/sap/fe/core/controllerextensions/editFlow/draft.js +21 -16
- package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +36 -16
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +12 -26
- package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +25 -44
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +2 -2
- package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +1 -1
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +8 -6
- package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +13 -4
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +15 -5
- package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +21 -6
- package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
- package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
- package/src/sap/fe/core/converters/controls/Common/Action.js +17 -12
- package/src/sap/fe/core/converters/controls/Common/Action.ts +19 -11
- package/src/sap/fe/core/converters/controls/Common/Table.js +25 -3
- package/src/sap/fe/core/converters/controls/Common/Table.ts +31 -2
- package/src/sap/fe/core/converters/controls/Common/table/Columns.js +13 -11
- package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +15 -2
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +19 -5
- package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +28 -5
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +11 -6
- package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +17 -10
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +28 -3
- package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +26 -1
- package/src/sap/fe/core/designtime/messagebundle_en_US_saprigi.properties +7 -0
- package/src/sap/fe/core/fpm/manifest.json +1 -1
- package/src/sap/fe/core/helpers/DeleteHelper.js +12 -10
- package/src/sap/fe/core/helpers/DeleteHelper.ts +9 -10
- package/src/sap/fe/core/helpers/ModelHelper.js +43 -4
- package/src/sap/fe/core/helpers/ModelHelper.ts +48 -3
- package/src/sap/fe/core/library.js +1 -1
- package/src/sap/fe/core/messagebundle.properties +4 -0
- package/src/sap/fe/core/messagebundle_ar.properties +5 -4
- package/src/sap/fe/core/messagebundle_bg.properties +2 -1
- package/src/sap/fe/core/messagebundle_ca.properties +2 -1
- package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
- package/src/sap/fe/core/messagebundle_cs.properties +4 -3
- package/src/sap/fe/core/messagebundle_cy.properties +2 -1
- package/src/sap/fe/core/messagebundle_da.properties +2 -1
- package/src/sap/fe/core/messagebundle_de.properties +8 -7
- package/src/sap/fe/core/messagebundle_el.properties +4 -3
- package/src/sap/fe/core/messagebundle_en.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
- package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -1
- package/src/sap/fe/core/messagebundle_es.properties +5 -4
- package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
- package/src/sap/fe/core/messagebundle_et.properties +2 -1
- package/src/sap/fe/core/messagebundle_fi.properties +2 -1
- package/src/sap/fe/core/messagebundle_fr.properties +4 -3
- package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
- package/src/sap/fe/core/messagebundle_hi.properties +2 -1
- package/src/sap/fe/core/messagebundle_hr.properties +2 -1
- package/src/sap/fe/core/messagebundle_hu.properties +2 -1
- package/src/sap/fe/core/messagebundle_id.properties +4 -3
- package/src/sap/fe/core/messagebundle_it.properties +2 -1
- package/src/sap/fe/core/messagebundle_iw.properties +2 -1
- package/src/sap/fe/core/messagebundle_ja.properties +3 -2
- package/src/sap/fe/core/messagebundle_kk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ko.properties +6 -5
- package/src/sap/fe/core/messagebundle_lt.properties +2 -1
- package/src/sap/fe/core/messagebundle_lv.properties +2 -1
- package/src/sap/fe/core/messagebundle_mk.properties +2 -1
- package/src/sap/fe/core/messagebundle_ms.properties +2 -1
- package/src/sap/fe/core/messagebundle_nl.properties +2 -1
- package/src/sap/fe/core/messagebundle_no.properties +3 -2
- package/src/sap/fe/core/messagebundle_pl.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt.properties +2 -1
- package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
- package/src/sap/fe/core/messagebundle_ro.properties +2 -1
- package/src/sap/fe/core/messagebundle_ru.properties +2 -1
- package/src/sap/fe/core/messagebundle_sh.properties +2 -1
- package/src/sap/fe/core/messagebundle_sk.properties +2 -1
- package/src/sap/fe/core/messagebundle_sl.properties +2 -1
- package/src/sap/fe/core/messagebundle_sr.properties +2 -1
- package/src/sap/fe/core/messagebundle_sv.properties +2 -1
- package/src/sap/fe/core/messagebundle_th.properties +2 -1
- package/src/sap/fe/core/messagebundle_tr.properties +2 -1
- package/src/sap/fe/core/messagebundle_uk.properties +2 -1
- package/src/sap/fe/core/messagebundle_vi.properties +9 -8
- package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
- package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
- package/src/sap/fe/core/rootView/Fcl.controller.js +8 -3
- package/src/sap/fe/core/rootView/Fcl.controller.ts +14 -7
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
- package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
- package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
- package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
- package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
|
@@ -846,14 +846,19 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
846
846
|
*/;
|
|
847
847
|
_proto.getFCLPersonalizationData = async function getFCLPersonalizationData() {
|
|
848
848
|
const shellServices = this.getAppComponent()?.getShellServices();
|
|
849
|
-
|
|
849
|
+
let fclState;
|
|
850
|
+
try {
|
|
851
|
+
fclState = await shellServices.getApplicationPersonalizationData?.("FCL-Personalization");
|
|
852
|
+
} catch (error) {
|
|
853
|
+
Log.error("Error while getting the FCL-Personalization data from the personalization service", error);
|
|
854
|
+
}
|
|
855
|
+
return fclState ?? {
|
|
850
856
|
defaultLayouts: {},
|
|
851
857
|
columnsDistribution: {
|
|
852
858
|
desktop: {},
|
|
853
859
|
tablet: {}
|
|
854
860
|
}
|
|
855
861
|
};
|
|
856
|
-
return (await shellServices.getApplicationPersonalizationData?.("FCL-Personalization")) ?? emptyFCLState;
|
|
857
862
|
}
|
|
858
863
|
|
|
859
864
|
/**
|
|
@@ -942,4 +947,4 @@ sap.ui.define(["sap/base/Log", "sap/f/FlexibleColumnLayoutSemanticHelper", "sap/
|
|
|
942
947
|
}), _class2)) || _class);
|
|
943
948
|
return FclController;
|
|
944
949
|
}, false);
|
|
945
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJGY2xDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlld3MiLCJmb3JFYWNoIiwib0NoaWxkVmlldyIsInBDaGlsZFZpZXciLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9uUmVzdG9yZSIsImZjbENvbnRyb2xsZXIiLCJhcHBDb250ZW50Q29udGFpbmVyIiwiZ2V0QXBwQ29udGVudENvbnRhaW5lciIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInBhZ2VzIiwiZ2V0UHJvcGVydHkiLCJjb21wb25lbnRJZCIsInNldFByb3BlcnR5Iiwib25Db250YWluZXJSZWFkeSIsIm9uU3VzcGVuZCIsImZjbENvbnRyb2wiLCJnZXRGY2xDb250cm9sIiwiYmVnaW5Db2x1bW5QYWdlcyIsImdldEJlZ2luQ29sdW1uUGFnZXMiLCJtaWRDb2x1bW5QYWdlcyIsImdldE1pZENvbHVtblBhZ2VzIiwiZW5kQ29sdW1uUGFnZXMiLCJnZXRFbmRDb2x1bW5QYWdlcyIsImNvbmNhdCIsImdldFZpZXdzRnJvbVBhZ2VzIiwidmlldyIsImNvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX29UYXJnZXRzQWdncmVnYXRpb24iLCJfb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuIiwibWVzc2FnZVBhZ2VzIiwidW5kZWZpbmVkIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJfaW50ZXJuYWxJbml0Iiwic2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwiLCJtYW5hZ2VEYXRhUmVjZWl2ZWQiLCJldmVudCIsImdldFBhcmFtZXRlciIsInBhdGgiLCJ0YXJnZXRlZFZpZXciLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZmluZCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImlzS2VlcEFsaXZlIiwiX3JvdXRpbmciLCJvbkRhdGFSZWNlaXZlZCIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJhdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQiLCJfdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uQmVmb3JlUm91dGVNYXRjaGVkIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib25Sb3V0ZU1hdGNoZWQiLCJhdHRhY2hTdGF0ZUNoYW5nZSIsIl9zYXZlTGF5b3V0IiwiX29Sb3V0ZXJQcm94eSIsInNDdXJyZW50Um91dGVOYW1lIiwic0N1cnJlbnRBcmd1bWVudHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib0RhdGFNb2RlbCIsImF0dGFjaEV2ZW50IiwiYmluZCIsImdldFJvdXRlclByb3h5IiwiX29GQ0xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0Iiwicm91dGluZyIsImNvbmZpZyIsImZsZXhpYmxlQ29sdW1uTGF5b3V0Iiwib0ZDTE1hbmlmZXN0Q29uZmlnIiwiZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUiLCJkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlIiwibGltaXRGQ0xUb1R3b0NvbHVtbnMiLCJjb250cm9sQWdncmVnYXRpb24iLCJkZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbiIsIl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24iLCJvblN0YXRlQ2hhbmdlZCIsImF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUiLCJnZXRGY2xDb25maWciLCJvRXZlbnQiLCJzUHJldmlvdXNMYXlvdXQiLCJnZXRQYXJhbWV0ZXJzIiwibGF5b3V0IiwiYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwicmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaEV2ZW50T25jZSIsInZpZXdzIiwicmlnaHRNb3N0Vmlld0N1cnJlbnQiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsInZpZXdMZXZlbEJlZm9yZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwidmlld0xldmVsQWZ0ZXIiLCJvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24iLCJnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uIiwib25FeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiZGV0YWNoU3RhdGVDaGFuZ2UiLCJkZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlIiwiQmFzZUNvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZXJyb3JNZXNzYWdlIiwicGFyYW1ldGVycyIsImZjbExldmVsIiwicmVqZWN0IiwibGVnYWN5UGFyYW1ldGVycyIsIkZDTExldmVsIiwibWVzc2FnZVBhZ2UiLCJQYWdlIiwic2hvd0hlYWRlciIsImFkZEJlZ2luQ29sdW1uUGFnZSIsImFkZE1pZENvbHVtblBhZ2UiLCJhZGRFbmRDb2x1bW5QYWdlIiwiZnJvbVBhZ2UiLCJoZWFkZXIiLCJGbGV4Qm94IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJCdXR0b24iLCJ0eXBlIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImhhbmRsZVNoZWxsQmFjayIsInRvIiwiZ2V0SWQiLCJ3aW5kb3ciLCJoaXN0b3J5IiwiYmFjayIsImFkZFN0eWxlQ2xhc3MiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiaWxsdXN0cmF0aW9uVHlwZSIsImVycm9yVHlwZSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50IiwiYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsImdldEN1cnJlbnRFbmRDb2x1bW5QYWdlIiwiQ29tbW9uVXRpbHMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJmcm9tVmlldyIsIl9ldmVudCIsImlzQSIsInBhZ2VSZWFkeSIsImZvcmNlUGFnZVJlYWR5IiwiZSIsIkxvZyIsImluZm8iLCJvTWFuaWZlc3QiLCJvVGFyZ2V0cyIsInRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwic1RhcmdldE5hbWUiLCJvVGFyZ2V0IiwiYWdncmVnYXRpb24iLCJwYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJhUm91dGVzIiwicm91dGVzIiwicm91dGUiLCJ0YXJnZXQiLCJnZXRDdXJyZW50QXJndW1lbnQiLCJnZXRDdXJyZW50Um91dGVOYW1lIiwiZ2V0VGFyZ2V0QWdncmVnYXRpb24iLCJzUm91dGVOYW1lIiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiYVZpZXdzIiwib0FkZGl0aW9uYWxWaWV3IiwiaW5jbHVkZXMiLCJpbmRleCIsIm9WaWV3Iiwib1ByZXZpb3VzVmlldyIsImJpbmRpbmdDb250ZXh0IiwicHJldmlvdXNWaWV3Q29udHJvbGxlciIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsImJJc05hdmlnYXRpb25BcnJvdyIsIl9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMiLCJuYXZUbyIsImdldFJpZ2h0bW9zdFZpZXciLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJvRmNsIiwiZ2V0U291cmNlIiwib1BhZ2VzIiwib1BhZ2UiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJoaWRkZW5EcmFmdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYkVkaXRCdXR0b25WaXNpYmxlIiwiX3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkiLCJiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJlbmRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwiZ2V0U3RvcmVkTGF5b3V0Iiwic2V0TGF5b3V0IiwiRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciIsImdldEluc3RhbmNlRm9yIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNIYXNoIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvUm91dGUiLCJnZXRSb3V0ZUJ5SGFzaCIsImdldFBhdHRlcm4iLCJhbGxBbGxvd2VkTGF5b3V0cyIsImlzQXJyYXkiLCJhTGF5b3V0cyIsInRvU3RyaW5nIiwiZGVmYXVsdExheW91dCIsIl9nZXREZWZhdWx0TGF5b3V0Iiwic1RhcmdldEFnZ3JlZ2F0aW9uIiwiZ2V0Um91dGVUYXJnZXROYW1lIiwiT25lQ29sdW1uIiwiTWlkQ29sdW1uRnVsbFNjcmVlbiIsIkVuZENvbHVtbkZ1bGxTY3JlZW4iLCJudW1iZXJPZlRhcmdldHNGcm9tUm91dGUiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImNvbXBvbmVudENvbnRhaW5lcnMiLCJnZXRWaXNpYmxlVmlld3MiLCJmb3JMYXlvdXQiLCJ2aXNpYmxlVmlld3MiLCJhZGRWaWV3IiwicGFnZSIsIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkIiwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQiLCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZCIsIlR3b0NvbHVtbnNNaWRFeHBhbmRlZCIsIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuIiwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbiIsImVycm9yIiwiYWxsVmlld3MiLCJsYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4iLCJzdGFydHNXaXRoIiwiYVJlc3RvcmVQcm9taXNlcyIsInJlZHVjZSIsImFQcm9taXNlcyIsIm9UYXJnZXRWaWV3IiwiS2VlcEFsaXZlSGVscGVyIiwicmVzdG9yZVZpZXciLCJhbGwiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwicG9wIiwiaXNDb250ZXh0VXNlZEluUGFnZXMiLCJvQ29udGV4dCIsImFBbGxWaXNpYmxlVmlld3MiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJzVGl0bGUiLCJzQXBwVGl0bGUiLCJicm93ZXJUaXRsZSIsInNldFRpdGxlIiwiZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSIsInNoZWxsU2VydmljZXMiLCJlbXB0eUZDTFN0YXRlIiwiZGVmYXVsdExheW91dHMiLCJjb2x1bW5zRGlzdHJpYnV0aW9uIiwiZGVza3RvcCIsInRhYmxldCIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YSIsInNldEZDTFBlcnNvbmFsaXphdGlvbkRhdGEiLCJmY2xTdGF0ZSIsInNldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YSIsImZjbFN0YXRlQ2FjaGUiLCJtb2RlbCIsIm9uQ29sdW1uc0Rpc3RyaWJ1dGlvbkNoYW5nZSIsIm1lZGlhIiwiY29sdW1uc1NpemVzIiwibmJDb2x1bW5zRGlzcGxheWVkIiwiZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dCIsImV4ZWMiLCJwcm9wb3NlZExheW91dCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRmNsLmNvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgRmxleGlibGVDb2x1bW5MYXlvdXQkQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZUV2ZW50LCBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50IH0gZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgdHlwZSB7IENvbHVtbnNOYXZpZ2F0aW9uQWN0aW9ucywgTmF2aWdhdGlvbkFjdGlvbnNUYXJnZXRzIH0gZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXJcIjtcbmltcG9ydCBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyXCI7XG5pbXBvcnQgZkxpYnJhcnkgZnJvbSBcInNhcC9mL2xpYnJhcnlcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCB1c2luZ0V4dGVuc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEFwcENvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IEZFVmlldyB9IGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9NZXNzYWdlSGFuZGxlclwiO1xuaW1wb3J0IFZpZXdTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvVmlld1N0YXRlXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBGbGV4Qm94IGZyb20gXCJzYXAvbS9GbGV4Qm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBQYWdlIGZyb20gXCJzYXAvbS9QYWdlXCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcblxuaW1wb3J0IHR5cGUgeyBNYW5hZ2VkT2JqZWN0JE1vZGVsQ29udGV4dENoYW5nZUV2ZW50UGFyYW1ldGVycyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgUm91dGUgZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIHsgUm91dGVyJEJlZm9yZVJvdXRlTWF0Y2hlZEV2ZW50LCBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgeyBUaXRsZUFkZGl0aW9uYWxJbmZvIH0gZnJvbSBcInNhcC91c2hlbGwvdWk1c2VydmljZS9TaGVsbFVJU2VydmljZVwiO1xuaW1wb3J0IENvbW1vblV0aWxzIGZyb20gXCIuLi9Db21tb25VdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBIaWRkZW5EcmFmdCB9IGZyb20gXCIuLi9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5cbmNvbnN0IExheW91dFR5cGUgPSBmTGlicmFyeS5MYXlvdXRUeXBlO1xudHlwZSBMYXlvdXRUeXBlVHlwZSA9IGtleW9mIHR5cGVvZiBMYXlvdXRUeXBlO1xuXG50eXBlIERlZmF1bHRMYXlvdXRzID0ge1xuXHQxPzogTGF5b3V0VHlwZVR5cGU7XG5cdDI/OiBMYXlvdXRUeXBlVHlwZTtcblx0Mz86IExheW91dFR5cGVUeXBlO1xufTtcblxudHlwZSBGQ0xDb2x1bW5EaXN0cmlidXRpb25TdGF0ZSA9IHtcblx0dGFibGV0OiB7IFtrZXkgaW4gTGF5b3V0VHlwZVR5cGVdPzogc3RyaW5nIH07XG5cdGRlc2t0b3A6IHsgW2tleSBpbiBMYXlvdXRUeXBlVHlwZV0/OiBzdHJpbmcgfTtcbn07XG5cbnR5cGUgRkNMQ29uZmlnID0ge1xuXHRtYXhDb2x1bW5zQ291bnQ6IG51bWJlcjtcblx0ZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU/OiBMYXlvdXRUeXBlVHlwZTtcblx0ZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZT86IExheW91dFR5cGVUeXBlO1xuXHRkZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgRkNMU3RhdGUgPSB7XG5cdGNvbHVtbnNEaXN0cmlidXRpb246IEZDTENvbHVtbkRpc3RyaWJ1dGlvblN0YXRlO1xuXHRkZWZhdWx0TGF5b3V0czogRGVmYXVsdExheW91dHM7XG59O1xuXG4vKipcbiAqIEJhc2UgY29udHJvbGxlciBjbGFzcyBmb3IgeW91ciBvd24gcm9vdCB2aWV3IHdpdGggYW4gc2FwLmYuRmxleGlibGVDb2x1bW5MYXlvdXQgY29udHJvbC5cbiAqXG4gKiBCeSB1c2luZyBvciBleHRlbmRpbmcgdGhpcyBjb250cm9sbGVyLCB5b3UgY2FuIHVzZSB5b3VyIG93biByb290IHZpZXcgd2l0aCB0aGUgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFuZFxuICogeW91IGNhbiBtYWtlIHVzZSBvZiBTQVAgRmlvcmkgZWxlbWVudHMgcGFnZXMgYW5kIFNBUCBGaW9yaSBlbGVtZW50cyBidWlsZGluZyBibG9ja3MuXG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKiBAc2luY2UgMS4xMTAuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIilcbmNsYXNzIEZjbENvbnRyb2xsZXIgZXh0ZW5kcyBCYXNlQ29udHJvbGxlciB7XG5cdEB1c2luZ0V4dGVuc2lvbihcblx0XHRWaWV3U3RhdGUub3ZlcnJpZGUoe1xuXHRcdFx0YXBwbHlJbml0aWFsU3RhdGVPbmx5OiBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHRhZGFwdEJpbmRpbmdSZWZyZXNoQ29udHJvbHM6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUsIGFDb250cm9sczogUHJvbWlzZTxWaWV3PltdKTogdm9pZCB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuX2dldEFsbFZpZXdzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NoaWxkVmlldzogVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IHBDaGlsZFZpZXcgPSBQcm9taXNlLnJlc29sdmUob0NoaWxkVmlldyk7XG5cdFx0XHRcdFx0YUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdGFkYXB0U3RhdGVDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYVN0YXRlQ29udHJvbHM6IFByb21pc2U8Vmlldz5bXSk6IHZvaWQge1xuXHRcdFx0XHQodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXIpLl9nZXRBbGxWaWV3cygpLmZvckVhY2goZnVuY3Rpb24gKG9DaGlsZFZpZXc6IFZpZXcpIHtcblx0XHRcdFx0XHRjb25zdCBwQ2hpbGRWaWV3ID0gUHJvbWlzZS5yZXNvbHZlKG9DaGlsZFZpZXcpO1xuXHRcdFx0XHRcdGFTdGF0ZUNvbnRyb2xzLnB1c2gocENoaWxkVmlldyk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdG9uUmVzdG9yZTogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSkge1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sbGVyID0gdGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIEZjbENvbnRyb2xsZXI7XG5cdFx0XHRcdGNvbnN0IGFwcENvbnRlbnRDb250YWluZXIgPSBmY2xDb250cm9sbGVyLmdldEFwcENvbnRlbnRDb250YWluZXIoKTtcblx0XHRcdFx0Y29uc3QgaW50ZXJuYWxNb2RlbCA9IGFwcENvbnRlbnRDb250YWluZXIuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKSBhcyBKU09OTW9kZWw7XG5cdFx0XHRcdGNvbnN0IHBhZ2VzID0gaW50ZXJuYWxNb2RlbC5nZXRQcm9wZXJ0eShcIi9wYWdlc1wiKTtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGNvbXBvbmVudElkIGluIHBhZ2VzKSB7XG5cdFx0XHRcdFx0aW50ZXJuYWxNb2RlbC5zZXRQcm9wZXJ0eShgL3BhZ2VzLyR7Y29tcG9uZW50SWR9L3Jlc3RvcmVTdGF0dXNgLCBcInBlbmRpbmdcIik7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZmNsQ29udHJvbGxlci5vbkNvbnRhaW5lclJlYWR5KCk7XG5cdFx0XHR9LFxuXHRcdFx0b25TdXNwZW5kOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlKSB7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbCA9IGZjbENvbnRyb2xsZXIuZ2V0RmNsQ29udHJvbCgpO1xuXHRcdFx0XHRjb25zdCBiZWdpbkNvbHVtblBhZ2VzID0gZmNsQ29udHJvbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCk7XG5cdFx0XHRcdGNvbnN0IG1pZENvbHVtblBhZ2VzID0gZmNsQ29udHJvbC5nZXRNaWRDb2x1bW5QYWdlcygpO1xuXHRcdFx0XHRjb25zdCBlbmRDb2x1bW5QYWdlcyA9IGZjbENvbnRyb2wuZ2V0RW5kQ29sdW1uUGFnZXMoKTtcblx0XHRcdFx0Y29uc3QgcGFnZXMgPSAoW10gYXMgQ29udHJvbFtdKS5jb25jYXQoYmVnaW5Db2x1bW5QYWdlcywgbWlkQ29sdW1uUGFnZXMsIGVuZENvbHVtblBhZ2VzKTtcblxuXHRcdFx0XHRmY2xDb250cm9sbGVyLmdldFZpZXdzRnJvbVBhZ2VzKHBhZ2VzKS5mb3JFYWNoKCh2aWV3KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY29udHJvbGxlciA9IHZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRcdGlmIChjb250cm9sbGVyPy52aWV3U3RhdGU/Lm9uU3VzcGVuZCkge1xuXHRcdFx0XHRcdFx0Y29udHJvbGxlci52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9KVxuXHQpXG5cdHZpZXdTdGF0ZSE6IFZpZXdTdGF0ZTtcblxuXHRwcm90ZWN0ZWQgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgc0N1cnJlbnRSb3V0ZU5hbWU/OiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBzQ3VycmVudEFyZ3VtZW50cz86IHsgbm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47IGJJc1N0aWNreU1vZGU/OiBib29sZWFuOyBbXCI/cXVlcnlcIl0/OiB7IGxheW91dD86IHN0cmluZyB9IH07XG5cblx0cHJpdmF0ZSBzUHJldmlvdXNMYXlvdXQ/OiBrZXlvZiB0eXBlb2YgTGF5b3V0VHlwZTtcblxuXHRwcm90ZWN0ZWQgX29GQ0xDb25maWchOiBGQ0xDb25maWc7XG5cblx0cHJpdmF0ZSBvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24/OiBWaWV3O1xuXG5cdHByaXZhdGUgX29UYXJnZXRzQWdncmVnYXRpb246IFJlY29yZDxcblx0XHRzdHJpbmcsXG5cdFx0e1xuXHRcdFx0YWdncmVnYXRpb246IHN0cmluZztcblx0XHRcdHBhdHRlcm4/OiBzdHJpbmcgfCBudWxsO1xuXHRcdH1cblx0PiA9IHt9O1xuXG5cdHByaXZhdGUgX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybjogUmVjb3JkPHN0cmluZywgc3RyaW5nW10gfCB1bmRlZmluZWQ+ID0ge307XG5cblx0cHJpdmF0ZSBtZXNzYWdlUGFnZXM6IChQYWdlIHwgdW5kZWZpbmVkKVtdID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xuXG5cdHByaXZhdGUgZmNsU3RhdGVDYWNoZSE6IFByb21pc2U8RkNMU3RhdGU+O1xuXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHRzdXBlci5vbkluaXQoKTtcblx0XHR0aGlzLl9pbnRlcm5hbEluaXQoKTtcblx0XHR0aGlzLnNldENvbHVtbkRpc3RyaWJ1dGlvbk1vZGVsKCk7XG5cdH1cblxuXHRtYW5hZ2VEYXRhUmVjZWl2ZWQoZXZlbnQ6IEV2ZW50PHsgZXJyb3I6IHsgc3RhdHVzOiBudW1iZXIgfTsgcGF0aDogc3RyaW5nIH0+KTogdm9pZCB7XG5cdFx0aWYgKGV2ZW50LmdldFBhcmFtZXRlcihcImVycm9yXCIpKSB7XG5cdFx0XHRjb25zdCBwYXRoID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwicGF0aFwiKTtcblx0XHRcdGNvbnN0IHRhcmdldGVkVmlldyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpLmZpbmQoKHZpZXcpID0+IHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpID09PSBwYXRoKTtcblx0XHRcdC8vIFdlIG5lZWQgdG8gbWFuYWdlIGVycm9yIHdoZW4gdGhlIHJlcXVlc3QgaXMgcmVsYXRlZCB0byBhIGZvcm0gIGludG8gYW4gT2JqZWN0UGFnZVxuXHRcdFx0aWYgKHBhdGggJiYgKHRhcmdldGVkVmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKSBhcyBDb250ZXh0KT8uaXNLZWVwQWxpdmUoKSkge1xuXHRcdFx0XHQodGFyZ2V0ZWRWaWV3IS5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLl9yb3V0aW5nLm9uRGF0YVJlY2VpdmVkKGV2ZW50KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZXJzKCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMuX3VwZGF0ZVZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24sIHRoaXMpO1xuXHRcdHN1cGVyLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHR0aGlzLl9pbnRlcm5hbEluaXQoKTtcblxuXHRcdHRoaXMuZ2V0Um91dGVyKCkuYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMub25CZWZvcmVSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMub25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmF0dGFjaFN0YXRlQ2hhbmdlKHRoaXMuX3NhdmVMYXlvdXQsIHRoaXMpO1xuXHR9XG5cblx0X2ludGVybmFsSW5pdCgpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5fb1JvdXRlclByb3h5KSB7XG5cdFx0XHRyZXR1cm47IC8vIEFscmVhZHkgaW5pdGlhbGl6ZWRcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gXCJcIjtcblx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzID0ge307XG5cblx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKTtcblxuXHRcdGNvbnN0IG9EYXRhTW9kZWwgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpLmdldE1vZGVsKCk7XG5cdFx0b0RhdGFNb2RlbD8uYXR0YWNoRXZlbnQoXCJkYXRhUmVjZWl2ZWRcIiwgdGhpcy5tYW5hZ2VEYXRhUmVjZWl2ZWQuYmluZCh0aGlzKSk7XG5cblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBvQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cblx0XHQvLyBHZXQgRkNMIGNvbmZpZ3VyYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0dGhpcy5fb0ZDTENvbmZpZyA9IHsgbWF4Q29sdW1uc0NvdW50OiAzIH07XG5cdFx0Y29uc3Qgb1JvdXRpbmdDb25maWcgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KClbXCJzYXAudWk1XCJdLnJvdXRpbmc7XG5cblx0XHRpZiAob1JvdXRpbmdDb25maWc/LmNvbmZpZz8uZmxleGlibGVDb2x1bW5MYXlvdXQpIHtcblx0XHRcdGNvbnN0IG9GQ0xNYW5pZmVzdENvbmZpZyA9IG9Sb3V0aW5nQ29uZmlnLmNvbmZpZy5mbGV4aWJsZUNvbHVtbkxheW91dDtcblxuXHRcdFx0Ly8gRGVmYXVsdCBsYXlvdXQgZm9yIDIgY29sdW1uc1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlID0gb0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZWZhdWx0IGxheW91dCBmb3IgMyBjb2x1bW5zXG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUpIHtcblx0XHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlID0gb0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExpbWl0IEZDTCB0byAyIGNvbHVtbnMgP1xuXHRcdFx0aWYgKG9GQ0xNYW5pZmVzdENvbmZpZy5saW1pdEZDTFRvVHdvQ29sdW1ucyA9PT0gdHJ1ZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCA9IDI7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbiA9IG9Sb3V0aW5nQ29uZmlnLmNvbmZpZy5jb250cm9sQWdncmVnYXRpb247XG5cdFx0fVxuXG5cdFx0dGhpcy5faW5pdGlhbGl6ZVRhcmdldEFnZ3JlZ2F0aW9uKG9BcHBDb21wb25lbnQpO1xuXHRcdHRoaXMuX2luaXRpYWxpemVSb3V0ZXNJbmZvcm1hdGlvbihvQXBwQ29tcG9uZW50KTtcblxuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmF0dGFjaFN0YXRlQ2hhbmdlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdH1cblxuXHRnZXRGY2xDb250cm9sKCk6IEZsZXhpYmxlQ29sdW1uTGF5b3V0IHtcblx0XHRyZXR1cm4gdGhpcy5nZXRBcHBDb250ZW50Q29udGFpbmVyKCkgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHRnZXRGY2xDb25maWcoKTogRkNMQ29uZmlnIHtcblx0XHRyZXR1cm4gdGhpcy5fb0ZDTENvbmZpZztcblx0fVxuXG5cdF9zYXZlTGF5b3V0KG9FdmVudDogRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuc1ByZXZpb3VzTGF5b3V0ID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKS5sYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBhZGRpdGlvbmFsIHZpZXcgKG9uIHRvcCBvZiB0aGUgdmlzaWJsZSB2aWV3cyksIHRvIGJlIGFibGUgdG8gY29tcHV0ZSB0aGUgbGF0ZXN0IHRhYmxlIG5hdmlnYXRlZCByb3dzIG9mXG5cdCAqIHRoZSBtb3N0IHJpZ2h0IHZpc2libGUgdmlldyBhZnRlciBhIG5hdiBiYWNrIG9yIGNvbHVtbiBmdWxsc2NyZWVuLlxuXHQgKlxuXHQgKi9cblxuXHRfdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbigpOiB2b2lkIHtcblx0XHRjb25zdCBhbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWQgPSB0aGlzLl9nZXRBbGxWaXNpYmxlVmlld3ModGhpcy5zUHJldmlvdXNMYXlvdXQpO1xuXHRcdGNvbnN0IHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQgPSBhbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWQubGVuZ3RoXG5cdFx0XHQ/IGFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZFthbGxWaXNpYmxlVmlld3NCZWZvcmVSb3V0ZU1hdGNoZWQubGVuZ3RoIC0gMV1cblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hFdmVudE9uY2UoXCJyb3V0ZU1hdGNoZWRcIiwgKGV2ZW50OiBFdmVudDx7IHZpZXdzOiBDb250cm9sW10gfT4pID0+IHtcblx0XHRcdGNvbnN0IHZpZXdzID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cdFx0XHRjb25zdCByaWdodE1vc3RWaWV3Q3VycmVudCA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIodmlld3Nbdmlld3MubGVuZ3RoIC0gMV0pO1xuXG5cdFx0XHRpZiAocmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCAmJiByaWdodE1vc3RWaWV3Q3VycmVudCkge1xuXHRcdFx0XHRjb25zdCB2aWV3TGV2ZWxCZWZvcmUgPSAocmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZC5nZXRWaWV3RGF0YSgpIGFzIHsgdmlld0xldmVsPzogbnVtYmVyIH0pPy52aWV3TGV2ZWw7XG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbEFmdGVyID0gKHJpZ2h0TW9zdFZpZXdDdXJyZW50LmdldFZpZXdEYXRhKCkgYXMgeyB2aWV3TGV2ZWw/OiBudW1iZXIgfSk/LnZpZXdMZXZlbDtcblxuXHRcdFx0XHQvLyBOYXZpZ2F0aW9uIGZvcndhcmQgZnJvbSBMMiB0byB2aWV3IGxldmVsIEwzIChGdWxsU2NyZWVuTGF5b3V0KTpcblx0XHRcdFx0aWYgKHZpZXdMZXZlbEFmdGVyID09PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0XHRcdHRoaXMub0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uID0gcmlnaHRNb3N0Vmlld0N1cnJlbnQ7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gTmF2aWdhdGlvbnMgYmFja3dhcmQgZnJvbSBMMyBkb3duIHRvIEwyLCBMMSwgTDAgKFRocmVlQ29sdW1uIGxheW91dCk6XG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHR2aWV3TGV2ZWxCZWZvcmUgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdHZpZXdMZXZlbEFmdGVyICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0XHR2aWV3TGV2ZWxCZWZvcmUgPCB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCAmJlxuXHRcdFx0XHRcdHZpZXdMZXZlbEJlZm9yZSA+IHZpZXdMZXZlbEFmdGVyICYmXG5cdFx0XHRcdFx0cmlnaHRNb3N0Vmlld0N1cnJlbnQgIT09IHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0dGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24gPSByaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk6IFZpZXcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbjtcblx0fVxuXG5cdG9uRXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLmdldFJvdXRlcigpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLm9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldFJvdXRlcigpLmRldGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLm9uQmVmb3JlUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5kZXRhY2hTdGF0ZUNoYW5nZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0XHR0aGlzLmdldEZjbENvbnRyb2woKS5kZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXG5cdFx0QmFzZUNvbnRyb2xsZXIucHJvdG90eXBlLm9uRXhpdC5iaW5kKHRoaXMpKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIEZDTCBjb21wb25lbnQgaXMgZW5hYmxlZC5cblx0ICogQHJldHVybnMgYHRydWVgIHNpbmNlIHdlIGFyZSBpbiBGQ0wgc2NlbmFyaW9cblx0ICogQGZpbmFsXG5cdCAqL1xuXHRpc0ZjbEVuYWJsZWQoKTogdGhpcyBpcyBGY2xDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdGhhdCBjcmVhdGVzIGEgbmV3IFBhZ2UgdG8gZGlzcGxheSB0aGUgSWxsdXN0cmF0ZWRNZXNzYWdlIGNvbnRhaW5pbmcgdGhlIGN1cnJlbnQgZXJyb3IuXG5cdCAqIEBwYXJhbSBlcnJvck1lc3NhZ2Vcblx0ICogQHBhcmFtIHBhcmFtZXRlcnNcblx0ICogQHBhcmFtIGZjbExldmVsXG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IGNyZWF0ZXMgYSBQYWdlIHRvIGRpc3BsYXkgdGhlIGVycm9yXG5cdCAqL1xuXHRhc3luYyBkaXNwbGF5RXJyb3JQYWdlKGVycm9yTWVzc2FnZTogc3RyaW5nLCBwYXJhbWV0ZXJzOiBOYXZpZ2F0aW9uVG9FcnJvclBhZ2VSZXN1bHQsIGZjbExldmVsID0gMCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZTxib29sZWFuPihhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sID0gdGhpcy5nZXRGY2xDb250cm9sKCk7XG5cblx0XHRcdFx0Ly8gTWFuYWdlIHRoZSBvbGQgQVBJIHdoZXJlIHRoZSBGQ0wgbGV2ZWwgd2FzIHBhc3NlZCBpbiB0aGUgcGFyYW1ldGVyc1xuXHRcdFx0XHRjb25zdCBsZWdhY3lQYXJhbWV0ZXJzID0gcGFyYW1ldGVycyBhcyB7IEZDTExldmVsPzogbnVtYmVyIH07XG5cdFx0XHRcdGlmIChsZWdhY3lQYXJhbWV0ZXJzLkZDTExldmVsICE9PSB1bmRlZmluZWQgJiYgZmNsTGV2ZWwgPT09IDApIHtcblx0XHRcdFx0XHRmY2xMZXZlbCA9IGxlZ2FjeVBhcmFtZXRlcnMuRkNMTGV2ZWw7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAodGhpcy5fb0ZDTENvbmZpZyAmJiBmY2xMZXZlbCA+PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0XHRcdGZjbExldmVsID0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgLSAxO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChmY2xMZXZlbCA8IDAgfHwgZmNsTGV2ZWwgPiAyKSB7XG5cdFx0XHRcdFx0ZmNsTGV2ZWwgPSAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0bGV0IG1lc3NhZ2VQYWdlID0gdGhpcy5tZXNzYWdlUGFnZXNbZmNsTGV2ZWxdO1xuXG5cdFx0XHRcdGlmICghbWVzc2FnZVBhZ2UpIHtcblx0XHRcdFx0XHRtZXNzYWdlUGFnZSA9IG5ldyBQYWdlKHtcblx0XHRcdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHR0aGlzLm1lc3NhZ2VQYWdlc1tmY2xMZXZlbF0gPSBtZXNzYWdlUGFnZTtcblxuXHRcdFx0XHRcdHN3aXRjaCAoZmNsTGV2ZWwpIHtcblx0XHRcdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRcdFx0ZmNsQ29udHJvbC5hZGRCZWdpbkNvbHVtblBhZ2UobWVzc2FnZVBhZ2UpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLmFkZE1pZENvbHVtblBhZ2UobWVzc2FnZVBhZ2UpO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0ZmNsQ29udHJvbC5hZGRFbmRDb2x1bW5QYWdlKG1lc3NhZ2VQYWdlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgZnJvbVBhZ2U6IENvbnRyb2w7XG5cdFx0XHRcdGNvbnN0IGhlYWRlciA9IG5ldyBGbGV4Qm94KHtcblx0XHRcdFx0XHRhbGlnbkl0ZW1zOiBcIlN0YXJ0XCIsXG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ6IFwiRW5kXCIsXG5cdFx0XHRcdFx0aXRlbXM6IFtcblx0XHRcdFx0XHRcdG5ldyBCdXR0b24oe1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIlRyYW5zcGFyZW50XCIsXG5cdFx0XHRcdFx0XHRcdGljb246IFwic2FwLWljb246Ly9kZWNsaW5lXCIsXG5cdFx0XHRcdFx0XHRcdHRvb2x0aXA6IFwie3NhcC5mZS5pMThuPkNfQ09NTU9OX1NBUEZFX0NMT1NFfVwiLFxuXHRcdFx0XHRcdFx0XHRwcmVzczogKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChwYXJhbWV0ZXJzLmhhbmRsZVNoZWxsQmFjayA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZmNsQ29udHJvbC50byhmcm9tUGFnZS5nZXRJZCgpLCB7fSwge30pO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuaGlzdG9yeS5iYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9KS5hZGRTdHlsZUNsYXNzKFwic2FwVWlMYXJnZU1hcmdpbkVuZFwiKVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdGNvbnN0IGlsbHVzdHJhdGVkTWVzc2FnZSA9IG5ldyBJbGx1c3RyYXRlZE1lc3NhZ2Uoe1xuXHRcdFx0XHRcdHRpdGxlOiBlcnJvck1lc3NhZ2UsXG5cdFx0XHRcdFx0ZGVzY3JpcHRpb246IHBhcmFtZXRlcnMuZGVzY3JpcHRpb24gPz8gXCJcIixcblx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlOiBwYXJhbWV0ZXJzLmVycm9yVHlwZSA/IGBzYXBJbGx1cy0ke3BhcmFtZXRlcnMuZXJyb3JUeXBlfWAgOiBcInNhcElsbHVzLVVuYWJsZVRvTG9hZFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRtZXNzYWdlUGFnZS5yZW1vdmVBbGxDb250ZW50KCk7XG5cdFx0XHRcdG1lc3NhZ2VQYWdlLmFkZENvbnRlbnQoaGVhZGVyKTtcblx0XHRcdFx0bWVzc2FnZVBhZ2UuYWRkQ29udGVudChpbGx1c3RyYXRlZE1lc3NhZ2UpO1xuXG5cdFx0XHRcdGxldCBhZnRlck5hdmlnYXRlRXZlbnROYW1lOiBzdHJpbmc7XG5cdFx0XHRcdHN3aXRjaCAoZmNsTGV2ZWwpIHtcblx0XHRcdFx0XHRjYXNlIDA6XG5cdFx0XHRcdFx0XHRmcm9tUGFnZSA9IGZjbENvbnRyb2wuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSA9IFwiYWZ0ZXJCZWdpbkNvbHVtbk5hdmlnYXRlXCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgMTpcblx0XHRcdFx0XHRcdGZyb21QYWdlID0gZmNsQ29udHJvbC5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpO1xuXHRcdFx0XHRcdFx0YWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSA9IFwiYWZ0ZXJNaWRDb2x1bW5OYXZpZ2F0ZVwiO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0ZnJvbVBhZ2UgPSBmY2xDb250cm9sLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCk7XG5cdFx0XHRcdFx0XHRhZnRlck5hdmlnYXRlRXZlbnROYW1lID0gXCJhZnRlckVuZENvbHVtbk5hdmlnYXRlXCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAocGFyYW1ldGVycy5oYW5kbGVTaGVsbEJhY2sgPT09IHRydWUpIHtcblx0XHRcdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gQ29tbW9uVXRpbHMuZ2V0QXBwQ29tcG9uZW50KGZyb21QYWdlKTtcblx0XHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbihhc3luYyBmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRmY2xDb250cm9sLnRvKGZyb21QYWdlLmdldElkKCksIHt9LCB7fSk7XG5cdFx0XHRcdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRCYWNrTmF2aWdhdGlvbigpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgZnJvbVZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKGZyb21QYWdlKTtcblx0XHRcdFx0ZmNsQ29udHJvbC5hdHRhY2hFdmVudE9uY2UoYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSwgKF9ldmVudDogRXZlbnQ8eyBmcm9tOiBDb250cm9sIH0+KSA9PiB7XG5cdFx0XHRcdFx0aWYgKGZyb21WaWV3ICYmIGZyb21WaWV3LmlzQTxWaWV3PihcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0XHRcdFx0XHQoZnJvbVZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5wYWdlUmVhZHk/LmZvcmNlUGFnZVJlYWR5KCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJlc29sdmUodHJ1ZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGZjbENvbnRyb2wudG8obWVzc2FnZVBhZ2UuZ2V0SWQoKSwge30sIHt9KTtcblx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0cmVqZWN0KGZhbHNlKTtcblx0XHRcdFx0TG9nLmluZm8oYCR7ZX1gKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBJbml0aWFsaXplIHRoZSBvYmplY3QgX29UYXJnZXRzQWdncmVnYXRpb24gdGhhdCBkZWZpbmVzIGZvciBlYWNoIHJvdXRlIHRoZSByZWxldmFudCBhZ2dyZWdhdGlvbiBhbmQgcGF0dGVybi5cblx0ICogQHBhcmFtIG9BcHBDb21wb25lbnQgUmVmZXJlbmNlIHRvIHRoZSBBcHBDb21wb25lbnRcblx0ICovXG5cdF9pbml0aWFsaXplVGFyZ2V0QWdncmVnYXRpb24ob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpLFxuXHRcdFx0b1RhcmdldHMgPSBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcgPyBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcudGFyZ2V0cyA6IG51bGw7XG5cblx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uID0ge307XG5cblx0XHRpZiAob1RhcmdldHMpIHtcblx0XHRcdE9iamVjdC5rZXlzKG9UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSBvVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdFx0XHRcdGlmIChvVGFyZ2V0LmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb25bc1RhcmdldE5hbWVdID0ge1xuXHRcdFx0XHRcdFx0YWdncmVnYXRpb246IG9UYXJnZXQuY29udHJvbEFnZ3JlZ2F0aW9uLFxuXHRcdFx0XHRcdFx0cGF0dGVybjogb1RhcmdldC5jb250ZXh0UGF0dGVyblxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbltzVGFyZ2V0TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbjogXCJwYWdlXCIsXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBudWxsXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemVzIHRoZSBtYXBwaW5nIGJldHdlZW4gYSByb3V0ZSAoaWRlbnRpZmVkIGFzIGl0cyBwYXR0ZXJuKSBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgdGFyZ2V0c1xuXHQgKiBAcGFyYW0gb0FwcENvbXBvbmVudCByZWYgdG8gdGhlIEFwcENvbXBvbmVudFxuXHQgKi9cblxuXHRfaW5pdGlhbGl6ZVJvdXRlc0luZm9ybWF0aW9uKG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCk6IHZvaWQge1xuXHRcdGNvbnN0IG9NYW5pZmVzdCA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKSxcblx0XHRcdGFSb3V0ZXMgPSBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcgPyBvTWFuaWZlc3RbXCJzYXAudWk1XCJdLnJvdXRpbmcucm91dGVzIDogbnVsbDtcblxuXHRcdHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybiA9IHt9O1xuXG5cdFx0aWYgKGFSb3V0ZXMpIHtcblx0XHRcdGFSb3V0ZXMuZm9yRWFjaCgocm91dGUpID0+IHtcblx0XHRcdFx0aWYgKHJvdXRlLnBhdHRlcm4pIHtcblx0XHRcdFx0XHR0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm5bcm91dGUucGF0dGVybl0gPSByb3V0ZS50YXJnZXQgYXMgc3RyaW5nW107XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdGdldEN1cnJlbnRBcmd1bWVudCgpOiB1bmtub3duIHtcblx0XHRyZXR1cm4gdGhpcy5zQ3VycmVudEFyZ3VtZW50cztcblx0fVxuXG5cdGdldEN1cnJlbnRSb3V0ZU5hbWUoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5zQ3VycmVudFJvdXRlTmFtZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXR0ZXIgZm9yIG9UYXJnZXRzQWdncmVnYXRpb24gYXJyYXkuXG5cdCAqIEByZXR1cm5zIFRoZSBfb1RhcmdldHNBZ2dyZWdhdGlvbiBhcnJheVxuXHQgKi9cblx0Z2V0VGFyZ2V0QWdncmVnYXRpb24oKTogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRhZ2dyZWdhdGlvbjogc3RyaW5nO1xuXHRcdFx0cGF0dGVybj86IHN0cmluZyB8IG51bGw7XG5cdFx0fVxuXHQ+IHtcblx0XHRyZXR1cm4gdGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbjtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgYnkgdGhlIHJvdXRlciBSb3V0ZU1hdGNoZWQgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnRcblx0ICovXG5cdG9uUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgc1JvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgY3VycmVudC9wcmV2aW91cyByb3V0ZXMgYW5kIGFyZ3VtZW50c1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBzUm91dGVOYW1lO1xuXHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwiYXJndW1lbnRzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gaXMgdHJpZ2dlcmluZyB0aGUgdGFibGUgc2Nyb2xsIHRvIHRoZSBuYXZpZ2F0ZWQgcm93IGFmdGVyIGVhY2ggbGF5b3V0IGNoYW5nZS5cblx0ICpcblx0ICovXG5cblx0X3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFWaWV3cyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHRcdC8vVGhlIHNjcm9sbHMgYXJlIHRyaWdnZXJlZCBvbmx5IGlmIHRoZSBsYXlvdXQgaXMgd2l0aCBzZXZlcmFsIGNvbHVtbnMgb3Igd2hlbiBzd2l0Y2hpbmcgdGhlIG1vc3RSaWdodCBjb2x1bW4gaW4gZnVsbCBzY3JlZW5cblx0XHRpZiAoXG5cdFx0XHRhVmlld3MubGVuZ3RoID4gMSB8fFxuXHRcdFx0KGFWaWV3cy5sZW5ndGggJiYgKGFWaWV3c1swXS5nZXRWaWV3RGF0YSgpIGFzIHsgdmlld0xldmVsOiBudW1iZXIgfSkudmlld0xldmVsIDwgdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQpXG5cdFx0KSB7XG5cdFx0XHRjb25zdCBvQWRkaXRpb25hbFZpZXcgPSB0aGlzLmdldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKTtcblx0XHRcdGlmIChvQWRkaXRpb25hbFZpZXcgJiYgIWFWaWV3cy5pbmNsdWRlcyhvQWRkaXRpb25hbFZpZXcpKSB7XG5cdFx0XHRcdGFWaWV3cy5wdXNoKG9BZGRpdGlvbmFsVmlldyk7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKGxldCBpbmRleCA9IGFWaWV3cy5sZW5ndGggLSAxOyBpbmRleCA+IDA7IGluZGV4LS0pIHtcblx0XHRcdFx0Y29uc3Qgb1ZpZXcgPSBhVmlld3NbaW5kZXhdLFxuXHRcdFx0XHRcdG9QcmV2aW91c1ZpZXcgPSBhVmlld3NbaW5kZXggLSAxXTtcblx0XHRcdFx0Y29uc3QgYmluZGluZ0NvbnRleHQgPSBvVmlldy5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBwcmV2aW91c1ZpZXdDb250cm9sbGVyID0gb1ByZXZpb3VzVmlldy5nZXRDb250cm9sbGVyKCkgYXMgeyBfc2Nyb2xsVGFibGVzVG9Sb3c/OiBGdW5jdGlvbiB9O1xuXHRcdFx0XHRpZiAoYmluZGluZ0NvbnRleHQgJiYgcHJldmlvdXNWaWV3Q29udHJvbGxlci5fc2Nyb2xsVGFibGVzVG9Sb3cpIHtcblx0XHRcdFx0XHRwcmV2aW91c1ZpZXdDb250cm9sbGVyLl9zY3JvbGxUYWJsZXNUb1JvdyhiaW5kaW5nQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgRkNMIFN0YXRlQ2hhbmdlZCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0b25TdGF0ZUNoYW5nZWQob0V2ZW50OiBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50IHwgRmxleGlibGVDb2x1bW5MYXlvdXQkQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZUV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3QgYklzTmF2aWdhdGlvbkFycm93ID0gKG9FdmVudCBhcyBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50KS5nZXRQYXJhbWV0ZXIoXCJpc05hdmlnYXRpb25BcnJvd1wiKTtcblx0XHRpZiAodGhpcy5zQ3VycmVudEFyZ3VtZW50cyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRpZiAoIXRoaXMuc0N1cnJlbnRBcmd1bWVudHNbXCI/cXVlcnlcIl0pIHtcblx0XHRcdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50c1tcIj9xdWVyeVwiXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50c1tcIj9xdWVyeVwiXS5sYXlvdXQgPSAob0V2ZW50IGFzIEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQpLmdldFBhcmFtZXRlcihcImxheW91dFwiKTtcblx0XHR9XG5cdFx0dGhpcy5fZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzKG9FdmVudCk7XG5cblx0XHQvLyBSZXBsYWNlIHRoZSBVUkwgd2l0aCB0aGUgbmV3IGxheW91dCBpZiBhIG5hdmlnYXRpb24gYXJyb3cgd2FzIHVzZWRcblx0XHRpZiAoYklzTmF2aWdhdGlvbkFycm93ICYmIHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpIHtcblx0XHRcdHRoaXMuX29Sb3V0ZXJQcm94eS5uYXZUbyh0aGlzLnNDdXJyZW50Um91dGVOYW1lLCB0aGlzLnNDdXJyZW50QXJndW1lbnRzKTtcblx0XHR9XG5cblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0UmlnaHRtb3N0VmlldygpO1xuXHRcdGlmIChvVmlldykge1xuXHRcdFx0dGhpcy5jb21wdXRlVGl0bGVIaWVyYXJjaHkob1ZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0byBmaXJlIE1vZGVsQ29udGV4dENoYW5nZSBldmVudCBvbiBhbGwgYnJlYWRjcnVtYnMgKCBvbiBlYWNoIE9iamVjdFBhZ2VzKS5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0X2ZvcmNlTW9kZWxDb250ZXh0Q2hhbmdlT25CcmVhZENydW1icyhvRXZlbnQ6IEV2ZW50PE1hbmFnZWRPYmplY3QkTW9kZWxDb250ZXh0Q2hhbmdlRXZlbnRQYXJhbWV0ZXJzLCBGbGV4aWJsZUNvbHVtbkxheW91dD4pOiB2b2lkIHtcblx0XHQvL2ZvcmNlIG1vZGVsY29udGV4dGNoYW5nZSBvbiBPYmplY3RQYWdlcyB0byByZWZyZXNoIHRoZSBicmVhZGNydW1icyBsaW5rIGhyZWZzXG5cdFx0Y29uc3Qgb0ZjbCA9IG9FdmVudC5nZXRTb3VyY2UoKTtcblx0XHRsZXQgb1BhZ2VzOiBDb250cm9sW10gPSBbXTtcblx0XHRvUGFnZXMgPSBvUGFnZXMuY29uY2F0KG9GY2wuZ2V0QmVnaW5Db2x1bW5QYWdlcygpKS5jb25jYXQob0ZjbC5nZXRNaWRDb2x1bW5QYWdlcygpKS5jb25jYXQob0ZjbC5nZXRFbmRDb2x1bW5QYWdlcygpKTtcblx0XHRvUGFnZXMuZm9yRWFjaCgob1BhZ2UpID0+IHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcihvUGFnZSk7XG5cdFx0XHRjb25zdCBvQnJlYWRDcnVtYnMgPSBvVmlldz8uYnlJZCAmJiBvVmlldy5ieUlkKFwiYnJlYWRjcnVtYnNcIik7XG5cdFx0XHRpZiAob0JyZWFkQ3J1bWJzKSB7XG5cdFx0XHRcdG9CcmVhZENydW1icy5maXJlTW9kZWxDb250ZXh0Q2hhbmdlKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIHRvIHVwZGF0ZSB0aGUgU2hhcmUgYnV0dG9uIFZpc2liaWxpdHkuXG5cdCAqIEBwYXJhbSB2aWV3Q29sdW1uIE5hbWUgb2YgdGhlIGN1cnJlbnQgY29sdW1uIChcImJlZ2luQ29sdW1uXCIsIFwibWlkQ29sdW1uXCIsIFwiZW5kQ29sdW1uXCIpXG5cdCAqIEBwYXJhbSBzTGF5b3V0IFRoZSBjdXJyZW50IGxheW91dCB1c2VkIGJ5IHRoZSBGQ0xcblx0ICogQHJldHVybnMgVGhlIHNoYXJlIGJ1dHRvbiB2aXNpYmlsaXR5XG5cdCAqL1xuXHRfdXBkYXRlU2hhcmVCdXR0b25WaXNpYmlsaXR5KHZpZXdDb2x1bW46IHN0cmluZywgc0xheW91dDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0bGV0IGJTaG93U2hhcmVJY29uO1xuXHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0Y2FzZSBcIk9uZUNvbHVtblwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwiYmVnaW5Db2x1bW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkXCI6XG5cdFx0XHRjYXNlIFwiVHdvQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJtaWRDb2x1bW5cIjtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcImVuZENvbHVtblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiBiU2hvd1NoYXJlSWNvbjtcblx0fVxuXG5cdF91cGRhdGVFZGl0QnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW46IHN0cmluZywgc0xheW91dDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaGlkZGVuRHJhZnQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZDtcblx0XHRsZXQgYkVkaXRCdXR0b25WaXNpYmxlID0gdHJ1ZTtcblx0XHRzd2l0Y2ggKHZpZXdDb2x1bW4pIHtcblx0XHRcdGNhc2UgXCJtaWRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRpZiAoIWhpZGRlbkRyYWZ0KSB7XG5cdFx0XHRcdFx0XHRcdGJFZGl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcImVuZENvbHVtblwiOlxuXHRcdFx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRcdGlmICghaGlkZGVuRHJhZnQpIHtcblx0XHRcdFx0XHRcdFx0YkVkaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGJFZGl0QnV0dG9uVmlzaWJsZTtcblx0fVxuXG5cdF91cGRhdGVTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW46IHN0cmluZywgc0xheW91dDogc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgaGlkZGVuRHJhZnQgPSAodGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKT8uZ2V0Q2FwYWJpbGl0aWVzKCk/LkhpZGRlbkRyYWZ0IGFzIEhpZGRlbkRyYWZ0KT8uZW5hYmxlZDtcblx0XHRsZXQgYlNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxlID0gdHJ1ZTtcblx0XHRzd2l0Y2ggKHZpZXdDb2x1bW4pIHtcblx0XHRcdGNhc2UgXCJtaWRDb2x1bW5cIjpcblx0XHRcdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0XHRpZiAoaGlkZGVuRHJhZnQpIHtcblx0XHRcdFx0XHRcdFx0YlNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIGJTYXZlQW5kQ2FuY2VsQnV0dG9uVmlzaWJsZTtcblx0fVxuXG5cdHVwZGF0ZVVJU3RhdGVGb3JWaWV3KG9WaWV3OiBGRVZpZXcsIEZDTExldmVsOiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBvVUlTdGF0ZSA9IHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKSxcblx0XHRcdG9GY2xDb2xOYW1lID0gW1wiYmVnaW5Db2x1bW5cIiwgXCJtaWRDb2x1bW5cIiwgXCJlbmRDb2x1bW5cIl0sXG5cdFx0XHRzTGF5b3V0ID0gdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCk7XG5cdFx0bGV0IHZpZXdDb2x1bW47XG5cblx0XHRpZiAoIW9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpKSB7XG5cdFx0XHRvVmlldy5zZXRNb2RlbCh0aGlzLl9jcmVhdGVIZWxwZXJNb2RlbCgpLCBcImZjbGhlbHBlclwiKTtcblx0XHR9XG5cdFx0aWYgKCFvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mbykge1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8gPSB7fTtcblx0XHR9XG5cdFx0aWYgKCFvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4pIHtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbiA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIW9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbikge1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uID0ge307XG5cdFx0fVxuXHRcdGlmIChGQ0xMZXZlbCA+PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCkge1xuXHRcdFx0Ly8gVGhlIHZpZXcgaXMgb24gYSBsZXZlbCA+IG1heCBudW1iZXIgb2YgY29sdW1ucy4gSXQncyBhbHdheXMgZnVsbHNjcmVlbiB3aXRob3V0IGNsb3NlL2V4aXQgYnV0dG9uc1xuXHRcdFx0dmlld0NvbHVtbiA9IG9GY2xDb2xOYW1lW3RoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50IC0gMV07XG5cblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbi5mdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbi5leGl0RnVsbFNjcmVlbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5taWRDb2x1bW4uY2xvc2VDb2x1bW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uLmV4aXRGdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5mdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLmVuZENvbHVtbi5jbG9zZUNvbHVtbiA9IG51bGw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHZpZXdDb2x1bW4gPSBvRmNsQ29sTmFtZVtGQ0xMZXZlbF07XG5cdFx0fVxuXG5cdFx0aWYgKFxuXHRcdFx0RkNMTGV2ZWwgPj0gdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiRW5kQ29sdW1uRnVsbFNjcmVlblwiIHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIiB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJPbmVDb2x1bW5cIlxuXHRcdCkge1xuXHRcdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvYnJlYWRDcnVtYklzVmlzaWJsZVwiLCB0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvYnJlYWRDcnVtYklzVmlzaWJsZVwiLCBmYWxzZSk7XG5cdFx0fVxuXHRcdC8vIFVuZm9ydHVuYXRlbHksIHRoZSBGQ0xIZWxwZXIgZG9lc24ndCBwcm92aWRlIGFjdGlvbkJ1dHRvbiB2YWx1ZXMgZm9yIHRoZSBmaXJzdCBjb2x1bW5cblx0XHQvLyBzbyB3ZSBoYXZlIHRvIGFkZCB0aGlzIGluZm8gbWFudWFsbHlcblx0XHQob1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8gYXMgeyBiZWdpbkNvbHVtbj86IG9iamVjdCB9KS5iZWdpbkNvbHVtbiA9IHtcblx0XHRcdGZ1bGxTY3JlZW46IG51bGwsXG5cdFx0XHRleGl0RnVsbFNjcmVlbjogbnVsbCxcblx0XHRcdGNsb3NlQ29sdW1uOiBudWxsXG5cdFx0fTtcblxuXHRcdGNvbnN0IG9BY3Rpb25CdXR0b25JbmZvczogTmF2aWdhdGlvbkFjdGlvbnNUYXJnZXRzICYge1xuXHRcdFx0c3dpdGNoVmlzaWJsZT86IGJvb2xlYW47XG5cdFx0XHRzd2l0Y2hJY29uPzogc3RyaW5nO1xuXHRcdFx0aXNGdWxsU2NyZWVuPzogYm9vbGVhbjtcblx0XHRcdGNsb3NlVmlzaWJsZT86IGJvb2xlYW47XG5cdFx0fSA9IE9iamVjdC5hc3NpZ24oe30sIG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvW3ZpZXdDb2x1bW4gYXMga2V5b2YgQ29sdW1uc05hdmlnYXRpb25BY3Rpb25zXSk7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLnN3aXRjaFZpc2libGUgPSBvQWN0aW9uQnV0dG9uSW5mb3MuZnVsbFNjcmVlbiAhPT0gbnVsbCB8fCBvQWN0aW9uQnV0dG9uSW5mb3MuZXhpdEZ1bGxTY3JlZW4gIT09IG51bGw7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLnN3aXRjaEljb24gPSBvQWN0aW9uQnV0dG9uSW5mb3MuZnVsbFNjcmVlbiAhPT0gbnVsbCA/IFwic2FwLWljb246Ly9mdWxsLXNjcmVlblwiIDogXCJzYXAtaWNvbjovL2V4aXQtZnVsbC1zY3JlZW5cIjtcblx0XHRvQWN0aW9uQnV0dG9uSW5mb3MuaXNGdWxsU2NyZWVuID0gb0FjdGlvbkJ1dHRvbkluZm9zLmZ1bGxTY3JlZW4gPT09IG51bGw7XG5cdFx0b0FjdGlvbkJ1dHRvbkluZm9zLmNsb3NlVmlzaWJsZSA9IG9BY3Rpb25CdXR0b25JbmZvcy5jbG9zZUNvbHVtbiAhPT0gbnVsbDtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL2FjdGlvbkJ1dHRvbnNJbmZvXCIsIG9BY3Rpb25CdXR0b25JbmZvcyk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93RWRpdEJ1dHRvblwiLCB0aGlzLl91cGRhdGVFZGl0QnV0dG9uVmlzaWJsaXR5KHZpZXdDb2x1bW4sIHNMYXlvdXQpKTtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL3Nob3dTYXZlQW5kQ2FuY2VsQnV0dG9uXCIsIHRoaXMuX3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkodmlld0NvbHVtbiwgc0xheW91dCkpO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvc2hvd1NoYXJlSWNvblwiLCB0aGlzLl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkodmlld0NvbHVtbiwgc0xheW91dCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgcm91dGVyIEJlZm9yZVJvdXRlTWF0Y2hlZCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0YXN5bmMgb25CZWZvcmVSb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkQmVmb3JlUm91dGVNYXRjaGVkRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAob0V2ZW50KSB7XG5cdFx0XHRjb25zdCBvUXVlcnlQYXJhbXMgPSAob0V2ZW50LmdldFBhcmFtZXRlcnMoKS5hcmd1bWVudHMhIGFzIFJlY29yZDxzdHJpbmcsIHsgbGF5b3V0OiBMYXlvdXRUeXBlVHlwZSB9PilbXCI/cXVlcnlcIl07XG5cdFx0XHRsZXQgc0xheW91dCA9IG9RdWVyeVBhcmFtcyA/IG9RdWVyeVBhcmFtcy5sYXlvdXQgOiB1bmRlZmluZWQ7XG5cblx0XHRcdC8vIElmIHRoZXJlIGlzIG5vIGxheW91dCBwYXJhbWV0ZXIsIHF1ZXJ5IGZvciB0aGUgZGVmYXVsdCBsZXZlbCAwIGxheW91dCAobm9ybWFsbHkgT25lQ29sdW1uKVxuXHRcdFx0aWYgKCFzTGF5b3V0KSB7XG5cdFx0XHRcdGNvbnN0IG9OZXh0VUlTdGF0ZSA9IHRoaXMuZ2V0SGVscGVyKCkuZ2V0TmV4dFVJU3RhdGUoMCk7XG5cdFx0XHRcdHNMYXlvdXQgPSBvTmV4dFVJU3RhdGUubGF5b3V0IGFzIExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbGF5b3V0IGlmIGNvbXBhdGlibGUgd2l0aCB0aGUgbnVtYmVyIG9mIHRhcmdldHNcblx0XHRcdC8vIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSB0aGUgY2FzZSBmb3Igbm9ybWFsIG5hdmlnYXRpb24sIGp1c3QgbmVlZGVkIGluIGNhc2Vcblx0XHRcdC8vIHRoZSBVUkwgaGFzIGJlZW4gbWFudWFsbHkgbW9kaWZpZWRcblx0XHRcdGNvbnN0IGFUYXJnZXRzID0gKG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJjb25maWdcIikgYXMgeyB0YXJnZXQ/OiBzdHJpbmdbXSB9KT8udGFyZ2V0O1xuXHRcdFx0c0xheW91dCA9IHRoaXMuX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNMYXlvdXQhLCBhVGFyZ2V0cyk7XG5cdFx0XHRzTGF5b3V0ID0gYXdhaXQgdGhpcy5nZXRTdG9yZWRMYXlvdXQoc0xheW91dCk7XG5cblx0XHRcdC8vIFVwZGF0ZSB0aGUgbGF5b3V0IG9mIHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dC5cblx0XHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLnNldExheW91dChzTGF5b3V0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSGVscGVyIGZvciB0aGUgRkNMIENvbXBvbmVudC5cblx0ICogQHJldHVybnMgSW5zdGFuY2Ugb2YgYSBzZW1hbnRpYyBoZWxwZXJcblx0ICovXG5cdGdldEhlbHBlcigpOiBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIHtcblx0XHRyZXR1cm4gRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlci5nZXRJbnN0YW5jZUZvcih0aGlzLmdldEZjbENvbnRyb2woKSwgdGhpcy5fb0ZDTENvbmZpZyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2FsY3VsYXRlcyB0aGUgRkNMIGxheW91dCBmb3IgYSBnaXZlbiBGQ0wgbGV2ZWwgYW5kIGEgdGFyZ2V0IGhhc2guXG5cdCAqIEBwYXJhbSBpTmV4dEZDTExldmVsIEZDTCBsZXZlbCB0byBiZSBuYXZpZ2F0ZWQgdG9cblx0ICogQHBhcmFtIHNIYXNoIFRoZSBoYXNoIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gc1Byb3Bvc2VkTGF5b3V0IFRoZSBwcm9wb3NlZCBsYXlvdXRcblx0ICogQHBhcmFtIGtlZXBDdXJyZW50TGF5b3V0IFRydWUgaWYgd2Ugd2FudCB0byBrZWVwIHRoZSBjdXJyZW50IGxheW91dCBpZiBwb3NzaWJsZVxuXHQgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBsYXlvdXRcblx0ICovXG5cdGNhbGN1bGF0ZUxheW91dChpTmV4dEZDTExldmVsOiBudW1iZXIsIHNIYXNoOiBzdHJpbmcsIHNQcm9wb3NlZExheW91dDogTGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQsIGtlZXBDdXJyZW50TGF5b3V0ID0gZmFsc2UpOiBzdHJpbmcge1xuXHRcdC8vIEZpcnN0LCBhc2sgdGhlIEZDTCBoZWxwZXIgdG8gY2FsY3VsYXRlIHRoZSBsYXlvdXQgaWYgbm90aGluZyBpcyBwcm9wb3NlZFxuXHRcdGlmICghc1Byb3Bvc2VkTGF5b3V0KSB7XG5cdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSAoXG5cdFx0XHRcdGtlZXBDdXJyZW50TGF5b3V0ID8gdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCkgOiB0aGlzLmdldEhlbHBlcigpLmdldE5leHRVSVN0YXRlKGlOZXh0RkNMTGV2ZWwpLmxheW91dFxuXHRcdFx0KSBhcyBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGVuIGNoYW5nZSB0aGlzIHZhbHVlIGlmIG5lY2Vzc2FyeSwgYmFzZWQgb24gdGhlIG51bWJlciBvZiB0YXJnZXRzXG5cdFx0Y29uc3Qgb1JvdXRlID0gKHRoaXMuZ2V0Um91dGVyKCkgYXMgeyBnZXRSb3V0ZUJ5SGFzaD86IChoYXNoOiBzdHJpbmcpID0+IFJvdXRlIH0pLmdldFJvdXRlQnlIYXNoPy4oXG5cdFx0XHRgJHtzSGFzaH0/bGF5b3V0PSR7c1Byb3Bvc2VkTGF5b3V0fWBcblx0XHQpO1xuXHRcdGNvbnN0IGFUYXJnZXRzID0gdGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuW29Sb3V0ZSEuZ2V0UGF0dGVybigpXTtcblxuXHRcdHJldHVybiB0aGlzLl9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzUHJvcG9zZWRMYXlvdXQhLCBhVGFyZ2V0cyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIHdoZXRoZXIgYSBnaXZlbiBGQ0wgbGF5b3V0IGlzIGNvbXBhdGlibGUgd2l0aCBhbiBhcnJheSBvZiB0YXJnZXRzLlxuXHQgKiBAcGFyYW0gc1Byb3Bvc2VkTGF5b3V0IFByb3Bvc2VkIHZhbHVlIGZvciB0aGUgRkNMIGxheW91dFxuXHQgKiBAcGFyYW0gYVRhcmdldHMgQXJyYXkgb2YgdGFyZ2V0IG5hbWVzIHVzZWQgZm9yIGNoZWNraW5nXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0ZWQgbGF5b3V0XG5cdCAqL1xuXHRfY29ycmVjdExheW91dEZvclRhcmdldHMoc1Byb3Bvc2VkTGF5b3V0OiBMYXlvdXRUeXBlVHlwZSwgYVRhcmdldHM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKTogTGF5b3V0VHlwZVR5cGUge1xuXHRcdGNvbnN0IGFsbEFsbG93ZWRMYXlvdXRzID0ge1xuXHRcdFx0XCIyXCI6IFtcIlR3b0NvbHVtbnNNaWRFeHBhbmRlZFwiLCBcIlR3b0NvbHVtbnNCZWdpbkV4cGFuZGVkXCIsIFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiXSxcblx0XHRcdFwiM1wiOiBbXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiLFxuXHRcdFx0XHRcIk1pZENvbHVtbkZ1bGxTY3JlZW5cIixcblx0XHRcdFx0XCJFbmRDb2x1bW5GdWxsU2NyZWVuXCJcblx0XHRcdF1cblx0XHR9O1xuXG5cdFx0aWYgKGFUYXJnZXRzICYmICFBcnJheS5pc0FycmF5KGFUYXJnZXRzKSkge1xuXHRcdFx0Ly8gVG8gc3VwcG9ydCBzaW5nbGUgdGFyZ2V0IGFzIGEgc3RyaW5nIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0YVRhcmdldHMgPSBbYVRhcmdldHNdO1xuXHRcdH1cblxuXHRcdGlmICghYVRhcmdldHMpIHtcblx0XHRcdC8vIERlZmVuc2l2ZSwganVzdCBpbiBjYXNlLi4uXG5cdFx0XHRyZXR1cm4gc1Byb3Bvc2VkTGF5b3V0O1xuXHRcdH0gZWxzZSBpZiAoYVRhcmdldHMubGVuZ3RoID4gMSkge1xuXHRcdFx0Ly8gTW9yZSB0aGFuIDEgdGFyZ2V0OiBqdXN0IHNpbXBseSBjaGVjayBmcm9tIHRoZSBhbGxvd2VkIHZhbHVlc1xuXHRcdFx0Y29uc3QgYUxheW91dHMgPSBhbGxBbGxvd2VkTGF5b3V0c1thVGFyZ2V0cy5sZW5ndGgudG9TdHJpbmcoKSBhcyBcIjJcIiB8IFwiM1wiXSBhcyBMYXlvdXRUeXBlVHlwZVtdO1xuXHRcdFx0aWYgKCFhTGF5b3V0cy5pbmNsdWRlcyhzUHJvcG9zZWRMYXlvdXQpKSB7XG5cdFx0XHRcdC8vIFRoZSBwcm9wb3NlZCBsYXlvdXQgaXNuJ3QgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgY29sdW1uc1xuXHRcdFx0XHQvLyAtLT4gQXNrIHRoZSBoZWxwZXIgZm9yIHRoZSBkZWZhdWx0IGxheW91dCBmb3IgdGhlIG51bWJlciBvZiBjb2x1bW5zXG5cdFx0XHRcdGNvbnN0IGRlZmF1bHRMYXlvdXQgPSB0aGlzLl9nZXREZWZhdWx0TGF5b3V0KGFUYXJnZXRzLmxlbmd0aCk7XG5cdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IGRlZmF1bHRMYXlvdXQgJiYgYUxheW91dHMuaW5jbHVkZXMoZGVmYXVsdExheW91dCkgPyBkZWZhdWx0TGF5b3V0IDogYUxheW91dHNbMF07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIE9ubHkgb25lIHRhcmdldFxuXHRcdFx0Y29uc3Qgc1RhcmdldEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0dGhpcy5nZXRUYXJnZXRBZ2dyZWdhdGlvbigpW2dldFJvdXRlVGFyZ2V0TmFtZShhVGFyZ2V0c1swXSldLmFnZ3JlZ2F0aW9uIHx8IHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdENvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdHN3aXRjaCAoc1RhcmdldEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gTGF5b3V0VHlwZS5PbmVDb2x1bW47XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdHNQcm9wb3NlZExheW91dCA9IExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVuZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHQvLyBubyBkZWZhdWx0XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQcm9wb3NlZExheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGRlZmF1bHQgTGF5b3V0IGZvciBudW1iZXIgb2YgY29sdW1ucy5cblx0ICogQHBhcmFtIG51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZVxuXHQgKiBAcmV0dXJucyBBbiBGQ0wgTGF5b3V0IGJhc2VkIG9uIHRoZSBtYW5pZmVzdCBjb25maWd1cmF0aW9uIGlmIGl0IGlzIGRlZmluZWQuXG5cdCAqL1xuXHRfZ2V0RGVmYXVsdExheW91dChudW1iZXJPZlRhcmdldHNGcm9tUm91dGU6IG51bWJlcik6IExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRzd2l0Y2ggKG51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZSkge1xuXHRcdFx0Y2FzZSAzOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdGNhc2UgMjpcblx0XHRcdFx0cmV0dXJuIHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBpbnN0YW5jZWQgdmlld3MgaW4gdGhlIEZDTCBjb21wb25lbnQuXG5cdCAqIEByZXR1cm5zIFJldHVybiB0aGUgaW5zdGFuY2VkIHZpZXdzLlxuXHQgKi9cblx0Z2V0SW5zdGFuY2VkVmlld3MoKTogVmlld1tdIHtcblx0XHRjb25zdCBmY2xDb250cm9sID0gdGhpcy5nZXRGY2xDb250cm9sKCk7XG5cdFx0Y29uc3QgY29tcG9uZW50Q29udGFpbmVyczogQ29udHJvbFtdID0gW1xuXHRcdFx0Li4uZmNsQ29udHJvbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldE1pZENvbHVtblBhZ2VzKCksXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldEVuZENvbHVtblBhZ2VzKClcblx0XHRdO1xuXHRcdHJldHVybiB0aGlzLmdldFZpZXdzRnJvbVBhZ2VzKGNvbXBvbmVudENvbnRhaW5lcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGN1cnJlbnQgdmlzaWJsZSBwYWdlcy5cblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSB2aXNpYmxlIHZpZXdzLlxuXHQgKi9cblx0Z2V0VmlzaWJsZVZpZXdzKCk6IFZpZXdbXSB7XG5cdFx0cmV0dXJuIHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhbGwgdmlzaWJsZSB2aWV3cyBpbiB0aGUgRkNMIGNvbXBvbmVudC5cblx0ICogQHBhcmFtIGZvckxheW91dCAgT3B0aW9uYWwgcGFyYW1ldGVyIGlzIHZlcnkgc3BlY2lmaWMgYXMgcGFydCBvZiB0aGUgY2FsY3VsYXRpb24gb2YgdGhlIGxhdGVzdCBuYXZpZ2F0ZWQgcm93XG5cdCAqIEByZXR1cm5zIEFycmF5IG9mIGFsbCB2aXNpYmxlIHZpZXdzXG5cdCAqL1xuXHRfZ2V0QWxsVmlzaWJsZVZpZXdzKGZvckxheW91dD86IHN0cmluZyk6IFZpZXdbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVZpZXdzOiBWaWV3W10gPSBbXTtcblx0XHRjb25zdCBsYXlvdXQgPSBmb3JMYXlvdXQgPyBmb3JMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRjb25zdCBhZGRWaWV3ID0gKHBhZ2U6IENvbnRyb2wgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdHZpc2libGVWaWV3cy5wdXNoKHZpZXcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHN3aXRjaCAobGF5b3V0KSB7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuRW5kQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLk9uZUNvbHVtbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy5lcnJvcihgVW5oYW5kbGVkIHN3aXRjaCBjYXNlIGZvciAke3RoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpfWApO1xuXHRcdH1cblxuXHRcdHJldHVybiB2aXNpYmxlVmlld3M7XG5cdH1cblxuXHRfZ2V0QWxsVmlld3MoZm9yTGF5b3V0Pzogc3RyaW5nKTogVmlld1tdIHtcblx0XHRjb25zdCBhbGxWaWV3czogVmlld1tdID0gW107XG5cdFx0Y29uc3QgbGF5b3V0ID0gZm9yTGF5b3V0ID8gZm9yTGF5b3V0IDogdGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCk7XG5cblx0XHRjb25zdCBhZGRWaWV3ID0gKHBhZ2U6IENvbnRyb2wgfCB1bmRlZmluZWQpOiB2b2lkID0+IHtcblx0XHRcdGlmIChwYWdlKSB7XG5cdFx0XHRcdGNvbnN0IHZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKHBhZ2UpO1xuXHRcdFx0XHRpZiAodmlldykge1xuXHRcdFx0XHRcdGFsbFZpZXdzLnB1c2godmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c3dpdGNoIChsYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5PbmVDb2x1bW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVHdvQ29sdW1uc01pZEV4cGFuZGVkOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuTWlkQ29sdW1uRnVsbFNjcmVlbjpcblx0XHRcdFx0Ly8gSW4gdGhpcyBjYXNlIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgbWlkIGNvbHVtbiBmdWxsc2NyZWVuIGNvbWVzIGZyb20gYSAyIG9yIGEgMyBjb2x1bW4gbGF5b3V0XG5cdFx0XHRcdHtcblx0XHRcdFx0XHRjb25zdCBsYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4gPVxuXHRcdFx0XHRcdFx0dGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmFjdGlvbkJ1dHRvbnNJbmZvPy5taWRDb2x1bW4/LmV4aXRGdWxsU2NyZWVuID8/IFwiXCI7XG5cdFx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdFx0aWYgKGxheW91dFdoZW5FeGl0RnVsbFNjcmVlbi5zdGFydHNXaXRoKFwiVGhyZWVDb2x1bW5cIikpIHtcblx0XHRcdFx0XHRcdC8vIFdlIGNvbWUgZnJvbSBhIDMgY29sdW1uIGxheW91dFxuXHRcdFx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdExvZy5lcnJvcihgVW5oYW5kbGVkIHN3aXRjaCBjYXNlIGZvciAke3RoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpfWApO1xuXHRcdH1cblx0XHRyZXR1cm4gYWxsVmlld3M7XG5cdH1cblxuXHRhc3luYyBvbkNvbnRhaW5lclJlYWR5KCk6IFByb21pc2U8dm9pZFtdPiB7XG5cdFx0Ly8gUmVzdG9yZSB2aWV3cyBpZiBuZWNjZXNzYXJ5LlxuXHRcdGNvbnN0IGFWaWV3cyA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cygpO1xuXHRcdGNvbnN0IGFSZXN0b3JlUHJvbWlzZXM6IFByb21pc2U8dm9pZD5bXSA9IGFWaWV3cy5yZWR1Y2UoZnVuY3Rpb24gKGFQcm9taXNlczogUHJvbWlzZTx2b2lkPltdLCBvVGFyZ2V0VmlldzogVmlldykge1xuXHRcdFx0aWYgKG9UYXJnZXRWaWV3LmlzQSAmJiBvVGFyZ2V0Vmlldy5pc0EoXCJzYXAudWkuY29yZS5tdmMuVmlld1wiKSkge1xuXHRcdFx0XHRhUHJvbWlzZXMucHVzaChLZWVwQWxpdmVIZWxwZXIucmVzdG9yZVZpZXcob1RhcmdldFZpZXcgYXMgRkVWaWV3KSk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBhUHJvbWlzZXM7XG5cdFx0fSwgW10pO1xuXHRcdHJldHVybiBQcm9taXNlLmFsbChhUmVzdG9yZVByb21pc2VzKTtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdENvbnRleHQoKTogQ29udGV4dCB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0UmlnaHRtb3N0VmlldygpPy5nZXRCaW5kaW5nQ29udGV4dCgpID8/IHVuZGVmaW5lZDtcblx0fVxuXG5cdGdldFJpZ2h0bW9zdFZpZXcoKTogRkVWaWV3IHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QWxsVmlld3MoKS5wb3AoKSBhcyBGRVZpZXc7XG5cdH1cblxuXHRpc0NvbnRleHRVc2VkSW5QYWdlcyhvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5nZXRGY2xDb250cm9sKCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0Y29uc3QgYUFsbFZpc2libGVWaWV3cyA9IHRoaXMuX2dldEFsbFZpZXdzKCk7XG5cdFx0Zm9yIChjb25zdCB2aWV3IG9mIGFBbGxWaXNpYmxlVmlld3MpIHtcblx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdGlmICh2aWV3LmdldEJpbmRpbmdDb250ZXh0KCkgPT09IG9Db250ZXh0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEEgdmlldyBoYXMgYmVlbiBkZXN0cm95ZWQgLS0+IGFwcCBpcyBjdXJyZW50bHkgYmVpbmcgZGVzdHJveWVkXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0YXN5bmMgX3NldFNoZWxsTWVudVRpdGxlKFxuXHRcdG9BcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCxcblx0XHRzVGl0bGU6IHN0cmluZyxcblx0XHRzQXBwVGl0bGU6IHN0cmluZyxcblx0XHRicm93ZXJUaXRsZT86IFRpdGxlQWRkaXRpb25hbEluZm9cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKHRoaXMuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW4gIT09IHRydWUpIHtcblx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNBcHBUaXRsZSwgYnJvd2VyVGl0bGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRhd2FpdCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKS5zZXRUaXRsZShzVGl0bGUsIGJyb3dlclRpdGxlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgaXMgY2FsbGVkIHRvIHJldGlldmUgdGhlIEZDTCBzdGF0ZSBmcm9tIHRoZSBwZXJzb25hbGl6YXRpb24gc2VydmljZS5cblx0ICogQHJldHVybnMgVGhlIEZDTCBzdGF0ZVxuXHQgKi9cblx0YXN5bmMgZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSgpOiBQcm9taXNlPEZDTFN0YXRlPiB7XG5cdFx0Y29uc3Qgc2hlbGxTZXJ2aWNlcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldFNoZWxsU2VydmljZXMoKTtcblx0XHRjb25zdCBlbXB0eUZDTFN0YXRlID0ge1xuXHRcdFx0ZGVmYXVsdExheW91dHM6IHt9LFxuXHRcdFx0Y29sdW1uc0Rpc3RyaWJ1dGlvbjoge1xuXHRcdFx0XHRkZXNrdG9wOiB7fSxcblx0XHRcdFx0dGFibGV0OiB7fVxuXHRcdFx0fVxuXHRcdH07XG5cdFx0cmV0dXJuICgoYXdhaXQgc2hlbGxTZXJ2aWNlcy5nZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGE/LihcIkZDTC1QZXJzb25hbGl6YXRpb25cIikpID8/IGVtcHR5RkNMU3RhdGUpIGFzIEZDTFN0YXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBzZXQgdGhlIEZDTCBzdGF0ZSBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBmY2xTdGF0ZSBUaGUgRkNMIHN0YXRlXG5cdCAqL1xuXHRzZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlOiBGQ0xTdGF0ZSk6IHZvaWQge1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0c2hlbGxTZXJ2aWNlcy5zZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoXCJGQ0wtUGVyc29uYWxpemF0aW9uXCIsIGZjbFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXF1ZXN0cyB0aGUgRkNMIHN0YXRlIGZyb20gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlIGFuZCBzZXRzIHRoZSBtb2RlbCBhY2NvcmRpbmdseS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5mY2xTdGF0ZUNhY2hlID0gdGhpcy5nZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCk7XG5cdFx0Y29uc3QgY29sdW1uc0Rpc3RyaWJ1dGlvbiA9IChhd2FpdCB0aGlzLmZjbFN0YXRlQ2FjaGUpLmNvbHVtbnNEaXN0cmlidXRpb247XG5cdFx0aWYgKGNvbHVtbnNEaXN0cmlidXRpb24pIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG1vZGVsLnNldFByb3BlcnR5KFwiL0ZDTENvbHVtbnNEaXN0cmlidXRpb25cIiwgY29sdW1uc0Rpc3RyaWJ1dGlvbik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGNvbHVtbnMgZGlzdHJpYnV0aW9uIGluIHRoZSBGQ0wgc2V0dGluZ3MgZGlhbG9nLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBGQ0wgc3RhdGUgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25Db2x1bW5zRGlzdHJpYnV0aW9uQ2hhbmdlKFxuXHRcdGV2ZW50OiBFdmVudDx7IG1lZGlhOiBcInRhYmxldFwiIHwgXCJkZXNrdG9wXCI7IGxheW91dDogTGF5b3V0VHlwZVR5cGU7IGNvbHVtbnNTaXplczogc3RyaW5nIH0+XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHsgbWVkaWEsIGxheW91dCwgY29sdW1uc1NpemVzIH0gPSBldmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdG1vZGVsLnNldFByb3BlcnR5KGAvRkNMQ29sdW1uc0Rpc3RyaWJ1dGlvbi8ke21lZGlhfS8ke2xheW91dH1gLCBjb2x1bW5zU2l6ZXMpO1xuXHRcdGNvbnN0IGZjbFN0YXRlID0gYXdhaXQgdGhpcy5mY2xTdGF0ZUNhY2hlO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGZjbFN0YXRlLmRlZmF1bHRMYXlvdXRzW25iQ29sdW1uc0Rpc3BsYXllZF0gPSBsYXlvdXQ7XG5cdFx0XHRmY2xTdGF0ZS5jb2x1bW5zRGlzdHJpYnV0aW9uW21lZGlhXVtsYXlvdXRdID0gY29sdW1uc1NpemVzO1xuXHRcdFx0dGhpcy5zZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlKTtcblx0XHRcdHRoaXMuZmNsU3RhdGVDYWNoZSA9IFByb21pc2UucmVzb2x2ZShmY2xTdGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGRpc3BsYXllZCBpbiB0aGUgRkNMIGJhc2VkIG9uIHRoZSBsYXlvdXQuXG5cdCAqIEBwYXJhbSBsYXlvdXQgIFRoZSBsYXlvdXRcblx0ICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjb2x1bW5zIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXROdW1iZXJPZkNvbHVtbnNGcm9tTGF5b3V0KGxheW91dDogTGF5b3V0VHlwZVR5cGUpOiAxIHwgMiB8IDMgfCBudWxsIHtcblx0XHRjb25zdCBuYkNvbHVtbnNEaXNwbGF5ZWQgPSAvXihPbmV8VHdvfFRocmVlKUNvbHVtbi8uZXhlYyhsYXlvdXQpPy5bMV0gYXMgXCJPbmVcIiB8IFwiVHdvXCIgfCBcIlRocmVlXCI7XG5cdFx0c3dpdGNoIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGNhc2UgXCJPbmVcIjpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRjYXNlIFwiVHdvXCI6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Y2FzZSBcIlRocmVlXCI6XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxheW91dCBzdG9yZWQgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBwcm9wb3NlZCBsYXlvdXQuXG5cdCAqIEBwYXJhbSBwcm9wb3NlZExheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgRkNMIGxheW91dCBzdG9yZWQgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlXG5cdCAqL1xuXHRhc3luYyBnZXRTdG9yZWRMYXlvdXQocHJvcG9zZWRMYXlvdXQ/OiBMYXlvdXRUeXBlVHlwZSk6IFByb21pc2U8TGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBsYXlvdXQgPSBwcm9wb3NlZExheW91dCA/PyAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCkgYXMgTGF5b3V0VHlwZVR5cGUpO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRMYXlvdXRzID0gKGF3YWl0IHRoaXMuZmNsU3RhdGVDYWNoZSkuZGVmYXVsdExheW91dHM7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExheW91dHM/LltuYkNvbHVtbnNEaXNwbGF5ZWRdID8/IGxheW91dDtcblx0XHR9XG5cdFx0cmV0dXJuIGxheW91dDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBGY2xDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBaUNBLE1BQU1BLFVBQVUsR0FBR0MsUUFBUSxDQUFDRCxVQUFVO0VBMEJ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNRSxhQUFhLElBQUFDLElBQUEsR0FEbEJDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBRXpDQyxjQUFjLENBQ2RDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO0lBQ2xCQyxxQkFBcUIsRUFBRSxTQUFBQSxDQUFBLEVBQVk7TUFDbEMsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUNEQywyQkFBMkIsRUFBRSxTQUFBQSxDQUEyQkMsU0FBMEIsRUFBUTtNQUN4RixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQW1CQyxZQUFZLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsVUFBVUMsVUFBZ0IsRUFBRTtRQUNwRyxNQUFNQyxVQUFVLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDSCxVQUFVLENBQUM7UUFDOUNMLFNBQVMsQ0FBQ1MsSUFBSSxDQUFDSCxVQUFVLENBQUM7TUFDM0IsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNESSxrQkFBa0IsRUFBRSxTQUFBQSxDQUEyQkMsY0FBK0IsRUFBUTtNQUNwRixJQUFJLENBQUNWLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQW1CQyxZQUFZLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsVUFBVUMsVUFBZ0IsRUFBRTtRQUNwRyxNQUFNQyxVQUFVLEdBQUdDLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDSCxVQUFVLENBQUM7UUFDOUNNLGNBQWMsQ0FBQ0YsSUFBSSxDQUFDSCxVQUFVLENBQUM7TUFDaEMsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUNETSxTQUFTLEVBQUUsU0FBQUEsQ0FBQSxFQUEyQjtNQUNyQyxNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDWixPQUFPLENBQUMsQ0FBQyxDQUFDQyxhQUFhLENBQUMsQ0FBa0I7TUFDckUsTUFBTVksbUJBQW1CLEdBQUdELGFBQWEsQ0FBQ0Usc0JBQXNCLENBQUMsQ0FBQztNQUNsRSxNQUFNQyxhQUFhLEdBQUdGLG1CQUFtQixDQUFDRyxRQUFRLENBQUMsVUFBVSxDQUFjO01BQzNFLE1BQU1DLEtBQUssR0FBR0YsYUFBYSxDQUFDRyxXQUFXLENBQUMsUUFBUSxDQUFDO01BRWpELEtBQUssTUFBTUMsV0FBVyxJQUFJRixLQUFLLEVBQUU7UUFDaENGLGFBQWEsQ0FBQ0ssV0FBVyxDQUFDLFVBQVVELFdBQVcsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDO01BQzVFO01BQ0FQLGFBQWEsQ0FBQ1MsZ0JBQWdCLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBQ0RDLFNBQVMsRUFBRSxTQUFBQSxDQUFBLEVBQTJCO01BQ3JDLE1BQU1WLGFBQWEsR0FBRyxJQUFJLENBQUNaLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFrQjtNQUNyRSxNQUFNc0IsVUFBVSxHQUFHWCxhQUFhLENBQUNZLGFBQWEsQ0FBQyxDQUFDO01BQ2hELE1BQU1DLGdCQUFnQixHQUFHRixVQUFVLENBQUNHLG1CQUFtQixDQUFDLENBQUM7TUFDekQsTUFBTUMsY0FBYyxHQUFHSixVQUFVLENBQUNLLGlCQUFpQixDQUFDLENBQUM7TUFDckQsTUFBTUMsY0FBYyxHQUFHTixVQUFVLENBQUNPLGlCQUFpQixDQUFDLENBQUM7TUFDckQsTUFBTWIsS0FBSyxHQUFJLEVBQUUsQ0FBZWMsTUFBTSxDQUFDTixnQkFBZ0IsRUFBRUUsY0FBYyxFQUFFRSxjQUFjLENBQUM7TUFFeEZqQixhQUFhLENBQUNvQixpQkFBaUIsQ0FBQ2YsS0FBSyxDQUFDLENBQUNkLE9BQU8sQ0FBRThCLElBQUksSUFBSztRQUN4RCxNQUFNQyxVQUFVLEdBQUdELElBQUksQ0FBQ2hDLGFBQWEsQ0FBQyxDQUErQjtRQUNyRSxJQUFJaUMsVUFBVSxFQUFFQyxTQUFTLEVBQUViLFNBQVMsRUFBRTtVQUNyQ1ksVUFBVSxDQUFDQyxTQUFTLENBQUNiLFNBQVMsQ0FBQyxDQUFDO1FBQ2pDO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7RUFDRCxDQUFDLENBQ0YsQ0FBQyxFQUFBL0IsSUFBQSxDQUFBNkMsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxlQUFBO0lBQUEsU0FBQWhELGNBQUE7TUFBQSxJQUFBaUQsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsZUFBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSxlQUFBUyxXQUFBLEVBQUFULEtBQUE7TUFBQUEsS0FBQSxDQWVPVSxvQkFBb0IsR0FNeEIsQ0FBQyxDQUFDO01BQUFWLEtBQUEsQ0FFRVcseUJBQXlCLEdBQXlDLENBQUMsQ0FBQztNQUFBWCxLQUFBLENBRXBFWSxZQUFZLEdBQXlCLENBQUNDLFNBQVMsRUFBRUEsU0FBUyxFQUFFQSxTQUFTLENBQUM7TUFBQSxPQUFBYixLQUFBO0lBQUE7SUFBQWMsY0FBQSxDQUFBL0QsYUFBQSxFQUFBZ0QsZUFBQTtJQUFBLElBQUFnQixNQUFBLEdBQUFoRSxhQUFBLENBQUFpRSxTQUFBO0lBQUFELE1BQUEsQ0FJOUVFLE1BQU0sR0FBTixTQUFBQSxNQUFNQSxDQUFBLEVBQVM7TUFDZGxCLGVBQUEsQ0FBQWlCLFNBQUEsQ0FBTUMsTUFBTSxDQUFBVixJQUFBO01BQ1osSUFBSSxDQUFDVyxhQUFhLENBQUMsQ0FBQztNQUNwQixJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUFBSixNQUFBLENBRURLLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUNDLEtBQXlELEVBQVE7TUFDbkYsSUFBSUEsS0FBSyxDQUFDQyxZQUFZLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDaEMsTUFBTUMsSUFBSSxHQUFHRixLQUFLLENBQUNDLFlBQVksQ0FBQyxNQUFNLENBQUM7UUFDdkMsTUFBTUUsWUFBWSxHQUFHLElBQUksQ0FBQ0MsbUJBQW1CLENBQUMsQ0FBQyxDQUFDQyxJQUFJLENBQUVoQyxJQUFJLElBQUtBLElBQUksQ0FBQ2lDLGlCQUFpQixDQUFDLENBQUMsRUFBRUMsT0FBTyxDQUFDLENBQUMsS0FBS0wsSUFBSSxDQUFDO1FBQzVHO1FBQ0EsSUFBSUEsSUFBSSxJQUFLQyxZQUFZLEVBQUVHLGlCQUFpQixDQUFDLENBQUMsRUFBY0UsV0FBVyxDQUFDLENBQUMsRUFBRTtVQUN6RUwsWUFBWSxDQUFFOUQsYUFBYSxDQUFDLENBQUMsQ0FBb0JvRSxRQUFRLENBQUNDLGNBQWMsQ0FBQ1YsS0FBSyxDQUFDO1FBQ2pGO01BQ0Q7SUFDRCxDQUFDO0lBQUFOLE1BQUEsQ0FFRGlCLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBUztNQUMzQixJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNDLHdCQUF3QixDQUFDLElBQUksQ0FBQ0Msc0NBQXNDLEVBQUUsSUFBSSxDQUFDO01BQzVGcEMsZUFBQSxDQUFBaUIsU0FBQSxDQUFNZ0IsbUJBQW1CLENBQUF6QixJQUFBO01BQ3pCLElBQUksQ0FBQ1csYUFBYSxDQUFDLENBQUM7TUFFcEIsSUFBSSxDQUFDZSxTQUFTLENBQUMsQ0FBQyxDQUFDQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUNFLG9CQUFvQixFQUFFLElBQUksQ0FBQztNQUMxRSxJQUFJLENBQUNILFNBQVMsQ0FBQyxDQUFDLENBQUNJLGtCQUFrQixDQUFDLElBQUksQ0FBQ0MsY0FBYyxFQUFFLElBQUksQ0FBQztNQUM5RCxJQUFJLENBQUNyRCxhQUFhLENBQUMsQ0FBQyxDQUFDc0QsaUJBQWlCLENBQUMsSUFBSSxDQUFDQyxXQUFXLEVBQUUsSUFBSSxDQUFDO0lBQy9ELENBQUM7SUFBQXpCLE1BQUEsQ0FFREcsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBUztNQUNyQixJQUFJLElBQUksQ0FBQ3VCLGFBQWEsRUFBRTtRQUN2QixPQUFPLENBQUM7TUFDVDtNQUVBLElBQUksQ0FBQ0MsaUJBQWlCLEdBQUcsRUFBRTtNQUMzQixJQUFJLENBQUNDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztNQUUzQixNQUFNQyxhQUFhLEdBQUcsSUFBSSxDQUFDQyxlQUFlLENBQUMsQ0FBQztNQUU1QyxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDRCxlQUFlLENBQUMsQ0FBQyxDQUFDcEUsUUFBUSxDQUFDLENBQUM7TUFDcERxRSxVQUFVLEVBQUVDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDM0Isa0JBQWtCLENBQUM0QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFFM0UsSUFBSSxDQUFDUCxhQUFhLEdBQUdHLGFBQWEsQ0FBQ0ssY0FBYyxDQUFDLENBQUM7O01BRW5EO01BQ0EsSUFBSSxDQUFDQyxXQUFXLEdBQUc7UUFBRUMsZUFBZSxFQUFFO01BQUUsQ0FBQztNQUN6QyxNQUFNQyxjQUFjLEdBQUdSLGFBQWEsQ0FBQ1MsV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQ0MsT0FBTztNQUVyRSxJQUFJRixjQUFjLEVBQUVHLE1BQU0sRUFBRUMsb0JBQW9CLEVBQUU7UUFDakQsTUFBTUMsa0JBQWtCLEdBQUdMLGNBQWMsQ0FBQ0csTUFBTSxDQUFDQyxvQkFBb0I7O1FBRXJFO1FBQ0EsSUFBSUMsa0JBQWtCLENBQUNDLDBCQUEwQixFQUFFO1VBQ2xELElBQUksQ0FBQ1IsV0FBVyxDQUFDUSwwQkFBMEIsR0FBR0Qsa0JBQWtCLENBQUNDLDBCQUEwQjtRQUM1Rjs7UUFFQTtRQUNBLElBQUlELGtCQUFrQixDQUFDRSw0QkFBNEIsRUFBRTtVQUNwRCxJQUFJLENBQUNULFdBQVcsQ0FBQ1MsNEJBQTRCLEdBQUdGLGtCQUFrQixDQUFDRSw0QkFBNEI7UUFDaEc7O1FBRUE7UUFDQSxJQUFJRixrQkFBa0IsQ0FBQ0csb0JBQW9CLEtBQUssSUFBSSxFQUFFO1VBQ3JELElBQUksQ0FBQ1YsV0FBVyxDQUFDQyxlQUFlLEdBQUcsQ0FBQztRQUNyQztNQUNEO01BQ0EsSUFBSUMsY0FBYyxFQUFFRyxNQUFNLEVBQUVNLGtCQUFrQixFQUFFO1FBQy9DLElBQUksQ0FBQ1gsV0FBVyxDQUFDWSx5QkFBeUIsR0FBR1YsY0FBYyxDQUFDRyxNQUFNLENBQUNNLGtCQUFrQjtNQUN0RjtNQUVBLElBQUksQ0FBQ0UsNEJBQTRCLENBQUNuQixhQUFhLENBQUM7TUFDaEQsSUFBSSxDQUFDb0IsNEJBQTRCLENBQUNwQixhQUFhLENBQUM7TUFFaEQsSUFBSSxDQUFDM0QsYUFBYSxDQUFDLENBQUMsQ0FBQ3NELGlCQUFpQixDQUFDLElBQUksQ0FBQzBCLGNBQWMsRUFBRSxJQUFJLENBQUM7TUFDakUsSUFBSSxDQUFDaEYsYUFBYSxDQUFDLENBQUMsQ0FBQ2lGLDRCQUE0QixDQUFDLElBQUksQ0FBQ0QsY0FBYyxFQUFFLElBQUksQ0FBQztJQUM3RSxDQUFDO0lBQUFsRCxNQUFBLENBRUQ5QixhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUF5QjtNQUNyQyxPQUFPLElBQUksQ0FBQ1Ysc0JBQXNCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUF3QyxNQUFBLENBRURvRCxZQUFZLEdBQVosU0FBQUEsWUFBWUEsQ0FBQSxFQUFjO01BQ3pCLE9BQU8sSUFBSSxDQUFDakIsV0FBVztJQUN4QixDQUFDO0lBQUFuQyxNQUFBLENBRUR5QixXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQzRCLE1BQTZDLEVBQVE7TUFDaEUsSUFBSSxDQUFDQyxlQUFlLEdBQUdELE1BQU0sQ0FBQ0UsYUFBYSxDQUFDLENBQUMsQ0FBQ0MsTUFBTTtJQUNyRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXhELE1BQUEsQ0FNQW9CLHNDQUFzQyxHQUF0QyxTQUFBQSxzQ0FBc0NBLENBQUEsRUFBUztNQUM5QyxNQUFNcUMsaUNBQWlDLEdBQUcsSUFBSSxDQUFDL0MsbUJBQW1CLENBQUMsSUFBSSxDQUFDNEMsZUFBZSxDQUFDO01BQ3hGLE1BQU1JLCtCQUErQixHQUFHRCxpQ0FBaUMsQ0FBQ3JFLE1BQU0sR0FDN0VxRSxpQ0FBaUMsQ0FBQ0EsaUNBQWlDLENBQUNyRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQy9FVSxTQUFTO01BRVosSUFBSSxDQUFDb0IsU0FBUyxDQUFDLENBQUMsQ0FBQ3lDLGVBQWUsQ0FBQyxjQUFjLEVBQUdyRCxLQUFrQyxJQUFLO1FBQ3hGLE1BQU1zRCxLQUFLLEdBQUd0RCxLQUFLLENBQUNDLFlBQVksQ0FBQyxPQUFPLENBQUM7UUFDekMsTUFBTXNELG9CQUFvQixHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUNGLEtBQUssQ0FBQ0EsS0FBSyxDQUFDeEUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRS9FLElBQUlzRSwrQkFBK0IsSUFBSUcsb0JBQW9CLEVBQUU7VUFDNUQsTUFBTUUsZUFBZSxHQUFJTCwrQkFBK0IsQ0FBQ00sV0FBVyxDQUFDLENBQUMsRUFBNkJDLFNBQVM7VUFDNUcsTUFBTUMsY0FBYyxHQUFJTCxvQkFBb0IsQ0FBQ0csV0FBVyxDQUFDLENBQUMsRUFBNkJDLFNBQVM7O1VBRWhHO1VBQ0EsSUFBSUMsY0FBYyxLQUFLLElBQUksQ0FBQy9CLFdBQVcsQ0FBQ0MsZUFBZSxFQUFFO1lBQ3hELElBQUksQ0FBQytCLG9DQUFvQyxHQUFHTixvQkFBb0I7VUFDakU7VUFDQTtVQUNBLElBQ0NFLGVBQWUsS0FBS2pFLFNBQVMsSUFDN0JvRSxjQUFjLEtBQUtwRSxTQUFTLElBQzVCaUUsZUFBZSxHQUFHLElBQUksQ0FBQzVCLFdBQVcsQ0FBQ0MsZUFBZSxJQUNsRDJCLGVBQWUsR0FBR0csY0FBYyxJQUNoQ0wsb0JBQW9CLEtBQUtILCtCQUErQixFQUN2RDtZQUNELElBQUksQ0FBQ1Msb0NBQW9DLEdBQUdULCtCQUErQjtVQUM1RTtRQUNEO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBMUQsTUFBQSxDQUVEb0Usa0NBQWtDLEdBQWxDLFNBQUFBLGtDQUFrQ0EsQ0FBQSxFQUFxQjtNQUN0RCxPQUFPLElBQUksQ0FBQ0Qsb0NBQW9DO0lBQ2pELENBQUM7SUFBQW5FLE1BQUEsQ0FFRHFFLE1BQU0sR0FBTixTQUFBQSxNQUFNQSxDQUFBLEVBQVM7TUFDZCxJQUFJLENBQUNuRCxTQUFTLENBQUMsQ0FBQyxDQUFDb0Qsa0JBQWtCLENBQUMsSUFBSSxDQUFDL0MsY0FBYyxFQUFFLElBQUksQ0FBQztNQUM5RCxJQUFJLENBQUNMLFNBQVMsQ0FBQyxDQUFDLENBQUNxRCx3QkFBd0IsQ0FBQyxJQUFJLENBQUNsRCxvQkFBb0IsRUFBRSxJQUFJLENBQUM7TUFDMUUsSUFBSSxDQUFDbkQsYUFBYSxDQUFDLENBQUMsQ0FBQ3NHLGlCQUFpQixDQUFDLElBQUksQ0FBQ3RCLGNBQWMsRUFBRSxJQUFJLENBQUM7TUFDakUsSUFBSSxDQUFDaEYsYUFBYSxDQUFDLENBQUMsQ0FBQ3VHLDRCQUE0QixDQUFDLElBQUksQ0FBQ3ZCLGNBQWMsRUFBRSxJQUFJLENBQUM7TUFFNUV3QixjQUFjLENBQUN6RSxTQUFTLENBQUNvRSxNQUFNLENBQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM3Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWpDLE1BQUEsQ0FLQTJFLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFBLEVBQTBCO01BQ3JDLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQTNFLE1BQUEsQ0FPTTRFLGdCQUFnQixHQUF0QixlQUFNQSxnQkFBZ0JBLENBQUNDLFlBQW9CLEVBQUVDLFVBQXVDLEVBQWtDO01BQUEsSUFBaENDLFFBQVEsR0FBQTVGLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFXLFNBQUEsR0FBQVgsU0FBQSxNQUFHLENBQUM7TUFDakcsT0FBTyxJQUFJbkMsT0FBTyxDQUFVLE9BQU9DLE9BQU8sRUFBRStILE1BQU0sS0FBSztRQUN0RCxJQUFJO1VBQ0gsTUFBTS9HLFVBQVUsR0FBRyxJQUFJLENBQUNDLGFBQWEsQ0FBQyxDQUFDOztVQUV2QztVQUNBLE1BQU0rRyxnQkFBZ0IsR0FBR0gsVUFBbUM7VUFDNUQsSUFBSUcsZ0JBQWdCLENBQUNDLFFBQVEsS0FBS3BGLFNBQVMsSUFBSWlGLFFBQVEsS0FBSyxDQUFDLEVBQUU7WUFDOURBLFFBQVEsR0FBR0UsZ0JBQWdCLENBQUNDLFFBQVE7VUFDckM7VUFFQSxJQUFJLElBQUksQ0FBQy9DLFdBQVcsSUFBSTRDLFFBQVEsSUFBSSxJQUFJLENBQUM1QyxXQUFXLENBQUNDLGVBQWUsRUFBRTtZQUNyRTJDLFFBQVEsR0FBRyxJQUFJLENBQUM1QyxXQUFXLENBQUNDLGVBQWUsR0FBRyxDQUFDO1VBQ2hEO1VBQ0EsSUFBSTJDLFFBQVEsR0FBRyxDQUFDLElBQUlBLFFBQVEsR0FBRyxDQUFDLEVBQUU7WUFDakNBLFFBQVEsR0FBRyxDQUFDO1VBQ2I7VUFFQSxJQUFJSSxXQUFXLEdBQUcsSUFBSSxDQUFDdEYsWUFBWSxDQUFDa0YsUUFBUSxDQUFDO1VBRTdDLElBQUksQ0FBQ0ksV0FBVyxFQUFFO1lBQ2pCQSxXQUFXLEdBQUcsSUFBSUMsSUFBSSxDQUFDO2NBQ3RCQyxVQUFVLEVBQUU7WUFDYixDQUFDLENBQUM7WUFFRixJQUFJLENBQUN4RixZQUFZLENBQUNrRixRQUFRLENBQUMsR0FBR0ksV0FBVztZQUV6QyxRQUFRSixRQUFRO2NBQ2YsS0FBSyxDQUFDO2dCQUNMOUcsVUFBVSxDQUFDcUgsa0JBQWtCLENBQUNILFdBQVcsQ0FBQztnQkFDMUM7Y0FFRCxLQUFLLENBQUM7Z0JBQ0xsSCxVQUFVLENBQUNzSCxnQkFBZ0IsQ0FBQ0osV0FBVyxDQUFDO2dCQUN4QztjQUVEO2dCQUNDbEgsVUFBVSxDQUFDdUgsZ0JBQWdCLENBQUNMLFdBQVcsQ0FBQztZQUMxQztVQUNEO1VBRUEsSUFBSU0sUUFBaUI7VUFDckIsTUFBTUMsTUFBTSxHQUFHLElBQUlDLE9BQU8sQ0FBQztZQUMxQkMsVUFBVSxFQUFFLE9BQU87WUFDbkJDLGNBQWMsRUFBRSxLQUFLO1lBQ3JCQyxLQUFLLEVBQUUsQ0FDTixJQUFJQyxNQUFNLENBQUM7Y0FDVkMsSUFBSSxFQUFFLGFBQWE7Y0FDbkJDLElBQUksRUFBRSxvQkFBb0I7Y0FDMUJDLE9BQU8sRUFBRSxvQ0FBb0M7Y0FDN0NDLEtBQUssRUFBRUEsQ0FBQSxLQUFZO2dCQUNsQixJQUFJckIsVUFBVSxDQUFDc0IsZUFBZSxLQUFLLElBQUksRUFBRTtrQkFDeENuSSxVQUFVLENBQUNvSSxFQUFFLENBQUNaLFFBQVEsQ0FBQ2EsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsQ0FBQyxNQUFNO2tCQUNOQyxNQUFNLENBQUNDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLENBQUM7Z0JBQ3RCO2NBQ0Q7WUFDRCxDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1VBRXpDLENBQUMsQ0FBQztVQUNGLE1BQU1DLGtCQUFrQixHQUFHLElBQUlDLGtCQUFrQixDQUFDO1lBQ2pEQyxLQUFLLEVBQUVoQyxZQUFZO1lBQ25CaUMsV0FBVyxFQUFFaEMsVUFBVSxDQUFDZ0MsV0FBVyxJQUFJLEVBQUU7WUFDekNDLGdCQUFnQixFQUFFakMsVUFBVSxDQUFDa0MsU0FBUyxHQUFHLFlBQVlsQyxVQUFVLENBQUNrQyxTQUFTLEVBQUUsR0FBRztVQUMvRSxDQUFDLENBQUM7VUFDRjdCLFdBQVcsQ0FBQzhCLGdCQUFnQixDQUFDLENBQUM7VUFDOUI5QixXQUFXLENBQUMrQixVQUFVLENBQUN4QixNQUFNLENBQUM7VUFDOUJQLFdBQVcsQ0FBQytCLFVBQVUsQ0FBQ1Asa0JBQWtCLENBQUM7VUFFMUMsSUFBSVEsc0JBQThCO1VBQ2xDLFFBQVFwQyxRQUFRO1lBQ2YsS0FBSyxDQUFDO2NBQ0xVLFFBQVEsR0FBR3hILFVBQVUsQ0FBQ21KLHlCQUF5QixDQUFDLENBQUM7Y0FDakRELHNCQUFzQixHQUFHLDBCQUEwQjtjQUNuRDtZQUVELEtBQUssQ0FBQztjQUNMMUIsUUFBUSxHQUFHeEgsVUFBVSxDQUFDb0osdUJBQXVCLENBQUMsQ0FBQztjQUMvQ0Ysc0JBQXNCLEdBQUcsd0JBQXdCO2NBQ2pEO1lBRUQ7Y0FDQzFCLFFBQVEsR0FBR3hILFVBQVUsQ0FBQ3FKLHVCQUF1QixDQUFDLENBQUM7Y0FDL0NILHNCQUFzQixHQUFHLHdCQUF3QjtVQUNuRDtVQUVBLElBQUlyQyxVQUFVLENBQUNzQixlQUFlLEtBQUssSUFBSSxFQUFFO1lBQ3hDLE1BQU12RSxhQUFhLEdBQUcwRixXQUFXLENBQUN6RixlQUFlLENBQUMyRCxRQUFRLENBQUM7WUFDM0QsTUFBTTVELGFBQWEsQ0FBQzJGLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsa0JBQWtCO2NBQzFFeEosVUFBVSxDQUFDb0ksRUFBRSxDQUFDWixRQUFRLENBQUNhLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7Y0FDdkMsTUFBTXpFLGFBQWEsQ0FBQzJGLGdCQUFnQixDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztZQUMzRCxDQUFDLENBQUM7VUFDSDtVQUVBLE1BQU1DLFFBQVEsR0FBRyxJQUFJLENBQUM1RCxvQkFBb0IsQ0FBQzJCLFFBQVEsQ0FBQztVQUNwRHhILFVBQVUsQ0FBQzBGLGVBQWUsQ0FBQ3dELHNCQUFzQixFQUFHUSxNQUFnQyxJQUFLO1lBQ3hGLElBQUlELFFBQVEsSUFBSUEsUUFBUSxDQUFDRSxHQUFHLENBQU8sc0JBQXNCLENBQUMsRUFBRTtjQUMxREYsUUFBUSxDQUFDL0ssYUFBYSxDQUFDLENBQUMsQ0FBb0JrTCxTQUFTLEVBQUVDLGNBQWMsQ0FBQyxDQUFDO1lBQ3pFO1lBQ0E3SyxPQUFPLENBQUMsSUFBSSxDQUFDO1VBQ2QsQ0FBQyxDQUFDO1VBRUZnQixVQUFVLENBQUNvSSxFQUFFLENBQUNsQixXQUFXLENBQUNtQixLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNDLENBQUMsQ0FBQyxPQUFPeUIsQ0FBQyxFQUFFO1VBQ1gvQyxNQUFNLENBQUMsS0FBSyxDQUFDO1VBQ2JnRCxHQUFHLENBQUNDLElBQUksQ0FBQyxHQUFHRixDQUFDLEVBQUUsQ0FBQztRQUNqQjtNQUNELENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQS9ILE1BQUEsQ0FJQWdELDRCQUE0QixHQUE1QixTQUFBQSw0QkFBNEJBLENBQUNuQixhQUEyQixFQUFRO01BQy9ELE1BQU1xRyxTQUFTLEdBQUdyRyxhQUFhLENBQUNTLFdBQVcsQ0FBQyxDQUFDO1FBQzVDNkYsUUFBUSxHQUFHRCxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMzRixPQUFPLEdBQUcyRixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMzRixPQUFPLENBQUM2RixPQUFPLEdBQUcsSUFBSTtNQUV0RixJQUFJLENBQUN6SSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7TUFFOUIsSUFBSXdJLFFBQVEsRUFBRTtRQUNiRSxNQUFNLENBQUNDLElBQUksQ0FBQ0gsUUFBUSxDQUFDLENBQUN0TCxPQUFPLENBQUUwTCxXQUFtQixJQUFLO1VBQ3RELE1BQU1DLE9BQU8sR0FBR0wsUUFBUSxDQUFDSSxXQUFXLENBQUM7VUFDckMsSUFBSUMsT0FBTyxDQUFDMUYsa0JBQWtCLEVBQUU7WUFDL0IsSUFBSSxDQUFDbkQsb0JBQW9CLENBQUM0SSxXQUFXLENBQUMsR0FBRztjQUN4Q0UsV0FBVyxFQUFFRCxPQUFPLENBQUMxRixrQkFBa0I7Y0FDdkM0RixPQUFPLEVBQUVGLE9BQU8sQ0FBQ0c7WUFDbEIsQ0FBQztVQUNGLENBQUMsTUFBTTtZQUNOLElBQUksQ0FBQ2hKLG9CQUFvQixDQUFDNEksV0FBVyxDQUFDLEdBQUc7Y0FDeENFLFdBQVcsRUFBRSxNQUFNO2NBQ25CQyxPQUFPLEVBQUU7WUFDVixDQUFDO1VBQ0Y7UUFDRCxDQUFDLENBQUM7TUFDSDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTFJLE1BQUEsQ0FLQWlELDRCQUE0QixHQUE1QixTQUFBQSw0QkFBNEJBLENBQUNwQixhQUEyQixFQUFRO01BQy9ELE1BQU1xRyxTQUFTLEdBQUdyRyxhQUFhLENBQUNTLFdBQVcsQ0FBQyxDQUFDO1FBQzVDc0csT0FBTyxHQUFHVixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMzRixPQUFPLEdBQUcyRixTQUFTLENBQUMsU0FBUyxDQUFDLENBQUMzRixPQUFPLENBQUNzRyxNQUFNLEdBQUcsSUFBSTtNQUVwRixJQUFJLENBQUNqSix5QkFBeUIsR0FBRyxDQUFDLENBQUM7TUFFbkMsSUFBSWdKLE9BQU8sRUFBRTtRQUNaQSxPQUFPLENBQUMvTCxPQUFPLENBQUVpTSxLQUFLLElBQUs7VUFDMUIsSUFBSUEsS0FBSyxDQUFDSixPQUFPLEVBQUU7WUFDbEIsSUFBSSxDQUFDOUkseUJBQXlCLENBQUNrSixLQUFLLENBQUNKLE9BQU8sQ0FBQyxHQUFHSSxLQUFLLENBQUNDLE1BQWtCO1VBQ3pFO1FBQ0QsQ0FBQyxDQUFDO01BQ0g7SUFDRCxDQUFDO0lBQUEvSSxNQUFBLENBRURnSixrQkFBa0IsR0FBbEIsU0FBQUEsa0JBQWtCQSxDQUFBLEVBQVk7TUFDN0IsT0FBTyxJQUFJLENBQUNwSCxpQkFBaUI7SUFDOUIsQ0FBQztJQUFBNUIsTUFBQSxDQUVEaUosbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQSxFQUF1QjtNQUN6QyxPQUFPLElBQUksQ0FBQ3RILGlCQUFpQjtJQUM5Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUEzQixNQUFBLENBSUFrSixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBTWxCO01BQ0QsT0FBTyxJQUFJLENBQUN2SixvQkFBb0I7SUFDakM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBSyxNQUFBLENBSUF1QixjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQzhCLE1BQWdDLEVBQVE7TUFDdEQsTUFBTThGLFVBQVUsR0FBRzlGLE1BQU0sQ0FBQzlDLFlBQVksQ0FBQyxNQUFNLENBQUM7O01BRTlDO01BQ0EsSUFBSSxDQUFDb0IsaUJBQWlCLEdBQUd3SCxVQUFVO01BQ25DLElBQUksQ0FBQ3ZILGlCQUFpQixHQUFHeUIsTUFBTSxDQUFDOUMsWUFBWSxDQUFDLFdBQVcsQ0FBQztJQUMxRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFQLE1BQUEsQ0FLQW9KLGlDQUFpQyxHQUFqQyxTQUFBQSxpQ0FBaUNBLENBQUEsRUFBUztNQUN6QyxNQUFNQyxNQUFNLEdBQUcsSUFBSSxDQUFDM0ksbUJBQW1CLENBQUMsQ0FBQztNQUN6QztNQUNBLElBQ0MySSxNQUFNLENBQUNqSyxNQUFNLEdBQUcsQ0FBQyxJQUNoQmlLLE1BQU0sQ0FBQ2pLLE1BQU0sSUFBS2lLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQ3JGLFdBQVcsQ0FBQyxDQUFDLENBQTJCQyxTQUFTLEdBQUcsSUFBSSxDQUFDOUIsV0FBVyxDQUFDQyxlQUFnQixFQUNqSDtRQUNELE1BQU1rSCxlQUFlLEdBQUcsSUFBSSxDQUFDbEYsa0NBQWtDLENBQUMsQ0FBQztRQUNqRSxJQUFJa0YsZUFBZSxJQUFJLENBQUNELE1BQU0sQ0FBQ0UsUUFBUSxDQUFDRCxlQUFlLENBQUMsRUFBRTtVQUN6REQsTUFBTSxDQUFDbk0sSUFBSSxDQUFDb00sZUFBZSxDQUFDO1FBQzdCO1FBQ0EsS0FBSyxJQUFJRSxLQUFLLEdBQUdILE1BQU0sQ0FBQ2pLLE1BQU0sR0FBRyxDQUFDLEVBQUVvSyxLQUFLLEdBQUcsQ0FBQyxFQUFFQSxLQUFLLEVBQUUsRUFBRTtVQUN2RCxNQUFNQyxLQUFLLEdBQUdKLE1BQU0sQ0FBQ0csS0FBSyxDQUFDO1lBQzFCRSxhQUFhLEdBQUdMLE1BQU0sQ0FBQ0csS0FBSyxHQUFHLENBQUMsQ0FBQztVQUNsQyxNQUFNRyxjQUFjLEdBQUdGLEtBQUssQ0FBQzdJLGlCQUFpQixDQUFDLENBQUM7VUFDaEQsTUFBTWdKLHNCQUFzQixHQUFHRixhQUFhLENBQUMvTSxhQUFhLENBQUMsQ0FBc0M7VUFDakcsSUFBSWdOLGNBQWMsSUFBSUMsc0JBQXNCLENBQUNDLGtCQUFrQixFQUFFO1lBQ2hFRCxzQkFBc0IsQ0FBQ0Msa0JBQWtCLENBQUNGLGNBQWMsQ0FBQzlJLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDcEU7UUFDRDtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBYixNQUFBLENBSUFrRCxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQ0csTUFBZ0csRUFBUTtNQUN0SCxNQUFNeUcsa0JBQWtCLEdBQUl6RyxNQUFNLENBQTJDOUMsWUFBWSxDQUFDLG1CQUFtQixDQUFDO01BQzlHLElBQUksSUFBSSxDQUFDcUIsaUJBQWlCLEtBQUs5QixTQUFTLEVBQUU7UUFDekMsSUFBSSxDQUFDLElBQUksQ0FBQzhCLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxFQUFFO1VBQ3RDLElBQUksQ0FBQ0EsaUJBQWlCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3RDO1FBQ0EsSUFBSSxDQUFDQSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQzRCLE1BQU0sR0FBSUgsTUFBTSxDQUEyQzlDLFlBQVksQ0FBQyxRQUFRLENBQUM7TUFDbkg7TUFDQSxJQUFJLENBQUN3SixxQ0FBcUMsQ0FBQzFHLE1BQU0sQ0FBQzs7TUFFbEQ7TUFDQSxJQUFJeUcsa0JBQWtCLElBQUksSUFBSSxDQUFDbkksaUJBQWlCLEVBQUU7UUFDakQsSUFBSSxDQUFDRCxhQUFhLENBQUNzSSxLQUFLLENBQUMsSUFBSSxDQUFDckksaUJBQWlCLEVBQUUsSUFBSSxDQUFDQyxpQkFBaUIsQ0FBQztNQUN6RTtNQUVBLE1BQU02SCxLQUFLLEdBQUcsSUFBSSxDQUFDUSxnQkFBZ0IsQ0FBQyxDQUFDO01BQ3JDLElBQUlSLEtBQUssRUFBRTtRQUNWLElBQUksQ0FBQ1MscUJBQXFCLENBQUNULEtBQUssQ0FBQztNQUNsQztJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXpKLE1BQUEsQ0FJQStKLHFDQUFxQyxHQUFyQyxTQUFBQSxxQ0FBcUNBLENBQUMxRyxNQUFvRixFQUFRO01BQ2pJO01BQ0EsTUFBTThHLElBQUksR0FBRzlHLE1BQU0sQ0FBQytHLFNBQVMsQ0FBQyxDQUFDO01BQy9CLElBQUlDLE1BQWlCLEdBQUcsRUFBRTtNQUMxQkEsTUFBTSxHQUFHQSxNQUFNLENBQUM1TCxNQUFNLENBQUMwTCxJQUFJLENBQUMvTCxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ0ssTUFBTSxDQUFDMEwsSUFBSSxDQUFDN0wsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUNHLE1BQU0sQ0FBQzBMLElBQUksQ0FBQzNMLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUNwSDZMLE1BQU0sQ0FBQ3hOLE9BQU8sQ0FBRXlOLEtBQUssSUFBSztRQUN6QixNQUFNYixLQUFLLEdBQUcsSUFBSSxDQUFDM0Ysb0JBQW9CLENBQUN3RyxLQUFLLENBQUM7UUFDOUMsTUFBTUMsWUFBWSxHQUFHZCxLQUFLLEVBQUVlLElBQUksSUFBSWYsS0FBSyxDQUFDZSxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQzdELElBQUlELFlBQVksRUFBRTtVQUNqQkEsWUFBWSxDQUFDRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3RDO01BQ0QsQ0FBQyxDQUFDO0lBQ0g7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXpLLE1BQUEsQ0FNQTBLLDRCQUE0QixHQUE1QixTQUFBQSw0QkFBNEJBLENBQUNDLFVBQWtCLEVBQUVDLE9BQWUsRUFBVztNQUMxRSxJQUFJQyxjQUFjO01BQ2xCLFFBQVFELE9BQU87UUFDZCxLQUFLLFdBQVc7VUFDZkMsY0FBYyxHQUFHRixVQUFVLEtBQUssYUFBYTtVQUM3QztRQUNELEtBQUsscUJBQXFCO1FBQzFCLEtBQUssb0NBQW9DO1FBQ3pDLEtBQUssa0NBQWtDO1FBQ3ZDLEtBQUsseUJBQXlCO1FBQzlCLEtBQUssdUJBQXVCO1VBQzNCRSxjQUFjLEdBQUdGLFVBQVUsS0FBSyxXQUFXO1VBQzNDO1FBQ0QsS0FBSyxxQkFBcUI7UUFDMUIsS0FBSyx5QkFBeUI7UUFDOUIsS0FBSyx5QkFBeUI7VUFDN0JFLGNBQWMsR0FBR0YsVUFBVSxLQUFLLFdBQVc7VUFDM0M7UUFDRDtVQUNDRSxjQUFjLEdBQUcsS0FBSztNQUN4QjtNQUNBLE9BQU9BLGNBQWM7SUFDdEIsQ0FBQztJQUFBN0ssTUFBQSxDQUVEOEssMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQ0gsVUFBa0IsRUFBRUMsT0FBZSxFQUFXO01BQ3hFLE1BQU1HLFdBQVcsR0FBSSxJQUFJLENBQUNqSixlQUFlLENBQUMsQ0FBQyxFQUFFa0osMEJBQTBCLENBQUMsQ0FBQyxFQUFFQyxlQUFlLENBQUMsQ0FBQyxFQUFFQyxXQUFXLEVBQWtCQyxPQUFPO01BQ2xJLElBQUlDLGtCQUFrQixHQUFHLElBQUk7TUFDN0IsUUFBUVQsVUFBVTtRQUNqQixLQUFLLFdBQVc7VUFDZixRQUFRQyxPQUFPO1lBQ2QsS0FBSyx1QkFBdUI7WUFDNUIsS0FBSyxrQ0FBa0M7WUFDdkMsS0FBSyxvQ0FBb0M7WUFDekMsS0FBSyx5QkFBeUI7Y0FDN0IsSUFBSSxDQUFDRyxXQUFXLEVBQUU7Z0JBQ2pCSyxrQkFBa0IsR0FBRyxLQUFLO2NBQzNCO2NBQ0E7WUFDRCxLQUFLLHlCQUF5QjtZQUM5QixLQUFLLHlCQUF5QjtjQUM3QkEsa0JBQWtCLEdBQUcsS0FBSztjQUMxQjtVQUNGO1VBQ0E7UUFDRCxLQUFLLFdBQVc7VUFDZixRQUFRUixPQUFPO1lBQ2QsS0FBSyx5QkFBeUI7WUFDOUIsS0FBSyx5QkFBeUI7Y0FDN0IsSUFBSSxDQUFDRyxXQUFXLEVBQUU7Z0JBQ2pCSyxrQkFBa0IsR0FBRyxLQUFLO2NBQzNCO2NBQ0E7VUFDRjtVQUNBO01BQ0Y7TUFDQSxPQUFPQSxrQkFBa0I7SUFDMUIsQ0FBQztJQUFBcEwsTUFBQSxDQUVEcUwsbUNBQW1DLEdBQW5DLFNBQUFBLG1DQUFtQ0EsQ0FBQ1YsVUFBa0IsRUFBRUMsT0FBZSxFQUFXO01BQ2pGLE1BQU1HLFdBQVcsR0FBSSxJQUFJLENBQUNqSixlQUFlLENBQUMsQ0FBQyxFQUFFa0osMEJBQTBCLENBQUMsQ0FBQyxFQUFFQyxlQUFlLENBQUMsQ0FBQyxFQUFFQyxXQUFXLEVBQWtCQyxPQUFPO01BQ2xJLElBQUlHLDJCQUEyQixHQUFHLElBQUk7TUFDdEMsUUFBUVgsVUFBVTtRQUNqQixLQUFLLFdBQVc7VUFDZixRQUFRQyxPQUFPO1lBQ2QsS0FBSyx5QkFBeUI7WUFDOUIsS0FBSyx5QkFBeUI7Y0FDN0IsSUFBSUcsV0FBVyxFQUFFO2dCQUNoQk8sMkJBQTJCLEdBQUcsS0FBSztjQUNwQztjQUNBO1VBQ0Y7VUFDQTtNQUNGO01BQ0EsT0FBT0EsMkJBQTJCO0lBQ25DLENBQUM7SUFBQXRMLE1BQUEsQ0FFRHVMLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUM5QixLQUFhLEVBQUV2RSxRQUFnQixFQUFRO01BQzNELE1BQU1zRyxRQUFRLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3BEQyxXQUFXLEdBQUcsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQztRQUN2RGYsT0FBTyxHQUFHLElBQUksQ0FBQzFNLGFBQWEsQ0FBQyxDQUFDLENBQUMwTixTQUFTLENBQUMsQ0FBQztNQUMzQyxJQUFJakIsVUFBVTtNQUVkLElBQUksQ0FBQ2xCLEtBQUssQ0FBQy9MLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNqQytMLEtBQUssQ0FBQ29DLFFBQVEsQ0FBQyxJQUFJLENBQUNDLGtCQUFrQixDQUFDLENBQUMsRUFBRSxXQUFXLENBQUM7TUFDdkQ7TUFDQSxJQUFJLENBQUNOLFFBQVEsQ0FBQ08saUJBQWlCLEVBQUU7UUFDaENQLFFBQVEsQ0FBQ08saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO01BQ2hDO01BQ0EsSUFBSSxDQUFDUCxRQUFRLENBQUNPLGlCQUFpQixDQUFDQyxTQUFTLEVBQUU7UUFDMUNSLFFBQVEsQ0FBQ08saUJBQWlCLENBQUNDLFNBQVMsR0FBRyxDQUFDLENBQUM7TUFDMUM7TUFDQSxJQUFJLENBQUNSLFFBQVEsQ0FBQ08saUJBQWlCLENBQUNFLFNBQVMsRUFBRTtRQUMxQ1QsUUFBUSxDQUFDTyxpQkFBaUIsQ0FBQ0UsU0FBUyxHQUFHLENBQUMsQ0FBQztNQUMxQztNQUNBLElBQUkvRyxRQUFRLElBQUksSUFBSSxDQUFDL0MsV0FBVyxDQUFDQyxlQUFlLEVBQUU7UUFDakQ7UUFDQXVJLFVBQVUsR0FBR2dCLFdBQVcsQ0FBQyxJQUFJLENBQUN4SixXQUFXLENBQUNDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFFOURvSixRQUFRLENBQUNPLGlCQUFpQixDQUFDQyxTQUFTLENBQUNFLFVBQVUsR0FBRyxJQUFJO1FBQ3REVixRQUFRLENBQUNPLGlCQUFpQixDQUFDQyxTQUFTLENBQUNHLGNBQWMsR0FBRyxJQUFJO1FBQzFEWCxRQUFRLENBQUNPLGlCQUFpQixDQUFDQyxTQUFTLENBQUNJLFdBQVcsR0FBRyxJQUFJO1FBQ3ZEWixRQUFRLENBQUNPLGlCQUFpQixDQUFDRSxTQUFTLENBQUNFLGNBQWMsR0FBRyxJQUFJO1FBQzFEWCxRQUFRLENBQUNPLGlCQUFpQixDQUFDRSxTQUFTLENBQUNDLFVBQVUsR0FBRyxJQUFJO1FBQ3REVixRQUFRLENBQUNPLGlCQUFpQixDQUFDRSxTQUFTLENBQUNHLFdBQVcsR0FBRyxJQUFJO01BQ3hELENBQUMsTUFBTTtRQUNOekIsVUFBVSxHQUFHZ0IsV0FBVyxDQUFDekcsUUFBUSxDQUFDO01BQ25DO01BRUEsSUFDQ0EsUUFBUSxJQUFJLElBQUksQ0FBQy9DLFdBQVcsQ0FBQ0MsZUFBZSxJQUM1Q3dJLE9BQU8sS0FBSyxxQkFBcUIsSUFDakNBLE9BQU8sS0FBSyxxQkFBcUIsSUFDakNBLE9BQU8sS0FBSyxXQUFXLEVBQ3RCO1FBQ0RuQixLQUFLLENBQUMvTCxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxJQUFJLENBQUM7TUFDdEUsQ0FBQyxNQUFNO1FBQ04yTCxLQUFLLENBQUMvTCxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxzQkFBc0IsRUFBRSxLQUFLLENBQUM7TUFDdkU7TUFDQTtNQUNBO01BQ0MwTixRQUFRLENBQUNPLGlCQUFpQixDQUE4Qk0sV0FBVyxHQUFHO1FBQ3RFSCxVQUFVLEVBQUUsSUFBSTtRQUNoQkMsY0FBYyxFQUFFLElBQUk7UUFDcEJDLFdBQVcsRUFBRTtNQUNkLENBQUM7TUFFRCxNQUFNRSxrQkFLTCxHQUFHakUsTUFBTSxDQUFDa0UsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFZixRQUFRLENBQUNPLGlCQUFpQixDQUFDcEIsVUFBVSxDQUFtQyxDQUFDO01BQy9GMkIsa0JBQWtCLENBQUNFLGFBQWEsR0FBR0Ysa0JBQWtCLENBQUNKLFVBQVUsS0FBSyxJQUFJLElBQUlJLGtCQUFrQixDQUFDSCxjQUFjLEtBQUssSUFBSTtNQUN2SEcsa0JBQWtCLENBQUNHLFVBQVUsR0FBR0gsa0JBQWtCLENBQUNKLFVBQVUsS0FBSyxJQUFJLEdBQUcsd0JBQXdCLEdBQUcsNkJBQTZCO01BQ2pJSSxrQkFBa0IsQ0FBQ0ksWUFBWSxHQUFHSixrQkFBa0IsQ0FBQ0osVUFBVSxLQUFLLElBQUk7TUFDeEVJLGtCQUFrQixDQUFDSyxZQUFZLEdBQUdMLGtCQUFrQixDQUFDRixXQUFXLEtBQUssSUFBSTtNQUV6RTNDLEtBQUssQ0FBQy9MLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLG9CQUFvQixFQUFFd08sa0JBQWtCLENBQUM7TUFFakY3QyxLQUFLLENBQUMvTCxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUNJLFdBQVcsQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUNnTiwwQkFBMEIsQ0FBQ0gsVUFBVSxFQUFFQyxPQUFPLENBQUMsQ0FBQztNQUVoSG5CLEtBQUssQ0FBQy9MLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQ0ksV0FBVyxDQUFDLDBCQUEwQixFQUFFLElBQUksQ0FBQ3VOLG1DQUFtQyxDQUFDVixVQUFVLEVBQUVDLE9BQU8sQ0FBQyxDQUFDO01BRWxJbkIsS0FBSyxDQUFDL0wsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDSSxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDNE0sNEJBQTRCLENBQUNDLFVBQVUsRUFBRUMsT0FBTyxDQUFDLENBQUM7SUFDbEg7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUssTUFBQSxDQUlNcUIsb0JBQW9CLEdBQTFCLGVBQU1BLG9CQUFvQkEsQ0FBQ2dDLE1BQXNDLEVBQWlCO01BQ2pGLElBQUlBLE1BQU0sRUFBRTtRQUNYLE1BQU11SixZQUFZLEdBQUl2SixNQUFNLENBQUNFLGFBQWEsQ0FBQyxDQUFDLENBQUNwRSxTQUFTLENBQWlELFFBQVEsQ0FBQztRQUNoSCxJQUFJeUwsT0FBTyxHQUFHZ0MsWUFBWSxHQUFHQSxZQUFZLENBQUNwSixNQUFNLEdBQUcxRCxTQUFTOztRQUU1RDtRQUNBLElBQUksQ0FBQzhLLE9BQU8sRUFBRTtVQUNiLE1BQU1pQyxZQUFZLEdBQUcsSUFBSSxDQUFDcEIsU0FBUyxDQUFDLENBQUMsQ0FBQ3FCLGNBQWMsQ0FBQyxDQUFDLENBQUM7VUFDdkRsQyxPQUFPLEdBQUdpQyxZQUFZLENBQUNySixNQUFvQztRQUM1RDs7UUFFQTtRQUNBO1FBQ0E7UUFDQSxNQUFNdUosUUFBUSxHQUFJMUosTUFBTSxDQUFDOUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxFQUE0QndJLE1BQU07UUFDakY2QixPQUFPLEdBQUcsSUFBSSxDQUFDb0Msd0JBQXdCLENBQUNwQyxPQUFPLEVBQUdtQyxRQUFRLENBQUM7UUFDM0RuQyxPQUFPLEdBQUcsTUFBTSxJQUFJLENBQUNxQyxlQUFlLENBQUNyQyxPQUFPLENBQUM7O1FBRTdDO1FBQ0EsSUFBSUEsT0FBTyxFQUFFO1VBQ1osSUFBSSxDQUFDMU0sYUFBYSxDQUFDLENBQUMsQ0FBQ2dQLFNBQVMsQ0FBQ3RDLE9BQU8sQ0FBQztRQUN4QztNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBNUssTUFBQSxDQUlBeUwsU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBdUM7TUFDL0MsT0FBTzBCLGtDQUFrQyxDQUFDQyxjQUFjLENBQUMsSUFBSSxDQUFDbFAsYUFBYSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUNpRSxXQUFXLENBQUM7SUFDakc7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFuQyxNQUFBLENBUUFxTixlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQ0MsYUFBcUIsRUFBRUMsS0FBYSxFQUFFQyxlQUEyQyxFQUFxQztNQUFBLElBQW5DQyxpQkFBaUIsR0FBQXRPLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFXLFNBQUEsR0FBQVgsU0FBQSxNQUFHLEtBQUs7TUFDM0g7TUFDQSxJQUFJLENBQUNxTyxlQUFlLEVBQUU7UUFDckJBLGVBQWUsR0FDZEMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDdlAsYUFBYSxDQUFDLENBQUMsQ0FBQzBOLFNBQVMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDSCxTQUFTLENBQUMsQ0FBQyxDQUFDcUIsY0FBYyxDQUFDUSxhQUFhLENBQUMsQ0FBQzlKLE1BQ3hFO01BQ2hDOztNQUVBO01BQ0EsTUFBTWtLLE1BQU0sR0FBSSxJQUFJLENBQUN4TSxTQUFTLENBQUMsQ0FBQyxDQUFrRHlNLGNBQWMsR0FDL0YsR0FBR0osS0FBSyxXQUFXQyxlQUFlLEVBQ25DLENBQUM7TUFDRCxNQUFNVCxRQUFRLEdBQUcsSUFBSSxDQUFDbk4seUJBQXlCLENBQUM4TixNQUFNLENBQUVFLFVBQVUsQ0FBQyxDQUFDLENBQUM7TUFFckUsT0FBTyxJQUFJLENBQUNaLHdCQUF3QixDQUFDUSxlQUFlLEVBQUdULFFBQVEsQ0FBQztJQUNqRTs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBL00sTUFBQSxDQU1BZ04sd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ1EsZUFBK0IsRUFBRVQsUUFBOEIsRUFBa0I7TUFDekcsTUFBTWMsaUJBQWlCLEdBQUc7UUFDekIsR0FBRyxFQUFFLENBQUMsdUJBQXVCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLENBQUM7UUFDaEYsR0FBRyxFQUFFLENBQ0oseUJBQXlCLEVBQ3pCLHlCQUF5QixFQUN6QixrQ0FBa0MsRUFDbEMsb0NBQW9DLEVBQ3BDLHFCQUFxQixFQUNyQixxQkFBcUI7TUFFdkIsQ0FBQztNQUVELElBQUlkLFFBQVEsSUFBSSxDQUFDek4sS0FBSyxDQUFDd08sT0FBTyxDQUFDZixRQUFRLENBQUMsRUFBRTtRQUN6QztRQUNBQSxRQUFRLEdBQUcsQ0FBQ0EsUUFBUSxDQUFDO01BQ3RCO01BRUEsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDZDtRQUNBLE9BQU9TLGVBQWU7TUFDdkIsQ0FBQyxNQUFNLElBQUlULFFBQVEsQ0FBQzNOLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDL0I7UUFDQSxNQUFNMk8sUUFBUSxHQUFHRixpQkFBaUIsQ0FBQ2QsUUFBUSxDQUFDM04sTUFBTSxDQUFDNE8sUUFBUSxDQUFDLENBQUMsQ0FBa0M7UUFDL0YsSUFBSSxDQUFDRCxRQUFRLENBQUN4RSxRQUFRLENBQUNpRSxlQUFlLENBQUMsRUFBRTtVQUN4QztVQUNBO1VBQ0EsTUFBTVMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUNuQixRQUFRLENBQUMzTixNQUFNLENBQUM7VUFDN0RvTyxlQUFlLEdBQUdTLGFBQWEsSUFBSUYsUUFBUSxDQUFDeEUsUUFBUSxDQUFDMEUsYUFBYSxDQUFDLEdBQUdBLGFBQWEsR0FBR0YsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNsRztNQUNELENBQUMsTUFBTTtRQUNOO1FBQ0EsTUFBTUksa0JBQWtCLEdBQ3ZCLElBQUksQ0FBQ2pGLG9CQUFvQixDQUFDLENBQUMsQ0FBQ2tGLGtCQUFrQixDQUFDckIsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ3RFLFdBQVcsSUFBSSxJQUFJLENBQUN0RyxXQUFXLENBQUNZLHlCQUF5QjtRQUN2SCxRQUFRb0wsa0JBQWtCO1VBQ3pCLEtBQUssa0JBQWtCO1lBQ3RCWCxlQUFlLEdBQUcxUixVQUFVLENBQUN1UyxTQUFTO1lBQ3RDO1VBQ0QsS0FBSyxnQkFBZ0I7WUFDcEJiLGVBQWUsR0FBRzFSLFVBQVUsQ0FBQ3dTLG1CQUFtQjtZQUNoRDtVQUNELEtBQUssZ0JBQWdCO1lBQ3BCZCxlQUFlLEdBQUcxUixVQUFVLENBQUN5UyxtQkFBbUI7WUFDaEQ7VUFDRDtZQUNDO1VBQ0Q7UUFDRDtNQUNEO01BRUEsT0FBT2YsZUFBZTtJQUN2Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXhOLE1BQUEsQ0FLQWtPLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNNLHdCQUFnQyxFQUE4QjtNQUMvRSxRQUFRQSx3QkFBd0I7UUFDL0IsS0FBSyxDQUFDO1VBQ0wsT0FBTyxJQUFJLENBQUNyTSxXQUFXLENBQUNRLDBCQUEwQjtRQUNuRCxLQUFLLENBQUM7VUFDTCxPQUFPLElBQUksQ0FBQ1IsV0FBVyxDQUFDUSwwQkFBMEI7UUFDbkQ7VUFDQyxPQUFPN0MsU0FBUztNQUNsQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUUsTUFBQSxDQUlBeU8saUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFXO01BQzNCLE1BQU14USxVQUFVLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUMsQ0FBQztNQUN2QyxNQUFNd1EsbUJBQThCLEdBQUcsQ0FDdEMsR0FBR3pRLFVBQVUsQ0FBQ0csbUJBQW1CLENBQUMsQ0FBQyxFQUNuQyxHQUFHSCxVQUFVLENBQUNLLGlCQUFpQixDQUFDLENBQUMsRUFDakMsR0FBR0wsVUFBVSxDQUFDTyxpQkFBaUIsQ0FBQyxDQUFDLENBQ2pDO01BQ0QsT0FBTyxJQUFJLENBQUNFLGlCQUFpQixDQUFDZ1EsbUJBQW1CLENBQUM7SUFDbkQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBMU8sTUFBQSxDQUlBMk8sZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUEsRUFBVztNQUN6QixPQUFPLElBQUksQ0FBQ2pPLG1CQUFtQixDQUFDLENBQUM7SUFDbEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFWLE1BQUEsQ0FLQVUsbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQ2tPLFNBQWtCLEVBQVU7TUFDL0MsTUFBTUMsWUFBb0IsR0FBRyxFQUFFO01BQy9CLE1BQU1yTCxNQUFNLEdBQUdvTCxTQUFTLEdBQUdBLFNBQVMsR0FBRyxJQUFJLENBQUMxUSxhQUFhLENBQUMsQ0FBQyxDQUFDME4sU0FBUyxDQUFDLENBQUM7TUFDdkUsTUFBTWtELE9BQU8sR0FBSUMsSUFBeUIsSUFBVztRQUNwRCxJQUFJQSxJQUFJLEVBQUU7VUFDVCxNQUFNcFEsSUFBSSxHQUFHLElBQUksQ0FBQ21GLG9CQUFvQixDQUFDaUwsSUFBSSxDQUFDO1VBQzVDLElBQUlwUSxJQUFJLEVBQUU7WUFDVGtRLFlBQVksQ0FBQzNSLElBQUksQ0FBQ3lCLElBQUksQ0FBQztVQUN4QjtRQUNEO01BQ0QsQ0FBQztNQUVELFFBQVE2RSxNQUFNO1FBQ2IsS0FBSzFILFVBQVUsQ0FBQ3lTLG1CQUFtQjtVQUNsQ08sT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNvSix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7VUFDdkQ7UUFFRCxLQUFLeEwsVUFBVSxDQUFDd1MsbUJBQW1CO1VBQ2xDUSxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ21KLHVCQUF1QixDQUFDLENBQUMsQ0FBQztVQUN2RDtRQUVELEtBQUt2TCxVQUFVLENBQUN1UyxTQUFTO1VBQ3hCUyxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ2tKLHlCQUF5QixDQUFDLENBQUMsQ0FBQztVQUN6RDtRQUVELEtBQUt0TCxVQUFVLENBQUNrVCx1QkFBdUI7UUFDdkMsS0FBS2xULFVBQVUsQ0FBQ21ULHVCQUF1QjtVQUN0Q0gsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNrSix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7VUFDekQwSCxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ21KLHVCQUF1QixDQUFDLENBQUMsQ0FBQztVQUN2RHlILE9BQU8sQ0FBQyxJQUFJLENBQUM1USxhQUFhLENBQUMsQ0FBQyxDQUFDb0osdUJBQXVCLENBQUMsQ0FBQyxDQUFDO1VBQ3ZEO1FBRUQsS0FBS3hMLFVBQVUsQ0FBQ29ULHVCQUF1QjtRQUN2QyxLQUFLcFQsVUFBVSxDQUFDcVQscUJBQXFCO1FBQ3JDLEtBQUtyVCxVQUFVLENBQUNzVCxnQ0FBZ0M7UUFDaEQsS0FBS3RULFVBQVUsQ0FBQ3VULGtDQUFrQztVQUNqRFAsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNrSix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7VUFDekQwSCxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ21KLHVCQUF1QixDQUFDLENBQUMsQ0FBQztVQUN2RDtRQUVEO1VBQ0NXLEdBQUcsQ0FBQ3NILEtBQUssQ0FBQyw2QkFBNkIsSUFBSSxDQUFDcFIsYUFBYSxDQUFDLENBQUMsQ0FBQzBOLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztNQUM1RTtNQUVBLE9BQU9pRCxZQUFZO0lBQ3BCLENBQUM7SUFBQTdPLE1BQUEsQ0FFRHBELFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDZ1MsU0FBa0IsRUFBVTtNQUN4QyxNQUFNVyxRQUFnQixHQUFHLEVBQUU7TUFDM0IsTUFBTS9MLE1BQU0sR0FBR29MLFNBQVMsR0FBR0EsU0FBUyxHQUFHLElBQUksQ0FBQzFRLGFBQWEsQ0FBQyxDQUFDLENBQUMwTixTQUFTLENBQUMsQ0FBQztNQUV2RSxNQUFNa0QsT0FBTyxHQUFJQyxJQUF5QixJQUFXO1FBQ3BELElBQUlBLElBQUksRUFBRTtVQUNULE1BQU1wUSxJQUFJLEdBQUcsSUFBSSxDQUFDbUYsb0JBQW9CLENBQUNpTCxJQUFJLENBQUM7VUFDNUMsSUFBSXBRLElBQUksRUFBRTtZQUNUNFEsUUFBUSxDQUFDclMsSUFBSSxDQUFDeUIsSUFBSSxDQUFDO1VBQ3BCO1FBQ0Q7TUFDRCxDQUFDO01BRUQsUUFBUTZFLE1BQU07UUFDYixLQUFLMUgsVUFBVSxDQUFDdVMsU0FBUztVQUN4QlMsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNrSix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7VUFDekQ7UUFDRCxLQUFLdEwsVUFBVSxDQUFDa1QsdUJBQXVCO1FBQ3ZDLEtBQUtsVCxVQUFVLENBQUNtVCx1QkFBdUI7UUFDdkMsS0FBS25ULFVBQVUsQ0FBQ3NULGdDQUFnQztRQUNoRCxLQUFLdFQsVUFBVSxDQUFDdVQsa0NBQWtDO1FBQ2xELEtBQUt2VCxVQUFVLENBQUN5UyxtQkFBbUI7VUFDbENPLE9BQU8sQ0FBQyxJQUFJLENBQUM1USxhQUFhLENBQUMsQ0FBQyxDQUFDa0oseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1VBQ3pEMEgsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNtSix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7VUFDdkR5SCxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ29KLHVCQUF1QixDQUFDLENBQUMsQ0FBQztVQUN2RDtRQUVELEtBQUt4TCxVQUFVLENBQUNvVCx1QkFBdUI7UUFDdkMsS0FBS3BULFVBQVUsQ0FBQ3FULHFCQUFxQjtVQUNwQ0wsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNrSix5QkFBeUIsQ0FBQyxDQUFDLENBQUM7VUFDekQwSCxPQUFPLENBQUMsSUFBSSxDQUFDNVEsYUFBYSxDQUFDLENBQUMsQ0FBQ21KLHVCQUF1QixDQUFDLENBQUMsQ0FBQztVQUN2RDtRQUVELEtBQUt2TCxVQUFVLENBQUN3UyxtQkFBbUI7VUFDbEM7VUFDQTtZQUNDLE1BQU1rQix3QkFBd0IsR0FDN0IsSUFBSSxDQUFDL0QsU0FBUyxDQUFDLENBQUMsQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQyxDQUFDSyxpQkFBaUIsRUFBRUMsU0FBUyxFQUFFRyxjQUFjLElBQUksRUFBRTtZQUN4RjJDLE9BQU8sQ0FBQyxJQUFJLENBQUM1USxhQUFhLENBQUMsQ0FBQyxDQUFDa0oseUJBQXlCLENBQUMsQ0FBQyxDQUFDO1lBQ3pEMEgsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNtSix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDdkQsSUFBSW1JLHdCQUF3QixDQUFDQyxVQUFVLENBQUMsYUFBYSxDQUFDLEVBQUU7Y0FDdkQ7Y0FDQVgsT0FBTyxDQUFDLElBQUksQ0FBQzVRLGFBQWEsQ0FBQyxDQUFDLENBQUNvSix1QkFBdUIsQ0FBQyxDQUFDLENBQUM7WUFDeEQ7VUFDRDtVQUNBO1FBRUQ7VUFDQ1UsR0FBRyxDQUFDc0gsS0FBSyxDQUFDLDZCQUE2QixJQUFJLENBQUNwUixhQUFhLENBQUMsQ0FBQyxDQUFDME4sU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDO01BQzVFO01BQ0EsT0FBTzJELFFBQVE7SUFDaEIsQ0FBQztJQUFBdlAsTUFBQSxDQUVLakMsZ0JBQWdCLEdBQXRCLGVBQU1BLGdCQUFnQkEsQ0FBQSxFQUFvQjtNQUN6QztNQUNBLE1BQU1zTCxNQUFNLEdBQUcsSUFBSSxDQUFDM0ksbUJBQW1CLENBQUMsQ0FBQztNQUN6QyxNQUFNZ1AsZ0JBQWlDLEdBQUdyRyxNQUFNLENBQUNzRyxNQUFNLENBQUMsVUFBVUMsU0FBMEIsRUFBRUMsV0FBaUIsRUFBRTtRQUNoSCxJQUFJQSxXQUFXLENBQUNqSSxHQUFHLElBQUlpSSxXQUFXLENBQUNqSSxHQUFHLENBQUMsc0JBQXNCLENBQUMsRUFBRTtVQUMvRGdJLFNBQVMsQ0FBQzFTLElBQUksQ0FBQzRTLGVBQWUsQ0FBQ0MsV0FBVyxDQUFDRixXQUFxQixDQUFDLENBQUM7UUFDbkU7UUFFQSxPQUFPRCxTQUFTO01BQ2pCLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDTixPQUFPNVMsT0FBTyxDQUFDZ1QsR0FBRyxDQUFDTixnQkFBZ0IsQ0FBQztJQUNyQyxDQUFDO0lBQUExUCxNQUFBLENBRURpUSxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFBLEVBQXdCO01BQzFDLE9BQU8sSUFBSSxDQUFDaEcsZ0JBQWdCLENBQUMsQ0FBQyxFQUFFckosaUJBQWlCLENBQUMsQ0FBQyxJQUFJZCxTQUFTO0lBQ2pFLENBQUM7SUFBQUUsTUFBQSxDQUVEaUssZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFXO01BQzFCLE9BQU8sSUFBSSxDQUFDck4sWUFBWSxDQUFDLENBQUMsQ0FBQ3NULEdBQUcsQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFBQWxRLE1BQUEsQ0FFRG1RLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNDLFFBQWlCLEVBQVc7TUFDaEQsSUFBSSxDQUFDLElBQUksQ0FBQ2xTLGFBQWEsQ0FBQyxDQUFDLEVBQUU7UUFDMUIsT0FBTyxLQUFLO01BQ2I7TUFDQSxNQUFNbVMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDelQsWUFBWSxDQUFDLENBQUM7TUFDNUMsS0FBSyxNQUFNK0IsSUFBSSxJQUFJMFIsZ0JBQWdCLEVBQUU7UUFDcEMsSUFBSTFSLElBQUksRUFBRTtVQUNULElBQUlBLElBQUksQ0FBQ2lDLGlCQUFpQixDQUFDLENBQUMsS0FBS3dQLFFBQVEsRUFBRTtZQUMxQyxPQUFPLElBQUk7VUFDWjtRQUNELENBQUMsTUFBTTtVQUNOO1VBQ0EsT0FBTyxLQUFLO1FBQ2I7TUFDRDtNQUNBLE9BQU8sS0FBSztJQUNiLENBQUM7SUFBQXBRLE1BQUEsQ0FFS3NRLGtCQUFrQixHQUF4QixlQUFNQSxrQkFBa0JBLENBQ3ZCek8sYUFBMkIsRUFDM0IwTyxNQUFjLEVBQ2RDLFNBQWlCLEVBQ2pCQyxXQUFpQyxFQUNqQjtNQUNoQixJQUFJLElBQUksQ0FBQ2hGLFNBQVMsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUMsQ0FBQ2dCLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDL0QsTUFBTTdLLGFBQWEsQ0FBQzJGLGdCQUFnQixDQUFDLENBQUMsQ0FBQ2tKLFFBQVEsQ0FBQ0YsU0FBUyxFQUFFQyxXQUFXLENBQUM7TUFDeEUsQ0FBQyxNQUFNO1FBQ04sTUFBTTVPLGFBQWEsQ0FBQzJGLGdCQUFnQixDQUFDLENBQUMsQ0FBQ2tKLFFBQVEsQ0FBQ0gsTUFBTSxFQUFFRSxXQUFXLENBQUM7TUFDckU7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF6USxNQUFBLENBSU0yUSx5QkFBeUIsR0FBL0IsZUFBTUEseUJBQXlCQSxDQUFBLEVBQXNCO01BQ3BELE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUM5TyxlQUFlLENBQUMsQ0FBQyxFQUFFMEYsZ0JBQWdCLENBQUMsQ0FBQztNQUNoRSxNQUFNcUosYUFBYSxHQUFHO1FBQ3JCQyxjQUFjLEVBQUUsQ0FBQyxDQUFDO1FBQ2xCQyxtQkFBbUIsRUFBRTtVQUNwQkMsT0FBTyxFQUFFLENBQUMsQ0FBQztVQUNYQyxNQUFNLEVBQUUsQ0FBQztRQUNWO01BQ0QsQ0FBQztNQUNELE9BQVEsQ0FBQyxNQUFNTCxhQUFhLENBQUNNLGlDQUFpQyxHQUFHLHFCQUFxQixDQUFDLEtBQUtMLGFBQWE7SUFDMUc7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBN1EsTUFBQSxDQUlBbVIseUJBQXlCLEdBQXpCLFNBQUFBLHlCQUF5QkEsQ0FBQ0MsUUFBa0IsRUFBUTtNQUNuRCxNQUFNUixhQUFhLEdBQUcsSUFBSSxDQUFDOU8sZUFBZSxDQUFDLENBQUMsRUFBRTBGLGdCQUFnQixDQUFDLENBQUM7TUFDaEVvSixhQUFhLENBQUNTLGlDQUFpQyxDQUFDLHFCQUFxQixFQUFFRCxRQUFRLENBQUM7SUFDakY7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQXBSLE1BQUEsQ0FHY0ksMEJBQTBCLEdBQXhDLGVBQWNBLDBCQUEwQkEsQ0FBQSxFQUFrQjtNQUN6RCxJQUFJLENBQUNrUixhQUFhLEdBQUcsSUFBSSxDQUFDWCx5QkFBeUIsQ0FBQyxDQUFDO01BQ3JELE1BQU1JLG1CQUFtQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUNPLGFBQWEsRUFBRVAsbUJBQW1CO01BQzFFLElBQUlBLG1CQUFtQixFQUFFO1FBQ3hCLE1BQU1RLEtBQUssR0FBRyxJQUFJLENBQUM3VSxPQUFPLENBQUMsQ0FBQyxDQUFDZ0IsUUFBUSxDQUFDLFVBQVUsQ0FBQztRQUNqRDZULEtBQUssQ0FBQ3pULFdBQVcsQ0FBQyx5QkFBeUIsRUFBRWlULG1CQUFtQixDQUFDO01BQ2xFO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUEvUSxNQUFBLENBS2N3UiwyQkFBMkIsR0FBekMsZUFBY0EsMkJBQTJCQSxDQUN4Q2xSLEtBQTJGLEVBQzNFO01BQ2hCLE1BQU07UUFBRW1SLEtBQUs7UUFBRWpPLE1BQU07UUFBRWtPO01BQWEsQ0FBQyxHQUFHcFIsS0FBSyxDQUFDaUQsYUFBYSxDQUFDLENBQUM7TUFDN0QsTUFBTWdPLEtBQUssR0FBRyxJQUFJLENBQUM3VSxPQUFPLENBQUMsQ0FBQyxDQUFDZ0IsUUFBUSxDQUFDLFVBQVUsQ0FBQztNQUNqRDZULEtBQUssQ0FBQ3pULFdBQVcsQ0FBQywyQkFBMkIyVCxLQUFLLElBQUlqTyxNQUFNLEVBQUUsRUFBRWtPLFlBQVksQ0FBQztNQUM3RSxNQUFNTixRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUNFLGFBQWE7TUFDekMsTUFBTUssa0JBQWtCLEdBQUcsSUFBSSxDQUFDQyw0QkFBNEIsQ0FBQ3BPLE1BQU0sQ0FBQztNQUNwRSxJQUFJbU8sa0JBQWtCLEVBQUU7UUFDdkJQLFFBQVEsQ0FBQ04sY0FBYyxDQUFDYSxrQkFBa0IsQ0FBQyxHQUFHbk8sTUFBTTtRQUNwRDROLFFBQVEsQ0FBQ0wsbUJBQW1CLENBQUNVLEtBQUssQ0FBQyxDQUFDak8sTUFBTSxDQUFDLEdBQUdrTyxZQUFZO1FBQzFELElBQUksQ0FBQ1AseUJBQXlCLENBQUNDLFFBQVEsQ0FBQztRQUN4QyxJQUFJLENBQUNFLGFBQWEsR0FBR3RVLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDbVUsUUFBUSxDQUFDO01BQy9DO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFwUixNQUFBLENBS1E0Uiw0QkFBNEIsR0FBcEMsU0FBUUEsNEJBQTRCQSxDQUFDcE8sTUFBc0IsRUFBb0I7TUFDOUUsTUFBTW1PLGtCQUFrQixHQUFHLHdCQUF3QixDQUFDRSxJQUFJLENBQUNyTyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQTRCO01BQ2hHLFFBQVFtTyxrQkFBa0I7UUFDekIsS0FBSyxLQUFLO1VBQ1QsT0FBTyxDQUFDO1FBQ1QsS0FBSyxLQUFLO1VBQ1QsT0FBTyxDQUFDO1FBQ1QsS0FBSyxPQUFPO1VBQ1gsT0FBTyxDQUFDO1FBQ1Q7VUFDQyxPQUFPLElBQUk7TUFDYjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBM1IsTUFBQSxDQUtNaU4sZUFBZSxHQUFyQixlQUFNQSxlQUFlQSxDQUFDNkUsY0FBK0IsRUFBdUM7TUFDM0YsTUFBTXRPLE1BQU0sR0FBR3NPLGNBQWMsSUFBSyxJQUFJLENBQUM1VCxhQUFhLENBQUMsQ0FBQyxDQUFDME4sU0FBUyxDQUFDLENBQW9CO01BQ3JGLE1BQU0rRixrQkFBa0IsR0FBRyxJQUFJLENBQUNDLDRCQUE0QixDQUFDcE8sTUFBTSxDQUFDO01BQ3BFLElBQUltTyxrQkFBa0IsRUFBRTtRQUN2QixNQUFNYixjQUFjLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQ1EsYUFBYSxFQUFFUixjQUFjO1FBQ2hFLE9BQU9BLGNBQWMsR0FBR2Esa0JBQWtCLENBQUMsSUFBSW5PLE1BQU07TUFDdEQ7TUFDQSxPQUFPQSxNQUFNO0lBQ2QsQ0FBQztJQUFBLE9BQUF4SCxhQUFBO0VBQUEsRUF6aEMwQjBJLGNBQWMsR0FBQWhGLFdBQUEsR0FBQXFTLHlCQUFBLENBQUFoVCxPQUFBLENBQUFrQixTQUFBLGdCQUFBOUQsS0FBQTtJQUFBNlYsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFwVCxPQUFBLE1BQUFELE1BQUE7RUFBQSxPQTRoQzNCOUMsYUFBYTtBQUFBIiwiaWdub3JlTGlzdCI6W119
|
|
950
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJMYXlvdXRUeXBlIiwiZkxpYnJhcnkiLCJGY2xDb250cm9sbGVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJ1c2luZ0V4dGVuc2lvbiIsIlZpZXdTdGF0ZSIsIm92ZXJyaWRlIiwiYXBwbHlJbml0aWFsU3RhdGVPbmx5IiwiYWRhcHRCaW5kaW5nUmVmcmVzaENvbnRyb2xzIiwiYUNvbnRyb2xzIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0QWxsVmlld3MiLCJmb3JFYWNoIiwib0NoaWxkVmlldyIsInBDaGlsZFZpZXciLCJQcm9taXNlIiwicmVzb2x2ZSIsInB1c2giLCJhZGFwdFN0YXRlQ29udHJvbHMiLCJhU3RhdGVDb250cm9scyIsIm9uUmVzdG9yZSIsImZjbENvbnRyb2xsZXIiLCJhcHBDb250ZW50Q29udGFpbmVyIiwiZ2V0QXBwQ29udGVudENvbnRhaW5lciIsImludGVybmFsTW9kZWwiLCJnZXRNb2RlbCIsInBhZ2VzIiwiZ2V0UHJvcGVydHkiLCJjb21wb25lbnRJZCIsInNldFByb3BlcnR5Iiwib25Db250YWluZXJSZWFkeSIsIm9uU3VzcGVuZCIsImZjbENvbnRyb2wiLCJnZXRGY2xDb250cm9sIiwiYmVnaW5Db2x1bW5QYWdlcyIsImdldEJlZ2luQ29sdW1uUGFnZXMiLCJtaWRDb2x1bW5QYWdlcyIsImdldE1pZENvbHVtblBhZ2VzIiwiZW5kQ29sdW1uUGFnZXMiLCJnZXRFbmRDb2x1bW5QYWdlcyIsImNvbmNhdCIsImdldFZpZXdzRnJvbVBhZ2VzIiwidmlldyIsImNvbnRyb2xsZXIiLCJ2aWV3U3RhdGUiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0Jhc2VDb250cm9sbGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX29UYXJnZXRzQWdncmVnYXRpb24iLCJfb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuIiwibWVzc2FnZVBhZ2VzIiwidW5kZWZpbmVkIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJfaW50ZXJuYWxJbml0Iiwic2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwiLCJtYW5hZ2VEYXRhUmVjZWl2ZWQiLCJldmVudCIsImdldFBhcmFtZXRlciIsInBhdGgiLCJ0YXJnZXRlZFZpZXciLCJfZ2V0QWxsVmlzaWJsZVZpZXdzIiwiZmluZCIsImdldEJpbmRpbmdDb250ZXh0IiwiZ2V0UGF0aCIsImlzS2VlcEFsaXZlIiwiX3JvdXRpbmciLCJvbkRhdGFSZWNlaXZlZCIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJhdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQiLCJfdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiIsIm9uQmVmb3JlUm91dGVNYXRjaGVkIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib25Sb3V0ZU1hdGNoZWQiLCJhdHRhY2hTdGF0ZUNoYW5nZSIsIl9zYXZlTGF5b3V0IiwiX29Sb3V0ZXJQcm94eSIsInNDdXJyZW50Um91dGVOYW1lIiwic0N1cnJlbnRBcmd1bWVudHMiLCJvQXBwQ29tcG9uZW50IiwiZ2V0QXBwQ29tcG9uZW50Iiwib0RhdGFNb2RlbCIsImF0dGFjaEV2ZW50IiwiYmluZCIsImdldFJvdXRlclByb3h5IiwiX29GQ0xDb25maWciLCJtYXhDb2x1bW5zQ291bnQiLCJvUm91dGluZ0NvbmZpZyIsImdldE1hbmlmZXN0Iiwicm91dGluZyIsImNvbmZpZyIsImZsZXhpYmxlQ29sdW1uTGF5b3V0Iiwib0ZDTE1hbmlmZXN0Q29uZmlnIiwiZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUiLCJkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlIiwibGltaXRGQ0xUb1R3b0NvbHVtbnMiLCJjb250cm9sQWdncmVnYXRpb24iLCJkZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uIiwiX2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbiIsIl9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24iLCJvblN0YXRlQ2hhbmdlZCIsImF0dGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUiLCJnZXRGY2xDb25maWciLCJvRXZlbnQiLCJzUHJldmlvdXNMYXlvdXQiLCJnZXRQYXJhbWV0ZXJzIiwibGF5b3V0IiwiYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkIiwicmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCIsImF0dGFjaEV2ZW50T25jZSIsInZpZXdzIiwicmlnaHRNb3N0Vmlld0N1cnJlbnQiLCJnZXRWaWV3RnJvbUNvbnRhaW5lciIsInZpZXdMZXZlbEJlZm9yZSIsImdldFZpZXdEYXRhIiwidmlld0xldmVsIiwidmlld0xldmVsQWZ0ZXIiLCJvQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24iLCJnZXRWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uIiwib25FeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwiZGV0YWNoU3RhdGVDaGFuZ2UiLCJkZXRhY2hBZnRlckVuZENvbHVtbk5hdmlnYXRlIiwiQmFzZUNvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZXJyb3JNZXNzYWdlIiwicGFyYW1ldGVycyIsImZjbExldmVsIiwicmVqZWN0IiwibGVnYWN5UGFyYW1ldGVycyIsIkZDTExldmVsIiwibWVzc2FnZVBhZ2UiLCJQYWdlIiwic2hvd0hlYWRlciIsImFkZEJlZ2luQ29sdW1uUGFnZSIsImFkZE1pZENvbHVtblBhZ2UiLCJhZGRFbmRDb2x1bW5QYWdlIiwiZnJvbVBhZ2UiLCJoZWFkZXIiLCJGbGV4Qm94IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50IiwiaXRlbXMiLCJCdXR0b24iLCJ0eXBlIiwiaWNvbiIsInRvb2x0aXAiLCJwcmVzcyIsImhhbmRsZVNoZWxsQmFjayIsInRvIiwiZ2V0SWQiLCJ3aW5kb3ciLCJoaXN0b3J5IiwiYmFjayIsImFkZFN0eWxlQ2xhc3MiLCJpbGx1c3RyYXRlZE1lc3NhZ2UiLCJJbGx1c3RyYXRlZE1lc3NhZ2UiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwiaWxsdXN0cmF0aW9uVHlwZSIsImVycm9yVHlwZSIsInJlbW92ZUFsbENvbnRlbnQiLCJhZGRDb250ZW50IiwiYWZ0ZXJOYXZpZ2F0ZUV2ZW50TmFtZSIsImdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UiLCJnZXRDdXJyZW50TWlkQ29sdW1uUGFnZSIsImdldEN1cnJlbnRFbmRDb2x1bW5QYWdlIiwiQ29tbW9uVXRpbHMiLCJnZXRTaGVsbFNlcnZpY2VzIiwic2V0QmFja05hdmlnYXRpb24iLCJmcm9tVmlldyIsIl9ldmVudCIsImlzQSIsInBhZ2VSZWFkeSIsImZvcmNlUGFnZVJlYWR5IiwiZSIsIkxvZyIsImluZm8iLCJvTWFuaWZlc3QiLCJvVGFyZ2V0cyIsInRhcmdldHMiLCJPYmplY3QiLCJrZXlzIiwic1RhcmdldE5hbWUiLCJvVGFyZ2V0IiwiYWdncmVnYXRpb24iLCJwYXR0ZXJuIiwiY29udGV4dFBhdHRlcm4iLCJhUm91dGVzIiwicm91dGVzIiwicm91dGUiLCJ0YXJnZXQiLCJnZXRDdXJyZW50QXJndW1lbnQiLCJnZXRDdXJyZW50Um91dGVOYW1lIiwiZ2V0VGFyZ2V0QWdncmVnYXRpb24iLCJzUm91dGVOYW1lIiwiX3Njcm9sbFRhYmxlc1RvTGFzdE5hdmlnYXRlZEl0ZW1zIiwiYVZpZXdzIiwib0FkZGl0aW9uYWxWaWV3IiwiaW5jbHVkZXMiLCJpbmRleCIsIm9WaWV3Iiwib1ByZXZpb3VzVmlldyIsImJpbmRpbmdDb250ZXh0IiwicHJldmlvdXNWaWV3Q29udHJvbGxlciIsIl9zY3JvbGxUYWJsZXNUb1JvdyIsImJJc05hdmlnYXRpb25BcnJvdyIsIl9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMiLCJuYXZUbyIsImdldFJpZ2h0bW9zdFZpZXciLCJjb21wdXRlVGl0bGVIaWVyYXJjaHkiLCJvRmNsIiwiZ2V0U291cmNlIiwib1BhZ2VzIiwib1BhZ2UiLCJvQnJlYWRDcnVtYnMiLCJieUlkIiwiZmlyZU1vZGVsQ29udGV4dENoYW5nZSIsIl91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkiLCJ2aWV3Q29sdW1uIiwic0xheW91dCIsImJTaG93U2hhcmVJY29uIiwiX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkiLCJoaWRkZW5EcmFmdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiSGlkZGVuRHJhZnQiLCJlbmFibGVkIiwiYkVkaXRCdXR0b25WaXNpYmxlIiwiX3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkiLCJiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUiLCJ1cGRhdGVVSVN0YXRlRm9yVmlldyIsIm9VSVN0YXRlIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJvRmNsQ29sTmFtZSIsImdldExheW91dCIsInNldE1vZGVsIiwiX2NyZWF0ZUhlbHBlck1vZGVsIiwiYWN0aW9uQnV0dG9uc0luZm8iLCJtaWRDb2x1bW4iLCJlbmRDb2x1bW4iLCJmdWxsU2NyZWVuIiwiZXhpdEZ1bGxTY3JlZW4iLCJjbG9zZUNvbHVtbiIsImJlZ2luQ29sdW1uIiwib0FjdGlvbkJ1dHRvbkluZm9zIiwiYXNzaWduIiwic3dpdGNoVmlzaWJsZSIsInN3aXRjaEljb24iLCJpc0Z1bGxTY3JlZW4iLCJjbG9zZVZpc2libGUiLCJvUXVlcnlQYXJhbXMiLCJvTmV4dFVJU3RhdGUiLCJnZXROZXh0VUlTdGF0ZSIsImFUYXJnZXRzIiwiX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzIiwiZ2V0U3RvcmVkTGF5b3V0Iiwic2V0TGF5b3V0IiwiRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciIsImdldEluc3RhbmNlRm9yIiwiY2FsY3VsYXRlTGF5b3V0IiwiaU5leHRGQ0xMZXZlbCIsInNIYXNoIiwic1Byb3Bvc2VkTGF5b3V0Iiwia2VlcEN1cnJlbnRMYXlvdXQiLCJvUm91dGUiLCJnZXRSb3V0ZUJ5SGFzaCIsImdldFBhdHRlcm4iLCJhbGxBbGxvd2VkTGF5b3V0cyIsImlzQXJyYXkiLCJhTGF5b3V0cyIsInRvU3RyaW5nIiwiZGVmYXVsdExheW91dCIsIl9nZXREZWZhdWx0TGF5b3V0Iiwic1RhcmdldEFnZ3JlZ2F0aW9uIiwiZ2V0Um91dGVUYXJnZXROYW1lIiwiT25lQ29sdW1uIiwiTWlkQ29sdW1uRnVsbFNjcmVlbiIsIkVuZENvbHVtbkZ1bGxTY3JlZW4iLCJudW1iZXJPZlRhcmdldHNGcm9tUm91dGUiLCJnZXRJbnN0YW5jZWRWaWV3cyIsImNvbXBvbmVudENvbnRhaW5lcnMiLCJnZXRWaXNpYmxlVmlld3MiLCJmb3JMYXlvdXQiLCJ2aXNpYmxlVmlld3MiLCJhZGRWaWV3IiwicGFnZSIsIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkIiwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQiLCJUd29Db2x1bW5zQmVnaW5FeHBhbmRlZCIsIlR3b0NvbHVtbnNNaWRFeHBhbmRlZCIsIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuIiwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbiIsImVycm9yIiwiYWxsVmlld3MiLCJsYXlvdXRXaGVuRXhpdEZ1bGxTY3JlZW4iLCJzdGFydHNXaXRoIiwiYVJlc3RvcmVQcm9taXNlcyIsInJlZHVjZSIsImFQcm9taXNlcyIsIm9UYXJnZXRWaWV3IiwiS2VlcEFsaXZlSGVscGVyIiwicmVzdG9yZVZpZXciLCJhbGwiLCJnZXRSaWdodG1vc3RDb250ZXh0IiwicG9wIiwiaXNDb250ZXh0VXNlZEluUGFnZXMiLCJvQ29udGV4dCIsImFBbGxWaXNpYmxlVmlld3MiLCJfc2V0U2hlbGxNZW51VGl0bGUiLCJzVGl0bGUiLCJzQXBwVGl0bGUiLCJicm93ZXJUaXRsZSIsInNldFRpdGxlIiwiZ2V0RkNMUGVyc29uYWxpemF0aW9uRGF0YSIsInNoZWxsU2VydmljZXMiLCJmY2xTdGF0ZSIsImdldEFwcGxpY2F0aW9uUGVyc29uYWxpemF0aW9uRGF0YSIsImRlZmF1bHRMYXlvdXRzIiwiY29sdW1uc0Rpc3RyaWJ1dGlvbiIsImRlc2t0b3AiLCJ0YWJsZXQiLCJzZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhIiwic2V0QXBwbGljYXRpb25QZXJzb25hbGl6YXRpb25EYXRhIiwiZmNsU3RhdGVDYWNoZSIsIm1vZGVsIiwib25Db2x1bW5zRGlzdHJpYnV0aW9uQ2hhbmdlIiwibWVkaWEiLCJjb2x1bW5zU2l6ZXMiLCJuYkNvbHVtbnNEaXNwbGF5ZWQiLCJnZXROdW1iZXJPZkNvbHVtbnNGcm9tTGF5b3V0IiwiZXhlYyIsInByb3Bvc2VkTGF5b3V0IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJGY2wuY29udHJvbGxlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEZsZXhpYmxlQ29sdW1uTGF5b3V0IGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFwiO1xuaW1wb3J0IHR5cGUgeyBGbGV4aWJsZUNvbHVtbkxheW91dCRBZnRlckVuZENvbHVtbk5hdmlnYXRlRXZlbnQsIEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB0eXBlIHsgQ29sdW1uc05hdmlnYXRpb25BY3Rpb25zLCBOYXZpZ2F0aW9uQWN0aW9uc1RhcmdldHMgfSBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlclwiO1xuaW1wb3J0IEZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXIgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXJcIjtcbmltcG9ydCBmTGlicmFyeSBmcm9tIFwic2FwL2YvbGlicmFyeVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIHVzaW5nRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblRvRXJyb3JQYWdlUmVzdWx0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL01lc3NhZ2VIYW5kbGVyXCI7XG5pbXBvcnQgVmlld1N0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9WaWV3U3RhdGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgS2VlcEFsaXZlSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0tlZXBBbGl2ZUhlbHBlclwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2UgZnJvbSBcInNhcC9tL0lsbHVzdHJhdGVkTWVzc2FnZVwiO1xuaW1wb3J0IFBhZ2UgZnJvbSBcInNhcC9tL1BhZ2VcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuXG5pbXBvcnQgdHlwZSB7IE1hbmFnZWRPYmplY3QkTW9kZWxDb250ZXh0Q2hhbmdlRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBSb3V0ZSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkQmVmb3JlUm91dGVNYXRjaGVkRXZlbnQsIFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IFRpdGxlQWRkaXRpb25hbEluZm8gfSBmcm9tIFwic2FwL3VzaGVsbC91aTVzZXJ2aWNlL1NoZWxsVUlTZXJ2aWNlXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcIi4uL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IEhpZGRlbkRyYWZ0IH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IEJhc2VDb250cm9sbGVyIGZyb20gXCIuL1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcblxuY29uc3QgTGF5b3V0VHlwZSA9IGZMaWJyYXJ5LkxheW91dFR5cGU7XG50eXBlIExheW91dFR5cGVUeXBlID0ga2V5b2YgdHlwZW9mIExheW91dFR5cGU7XG5cbnR5cGUgRGVmYXVsdExheW91dHMgPSB7XG5cdDE/OiBMYXlvdXRUeXBlVHlwZTtcblx0Mj86IExheW91dFR5cGVUeXBlO1xuXHQzPzogTGF5b3V0VHlwZVR5cGU7XG59O1xuXG50eXBlIEZDTENvbHVtbkRpc3RyaWJ1dGlvblN0YXRlID0ge1xuXHR0YWJsZXQ6IHsgW2tleSBpbiBMYXlvdXRUeXBlVHlwZV0/OiBzdHJpbmcgfTtcblx0ZGVza3RvcDogeyBba2V5IGluIExheW91dFR5cGVUeXBlXT86IHN0cmluZyB9O1xufTtcblxudHlwZSBGQ0xDb25maWcgPSB7XG5cdG1heENvbHVtbnNDb3VudDogbnVtYmVyO1xuXHRkZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZT86IExheW91dFR5cGVUeXBlO1xuXHRkZWZhdWx0VGhyZWVDb2x1bW5MYXlvdXRUeXBlPzogTGF5b3V0VHlwZVR5cGU7XG5cdGRlZmF1bHRDb250cm9sQWdncmVnYXRpb24/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBGQ0xTdGF0ZSA9IHtcblx0Y29sdW1uc0Rpc3RyaWJ1dGlvbjogRkNMQ29sdW1uRGlzdHJpYnV0aW9uU3RhdGU7XG5cdGRlZmF1bHRMYXlvdXRzOiBEZWZhdWx0TGF5b3V0cztcbn07XG5cbi8qKlxuICogQmFzZSBjb250cm9sbGVyIGNsYXNzIGZvciB5b3VyIG93biByb290IHZpZXcgd2l0aCBhbiBzYXAuZi5GbGV4aWJsZUNvbHVtbkxheW91dCBjb250cm9sLlxuICpcbiAqIEJ5IHVzaW5nIG9yIGV4dGVuZGluZyB0aGlzIGNvbnRyb2xsZXIsIHlvdSBjYW4gdXNlIHlvdXIgb3duIHJvb3QgdmlldyB3aXRoIHRoZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYW5kXG4gKiB5b3UgY2FuIG1ha2UgdXNlIG9mIFNBUCBGaW9yaSBlbGVtZW50cyBwYWdlcyBhbmQgU0FQIEZpb3JpIGVsZW1lbnRzIGJ1aWxkaW5nIGJsb2Nrcy5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqIEBzaW5jZSAxLjExMC4wXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiKVxuY2xhc3MgRmNsQ29udHJvbGxlciBleHRlbmRzIEJhc2VDb250cm9sbGVyIHtcblx0QHVzaW5nRXh0ZW5zaW9uKFxuXHRcdFZpZXdTdGF0ZS5vdmVycmlkZSh7XG5cdFx0XHRhcHBseUluaXRpYWxTdGF0ZU9ubHk6IGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fSxcblx0XHRcdGFkYXB0QmluZGluZ1JlZnJlc2hDb250cm9sczogZnVuY3Rpb24gKHRoaXM6IFZpZXdTdGF0ZSwgYUNvbnRyb2xzOiBQcm9taXNlPFZpZXc+W10pOiB2b2lkIHtcblx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyKS5fZ2V0QWxsVmlld3MoKS5mb3JFYWNoKGZ1bmN0aW9uIChvQ2hpbGRWaWV3OiBWaWV3KSB7XG5cdFx0XHRcdFx0Y29uc3QgcENoaWxkVmlldyA9IFByb21pc2UucmVzb2x2ZShvQ2hpbGRWaWV3KTtcblx0XHRcdFx0XHRhQ29udHJvbHMucHVzaChwQ2hpbGRWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0YWRhcHRTdGF0ZUNvbnRyb2xzOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlLCBhU3RhdGVDb250cm9sczogUHJvbWlzZTxWaWV3PltdKTogdm9pZCB7XG5cdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcikuX2dldEFsbFZpZXdzKCkuZm9yRWFjaChmdW5jdGlvbiAob0NoaWxkVmlldzogVmlldykge1xuXHRcdFx0XHRcdGNvbnN0IHBDaGlsZFZpZXcgPSBQcm9taXNlLnJlc29sdmUob0NoaWxkVmlldyk7XG5cdFx0XHRcdFx0YVN0YXRlQ29udHJvbHMucHVzaChwQ2hpbGRWaWV3KTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9LFxuXHRcdFx0b25SZXN0b3JlOiBmdW5jdGlvbiAodGhpczogVmlld1N0YXRlKSB7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2xsZXIgPSB0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRcdFx0Y29uc3QgYXBwQ29udGVudENvbnRhaW5lciA9IGZjbENvbnRyb2xsZXIuZ2V0QXBwQ29udGVudENvbnRhaW5lcigpO1xuXHRcdFx0XHRjb25zdCBpbnRlcm5hbE1vZGVsID0gYXBwQ29udGVudENvbnRhaW5lci5nZXRNb2RlbChcImludGVybmFsXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRcdFx0Y29uc3QgcGFnZXMgPSBpbnRlcm5hbE1vZGVsLmdldFByb3BlcnR5KFwiL3BhZ2VzXCIpO1xuXG5cdFx0XHRcdGZvciAoY29uc3QgY29tcG9uZW50SWQgaW4gcGFnZXMpIHtcblx0XHRcdFx0XHRpbnRlcm5hbE1vZGVsLnNldFByb3BlcnR5KGAvcGFnZXMvJHtjb21wb25lbnRJZH0vcmVzdG9yZVN0YXR1c2AsIFwicGVuZGluZ1wiKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmY2xDb250cm9sbGVyLm9uQ29udGFpbmVyUmVhZHkoKTtcblx0XHRcdH0sXG5cdFx0XHRvblN1c3BlbmQ6IGZ1bmN0aW9uICh0aGlzOiBWaWV3U3RhdGUpIHtcblx0XHRcdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyO1xuXHRcdFx0XHRjb25zdCBmY2xDb250cm9sID0gZmNsQ29udHJvbGxlci5nZXRGY2xDb250cm9sKCk7XG5cdFx0XHRcdGNvbnN0IGJlZ2luQ29sdW1uUGFnZXMgPSBmY2xDb250cm9sLmdldEJlZ2luQ29sdW1uUGFnZXMoKTtcblx0XHRcdFx0Y29uc3QgbWlkQ29sdW1uUGFnZXMgPSBmY2xDb250cm9sLmdldE1pZENvbHVtblBhZ2VzKCk7XG5cdFx0XHRcdGNvbnN0IGVuZENvbHVtblBhZ2VzID0gZmNsQ29udHJvbC5nZXRFbmRDb2x1bW5QYWdlcygpO1xuXHRcdFx0XHRjb25zdCBwYWdlcyA9IChbXSBhcyBDb250cm9sW10pLmNvbmNhdChiZWdpbkNvbHVtblBhZ2VzLCBtaWRDb2x1bW5QYWdlcywgZW5kQ29sdW1uUGFnZXMpO1xuXG5cdFx0XHRcdGZjbENvbnRyb2xsZXIuZ2V0Vmlld3NGcm9tUGFnZXMocGFnZXMpLmZvckVhY2goKHZpZXcpID0+IHtcblx0XHRcdFx0XHRjb25zdCBjb250cm9sbGVyID0gdmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIgfCB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0aWYgKGNvbnRyb2xsZXI/LnZpZXdTdGF0ZT8ub25TdXNwZW5kKSB7XG5cdFx0XHRcdFx0XHRjb250cm9sbGVyLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH0pXG5cdClcblx0dmlld1N0YXRlITogVmlld1N0YXRlO1xuXG5cdHByb3RlY3RlZCBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBzQ3VycmVudFJvdXRlTmFtZT86IHN0cmluZztcblxuXHRwcml2YXRlIHNDdXJyZW50QXJndW1lbnRzPzogeyBub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW47IFtcIj9xdWVyeVwiXT86IHsgbGF5b3V0Pzogc3RyaW5nIH0gfTtcblxuXHRwcml2YXRlIHNQcmV2aW91c0xheW91dD86IGtleW9mIHR5cGVvZiBMYXlvdXRUeXBlO1xuXG5cdHByb3RlY3RlZCBfb0ZDTENvbmZpZyE6IEZDTENvbmZpZztcblxuXHRwcml2YXRlIG9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbj86IFZpZXc7XG5cblx0cHJpdmF0ZSBfb1RhcmdldHNBZ2dyZWdhdGlvbjogUmVjb3JkPFxuXHRcdHN0cmluZyxcblx0XHR7XG5cdFx0XHRhZ2dyZWdhdGlvbjogc3RyaW5nO1xuXHRcdFx0cGF0dGVybj86IHN0cmluZyB8IG51bGw7XG5cdFx0fVxuXHQ+ID0ge307XG5cblx0cHJpdmF0ZSBfb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXSB8IHVuZGVmaW5lZD4gPSB7fTtcblxuXHRwcml2YXRlIG1lc3NhZ2VQYWdlczogKFBhZ2UgfCB1bmRlZmluZWQpW10gPSBbdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZF07XG5cblx0cHJpdmF0ZSBmY2xTdGF0ZUNhY2hlITogUHJvbWlzZTxGQ0xTdGF0ZT47XG5cblx0b25Jbml0KCk6IHZvaWQge1xuXHRcdHN1cGVyLm9uSW5pdCgpO1xuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXHRcdHRoaXMuc2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwoKTtcblx0fVxuXG5cdG1hbmFnZURhdGFSZWNlaXZlZChldmVudDogRXZlbnQ8eyBlcnJvcjogeyBzdGF0dXM6IG51bWJlciB9OyBwYXRoOiBzdHJpbmcgfT4pOiB2b2lkIHtcblx0XHRpZiAoZXZlbnQuZ2V0UGFyYW1ldGVyKFwiZXJyb3JcIikpIHtcblx0XHRcdGNvbnN0IHBhdGggPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJwYXRoXCIpO1xuXHRcdFx0Y29uc3QgdGFyZ2V0ZWRWaWV3ID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCkuZmluZCgodmlldykgPT4gdmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKCkgPT09IHBhdGgpO1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBtYW5hZ2UgZXJyb3Igd2hlbiB0aGUgcmVxdWVzdCBpcyByZWxhdGVkIHRvIGEgZm9ybSAgaW50byBhbiBPYmplY3RQYWdlXG5cdFx0XHRpZiAocGF0aCAmJiAodGFyZ2V0ZWRWaWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpIGFzIENvbnRleHQpPy5pc0tlZXBBbGl2ZSgpKSB7XG5cdFx0XHRcdCh0YXJnZXRlZFZpZXchLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX3JvdXRpbmcub25EYXRhUmVjZWl2ZWQoZXZlbnQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlcnMoKTogdm9pZCB7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fdXBkYXRlVmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbiwgdGhpcyk7XG5cdFx0c3VwZXIuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdHRoaXMuX2ludGVybmFsSW5pdCgpO1xuXG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5vbkJlZm9yZVJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRSb3V0ZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZWQodGhpcy5vblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5fc2F2ZUxheW91dCwgdGhpcyk7XG5cdH1cblxuXHRfaW50ZXJuYWxJbml0KCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLl9vUm91dGVyUHJveHkpIHtcblx0XHRcdHJldHVybjsgLy8gQWxyZWFkeSBpbml0aWFsaXplZFxuXHRcdH1cblxuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUgPSBcIlwiO1xuXHRcdHRoaXMuc0N1cnJlbnRBcmd1bWVudHMgPSB7fTtcblxuXHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpO1xuXG5cdFx0Y29uc3Qgb0RhdGFNb2RlbCA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0TW9kZWwoKTtcblx0XHRvRGF0YU1vZGVsPy5hdHRhY2hFdmVudChcImRhdGFSZWNlaXZlZFwiLCB0aGlzLm1hbmFnZURhdGFSZWNlaXZlZC5iaW5kKHRoaXMpKTtcblxuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblxuXHRcdC8vIEdldCBGQ0wgY29uZmlndXJhdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHR0aGlzLl9vRkNMQ29uZmlnID0geyBtYXhDb2x1bW5zQ291bnQ6IDMgfTtcblx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IG9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl0ucm91dGluZztcblxuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5mbGV4aWJsZUNvbHVtbkxheW91dCkge1xuXHRcdFx0Y29uc3Qgb0ZDTE1hbmlmZXN0Q29uZmlnID0gb1JvdXRpbmdDb25maWcuY29uZmlnLmZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXG5cdFx0XHQvLyBEZWZhdWx0IGxheW91dCBmb3IgMiBjb2x1bW5zXG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGUgPSBvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFR3b0NvbHVtbkxheW91dFR5cGU7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlZmF1bHQgbGF5b3V0IGZvciAzIGNvbHVtbnNcblx0XHRcdGlmIChvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZSkge1xuXHRcdFx0XHR0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUaHJlZUNvbHVtbkxheW91dFR5cGUgPSBvRkNMTWFuaWZlc3RDb25maWcuZGVmYXVsdFRocmVlQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTGltaXQgRkNMIHRvIDIgY29sdW1ucyA/XG5cdFx0XHRpZiAob0ZDTE1hbmlmZXN0Q29uZmlnLmxpbWl0RkNMVG9Ud29Db2x1bW5zID09PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50ID0gMjtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0dGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uID0gb1JvdXRpbmdDb25maWcuY29uZmlnLmNvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHR9XG5cblx0XHR0aGlzLl9pbml0aWFsaXplVGFyZ2V0QWdncmVnYXRpb24ob0FwcENvbXBvbmVudCk7XG5cdFx0dGhpcy5faW5pdGlhbGl6ZVJvdXRlc0luZm9ybWF0aW9uKG9BcHBDb21wb25lbnQpO1xuXG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoU3RhdGVDaGFuZ2UodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuYXR0YWNoQWZ0ZXJFbmRDb2x1bW5OYXZpZ2F0ZSh0aGlzLm9uU3RhdGVDaGFuZ2VkLCB0aGlzKTtcblx0fVxuXG5cdGdldEZjbENvbnRyb2woKTogRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbnRlbnRDb250YWluZXIoKSBhcyBGbGV4aWJsZUNvbHVtbkxheW91dDtcblx0fVxuXG5cdGdldEZjbENvbmZpZygpOiBGQ0xDb25maWcge1xuXHRcdHJldHVybiB0aGlzLl9vRkNMQ29uZmlnO1xuXHR9XG5cblx0X3NhdmVMYXlvdXQob0V2ZW50OiBGbGV4aWJsZUNvbHVtbkxheW91dCRTdGF0ZUNoYW5nZUV2ZW50KTogdm9pZCB7XG5cdFx0dGhpcy5zUHJldmlvdXNMYXlvdXQgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmxheW91dDtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGFkZGl0aW9uYWwgdmlldyAob24gdG9wIG9mIHRoZSB2aXNpYmxlIHZpZXdzKSwgdG8gYmUgYWJsZSB0byBjb21wdXRlIHRoZSBsYXRlc3QgdGFibGUgbmF2aWdhdGVkIHJvd3Mgb2Zcblx0ICogdGhlIG1vc3QgcmlnaHQgdmlzaWJsZSB2aWV3IGFmdGVyIGEgbmF2IGJhY2sgb3IgY29sdW1uIGZ1bGxzY3JlZW4uXG5cdCAqXG5cdCAqL1xuXG5cdF91cGRhdGVWaWV3Rm9yTmF2aWdhdGVkUm93c0NvbXB1dGF0aW9uKCk6IHZvaWQge1xuXHRcdGNvbnN0IGFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZCA9IHRoaXMuX2dldEFsbFZpc2libGVWaWV3cyh0aGlzLnNQcmV2aW91c0xheW91dCk7XG5cdFx0Y29uc3QgcmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZCA9IGFsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZC5sZW5ndGhcblx0XHRcdD8gYWxsVmlzaWJsZVZpZXdzQmVmb3JlUm91dGVNYXRjaGVkW2FsbFZpc2libGVWaWV3c0JlZm9yZVJvdXRlTWF0Y2hlZC5sZW5ndGggLSAxXVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cblx0XHR0aGlzLmdldFJvdXRlcigpLmF0dGFjaEV2ZW50T25jZShcInJvdXRlTWF0Y2hlZFwiLCAoZXZlbnQ6IEV2ZW50PHsgdmlld3M6IENvbnRyb2xbXSB9PikgPT4ge1xuXHRcdFx0Y29uc3Qgdmlld3MgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdFZpZXdDdXJyZW50ID0gdGhpcy5nZXRWaWV3RnJvbUNvbnRhaW5lcih2aWV3c1t2aWV3cy5sZW5ndGggLSAxXSk7XG5cblx0XHRcdGlmIChyaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkICYmIHJpZ2h0TW9zdFZpZXdDdXJyZW50KSB7XG5cdFx0XHRcdGNvbnN0IHZpZXdMZXZlbEJlZm9yZSA9IChyaWdodE1vc3RWaWV3QmVmb3JlUm91dGVNYXRjaGVkLmdldFZpZXdEYXRhKCkgYXMgeyB2aWV3TGV2ZWw/OiBudW1iZXIgfSk/LnZpZXdMZXZlbDtcblx0XHRcdFx0Y29uc3Qgdmlld0xldmVsQWZ0ZXIgPSAocmlnaHRNb3N0Vmlld0N1cnJlbnQuZ2V0Vmlld0RhdGEoKSBhcyB7IHZpZXdMZXZlbD86IG51bWJlciB9KT8udmlld0xldmVsO1xuXG5cdFx0XHRcdC8vIE5hdmlnYXRpb24gZm9yd2FyZCBmcm9tIEwyIHRvIHZpZXcgbGV2ZWwgTDMgKEZ1bGxTY3JlZW5MYXlvdXQpOlxuXHRcdFx0XHRpZiAodmlld0xldmVsQWZ0ZXIgPT09IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHRcdFx0dGhpcy5vQWRkaXRpb25hbFZpZXdGb3JOYXZSb3dzQ29tcHV0YXRpb24gPSByaWdodE1vc3RWaWV3Q3VycmVudDtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBOYXZpZ2F0aW9ucyBiYWNrd2FyZCBmcm9tIEwzIGRvd24gdG8gTDIsIEwxLCBMMCAoVGhyZWVDb2x1bW4gbGF5b3V0KTpcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHZpZXdMZXZlbEJlZm9yZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFx0dmlld0xldmVsQWZ0ZXIgIT09IHVuZGVmaW5lZCAmJlxuXHRcdFx0XHRcdHZpZXdMZXZlbEJlZm9yZSA8IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50ICYmXG5cdFx0XHRcdFx0dmlld0xldmVsQmVmb3JlID4gdmlld0xldmVsQWZ0ZXIgJiZcblx0XHRcdFx0XHRyaWdodE1vc3RWaWV3Q3VycmVudCAhPT0gcmlnaHRNb3N0Vmlld0JlZm9yZVJvdXRlTWF0Y2hlZFxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHR0aGlzLm9BZGRpdGlvbmFsVmlld0Zvck5hdlJvd3NDb21wdXRhdGlvbiA9IHJpZ2h0TW9zdFZpZXdCZWZvcmVSb3V0ZU1hdGNoZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdGdldFZpZXdGb3JOYXZpZ2F0ZWRSb3dzQ29tcHV0YXRpb24oKTogVmlldyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0FkZGl0aW9uYWxWaWV3Rm9yTmF2Um93c0NvbXB1dGF0aW9uO1xuXHR9XG5cblx0b25FeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMub25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0Um91dGVyKCkuZGV0YWNoQmVmb3JlUm91dGVNYXRjaGVkKHRoaXMub25CZWZvcmVSb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmRldGFjaFN0YXRlQ2hhbmdlKHRoaXMub25TdGF0ZUNoYW5nZWQsIHRoaXMpO1xuXHRcdHRoaXMuZ2V0RmNsQ29udHJvbCgpLmRldGFjaEFmdGVyRW5kQ29sdW1uTmF2aWdhdGUodGhpcy5vblN0YXRlQ2hhbmdlZCwgdGhpcyk7XG5cblx0XHRCYXNlQ29udHJvbGxlci5wcm90b3R5cGUub25FeGl0LmJpbmQodGhpcykoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgRkNMIGNvbXBvbmVudCBpcyBlbmFibGVkLlxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgc2luY2Ugd2UgYXJlIGluIEZDTCBzY2VuYXJpb1xuXHQgKiBAZmluYWxcblx0ICovXG5cdGlzRmNsRW5hYmxlZCgpOiB0aGlzIGlzIEZjbENvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0aGF0IGNyZWF0ZXMgYSBuZXcgUGFnZSB0byBkaXNwbGF5IHRoZSBJbGx1c3RyYXRlZE1lc3NhZ2UgY29udGFpbmluZyB0aGUgY3VycmVudCBlcnJvci5cblx0ICogQHBhcmFtIGVycm9yTWVzc2FnZVxuXHQgKiBAcGFyYW0gcGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gZmNsTGV2ZWxcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgY3JlYXRlcyBhIFBhZ2UgdG8gZGlzcGxheSB0aGUgZXJyb3Jcblx0ICovXG5cdGFzeW5jIGRpc3BsYXlFcnJvclBhZ2UoZXJyb3JNZXNzYWdlOiBzdHJpbmcsIHBhcmFtZXRlcnM6IE5hdmlnYXRpb25Ub0Vycm9yUGFnZVJlc3VsdCwgZmNsTGV2ZWwgPSAwKTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0cmV0dXJuIG5ldyBQcm9taXNlPGJvb2xlYW4+KGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IGZjbENvbnRyb2wgPSB0aGlzLmdldEZjbENvbnRyb2woKTtcblxuXHRcdFx0XHQvLyBNYW5hZ2UgdGhlIG9sZCBBUEkgd2hlcmUgdGhlIEZDTCBsZXZlbCB3YXMgcGFzc2VkIGluIHRoZSBwYXJhbWV0ZXJzXG5cdFx0XHRcdGNvbnN0IGxlZ2FjeVBhcmFtZXRlcnMgPSBwYXJhbWV0ZXJzIGFzIHsgRkNMTGV2ZWw/OiBudW1iZXIgfTtcblx0XHRcdFx0aWYgKGxlZ2FjeVBhcmFtZXRlcnMuRkNMTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBmY2xMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdGZjbExldmVsID0gbGVnYWN5UGFyYW1ldGVycy5GQ0xMZXZlbDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmICh0aGlzLl9vRkNMQ29uZmlnICYmIGZjbExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHRcdFx0ZmNsTGV2ZWwgPSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCAtIDE7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGZjbExldmVsIDwgMCB8fCBmY2xMZXZlbCA+IDIpIHtcblx0XHRcdFx0XHRmY2xMZXZlbCA9IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgbWVzc2FnZVBhZ2UgPSB0aGlzLm1lc3NhZ2VQYWdlc1tmY2xMZXZlbF07XG5cblx0XHRcdFx0aWYgKCFtZXNzYWdlUGFnZSkge1xuXHRcdFx0XHRcdG1lc3NhZ2VQYWdlID0gbmV3IFBhZ2Uoe1xuXHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2Vcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdHRoaXMubWVzc2FnZVBhZ2VzW2ZjbExldmVsXSA9IG1lc3NhZ2VQYWdlO1xuXG5cdFx0XHRcdFx0c3dpdGNoIChmY2xMZXZlbCkge1xuXHRcdFx0XHRcdFx0Y2FzZSAwOlxuXHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLmFkZEJlZ2luQ29sdW1uUGFnZShtZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRjYXNlIDE6XG5cdFx0XHRcdFx0XHRcdGZjbENvbnRyb2wuYWRkTWlkQ29sdW1uUGFnZShtZXNzYWdlUGFnZSk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLmFkZEVuZENvbHVtblBhZ2UobWVzc2FnZVBhZ2UpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBmcm9tUGFnZTogQ29udHJvbDtcblx0XHRcdFx0Y29uc3QgaGVhZGVyID0gbmV3IEZsZXhCb3goe1xuXHRcdFx0XHRcdGFsaWduSXRlbXM6IFwiU3RhcnRcIixcblx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudDogXCJFbmRcIixcblx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0bmV3IEJ1dHRvbih7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiVHJhbnNwYXJlbnRcIixcblx0XHRcdFx0XHRcdFx0aWNvbjogXCJzYXAtaWNvbjovL2RlY2xpbmVcIixcblx0XHRcdFx0XHRcdFx0dG9vbHRpcDogXCJ7c2FwLmZlLmkxOG4+Q19DT01NT05fU0FQRkVfQ0xPU0V9XCIsXG5cdFx0XHRcdFx0XHRcdHByZXNzOiAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKHBhcmFtZXRlcnMuaGFuZGxlU2hlbGxCYWNrID09PSB0cnVlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRmY2xDb250cm9sLnRvKGZyb21QYWdlLmdldElkKCksIHt9LCB7fSk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdHdpbmRvdy5oaXN0b3J5LmJhY2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pLmFkZFN0eWxlQ2xhc3MoXCJzYXBVaUxhcmdlTWFyZ2luRW5kXCIpXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgaWxsdXN0cmF0ZWRNZXNzYWdlID0gbmV3IElsbHVzdHJhdGVkTWVzc2FnZSh7XG5cdFx0XHRcdFx0dGl0bGU6IGVycm9yTWVzc2FnZSxcblx0XHRcdFx0XHRkZXNjcmlwdGlvbjogcGFyYW1ldGVycy5kZXNjcmlwdGlvbiA/PyBcIlwiLFxuXHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU6IHBhcmFtZXRlcnMuZXJyb3JUeXBlID8gYHNhcElsbHVzLSR7cGFyYW1ldGVycy5lcnJvclR5cGV9YCA6IFwic2FwSWxsdXMtVW5hYmxlVG9Mb2FkXCJcblx0XHRcdFx0fSk7XG5cdFx0XHRcdG1lc3NhZ2VQYWdlLnJlbW92ZUFsbENvbnRlbnQoKTtcblx0XHRcdFx0bWVzc2FnZVBhZ2UuYWRkQ29udGVudChoZWFkZXIpO1xuXHRcdFx0XHRtZXNzYWdlUGFnZS5hZGRDb250ZW50KGlsbHVzdHJhdGVkTWVzc2FnZSk7XG5cblx0XHRcdFx0bGV0IGFmdGVyTmF2aWdhdGVFdmVudE5hbWU6IHN0cmluZztcblx0XHRcdFx0c3dpdGNoIChmY2xMZXZlbCkge1xuXHRcdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRcdGZyb21QYWdlID0gZmNsQ29udHJvbC5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCk7XG5cdFx0XHRcdFx0XHRhZnRlck5hdmlnYXRlRXZlbnROYW1lID0gXCJhZnRlckJlZ2luQ29sdW1uTmF2aWdhdGVcIjtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSAxOlxuXHRcdFx0XHRcdFx0ZnJvbVBhZ2UgPSBmY2xDb250cm9sLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCk7XG5cdFx0XHRcdFx0XHRhZnRlck5hdmlnYXRlRXZlbnROYW1lID0gXCJhZnRlck1pZENvbHVtbk5hdmlnYXRlXCI7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRmcm9tUGFnZSA9IGZjbENvbnRyb2wuZ2V0Q3VycmVudEVuZENvbHVtblBhZ2UoKTtcblx0XHRcdFx0XHRcdGFmdGVyTmF2aWdhdGVFdmVudE5hbWUgPSBcImFmdGVyRW5kQ29sdW1uTmF2aWdhdGVcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChwYXJhbWV0ZXJzLmhhbmRsZVNoZWxsQmFjayA9PT0gdHJ1ZSkge1xuXHRcdFx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSBDb21tb25VdGlscy5nZXRBcHBDb21wb25lbnQoZnJvbVBhZ2UpO1xuXHRcdFx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKGFzeW5jIGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0XHRcdGZjbENvbnRyb2wudG8oZnJvbVBhZ2UuZ2V0SWQoKSwge30sIHt9KTtcblx0XHRcdFx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldEJhY2tOYXZpZ2F0aW9uKCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRjb25zdCBmcm9tVmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIoZnJvbVBhZ2UpO1xuXHRcdFx0XHRmY2xDb250cm9sLmF0dGFjaEV2ZW50T25jZShhZnRlck5hdmlnYXRlRXZlbnROYW1lLCAoX2V2ZW50OiBFdmVudDx7IGZyb206IENvbnRyb2wgfT4pID0+IHtcblx0XHRcdFx0XHRpZiAoZnJvbVZpZXcgJiYgZnJvbVZpZXcuaXNBPFZpZXc+KFwic2FwLnVpLmNvcmUubXZjLlZpZXdcIikpIHtcblx0XHRcdFx0XHRcdChmcm9tVmlldy5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnBhZ2VSZWFkeT8uZm9yY2VQYWdlUmVhZHkoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmVzb2x2ZSh0cnVlKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0ZmNsQ29udHJvbC50byhtZXNzYWdlUGFnZS5nZXRJZCgpLCB7fSwge30pO1xuXHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRyZWplY3QoZmFsc2UpO1xuXHRcdFx0XHRMb2cuaW5mbyhgJHtlfWApO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEluaXRpYWxpemUgdGhlIG9iamVjdCBfb1RhcmdldHNBZ2dyZWdhdGlvbiB0aGF0IGRlZmluZXMgZm9yIGVhY2ggcm91dGUgdGhlIHJlbGV2YW50IGFnZ3JlZ2F0aW9uIGFuZCBwYXR0ZXJuLlxuXHQgKiBAcGFyYW0gb0FwcENvbXBvbmVudCBSZWZlcmVuY2UgdG8gdGhlIEFwcENvbXBvbmVudFxuXHQgKi9cblx0X2luaXRpYWxpemVUYXJnZXRBZ2dyZWdhdGlvbihvQXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvTWFuaWZlc3QgPSBvQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0KCksXG5cdFx0XHRvVGFyZ2V0cyA9IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZyA/IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZy50YXJnZXRzIDogbnVsbDtcblxuXHRcdHRoaXMuX29UYXJnZXRzQWdncmVnYXRpb24gPSB7fTtcblxuXHRcdGlmIChvVGFyZ2V0cykge1xuXHRcdFx0T2JqZWN0LmtleXMob1RhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IG9UYXJnZXRzW3NUYXJnZXROYW1lXTtcblx0XHRcdFx0aWYgKG9UYXJnZXQuY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0dGhpcy5fb1RhcmdldHNBZ2dyZWdhdGlvbltzVGFyZ2V0TmFtZV0gPSB7XG5cdFx0XHRcdFx0XHRhZ2dyZWdhdGlvbjogb1RhcmdldC5jb250cm9sQWdncmVnYXRpb24sXG5cdFx0XHRcdFx0XHRwYXR0ZXJuOiBvVGFyZ2V0LmNvbnRleHRQYXR0ZXJuXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uW3NUYXJnZXROYW1lXSA9IHtcblx0XHRcdFx0XHRcdGFnZ3JlZ2F0aW9uOiBcInBhZ2VcIixcblx0XHRcdFx0XHRcdHBhdHRlcm46IG51bGxcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogSW5pdGlhbGl6ZXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBhIHJvdXRlIChpZGVudGlmZWQgYXMgaXRzIHBhdHRlcm4pIGFuZCB0aGUgY29ycmVzcG9uZGluZyB0YXJnZXRzXG5cdCAqIEBwYXJhbSBvQXBwQ29tcG9uZW50IHJlZiB0byB0aGUgQXBwQ29tcG9uZW50XG5cdCAqL1xuXG5cdF9pbml0aWFsaXplUm91dGVzSW5mb3JtYXRpb24ob0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0ID0gb0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdCgpLFxuXHRcdFx0YVJvdXRlcyA9IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZyA/IG9NYW5pZmVzdFtcInNhcC51aTVcIl0ucm91dGluZy5yb3V0ZXMgOiBudWxsO1xuXG5cdFx0dGhpcy5fb1RhcmdldHNGcm9tUm91dGVQYXR0ZXJuID0ge307XG5cblx0XHRpZiAoYVJvdXRlcykge1xuXHRcdFx0YVJvdXRlcy5mb3JFYWNoKChyb3V0ZSkgPT4ge1xuXHRcdFx0XHRpZiAocm91dGUucGF0dGVybikge1xuXHRcdFx0XHRcdHRoaXMuX29UYXJnZXRzRnJvbVJvdXRlUGF0dGVybltyb3V0ZS5wYXR0ZXJuXSA9IHJvdXRlLnRhcmdldCBhcyBzdHJpbmdbXTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Q3VycmVudEFyZ3VtZW50KCk6IHVua25vd24ge1xuXHRcdHJldHVybiB0aGlzLnNDdXJyZW50QXJndW1lbnRzO1xuXHR9XG5cblx0Z2V0Q3VycmVudFJvdXRlTmFtZSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLnNDdXJyZW50Um91dGVOYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHRlciBmb3Igb1RhcmdldHNBZ2dyZWdhdGlvbiBhcnJheS5cblx0ICogQHJldHVybnMgVGhlIF9vVGFyZ2V0c0FnZ3JlZ2F0aW9uIGFycmF5XG5cdCAqL1xuXHRnZXRUYXJnZXRBZ2dyZWdhdGlvbigpOiBSZWNvcmQ8XG5cdFx0c3RyaW5nLFxuXHRcdHtcblx0XHRcdGFnZ3JlZ2F0aW9uOiBzdHJpbmc7XG5cdFx0XHRwYXR0ZXJuPzogc3RyaW5nIHwgbnVsbDtcblx0XHR9XG5cdD4ge1xuXHRcdHJldHVybiB0aGlzLl9vVGFyZ2V0c0FnZ3JlZ2F0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRyaWdnZXJlZCBieSB0aGUgcm91dGVyIFJvdXRlTWF0Y2hlZCBldmVudC5cblx0ICogQHBhcmFtIG9FdmVudFxuXHQgKi9cblx0b25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBzUm91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cblx0XHQvLyBTYXZlIHRoZSBjdXJyZW50L3ByZXZpb3VzIHJvdXRlcyBhbmQgYXJndW1lbnRzXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IHNSb3V0ZU5hbWU7XG5cdFx0dGhpcy5zQ3VycmVudEFyZ3VtZW50cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJhcmd1bWVudHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyaW5nIHRoZSB0YWJsZSBzY3JvbGwgdG8gdGhlIG5hdmlnYXRlZCByb3cgYWZ0ZXIgZWFjaCBsYXlvdXQgY2hhbmdlLlxuXHQgKlxuXHQgKi9cblxuXHRfc2Nyb2xsVGFibGVzVG9MYXN0TmF2aWdhdGVkSXRlbXMoKTogdm9pZCB7XG5cdFx0Y29uc3QgYVZpZXdzID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCk7XG5cdFx0Ly9UaGUgc2Nyb2xscyBhcmUgdHJpZ2dlcmVkIG9ubHkgaWYgdGhlIGxheW91dCBpcyB3aXRoIHNldmVyYWwgY29sdW1ucyBvciB3aGVuIHN3aXRjaGluZyB0aGUgbW9zdFJpZ2h0IGNvbHVtbiBpbiBmdWxsIHNjcmVlblxuXHRcdGlmIChcblx0XHRcdGFWaWV3cy5sZW5ndGggPiAxIHx8XG5cdFx0XHQoYVZpZXdzLmxlbmd0aCAmJiAoYVZpZXdzWzBdLmdldFZpZXdEYXRhKCkgYXMgeyB2aWV3TGV2ZWw6IG51bWJlciB9KS52aWV3TGV2ZWwgPCB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudClcblx0XHQpIHtcblx0XHRcdGNvbnN0IG9BZGRpdGlvbmFsVmlldyA9IHRoaXMuZ2V0Vmlld0Zvck5hdmlnYXRlZFJvd3NDb21wdXRhdGlvbigpO1xuXHRcdFx0aWYgKG9BZGRpdGlvbmFsVmlldyAmJiAhYVZpZXdzLmluY2x1ZGVzKG9BZGRpdGlvbmFsVmlldykpIHtcblx0XHRcdFx0YVZpZXdzLnB1c2gob0FkZGl0aW9uYWxWaWV3KTtcblx0XHRcdH1cblx0XHRcdGZvciAobGV0IGluZGV4ID0gYVZpZXdzLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuXHRcdFx0XHRjb25zdCBvVmlldyA9IGFWaWV3c1tpbmRleF0sXG5cdFx0XHRcdFx0b1ByZXZpb3VzVmlldyA9IGFWaWV3c1tpbmRleCAtIDFdO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nQ29udGV4dCA9IG9WaWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHByZXZpb3VzVmlld0NvbnRyb2xsZXIgPSBvUHJldmlvdXNWaWV3LmdldENvbnRyb2xsZXIoKSBhcyB7IF9zY3JvbGxUYWJsZXNUb1Jvdz86IEZ1bmN0aW9uIH07XG5cdFx0XHRcdGlmIChiaW5kaW5nQ29udGV4dCAmJiBwcmV2aW91c1ZpZXdDb250cm9sbGVyLl9zY3JvbGxUYWJsZXNUb1Jvdykge1xuXHRcdFx0XHRcdHByZXZpb3VzVmlld0NvbnRyb2xsZXIuX3Njcm9sbFRhYmxlc1RvUm93KGJpbmRpbmdDb250ZXh0LmdldFBhdGgoKSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSBGQ0wgU3RhdGVDaGFuZ2VkIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRvblN0YXRlQ2hhbmdlZChvRXZlbnQ6IEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQgfCBGbGV4aWJsZUNvbHVtbkxheW91dCRBZnRlckVuZENvbHVtbk5hdmlnYXRlRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBiSXNOYXZpZ2F0aW9uQXJyb3cgPSAob0V2ZW50IGFzIEZsZXhpYmxlQ29sdW1uTGF5b3V0JFN0YXRlQ2hhbmdlRXZlbnQpLmdldFBhcmFtZXRlcihcImlzTmF2aWdhdGlvbkFycm93XCIpO1xuXHRcdGlmICh0aGlzLnNDdXJyZW50QXJndW1lbnRzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGlmICghdGhpcy5zQ3VycmVudEFyZ3VtZW50c1tcIj9xdWVyeVwiXSkge1xuXHRcdFx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzW1wiP3F1ZXJ5XCJdID0ge307XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnNDdXJyZW50QXJndW1lbnRzW1wiP3F1ZXJ5XCJdLmxheW91dCA9IChvRXZlbnQgYXMgRmxleGlibGVDb2x1bW5MYXlvdXQkU3RhdGVDaGFuZ2VFdmVudCkuZ2V0UGFyYW1ldGVyKFwibGF5b3V0XCIpO1xuXHRcdH1cblx0XHR0aGlzLl9mb3JjZU1vZGVsQ29udGV4dENoYW5nZU9uQnJlYWRDcnVtYnMob0V2ZW50KTtcblxuXHRcdC8vIFJlcGxhY2UgdGhlIFVSTCB3aXRoIHRoZSBuZXcgbGF5b3V0IGlmIGEgbmF2aWdhdGlvbiBhcnJvdyB3YXMgdXNlZFxuXHRcdGlmIChiSXNOYXZpZ2F0aW9uQXJyb3cgJiYgdGhpcy5zQ3VycmVudFJvdXRlTmFtZSkge1xuXHRcdFx0dGhpcy5fb1JvdXRlclByb3h5Lm5hdlRvKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUsIHRoaXMuc0N1cnJlbnRBcmd1bWVudHMpO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRSaWdodG1vc3RWaWV3KCk7XG5cdFx0aWYgKG9WaWV3KSB7XG5cdFx0XHR0aGlzLmNvbXB1dGVUaXRsZUhpZXJhcmNoeShvVmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEZ1bmN0aW9uIHRvIGZpcmUgTW9kZWxDb250ZXh0Q2hhbmdlIGV2ZW50IG9uIGFsbCBicmVhZGNydW1icyAoIG9uIGVhY2ggT2JqZWN0UGFnZXMpLlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRfZm9yY2VNb2RlbENvbnRleHRDaGFuZ2VPbkJyZWFkQ3J1bWJzKG9FdmVudDogRXZlbnQ8TWFuYWdlZE9iamVjdCRNb2RlbENvbnRleHRDaGFuZ2VFdmVudFBhcmFtZXRlcnMsIEZsZXhpYmxlQ29sdW1uTGF5b3V0Pik6IHZvaWQge1xuXHRcdC8vZm9yY2UgbW9kZWxjb250ZXh0Y2hhbmdlIG9uIE9iamVjdFBhZ2VzIHRvIHJlZnJlc2ggdGhlIGJyZWFkY3J1bWJzIGxpbmsgaHJlZnNcblx0XHRjb25zdCBvRmNsID0gb0V2ZW50LmdldFNvdXJjZSgpO1xuXHRcdGxldCBvUGFnZXM6IENvbnRyb2xbXSA9IFtdO1xuXHRcdG9QYWdlcyA9IG9QYWdlcy5jb25jYXQob0ZjbC5nZXRCZWdpbkNvbHVtblBhZ2VzKCkpLmNvbmNhdChvRmNsLmdldE1pZENvbHVtblBhZ2VzKCkpLmNvbmNhdChvRmNsLmdldEVuZENvbHVtblBhZ2VzKCkpO1xuXHRcdG9QYWdlcy5mb3JFYWNoKChvUGFnZSkgPT4ge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXdGcm9tQ29udGFpbmVyKG9QYWdlKTtcblx0XHRcdGNvbnN0IG9CcmVhZENydW1icyA9IG9WaWV3Py5ieUlkICYmIG9WaWV3LmJ5SWQoXCJicmVhZGNydW1ic1wiKTtcblx0XHRcdGlmIChvQnJlYWRDcnVtYnMpIHtcblx0XHRcdFx0b0JyZWFkQ3J1bWJzLmZpcmVNb2RlbENvbnRleHRDaGFuZ2UoKTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGdW5jdGlvbiB0cmlnZ2VyZWQgdG8gdXBkYXRlIHRoZSBTaGFyZSBidXR0b24gVmlzaWJpbGl0eS5cblx0ICogQHBhcmFtIHZpZXdDb2x1bW4gTmFtZSBvZiB0aGUgY3VycmVudCBjb2x1bW4gKFwiYmVnaW5Db2x1bW5cIiwgXCJtaWRDb2x1bW5cIiwgXCJlbmRDb2x1bW5cIilcblx0ICogQHBhcmFtIHNMYXlvdXQgVGhlIGN1cnJlbnQgbGF5b3V0IHVzZWQgYnkgdGhlIEZDTFxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmUgYnV0dG9uIHZpc2liaWxpdHlcblx0ICovXG5cdF91cGRhdGVTaGFyZUJ1dHRvblZpc2liaWxpdHkodmlld0NvbHVtbjogc3RyaW5nLCBzTGF5b3V0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRsZXQgYlNob3dTaGFyZUljb247XG5cdFx0c3dpdGNoIChzTGF5b3V0KSB7XG5cdFx0XHRjYXNlIFwiT25lQ29sdW1uXCI6XG5cdFx0XHRcdGJTaG93U2hhcmVJY29uID0gdmlld0NvbHVtbiA9PT0gXCJiZWdpbkNvbHVtblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlblwiOlxuXHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRjYXNlIFwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIjpcblx0XHRcdGNhc2UgXCJUd29Db2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSB2aWV3Q29sdW1uID09PSBcIm1pZENvbHVtblwiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI6XG5cdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRiU2hvd1NoYXJlSWNvbiA9IHZpZXdDb2x1bW4gPT09IFwiZW5kQ29sdW1uXCI7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0YlNob3dTaGFyZUljb24gPSBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIGJTaG93U2hhcmVJY29uO1xuXHR9XG5cblx0X3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkodmlld0NvbHVtbjogc3RyaW5nLCBzTGF5b3V0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBoaWRkZW5EcmFmdCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRcdGxldCBiRWRpdEJ1dHRvblZpc2libGUgPSB0cnVlO1xuXHRcdHN3aXRjaCAodmlld0NvbHVtbikge1xuXHRcdFx0Y2FzZSBcIm1pZENvbHVtblwiOlxuXHRcdFx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVHdvQ29sdW1uc01pZEV4cGFuZGVkXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc01pZEV4cGFuZGVkRW5kSGlkZGVuXCI6XG5cdFx0XHRcdFx0Y2FzZSBcIlRocmVlQ29sdW1uc0JlZ2luRXhwYW5kZWRFbmRIaWRkZW5cIjpcblx0XHRcdFx0XHRjYXNlIFwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRcdGlmICghaGlkZGVuRHJhZnQpIHtcblx0XHRcdFx0XHRcdFx0YkVkaXRCdXR0b25WaXNpYmxlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRcdGJFZGl0QnV0dG9uVmlzaWJsZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiZW5kQ29sdW1uXCI6XG5cdFx0XHRcdHN3aXRjaCAoc0xheW91dCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdGNhc2UgXCJUaHJlZUNvbHVtbnNFbmRFeHBhbmRlZFwiOlxuXHRcdFx0XHRcdFx0aWYgKCFoaWRkZW5EcmFmdCkge1xuXHRcdFx0XHRcdFx0XHRiRWRpdEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYkVkaXRCdXR0b25WaXNpYmxlO1xuXHR9XG5cblx0X3VwZGF0ZVNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxpdHkodmlld0NvbHVtbjogc3RyaW5nLCBzTGF5b3V0OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRjb25zdCBoaWRkZW5EcmFmdCA9ICh0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpPy5nZXRDYXBhYmlsaXRpZXMoKT8uSGlkZGVuRHJhZnQgYXMgSGlkZGVuRHJhZnQpPy5lbmFibGVkO1xuXHRcdGxldCBiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUgPSB0cnVlO1xuXHRcdHN3aXRjaCAodmlld0NvbHVtbikge1xuXHRcdFx0Y2FzZSBcIm1pZENvbHVtblwiOlxuXHRcdFx0XHRzd2l0Y2ggKHNMYXlvdXQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRjYXNlIFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRcIjpcblx0XHRcdFx0XHRcdGlmIChoaWRkZW5EcmFmdCkge1xuXHRcdFx0XHRcdFx0XHRiU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdH1cblx0XHRyZXR1cm4gYlNhdmVBbmRDYW5jZWxCdXR0b25WaXNpYmxlO1xuXHR9XG5cblx0dXBkYXRlVUlTdGF0ZUZvclZpZXcob1ZpZXc6IEZFVmlldywgRkNMTGV2ZWw6IG51bWJlcik6IHZvaWQge1xuXHRcdGNvbnN0IG9VSVN0YXRlID0gdGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLFxuXHRcdFx0b0ZjbENvbE5hbWUgPSBbXCJiZWdpbkNvbHVtblwiLCBcIm1pZENvbHVtblwiLCBcImVuZENvbHVtblwiXSxcblx0XHRcdHNMYXlvdXQgPSB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblx0XHRsZXQgdmlld0NvbHVtbjtcblxuXHRcdGlmICghb1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikpIHtcblx0XHRcdG9WaWV3LnNldE1vZGVsKHRoaXMuX2NyZWF0ZUhlbHBlck1vZGVsKCksIFwiZmNsaGVscGVyXCIpO1xuXHRcdH1cblx0XHRpZiAoIW9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvKSB7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAoIW9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbikge1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uID0ge307XG5cdFx0fVxuXHRcdGlmICghb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uKSB7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4gPSB7fTtcblx0XHR9XG5cdFx0aWYgKEZDTExldmVsID49IHRoaXMuX29GQ0xDb25maWcubWF4Q29sdW1uc0NvdW50KSB7XG5cdFx0XHQvLyBUaGUgdmlldyBpcyBvbiBhIGxldmVsID4gbWF4IG51bWJlciBvZiBjb2x1bW5zLiBJdCdzIGFsd2F5cyBmdWxsc2NyZWVuIHdpdGhvdXQgY2xvc2UvZXhpdCBidXR0b25zXG5cdFx0XHR2aWV3Q29sdW1uID0gb0ZjbENvbE5hbWVbdGhpcy5fb0ZDTENvbmZpZy5tYXhDb2x1bW5zQ291bnQgLSAxXTtcblxuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8ubWlkQ29sdW1uLmV4aXRGdWxsU2NyZWVuID0gbnVsbDtcblx0XHRcdG9VSVN0YXRlLmFjdGlvbkJ1dHRvbnNJbmZvLm1pZENvbHVtbi5jbG9zZUNvbHVtbiA9IG51bGw7XG5cdFx0XHRvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mby5lbmRDb2x1bW4uZXhpdEZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uLmZ1bGxTY3JlZW4gPSBudWxsO1xuXHRcdFx0b1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm8uZW5kQ29sdW1uLmNsb3NlQ29sdW1uID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dmlld0NvbHVtbiA9IG9GY2xDb2xOYW1lW0ZDTExldmVsXTtcblx0XHR9XG5cblx0XHRpZiAoXG5cdFx0XHRGQ0xMZXZlbCA+PSB0aGlzLl9vRkNMQ29uZmlnLm1heENvbHVtbnNDb3VudCB8fFxuXHRcdFx0c0xheW91dCA9PT0gXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCIgfHxcblx0XHRcdHNMYXlvdXQgPT09IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIHx8XG5cdFx0XHRzTGF5b3V0ID09PSBcIk9uZUNvbHVtblwiXG5cdFx0KSB7XG5cdFx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9icmVhZENydW1iSXNWaXNpYmxlXCIsIHRydWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9icmVhZENydW1iSXNWaXNpYmxlXCIsIGZhbHNlKTtcblx0XHR9XG5cdFx0Ly8gVW5mb3J0dW5hdGVseSwgdGhlIEZDTEhlbHBlciBkb2Vzbid0IHByb3ZpZGUgYWN0aW9uQnV0dG9uIHZhbHVlcyBmb3IgdGhlIGZpcnN0IGNvbHVtblxuXHRcdC8vIHNvIHdlIGhhdmUgdG8gYWRkIHRoaXMgaW5mbyBtYW51YWxseVxuXHRcdChvVUlTdGF0ZS5hY3Rpb25CdXR0b25zSW5mbyBhcyB7IGJlZ2luQ29sdW1uPzogb2JqZWN0IH0pLmJlZ2luQ29sdW1uID0ge1xuXHRcdFx0ZnVsbFNjcmVlbjogbnVsbCxcblx0XHRcdGV4aXRGdWxsU2NyZWVuOiBudWxsLFxuXHRcdFx0Y2xvc2VDb2x1bW46IG51bGxcblx0XHR9O1xuXG5cdFx0Y29uc3Qgb0FjdGlvbkJ1dHRvbkluZm9zOiBOYXZpZ2F0aW9uQWN0aW9uc1RhcmdldHMgJiB7XG5cdFx0XHRzd2l0Y2hWaXNpYmxlPzogYm9vbGVhbjtcblx0XHRcdHN3aXRjaEljb24/OiBzdHJpbmc7XG5cdFx0XHRpc0Z1bGxTY3JlZW4/OiBib29sZWFuO1xuXHRcdFx0Y2xvc2VWaXNpYmxlPzogYm9vbGVhbjtcblx0XHR9ID0gT2JqZWN0LmFzc2lnbih7fSwgb1VJU3RhdGUuYWN0aW9uQnV0dG9uc0luZm9bdmlld0NvbHVtbiBhcyBrZXlvZiBDb2x1bW5zTmF2aWdhdGlvbkFjdGlvbnNdKTtcblx0XHRvQWN0aW9uQnV0dG9uSW5mb3Muc3dpdGNoVmlzaWJsZSA9IG9BY3Rpb25CdXR0b25JbmZvcy5mdWxsU2NyZWVuICE9PSBudWxsIHx8IG9BY3Rpb25CdXR0b25JbmZvcy5leGl0RnVsbFNjcmVlbiAhPT0gbnVsbDtcblx0XHRvQWN0aW9uQnV0dG9uSW5mb3Muc3dpdGNoSWNvbiA9IG9BY3Rpb25CdXR0b25JbmZvcy5mdWxsU2NyZWVuICE9PSBudWxsID8gXCJzYXAtaWNvbjovL2Z1bGwtc2NyZWVuXCIgOiBcInNhcC1pY29uOi8vZXhpdC1mdWxsLXNjcmVlblwiO1xuXHRcdG9BY3Rpb25CdXR0b25JbmZvcy5pc0Z1bGxTY3JlZW4gPSBvQWN0aW9uQnV0dG9uSW5mb3MuZnVsbFNjcmVlbiA9PT0gbnVsbDtcblx0XHRvQWN0aW9uQnV0dG9uSW5mb3MuY2xvc2VWaXNpYmxlID0gb0FjdGlvbkJ1dHRvbkluZm9zLmNsb3NlQ29sdW1uICE9PSBudWxsO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvYWN0aW9uQnV0dG9uc0luZm9cIiwgb0FjdGlvbkJ1dHRvbkluZm9zKTtcblxuXHRcdG9WaWV3LmdldE1vZGVsKFwiZmNsaGVscGVyXCIpLnNldFByb3BlcnR5KFwiL3Nob3dFZGl0QnV0dG9uXCIsIHRoaXMuX3VwZGF0ZUVkaXRCdXR0b25WaXNpYmxpdHkodmlld0NvbHVtbiwgc0xheW91dCkpO1xuXG5cdFx0b1ZpZXcuZ2V0TW9kZWwoXCJmY2xoZWxwZXJcIikuc2V0UHJvcGVydHkoXCIvc2hvd1NhdmVBbmRDYW5jZWxCdXR0b25cIiwgdGhpcy5fdXBkYXRlU2F2ZUFuZENhbmNlbEJ1dHRvblZpc2libGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cblx0XHRvVmlldy5nZXRNb2RlbChcImZjbGhlbHBlclwiKS5zZXRQcm9wZXJ0eShcIi9zaG93U2hhcmVJY29uXCIsIHRoaXMuX3VwZGF0ZVNoYXJlQnV0dG9uVmlzaWJpbGl0eSh2aWV3Q29sdW1uLCBzTGF5b3V0KSk7XG5cdH1cblxuXHQvKipcblx0ICogRnVuY3Rpb24gdHJpZ2dlcmVkIGJ5IHRoZSByb3V0ZXIgQmVmb3JlUm91dGVNYXRjaGVkIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50XG5cdCAqL1xuXHRhc3luYyBvbkJlZm9yZVJvdXRlTWF0Y2hlZChvRXZlbnQ6IFJvdXRlciRCZWZvcmVSb3V0ZU1hdGNoZWRFdmVudCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmIChvRXZlbnQpIHtcblx0XHRcdGNvbnN0IG9RdWVyeVBhcmFtcyA9IChvRXZlbnQuZ2V0UGFyYW1ldGVycygpLmFyZ3VtZW50cyEgYXMgUmVjb3JkPHN0cmluZywgeyBsYXlvdXQ6IExheW91dFR5cGVUeXBlIH0+KVtcIj9xdWVyeVwiXTtcblx0XHRcdGxldCBzTGF5b3V0ID0gb1F1ZXJ5UGFyYW1zID8gb1F1ZXJ5UGFyYW1zLmxheW91dCA6IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gSWYgdGhlcmUgaXMgbm8gbGF5b3V0IHBhcmFtZXRlciwgcXVlcnkgZm9yIHRoZSBkZWZhdWx0IGxldmVsIDAgbGF5b3V0IChub3JtYWxseSBPbmVDb2x1bW4pXG5cdFx0XHRpZiAoIXNMYXlvdXQpIHtcblx0XHRcdFx0Y29uc3Qgb05leHRVSVN0YXRlID0gdGhpcy5nZXRIZWxwZXIoKS5nZXROZXh0VUlTdGF0ZSgwKTtcblx0XHRcdFx0c0xheW91dCA9IG9OZXh0VUlTdGF0ZS5sYXlvdXQgYXMgTGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENoZWNrIGlmIHRoZSBsYXlvdXQgaWYgY29tcGF0aWJsZSB3aXRoIHRoZSBudW1iZXIgb2YgdGFyZ2V0c1xuXHRcdFx0Ly8gVGhpcyBzaG91bGQgYWx3YXlzIGJlIHRoZSBjYXNlIGZvciBub3JtYWwgbmF2aWdhdGlvbiwganVzdCBuZWVkZWQgaW4gY2FzZVxuXHRcdFx0Ly8gdGhlIFVSTCBoYXMgYmVlbiBtYW51YWxseSBtb2RpZmllZFxuXHRcdFx0Y29uc3QgYVRhcmdldHMgPSAob0V2ZW50LmdldFBhcmFtZXRlcihcImNvbmZpZ1wiKSBhcyB7IHRhcmdldD86IHN0cmluZ1tdIH0pPy50YXJnZXQ7XG5cdFx0XHRzTGF5b3V0ID0gdGhpcy5fY29ycmVjdExheW91dEZvclRhcmdldHMoc0xheW91dCEsIGFUYXJnZXRzKTtcblx0XHRcdHNMYXlvdXQgPSBhd2FpdCB0aGlzLmdldFN0b3JlZExheW91dChzTGF5b3V0KTtcblxuXHRcdFx0Ly8gVXBkYXRlIHRoZSBsYXlvdXQgb2YgdGhlIEZsZXhpYmxlQ29sdW1uTGF5b3V0LlxuXHRcdFx0aWYgKHNMYXlvdXQpIHtcblx0XHRcdFx0dGhpcy5nZXRGY2xDb250cm9sKCkuc2V0TGF5b3V0KHNMYXlvdXQpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIZWxwZXIgZm9yIHRoZSBGQ0wgQ29tcG9uZW50LlxuXHQgKiBAcmV0dXJucyBJbnN0YW5jZSBvZiBhIHNlbWFudGljIGhlbHBlclxuXHQgKi9cblx0Z2V0SGVscGVyKCk6IEZsZXhpYmxlQ29sdW1uTGF5b3V0U2VtYW50aWNIZWxwZXIge1xuXHRcdHJldHVybiBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyLmdldEluc3RhbmNlRm9yKHRoaXMuZ2V0RmNsQ29udHJvbCgpLCB0aGlzLl9vRkNMQ29uZmlnKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIHRoZSBGQ0wgbGF5b3V0IGZvciBhIGdpdmVuIEZDTCBsZXZlbCBhbmQgYSB0YXJnZXQgaGFzaC5cblx0ICogQHBhcmFtIGlOZXh0RkNMTGV2ZWwgRkNMIGxldmVsIHRvIGJlIG5hdmlnYXRlZCB0b1xuXHQgKiBAcGFyYW0gc0hhc2ggVGhlIGhhc2ggdG8gYmUgbmF2aWdhdGVkIHRvXG5cdCAqIEBwYXJhbSBzUHJvcG9zZWRMYXlvdXQgVGhlIHByb3Bvc2VkIGxheW91dFxuXHQgKiBAcGFyYW0ga2VlcEN1cnJlbnRMYXlvdXQgVHJ1ZSBpZiB3ZSB3YW50IHRvIGtlZXAgdGhlIGN1cnJlbnQgbGF5b3V0IGlmIHBvc3NpYmxlXG5cdCAqIEByZXR1cm5zIFRoZSBjYWxjdWxhdGVkIGxheW91dFxuXHQgKi9cblx0Y2FsY3VsYXRlTGF5b3V0KGlOZXh0RkNMTGV2ZWw6IG51bWJlciwgc0hhc2g6IHN0cmluZywgc1Byb3Bvc2VkTGF5b3V0OiBMYXlvdXRUeXBlVHlwZSB8IHVuZGVmaW5lZCwga2VlcEN1cnJlbnRMYXlvdXQgPSBmYWxzZSk6IHN0cmluZyB7XG5cdFx0Ly8gRmlyc3QsIGFzayB0aGUgRkNMIGhlbHBlciB0byBjYWxjdWxhdGUgdGhlIGxheW91dCBpZiBub3RoaW5nIGlzIHByb3Bvc2VkXG5cdFx0aWYgKCFzUHJvcG9zZWRMYXlvdXQpIHtcblx0XHRcdHNQcm9wb3NlZExheW91dCA9IChcblx0XHRcdFx0a2VlcEN1cnJlbnRMYXlvdXQgPyB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKSA6IHRoaXMuZ2V0SGVscGVyKCkuZ2V0TmV4dFVJU3RhdGUoaU5leHRGQ0xMZXZlbCkubGF5b3V0XG5cdFx0XHQpIGFzIExheW91dFR5cGVUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hhbmdlIHRoaXMgdmFsdWUgaWYgbmVjZXNzYXJ5LCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIHRhcmdldHNcblx0XHRjb25zdCBvUm91dGUgPSAodGhpcy5nZXRSb3V0ZXIoKSBhcyB7IGdldFJvdXRlQnlIYXNoPzogKGhhc2g6IHN0cmluZykgPT4gUm91dGUgfSkuZ2V0Um91dGVCeUhhc2g/Lihcblx0XHRcdGAke3NIYXNofT9sYXlvdXQ9JHtzUHJvcG9zZWRMYXlvdXR9YFxuXHRcdCk7XG5cdFx0Y29uc3QgYVRhcmdldHMgPSB0aGlzLl9vVGFyZ2V0c0Zyb21Sb3V0ZVBhdHRlcm5bb1JvdXRlIS5nZXRQYXR0ZXJuKCldO1xuXG5cdFx0cmV0dXJuIHRoaXMuX2NvcnJlY3RMYXlvdXRGb3JUYXJnZXRzKHNQcm9wb3NlZExheW91dCEsIGFUYXJnZXRzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3Mgd2hldGhlciBhIGdpdmVuIEZDTCBsYXlvdXQgaXMgY29tcGF0aWJsZSB3aXRoIGFuIGFycmF5IG9mIHRhcmdldHMuXG5cdCAqIEBwYXJhbSBzUHJvcG9zZWRMYXlvdXQgUHJvcG9zZWQgdmFsdWUgZm9yIHRoZSBGQ0wgbGF5b3V0XG5cdCAqIEBwYXJhbSBhVGFyZ2V0cyBBcnJheSBvZiB0YXJnZXQgbmFtZXMgdXNlZCBmb3IgY2hlY2tpbmdcblx0ICogQHJldHVybnMgVGhlIGNvcnJlY3RlZCBsYXlvdXRcblx0ICovXG5cdF9jb3JyZWN0TGF5b3V0Rm9yVGFyZ2V0cyhzUHJvcG9zZWRMYXlvdXQ6IExheW91dFR5cGVUeXBlLCBhVGFyZ2V0czogc3RyaW5nW10gfCB1bmRlZmluZWQpOiBMYXlvdXRUeXBlVHlwZSB7XG5cdFx0Y29uc3QgYWxsQWxsb3dlZExheW91dHMgPSB7XG5cdFx0XHRcIjJcIjogW1wiVHdvQ29sdW1uc01pZEV4cGFuZGVkXCIsIFwiVHdvQ29sdW1uc0JlZ2luRXhwYW5kZWRcIiwgXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCJdLFxuXHRcdFx0XCIzXCI6IFtcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNNaWRFeHBhbmRlZFwiLFxuXHRcdFx0XHRcIlRocmVlQ29sdW1uc0VuZEV4cGFuZGVkXCIsXG5cdFx0XHRcdFwiVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW5cIixcblx0XHRcdFx0XCJUaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuXCIsXG5cdFx0XHRcdFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiLFxuXHRcdFx0XHRcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIlxuXHRcdFx0XVxuXHRcdH07XG5cblx0XHRpZiAoYVRhcmdldHMgJiYgIUFycmF5LmlzQXJyYXkoYVRhcmdldHMpKSB7XG5cdFx0XHQvLyBUbyBzdXBwb3J0IHNpbmdsZSB0YXJnZXQgYXMgYSBzdHJpbmcgaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRhVGFyZ2V0cyA9IFthVGFyZ2V0c107XG5cdFx0fVxuXG5cdFx0aWYgKCFhVGFyZ2V0cykge1xuXHRcdFx0Ly8gRGVmZW5zaXZlLCBqdXN0IGluIGNhc2UuLi5cblx0XHRcdHJldHVybiBzUHJvcG9zZWRMYXlvdXQ7XG5cdFx0fSBlbHNlIGlmIChhVGFyZ2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0XHQvLyBNb3JlIHRoYW4gMSB0YXJnZXQ6IGp1c3Qgc2ltcGx5IGNoZWNrIGZyb20gdGhlIGFsbG93ZWQgdmFsdWVzXG5cdFx0XHRjb25zdCBhTGF5b3V0cyA9IGFsbEFsbG93ZWRMYXlvdXRzW2FUYXJnZXRzLmxlbmd0aC50b1N0cmluZygpIGFzIFwiMlwiIHwgXCIzXCJdIGFzIExheW91dFR5cGVUeXBlW107XG5cdFx0XHRpZiAoIWFMYXlvdXRzLmluY2x1ZGVzKHNQcm9wb3NlZExheW91dCkpIHtcblx0XHRcdFx0Ly8gVGhlIHByb3Bvc2VkIGxheW91dCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG51bWJlciBvZiBjb2x1bW5zXG5cdFx0XHRcdC8vIC0tPiBBc2sgdGhlIGhlbHBlciBmb3IgdGhlIGRlZmF1bHQgbGF5b3V0IGZvciB0aGUgbnVtYmVyIG9mIGNvbHVtbnNcblx0XHRcdFx0Y29uc3QgZGVmYXVsdExheW91dCA9IHRoaXMuX2dldERlZmF1bHRMYXlvdXQoYVRhcmdldHMubGVuZ3RoKTtcblx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gZGVmYXVsdExheW91dCAmJiBhTGF5b3V0cy5pbmNsdWRlcyhkZWZhdWx0TGF5b3V0KSA/IGRlZmF1bHRMYXlvdXQgOiBhTGF5b3V0c1swXTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gT25seSBvbmUgdGFyZ2V0XG5cdFx0XHRjb25zdCBzVGFyZ2V0QWdncmVnYXRpb24gPVxuXHRcdFx0XHR0aGlzLmdldFRhcmdldEFnZ3JlZ2F0aW9uKClbZ2V0Um91dGVUYXJnZXROYW1lKGFUYXJnZXRzWzBdKV0uYWdncmVnYXRpb24gfHwgdGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0Q29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0c3dpdGNoIChzVGFyZ2V0QWdncmVnYXRpb24pIHtcblx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBMYXlvdXRUeXBlLk9uZUNvbHVtbjtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIm1pZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0c1Byb3Bvc2VkTGF5b3V0ID0gTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZW5kQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRzUHJvcG9zZWRMYXlvdXQgPSBMYXlvdXRUeXBlLkVuZENvbHVtbkZ1bGxTY3JlZW47XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdC8vIG5vIGRlZmF1bHRcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gc1Byb3Bvc2VkTGF5b3V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgZGVmYXVsdCBMYXlvdXQgZm9yIG51bWJlciBvZiBjb2x1bW5zLlxuXHQgKiBAcGFyYW0gbnVtYmVyT2ZUYXJnZXRzRnJvbVJvdXRlXG5cdCAqIEByZXR1cm5zIEFuIEZDTCBMYXlvdXQgYmFzZWQgb24gdGhlIG1hbmlmZXN0IGNvbmZpZ3VyYXRpb24gaWYgaXQgaXMgZGVmaW5lZC5cblx0ICovXG5cdF9nZXREZWZhdWx0TGF5b3V0KG51bWJlck9mVGFyZ2V0c0Zyb21Sb3V0ZTogbnVtYmVyKTogTGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdHN3aXRjaCAobnVtYmVyT2ZUYXJnZXRzRnJvbVJvdXRlKSB7XG5cdFx0XHRjYXNlIDM6XG5cdFx0XHRcdHJldHVybiB0aGlzLl9vRkNMQ29uZmlnLmRlZmF1bHRUd29Db2x1bW5MYXlvdXRUeXBlO1xuXHRcdFx0Y2FzZSAyOlxuXHRcdFx0XHRyZXR1cm4gdGhpcy5fb0ZDTENvbmZpZy5kZWZhdWx0VHdvQ29sdW1uTGF5b3V0VHlwZTtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGluc3RhbmNlZCB2aWV3cyBpbiB0aGUgRkNMIGNvbXBvbmVudC5cblx0ICogQHJldHVybnMgUmV0dXJuIHRoZSBpbnN0YW5jZWQgdmlld3MuXG5cdCAqL1xuXHRnZXRJbnN0YW5jZWRWaWV3cygpOiBWaWV3W10ge1xuXHRcdGNvbnN0IGZjbENvbnRyb2wgPSB0aGlzLmdldEZjbENvbnRyb2woKTtcblx0XHRjb25zdCBjb21wb25lbnRDb250YWluZXJzOiBDb250cm9sW10gPSBbXG5cdFx0XHQuLi5mY2xDb250cm9sLmdldEJlZ2luQ29sdW1uUGFnZXMoKSxcblx0XHRcdC4uLmZjbENvbnRyb2wuZ2V0TWlkQ29sdW1uUGFnZXMoKSxcblx0XHRcdC4uLmZjbENvbnRyb2wuZ2V0RW5kQ29sdW1uUGFnZXMoKVxuXHRcdF07XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Vmlld3NGcm9tUGFnZXMoY29tcG9uZW50Q29udGFpbmVycyk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCB2aXNpYmxlIHBhZ2VzLlxuXHQgKiBAcmV0dXJucyBSZXR1cm4gdGhlIHZpc2libGUgdmlld3MuXG5cdCAqL1xuXHRnZXRWaXNpYmxlVmlld3MoKTogVmlld1tdIHtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGFsbCB2aXNpYmxlIHZpZXdzIGluIHRoZSBGQ0wgY29tcG9uZW50LlxuXHQgKiBAcGFyYW0gZm9yTGF5b3V0ICBPcHRpb25hbCBwYXJhbWV0ZXIgaXMgdmVyeSBzcGVjaWZpYyBhcyBwYXJ0IG9mIHRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgbGF0ZXN0IG5hdmlnYXRlZCByb3dcblx0ICogQHJldHVybnMgQXJyYXkgb2YgYWxsIHZpc2libGUgdmlld3Ncblx0ICovXG5cdF9nZXRBbGxWaXNpYmxlVmlld3MoZm9yTGF5b3V0Pzogc3RyaW5nKTogVmlld1tdIHtcblx0XHRjb25zdCB2aXNpYmxlVmlld3M6IFZpZXdbXSA9IFtdO1xuXHRcdGNvbnN0IGxheW91dCA9IGZvckxheW91dCA/IGZvckxheW91dCA6IHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldExheW91dCgpO1xuXHRcdGNvbnN0IGFkZFZpZXcgPSAocGFnZTogQ29udHJvbCB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKHBhZ2UpIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIocGFnZSk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0dmlzaWJsZVZpZXdzLnB1c2godmlldyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0c3dpdGNoIChsYXlvdXQpIHtcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5FbmRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLk1pZENvbHVtbkZ1bGxTY3JlZW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudE1pZENvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuT25lQ29sdW1uOlxuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zRW5kRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zQmVnaW5FeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zTWlkRXhwYW5kZWRFbmRIaWRkZW46XG5cdFx0XHRjYXNlIExheW91dFR5cGUuVGhyZWVDb2x1bW5zQmVnaW5FeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRNaWRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLmVycm9yKGBVbmhhbmRsZWQgc3dpdGNoIGNhc2UgZm9yICR7dGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCl9YCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpc2libGVWaWV3cztcblx0fVxuXG5cdF9nZXRBbGxWaWV3cyhmb3JMYXlvdXQ/OiBzdHJpbmcpOiBWaWV3W10ge1xuXHRcdGNvbnN0IGFsbFZpZXdzOiBWaWV3W10gPSBbXTtcblx0XHRjb25zdCBsYXlvdXQgPSBmb3JMYXlvdXQgPyBmb3JMYXlvdXQgOiB0aGlzLmdldEZjbENvbnRyb2woKS5nZXRMYXlvdXQoKTtcblxuXHRcdGNvbnN0IGFkZFZpZXcgPSAocGFnZTogQ29udHJvbCB8IHVuZGVmaW5lZCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKHBhZ2UpIHtcblx0XHRcdFx0Y29uc3QgdmlldyA9IHRoaXMuZ2V0Vmlld0Zyb21Db250YWluZXIocGFnZSk7XG5cdFx0XHRcdGlmICh2aWV3KSB7XG5cdFx0XHRcdFx0YWxsVmlld3MucHVzaCh2aWV3KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRzd2l0Y2ggKGxheW91dCkge1xuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLk9uZUNvbHVtbjpcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50QmVnaW5Db2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNFbmRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNNaWRFeHBhbmRlZEVuZEhpZGRlbjpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5UaHJlZUNvbHVtbnNCZWdpbkV4cGFuZGVkRW5kSGlkZGVuOlxuXHRcdFx0Y2FzZSBMYXlvdXRUeXBlLkVuZENvbHVtbkZ1bGxTY3JlZW46XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50RW5kQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zQmVnaW5FeHBhbmRlZDpcblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5Ud29Db2x1bW5zTWlkRXhwYW5kZWQ6XG5cdFx0XHRcdGFkZFZpZXcodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0Q3VycmVudEJlZ2luQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgTGF5b3V0VHlwZS5NaWRDb2x1bW5GdWxsU2NyZWVuOlxuXHRcdFx0XHQvLyBJbiB0aGlzIGNhc2Ugd2UgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBtaWQgY29sdW1uIGZ1bGxzY3JlZW4gY29tZXMgZnJvbSBhIDIgb3IgYSAzIGNvbHVtbiBsYXlvdXRcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGNvbnN0IGxheW91dFdoZW5FeGl0RnVsbFNjcmVlbiA9XG5cdFx0XHRcdFx0XHR0aGlzLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuYWN0aW9uQnV0dG9uc0luZm8/Lm1pZENvbHVtbj8uZXhpdEZ1bGxTY3JlZW4gPz8gXCJcIjtcblx0XHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRCZWdpbkNvbHVtblBhZ2UoKSk7XG5cdFx0XHRcdFx0YWRkVmlldyh0aGlzLmdldEZjbENvbnRyb2woKS5nZXRDdXJyZW50TWlkQ29sdW1uUGFnZSgpKTtcblx0XHRcdFx0XHRpZiAobGF5b3V0V2hlbkV4aXRGdWxsU2NyZWVuLnN0YXJ0c1dpdGgoXCJUaHJlZUNvbHVtblwiKSkge1xuXHRcdFx0XHRcdFx0Ly8gV2UgY29tZSBmcm9tIGEgMyBjb2x1bW4gbGF5b3V0XG5cdFx0XHRcdFx0XHRhZGRWaWV3KHRoaXMuZ2V0RmNsQ29udHJvbCgpLmdldEN1cnJlbnRFbmRDb2x1bW5QYWdlKCkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0TG9nLmVycm9yKGBVbmhhbmRsZWQgc3dpdGNoIGNhc2UgZm9yICR7dGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCl9YCk7XG5cdFx0fVxuXHRcdHJldHVybiBhbGxWaWV3cztcblx0fVxuXG5cdGFzeW5jIG9uQ29udGFpbmVyUmVhZHkoKTogUHJvbWlzZTx2b2lkW10+IHtcblx0XHQvLyBSZXN0b3JlIHZpZXdzIGlmIG5lY2Nlc3NhcnkuXG5cdFx0Y29uc3QgYVZpZXdzID0gdGhpcy5fZ2V0QWxsVmlzaWJsZVZpZXdzKCk7XG5cdFx0Y29uc3QgYVJlc3RvcmVQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gYVZpZXdzLnJlZHVjZShmdW5jdGlvbiAoYVByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10sIG9UYXJnZXRWaWV3OiBWaWV3KSB7XG5cdFx0XHRpZiAob1RhcmdldFZpZXcuaXNBICYmIG9UYXJnZXRWaWV3LmlzQShcInNhcC51aS5jb3JlLm12Yy5WaWV3XCIpKSB7XG5cdFx0XHRcdGFQcm9taXNlcy5wdXNoKEtlZXBBbGl2ZUhlbHBlci5yZXN0b3JlVmlldyhvVGFyZ2V0VmlldyBhcyBGRVZpZXcpKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGFQcm9taXNlcztcblx0XHR9LCBbXSk7XG5cdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXN0b3JlUHJvbWlzZXMpO1xuXHR9XG5cblx0Z2V0UmlnaHRtb3N0Q29udGV4dCgpOiBDb250ZXh0IHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRSaWdodG1vc3RWaWV3KCk/LmdldEJpbmRpbmdDb250ZXh0KCkgPz8gdW5kZWZpbmVkO1xuXHR9XG5cblx0Z2V0UmlnaHRtb3N0VmlldygpOiBGRVZpZXcge1xuXHRcdHJldHVybiB0aGlzLl9nZXRBbGxWaWV3cygpLnBvcCgpIGFzIEZFVmlldztcblx0fVxuXG5cdGlzQ29udGV4dFVzZWRJblBhZ2VzKG9Db250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLmdldEZjbENvbnRyb2woKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRjb25zdCBhQWxsVmlzaWJsZVZpZXdzID0gdGhpcy5fZ2V0QWxsVmlld3MoKTtcblx0XHRmb3IgKGNvbnN0IHZpZXcgb2YgYUFsbFZpc2libGVWaWV3cykge1xuXHRcdFx0aWYgKHZpZXcpIHtcblx0XHRcdFx0aWYgKHZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKSA9PT0gb0NvbnRleHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gQSB2aWV3IGhhcyBiZWVuIGRlc3Ryb3llZCAtLT4gYXBwIGlzIGN1cnJlbnRseSBiZWluZyBkZXN0cm95ZWRcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRhc3luYyBfc2V0U2hlbGxNZW51VGl0bGUoXG5cdFx0b0FwcENvbXBvbmVudDogQXBwQ29tcG9uZW50LFxuXHRcdHNUaXRsZTogc3RyaW5nLFxuXHRcdHNBcHBUaXRsZTogc3RyaW5nLFxuXHRcdGJyb3dlclRpdGxlPzogVGl0bGVBZGRpdGlvbmFsSW5mb1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAodGhpcy5nZXRIZWxwZXIoKS5nZXRDdXJyZW50VUlTdGF0ZSgpLmlzRnVsbFNjcmVlbiAhPT0gdHJ1ZSkge1xuXHRcdFx0YXdhaXQgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkuc2V0VGl0bGUoc0FwcFRpdGxlLCBicm93ZXJUaXRsZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGF3YWl0IG9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpLnNldFRpdGxlKHNUaXRsZSwgYnJvd2VyVGl0bGUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgdG8gcmV0aWV2ZSB0aGUgRkNMIHN0YXRlIGZyb20gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcmV0dXJucyBUaGUgRkNMIHN0YXRlXG5cdCAqL1xuXHRhc3luYyBnZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCk6IFByb21pc2U8RkNMU3RhdGU+IHtcblx0XHRjb25zdCBzaGVsbFNlcnZpY2VzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdGxldCBmY2xTdGF0ZTtcblx0XHR0cnkge1xuXHRcdFx0ZmNsU3RhdGUgPSAoYXdhaXQgc2hlbGxTZXJ2aWNlcy5nZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGE/LihcIkZDTC1QZXJzb25hbGl6YXRpb25cIikpIGFzIEZDTFN0YXRlIHwgdW5kZWZpbmVkO1xuXHRcdH0gY2F0Y2ggKGVycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBnZXR0aW5nIHRoZSBGQ0wtUGVyc29uYWxpemF0aW9uIGRhdGEgZnJvbSB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2VcIiwgZXJyb3IgYXMgRXJyb3IpO1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0ZmNsU3RhdGUgPz8ge1xuXHRcdFx0XHRkZWZhdWx0TGF5b3V0czoge30sXG5cdFx0XHRcdGNvbHVtbnNEaXN0cmlidXRpb246IHtcblx0XHRcdFx0XHRkZXNrdG9wOiB7fSxcblx0XHRcdFx0XHR0YWJsZXQ6IHt9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB0byBzZXQgdGhlIEZDTCBzdGF0ZSBpbiB0aGUgcGVyc29uYWxpemF0aW9uIHNlcnZpY2UuXG5cdCAqIEBwYXJhbSBmY2xTdGF0ZSBUaGUgRkNMIHN0YXRlXG5cdCAqL1xuXHRzZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlOiBGQ0xTdGF0ZSk6IHZvaWQge1xuXHRcdGNvbnN0IHNoZWxsU2VydmljZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0c2hlbGxTZXJ2aWNlcy5zZXRBcHBsaWNhdGlvblBlcnNvbmFsaXphdGlvbkRhdGEoXCJGQ0wtUGVyc29uYWxpemF0aW9uXCIsIGZjbFN0YXRlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCByZXF1ZXN0cyB0aGUgRkNMIHN0YXRlIGZyb20gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlIGFuZCBzZXRzIHRoZSBtb2RlbCBhY2NvcmRpbmdseS5cblx0ICovXG5cdHByaXZhdGUgYXN5bmMgc2V0Q29sdW1uRGlzdHJpYnV0aW9uTW9kZWwoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5mY2xTdGF0ZUNhY2hlID0gdGhpcy5nZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKCk7XG5cdFx0Y29uc3QgY29sdW1uc0Rpc3RyaWJ1dGlvbiA9IChhd2FpdCB0aGlzLmZjbFN0YXRlQ2FjaGUpLmNvbHVtbnNEaXN0cmlidXRpb247XG5cdFx0aWYgKGNvbHVtbnNEaXN0cmlidXRpb24pIHtcblx0XHRcdGNvbnN0IG1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdG1vZGVsLnNldFByb3BlcnR5KFwiL0ZDTENvbHVtbnNEaXN0cmlidXRpb25cIiwgY29sdW1uc0Rpc3RyaWJ1dGlvbik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGNoYW5nZXMgdGhlIGNvbHVtbnMgZGlzdHJpYnV0aW9uIGluIHRoZSBGQ0wgc2V0dGluZ3MgZGlhbG9nLlxuXHQgKiBJdCB1cGRhdGVzIHRoZSBGQ0wgc3RhdGUgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlLlxuXHQgKiBAcGFyYW0gZXZlbnRcblx0ICovXG5cdHByaXZhdGUgYXN5bmMgb25Db2x1bW5zRGlzdHJpYnV0aW9uQ2hhbmdlKFxuXHRcdGV2ZW50OiBFdmVudDx7IG1lZGlhOiBcInRhYmxldFwiIHwgXCJkZXNrdG9wXCI7IGxheW91dDogTGF5b3V0VHlwZVR5cGU7IGNvbHVtbnNTaXplczogc3RyaW5nIH0+XG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHsgbWVkaWEsIGxheW91dCwgY29sdW1uc1NpemVzIH0gPSBldmVudC5nZXRQYXJhbWV0ZXJzKCk7XG5cdFx0Y29uc3QgbW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImludGVybmFsXCIpO1xuXHRcdG1vZGVsLnNldFByb3BlcnR5KGAvRkNMQ29sdW1uc0Rpc3RyaWJ1dGlvbi8ke21lZGlhfS8ke2xheW91dH1gLCBjb2x1bW5zU2l6ZXMpO1xuXHRcdGNvbnN0IGZjbFN0YXRlID0gYXdhaXQgdGhpcy5mY2xTdGF0ZUNhY2hlO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGZjbFN0YXRlLmRlZmF1bHRMYXlvdXRzW25iQ29sdW1uc0Rpc3BsYXllZF0gPSBsYXlvdXQ7XG5cdFx0XHRmY2xTdGF0ZS5jb2x1bW5zRGlzdHJpYnV0aW9uW21lZGlhXVtsYXlvdXRdID0gY29sdW1uc1NpemVzO1xuXHRcdFx0dGhpcy5zZXRGQ0xQZXJzb25hbGl6YXRpb25EYXRhKGZjbFN0YXRlKTtcblx0XHRcdHRoaXMuZmNsU3RhdGVDYWNoZSA9IFByb21pc2UucmVzb2x2ZShmY2xTdGF0ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGRpc3BsYXllZCBpbiB0aGUgRkNMIGJhc2VkIG9uIHRoZSBsYXlvdXQuXG5cdCAqIEBwYXJhbSBsYXlvdXQgIFRoZSBsYXlvdXRcblx0ICogQHJldHVybnMgVGhlIG51bWJlciBvZiBjb2x1bW5zIGRpc3BsYXllZFxuXHQgKi9cblx0cHJpdmF0ZSBnZXROdW1iZXJPZkNvbHVtbnNGcm9tTGF5b3V0KGxheW91dDogTGF5b3V0VHlwZVR5cGUpOiAxIHwgMiB8IDMgfCBudWxsIHtcblx0XHRjb25zdCBuYkNvbHVtbnNEaXNwbGF5ZWQgPSAvXihPbmV8VHdvfFRocmVlKUNvbHVtbi8uZXhlYyhsYXlvdXQpPy5bMV0gYXMgXCJPbmVcIiB8IFwiVHdvXCIgfCBcIlRocmVlXCI7XG5cdFx0c3dpdGNoIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGNhc2UgXCJPbmVcIjpcblx0XHRcdFx0cmV0dXJuIDE7XG5cdFx0XHRjYXNlIFwiVHdvXCI6XG5cdFx0XHRcdHJldHVybiAyO1xuXHRcdFx0Y2FzZSBcIlRocmVlXCI6XG5cdFx0XHRcdHJldHVybiAzO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIHJldHVybnMgdGhlIGxheW91dCBzdG9yZWQgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlIGJhc2VkIG9uIHRoZSBwcm9wb3NlZCBsYXlvdXQuXG5cdCAqIEBwYXJhbSBwcm9wb3NlZExheW91dFxuXHQgKiBAcmV0dXJucyBUaGUgRkNMIGxheW91dCBzdG9yZWQgaW4gdGhlIHBlcnNvbmFsaXphdGlvbiBzZXJ2aWNlXG5cdCAqL1xuXHRhc3luYyBnZXRTdG9yZWRMYXlvdXQocHJvcG9zZWRMYXlvdXQ/OiBMYXlvdXRUeXBlVHlwZSk6IFByb21pc2U8TGF5b3V0VHlwZVR5cGUgfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBsYXlvdXQgPSBwcm9wb3NlZExheW91dCA/PyAodGhpcy5nZXRGY2xDb250cm9sKCkuZ2V0TGF5b3V0KCkgYXMgTGF5b3V0VHlwZVR5cGUpO1xuXHRcdGNvbnN0IG5iQ29sdW1uc0Rpc3BsYXllZCA9IHRoaXMuZ2V0TnVtYmVyT2ZDb2x1bW5zRnJvbUxheW91dChsYXlvdXQpO1xuXHRcdGlmIChuYkNvbHVtbnNEaXNwbGF5ZWQpIHtcblx0XHRcdGNvbnN0IGRlZmF1bHRMYXlvdXRzID0gKGF3YWl0IHRoaXMuZmNsU3RhdGVDYWNoZSkuZGVmYXVsdExheW91dHM7XG5cdFx0XHRyZXR1cm4gZGVmYXVsdExheW91dHM/LltuYkNvbHVtbnNEaXNwbGF5ZWRdID8/IGxheW91dDtcblx0XHR9XG5cdFx0cmV0dXJuIGxheW91dDtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBGY2xDb250cm9sbGVyO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0VBaUNBLE1BQU1BLFVBQVUsR0FBR0MsUUFBUSxDQUFDRCxVQUFVO0VBMEJ0QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFSQSxJQVVNRSxhQUFhLElBQUFDLElBQUEsR0FEbEJDLGNBQWMsQ0FBQywwQkFBMEIsQ0FBQyxFQUFBQyxLQUFBLEdBRXpDQyxjQUFjLENBQ2RDLFNBQVMsQ0FBQ0MsUUFBUSxDQUFDO0lBQ2xCQyxxQkFBcUIsRUFBRSxTQUFBQSxDQUFBLEVBQVk7TUFDbEMsT0FBTyxLQUFLO0lBQ2IsQ0FBQztJQUNEQywyQkFBMkIsRUFBRSxTQUFBQSxDQUEyQkMsU0FBMEIsRUFBUTtNQUN4RixJQUFJLENBQUNDLE9BQU8sQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDLENBQW1CQyxZQUFZLENBQUMsQ0FBQyxDQUFDQyxPQUFPLENBQUMsVUFBVUMsVUFBZ0IsRUFBRTtRQUNwRyxNQUFNQyxVQUFV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
|
|
@@ -1032,14 +1032,21 @@ class FclController extends BaseController {
|
|
|
1032
1032
|
*/
|
|
1033
1033
|
async getFCLPersonalizationData(): Promise<FCLState> {
|
|
1034
1034
|
const shellServices = this.getAppComponent()?.getShellServices();
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1035
|
+
let fclState;
|
|
1036
|
+
try {
|
|
1037
|
+
fclState = (await shellServices.getApplicationPersonalizationData?.("FCL-Personalization")) as FCLState | undefined;
|
|
1038
|
+
} catch (error: unknown) {
|
|
1039
|
+
Log.error("Error while getting the FCL-Personalization data from the personalization service", error as Error);
|
|
1040
|
+
}
|
|
1041
|
+
return (
|
|
1042
|
+
fclState ?? {
|
|
1043
|
+
defaultLayouts: {},
|
|
1044
|
+
columnsDistribution: {
|
|
1045
|
+
desktop: {},
|
|
1046
|
+
tablet: {}
|
|
1047
|
+
}
|
|
1040
1048
|
}
|
|
1041
|
-
|
|
1042
|
-
return ((await shellServices.getApplicationPersonalizationData?.("FCL-Personalization")) ?? emptyFCLState) as FCLState;
|
|
1049
|
+
);
|
|
1043
1050
|
}
|
|
1044
1051
|
|
|
1045
1052
|
/**
|