@sapui5/sap.fe.core 1.136.7 → 1.136.9

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.
Files changed (56) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AppComponent.js +28 -16
  4. package/src/sap/fe/core/AppComponent.ts +36 -20
  5. package/src/sap/fe/core/AppStateHandler.js +6 -5
  6. package/src/sap/fe/core/AppStateHandler.ts +5 -5
  7. package/src/sap/fe/core/CommonUtils.js +22 -2
  8. package/src/sap/fe/core/CommonUtils.ts +22 -4
  9. package/src/sap/fe/core/ExtensionAPI.js +5 -2
  10. package/src/sap/fe/core/ExtensionAPI.ts +7 -1
  11. package/src/sap/fe/core/PageController.js +4 -4
  12. package/src/sap/fe/core/PageController.ts +3 -3
  13. package/src/sap/fe/core/TemplateComponent.js +3 -3
  14. package/src/sap/fe/core/TemplateComponent.ts +2 -2
  15. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +6 -2
  16. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +8 -1
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +159 -34
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +177 -39
  19. package/src/sap/fe/core/controllerextensions/SideEffects.js +7 -3
  20. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  21. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
  22. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
  23. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +5 -2
  24. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +3 -1
  25. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +13 -9
  26. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +13 -9
  27. package/src/sap/fe/core/converters/annotations/DataField.js +6 -2
  28. package/src/sap/fe/core/converters/annotations/DataField.ts +5 -1
  29. package/src/sap/fe/core/converters/controls/Common/Action.js +5 -5
  30. package/src/sap/fe/core/converters/controls/Common/Action.ts +7 -4
  31. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +6 -5
  32. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +5 -4
  33. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +2 -2
  34. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +1 -1
  35. package/src/sap/fe/core/fpm/manifest.json +1 -1
  36. package/src/sap/fe/core/helpers/DeleteHelper.js +8 -9
  37. package/src/sap/fe/core/helpers/DeleteHelper.ts +10 -8
  38. package/src/sap/fe/core/library.js +3 -7
  39. package/src/sap/fe/core/library.ts +5 -21
  40. package/src/sap/fe/core/messagebundle_da.properties +3 -3
  41. package/src/sap/fe/core/messagebundle_es.properties +1 -1
  42. package/src/sap/fe/core/messagebundle_fr.properties +9 -9
  43. package/src/sap/fe/core/messagebundle_hu.properties +1 -1
  44. package/src/sap/fe/core/messagebundle_id.properties +1 -1
  45. package/src/sap/fe/core/messagebundle_ja.properties +1 -1
  46. package/src/sap/fe/core/messagebundle_lv.properties +1 -1
  47. package/src/sap/fe/core/messagebundle_uk.properties +1 -1
  48. package/src/sap/fe/core/messagebundle_zh_CN.properties +1 -1
  49. package/src/sap/fe/core/rootView/RootViewBaseController.js +17 -17
  50. package/src/sap/fe/core/rootView/RootViewBaseController.ts +24 -29
  51. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
  52. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
  53. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  54. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  55. package/src/sap/fe/core/templating/UIFormatters.js +2 -2
  56. package/src/sap/fe/core/templating/UIFormatters.ts +1 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.136.7",
3
+ "version": "1.136.9",
4
4
  "description": "SAPUI5 Library sap.fe.core",
5
5
  "keywords": [
6
6
  "sapui5",
@@ -6,7 +6,7 @@
6
6
  SAP UI development toolkit for HTML5 (SAPUI5)
7
7
  (c) Copyright 2009-2021 SAP SE. All rights reserved
8
8
  </copyright>
9
- <version>1.136.7</version>
9
+ <version>1.136.9</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -148,6 +148,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
148
148
  _this.isExiting = false;
149
149
  _this.pageConfigurationChanges = {};
150
150
  _this.suspended = false;
151
+ _this.discardPromise = Promise.resolve();
151
152
  return _this;
152
153
  }
153
154
  _inheritsLoose(AppComponent, _UIComponent);
@@ -437,7 +438,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
437
438
 
438
439
  // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
439
440
  this.getRoutingService()?.beforeExit?.();
440
- this.unregisterStickySessionCallbacks();
441
+ this.unregisterCallbacks();
441
442
  _UIComponent.prototype.destroy.call(this, bSuppressInvalidate);
442
443
  if (oHeaders && oMainModel.oRequestor) {
443
444
  oMainModel.oRequestor.mHeaders = oHeaders;
@@ -504,6 +505,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
504
505
  };
505
506
  _proto.isSuspended = function isSuspended() {
506
507
  return this.suspended;
508
+ };
509
+ _proto.isAppComponentBusy = async function isAppComponentBusy() {
510
+ return this.discardPromise;
507
511
  }
508
512
 
509
513
  /**
@@ -547,33 +551,41 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
547
551
  /**
548
552
  * Registers the callbacks related to a sticky edit session.
549
553
  * @param dirtyStateProviderCallback
550
- * @param sessionTimeoutCallback
551
554
  * @param discardAfterNavigationCallback
555
+ * @param sessionTimeoutCallback
552
556
  */;
553
- _proto.registerStickySessionCallbacks = function registerStickySessionCallbacks(dirtyStateProviderCallback, sessionTimeoutCallback, discardAfterNavigationCallback) {
554
- this.stickyDirtyStateProviderCallback = dirtyStateProviderCallback;
557
+ _proto.registerCallbacks = function registerCallbacks(dirtyStateProviderCallback, discardAfterNavigationCallback, sessionTimeoutCallback) {
558
+ this.dirtyStateProviderCallback = dirtyStateProviderCallback;
555
559
  this.getShellServices().registerDirtyStateProvider(dirtyStateProviderCallback);
556
- this.stickySessionTimeoutCallback = sessionTimeoutCallback;
557
- this.getModel().attachSessionTimeout(sessionTimeoutCallback);
558
- this.stickyDiscardAfterNavigationCallback = discardAfterNavigationCallback;
559
- this.getRoutingService().attachRouteMatched({}, discardAfterNavigationCallback);
560
+ if (sessionTimeoutCallback) {
561
+ this.stickySessionTimeoutCallback = sessionTimeoutCallback;
562
+ this.getModel().attachSessionTimeout(sessionTimeoutCallback);
563
+ }
564
+ this.discardAfterNavigationCallback = discardAfterNavigationCallback;
565
+ this._routeMatchHandler = () => {
566
+ if (this.discardAfterNavigationCallback) {
567
+ this.discardPromise = this.discardAfterNavigationCallback();
568
+ }
569
+ };
570
+ this.getRoutingService().attachRouteMatched({}, this._routeMatchHandler);
560
571
  }
561
572
 
562
573
  /**
563
574
  * Unregisters the callbacks related to a sticky edit session.
564
575
  */;
565
- _proto.unregisterStickySessionCallbacks = function unregisterStickySessionCallbacks() {
566
- if (this.stickyDirtyStateProviderCallback) {
567
- this.getShellServices().deregisterDirtyStateProvider(this.stickyDirtyStateProviderCallback);
568
- this.stickyDirtyStateProviderCallback = undefined;
576
+ _proto.unregisterCallbacks = function unregisterCallbacks() {
577
+ if (this.dirtyStateProviderCallback) {
578
+ this.getShellServices().deregisterDirtyStateProvider(this.dirtyStateProviderCallback);
579
+ this.dirtyStateProviderCallback = undefined;
569
580
  }
570
581
  if (this.stickySessionTimeoutCallback && this.getModel()) {
571
582
  this.getModel().detachSessionTimeout(this.stickySessionTimeoutCallback);
572
583
  this.stickySessionTimeoutCallback = undefined;
573
584
  }
574
- if (this.stickyDiscardAfterNavigationCallback) {
575
- this.getRoutingService().detachRouteMatched(this.stickyDiscardAfterNavigationCallback);
576
- this.stickyDiscardAfterNavigationCallback = undefined;
585
+ if (this._routeMatchHandler) {
586
+ this.getRoutingService().detachRouteMatched(this._routeMatchHandler);
587
+ this._routeMatchHandler = undefined;
588
+ this.discardAfterNavigationCallback = undefined;
577
589
  }
578
590
  };
579
591
  return AppComponent;
@@ -587,4 +599,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
587
599
  }), _class2)) || _class);
588
600
  return AppComponent;
589
601
  }, false);
