@sapui5/sap.fe.core 1.141.2 → 1.143.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 (217) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +4 -1
  3. package/src/sap/fe/core/ActionRuntime.js +78 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +91 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +91 -8
  7. package/src/sap/fe/core/AppStateHandler.js +7 -7
  8. package/src/sap/fe/core/AppStateHandler.ts +9 -8
  9. package/src/sap/fe/core/BaseController.js +8 -5
  10. package/src/sap/fe/core/BaseController.ts +6 -1
  11. package/src/sap/fe/core/CommonUtils.js +4 -123
  12. package/src/sap/fe/core/CommonUtils.ts +3 -172
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -11
  14. package/src/sap/fe/core/ExtensionAPI.ts +3 -16
  15. package/src/sap/fe/core/PageController.js +64 -43
  16. package/src/sap/fe/core/PageController.ts +62 -47
  17. package/src/sap/fe/core/TemplateComponent.js +12 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +16 -2
  19. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +37 -24
  20. package/src/sap/fe/core/buildingBlocks/BuildingBlock.ts +47 -31
  21. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.js +1 -1
  22. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockSupport.ts +4 -0
  23. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +4 -1
  24. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +3 -0
  25. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.js +5 -3
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +5 -2
  27. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.js +7 -5
  28. package/src/sap/fe/core/controllerextensions/BaseControllerExtension.ts +22 -2
  29. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.js +82 -44
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +92 -59
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +74 -48
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +87 -50
  33. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +9 -7
  34. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +17 -5
  35. package/src/sap/fe/core/controllerextensions/InternalRouting.js +37 -18
  36. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +49 -17
  37. package/src/sap/fe/core/controllerextensions/KPIManagement.js +30 -15
  38. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +32 -14
  39. package/src/sap/fe/core/controllerextensions/MessageHandler.js +9 -10
  40. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +10 -9
  41. package/src/sap/fe/core/controllerextensions/Paginator.js +2 -2
  42. package/src/sap/fe/core/controllerextensions/Paginator.ts +1 -1
  43. package/src/sap/fe/core/controllerextensions/Placeholder.js +10 -2
  44. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -1
  45. package/src/sap/fe/core/controllerextensions/Recommendations.js +3 -3
  46. package/src/sap/fe/core/controllerextensions/Recommendations.ts +2 -2
  47. package/src/sap/fe/core/controllerextensions/Routing.js +4 -4
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +3 -6
  49. package/src/sap/fe/core/controllerextensions/Share.js +5 -5
  50. package/src/sap/fe/core/controllerextensions/Share.ts +4 -4
  51. package/src/sap/fe/core/controllerextensions/SideEffects.js +1 -1
  52. package/src/sap/fe/core/controllerextensions/SideEffects.ts +17 -2
  53. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.js +2 -2
  54. package/src/sap/fe/core/controllerextensions/collaboration/ActivityBase.ts +1 -1
  55. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +3 -3
  56. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +3 -2
  57. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +49 -21
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +64 -24
  59. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +37 -3
  60. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +41 -8
  61. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +10 -4
  62. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +6 -1
  63. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +6 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +5 -5
  65. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +2 -2
  66. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +1 -1
  67. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +2 -1
  70. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  71. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +21 -15
  72. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +18 -15
  73. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -6
  74. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +8 -5
  75. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  76. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  77. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +3 -2
  78. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +2 -1
  79. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  80. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  81. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  82. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  83. package/src/sap/fe/core/converters/MetaModelConverter.js +1 -1
  84. package/src/sap/fe/core/converters/MetaModelConverter.ts +1 -1
  85. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  86. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  87. package/src/sap/fe/core/converters/common/AnnotationConverter.js +118 -39
  88. package/src/sap/fe/core/converters/controls/Common/Action.js +58 -21
  89. package/src/sap/fe/core/converters/controls/Common/Action.ts +72 -22
  90. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  91. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  92. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  93. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  94. package/src/sap/fe/core/converters/controls/Common/Table.js +87 -22
  95. package/src/sap/fe/core/converters/controls/Common/Table.ts +112 -21
  96. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  97. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  98. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  99. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +174 -79
  100. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  101. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  102. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  103. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  104. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  105. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  106. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  107. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  108. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  109. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  110. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +10 -5
  111. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +13 -1
  112. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  113. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  114. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  115. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  116. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  117. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  118. package/src/sap/fe/core/flexibility/AppComponent.flexibility.js +55 -0
  119. package/src/sap/fe/core/flexibility/AppComponent.flexibility.ts +65 -0
  120. package/src/sap/fe/core/flexibility/XMLTools.js +71 -0
  121. package/src/sap/fe/core/flexibility/XMLTools.ts +61 -0
  122. package/src/sap/fe/core/fpm/manifest.json +2 -2
  123. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  124. package/src/sap/fe/core/helpers/AppStartupHelper.ts +92 -32
  125. package/src/sap/fe/core/helpers/DeleteHelper.js +13 -13
  126. package/src/sap/fe/core/helpers/DeleteHelper.ts +17 -15
  127. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  128. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  129. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  130. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  131. package/src/sap/fe/core/helpers/ModelHelper.js +47 -11
  132. package/src/sap/fe/core/helpers/ModelHelper.ts +62 -15
  133. package/src/sap/fe/core/helpers/PasteHelper.js +6 -2
  134. package/src/sap/fe/core/helpers/PasteHelper.ts +5 -7
  135. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  136. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  137. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  138. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  139. package/src/sap/fe/core/library.js +33 -3
  140. package/src/sap/fe/core/library.ts +31 -1
  141. package/src/sap/fe/core/messagebundle.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_ar.properties +8 -1
  143. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  144. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  146. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  148. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  149. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  152. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  153. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +8 -1
  154. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  159. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  167. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_no.properties +9 -2
  175. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  184. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  185. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  186. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  187. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  188. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  189. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  190. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  191. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  192. package/src/sap/fe/core/rootView/Fcl.controller.ts +22 -5
  193. package/src/sap/fe/core/rootView/NavContainer.controller.js +1 -1
  194. package/src/sap/fe/core/rootView/NavContainer.controller.ts +2 -1
  195. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  196. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  197. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.js +1 -1
  198. package/src/sap/fe/core/services/CollaborativeToolsServiceFactory.ts +9 -9
  199. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  200. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  201. package/src/sap/fe/core/services/RoutingServiceFactory.js +9 -4
  202. package/src/sap/fe/core/services/RoutingServiceFactory.ts +13 -6
  203. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  204. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  205. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +57 -5
  206. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +69 -10
  207. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  208. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  209. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  210. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  211. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  212. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  213. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  214. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  215. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  216. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  217. package/ui5.yaml +2 -0
@@ -39,7 +39,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
39
39
  * Main class for components used for an application in SAP Fiori elements.
40
40
  *
41
41
  * Application developers using the templates and building blocks provided by SAP Fiori elements should create their apps by extending this component.
42
- * This ensures that all the necessary services that you need for the building blocks and templates to work properly are started.
42
+ * This ensures that all the necessary services that you need for the building blocks and templates to work are started.
43
43
  *
44
44
  * When you use sap.fe.core.AppComponent as the base component, you also need to use a rootView. SAP Fiori elements provides two options: <br/>
45
45
  * - sap.fe.core.rootView.NavContainer when using sap.m.routing.Router <br/>
@@ -156,12 +156,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
156
156
  */
157
157
  _this.additionalConfiguration = {};
158
158
  _this.startupMode = StartupMode.Normal;
159
+ _this.delayTime = 100;
160
+ _this.delayMetadataCheck = false;
159
161
  _this._startedServices = [];
160
162
  _this.isAdaptationEnabled = false;
161
163
  _this.isExiting = false;
162
164
  _this.pageConfigurationChanges = {};
163
165
  _this.suspended = false;
164
166
  _this.discardPromise = Promise.resolve();
167
+ /**
168
+ * Status of the preferred action execution to prevent duplicate triggering.
169
+ * - NotSet: Initial state, no preferred action has been evaluated
170
+ * - CanPerform: Preferred action can be performed (conditions are met)
171
+ * - AlreadyPerformed: Preferred action has been executed and should not be triggered again
172
+ */
173
+ _this.preferredActionStatus = library.PreferredActionStatusType.NotSet;
165
174
  return _this;
166
175
  }
167
176
  _inheritsLoose(AppComponent, _UIComponent);
@@ -177,6 +186,25 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
177
186
  /**
178
187
  * Registered handlers for modifying additional configuration.
179
188
  */;
189
+ /**
190
+ * Gets the current status of the preferred action.
191
+ * @returns The current preferred action status
192
+ */
193
+ _proto.getPreferredActionStatus = function getPreferredActionStatus() {
194
+ return this.preferredActionStatus;
195
+ }
196
+
197
+ /**
198
+ * Sets the status of the preferred action.
199
+ * @param status The new status to set
200
+ */;
201
+ _proto.setPreferredActionStatus = function setPreferredActionStatus(status) {
202
+ this.preferredActionStatus = status;
203
+ }
204
+
205
+ /**
206
+ * Singleton to hold processes from libraries that need to be run for every instance prior to startup.
207
+ */;
180
208
  _proto._isFclEnabled = function _isFclEnabled() {
181
209
  const oManifestUI5 = this.getManifestEntry("sap.ui5");
182
210
  return oManifestUI5?.routing?.config?.routerClass === NAVCONF.FCL.ROUTERCLASS;
@@ -301,6 +329,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
301
329
  this.startupMode = StartupMode.Deeplink;
302
330
  };
303
331
  _proto.init = function init() {
332
+ this.oComponentData ??= {};
304
333
  const params = new URLSearchParams(window.location.search);
305
334
  if (params.has("sap-ui-xx-fe-support")) {
306
335
  setTimeout(function () {
@@ -309,6 +338,24 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
309
338
  });
310
339
  }, 2000);
311
340
  }
341
+ if (params.has("sap-ui-xx-fe-eager-view")) {
342
+ this.eagerViewCreation = true;
343
+ }
344
+ if (params.has("sap-ui-xx-fe-hide-view")) {
345
+ this.hideViewDuringCreation = true;
346
+ }
347
+ if (params.has("sap-ui-xx-fe-field-opt")) {
348
+ // STABLE-ISH
349
+ this.delayMetadataCheck = true;
350
+ }
351
+ if (params.has("sap-ui-xx-fe-delay")) {
352
+ // STABLE
353
+ this.delayTime = parseInt(params.get("sap-ui-xx-fe-delay"), 10);
354
+ }
355
+ if (params.has("sap-ui-xx-fe-fcl-opt")) {
356
+ // STABLE
357
+ this.delayFcl = true;
358
+ }
312
359
  this._initializedKeeper = new PromiseKeeper();
313
360
  this.initialized = this._initializedKeeper.promise;
314
361
  const uiModel = new JSONModel({
@@ -353,6 +400,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
353
400
  AppComponent._customManifestChecks.forEach(fnProcess => {
354
401
  return fnProcess.call(this, oManifestUI5);
355
402
  });
403
+ this.preloadLibraries(oManifestUI5);
356
404
 
357
405
  // the init function configures the routing according to the settings above
358
406
  // it will call the createContent function to instantiate the RootView and add it to the UIComponent aggregations
@@ -363,6 +411,21 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
363
411
  _proto.http503RetryHandler = async function http503RetryHandler(error) {
364
412
  return HTTP503Handler.handle503Delay(error, this.getRootControl(), getResourceModel(this));
365
413
  };
414
+ _proto.preloadLibraries = function preloadLibraries(oManifestUI5) {
415
+ for (const targetsKey in oManifestUI5.routing?.targets) {
416
+ if (oManifestUI5.routing?.targets[targetsKey].name === "sap.fe.templates.ObjectPage") {
417
+ Library.load({
418
+ name: "sap.uxap"
419
+ }); // fire and forget
420
+ }
421
+ const settings = JSON.stringify(oManifestUI5.routing?.targets[targetsKey]?.options?.settings?.controlConfiguration);
422
+ if (settings?.includes("GridTable") || settings?.includes("TreeTable")) {
423
+ Library.load({
424
+ name: "sap.ui.table"
425
+ }); // fire and forget
426
+ }
427
+ }
428
+ };
366
429
  _proto.checkRoutingConfiguration = function checkRoutingConfiguration(oManifestUI5) {
367
430
  if (oManifestUI5?.rootView?.viewName) {
368
431
  // The application specified an own root view in the manifest
@@ -397,6 +460,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
397
460
  //starting of the router
398
461
  const finalizedRoutingInitialization = () => {
399
462
  this.entityContainer.then(async () => {
463
+ // Preload currencyCodes and UoM if they exists
464
+ this.getMetaModel().requestCodeList?.("CurrencyCodes");
465
+ this.getMetaModel().requestCodeList?.("UnitOfMeasures");
400
466
  if (this.getRootViewController().attachRouteMatchers) {
401
467
  this.getRootViewController().attachRouteMatchers();
402
468
  }
@@ -522,8 +588,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
522
588
  return {};
523
589
  };
524
590
  _proto.getStartupParameters = async function getStartupParameters() {
525
- const oComponentData = this.getComponentData();
526
- return Promise.resolve(oComponentData && oComponentData.startupParameters || {});
591
+ const startupParams = this.getComponentData()?.startupParameters;
592
+ if (startupParams?.preferredAction?.[0].includes("summary") && this.getPreferredActionStatus() === library.PreferredActionStatusType.NotSet) {
593
+ this.setPreferredActionStatus(library.PreferredActionStatusType.CanPerform);
594
+ }
595
+ return startupParams ?? {};
527
596
  };
528
597
  _proto.restore = function restore() {
529
598
  // called by FLP when app sap-keep-alive is enabled and app is restored
@@ -647,7 +716,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
647
716
  * @returns True if the component is embedded, false otherwise.
648
717
  */;
649
718
  _proto._isEmbedded = function _isEmbedded() {
650
- return !!this.getComponentData().feEnvironment;
719
+ return !!this.getComponentData()?.feEnvironment;
651
720
  };
652
721
  return AppComponent;
653
722
  }(UIComponent), _AppComponent.instanceMap = {}, _AppComponent.configurationHandlers = [], _AppComponent.instanceDependentProcesses = [], _AppComponent._customManifestChecks = [], _AppComponent), _descriptor = _applyDecoratedDescriptor(_class2.prototype, "__implements__sap_ui_core_IAsyncContentCreation", [_dec2], {
@@ -657,7 +726,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/AppState
657
726
  initializer: function () {
658
727
  return true;
659
728
  }
660
- }), _class2)) || _class);
729
+ }), _class2)) || _class); // eslint-disable-next-line @typescript-eslint/ban-ts-comment
730
+ // @ts-ignore
661
731
  return AppComponent;
