@sapui5/sap.fe.core 1.141.2 → 1.142.1

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 (207) 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 +48 -23
  4. package/src/sap/fe/core/ActionRuntime.ts +61 -35
  5. package/src/sap/fe/core/AppComponent.js +76 -6
  6. package/src/sap/fe/core/AppComponent.ts +94 -8
  7. package/src/sap/fe/core/AppStateHandler.js +9 -8
  8. package/src/sap/fe/core/AppStateHandler.ts +13 -9
  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 -10
  14. package/src/sap/fe/core/ExtensionAPI.ts +2 -14
  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 +20 -1
  18. package/src/sap/fe/core/TemplateComponent.ts +24 -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 +4 -1
  26. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplatingBase.ts +4 -0
  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 -39
  30. package/src/sap/fe/core/controllerextensions/CollaborativeDraft.ts +91 -54
  31. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -3
  32. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -3
  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 +8 -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 +9 -5
  48. package/src/sap/fe/core/controllerextensions/Routing.ts +7 -7
  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 +33 -11
  58. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +45 -14
  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 +7 -7
  64. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +6 -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/OperationParameters.js +2 -1
  68. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +1 -0
  69. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +10 -6
  70. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +6 -5
  71. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +11 -9
  72. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +22 -9
  73. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.js +9 -4
  74. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DraftDataLossDialog.tsx +10 -4
  75. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +31 -2
  76. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +34 -1
  77. package/src/sap/fe/core/converters/ManifestSettings.js +7 -1
  78. package/src/sap/fe/core/converters/ManifestSettings.ts +37 -0
  79. package/src/sap/fe/core/converters/ManifestWrapper.js +29 -9
  80. package/src/sap/fe/core/converters/ManifestWrapper.ts +29 -11
  81. package/src/sap/fe/core/converters/annotations/DataField.js +46 -19
  82. package/src/sap/fe/core/converters/annotations/DataField.ts +93 -19
  83. package/src/sap/fe/core/converters/common/AnnotationConverter.js +88 -35
  84. package/src/sap/fe/core/converters/controls/Common/Action.js +57 -20
  85. package/src/sap/fe/core/converters/controls/Common/Action.ts +71 -21
  86. package/src/sap/fe/core/converters/controls/Common/Chart.js +13 -3
  87. package/src/sap/fe/core/converters/controls/Common/Chart.ts +20 -4
  88. package/src/sap/fe/core/converters/controls/Common/Form.js +18 -3
  89. package/src/sap/fe/core/converters/controls/Common/Form.ts +23 -1
  90. package/src/sap/fe/core/converters/controls/Common/Table.js +89 -57
  91. package/src/sap/fe/core/converters/controls/Common/Table.ts +110 -56
  92. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.js +243 -0
  93. package/src/sap/fe/core/converters/controls/Common/filter/FilterRestrictions.ts +309 -0
  94. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +142 -58
  95. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +172 -78
  96. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +12 -18
  97. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +13 -27
  98. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +7 -16
  99. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +6 -17
  100. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +16 -5
  101. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +16 -5
  102. package/src/sap/fe/core/converters/helpers/Aggregation.js +12 -2
  103. package/src/sap/fe/core/converters/helpers/Aggregation.ts +11 -1
  104. package/src/sap/fe/core/converters/helpers/DataFieldHelper.js +27 -3
  105. package/src/sap/fe/core/converters/helpers/DataFieldHelper.ts +28 -1
  106. package/src/sap/fe/core/converters/helpers/ID.js +3 -1
  107. package/src/sap/fe/core/converters/helpers/ID.ts +1 -0
  108. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +5 -2
  109. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +7 -1
  110. package/src/sap/fe/core/converters/templates/ListReportConverter.js +11 -3
  111. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +12 -4
  112. package/src/sap/fe/core/converters/templates/ObjectPageConverter.js +19 -8
  113. package/src/sap/fe/core/converters/templates/ObjectPageConverter.ts +18 -7
  114. package/src/sap/fe/core/designtime/AnnotationBasedChanges.js +8 -3
  115. package/src/sap/fe/core/designtime/AnnotationBasedChanges.ts +7 -2
  116. package/src/sap/fe/core/formatters/FPMFormatter.js +2 -2
  117. package/src/sap/fe/core/formatters/FPMFormatter.ts +1 -1
  118. package/src/sap/fe/core/fpm/Component.js +8 -1
  119. package/src/sap/fe/core/fpm/Component.ts +8 -0
  120. package/src/sap/fe/core/fpm/manifest.json +1 -1
  121. package/src/sap/fe/core/helpers/AppStartupHelper.js +79 -25
  122. package/src/sap/fe/core/helpers/AppStartupHelper.ts +91 -32
  123. package/src/sap/fe/core/helpers/ManifestHelper.js +6 -3
  124. package/src/sap/fe/core/helpers/ManifestHelper.ts +3 -0
  125. package/src/sap/fe/core/helpers/MetaModelFunction.js +12 -3
  126. package/src/sap/fe/core/helpers/MetaModelFunction.ts +11 -3
  127. package/src/sap/fe/core/helpers/ModelHelper.js +48 -9
  128. package/src/sap/fe/core/helpers/ModelHelper.ts +55 -10
  129. package/src/sap/fe/core/helpers/TypeGuards.js +12 -2
  130. package/src/sap/fe/core/helpers/TypeGuards.ts +10 -1
  131. package/src/sap/fe/core/helpers/WebSocket.js +6 -7
  132. package/src/sap/fe/core/helpers/WebSocket.ts +10 -6
  133. package/src/sap/fe/core/library.js +30 -3
  134. package/src/sap/fe/core/library.ts +28 -1
  135. package/src/sap/fe/core/messagebundle.properties +8 -1
  136. package/src/sap/fe/core/messagebundle_ar.properties +7 -0
  137. package/src/sap/fe/core/messagebundle_bg.properties +10 -3
  138. package/src/sap/fe/core/messagebundle_ca.properties +7 -0
  139. package/src/sap/fe/core/messagebundle_cnr.properties +7 -0
  140. package/src/sap/fe/core/messagebundle_cs.properties +7 -0
  141. package/src/sap/fe/core/messagebundle_cy.properties +8 -1
  142. package/src/sap/fe/core/messagebundle_da.properties +7 -0
  143. package/src/sap/fe/core/messagebundle_de.properties +7 -0
  144. package/src/sap/fe/core/messagebundle_el.properties +7 -0
  145. package/src/sap/fe/core/messagebundle_en.properties +8 -1
  146. package/src/sap/fe/core/messagebundle_en_GB.properties +7 -0
  147. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +5 -0
  148. package/src/sap/fe/core/messagebundle_es.properties +8 -1
  149. package/src/sap/fe/core/messagebundle_es_MX.properties +7 -0
  150. package/src/sap/fe/core/messagebundle_et.properties +7 -0
  151. package/src/sap/fe/core/messagebundle_fi.properties +7 -0
  152. package/src/sap/fe/core/messagebundle_fr.properties +16 -9
  153. package/src/sap/fe/core/messagebundle_fr_CA.properties +7 -0
  154. package/src/sap/fe/core/messagebundle_hi.properties +8 -1
  155. package/src/sap/fe/core/messagebundle_hr.properties +7 -0
  156. package/src/sap/fe/core/messagebundle_hu.properties +7 -0
  157. package/src/sap/fe/core/messagebundle_id.properties +7 -0
  158. package/src/sap/fe/core/messagebundle_it.properties +7 -0
  159. package/src/sap/fe/core/messagebundle_iw.properties +7 -0
  160. package/src/sap/fe/core/messagebundle_ja.properties +8 -1
  161. package/src/sap/fe/core/messagebundle_kk.properties +7 -0
  162. package/src/sap/fe/core/messagebundle_ko.properties +7 -0
  163. package/src/sap/fe/core/messagebundle_lt.properties +7 -0
  164. package/src/sap/fe/core/messagebundle_lv.properties +7 -0
  165. package/src/sap/fe/core/messagebundle_mk.properties +7 -0
  166. package/src/sap/fe/core/messagebundle_ms.properties +7 -0
  167. package/src/sap/fe/core/messagebundle_nl.properties +7 -0
  168. package/src/sap/fe/core/messagebundle_no.properties +7 -0
  169. package/src/sap/fe/core/messagebundle_pl.properties +7 -0
  170. package/src/sap/fe/core/messagebundle_pt.properties +7 -0
  171. package/src/sap/fe/core/messagebundle_pt_PT.properties +7 -0
  172. package/src/sap/fe/core/messagebundle_ro.properties +7 -0
  173. package/src/sap/fe/core/messagebundle_ru.properties +7 -0
  174. package/src/sap/fe/core/messagebundle_sh.properties +7 -0
  175. package/src/sap/fe/core/messagebundle_sk.properties +7 -0
  176. package/src/sap/fe/core/messagebundle_sl.properties +7 -0
  177. package/src/sap/fe/core/messagebundle_sr.properties +7 -0
  178. package/src/sap/fe/core/messagebundle_sv.properties +7 -0
  179. package/src/sap/fe/core/messagebundle_th.properties +7 -0
  180. package/src/sap/fe/core/messagebundle_tr.properties +7 -0
  181. package/src/sap/fe/core/messagebundle_uk.properties +7 -0
  182. package/src/sap/fe/core/messagebundle_vi.properties +7 -0
  183. package/src/sap/fe/core/messagebundle_zh_CN.properties +8 -1
  184. package/src/sap/fe/core/messagebundle_zh_TW.properties +7 -0
  185. package/src/sap/fe/core/rootView/Fcl.controller.js +21 -7
  186. package/src/sap/fe/core/rootView/Fcl.controller.ts +28 -6
  187. package/src/sap/fe/core/rootView/RootViewBaseController.js +96 -88
  188. package/src/sap/fe/core/rootView/RootViewBaseController.ts +106 -96
  189. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +14 -10
  190. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +15 -10
  191. package/src/sap/fe/core/services/RoutingServiceFactory.js +16 -7
  192. package/src/sap/fe/core/services/RoutingServiceFactory.ts +23 -10
  193. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +9 -7
  194. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +13 -8
  195. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +62 -6
  196. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +74 -11
  197. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +33 -15
  198. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +31 -11
  199. package/src/sap/fe/core/templating/DisplayModeFormatter.js +4 -5
  200. package/src/sap/fe/core/templating/DisplayModeFormatter.ts +4 -6
  201. package/src/sap/fe/core/templating/UIFormatters.js +17 -2
  202. package/src/sap/fe/core/templating/UIFormatters.ts +25 -1
  203. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.js +10 -0
  204. package/src/sap/fe/core/types/sap.fe.core-auto-ext.d.ts +369 -0
  205. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.js +9 -0
  206. package/src/sap/fe/core/types/sap.fe.core-manual-ext.d.ts +49 -0
  207. package/ui5.yaml +2 -0
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/fe/core/formatters/ValueFormatter", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel"], function (Log, Localization, ClassSupport, valueFormatters, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, Sorter, JSONModel) {
5
+ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassSupport", "sap/fe/core/formatters/ValueFormatter", "sap/m/Popover", "sap/ui/core/Lib", "sap/ui/core/Locale", "sap/ui/core/format/DateFormat", "sap/ui/core/format/NumberFormat", "sap/ui/core/message/MessageType", "sap/ui/core/mvc/ControllerExtension", "sap/ui/model/Filter", "sap/ui/model/FilterOperator", "sap/ui/model/Sorter", "sap/ui/model/json/JSONModel", "../helpers/ModelHelper"], function (Log, Localization, ClassSupport, valueFormatters, Popover, Library, Locale, DateFormat, NumberFormat, MessageType, ControllerExtension, Filter, FilterOperator, Sorter, JSONModel, ModelHelper) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _class, _class2;
@@ -615,7 +615,7 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
615
615
 
616
616
  // Create a JSON model to store KPI data
617
617
  const oKPIModel = new JSONModel();
618
- oView.setModel(oKPIModel, "kpiModel");
618
+ this.base.getOwnerComponent().setModel(oKPIModel, "kpiModel");
619
619
  this.aKPIDefinitions.forEach(kpiDefinition => {
620
620
  // We only need to worry about analytical KPI definition
621
621
  if (kpiDefinition.type === "Analytical") {
@@ -789,6 +789,25 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
789
789
  }
790
790
  }
791
791
 
792
+ /**
793
+ * Returns the overall filters to be applied to a KPI, including SelectionVariant filters and the IsActiveEntity filter if draft is supported.
794
+ * @param kpiDefinition
795
+ * @param metaModel
796
+ * @returns An array of sap.ui.model.Filter objects
797
+ */;
798
+ _proto.getKPIFilters = function getKPIFilters(kpiDefinition, metaModel) {
799
+ let filters = [];
800
+ if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
801
+ filters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(filter => {
802
+ return filter !== undefined;
803
+ });
804
+ }
805
+ if (ModelHelper.isDraftSupported(metaModel, kpiDefinition.contextPath)) {
806
+ filters.push(new Filter("IsActiveEntity", FilterOperator.EQ, true));
807
+ }
808
+ return filters;
809
+ }
810
+
792
811
  /**
793
812
  * Loads tag data for a KPI, and stores it in the JSON KPI model.
794
813
  * @param kpiDefinition The definition of the KPI.
@@ -837,12 +856,10 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
837
856
  aggregate: oAggregate
838
857
  });
839
858
 
840
- // Manage SelectionVariant filters
841
- if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
842
- const aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(filter => {
843
- return filter !== undefined;
844
- });
845
- oListBinding.filter(aFilters);
859
+ // Filters
860
+ const filters = this.getKPIFilters(kpiDefinition, oMainModel.getMetaModel());
861
+ if (filters.length > 0) {
862
+ oListBinding.filter(filters);
846
863
  }
847
864
  return oListBinding.requestContexts(0, 1).then(aContexts => {
848
865
  if (aContexts.length) {
@@ -901,12 +918,10 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
901
918
  aggregate: oAggregate
902
919
  });
903
920
 
904
- // Manage SelectionVariant filters
905
- if (kpiDefinition.selectionVariantFilterDefinitions?.length) {
906
- const aFilters = kpiDefinition.selectionVariantFilterDefinitions.map(createFilterFromDefinition).filter(filter => {
907
- return filter !== undefined;
908
- });
909
- oListBinding.filter(aFilters);
921
+ // Filters
922
+ const filters = this.getKPIFilters(kpiDefinition, oMainModel.getMetaModel());
923
+ if (filters.length > 0) {
924
+ oListBinding.filter(filters);
910
925
  }
911
926
 
912
927
  // Sorting
@@ -1035,4 +1050,4 @@ sap.ui.define(["sap/base/Log", "sap/base/i18n/Localization", "sap/fe/base/ClassS
1035
1050
  }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onExit", [_dec3], Object.getOwnPropertyDescriptor(_class2.prototype, "onExit"), _class2.prototype), _class2)) || _class);
1036
1051
  return KPIManagementControllerExtension;
1037
1052
  }, false);
1038
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJ0aXRsZSIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJjYWxsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiYUtQSURlZmluaXRpb25zIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0UGFnZU1vZGVsIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsInJhd1VuaXQiLCJpc1BhdGgiLCJpc1BlcmNlbnRhZ2UiLCJpc0N1cnJlbmN5IiwicmF3VmFsdWUiLCJOdW1iZXIiLCJwYXJzZUZsb2F0IiwiTnVtYmVyRm9ybWF0IiwiZ2V0RmxvYXRJbnN0YW5jZSIsIm1pbkZyYWN0aW9uRGlnaXRzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJzaG93U2NhbGUiLCJrcGlWYWx1ZVVuc2NhbGVkIiwiZ3JvdXBpbmdFbmFibGVkIiwia3BpVmFsdWVOb1NjYWxlIiwia3BpVmFsdWVTY2FsZSIsImRlY2ltYWxzIiwibWF4SW50ZWdlckRpZ2l0cyIsImtwaVVuaXQiLCJnZXRVbml0SW5zdGFuY2UiLCJzaG93TnVtYmVyIiwidXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVZhbHVlIiwiY3JpdGljYWxpdHlQYXRoIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSIsInVwZGF0ZURhdGFwb2ludFRyZW5kIiwidHJlbmRQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgiLCJ0cmVuZFJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUiLCJ0cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzIiwidXBkYXRlVGFyZ2V0VmFsdWUiLCJ0YXJnZXRSYXdWYWx1ZSIsImRldmlhdGlvblJhd1ZhbHVlIiwidGFyZ2V0U2NhbGUiLCJkZXZpYXRpb25WYWx1ZSIsIm9NYWluTW9kZWwiLCJsb2FkRnVsbCIsIm9MaXN0QmluZGluZyIsImJpbmRMaXN0IiwiY29udGV4dFBhdGgiLCIkJGdyb3VwSWQiLCJvQWdncmVnYXRlIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGUiLCJhRmlsdGVycyIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsImxvYWRLUElDYXJkRGF0YSIsIm9Hcm91cCIsImFkZGl0aW9uYWxseSIsImdyb3VwIiwic29ydE9yZGVyIiwic29ydCIsInNvcnRJbmZvIiwiU29ydGVyIiwiZGVzY2VuZGluZyIsImFsbENvbnRleHRzIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwidGV4dEFycmFuZ2VtZW50IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJfdGhpcyIsIm9Qb3BvdmVyIiwicmVqZWN0IiwibG9hZCIsInNhcCIsInVpIiwicmVxdWlyZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJwYXJhbXMiLCJBcnJheSIsIl9rZXkiLCJDYXJkQ2xhc3MiLCJIb3N0Iiwib0hvc3QiLCJhdHRhY2hBY3Rpb24iLCJvRXZlbnQiLCJzVHlwZSIsImdldFBhcmFtZXRlciIsIm9QYXJhbXMiLCJiYXNlIiwiX2ludGVudEJhc2VkTmF2aWdhdGlvbiIsIm5hdmlnYXRlIiwibmF2aWdhdGVPdXRib3VuZCIsIm9DYXJkIiwid2lkdGgiLCJoZWlnaHQiLCJzZXRIb3N0IiwiUG9wb3ZlciIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJhZGREZXBlbmRlbnQiLCJvbktQSVByZXNzZWQiLCJrcGlJRCIsIm9EZWYiLCJvTW9kZWwiLCJwb3BvdmVyIiwic2V0TW9kYWwiLCJzZXRNYW5pZmVzdCIsInNldFByZXZpZXdNb2RlIiwib3BlbkJ5IiwicHJvbWlzZXMiLCJhbGwiLCJhdHRhY2hFdmVudE9uY2UiLCJnZXRGb2N1c0RvbVJlZiIsImZvY3VzIiwicmVmcmVzaCIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJLUElNYW5hZ2VtZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IExvY2FsaXphdGlvbiBmcm9tIFwic2FwL2Jhc2UvaTE4bi9Mb2NhbGl6YXRpb25cIjtcbmltcG9ydCB7IGRlZmluZVVJNUNsYXNzLCBtZXRob2RPdmVycmlkZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250cm9sbGVyIGZyb20gXCJzYXAvZmUvY29yZS9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSB7XG5cdEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRLUElDaGFydERlZmluaXRpb24sXG5cdEtQSURlZmluaXRpb24sXG5cdE5hdmlnYXRpb25JbmZvXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB0eXBlIHsgRmlsdGVyRGVmaW5pdGlvbiwgUmFuZ2VEZWZpbml0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvaGVscGVycy9TZWxlY3Rpb25WYXJpYW50SGVscGVyXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgdHlwZSB7IElTaGVsbFNlcnZpY2VzIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1NoZWxsU2VydmljZXNGYWN0b3J5XCI7XG5pbXBvcnQgdHlwZSBHZW5lcmljVGFnIGZyb20gXCJzYXAvbS9HZW5lcmljVGFnXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwic2FwL3VpL2NvcmUvTG9jYWxlXCI7XG5pbXBvcnQgRGF0ZUZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L0RhdGVGb3JtYXRcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgdHlwZSBIb3N0VHlwZSBmcm9tIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIjtcbmltcG9ydCB0eXBlIHsgSG9zdCRBY3Rpb25FdmVudCB9IGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIENhcmQsIENhcmRNYW5pZmVzdCwgZGVmYXVsdCBhcyBDYXJkVHlwZSwgQ2hhcnRDYXJkQ29udGVudCB9IGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vd2lkZ2V0cy9DYXJkXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuXG5jb25zdCBNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eTogUmVjb3JkPHN0cmluZywgTWVzc2FnZVR5cGU+ID0ge1xuXHRcIjFcIjogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFwiMlwiOiBNZXNzYWdlVHlwZS5XYXJuaW5nLFxuXHRcIjNcIjogTWVzc2FnZVR5cGUuU3VjY2Vzcyxcblx0XCI1XCI6IE1lc3NhZ2VUeXBlLkluZm9ybWF0aW9uXG59O1xuXG5jb25zdCBWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlOiBSZWNvcmQ8TWVzc2FnZVR5cGUsIHN0cmluZz4gPSB7XG5cdEVycm9yOiBcIkVycm9yXCIsXG5cdFdhcm5pbmc6IFwiQ3JpdGljYWxcIixcblx0U3VjY2VzczogXCJHb29kXCIsXG5cdEluZm9ybWF0aW9uOiBcIk5vbmVcIixcblx0Tm9uZTogXCJOb25lXCJcbn07XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdUYXJnZXQnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUhpZ2hWYWx1ZSxUb2xlcmFuY2VSYW5nZUhpZ2hWYWx1ZSxEZXZpYXRpb25SYW5nZUhpZ2hWYWx1ZV0uXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzVdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s1XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s0XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzRdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbM10pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWluaW1pemUnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWF4aW1pemUnLlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciB2YWx1ZSBmcm9tIGEgdHJlbmQgdmFsdWUuXG4gKiBAcGFyYW0gdHJlbmRWYWx1ZSBUaGUgY3JpdGljYWxpdHkgdmFsdWVzLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUodHJlbmRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdHN3aXRjaCAodHJlbmRWYWx1ZSkge1xuXHRcdGNhc2UgMTogLy8gU3Ryb25nVXBcblx0XHRjYXNlIFwiMVwiOlxuXHRcdGNhc2UgMjogLy8gVXBcblx0XHRjYXNlIFwiMlwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIDQ6IC8vIERvd25cblx0XHRjYXNlIFwiNFwiOlxuXHRcdGNhc2UgNTogLy8gU3Ryb25nRG93blxuXHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgZnJvbSBhIFRyZW5kQ2FsY3VsYXRpb24uXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUElcbiAqIEBwYXJhbSByZWZlcmVuY2VWYWx1ZSBUaGUgcmVmZXJlbmNlIHZhbHVlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIGlzUmVsYXRpdmUgVHJ1ZSBpcyB0aGUgY29tcGFyaXNvbiBpcyByZWxhdGl2ZVxuICogQHBhcmFtIGFUaHJlc2hvbGRzIEFycmF5IG9mIHRocmVzaG9sZHMgW1N0cm9uZ0Rvd25EaWZmZXJlbmNlLCBEb3duRGlmZmVyZW5jZSwgVXBEaWZmZXJlbmNlLCBTdHJvbmdVcERpZmZlcmVuY2VdXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRrcGlWYWx1ZTogbnVtYmVyLFxuXHRyZWZlcmVuY2VWYWx1ZTogbnVtYmVyLFxuXHRpc1JlbGF0aXZlOiBib29sZWFuLFxuXHRhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRpZiAoIWFUaHJlc2hvbGRzIHx8IChpc1JlbGF0aXZlICYmICFyZWZlcmVuY2VWYWx1ZSkpIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cblxuXHRjb25zdCBjb21wVmFsdWUgPSBpc1JlbGF0aXZlID8gKGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWUpIC8gcmVmZXJlbmNlVmFsdWUgOiBrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1swXSkge1xuXHRcdC8vIFN0cm9uZ0Rvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1sxXSkge1xuXHRcdC8vIERvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1szXSkge1xuXHRcdC8vIFN0cm9uZ1VwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1syXSkge1xuXHRcdC8vIFVwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBTaWRld2F5cyAtLT4gTm9uZVxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIGEgZmlsdGVyIGRlZmluaXRpb24uXG4gKiBAcGFyYW0gZmlsdGVyRGVmaW5pdGlvbiBUaGUgZmlsdGVyIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFJldHVybnMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gdGhlIGRlZmluaXRpb24sIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGVmaW5pdGlvbiBpcyBlbXB0eSAobm8gcmFuZ2VzKVxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VMb3csXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUhpZ2hcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGFSYW5nZUZpbHRlcnMgPSBmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAoKHJhbmdlKSA9PiB7XG5cdFx0XHRyZXR1cm4gbmV3IEZpbHRlcihmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCwgcmFuZ2Uub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsIHJhbmdlLnJhbmdlTG93LCByYW5nZS5yYW5nZUhpZ2gpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKHtcblx0XHRcdGZpbHRlcnM6IGFSYW5nZUZpbHRlcnMsXG5cdFx0XHRhbmQ6IGZhbHNlXG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0Y29uc3QgZGF0ZUZvcm1hdCA9IERhdGVGb3JtYXQuZ2V0RGF0ZUluc3RhbmNlKHsgc3R5bGU6IFwibWVkaXVtXCIgfSwgY3VycmVudExvY2FsZSk7XG5cblx0ZnVuY3Rpb24gZm9ybWF0UmFuZ2UocmFuZ2U6IFJhbmdlRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgdmFsdWVMb3cgPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwXG5cdFx0XHRcdD8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VMb3cpKVxuXHRcdFx0XHQ6IChyYW5nZS5yYW5nZUxvdyBhcyBzdHJpbmcpO1xuXHRcdGNvbnN0IHZhbHVlSGlnaCA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgJiYgcmFuZ2UucmFuZ2VIaWdoICE9PSB1bmRlZmluZWRcblx0XHRcdFx0PyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUhpZ2gpKVxuXHRcdFx0XHQ6IHJhbmdlLnJhbmdlSGlnaDtcblxuXHRcdHN3aXRjaCAocmFuZ2Uub3BlcmF0b3IpIHtcblx0XHRcdGNhc2UgXCJCVFwiOlxuXHRcdFx0XHRyZXR1cm4gYFske3ZhbHVlTG93fSAtICR7dmFsdWVIaWdofV1gO1xuXG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIGAqJHt2YWx1ZUxvd30qYDtcblxuXHRcdFx0Y2FzZSBcIkdFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NSR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkdUXCI6XG5cdFx0XHRcdHJldHVybiBgPiR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2NCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRcdHJldHVybiBgPCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5CXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWBdKTtcblxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRcdHJldHVybiBgXFx1MjI2MCR7dmFsdWVMb3d9YDtcblxuXHRcdFx0Y2FzZSBcIk5vdENvbnRhaW5zXCI6XG5cdFx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9GSUxURVJTVFJJTkdfTk9UXCIsIFtgKiR7dmFsdWVMb3d9KmBdKTtcblxuXHRcdFx0Y2FzZSBcIkVRXCI6XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRyZXR1cm4gdmFsdWVMb3c7XG5cdFx0fVxuXHR9XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gXCJcIjtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gZm9ybWF0UmFuZ2UoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBgKCR7ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKGZvcm1hdFJhbmdlKS5qb2luKFwiLFwiKX0pYDtcblx0fVxufVxuXG5mdW5jdGlvbiBmb3JtYXRDaGFydFRpdGxlKGtwaURlZjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdExpc3QoaXRlbXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSk6IHN0cmluZyB7XG5cdFx0aWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fSBlbHNlIGlmIChpdGVtcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHJldHVybiBpdGVtc1swXS5sYWJlbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bGV0IHJlcyA9IGl0ZW1zWzBdLmxhYmVsO1xuXHRcdFx0Zm9yIChsZXQgSSA9IDE7IEkgPCBpdGVtcy5sZW5ndGggLSAxOyBJKyspIHtcblx0XHRcdFx0cmVzICs9IGAsICR7aXRlbXNbSV0ubGFiZWx9YDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lURU1TTElTVFwiLCBbcmVzLCBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5sYWJlbF0pO1xuXHRcdH1cblx0fVxuXG5cdC8vIElmIHRoZSBjaGFydCBoYXMgYSB0aXRsZSwgdXNlIGl0LiBPdGhlcndpc2UsIGNyZWF0ZSBhIHRpdGxlIGZyb20gdGhlIGRpbWVuc2lvbnMgYW5kIG1lYXN1cmVzXG5cdHJldHVybiAoXG5cdFx0a3BpRGVmLmNoYXJ0LnRpdGxlID8/XG5cdFx0cmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfQ0hBUlRUSVRMRVwiLCBbZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQubWVhc3VyZXMpLCBmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5kaW1lbnNpb25zKV0pXG5cdCk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhcblx0Y2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24sXG5cdG9DaGFydFByb3BlcnRpZXM6IHtcblx0XHRjYXRlZ29yeUF4aXM6IHsgdGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9IH07XG5cdFx0c2l6ZUxlZ2VuZDogeyB2aXNpYmxlOiBib29sZWFuIH07XG5cdFx0bGVnZW5kR3JvdXA6IHsgbGF5b3V0OiB7IHBvc2l0aW9uOiBzdHJpbmc7IGFsaWdubWVudDogc3RyaW5nIH0gfTtcblx0XHR2YWx1ZUF4aXM6IHtcblx0XHRcdHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdGZvcm1hdFN0cmluZzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHZhbHVlQXhpczI6IHtcblx0XHRcdHRpdGxlOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdGZvcm1hdFN0cmluZzogc3RyaW5nO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdHBsb3RBcmVhOiB7XG5cdFx0XHRkYXRhTGFiZWw6IHt9O1xuXHRcdH07XG5cdH1cbik6IHZvaWQge1xuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdC8vIFNob3cgZGF0YSBsYWJlbHMsIGRvIG5vdCBzaG93IGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdF9NRkQyXCJcblx0XHRcdH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRcdC8vIFNob3cgYXhpcyB0aXRsZSwgYnViYmxlIHNpemUgbGVnZW5kLCBkbyBub3Qgc2hvdyBkYXRhIGxhYmVsc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5sZWdlbmRHcm91cCA9IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0YWxpZ25tZW50OiBcInRvcExlZnRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5zaXplTGVnZW5kID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHR9XG59XG5mdW5jdGlvbiBmaWx0ZXJNYXAoYU9iamVjdHM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXSwgYVJvbGVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IHN0cmluZ1tdIHtcblx0aWYgKGFSb2xlcyAmJiBhUm9sZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzXG5cdFx0XHQuZmlsdGVyKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGFSb2xlcy5pbmNsdWRlcyhkaW1lbnNpb24ucm9sZSk7XG5cdFx0XHR9KVxuXHRcdFx0Lm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYU9iamVjdHMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0Y29uc3QgYXhpczFNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMxXCJdKTtcblx0Y29uc3QgYXhpczJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKTtcblx0Y29uc3QgYXhpczNNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMzXCJdKTtcblx0Y29uc3Qgb3RoZXJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWRdKTtcblx0Y29uc3Qgc2VyaWVzRGltZW5zaW9ucyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKTtcblxuXHQvLyBHZXQgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIHJvbGUgXCJDYXRlZ29yeVwiIGZvciB0aGUgc2hhcGVcblx0Y29uc3Qgc2hhcGVEaW1lbnNpb24gPSBjaGFydERlZmluaXRpb24uZGltZW5zaW9ucy5maW5kKChkaW1lbnNpb24pID0+IHtcblx0XHRyZXR1cm4gZGltZW5zaW9uLnJvbGUgPT09IFwiQ2F0ZWdvcnlcIjtcblx0fSk7XG5cblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHgtQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMxLCBvciBmb3IgQXhpczIgaWYgbm90IGZvdW5kLCBvciBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHhNZWFzdXJlID0gYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB5LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMiwgb3Igc2Vjb25kIG1lYXN1cmUgZm9yIEF4aXMxIGlmIG5vdCBmb3VuZCwgb3IgZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMgaWYgbm90IGZvdW5kXG5cdGNvbnN0IHlNZWFzdXJlID0gYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdGNvbnN0IHJlcyA9IFtcblx0XHR7XG5cdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3hNZWFzdXJlXVxuXHRcdH0sXG5cdFx0e1xuXHRcdFx0dWlkOiBcInZhbHVlQXhpczJcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbeU1lYXN1cmVdXG5cdFx0fVxuXHRdO1xuXG5cdGlmIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlID09PSBcImJ1YmJsZVwiKSB7XG5cdFx0Ly8gTWVhc3VyZSBmb3IgdGhlIHNpemUgb2YgdGhlIGJ1YmJsZTogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczMsIG9yIHJlbWFpbmluZyBtZWFzdXJlIGZvciBBeGlzMS9BeGlzMiBpZiBub3QgZm91bmRcblx0XHRjb25zdCBzaXplTWVhc3VyZSA9IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJidWJibGVXaWR0aFwiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaXplTWVhc3VyZV1cblx0XHR9KTtcblx0fVxuXG5cdC8vIENvbG9yIChvcHRpb25hbClcblx0aWYgKHNlcmllc0RpbWVuc2lvbnMubGVuZ3RoKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0dmFsdWVzOiBzZXJpZXNEaW1lbnNpb25zXG5cdFx0fSk7XG5cdH1cblx0Ly8gU2hhcGUgKG9wdGlvbmFsKVxuXHRpZiAoc2hhcGVEaW1lbnNpb24pIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwic2hhcGVcIixcblx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHR2YWx1ZXM6IFtzaGFwZURpbWVuc2lvbi5sYWJlbF1cblx0XHR9KTtcblx0fVxuXHRyZXR1cm4gcmVzO1xufVxuXG5mdW5jdGlvbiBnZXRDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGxldCByZXM6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W107XG5cblx0c3dpdGNoIChjaGFydERlZmluaXRpb24uY2hhcnRUeXBlKSB7XG5cdFx0Y2FzZSBcIkRvbnV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwic2l6ZVwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMpXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRjYXNlIFwic2NhdHRlclwiOlxuXHRcdFx0cmVzID0gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uKTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInZlcnRpY2FsX2J1bGxldFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImFjdHVhbFZhbHVlc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZCwgXCJBeGlzMVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJ0YXJnZXRWYWx1ZXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFt1bmRlZmluZWQsIFwiQ2F0ZWdvcnlcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdFx0XHR0eXBlOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdH1cblxuXHRyZXR1cm4gcmVzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBnZXROYXZpZ2F0aW9uUGFyYW1ldGVycyhcblx0bmF2SW5mbzogTmF2aWdhdGlvbkluZm8sXG5cdG9TaGVsbFNlcnZpY2U6IElTaGVsbFNlcnZpY2VzXG4pOiBQcm9taXNlPHsgc2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7IGFjdGlvbj86IHN0cmluZzsgb3V0Ym91bmQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAobmF2SW5mby5zZW1hbnRpY09iamVjdCkge1xuXHRcdGlmIChuYXZJbmZvLmFjdGlvbikge1xuXHRcdFx0Ly8gQWN0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkOiBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldExpbmtzKFt7IHNlbWFudGljT2JqZWN0OiBuYXZJbmZvLnNlbWFudGljT2JqZWN0LCBhY3Rpb246IG5hdkluZm8uYWN0aW9uIH1dKS50aGVuKChhTGlua3MpID0+IHtcblx0XHRcdFx0cmV0dXJuIGFMaW5rcy5sZW5ndGggJiYgYUxpbmtzWzBdLmxlbmd0aCA/IHsgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfSA6IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSBnZXQgdGhlIHByaW1hcnkgaW50ZW50IGZyb20gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRQcmltYXJ5SW50ZW50KG5hdkluZm8uc2VtYW50aWNPYmplY3QpLnRoZW4oKG9MaW5rKSA9PiB7XG5cdFx0XHRcdGlmICghb0xpbmspIHtcblx0XHRcdFx0XHQvLyBObyBwcmltYXJ5IGludGVudC4uLlxuXHRcdFx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayB0aGF0IHRoZSBwcmltYXJ5IGludGVudCBpcyBub3QgcGFydCBvZiB0aGUgdW5hdmFpbGFibGUgYWN0aW9uc1xuXHRcdFx0XHRjb25zdCBvSW5mbyA9IG9TaGVsbFNlcnZpY2UucGFyc2VTaGVsbEhhc2gob0xpbmsuaW50ZW50KTtcblx0XHRcdFx0cmV0dXJuIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zICYmIG5hdkluZm8udW5hdmFpbGFibGVBY3Rpb25zLmluY2x1ZGVzKG9JbmZvLmFjdGlvbilcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogeyBzZW1hbnRpY09iamVjdDogb0luZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogb0luZm8uYWN0aW9uIH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT3V0Ym91bmQgbmF2aWdhdGlvbiBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0cmV0dXJuIG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uID8gUHJvbWlzZS5yZXNvbHZlKHsgb3V0Ym91bmQ6IG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uIH0pIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBtYW5hZ2luZyB0aGUgS1BJcyBpbiBhbiBhbmFseXRpY2FsIGxpc3QgcGFnZS5cbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqIEBzaW5jZSAxLjkzLjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuS1BJTWFuYWdlbWVudFwiKVxuY2xhc3MgS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJpdmF0ZSBiYXNlITogUGFnZUNvbnRyb2xsZXI7XG5cblx0cHJvdGVjdGVkIGFLUElEZWZpbml0aW9ucz86IEtQSURlZmluaXRpb25bXTtcblxuXHRwcm90ZWN0ZWQgb0NhcmQhOiBDYXJkO1xuXG5cdHByb3RlY3RlZCBvUG9wb3ZlciE6IFBvcG92ZXI7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjYXJkIG1hbmlmZXN0IGZvciBhIEtQSSBkZWZpbml0aW9uIGFuZCBzdG9yZXMgaXQgaW4gYSBKU09OIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgS1BJIGRlZmluaXRpb25cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCBpbiB3aGljaCB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBzdG9yZWRcblx0ICovXG5cdHByb3RlY3RlZCBpbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IG9DYXJkTWFuaWZlc3Q6IENhcmRNYW5pZmVzdDxQYXJ0aWFsPENoYXJ0Q2FyZENvbnRlbnQ+PiA9IHtcblx0XHRcdFwic2FwLmFwcFwiOiB7XG5cdFx0XHRcdGlkOiBcInNhcC5mZS5LUElDYXJkXCIsXG5cdFx0XHRcdHR5cGU6IFwiY2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAudWlcIjoge1xuXHRcdFx0XHR0ZWNobm9sb2d5OiBcIlVJNVwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAuY2FyZFwiOiB7XG5cdFx0XHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0anNvbjoge31cblx0XHRcdFx0fSxcblx0XHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJOdW1lcmljXCIsXG5cdFx0XHRcdFx0dGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRpdGxlLFxuXHRcdFx0XHRcdHN1YlRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR1bml0T2ZNZWFzdXJlbWVudDogXCJ7bWFpblVuaXR9XCIsXG5cdFx0XHRcdFx0bWFpbkluZGljYXRvcjoge1xuXHRcdFx0XHRcdFx0bnVtYmVyOiBcInttYWluVmFsdWVOb1NjYWxlfVwiLFxuXHRcdFx0XHRcdFx0dW5pdDogXCJ7bWFpblZhbHVlU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHRzdGF0ZTogXCJ7bWFpblN0YXRlfVwiLFxuXHRcdFx0XHRcdFx0dHJlbmQ6IFwie3RyZW5kfVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0bWluSGVpZ2h0OiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0Y2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRwbG90QXJlYToge30sXG5cdFx0XHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwibGVmdFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIi9jaGFydERhdGFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBBZGQgc2lkZSBpbmRpY2F0b3JzIGluIHRoZSBjYXJkIGhlYWRlciBpZiBhIHRhcmdldCBpcyBkZWZpbmVkIGZvciB0aGUgS1BJXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzQnVuZGxlID0gTGlicmFyeS5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb3JlXCIpITtcblx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuc2lkZUluZGljYXRvcnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX1RBUkdFVFwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie3RhcmdldE51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcInt0YXJnZXRVbml0fVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX0RFVklBVElPTlwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie2RldmlhdGlvbk51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcIiVcIlxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdC8vIERldGFpbHMgb2YgdGhlIGNhcmQ6IGZpbHRlciBkZXNjcmlwdGlvbnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLmZvckVhY2goKGZpbHRlckRlZmluaXRpb24pID0+IHtcblx0XHRcdFx0Y29uc3QgZGVzYyA9IGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb24pO1xuXHRcdFx0XHRpZiAoZGVzYykge1xuXHRcdFx0XHRcdGFEZXNjcmlwdGlvbnMucHVzaChkZXNjKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGlmIChhRGVzY3JpcHRpb25zLmxlbmd0aCkge1xuXHRcdFx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uaGVhZGVyLmRldGFpbHMgPSBhRGVzY3JpcHRpb25zLmpvaW4oXCIsIFwiKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDaGFydCBzZXR0aW5nczogdHlwZSwgdGl0bGUsIGRpbWVuc2lvbnMgYW5kIG1lYXN1cmVzIGluIHRoZSBtYW5pZmVzdFxuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0VHlwZSA9IGtwaURlZmluaXRpb24uY2hhcnQuY2hhcnRUeXBlO1xuXHRcdHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhrcGlEZWZpbml0aW9uLmNoYXJ0LCBvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMpO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0UHJvcGVydGllcy50aXRsZS50ZXh0ID0gZm9ybWF0Q2hhcnRUaXRsZShrcGlEZWZpbml0aW9uKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5kaW1lbnNpb25zID0ga3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLm1hcCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBsYWJlbDogZGltZW5zaW9uLmxhYmVsLCB2YWx1ZTogYHske2RpbWVuc2lvbi5uYW1lfX1gIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQubWVhc3VyZXMgPSBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLm1hcCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IG1lYXN1cmUubGFiZWwsIHZhbHVlOiBgeyR7bWVhc3VyZS5uYW1lfX1gIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZmVlZHMgPSBnZXRDaGFydEZlZWRzKGtwaURlZmluaXRpb24uY2hhcnQpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfWAsIHtcblx0XHRcdG1hbmlmZXN0OiBvQ2FyZE1hbmlmZXN0XG5cdFx0fSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgYXN5bmMgaW5pdE5hdmlnYXRpb25JbmZvKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsLFxuXHRcdG9TaGVsbFNlcnZpY2U6IElTaGVsbFNlcnZpY2VzXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEFkZCBuYXZpZ2F0aW9uXG5cdFx0aWYgKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbiwgb1NoZWxsU2VydmljZSkudGhlbigob05hdkluZm8pID0+IHtcblx0XHRcdFx0aWYgKG9OYXZJbmZvKSB7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9oZWFkZXIvYWN0aW9uc2AsIFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG9OYXZJbmZvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25Jbml0KCk6IHZvaWQge1xuXHRcdHRoaXMuYUtQSURlZmluaXRpb25zID0gKHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikuX2dldFBhZ2VNb2RlbCgpPy5nZXRQcm9wZXJ0eShcIi9rcGlEZWZpbml0aW9uc1wiKTtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcikuZ2V0QXBwQ29tcG9uZW50KCk7XG5cblx0XHRcdC8vIENyZWF0ZSBhIEpTT04gbW9kZWwgdG8gc3RvcmUgS1BJIGRhdGFcblx0XHRcdGNvbnN0IG9LUElNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRcdG9WaWV3LnNldE1vZGVsKG9LUElNb2RlbCwgXCJrcGlNb2RlbFwiKTtcblxuXHRcdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMuZm9yRWFjaCgoa3BpRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHQvLyBXZSBvbmx5IG5lZWQgdG8gd29ycnkgYWJvdXQgYW5hbHl0aWNhbCBLUEkgZGVmaW5pdGlvblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi50eXBlID09PSBcIkFuYWx5dGljYWxcIikge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSB0aGUgbWFuaWZlc3QgZm9yIHRoZSBLUEkgY2FyZCBhbmQgc3RvcmUgaXQgaW4gdGhlIEtQSSBtb2RlbFxuXHRcdFx0XHRcdHRoaXMuaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdFx0Ly8gU2V0IHRoZSBuYXZpZ2F0aW9uIGluZm9ybWF0aW9uIGluIHRoZSBtYW5pZmVzdFxuXHRcdFx0XHRcdHRoaXMuaW5pdE5hdmlnYXRpb25JbmZvKGtwaURlZmluaXRpb24sIG9LUElNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkpLmNhdGNoKGZ1bmN0aW9uIChlcnI6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHQvLyBMb2FkIHRhZyBkYXRhIGZvciB0aGUgS1BJXG5cdFx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvQXBwQ29tcG9uZW50LmdldE1vZGVsKCksIG9LUElNb2RlbCkuY2F0Y2goZnVuY3Rpb24gKGVycjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0QG1ldGhvZE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDtcblxuXHRcdGlmIChvS1BJTW9kZWwpIHtcblx0XHRcdG9LUElNb2RlbC5kZXN0cm95KCk7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogIWlzUGVyY2VudGFnZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlYCwga3BpVmFsdWUpO1xuXG5cdFx0Ly8gVmFsdWUgd2l0aG91dCBhIHNjYWxlXG5cdFx0Y29uc3Qga3BpVmFsdWVVbnNjYWxlZCA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDIsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2UsXG5cdFx0XHRcdGdyb3VwaW5nRW5hYmxlZDogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRgLCBrcGlWYWx1ZVVuc2NhbGVkKTtcblxuXHRcdC8vIFZhbHVlIGZvcm1hdHRlZCB3aXRoIHRoZSBzY2FsZSBvbWl0dGVkXG5cdFx0Y29uc3Qga3BpVmFsdWVOb1NjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVTY2FsZWAsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Vbml0YCwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgY3JpdGljYWxpdHlWYWx1ZSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWUgIT0gbnVsbCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSAhPSBudWxsKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBjYWxjdWxhdGlvblxuXHRcdFx0c3dpdGNoIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1RhcmdldFwiOlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihyYXdWYWx1ZSwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWluaW1pemVcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIGNyaXRpY2FsaXR5VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlYCxcblx0XHRcdFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGVbY3JpdGljYWxpdHlWYWx1ZV0gfHwgXCJOb25lXCJcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRgLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlID09PSB1bmRlZmluZWQgJiYga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm47IC8vIE5vIHRhcmdldCBzZXQgZm9yIHRoZSBLUElcblx0XHR9XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXHRcdGNvbnN0IGN1cnJlbnRMb2NhbGUgPSBuZXcgTG9jYWxlKExvY2FsaXphdGlvbi5nZXRMYW5ndWFnZSgpKTtcblxuXHRcdGxldCB0YXJnZXRSYXdWYWx1ZTogbnVtYmVyO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBcIlwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGRldmlhdGlvblJhd1ZhbHVlID0gdGFyZ2V0UmF3VmFsdWUgIT09IDAgPyAoKHJhd1ZhbHVlIC0gdGFyZ2V0UmF3VmFsdWUpIC8gdGFyZ2V0UmF3VmFsdWUpICogMTAwIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9ybWF0dGluZ1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQubnVtYmVyT2ZGcmFjdGlvbmFsRGlnaXRzID8/IDEsIC8vIFVzZSB0aGUgc2FtZSBwcmVjaXNpb24gYXMgdGhlIG1haW4gdmFsdWVcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cdFx0Y29uc3QgdGFyZ2V0U2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB0YXJnZXRWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0VW5pdGAsIHRhcmdldFNjYWxlKTtcblxuXHRcdGlmIChkZXZpYXRpb25SYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZXZpYXRpb25WYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0XHQpLmZvcm1hdChkZXZpYXRpb25SYXdWYWx1ZSk7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9kZXZpYXRpb25OdW1iZXJgLCBkZXZpYXRpb25WYWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIFwiTi9BXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0YWcgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0gb01haW5Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkXG5cdCAqIEBwYXJhbSBsb2FkRnVsbCBJZiBub3QgdHJ1ZSwgbG9hZHMgb25seSBkYXRhIGZvciB0aGUgS1BJIHRhZ1xuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgbG9hZEtQSVRhZ0RhdGEoXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b01haW5Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbCxcblx0XHRsb2FkRnVsbD86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dFtdPiB7XG5cdFx0Ly8gSWYgbG9hZEZ1bGw9ZmFsc2UsIHRoZW4gd2UncmUganVzdCBsb2FkaW5nIGRhdGEgZm9yIHRoZSB0YWcgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Mb25nUnVubmVyc1wiIGdyb3VwSURcblx0XHQvLyBJZiBsb2FkRnVsbD10cnVlLCB3ZSdyZSBsb2FkaW5nIGRhdGEgZm9yIHRoZSB3aG9sZSBLUEkgKHRhZyArIGNhcmQpIGFuZCB3ZSB1c2UgdGhlIFwiJGF1dG8uV29ya2Vyc1wiIGdyb3VwSURcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBsb2FkRnVsbFxuXHRcdFx0PyBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLldvcmtlcnNcIiB9KVxuXHRcdFx0OiBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDEpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKTogdm9pZCA9PiB7XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHRcdFx0PyBhQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmICFyYXdVbml0KSB7XG5cdFx0XHRcdFx0Ly8gQSB1bml0L2N1cnJlbmN5IGlzIGRlZmluZWQsIGJ1dCBpdHMgdmFsdWUgaXMgdW5kZWZpbmVkIC0tPiBtdWx0aS11bml0IHNpdHVhdGlvblxuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZWAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZGAsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwgXCJcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eWAsIE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZWAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRgLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybjtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjYXJkIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyBUaGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgbG9hZEtQSUNhcmREYXRhKFxuXHRcdGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLFxuXHRcdG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWxcblx0KTogUHJvbWlzZTx2b2lkIHwgQ29udGV4dFtdPiB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01haW5Nb2RlbC5iaW5kTGlzdChrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiXG5cdFx0fSk7XG5cdFx0Y29uc3Qgb0dyb3VwOiBSZWNvcmQ8c3RyaW5nLCB7IGFkZGl0aW9uYWxseT86IHN0cmluZ1tdIH0+ID0ge307XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLmZvckVhY2goKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0b0dyb3VwW2RpbWVuc2lvbi5uYW1lXSA9IHt9O1xuXHRcdFx0aWYgKGRpbWVuc2lvbi50ZXh0KSB7XG5cdFx0XHRcdC8vIEFsc28gbG9hZCB0aGUgdGV4dCBwcm9wZXJ0eSBpZiB0aGVyZSdzIG9uZSAoYXMgYW4gYWRkaXRpb25hbCBwcm9wZXJ0eSlcblx0XHRcdFx0b0dyb3VwW2RpbWVuc2lvbi5uYW1lXS5hZGRpdGlvbmFsbHkgPSBbZGltZW5zaW9uLnRleHRdO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaCgobWVhc3VyZSkgPT4ge1xuXHRcdFx0b0FnZ3JlZ2F0ZVttZWFzdXJlLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHtcblx0XHRcdGdyb3VwOiBvR3JvdXAsXG5cdFx0XHRhZ2dyZWdhdGU6IG9BZ2dyZWdhdGVcblx0XHR9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcigoZmlsdGVyKSA9PiB7XG5cdFx0XHRcdHJldHVybiBmaWx0ZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdH0pIGFzIEZpbHRlcltdO1xuXHRcdFx0b0xpc3RCaW5kaW5nLmZpbHRlcihhRmlsdGVycyk7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydGluZ1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlcikge1xuXHRcdFx0b0xpc3RCaW5kaW5nLnNvcnQoXG5cdFx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQuc29ydE9yZGVyLm1hcCgoc29ydEluZm8pID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFNvcnRlcihzb3J0SW5mby5uYW1lLCBzb3J0SW5mby5kZXNjZW5kaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxsQ29udGV4dHMgPSBhd2FpdCBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIGtwaURlZmluaXRpb24uY2hhcnQubWF4SXRlbXMpO1xuXHRcdGNvbnN0IGNoYXJ0RGF0YSA9IGFsbENvbnRleHRzLm1hcCgob0NvbnRleHQpID0+IHtcblx0XHRcdGNvbnN0IG9EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLmZvckVhY2goKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHQvLyBXZSBoYXZlIHRvIGZvcm1hdCB0aGUgZGltZW5zaW9uIHZhbHVlIGhlcmUsIGFzIHRoZSBjYXJkIGRvZXNuJ3Qgc3VwcG9ydCBjYWxjdWxhdGVkIGJpbmRpbmdzIHlldFxuXHRcdFx0XHRzd2l0Y2ggKGRpbWVuc2lvbi50ZXh0QXJyYW5nZW1lbnQpIHtcblx0XHRcdFx0XHRjYXNlIFwiVGV4dE9ubHlcIjpcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi50ZXh0ISk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgXCJUZXh0TGFzdFwiOlxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhcblx0XHRcdFx0XHRcdFx0b0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpLFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRjYXNlIHVuZGVmaW5lZDpcblx0XHRcdFx0XHRcdC8vIE5vIHRleHQgYXJyYW5nZW1lbnRcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdC8vRGVmYXVsdCBzaG91bGQgYmUgVGV4dEZpcnN0IGlmIHRoZXJlIGlzIGEgVGV4dCBhbm5vdGF0aW9uIGFuZCBuZWl0aGVyIFRleHRPbmx5IG5vciBUZXh0TGFzdCBhcmUgc2V0XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24udGV4dCEpLFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRcdG9EYXRhW21lYXN1cmUubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShtZWFzdXJlLm5hbWUpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiBvRGF0YTtcblx0XHR9KTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2NoYXJ0RGF0YWAsIGNoYXJ0RGF0YSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcG9wb3ZlciB0byBkaXNwbGF5IHRoZSBLUEkgY2FyZFxuXHQgKiBUaGUgcG9wb3ZlciBhbmQgdGhlIGNvbnRhaW5lZCBjYXJkIGZvciB0aGUgS1BJcyBhcmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuXG5cdCAqIFRoZSBwb3BvdmVyIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBLUElzLCBzbyBpdCdzIGNyZWF0ZWQgb25seSBvbmNlLlxuXHQgKiBAcGFyYW0gb0tQSVRhZyBUaGUgdGFnIHRoYXQgdHJpZ2dlcmVkIHRoZSBwb3BvdmVyIG9wZW5pbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZWQgcG9wb3ZlciBhcyBhIHByb21pc2UuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgYXN5bmMgZ2V0UG9wb3ZlcihvS1BJVGFnOiBHZW5lcmljVGFnKTogUHJvbWlzZTxQb3BvdmVyPiB7XG5cdFx0aWYgKCF0aGlzLm9Qb3BvdmVyKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRMaWJyYXJ5LmxvYWQoeyBuYW1lOiBcInNhcC91aS9pbnRlZ3JhdGlvblwiIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoLi4ucGFyYW1zOiB1bmtub3duW10pID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgQ2FyZENsYXNzID0gcGFyYW1zWzBdIGFzIHR5cGVvZiBDYXJkVHlwZTtcblx0XHRcdFx0XHRcdFx0Y29uc3QgSG9zdCA9IHBhcmFtc1sxXSBhcyB0eXBlb2YgSG9zdFR5cGU7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IG9Ib3N0ID0gbmV3IEhvc3QoKTtcblxuXHRcdFx0XHRcdFx0XHRvSG9zdC5hdHRhY2hBY3Rpb24oKG9FdmVudDogSG9zdCRBY3Rpb25FdmVudCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUeXBlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInR5cGVcIik7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwYXJhbWV0ZXJzXCIpIGFzIHtcblx0XHRcdFx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0Pzogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRvdXRib3VuZDogc3RyaW5nO1xuXHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0XHRpZiAoc1R5cGUgPT09IFwiTmF2aWdhdGlvblwiKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAob1BhcmFtcy5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZShvUGFyYW1zLnNlbWFudGljT2JqZWN0LCBvUGFyYW1zLmFjdGlvbik7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmJhc2UuX2ludGVudEJhc2VkTmF2aWdhdGlvbi5uYXZpZ2F0ZU91dGJvdW5kKG9QYXJhbXMub3V0Ym91bmQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZCA9IG5ldyBDYXJkQ2xhc3Moe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0IGFzIHVua25vd24gYXMgQ29udHJvbCk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vUG9wb3ZlciA9IG5ldyBQb3BvdmVyKFwia3BpLVBvcG92ZXJcIiwge1xuXHRcdFx0XHRcdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlbWVudDogXCJBdXRvXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogW3RoaXMub0NhcmRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdG9LUElUYWcuYWRkRGVwZW5kZW50KHRoaXMub1BvcG92ZXIpOyAvLyBUaGUgZmlyc3QgY2xpY2tlZCB0YWcgZ2V0cyB0aGUgcG9wb3ZlciBhcyBkZXBlbmRlbnRcblxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKCkge1xuXHRcdFx0XHRcdFx0cmVqZWN0KCk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLm9Qb3BvdmVyKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYXN5bmMgb25LUElQcmVzc2VkKG9LUElUYWc6IEdlbmVyaWNUYWcsIGtwaUlEOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qga3BpRGVmaW5pdGlvbiA9IHRoaXMuYUtQSURlZmluaXRpb25zLmZpbmQoZnVuY3Rpb24gKG9EZWYpIHtcblx0XHRcdFx0cmV0dXJuIChvRGVmIGFzIEFuYWx5dGljYWxLUElEZWZpbml0aW9uKS5pZCA9PT0ga3BpSUQ7XG5cdFx0XHR9KSBhcyBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiB8IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24pIHtcblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbDtcblxuXHRcdFx0XHRcdGNvbnN0IHBvcG92ZXIgPSBhd2FpdCB0aGlzLmdldFBvcG92ZXIob0tQSVRhZyk7XG5cdFx0XHRcdFx0Ly8gU2V0IHRoZSBwb3BvdmVyIGFzIG1vZGFsIHdoaWxlIHRoZSBjYXJkIGlzIGxvYWRpbmcgKHNvIHRoYXQgY2FyZCByZW5kZXJpbmcgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCB0aGUgcG9wb3ZlciBhbmQgY2xvc2UgaXQpXG5cdFx0XHRcdFx0cG9wb3Zlci5zZXRNb2RhbCh0cnVlKTtcblxuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRQcmV2aWV3TW9kZShcIkFic3RyYWN0XCIpOyAvLyBEaXNwbGF5IHBsYWNlaG9sZGVycyBpbiB0aGUgY2FyZCB1bnRpbCBkYXRhIGlzIGxvYWRlZFxuXHRcdFx0XHRcdHBvcG92ZXIub3BlbkJ5KG9LUElUYWcsIGZhbHNlKTsgLy8gT3BlbiB0aGUgcG9wb3ZlciBpbW1lZGlhdGVseVxuXG5cdFx0XHRcdFx0Y29uc3QgcHJvbWlzZXMgPSBbXG5cdFx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsLCB0cnVlKSxcblx0XHRcdFx0XHRcdHRoaXMubG9hZEtQSUNhcmREYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsKVxuXHRcdFx0XHRcdF07XG5cblx0XHRcdFx0XHRhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5hdHRhY2hFdmVudE9uY2UoXCJzdGF0ZUNoYW5nZWRcIiwgKCkgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gT25jZSB0aGUgY2FyZCBoYXMgYmVlbiByZW5kZXJlZCwgc2V0IHRoZSBmb2N1cyBwcm9wZXJseSBhbmQgc2V0IHRoZSBwb3BvdmVyIGFzIG5vbi1tb2RhbFxuXHRcdFx0XHRcdFx0KHRoaXMub0NhcmQuZ2V0Rm9jdXNEb21SZWYoKSBhcyBIVE1MRWxlbWVudCk/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRwb3BvdmVyLnNldE1vZGFsKGZhbHNlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldE1hbmlmZXN0KG9LUElNb2RlbC5nZXRQcm9wZXJ0eShgLyR7a3BpSUR9L21hbmlmZXN0YCkpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQucmVmcmVzaCgpO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0UHJldmlld01vZGUoXCJPZmZcIik7IC8vIERpc3BsYXkgcmVhbCBkYXRhIGluIHRoZSBjYXJkXG5cdFx0XHRcdH0gY2F0Y2ggKGVycikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIgYXMgc3RyaW5nKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztFQWlDQSxNQUFNQSwwQkFBdUQsR0FBRztJQUMvRCxHQUFHLEVBQUVDLFdBQVcsQ0FBQ0MsS0FBSztJQUN0QixHQUFHLEVBQUVELFdBQVcsQ0FBQ0UsT0FBTztJQUN4QixHQUFHLEVBQUVGLFdBQVcsQ0FBQ0csT0FBTztJQUN4QixHQUFHLEVBQUVILFdBQVcsQ0FBQ0k7RUFDbEIsQ0FBQztFQUVELE1BQU1DLHlCQUFzRCxHQUFHO0lBQzlE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
1053
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eSIsIk1lc3NhZ2VUeXBlIiwiRXJyb3IiLCJXYXJuaW5nIiwiU3VjY2VzcyIsIkluZm9ybWF0aW9uIiwiVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZSIsIk5vbmUiLCJtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbiIsImtwaVZhbHVlIiwiYVRocmVzaG9sZHMiLCJjcml0aWNhbGl0eVByb3BlcnR5IiwidW5kZWZpbmVkIiwibWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbiIsIm1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24iLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlIiwidHJlbmRWYWx1ZSIsImRldmlhdGlvbkluZGljYXRvciIsImRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbiIsInJlZmVyZW5jZVZhbHVlIiwiaXNSZWxhdGl2ZSIsImNvbXBWYWx1ZSIsImNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uIiwiZmlsdGVyRGVmaW5pdGlvbiIsInJhbmdlcyIsImxlbmd0aCIsIkZpbHRlciIsInByb3BlcnR5UGF0aCIsIm9wZXJhdG9yIiwicmFuZ2VMb3ciLCJyYW5nZUhpZ2giLCJhUmFuZ2VGaWx0ZXJzIiwibWFwIiwicmFuZ2UiLCJmaWx0ZXJzIiwiYW5kIiwiZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24iLCJjdXJyZW50TG9jYWxlIiwiTG9jYWxlIiwiTG9jYWxpemF0aW9uIiwiZ2V0TGFuZ3VhZ2UiLCJyZXNCdW5kbGUiLCJMaWJyYXJ5IiwiZ2V0UmVzb3VyY2VCdW5kbGVGb3IiLCJkYXRlRm9ybWF0IiwiRGF0ZUZvcm1hdCIsImdldERhdGVJbnN0YW5jZSIsInN0eWxlIiwiZm9ybWF0UmFuZ2UiLCJ2YWx1ZUxvdyIsInByb3BlcnR5VHlwZSIsImluZGV4T2YiLCJmb3JtYXQiLCJEYXRlIiwidmFsdWVIaWdoIiwiZ2V0VGV4dCIsImpvaW4iLCJmb3JtYXRDaGFydFRpdGxlIiwia3BpRGVmIiwiZm9ybWF0TGlzdCIsIml0ZW1zIiwibGFiZWwiLCJyZXMiLCJJIiwiY2hhcnQiLCJ0aXRsZSIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ2aXNpYmxlIiwidmFsdWVBeGlzIiwiZm9ybWF0U3RyaW5nIiwicGxvdEFyZWEiLCJkYXRhTGFiZWwiLCJ0eXBlIiwidmFsdWVBeGlzMiIsImxlZ2VuZEdyb3VwIiwibGF5b3V0IiwicG9zaXRpb24iLCJhbGlnbm1lbnQiLCJzaXplTGVnZW5kIiwiZmlsdGVyTWFwIiwiYU9iamVjdHMiLCJhUm9sZXMiLCJmaWx0ZXIiLCJkaW1lbnNpb24iLCJpbmNsdWRlcyIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwidWlkIiwidmFsdWVzIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsIm1ldGhvZE92ZXJyaWRlIiwiX2RlYzMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJjYWxsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJpbml0Q2FyZE1hbmlmZXN0Iiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJpbml0TmF2aWdhdGlvbkluZm8iLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwib25Jbml0IiwiYUtQSURlZmluaXRpb25zIiwiZ2V0VmlldyIsImdldENvbnRyb2xsZXIiLCJfZ2V0UGFnZU1vZGVsIiwiZ2V0UHJvcGVydHkiLCJvVmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRBcHBDb21wb25lbnQiLCJKU09OTW9kZWwiLCJiYXNlIiwiZ2V0T3duZXJDb21wb25lbnQiLCJzZXRNb2RlbCIsImdldFNoZWxsU2VydmljZXMiLCJjYXRjaCIsImVyciIsIkxvZyIsImVycm9yIiwibG9hZEtQSVRhZ0RhdGEiLCJnZXRNb2RlbCIsIm9uRXhpdCIsImRlc3Ryb3kiLCJ1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5Iiwia3BpQ29udGV4dCIsInJhd1VuaXQiLCJpc1BhdGgiLCJpc1BlcmNlbnRhZ2UiLCJpc0N1cnJlbmN5IiwicmF3VmFsdWUiLCJOdW1iZXIiLCJwYXJzZUZsb2F0IiwiTnVtYmVyRm9ybWF0IiwiZ2V0RmxvYXRJbnN0YW5jZSIsIm1pbkZyYWN0aW9uRGlnaXRzIiwibWF4RnJhY3Rpb25EaWdpdHMiLCJudW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMiLCJzaG93U2NhbGUiLCJrcGlWYWx1ZVVuc2NhbGVkIiwiZ3JvdXBpbmdFbmFibGVkIiwia3BpVmFsdWVOb1NjYWxlIiwia3BpVmFsdWVTY2FsZSIsImRlY2ltYWxzIiwibWF4SW50ZWdlckRpZ2l0cyIsImtwaVVuaXQiLCJnZXRVbml0SW5zdGFuY2UiLCJzaG93TnVtYmVyIiwidXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkiLCJjcml0aWNhbGl0eVZhbHVlIiwiY3JpdGljYWxpdHlQYXRoIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSIsInVwZGF0ZURhdGFwb2ludFRyZW5kIiwidHJlbmRQYXRoIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgiLCJ0cmVuZFJlZmVyZW5jZVZhbHVlIiwidHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUiLCJ0cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzIiwidXBkYXRlVGFyZ2V0VmFsdWUiLCJ0YXJnZXRSYXdWYWx1ZSIsImRldmlhdGlvblJhd1ZhbHVlIiwidGFyZ2V0U2NhbGUiLCJkZXZpYXRpb25WYWx1ZSIsImdldEtQSUZpbHRlcnMiLCJtZXRhTW9kZWwiLCJNb2RlbEhlbHBlciIsImlzRHJhZnRTdXBwb3J0ZWQiLCJjb250ZXh0UGF0aCIsIkZpbHRlck9wZXJhdG9yIiwiRVEiLCJvTWFpbk1vZGVsIiwibG9hZEZ1bGwiLCJvTGlzdEJpbmRpbmciLCJiaW5kTGlzdCIsIiQkZ3JvdXBJZCIsIm9BZ2dyZWdhdGUiLCJzZXRBZ2dyZWdhdGlvbiIsImFnZ3JlZ2F0ZSIsImdldE1ldGFNb2RlbCIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsImxvYWRLUElDYXJkRGF0YSIsIm9Hcm91cCIsImFkZGl0aW9uYWxseSIsImdyb3VwIiwic29ydE9yZGVyIiwic29ydCIsInNvcnRJbmZvIiwiU29ydGVyIiwiZGVzY2VuZGluZyIsImFsbENvbnRleHRzIiwibWF4SXRlbXMiLCJjaGFydERhdGEiLCJvQ29udGV4dCIsIm9EYXRhIiwidGV4dEFycmFuZ2VtZW50IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0UG9wb3ZlciIsIm9LUElUYWciLCJfdGhpcyIsIm9Qb3BvdmVyIiwicmVqZWN0IiwibG9hZCIsInNhcCIsInVpIiwicmVxdWlyZSIsIl9sZW4iLCJhcmd1bWVudHMiLCJwYXJhbXMiLCJBcnJheSIsIl9rZXkiLCJDYXJkQ2xhc3MiLCJIb3N0Iiwib0hvc3QiLCJhdHRhY2hBY3Rpb24iLCJvRXZlbnQiLCJzVHlwZSIsImdldFBhcmFtZXRlciIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwib0NhcmQiLCJ3aWR0aCIsImhlaWdodCIsInNldEhvc3QiLCJQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZERlcGVuZGVudCIsIm9uS1BJUHJlc3NlZCIsImtwaUlEIiwib0RlZiIsIm9Nb2RlbCIsInBvcG92ZXIiLCJzZXRNb2RhbCIsInNldE1hbmlmZXN0Iiwic2V0UHJldmlld01vZGUiLCJvcGVuQnkiLCJwcm9taXNlcyIsImFsbCIsImF0dGFjaEV2ZW50T25jZSIsImdldEZvY3VzRG9tUmVmIiwiZm9jdXMiLCJyZWZyZXNoIiwiQ29udHJvbGxlckV4dGVuc2lvbiIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJPYmplY3QiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgTG9jYWxpemF0aW9uIGZyb20gXCJzYXAvYmFzZS9pMThuL0xvY2FsaXphdGlvblwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIG1ldGhvZE92ZXJyaWRlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQmFzZUNvbnRyb2xsZXIgZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIHtcblx0QW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdEtQSUNoYXJ0RGVmaW5pdGlvbixcblx0S1BJRGVmaW5pdGlvbixcblx0TmF2aWdhdGlvbkluZm9cbn0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0tQSVwiO1xuaW1wb3J0IHR5cGUgeyBGaWx0ZXJEZWZpbml0aW9uLCBSYW5nZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgSVNoZWxsU2VydmljZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvU2hlbGxTZXJ2aWNlc0ZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIEdlbmVyaWNUYWcgZnJvbSBcInNhcC9tL0dlbmVyaWNUYWdcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgTGlicmFyeSBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgTG9jYWxlIGZyb20gXCJzYXAvdWkvY29yZS9Mb2NhbGVcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IE51bWJlckZvcm1hdCBmcm9tIFwic2FwL3VpL2NvcmUvZm9ybWF0L051bWJlckZvcm1hdFwiO1xuaW1wb3J0IE1lc3NhZ2VUeXBlIGZyb20gXCJzYXAvdWkvY29yZS9tZXNzYWdlL01lc3NhZ2VUeXBlXCI7XG5pbXBvcnQgQ29udHJvbGxlckV4dGVuc2lvbiBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL0NvbnRyb2xsZXJFeHRlbnNpb25cIjtcbmltcG9ydCB0eXBlIEhvc3RUeXBlIGZyb20gXCJzYXAvdWkvaW50ZWdyYXRpb24vSG9zdFwiO1xuaW1wb3J0IHR5cGUgeyBIb3N0JEFjdGlvbkV2ZW50IH0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgQ2FyZCwgQ2FyZE1hbmlmZXN0LCBkZWZhdWx0IGFzIENhcmRUeXBlLCBDaGFydENhcmRDb250ZW50IH0gZnJvbSBcInNhcC91aS9pbnRlZ3JhdGlvbi93aWRnZXRzL0NhcmRcIjtcbmltcG9ydCBGaWx0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgU29ydGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvU29ydGVyXCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCIuLi9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5OiBSZWNvcmQ8c3RyaW5nLCBNZXNzYWdlVHlwZT4gPSB7XG5cdFwiMVwiOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XCIyXCI6IE1lc3NhZ2VUeXBlLldhcm5pbmcsXG5cdFwiM1wiOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcIjVcIjogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25cbn07XG5cbmNvbnN0IFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGU6IFJlY29yZDxNZXNzYWdlVHlwZSwgc3RyaW5nPiA9IHtcblx0RXJyb3I6IFwiRXJyb3JcIixcblx0V2FybmluZzogXCJDcml0aWNhbFwiLFxuXHRTdWNjZXNzOiBcIkdvb2RcIixcblx0SW5mb3JtYXRpb246IFwiTm9uZVwiLFxuXHROb25lOiBcIk5vbmVcIlxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ1RhcmdldCcuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbVRhcmdldENhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s1XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzVdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzRdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s0XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1szXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNaW5pbWl6ZScuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1swXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNYXhpbWl6ZScuXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWVdLlxuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlIGZyb20gYSB0cmVuZCB2YWx1ZS5cbiAqIEBwYXJhbSB0cmVuZFZhbHVlIFRoZSBjcml0aWNhbGl0eSB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSh0cmVuZFZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0c3dpdGNoICh0cmVuZFZhbHVlKSB7XG5cdFx0Y2FzZSAxOiAvLyBTdHJvbmdVcFxuXHRcdGNhc2UgXCIxXCI6XG5cdFx0Y2FzZSAyOiAvLyBVcFxuXHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgNDogLy8gRG93blxuXHRcdGNhc2UgXCI0XCI6XG5cdFx0Y2FzZSA1OiAvLyBTdHJvbmdEb3duXG5cdFx0Y2FzZSBcIjVcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciBmcm9tIGEgVHJlbmRDYWxjdWxhdGlvbi5cbiAqIEBwYXJhbSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSVxuICogQHBhcmFtIHJlZmVyZW5jZVZhbHVlIFRoZSByZWZlcmVuY2UgdmFsdWUgdG8gY29tcGFyZSB3aXRoXG4gKiBAcGFyYW0gaXNSZWxhdGl2ZSBUcnVlIGlzIHRoZSBjb21wYXJpc29uIGlzIHJlbGF0aXZlXG4gKiBAcGFyYW0gYVRocmVzaG9sZHMgQXJyYXkgb2YgdGhyZXNob2xkcyBbU3Ryb25nRG93bkRpZmZlcmVuY2UsIERvd25EaWZmZXJlbmNlLCBVcERpZmZlcmVuY2UsIFN0cm9uZ1VwRGlmZmVyZW5jZV1cbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdGtwaVZhbHVlOiBudW1iZXIsXG5cdHJlZmVyZW5jZVZhbHVlOiBudW1iZXIsXG5cdGlzUmVsYXRpdmU6IGJvb2xlYW4sXG5cdGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdGlmICghYVRocmVzaG9sZHMgfHwgKGlzUmVsYXRpdmUgJiYgIXJlZmVyZW5jZVZhbHVlKSkge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxuXG5cdGNvbnN0IGNvbXBWYWx1ZSA9IGlzUmVsYXRpdmUgPyAoa3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZSkgLyByZWZlcmVuY2VWYWx1ZSA6IGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Ly8gU3Ryb25nRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Ly8gRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Ly8gU3Ryb25nVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Ly8gVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFNpZGV3YXlzIC0tPiBOb25lXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gYSBmaWx0ZXIgZGVmaW5pdGlvbi5cbiAqIEBwYXJhbSBmaWx0ZXJEZWZpbml0aW9uIFRoZSBmaWx0ZXIgZGVmaW5pdGlvblxuICogQHJldHVybnMgUmV0dXJucyBhIHNhcC51aS5tb2RlbC5GaWx0ZXIgZnJvbSB0aGUgZGVmaW5pdGlvbiwgb3IgdW5kZWZpbmVkIGlmIHRoZSBkZWZpbml0aW9uIGlzIGVtcHR5IChubyByYW5nZXMpXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBGaWx0ZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDEpIHtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcihcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ub3BlcmF0b3IgYXMgRmlsdGVyT3BlcmF0b3IsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUxvdyxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlSGlnaFxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Y29uc3QgYVJhbmdlRmlsdGVycyA9IGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLm1hcCgocmFuZ2UpID0+IHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLCByYW5nZS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvciwgcmFuZ2UucmFuZ2VMb3csIHJhbmdlLnJhbmdlSGlnaCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogYVJhbmdlRmlsdGVycyxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRjb25zdCBkYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoeyBzdHlsZTogXCJtZWRpdW1cIiB9LCBjdXJyZW50TG9jYWxlKTtcblxuXHRmdW5jdGlvbiBmb3JtYXRSYW5nZShyYW5nZTogUmFuZ2VEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCB2YWx1ZUxvdyA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDBcblx0XHRcdFx0PyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUxvdykpXG5cdFx0XHRcdDogKHJhbmdlLnJhbmdlTG93IGFzIHN0cmluZyk7XG5cdFx0Y29uc3QgdmFsdWVIaWdoID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMCAmJiByYW5nZS5yYW5nZUhpZ2ggIT09IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlSGlnaCkpXG5cdFx0XHRcdDogcmFuZ2UucmFuZ2VIaWdoO1xuXG5cdFx0c3dpdGNoIChyYW5nZS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRcdHJldHVybiBgWyR7dmFsdWVMb3d9IC0gJHt2YWx1ZUhpZ2h9XWA7XG5cblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gYCoke3ZhbHVlTG93fSpgO1xuXG5cdFx0XHRjYXNlIFwiR0VcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjY1JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiR1RcIjpcblx0XHRcdFx0cmV0dXJuIGA+JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTEVcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjY0JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdFx0cmV0dXJuIGA8JHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTkJcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW2BbJHt2YWx1ZUxvd30gLSAke3ZhbHVlSGlnaH1dYF0pO1xuXG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdFx0cmV0dXJuIGBcXHUyMjYwJHt2YWx1ZUxvd31gO1xuXG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW2AqJHt2YWx1ZUxvd30qYF0pO1xuXG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZUxvdztcblx0XHR9XG5cdH1cblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBmb3JtYXRSYW5nZShmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIGAoJHtmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAoZm9ybWF0UmFuZ2UpLmpvaW4oXCIsXCIpfSlgO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbik6IHN0cmluZyB7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IExpYnJhcnkuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29yZVwiKSE7XG5cblx0ZnVuY3Rpb24gZm9ybWF0TGlzdChpdGVtczogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmcgfVtdKTogc3RyaW5nIHtcblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9IGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGl0ZW1zWzBdLmxhYmVsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgcmVzID0gaXRlbXNbMF0ubGFiZWw7XG5cdFx0XHRmb3IgKGxldCBJID0gMTsgSSA8IGl0ZW1zLmxlbmd0aCAtIDE7IEkrKykge1xuXHRcdFx0XHRyZXMgKz0gYCwgJHtpdGVtc1tJXS5sYWJlbH1gO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSVRFTVNMSVNUXCIsIFtyZXMsIGl0ZW1zW2l0ZW1zLmxlbmd0aCAtIDFdLmxhYmVsXSk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gSWYgdGhlIGNoYXJ0IGhhcyBhIHRpdGxlLCB1c2UgaXQuIE90aGVyd2lzZSwgY3JlYXRlIGEgdGl0bGUgZnJvbSB0aGUgZGltZW5zaW9ucyBhbmQgbWVhc3VyZXNcblx0cmV0dXJuIChcblx0XHRrcGlEZWYuY2hhcnQudGl0bGUgPz9cblx0XHRyZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9DSEFSVFRJVExFXCIsIFtmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5tZWFzdXJlcyksIGZvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0LmRpbWVuc2lvbnMpXSlcblx0KTtcbn1cblxuZnVuY3Rpb24gdXBkYXRlQ2hhcnRMYWJlbFNldHRpbmdzKFxuXHRjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbixcblx0b0NoYXJ0UHJvcGVydGllczoge1xuXHRcdGNhdGVnb3J5QXhpczogeyB0aXRsZTogeyB2aXNpYmxlOiBib29sZWFuIH0gfTtcblx0XHRzaXplTGVnZW5kOiB7IHZpc2libGU6IGJvb2xlYW4gfTtcblx0XHRsZWdlbmRHcm91cDogeyBsYXlvdXQ6IHsgcG9zaXRpb246IHN0cmluZzsgYWxpZ25tZW50OiBzdHJpbmcgfSB9O1xuXHRcdHZhbHVlQXhpczoge1xuXHRcdFx0dGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0dmFsdWVBeGlzMjoge1xuXHRcdFx0dGl0bGU6IHsgdmlzaWJsZTogYm9vbGVhbiB9O1xuXHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBzdHJpbmc7XG5cdFx0XHR9O1xuXHRcdH07XG5cdFx0cGxvdEFyZWE6IHtcblx0XHRcdGRhdGFMYWJlbDoge307XG5cdFx0fTtcblx0fVxuKTogdm9pZCB7XG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0Ly8gU2hvdyBkYXRhIGxhYmVscywgZG8gbm90IHNob3cgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcInZhbHVlXCIsXG5cdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0X01GRDJcIlxuXHRcdFx0fTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdFx0Ly8gU2hvdyBheGlzIHRpdGxlLCBidWJibGUgc2l6ZSBsZWdlbmQsIGRvIG5vdCBzaG93IGRhdGEgbGFiZWxzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmxlZ2VuZEdyb3VwID0ge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwidG9wTGVmdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnNpemVMZWdlbmQgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdH1cbn1cbmZ1bmN0aW9uIGZpbHRlck1hcChhT2JqZWN0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHJvbGU/OiBzdHJpbmcgfVtdLCBhUm9sZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuXHRpZiAoYVJvbGVzICYmIGFSb2xlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gYU9iamVjdHNcblx0XHRcdC5maWx0ZXIoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYVJvbGVzLmluY2x1ZGVzKGRpbWVuc2lvbi5yb2xlKTtcblx0XHRcdH0pXG5cdFx0XHQubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhT2JqZWN0cy5tYXAoKGRpbWVuc2lvbikgPT4ge1xuXHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRjb25zdCBheGlzMU1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczFcIl0pO1xuXHRjb25zdCBheGlzMk1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pO1xuXHRjb25zdCBheGlzM01lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczNcIl0pO1xuXHRjb25zdCBvdGhlck1lYXN1cmVzID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW3VuZGVmaW5lZF0pO1xuXHRjb25zdCBzZXJpZXNEaW1lbnNpb25zID0gZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbXCJTZXJpZXNcIl0pO1xuXG5cdC8vIEdldCB0aGUgZmlyc3QgZGltZW5zaW9uIHdpdGggcm9sZSBcIkNhdGVnb3J5XCIgZm9yIHRoZSBzaGFwZVxuXHRjb25zdCBzaGFwZURpbWVuc2lvbiA9IGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLmZpbmQoKGRpbWVuc2lvbikgPT4ge1xuXHRcdHJldHVybiBkaW1lbnNpb24ucm9sZSA9PT0gXCJDYXRlZ29yeVwiO1xuXHR9KTtcblxuXHQvLyBNZWFzdXJlIGZvciB0aGUgeC1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczEsIG9yIGZvciBBeGlzMiBpZiBub3QgZm91bmQsIG9yIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeE1lYXN1cmUgPSBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHktQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMyLCBvciBzZWNvbmQgbWVhc3VyZSBmb3IgQXhpczEgaWYgbm90IGZvdW5kLCBvciBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeU1lYXN1cmUgPSBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Y29uc3QgcmVzID0gW1xuXHRcdHtcblx0XHRcdHVpZDogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0dmFsdWVzOiBbeE1lYXN1cmVdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHR1aWQ6IFwidmFsdWVBeGlzMlwiLFxuXHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHR2YWx1ZXM6IFt5TWVhc3VyZV1cblx0XHR9XG5cdF07XG5cblx0aWYgKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUgPT09IFwiYnViYmxlXCIpIHtcblx0XHQvLyBNZWFzdXJlIGZvciB0aGUgc2l6ZSBvZiB0aGUgYnViYmxlOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMywgb3IgcmVtYWluaW5nIG1lYXN1cmUgZm9yIEF4aXMxL0F4aXMyIGlmIG5vdCBmb3VuZFxuXHRcdGNvbnN0IHNpemVNZWFzdXJlID0gYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0dWlkOiBcImJ1YmJsZVdpZHRoXCIsXG5cdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdHZhbHVlczogW3NpemVNZWFzdXJlXVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQ29sb3IgKG9wdGlvbmFsKVxuXHRpZiAoc2VyaWVzRGltZW5zaW9ucy5sZW5ndGgpIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHR1aWQ6IFwiY29sb3JcIixcblx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHR2YWx1ZXM6IHNlcmllc0RpbWVuc2lvbnNcblx0XHR9KTtcblx0fVxuXHQvLyBTaGFwZSAob3B0aW9uYWwpXG5cdGlmIChzaGFwZURpbWVuc2lvbikge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdHVpZDogXCJzaGFwZVwiLFxuXHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdHZhbHVlczogW3NoYXBlRGltZW5zaW9uLmxhYmVsXVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0bGV0IHJlczogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXTtcblxuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJzaXplXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucylcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHRyZXMgPSBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb24pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwidmVydGljYWxfYnVsbGV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiYWN0dWFsVmFsdWVzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkLCBcIkF4aXMxXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dWlkOiBcInRhcmdldFZhbHVlc1wiLFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdHZhbHVlczogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdFx0XHR0eXBlOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR1aWQ6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHR2YWx1ZXM6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHVpZDogXCJjb2xvclwiLFxuXHRcdFx0XHRcdHR5cGU6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0dmFsdWVzOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0fVxuXG5cdHJldHVybiByZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRuYXZJbmZvOiBOYXZpZ2F0aW9uSW5mbyxcblx0b1NoZWxsU2VydmljZTogSVNoZWxsU2VydmljZXNcbik6IFByb21pc2U8eyBzZW1hbnRpY09iamVjdD86IHN0cmluZzsgYWN0aW9uPzogc3RyaW5nOyBvdXRib3VuZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG5cdGlmIChuYXZJbmZvLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0aWYgKG5hdkluZm8uYWN0aW9uKSB7XG5cdFx0XHQvLyBBY3Rpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQ6IGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0TGlua3MoW3sgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfV0pLnRoZW4oKGFMaW5rcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYUxpbmtzLmxlbmd0aCAmJiBhTGlua3NbMF0ubGVuZ3RoID8geyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9IDogdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGdldCB0aGUgcHJpbWFyeSBpbnRlbnQgZnJvbSB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldFByaW1hcnlJbnRlbnQobmF2SW5mby5zZW1hbnRpY09iamVjdCkudGhlbigob0xpbmspID0+IHtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIE5vIHByaW1hcnkgaW50ZW50Li4uXG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIHRoYXQgdGhlIHByaW1hcnkgaW50ZW50IGlzIG5vdCBwYXJ0IG9mIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zXG5cdFx0XHRcdGNvbnN0IG9JbmZvID0gb1NoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChvTGluay5pbnRlbnQpO1xuXHRcdFx0XHRyZXR1cm4gbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMgJiYgbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMuaW5jbHVkZXMob0luZm8uYWN0aW9uKVxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7IHNlbWFudGljT2JqZWN0OiBvSW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBvSW5mby5hY3Rpb24gfTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPdXRib3VuZCBuYXZpZ2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRyZXR1cm4gbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gPyBQcm9taXNlLnJlc29sdmUoeyBvdXRib3VuZDogbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gfSkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxufVxuXG4vKipcbiAqIEEgY29udHJvbGxlciBleHRlbnNpb24gZm9yIG1hbmFnaW5nIHRoZSBLUElzIGluIGFuIGFuYWx5dGljYWwgbGlzdCBwYWdlLlxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQHNpbmNlIDEuOTMuMFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XCIpXG5jbGFzcyBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcml2YXRlIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcm90ZWN0ZWQgYUtQSURlZmluaXRpb25zPzogS1BJRGVmaW5pdGlvbltdO1xuXG5cdHByb3RlY3RlZCBvQ2FyZCE6IENhcmQ7XG5cblx0cHJvdGVjdGVkIG9Qb3BvdmVyITogUG9wb3ZlcjtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgdGhlIGNhcmQgbWFuaWZlc3QgZm9yIGEgS1BJIGRlZmluaXRpb24gYW5kIHN0b3JlcyBpdCBpbiBhIEpTT04gbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBLUEkgZGVmaW5pdGlvblxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIGluIHdoaWNoIHRoZSBtYW5pZmVzdCB3aWxsIGJlIHN0b3JlZFxuXHQgKi9cblx0cHJvdGVjdGVkIGluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NhcmRNYW5pZmVzdDogQ2FyZE1hbmlmZXN0PFBhcnRpYWw8Q2hhcnRDYXJkQ29udGVudD4+ID0ge1xuXHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0aWQ6IFwic2FwLmZlLktQSUNhcmRcIixcblx0XHRcdFx0dHlwZTogXCJjYXJkXCJcblx0XHRcdH0sXG5cdFx0XHRcInNhcC51aVwiOiB7XG5cdFx0XHRcdHRlY2hub2xvZ3k6IFwiVUk1XCJcblx0XHRcdH0sXG5cdFx0XHRcInNhcC5jYXJkXCI6IHtcblx0XHRcdFx0dHlwZTogXCJBbmFseXRpY2FsXCIsXG5cdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRqc29uOiB7fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRoZWFkZXI6IHtcblx0XHRcdFx0XHR0eXBlOiBcIk51bWVyaWNcIixcblx0XHRcdFx0XHR0aXRsZToga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGl0bGUsXG5cdFx0XHRcdFx0c3ViVGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmRlc2NyaXB0aW9uLFxuXHRcdFx0XHRcdHVuaXRPZk1lYXN1cmVtZW50OiBcInttYWluVW5pdH1cIixcblx0XHRcdFx0XHRtYWluSW5kaWNhdG9yOiB7XG5cdFx0XHRcdFx0XHRudW1iZXI6IFwie21haW5WYWx1ZU5vU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHR1bml0OiBcInttYWluVmFsdWVTY2FsZX1cIixcblx0XHRcdFx0XHRcdHN0YXRlOiBcInttYWluU3RhdGV9XCIsXG5cdFx0XHRcdFx0XHR0cmVuZDogXCJ7dHJlbmR9XCJcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbnRlbnQ6IHtcblx0XHRcdFx0XHRtaW5IZWlnaHQ6IFwiMjVyZW1cIixcblx0XHRcdFx0XHRjaGFydFByb3BlcnRpZXM6IHtcblx0XHRcdFx0XHRcdHBsb3RBcmVhOiB7fSxcblx0XHRcdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0XHRcdHZpc2libGU6IHRydWUsXG5cdFx0XHRcdFx0XHRcdGFsaWdubWVudDogXCJsZWZ0XCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGE6IHtcblx0XHRcdFx0XHRcdHBhdGg6IFwiL2NoYXJ0RGF0YVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdC8vIEFkZCBzaWRlIGluZGljYXRvcnMgaW4gdGhlIGNhcmQgaGVhZGVyIGlmIGEgdGFyZ2V0IGlzIGRlZmluZWQgZm9yIHRoZSBLUElcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCByZXNCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5zaWRlSW5kaWNhdG9ycyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JTkRJQ0FUT1JfVEFSR0VUXCIpLFxuXHRcdFx0XHRcdG51bWJlcjogXCJ7dGFyZ2V0TnVtYmVyfVwiLFxuXHRcdFx0XHRcdHVuaXQ6IFwie3RhcmdldFVuaXR9XCJcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRpdGxlOiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JTkRJQ0FUT1JfREVWSUFUSU9OXCIpLFxuXHRcdFx0XHRcdG51bWJlcjogXCJ7ZGV2aWF0aW9uTnVtYmVyfVwiLFxuXHRcdFx0XHRcdHVuaXQ6IFwiJVwiXG5cdFx0XHRcdH1cblx0XHRcdF07XG5cdFx0fVxuXG5cdFx0Ly8gRGV0YWlscyBvZiB0aGUgY2FyZDogZmlsdGVyIGRlc2NyaXB0aW9uc1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBhRGVzY3JpcHRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0a3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMuZm9yRWFjaCgoZmlsdGVyRGVmaW5pdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBkZXNjID0gZ2V0RmlsdGVyU3RyaW5nRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbik7XG5cdFx0XHRcdGlmIChkZXNjKSB7XG5cdFx0XHRcdFx0YURlc2NyaXB0aW9ucy5wdXNoKGRlc2MpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGFEZXNjcmlwdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuZGV0YWlscyA9IGFEZXNjcmlwdGlvbnMuam9pbihcIiwgXCIpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENoYXJ0IHNldHRpbmdzOiB0eXBlLCB0aXRsZSwgZGltZW5zaW9ucyBhbmQgbWVhc3VyZXMgaW4gdGhlIG1hbmlmZXN0XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRUeXBlID0ga3BpRGVmaW5pdGlvbi5jaGFydC5jaGFydFR5cGU7XG5cdFx0dXBkYXRlQ2hhcnRMYWJlbFNldHRpbmdzKGtwaURlZmluaXRpb24uY2hhcnQsIG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmNoYXJ0UHJvcGVydGllcyk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzLnRpdGxlLnRleHQgPSBmb3JtYXRDaGFydFRpdGxlKGtwaURlZmluaXRpb24pO1xuXHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5jb250ZW50LmRpbWVuc2lvbnMgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMubWFwKChkaW1lbnNpb24pID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsIHZhbHVlOiBgeyR7ZGltZW5zaW9uLm5hbWV9fWAgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5tZWFzdXJlcyA9IGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMubWFwKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRyZXR1cm4geyBsYWJlbDogbWVhc3VyZS5sYWJlbCwgdmFsdWU6IGB7JHttZWFzdXJlLm5hbWV9fWAgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5mZWVkcyA9IGdldENoYXJ0RmVlZHMoa3BpRGVmaW5pdGlvbi5jaGFydCk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9YCwge1xuXHRcdFx0bWFuaWZlc3Q6IG9DYXJkTWFuaWZlc3Rcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBhc3luYyBpbml0TmF2aWdhdGlvbkluZm8oXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b0tQSU1vZGVsOiBKU09OTW9kZWwsXG5cdFx0b1NoZWxsU2VydmljZTogSVNoZWxsU2VydmljZXNcblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQWRkIG5hdmlnYXRpb25cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uLCBvU2hlbGxTZXJ2aWNlKS50aGVuKChvTmF2SW5mbykgPT4ge1xuXHRcdFx0XHRpZiAob05hdkluZm8pIHtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2hlYWRlci9hY3Rpb25zYCwgW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHR0eXBlOiBcIk5hdmlnYXRpb25cIixcblx0XHRcdFx0XHRcdFx0cGFyYW1ldGVyczogb05hdkluZm9cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMgPSAodGhpcy5nZXRWaWV3KCkuZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5fZ2V0UGFnZU1vZGVsKCk/LmdldFByb3BlcnR5KFwiL2twaURlZmluaXRpb25zXCIpO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSAob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIEJhc2VDb250cm9sbGVyKS5nZXRBcHBDb21wb25lbnQoKTtcblxuXHRcdFx0Ly8gQ3JlYXRlIGEgSlNPTiBtb2RlbCB0byBzdG9yZSBLUEkgZGF0YVxuXHRcdFx0Y29uc3Qgb0tQSU1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdFx0dGhpcy5iYXNlLmdldE93bmVyQ29tcG9uZW50KCkuc2V0TW9kZWwob0tQSU1vZGVsLCBcImtwaU1vZGVsXCIpO1xuXG5cdFx0XHR0aGlzLmFLUElEZWZpbml0aW9ucy5mb3JFYWNoKChrcGlEZWZpbml0aW9uKSA9PiB7XG5cdFx0XHRcdC8vIFdlIG9ubHkgbmVlZCB0byB3b3JyeSBhYm91dCBhbmFseXRpY2FsIEtQSSBkZWZpbml0aW9uXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLnR5cGUgPT09IFwiQW5hbHl0aWNhbFwiKSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYW5pZmVzdCBmb3IgdGhlIEtQSSBjYXJkIGFuZCBzdG9yZSBpdCBpbiB0aGUgS1BJIG1vZGVsXG5cdFx0XHRcdFx0dGhpcy5pbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb24sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHQvLyBTZXQgdGhlIG5hdmlnYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdFx0dGhpcy5pbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKSkuY2F0Y2goZnVuY3Rpb24gKGVycjogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIExvYWQgdGFnIGRhdGEgZm9yIHRoZSBLUElcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKSwgb0tQSU1vZGVsKS5jYXRjaChmdW5jdGlvbiAoZXJyOiBzdHJpbmcpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblxuXHRAbWV0aG9kT3ZlcnJpZGUoKVxuXHRwdWJsaWMgb25FeGl0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IHRoaXMuZ2V0VmlldygpLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsO1xuXG5cdFx0aWYgKG9LUElNb2RlbCkge1xuXHRcdFx0b0tQSU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXHRcdGNvbnN0IHJhd1VuaXQgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGhcblx0XHRcdD8ga3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlKVxuXHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdGNvbnN0IGlzUGVyY2VudGFnZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzQ3VycmVuY3kgPT09IGZhbHNlICYmIHJhd1VuaXQgPT09IFwiJVwiO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gTWFpbiBLUEkgdmFsdWVcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCBhIHNjYWxlXG5cdFx0Y29uc3Qga3BpVmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IGlzUGVyY2VudGFnZSA/IHVuZGVmaW5lZCA6IFwic2hvcnRcIixcblx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5udW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPz8gMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVgLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5udW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPz8gMixcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZSxcblx0XHRcdFx0Z3JvdXBpbmdFbmFibGVkOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZGAsIGtwaVZhbHVlVW5zY2FsZWQpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggdGhlIHNjYWxlIG9taXR0ZWRcblx0XHRjb25zdCBrcGlWYWx1ZU5vU2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IGlzUGVyY2VudGFnZSA/IHVuZGVmaW5lZCA6IFwic2hvcnRcIixcblx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5udW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPz8gMSxcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdChyYXdWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZWAsIGtwaVZhbHVlTm9TY2FsZSk7XG5cblx0XHQvLyBTY2FsZSBvZiB0aGUgdmFsdWVcblx0XHRjb25zdCBrcGlWYWx1ZVNjYWxlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdGRlY2ltYWxzOiAwLFxuXHRcdFx0XHRtYXhJbnRlZ2VyRGlnaXRzOiAwLFxuXHRcdFx0XHRzaG93U2NhbGU6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlYCwga3BpVmFsdWVTY2FsZSk7XG5cblx0XHQvLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy9cblx0XHQvLyBVbml0IG9yIGN1cnJlbmN5XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQgJiYgcmF3VW5pdCkge1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQuaXNDdXJyZW5jeSkge1xuXHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIHJhd1VuaXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSW4gY2FzZSBvZiB1bml0IG9mIG1lYXN1cmUsIHdlIGhhdmUgdG8gZm9ybWF0IGl0IHByb3Blcmx5XG5cdFx0XHRcdGNvbnN0IGtwaVVuaXQgPSBOdW1iZXJGb3JtYXQuZ2V0VW5pdEluc3RhbmNlKHsgc2hvd051bWJlcjogZmFsc2UgfSwgY3VycmVudExvY2FsZSkuZm9ybWF0KHJhd1ZhbHVlLCByYXdVbml0KTtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRgLCBrcGlVbml0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSAhPSBudWxsKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHRjcml0aWNhbGl0eVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5ICh2aWEgYSBwYXRoKVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9XG5cdFx0XHRcdE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5W2twaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKV0gfHwgTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzICYmIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlICE9IG51bGwpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNhbGN1bGF0aW9uXG5cdFx0XHRzd2l0Y2ggKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvVGFyZ2V0XCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbVRhcmdldENhbGN1bGF0aW9uKHJhd1ZhbHVlLCBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NaW5pbWl6ZVwiOlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21NaW5pbWl6ZUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9NYXhpbWl6ZVwiOlxuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkc1xuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5YCwgY3JpdGljYWxpdHlWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFxuXHRcdFx0YC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluU3RhdGVgLFxuXHRcdFx0VmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZVtjcml0aWNhbGl0eVZhbHVlXSB8fCBcIk5vbmVcIlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZURhdGFwb2ludFRyZW5kKGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCk6IHZvaWQge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCB0cmVuZFZhbHVlID0gXCJOb25lXCI7XG5cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRWYWx1ZSkge1xuXHRcdFx0Ly8gVHJlbmQgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdC8vIFRyZW5kIGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSB2aWEgYSBwYXRoXG5cdFx0XHR0cmVuZFZhbHVlID0gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZShrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGhcblx0XHQpIHtcblx0XHRcdC8vIENhbGN1bGF0ZWQgdHJlbmRcblx0XHRcdGxldCB0cmVuZFJlZmVyZW5jZVZhbHVlOiBudW1iZXI7XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChcblx0XHRcdFx0XHRrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIHx8IFwiXCIpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHR0cmVuZFZhbHVlID0gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSxcblx0XHRcdFx0ISFrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uSXNSZWxhdGl2ZSxcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblRyZXNob2xkc1xuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZGAsIHRyZW5kVmFsdWUpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpOiB2b2lkIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoTG9jYWxpemF0aW9uLmdldExhbmd1YWdlKCkpO1xuXG5cdFx0bGV0IHRhcmdldFJhd1ZhbHVlOiBudW1iZXI7XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRhcmdldFJhd1ZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldFJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoIHx8IFwiXCIpKTtcblx0XHR9XG5cdFx0Y29uc3QgZGV2aWF0aW9uUmF3VmFsdWUgPSB0YXJnZXRSYXdWYWx1ZSAhPT0gMCA/ICgocmF3VmFsdWUgLSB0YXJnZXRSYXdWYWx1ZSkgLyB0YXJnZXRSYXdWYWx1ZSkgKiAxMDAgOiB1bmRlZmluZWQ7XG5cblx0XHQvLyBGb3JtYXR0aW5nXG5cdFx0Y29uc3QgdGFyZ2V0VmFsdWUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5udW1iZXJPZkZyYWN0aW9uYWxEaWdpdHMgPz8gMSwgLy8gVXNlIHRoZSBzYW1lIHByZWNpc2lvbiBhcyB0aGUgbWFpbiB2YWx1ZVxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHRhcmdldFJhd1ZhbHVlKTtcblx0XHRjb25zdCB0YXJnZXRTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHRhcmdldFJhd1ZhbHVlKTtcblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlcmAsIHRhcmdldFZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0YCwgdGFyZ2V0U2NhbGUpO1xuXG5cdFx0aWYgKGRldmlhdGlvblJhd1ZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRldmlhdGlvblZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHRcdCkuZm9ybWF0KGRldmlhdGlvblJhd1ZhbHVlKTtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlcmAsIGRldmlhdGlvblZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgXCJOL0FcIik7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIG92ZXJhbGwgZmlsdGVycyB0byBiZSBhcHBsaWVkIHRvIGEgS1BJLCBpbmNsdWRpbmcgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzIGFuZCB0aGUgSXNBY3RpdmVFbnRpdHkgZmlsdGVyIGlmIGRyYWZ0IGlzIHN1cHBvcnRlZC5cblx0ICogQHBhcmFtIGtwaURlZmluaXRpb25cblx0ICogQHBhcmFtIG1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzYXAudWkubW9kZWwuRmlsdGVyIG9iamVjdHNcblx0ICovXG5cdHByb3RlY3RlZCBnZXRLUElGaWx0ZXJzKGtwaURlZmluaXRpb246IEFuYWx5dGljYWxLUElEZWZpbml0aW9uLCBtZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsKTogRmlsdGVyW10ge1xuXHRcdGxldCBmaWx0ZXJzOiBGaWx0ZXJbXSA9IFtdO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucz8ubGVuZ3RoKSB7XG5cdFx0XHRmaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoKGZpbHRlcikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHR9XG5cdFx0aWYgKE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCBrcGlEZWZpbml0aW9uLmNvbnRleHRQYXRoKSkge1xuXHRcdFx0ZmlsdGVycy5wdXNoKG5ldyBGaWx0ZXIoXCJJc0FjdGl2ZUVudGl0eVwiLCBGaWx0ZXJPcGVyYXRvci5FUSwgdHJ1ZSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiBmaWx0ZXJzO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIHRhZyBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqIEBwYXJhbSBrcGlEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBLUEkuXG5cdCAqIEBwYXJhbSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHBhcmFtIGxvYWRGdWxsIElmIG5vdCB0cnVlLCBsb2FkcyBvbmx5IGRhdGEgZm9yIHRoZSBLUEkgdGFnXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBsb2FkS1BJVGFnRGF0YShcblx0XHRrcGlEZWZpbml0aW9uOiBBbmFseXRpY2FsS1BJRGVmaW5pdGlvbixcblx0XHRvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLFxuXHRcdG9LUElNb2RlbDogSlNPTk1vZGVsLFxuXHRcdGxvYWRGdWxsPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHQvLyBJZiBsb2FkRnVsbD1mYWxzZSwgdGhlbiB3ZSdyZSBqdXN0IGxvYWRpbmcgZGF0YSBmb3IgdGhlIHRhZyBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgZ3JvdXBJRFxuXHRcdC8vIElmIGxvYWRGdWxsPXRydWUsIHdlJ3JlIGxvYWRpbmcgZGF0YSBmb3IgdGhlIHdob2xlIEtQSSAodGFnICsgY2FyZCkgYW5kIHdlIHVzZSB0aGUgXCIkYXV0by5Xb3JrZXJzXCIgZ3JvdXBJRFxuXHRcdGNvbnN0IG9MaXN0QmluZGluZyA9IGxvYWRGdWxsXG5cdFx0XHQ/IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uV29ya2Vyc1wiIH0pXG5cdFx0XHQ6IG9NYWluTW9kZWwuYmluZExpc3Qoa3BpRGVmaW5pdGlvbi5jb250ZXh0UGF0aCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiB9KTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHVuaXQ/OiBzdHJpbmcgfT4gPSB7fTtcblxuXHRcdC8vIE1haW4gdmFsdWUgKyBjdXJyZW5jeS91bml0XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aCkge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGhdID0geyB1bml0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnR5IGZvciBjcml0aWNhbGl0eVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnRpZXMgZm9yIHRyZW5kIGFuZCB0cmVuZCBjYWxjdWxhdGlvblxuXHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IGFnZ3JlZ2F0ZTogb0FnZ3JlZ2F0ZSB9KTtcblxuXHRcdC8vIEZpbHRlcnNcblx0XHRjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRLUElGaWx0ZXJzKGtwaURlZmluaXRpb24sIG9NYWluTW9kZWwuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdGlmIChmaWx0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoZmlsdGVycyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwgMSkudGhlbigoYUNvbnRleHRzOiBDb250ZXh0W10pOiB2b2lkID0+IHtcblx0XHRcdGlmIChhQ29udGV4dHMubGVuZ3RoKSB7XG5cdFx0XHRcdGNvbnN0IHJhd1VuaXQgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGhcblx0XHRcdFx0XHQ/IGFDb250ZXh0c1swXS5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlKVxuXHRcdFx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQgJiYgIXJhd1VuaXQpIHtcblx0XHRcdFx0XHQvLyBBIHVuaXQvY3VycmVuY3kgaXMgZGVmaW5lZCwgYnV0IGl0cyB2YWx1ZSBpcyB1bmRlZmluZWQgLS0+IG11bHRpLXVuaXQgc2l0dWF0aW9uXG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkYCwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVgLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlU2NhbGVgLCBcIlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoYC8ke2twaURlZmluaXRpb24uaWR9L21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdGAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5YCwgTWVzc2FnZVR5cGUuTm9uZSk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlYCwgXCJOb25lXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RyZW5kYCwgXCJOb25lXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShgLyR7a3BpRGVmaW5pdGlvbi5pZH0vbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlcmAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0VW5pdGAsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyYCwgdW5kZWZpbmVkKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3koa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50Q3JpdGljYWxpdHkoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdFx0aWYgKGxvYWRGdWxsKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludFRyZW5kKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIExvYWRzIGNhcmQgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0gb01haW5Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkXG5cdCAqIEByZXR1cm5zIFRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBsb2FkS1BJQ2FyZERhdGEoXG5cdFx0a3BpRGVmaW5pdGlvbjogQW5hbHl0aWNhbEtQSURlZmluaXRpb24sXG5cdFx0b01haW5Nb2RlbDogT0RhdGFNb2RlbCxcblx0XHRvS1BJTW9kZWw6IEpTT05Nb2RlbFxuXHQpOiBQcm9taXNlPHZvaWQgfCBDb250ZXh0W10+IHtcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvTWFpbk1vZGVsLmJpbmRMaXN0KGtwaURlZmluaXRpb24uY29udGV4dFBhdGgsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHtcblx0XHRcdCQkZ3JvdXBJZDogXCIkYXV0by5Xb3JrZXJzXCJcblx0XHR9KTtcblx0XHRjb25zdCBvR3JvdXA6IFJlY29yZDxzdHJpbmcsIHsgYWRkaXRpb25hbGx5Pzogc3RyaW5nW10gfT4gPSB7fTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3Q+ID0ge307XG5cblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRvR3JvdXBbZGltZW5zaW9uLm5hbWVdID0ge307XG5cdFx0XHRpZiAoZGltZW5zaW9uLnRleHQpIHtcblx0XHRcdFx0Ly8gQWxzbyBsb2FkIHRoZSB0ZXh0IHByb3BlcnR5IGlmIHRoZXJlJ3Mgb25lIChhcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5KVxuXHRcdFx0XHRvR3JvdXBbZGltZW5zaW9uLm5hbWVdLmFkZGl0aW9uYWxseSA9IFtkaW1lbnNpb24udGV4dF07XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKChtZWFzdXJlKSA9PiB7XG5cdFx0XHRvQWdncmVnYXRlW21lYXN1cmUubmFtZV0gPSB7fTtcblx0XHR9KTtcblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oe1xuXHRcdFx0Z3JvdXA6IG9Hcm91cCxcblx0XHRcdGFnZ3JlZ2F0ZTogb0FnZ3JlZ2F0ZVxuXHRcdH0pO1xuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEtQSUZpbHRlcnMoa3BpRGVmaW5pdGlvbiwgb01haW5Nb2RlbC5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0aWYgKGZpbHRlcnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b0xpc3RCaW5kaW5nLmZpbHRlcihmaWx0ZXJzKTtcblx0XHR9XG5cblx0XHQvLyBTb3J0aW5nXG5cdFx0aWYgKGtwaURlZmluaXRpb24uY2hhcnQuc29ydE9yZGVyKSB7XG5cdFx0XHRvTGlzdEJpbmRpbmcuc29ydChcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIubWFwKChzb3J0SW5mbykgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgU29ydGVyKHNvcnRJbmZvLm5hbWUsIHNvcnRJbmZvLmRlc2NlbmRpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRjb25zdCBhbGxDb250ZXh0cyA9IGF3YWl0IG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwga3BpRGVmaW5pdGlvbi5jaGFydC5tYXhJdGVtcyk7XG5cdFx0Y29uc3QgY2hhcnREYXRhID0gYWxsQ29udGV4dHMubWFwKChvQ29udGV4dCkgPT4ge1xuXHRcdFx0Y29uc3Qgb0RhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaCgoZGltZW5zaW9uKSA9PiB7XG5cdFx0XHRcdC8vIFdlIGhhdmUgdG8gZm9ybWF0IHRoZSBkaW1lbnNpb24gdmFsdWUgaGVyZSwgYXMgdGhlIGNhcmQgZG9lc24ndCBzdXBwb3J0IGNhbGN1bGF0ZWQgYmluZGluZ3MgeWV0XG5cdFx0XHRcdHN3aXRjaCAoZGltZW5zaW9uLnRleHRBcnJhbmdlbWVudCkge1xuXHRcdFx0XHRcdGNhc2UgXCJUZXh0T25seVwiOlxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLnRleHQhKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0Y2FzZSBcIlRleHRMYXN0XCI6XG5cdFx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKFxuXHRcdFx0XHRcdFx0XHRvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSksXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi50ZXh0ISlcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdGNhc2UgdW5kZWZpbmVkOlxuXHRcdFx0XHRcdFx0Ly8gTm8gdGV4dCBhcnJhbmdlbWVudFxuXHRcdFx0XHRcdFx0b0RhdGFbZGltZW5zaW9uLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkoZGltZW5zaW9uLm5hbWUpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0Ly9EZWZhdWx0IHNob3VsZCBiZSBUZXh0Rmlyc3QgaWYgdGhlcmUgaXMgYSBUZXh0IGFubm90YXRpb24gYW5kIG5laXRoZXIgVGV4dE9ubHkgbm9yIFRleHRMYXN0IGFyZSBzZXRcblx0XHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMoXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi50ZXh0ISksXG5cdFx0XHRcdFx0XHRcdG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2goKG1lYXN1cmUpID0+IHtcblx0XHRcdFx0b0RhdGFbbWVhc3VyZS5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG1lYXN1cmUubmFtZSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0cmV0dXJuIG9EYXRhO1xuXHRcdH0pO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KGAvJHtrcGlEZWZpbml0aW9uLmlkfS9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vY2hhcnREYXRhYCwgY2hhcnREYXRhKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBwb3BvdmVyIHRvIGRpc3BsYXkgdGhlIEtQSSBjYXJkXG5cdCAqIFRoZSBwb3BvdmVyIGFuZCB0aGUgY29udGFpbmVkIGNhcmQgZm9yIHRoZSBLUElzIGFyZSBjcmVhdGVkIGlmIG5lY2Vzc2FyeS5cblx0ICogVGhlIHBvcG92ZXIgaXMgc2hhcmVkIGJldHdlZW4gYWxsIEtQSXMsIHNvIGl0J3MgY3JlYXRlZCBvbmx5IG9uY2UuXG5cdCAqIEBwYXJhbSBvS1BJVGFnIFRoZSB0YWcgdGhhdCB0cmlnZ2VyZWQgdGhlIHBvcG92ZXIgb3BlbmluZy5cblx0ICogQHJldHVybnMgVGhlIHNoYXJlZCBwb3BvdmVyIGFzIGEgcHJvbWlzZS5cblx0ICovXG5cdHByb3RlY3RlZCBhc3luYyBnZXRQb3BvdmVyKG9LUElUYWc6IEdlbmVyaWNUYWcpOiBQcm9taXNlPFBvcG92ZXI+IHtcblx0XHRpZiAoIXRoaXMub1BvcG92ZXIpIHtcblx0XHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdExpYnJhcnkubG9hZCh7IG5hbWU6IFwic2FwL3VpL2ludGVncmF0aW9uXCIgfSlcblx0XHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdWkvaW50ZWdyYXRpb24vd2lkZ2V0cy9DYXJkXCIsIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIl0sICguLi5wYXJhbXM6IHVua25vd25bXSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBDYXJkQ2xhc3MgPSBwYXJhbXNbMF0gYXMgdHlwZW9mIENhcmRUeXBlO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBIb3N0ID0gcGFyYW1zWzFdIGFzIHR5cGVvZiBIb3N0VHlwZTtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0hvc3QgPSBuZXcgSG9zdCgpO1xuXG5cdFx0XHRcdFx0XHRcdG9Ib3N0LmF0dGFjaEFjdGlvbigob0V2ZW50OiBIb3N0JEFjdGlvbkV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc1R5cGUgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidHlwZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUGFyYW1zID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInBhcmFtZXRlcnNcIikgYXMge1xuXHRcdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0XHRhY3Rpb246IHN0cmluZztcblx0XHRcdFx0XHRcdFx0XHRcdG91dGJvdW5kOiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1zLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYmFzZS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9QYXJhbXMuc2VtYW50aWNPYmplY3QsIG9QYXJhbXMuYWN0aW9uKTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuYmFzZS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlT3V0Ym91bmQob1BhcmFtcy5vdXRib3VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkID0gbmV3IENhcmRDbGFzcyh7XG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg6IFwiMjVyZW1cIixcblx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldEhvc3Qob0hvc3QgYXMgdW5rbm93biBhcyBDb250cm9sKTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9Qb3BvdmVyID0gbmV3IFBvcG92ZXIoXCJrcGktUG9wb3ZlclwiLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBcIkF1dG9cIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBbdGhpcy5vQ2FyZF1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0b0tQSVRhZy5hZGREZXBlbmRlbnQodGhpcy5vUG9wb3Zlcik7IC8vIFRoZSBmaXJzdCBjbGlja2VkIHRhZyBnZXRzIHRoZSBwb3BvdmVyIGFzIGRlcGVuZGVudFxuXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAoKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBhc3luYyBvbktQSVByZXNzZWQob0tQSVRhZzogR2VuZXJpY1RhZywga3BpSUQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBrcGlEZWZpbml0aW9uID0gdGhpcy5hS1BJRGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbiAob0RlZikge1xuXHRcdFx0XHRyZXR1cm4gKG9EZWYgYXMgQW5hbHl0aWNhbEtQSURlZmluaXRpb24pLmlkID09PSBrcGlJRDtcblx0XHRcdH0pIGFzIEFuYWx5dGljYWxLUElEZWZpbml0aW9uIHwgdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbikge1xuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsO1xuXG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlciA9IGF3YWl0IHRoaXMuZ2V0UG9wb3ZlcihvS1BJVGFnKTtcblx0XHRcdFx0XHQvLyBTZXQgdGhlIHBvcG92ZXIgYXMgbW9kYWwgd2hpbGUgdGhlIGNhcmQgaXMgbG9hZGluZyAoc28gdGhhdCBjYXJkIHJlbmRlcmluZyBkb2Vzbid0IGludGVyZmVyZSB3aXRoIHRoZSBwb3BvdmVyIGFuZCBjbG9zZSBpdClcblx0XHRcdFx0XHRwb3BvdmVyLnNldE1vZGFsKHRydWUpO1xuXG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRNYW5pZmVzdChvS1BJTW9kZWwuZ2V0UHJvcGVydHkoYC8ke2twaUlEfS9tYW5pZmVzdGApKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldFByZXZpZXdNb2RlKFwiQWJzdHJhY3RcIik7IC8vIERpc3BsYXkgcGxhY2Vob2xkZXJzIGluIHRoZSBjYXJkIHVudGlsIGRhdGEgaXMgbG9hZGVkXG5cdFx0XHRcdFx0cG9wb3Zlci5vcGVuQnkob0tQSVRhZywgZmFsc2UpOyAvLyBPcGVuIHRoZSBwb3BvdmVyIGltbWVkaWF0ZWx5XG5cblx0XHRcdFx0XHRjb25zdCBwcm9taXNlcyA9IFtcblx0XHRcdFx0XHRcdHRoaXMubG9hZEtQSVRhZ0RhdGEoa3BpRGVmaW5pdGlvbiwgb01vZGVsLCBvS1BJTW9kZWwsIHRydWUpLFxuXHRcdFx0XHRcdFx0dGhpcy5sb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbiwgb01vZGVsLCBvS1BJTW9kZWwpXG5cdFx0XHRcdFx0XTtcblxuXHRcdFx0XHRcdGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcblx0XHRcdFx0XHR0aGlzLm9DYXJkLmF0dGFjaEV2ZW50T25jZShcInN0YXRlQ2hhbmdlZFwiLCAoKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBPbmNlIHRoZSBjYXJkIGhhcyBiZWVuIHJlbmRlcmVkLCBzZXQgdGhlIGZvY3VzIHByb3Blcmx5IGFuZCBzZXQgdGhlIHBvcG92ZXIgYXMgbm9uLW1vZGFsXG5cdFx0XHRcdFx0XHQodGhpcy5vQ2FyZC5nZXRGb2N1c0RvbVJlZigpIGFzIEhUTUxFbGVtZW50KT8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdHBvcG92ZXIuc2V0TW9kYWwoZmFsc2UpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KGAvJHtrcGlJRH0vbWFuaWZlc3RgKSk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5yZWZyZXNoKCk7XG5cdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRQcmV2aWV3TW9kZShcIk9mZlwiKTsgLy8gRGlzcGxheSByZWFsIGRhdGEgaW4gdGhlIGNhcmRcblx0XHRcdFx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVyciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7O0VBbUNBLE1BQU1BLDBCQUF1RCxHQUFHO0lBQy9ELEdBQUcsRUFBRUMsV0FBVyxDQUFDQyxLQUFLO0lBQ3RCLEdBQUcsRUFBRUQsV0FBVyxDQUFDRSxPQUFPO0lBQ3hCLEdBQUcsRUFBRUYsV0FBVyxDQUFDRyxPQUFPO0lBQ3hCLEdBQUcsRUFBRUgsV0FBVyxDQUFDSTtFQUNsQixDQUFDO0VBRUQsTUFBTUMseUJBQXNELEdBQUc7SUFDOURKLEtBQUssRUFBRSxPQUFPO0lBQ2RDLE9BQU8sRUFBRSxVQUFVO0lBQ25CQyxPQUFPLEVBQUUsTUFBTTtJQUNmQyxXQUFXLEVBQUUsTUFBTTtJQUNuQkUsSUFBSSxFQUFFO0VBQ1AsQ0FBQzs7RUFFRDtBQUNBO0FBQ0E7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