590
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0IiwiX3ZlcnNpb24iLCJzZXJ2aWNlcyIsInJlc291cmNlTW9kZWwiLCJmYWN0b3J5TmFtZSIsInN0YXJ0dXAiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJtb2RlbE5hbWUiLCJyb3V0aW5nU2VydmljZSIsInNoZWxsU2VydmljZXMiLCJTaGVsbFVJU2VydmljZSIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwidGVsZW1ldHJ5U2VydmljZSIsInZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIkNvbnRleHRTaGFyaW5nU2VydmljZSIsImlubGluZUVkaXRTZXJ2aWNlIiwicm9vdFZpZXciLCJ2aWV3TmFtZSIsImlkIiwicm91dGluZyIsImNvbnRyb2xJZCIsInJvdXRlckNsYXNzIiwidmlld1R5cGUiLCJjb250cm9sQWdncmVnYXRpb24iLCJjb250YWluZXJPcHRpb25zIiwicHJvcGFnYXRlTW9kZWwiLCJkZXNpZ250aW1lIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0FwcENvbXBvbmVudCIsIl9VSUNvbXBvbmVudCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX3N0YXJ0ZWRTZXJ2aWNlcyIsImlzQWRhcHRhdGlvbkVuYWJsZWQiLCJpc0V4aXRpbmciLCJwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJzdXNwZW5kZWQiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIl9pc0ZjbEVuYWJsZWQiLCJvTWFuaWZlc3RVSTUiLCJnZXRNYW5pZmVzdEVudHJ5Iiwic2V0QWRhcHRhdGlvbk1vZGUiLCJpc0FkYXB0YXRpb25Nb2RlIiwiaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzIiwiUHJvbWlzZSIsInJlc29sdmUiLCJjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbiIsInBhZ2VJZCIsInBhdGgiLCJ2YWx1ZSIsImNoYW5nZUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2V0Q2FwYWJpbGl0eSIsImNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsIkRlZXBsaW5rIiwiaW5pdCIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaGFzIiwic2V0VGltZW91dCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9pbml0aWFsaXplZEtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJpbml0aWFsaXplZCIsInByb21pc2UiLCJ1aU1vZGVsIiwiSlNPTk1vZGVsIiwiZWRpdE1vZGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJpc0VkaXRhYmxlIiwiZHJhZnRTdGF0dXMiLCJEcmFmdFN0YXR1cyIsIkNsZWFyIiwiYnVzeSIsImJ1c3lMb2NhbCIsInBhZ2VzIiwib0ludGVybmFsTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJNb2RlbEhlbHBlciIsImVuaGFuY2VVaUpTT05Nb2RlbCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsInNldE1vZGVsIiwiYkluaXRpYWxpemVSb3V0aW5nIiwidW5kZWZpbmVkIiwiUm91dGVyUHJveHkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJfb0RpYWdub3N0aWNzIiwiRGlhZ25vc3RpY3MiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsImVuaGFuY2VPRGF0YU1vZGVsIiwic2V0UmV0cnlBZnRlckhhbmRsZXIiLCJodHRwNTAzUmV0cnlIYW5kbGVyIiwiYmluZCIsImVudGl0eUNvbnRhaW5lciIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJhcHAiLCJkaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0IiwiY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbiIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJlcnJvciIsIkhUVFA1MDNIYW5kbGVyIiwiaGFuZGxlNTAzRGVsYXkiLCJnZXRSZXNvdXJjZU1vZGVsIiwiTG9nIiwiaW5mbyIsImluY2x1ZGVzIiwiRXJyb3IiLCJvblNlcnZpY2VzU3RhcnRlZCIsImFsbFNlcnZpY2VzIiwiYWxsU2V0dGxlZCIsImluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzIiwibWFwIiwiZm5Qcm9jZXNzIiwiZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uIiwidGhlbiIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJpbml0aWFsaXplIiwiZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJyZWdpc3RlclNoZWxsSG9vayIsImNhdGNoIiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsInRvU3RyaW5nIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImdldERpYWdub3N0aWNzIiwiYlN1cHByZXNzSW52YWxpZGF0ZSIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwidW5yZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsImdldENvbnRleHRTaGFyaW5nU2VydmljZSIsImdldFRlbGVtZXRyeVNlcnZpY2UiLCJnZXRJbmxpbmVFZGl0U2VydmljZSIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwib0NvbXBvbmVudERhdGEiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJyZXN0b3JlIiwic3RhcnRlZFNlcnZpY2UiLCJvblJlc3RvcmUiLCJ2aWV3U3RhdGUiLCJyZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIiwic3VzcGVuZCIsIm9uU3VzcGVuZCIsImlzU3VzcGVuZGVkIiwibmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlciIsIkJ1c3lMb2NrZXIiLCJpc0xvY2tlZCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJleGNlcHRpb24iLCJ1bmxvY2siLCJpc0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUVuYWJsZWQiLCJyZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAiLCJwdXNoIiwicmVnaXN0ZXJTdGlja3lTZXNzaW9uQ2FsbGJhY2tzIiwiZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJzZXNzaW9uVGltZW91dENhbGxiYWNrIiwiZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrIiwic3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2siLCJhdHRhY2hTZXNzaW9uVGltZW91dCIsInN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIlVJQ29tcG9uZW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEhUVFA1MDNIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0hUVFA1MDNIYW5kbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvSW5saW5lRWRpdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvQ3VycmVuY3lcIjtcbmltcG9ydCBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL1VuaXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5cbmNvbnN0IFN0YXJ0dXBNb2RlID0gbGlicmFyeS5TdGFydHVwTW9kZTtcbmNvbnN0IE5BVkNPTkYgPSB7XG5cdEZDTDoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLmYucm91dGluZy5Sb3V0ZXJcIlxuXHR9LFxuXHROQVZDT05UQUlORVI6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXJcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5tLnJvdXRpbmcuUm91dGVyXCJcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50RGF0YSA9IHtcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBTdGFydHVwUGFyYW1ldGVycztcblx0Ly9mZUVudmlyb25tZW50IGlzIG9iamVjdCB3aGljaCBpcyByZWNlaXZlZCBhcyBhIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZvciBNeSBJbmJveCBhcHBsaWNhdGlvbnMuXG5cdGZlRW52aXJvbm1lbnQ/OiB7XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldEludGVudCgpIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlbWFudGljT2JqZWN0IGFuZCBhY3Rpb24gYXMgc2VwYXJhdGUgcHJvcGVydHktdmFsdWUgZW50cmllcyB0aGF0IGFyZSB0aGVuIHVzZWQgdG8gdXBkYXRlIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uLlxuXHRcdGdldEludGVudDogRnVuY3Rpb247XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHkoKSB0aGF0IHJldHVybnMgYm9vbGVhbiB2YWx1ZXModHJ1ZSBvciBmYWxzZSkgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2hhcmUgYnV0dG9uLlxuXHRcdGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHk6IEZ1bmN0aW9uO1xuXHR9O1xufTtcbi8vIEtlZXAgYSByZWZlcmVuY2Ugc28gYXMgdG8ga2VlcCB0aGUgaW1wb3J0IGRlc3BpdGUgaXQgbm90IGJlaW5nIGRpcmVjdGx5IHVzZWRcbmNvbnN0IF9tUm91dGVyID0gUm91dGVyO1xuXG5leHBvcnQgdHlwZSBTdGFydHVwUGFyYW1ldGVycyA9IHtcblx0cHJlZmVycmVkTW9kZT86IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG4vKipcbiAqIE1haW4gY2xhc3MgZm9yIGNvbXBvbmVudHMgdXNlZCBmb3IgYW4gYXBwbGljYXRpb24gaW4gU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdXNpbmcgdGhlIHRlbXBsYXRlcyBhbmQgYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cyBzaG91bGQgY3JlYXRlIHRoZWlyIGFwcHMgYnkgZXh0ZW5kaW5nIHRoaXMgY29tcG9uZW50LlxuICogVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc2VydmljZXMgdGhhdCB5b3UgbmVlZCBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgdGVtcGxhdGVzIHRvIHdvcmsgcHJvcGVybHkgYXJlIHN0YXJ0ZWQuXG4gKlxuICogV2hlbiB5b3UgdXNlIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyB0aGUgYmFzZSBjb21wb25lbnQsIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGEgcm9vdFZpZXcuIFNBUCBGaW9yaSBlbGVtZW50cyBwcm92aWRlcyB0d28gb3B0aW9uczogPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIsIHtcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0X3ZlcnNpb246IFwiMi4wLjBcIixcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5saW5lRWRpdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5JbmxpbmVFZGl0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCBpbXBsZW1lbnRzIElBc3luY0NvbnRlbnRDcmVhdGlvbiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JQXN5bmNDb250ZW50Q3JlYXRpb24gPSB0cnVlO1xuXG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgX29EaWFnbm9zdGljcyE6IERpYWdub3N0aWNzO1xuXG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0cHJpdmF0ZSBfc3RhcnRlZFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2luaXRpYWxpemVkS2VlcGVyITogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRwcml2YXRlIGlzQWRhcHRhdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuXHRwdWJsaWMgaXNFeGl0aW5nID0gZmFsc2U7XG5cblx0cHVibGljIHBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0cHJpdmF0ZSBzdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzdXNwZW5kZWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2luZ2xldG9uIHRvIGhvbGQgcHJvY2Vzc2VzIGZyb20gbGlicmFyaWVzIHRoYXQgbmVlZCB0byBiZSBydW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHByaW9yIHRvIHN0YXJ0dXAuXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlczogKChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuXG5cdF9pc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKTtcblx0XHRyZXR1cm4gb01hbmlmZXN0VUk1Py5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTUztcblx0fVxuXG5cdHNldEFkYXB0YXRpb25Nb2RlKGlzQWRhcHRhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQgPSBpc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uLCB1c2UgdGhlIHtAbGluayBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb259IG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aG91dCBhbnkgdmFsdWUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIHByb2Nlc3Nlc1xuXHQgKi9cblx0YXN5bmMgaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGxpY2F0aW9uc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBpbiB0aGUgcGFnZSBzZXR0aW5ncyBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNoYW5nZVBhZ2VDb25maWd1cmF0aW9uKHBhZ2VJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSBjaGFuZ2VDb25maWd1cmF0aW9uKHRoaXMuZ2V0TWFuaWZlc3QoKSwgcGFnZUlkLCBwYXRoLCB2YWx1ZSwgdHJ1ZSwgdGhpcykgYXMgTWFuaWZlc3RDb250ZW50O1xuXHRcdGlmIChcblx0XHRcdHBhdGggPT09IFwiYXBwL2Rpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiAmJlxuXHRcdFx0KG1hbmlmZXN0Py5bXCJzYXAuZmVcIl0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KT8uW1wiYXBwXCJdPy5bXCJkaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCJdID09PSB2YWx1ZVxuXHRcdCkge1xuXHRcdFx0dGhpcy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLnNldENhcGFiaWxpdHkoXCJEaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCIsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIGFsbCByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuXHQgKi9cblx0Y2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1zdXBwb3J0XCIpKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAuZmUudG9vbHNcIiB9KTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH1cblx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnByb21pc2U7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uPE9EYXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VPRGF0YU1vZGVsKG9Nb2RlbCwgdGhpcyk7XG5cdFx0XHRvTW9kZWwuc2V0UmV0cnlBZnRlckhhbmRsZXIodGhpcy5odHRwNTAzUmV0cnlIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaHR0cDUwM1JldHJ5SGFuZGxlcihlcnJvcjogRXJyb3IgJiB7IHJldHJ5QWZ0ZXI/OiBEYXRlIH0pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBIVFRQNTAzSGFuZGxlci5oYW5kbGU1MDNEZWxheShlcnJvciwgdGhpcy5nZXRSb290Q29udHJvbCgpLCBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTU6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pOiB2b2lkIHtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5GQ0wuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldz8udmlld05hbWU/LmluY2x1ZGVzKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFx0YFxcbldyb25nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb3VwbGUgKHJvb3RWaWV3L3JvdXRlckNsYXNzKSBpbiBtYW5pZmVzdCBmaWxlLlxcbmAgK1xuXHRcdFx0XHRcdFx0YEN1cnJlbnQgdmFsdWVzIGFyZSA6KCR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfS8ke1xuXHRcdFx0XHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyB8fCBcIjxtaXNzaW5nIHJvdXRlciBjbGFzcz5cIlxuXHRcdFx0XHRcdFx0fSlcXG5gICtcblx0XHRcdFx0XHRcdGBFeHBlY3RlZCB2YWx1ZXMgYXJlIFxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfS8ke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfSlcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLkZDTC5WSUVXTkFNRX0vJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU30pYFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgb25TZXJ2aWNlc1N0YXJ0ZWQoYWxsU2VydmljZXM6IFNlcnZpY2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcyA9IGFsbFNlcnZpY2VzO1xuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuXHRcdFx0QXBwQ29tcG9uZW50Lmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLm1hcChhc3luYyAoZm5Qcm9jZXNzKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmblByb2Nlc3MuY2FsbChudWxsLCB0aGlzKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vcm91dGVyIG11c3QgYmUgc3RhcnRlZCBvbmNlIHRoZSByb290Y29udGFpbmVyIGlzIGluaXRpYWxpemVkXG5cdFx0Ly9zdGFydGluZyBvZiB0aGUgcm91dGVyXG5cdFx0Y29uc3QgZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXJcblx0XHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlcigpLmluaXRpYWxpemUoKTtcblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlclByb3h5KCkuaW5pdCh0aGlzLCB0aGlzLl9pc0ZjbEVuYWJsZWQoKSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpLnJlZ2lzdGVyU2hlbGxIb29rKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0FQUFNUQVJUX1RFQ0hOSUNBTF9JU1NVRVNcIiksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRSb290Q29udHJvbCgpLmF0dGFjaEFmdGVySW5pdChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnJlc29sdmUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBFcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyLnRvU3RyaW5nKCl9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBbXTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdFx0dGhpcy5jbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcygpO1xuXHR9XG5cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5pc0V4aXRpbmcgPSB0cnVlO1xuXG5cdFx0Ly8gTEVBS1MsIHdpdGggd29ya2Fyb3VuZCBmb3Igc29tZSBGbGV4IC8gTURDIGlzc3VlXG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZGVsZXRlICh3aW5kb3cgYXMgdW5rbm93bikuX3JvdXRpbmc7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmluZm8oZSBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdC8vV09SS0FST1VORCBmb3Igc3RpY2t5IGRpc2NhcmQgcmVxdWVzdCA6IGR1ZSB0byBhc3luYyBjYWxsYmFjaywgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIGV4aXRBcHBsaWNhdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgdGhlIFVJQ29tcG9uZW50LnByb3RvdHlwZS5kZXN0cm95XG5cdFx0Ly9zbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIFJlcXVlc3RvciBoZWFkZXJzIGFzIGl0IHdpbGwgYmUgZGVzdHJveVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBvTWFpbk1vZGVsID0gdGhpcy5vTW9kZWxzW3VuZGVmaW5lZF07XG5cdFx0bGV0IG9IZWFkZXJzO1xuXHRcdGlmIChvTWFpbk1vZGVsPy5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0Py4oKTtcblx0XHR0aGlzLnVucmVnaXN0ZXJTdGlja3lTZXNzaW9uQ2FsbGJhY2tzKCk7XG5cdFx0c3VwZXIuZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblxuXHRnZXRSb3V0aW5nU2VydmljZSgpOiBSb3V0aW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFJvdXRpbmdTZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNpZGVFZmZlY3RzU2VydmljZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH1cblxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKTogQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSgpOiBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UoKTogQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UoKTogQ29udGV4dFNoYXJpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29udGV4dFNoYXJpbmdTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VGVsZW1ldHJ5U2VydmljZSgpOiBUZWxlbWV0cnlTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgVGVsZW1ldHJ5U2VydmljZTtcblx0fVxuXG5cdGdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlKCk6IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U7XG5cdH1cblxuXHRnZXRJbmxpbmVFZGl0U2VydmljZSgpOiBJbmxpbmVFZGl0U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIElubGluZUVkaXRTZXJ2aWNlO1xuXHR9XG5cblx0YXN5bmMgZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTogUHJvbWlzZTxTdGFydHVwUGFyYW1ldGVycz4ge1xuXHRcdGNvbnN0IG9Db21wb25lbnREYXRhID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk7XG5cdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgob0NvbXBvbmVudERhdGEgJiYgb0NvbXBvbmVudERhdGEuc3RhcnR1cFBhcmFtZXRlcnMpIHx8IHt9KTtcblx0fVxuXG5cdHJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgcmVzdG9yZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25SZXN0b3JlPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25SZXN0b3JlKCk7XG5cblx0XHQvLyBSZXNldCBhbGwgdmFsdWVzIGluIHZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIHRvIGZhbHNlXG5cdFx0QXBwU3RhdGVIYW5kbGVyLnJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMoKTtcblxuXHRcdHRoaXMuc3VzcGVuZGVkID0gZmFsc2U7XG5cdH1cblxuXHRzdXNwZW5kKCk6IHZvaWQge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHN1c3BlbmRlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblN1c3BlbmQ/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblxuXHRcdHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTtcblx0fVxuXG5cdGlzU3VzcGVuZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN1c3BlbmRlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIGZ1bmN0aW9uIGlzIGEgcHVibGljIGFwaSB0aGF0IGFjdHMgYXMgYSB3cmFwcGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uIEl0IHBhc3NlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZ1cnRoZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMgRGVmaW5lcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIHdoaWNoIGlzIGZ1cnRoZXIgcGFzc2VkIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uXG5cdCAqL1xuXG5cdGFzeW5jIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIoc3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIUJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5nZXRNb2RlbChcInVpXCIpKSkge1xuXHRcdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJvdXRpbmdTZXJ2aWNlID0gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpO1xuXHRcdFx0XHRhd2FpdCByb3V0aW5nU2VydmljZS5fbWFuYWdlRGVlcExpbmtTdGFydHVwKHN0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChleGNlcHRpb246IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihleGNlcHRpb24gYXMgc3RyaW5nKTtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYWxsb3cgZGlzYWJsaW5nIHRoZSBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgaW50ZWdyYXRpb24gZm9yIHRoZSBPVlAgdXNlIGNhc2UuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBzZXJ2aWNlIGlzIGFjdGl2ZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICogQHBhcmFtIGZuUHJvY2VzcyBGdW5jdGlvbiB0aGF0IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9jZXNzLlxuXHQgKlxuXHQgKiBUaGUgcmVnaXN0ZXJlZCBwcm9jZXNzIGNhbiBiZSBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy5cblx0ICogSXQgc2hhbGwgYmUgY2FsbGVkIHdpdGggdGhlIEFwcENvbXBvbmVudCBpbnN0YW5jZSBhcyBhIHBhcmFtZXRlciBiZWZvcmUgc3RhcnR1cC5cblx0ICovXG5cdHN0YXRpYyByZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAoZm5Qcm9jZXNzOiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrXG5cdCAqIEBwYXJhbSBzZXNzaW9uVGltZW91dENhbGxiYWNrXG5cdCAqIEBwYXJhbSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2tcblx0ICovXG5cdHJlZ2lzdGVyU3RpY2t5U2Vzc2lvbkNhbGxiYWNrcyhcblx0XHRkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjazogRnVuY3Rpb24sXG5cdFx0c2Vzc2lvblRpbWVvdXRDYWxsYmFjazogRnVuY3Rpb24sXG5cdFx0ZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrOiBGdW5jdGlvblxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLnN0aWNreURpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spO1xuXG5cdFx0dGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrID0gc2Vzc2lvblRpbWVvdXRDYWxsYmFjaztcblx0XHR0aGlzLmdldE1vZGVsKCkuYXR0YWNoU2Vzc2lvblRpbWVvdXQoc2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cblx0XHR0aGlzLnN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayA9IGRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaztcblx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHt9LCBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXJzIHRoZSBjYWxsYmFja3MgcmVsYXRlZCB0byBhIHN0aWNreSBlZGl0IHNlc3Npb24uXG5cdCAqL1xuXHR1bnJlZ2lzdGVyU3RpY2t5U2Vzc2lvbkNhbGxiYWNrcygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjaykge1xuXHRcdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcih0aGlzLnN0aWNreURpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgJiYgdGhpcy5nZXRNb2RlbCgpKSB7XG5cdFx0XHR0aGlzLmdldE1vZGVsKCkuZGV0YWNoU2Vzc2lvblRpbWVvdXQodGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG5pbnRlcmZhY2UgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW47XG5cdGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0Q29udGVudDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuYXBwXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdF9nZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIiwgbWVyZ2VkOiBib29sZWFuKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSB8IHVuZGVmaW5lZDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmlvcmlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5maW9yaVwiXTtcblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBDb21wb25lbnREYXRhO1xuXHRnZXRSb290Q29udHJvbCgpOiB7XG5cdFx0Z2V0Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuXHR9ICYgVmlldztcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwQ0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsTUFBTUUsT0FBTyxHQUFHO0lBQ2ZDLEdBQUcsRUFBRTtNQUNKQyxRQUFRLEVBQUUsMEJBQTBCO01BQ3BDQyxzQkFBc0IsRUFBRSx5Q0FBeUM7TUFDakVDLFdBQVcsRUFBRTtJQUNkLENBQUM7SUFDREMsWUFBWSxFQUFFO01BQ2JILFFBQVEsRUFBRSxtQ0FBbUM7TUFDN0NDLHNCQUFzQixFQUFFLGtEQUFrRDtNQUMxRUMsV0FBVyxFQUFFO0lBQ2Q7RUFDRCxDQUFDO0VBWUQ7RUFDQSxNQUFNRSxRQUFRLEdBQUdDLE1BQU07RUFLdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWEEsSUF5R01DLFlBQVksSUFBQUMsSUFBQSxHQTdGakJDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUMzQ0MsTUFBTSxFQUFFO01BQ1BDLFNBQVMsRUFBRTtJQUNaLENBQUM7SUFDREMsUUFBUSxFQUFFO01BQ1RDLFFBQVEsRUFBRSxPQUFPO01BQ2pCLFNBQVMsRUFBRTtRQUNWQyxRQUFRLEVBQUU7VUFDVEMsYUFBYSxFQUFFO1lBQ2RDLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeERDLE9BQU8sRUFBRSxTQUFTO1lBQ2xCQyxRQUFRLEVBQUU7Y0FDVEMsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7Y0FDdENDLFNBQVMsRUFBRTtZQUNaO1VBQ0QsQ0FBQztVQUNEQyxjQUFjLEVBQUU7WUFDZkwsV0FBVyxFQUFFLHFDQUFxQztZQUNsREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNESyxhQUFhLEVBQUU7WUFDZE4sV0FBVyxFQUFFLG9DQUFvQztZQUNqREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNETSxjQUFjLEVBQUU7WUFDZlAsV0FBVyxFQUFFO1VBQ2QsQ0FBQztVQUNEUSxpQkFBaUIsRUFBRTtZQUNsQlIsV0FBVyxFQUFFLHdDQUF3QztZQUNyREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEUSx1QkFBdUIsRUFBRTtZQUN4QlQsV0FBVyxFQUFFLHlDQUF5QztZQUN0REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEUyxrQkFBa0IsRUFBRTtZQUNuQlYsV0FBVyxFQUFFLHlDQUF5QztZQUN0REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEVSxxQkFBcUIsRUFBRTtZQUN0QlgsV0FBVyxFQUFFLDRDQUE0QztZQUN6REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEVywyQkFBMkIsRUFBRTtZQUM1QlosV0FBVyxFQUFFLGtEQUFrRDtZQUMvREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEWSx5QkFBeUIsRUFBRTtZQUMxQmIsV0FBVyxFQUFFLGdEQUFnRDtZQUM3REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEYSxnQkFBZ0IsRUFBRTtZQUNqQmQsV0FBVyxFQUFFLHVDQUF1QztZQUNwREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEYyx1QkFBdUIsRUFBRTtZQUN4QmYsV0FBVyxFQUFFLDhDQUE4QztZQUMzREMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEZSx5QkFBeUIsRUFBRTtZQUMxQmhCLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0RDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRGdCLHFCQUFxQixFQUFFO1lBQ3RCakIsV0FBVyxFQUFFLDRDQUE0QztZQUN6REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEaUIsaUJBQWlCLEVBQUU7WUFDbEJsQixXQUFXLEVBQUUsd0NBQXdDO1lBQ3JEQyxPQUFPLEVBQUU7VUFDVjtRQUNELENBQUM7UUFDRGtCLFFBQVEsRUFBRTtVQUNUQyxRQUFRLEVBQUVyQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUTtVQUN2Q29DLEVBQUUsRUFBRTtRQUNMLENBQUM7UUFDREMsT0FBTyxFQUFFO1VBQ1I1QixNQUFNLEVBQUU7WUFDUDZCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCQyxXQUFXLEVBQUV6QyxPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVztZQUM3Q3NDLFFBQVEsRUFBRSxLQUFLO1lBQ2ZDLGtCQUFrQixFQUFFLE9BQU87WUFDM0JDLGdCQUFnQixFQUFFO2NBQ2pCQyxjQUFjLEVBQUU7WUFDakI7VUFDRDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0RDLFVBQVUsRUFBRSxnREFBZ0Q7SUFFNUQvQyxPQUFPLEVBQUU7RUFDVixDQUFDLENBQUMsRUFBQWdELEtBQUEsR0FFQUMsa0JBQWtCLENBQUMsbUNBQW1DLENBQUMsRUFBQXZDLElBQUEsQ0FBQXdDLE1BQUEsSUFBQUMsT0FBQSxJQUFBQyxhQUFBLDBCQUFBQyxZQUFBO0lBQUEsU0FBQTVDLGFBQUE7TUFBQSxJQUFBNkMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsWUFBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSxxREFBQVMsV0FBQSxFQUFBVCxLQUFBO01BQUFBLEtBQUEsQ0FlaERVLFdBQVcsR0FBV2pFLFdBQVcsQ0FBQ2tFLE1BQU07TUFBQVgsS0FBQSxDQUV4Q1ksZ0JBQWdCLEdBQXVCLEVBQUU7TUFBQVosS0FBQSxDQU16Q2EsbUJBQW1CLEdBQUcsS0FBSztNQUFBYixLQUFBLENBRTVCYyxTQUFTLEdBQUcsS0FBSztNQUFBZCxLQUFBLENBRWpCZSx3QkFBd0IsR0FBNkIsQ0FBQyxDQUFDO01BQUFmLEtBQUEsQ0FRdERnQixTQUFTLEdBQUcsS0FBSztNQUFBLE9BQUFoQixLQUFBO0lBQUE7SUFBQWlCLGNBQUEsQ0FBQTlELFlBQUEsRUFBQTRDLFlBQUE7SUFBQSxJQUFBbUIsTUFBQSxHQUFBL0QsWUFBQSxDQUFBZ0UsU0FBQTtJQUFBRCxNQUFBLENBT3pCRSxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUFZO01BQ3hCLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztNQUNyRCxPQUFPRCxZQUFZLEVBQUVuQyxPQUFPLEVBQUU1QixNQUFNLEVBQUU4QixXQUFXLEtBQUt6QyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBVztJQUM5RSxDQUFDO0lBQUFtRSxNQUFBLENBRURLLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNWLG1CQUE0QixFQUFRO01BQ3JELElBQUksQ0FBQ0EsbUJBQW1CLEdBQUdBLG1CQUFtQjtJQUMvQyxDQUFDO0lBQUFLLE1BQUEsQ0FFRE0sZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFZO01BQzNCLE9BQU8sSUFBSSxDQUFDWCxtQkFBbUI7SUFDaEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFLLE1BQUEsQ0FRTU8sd0JBQXdCLEdBQTlCLGVBQU1BLHdCQUF3QkEsQ0FBQSxFQUFrQjtNQUMvQztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQVQsTUFBQSxDQVNBVSx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFDQyxNQUFjLEVBQUVDLElBQVksRUFBRUMsS0FBYyxFQUFRO01BQzNFLE1BQU12RSxRQUFRLEdBQUd3RSxtQkFBbUIsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUVKLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBb0I7TUFDNUcsSUFDQ0QsSUFBSSxLQUFLLDRCQUE0QixJQUNwQ3RFLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBK0MsS0FBSyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsS0FBS3VFLEtBQUssRUFDL0c7UUFDRCxJQUFJLENBQUNHLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLHdCQUF3QixFQUFFSixLQUFLLENBQUM7TUFDakY7SUFDRDs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBYixNQUFBLENBR0FrQiw2QkFBNkIsR0FBN0IsU0FBQUEsNkJBQTZCQSxDQUFBLEVBQVM7TUFDckMsSUFBSSxDQUFDckIsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0lBQ25DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBRyxNQUFBLENBS0FtQixjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFnQjtNQUM3QixPQUFPLElBQUksQ0FBQ0MsYUFBYTtJQUMxQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXBCLE1BQUEsQ0FLQXFCLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUEsRUFBb0I7TUFDckMsT0FBTyxJQUFJLENBQUNDLGlCQUFpQjtJQUM5Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXRCLE1BQUEsQ0FLQXVCLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUEsRUFBMkI7TUFDL0MsT0FBTyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekIsTUFBQSxDQUtBMEIsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUF3QztNQUN2RCxPQUFPLElBQUksQ0FBQ0YsY0FBYyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBM0IsTUFBQSxDQUlBNEIsY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUEsRUFBVztNQUN4QixPQUFPLElBQUksQ0FBQ3BDLFdBQVc7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBUSxNQUFBLENBSUE2QixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQVM7TUFDNUIsSUFBSSxDQUFDckMsV0FBVyxHQUFHakUsV0FBVyxDQUFDdUcsTUFBTTtJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUE5QixNQUFBLENBSUErQix3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFBLEVBQVM7TUFDaEMsSUFBSSxDQUFDdkMsV0FBVyxHQUFHakUsV0FBVyxDQUFDeUcsVUFBVTtJQUMxQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFoQyxNQUFBLENBSUFpQyxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFBLEVBQVM7TUFDOUIsSUFBSSxDQUFDekMsV0FBVyxHQUFHakUsV0FBVyxDQUFDMkcsUUFBUTtJQUN4QyxDQUFDO0lBQUFsQyxNQUFBLENBRURtQyxJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osTUFBTUMsTUFBTSxHQUFHLElBQUlDLGVBQWUsQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLE1BQU0sQ0FBQztNQUMxRCxJQUFJSixNQUFNLENBQUNLLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3ZDQyxVQUFVLENBQUMsWUFBWTtVQUN0QkMsT0FBTyxDQUFDQyxJQUFJLENBQUM7WUFBRUMsSUFBSSxFQUFFO1VBQWUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDVDtNQUNBLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsSUFBSUMsYUFBYSxDQUFPLENBQUM7TUFDbkQsSUFBSSxDQUFDQyxXQUFXLEdBQUcsSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0csT0FBTztNQUNsRCxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsU0FBUyxDQUFDO1FBQzdCQyxRQUFRLEVBQUU1SCxPQUFPLENBQUM2SCxRQUFRLENBQUNDLE9BQU87UUFDbENDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCQyxXQUFXLEVBQUVoSSxPQUFPLENBQUNpSSxXQUFXLENBQUNDLEtBQUs7UUFDdENDLElBQUksRUFBRSxLQUFLO1FBQ1hDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYkMsS0FBSyxFQUFFLENBQUM7TUFDVCxDQUFDLENBQUM7TUFDRixNQUFNQyxjQUFjLEdBQUcsSUFBSVgsU0FBUyxDQUFDO1FBQ3BDVSxLQUFLLEVBQUUsQ0FBQztNQUNULENBQUMsQ0FBQztNQUNGO01BQ0FYLE9BQU8sQ0FBQ2EscUJBQXFCLENBQUMsUUFBUSxDQUFDO01BQ3ZDO01BQ0FDLFdBQVcsQ0FBQ0Msa0JBQWtCLENBQUNmLE9BQU8sRUFBRTFILE9BQU8sQ0FBQztNQUNoRHdJLFdBQVcsQ0FBQ0Usd0JBQXdCLENBQUNKLGNBQWMsQ0FBQztNQUVwRCxJQUFJLENBQUNLLFFBQVEsQ0FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUM7TUFDNUIsSUFBSSxDQUFDaUIsUUFBUSxDQUFDTCxjQUFjLEVBQUUsVUFBVSxDQUFDO01BRXpDLElBQUksQ0FBQ00sa0JBQWtCLEdBQUcsSUFBSSxDQUFDQSxrQkFBa0IsS0FBS0MsU0FBUyxHQUFHLElBQUksQ0FBQ0Qsa0JBQWtCLEdBQUcsSUFBSTtNQUNoRyxJQUFJLENBQUNoRCxhQUFhLEdBQUcsSUFBSWtELFdBQVcsQ0FBQyxDQUFDO01BQ3RDLElBQUksQ0FBQ2hELGlCQUFpQixHQUFHLElBQUlpRCxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ2xELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDO01BRXRDLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDO01BQzlCLElBQUlELE1BQU0sRUFBRUUsR0FBRyxHQUFlLGtDQUFrQyxDQUFDLEVBQUU7UUFDbEVaLFdBQVcsQ0FBQ2EsaUJBQWlCLENBQUNILE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDM0NBLE1BQU0sQ0FBQ0ksb0JBQW9CLENBQUMsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQ0MsZUFBZSxHQUFHUCxNQUFNLENBQUNRLFlBQVksQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztNQUNqRixDQUFDLE1BQU07UUFDTjtRQUNBLElBQUksQ0FBQ0YsZUFBZSxHQUFHekUsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QztNQUVBLElBQUksSUFBSSxDQUFDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRWdGLEdBQUcsRUFBRUMseUJBQXlCLEVBQUU7UUFDcEU7UUFDQTtRQUNBO1FBQ0FyQixXQUFXLENBQUNxQix5QkFBeUIsR0FBRyxJQUFJO01BQzdDO01BRUEsTUFBTWxGLFlBQVksR0FBRyxJQUFJLENBQUNZLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO01BQ2xELElBQUksQ0FBQ3VFLHlCQUF5QixDQUFDbkYsWUFBWSxDQUFDOztNQUU1QztNQUNBOztNQUVBdEIsWUFBQSxDQUFBb0IsU0FBQSxDQUFNa0MsSUFBSSxDQUFBOUMsSUFBQTtNQUNWcEQsWUFBWSxDQUFDc0osV0FBVyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUk7SUFDOUMsQ0FBQztJQUFBeEYsTUFBQSxDQUVhK0UsbUJBQW1CLEdBQWpDLGVBQWNBLG1CQUFtQkEsQ0FBQ1UsS0FBb0MsRUFBc0I7TUFDM0YsT0FBT0MsY0FBYyxDQUFDQyxjQUFjLENBQUNGLEtBQUssRUFBRSxJQUFJLENBQUNqRSxjQUFjLENBQUMsQ0FBQyxFQUFFb0UsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUFBNUYsTUFBQSxDQUVPc0YseUJBQXlCLEdBQWpDLFNBQVFBLHlCQUF5QkEsQ0FBQ25GLFlBQXdDLEVBQVE7TUFDakYsSUFBSUEsWUFBWSxFQUFFdEMsUUFBUSxFQUFFQyxRQUFRLEVBQUU7UUFDckM7O1FBRUE7UUFDQSxJQUFJcUMsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLEtBQUtyQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0Usc0JBQXNCLEVBQUU7VUFDMUV1RSxZQUFZLENBQUN0QyxRQUFRLENBQUNDLFFBQVEsR0FBR3JDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRO1FBQ3RELENBQUMsTUFBTSxJQUFJd0UsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLEtBQUtyQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0Ysc0JBQXNCLEVBQUU7VUFDMUZ1RSxZQUFZLENBQUN0QyxRQUFRLENBQUNDLFFBQVEsR0FBR3JDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRO1FBQy9EO1FBRUEsSUFDQ3dFLFlBQVksQ0FBQ3RDLFFBQVEsQ0FBQ0MsUUFBUSxLQUFLckMsT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsSUFDdkR3RSxZQUFZLENBQUNuQyxPQUFPLEVBQUU1QixNQUFNLEVBQUU4QixXQUFXLEtBQUt6QyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBVyxFQUNwRTtVQUNEZ0ssR0FBRyxDQUFDQyxJQUFJLENBQUMsbUJBQW1CckssT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEscUJBQXFCRixPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBVyxHQUFHLENBQUM7UUFDakcsQ0FBQyxNQUFNLElBQ05zRSxZQUFZLENBQUN0QyxRQUFRLENBQUNDLFFBQVEsS0FBS3JDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRLElBQ2hFd0UsWUFBWSxDQUFDbkMsT0FBTyxFQUFFNUIsTUFBTSxFQUFFOEIsV0FBVyxLQUFLekMsT0FBTyxDQUFDSyxZQUFZLENBQUNELFdBQVcsRUFDN0U7VUFDRGdLLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLG1CQUFtQnJLLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRLHFCQUFxQkYsT0FBTyxDQUFDSyxZQUFZLENBQUNELFdBQVcsR0FBRyxDQUFDO1FBQ25ILENBQUMsTUFBTSxJQUFJc0UsWUFBWSxDQUFDdEMsUUFBUSxFQUFFQyxRQUFRLEVBQUVpSSxRQUFRLENBQUMsc0JBQXNCLENBQUMsRUFBRTtVQUM3RSxNQUFNQyxLQUFLLENBQ1YsaUZBQWlGLEdBQ2hGLHdCQUF3QjdGLFlBQVksQ0FBQ3RDLFFBQVEsQ0FBQ0MsUUFBUSxJQUNyRHFDLFlBQVksQ0FBQ25DLE9BQU8sRUFBRTVCLE1BQU0sRUFBRThCLFdBQVcsSUFBSSx3QkFBd0IsS0FDakUsR0FDTCx3QkFBd0IsR0FDeEIsU0FBU3pDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDSCxRQUFRLElBQUlGLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRCxXQUFXLEtBQUssR0FDL0UsU0FBU0osT0FBTyxDQUFDQyxHQUFHLENBQUNDLFFBQVEsSUFBSUYsT0FBTyxDQUFDQyxHQUFHLENBQUNHLFdBQVcsR0FDMUQsQ0FBQztRQUNGLENBQUMsTUFBTTtVQUNOZ0ssR0FBRyxDQUFDQyxJQUFJLENBQUMsbUJBQW1CM0YsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLHFCQUFxQnJDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRCxXQUFXLEdBQUcsQ0FBQztRQUNwSDtNQUNEO0lBQ0QsQ0FBQztJQUFBbUUsTUFBQSxDQUVLaUcsaUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FBQ0MsV0FBK0IsRUFBaUI7TUFDdkUsSUFBSSxDQUFDeEcsZ0JBQWdCLEdBQUd3RyxXQUFXO01BQ25DLE1BQU0sSUFBSSxDQUFDM0Ysd0JBQXdCLENBQUMsQ0FBQztNQUNyQyxNQUFNQyxPQUFPLENBQUMyRixVQUFVLENBQ3ZCbEssWUFBWSxDQUFDbUssMEJBQTBCLENBQUNDLEdBQUcsQ0FBQyxNQUFPQyxTQUFTLElBQUs7UUFDaEUsT0FBT0EsU0FBUyxDQUFDakgsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUM7TUFDbEMsQ0FBQyxDQUNGLENBQUM7O01BRUQ7TUFDQTtNQUNBLE1BQU1rSCw4QkFBOEIsR0FBR0EsQ0FBQSxLQUFZO1FBQ2xELElBQUksQ0FBQ3RCLGVBQWUsQ0FDbEJ1QixJQUFJLENBQUMsWUFBWTtVQUNqQixJQUFJLElBQUksQ0FBQ2pGLHFCQUFxQixDQUFDLENBQUMsQ0FBQ2tGLG1CQUFtQixFQUFFO1lBQ3JELElBQUksQ0FBQ2xGLHFCQUFxQixDQUFDLENBQUMsQ0FBQ2tGLG1CQUFtQixDQUFDLENBQUM7VUFDbkQ7VUFDQSxJQUFJLENBQUNDLFNBQVMsQ0FBQyxDQUFDLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1VBQzdCLElBQUksQ0FBQ3hGLGNBQWMsQ0FBQyxDQUFDLENBQUNnQixJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQ2pDLGFBQWEsQ0FBQyxDQUFDLENBQUM7VUFFdEQsT0FBTyxJQUFJLENBQUMwRywwQkFBMEIsQ0FBQyxDQUFDLENBQUNDLGlCQUFpQixDQUFDLENBQUM7UUFDN0QsQ0FBQyxDQUFDLENBQ0RDLEtBQUssQ0FBRXJCLEtBQVksSUFBSztVQUN4QixNQUFNc0IsZUFBZSxHQUFHcEUsT0FBTyxDQUFDcUUsb0JBQW9CLENBQUMsYUFBYSxDQUFFO1VBRXBFLElBQUksQ0FBQ3pGLHFCQUFxQixDQUFDLENBQUMsQ0FBQzBGLGdCQUFnQixDQUM1Q0YsZUFBZSxDQUFDRyxPQUFPLENBQUMsaURBQWlELENBQUMsRUFDMUU7WUFDQ0MsS0FBSyxFQUFFSixlQUFlLENBQUNHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztZQUN0REUsV0FBVyxFQUFFM0IsS0FBSyxDQUFDNEI7VUFDcEIsQ0FDRCxDQUFDO1FBQ0YsQ0FBQyxDQUFDO01BQ0osQ0FBQztNQUVELElBQUksSUFBSSxDQUFDakQsa0JBQWtCLEVBQUU7UUFDNUIsT0FBTyxJQUFJLENBQUNrRCxpQkFBaUIsQ0FBQyxDQUFDLENBQzdCQyxpQkFBaUIsQ0FBQyxDQUFDLENBQ25CZixJQUFJLENBQUMsTUFBTTtVQUNYLElBQUksSUFBSSxDQUFDakYscUJBQXFCLENBQUMsQ0FBQyxFQUFFO1lBQ2pDZ0YsOEJBQThCLENBQUMsQ0FBQztVQUNqQyxDQUFDLE1BQU07WUFDTixJQUFJLENBQUMvRSxjQUFjLENBQUMsQ0FBQyxDQUFDZ0csZUFBZSxDQUFDLFlBQVk7Y0FDakRqQiw4QkFBOEIsQ0FBQyxDQUFDO1lBQ2pDLENBQUMsQ0FBQztVQUNIO1VBQ0EsSUFBSSxDQUFDekQsa0JBQWtCLENBQUNyQyxPQUFPLENBQUMsQ0FBQztVQUNqQztRQUNELENBQUMsQ0FBQyxDQUNEcUcsS0FBSyxDQUFDLFVBQVVXLEdBQVUsRUFBRTtVQUM1QjVCLEdBQUcsQ0FBQ0osS0FBSyxDQUFDLHFDQUFxQ2dDLEdBQUcsQ0FBQ0MsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLENBQUMsQ0FBQztNQUNKLENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQzVFLGtCQUFrQixDQUFDckMsT0FBTyxDQUFDLENBQUM7TUFDbEM7SUFDRCxDQUFDO0lBQUFULE1BQUEsQ0FFRDJILElBQUksR0FBSixTQUFBQSxJQUFJQSxDQUFBLEVBQVM7TUFDWixJQUFJLENBQUNqSSxnQkFBZ0IsR0FBRyxFQUFFO01BQzFCLElBQUksQ0FBQzRCLGlCQUFpQixDQUFDc0csT0FBTyxDQUFDLENBQUM7TUFDaEMsSUFBSSxDQUFDeEcsYUFBYSxDQUFDd0csT0FBTyxDQUFDLENBQUM7TUFDNUI7TUFDQTtNQUNBLE9BQU8sSUFBSSxDQUFDdEcsaUJBQWlCO01BQzdCO01BQ0E7TUFDQSxPQUFPLElBQUksQ0FBQ0YsYUFBYTtNQUN6QnlHLG9CQUFvQixDQUFDLElBQUksQ0FBQzNDLFlBQVksQ0FBQyxDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDUCxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUNpRCxPQUFPLENBQUMsQ0FBQztNQUM3QixJQUFJLENBQUMxRyw2QkFBNkIsQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFBQWxCLE1BQUEsQ0FFRGtGLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFBLEVBQW1CO01BQzlCLE9BQU8sSUFBSSxDQUFDUCxRQUFRLENBQUMsQ0FBQyxDQUFDTyxZQUFZLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQUFsRixNQUFBLENBRUQ4SCxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFnQjtNQUM3QixPQUFPLElBQUksQ0FBQ3RELGFBQWE7SUFDMUIsQ0FBQztJQUFBeEUsTUFBQSxDQUVENEgsT0FBTyxHQUFQLFNBQUFBLE9BQU9BLENBQUNHLG1CQUE2QixFQUFRO01BQzVDLElBQUksQ0FBQ25JLFNBQVMsR0FBRyxJQUFJOztNQUVyQjtNQUNBLElBQUk7UUFDSCxPQUFPM0QsWUFBWSxDQUFDc0osV0FBVyxDQUFDLElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsQ0FBQzs7UUFFN0M7UUFDQTtRQUNBLE9BQVFsRCxNQUFNLENBQWEwRixRQUFRO01BQ3BDLENBQUMsQ0FBQyxPQUFPQyxDQUFDLEVBQUU7UUFDWHBDLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDbUMsQ0FBVyxDQUFDO01BQ3RCOztNQUVBO01BQ0E7O01BRUE7TUFDQTtNQUNBLE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUNDLE9BQU8sQ0FBQzlELFNBQVMsQ0FBQztNQUMxQyxJQUFJK0QsUUFBUTtNQUNaLElBQUlGLFVBQVUsRUFBRUcsVUFBVSxFQUFFO1FBQzNCRCxRQUFRLEdBQUdFLE1BQU0sQ0FBQ0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFTCxVQUFVLENBQUNHLFVBQVUsQ0FBQ0csUUFBUSxDQUFDO01BQzdEOztNQUVBO01BQ0EsSUFBSSxDQUFDbEIsaUJBQWlCLENBQUMsQ0FBQyxFQUFFbUIsVUFBVSxHQUFHLENBQUM7TUFDeEMsSUFBSSxDQUFDQyxnQ0FBZ0MsQ0FBQyxDQUFDO01BQ3ZDN0osWUFBQSxDQUFBb0IsU0FBQSxDQUFNMkgsT0FBTyxDQUFBdkksSUFBQSxPQUFDMEksbUJBQW1CO01BQ2pDLElBQUlLLFFBQVEsSUFBSUYsVUFBVSxDQUFDRyxVQUFVLEVBQUU7UUFDdENILFVBQVUsQ0FBQ0csVUFBVSxDQUFDRyxRQUFRLEdBQUdKLFFBQVE7TUFDMUM7SUFDRCxDQUFDO0lBQUFwSSxNQUFBLENBRURzSCxpQkFBaUIsR0FBakIsU0FBQUEsaUJBQWlCQSxDQUFBLEVBQW1CO01BQ25DLE9BQU8sQ0FBQyxDQUFDLENBQW1CLENBQUM7SUFDOUIsQ0FBQztJQUFBdEgsTUFBQSxDQUVEMkksZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFtQjtNQUNsQyxPQUFPLENBQUMsQ0FBQyxDQUFtQixDQUFDO0lBQzlCLENBQUM7SUFBQTNJLE1BQUEsQ0FFRDRJLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBc0I7TUFDekMsT0FBTyxDQUFDLENBQUMsQ0FBc0IsQ0FBQztJQUNqQyxDQUFDO0lBQUE1SSxNQUFBLENBRUQ2SSxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFBLEVBQXVCO01BQzNDLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBN0ksTUFBQSxDQUVEZ0IsMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQSxFQUFtQztNQUM1RCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQWhCLE1BQUEsQ0FFRDhJLDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQUEsRUFBZ0M7TUFDN0QsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUE5SSxNQUFBLENBRUQrSSw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFBLEVBQThCO01BQ3pELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBL0ksTUFBQSxDQUVEZ0osNEJBQTRCLEdBQTVCLFNBQUFBLDRCQUE0QkEsQ0FBQSxFQUE4QjtNQUN6RCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQWhKLE1BQUEsQ0FFRGlKLHdCQUF3QixHQUF4QixTQUFBQSx3QkFBd0JBLENBQUEsRUFBMEI7TUFDakQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUFqSixNQUFBLENBRURrSixtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFBLEVBQXFCO01BQ3ZDLE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBbEosTUFBQSxDQUVENEcsMEJBQTBCLEdBQTFCLFNBQUFBLDBCQUEwQkEsQ0FBQSxFQUE0QjtNQUNyRCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQTVHLE1BQUEsQ0FFRG1KLG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUEsRUFBc0I7TUFDekMsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUFuSixNQUFBLENBRUtvSixvQkFBb0IsR0FBMUIsZUFBTUEsb0JBQW9CQSxDQUFBLEVBQStCO01BQ3hELE1BQU1DLGNBQWMsR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUM7TUFDOUMsT0FBTzlJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFFNEksY0FBYyxJQUFJQSxjQUFjLENBQUNFLGlCQUFpQixJQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFBQXZKLE1BQUEsQ0FFRHdKLE9BQU8sR0FBUCxTQUFBQSxPQUFPQSxDQUFBLEVBQVM7TUFDZjtNQUNBLEtBQUssTUFBTUMsY0FBYyxJQUFJLElBQUksQ0FBQy9KLGdCQUFnQixFQUFFO1FBQ25EK0osY0FBYyxDQUFDQyxTQUFTLEdBQUcsQ0FBQztNQUM3QjtNQUNBLElBQUksQ0FBQ25JLHFCQUFxQixDQUFDLENBQUMsQ0FBQ29JLFNBQVMsQ0FBQ0QsU0FBUyxDQUFDLENBQUM7O01BRWxEO01BQ0FuRixlQUFlLENBQUNxRiw0QkFBNEIsQ0FBQyxDQUFDO01BRTlDLElBQUksQ0FBQzlKLFNBQVMsR0FBRyxLQUFLO0lBQ3ZCLENBQUM7SUFBQUUsTUFBQSxDQUVENkosT0FBTyxHQUFQLFNBQUFBLE9BQU9BLENBQUEsRUFBUztNQUNmO01BQ0EsS0FBSyxNQUFNSixjQUFjLElBQUksSUFBSSxDQUFDL0osZ0JBQWdCLEVBQUU7UUFDbkQrSixjQUFjLENBQUNLLFNBQVMsR0FBRyxDQUFDO01BQzdCO01BQ0EsSUFBSSxDQUFDdkkscUJBQXFCLENBQUMsQ0FBQyxDQUFDb0ksU0FBUyxDQUFDRyxTQUFTLENBQUMsQ0FBQztNQUVsRCxJQUFJLENBQUNoSyxTQUFTLEdBQUcsSUFBSTtJQUN0QixDQUFDO0lBQUFFLE1BQUEsQ0FFRCtKLFdBQVcsR0FBWCxTQUFBQSxXQUFXQSxDQUFBLEVBQVk7TUFDdEIsT0FBTyxJQUFJLENBQUNqSyxTQUFTO0lBQ3RCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQUUsTUFBQSxDQUtNZ0ssK0JBQStCLEdBQXJDLGVBQU1BLCtCQUErQkEsQ0FBQ1QsaUJBQXVELEVBQWlCO01BQzdHLElBQUk7UUFDSCxJQUFJLENBQUNVLFVBQVUsQ0FBQ0MsUUFBUSxDQUFDLElBQUksQ0FBQ3ZGLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFO1VBQzlDLElBQUksQ0FBQzRFLGlCQUFpQixFQUFFO1lBQ3ZCQSxpQkFBaUIsR0FBRyxJQUFJO1VBQ3pCO1VBQ0EsTUFBTXhNLGNBQWMsR0FBRyxJQUFJLENBQUN1SyxpQkFBaUIsQ0FBQyxDQUFDO1VBQy9DLE1BQU12SyxjQUFjLENBQUNvTixzQkFBc0IsQ0FBQ1osaUJBQWlCLENBQUM7UUFDL0Q7TUFDRCxDQUFDLENBQUMsT0FBT2EsU0FBa0IsRUFBRTtRQUM1QnZFLEdBQUcsQ0FBQ0osS0FBSyxDQUFDMkUsU0FBbUIsQ0FBQztRQUM5QkgsVUFBVSxDQUFDSSxNQUFNLENBQUMsSUFBSSxDQUFDMUYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO01BQ3ZDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBM0UsTUFBQSxDQUlBc0ssb0NBQW9DLEdBQXBDLFNBQUFBLG9DQUFvQ0EsQ0FBQSxFQUFZO01BQy9DLE9BQU8sSUFBSTtJQUNaOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQXJPLFlBQUEsQ0FPT3NPLDBDQUEwQyxHQUFqRCxTQUFPQSwwQ0FBMENBLENBQUNqRSxTQUF3RCxFQUFRO01BQ2pILElBQUksQ0FBQ0YsMEJBQTBCLENBQUNvRSxJQUFJLENBQUNsRSxTQUFTLENBQUM7SUFDaEQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQXRHLE1BQUEsQ0FNQXlLLDhCQUE4QixHQUE5QixTQUFBQSw4QkFBOEJBLENBQzdCQywwQkFBb0MsRUFDcENDLHNCQUFnQyxFQUNoQ0MsOEJBQXdDLEVBQ2pDO01BQ1AsSUFBSSxDQUFDQyxnQ0FBZ0MsR0FBR0gsMEJBQTBCO01BQ2xFLElBQUksQ0FBQy9CLGdCQUFnQixDQUFDLENBQUMsQ0FBQ21DLDBCQUEwQixDQUFDSiwwQkFBMEIsQ0FBQztNQUU5RSxJQUFJLENBQUNLLDRCQUE0QixHQUFHSixzQkFBc0I7TUFDMUQsSUFBSSxDQUFDaEcsUUFBUSxDQUFDLENBQUMsQ0FBQ3FHLG9CQUFvQixDQUFDTCxzQkFBc0IsQ0FBQztNQUU1RCxJQUFJLENBQUNNLG9DQUFvQyxHQUFHTCw4QkFBOEI7TUFDMUUsSUFBSSxDQUFDdEQsaUJBQWlCLENBQUMsQ0FBQyxDQUFDNEQsa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUVOLDhCQUE4QixDQUFDO0lBQ2hGOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUE1SyxNQUFBLENBR0EwSSxnQ0FBZ0MsR0FBaEMsU0FBQUEsZ0NBQWdDQSxDQUFBLEVBQVM7TUFDeEMsSUFBSSxJQUFJLENBQUNtQyxnQ0FBZ0MsRUFBRTtRQUMxQyxJQUFJLENBQUNsQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUN3Qyw0QkFBNEIsQ0FBQyxJQUFJLENBQUNOLGdDQUFnQyxDQUFDO1FBQzNGLElBQUksQ0FBQ0EsZ0NBQWdDLEdBQUd4RyxTQUFTO01BQ2xEO01BQ0EsSUFBSSxJQUFJLENBQUMwRyw0QkFBNEIsSUFBSSxJQUFJLENBQUNwRyxRQUFRLENBQUMsQ0FBQyxFQUFFO1FBQ3pELElBQUksQ0FBQ0EsUUFBUSxDQUFDLENBQUMsQ0FBQ3lHLG9CQUFvQixDQUFDLElBQUksQ0FBQ0wsNEJBQTRCLENBQUM7UUFDdkUsSUFBSSxDQUFDQSw0QkFBNEIsR0FBRzFHLFNBQVM7TUFDOUM7TUFDQSxJQUFJLElBQUksQ0FBQzRHLG9DQUFvQyxFQUFFO1FBQzlDLElBQUksQ0FBQzNELGlCQUFpQixDQUFDLENBQUMsQ0FBQytELGtCQUFrQixDQUFDLElBQUksQ0FBQ0osb0NBQW9DLENBQUM7UUFDdEYsSUFBSSxDQUFDQSxvQ0FBb0MsR0FBRzVHLFNBQVM7TUFDdEQ7SUFDRCxDQUFDO0lBQUEsT0FBQXBJLFlBQUE7RUFBQSxFQXZoQnlCcVAsV0FBVyxHQUFBMU0sYUFBQSxDQUk5QjJHLFdBQVcsR0FBaUMsQ0FBQyxDQUFDLEVBQUEzRyxhQUFBLENBcUN0Q3dILDBCQUEwQixHQUFzRCxFQUFFLEVBQUF4SCxhQUFBLEdBQUFXLFdBQUEsR0FBQWdNLHlCQUFBLENBQUE1TSxPQUFBLENBQUFzQixTQUFBLHNEQUFBekIsS0FBQTtJQUFBZ04sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0F2Qy9DLElBQUk7SUFBQTtFQUFBLElBQUFoTixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQTBpQnhDekMsWUFBWTtBQUFBIiwiaWdub3JlTGlzdCI6W119
602
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0IiwiX3ZlcnNpb24iLCJzZXJ2aWNlcyIsInJlc291cmNlTW9kZWwiLCJmYWN0b3J5TmFtZSIsInN0YXJ0dXAiLCJzZXR0aW5ncyIsImJ1bmRsZXMiLCJtb2RlbE5hbWUiLCJyb3V0aW5nU2VydmljZSIsInNoZWxsU2VydmljZXMiLCJTaGVsbFVJU2VydmljZSIsIm5hdmlnYXRpb25TZXJ2aWNlIiwiZW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzaWRlRWZmZWN0c1NlcnZpY2UiLCJhc3luY0NvbXBvbmVudFNlcnZpY2UiLCJjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlIiwidGVsZW1ldHJ5U2VydmljZSIsInZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwiQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSIsIkNvbnRleHRTaGFyaW5nU2VydmljZSIsImlubGluZUVkaXRTZXJ2aWNlIiwicm9vdFZpZXciLCJ2aWV3TmFtZSIsImlkIiwicm91dGluZyIsImNvbnRyb2xJZCIsInJvdXRlckNsYXNzIiwidmlld1R5cGUiLCJjb250cm9sQWdncmVnYXRpb24iLCJjb250YWluZXJPcHRpb25zIiwicHJvcGFnYXRlTW9kZWwiLCJkZXNpZ250aW1lIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0FwcENvbXBvbmVudCIsIl9VSUNvbXBvbmVudCIsIl90aGlzIiwiX2xlbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImFyZ3MiLCJBcnJheSIsIl9rZXkiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsInN0YXJ0dXBNb2RlIiwiTm9ybWFsIiwiX3N0YXJ0ZWRTZXJ2aWNlcyIsImlzQWRhcHRhdGlvbkVuYWJsZWQiLCJpc0V4aXRpbmciLCJwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJzdXNwZW5kZWQiLCJkaXNjYXJkUHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInNldEFkYXB0YXRpb25Nb2RlIiwiaXNBZGFwdGF0aW9uTW9kZSIsImluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcyIsImNoYW5nZVBhZ2VDb25maWd1cmF0aW9uIiwicGFnZUlkIiwicGF0aCIsInZhbHVlIiwiY2hhbmdlQ29uZmlndXJhdGlvbiIsImdldE1hbmlmZXN0IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzZXRDYXBhYmlsaXR5IiwiY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJnZXRSb3V0ZXJQcm94eSIsIl9vUm91dGVyUHJveHkiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJfb0FwcFN0YXRlSGFuZGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsImdldFJvb3RDb250YWluZXIiLCJnZXRDb250ZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsIkNyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsIkF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJoYXMiLCJzZXRUaW1lb3V0IiwiTGlicmFyeSIsImxvYWQiLCJuYW1lIiwiX2luaXRpYWxpemVkS2VlcGVyIiwiUHJvbWlzZUtlZXBlciIsImluaXRpYWxpemVkIiwicHJvbWlzZSIsInVpTW9kZWwiLCJKU09OTW9kZWwiLCJlZGl0TW9kZSIsIkVkaXRNb2RlIiwiRGlzcGxheSIsImlzRWRpdGFibGUiLCJkcmFmdFN0YXR1cyIsIkRyYWZ0U3RhdHVzIiwiQ2xlYXIiLCJidXN5IiwiYnVzeUxvY2FsIiwicGFnZXMiLCJvSW50ZXJuYWxNb2RlbCIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIk1vZGVsSGVscGVyIiwiZW5oYW5jZVVpSlNPTk1vZGVsIiwiZW5oYW5jZUludGVybmFsSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJiSW5pdGlhbGl6ZVJvdXRpbmciLCJ1bmRlZmluZWQiLCJSb3V0ZXJQcm94eSIsIkFwcFN0YXRlSGFuZGxlciIsIl9vRGlhZ25vc3RpY3MiLCJEaWFnbm9zdGljcyIsIm9Nb2RlbCIsImdldE1vZGVsIiwiaXNBIiwiZW5oYW5jZU9EYXRhTW9kZWwiLCJzZXRSZXRyeUFmdGVySGFuZGxlciIsImh0dHA1MDNSZXRyeUhhbmRsZXIiLCJiaW5kIiwiZW50aXR5Q29udGFpbmVyIiwiZ2V0TWV0YU1vZGVsIiwicmVxdWVzdE9iamVjdCIsImFwcCIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJjaGVja1JvdXRpbmdDb25maWd1cmF0aW9uIiwiaW5zdGFuY2VNYXAiLCJnZXRJZCIsImVycm9yIiwiSFRUUDUwM0hhbmRsZXIiLCJoYW5kbGU1MDNEZWxheSIsImdldFJlc291cmNlTW9kZWwiLCJMb2ciLCJpbmZvIiwiaW5jbHVkZXMiLCJFcnJvciIsIm9uU2VydmljZXNTdGFydGVkIiwiYWxsU2VydmljZXMiLCJhbGxTZXR0bGVkIiwiaW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzZXMiLCJtYXAiLCJmblByb2Nlc3MiLCJmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24iLCJ0aGVuIiwiYXR0YWNoUm91dGVNYXRjaGVycyIsImdldFJvdXRlciIsImluaXRpYWxpemUiLCJnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSIsInJlZ2lzdGVyU2hlbGxIb29rIiwiY2F0Y2giLCJvUmVzb3VyY2VCdW5kbGUiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImRpc3BsYXlFcnJvclBhZ2UiLCJnZXRUZXh0IiwidGl0bGUiLCJkZXNjcmlwdGlvbiIsIm1lc3NhZ2UiLCJnZXRSb3V0aW5nU2VydmljZSIsImluaXRpYWxpemVSb3V0aW5nIiwiYXR0YWNoQWZ0ZXJJbml0IiwiZXJyIiwidG9TdHJpbmciLCJleGl0IiwiZGVzdHJveSIsImRlbGV0ZU1vZGVsQ2FjaGVEYXRhIiwiZ2V0RGlhZ25vc3RpY3MiLCJiU3VwcHJlc3NJbnZhbGlkYXRlIiwiX3JvdXRpbmciLCJlIiwib01haW5Nb2RlbCIsIm9Nb2RlbHMiLCJvSGVhZGVycyIsIm9SZXF1ZXN0b3IiLCJPYmplY3QiLCJhc3NpZ24iLCJtSGVhZGVycyIsImJlZm9yZUV4aXQiLCJ1bnJlZ2lzdGVyQ2FsbGJhY2tzIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiZ2V0U2lkZUVmZmVjdHNTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0SW5saW5lRWRpdFNlcnZpY2UiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsIm9Db21wb25lbnREYXRhIiwiZ2V0Q29tcG9uZW50RGF0YSIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwicmVzdG9yZSIsInN0YXJ0ZWRTZXJ2aWNlIiwib25SZXN0b3JlIiwidmlld1N0YXRlIiwicmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJpc1N1c3BlbmRlZCIsImlzQXBwQ29tcG9uZW50QnVzeSIsIm5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJfbWFuYWdlRGVlcExpbmtTdGFydHVwIiwiZXhjZXB0aW9uIiwidW5sb2NrIiwiaXNDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VFbmFibGVkIiwicmVnaXN0ZXJJbnN0YW5jZURlcGVuZGVudFByb2Nlc3NGb3JTdGFydFVwIiwicHVzaCIsInJlZ2lzdGVyQ2FsbGJhY2tzIiwiZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzZXNzaW9uVGltZW91dENhbGxiYWNrIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJzdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrIiwiYXR0YWNoU2Vzc2lvblRpbWVvdXQiLCJfcm91dGVNYXRjaEhhbmRsZXIiLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiZGV0YWNoU2Vzc2lvblRpbWVvdXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJVSUNvbXBvbmVudCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyxpbXBsZW1lbnRJbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEhUVFA1MDNIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0hUVFA1MDNIYW5kbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvSW5saW5lRWRpdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvQ3VycmVuY3lcIjtcbmltcG9ydCBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL1VuaXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5cbmNvbnN0IFN0YXJ0dXBNb2RlID0gbGlicmFyeS5TdGFydHVwTW9kZTtcbmNvbnN0IE5BVkNPTkYgPSB7XG5cdEZDTDoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbFwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuRmNsXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLmYucm91dGluZy5Sb3V0ZXJcIlxuXHR9LFxuXHROQVZDT05UQUlORVI6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXJcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5tLnJvdXRpbmcuUm91dGVyXCJcblx0fVxufTtcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50RGF0YSA9IHtcblx0c3RhcnR1cFBhcmFtZXRlcnM/OiBTdGFydHVwUGFyYW1ldGVycztcblx0Ly9mZUVudmlyb25tZW50IGlzIG9iamVjdCB3aGljaCBpcyByZWNlaXZlZCBhcyBhIHBhcnQgb2YgdGhlIGNvbXBvbmVudCBkYXRhIGZvciBNeSBJbmJveCBhcHBsaWNhdGlvbnMuXG5cdGZlRW52aXJvbm1lbnQ/OiB7XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldEludGVudCgpIHdoaWNoIHJldHVybnMgYW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHNlbWFudGljT2JqZWN0IGFuZCBhY3Rpb24gYXMgc2VwYXJhdGUgcHJvcGVydHktdmFsdWUgZW50cmllcyB0aGF0IGFyZSB0aGVuIHVzZWQgdG8gdXBkYXRlIHRoZSByZWxhdGVkIGFwcHMgYnV0dG9uLlxuXHRcdGdldEludGVudDogRnVuY3Rpb247XG5cdFx0Ly9XaXRoaW4gdGhpcyBvYmplY3QgdGhleSBwYXNzIGEgZnVuY3Rpb24gY2FsbGVkIGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHkoKSB0aGF0IHJldHVybnMgYm9vbGVhbiB2YWx1ZXModHJ1ZSBvciBmYWxzZSkgd2hpY2ggZGV0ZXJtaW5lcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgc2hhcmUgYnV0dG9uLlxuXHRcdGdldFNoYXJlQ29udHJvbFZpc2liaWxpdHk6IEZ1bmN0aW9uO1xuXHR9O1xufTtcbi8vIEtlZXAgYSByZWZlcmVuY2Ugc28gYXMgdG8ga2VlcCB0aGUgaW1wb3J0IGRlc3BpdGUgaXQgbm90IGJlaW5nIGRpcmVjdGx5IHVzZWRcbmNvbnN0IF9tUm91dGVyID0gUm91dGVyO1xuXG5leHBvcnQgdHlwZSBTdGFydHVwUGFyYW1ldGVycyA9IHtcblx0cHJlZmVycmVkTW9kZT86IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG4vKipcbiAqIE1haW4gY2xhc3MgZm9yIGNvbXBvbmVudHMgdXNlZCBmb3IgYW4gYXBwbGljYXRpb24gaW4gU0FQIEZpb3JpIGVsZW1lbnRzLlxuICpcbiAqIEFwcGxpY2F0aW9uIGRldmVsb3BlcnMgdXNpbmcgdGhlIHRlbXBsYXRlcyBhbmQgYnVpbGRpbmcgYmxvY2tzIHByb3ZpZGVkIGJ5IFNBUCBGaW9yaSBlbGVtZW50cyBzaG91bGQgY3JlYXRlIHRoZWlyIGFwcHMgYnkgZXh0ZW5kaW5nIHRoaXMgY29tcG9uZW50LlxuICogVGhpcyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBuZWNlc3Nhcnkgc2VydmljZXMgdGhhdCB5b3UgbmVlZCBmb3IgdGhlIGJ1aWxkaW5nIGJsb2NrcyBhbmQgdGVtcGxhdGVzIHRvIHdvcmsgcHJvcGVybHkgYXJlIHN0YXJ0ZWQuXG4gKlxuICogV2hlbiB5b3UgdXNlIHNhcC5mZS5jb3JlLkFwcENvbXBvbmVudCBhcyB0aGUgYmFzZSBjb21wb25lbnQsIHlvdSBhbHNvIG5lZWQgdG8gdXNlIGEgcm9vdFZpZXcuIFNBUCBGaW9yaSBlbGVtZW50cyBwcm92aWRlcyB0d28gb3B0aW9uczogPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyIHdoZW4gdXNpbmcgc2FwLm0ucm91dGluZy5Sb3V0ZXIgPGJyLz5cbiAqIC0gc2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsIHdoZW4gdXNpbmcgc2FwLmYucm91dGluZy5Sb3V0ZXIgKEZDTCB1c2UgY2FzZSkgPGJyLz5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBwdWJsaWNcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50XCIsIHtcblx0Y29uZmlnOiB7XG5cdFx0ZnVsbFdpZHRoOiB0cnVlXG5cdH0sXG5cdG1hbmlmZXN0OiB7XG5cdFx0X3ZlcnNpb246IFwiMi4wLjBcIixcblx0XHRcInNhcC51aTVcIjoge1xuXHRcdFx0c2VydmljZXM6IHtcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5saW5lRWRpdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5JbmxpbmVFZGl0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCBpbXBsZW1lbnRzIElBc3luY0NvbnRlbnRDcmVhdGlvbiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JQXN5bmNDb250ZW50Q3JlYXRpb24gPSB0cnVlO1xuXG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgX29EaWFnbm9zdGljcyE6IERpYWdub3N0aWNzO1xuXG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0cHJpdmF0ZSBfc3RhcnRlZFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2luaXRpYWxpemVkS2VlcGVyITogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRwcml2YXRlIGlzQWRhcHRhdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuXHRwdWJsaWMgaXNFeGl0aW5nID0gZmFsc2U7XG5cblx0cHVibGljIHBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0cHJpdmF0ZSBkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzdXNwZW5kZWQgPSBmYWxzZTtcblxuXHRwcml2YXRlIGRpc2NhcmRQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cblx0cHJpdmF0ZSBfcm91dGVNYXRjaEhhbmRsZXI/OiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogU2luZ2xldG9uIHRvIGhvbGQgcHJvY2Vzc2VzIGZyb20gbGlicmFyaWVzIHRoYXQgbmVlZCB0byBiZSBydW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHByaW9yIHRvIHN0YXJ0dXAuXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlczogKChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuXG5cdF9pc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKTtcblx0XHRyZXR1cm4gb01hbmlmZXN0VUk1Py5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTUztcblx0fVxuXG5cdHNldEFkYXB0YXRpb25Nb2RlKGlzQWRhcHRhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQgPSBpc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uLCB1c2UgdGhlIHtAbGluayBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb259IG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aG91dCBhbnkgdmFsdWUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIHByb2Nlc3Nlc1xuXHQgKi9cblx0YXN5bmMgaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGxpY2F0aW9uc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBpbiB0aGUgcGFnZSBzZXR0aW5ncyBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNoYW5nZVBhZ2VDb25maWd1cmF0aW9uKHBhZ2VJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSBjaGFuZ2VDb25maWd1cmF0aW9uKHRoaXMuZ2V0TWFuaWZlc3QoKSwgcGFnZUlkLCBwYXRoLCB2YWx1ZSwgdHJ1ZSwgdGhpcykgYXMgTWFuaWZlc3RDb250ZW50O1xuXHRcdGlmIChcblx0XHRcdHBhdGggPT09IFwiYXBwL2Rpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiAmJlxuXHRcdFx0KG1hbmlmZXN0Py5bXCJzYXAuZmVcIl0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KT8uW1wiYXBwXCJdPy5bXCJkaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCJdID09PSB2YWx1ZVxuXHRcdCkge1xuXHRcdFx0dGhpcy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLnNldENhcGFiaWxpdHkoXCJEaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCIsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIGFsbCByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuXHQgKi9cblx0Y2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1zdXBwb3J0XCIpKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAuZmUudG9vbHNcIiB9KTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH1cblx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnByb21pc2U7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uPE9EYXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VPRGF0YU1vZGVsKG9Nb2RlbCwgdGhpcyk7XG5cdFx0XHRvTW9kZWwuc2V0UmV0cnlBZnRlckhhbmRsZXIodGhpcy5odHRwNTAzUmV0cnlIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaHR0cDUwM1JldHJ5SGFuZGxlcihlcnJvcjogRXJyb3IgJiB7IHJldHJ5QWZ0ZXI/OiBEYXRlIH0pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBIVFRQNTAzSGFuZGxlci5oYW5kbGU1MDNEZWxheShlcnJvciwgdGhpcy5nZXRSb290Q29udHJvbCgpLCBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTU6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pOiB2b2lkIHtcblx0XHRpZiAob01hbmlmZXN0VUk1Py5yb290Vmlldz8udmlld05hbWUpIHtcblx0XHRcdC8vIFRoZSBhcHBsaWNhdGlvbiBzcGVjaWZpZWQgYW4gb3duIHJvb3QgdmlldyBpbiB0aGUgbWFuaWZlc3RcblxuXHRcdFx0Ly8gUm9vdCBWaWV3IHdhcyBtb3ZlZCBmcm9tIHNhcC5mZS50ZW1wbGF0ZXMgdG8gc2FwLmZlLmNvcmUgLSBrZWVwIGl0IGNvbXBhdGlibGVcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5GQ0wuVklFV05BTUU7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuRkNMLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5GQ0wuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FICYmXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU1xuXHRcdFx0KSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9IGVsc2UgaWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldz8udmlld05hbWU/LmluY2x1ZGVzKFwic2FwLmZlLmNvcmUucm9vdFZpZXdcIikpIHtcblx0XHRcdFx0dGhyb3cgRXJyb3IoXG5cdFx0XHRcdFx0YFxcbldyb25nIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb3VwbGUgKHJvb3RWaWV3L3JvdXRlckNsYXNzKSBpbiBtYW5pZmVzdCBmaWxlLlxcbmAgK1xuXHRcdFx0XHRcdFx0YEN1cnJlbnQgdmFsdWVzIGFyZSA6KCR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfS8ke1xuXHRcdFx0XHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyB8fCBcIjxtaXNzaW5nIHJvdXRlciBjbGFzcz5cIlxuXHRcdFx0XHRcdFx0fSlcXG5gICtcblx0XHRcdFx0XHRcdGBFeHBlY3RlZCB2YWx1ZXMgYXJlIFxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfS8ke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfSlcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLkZDTC5WSUVXTkFNRX0vJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU30pYFxuXHRcdFx0XHQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9XCIgLSBSb3V0ZXJjbGFzczogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTfVwiYCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgb25TZXJ2aWNlc1N0YXJ0ZWQoYWxsU2VydmljZXM6IFNlcnZpY2U8dW5rbm93bj5bXSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcyA9IGFsbFNlcnZpY2VzO1xuXHRcdGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGxTZXR0bGVkKFxuXHRcdFx0QXBwQ29tcG9uZW50Lmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLm1hcChhc3luYyAoZm5Qcm9jZXNzKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmblByb2Nlc3MuY2FsbChudWxsLCB0aGlzKTtcblx0XHRcdH0pXG5cdFx0KTtcblxuXHRcdC8vcm91dGVyIG11c3QgYmUgc3RhcnRlZCBvbmNlIHRoZSByb290Y29udGFpbmVyIGlzIGluaXRpYWxpemVkXG5cdFx0Ly9zdGFydGluZyBvZiB0aGUgcm91dGVyXG5cdFx0Y29uc3QgZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXJcblx0XHRcdFx0LnRoZW4oYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMpIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuYXR0YWNoUm91dGVNYXRjaGVycygpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlcigpLmluaXRpYWxpemUoKTtcblx0XHRcdFx0XHR0aGlzLmdldFJvdXRlclByb3h5KCkuaW5pdCh0aGlzLCB0aGlzLl9pc0ZjbEVuYWJsZWQoKSk7XG5cblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpLnJlZ2lzdGVyU2hlbGxIb29rKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaCgoZXJyb3I6IEVycm9yKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgb1Jlc291cmNlQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblxuXHRcdFx0XHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkuZGlzcGxheUVycm9yUGFnZShcblx0XHRcdFx0XHRcdG9SZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiQ19BUFBfQ09NUE9ORU5UX1NBUEZFX0FQUFNUQVJUX1RFQ0hOSUNBTF9JU1NVRVNcIiksXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpLFxuXHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjogZXJyb3IubWVzc2FnZVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdH07XG5cblx0XHRpZiAodGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcpIHtcblx0XHRcdHJldHVybiB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKClcblx0XHRcdFx0LmluaXRpYWxpemVSb3V0aW5nKClcblx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdGlmICh0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpKSB7XG5cdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5nZXRSb290Q29udHJvbCgpLmF0dGFjaEFmdGVySW5pdChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRcdGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbigpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnJlc29sdmUoKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoZXJyOiBFcnJvcikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihgY2Fubm90IGNhbm5vdCBpbml0aWFsaXplIHJvdXRpbmc6ICR7ZXJyLnRvU3RyaW5nKCl9YCk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0ZXhpdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBbXTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkuZGVzdHJveSgpO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29BcHBTdGF0ZUhhbmRsZXI7XG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRkZWxldGUgdGhpcy5fb1JvdXRlclByb3h5O1xuXHRcdGRlbGV0ZU1vZGVsQ2FjaGVEYXRhKHRoaXMuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKS5kZXN0cm95KCk7XG5cdFx0dGhpcy5jbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcygpO1xuXHR9XG5cblx0Z2V0TWV0YU1vZGVsKCk6IE9EYXRhTWV0YU1vZGVsIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHR9XG5cblx0Z2V0RGlhZ25vc3RpY3MoKTogRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLl9vRGlhZ25vc3RpY3M7XG5cdH1cblxuXHRkZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGU/OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5pc0V4aXRpbmcgPSB0cnVlO1xuXG5cdFx0Ly8gTEVBS1MsIHdpdGggd29ya2Fyb3VuZCBmb3Igc29tZSBGbGV4IC8gTURDIGlzc3VlXG5cdFx0dHJ5IHtcblx0XHRcdGRlbGV0ZSBBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXTtcblxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdFx0ZGVsZXRlICh3aW5kb3cgYXMgdW5rbm93bikuX3JvdXRpbmc7XG5cdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0TG9nLmluZm8oZSBhcyBzdHJpbmcpO1xuXHRcdH1cblxuXHRcdC8vV09SS0FST1VORCBmb3Igc3RpY2t5IGRpc2NhcmQgcmVxdWVzdCA6IGR1ZSB0byBhc3luYyBjYWxsYmFjaywgcmVxdWVzdCB0cmlnZ2VyZWQgYnkgdGhlIGV4aXRBcHBsaWNhdGlvbiB3aWxsIGJlIHNlbmQgYWZ0ZXIgdGhlIFVJQ29tcG9uZW50LnByb3RvdHlwZS5kZXN0cm95XG5cdFx0Ly9zbyB3ZSBuZWVkIHRvIGNvcHkgdGhlIFJlcXVlc3RvciBoZWFkZXJzIGFzIGl0IHdpbGwgYmUgZGVzdHJveVxuXG5cdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuXHRcdC8vIEB0cy1pZ25vcmVcblx0XHRjb25zdCBvTWFpbk1vZGVsID0gdGhpcy5vTW9kZWxzW3VuZGVmaW5lZF07XG5cdFx0bGV0IG9IZWFkZXJzO1xuXHRcdGlmIChvTWFpbk1vZGVsPy5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvSGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gQXMgd2UgbmVlZCB0byBjbGVhbnVwIHRoZSBhcHBsaWNhdGlvbiAvIGhhbmRsZSB0aGUgZGlydHkgb2JqZWN0IHdlIG5lZWQgdG8gY2FsbCBvdXIgY2xlYW51cCBiZWZvcmUgdGhlIG1vZGVscyBhcmUgZGVzdHJveWVkXG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpPy5iZWZvcmVFeGl0Py4oKTtcblx0XHR0aGlzLnVucmVnaXN0ZXJDYWxsYmFja3MoKTtcblx0XHRzdXBlci5kZXN0cm95KGJTdXBwcmVzc0ludmFsaWRhdGUpO1xuXHRcdGlmIChvSGVhZGVycyAmJiBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IpIHtcblx0XHRcdG9NYWluTW9kZWwub1JlcXVlc3Rvci5tSGVhZGVycyA9IG9IZWFkZXJzO1xuXHRcdH1cblx0fVxuXG5cdGdldFJvdXRpbmdTZXJ2aWNlKCk6IFJvdXRpbmdTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgUm91dGluZ1NlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXRTaGVsbFNlcnZpY2VzKCk6IElTaGVsbFNlcnZpY2VzIHtcblx0XHRyZXR1cm4ge30gYXMgSVNoZWxsU2VydmljZXM7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXROYXZpZ2F0aW9uU2VydmljZSgpOiBOYXZpZ2F0aW9uU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIE5hdmlnYXRpb25TZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2lkZUVmZmVjdHNTZXJ2aWNlKCk6IFNpZGVFZmZlY3RzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFNpZGVFZmZlY3RzU2VydmljZTtcblx0fVxuXG5cdGdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzKCk6IEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIEVudmlyb25tZW50Q2FwYWJpbGl0aWVzU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSgpOiBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpOiBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZTtcblx0fVxuXG5cdGdldENvbnRleHRTaGFyaW5nU2VydmljZSgpOiBDb250ZXh0U2hhcmluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb250ZXh0U2hhcmluZ1NlcnZpY2U7XG5cdH1cblxuXHRnZXRUZWxlbWV0cnlTZXJ2aWNlKCk6IFRlbGVtZXRyeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBUZWxlbWV0cnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKTogVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZTtcblx0fVxuXG5cdGdldElubGluZUVkaXRTZXJ2aWNlKCk6IElubGluZUVkaXRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgSW5saW5lRWRpdFNlcnZpY2U7XG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwUGFyYW1ldGVycygpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSB0aGlzLmdldENvbXBvbmVudERhdGEoKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30pO1xuXHR9XG5cblx0cmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblJlc3RvcmU/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblJlc3RvcmUoKTtcblxuXHRcdC8vIFJlc2V0IGFsbCB2YWx1ZXMgaW4gdmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0XHRBcHBTdGF0ZUhhbmRsZXIucmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cygpO1xuXG5cdFx0dGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcblx0fVxuXG5cdHN1c3BlbmQoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0Zm9yIChjb25zdCBzdGFydGVkU2VydmljZSBvZiB0aGlzLl9zdGFydGVkU2VydmljZXMpIHtcblx0XHRcdHN0YXJ0ZWRTZXJ2aWNlLm9uU3VzcGVuZD8uKCk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uU3VzcGVuZCgpO1xuXG5cdFx0dGhpcy5zdXNwZW5kZWQgPSB0cnVlO1xuXHR9XG5cblx0aXNTdXNwZW5kZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3VzcGVuZGVkO1xuXHR9XG5cblx0YXN5bmMgaXNBcHBDb21wb25lbnRCdXN5KCkgOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5kaXNjYXJkUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIGZ1bmN0aW9uIGlzIGEgcHVibGljIGFwaSB0aGF0IGFjdHMgYXMgYSB3cmFwcGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uIEl0IHBhc3NlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZ1cnRoZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMgRGVmaW5lcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIHdoaWNoIGlzIGZ1cnRoZXIgcGFzc2VkIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uXG5cdCAqL1xuXG5cdGFzeW5jIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIoc3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIUJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5nZXRNb2RlbChcInVpXCIpKSkge1xuXHRcdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJvdXRpbmdTZXJ2aWNlID0gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpO1xuXHRcdFx0XHRhd2FpdCByb3V0aW5nU2VydmljZS5fbWFuYWdlRGVlcExpbmtTdGFydHVwKHN0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChleGNlcHRpb246IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihleGNlcHRpb24gYXMgc3RyaW5nKTtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYWxsb3cgZGlzYWJsaW5nIHRoZSBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgaW50ZWdyYXRpb24gZm9yIHRoZSBPVlAgdXNlIGNhc2UuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBzZXJ2aWNlIGlzIGFjdGl2ZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICogQHBhcmFtIGZuUHJvY2VzcyBGdW5jdGlvbiB0aGF0IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9jZXNzLlxuXHQgKlxuXHQgKiBUaGUgcmVnaXN0ZXJlZCBwcm9jZXNzIGNhbiBiZSBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy5cblx0ICogSXQgc2hhbGwgYmUgY2FsbGVkIHdpdGggdGhlIEFwcENvbXBvbmVudCBpbnN0YW5jZSBhcyBhIHBhcmFtZXRlciBiZWZvcmUgc3RhcnR1cC5cblx0ICovXG5cdHN0YXRpYyByZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAoZm5Qcm9jZXNzOiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrXG5cdCAqIEBwYXJhbSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2tcblx0ICogQHBhcmFtIHNlc3Npb25UaW1lb3V0Q2FsbGJhY2tcblx0ICovXG5cdHJlZ2lzdGVyQ2FsbGJhY2tzKFxuXHRcdGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrOiBGdW5jdGlvbixcblx0XHRkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2s6IEZ1bmN0aW9uLFxuXHRcdHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s/OiBGdW5jdGlvblxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLmRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spO1xuXG5cdFx0aWYgKHNlc3Npb25UaW1lb3V0Q2FsbGJhY2spIHtcblx0XHRcdHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayA9IHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s7XG5cdFx0XHR0aGlzLmdldE1vZGVsKCkuYXR0YWNoU2Vzc2lvblRpbWVvdXQoc2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2sgPSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2s7XG5cdFx0dGhpcy5fcm91dGVNYXRjaEhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAodGhpcy5kaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0dGhpcy5kaXNjYXJkUHJvbWlzZSA9IHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHt9LCB0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcik7XG5cdH1cblxuXHQvKipcblx0ICogVW5yZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICovXG5cdHVucmVnaXN0ZXJDYWxsYmFja3MoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spIHtcblx0XHRcdHRoaXMuZ2V0U2hlbGxTZXJ2aWNlcygpLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIodGhpcy5kaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayk7XG5cdFx0XHR0aGlzLmRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrICYmIHRoaXMuZ2V0TW9kZWwoKSkge1xuXHRcdFx0dGhpcy5nZXRNb2RlbCgpLmRldGFjaFNlc3Npb25UaW1lb3V0KHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cdFx0XHR0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcikge1xuXHRcdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlciA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG5pbnRlcmZhY2UgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW47XG5cdGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0Q29udGVudDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuYXBwXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdF9nZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIiwgbWVyZ2VkOiBib29sZWFuKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSB8IHVuZGVmaW5lZDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmlvcmlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5maW9yaVwiXTtcblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBDb21wb25lbnREYXRhO1xuXHRnZXRSb290Q29udHJvbCgpOiB7XG5cdFx0Z2V0Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuXHR9ICYgVmlldztcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEwQ0EsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsTUFBTUUsT0FBTyxHQUFHO0lBQ2ZDLEdBQUcsRUFBRTtNQUNKQyxRQUFRLEVBQUUsMEJBQTBCO01BQ3BDQyxzQkFBc0IsRUFBRSx5Q0FBeUM7TUFDakVDLFdBQVcsRUFBRTtJQUNkLENBQUM7SUFDREMsWUFBWSxFQUFFO01BQ2JILFFBQVEsRUFBRSxtQ0FBbUM7TUFDN0NDLHNCQUFzQixFQUFFLGtEQUFrRDtNQUMxRUMsV0FBVyxFQUFFO0lBQ2Q7RUFDRCxDQUFDO0VBWUQ7RUFDQSxNQUFNRSxRQUFRLEdBQUdDLE1BQU07RUFLdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWEEsSUF5R01DLFlBQVksSUFBQUMsSUFBQSxHQTdGakJDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUMzQ0MsTUFBTSxFQUFFO01BQ1BDLFNBQVMsRUFBRTtJQUNaLENBQUM7SUFDREMsUUFBUSxFQUFFO01BQ1RDLFFBQVEsRUFBRSxPQUFPO01BQ2pCLFNBQVMsRUFBRTtRQUNWQyxRQUFRLEVBQUU7VUFDVEMsYUFBYSxFQUFFO1lBQ2RDLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeERDLE9BQU8sRUFBRSxTQUFTO1lBQ2xCQyxRQUFRLEVBQUU7Y0FDVEMsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7Y0FDdENDLFNBQVMsRUFBRTtZQUNaO1VBQ0QsQ0FBQztVQUNEQyxjQUFjLEVBQUU7WUFDZkws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
@@ -1,6 +1,6 @@
1
1
  import Log from "sap/base/Log";