662
732
  }, false);
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
733
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJTdGFydHVwTW9kZSIsImxpYnJhcnkiLCJOQVZDT05GIiwiRkNMIiwiVklFV05BTUUiLCJWSUVXTkFNRV9DT01QQVRJQklMSVRZIiwiUk9VVEVSQ0xBU1MiLCJOQVZDT05UQUlORVIiLCJfbVJvdXRlciIsIlJvdXRlciIsIkFwcENvbXBvbmVudCIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsImNvbmZpZyIsImZ1bGxXaWR0aCIsIm1hbmlmZXN0IiwiX3ZlcnNpb24iLCJzZXJ2aWNlcyIsInZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZmFjdG9yeU5hbWUiLCJzdGFydHVwIiwicmVzb3VyY2VNb2RlbCIsInNldHRpbmdzIiwiYnVuZGxlcyIsIm1vZGVsTmFtZSIsInJvdXRpbmdTZXJ2aWNlIiwic2hlbGxTZXJ2aWNlcyIsIlNoZWxsVUlTZXJ2aWNlIiwibmF2aWdhdGlvblNlcnZpY2UiLCJlbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNpZGVFZmZlY3RzU2VydmljZSIsImFzeW5jQ29tcG9uZW50U2VydmljZSIsImNvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImNvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UiLCJ0ZWxlbWV0cnlTZXJ2aWNlIiwidmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIiwiQ29udGV4dFNoYXJpbmdTZXJ2aWNlIiwiaW5saW5lRWRpdFNlcnZpY2UiLCJyb290VmlldyIsInZpZXdOYW1lIiwiaWQiLCJyb3V0aW5nIiwiY29udHJvbElkIiwicm91dGVyQ2xhc3MiLCJ2aWV3VHlwZSIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImNvbnRhaW5lck9wdGlvbnMiLCJwcm9wYWdhdGVNb2RlbCIsImRlc2lnbnRpbWUiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQXBwQ29tcG9uZW50IiwiX1VJQ29tcG9uZW50IiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiYWRkaXRpb25hbENvbmZpZ3VyYXRpb24iLCJzdGFydHVwTW9kZSIsIk5vcm1hbCIsImRlbGF5VGltZSIsImRlbGF5TWV0YWRhdGFDaGVjayIsIl9zdGFydGVkU2VydmljZXMiLCJpc0FkYXB0YXRpb25FbmFibGVkIiwiaXNFeGl0aW5nIiwicGFnZUNvbmZpZ3VyYXRpb25DaGFuZ2VzIiwic3VzcGVuZGVkIiwiZGlzY2FyZFByb21pc2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInByZWZlcnJlZEFjdGlvblN0YXR1cyIsIlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGUiLCJOb3RTZXQiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldEFkZGl0aW9uYWxDb25maWd1cmF0aW9uIiwiZ2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwic2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzIiwic3RhdHVzIiwiX2lzRmNsRW5hYmxlZCIsIm9NYW5pZmVzdFVJNSIsImdldE1hbmlmZXN0RW50cnkiLCJzZXRBZGFwdGF0aW9uTW9kZSIsImlzQWRhcHRhdGlvbk1vZGUiLCJyZWdpc3RlckNvbmZpZ3VyYXRpb25IYW5kbGVycyIsImhhbmRsZXIiLCJjb25maWd1cmF0aW9uSGFuZGxlcnMiLCJwdXNoIiwiaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzIiwiY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb24iLCJwYWdlSWQiLCJwYXRoIiwidmFsdWUiLCJjaGFuZ2VDb25maWd1cmF0aW9uIiwiZ2V0TWFuaWZlc3QiLCJnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcyIsInNldENhcGFiaWxpdHkiLCJjbGVhblBhZ2VDb25maWd1cmF0aW9uQ2hhbmdlcyIsImdldFJvdXRlclByb3h5IiwiX29Sb3V0ZXJQcm94eSIsImdldEFwcFN0YXRlSGFuZGxlciIsIl9vQXBwU3RhdGVIYW5kbGVyIiwiZ2V0Um9vdFZpZXdDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRyb2wiLCJnZXRDb250cm9sbGVyIiwiZ2V0Um9vdENvbnRhaW5lciIsImdldENvbnRlbnQiLCJnZXRTdGFydHVwTW9kZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiQ3JlYXRlIiwic2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlIiwiQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJEZWVwbGluayIsImluaXQiLCJvQ29tcG9uZW50RGF0YSIsInBhcmFtcyIsIlVSTFNlYXJjaFBhcmFtcyIsIndpbmRvdyIsImxvY2F0aW9uIiwic2VhcmNoIiwiaGFzIiwic2V0VGltZW91dCIsIkxpYnJhcnkiLCJsb2FkIiwibmFtZSIsImVhZ2VyVmlld0NyZWF0aW9uIiwiaGlkZVZpZXdEdXJpbmdDcmVhdGlvbiIsInBhcnNlSW50IiwiZ2V0IiwiZGVsYXlGY2wiLCJfaW5pdGlhbGl6ZWRLZWVwZXIiLCJQcm9taXNlS2VlcGVyIiwiaW5pdGlhbGl6ZWQiLCJwcm9taXNlIiwidWlNb2RlbCIsIkpTT05Nb2RlbCIsImVkaXRNb2RlIiwiRWRpdE1vZGUiLCJEaXNwbGF5IiwiaXNFZGl0YWJsZSIsImRyYWZ0U3RhdHVzIiwiRHJhZnRTdGF0dXMiLCJDbGVhciIsImJ1c3kiLCJidXN5TG9jYWwiLCJwYWdlcyIsIm9JbnRlcm5hbE1vZGVsIiwic2V0RGVmYXVsdEJpbmRpbmdNb2RlIiwiTW9kZWxIZWxwZXIiLCJlbmhhbmNlVWlKU09OTW9kZWwiLCJlbmhhbmNlSW50ZXJuYWxKU09OTW9kZWwiLCJzZXRNb2RlbCIsImJJbml0aWFsaXplUm91dGluZyIsInVuZGVmaW5lZCIsIlJvdXRlclByb3h5IiwiQXBwU3RhdGVIYW5kbGVyIiwiX29EaWFnbm9zdGljcyIsIkRpYWdub3N0aWNzIiwib01vZGVsIiwiZ2V0TW9kZWwiLCJpc0EiLCJlbmhhbmNlT0RhdGFNb2RlbCIsInNldFJldHJ5QWZ0ZXJIYW5kbGVyIiwiaHR0cDUwM1JldHJ5SGFuZGxlciIsImJpbmQiLCJlbnRpdHlDb250YWluZXIiLCJnZXRNZXRhTW9kZWwiLCJyZXF1ZXN0T2JqZWN0IiwiYXBwIiwiZGlzYWJsZUNvbGxhYm9yYXRpb25EcmFmdCIsImNoZWNrUm91dGluZ0NvbmZpZ3VyYXRpb24iLCJfY3VzdG9tTWFuaWZlc3RDaGVja3MiLCJmb3JFYWNoIiwiZm5Qcm9jZXNzIiwicHJlbG9hZExpYnJhcmllcyIsImluc3RhbmNlTWFwIiwiZ2V0SWQiLCJlcnJvciIsIkhUVFA1MDNIYW5kbGVyIiwiaGFuZGxlNTAzRGVsYXkiLCJnZXRSZXNvdXJjZU1vZGVsIiwidGFyZ2V0c0tleSIsInRhcmdldHMiLCJKU09OIiwic3RyaW5naWZ5Iiwib3B0aW9ucyIsImNvbnRyb2xDb25maWd1cmF0aW9uIiwiaW5jbHVkZXMiLCJMb2ciLCJpbmZvIiwiRXJyb3IiLCJvblNlcnZpY2VzU3RhcnRlZCIsImFsbFNlcnZpY2VzIiwiYWxsIiwibWFwIiwiYWxsU2V0dGxlZCIsImluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzIiwiZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uIiwidGhlbiIsInJlcXVlc3RDb2RlTGlzdCIsImF0dGFjaFJvdXRlTWF0Y2hlcnMiLCJnZXRSb3V0ZXIiLCJpbml0aWFsaXplIiwiZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UiLCJyZWdpc3RlclNoZWxsSG9vayIsImNhdGNoIiwib1Jlc291cmNlQnVuZGxlIiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkaXNwbGF5RXJyb3JQYWdlIiwiZ2V0VGV4dCIsInRpdGxlIiwiZGVzY3JpcHRpb24iLCJtZXNzYWdlIiwiZ2V0Um91dGluZ1NlcnZpY2UiLCJpbml0aWFsaXplUm91dGluZyIsImF0dGFjaEFmdGVySW5pdCIsImVyciIsInRvU3RyaW5nIiwiZXhpdCIsImRlc3Ryb3kiLCJkZWxldGVNb2RlbENhY2hlRGF0YSIsImdldERpYWdub3N0aWNzIiwiYlN1cHByZXNzSW52YWxpZGF0ZSIsIl9yb3V0aW5nIiwiZSIsIm9NYWluTW9kZWwiLCJvTW9kZWxzIiwib0hlYWRlcnMiLCJvUmVxdWVzdG9yIiwiT2JqZWN0IiwiYXNzaWduIiwibUhlYWRlcnMiLCJiZWZvcmVFeGl0IiwidW5yZWdpc3RlckNhbGxiYWNrcyIsImdldFNoZWxsU2VydmljZXMiLCJnZXROYXZpZ2F0aW9uU2VydmljZSIsImdldFNpZGVFZmZlY3RzU2VydmljZSIsImdldENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSIsImdldFZpZXdQcmVsb2FkZXJTZXJ2aWNlIiwiZ2V0Q29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSIsImdldENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2UiLCJnZXRDb250ZXh0U2hhcmluZ1NlcnZpY2UiLCJnZXRUZWxlbWV0cnlTZXJ2aWNlIiwiZ2V0SW5saW5lRWRpdFNlcnZpY2UiLCJnZXRTdGFydHVwUGFyYW1ldGVycyIsInN0YXJ0dXBQYXJhbXMiLCJnZXRDb21wb25lbnREYXRhIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJwcmVmZXJyZWRBY3Rpb24iLCJDYW5QZXJmb3JtIiwicmVzdG9yZSIsInN0YXJ0ZWRTZXJ2aWNlIiwib25SZXN0b3JlIiwidmlld1N0YXRlIiwicmVzZXRWZXJzaW9uQWN0aXZhdGlvblN0YXR1cyIsInN1c3BlbmQiLCJvblN1c3BlbmQiLCJpc1N1c3BlbmRlZCIsImlzQXBwQ29tcG9uZW50QnVzeSIsIm5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIiLCJCdXN5TG9ja2VyIiwiaXNMb2NrZWQiLCJfbWFuYWdlRGVlcExpbmtTdGFydHVwIiwiZXhjZXB0aW9uIiwidW5sb2NrIiwiaXNDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VFbmFibGVkIiwicmVnaXN0ZXJJbnN0YW5jZURlcGVuZGVudFByb2Nlc3NGb3JTdGFydFVwIiwicmVnaXN0ZXJJbml0Q2hlY2tzIiwicmVnaXN0ZXJDYWxsYmFja3MiLCJkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayIsImRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayIsInNlc3Npb25UaW1lb3V0Q2FsbGJhY2siLCJyZWdpc3RlckRpcnR5U3RhdGVQcm92aWRlciIsInN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2siLCJhdHRhY2hTZXNzaW9uVGltZW91dCIsIl9yb3V0ZU1hdGNoSGFuZGxlciIsImF0dGFjaFJvdXRlTWF0Y2hlZCIsImRlcmVnaXN0ZXJEaXJ0eVN0YXRlUHJvdmlkZXIiLCJkZXRhY2hTZXNzaW9uVGltZW91dCIsImRldGFjaFJvdXRlTWF0Y2hlZCIsIl9pc0VtYmVkZGVkIiwiZmVFbnZpcm9ubWVudCIsIlVJQ29tcG9uZW50IiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJBcHBDb21wb25lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBGbGV4aWJsZUNvbHVtbkxheW91dCBmcm9tIFwic2FwL2YvRmxleGlibGVDb2x1bW5MYXlvdXRcIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBpbXBsZW1lbnRJbnRlcmZhY2UgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgQXBwU3RhdGVIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9BcHBTdGF0ZUhhbmRsZXJcIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEhUVFA1MDNIYW5kbGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0hUVFA1MDNIYW5kbGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBQcm9taXNlS2VlcGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Byb21pc2VLZWVwZXJcIjtcbmltcG9ydCBsaWJyYXJ5IGZyb20gXCJzYXAvZmUvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgeyBjaGFuZ2VDb25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL21hbmlmZXN0TWVyZ2VyL0NoYW5nZVBhZ2VDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgdHlwZSBSb290Vmlld0Jhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9yb290Vmlldy9Sb290Vmlld0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpb25NYW5hZ2VyU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgQ29udGV4dFNoYXJpbmdTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0NvbnRleHRTaGFyaW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgRW52aXJvbm1lbnRDYXBhYmlsaXRpZXNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL0Vudmlyb25tZW50U2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSW5saW5lRWRpdFNlcnZpY2UgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvSW5saW5lRWRpdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0aW5nU2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9Sb3V0aW5nU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgU2lkZUVmZmVjdHNTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NpZGVFZmZlY3RzU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIHsgVGVsZW1ldHJ5U2VydmljZSB9IGZyb20gXCJzYXAvZmUvY29yZS9zZXJ2aWNlcy9UZWxlbWV0cnlTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgeyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL2NvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB0eXBlIE5hdkNvbnRhaW5lciBmcm9tIFwic2FwL20vTmF2Q29udGFpbmVyXCI7XG5pbXBvcnQgUm91dGVyIGZyb20gXCJzYXAvbS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdENvbnRlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBVSUNvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvVUlDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgSUFzeW5jQ29udGVudENyZWF0aW9uIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCB0eXBlIE1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvTW9kZWxcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvQ3VycmVuY3lcIjtcbmltcG9ydCBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL1VuaXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwiLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgeyBkZWxldGVNb2RlbENhY2hlRGF0YSB9IGZyb20gXCIuL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXRSZXNvdXJjZU1vZGVsIH0gZnJvbSBcIi4vaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmFsdWVIZWxwSGlzdG9yeVNlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSB7IFZpZXdQcmVsb2FkZXJTZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZXMvVmlld1ByZWxvYWRlclNlcnZpY2VGYWN0b3J5XCI7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIHRoYXQgY2FuIGJlIHByb3ZpZGVkIGJ5IGxpYnJhcmllcy5cbiAqL1xuZXhwb3J0IHR5cGUgQWRkaXRpb25hbENvbmZpZ3VyYXRpb24gPSB7XG5cdC8qKlxuXHQgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIFNBUCBGaW9yaSBlbGVtZW50cyBtYWNyb3MuXG5cdCAqL1xuXHRcInNhcC5mZS5tYWNyb3NcIj86IHtcblx0XHQvKipcblx0XHQgKiBDb25maWd1cmF0aW9uIGZvciB0aGUgU3RhdHVzIGJ1aWxkaW5nIGJsb2NrLlxuXHRcdCAqL1xuXHRcdFN0YXR1cz86IHtcblx0XHRcdC8qKlxuXHRcdFx0ICogV2hldGhlciB0aGUgZGVmYXVsdCB2YWx1ZSBpcyBpbnZlcnRlZC5cblx0XHRcdCAqL1xuXHRcdFx0aW52ZXJ0ZWREZWZhdWx0VmFsdWU/OiBib29sZWFuO1xuXHRcdFx0LyoqXG5cdFx0XHQgKiBDb2xvciBtYXBwaW5nIGZvciBkaWZmZXJlbnQgc3RhdHVzIHZhbHVlcy5cblx0XHRcdCAqL1xuXHRcdFx0Y29sb3JQYWxldHRlPzogXCJTdGFuZGFyZFwiIHwgXCJQYXN0ZWxcIjtcblx0XHR9O1xuXHR9O1xufTtcblxuY29uc3QgU3RhcnR1cE1vZGUgPSBsaWJyYXJ5LlN0YXJ0dXBNb2RlO1xuY29uc3QgTkFWQ09ORiA9IHtcblx0RkNMOiB7XG5cdFx0VklFV05BTUU6IFwic2FwLmZlLmNvcmUucm9vdFZpZXcuRmNsXCIsXG5cdFx0VklFV05BTUVfQ09NUEFUSUJJTElUWTogXCJzYXAuZmUudGVtcGxhdGVzLlJvb3RDb250YWluZXIudmlldy5GY2xcIixcblx0XHRST1VURVJDTEFTUzogXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiXG5cdH0sXG5cdE5BVkNPTlRBSU5FUjoge1xuXHRcdFZJRVdOQU1FOiBcInNhcC5mZS5jb3JlLnJvb3RWaWV3Lk5hdkNvbnRhaW5lclwiLFxuXHRcdFZJRVdOQU1FX0NPTVBBVElCSUxJVFk6IFwic2FwLmZlLnRlbXBsYXRlcy5Sb290Q29udGFpbmVyLnZpZXcuTmF2Q29udGFpbmVyXCIsXG5cdFx0Uk9VVEVSQ0xBU1M6IFwic2FwLm0ucm91dGluZy5Sb3V0ZXJcIlxuXHR9XG59O1xuXG5leHBvcnQgdHlwZSBDb21wb25lbnREYXRhID0ge1xuXHRzdGFydHVwUGFyYW1ldGVycz86IFN0YXJ0dXBQYXJhbWV0ZXJzO1xuXHQvL2ZlRW52aXJvbm1lbnQgaXMgb2JqZWN0IHdoaWNoIGlzIHJlY2VpdmVkIGFzIGEgcGFydCBvZiB0aGUgY29tcG9uZW50IGRhdGEgZm9yIE15IEluYm94IGFwcGxpY2F0aW9ucy5cblx0ZmVFbnZpcm9ubWVudD86IHtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0SW50ZW50KCkgd2hpY2ggcmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgc2VtYW50aWNPYmplY3QgYW5kIGFjdGlvbiBhcyBzZXBhcmF0ZSBwcm9wZXJ0eS12YWx1ZSBlbnRyaWVzIHRoYXQgYXJlIHRoZW4gdXNlZCB0byB1cGRhdGUgdGhlIHJlbGF0ZWQgYXBwcyBidXR0b24uXG5cdFx0Z2V0SW50ZW50OiBGdW5jdGlvbjtcblx0XHQvL1dpdGhpbiB0aGlzIG9iamVjdCB0aGV5IHBhc3MgYSBmdW5jdGlvbiBjYWxsZWQgZ2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eSgpIHRoYXQgcmV0dXJucyBib29sZWFuIHZhbHVlcyh0cnVlIG9yIGZhbHNlKSB3aGljaCBkZXRlcm1pbmVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBzaGFyZSBidXR0b24uXG5cdFx0Z2V0U2hhcmVDb250cm9sVmlzaWJpbGl0eTogRnVuY3Rpb247XG5cdH07XG59O1xuLy8gS2VlcCBhIHJlZmVyZW5jZSBzbyBhcyB0byBrZWVwIHRoZSBpbXBvcnQgZGVzcGl0ZSBpdCBub3QgYmVpbmcgZGlyZWN0bHkgdXNlZFxuY29uc3QgX21Sb3V0ZXIgPSBSb3V0ZXI7XG5cbmV4cG9ydCB0eXBlIFN0YXJ0dXBQYXJhbWV0ZXJzID0ge1xuXHRwcmVmZXJyZWRNb2RlPzogc3RyaW5nW107XG5cdHByZWZlcnJlZEFjdGlvbj86IHN0cmluZ1tdO1xufSAmIFJlY29yZDxzdHJpbmcsIHVua25vd25bXT47XG5cbi8qKlxuICogTWFpbiBjbGFzcyBmb3IgY29tcG9uZW50cyB1c2VkIGZvciBhbiBhcHBsaWNhdGlvbiBpbiBTQVAgRmlvcmkgZWxlbWVudHMuXG4gKlxuICogQXBwbGljYXRpb24gZGV2ZWxvcGVycyB1c2luZyB0aGUgdGVtcGxhdGVzIGFuZCBidWlsZGluZyBibG9ja3MgcHJvdmlkZWQgYnkgU0FQIEZpb3JpIGVsZW1lbnRzIHNob3VsZCBjcmVhdGUgdGhlaXIgYXBwcyBieSBleHRlbmRpbmcgdGhpcyBjb21wb25lbnQuXG4gKiBUaGlzIGVuc3VyZXMgdGhhdCBhbGwgdGhlIG5lY2Vzc2FyeSBzZXJ2aWNlcyB0aGF0IHlvdSBuZWVkIGZvciB0aGUgYnVpbGRpbmcgYmxvY2tzIGFuZCB0ZW1wbGF0ZXMgdG8gd29yayBhcmUgc3RhcnRlZC5cbiAqXG4gKiBXaGVuIHlvdSB1c2Ugc2FwLmZlLmNvcmUuQXBwQ29tcG9uZW50IGFzIHRoZSBiYXNlIGNvbXBvbmVudCwgeW91IGFsc28gbmVlZCB0byB1c2UgYSByb290Vmlldy4gU0FQIEZpb3JpIGVsZW1lbnRzIHByb3ZpZGVzIHR3byBvcHRpb25zOiA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5OYXZDb250YWluZXIgd2hlbiB1c2luZyBzYXAubS5yb3V0aW5nLlJvdXRlciA8YnIvPlxuICogLSBzYXAuZmUuY29yZS5yb290Vmlldy5GY2wgd2hlbiB1c2luZyBzYXAuZi5yb3V0aW5nLlJvdXRlciAoRkNMIHVzZSBjYXNlKSA8YnIvPlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHB1YmxpY1xuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5BcHBDb21wb25lbnRcIiwge1xuXHRjb25maWc6IHtcblx0XHRmdWxsV2lkdGg6IHRydWVcblx0fSxcblx0bWFuaWZlc3Q6IHtcblx0XHRfdmVyc2lvbjogXCIyLjAuMFwiLFxuXHRcdFwic2FwLnVpNVwiOiB7XG5cdFx0XHRzZXJ2aWNlczoge1xuXHRcdFx0XHR2aWV3UHJlbG9hZGVyU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlZpZXdQcmVsb2FkZXJTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0cmVzb3VyY2VNb2RlbDoge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJlc291cmNlTW9kZWxTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCIsXG5cdFx0XHRcdFx0c2V0dGluZ3M6IHtcblx0XHRcdFx0XHRcdGJ1bmRsZXM6IFtcInNhcC5mZS5jb3JlLm1lc3NhZ2VidW5kbGVcIl0sXG5cdFx0XHRcdFx0XHRtb2RlbE5hbWU6IFwic2FwLmZlLmkxOG5cIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0cm91dGluZ1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNoZWxsU2VydmljZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaGVsbFNlcnZpY2VzXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0U2hlbGxVSVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAudXNoZWxsLnVpNXNlcnZpY2UuU2hlbGxVSVNlcnZpY2VcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRuYXZpZ2F0aW9uU2VydmljZToge1xuXHRcdFx0XHRcdGZhY3RvcnlOYW1lOiBcInNhcC5mZS5jb3JlLnNlcnZpY2VzLk5hdmlnYXRpb25TZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZW52aXJvbm1lbnRDYXBhYmlsaXRpZXM6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5FbnZpcm9ubWVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRzaWRlRWZmZWN0c1NlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5TaWRlRWZmZWN0c1NlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRhc3luY0NvbXBvbmVudFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Bc3luY0NvbXBvbmVudFNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2VcIixcblx0XHRcdFx0XHRzdGFydHVwOiBcIndhaXRGb3JcIlxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb2xsYWJvcmF0aXZlVG9vbHNTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRlbGVtZXRyeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5UZWxlbWV0cnlTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0dmFsdWVIZWxwSGlzdG9yeVNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5WYWx1ZUhlbHBIaXN0b3J5U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Db2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0Q29udGV4dFNoYXJpbmdTZXJ2aWNlOiB7XG5cdFx0XHRcdFx0ZmFjdG9yeU5hbWU6IFwic2FwLmZlLmNvcmUuc2VydmljZXMuQ29udGV4dFNoYXJpbmdTZXJ2aWNlXCIsXG5cdFx0XHRcdFx0c3RhcnR1cDogXCJ3YWl0Rm9yXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0aW5saW5lRWRpdFNlcnZpY2U6IHtcblx0XHRcdFx0XHRmYWN0b3J5TmFtZTogXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5JbmxpbmVFZGl0U2VydmljZVwiLFxuXHRcdFx0XHRcdHN0YXJ0dXA6IFwid2FpdEZvclwiXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRyb290Vmlldzoge1xuXHRcdFx0XHR2aWV3TmFtZTogTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUsXG5cdFx0XHRcdGlkOiBcImFwcFJvb3RWaWV3XCJcblx0XHRcdH0sXG5cdFx0XHRyb3V0aW5nOiB7XG5cdFx0XHRcdGNvbmZpZzoge1xuXHRcdFx0XHRcdGNvbnRyb2xJZDogXCJhcHBDb250ZW50XCIsXG5cdFx0XHRcdFx0cm91dGVyQ2xhc3M6IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTLFxuXHRcdFx0XHRcdHZpZXdUeXBlOiBcIlhNTFwiLFxuXHRcdFx0XHRcdGNvbnRyb2xBZ2dyZWdhdGlvbjogXCJwYWdlc1wiLFxuXHRcdFx0XHRcdGNvbnRhaW5lck9wdGlvbnM6IHtcblx0XHRcdFx0XHRcdHByb3BhZ2F0ZU1vZGVsOiB0cnVlXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRkZXNpZ250aW1lOiBcInNhcC9mZS9jb3JlL2Rlc2lnbnRpbWUvQXBwQ29tcG9uZW50LmRlc2lnbnRpbWVcIixcblxuXHRsaWJyYXJ5OiBcInNhcC5mZS5jb3JlXCJcbn0pXG5jbGFzcyBBcHBDb21wb25lbnQgZXh0ZW5kcyBVSUNvbXBvbmVudCBpbXBsZW1lbnRzIElBc3luY0NvbnRlbnRDcmVhdGlvbiB7XG5cdEBpbXBsZW1lbnRJbnRlcmZhY2UoXCJzYXAudWkuY29yZS5JQXN5bmNDb250ZW50Q3JlYXRpb25cIilcblx0X19pbXBsZW1lbnRzX19zYXBfdWlfY29yZV9JQXN5bmNDb250ZW50Q3JlYXRpb24gPSB0cnVlO1xuXG5cdHN0YXRpYyBpbnN0YW5jZU1hcDogUmVjb3JkPHN0cmluZywgQXBwQ29tcG9uZW50PiA9IHt9O1xuXG5cdC8qKlxuXHQgKiBUaGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGZvciB0aGUgYXBwbGljYXRpb24uXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGFkZGl0aW9uYWxDb25maWd1cmF0aW9uOiBBZGRpdGlvbmFsQ29uZmlndXJhdGlvbiA9IHt9O1xuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbi5cblx0ICogQHJldHVybnMgVGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxuXHQgKi9cblx0Z2V0QWRkaXRpb25hbENvbmZpZ3VyYXRpb24oKTogQWRkaXRpb25hbENvbmZpZ3VyYXRpb24ge1xuXHRcdHJldHVybiB0aGlzLmFkZGl0aW9uYWxDb25maWd1cmF0aW9uO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyZWQgaGFuZGxlcnMgZm9yIG1vZGlmeWluZyBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24uXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBjb25maWd1cmF0aW9uSGFuZGxlcnM6ICgoYWRkaXRpb25hbENvbmZpZ3VyYXRpb246IEFkZGl0aW9uYWxDb25maWd1cmF0aW9uKSA9PiBQcm9taXNlPHZvaWQ+KVtdID0gW107XG5cblx0cHJpdmF0ZSBfb1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0cHJpdmF0ZSBfb0FwcFN0YXRlSGFuZGxlciE6IEFwcFN0YXRlSGFuZGxlcjtcblxuXHRwcml2YXRlIGJJbml0aWFsaXplUm91dGluZz86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBfb0RpYWdub3N0aWNzITogRGlhZ25vc3RpY3M7XG5cblx0cHJpdmF0ZSBlbnRpdHlDb250YWluZXIhOiBQcm9taXNlPHZvaWQ+O1xuXG5cdHByaXZhdGUgc3RhcnR1cE1vZGU6IHN0cmluZyA9IFN0YXJ0dXBNb2RlLk5vcm1hbDtcblxuXHRwdWJsaWMgZWFnZXJWaWV3Q3JlYXRpb24/OiBib29sZWFuO1xuXG5cdHB1YmxpYyBoaWRlVmlld0R1cmluZ0NyZWF0aW9uPzogYm9vbGVhbjtcblxuXHRwdWJsaWMgZGVsYXlGY2w/OiBib29sZWFuO1xuXG5cdHB1YmxpYyBkZWxheVRpbWUgPSAxMDA7XG5cblx0cHVibGljIGRlbGF5TWV0YWRhdGFDaGVjayA9IGZhbHNlO1xuXG5cdHByaXZhdGUgX3N0YXJ0ZWRTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdID0gW107XG5cblx0cHVibGljIGluaXRpYWxpemVkITogUHJvbWlzZTx2b2lkPjtcblxuXHRwcml2YXRlIF9pbml0aWFsaXplZEtlZXBlciE6IFByb21pc2VLZWVwZXI8dm9pZD47XG5cblx0cHJpdmF0ZSBpc0FkYXB0YXRpb25FbmFibGVkID0gZmFsc2U7XG5cblx0cHVibGljIGlzRXhpdGluZyA9IGZhbHNlO1xuXG5cdHB1YmxpYyBwYWdlQ29uZmlndXJhdGlvbkNoYW5nZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZ1tdPiA9IHt9O1xuXG5cdHByaXZhdGUgZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIHN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2s/OiBGdW5jdGlvbjtcblxuXHRwcml2YXRlIGRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaz86IEZ1bmN0aW9uO1xuXG5cdHByaXZhdGUgc3VzcGVuZGVkID0gZmFsc2U7XG5cblx0cHJpdmF0ZSBkaXNjYXJkUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG5cdHByaXZhdGUgX3JvdXRlTWF0Y2hIYW5kbGVyPzogRnVuY3Rpb247XG5cblx0cHJpdmF0ZSBvQ29tcG9uZW50RGF0YT86IENvbXBvbmVudERhdGE7XG5cblx0LyoqXG5cdCAqIFN0YXR1cyBvZiB0aGUgcHJlZmVycmVkIGFjdGlvbiBleGVjdXRpb24gdG8gcHJldmVudCBkdXBsaWNhdGUgdHJpZ2dlcmluZy5cblx0ICogLSBOb3RTZXQ6IEluaXRpYWwgc3RhdGUsIG5vIHByZWZlcnJlZCBhY3Rpb24gaGFzIGJlZW4gZXZhbHVhdGVkXG5cdCAqIC0gQ2FuUGVyZm9ybTogUHJlZmVycmVkIGFjdGlvbiBjYW4gYmUgcGVyZm9ybWVkIChjb25kaXRpb25zIGFyZSBtZXQpXG5cdCAqIC0gQWxyZWFkeVBlcmZvcm1lZDogUHJlZmVycmVkIGFjdGlvbiBoYXMgYmVlbiBleGVjdXRlZCBhbmQgc2hvdWxkIG5vdCBiZSB0cmlnZ2VyZWQgYWdhaW5cblx0ICovXG5cdHB1YmxpYyBwcmVmZXJyZWRBY3Rpb25TdGF0dXM6ICh0eXBlb2YgbGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlKVtrZXlvZiB0eXBlb2YgbGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlXSA9XG5cdFx0bGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlLk5vdFNldDtcblxuXHQvKipcblx0ICogR2V0cyB0aGUgY3VycmVudCBzdGF0dXMgb2YgdGhlIHByZWZlcnJlZCBhY3Rpb24uXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHByZWZlcnJlZCBhY3Rpb24gc3RhdHVzXG5cdCAqL1xuXHRnZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoKTogKHR5cGVvZiBsaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGUpW2tleW9mIHR5cGVvZiBsaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGVdIHtcblx0XHRyZXR1cm4gdGhpcy5wcmVmZXJyZWRBY3Rpb25TdGF0dXM7XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgc3RhdHVzIG9mIHRoZSBwcmVmZXJyZWQgYWN0aW9uLlxuXHQgKiBAcGFyYW0gc3RhdHVzIFRoZSBuZXcgc3RhdHVzIHRvIHNldFxuXHQgKi9cblx0c2V0UHJlZmVycmVkQWN0aW9uU3RhdHVzKHN0YXR1czogKHR5cGVvZiBsaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGUpW2tleW9mIHR5cGVvZiBsaWJyYXJ5LlByZWZlcnJlZEFjdGlvblN0YXR1c1R5cGVdKTogdm9pZCB7XG5cdFx0dGhpcy5wcmVmZXJyZWRBY3Rpb25TdGF0dXMgPSBzdGF0dXM7XG5cdH1cblxuXHQvKipcblx0ICogU2luZ2xldG9uIHRvIGhvbGQgcHJvY2Vzc2VzIGZyb20gbGlicmFyaWVzIHRoYXQgbmVlZCB0byBiZSBydW4gZm9yIGV2ZXJ5IGluc3RhbmNlIHByaW9yIHRvIHN0YXJ0dXAuXG5cdCAqL1xuXHRwcml2YXRlIHN0YXRpYyBpbnN0YW5jZURlcGVuZGVudFByb2Nlc3NlczogKChhcHBDb21wb25lbnQ6IEFwcENvbXBvbmVudCkgPT4gUHJvbWlzZTx2b2lkPilbXSA9IFtdO1xuXG5cdC8qKlxuXHQgKiBTaW5nbGV0b24gaG9sZGluZyBjdXN0b20gaW5pdGlhbGl6YXRpb24gY2hlY2tzIHRoYXQgY2FuIGJlIHJlZ2lzdGVyZWQgYnkgbGlicmFyaWVzLlxuXHQgKi9cblx0cHJpdmF0ZSBzdGF0aWMgX2N1c3RvbU1hbmlmZXN0Q2hlY2tzOiAoKG1hbmlmZXN0Q29udGVudDogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSkgPT4gdm9pZClbXSA9IFtdO1xuXG5cdF9pc0ZjbEVuYWJsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgb01hbmlmZXN0VUk1ID0gdGhpcy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKTtcblx0XHRyZXR1cm4gb01hbmlmZXN0VUk1Py5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBOQVZDT05GLkZDTC5ST1VURVJDTEFTUztcblx0fVxuXG5cdHNldEFkYXB0YXRpb25Nb2RlKGlzQWRhcHRhdGlvbkVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLmlzQWRhcHRhdGlvbkVuYWJsZWQgPSBpc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0aXNBZGFwdGF0aW9uTW9kZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5pc0FkYXB0YXRpb25FbmFibGVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlZ2lzdGVyIGEgaGFuZGxlciBmb3IgbW9kaWZ5aW5nIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvbi5cblx0ICogVGhlIGhhbmRsZXIgd2lsbCBiZSBjYWxsZWQgYmVmb3JlIGZlYXR1cmUgdG9nZ2xlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cdCAqIEBwYXJhbSBoYW5kbGVyIFRoZSBoYW5kbGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBtb2RpZnkgdGhlIGFkZGl0aW9uYWwgY29uZmlndXJhdGlvblxuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVyQ29uZmlndXJhdGlvbkhhbmRsZXJzKGhhbmRsZXI6IChhZGRpdGlvbmFsQ29uZmlndXJhdGlvbjogQWRkaXRpb25hbENvbmZpZ3VyYXRpb24pID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpZ3VyYXRpb25IYW5kbGVycy5wdXNoKGhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFByb3ZpZGVzIGEgaG9vayB0byBpbml0aWFsaXplIGZlYXR1cmUgdG9nZ2xlcy5cblx0ICpcblx0ICogVGhpcyBob29rIGlzIGJlaW5nIGNhbGxlZCBieSB0aGUgU0FQIEZpb3JpIGVsZW1lbnRzIEFwcENvbXBvbmVudCBhdCB0aGUgdGltZSBmZWF0dXJlIHRvZ2dsZXMgY2FuIGJlIGluaXRpYWxpemVkLlxuXHQgKiBUbyBjaGFuZ2UgcGFnZSBjb25maWd1cmF0aW9uLCB1c2UgdGhlIHtAbGluayBzYXAuZmUuY29yZS5BcHBDb21wb25lbnQjY2hhbmdlUGFnZUNvbmZpZ3VyYXRpb259IG1ldGhvZC5cblx0ICogQHB1YmxpY1xuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2l0aG91dCBhbnkgdmFsdWUgdG8gYWxsb3cgYXN5bmNocm9ub3VzIHByb2Nlc3Nlc1xuXHQgKi9cblx0YXN5bmMgaW5pdGlhbGl6ZUZlYXR1cmVUb2dnbGVzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIHRoaXMgbWV0aG9kIGNhbiBiZSBvdmVycmlkZGVuIGJ5IGFwcGxpY2F0aW9uc1xuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGFuZ2VzIHRoZSBwYWdlIGNvbmZpZ3VyYXRpb24gb2YgU0FQIEZpb3JpIGVsZW1lbnRzLlxuXHQgKlxuXHQgKiBUaGlzIG1ldGhvZCBlbmFibGVzIHlvdSB0byBjaGFuZ2UgdGhlIHBhZ2UgY29uZmlndXJhdGlvbiBvZiBTQVAgRmlvcmkgZWxlbWVudHMuXG5cdCAqIEBwYXJhbSBwYWdlSWQgVGhlIElEIG9mIHRoZSBwYWdlIGZvciB3aGljaCB0aGUgY29uZmlndXJhdGlvbiBpcyB0byBiZSBjaGFuZ2VkLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCBpbiB0aGUgcGFnZSBzZXR0aW5ncyBmb3Igd2hpY2ggdGhlIGNvbmZpZ3VyYXRpb24gaXMgdG8gYmUgY2hhbmdlZC5cblx0ICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgYmUgYSBwbGFpbiB2YWx1ZSBsaWtlIGEgc3RyaW5nLCBvciBhIEJvb2xlYW4sIG9yIGEgc3RydWN0dXJlZCBvYmplY3QuXG5cdCAqIEBwdWJsaWNcblx0ICovXG5cdGNoYW5nZVBhZ2VDb25maWd1cmF0aW9uKHBhZ2VJZDogc3RyaW5nLCBwYXRoOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdFx0Y29uc3QgbWFuaWZlc3QgPSBjaGFuZ2VDb25maWd1cmF0aW9uKHRoaXMuZ2V0TWFuaWZlc3QoKSwgcGFnZUlkLCBwYXRoLCB2YWx1ZSwgdHJ1ZSwgdGhpcykgYXMgTWFuaWZlc3RDb250ZW50O1xuXHRcdGlmIChcblx0XHRcdHBhdGggPT09IFwiYXBwL2Rpc2FibGVJbnB1dEFzc2lzdGFuY2VcIiAmJlxuXHRcdFx0KG1hbmlmZXN0Py5bXCJzYXAuZmVcIl0gYXMgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4+KT8uW1wiYXBwXCJdPy5bXCJkaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCJdID09PSB2YWx1ZVxuXHRcdCkge1xuXHRcdFx0dGhpcy5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLnNldENhcGFiaWxpdHkoXCJEaXNhYmxlSW5wdXRBc3Npc3RhbmNlXCIsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2xlYW5zIGFsbCByZWdpc3RlcmVkIHBhZ2UgY29uZmlndXJhdGlvbiBjaGFuZ2VzLlxuXHQgKi9cblx0Y2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTogdm9pZCB7XG5cdFx0dGhpcy5wYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMgPSB7fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBBIFJlZmVyZW5jZSB0byB0aGUgUm91dGVyUHJveHlcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRnZXRSb3V0ZXJQcm94eSgpOiBSb3V0ZXJQcm94eSB7XG5cdFx0cmV0dXJuIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlci5cblx0ICogQHJldHVybnMgQSByZWZlcmVuY2UgdG8gdGhlIEFwcFN0YXRlSGFuZGxlclxuXHQgKiBAZmluYWxcblx0ICovXG5cdGdldEFwcFN0YXRlSGFuZGxlcigpOiBBcHBTdGF0ZUhhbmRsZXIge1xuXHRcdHJldHVybiB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCBhIHJlZmVyZW5jZSB0byB0aGUgbmF2L0ZDTCBDb250cm9sbGVyLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gdGhlIEZDTCBDb250cm9sbGVyXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdFZpZXdDb250cm9sbGVyKCk6IFJvb3RWaWV3QmFzZUNvbnRyb2xsZXIge1xuXHRcdHJldHVybiB0aGlzLmdldFJvb3RDb250cm9sKCkuZ2V0Q29udHJvbGxlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sLlxuXHQgKiBAcmV0dXJucyAgQSByZWZlcmVuY2UgdG8gTmF2Q29udGFpbmVyIGNvbnRyb2wgb3IgdGhlIEZDTCBjb250cm9sXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0Z2V0Um9vdENvbnRhaW5lcigpOiBOYXZDb250YWluZXIgfCBGbGV4aWJsZUNvbHVtbkxheW91dCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Um9vdENvbnRyb2woKS5nZXRDb250ZW50KClbMF0gYXMgTmF2Q29udGFpbmVyIHwgRmxleGlibGVDb2x1bW5MYXlvdXQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBzdGFydHVwIG1vZGUgb2YgdGhlIGFwcC5cblx0ICogQHJldHVybnMgVGhlIHN0YXJ0dXAgbW9kZVxuXHQgKi9cblx0Z2V0U3RhcnR1cE1vZGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zdGFydHVwTW9kZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXQgdGhlIHN0YXJ0dXAgbW9kZSBmb3IgdGhlIGFwcCB0byAnQ3JlYXRlJy5cblx0ICpcblx0ICovXG5cdHNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5DcmVhdGU7XG5cdH1cblxuXHQvKipcblx0ICogU2V0IHRoZSBzdGFydHVwIG1vZGUgZm9yIHRoZSBhcHAgdG8gJ0F1dG9DcmVhdGUnLlxuXHQgKlxuXHQgKi9cblx0c2V0U3RhcnR1cE1vZGVBdXRvQ3JlYXRlKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5BdXRvQ3JlYXRlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFNldCB0aGUgc3RhcnR1cCBtb2RlIGZvciB0aGUgYXBwIHRvICdEZWVwbGluaycuXG5cdCAqXG5cdCAqL1xuXHRzZXRTdGFydHVwTW9kZURlZXBsaW5rKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhcnR1cE1vZGUgPSBTdGFydHVwTW9kZS5EZWVwbGluaztcblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5vQ29tcG9uZW50RGF0YSA/Pz0ge307XG5cdFx0Y29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh3aW5kb3cubG9jYXRpb24uc2VhcmNoKTtcblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1zdXBwb3J0XCIpKSB7XG5cdFx0XHRzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAuZmUudG9vbHNcIiB9KTtcblx0XHRcdH0sIDIwMDApO1xuXHRcdH1cblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1lYWdlci12aWV3XCIpKSB7XG5cdFx0XHR0aGlzLmVhZ2VyVmlld0NyZWF0aW9uID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHBhcmFtcy5oYXMoXCJzYXAtdWkteHgtZmUtaGlkZS12aWV3XCIpKSB7XG5cdFx0XHR0aGlzLmhpZGVWaWV3RHVyaW5nQ3JlYXRpb24gPSB0cnVlO1xuXHRcdH1cblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1maWVsZC1vcHRcIikpIHtcblx0XHRcdC8vIFNUQUJMRS1JU0hcblx0XHRcdHRoaXMuZGVsYXlNZXRhZGF0YUNoZWNrID0gdHJ1ZTtcblx0XHR9XG5cdFx0aWYgKHBhcmFtcy5oYXMoXCJzYXAtdWkteHgtZmUtZGVsYXlcIikpIHtcblx0XHRcdC8vIFNUQUJMRVxuXHRcdFx0dGhpcy5kZWxheVRpbWUgPSBwYXJzZUludChwYXJhbXMuZ2V0KFwic2FwLXVpLXh4LWZlLWRlbGF5XCIpISwgMTApO1xuXHRcdH1cblx0XHRpZiAocGFyYW1zLmhhcyhcInNhcC11aS14eC1mZS1mY2wtb3B0XCIpKSB7XG5cdFx0XHQvLyBTVEFCTEVcblx0XHRcdHRoaXMuZGVsYXlGY2wgPSB0cnVlO1xuXHRcdH1cblx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlciA9IG5ldyBQcm9taXNlS2VlcGVyPHZvaWQ+KCk7XG5cdFx0dGhpcy5pbml0aWFsaXplZCA9IHRoaXMuX2luaXRpYWxpemVkS2VlcGVyLnByb21pc2U7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0ZWRpdE1vZGU6IGxpYnJhcnkuRWRpdE1vZGUuRGlzcGxheSxcblx0XHRcdGlzRWRpdGFibGU6IGZhbHNlLFxuXHRcdFx0ZHJhZnRTdGF0dXM6IGxpYnJhcnkuRHJhZnRTdGF0dXMuQ2xlYXIsXG5cdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdGJ1c3lMb2NhbDoge30sXG5cdFx0XHRwYWdlczoge31cblx0XHR9KTtcblx0XHRjb25zdCBvSW50ZXJuYWxNb2RlbCA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0cGFnZXM6IHt9XG5cdFx0fSk7XG5cdFx0Ly8gc2V0IHRoZSBiaW5kaW5nIE9uZVdheSBmb3IgdWlNb2RlbCB0byBwcmV2ZW50IGNoYW5nZXMgaWYgY29udHJvbGxlciBleHRlbnNpb25zIG1vZGlmeSBhIGJvdW5kIHByb3BlcnR5IG9mIGEgY29udHJvbFxuXHRcdHVpTW9kZWwuc2V0RGVmYXVsdEJpbmRpbmdNb2RlKFwiT25lV2F5XCIpO1xuXHRcdC8vIGZvciBpbnRlcm5hbCBtb2RlbCBiaW5kaW5nIG5lZWRzIHRvIGJlIHR3byB3YXlcblx0XHRNb2RlbEhlbHBlci5lbmhhbmNlVWlKU09OTW9kZWwodWlNb2RlbCwgbGlicmFyeSk7XG5cdFx0TW9kZWxIZWxwZXIuZW5oYW5jZUludGVybmFsSlNPTk1vZGVsKG9JbnRlcm5hbE1vZGVsKTtcblxuXHRcdHRoaXMuc2V0TW9kZWwodWlNb2RlbCwgXCJ1aVwiKTtcblx0XHR0aGlzLnNldE1vZGVsKG9JbnRlcm5hbE1vZGVsLCBcImludGVybmFsXCIpO1xuXG5cdFx0dGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgPSB0aGlzLmJJbml0aWFsaXplUm91dGluZyAhPT0gdW5kZWZpbmVkID8gdGhpcy5iSW5pdGlhbGl6ZVJvdXRpbmcgOiB0cnVlO1xuXHRcdHRoaXMuX29Sb3V0ZXJQcm94eSA9IG5ldyBSb3V0ZXJQcm94eSgpO1xuXHRcdHRoaXMuX29BcHBTdGF0ZUhhbmRsZXIgPSBuZXcgQXBwU3RhdGVIYW5kbGVyKHRoaXMpO1xuXHRcdHRoaXMuX29EaWFnbm9zdGljcyA9IG5ldyBEaWFnbm9zdGljcygpO1xuXG5cdFx0Y29uc3Qgb01vZGVsID0gdGhpcy5nZXRNb2RlbCgpO1xuXHRcdGlmIChvTW9kZWw/LmlzQT8uPE9EYXRhTW9kZWw+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTW9kZWxcIikpIHtcblx0XHRcdE1vZGVsSGVscGVyLmVuaGFuY2VPRGF0YU1vZGVsKG9Nb2RlbCwgdGhpcyk7XG5cdFx0XHRvTW9kZWwuc2V0UmV0cnlBZnRlckhhbmRsZXIodGhpcy5odHRwNTAzUmV0cnlIYW5kbGVyLmJpbmQodGhpcykpO1xuXHRcdFx0dGhpcy5lbnRpdHlDb250YWluZXIgPSBvTW9kZWwuZ2V0TWV0YU1vZGVsKCkucmVxdWVzdE9iamVjdChcIi8kRW50aXR5Q29udGFpbmVyL1wiKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gbm90IGFuIE9EYXRhIHY0IHNlcnZpY2Vcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXG5cdFx0aWYgKHRoaXMuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5kaXNhYmxlQ29sbGFib3JhdGlvbkRyYWZ0KSB7XG5cdFx0XHQvLyBkaXNhYmxlIHRoZSBjb2xsYWJvcmF0aW9uIGRyYWZ0IGdsb2JhbGx5IGluIGNhc2UgcHJpdmF0ZSBtYW5pZmVzdCBmbGFnIGlzIHNldFxuXHRcdFx0Ly8gdGhpcyBhbGxvd3MgY3VzdG9tZXJzIHRvIGRpc2FibGUgdGhlIGNvbGxhYm9yYXRpb24gZHJhZnQgaW4gY2FzZSB3ZSBydW4gaW50byBpc3N1ZXMgd2l0aCB0aGUgZmlyc3QgZGVsaXZlcnlcblx0XHRcdC8vIHRoaXMgd2lsbCBiZSByZW1vdmVkIHdpdGggdGhlIG5leHQgUy80IHJlbGVhc2Vcblx0XHRcdE1vZGVsSGVscGVyLmRpc2FibGVDb2xsYWJvcmF0aW9uRHJhZnQgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGNvbnN0IG9NYW5pZmVzdFVJNSA9IHRoaXMuZ2V0TWFuaWZlc3QoKVtcInNhcC51aTVcIl07XG5cdFx0dGhpcy5jaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNSk7XG5cdFx0QXBwQ29tcG9uZW50Ll9jdXN0b21NYW5pZmVzdENoZWNrcy5mb3JFYWNoKChmblByb2Nlc3MpID0+IHtcblx0XHRcdHJldHVybiBmblByb2Nlc3MuY2FsbCh0aGlzLCBvTWFuaWZlc3RVSTUpO1xuXHRcdH0pO1xuXG5cdFx0dGhpcy5wcmVsb2FkTGlicmFyaWVzKG9NYW5pZmVzdFVJNSk7XG5cblx0XHQvLyB0aGUgaW5pdCBmdW5jdGlvbiBjb25maWd1cmVzIHRoZSByb3V0aW5nIGFjY29yZGluZyB0byB0aGUgc2V0dGluZ3MgYWJvdmVcblx0XHQvLyBpdCB3aWxsIGNhbGwgdGhlIGNyZWF0ZUNvbnRlbnQgZnVuY3Rpb24gdG8gaW5zdGFudGlhdGUgdGhlIFJvb3RWaWV3IGFuZCBhZGQgaXQgdG8gdGhlIFVJQ29tcG9uZW50IGFnZ3JlZ2F0aW9uc1xuXG5cdFx0c3VwZXIuaW5pdCgpO1xuXHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZU1hcFt0aGlzLmdldElkKCldID0gdGhpcztcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaHR0cDUwM1JldHJ5SGFuZGxlcihlcnJvcjogRXJyb3IgJiB7IHJldHJ5QWZ0ZXI/OiBEYXRlIH0pOiBQcm9taXNlPHVuZGVmaW5lZD4ge1xuXHRcdHJldHVybiBIVFRQNTAzSGFuZGxlci5oYW5kbGU1MDNEZWxheShlcnJvciwgdGhpcy5nZXRSb290Q29udHJvbCgpLCBnZXRSZXNvdXJjZU1vZGVsKHRoaXMpKTtcblx0fVxuXG5cdHByaXZhdGUgcHJlbG9hZExpYnJhcmllcyhvTWFuaWZlc3RVSTU6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IHRhcmdldHNLZXkgaW4gb01hbmlmZXN0VUk1LnJvdXRpbmc/LnRhcmdldHMpIHtcblx0XHRcdGlmIChvTWFuaWZlc3RVSTUucm91dGluZz8udGFyZ2V0c1t0YXJnZXRzS2V5XS5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdExpYnJhcnkubG9hZCh7IG5hbWU6IFwic2FwLnV4YXBcIiB9KTsgLy8gZmlyZSBhbmQgZm9yZ2V0XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBzZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KG9NYW5pZmVzdFVJNS5yb3V0aW5nPy50YXJnZXRzW3RhcmdldHNLZXldPy5vcHRpb25zPy5zZXR0aW5ncz8uY29udHJvbENvbmZpZ3VyYXRpb24pO1xuXHRcdFx0aWYgKHNldHRpbmdzPy5pbmNsdWRlcyhcIkdyaWRUYWJsZVwiKSB8fCBzZXR0aW5ncz8uaW5jbHVkZXMoXCJUcmVlVGFibGVcIikpIHtcblx0XHRcdFx0TGlicmFyeS5sb2FkKHsgbmFtZTogXCJzYXAudWkudGFibGVcIiB9KTsgLy8gZmlyZSBhbmQgZm9yZ2V0XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSBjaGVja1JvdXRpbmdDb25maWd1cmF0aW9uKG9NYW5pZmVzdFVJNTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXSk6IHZvaWQge1xuXHRcdGlmIChvTWFuaWZlc3RVSTU/LnJvb3RWaWV3Py52aWV3TmFtZSkge1xuXHRcdFx0Ly8gVGhlIGFwcGxpY2F0aW9uIHNwZWNpZmllZCBhbiBvd24gcm9vdCB2aWV3IGluIHRoZSBtYW5pZmVzdFxuXG5cdFx0XHQvLyBSb290IFZpZXcgd2FzIG1vdmVkIGZyb20gc2FwLmZlLnRlbXBsYXRlcyB0byBzYXAuZmUuY29yZSAtIGtlZXAgaXQgY29tcGF0aWJsZVxuXHRcdFx0aWYgKG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUVfQ09NUEFUSUJJTElUWSkge1xuXHRcdFx0XHRvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWUgPSBOQVZDT05GLkZDTC5WSUVXTkFNRTtcblx0XHRcdH0gZWxzZSBpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3LnZpZXdOYW1lID09PSBOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRV9DT01QQVRJQklMSVRZKSB7XG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlZJRVdOQU1FO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5GQ0wuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuRkNMLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLkZDTC5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5GQ0wuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRcdG9NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZSA9PT0gTkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUUgJiZcblx0XHRcdFx0b01hbmlmZXN0VUk1LnJvdXRpbmc/LmNvbmZpZz8ucm91dGVyQ2xhc3MgPT09IE5BVkNPTkYuTkFWQ09OVEFJTkVSLlJPVVRFUkNMQVNTXG5cdFx0XHQpIHtcblx0XHRcdFx0TG9nLmluZm8oYFJvb3Rjb250YWluZXI6IFwiJHtOQVZDT05GLk5BVkNPTlRBSU5FUi5WSUVXTkFNRX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH0gZWxzZSBpZiAob01hbmlmZXN0VUk1LnJvb3RWaWV3Py52aWV3TmFtZT8uaW5jbHVkZXMoXCJzYXAuZmUuY29yZS5yb290Vmlld1wiKSkge1xuXHRcdFx0XHR0aHJvdyBFcnJvcihcblx0XHRcdFx0XHRgXFxuV3JvbmcgY29uZmlndXJhdGlvbiBmb3IgdGhlIGNvdXBsZSAocm9vdFZpZXcvcm91dGVyQ2xhc3MpIGluIG1hbmlmZXN0IGZpbGUuXFxuYCArXG5cdFx0XHRcdFx0XHRgQ3VycmVudCB2YWx1ZXMgYXJlIDooJHtvTWFuaWZlc3RVSTUucm9vdFZpZXcudmlld05hbWV9LyR7XG5cdFx0XHRcdFx0XHRcdG9NYW5pZmVzdFVJNS5yb3V0aW5nPy5jb25maWc/LnJvdXRlckNsYXNzIHx8IFwiPG1pc3Npbmcgcm91dGVyIGNsYXNzPlwiXG5cdFx0XHRcdFx0XHR9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YEV4cGVjdGVkIHZhbHVlcyBhcmUgXFxuYCArXG5cdFx0XHRcdFx0XHRgXFx0IC0gKCR7TkFWQ09ORi5OQVZDT05UQUlORVIuVklFV05BTUV9LyR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9KVxcbmAgK1xuXHRcdFx0XHRcdFx0YFxcdCAtICgke05BVkNPTkYuRkNMLlZJRVdOQU1FfS8ke05BVkNPTkYuRkNMLlJPVVRFUkNMQVNTfSlgXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cuaW5mbyhgUm9vdGNvbnRhaW5lcjogXCIke29NYW5pZmVzdFVJNS5yb290Vmlldy52aWV3TmFtZX1cIiAtIFJvdXRlcmNsYXNzOiBcIiR7TkFWQ09ORi5OQVZDT05UQUlORVIuUk9VVEVSQ0xBU1N9XCJgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRhc3luYyBvblNlcnZpY2VzU3RhcnRlZChhbGxTZXJ2aWNlczogU2VydmljZTx1bmtub3duPltdKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gYWxsU2VydmljZXM7XG5cdFx0Ly8gRXhlY3V0ZSBhbGwgcmVnaXN0ZXJlZCBjb25maWd1cmF0aW9uIGhhbmRsZXJzXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoQXBwQ29tcG9uZW50LmNvbmZpZ3VyYXRpb25IYW5kbGVycy5tYXAoYXN5bmMgKGhhbmRsZXIpID0+IGhhbmRsZXIodGhpcy5hZGRpdGlvbmFsQ29uZmlndXJhdGlvbikpKTtcblx0XHRhd2FpdCB0aGlzLmluaXRpYWxpemVGZWF0dXJlVG9nZ2xlcygpO1xuXHRcdGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChcblx0XHRcdEFwcENvbXBvbmVudC5pbnN0YW5jZURlcGVuZGVudFByb2Nlc3Nlcy5tYXAoYXN5bmMgKGZuUHJvY2VzcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZm5Qcm9jZXNzLmNhbGwobnVsbCwgdGhpcyk7XG5cdFx0XHR9KVxuXHRcdCk7XG5cblx0XHQvL3JvdXRlciBtdXN0IGJlIHN0YXJ0ZWQgb25jZSB0aGUgcm9vdGNvbnRhaW5lciBpcyBpbml0aWFsaXplZFxuXHRcdC8vc3RhcnRpbmcgb2YgdGhlIHJvdXRlclxuXHRcdGNvbnN0IGZpbmFsaXplZFJvdXRpbmdJbml0aWFsaXphdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMuZW50aXR5Q29udGFpbmVyXG5cdFx0XHRcdC50aGVuKGFzeW5jICgpID0+IHtcblx0XHRcdFx0XHQvLyBQcmVsb2FkIGN1cnJlbmN5Q29kZXMgYW5kIFVvTSBpZiB0aGV5IGV4aXN0c1xuXHRcdFx0XHRcdCh0aGlzLmdldE1ldGFNb2RlbCgpIGFzIHsgcmVxdWVzdENvZGVMaXN0PzogRnVuY3Rpb24gfSkucmVxdWVzdENvZGVMaXN0Py4oXCJDdXJyZW5jeUNvZGVzXCIpO1xuXHRcdFx0XHRcdCh0aGlzLmdldE1ldGFNb2RlbCgpIGFzIHsgcmVxdWVzdENvZGVMaXN0PzogRnVuY3Rpb24gfSkucmVxdWVzdENvZGVMaXN0Py4oXCJVbml0T2ZNZWFzdXJlc1wiKTtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5hdHRhY2hSb3V0ZU1hdGNoZXJzKSB7XG5cdFx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmF0dGFjaFJvdXRlTWF0Y2hlcnMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXIoKS5pbml0aWFsaXplKCk7XG5cdFx0XHRcdFx0dGhpcy5nZXRSb3V0ZXJQcm94eSgpLmluaXQodGhpcywgdGhpcy5faXNGY2xFbmFibGVkKCkpO1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VmFsdWVIZWxwSGlzdG9yeVNlcnZpY2UoKS5yZWdpc3RlclNoZWxsSG9vaygpO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goKGVycm9yOiBFcnJvcikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9SZXNvdXJjZUJ1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0XHRcdFx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmRpc3BsYXlFcnJvclBhZ2UoXG5cdFx0XHRcdFx0XHRvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQVBQX0NPTVBPTkVOVF9TQVBGRV9BUFBTVEFSVF9URUNITklDQUxfSVNTVUVTXCIpLFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0aXRsZTogb1Jlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0NPTU1PTl9TQVBGRV9FUlJPUlwiKSxcblx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGVycm9yLm1lc3NhZ2Vcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHR9O1xuXG5cdFx0aWYgKHRoaXMuYkluaXRpYWxpemVSb3V0aW5nKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpXG5cdFx0XHRcdC5pbml0aWFsaXplUm91dGluZygpXG5cdFx0XHRcdC50aGVuKCgpID0+IHtcblx0XHRcdFx0XHRpZiAodGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSkge1xuXHRcdFx0XHRcdFx0ZmluYWxpemVkUm91dGluZ0luaXRpYWxpemF0aW9uKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRoaXMuZ2V0Um9vdENvbnRyb2woKS5hdHRhY2hBZnRlckluaXQoZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0XHRmaW5hbGl6ZWRSb3V0aW5nSW5pdGlhbGl6YXRpb24oKTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLl9pbml0aWFsaXplZEtlZXBlci5yZXNvbHZlKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKGVycjogRXJyb3IpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoYGNhbm5vdCBjYW5ub3QgaW5pdGlhbGl6ZSByb3V0aW5nOiAke2Vyci50b1N0cmluZygpfWApO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5faW5pdGlhbGl6ZWRLZWVwZXIucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5fc3RhcnRlZFNlcnZpY2VzID0gW107XG5cdFx0dGhpcy5fb0FwcFN0YXRlSGFuZGxlci5kZXN0cm95KCk7XG5cdFx0dGhpcy5fb1JvdXRlclByb3h5LmRlc3Ryb3koKTtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG5cdFx0Ly8gQHRzLWlnbm9yZVxuXHRcdGRlbGV0ZSB0aGlzLl9vQXBwU3RhdGVIYW5kbGVyO1xuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0ZGVsZXRlIHRoaXMuX29Sb3V0ZXJQcm94eTtcblx0XHRkZWxldGVNb2RlbENhY2hlRGF0YSh0aGlzLmdldE1ldGFNb2RlbCgpKTtcblx0XHR0aGlzLmdldE1vZGVsKFwidWlcIikuZGVzdHJveSgpO1xuXHRcdHRoaXMuY2xlYW5QYWdlQ29uZmlndXJhdGlvbkNoYW5nZXMoKTtcblx0fVxuXG5cdGdldE1ldGFNb2RlbCgpOiBPRGF0YU1ldGFNb2RlbCB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0fVxuXG5cdGdldERpYWdub3N0aWNzKCk6IERpYWdub3N0aWNzIHtcblx0XHRyZXR1cm4gdGhpcy5fb0RpYWdub3N0aWNzO1xuXHR9XG5cblx0ZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMuaXNFeGl0aW5nID0gdHJ1ZTtcblxuXHRcdC8vIExFQUtTLCB3aXRoIHdvcmthcm91bmQgZm9yIHNvbWUgRmxleCAvIE1EQyBpc3N1ZVxuXHRcdHRyeSB7XG5cdFx0XHRkZWxldGUgQXBwQ29tcG9uZW50Lmluc3RhbmNlTWFwW3RoaXMuZ2V0SWQoKV07XG5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHRcdC8vIEB0cy1pZ25vcmVcblx0XHRcdGRlbGV0ZSAod2luZG93IGFzIHVua25vd24pLl9yb3V0aW5nO1xuXHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdExvZy5pbmZvKGUgYXMgc3RyaW5nKTtcblx0XHR9XG5cblx0XHQvL1dPUktBUk9VTkQgZm9yIHN0aWNreSBkaXNjYXJkIHJlcXVlc3QgOiBkdWUgdG8gYXN5bmMgY2FsbGJhY2ssIHJlcXVlc3QgdHJpZ2dlcmVkIGJ5IHRoZSBleGl0QXBwbGljYXRpb24gd2lsbCBiZSBzZW5kIGFmdGVyIHRoZSBVSUNvbXBvbmVudC5wcm90b3R5cGUuZGVzdHJveVxuXHRcdC8vc28gd2UgbmVlZCB0byBjb3B5IHRoZSBSZXF1ZXN0b3IgaGVhZGVycyBhcyBpdCB3aWxsIGJlIGRlc3Ryb3lcblxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcblx0XHQvLyBAdHMtaWdub3JlXG5cdFx0Y29uc3Qgb01haW5Nb2RlbCA9IHRoaXMub01vZGVsc1t1bmRlZmluZWRdO1xuXHRcdGxldCBvSGVhZGVycztcblx0XHRpZiAob01haW5Nb2RlbD8ub1JlcXVlc3Rvcikge1xuXHRcdFx0b0hlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIEFzIHdlIG5lZWQgdG8gY2xlYW51cCB0aGUgYXBwbGljYXRpb24gLyBoYW5kbGUgdGhlIGRpcnR5IG9iamVjdCB3ZSBuZWVkIHRvIGNhbGwgb3VyIGNsZWFudXAgYmVmb3JlIHRoZSBtb2RlbHMgYXJlIGRlc3Ryb3llZFxuXHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKT8uYmVmb3JlRXhpdD8uKCk7XG5cdFx0dGhpcy51bnJlZ2lzdGVyQ2FsbGJhY2tzKCk7XG5cdFx0c3VwZXIuZGVzdHJveShiU3VwcHJlc3NJbnZhbGlkYXRlKTtcblx0XHRpZiAob0hlYWRlcnMgJiYgb01haW5Nb2RlbC5vUmVxdWVzdG9yKSB7XG5cdFx0XHRvTWFpbk1vZGVsLm9SZXF1ZXN0b3IubUhlYWRlcnMgPSBvSGVhZGVycztcblx0XHR9XG5cdH1cblxuXHRnZXRSb3V0aW5nU2VydmljZSgpOiBSb3V0aW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFJvdXRpbmdTZXJ2aWNlOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0U2hlbGxTZXJ2aWNlcygpOiBJU2hlbGxTZXJ2aWNlcyB7XG5cdFx0cmV0dXJuIHt9IGFzIElTaGVsbFNlcnZpY2VzOyAvLyBvdmVycmlkZW4gYXQgcnVudGltZVxuXHR9XG5cblx0Z2V0TmF2aWdhdGlvblNlcnZpY2UoKTogTmF2aWdhdGlvblNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBOYXZpZ2F0aW9uU2VydmljZTsgLy8gb3ZlcnJpZGVuIGF0IHJ1bnRpbWVcblx0fVxuXG5cdGdldFNpZGVFZmZlY3RzU2VydmljZSgpOiBTaWRlRWZmZWN0c1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBTaWRlRWZmZWN0c1NlcnZpY2U7XG5cdH1cblxuXHRnZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpOiBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBFbnZpcm9ubWVudENhcGFiaWxpdGllc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aW9uTWFuYWdlclNlcnZpY2UoKTogQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlIHtcblx0XHRyZXR1cm4ge30gYXMgQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Vmlld1ByZWxvYWRlclNlcnZpY2UoKTogVmlld1ByZWxvYWRlclNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBWaWV3UHJlbG9hZGVyU2VydmljZTtcblx0fVxuXG5cdGdldENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2UoKTogQ29sbGFib3JhdGl2ZVRvb2xzU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbGxhYm9yYXRpdmVUb29sc1NlcnZpY2U7XG5cdH1cblxuXHRnZXRDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlKCk6IENvbGxhYm9yYXRpdmVEcmFmdFNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBDb2xsYWJvcmF0aXZlRHJhZnRTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0Q29udGV4dFNoYXJpbmdTZXJ2aWNlKCk6IENvbnRleHRTaGFyaW5nU2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIENvbnRleHRTaGFyaW5nU2VydmljZTtcblx0fVxuXG5cdGdldFRlbGVtZXRyeVNlcnZpY2UoKTogVGVsZW1ldHJ5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFRlbGVtZXRyeVNlcnZpY2U7XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSgpOiBWYWx1ZUhlbHBIaXN0b3J5U2VydmljZSB7XG5cdFx0cmV0dXJuIHt9IGFzIFZhbHVlSGVscEhpc3RvcnlTZXJ2aWNlO1xuXHR9XG5cblx0Z2V0SW5saW5lRWRpdFNlcnZpY2UoKTogSW5saW5lRWRpdFNlcnZpY2Uge1xuXHRcdHJldHVybiB7fSBhcyBJbmxpbmVFZGl0U2VydmljZTtcblx0fVxuXG5cdGFzeW5jIGdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk6IFByb21pc2U8U3RhcnR1cFBhcmFtZXRlcnM+IHtcblx0XHRjb25zdCBzdGFydHVwUGFyYW1zID0gdGhpcy5nZXRDb21wb25lbnREYXRhKCk/LnN0YXJ0dXBQYXJhbWV0ZXJzO1xuXHRcdGlmIChcblx0XHRcdHN0YXJ0dXBQYXJhbXM/LnByZWZlcnJlZEFjdGlvbj8uWzBdLmluY2x1ZGVzKFwic3VtbWFyeVwiKSAmJlxuXHRcdFx0dGhpcy5nZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMoKSA9PT0gbGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlLk5vdFNldFxuXHRcdCkge1xuXHRcdFx0dGhpcy5zZXRQcmVmZXJyZWRBY3Rpb25TdGF0dXMobGlicmFyeS5QcmVmZXJyZWRBY3Rpb25TdGF0dXNUeXBlLkNhblBlcmZvcm0pO1xuXHRcdH1cblx0XHRyZXR1cm4gc3RhcnR1cFBhcmFtcyA/PyB7fTtcblx0fVxuXG5cdHJlc3RvcmUoKTogdm9pZCB7XG5cdFx0Ly8gY2FsbGVkIGJ5IEZMUCB3aGVuIGFwcCBzYXAta2VlcC1hbGl2ZSBpcyBlbmFibGVkIGFuZCBhcHAgaXMgcmVzdG9yZWRcblx0XHRmb3IgKGNvbnN0IHN0YXJ0ZWRTZXJ2aWNlIG9mIHRoaXMuX3N0YXJ0ZWRTZXJ2aWNlcykge1xuXHRcdFx0c3RhcnRlZFNlcnZpY2Uub25SZXN0b3JlPy4oKTtcblx0XHR9XG5cdFx0dGhpcy5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS52aWV3U3RhdGUub25SZXN0b3JlKCk7XG5cblx0XHQvLyBSZXNldCBhbGwgdmFsdWVzIGluIHZlcnNpb25BY3RpdmF0aW9uU3RhdHVzIHRvIGZhbHNlXG5cdFx0QXBwU3RhdGVIYW5kbGVyLnJlc2V0VmVyc2lvbkFjdGl2YXRpb25TdGF0dXMoKTtcblxuXHRcdHRoaXMuc3VzcGVuZGVkID0gZmFsc2U7XG5cdH1cblxuXHRzdXNwZW5kKCk6IHZvaWQge1xuXHRcdC8vIGNhbGxlZCBieSBGTFAgd2hlbiBhcHAgc2FwLWtlZXAtYWxpdmUgaXMgZW5hYmxlZCBhbmQgYXBwIGlzIHN1c3BlbmRlZFxuXHRcdGZvciAoY29uc3Qgc3RhcnRlZFNlcnZpY2Ugb2YgdGhpcy5fc3RhcnRlZFNlcnZpY2VzKSB7XG5cdFx0XHRzdGFydGVkU2VydmljZS5vblN1c3BlbmQ/LigpO1xuXHRcdH1cblx0XHR0aGlzLmdldFJvb3RWaWV3Q29udHJvbGxlcigpLnZpZXdTdGF0ZS5vblN1c3BlbmQoKTtcblxuXHRcdHRoaXMuc3VzcGVuZGVkID0gdHJ1ZTtcblx0fVxuXG5cdGlzU3VzcGVuZGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN1c3BlbmRlZDtcblx0fVxuXG5cdGFzeW5jIGlzQXBwQ29tcG9uZW50QnVzeSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gdGhpcy5kaXNjYXJkUHJvbWlzZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBuYXZpZ2F0ZUJhc2VkT25TdGFydHVwUGFyYW1ldGVyIGZ1bmN0aW9uIGlzIGEgcHVibGljIGFwaSB0aGF0IGFjdHMgYXMgYSB3cmFwcGVyIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uIEl0IHBhc3NlcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIGZ1cnRoZXIgdG8gX21hbmFnZURlZXBMaW5rU3RhcnR1cCBmdW5jdGlvblxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMgRGVmaW5lcyB0aGUgc3RhcnR1cCBwYXJhbWV0ZXJzIHdoaWNoIGlzIGZ1cnRoZXIgcGFzc2VkIHRvIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAgZnVuY3Rpb24uXG5cdCAqL1xuXG5cdGFzeW5jIG5hdmlnYXRlQmFzZWRPblN0YXJ0dXBQYXJhbWV0ZXIoc3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzIHwgbnVsbCB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHRpZiAoIUJ1c3lMb2NrZXIuaXNMb2NrZWQodGhpcy5nZXRNb2RlbChcInVpXCIpKSkge1xuXHRcdFx0XHRpZiAoIXN0YXJ0dXBQYXJhbWV0ZXJzKSB7XG5cdFx0XHRcdFx0c3RhcnR1cFBhcmFtZXRlcnMgPSBudWxsO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IHJvdXRpbmdTZXJ2aWNlID0gdGhpcy5nZXRSb3V0aW5nU2VydmljZSgpO1xuXHRcdFx0XHRhd2FpdCByb3V0aW5nU2VydmljZS5fbWFuYWdlRGVlcExpbmtTdGFydHVwKHN0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdH1cblx0XHR9IGNhdGNoIChleGNlcHRpb246IHVua25vd24pIHtcblx0XHRcdExvZy5lcnJvcihleGNlcHRpb24gYXMgc3RyaW5nKTtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFVzZWQgdG8gYWxsb3cgZGlzYWJsaW5nIHRoZSBDb2xsYWJvcmF0aW9uIE1hbmFnZXIgaW50ZWdyYXRpb24gZm9yIHRoZSBPVlAgdXNlIGNhc2UuXG5cdCAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIGNvbGxhYm9yYXRpb24gbWFuYWdlciBzZXJ2aWNlIGlzIGFjdGl2ZS5cblx0ICovXG5cdGlzQ29sbGFib3JhdGlvbk1hbmFnZXJTZXJ2aWNlRW5hYmxlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlciBwcm9jZXNzZXMgdGhhdCBuZWVkIHRvIGJlIHJ1biBmb3IgZXZlcnkgaW5zdGFuY2UgcHJpb3IgdG8gc3RhcnR1cC5cblx0ICogQHBhcmFtIGZuUHJvY2VzcyBGdW5jdGlvbiB0aGF0IGhvbGQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBwcm9jZXNzLlxuXHQgKlxuXHQgKiBUaGUgcmVnaXN0ZXJlZCBwcm9jZXNzIGNhbiBiZSBhbiBhc3luY2hyb25vdXMgcHJvY2Vzcy5cblx0ICogSXQgc2hhbGwgYmUgY2FsbGVkIHdpdGggdGhlIEFwcENvbXBvbmVudCBpbnN0YW5jZSBhcyBhIHBhcmFtZXRlciBiZWZvcmUgc3RhcnR1cC5cblx0ICovXG5cdHN0YXRpYyByZWdpc3Rlckluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc0ZvclN0YXJ0VXAoZm5Qcm9jZXNzOiAoYXBwQ29tcG9uZW50OiBBcHBDb21wb25lbnQpID0+IFByb21pc2U8dm9pZD4pOiB2b2lkIHtcblx0XHR0aGlzLmluc3RhbmNlRGVwZW5kZW50UHJvY2Vzc2VzLnB1c2goZm5Qcm9jZXNzKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZWdpc3RlcnMgY3VzdG9tIGluaXRpYWxpemF0aW9uIGNoZWNrcyB0aGF0IGFyZSBydW4gYmVmb3JlIHRoZSBjb21wb25lbnQgaXMgaW5pdGlhbGl6ZWQuXG5cdCAqIFRoaXMgaXMgdXNlZnVsIGZvciBydW5uaW5nIGNoZWNrcyB0aGF0IGFyZSBzcGVjaWZpYyB0byBhIGxpYnJhcnkuXG5cdCAqIFRoZXNlIGNoZWNrcyBhcmUgcnVuIGJlZm9yZSB0aGUgY29tcG9uZW50IGlzIGluaXRpYWxpemVkIGFuZCBiZWZvcmUgdGhlIG1hbmlmZXN0IGlzIG1lcmdlZC5cblx0ICogQHBhcmFtIGZuUHJvY2Vzc1xuXHQgKi9cblx0c3RhdGljIHJlZ2lzdGVySW5pdENoZWNrcyhmblByb2Nlc3M6IChtYW5pZmVzdENvbnRlbnQ6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl0pID0+IHZvaWQpOiB2b2lkIHtcblx0XHR0aGlzLl9jdXN0b21NYW5pZmVzdENoZWNrcy5wdXNoKGZuUHJvY2Vzcyk7XG5cdH1cblxuXHQvKipcblx0ICogUmVnaXN0ZXJzIHRoZSBjYWxsYmFja3MgcmVsYXRlZCB0byBhIHN0aWNreSBlZGl0IHNlc3Npb24uXG5cdCAqIEBwYXJhbSBkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFja1xuXHQgKiBAcGFyYW0gZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrXG5cdCAqIEBwYXJhbSBzZXNzaW9uVGltZW91dENhbGxiYWNrXG5cdCAqL1xuXHRyZWdpc3RlckNhbGxiYWNrcyhcblx0XHRkaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjazogRnVuY3Rpb24sXG5cdFx0ZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrOiBGdW5jdGlvbixcblx0XHRzZXNzaW9uVGltZW91dENhbGxiYWNrPzogRnVuY3Rpb25cblx0KTogdm9pZCB7XG5cdFx0dGhpcy5kaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayA9IGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrO1xuXHRcdHRoaXMuZ2V0U2hlbGxTZXJ2aWNlcygpLnJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKGRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrKTtcblxuXHRcdGlmIChzZXNzaW9uVGltZW91dENhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2sgPSBzZXNzaW9uVGltZW91dENhbGxiYWNrO1xuXHRcdFx0dGhpcy5nZXRNb2RlbCgpLmF0dGFjaFNlc3Npb25UaW1lb3V0KHNlc3Npb25UaW1lb3V0Q2FsbGJhY2spO1xuXHRcdH1cblxuXHRcdHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrID0gZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrO1xuXHRcdHRoaXMuX3JvdXRlTWF0Y2hIYW5kbGVyID0gKCk6IHZvaWQgPT4ge1xuXHRcdFx0aWYgKHRoaXMuZGlzY2FyZEFmdGVyTmF2aWdhdGlvbkNhbGxiYWNrKSB7XG5cdFx0XHRcdHRoaXMuZGlzY2FyZFByb21pc2UgPSB0aGlzLmRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjaygpO1xuXHRcdFx0fVxuXHRcdH07XG5cdFx0dGhpcy5nZXRSb3V0aW5nU2VydmljZSgpLmF0dGFjaFJvdXRlTWF0Y2hlZCh7fSwgdGhpcy5fcm91dGVNYXRjaEhhbmRsZXIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFVucmVnaXN0ZXJzIHRoZSBjYWxsYmFja3MgcmVsYXRlZCB0byBhIHN0aWNreSBlZGl0IHNlc3Npb24uXG5cdCAqL1xuXHR1bnJlZ2lzdGVyQ2FsbGJhY2tzKCk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmRpcnR5U3RhdGVQcm92aWRlckNhbGxiYWNrKSB7XG5cdFx0XHR0aGlzLmdldFNoZWxsU2VydmljZXMoKS5kZXJlZ2lzdGVyRGlydHlTdGF0ZVByb3ZpZGVyKHRoaXMuZGlydHlTdGF0ZVByb3ZpZGVyQ2FsbGJhY2spO1xuXHRcdFx0dGhpcy5kaXJ0eVN0YXRlUHJvdmlkZXJDYWxsYmFjayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc3RpY2t5U2Vzc2lvblRpbWVvdXRDYWxsYmFjayAmJiB0aGlzLmdldE1vZGVsKCkpIHtcblx0XHRcdHRoaXMuZ2V0TW9kZWwoKS5kZXRhY2hTZXNzaW9uVGltZW91dCh0aGlzLnN0aWNreVNlc3Npb25UaW1lb3V0Q2FsbGJhY2spO1xuXHRcdFx0dGhpcy5zdGlja3lTZXNzaW9uVGltZW91dENhbGxiYWNrID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAodGhpcy5fcm91dGVNYXRjaEhhbmRsZXIpIHtcblx0XHRcdHRoaXMuZ2V0Um91dGluZ1NlcnZpY2UoKS5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fcm91dGVNYXRjaEhhbmRsZXIpO1xuXHRcdFx0dGhpcy5fcm91dGVNYXRjaEhhbmRsZXIgPSB1bmRlZmluZWQ7XG5cdFx0XHR0aGlzLmRpc2NhcmRBZnRlck5hdmlnYXRpb25DYWxsYmFjayA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaXMgZW1iZWRkZWQgaW4gYW5vdGhlciBhcHBsaWNhdGlvbi5cblx0ICogVGhpcyBpcyBkZXRlcm1pbmVkIGJ5IGNoZWNraW5nIGlmIHRoZSBjb21wb25lbnQgZGF0YSBjb250YWlucyBhIGBmZUVudmlyb25tZW50YCBvYmplY3QuXG5cdCAqIFRoaXMgaXMgc2V0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBlbWJlZGRlZCBpbiBNeSBJbmJveC5cblx0ICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgY29tcG9uZW50IGlzIGVtYmVkZGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCAqL1xuXHRfaXNFbWJlZGRlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gISF0aGlzLmdldENvbXBvbmVudERhdGEoKT8uZmVFbnZpcm9ubWVudDtcblx0fVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4vLyBAdHMtaWdub3JlXG5pbnRlcmZhY2UgQXBwQ29tcG9uZW50IGV4dGVuZHMgVUlDb21wb25lbnQge1xuXHRpc0FkYXB0YXRpb25Nb2RlKCk6IGJvb2xlYW47XG5cdGdldE1hbmlmZXN0KCk6IE1hbmlmZXN0Q29udGVudDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuYXBwXCIpOiBNYW5pZmVzdENvbnRlbnRbXCJzYXAuYXBwXCJdO1xuXHRnZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aTVcIl07XG5cdF9nZXRNYW5pZmVzdEVudHJ5KGVudHJ5OiBcInNhcC51aTVcIiwgbWVyZ2VkOiBib29sZWFuKTogTWFuaWZlc3RDb250ZW50W1wic2FwLnVpNVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAudWlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC51aVwiXTtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmVcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5mZVwiXSB8IHVuZGVmaW5lZDtcblx0Z2V0TWFuaWZlc3RFbnRyeShlbnRyeTogXCJzYXAuZmlvcmlcIik6IE1hbmlmZXN0Q29udGVudFtcInNhcC5maW9yaVwiXTtcblx0Z2V0Q29tcG9uZW50RGF0YSgpOiBDb21wb25lbnREYXRhO1xuXHRnZXRSb290Q29udHJvbCgpOiB7XG5cdFx0Z2V0Q29udHJvbGxlcigpOiBSb290Vmlld0Jhc2VDb250cm9sbGVyO1xuXHR9ICYgVmlldztcblx0Z2V0TW9kZWwoKTogT0RhdGFNb2RlbDtcblx0Z2V0TW9kZWwobmFtZTogXCJ1aVwiKTogSlNPTk1vZGVsO1xuXHRnZXRNb2RlbChuYW1lOiBzdHJpbmcpOiBNb2RlbCB8IHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQXBwQ29tcG9uZW50O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7RUEyQ0E7QUFDQTtBQUNBOztFQXNCQSxNQUFNQSxXQUFXLEdBQUdDLE9BQU8sQ0FBQ0QsV0FBVztFQUN2QyxNQUFNRSxPQUFPLEdBQUc7SUFDZkMsR0FBRyxFQUFFO01BQ0pDLFFBQVEsRUFBRSwwQkFBMEI7TUFDcENDLHNCQUFzQixFQUFFLHlDQUF5QztNQUNqRUMsV0FBVyxFQUFFO0lBQ2QsQ0FBQztJQUNEQyxZQUFZLEVBQUU7TUFDYkgsUUFBUSxFQUFFLG1DQUFtQztNQUM3Q0Msc0JBQXNCLEVBQUUsa0RBQWtEO01BQzFFQyxXQUFXLEVBQUU7SUFDZDtFQUNELENBQUM7RUFZRDtFQUNBLE1BQU1FLFFBQVEsR0FBR0MsTUFBTTtFQU92QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFYQSxJQTZHTUMsWUFBWSxJQUFBQyxJQUFBLEdBakdqQkMsY0FBYyxDQUFDLDBCQUEwQixFQUFFO0lBQzNDQyxNQUFNLEVBQUU7TUFDUEMsU0FBUyxFQUFFO0lBQ1osQ0FBQztJQUNEQyxRQUFRLEVBQUU7TUFDVEMsUUFBUSxFQUFFLE9BQU87TUFDakIsU0FBUyxFQUFFO1FBQ1ZDLFFBQVEsRUFBRTtVQUNUQyxvQkFBb0IsRUFBRTtZQUNyQkMsV0FBVyxFQUFFLDJDQUEyQztZQUN4REMsT0FBTyxFQUFFO1VBQ1YsQ0FBQztVQUNEQyxhQUFhLEVBQUU7WUFDZEYsV0FBVyxFQUFFLDJDQUEyQztZQUN4REMsT0FBTyxFQUFFLFNBQVM7WUFDbEJFLFFBQVEsRUFBRTtjQUNUQyxPQUFPLEVBQUUsQ0FBQywyQkFBMkIsQ0FBQztjQUN0Q0MsU0FBUyxFQUFFO1lBQ1o7VUFDRCxDQUFDO1VBQ0RDLGNBQWMsRUFBRTtZQUNmTixXQUFXLEVBQUUscUNBQXFD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