@sapui5/sap.fe.core 1.140.0 → 1.141.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (157) 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 +60 -17
  4. package/src/sap/fe/core/AppComponent.ts +90 -20
  5. package/src/sap/fe/core/CommonUtils.js +22 -2
  6. package/src/sap/fe/core/CommonUtils.ts +22 -4
  7. package/src/sap/fe/core/ExtensionAPI.js +26 -3
  8. package/src/sap/fe/core/ExtensionAPI.ts +26 -0
  9. package/src/sap/fe/core/PageController.js +24 -8
  10. package/src/sap/fe/core/PageController.ts +32 -6
  11. package/src/sap/fe/core/TemplateComponent.js +3 -3
  12. package/src/sap/fe/core/TemplateComponent.ts +3 -2
  13. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +1 -1
  14. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +1 -0
  15. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +90 -9
  16. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +77 -3
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +174 -55
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +194 -64
  19. package/src/sap/fe/core/controllerextensions/SideEffects.js +8 -3
  20. package/src/sap/fe/core/controllerextensions/SideEffects.ts +3 -2
  21. package/src/sap/fe/core/controllerextensions/ViewState.js +19 -5
  22. package/src/sap/fe/core/controllerextensions/ViewState.ts +22 -1
  23. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/cards/CollaborationManager.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +2 -2
  26. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +1 -1
  27. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +46 -17
  28. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +75 -22
  29. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +28 -17
  30. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +35 -18
  31. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +10 -2
  32. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -1
  33. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +12 -9
  34. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +12 -9
  35. package/src/sap/fe/core/controls/Any.js +1 -1
  36. package/src/sap/fe/core/controls/Any.ts +9 -6
  37. package/src/sap/fe/core/controls/DataWatcher.js +5 -3
  38. package/src/sap/fe/core/controls/DataWatcher.tsx +4 -2
  39. package/src/sap/fe/core/controls/FormElementWrapper.js +2 -2
  40. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  41. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +67 -28
  42. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +90 -25
  43. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  44. package/src/sap/fe/core/converters/ManifestSettings.ts +6 -0
  45. package/src/sap/fe/core/converters/MetaModelConverter.js +39 -9
  46. package/src/sap/fe/core/converters/MetaModelConverter.ts +44 -10
  47. package/src/sap/fe/core/converters/annotations/DataField.js +5 -1
  48. package/src/sap/fe/core/converters/annotations/DataField.ts +4 -0
  49. package/src/sap/fe/core/converters/controls/Common/Action.js +6 -11
  50. package/src/sap/fe/core/converters/controls/Common/Action.ts +9 -14
  51. package/src/sap/fe/core/converters/controls/Common/Form.js +28 -4
  52. package/src/sap/fe/core/converters/controls/Common/Form.ts +47 -5
  53. package/src/sap/fe/core/converters/controls/Common/Table.js +11 -17
  54. package/src/sap/fe/core/converters/controls/Common/Table.ts +16 -20
  55. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +12 -6
  56. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +31 -16
  57. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +1 -5
  58. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +0 -6
  59. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +5 -3
  60. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +4 -1
  61. package/src/sap/fe/core/converters/templates/ListReportConverter.js +5 -3
  62. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +7 -1
  63. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +7 -3
  64. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +6 -1
  65. package/src/sap/fe/core/formatters/CollaborationFormatter.js +12 -7
  66. package/src/sap/fe/core/formatters/CollaborationFormatter.ts +10 -7
  67. package/src/sap/fe/core/formatters/CriticalityFormatter.js +3 -4
  68. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -4
  69. package/src/sap/fe/core/formatters/FPMFormatter.js +3 -4
  70. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -4
  71. package/src/sap/fe/core/formatters/KPIFormatter.js +4 -5
  72. package/src/sap/fe/core/formatters/KPIFormatter.ts +2 -5
  73. package/src/sap/fe/core/formatters/Scope.js +21 -0
  74. package/src/sap/fe/core/formatters/Scope.ts +21 -0
  75. package/src/sap/fe/core/formatters/StandardFormatter.js +9 -10
  76. package/src/sap/fe/core/formatters/StandardFormatter.ts +8 -10
  77. package/src/sap/fe/core/formatters/ValueFormatter.js +17 -18
  78. package/src/sap/fe/core/formatters/ValueFormatter.ts +15 -18
  79. package/src/sap/fe/core/fpm/manifest.json +1 -1
  80. package/src/sap/fe/core/helpers/ActionUtilities.js +37 -0
  81. package/src/sap/fe/core/helpers/ActionUtilities.ts +32 -0
  82. package/src/sap/fe/core/helpers/AppStartupHelper.js +11 -3
  83. package/src/sap/fe/core/helpers/AppStartupHelper.ts +13 -2
  84. package/src/sap/fe/core/helpers/ModelHelper.js +32 -4
  85. package/src/sap/fe/core/helpers/ModelHelper.ts +42 -2
  86. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +3 -2
  87. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +2 -2
  88. package/src/sap/fe/core/library.js +3 -3
  89. package/src/sap/fe/core/library.ts +1 -0
  90. package/src/sap/fe/core/messagebundle.properties +5 -0
  91. package/src/sap/fe/core/messagebundle_ar.properties +4 -0
  92. package/src/sap/fe/core/messagebundle_bg.properties +4 -0
  93. package/src/sap/fe/core/messagebundle_ca.properties +4 -0
  94. package/src/sap/fe/core/messagebundle_cnr.properties +4 -0
  95. package/src/sap/fe/core/messagebundle_cs.properties +4 -0
  96. package/src/sap/fe/core/messagebundle_cy.properties +4 -0
  97. package/src/sap/fe/core/messagebundle_da.properties +7 -3
  98. package/src/sap/fe/core/messagebundle_de.properties +4 -0
  99. package/src/sap/fe/core/messagebundle_el.properties +4 -0
  100. package/src/sap/fe/core/messagebundle_en.properties +4 -0
  101. package/src/sap/fe/core/messagebundle_en_GB.properties +4 -0
  102. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +4 -0
  103. package/src/sap/fe/core/messagebundle_es.properties +4 -0
  104. package/src/sap/fe/core/messagebundle_es_MX.properties +4 -0
  105. package/src/sap/fe/core/messagebundle_et.properties +4 -0
  106. package/src/sap/fe/core/messagebundle_fi.properties +4 -0
  107. package/src/sap/fe/core/messagebundle_fr.properties +4 -0
  108. package/src/sap/fe/core/messagebundle_fr_CA.properties +4 -0
  109. package/src/sap/fe/core/messagebundle_hi.properties +4 -0
  110. package/src/sap/fe/core/messagebundle_hr.properties +4 -0
  111. package/src/sap/fe/core/messagebundle_hu.properties +4 -0
  112. package/src/sap/fe/core/messagebundle_id.properties +4 -0
  113. package/src/sap/fe/core/messagebundle_it.properties +4 -0
  114. package/src/sap/fe/core/messagebundle_iw.properties +4 -0
  115. package/src/sap/fe/core/messagebundle_ja.properties +4 -0
  116. package/src/sap/fe/core/messagebundle_kk.properties +4 -0
  117. package/src/sap/fe/core/messagebundle_ko.properties +4 -0
  118. package/src/sap/fe/core/messagebundle_lt.properties +4 -0
  119. package/src/sap/fe/core/messagebundle_lv.properties +5 -1
  120. package/src/sap/fe/core/messagebundle_mk.properties +4 -0
  121. package/src/sap/fe/core/messagebundle_ms.properties +4 -0
  122. package/src/sap/fe/core/messagebundle_nl.properties +4 -0
  123. package/src/sap/fe/core/messagebundle_no.properties +4 -0
  124. package/src/sap/fe/core/messagebundle_pl.properties +4 -0
  125. package/src/sap/fe/core/messagebundle_pt.properties +4 -0
  126. package/src/sap/fe/core/messagebundle_pt_PT.properties +4 -0
  127. package/src/sap/fe/core/messagebundle_ro.properties +4 -0
  128. package/src/sap/fe/core/messagebundle_ru.properties +4 -0
  129. package/src/sap/fe/core/messagebundle_sh.properties +4 -0
  130. package/src/sap/fe/core/messagebundle_sk.properties +4 -0
  131. package/src/sap/fe/core/messagebundle_sl.properties +4 -0
  132. package/src/sap/fe/core/messagebundle_sr.properties +4 -0
  133. package/src/sap/fe/core/messagebundle_sv.properties +4 -0
  134. package/src/sap/fe/core/messagebundle_th.properties +4 -0
  135. package/src/sap/fe/core/messagebundle_tr.properties +4 -0
  136. package/src/sap/fe/core/messagebundle_uk.properties +5 -1
  137. package/src/sap/fe/core/messagebundle_vi.properties +4 -0
  138. package/src/sap/fe/core/messagebundle_zh_CN.properties +4 -0
  139. package/src/sap/fe/core/messagebundle_zh_TW.properties +4 -0
  140. package/src/sap/fe/core/rootView/RootViewBaseController.js +54 -22
  141. package/src/sap/fe/core/rootView/RootViewBaseController.ts +72 -34
  142. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.js +14 -4
  143. package/src/sap/fe/core/services/CollaborationManagerServiceFactory.ts +16 -3
  144. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -4
  145. package/src/sap/fe/core/services/RoutingServiceFactory.ts +3 -3
  146. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +13 -6
  147. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +17 -5
  148. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +11 -4
  149. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +17 -2
  150. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +6 -2
  151. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +5 -0
  152. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.js +6 -2
  153. package/src/sap/fe/core/services/valueHelpService/HistoryOptOutProvider.ts +5 -1
  154. package/src/sap/fe/core/templating/CriticalityFormatters.js +3 -3
  155. package/src/sap/fe/core/templating/CriticalityFormatters.ts +7 -6
  156. package/src/sap/fe/core/templating/UIFormatters.js +18 -4
  157. package/src/sap/fe/core/templating/UIFormatters.ts +20 -7
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sapui5/sap.fe.core",
3
- "version": "1.140.0",
3
+ "version": "1.141.0",
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.140.0</version>
9
+ <version>1.141.0</version>
10
10
 
11
11
  <documentation>UI5 library: sap.fe.core</documentation>
12
12
 
@@ -16,6 +16,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
16
16
  function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
17
17
  function _applyDecoratedDescriptor(i, e, r, n, l) { var a = {}; return Object.keys(n).forEach(function (i) { a[i] = n[i]; }), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = !0), a = r.slice().reverse().reduce(function (r, n) { return n(i, e, r) || r; }, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a; }
18
18
  function _initializerWarningHelper(r, e) { throw Error("Decorating class property failed. Please ensure that transform-class-properties is enabled and runs after the decorators transform."); }
19
+ /**
20
+ * Represents the additional configuration that can be provided by libraries.
21
+ */
22
+
19
23
  const StartupMode = library.StartupMode;
20
24
  const NAVCONF = {
21
25
  FCL: {
@@ -146,16 +150,33 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
146
150
  }
147
151
  _this = _UIComponent.call(this, ...args) || this;
148
152
  _initializerDefineProperty(_this, "__implements__sap_ui_core_IAsyncContentCreation", _descriptor, _this);
153
+ /**
154
+ * The additional configuration for the application.
155
+ * @private
156
+ */
157
+ _this.additionalConfiguration = {};
149
158
  _this.startupMode = StartupMode.Normal;
150
159
  _this._startedServices = [];
151
160
  _this.isAdaptationEnabled = false;
152
161
  _this.isExiting = false;
153
162
  _this.pageConfigurationChanges = {};
154
163
  _this.suspended = false;
164
+ _this.discardPromise = Promise.resolve();
155
165
  return _this;
156
166
  }
157
167
  _inheritsLoose(AppComponent, _UIComponent);
158
168
  var _proto = AppComponent.prototype;
169
+ /**
170
+ * Gets the additional configuration for the application.
171
+ * @returns The additional configuration
172
+ */
173
+ _proto.getAdditionalConfiguration = function getAdditionalConfiguration() {
174
+ return this.additionalConfiguration;
175
+ }
176
+
177
+ /**
178
+ * Registered handlers for modifying additional configuration.
179
+ */;
159
180
  _proto._isFclEnabled = function _isFclEnabled() {
160
181
  const oManifestUI5 = this.getManifestEntry("sap.ui5");
161
182
  return oManifestUI5?.routing?.config?.routerClass === NAVCONF.FCL.ROUTERCLASS;
@@ -167,6 +188,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
167
188
  return this.isAdaptationEnabled;
168
189
  }
169
190
 
191
+ /**
192
+ * Register a handler for modifying additional configuration.
193
+ * The handler will be called before feature toggles are initialized.
194
+ * @param handler The handler function that will modify the additional configuration
195
+ */;
196
+ AppComponent.registerConfigurationHandlers = function registerConfigurationHandlers(handler) {
197
+ this.configurationHandlers.push(handler);
198
+ }
199
+
170
200
  /**
171
201
  * Provides a hook to initialize feature toggles.
172
202
  *
@@ -356,6 +386,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
356
386
  };
357
387
  _proto.onServicesStarted = async function onServicesStarted(allServices) {
358
388
  this._startedServices = allServices;
389
+ // Execute all registered configuration handlers
390
+ await Promise.all(AppComponent.configurationHandlers.map(async handler => handler(this.additionalConfiguration)));
359
391
  await this.initializeFeatureToggles();
360
392
  await Promise.allSettled(AppComponent.instanceDependentProcesses.map(async fnProcess => {
361
393
  return fnProcess.call(null, this);
@@ -444,7 +476,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
444
476
 
445
477
  // As we need to cleanup the application / handle the dirty object we need to call our cleanup before the models are destroyed
446
478
  this.getRoutingService()?.beforeExit?.();
447
- this.unregisterStickySessionCallbacks();
479
+ this.unregisterCallbacks();
448
480
  _UIComponent.prototype.destroy.call(this, bSuppressInvalidate);
449
481
  if (oHeaders && oMainModel.oRequestor) {
450
482
  oMainModel.oRequestor.mHeaders = oHeaders;
@@ -514,6 +546,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
514
546
  };
515
547
  _proto.isSuspended = function isSuspended() {
516
548
  return this.suspended;
549
+ };
550
+ _proto.isAppComponentBusy = async function isAppComponentBusy() {
551
+ return this.discardPromise;
517
552
  }
518
553
 
519
554
  /**
@@ -567,33 +602,41 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
567
602
  /**
568
603
  * Registers the callbacks related to a sticky edit session.
569
604
  * @param dirtyStateProviderCallback
570
- * @param sessionTimeoutCallback
571
605
  * @param discardAfterNavigationCallback
606
+ * @param sessionTimeoutCallback
572
607
  */;
573
- _proto.registerStickySessionCallbacks = function registerStickySessionCallbacks(dirtyStateProviderCallback, sessionTimeoutCallback, discardAfterNavigationCallback) {
574
- this.stickyDirtyStateProviderCallback = dirtyStateProviderCallback;
608
+ _proto.registerCallbacks = function registerCallbacks(dirtyStateProviderCallback, discardAfterNavigationCallback, sessionTimeoutCallback) {
609
+ this.dirtyStateProviderCallback = dirtyStateProviderCallback;
575
610
  this.getShellServices().registerDirtyStateProvider(dirtyStateProviderCallback);
576
- this.stickySessionTimeoutCallback = sessionTimeoutCallback;
577
- this.getModel().attachSessionTimeout(sessionTimeoutCallback);
578
- this.stickyDiscardAfterNavigationCallback = discardAfterNavigationCallback;
579
- this.getRoutingService().attachRouteMatched({}, discardAfterNavigationCallback);
611
+ if (sessionTimeoutCallback) {
612
+ this.stickySessionTimeoutCallback = sessionTimeoutCallback;
613
+ this.getModel().attachSessionTimeout(sessionTimeoutCallback);
614
+ }
615
+ this.discardAfterNavigationCallback = discardAfterNavigationCallback;
616
+ this._routeMatchHandler = () => {
617
+ if (this.discardAfterNavigationCallback) {
618
+ this.discardPromise = this.discardAfterNavigationCallback();
619
+ }
620
+ };
621
+ this.getRoutingService().attachRouteMatched({}, this._routeMatchHandler);
580
622
  }
581
623
 
582
624
  /**
583
625
  * Unregisters the callbacks related to a sticky edit session.
584
626
  */;
585
- _proto.unregisterStickySessionCallbacks = function unregisterStickySessionCallbacks() {
586
- if (this.stickyDirtyStateProviderCallback) {
587
- this.getShellServices().deregisterDirtyStateProvider(this.stickyDirtyStateProviderCallback);
588
- this.stickyDirtyStateProviderCallback = undefined;
627
+ _proto.unregisterCallbacks = function unregisterCallbacks() {
628
+ if (this.dirtyStateProviderCallback) {
629
+ this.getShellServices().deregisterDirtyStateProvider(this.dirtyStateProviderCallback);
630
+ this.dirtyStateProviderCallback = undefined;
589
631
  }
590
632
  if (this.stickySessionTimeoutCallback && this.getModel()) {
591
633
  this.getModel().detachSessionTimeout(this.stickySessionTimeoutCallback);
592
634
  this.stickySessionTimeoutCallback = undefined;
593
635
  }
594
- if (this.stickyDiscardAfterNavigationCallback) {
595
- this.getRoutingService().detachRouteMatched(this.stickyDiscardAfterNavigationCallback);
596
- this.stickyDiscardAfterNavigationCallback = undefined;
636
+ if (this._routeMatchHandler) {
637
+ this.getRoutingService().detachRouteMatched(this._routeMatchHandler);
638
+ this._routeMatchHandler = undefined;
639
+ this.discardAfterNavigationCallback = undefined;
597
640
  }
598
641
  }
599
642
 
@@ -607,7 +650,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
607
650
  return !!this.getComponentData().feEnvironment;
608
651
  };
609
652
  return AppComponent;
610
- }(UIComponent), _AppComponent.instanceMap = {}, _AppComponent.instanceDependentProcesses = [], _AppComponent._customManifestChecks = [], _AppComponent), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IAsyncContentCreation", [_dec2], {
653
+ }(UIComponent), _AppComponent.instanceMap = {}, _AppComponent.configurationHandlers = [], _AppComponent.instanceDependentProcesses = [], _AppComponent._customManifestChecks = [], _AppComponent), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IAsyncContentCreation", [_dec2], {
611
654
  configurable: true,
612
655
  enumerable: true,
613
656
  writable: true,
@@ -617,4 +660,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
617
660
  }), _class2)) || _class);
618
661
  return AppComponent;
619
662
  }, false);