2
2
  import type FlexibleColumnLayout from "sap/f/FlexibleColumnLayout";
3
- import { defineUI5Class, implementInterface } from "sap/fe/base/ClassSupport";
3
+ import { defineUI5Class,implementInterface } from "sap/fe/base/ClassSupport";
4
4
  import AppStateHandler from "sap/fe/core/AppStateHandler";
5
5
  import RouterProxy from "sap/fe/core/controllerextensions/routing/RouterProxy";
6
6
  import HTTP503Handler from "sap/fe/core/helpers/HTTP503Handler";
@@ -205,14 +205,18 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
205
205
 
206
206
  public pageConfigurationChanges: Record<string, string[]> = {};
207
207
 
208
- private stickyDirtyStateProviderCallback?: Function;
208
+ private dirtyStateProviderCallback?: Function;
209
209
 
210
210
  private stickySessionTimeoutCallback?: Function;
211
211
 
212
- private stickyDiscardAfterNavigationCallback?: Function;
212
+ private discardAfterNavigationCallback?: Function;
213
213
 
214
214
  private suspended = false;
215
215
 
216
+ private discardPromise = Promise.resolve();
217
+
218
+ private _routeMatchHandler?: Function;
219
+
216
220
  /**
217
221
  * Singleton to hold processes from libraries that need to be run for every instance prior to startup.
218
222
  */
@@ -547,7 +551,7 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
547
551
 
548
552
  // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
549
553
  this.getRoutingService()?.beforeExit?.();
550
- this.unregisterStickySessionCallbacks();
554
+ this.unregisterCallbacks();
551
555
  super.destroy(bSuppressInvalidate);
552
556
  if (oHeaders && oMainModel.oRequestor) {
553
557
  oMainModel.oRequestor.mHeaders = oHeaders;
@@ -634,6 +638,10 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
634
638
  return this.suspended;
635
639
  }
636
640
 
641
+ async isAppComponentBusy() : Promise<void> {
642
+ return this.discardPromise;
643
+ }
644
+
637
645
  /**
638
646
  * navigateBasedOnStartupParameter function is a public api that acts as a wrapper to _manageDeepLinkStartup function. It passes the startup parameters further to _manageDeepLinkStartup function
639
647
  * @param startupParameters Defines the startup parameters which is further passed to _manageDeepLinkStartup function.
@@ -676,39 +684,47 @@ class AppComponent extends UIComponent implements IAsyncContentCreation {
676
684
  /**
677
685
  * Registers the callbacks related to a sticky edit session.
678
686
  * @param dirtyStateProviderCallback
679
- * @param sessionTimeoutCallback
680
687
  * @param discardAfterNavigationCallback
688
+ * @param sessionTimeoutCallback
681
689
  */