620
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0IiwiX3ZlcnNpb24iLCJzZXJ2aWNlcyIsInZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZmFjdG9yeU5hbWUiLCJzdGFydHVwIiwicmVzb3VyY2VNb2RlbCIsInNldHRpbmdzIiwiYnVuZGxlcyIsIm1vZGVsTmFtZSIsInJvdXRpbmdTZXJ2aWNlIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsImNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJ0ZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiQ29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJyb290VmlldyIsInZpZXdOYW1lIiwiaWQiLCJyb3V0aW5nIiwiY29udHJvbElkIiwicm91dGVyQ2xhc3MiLCJ2aWV3VHlwZSIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImNvbnRhaW5lck9wdGlvbnMiLCJwcm9wYWdhdGVNb2RlbCIsImRlc2lnbnRpbWUiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQXBwQ29tcG9uZW50IiwiX1VJQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwic3RhcnR1cE1vZGUiLCJOb3JtYWwiLCJfc3RhcnRlZFNlcnZpY2VzIiwiaXNBZGFwdGF0aW9uRW5hYmxlZCIsImlzRXhpdGluZyIsInBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsInN1c3BlbmRlZCIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiX2lzRmNsRW5hYmxlZCIsIm9NYW5pZmVzdFVJNSIsImdldE1hbmlmZXN0RW50cnkiLCJzZXRBZGFwdGF0aW9uTW9kZSIsImlzQWRhcHRhdGlvbk1vZGUiLCJpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMiLCJQcm9taXNlIiwicmVzb2x2ZSIsImNoYW5nZVBhZ2VDb25maWd1cmF0aW9uIiwicGFnZUlkIiwicGF0aCIsInZhbHVlIiwiY2hhbmdlQ29uZmlndXJhdGlvbiIsImdldE1hbmlmZXN0IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJzZXRDYXBhYmlsaXR5IiwiY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMiLCJnZXRSb3V0ZXJQcm94eSIsIl9vUm91dGVyUHJveHkiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJfb0FwcFN0YXRlSGFuZGxlciIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImdldFJvb3RDb250cm9sIiwiZ2V0Q29udHJvbGxlciIsImdldFJvb3RDb250YWluZXIiLCJnZXRDb250ZW50IiwiZ2V0U3RhcnR1cE1vZGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsIkNyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsIkF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwiRGVlcGxpbmsiLCJpbml0IiwicGFyYW1zIiwiVVJMU2VhcmNoUGFyYW1zIiwid2luZG93IiwibG9jYXRpb24iLCJzZWFyY2giLCJoYXMiLCJzZXRUaW1lb3V0IiwiTGlicmFyeSIsImxvYWQiLCJuYW1lIiwiX2luaXRpYWxpemVkS2VlcGVyIiwiUHJvbWlzZUtlZXBlciIsImluaXRpYWxpemVkIiwicHJvbWlzZSIsInVpTW9kZWwiLCJKU09OTW9kZWwiLCJlZGl0TW9kZSIsIkVkaXRNb2RlIiwiRGlzcGxheSIsImlzRWRpdGFibGUiLCJkcmFmdFN0YXR1cyIsIkRyYWZ0U3RhdHVzIiwiQ2xlYXIiLCJidXN5IiwiYnVzeUxvY2FsIiwicGFnZXMiLCJvSW50ZXJuYWxNb2RlbCIsInNldERlZmF1bHRCaW5kaW5nTW9kZSIsIk1vZGVsSGVscGVyIiwiZW5oYW5jZVVpSlNPTk1vZGVsIiwiZW5oYW5jZUludGVybmFsSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJiSW5pdGlhbGl6ZVJvdXRpbmciLCJ1bmRlZmluZWQiLCJSb3V0ZXJQcm94eSIsIkFwcFN0YXRlSGFuZGxlciIsIl9vRGlhZ25vc3RpY3MiLCJEaWFnbm9zdGljcyIsIm9Nb2RlbCIsImdldE1vZGVsIiwiaXNBIiwiZW5oYW5jZU9EYXRhTW9kZWwiLCJzZXRSZXRyeUFmdGVySGFuZGxlciIsImh0dHA1MDNSZXRyeUhhbmRsZXIiLCJiaW5kIiwiZW50aXR5Q29udGFpbmVyIiwiZ2V0TWV0YU1vZGVsIiwicmVxdWVzdE9iamVjdCIsImFwcCIsImRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQiLCJjaGVja1JvdXRpbmdDb25maWd1cmF0aW9uIiwiX2N1c3RvbU1hbmlmZXN0Q2hlY2tzIiwiZm9yRWFjaCIsImZuUHJvY2VzcyIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJlcnJvciIsIkhUVFA1MDNIYW5kbGVyIiwiaGFuZGxlNTAzRGVsYXkiLCJnZXRSZXNvdXJjZU1vZGVsIiwiTG9nIiwiaW5mbyIsImluY2x1ZGVzIiwiRXJyb3IiLCJvblNlcnZpY2VzU3RhcnRlZCIsImFsbFNlcnZpY2VzIiwiYWxsU2V0dGxlZCIsImluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzIiwibWFwIiwiZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uIiwidGhlbiIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJpbml0aWFsaXplIiwiZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJyZWdpc3RlclNoZWxsSG9vayIsImNhdGNoIiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsInRvU3RyaW5nIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImdldERpYWdub3N0aWNzIiwiYlN1cHByZXNzSW52YWxpZGF0ZSIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwidW5yZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRWaWV3UHJlbG9hZGVyU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiZ2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiZ2V0VGVsZW1ldHJ5U2VydmljZSIsImdldElubGluZUVkaXRTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJzdXNwZW5kIiwib25TdXNwZW5kIiwiaXNTdXNwZW5kZWQiLCJuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsImV4Y2VwdGlvbiIsInVubG9jayIsImlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCIsInJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcCIsInB1c2giLCJyZWdpc3RlckluaXRDaGVja3MiLCJyZWdpc3RlclN0aWNreVNlc3Npb25DYWxsYmFja3MiLCJkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayIsInNlc3Npb25UaW1lb3V0Q2FsbGJhY2siLCJkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayIsInJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwic3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayIsImF0dGFjaFNlc3Npb25UaW1lb3V0Iiwic3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwiZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsImRldGFjaFNlc3Npb25UaW1lb3V0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2lzRW1iZWRkZWQiLCJmZUVudmlyb25tZW50IiwiVUlDb21wb25lbnQiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFwcENvbXBvbmVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIEZsZXhpYmxlQ29sdW1uTGF5b3V0IGZyb20gXCJzYXAvZi9GbGV4aWJsZUNvbHVtbkxheW91dFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGltcGxlbWVudEludGVyZmFjZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBBcHBTdGF0ZUhhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0FwcFN0YXRlSGFuZGxlclwiO1xuaW1wb3J0IFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgSFRUUDUwM0hhbmRsZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvSFRUUDUwM0hhbmRsZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFByb21pc2VLZWVwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvUHJvbWlzZUtlZXBlclwiO1xuaW1wb3J0IGxpYnJhcnkgZnJvbSBcInNhcC9mZS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB7IGNoYW5nZUNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvbWFuaWZlc3RNZXJnZXIvQ2hhbmdlUGFnZUNvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCB0eXBlIFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL3Jvb3RWaWV3L1Jvb3RWaWV3QmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb250ZXh0U2hhcmluZ1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29udGV4dFNoYXJpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvRW52aXJvbm1lbnRTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJbmxpbmVFZGl0U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9JbmxpbmVFZGl0U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvTmF2aWdhdGlvblNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1JvdXRpbmdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBJU2hlbGxTZXJ2aWNlcyB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9TaGVsbFNlcnZpY2VzRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBTaWRlRWZmZWN0c1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2lkZUVmZmVjdHNTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBUZWxlbWV0cnlTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbGVtZXRyeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvY29sbGFib3JhdGl2ZURyYWZ0U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCBEaWFnbm9zdGljcyBmcm9tIFwic2FwL2ZlL2NvcmUvc3VwcG9ydC9EaWFnbm9zdGljc1wiO1xuaW1wb3J0IHR5cGUgTmF2Q29udGFpbmVyIGZyb20gXCJzYXAvbS9OYXZDb250YWluZXJcIjtcbmltcG9ydCBSb3V0ZXIgZnJvbSBcInNhcC9tL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0Q29udGVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9NYW5pZmVzdFwiO1xuaW1wb3J0IFVJQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9VSUNvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBJQXN5bmNDb250ZW50Q3JlYXRpb24gfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCB0eXBlIFNlcnZpY2UgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZVwiO1xuaW1wb3J0IHR5cGUgTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9Nb2RlbFwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9DdXJyZW5jeVwiO1xuaW1wb3J0IFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvVW5pdFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCIuL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB7IGRlbGV0ZU1vZGVsQ2FjaGVEYXRhIH0gZnJvbSBcIi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwiLi9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9WYWx1ZUhlbHBIaXN0b3J5U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVmlld1ByZWxvYWRlclNlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlcy9WaWV3UHJlbG9hZGVyU2VydmljZUZhY3RvcnlcIjtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuY29uc3QgTkFWQ09ORiA9IHtcblx0RkNMOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnREYXRhID0ge1xuXHRzdGFydHVwUGFyYW1ldGVycz86IFN0YXJ0dXBQYXJhbWV0ZXJzO1xuXHQvL2ZlRW52aXJvbm1lbnQgaXMgb2JqZWN0IHdoaWNoIGlzIHJlY2VpdmVkIGFzIGEgcGFydCBvZiB0aGUgY29tcG9uZW50IGRhdGEgZm9yIE15IEluYm94IGFwcGxpY2F0aW9ucy5cblx0ZmVFbnZpcm9ubWVudD86IHtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0SW50ZW50KCkgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VtYW50aWNPYmplY3QgYW5kIGFjdGlvbiBhcyBzZXBhcmF0ZSBwcm9wZXJ0eS12YWx1ZSBlbnRyaWVzIHRoYXQgYXJlIHRoZW4gdXNlZCB0byB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b24uXG5cdFx0Z2V0SW50ZW50OiBGdW5jdGlvbjtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eSgpIHRoYXQgcmV0dXJucyBib29sZWFuIHZhbHVlcyh0cnVlIG9yIGZhbHNlKSB3aGljaCBkZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzaGFyZSBidXR0b24uXG5cdFx0Z2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eTogRnVuY3Rpb247XG5cdH07XG59O1xuLy8gS2VlcCBhIHJlZmVyZW5jZSBzbyBhcyB0byBrZWVwIHRoZSBpbXBvcnQgZGVzcGl0ZSBpdCBub3QgYmVpbmcgZGlyZWN0bHkgdXNlZFxuY29uc3QgX21Sb3V0ZXIgPSBSb3V0ZXI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBQYXJhbWV0ZXJzID0ge1xuXHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG59ICYgUmVjb3JkPHN0cmluZywgdW5rbm93bltdPjtcbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBwcm9wZXJseSBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wgd2hlbiB1c2luZyBzYXAuZi5yb3V0aW5nLlJvdXRlciAoRkNMIHVzZSBjYXNlKSA8YnIvPlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIiwge1xuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRfdmVyc2lvbjogXCIyLjAuMFwiLFxuXHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRzZXJ2aWNlczoge1xuXHRcdFx0XHR2aWV3UHJlbG9hZGVyU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlZpZXdQcmVsb2FkZXJTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5saW5lRWRpdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5JbmxpbmVFZGl0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCBpbXBsZW1lbnRzIElBc3luY0NvbnRlbnRDcmVhdGlvbiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JQXN5bmNDb250ZW50Q3JlYXRpb24gPSB0cnVlO1xuXG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXG5cdHByaXZhdGUgX29Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdHByaXZhdGUgX29BcHBTdGF0ZUhhbmRsZXIhOiBBcHBTdGF0ZUhhbmRsZXI7XG5cblx0cHJpdmF0ZSBiSW5pdGlhbGl6ZVJvdXRpbmc/OiBib29sZWFuO1xuXG5cdHByaXZhdGUgX29EaWFnbm9zdGljcyE6IERpYWdub3N0aWNzO1xuXG5cdHByaXZhdGUgZW50aXR5Q29udGFpbmVyITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIHN0YXJ0dXBNb2RlOiBzdHJpbmcgPSBTdGFydHVwTW9kZS5Ob3JtYWw7XG5cblx0cHJpdmF0ZSBfc3RhcnRlZFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10gPSBbXTtcblxuXHRwdWJsaWMgaW5pdGlhbGl6ZWQhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgX2luaXRpYWxpemVkS2VlcGVyITogUHJvbWlzZUtlZXBlcjx2b2lkPjtcblxuXHRwcml2YXRlIGlzQWRhcHRhdGlvbkVuYWJsZWQgPSBmYWxzZTtcblxuXHRwdWJsaWMgaXNFeGl0aW5nID0gZmFsc2U7XG5cblx0cHVibGljIHBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlczogUmVjb3JkPHN0cmluZywgc3RyaW5nW10+ID0ge307XG5cblx0cHJpdmF0ZSBzdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrPzogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBzdXNwZW5kZWQgPSBmYWxzZTtcblxuXHQvKipcblx0ICogU2luZ2xldG9uIHRvIGhvbGQgcHJvY2Vzc2VzIGZyb20gbGlicmFyaWVzIHRoYXQgbmVlZCB0byBiZSBydW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHByaW9yIHRvIHN0YXJ0dXAuXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlczogKChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTaW5nbGV0b24gaG9sZGluZyBjdXN0b20gaW5pdGlhbGl6YXRpb24gY2hlY2tzIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgbGlicmFyaWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgX2N1c3RvbU1hbmlmZXN0Q2hlY2tzOiAoKG1hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSkgPT4gdm9pZClbXSA9IFtdO1xuXG5cdF9pc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKTtcblx0XHRyZXR1cm4gb01hbmlmZXN0VUk1Py5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTUztcblx0fVxuXG5cdHNldEFkYXB0YXRpb25Nb2RlKGlzQWRhcHRhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQgPSBpc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uLCB1c2UgdGhlIHtAbGluayBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb259IG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aG91dCBhbnkgdmFsdWUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIHByb2Nlc3Nlc1xuXHQgKi9cblx0YXN5bmMgaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGxpY2F0aW9uc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBpbiB0aGUgcGFnZSBzZXR0aW5ncyBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNoYW5nZVBhZ2VDb25maWd1cmF0aW9uKHBhZ2VJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSBjaGFuZ2VDb25maWd1cmF0aW9uKHRoaXMuZ2V0TWFuaWZlc3QoKSwgcGFnZUlkLCBwYXRoLCB2YWx1ZSwgdHJ1ZSwgdGhpcykgYXMgTWFuaWZlc3RDb250ZW50O1xuXHRcdGlmIChcblx0XHRcdHBhdGggPT09IFwiYXBwL2Rpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiAmJlxuXHRcdFx0KG1hbmlmZXN0Py5bXCJzYXAuZmVcIl0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KT8uW1wiYXBwXCJdPy5bXCJkaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCJdID09PSB2YWx1ZVxuXHRcdCkge1xuXHRcdFx0dGhpcy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLnNldENhcGFiaWxpdHkoXCJEaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCIsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIGFsbCByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuXHQgKi9cblx0Y2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0Y29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1zdXBwb3J0XCIpKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAuZmUudG9vbHNcIiB9KTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH1cblx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnByb21pc2U7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uPE9EYXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VPRGF0YU1vZGVsKG9Nb2RlbCwgdGhpcyk7XG5cdFx0XHRvTW9kZWwuc2V0UmV0cnlBZnRlckhhbmRsZXIodGhpcy5odHRwNTAzUmV0cnlIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cdFx0QXBwQ29tcG9uZW50Ll9jdXN0b21NYW5pZmVzdENoZWNrcy5mb3JFYWNoKChmblByb2Nlc3MpID0+IHtcblx0XHRcdHJldHVybiBmblByb2Nlc3MuY2FsbCh0aGlzLCBvTWFuaWZlc3RVSTUpO1xuXHRcdH0pO1xuXG5cdFx0Ly8gdGhlIGluaXQgZnVuY3Rpb24gY29uZmlndXJlcyB0aGUgcm91dGluZyBhY2NvcmRpbmcgdG8gdGhlIHNldHRpbmdzIGFib3ZlXG5cdFx0Ly8gaXQgd2lsbCBjYWxsIHRoZSBjcmVhdGVDb250ZW50IGZ1bmN0aW9uIHRvIGluc3RhbnRpYXRlIHRoZSBSb290VmlldyBhbmQgYWRkIGl0IHRvIHRoZSBVSUNvbXBvbmVudCBhZ2dyZWdhdGlvbnNcblxuXHRcdHN1cGVyLmluaXQoKTtcblx0XHRBcHBDb21wb25lbnQuaW5zdGFuY2VNYXBbdGhpcy5nZXRJZCgpXSA9IHRoaXM7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGh0dHA1MDNSZXRyeUhhbmRsZXIoZXJyb3I6IEVycm9yICYgeyByZXRyeUFmdGVyPzogRGF0ZSB9KTogUHJvbWlzZTx1bmRlZmluZWQ+IHtcblx0XHRyZXR1cm4gSFRUUDUwM0hhbmRsZXIuaGFuZGxlNTAzRGVsYXkoZXJyb3IsIHRoaXMuZ2V0Um9vdENvbnRyb2woKSwgZ2V0UmVzb3VyY2VNb2RlbCh0aGlzKSk7XG5cdH1cblxuXHRwcml2YXRlIGNoZWNrUm91dGluZ0NvbmZpZ3VyYXRpb24ob01hbmlmZXN0VUk1OiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdKTogdm9pZCB7XG5cdFx0aWYgKG9NYW5pZmVzdFVJNT8ucm9vdFZpZXc/LnZpZXdOYW1lKSB7XG5cdFx0XHQvLyBUaGUgYXBwbGljYXRpb24gc3BlY2lmaWVkIGFuIG93biByb290IHZpZXcgaW4gdGhlIG1hbmlmZXN0XG5cblx0XHRcdC8vIFJvb3QgVmlldyB3YXMgbW92ZWQgZnJvbSBzYXAuZmUudGVtcGxhdGVzIHRvIHNhcC5mZS5jb3JlIC0ga2VlcCBpdCBjb21wYXRpYmxlXG5cdFx0XHRpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuRkNMLlZJRVdOQU1FO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FX0NPTVBBVElCSUxJVFkpIHtcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUU7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLkZDTC5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuRkNMLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLkZDTC5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSAmJlxuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1Ncblx0XHRcdCkge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke05BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fSBlbHNlIGlmIChvTWFuaWZlc3RVSTUucm9vdFZpZXc/LnZpZXdOYW1lPy5pbmNsdWRlcyhcInNhcC5mZS5jb3JlLnJvb3RWaWV3XCIpKSB7XG5cdFx0XHRcdHRocm93IEVycm9yKFxuXHRcdFx0XHRcdGBcXG5Xcm9uZyBjb25maWd1cmF0aW9uIGZvciB0aGUgY291cGxlIChyb290Vmlldy9yb3V0ZXJDbGFzcykgaW4gbWFuaWZlc3QgZmlsZS5cXG5gICtcblx0XHRcdFx0XHRcdGBDdXJyZW50IHZhbHVlcyBhcmUgOigke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX0vJHtcblx0XHRcdFx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgfHwgXCI8bWlzc2luZyByb3V0ZXIgY2xhc3M+XCJcblx0XHRcdFx0XHRcdH0pXFxuYCArXG5cdFx0XHRcdFx0XHRgRXhwZWN0ZWQgdmFsdWVzIGFyZSBcXG5gICtcblx0XHRcdFx0XHRcdGBcXHQgLSAoJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX0vJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU30pXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5GQ0wuVklFV05BTUV9LyR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9KWBcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy5pbmZvKGBSb290Y29udGFpbmVyOiBcIiR7b01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lfVwiIC0gUm91dGVyY2xhc3M6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5ST1VURVJDTEFTU31cImApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGFzeW5jIG9uU2VydmljZXNTdGFydGVkKGFsbFNlcnZpY2VzOiBTZXJ2aWNlPHVua25vd24+W10pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLl9zdGFydGVkU2VydmljZXMgPSBhbGxTZXJ2aWNlcztcblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZURlcGVuZGVudFByb2Nlc3Nlcy5tYXAoYXN5bmMgKGZuUHJvY2VzcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZm5Qcm9jZXNzLmNhbGwobnVsbCwgdGhpcyk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKS5yZWdpc3RlclNoZWxsSG9vaygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdENvbnRyb2woKS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vyci50b1N0cmluZygpfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gW107XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHRcdHRoaXMuY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTtcblx0fVxuXG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IERpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cblx0ZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNFeGl0aW5nID0gdHJ1ZTtcblxuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGRlbGV0ZSAod2luZG93IGFzIHVua25vd24pLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9IHRoaXMub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbD8ub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdD8uKCk7XG5cdFx0dGhpcy51bnJlZ2lzdGVyU3RpY2t5U2Vzc2lvbkNhbGxiYWNrcygpO1xuXHRcdHN1cGVyLmRlc3Ryb3koYlN1cHByZXNzSW52YWxpZGF0ZSk7XG5cdFx0aWYgKG9IZWFkZXJzICYmIG9NYWluTW9kZWwub1JlcXVlc3Rvcikge1xuXHRcdFx0b01haW5Nb2RlbC5vUmVxdWVzdG9yLm1IZWFkZXJzID0gb0hlYWRlcnM7XG5cdFx0fVxuXHR9XG5cblx0Z2V0Um91dGluZ1NlcnZpY2UoKTogUm91dGluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBSb3V0aW5nU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNoZWxsU2VydmljZXMoKTogSVNoZWxsU2VydmljZXMge1xuXHRcdHJldHVybiB7fSBhcyBJU2hlbGxTZXJ2aWNlczsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldE5hdmlnYXRpb25TZXJ2aWNlKCk6IE5hdmlnYXRpb25TZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgTmF2aWdhdGlvblNlcnZpY2U7IC8vIG92ZXJyaWRlbiBhdCBydW50aW1lXG5cdH1cblxuXHRnZXRTaWRlRWZmZWN0c1NlcnZpY2UoKTogU2lkZUVmZmVjdHNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgU2lkZUVmZmVjdHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKTogRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlKCk6IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZTtcblx0fVxuXG5cdGdldFZpZXdQcmVsb2FkZXJTZXJ2aWNlKCk6IFZpZXdQcmVsb2FkZXJTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgVmlld1ByZWxvYWRlclNlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZSgpOiBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGl2ZURyYWZ0U2VydmljZTtcblx0fVxuXG5cdGdldENvbnRleHRTaGFyaW5nU2VydmljZSgpOiBDb250ZXh0U2hhcmluZ1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb250ZXh0U2hhcmluZ1NlcnZpY2U7XG5cdH1cblxuXHRnZXRUZWxlbWV0cnlTZXJ2aWNlKCk6IFRlbGVtZXRyeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBUZWxlbWV0cnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKTogVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZTtcblx0fVxuXG5cdGdldElubGluZUVkaXRTZXJ2aWNlKCk6IElubGluZUVkaXRTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgSW5saW5lRWRpdFNlcnZpY2U7XG5cdH1cblxuXHRhc3luYyBnZXRTdGFydHVwUGFyYW1ldGVycygpOiBQcm9taXNlPFN0YXJ0dXBQYXJhbWV0ZXJzPiB7XG5cdFx0Y29uc3Qgb0NvbXBvbmVudERhdGEgPSB0aGlzLmdldENvbXBvbmVudERhdGEoKTtcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKChvQ29tcG9uZW50RGF0YSAmJiBvQ29tcG9uZW50RGF0YS5zdGFydHVwUGFyYW1ldGVycykgfHwge30pO1xuXHR9XG5cblx0cmVzdG9yZSgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyByZXN0b3JlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblJlc3RvcmU/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblJlc3RvcmUoKTtcblxuXHRcdC8vIFJlc2V0IGFsbCB2YWx1ZXMgaW4gdmVyc2lvbkFjdGl2YXRpb25TdGF0dXMgdG8gZmFsc2Vcblx0XHRBcHBTdGF0ZUhhbmRsZXIucmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cygpO1xuXG5cdFx0dGhpcy5zdXNwZW5kZWQgPSBmYWxzZTtcblx0fVxuXG5cdHN1c3BlbmQoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgc3VzcGVuZGVkXG5cdFx0Zm9yIChjb25zdCBzdGFydGVkU2VydmljZSBvZiB0aGlzLl9zdGFydGVkU2VydmljZXMpIHtcblx0XHRcdHN0YXJ0ZWRTZXJ2aWNlLm9uU3VzcGVuZD8uKCk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uU3VzcGVuZCgpO1xuXG5cdFx0dGhpcy5zdXNwZW5kZWQgPSB0cnVlO1xuXHR9XG5cblx0aXNTdXNwZW5kZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuc3VzcGVuZGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIgZnVuY3Rpb24gaXMgYSBwdWJsaWMgYXBpIHRoYXQgYWN0cyBhcyBhIHdyYXBwZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi4gSXQgcGFzc2VzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgZnVydGhlciB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVycyBEZWZpbmVzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgd2hpY2ggaXMgZnVydGhlciBwYXNzZWQgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi5cblx0ICovXG5cblx0YXN5bmMgbmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlcihzdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmdldE1vZGVsKFwidWlcIikpKSB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRzdGFydHVwUGFyYW1ldGVycyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgcm91dGluZ1NlcnZpY2UgPSB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCk7XG5cdFx0XHRcdGF3YWl0IHJvdXRpbmdTZXJ2aWNlLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAoc3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGV4Y2VwdGlvbiBhcyBzdHJpbmcpO1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRNb2RlbChcInVpXCIpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCB0byBhbGxvdyBkaXNhYmxpbmcgdGhlIENvbGxhYm9yYXRpb24gTWFuYWdlciBpbnRlZ3JhdGlvbiBmb3IgdGhlIE9WUCB1c2UgY2FzZS5cblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgY29sbGFib3JhdGlvbiBtYW5hZ2VyIHNlcnZpY2UgaXMgYWN0aXZlLlxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8gYmUgcnVuIGZvciBldmVyeSBpbnN0YW5jZSBwcmlvciB0byBzdGFydHVwLlxuXHQgKiBAcGFyYW0gZm5Qcm9jZXNzIEZ1bmN0aW9uIHRoYXQgaG9sZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHByb2Nlc3MuXG5cdCAqXG5cdCAqIFRoZSByZWdpc3RlcmVkIHByb2Nlc3MgY2FuIGJlIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLlxuXHQgKiBJdCBzaGFsbCBiZSBjYWxsZWQgd2l0aCB0aGUgQXBwQ29tcG9uZW50IGluc3RhbmNlIGFzIGEgcGFyYW1ldGVyIGJlZm9yZSBzdGFydHVwLlxuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcChmblByb2Nlc3M6IChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuXHRcdHRoaXMuaW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzZXMucHVzaChmblByb2Nlc3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBjdXN0b20gaW5pdGlhbGl6YXRpb24gY2hlY2tzIHRoYXQgYXJlIHJ1biBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIHJ1bm5pbmcgY2hlY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIGEgbGlicmFyeS5cblx0ICogVGhlc2UgY2hlY2tzIGFyZSBydW4gYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQgYW5kIGJlZm9yZSB0aGUgbWFuaWZlc3QgaXMgbWVyZ2VkLlxuXHQgKiBAcGFyYW0gZm5Qcm9jZXNzXG5cdCAqL1xuXHRzdGF0aWMgcmVnaXN0ZXJJbml0Q2hlY2tzKGZuUHJvY2VzczogKG1hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdHRoaXMuX2N1c3RvbU1hbmlmZXN0Q2hlY2tzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrXG5cdCAqIEBwYXJhbSBzZXNzaW9uVGltZW91dENhbGxiYWNrXG5cdCAqIEBwYXJhbSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2tcblx0ICovXG5cdHJlZ2lzdGVyU3RpY2t5U2Vzc2lvbkNhbGxiYWNrcyhcblx0XHRkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjazogRnVuY3Rpb24sXG5cdFx0c2Vzc2lvblRpbWVvdXRDYWxsYmFjazogRnVuY3Rpb24sXG5cdFx0ZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrOiBGdW5jdGlvblxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLnN0aWNreURpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spO1xuXG5cdFx0dGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrID0gc2Vzc2lvblRpbWVvdXRDYWxsYmFjaztcblx0XHR0aGlzLmdldE1vZGVsKCkuYXR0YWNoU2Vzc2lvblRpbWVvdXQoc2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cblx0XHR0aGlzLnN0aWNreURpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayA9IGRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaztcblx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHt9LCBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2spO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXJzIHRoZSBjYWxsYmFja3MgcmVsYXRlZCB0byBhIHN0aWNreSBlZGl0IHNlc3Npb24uXG5cdCAqL1xuXHR1bnJlZ2lzdGVyU3RpY2t5U2Vzc2lvbkNhbGxiYWNrcygpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5zdGlja3lEaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjaykge1xuXHRcdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkuZGVyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlcih0aGlzLnN0aWNreURpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5RGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgJiYgdGhpcy5nZXRNb2RlbCgpKSB7XG5cdFx0XHR0aGlzLmdldE1vZGVsKCkuZGV0YWNoU2Vzc2lvblRpbWVvdXQodGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuZGV0YWNoUm91dGVNYXRjaGVkKHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKTtcblx0XHRcdHRoaXMuc3RpY2t5RGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBpcyBlbWJlZGRlZCBpbiBhbm90aGVyIGFwcGxpY2F0aW9uLlxuXHQgKiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBkYXRhIGNvbnRhaW5zIGEgYGZlRW52aXJvbm1lbnRgIG9iamVjdC5cblx0ICogVGhpcyBpcyBzZXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGVtYmVkZGVkIGluIE15IEluYm94LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgZW1iZWRkZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdF9pc0VtYmVkZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpLmZlRW52aXJvbm1lbnQ7XG5cdH1cbn1cblxuaW50ZXJmYWNlIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuO1xuXHRnZXRNYW5pZmVzdCgpOiBNYW5pZmVzdENvbnRlbnQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmFwcFwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdO1xuXHRfZ2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIsIG1lcmdlZDogYm9vbGVhbik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLnVpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWlcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZlXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gfCB1bmRlZmluZWQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZpb3JpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmlvcmlcIl07XG5cdGdldENvbXBvbmVudERhdGEoKTogQ29tcG9uZW50RGF0YTtcblx0Z2V0Um9vdENvbnRyb2woKToge1xuXHRcdGdldENvbnRyb2xsZXIoKTogUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcblx0fSAmIFZpZXc7XG5cdGdldE1vZGVsKCk6IE9EYXRhTW9kZWw7XG5cdGdldE1vZGVsKG5hbWU6IFwidWlcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcENvbXBvbmVudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBLE1BQU1BLFdBQVcsR0FBR0MsT0FBTyxDQUFDRCxXQUFXO0VBQ3ZDLE1BQU1FLE9BQU8sR0FBRztJQUNmQyxHQUFHLEVBQUU7TUFDSkMsUUFBUSxFQUFFLDBCQUEwQjtNQUNwQ0Msc0JBQXNCLEVBQUUseUNBQXlDO01BQ2pFQyxXQUFXLEVBQUU7SUFDZCxDQUFDO0lBQ0RDLFlBQVksRUFBRTtNQUNiSCxRQUFRLEVBQUUsbUNBQW1DO01BQzdDQyxzQkFBc0IsRUFBRSxrREFBa0Q7TUFDMUVDLFdBQVcsRUFBRTtJQUNkO0VBQ0QsQ0FBQztFQVlEO0VBQ0EsTUFBTUUsUUFBUSxHQUFHQyxNQUFNO0VBS3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVhBLElBNkdNQyxZQUFZLElBQUFDLElBQUEsR0FqR2pCQyxjQUFjLENBQUMsMEJBQTBCLEVBQUU7SUFDM0NDLE1BQU0sRUFBRTtNQUNQQyxTQUFTLEVBQUU7SUFDWixDQUFDO0lBQ0RDLFFBQVEsRUFBRTtNQUNUQyxRQUFRLEVBQUUsT0FBTztNQUNqQixTQUFTLEVBQUU7UUFDVkMsUUFBUSxFQUFFO1VBQ1RDLG9CQUFvQixFQUFFO1lBQ3JCQyxXQUFXLEVBQUUsMkNBQTJDO1lBQ3hEQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RDLGFBQWEsRUFBRTtZQUNkRixXQUFXLEVBQUUsMkNBQTJDO1lBQ3hEQyxPQUFPLEVBQUUsU0FBUztZQUNsQkUsUUFBUSxFQUFFO2NBQ1RDLE9BQU8sRUFBRSxDQUFDLDJCQUEyQixDQUFDO2NBQ3RDQyxTQUFTLEVBQUU7WUFDWjtVQUNELENBQUM7VUFDREMsY0FBYyxFQUFFO1lBQ2ZOLFdBQVcsRUFBRSxxQ0FBcUM7WUFDbERDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRE0sYUFBYSxFQUFFO1lBQ2RQLFdBQVcsRUFBRSxvQ0FBb0M7WUFDakRDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRE8sY0FBYyxFQUFFO1lBQ2ZSLFdBQVcsRUFBRTtVQUNkLENBQUM7VUFDRFMsaUJBQWlCLEVBQUU7WUFDbEJULFdBQVcsRUFBRSx3Q0FBd0M7WUFDckRDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFMsdUJBQXVCLEVBQUU7WUFDeEJWLFdBQVcsRUFBRSx5Q0FBeUM7WUFDdERDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFUsa0JBQWtCLEVBQUU7WUFDbkJYLFdBQVcsRUFBRSx5Q0FBeUM7WUFDdERDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFcscUJBQXFCLEVBQUU7WUFDdEJaLFdBQVcsRUFBRSw0Q0FBNEM7WUFDekRDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRFksMkJBQTJCLEVBQUU7WUFDNUJiLFdBQVcsRUFBRSxrREFBa0Q7WUFDL0RDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRGEseUJBQXlCLEVBQUU7WUFDMUJkLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0RDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRGMsZ0JBQWdCLEVBQUU7WUFDakJmLFdBQVcsRUFBRSx1Q0FBdUM7WUFDcERDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRGUsdUJBQXVCLEVBQUU7WUFDeEJoQixXQUFXLEVBQUUsOENBQThDO1lBQzNEQyxPQUFPLEVBQUU7VUFDVixDQUFDO1VBQ0RnQix5QkFBeUIsRUFBRTtZQUMxQmpCLFdBQVcsRUFBRSxnREFBZ0Q7WUFDN0RDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDRGlCLHFCQUFxQixFQUFFO1lBQ3RCbEIsV0FBVyxFQUFFLDRDQUE0QztZQUN6REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEa0IsaUJBQWlCLEVBQUU7WUFDbEJuQixXQUFXLEVBQUUsd0NBQXdDO1lBQ3JEQyxPQUFPLEVBQUU7VUFDVjtRQUNELENBQUM7UUFDRG1CLFFBQVEsRUFBRTtVQUNUQyxRQUFRLEVBQUV0QyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUTtVQUN2Q3FDLEVBQUUsRUFBRTtRQUNMLENBQUM7UUFDREMsT0FBTyxFQUFFO1VBQ1I3QixNQUFNLEVBQUU7WUFDUDhCLFNBQVMsRUFBRSxZQUFZO1lBQ3ZCQyxXQUFXLEVBQUUxQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVztZQUM3Q3VDLFFBQVEsRUFBRSxLQUFLO1lBQ2ZDLGtCQUFrQixFQUFFLE9BQU87WUFDM0JDLGdCQUFnQixFQUFFO2NBQ2pCQyxjQUFjLEVBQUU7WUFDakI7VUFDRDtRQUNEO01BQ0Q7SUFDRCxDQUFDO0lBQ0RDLFVBQVUsRUFBRSxnREFBZ0Q7SUFFNURoRCxPQUFPLEVBQUU7RUFDVixDQUFDLENBQUMsRUFBQWlELEtBQUEsR0FFQUMsa0JBQWtCLENBQUMsbUNBQW1DLENBQUMsRUFBQXhDLElBQUEsQ0FBQXlDLE1BQUEsSUFBQUMsT0FBQSxJQUFBQyxhQUFBLDBCQUFBQyxZQUFBO0lBQUEsU0FBQTdDLGFBQUE7TUFBQSxJQUFBOEMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsWUFBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSxxREFBQVMsV0FBQSxFQUFBVCxLQUFBO01BQUFBLEtBQUEsQ0FlaERVLFdBQVcsR0FBV2xFLFdBQVcsQ0FBQ21FLE1BQU07TUFBQVgsS0FBQSxDQUV4Q1ksZ0JBQWdCLEdBQXVCLEVBQUU7TUFBQVosS0FBQSxDQU16Q2EsbUJBQW1CLEdBQUcsS0FBSztNQUFBYixLQUFBLENBRTVCYyxTQUFTLEdBQUcsS0FBSztNQUFBZCxLQUFBLENBRWpCZSx3QkFBd0IsR0FBNkIsQ0FBQyxDQUFDO01BQUFmLEtBQUEsQ0FRdERnQixTQUFTLEdBQUcsS0FBSztNQUFBLE9BQUFoQixLQUFBO0lBQUE7SUFBQWlCLGNBQUEsQ0FBQS9ELFlBQUEsRUFBQTZDLFlBQUE7SUFBQSxJQUFBbUIsTUFBQSxHQUFBaEUsWUFBQSxDQUFBaUUsU0FBQTtJQUFBRCxNQUFBLENBWXpCRSxhQUFhLEdBQWIsU0FBQUEsYUFBYUEsQ0FBQSxFQUFZO01BQ3hCLE1BQU1DLFlBQVksR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztNQUNyRCxPQUFPRCxZQUFZLEVBQUVuQyxPQUFPLEVBQUU3QixNQUFNLEVBQUUrQixXQUFXLEtBQUsxQyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0csV0FBVztJQUM5RSxDQUFDO0lBQUFvRSxNQUFBLENBRURLLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNWLG1CQUE0QixFQUFRO01BQ3JELElBQUksQ0FBQ0EsbUJBQW1CLEdBQUdBLG1CQUFtQjtJQUMvQyxDQUFDO0lBQUFLLE1BQUEsQ0FFRE0sZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFZO01BQzNCLE9BQU8sSUFBSSxDQUFDWCxtQkFBbUI7SUFDaEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQVBDO0lBQUFLLE1BQUEsQ0FRTU8sd0JBQXdCLEdBQTlCLGVBQU1BLHdCQUF3QkEsQ0FBQSxFQUFrQjtNQUMvQztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUM7SUFDekI7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQVQsTUFBQSxDQVNBVSx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFDQyxNQUFjLEVBQUVDLElBQVksRUFBRUMsS0FBYyxFQUFRO01BQzNFLE1BQU14RSxRQUFRLEdBQUd5RSxtQkFBbUIsQ0FBQyxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDLEVBQUVKLE1BQU0sRUFBRUMsSUFBSSxFQUFFQyxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBb0I7TUFDNUcsSUFDQ0QsSUFBSSxLQUFLLDRCQUE0QixJQUNwQ3ZFLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBK0MsS0FBSyxDQUFDLEdBQUcsd0JBQXdCLENBQUMsS0FBS3dFLEtBQUssRUFDL0c7UUFDRCxJQUFJLENBQUNHLDBCQUEwQixDQUFDLENBQUMsQ0FBQ0MsYUFBYSxDQUFDLHdCQUF3QixFQUFFSixLQUFLLENBQUM7TUFDakY7SUFDRDs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBYixNQUFBLENBR0FrQiw2QkFBNkIsR0FBN0IsU0FBQUEsNkJBQTZCQSxDQUFBLEVBQVM7TUFDckMsSUFBSSxDQUFDckIsd0JBQXdCLEdBQUcsQ0FBQyxDQUFDO0lBQ25DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBRyxNQUFBLENBS0FtQixjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFnQjtNQUM3QixPQUFPLElBQUksQ0FBQ0MsYUFBYTtJQUMxQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXBCLE1BQUEsQ0FLQXFCLGtCQUFrQixHQUFsQixTQUFBQSxrQkFBa0JBLENBQUEsRUFBb0I7TUFDckMsT0FBTyxJQUFJLENBQUNDLGlCQUFpQjtJQUM5Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXRCLE1BQUEsQ0FLQXVCLHFCQUFxQixHQUFyQixTQUFBQSxxQkFBcUJBLENBQUEsRUFBMkI7TUFDL0MsT0FBTyxJQUFJLENBQUNDLGNBQWMsQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxDQUFDO0lBQzdDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBekIsTUFBQSxDQUtBMEIsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUF3QztNQUN2RCxPQUFPLElBQUksQ0FBQ0YsY0FBYyxDQUFDLENBQUMsQ0FBQ0csVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDN0M7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBM0IsTUFBQSxDQUlBNEIsY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUEsRUFBVztNQUN4QixPQUFPLElBQUksQ0FBQ3BDLFdBQVc7SUFDeEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBUSxNQUFBLENBSUE2QixvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQVM7TUFDNUIsSUFBSSxDQUFDckMsV0FBVyxHQUFHbEUsV0FBVyxDQUFDd0csTUFBTTtJQUN0Qzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUE5QixNQUFBLENBSUErQix3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFBLEVBQVM7TUFDaEMsSUFBSSxDQUFDdkMsV0FBVyxHQUFHbEUsV0FBVyxDQUFDMEcsVUFBVTtJQUMxQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFoQyxNQUFBLENBSUFpQyxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFBLEVBQVM7TUFDOUIsSUFBSSxDQUFDekMsV0FBVyxHQUFHbEUsV0FBVyxDQUFDNEcsUUFBUTtJQUN4QyxDQUFDO0lBQUFsQyxNQUFBLENBRURtQyxJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osTUFBTUMsTUFBTSxHQUFHLElBQUlDLGVBQWUsQ0FBQ0MsTUFBTSxDQUFDQyxRQUFRLENBQUNDLE1BQU0sQ0FBQztNQUMxRCxJQUFJSixNQUFNLENBQUNLLEdBQUcsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFO1FBQ3ZDQyxVQUFVLENBQUMsWUFBWTtVQUN0QkMsT0FBTyxDQUFDQyxJQUFJLENBQUM7WUFBRUMsSUFBSSxFQUFFO1VBQWUsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsRUFBRSxJQUFJLENBQUM7TUFDVDtNQUNBLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsSUFBSUMsYUFBYSxDQUFPLENBQUM7TUFDbkQsSUFBSSxDQUFDQyxXQUFXLEdBQUcsSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0csT0FBTztNQUNsRCxNQUFNQyxPQUFPLEdBQUcsSUFBSUMsU0FBUyxDQUFDO1FBQzdCQyxRQUFRLEVBQUU3SCxPQUFPLENBQUM4SCxRQUFRLENBQUNDLE9BQU87UUFDbENDLFVBQVUsRUFBRSxLQUFLO1FBQ2pCQyxXQUFXLEVBQUVqSSxPQUFPLENBQUNrSSxXQUFXLENBQUNDLEtBQUs7UUFDdENDLElBQUksRUFBRSxLQUFLO1FBQ1hDLFNBQVMsRUFBRSxDQUFDLENBQUM7UUFDYkMsS0FBSyxFQUFFLENBQUM7TUFDVCxDQUFDLENBQUM7TUFDRixNQUFNQyxjQUFjLEdBQUcsSUFBSVgsU0FBUyxDQUFDO1FBQ3BDVSxLQUFLLEVBQUUsQ0FBQztNQUNULENBQUMsQ0FBQztNQUNGO01BQ0FYLE9BQU8sQ0FBQ2EscUJBQXFCLENBQUMsUUFBUSxDQUFDO01BQ3ZDO01BQ0FDLFdBQVcsQ0FBQ0Msa0JBQWtCLENBQUNmLE9BQU8sRUFBRTNILE9BQU8sQ0FBQztNQUNoRHlJLFdBQVcsQ0FBQ0Usd0JBQXdCLENBQUNKLGNBQWMsQ0FBQztNQUVwRCxJQUFJLENBQUNLLFFBQVEsQ0FBQ2pCLE9BQU8sRUFBRSxJQUFJLENBQUM7TUFDNUIsSUFBSSxDQUFDaUIsUUFBUSxDQUFDTCxjQUFjLEVBQUUsVUFBVSxDQUFDO01BRXpDLElBQUksQ0FBQ00sa0JBQWtCLEdBQUcsSUFBSSxDQUFDQSxrQkFBa0IsS0FBS0MsU0FBUyxHQUFHLElBQUksQ0FBQ0Qsa0JBQWtCLEdBQUcsSUFBSTtNQUNoRyxJQUFJLENBQUNoRCxhQUFhLEdBQUcsSUFBSWtELFdBQVcsQ0FBQyxDQUFDO01BQ3RDLElBQUksQ0FBQ2hELGlCQUFpQixHQUFHLElBQUlpRCxlQUFlLENBQUMsSUFBSSxDQUFDO01BQ2xELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDO01BRXRDLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNDLFFBQVEsQ0FBQyxDQUFDO01BQzlCLElBQUlELE1BQU0sRUFBRUUsR0FBRyxHQUFlLGtDQUFrQyxDQUFDLEVBQUU7UUFDbEVaLFdBQVcsQ0FBQ2EsaUJBQWlCLENBQUNILE1BQU0sRUFBRSxJQUFJLENBQUM7UUFDM0NBLE1BQU0sQ0FBQ0ksb0JBQW9CLENBQUMsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hFLElBQUksQ0FBQ0MsZUFBZSxHQUFHUCxNQUFNLENBQUNRLFlBQVksQ0FBQyxDQUFDLENBQUNDLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQztNQUNqRixDQUFDLE1BQU07UUFDTjtRQUNBLElBQUksQ0FBQ0YsZUFBZSxHQUFHekUsT0FBTyxDQUFDQyxPQUFPLENBQUMsQ0FBQztNQUN6QztNQUVBLElBQUksSUFBSSxDQUFDTCxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsRUFBRWdGLEdBQUcsRUFBRUMseUJBQXlCLEVBQUU7UUFDcEU7UUFDQTtRQUNBO1FBQ0FyQixXQUFXLENBQUNxQix5QkFBeUIsR0FBRyxJQUFJO01BQzdDO01BRUEsTUFBTWxGLFlBQVksR0FBRyxJQUFJLENBQUNZLFdBQVcsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO01BQ2xELElBQUksQ0FBQ3VFLHlCQUF5QixDQUFDbkYsWUFBWSxDQUFDO01BQzVDbkUsWUFBWSxDQUFDdUoscUJBQXFCLENBQUNDLE9BQU8sQ0FBRUMsU0FBUyxJQUFLO1FBQ3pELE9BQU9BLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQyxJQUFJLEVBQUVjLFlBQVksQ0FBQztNQUMxQyxDQUFDLENBQUM7O01BRUY7TUFDQTs7TUFFQXRCLFlBQUEsQ0FBQW9CLFNBQUEsQ0FBTWtDLElBQUksQ0FBQTlDLElBQUE7TUFDVnJELFlBQVksQ0FBQzBKLFdBQVcsQ0FBQyxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJO0lBQzlDLENBQUM7SUFBQTNGLE1BQUEsQ0FFYStFLG1CQUFtQixHQUFqQyxlQUFjQSxtQkFBbUJBLENBQUNhLEtBQW9DLEVBQXNCO01BQzNGLE9BQU9DLGNBQWMsQ0FBQ0MsY0FBYyxDQUFDRixLQUFLLEVBQUUsSUFBSSxDQUFDcEUsY0FBYyxDQUFDLENBQUMsRUFBRXVFLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNGLENBQUM7SUFBQS9GLE1BQUEsQ0FFT3NGLHlCQUF5QixHQUFqQyxTQUFRQSx5QkFBeUJBLENBQUNuRixZQUF3QyxFQUFRO01BQ2pGLElBQUlBLFlBQVksRUFBRXRDLFFBQVEsRUFBRUMsUUFBUSxFQUFFO1FBQ3JDOztRQUVBO1FBQ0EsSUFBSXFDLFlBQVksQ0FBQ3RDLFFBQVEsQ0FBQ0MsUUFBUSxLQUFLdEMsT0FBTyxDQUFDQyxHQUFHLENBQUNFLHNCQUFzQixFQUFFO1VBQzFFd0UsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLEdBQUd0QyxPQUFPLENBQUNDLEdBQUcsQ0FBQ0MsUUFBUTtRQUN0RCxDQUFDLE1BQU0sSUFBSXlFLFlBQVksQ0FBQ3RDLFFBQVEsQ0FBQ0MsUUFBUSxLQUFLdEMsT0FBTyxDQUFDSyxZQUFZLENBQUNGLHNCQUFzQixFQUFFO1VBQzFGd0UsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLEdBQUd0QyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUTtRQUMvRDtRQUVBLElBQ0N5RSxZQUFZLENBQUN0QyxRQUFRLENBQUNDLFFBQVEsS0FBS3RDLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLElBQ3ZEeUUsWUFBWSxDQUFDbkMsT0FBTyxFQUFFN0IsTUFBTSxFQUFFK0IsV0FBVyxLQUFLMUMsT0FBTyxDQUFDQyxHQUFHLENBQUNHLFdBQVcsRUFDcEU7VUFDRG9LLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLG1CQUFtQnpLLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLHFCQUFxQkYsT0FBTyxDQUFDQyxHQUFHLENBQUNHLFdBQVcsR0FBRyxDQUFDO1FBQ2pHLENBQUMsTUFBTSxJQUNOdUUsWUFBWSxDQUFDdEMsUUFBUSxDQUFDQyxRQUFRLEtBQUt0QyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUSxJQUNoRXlFLFlBQVksQ0FBQ25DLE9BQU8sRUFBRTdCLE1BQU0sRUFBRStCLFdBQVcsS0FBSzFDLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRCxXQUFXLEVBQzdFO1VBQ0RvSyxHQUFHLENBQUNDLElBQUksQ0FBQyxtQkFBbUJ6SyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUSxxQkFBcUJGLE9BQU8sQ0FBQ0ssWUFBWSxDQUFDRCxXQUFXLEdBQUcsQ0FBQztRQUNuSCxDQUFDLE1BQU0sSUFBSXVFLFlBQVksQ0FBQ3RDLFFBQVEsRUFBRUMsUUFBUSxFQUFFb0ksUUFBUSxDQUFDLHNCQUFzQixDQUFDLEVBQUU7VUFDN0UsTUFBTUMsS0FBSyxDQUNWLGlGQUFpRixHQUNoRix3QkFBd0JoRyxZQUFZLENBQUN0QyxRQUFRLENBQUNDLFFBQVEsSUFDckRxQyxZQUFZLENBQUNuQyxPQUFPLEVBQUU3QixNQUFNLEVBQUUrQixXQUFXLElBQUksd0JBQXdCLEtBQ2pFLEdBQ0wsd0JBQXdCLEdBQ3hCLFNBQVMxQyxPQUFPLENBQUNLLFlBQVksQ0FBQ0gsUUFBUSxJQUFJRixPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVyxLQUFLLEdBQy9FLFNBQVNKLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDQyxRQUFRLElBQUlGLE9BQU8sQ0FBQ0MsR0FBRyxDQUFDRyxXQUFXLEdBQzFELENBQUM7UUFDRixDQUFDLE1BQU07VUFDTm9LLEdBQUcsQ0FBQ0MsSUFBSSxDQUFDLG1CQUFtQjlGLFlBQVksQ0FBQ3RDLFFBQVEsQ0FBQ0MsUUFBUSxxQkFBcUJ0QyxPQUFPLENBQUNLLFlBQVksQ0FBQ0QsV0FBVyxHQUFHLENBQUM7UUFDcEg7TUFDRDtJQUNELENBQUM7SUFBQW9FLE1BQUEsQ0FFS29HLGlCQUFpQixHQUF2QixlQUFNQSxpQkFBaUJBLENBQUNDLFdBQStCLEVBQWlCO01BQ3ZFLElBQUksQ0FBQzNHLGdCQUFnQixHQUFHMkcsV0FBVztNQUNuQyxNQUFNLElBQUksQ0FBQzlGLHdCQUF3QixDQUFDLENBQUM7TUFDckMsTUFBTUMsT0FBTyxDQUFDOEYsVUFBVSxDQUN2QnRLLFlBQVksQ0FBQ3VLLDBCQUEwQixDQUFDQyxHQUFHLENBQUMsTUFBT2YsU0FBUyxJQUFLO1FBQ2hFLE9BQU9BLFNBQVMsQ0FBQ3BHLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO01BQ2xDLENBQUMsQ0FDRixDQUFDOztNQUVEO01BQ0E7TUFDQSxNQUFNb0gsOEJBQThCLEdBQUdBLENBQUEsS0FBWTtRQUNsRCxJQUFJLENBQUN4QixlQUFlLENBQ2xCeUIsSUFBSSxDQUFDLFlBQVk7VUFDakIsSUFBSSxJQUFJLENBQUNuRixxQkFBcUIsQ0FBQyxDQUFDLENBQUNvRixtQkFBbUIsRUFBRTtZQUNyRCxJQUFJLENBQUNwRixxQkFBcUIsQ0FBQyxDQUFDLENBQUNvRixtQkFBbUIsQ0FBQyxDQUFDO1VBQ25EO1VBQ0EsSUFBSSxDQUFDQyxTQUFTLENBQUMsQ0FBQyxDQUFDQyxVQUFVLENBQUMsQ0FBQztVQUM3QixJQUFJLENBQUMxRixjQUFjLENBQUMsQ0FBQyxDQUFDZ0IsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUNqQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1VBRXRELE9BQU8sSUFBSSxDQUFDNEcsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQzdELENBQUMsQ0FBQyxDQUNEQyxLQUFLLENBQUVwQixLQUFZLElBQUs7VUFDeEIsTUFBTXFCLGVBQWUsR0FBR3RFLE9BQU8sQ0FBQ3VFLG9CQUFvQixDQUFDLGFBQWEsQ0FBRTtVQUVwRSxJQUFJLENBQUMzRixxQkFBcUIsQ0FBQyxDQUFDLENBQUM0RixnQkFBZ0IsQ0FDNUNGLGVBQWUsQ0FBQ0csT0FBTyxDQUFDLGlEQUFpRCxDQUFDLEVBQzFFO1lBQ0NDLEtBQUssRUFBRUosZUFBZSxDQUFDRyxPQUFPLENBQUMsc0JBQXNCLENBQUM7WUFDdERFLFdBQVcsRUFBRTFCLEtBQUssQ0FBQzJCO1VBQ3BCLENBQ0QsQ0FBQztRQUNGLENBQUMsQ0FBQztNQUNKLENBQUM7TUFFRCxJQUFJLElBQUksQ0FBQ25ELGtCQUFrQixFQUFFO1FBQzVCLE9BQU8sSUFBSSxDQUFDb0QsaUJBQWlCLENBQUMsQ0FBQyxDQUM3QkMsaUJBQWlCLENBQUMsQ0FBQyxDQUNuQmYsSUFBSSxDQUFDLE1BQU07VUFDWCxJQUFJLElBQUksQ0FBQ25GLHFCQUFxQixDQUFDLENBQUMsRUFBRTtZQUNqQ2tGLDhCQUE4QixDQUFDLENBQUM7VUFDakMsQ0FBQyxNQUFNO1lBQ04sSUFBSSxDQUFDakYsY0FBYyxDQUFDLENBQUMsQ0FBQ2tHLGVBQWUsQ0FBQyxZQUFZO2NBQ2pEakIsOEJBQThCLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUM7VUFDSDtVQUNBLElBQUksQ0FBQzNELGtCQUFrQixDQUFDckMsT0FBTyxDQUFDLENBQUM7VUFDakM7UUFDRCxDQUFDLENBQUMsQ0FDRHVHLEtBQUssQ0FBQyxVQUFVVyxHQUFVLEVBQUU7VUFDNUIzQixHQUFHLENBQUNKLEtBQUssQ0FBQyxxQ0FBcUMrQixHQUFHLENBQUNDLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxDQUFDLENBQUM7TUFDSixDQUFDLE1BQU07UUFDTixJQUFJLENBQUM5RSxrQkFBa0IsQ0FBQ3JDLE9BQU8sQ0FBQyxDQUFDO01BQ2xDO0lBQ0QsQ0FBQztJQUFBVCxNQUFBLENBRUQ2SCxJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osSUFBSSxDQUFDbkksZ0JBQWdCLEdBQUcsRUFBRTtNQUMxQixJQUFJLENBQUM0QixpQkFBaUIsQ0FBQ3dHLE9BQU8sQ0FBQyxDQUFDO01BQ2hDLElBQUksQ0FBQzFHLGFBQWEsQ0FBQzBHLE9BQU8sQ0FBQyxDQUFDO01BQzVCO01BQ0E7TUFDQSxPQUFPLElBQUksQ0FBQ3hHLGlCQUFpQjtNQUM3QjtNQUNBO01BQ0EsT0FBTyxJQUFJLENBQUNGLGFBQWE7TUFDekIyRyxvQkFBb0IsQ0FBQyxJQUFJLENBQUM3QyxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3pDLElBQUksQ0FBQ1AsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDbUQsT0FBTyxDQUFDLENBQUM7TUFDN0IsSUFBSSxDQUFDNUcsNkJBQTZCLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBQUFsQixNQUFBLENBRURrRixZQUFZLEdBQVosU0FBQUEsWUFBWUEsQ0FBQSxFQUFtQjtNQUM5QixPQUFPLElBQUksQ0FBQ1AsUUFBUSxDQUFDLENBQUMsQ0FBQ08sWUFBWSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUFBbEYsTUFBQSxDQUVEZ0ksY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUEsRUFBZ0I7TUFDN0IsT0FBTyxJQUFJLENBQUN4RCxhQUFhO0lBQzFCLENBQUM7SUFBQXhFLE1BQUEsQ0FFRDhILE9BQU8sR0FBUCxTQUFBQSxPQUFPQSxDQUFDRyxtQkFBNkIsRUFBUTtNQUM1QyxJQUFJLENBQUNySSxTQUFTLEdBQUcsSUFBSTs7TUFFckI7TUFDQSxJQUFJO1FBQ0gsT0FBTzVELFlBQVksQ0FBQzBKLFdBQVcsQ0FBQyxJQUFJLENBQUNDLEtBQUssQ0FBQyxDQUFDLENBQUM7O1FBRTdDO1FBQ0E7UUFDQSxPQUFRckQsTUFBTSxDQUFhNEYsUUFBUTtNQUNwQyxDQUFDLENBQUMsT0FBT0MsQ0FBQyxFQUFFO1FBQ1huQyxHQUFHLENBQUNDLElBQUksQ0FBQ2tDLENBQVcsQ0FBQztNQUN0Qjs7TUFFQTtNQUNBOztNQUVBO01BQ0E7TUFDQSxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxPQUFPLENBQUNoRSxTQUFTLENBQUM7TUFDMUMsSUFBSWlFLFFBQVE7TUFDWixJQUFJRixVQUFVLEVBQUVHLFVBQVUsRUFBRTtRQUMzQkQsUUFBUSxHQUFHRSxNQUFNLENBQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUwsVUFBVSxDQUFDRyxVQUFVLENBQUNHLFFBQVEsQ0FBQztNQUM3RDs7TUFFQTtNQUNBLElBQUksQ0FBQ2xCLGlCQUFpQixDQUFDLENBQUMsRUFBRW1CLFVBQVUsR0FBRyxDQUFDO01BQ3hDLElBQUksQ0FBQ0MsZ0NBQWdDLENBQUMsQ0FBQztNQUN2Qy9KLFlBQUEsQ0FBQW9CLFNBQUEsQ0FBTTZILE9BQU8sQ0FBQXpJLElBQUEsT0FBQzRJLG1CQUFtQjtNQUNqQyxJQUFJSyxRQUFRLElBQUlGLFVBQVUsQ0FBQ0csVUFBVSxFQUFFO1FBQ3RDSCxVQUFVLENBQUNHLFVBQVUsQ0FBQ0csUUFBUSxHQUFHSixRQUFRO01BQzFDO0lBQ0QsQ0FBQztJQUFBdEksTUFBQSxDQUVEd0gsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFtQjtNQUNuQyxPQUFPLENBQUMsQ0FBQyxDQUFtQixDQUFDO0lBQzlCLENBQUM7SUFBQXhILE1BQUEsQ0FFRDZJLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUEsRUFBbUI7TUFDbEMsT0FBTyxDQUFDLENBQUMsQ0FBbUIsQ0FBQztJQUM5QixDQUFDO0lBQUE3SSxNQUFBLENBRUQ4SSxvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFBLEVBQXNCO01BQ3pDLE9BQU8sQ0FBQyxDQUFDLENBQXNCLENBQUM7SUFDakMsQ0FBQztJQUFBOUksTUFBQSxDQUVEK0kscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQSxFQUF1QjtNQUMzQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQS9JLE1BQUEsQ0FFRGdCLDBCQUEwQixHQUExQixTQUFBQSwwQkFBMEJBLENBQUEsRUFBbUM7TUFDNUQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUFoQixNQUFBLENBRURnSiw4QkFBOEIsR0FBOUIsU0FBQUEsOEJBQThCQSxDQUFBLEVBQWdDO01BQzdELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBaEosTUFBQSxDQUVEaUosdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQSxFQUF5QjtNQUMvQyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQWpKLE1BQUEsQ0FFRGtKLDRCQUE0QixHQUE1QixTQUFBQSw0QkFBNEJBLENBQUEsRUFBOEI7TUFDekQsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUFsSixNQUFBLENBRURtSiw0QkFBNEIsR0FBNUIsU0FBQUEsNEJBQTRCQSxDQUFBLEVBQThCO01BQ3pELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBbkosTUFBQSxDQUVEb0osd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQSxFQUEwQjtNQUNqRCxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQXBKLE1BQUEsQ0FFRHFKLG1CQUFtQixHQUFuQixTQUFBQSxtQkFBbUJBLENBQUEsRUFBcUI7TUFDdkMsT0FBTyxDQUFDLENBQUM7SUFDVixDQUFDO0lBQUFySixNQUFBLENBRUQ4RywwQkFBMEIsR0FBMUIsU0FBQUEsMEJBQTBCQSxDQUFBLEVBQTRCO01BQ3JELE9BQU8sQ0FBQyxDQUFDO0lBQ1YsQ0FBQztJQUFBOUcsTUFBQSxDQUVEc0osb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQSxFQUFzQjtNQUN6QyxPQUFPLENBQUMsQ0FBQztJQUNWLENBQUM7SUFBQXRKLE1BQUEsQ0FFS3VKLG9CQUFvQixHQUExQixlQUFNQSxvQkFBb0JBLENBQUEsRUFBK0I7TUFDeEQsTUFBTUMsY0FBYyxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztNQUM5QyxPQUFPakosT0FBTyxDQUFDQyxPQUFPLENBQUUrSSxjQUFjLElBQUlBLGNBQWMsQ0FBQ0UsaUJBQWlCLElBQUssQ0FBQyxDQUFDLENBQUM7SUFDbkYsQ0FBQztJQUFBMUosTUFBQSxDQUVEMkosT0FBTyxHQUFQLFNBQUFBLE9BQU9BLENBQUEsRUFBUztNQUNmO01BQ0EsS0FBSyxNQUFNQyxjQUFjLElBQUksSUFBSSxDQUFDbEssZ0JBQWdCLEVBQUU7UUFDbkRrSyxjQUFjLENBQUNDLFNBQVMsR0FBRyxDQUFDO01BQzdCO01BQ0EsSUFBSSxDQUFDdEkscUJBQXFCLENBQUMsQ0FBQyxDQUFDdUksU0FBUyxDQUFDRCxTQUFTLENBQUMsQ0FBQzs7TUFFbEQ7TUFDQXRGLGVBQWUsQ0FBQ3dGLDRCQUE0QixDQUFDLENBQUM7TUFFOUMsSUFBSSxDQUFDakssU0FBUyxHQUFHLEtBQUs7SUFDdkIsQ0FBQztJQUFBRSxNQUFBLENBRURnSyxPQUFPLEdBQVAsU0FBQUEsT0FBT0EsQ0FBQSxFQUFTO01BQ2Y7TUFDQSxLQUFLLE1BQU1KLGNBQWMsSUFBSSxJQUFJLENBQUNsSyxnQkFBZ0IsRUFBRTtRQUNuRGtLLGNBQWMsQ0FBQ0ssU0FBUyxHQUFHLENBQUM7TUFDN0I7TUFDQSxJQUFJLENBQUMxSSxxQkFBcUIsQ0FBQyxDQUFDLENBQUN1SSxTQUFTLENBQUNHLFNBQVMsQ0FBQyxDQUFDO01BRWxELElBQUksQ0FBQ25LLFNBQVMsR0FBRyxJQUFJO0lBQ3RCLENBQUM7SUFBQUUsTUFBQSxDQUVEa0ssV0FBVyxHQUFYLFNBQUFBLFdBQVdBLENBQUEsRUFBWTtNQUN0QixPQUFPLElBQUksQ0FBQ3BLLFNBQVM7SUFDdEI7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBRSxNQUFBLENBS01tSywrQkFBK0IsR0FBckMsZUFBTUEsK0JBQStCQSxDQUFDVCxpQkFBdUQsRUFBaUI7TUFDN0csSUFBSTtRQUNILElBQUksQ0FBQ1UsVUFBVSxDQUFDQyxRQUFRLENBQUMsSUFBSSxDQUFDMUYsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7VUFDOUMsSUFBSSxDQUFDK0UsaUJBQWlCLEVBQUU7WUFDdkJBLGlCQUFpQixHQUFHLElBQUk7VUFDekI7VUFDQSxNQUFNM00sY0FBYyxHQUFHLElBQUksQ0FBQ3lLLGlCQUFpQixDQUFDLENBQUM7VUFDL0MsTUFBTXpLLGNBQWMsQ0FBQ3VOLHNCQUFzQixDQUFDWixpQkFBaUIsQ0FBQztRQUMvRDtNQUNELENBQUMsQ0FBQyxPQUFPYSxTQUFrQixFQUFFO1FBQzVCdkUsR0FBRyxDQUFDSixLQUFLLENBQUMyRSxTQUFtQixDQUFDO1FBQzlCSCxVQUFVLENBQUNJLE1BQU0sQ0FBQyxJQUFJLENBQUM3RixRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDdkM7SUFDRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUEzRSxNQUFBLENBSUF5SyxvQ0FBb0MsR0FBcEMsU0FBQUEsb0NBQW9DQSxDQUFBLEVBQVk7TUFDL0MsT0FBTyxJQUFJO0lBQ1o7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBek8sWUFBQSxDQU9PME8sMENBQTBDLEdBQWpELFNBQU9BLDBDQUEwQ0EsQ0FBQ2pGLFNBQXdELEVBQVE7TUFDakgsSUFBSSxDQUFDYywwQkFBMEIsQ0FBQ29FLElBQUksQ0FBQ2xGLFNBQVMsQ0FBQztJQUNoRDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBekosWUFBQSxDQU1PNE8sa0JBQWtCLEdBQXpCLFNBQU9BLGtCQUFrQkEsQ0FBQ25GLFNBQWdFLEVBQVE7TUFDakcsSUFBSSxDQUFDRixxQkFBcUIsQ0FBQ29GLElBQUksQ0FBQ2xGLFNBQVMsQ0FBQztJQUMzQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBekYsTUFBQSxDQU1BNkssOEJBQThCLEdBQTlCLFNBQUFBLDhCQUE4QkEsQ0FDN0JDLDBCQUFvQyxFQUNwQ0Msc0JBQWdDLEVBQ2hDQyw4QkFBd0MsRUFDakM7TUFDUCxJQUFJLENBQUNDLGdDQUFnQyxHQUFHSCwwQkFBMEI7TUFDbEUsSUFBSSxDQUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDcUMsMEJBQTBCLENBQUNKLDBCQUEwQixDQUFDO01BRTlFLElBQUksQ0FBQ0ssNEJBQTRCLEdBQUdKLHNCQUFzQjtNQUMxRCxJQUFJLENBQUNwRyxRQUFRLENBQUMsQ0FBQyxDQUFDeUcsb0JBQW9CLENBQUNMLHNCQUFzQixDQUFDO01BRTVELElBQUksQ0FBQ00sb0NBQW9DLEdBQUdMLDhCQUE4QjtNQUMxRSxJQUFJLENBQUN4RCxpQkFBaUIsQ0FBQyxDQUFDLENBQUM4RCxrQkFBa0IsQ0FBQyxDQUFDLENBQUMsRUFBRU4sOEJBQThCLENBQUM7SUFDaEY7O0lBRUE7QUFDRDtBQUNBLE9BRkM7SUFBQWhMLE1BQUEsQ0FHQTRJLGdDQUFnQyxHQUFoQyxTQUFBQSxnQ0FBZ0NBLENBQUEsRUFBUztNQUN4QyxJQUFJLElBQUksQ0FBQ3FDLGdDQUFnQyxFQUFFO1FBQzFDLElBQUksQ0FBQ3BDLGdCQUFnQixDQUFDLENBQUMsQ0FBQzBDLDRCQUE0QixDQUFDLElBQUksQ0FBQ04sZ0NBQWdDLENBQUM7UUFDM0YsSUFBSSxDQUFDQSxnQ0FBZ0MsR0FBRzVHLFNBQVM7TUFDbEQ7TUFDQSxJQUFJLElBQUksQ0FBQzhHLDRCQUE0QixJQUFJLElBQUksQ0FBQ3hHLFFBQVEsQ0FBQyxDQUFDLEVBQUU7UUFDekQsSUFBSSxDQUFDQSxRQUFRLENBQUMsQ0FBQyxDQUFDNkcsb0JBQW9CLENBQUMsSUFBSSxDQUFDTCw0QkFBNEIsQ0FBQztRQUN2RSxJQUFJLENBQUNBLDRCQUE0QixHQUFHOUcsU0FBUztNQUM5QztNQUNBLElBQUksSUFBSSxDQUFDZ0gsb0NBQW9DLEVBQUU7UUFDOUMsSUFBSSxDQUFDN0QsaUJBQWlCLENBQUMsQ0FBQyxDQUFDaUUsa0JBQWtCLENBQUMsSUFBSSxDQUFDSixvQ0FBb0MsQ0FBQztRQUN0RixJQUFJLENBQUNBLG9DQUFvQyxHQUFHaEgsU0FBUztNQUN0RDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUFyRSxNQUFBLENBTUEwTCxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFZO01BQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ2pDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ2tDLGFBQWE7SUFDL0MsQ0FBQztJQUFBLE9BQUEzUCxZQUFBO0VBQUEsRUF2akJ5QjRQLFdBQVcsR0FBQWhOLGFBQUEsQ0FJOUI4RyxXQUFXLEdBQWlDLENBQUMsQ0FBQyxFQUFBOUcsYUFBQSxDQXFDdEMySCwwQkFBMEIsR0FBc0QsRUFBRSxFQUFBM0gsYUFBQSxDQUtsRjJHLHFCQUFxQixHQUE4RCxFQUFFLEVBQUEzRyxhQUFBLEdBQUFXLFdBQUEsR0FBQXNNLHlCQUFBLENBQUFsTixPQUFBLENBQUFzQixTQUFBLHNEQUFBekIsS0FBQTtJQUFBc04sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0E1Q2xELElBQUk7SUFBQTtFQUFBLElBQUF0TixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQTBrQnhDMUMsWUFBWTtBQUFBIiwiaWdub3JlTGlzdCI6W119
663
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0IiwiX3ZlcnNpb24iLCJzZXJ2aWNlcyIsInZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZmFjdG9yeU5hbWUiLCJzdGFydHVwIiwicmVzb3VyY2VNb2RlbCIsInNldHRpbmdzIiwiYnVuZGxlcyIsIm1vZGVsTmFtZSIsInJvdXRpbmdTZXJ2aWNlIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsImNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJ0ZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiQ29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJyb290VmlldyIsInZpZXdOYW1lIiwiaWQiLCJyb3V0aW5nIiwiY29udHJvbElkIiwicm91dGVyQ2xhc3MiLCJ2aWV3VHlwZSIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImNvbnRhaW5lck9wdGlvbnMiLCJwcm9wYWdhdGVNb2RlbCIsImRlc2lnbnRpbWUiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQXBwQ29tcG9uZW50IiwiX1VJQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiYWRkaXRpb25hbENvbmZpZ3VyYXRpb24iLCJzdGFydHVwTW9kZSIsIk5vcm1hbCIsIl9zdGFydGVkU2VydmljZXMiLCJpc0FkYXB0YXRpb25FbmFibGVkIiwiaXNFeGl0aW5nIiwicGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwic3VzcGVuZGVkIiwiZGlzY2FyZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwiZ2V0QWRkaXRpb25hbENvbmZpZ3VyYXRpb24iLCJfaXNGY2xFbmFibGVkIiwib01hbmlmZXN0VUk1IiwiZ2V0TWFuaWZlc3RFbnRyeSIsInNldEFkYXB0YXRpb25Nb2RlIiwiaXNBZGFwdGF0aW9uTW9kZSIsInJlZ2lzdGVyQ29uZmlndXJhdGlvbkhhbmRsZXJzIiwiaGFuZGxlciIsImNvbmZpZ3VyYXRpb25IYW5kbGVycyIsInB1c2giLCJpbml0aWFsaXplRmVhdHVyZVRvZ2dsZXMiLCJjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbiIsInBhZ2VJZCIsInBhdGgiLCJ2YWx1ZSIsImNoYW5nZUNvbmZpZ3VyYXRpb24iLCJnZXRNYW5pZmVzdCIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwic2V0Q2FwYWJpbGl0eSIsImNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwiZ2V0Um91dGVyUHJveHkiLCJfb1JvdXRlclByb3h5IiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiX29BcHBTdGF0ZUhhbmRsZXIiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJnZXRSb290Q29udHJvbCIsImdldENvbnRyb2xsZXIiLCJnZXRSb290Q29udGFpbmVyIiwiZ2V0Q29udGVudCIsImdldFN0YXJ0dXBNb2RlIiwic2V0U3RhcnR1cE1vZGVDcmVhdGUiLCJDcmVhdGUiLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJBdXRvQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsIkRlZXBsaW5rIiwiaW5pdCIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaGFzIiwic2V0VGltZW91dCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsIl9pbml0aWFsaXplZEtlZXBlciIsIlByb21pc2VLZWVwZXIiLCJpbml0aWFsaXplZCIsInByb21pc2UiLCJ1aU1vZGVsIiwiSlNPTk1vZGVsIiwiZWRpdE1vZGUiLCJFZGl0TW9kZSIsIkRpc3BsYXkiLCJpc0VkaXRhYmxlIiwiZHJhZnRTdGF0dXMiLCJEcmFmdFN0YXR1cyIsIkNsZWFyIiwiYnVzeSIsImJ1c3lMb2NhbCIsInBhZ2VzIiwib0ludGVybmFsTW9kZWwiLCJzZXREZWZhdWx0QmluZGluZ01vZGUiLCJNb2RlbEhlbHBlciIsImVuaGFuY2VVaUpTT05Nb2RlbCIsImVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbCIsInNldE1vZGVsIiwiYkluaXRpYWxpemVSb3V0aW5nIiwidW5kZWZpbmVkIiwiUm91dGVyUHJveHkiLCJBcHBTdGF0ZUhhbmRsZXIiLCJfb0RpYWdub3N0aWNzIiwiRGlhZ25vc3RpY3MiLCJvTW9kZWwiLCJnZXRNb2RlbCIsImlzQSIsImVuaGFuY2VPRGF0YU1vZGVsIiwic2V0UmV0cnlBZnRlckhhbmRsZXIiLCJodHRwNTAzUmV0cnlIYW5kbGVyIiwiYmluZCIsImVudGl0eUNvbnRhaW5lciIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RPYmplY3QiLCJhcHAiLCJkaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0IiwiY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbiIsIl9jdXN0b21NYW5pZmVzdENoZWNrcyIsImZvckVhY2giLCJmblByb2Nlc3MiLCJpbnN0YW5jZU1hcCIsImdldElkIiwiZXJyb3IiLCJIVFRQNTAzSGFuZGxlciIsImhhbmRsZTUwM0RlbGF5IiwiZ2V0UmVzb3VyY2VNb2RlbCIsIkxvZyIsImluZm8iLCJpbmNsdWRlcyIsIkVycm9yIiwib25TZXJ2aWNlc1N0YXJ0ZWQiLCJhbGxTZXJ2aWNlcyIsImFsbCIsIm1hcCIsImFsbFNldHRsZWQiLCJpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlcyIsImZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiIsInRoZW4iLCJhdHRhY2hSb3V0ZU1hdGNoZXJzIiwiZ2V0Um91dGVyIiwiaW5pdGlhbGl6ZSIsImdldFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIiwicmVnaXN0ZXJTaGVsbEhvb2siLCJjYXRjaCIsIm9SZXNvdXJjZUJ1bmRsZSIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiZGlzcGxheUVycm9yUGFnZSIsImdldFRleHQiLCJ0aXRsZSIsImRlc2NyaXB0aW9uIiwibWVzc2FnZSIsImdldFJvdXRpbmdTZXJ2aWNlIiwiaW5pdGlhbGl6ZVJvdXRpbmciLCJhdHRhY2hBZnRlckluaXQiLCJlcnIiLCJ0b1N0cmluZyIsImV4aXQiLCJkZXN0cm95IiwiZGVsZXRlTW9kZWxDYWNoZURhdGEiLCJnZXREaWFnbm9zdGljcyIsImJTdXBwcmVzc0ludmFsaWRhdGUiLCJfcm91dGluZyIsImUiLCJvTWFpbk1vZGVsIiwib01vZGVscyIsIm9IZWFkZXJzIiwib1JlcXVlc3RvciIsIk9iamVjdCIsImFzc2lnbiIsIm1IZWFkZXJzIiwiYmVmb3JlRXhpdCIsInVucmVnaXN0ZXJDYWxsYmFja3MiLCJnZXRTaGVsbFNlcnZpY2VzIiwiZ2V0TmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTaWRlRWZmZWN0c1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UiLCJnZXRWaWV3UHJlbG9hZGVyU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiZ2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiZ2V0VGVsZW1ldHJ5U2VydmljZSIsImdldElubGluZUVkaXRTZXJ2aWNlIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJvQ29tcG9uZW50RGF0YSIsImdldENvbXBvbmVudERhdGEiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3RvcmUiLCJzdGFydGVkU2VydmljZSIsIm9uUmVzdG9yZSIsInZpZXdTdGF0ZSIsInJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMiLCJzdXNwZW5kIiwib25TdXNwZW5kIiwiaXNTdXNwZW5kZWQiLCJpc0FwcENvbXBvbmVudEJ1c3kiLCJuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIiwiQnVzeUxvY2tlciIsImlzTG9ja2VkIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsImV4Y2VwdGlvbiIsInVubG9jayIsImlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCIsInJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcCIsInJlZ2lzdGVySW5pdENoZWNrcyIsInJlZ2lzdGVyQ2FsbGJhY2tzIiwiZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2siLCJkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2siLCJzZXNzaW9uVGltZW91dENhbGxiYWNrIiwicmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJzdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrIiwiYXR0YWNoU2Vzc2lvblRpbWVvdXQiLCJfcm91dGVNYXRjaEhhbmRsZXIiLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJkZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyIiwiZGV0YWNoU2Vzc2lvblRpbWVvdXQiLCJkZXRhY2hSb3V0ZU1hdGNoZWQiLCJfaXNFbWJlZGRlZCIsImZlRW52aXJvbm1lbnQiLCJVSUNvbXBvbmVudCIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQXBwQ29tcG9uZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgRmxleGlibGVDb2x1bW5MYXlvdXQgZnJvbSBcInNhcC9mL0ZsZXhpYmxlQ29sdW1uTGF5b3V0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcyxpbXBsZW1lbnRJbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEhUVFA1MDNIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0hUVFA1MDNIYW5kbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvSW5saW5lRWRpdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvQ3VycmVuY3lcIjtcbmltcG9ydCBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL1VuaXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdQcmVsb2FkZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmlld1ByZWxvYWRlclNlcnZpY2VGYWN0b3J5XCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IGxpYnJhcmllcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWRkaXRpb25hbENvbmZpZ3VyYXRpb24gPSB7XG5cdC8qKlxuXHQgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNBUCBGaW9yaSBlbGVtZW50cyBtYWNyb3MuXG5cdCAqL1xuXHRcInNhcC5mZS5tYWNyb3NcIj86IHtcblx0XHQvKipcblx0XHQgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgU3RhdHVzIG1hY3JvLlxuXHRcdCAqL1xuXHRcdFN0YXR1cz86IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2hldGhlciB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbnZlcnRlZC5cblx0XHRcdCAqL1xuXHRcdFx0aW52ZXJ0ZWREZWZhdWx0VmFsdWU/OiBib29sZWFuO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDb2xvciBtYXBwaW5nIGZvciBkaWZmZXJlbnQgc3RhdHVzIHZhbHVlcy5cblx0XHRcdCAqL1xuXHRcdFx0Y29sb3JNYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHRcdH07XG5cdH07XG59O1xuXG5jb25zdCBTdGFydHVwTW9kZSA9IGxpYnJhcnkuU3RhcnR1cE1vZGU7XG5jb25zdCBOQVZDT05GID0ge1xuXHRGQ0w6IHtcblx0XHRWSUVXTkFNRTogXCJzYXAuZmUuY29yZS5yb290Vmlldy5GY2xcIixcblx0XHRWSUVXTkFNRV9DT01QQVRJQklMSVRZOiBcInNhcC5mZS50ZW1wbGF0ZXMuUm9vdENvbnRhaW5lci52aWV3LkZjbFwiLFxuXHRcdFJPVVRFUkNMQVNTOiBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCJcblx0fSxcblx0TkFWQ09OVEFJTkVSOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5OYXZDb250YWluZXJcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAubS5yb3V0aW5nLlJvdXRlclwiXG5cdH1cbn07XG5cbmV4cG9ydCB0eXBlIENvbXBvbmVudERhdGEgPSB7XG5cdHN0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnM7XG5cdC8vZmVFbnZpcm9ubWVudCBpcyBvYmplY3Qgd2hpY2ggaXMgcmVjZWl2ZWQgYXMgYSBwYXJ0IG9mIHRoZSBjb21wb25lbnQgZGF0YSBmb3IgTXkgSW5ib3ggYXBwbGljYXRpb25zLlxuXHRmZUVudmlyb25tZW50Pzoge1xuXHRcdC8vV2l0aGluIHRoaXMgb2JqZWN0IHRoZXkgcGFzcyBhIGZ1bmN0aW9uIGNhbGxlZCBnZXRJbnRlbnQoKSB3aGljaCByZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBzZW1hbnRpY09iamVjdCBhbmQgYWN0aW9uIGFzIHNlcGFyYXRlIHByb3BlcnR5LXZhbHVlIGVudHJpZXMgdGhhdCBhcmUgdGhlbiB1c2VkIHRvIHVwZGF0ZSB0aGUgcmVsYXRlZCBhcHBzIGJ1dHRvbi5cblx0XHRnZXRJbnRlbnQ6IEZ1bmN0aW9uO1xuXHRcdC8vV2l0aGluIHRoaXMgb2JqZWN0IHRoZXkgcGFzcyBhIGZ1bmN0aW9uIGNhbGxlZCBnZXRTaGFyZUNvbnRyb2xWaXNpYmlsaXR5KCkgdGhhdCByZXR1cm5zIGJvb2xlYW4gdmFsdWVzKHRydWUgb3IgZmFsc2UpIHdoaWNoIGRldGVybWluZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHNoYXJlIGJ1dHRvbi5cblx0XHRnZXRTaGFyZUNvbnRyb2xWaXNpYmlsaXR5OiBGdW5jdGlvbjtcblx0fTtcbn07XG4vLyBLZWVwIGEgcmVmZXJlbmNlIHNvIGFzIHRvIGtlZXAgdGhlIGltcG9ydCBkZXNwaXRlIGl0IG5vdCBiZWluZyBkaXJlY3RseSB1c2VkXG5jb25zdCBfbVJvdXRlciA9IFJvdXRlcjtcblxuZXhwb3J0IHR5cGUgU3RhcnR1cFBhcmFtZXRlcnMgPSB7XG5cdHByZWZlcnJlZE1vZGU/OiBzdHJpbmdbXTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duW10+O1xuLyoqXG4gKiBNYWluIGNsYXNzIGZvciBjb21wb25lbnRzIHVzZWQgZm9yIGFuIGFwcGxpY2F0aW9uIGluIFNBUCBGaW9yaSBlbGVtZW50cy5cbiAqXG4gKiBBcHBsaWNhdGlvbiBkZXZlbG9wZXJzIHVzaW5nIHRoZSB0ZW1wbGF0ZXMgYW5kIGJ1aWxkaW5nIGJsb2NrcyBwcm92aWRlZCBieSBTQVAgRmlvcmkgZWxlbWVudHMgc2hvdWxkIGNyZWF0ZSB0aGVpciBhcHBzIGJ5IGV4dGVuZGluZyB0aGlzIGNvbXBvbmVudC5cbiAqIFRoaXMgZW5zdXJlcyB0aGF0IGFsbCB0aGUgbmVjZXNzYXJ5IHNlcnZpY2VzIHRoYXQgeW91IG5lZWQgZm9yIHRoZSBidWlsZGluZyBibG9ja3MgYW5kIHRlbXBsYXRlcyB0byB3b3JrIHByb3Blcmx5IGFyZSBzdGFydGVkLlxuICpcbiAqIFdoZW4geW91IHVzZSBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQgYXMgdGhlIGJhc2UgY29tcG9uZW50LCB5b3UgYWxzbyBuZWVkIHRvIHVzZSBhIHJvb3RWaWV3LiBTQVAgRmlvcmkgZWxlbWVudHMgcHJvdmlkZXMgdHdvIG9wdGlvbnM6IDxici8+XG4gKiAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lciB3aGVuIHVzaW5nIHNhcC5tLnJvdXRpbmcuUm91dGVyIDxici8+XG4gKiAtIHNhcC5mZS5jb3JlLnJvb3RWaWV3LkZjbCB3aGVuIHVzaW5nIHNhcC5mLnJvdXRpbmcuUm91dGVyIChGQ0wgdXNlIGNhc2UpIDxici8+XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKiBAcHVibGljXG4gKi9cbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLkFwcENvbXBvbmVudFwiLCB7XG5cdGNvbmZpZzoge1xuXHRcdGZ1bGxXaWR0aDogdHJ1ZVxuXHR9LFxuXHRtYW5pZmVzdDoge1xuXHRcdF92ZXJzaW9uOiBcIjIuMC4wXCIsXG5cdFx0XCJzYXAudWk1XCI6IHtcblx0XHRcdHNlcnZpY2VzOiB7XG5cdFx0XHRcdHZpZXdQcmVsb2FkZXJTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuVmlld1ByZWxvYWRlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyZXNvdXJjZU1vZGVsOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuUmVzb3VyY2VNb2RlbFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIixcblx0XHRcdFx0XHRzZXR0aW5nczoge1xuXHRcdFx0XHRcdFx0YnVuZGxlczogW1wic2FwLmZlLmNvcmUubWVzc2FnZWJ1bmRsZVwiXSxcblx0XHRcdFx0XHRcdG1vZGVsTmFtZTogXCJzYXAuZmUuaTE4blwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRyb3V0aW5nU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0c2hlbGxTZXJ2aWNlczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNoZWxsU2VydmljZXNcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRTaGVsbFVJU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC51c2hlbGwudWk1c2VydmljZS5TaGVsbFVJU2VydmljZVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdG5hdmlnYXRpb25TZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuTmF2aWdhdGlvblNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRlbnZpcm9ubWVudENhcGFiaWxpdGllczoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkVudmlyb25tZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNpZGVFZmZlY3RzU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlNpZGVFZmZlY3RzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFzeW5jQ29tcG9uZW50U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkFzeW5jQ29tcG9uZW50U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dGVsZW1ldHJ5U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlRlbGVtZXRyeVNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHR2YWx1ZUhlbHBIaXN0b3J5U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29sbGFib3JhdGl2ZURyYWZ0U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLkNvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRDb250ZXh0U2hhcmluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db250ZXh0U2hhcmluZ1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRpbmxpbmVFZGl0U2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLklubGluZUVkaXRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHJvb3RWaWV3OiB7XG5cdFx0XHRcdHZpZXdOYW1lOiBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRSxcblx0XHRcdFx0aWQ6IFwiYXBwUm9vdFZpZXdcIlxuXHRcdFx0fSxcblx0XHRcdHJvdXRpbmc6IHtcblx0XHRcdFx0Y29uZmlnOiB7XG5cdFx0XHRcdFx0Y29udHJvbElkOiBcImFwcENvbnRlbnRcIixcblx0XHRcdFx0XHRyb3V0ZXJDbGFzczogTkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1MsXG5cdFx0XHRcdFx0dmlld1R5cGU6IFwiWE1MXCIsXG5cdFx0XHRcdFx0Y29udHJvbEFnZ3JlZ2F0aW9uOiBcInBhZ2VzXCIsXG5cdFx0XHRcdFx0Y29udGFpbmVyT3B0aW9uczoge1xuXHRcdFx0XHRcdFx0cHJvcGFnYXRlTW9kZWw6IHRydWVcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cdGRlc2lnbnRpbWU6IFwic2FwL2ZlL2NvcmUvZGVzaWdudGltZS9BcHBDb21wb25lbnQuZGVzaWdudGltZVwiLFxuXG5cdGxpYnJhcnk6IFwic2FwLmZlLmNvcmVcIlxufSlcbmNsYXNzIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IGltcGxlbWVudHMgSUFzeW5jQ29udGVudENyZWF0aW9uIHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLklBc3luY0NvbnRlbnRDcmVhdGlvblwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lBc3luY0NvbnRlbnRDcmVhdGlvbiA9IHRydWU7XG5cblx0c3RhdGljIGluc3RhbmNlTWFwOiBSZWNvcmQ8c3RyaW5nLCBBcHBDb21wb25lbnQ+ID0ge307XG5cblx0LyoqXG5cdCAqIFRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgYWRkaXRpb25hbENvbmZpZ3VyYXRpb246IEFkZGl0aW9uYWxDb25maWd1cmF0aW9uID0ge307XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uLlxuXHQgKiBAcmV0dXJucyBUaGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uXG5cdCAqL1xuXHRnZXRBZGRpdGlvbmFsQ29uZmlndXJhdGlvbigpOiBBZGRpdGlvbmFsQ29uZmlndXJhdGlvbiB7XG5cdFx0cmV0dXJuIHRoaXMuYWRkaXRpb25hbENvbmZpZ3VyYXRpb247XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJlZCBoYW5kbGVycyBmb3IgbW9kaWZ5aW5nIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cblx0ICovXG5cdHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyYXRpb25IYW5kbGVyczogKChhZGRpdGlvbmFsQ29uZmlndXJhdGlvbjogQWRkaXRpb25hbENvbmZpZ3VyYXRpb24pID0+IFByb21pc2U8dm9pZD4pW10gPSBbXTtcblxuXHRwcml2YXRlIF9vUm91dGVyUHJveHkhOiBSb3V0ZXJQcm94eTtcblxuXHRwcml2YXRlIF9vQXBwU3RhdGVIYW5kbGVyITogQXBwU3RhdGVIYW5kbGVyO1xuXG5cdHByaXZhdGUgYkluaXRpYWxpemVSb3V0aW5nPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9vRGlhZ25vc3RpY3MhOiBEaWFnbm9zdGljcztcblxuXHRwcml2YXRlIGVudGl0eUNvbnRhaW5lciE6IFByb21pc2U8dm9pZD47XG5cblx0cHJpdmF0ZSBzdGFydHVwTW9kZTogc3RyaW5nID0gU3RhcnR1cE1vZGUuTm9ybWFsO1xuXG5cdHByaXZhdGUgX3N0YXJ0ZWRTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIF9pbml0aWFsaXplZEtlZXBlciE6IFByb21pc2VLZWVwZXI8dm9pZD47XG5cblx0cHJpdmF0ZSBpc0FkYXB0YXRpb25FbmFibGVkID0gZmFsc2U7XG5cblx0cHVibGljIGlzRXhpdGluZyA9IGZhbHNlO1xuXG5cdHB1YmxpYyBwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdHByaXZhdGUgZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIGRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3VzcGVuZGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBkaXNjYXJkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdHByaXZhdGUgX3JvdXRlTWF0Y2hIYW5kbGVyPzogRnVuY3Rpb247XG5cblx0LyoqXG5cdCAqIFNpbmdsZXRvbiB0byBob2xkIHByb2Nlc3NlcyBmcm9tIGxpYnJhcmllcyB0aGF0IG5lZWQgdG8gYmUgcnVuIGZvciBldmVyeSBpbnN0YW5jZSBwcmlvciB0byBzdGFydHVwLlxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgaW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzZXM6ICgoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IFByb21pc2U8dm9pZD4pW10gPSBbXTtcblxuXHQvKipcblx0ICogU2luZ2xldG9uIGhvbGRpbmcgY3VzdG9tIGluaXRpYWxpemF0aW9uIGNoZWNrcyB0aGF0IGNhbiBiZSByZWdpc3RlcmVkIGJ5IGxpYnJhcmllcy5cblx0ICovXG5cdHByaXZhdGUgc3RhdGljIF9jdXN0b21NYW5pZmVzdENoZWNrczogKChtYW5pZmVzdENvbnRlbnQ6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pID0+IHZvaWQpW10gPSBbXTtcblxuXHRfaXNGY2xFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIik7XG5cdFx0cmV0dXJuIG9NYW5pZmVzdFVJNT8ucm91dGluZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gTkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1M7XG5cdH1cblxuXHRzZXRBZGFwdGF0aW9uTW9kZShpc0FkYXB0YXRpb25FbmFibGVkOiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5pc0FkYXB0YXRpb25FbmFibGVkID0gaXNBZGFwdGF0aW9uRW5hYmxlZDtcblx0fVxuXG5cdGlzQWRhcHRhdGlvbk1vZGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuaXNBZGFwdGF0aW9uRW5hYmxlZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBhIGhhbmRsZXIgZm9yIG1vZGlmeWluZyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG5cdCAqIFRoZSBoYW5kbGVyIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBmZWF0dXJlIHRvZ2dsZXMgYXJlIGluaXRpYWxpemVkLlxuXHQgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciBmdW5jdGlvbiB0aGF0IHdpbGwgbW9kaWZ5IHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25cblx0ICovXG5cdHN0YXRpYyByZWdpc3RlckNvbmZpZ3VyYXRpb25IYW5kbGVycyhoYW5kbGVyOiAoYWRkaXRpb25hbENvbmZpZ3VyYXRpb246IEFkZGl0aW9uYWxDb25maWd1cmF0aW9uKSA9PiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG5cdFx0dGhpcy5jb25maWd1cmF0aW9uSGFuZGxlcnMucHVzaChoYW5kbGVyKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQcm92aWRlcyBhIGhvb2sgdG8gaW5pdGlhbGl6ZSBmZWF0dXJlIHRvZ2dsZXMuXG5cdCAqXG5cdCAqIFRoaXMgaG9vayBpcyBiZWluZyBjYWxsZWQgYnkgdGhlIFNBUCBGaW9yaSBlbGVtZW50cyBBcHBDb21wb25lbnQgYXQgdGhlIHRpbWUgZmVhdHVyZSB0b2dnbGVzIGNhbiBiZSBpbml0aWFsaXplZC5cblx0ICogVG8gY2hhbmdlIHBhZ2UgY29uZmlndXJhdGlvbiwgdXNlIHRoZSB7QGxpbmsgc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50I2NoYW5nZVBhZ2VDb25maWd1cmF0aW9ufSBtZXRob2QuXG5cdCAqIEBwdWJsaWNcblx0ICogQHJldHVybnMgQSBwcm9taXNlIHdpdGhvdXQgYW55IHZhbHVlIHRvIGFsbG93IGFzeW5jaHJvbm91cyBwcm9jZXNzZXNcblx0ICovXG5cdGFzeW5jIGluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyB0aGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGRlbiBieSBhcHBsaWNhdGlvbnNcblx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hhbmdlcyB0aGUgcGFnZSBjb25maWd1cmF0aW9uIG9mIFNBUCBGaW9yaSBlbGVtZW50cy5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgZW5hYmxlcyB5b3UgdG8gY2hhbmdlIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKiBAcGFyYW0gcGFnZUlkIFRoZSBJRCBvZiB0aGUgcGFnZSBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHBhdGggVGhlIHBhdGggaW4gdGhlIHBhZ2Ugc2V0dGluZ3MgZm9yIHdoaWNoIHRoZSBjb25maWd1cmF0aW9uIGlzIHRvIGJlIGNoYW5nZWQuXG5cdCAqIEBwYXJhbSB2YWx1ZSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGEgcGxhaW4gdmFsdWUgbGlrZSBhIHN0cmluZywgb3IgYSBCb29sZWFuLCBvciBhIHN0cnVjdHVyZWQgb2JqZWN0LlxuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRjaGFuZ2VQYWdlQ29uZmlndXJhdGlvbihwYWdlSWQ6IHN0cmluZywgcGF0aDogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuXHRcdGNvbnN0IG1hbmlmZXN0ID0gY2hhbmdlQ29uZmlndXJhdGlvbih0aGlzLmdldE1hbmlmZXN0KCksIHBhZ2VJZCwgcGF0aCwgdmFsdWUsIHRydWUsIHRoaXMpIGFzIE1hbmlmZXN0Q29udGVudDtcblx0XHRpZiAoXG5cdFx0XHRwYXRoID09PSBcImFwcC9kaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCIgJiZcblx0XHRcdChtYW5pZmVzdD8uW1wic2FwLmZlXCJdIGFzIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+Pik/LltcImFwcFwiXT8uW1wiZGlzYWJsZUlucHV0QXNzaXN0YW5jZVwiXSA9PT0gdmFsdWVcblx0XHQpIHtcblx0XHRcdHRoaXMuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5zZXRDYXBhYmlsaXR5KFwiRGlzYWJsZUlucHV0QXNzaXN0YW5jZVwiLCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENsZWFucyBhbGwgcmVnaXN0ZXJlZCBwYWdlIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblx0ICovXG5cdGNsZWFuUGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzKCk6IHZvaWQge1xuXHRcdHRoaXMucGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzID0ge307XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBSb3V0ZXJQcm94eS5cblx0ICogQHJldHVybnMgQSBSZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5XG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um91dGVyUHJveHkoKTogUm91dGVyUHJveHkge1xuXHRcdHJldHVybiB0aGlzLl9vUm91dGVyUHJveHk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IGEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXIuXG5cdCAqIEByZXR1cm5zIEEgcmVmZXJlbmNlIHRvIHRoZSBBcHBTdGF0ZUhhbmRsZXJcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRBcHBTdGF0ZUhhbmRsZXIoKTogQXBwU3RhdGVIYW5kbGVyIHtcblx0XHRyZXR1cm4gdGhpcy5fb0FwcFN0YXRlSGFuZGxlcjtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIG5hdi9GQ0wgQ29udHJvbGxlci5cblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIHRoZSBGQ0wgQ29udHJvbGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvb3RWaWV3Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyIHtcblx0XHRyZXR1cm4gdGhpcy5nZXRSb290Q29udHJvbCgpLmdldENvbnRyb2xsZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbC5cblx0ICogQHJldHVybnMgIEEgcmVmZXJlbmNlIHRvIE5hdkNvbnRhaW5lciBjb250cm9sIG9yIHRoZSBGQ0wgY29udHJvbFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldFJvb3RDb250YWluZXIoKTogTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udGVudCgpWzBdIGFzIE5hdkNvbnRhaW5lciB8IEZsZXhpYmxlQ29sdW1uTGF5b3V0O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgc3RhcnR1cCBtb2RlIG9mIHRoZSBhcHAuXG5cdCAqIEByZXR1cm5zIFRoZSBzdGFydHVwIG1vZGVcblx0ICovXG5cdGdldFN0YXJ0dXBNb2RlKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMuc3RhcnR1cE1vZGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0NyZWF0ZScuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZUNyZWF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdBdXRvQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuQXV0b0NyZWF0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnRGVlcGxpbmsnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVEZWVwbGluaygpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXJ0dXBNb2RlID0gU3RhcnR1cE1vZGUuRGVlcGxpbms7XG5cdH1cblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7XG5cdFx0aWYgKHBhcmFtcy5oYXMoXCJzYXAtdWkteHgtZmUtc3VwcG9ydFwiKSkge1xuXHRcdFx0c2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdExpYnJhcnkubG9hZCh7IG5hbWU6IFwic2FwLmZlLnRvb2xzXCIgfSk7XG5cdFx0XHR9LCAyMDAwKTtcblx0XHR9XG5cdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIgPSBuZXcgUHJvbWlzZUtlZXBlcjx2b2lkPigpO1xuXHRcdHRoaXMuaW5pdGlhbGl6ZWQgPSB0aGlzLl9pbml0aWFsaXplZEtlZXBlci5wcm9taXNlO1xuXHRcdGNvbnN0IHVpTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdGVkaXRNb2RlOiBsaWJyYXJ5LkVkaXRNb2RlLkRpc3BsYXksXG5cdFx0XHRpc0VkaXRhYmxlOiBmYWxzZSxcblx0XHRcdGRyYWZ0U3RhdHVzOiBsaWJyYXJ5LkRyYWZ0U3RhdHVzLkNsZWFyLFxuXHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRidXN5TG9jYWw6IHt9LFxuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0ludGVybmFsTW9kZWwgPSBuZXcgSlNPTk1vZGVsKHtcblx0XHRcdHBhZ2VzOiB7fVxuXHRcdH0pO1xuXHRcdC8vIHNldCB0aGUgYmluZGluZyBPbmVXYXkgZm9yIHVpTW9kZWwgdG8gcHJldmVudCBjaGFuZ2VzIGlmIGNvbnRyb2xsZXIgZXh0ZW5zaW9ucyBtb2RpZnkgYSBib3VuZCBwcm9wZXJ0eSBvZiBhIGNvbnRyb2xcblx0XHR1aU1vZGVsLnNldERlZmF1bHRCaW5kaW5nTW9kZShcIk9uZVdheVwiKTtcblx0XHQvLyBmb3IgaW50ZXJuYWwgbW9kZWwgYmluZGluZyBuZWVkcyB0byBiZSB0d28gd2F5XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZVVpSlNPTk1vZGVsKHVpTW9kZWwsIGxpYnJhcnkpO1xuXHRcdE1vZGVsSGVscGVyLmVuaGFuY2VJbnRlcm5hbEpTT05Nb2RlbChvSW50ZXJuYWxNb2RlbCk7XG5cblx0XHR0aGlzLnNldE1vZGVsKHVpTW9kZWwsIFwidWlcIik7XG5cdFx0dGhpcy5zZXRNb2RlbChvSW50ZXJuYWxNb2RlbCwgXCJpbnRlcm5hbFwiKTtcblxuXHRcdHRoaXMuYkluaXRpYWxpemVSb3V0aW5nID0gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgIT09IHVuZGVmaW5lZCA/IHRoaXMuYkluaXRpYWxpemVSb3V0aW5nIDogdHJ1ZTtcblx0XHR0aGlzLl9vUm91dGVyUHJveHkgPSBuZXcgUm91dGVyUHJveHkoKTtcblx0XHR0aGlzLl9vQXBwU3RhdGVIYW5kbGVyID0gbmV3IEFwcFN0YXRlSGFuZGxlcih0aGlzKTtcblx0XHR0aGlzLl9vRGlhZ25vc3RpY3MgPSBuZXcgRGlhZ25vc3RpY3MoKTtcblxuXHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuZ2V0TW9kZWwoKTtcblx0XHRpZiAob01vZGVsPy5pc0E/LjxPRGF0YU1vZGVsPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1vZGVsXCIpKSB7XG5cdFx0XHRNb2RlbEhlbHBlci5lbmhhbmNlT0RhdGFNb2RlbChvTW9kZWwsIHRoaXMpO1xuXHRcdFx0b01vZGVsLnNldFJldHJ5QWZ0ZXJIYW5kbGVyKHRoaXMuaHR0cDUwM1JldHJ5SGFuZGxlci5iaW5kKHRoaXMpKTtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gb01vZGVsLmdldE1ldGFNb2RlbCgpLnJlcXVlc3RPYmplY3QoXCIvJEVudGl0eUNvbnRhaW5lci9cIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIG5vdCBhbiBPRGF0YSB2NCBzZXJ2aWNlXG5cdFx0XHR0aGlzLmVudGl0eUNvbnRhaW5lciA9IFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblxuXHRcdGlmICh0aGlzLmdldE1hbmlmZXN0RW50cnkoXCJzYXAuZmVcIik/LmFwcD8uZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCkge1xuXHRcdFx0Ly8gZGlzYWJsZSB0aGUgY29sbGFib3JhdGlvbiBkcmFmdCBnbG9iYWxseSBpbiBjYXNlIHByaXZhdGUgbWFuaWZlc3QgZmxhZyBpcyBzZXRcblx0XHRcdC8vIHRoaXMgYWxsb3dzIGN1c3RvbWVycyB0byBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGluIGNhc2Ugd2UgcnVuIGludG8gaXNzdWVzIHdpdGggdGhlIGZpcnN0IGRlbGl2ZXJ5XG5cdFx0XHQvLyB0aGlzIHdpbGwgYmUgcmVtb3ZlZCB3aXRoIHRoZSBuZXh0IFMvNCByZWxlYXNlXG5cdFx0XHRNb2RlbEhlbHBlci5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0ID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBvTWFuaWZlc3RVSTUgPSB0aGlzLmdldE1hbmlmZXN0KClbXCJzYXAudWk1XCJdO1xuXHRcdHRoaXMuY2hlY2tSb3V0aW5nQ29uZmlndXJhdGlvbihvTWFuaWZlc3RVSTUpO1xuXHRcdEFwcENvbXBvbmVudC5fY3VzdG9tTWFuaWZlc3RDaGVja3MuZm9yRWFjaCgoZm5Qcm9jZXNzKSA9PiB7XG5cdFx0XHRyZXR1cm4gZm5Qcm9jZXNzLmNhbGwodGhpcywgb01hbmlmZXN0VUk1KTtcblx0XHR9KTtcblxuXHRcdC8vIHRoZSBpbml0IGZ1bmN0aW9uIGNvbmZpZ3VyZXMgdGhlIHJvdXRpbmcgYWNjb3JkaW5nIHRvIHRoZSBzZXR0aW5ncyBhYm92ZVxuXHRcdC8vIGl0IHdpbGwgY2FsbCB0aGUgY3JlYXRlQ29udGVudCBmdW5jdGlvbiB0byBpbnN0YW50aWF0ZSB0aGUgUm9vdFZpZXcgYW5kIGFkZCBpdCB0byB0aGUgVUlDb21wb25lbnQgYWdncmVnYXRpb25zXG5cblx0XHRzdXBlci5pbml0KCk7XG5cdFx0QXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV0gPSB0aGlzO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBodHRwNTAzUmV0cnlIYW5kbGVyKGVycm9yOiBFcnJvciAmIHsgcmV0cnlBZnRlcj86IERhdGUgfSk6IFByb21pc2U8dW5kZWZpbmVkPiB7XG5cdFx0cmV0dXJuIEhUVFA1MDNIYW5kbGVyLmhhbmRsZTUwM0RlbGF5KGVycm9yLCB0aGlzLmdldFJvb3RDb250cm9sKCksIGdldFJlc291cmNlTW9kZWwodGhpcykpO1xuXHR9XG5cblx0cHJpdmF0ZSBjaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSk6IHZvaWQge1xuXHRcdGlmIChvTWFuaWZlc3RVSTU/LnJvb3RWaWV3Py52aWV3TmFtZSkge1xuXHRcdFx0Ly8gVGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllZCBhbiBvd24gcm9vdCB2aWV3IGluIHRoZSBtYW5pZmVzdFxuXG5cdFx0XHQvLyBSb290IFZpZXcgd2FzIG1vdmVkIGZyb20gc2FwLmZlLnRlbXBsYXRlcyB0byBzYXAuZmUuY29yZSAtIGtlZXAgaXQgY29tcGF0aWJsZVxuXHRcdFx0aWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLkZDTC5WSUVXTkFNRTtcblx0XHRcdH0gZWxzZSBpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLkZDTC5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3Py52aWV3TmFtZT8uaW5jbHVkZXMoXCJzYXAuZmUuY29yZS5yb290Vmlld1wiKSkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XHRgXFxuV3JvbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvdXBsZSAocm9vdFZpZXcvcm91dGVyQ2xhc3MpIGluIG1hbmlmZXN0IGZpbGUuXFxuYCArXG5cdFx0XHRcdFx0XHRgQ3VycmVudCB2YWx1ZXMgYXJlIDooJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9LyR7XG5cdFx0XHRcdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzIHx8IFwiPG1pc3Npbmcgcm91dGVyIGNsYXNzPlwiXG5cdFx0XHRcdFx0XHR9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YEV4cGVjdGVkIHZhbHVlcyBhcmUgXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9LyR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuRkNMLlZJRVdOQU1FfS8ke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBvblNlcnZpY2VzU3RhcnRlZChhbGxTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gYWxsU2VydmljZXM7XG5cdFx0Ly8gRXhlY3V0ZSBhbGwgcmVnaXN0ZXJlZCBjb25maWd1cmF0aW9uIGhhbmRsZXJzXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoQXBwQ29tcG9uZW50LmNvbmZpZ3VyYXRpb25IYW5kbGVycy5tYXAoYXN5bmMgKGhhbmRsZXIpID0+IGhhbmRsZXIodGhpcy5hZGRpdGlvbmFsQ29uZmlndXJhdGlvbikpKTtcblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZURlcGVuZGVudFByb2Nlc3Nlcy5tYXAoYXN5bmMgKGZuUHJvY2VzcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZm5Qcm9jZXNzLmNhbGwobnVsbCwgdGhpcyk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKS5yZWdpc3RlclNoZWxsSG9vaygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdENvbnRyb2woKS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vyci50b1N0cmluZygpfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gW107XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHRcdHRoaXMuY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTtcblx0fVxuXG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IERpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cblx0ZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNFeGl0aW5nID0gdHJ1ZTtcblxuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGRlbGV0ZSAod2luZG93IGFzIHVua25vd24pLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9IHRoaXMub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbD8ub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdD8uKCk7XG5cdFx0dGhpcy51bnJlZ2lzdGVyQ2FsbGJhY2tzKCk7XG5cdFx0c3VwZXIuZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblxuXHRnZXRSb3V0aW5nU2VydmljZSgpOiBSb3V0aW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFJvdXRpbmdTZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNpZGVFZmZlY3RzU2VydmljZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH1cblxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKTogQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Vmlld1ByZWxvYWRlclNlcnZpY2UoKTogVmlld1ByZWxvYWRlclNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWaWV3UHJlbG9hZGVyU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTogQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlKCk6IENvbnRleHRTaGFyaW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbnRleHRTaGFyaW5nU2VydmljZTtcblx0fVxuXG5cdGdldFRlbGVtZXRyeVNlcnZpY2UoKTogVGVsZW1ldHJ5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFRlbGVtZXRyeVNlcnZpY2U7XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpOiBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0SW5saW5lRWRpdFNlcnZpY2UoKTogSW5saW5lRWRpdFNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBJbmxpbmVFZGl0U2VydmljZTtcblx0fVxuXG5cdGFzeW5jIGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk6IFByb21pc2U8U3RhcnR1cFBhcmFtZXRlcnM+IHtcblx0XHRjb25zdCBvQ29tcG9uZW50RGF0YSA9IHRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpO1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKG9Db21wb25lbnREYXRhICYmIG9Db21wb25lbnREYXRhLnN0YXJ0dXBQYXJhbWV0ZXJzKSB8fCB7fSk7XG5cdH1cblxuXHRyZXN0b3JlKCk6IHZvaWQge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHJlc3RvcmVkXG5cdFx0Zm9yIChjb25zdCBzdGFydGVkU2VydmljZSBvZiB0aGlzLl9zdGFydGVkU2VydmljZXMpIHtcblx0XHRcdHN0YXJ0ZWRTZXJ2aWNlLm9uUmVzdG9yZT8uKCk7XG5cdFx0fVxuXHRcdHRoaXMuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkudmlld1N0YXRlLm9uUmVzdG9yZSgpO1xuXG5cdFx0Ly8gUmVzZXQgYWxsIHZhbHVlcyBpbiB2ZXJzaW9uQWN0aXZhdGlvblN0YXR1cyB0byBmYWxzZVxuXHRcdEFwcFN0YXRlSGFuZGxlci5yZXNldFZlcnNpb25BY3RpdmF0aW9uU3RhdHVzKCk7XG5cblx0XHR0aGlzLnN1c3BlbmRlZCA9IGZhbHNlO1xuXHR9XG5cblx0c3VzcGVuZCgpOiB2b2lkIHtcblx0XHQvLyBjYWxsZWQgYnkgRkxQIHdoZW4gYXBwIHNhcC1rZWVwLWFsaXZlIGlzIGVuYWJsZWQgYW5kIGFwcCBpcyBzdXNwZW5kZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25TdXNwZW5kPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25TdXNwZW5kKCk7XG5cblx0XHR0aGlzLnN1c3BlbmRlZCA9IHRydWU7XG5cdH1cblxuXHRpc1N1c3BlbmRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5zdXNwZW5kZWQ7XG5cdH1cblxuXHRhc3luYyBpc0FwcENvbXBvbmVudEJ1c3koKSA6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiB0aGlzLmRpc2NhcmRQcm9taXNlO1xuXHR9XG5cblx0LyoqXG5cdCAqIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIgZnVuY3Rpb24gaXMgYSBwdWJsaWMgYXBpIHRoYXQgYWN0cyBhcyBhIHdyYXBwZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi4gSXQgcGFzc2VzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgZnVydGhlciB0byBfbWFuYWdlRGVlcExpbmtTdGFydHVwIGZ1bmN0aW9uXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVycyBEZWZpbmVzIHRoZSBzdGFydHVwIHBhcmFtZXRlcnMgd2hpY2ggaXMgZnVydGhlciBwYXNzZWQgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvbi5cblx0ICovXG5cblx0YXN5bmMgbmF2aWdhdGVCYXNlZE9uU3RhcnR1cFBhcmFtZXRlcihzdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGlmICghQnVzeUxvY2tlci5pc0xvY2tlZCh0aGlzLmdldE1vZGVsKFwidWlcIikpKSB7XG5cdFx0XHRcdGlmICghc3RhcnR1cFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRzdGFydHVwUGFyYW1ldGVycyA9IG51bGw7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3Qgcm91dGluZ1NlcnZpY2UgPSB0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCk7XG5cdFx0XHRcdGF3YWl0IHJvdXRpbmdTZXJ2aWNlLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAoc3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKGV4Y2VwdGlvbjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKGV4Y2VwdGlvbiBhcyBzdHJpbmcpO1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sodGhpcy5nZXRNb2RlbChcInVpXCIpKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogVXNlZCB0byBhbGxvdyBkaXNhYmxpbmcgdGhlIENvbGxhYm9yYXRpb24gTWFuYWdlciBpbnRlZ3JhdGlvbiBmb3IgdGhlIE9WUCB1c2UgY2FzZS5cblx0ICogQHJldHVybnMgV2hldGhlciB0aGUgY29sbGFib3JhdGlvbiBtYW5hZ2VyIHNlcnZpY2UgaXMgYWN0aXZlLlxuXHQgKi9cblx0aXNDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIHByb2Nlc3NlcyB0aGF0IG5lZWQgdG8gYmUgcnVuIGZvciBldmVyeSBpbnN0YW5jZSBwcmlvciB0byBzdGFydHVwLlxuXHQgKiBAcGFyYW0gZm5Qcm9jZXNzIEZ1bmN0aW9uIHRoYXQgaG9sZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIHByb2Nlc3MuXG5cdCAqXG5cdCAqIFRoZSByZWdpc3RlcmVkIHByb2Nlc3MgY2FuIGJlIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLlxuXHQgKiBJdCBzaGFsbCBiZSBjYWxsZWQgd2l0aCB0aGUgQXBwQ29tcG9uZW50IGluc3RhbmNlIGFzIGEgcGFyYW1ldGVyIGJlZm9yZSBzdGFydHVwLlxuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVySW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzRm9yU3RhcnRVcChmblByb2Nlc3M6IChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuXHRcdHRoaXMuaW5zdGFuY2VEZXBlbmRlbnRQcm9jZXNzZXMucHVzaChmblByb2Nlc3MpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVycyBjdXN0b20gaW5pdGlhbGl6YXRpb24gY2hlY2tzIHRoYXQgYXJlIHJ1biBiZWZvcmUgdGhlIGNvbXBvbmVudCBpcyBpbml0aWFsaXplZC5cblx0ICogVGhpcyBpcyB1c2VmdWwgZm9yIHJ1bm5pbmcgY2hlY2tzIHRoYXQgYXJlIHNwZWNpZmljIHRvIGEgbGlicmFyeS5cblx0ICogVGhlc2UgY2hlY2tzIGFyZSBydW4gYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQgYW5kIGJlZm9yZSB0aGUgbWFuaWZlc3QgaXMgbWVyZ2VkLlxuXHQgKiBAcGFyYW0gZm5Qcm9jZXNzXG5cdCAqL1xuXHRzdGF0aWMgcmVnaXN0ZXJJbml0Q2hlY2tzKGZuUHJvY2VzczogKG1hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSkgPT4gdm9pZCk6IHZvaWQge1xuXHRcdHRoaXMuX2N1c3RvbU1hbmlmZXN0Q2hlY2tzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICogQHBhcmFtIGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrXG5cdCAqIEBwYXJhbSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2tcblx0ICogQHBhcmFtIHNlc3Npb25UaW1lb3V0Q2FsbGJhY2tcblx0ICovXG5cdHJlZ2lzdGVyQ2FsbGJhY2tzKFxuXHRcdGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrOiBGdW5jdGlvbixcblx0XHRkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2s6IEZ1bmN0aW9uLFxuXHRcdHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s/OiBGdW5jdGlvblxuXHQpOiB2b2lkIHtcblx0XHR0aGlzLmRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s7XG5cdFx0dGhpcy5nZXRTaGVsbFNlcnZpY2VzKCkucmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIoZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spO1xuXG5cdFx0aWYgKHNlc3Npb25UaW1lb3V0Q2FsbGJhY2spIHtcblx0XHRcdHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayA9IHNlc3Npb25UaW1lb3V0Q2FsbGJhY2s7XG5cdFx0XHR0aGlzLmdldE1vZGVsKCkuYXR0YWNoU2Vzc2lvblRpbWVvdXQoc2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cdFx0fVxuXG5cdFx0dGhpcy5kaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2sgPSBkaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2s7XG5cdFx0dGhpcy5fcm91dGVNYXRjaEhhbmRsZXIgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAodGhpcy5kaXNjYXJkQWZ0ZXJOYXZpZ2F0aW9uQ2FsbGJhY2spIHtcblx0XHRcdFx0dGhpcy5kaXNjYXJkUHJvbWlzZSA9IHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKCk7XG5cdFx0XHR9XG5cdFx0fTtcblx0XHR0aGlzLmdldFJvdXRpbmdTZXJ2aWNlKCkuYXR0YWNoUm91dGVNYXRjaGVkKHt9LCB0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcik7XG5cdH1cblxuXHQvKipcblx0ICogVW5yZWdpc3RlcnMgdGhlIGNhbGxiYWNrcyByZWxhdGVkIHRvIGEgc3RpY2t5IGVkaXQgc2Vzc2lvbi5cblx0ICovXG5cdHVucmVnaXN0ZXJDYWxsYmFja3MoKTogdm9pZCB7XG5cdFx0aWYgKHRoaXMuZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spIHtcblx0XHRcdHRoaXMuZ2V0U2hlbGxTZXJ2aWNlcygpLmRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIodGhpcy5kaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayk7XG5cdFx0XHR0aGlzLmRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrICYmIHRoaXMuZ2V0TW9kZWwoKSkge1xuXHRcdFx0dGhpcy5nZXRNb2RlbCgpLmRldGFjaFNlc3Npb25UaW1lb3V0KHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayk7XG5cdFx0XHR0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICh0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcikge1xuXHRcdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlcik7XG5cdFx0XHR0aGlzLl9yb3V0ZU1hdGNoSGFuZGxlciA9IHVuZGVmaW5lZDtcblx0XHRcdHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGNvbXBvbmVudCBpcyBlbWJlZGRlZCBpbiBhbm90aGVyIGFwcGxpY2F0aW9uLlxuXHQgKiBUaGlzIGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgdGhlIGNvbXBvbmVudCBkYXRhIGNvbnRhaW5zIGEgYGZlRW52aXJvbm1lbnRgIG9iamVjdC5cblx0ICogVGhpcyBpcyBzZXQgd2hlbiB0aGUgY29tcG9uZW50IGlzIGVtYmVkZGVkIGluIE15IEluYm94LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjb21wb25lbnQgaXMgZW1iZWRkZWQsIGZhbHNlIG90aGVyd2lzZS5cblx0ICovXG5cdF9pc0VtYmVkZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiAhIXRoaXMuZ2V0Q29tcG9uZW50RGF0YSgpLmZlRW52aXJvbm1lbnQ7XG5cdH1cbn1cblxuaW50ZXJmYWNlIEFwcENvbXBvbmVudCBleHRlbmRzIFVJQ29tcG9uZW50IHtcblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuO1xuXHRnZXRNYW5pZmVzdCgpOiBNYW5pZmVzdENvbnRlbnQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmFwcFwiKTogTWFuaWZlc3RDb250ZW50W1wic2FwLmFwcFwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWk1XCJdO1xuXHRfZ2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWk1XCIsIG1lcmdlZDogYm9vbGVhbik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLnVpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAudWlcIl07XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZlXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmVcIl0gfCB1bmRlZmluZWQ7XG5cdGdldE1hbmlmZXN0RW50cnkoZW50cnk6IFwic2FwLmZpb3JpXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuZmlvcmlcIl07XG5cdGdldENvbXBvbmVudERhdGEoKTogQ29tcG9uZW50RGF0YTtcblx0Z2V0Um9vdENvbnRyb2woKToge1xuXHRcdGdldENvbnRyb2xsZXIoKTogUm9vdFZpZXdCYXNlQ29udHJvbGxlcjtcblx0fSAmIFZpZXc7XG5cdGdldE1vZGVsKCk6IE9EYXRhTW9kZWw7XG5cdGdldE1vZGVsKG5hbWU6IFwidWlcIik6IEpTT05Nb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogc3RyaW5nKTogTW9kZWwgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFwcENvbXBvbmVudDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBMkNBO0FBQ0E7QUFDQTs7RUFzQkEsTUFBTUEsV0FBVyxHQUFHQyxPQUFPLENBQUNELFdBQVc7RUFDdkMsTUFBTUUsT0FBTyxHQUFHO0lBQ2ZDLEdBQUcsRUFBRTtNQUNKQyxRQUFRLEVBQUUsMEJBQTBCO01BQ3BDQyxzQkFBc0IsRUFBRSx5Q0FBeUM7TUFDakVDLFdBQVcsRUFBRTtJQUNkLENBQUM7SUFDREMsWUFBWSxFQUFFO01BQ2JILFFBQVEsRUFBRSxtQ0FBbUM7TUFDN0NDLHNCQUFzQixFQUFFLGtEQUFrRDtNQUMxRUMsV0FBVyxFQUFFO0lBQ2Q7RUFDRCxDQUFDO0VBWUQ7RUFDQSxNQUFNRSxRQUFRLEdBQUdDLE1BQU07RUFLdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBWEEsSUE2R01DLFlBQVksSUFBQUMsSUFBQSxHQWpHakJDLGNBQWMsQ0FBQywwQkFBMEIsRUFBRTtJQUMzQ0MsTUFBTSxFQUFFO01BQ1BDLFNBQVMsRUFBRTtJQUNaLENBQUM7SUFDREMsUUFBUSxFQUFFO01BQ1RDLFFBQVEsRUFBRSxPQUFPO01BQ2pCLFNBQVMsRUFBRTtRQUNWQyxRQUFRLEVBQUU7VUFDVEMsb0JBQW9CLEVBQUU7WUFDckJDLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeERDLE9BQU8sRUFBRTtVQUNWLENBQUM7VUFDREMsYUFBYSxFQUFFO1lBQ2RGLFdBQVcsRUFBRSwyQ0FBMkM7WUFDeERDLE9BQU8sRUFBRSxTQUFTO1lBQ2xCRSxRQUFRLEVBQUU7Y0FDVEMsT0FBTyxFQUFFLENBQUMsMkJBQTJCLENBQUM7Y0FDdENDLFNBQVMsRUFBRTtZQUNaO1VBQ0QsQ0FBQztVQUNEQyxjQUFjLEVBQUU7WUFD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LG1CQUFtQkEsQ0FBQSxFQUFTO01BQzNCLElBQUksSUFBSSxDQUFDa0MsMEJBQTBCLEVBQUU7UUFDcEMsSUFBSSxDQUFDakMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDeUMsNEJBQTRCLENBQUMsSUFBSSxDQUFDUiwwQkFBMEIsQ0FBQztRQUNyRixJQUFJLENBQUNBLDBCQUEwQixHQUFHMUcsU0FBUztNQUM1QztNQUNBLElBQUksSUFBSSxDQUFDOEcsNEJBQTRCLElBQUksSUFBSSxDQUFDeEcsUUFBUSxDQUFDLENBQUMsRUFBRTtRQUN6RCxJQUFJLENBQUNBLFFBQVEsQ0FBQyxDQUFDLENBQUM2RyxvQkFBb0IsQ0FBQyxJQUFJLENBQUNMLDRCQUE0QixDQUFDO1FBQ3ZFLElBQUksQ0FBQ0EsNEJBQTRCLEdBQUc5RyxTQUFTO01BQzlDO01BQ0EsSUFBSSxJQUFJLENBQUNnSCxrQkFBa0IsRUFBRTtRQUM1QixJQUFJLENBQUM1RCxpQkFBaUIsQ0FBQyxDQUFDLENBQUNnRSxrQkFBa0IsQ0FBQyxJQUFJLENBQUNKLGtCQUFrQixDQUFDO1FBQ3BFLElBQUksQ0FBQ0Esa0JBQWtCLEdBQUdoSCxTQUFTO1FBQ25DLElBQUksQ0FBQzJHLDhCQUE4QixHQUFHM0csU0FBUztNQUNoRDtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUxDO0lBQUF4RSxNQUFBLENBTUE2TCxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUFZO01BQ3RCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQ2hDLGdCQUFnQixDQUFDLENBQUMsQ0FBQ2lDLGFBQWE7SUFDL0MsQ0FBQztJQUFBLE9BQUFsUSxZQUFBO0VBQUEsRUFybUJ5Qm1RLFdBQVcsR0FBQXZOLGFBQUEsQ0FJOUJxSCxXQUFXLEdBQWlDLENBQUMsQ0FBQyxFQUFBckgsYUFBQSxDQW1CdENrQyxxQkFBcUIsR0FBNEUsRUFBRSxFQUFBbEMsYUFBQSxDQXlDbkdvSSwwQkFBMEIsR0FBc0QsRUFBRSxFQUFBcEksYUFBQSxDQUtsRmtILHFCQUFxQixHQUE4RCxFQUFFLEVBQUFsSCxhQUFBLEdBQUFXLFdBQUEsR0FBQTZNLHlCQUFBLENBQUF6TixPQUFBLENBQUEwQixTQUFBLHNEQUFBN0IsS0FBQTtJQUFBNk4sWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQSxXQUFBQSxDQUFBO01BQUEsT0FuRWxELElBQUk7SUFBQTtFQUFBLElBQUE3TixPQUFBLE1BQUFELE1BQUE7RUFBQSxPQXduQnhDMUMsWUFBWTtBQUFBIiwiaWdub3JlTGlzdCI6W119