682
- registerStickySessionCallbacks(
690
+ registerCallbacks(
683
691
  dirtyStateProviderCallback: Function,
684
- sessionTimeoutCallback: Function,
685
- discardAfterNavigationCallback: Function
692
+ discardAfterNavigationCallback: Function,
693
+ sessionTimeoutCallback?: Function
686
694
  ): void {
687
- this.stickyDirtyStateProviderCallback = dirtyStateProviderCallback;
695
+ this.dirtyStateProviderCallback = dirtyStateProviderCallback;
688
696
  this.getShellServices().registerDirtyStateProvider(dirtyStateProviderCallback);
689
697
 
690
- this.stickySessionTimeoutCallback = sessionTimeoutCallback;
691
- this.getModel().attachSessionTimeout(sessionTimeoutCallback);
698
+ if (sessionTimeoutCallback) {
699
+ this.stickySessionTimeoutCallback = sessionTimeoutCallback;
700
+ this.getModel().attachSessionTimeout(sessionTimeoutCallback);
701
+ }
692
702
 
693
- this.stickyDiscardAfterNavigationCallback = discardAfterNavigationCallback;
694
- this.getRoutingService().attachRouteMatched({}, discardAfterNavigationCallback);
703
+ this.discardAfterNavigationCallback = discardAfterNavigationCallback;
704
+ this._routeMatchHandler = (): void => {
705
+ if (this.discardAfterNavigationCallback) {
706
+ this.discardPromise = this.discardAfterNavigationCallback();
707
+ }
708
+ };
709
+ this.getRoutingService().attachRouteMatched({}, this._routeMatchHandler);
695
710
  }
696
711
 
697
712
  /**
698
713
  * Unregisters the callbacks related to a sticky edit session.
699
714
  */
700
- unregisterStickySessionCallbacks(): void {
701
- if (this.stickyDirtyStateProviderCallback) {
702
- this.getShellServices().deregisterDirtyStateProvider(this.stickyDirtyStateProviderCallback);
703
- this.stickyDirtyStateProviderCallback = undefined;
715
+ unregisterCallbacks(): void {
716
+ if (this.dirtyStateProviderCallback) {
717
+ this.getShellServices().deregisterDirtyStateProvider(this.dirtyStateProviderCallback);
718
+ this.dirtyStateProviderCallback = undefined;
704
719
  }
705
720
  if (this.stickySessionTimeoutCallback && this.getModel()) {
706
721
  this.getModel().detachSessionTimeout(this.stickySessionTimeoutCallback);
707
722
  this.stickySessionTimeoutCallback = undefined;
708
723
  }
709
- if (this.stickyDiscardAfterNavigationCallback) {
710
- this.getRoutingService().detachRouteMatched(this.stickyDiscardAfterNavigationCallback);
711
- this.stickyDiscardAfterNavigationCallback = undefined;
724
+ if (this._routeMatchHandler) {
725
+ this.getRoutingService().detachRouteMatched(this._routeMatchHandler);
726
+ this._routeMatchHandler = undefined;
727
+ this.discardAfterNavigationCallback = undefined;
712
728
  }
713
729
  }
714
730
  }