@sapui5/sap.fe.core 1.98.0 → 1.99.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (231) hide show
  1. package/package.json +3 -2
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/AnnotationHelper.js +377 -405
  4. package/src/sap/fe/core/AnnotationHelper.ts +385 -0
  5. package/src/sap/fe/core/AppComponent.js +3 -2
  6. package/src/sap/fe/core/AppStateHandler.js +229 -181
  7. package/src/sap/fe/core/AppStateHandler.ts +171 -0
  8. package/src/sap/fe/core/BaseController.js +3 -2
  9. package/src/sap/fe/core/BusyLocker.js +105 -121
  10. package/src/sap/fe/core/BusyLocker.ts +98 -0
  11. package/src/sap/fe/core/CommonUtils.js +2073 -2399
  12. package/src/sap/fe/core/CommonUtils.ts +2078 -0
  13. package/src/sap/fe/core/ExtensionAPI.js +3 -2
  14. package/src/sap/fe/core/PageController.js +84 -125
  15. package/src/sap/fe/core/PageController.ts +101 -0
  16. package/src/sap/fe/core/RouterProxy.js +986 -823
  17. package/src/sap/fe/core/RouterProxy.ts +838 -0
  18. package/src/sap/fe/core/Synchronization.js +51 -35
  19. package/src/sap/fe/core/Synchronization.ts +29 -0
  20. package/src/sap/fe/core/TemplateComponent.js +173 -164
  21. package/src/sap/fe/core/TemplateComponent.ts +166 -0
  22. package/src/sap/fe/core/TemplateModel.js +97 -54
  23. package/src/sap/fe/core/TemplateModel.ts +63 -0
  24. package/src/sap/fe/core/TransactionHelper.js +1576 -1664
  25. package/src/sap/fe/core/TransactionHelper.ts +1706 -0
  26. package/src/sap/fe/core/actions/draft.js +559 -608
  27. package/src/sap/fe/core/actions/draft.ts +593 -0
  28. package/src/sap/fe/core/actions/messageHandling.js +545 -514
  29. package/src/sap/fe/core/actions/messageHandling.ts +532 -0
  30. package/src/sap/fe/core/actions/nonDraft.js +17 -19
  31. package/src/sap/fe/core/actions/nonDraft.ts +12 -0
  32. package/src/sap/fe/core/actions/operations.js +1074 -1215
  33. package/src/sap/fe/core/actions/operations.ts +1162 -0
  34. package/src/sap/fe/core/actions/sticky.js +102 -105
  35. package/src/sap/fe/core/actions/sticky.ts +102 -0
  36. package/src/sap/fe/core/controllerextensions/ControllerExtensionMetadata.js +3 -2
  37. package/src/sap/fe/core/controllerextensions/EditFlow.js +54 -211
  38. package/src/sap/fe/core/controllerextensions/IntentBasedNavigation.js +3 -2
  39. package/src/sap/fe/core/controllerextensions/InternalEditFlow.js +279 -11
  40. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +8 -6
  41. package/src/sap/fe/core/controllerextensions/InternalRouting.js +47 -45
  42. package/src/sap/fe/core/controllerextensions/KPIManagement.js +2 -3
  43. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +29 -26
  44. package/src/sap/fe/core/controllerextensions/MassEdit.js +101 -8
  45. package/src/sap/fe/core/controllerextensions/MessageHandler.js +17 -8
  46. package/src/sap/fe/core/controllerextensions/PageReady.js +2 -2
  47. package/src/sap/fe/core/controllerextensions/PageReady.ts +12 -8
  48. package/src/sap/fe/core/controllerextensions/Paginator.js +3 -2
  49. package/src/sap/fe/core/controllerextensions/Placeholder.js +3 -2
  50. package/src/sap/fe/core/controllerextensions/Routing.js +9 -4
  51. package/src/sap/fe/core/controllerextensions/RoutingListener.js +3 -2
  52. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  53. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -3
  54. package/src/sap/fe/core/controllerextensions/SideEffects.ts +18 -18
  55. package/src/sap/fe/core/controllerextensions/ViewState.js +3 -2
  56. package/src/sap/fe/core/controls/CommandExecution.js +3 -2
  57. package/src/sap/fe/core/controls/ConditionalWrapper.js +3 -2
  58. package/src/sap/fe/core/controls/CustomQuickViewPage.js +3 -2
  59. package/src/sap/fe/core/controls/DataLossOrDraftDiscard/DataLossOrDraftDiscardHandler.js +3 -2
  60. package/src/sap/fe/core/controls/FieldWrapper.js +11 -22
  61. package/src/sap/fe/core/controls/FilterBar.js +3 -2
  62. package/src/sap/fe/core/controls/FormElementWrapper.js +3 -2
  63. package/src/sap/fe/core/controls/MultiValueParameterDelegate.js +3 -2
  64. package/src/sap/fe/core/controls/NonComputedVisibleKeyFieldsDialog.fragment.xml +1 -0
  65. package/src/sap/fe/core/controls/filterbar/FilterContainer.js +3 -2
  66. package/src/sap/fe/core/controls/filterbar/VisualFilter.js +5 -4
  67. package/src/sap/fe/core/controls/filterbar/VisualFilterContainer.js +3 -2
  68. package/src/sap/fe/core/controls/filterbar/utils/VisualFilterUtils.js +3 -2
  69. package/src/sap/fe/core/controls/massEdit/MassEditHandlers.js +3 -2
  70. package/src/sap/fe/core/converters/ConverterContext.js +2 -2
  71. package/src/sap/fe/core/converters/ConverterContext.ts +4 -3
  72. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  73. package/src/sap/fe/core/converters/ManifestSettings.ts +1 -0
  74. package/src/sap/fe/core/converters/ManifestWrapper.js +39 -26
  75. package/src/sap/fe/core/converters/ManifestWrapper.ts +9 -0
  76. package/src/sap/fe/core/converters/MetaModelConverter.js +11 -8
  77. package/src/sap/fe/core/converters/MetaModelConverter.ts +16 -16
  78. package/src/sap/fe/core/converters/TemplateConverter.js +1 -1
  79. package/src/sap/fe/core/converters/TemplateConverter.ts +2 -2
  80. package/src/sap/fe/core/converters/common/AnnotationConverter.js +17 -13
  81. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  82. package/src/sap/fe/core/converters/controls/Common/Action.ts +2 -2
  83. package/src/sap/fe/core/converters/controls/Common/Chart.js +5 -3
  84. package/src/sap/fe/core/converters/controls/Common/Chart.ts +11 -3
  85. package/src/sap/fe/core/converters/controls/Common/DataVisualization.js +3 -3
  86. package/src/sap/fe/core/converters/controls/Common/DataVisualization.ts +2 -2
  87. package/src/sap/fe/core/converters/controls/Common/Form.js +4 -2
  88. package/src/sap/fe/core/converters/controls/Common/Form.ts +16 -2
  89. package/src/sap/fe/core/converters/controls/Common/Table.js +250 -146
  90. package/src/sap/fe/core/converters/controls/Common/Table.ts +300 -167
  91. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +115 -56
  92. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +120 -74
  93. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +467 -32
  94. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +483 -54
  95. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +6 -6
  96. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +9 -15
  97. package/src/sap/fe/core/converters/helpers/Aggregation.js +13 -5
  98. package/src/sap/fe/core/converters/helpers/Aggregation.ts +20 -5
  99. package/src/sap/fe/core/converters/helpers/IssueManager.js +4 -1
  100. package/src/sap/fe/core/converters/helpers/IssueManager.ts +3 -0
  101. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.js +4 -4
  102. package/src/sap/fe/core/converters/objectPage/HeaderAndFooterAction.ts +3 -3
  103. package/src/sap/fe/core/converters/templates/ListReportConverter.js +13 -6
  104. package/src/sap/fe/core/converters/templates/ListReportConverter.ts +26 -15
  105. package/src/sap/fe/core/designtime/AppComponent.designtime.js +3 -2
  106. package/src/sap/fe/core/formatters/CriticalityFormatter.js +1 -1
  107. package/src/sap/fe/core/formatters/CriticalityFormatter.ts +1 -1
  108. package/src/sap/fe/core/formatters/FPMFormatter.js +1 -1
  109. package/src/sap/fe/core/formatters/FPMFormatter.ts +4 -10
  110. package/src/sap/fe/core/formatters/KPIFormatter.js +1 -1
  111. package/src/sap/fe/core/formatters/KPIFormatter.ts +3 -1
  112. package/src/sap/fe/core/formatters/TableFormatter.js +39 -28
  113. package/src/sap/fe/core/formatters/TableFormatter.ts +43 -28
  114. package/src/sap/fe/core/formatters/ValueFormatter.js +1 -1
  115. package/src/sap/fe/core/formatters/ValueFormatter.ts +7 -6
  116. package/src/sap/fe/core/fpm/Component.js +3 -2
  117. package/src/sap/fe/core/helpers/AppStartupHelper.js +2 -2
  118. package/src/sap/fe/core/helpers/AppStartupHelper.ts +7 -4
  119. package/src/sap/fe/core/helpers/BindingExpression.js +314 -355
  120. package/src/sap/fe/core/helpers/BindingExpression.ts +317 -391
  121. package/src/sap/fe/core/helpers/ClassSupport.js +27 -15
  122. package/src/sap/fe/core/helpers/ClassSupport.ts +31 -20
  123. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.js +63 -59
  124. package/src/sap/fe/core/helpers/DynamicAnnotationPathHelper.ts +56 -0
  125. package/src/sap/fe/core/helpers/EditState.js +81 -84
  126. package/src/sap/fe/core/helpers/EditState.ts +81 -0
  127. package/src/sap/fe/core/helpers/ExcelFormatHelper.js +62 -48
  128. package/src/sap/fe/core/helpers/ExcelFormatHelper.ts +49 -0
  129. package/src/sap/fe/core/helpers/FPMHelper.js +52 -56
  130. package/src/sap/fe/core/helpers/FPMHelper.ts +62 -0
  131. package/src/sap/fe/core/helpers/KeepAliveHelper.js +3 -4
  132. package/src/sap/fe/core/helpers/KeepAliveHelper.ts +9 -9
  133. package/src/sap/fe/core/helpers/MassEditHelper.js +27 -18
  134. package/src/sap/fe/core/helpers/ModelHelper.js +229 -225
  135. package/src/sap/fe/core/helpers/ModelHelper.ts +227 -0
  136. package/src/sap/fe/core/helpers/PasteHelper.js +210 -132
  137. package/src/sap/fe/core/helpers/PasteHelper.ts +196 -0
  138. package/src/sap/fe/core/helpers/SemanticDateOperators.js +332 -313
  139. package/src/sap/fe/core/helpers/SemanticDateOperators.ts +330 -0
  140. package/src/sap/fe/core/helpers/SemanticKeyHelper.js +66 -67
  141. package/src/sap/fe/core/helpers/SemanticKeyHelper.ts +73 -0
  142. package/src/sap/fe/core/helpers/StableIdHelper.js +4 -7
  143. package/src/sap/fe/core/helpers/StableIdHelper.ts +2 -6
  144. package/src/sap/fe/core/jsx-runtime/jsx.js +1 -1
  145. package/src/sap/fe/core/jsx-runtime/jsx.ts +1 -1
  146. package/src/sap/fe/core/library.js +4 -3
  147. package/src/sap/fe/core/library.support.js +3 -2
  148. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +1 -1
  149. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +1 -1
  150. package/src/sap/fe/core/messagebundle.properties +23 -10
  151. package/src/sap/fe/core/messagebundle_ar.properties +9 -0
  152. package/src/sap/fe/core/messagebundle_bg.properties +9 -0
  153. package/src/sap/fe/core/messagebundle_ca.properties +9 -0
  154. package/src/sap/fe/core/messagebundle_cs.properties +10 -1
  155. package/src/sap/fe/core/messagebundle_cy.properties +9 -0
  156. package/src/sap/fe/core/messagebundle_da.properties +9 -0
  157. package/src/sap/fe/core/messagebundle_de.properties +9 -0
  158. package/src/sap/fe/core/messagebundle_el.properties +9 -0
  159. package/src/sap/fe/core/messagebundle_en.properties +9 -0
  160. package/src/sap/fe/core/messagebundle_en_GB.properties +9 -0
  161. package/src/sap/fe/core/messagebundle_en_US_sappsd.properties +9 -0
  162. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +9 -0
  163. package/src/sap/fe/core/messagebundle_en_US_saptrc.properties +9 -0
  164. package/src/sap/fe/core/messagebundle_es.properties +9 -0
  165. package/src/sap/fe/core/messagebundle_es_MX.properties +9 -0
  166. package/src/sap/fe/core/messagebundle_et.properties +9 -0
  167. package/src/sap/fe/core/messagebundle_fi.properties +9 -0
  168. package/src/sap/fe/core/messagebundle_fr.properties +13 -4
  169. package/src/sap/fe/core/messagebundle_fr_CA.properties +15 -6
  170. package/src/sap/fe/core/messagebundle_hi.properties +15 -6
  171. package/src/sap/fe/core/messagebundle_hr.properties +15 -6
  172. package/src/sap/fe/core/messagebundle_hu.properties +9 -0
  173. package/src/sap/fe/core/messagebundle_id.properties +10 -1
  174. package/src/sap/fe/core/messagebundle_it.properties +9 -0
  175. package/src/sap/fe/core/messagebundle_iw.properties +9 -0
  176. package/src/sap/fe/core/messagebundle_ja.properties +9 -0
  177. package/src/sap/fe/core/messagebundle_kk.properties +15 -6
  178. package/src/sap/fe/core/messagebundle_ko.properties +9 -0
  179. package/src/sap/fe/core/messagebundle_lt.properties +9 -0
  180. package/src/sap/fe/core/messagebundle_lv.properties +15 -6
  181. package/src/sap/fe/core/messagebundle_ms.properties +14 -5
  182. package/src/sap/fe/core/messagebundle_nl.properties +9 -0
  183. package/src/sap/fe/core/messagebundle_no.properties +9 -0
  184. package/src/sap/fe/core/messagebundle_pl.properties +9 -0
  185. package/src/sap/fe/core/messagebundle_pt.properties +9 -0
  186. package/src/sap/fe/core/messagebundle_pt_PT.properties +9 -0
  187. package/src/sap/fe/core/messagebundle_ro.properties +9 -0
  188. package/src/sap/fe/core/messagebundle_ru.properties +9 -0
  189. package/src/sap/fe/core/messagebundle_sh.properties +11 -2
  190. package/src/sap/fe/core/messagebundle_sk.properties +9 -0
  191. package/src/sap/fe/core/messagebundle_sl.properties +15 -6
  192. package/src/sap/fe/core/messagebundle_sv.properties +9 -0
  193. package/src/sap/fe/core/messagebundle_th.properties +9 -0
  194. package/src/sap/fe/core/messagebundle_tr.properties +9 -0
  195. package/src/sap/fe/core/messagebundle_uk.properties +9 -0
  196. package/src/sap/fe/core/messagebundle_vi.properties +9 -0
  197. package/src/sap/fe/core/messagebundle_zh_CN.properties +9 -0
  198. package/src/sap/fe/core/messagebundle_zh_TW.properties +15 -6
  199. package/src/sap/fe/core/services/AsyncComponentServiceFactory.js +1 -1
  200. package/src/sap/fe/core/services/AsyncComponentServiceFactory.ts +3 -1
  201. package/src/sap/fe/core/services/CacheHandlerServiceFactory.js +269 -202
  202. package/src/sap/fe/core/services/CacheHandlerServiceFactory.ts +212 -0
  203. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +1 -1
  204. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +7 -6
  205. package/src/sap/fe/core/services/NavigationServiceFactory.js +406 -300
  206. package/src/sap/fe/core/services/NavigationServiceFactory.ts +316 -0
  207. package/src/sap/fe/core/services/ResourceModelServiceFactory.js +149 -81
  208. package/src/sap/fe/core/services/ResourceModelServiceFactory.ts +80 -0
  209. package/src/sap/fe/core/services/RoutingServiceFactory.js +987 -899
  210. package/src/sap/fe/core/services/RoutingServiceFactory.ts +898 -0
  211. package/src/sap/fe/core/services/ShellServicesFactory.js +1 -1
  212. package/src/sap/fe/core/services/ShellServicesFactory.ts +15 -10
  213. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +35 -81
  214. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +46 -94
  215. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +461 -487
  216. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +453 -0
  217. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.js +10 -8
  218. package/src/sap/fe/core/services/view/TemplatingErrorPage.controller.ts +8 -0
  219. package/src/sap/fe/core/support/AnnotationIssue.support.js +15 -3
  220. package/src/sap/fe/core/support/AnnotationIssue.support.ts +16 -2
  221. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.js +2 -2
  222. package/src/sap/fe/core/support/CollectionFacetUnsupportedLevel.support.ts +1 -1
  223. package/src/sap/fe/core/templating/FieldControlHelper.js +8 -8
  224. package/src/sap/fe/core/templating/FieldControlHelper.ts +25 -7
  225. package/src/sap/fe/core/templating/FilterHelper.js +138 -72
  226. package/src/sap/fe/core/templating/FilterHelper.ts +139 -71
  227. package/src/sap/fe/core/templating/UIFormatters.js +31 -1
  228. package/src/sap/fe/core/templating/UIFormatters.ts +33 -2
  229. package/src/sap/fe/core/type/Email.js +1 -1
  230. package/src/sap/fe/core/type/Email.ts +4 -6
  231. package/ui5.yaml +0 -3
@@ -1115,8 +1115,7 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
1115
1115
 
1116
1116
  _this3.oCard.setHost(oHost);
1117
1117
 
1118
- _this3.oPopover = new Popover({
1119
- id: "kpi-Popover",
1118
+ _this3.oPopover = new Popover("kpi-Popover", {
1120
1119
  showHeader: false,
1121
1120
  placement: "Auto",
1122
1121
  content: [_this3.oCard]
@@ -1167,4 +1166,4 @@ sap.ui.define(["sap/ui/core/mvc/ControllerExtension", "sap/fe/core/controllerext
1167
1166
  }(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), _applyDecoratedDescriptor(_class2.prototype, "onKPIPressed", [Public], Object.getOwnPropertyDescriptor(_class2.prototype, "onKPIPressed"), _class2.prototype)), _class2)) || _class);
1168
1167
  return KPIManagementControllerExtension;
1169
1168
  }, false);
1170
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwibmFtZXMiOlsiTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIlZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGUiLCJOb25lIiwibWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24iLCJrcGlWYWx1ZSIsImFUaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIm1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24iLCJtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uIiwiZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSIsInRyZW5kVmFsdWUiLCJkZXZpYXRpb25JbmRpY2F0b3IiLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24iLCJyZWZlcmVuY2VWYWx1ZSIsImlzUmVsYXRpdmUiLCJjb21wVmFsdWUiLCJjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbiIsImZpbHRlckRlZmluaXRpb24iLCJyYW5nZXMiLCJsZW5ndGgiLCJGaWx0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiYVJhbmdlRmlsdGVycyIsIm1hcCIsInJhbmdlIiwiZmlsdGVycyIsImFuZCIsImdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uIiwiY3VycmVudExvY2FsZSIsIkxvY2FsZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZSIsInJlc0J1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRhdGVGb3JtYXQiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZUluc3RhbmNlIiwic3R5bGUiLCJmb3JtYXRSYW5nZSIsInZhbHVlTG93IiwicHJvcGVydHlUeXBlIiwiaW5kZXhPZiIsImZvcm1hdCIsIkRhdGUiLCJ2YWx1ZUhpZ2giLCJnZXRUZXh0Iiwiam9pbiIsImZvcm1hdENoYXJ0VGl0bGUiLCJrcGlEZWYiLCJmb3JtYXRMaXN0IiwiaXRlbXMiLCJsYWJlbCIsInJlcyIsIkkiLCJjaGFydCIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ0aXRsZSIsInZpc2libGUiLCJ2YWx1ZUF4aXMiLCJmb3JtYXRTdHJpbmciLCJwbG90QXJlYSIsImRhdGFMYWJlbCIsInR5cGUiLCJ2YWx1ZUF4aXMyIiwibGVnZW5kR3JvdXAiLCJsYXlvdXQiLCJwb3NpdGlvbiIsImFsaWdubWVudCIsInNpemVMZWdlbmQiLCJmaWx0ZXJNYXAiLCJhT2JqZWN0cyIsImFSb2xlcyIsImZpbHRlciIsImRpbWVuc2lvbiIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJVSTVDbGFzcyIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsIk92ZXJyaWRlIiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwiYUtQSURlZmluaXRpb25zIiwiZ2V0S1BJRGF0YSIsIm9WaWV3IiwiZ2V0VmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJpbml0Q2FyZE1hbmlmZXN0IiwiaW5pdE5hdmlnYXRpb25JbmZvIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJsb2FkS1BJVGFnRGF0YSIsImdldE1vZGVsIiwiZGVzdHJveSIsInNDdXN0b21EYXRhIiwiZ2V0Q29udGVudCIsInZEYXRhIiwiSlNPTiIsInBhcnNlIiwia3BpQ29udGV4dCIsInJhd1VuaXQiLCJpc1BhdGgiLCJnZXRQcm9wZXJ0eSIsImlzUGVyY2VudGFnZSIsImlzQ3VycmVuY3kiLCJyYXdWYWx1ZSIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJOdW1iZXJGb3JtYXQiLCJnZXRGbG9hdEluc3RhbmNlIiwibWluRnJhY3Rpb25EaWdpdHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsInNob3dTY2FsZSIsImtwaVZhbHVlVW5zY2FsZWQiLCJncm91cGluZ0VuYWJsZWQiLCJrcGlWYWx1ZU5vU2NhbGUiLCJrcGlWYWx1ZVNjYWxlIiwiZGVjaW1hbHMiLCJtYXhJbnRlZ2VyRGlnaXRzIiwia3BpVW5pdCIsImdldFVuaXRJbnN0YW5jZSIsInNob3dOdW1iZXIiLCJjcml0aWNhbGl0eVZhbHVlIiwiY3JpdGljYWxpdHlQYXRoIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSIsInRyZW5kUGF0aCIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRSZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsInRhcmdldFJhd1ZhbHVlIiwiZGV2aWF0aW9uUmF3VmFsdWUiLCJ0YXJnZXRTY2FsZSIsImRldmlhdGlvblZhbHVlIiwib01haW5Nb2RlbCIsImxvYWRGdWxsIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJlbnRpdHlTZXQiLCIkJGdyb3VwSWQiLCJvQWdncmVnYXRlIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGUiLCJhRmlsdGVycyIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3kiLCJ1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eSIsInVwZGF0ZURhdGFwb2ludFRyZW5kIiwidXBkYXRlVGFyZ2V0VmFsdWUiLCJvR3JvdXAiLCJncm91cCIsInNvcnRPcmRlciIsInNvcnQiLCJzb3J0SW5mbyIsIlNvcnRlciIsImRlc2NlbmRpbmciLCJtYXhJdGVtcyIsImNoYXJ0RGF0YSIsIm9Db250ZXh0Iiwib0RhdGEiLCJvS1BJVGFnIiwib1BvcG92ZXIiLCJyZWplY3QiLCJsb2FkTGlicmFyeSIsImFzeW5jIiwicmVxdWlyZSIsIkNhcmQiLCJIb3N0Iiwib0hvc3QiLCJhdHRhY2hBY3Rpb24iLCJvRXZlbnQiLCJzVHlwZSIsImdldFBhcmFtZXRlciIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwib0NhcmQiLCJ3aWR0aCIsImhlaWdodCIsInNldEhvc3QiLCJQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZERlcGVuZGVudCIsImtwaUlEIiwib0RlZiIsIm9Nb2RlbCIsImFQcm9taXNlcyIsImxvYWRLUElDYXJkRGF0YSIsImdldFBvcG92ZXIiLCJhbGwiLCJhUmVzdWx0cyIsInNldE1hbmlmZXN0IiwicmVmcmVzaCIsIm9wZW5CeSIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJQdWJsaWMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWFBLE1BQU1BLDBCQUF1RCxHQUFHO0FBQy9ELFNBQUtDLFdBQVcsQ0FBQ0MsS0FEOEM7QUFFL0QsU0FBS0QsV0FBVyxDQUFDRSxPQUY4QztBQUcvRCxTQUFLRixXQUFXLENBQUNHLE9BSDhDO0FBSS9ELFNBQUtILFdBQVcsQ0FBQ0k7QUFKOEMsR0FBaEU7QUFPQSxNQUFNQyx5QkFBc0QsR0FBRztBQUM5REosSUFBQUEsS0FBSyxFQUFFLE9BRHVEO0FBRTlEQyxJQUFBQSxPQUFPLEVBQUUsVUFGcUQ7QUFHOURDLElBQUFBLE9BQU8sRUFBRSxNQUhxRDtBQUk5REMsSUFBQUEsV0FBVyxFQUFFLE1BSmlEO0FBSzlERSxJQUFBQSxJQUFJLEVBQUU7QUFMd0QsR0FBL0Q7QUFRQTtBQUNBO0FBQ0E7QUFD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O0FBQ2JDLGNBQUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVRixHQUFWO0FBQ0EsYUFWRjtBQVdBO0FBQ0Q7QUFDRDs7OztJQTNtQjZDK0csbUIsc1dBNmtCN0NDLE07U0FpQ2F4SyxnQyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29udHJvbGxlckV4dGVuc2lvbiB9IGZyb20gXCJzYXAvdWkvY29yZS9tdmNcIjtcbmltcG9ydCB7IENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9uc1wiO1xuaW1wb3J0IHsgVUk1Q2xhc3MsIE92ZXJyaWRlLCBQdWJsaWMgfSBmcm9tIFwiLi4vaGVscGVycy9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IEpTT05Nb2RlbCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvanNvblwiO1xuaW1wb3J0IHsgT0RhdGFNb2RlbCwgQ29udGV4dCB9IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjRcIjtcbmltcG9ydCB7IExvZyB9IGZyb20gXCJzYXAvYmFzZVwiO1xuaW1wb3J0IHsgS1BJQ2hhcnREZWZpbml0aW9uLCBLUElEZWZpbml0aW9uLCBOYXZpZ2F0aW9uSW5mbyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9LUElcIjtcbmltcG9ydCB7IEJhc2VDb250cm9sbGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlXCI7XG5pbXBvcnQgeyBNZXNzYWdlVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1RhYmxlRm9ybWF0dGVyVHlwZXNcIjtcbmltcG9ydCB7IEZpbHRlckRlZmluaXRpb24sIFJhbmdlRGVmaW5pdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvU2VsZWN0aW9uVmFyaWFudEhlbHBlclwiO1xuaW1wb3J0IHsgTnVtYmVyRm9ybWF0LCBEYXRlRm9ybWF0IH0gZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdFwiO1xuaW1wb3J0IHsgTG9jYWxlIH0gZnJvbSBcInNhcC91aS9jb3JlXCI7XG5pbXBvcnQgeyBGaWx0ZXIsIEZpbHRlck9wZXJhdG9yLCBTb3J0ZXIgfSBmcm9tIFwic2FwL3VpL21vZGVsXCI7XG5pbXBvcnQgeyBHZW5lcmljVGFnLCBQb3BvdmVyIH0gZnJvbSBcInNhcC9tXCI7XG5cbmNvbnN0IE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5OiBSZWNvcmQ8c3RyaW5nLCBNZXNzYWdlVHlwZT4gPSB7XG5cdFwiMVwiOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XCIyXCI6IE1lc3NhZ2VUeXBlLldhcm5pbmcsXG5cdFwiM1wiOiBNZXNzYWdlVHlwZS5TdWNjZXNzLFxuXHRcIjVcIjogTWVzc2FnZVR5cGUuSW5mb3JtYXRpb25cbn07XG5cbmNvbnN0IFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGU6IFJlY29yZDxNZXNzYWdlVHlwZSwgc3RyaW5nPiA9IHtcblx0RXJyb3I6IFwiRXJyb3JcIixcblx0V2FybmluZzogXCJDcml0aWNhbFwiLFxuXHRTdWNjZXNzOiBcIkdvb2RcIixcblx0SW5mb3JtYXRpb246IFwiTm9uZVwiLFxuXHROb25lOiBcIk5vbmVcIlxufTtcblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ1RhcmdldCcuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIHtudW1iZXJbXX0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtEZXZpYXRpb25SYW5nZUxvd1ZhbHVlLFRvbGVyYW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlTG93VmFsdWUsQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIHtNZXNzYWdlVHlwZX0gUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzVdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNV0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s1XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1s0XSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzRdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbNF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbM10pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWluaW1pemUnLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbQWNjZXB0YW5jZVJhbmdlSGlnaFZhbHVlLFRvbGVyYW5jZVJhbmdlSGlnaFZhbHVlLERldmlhdGlvblJhbmdlSGlnaFZhbHVlXS5cbiAqIEByZXR1cm5zIHtNZXNzYWdlVHlwZX0gUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NaW5pbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMl0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBnZXQgYSBtZXNzYWdlIHN0YXRlIGZyb20gYSBjYWxjdWxhdGVkIGNyaXRpY2FsaXR5IG9mIHR5cGUgJ01heGltaXplJy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0ge251bWJlcltdfSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZV0uXG4gKiBAcmV0dXJucyB7TWVzc2FnZVR5cGV9IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgTWVzc2FnZVR5cGVcbiAqL1xuZnVuY3Rpb24gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihrcGlWYWx1ZTogbnVtYmVyLCBhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10pOiBNZXNzYWdlVHlwZSB7XG5cdGxldCBjcml0aWNhbGl0eVByb3BlcnR5OiBNZXNzYWdlVHlwZTtcblxuXHRpZiAoYVRocmVzaG9sZHNbMF0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1swXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1sxXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPCBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gY2FsY3VsYXRlIGEgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlIGZyb20gYSB0cmVuZCB2YWx1ZS5cbiAqXG4gKiBAcGFyYW0ge251bWJlcnxzdHJpbmd9IHRyZW5kVmFsdWUgVGhlIGNyaXRpY2FsaXR5IHZhbHVlcy5cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgRGV2aWF0aW9uSW5kaWNhdG9yIHZhbHVlXG4gKi9cbmZ1bmN0aW9uIGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUodHJlbmRWYWx1ZTogbnVtYmVyIHwgc3RyaW5nKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdHN3aXRjaCAodHJlbmRWYWx1ZSkge1xuXHRcdGNhc2UgMTogLy8gU3Ryb25nVXBcblx0XHRjYXNlIFwiMVwiOlxuXHRcdGNhc2UgMjogLy8gVXBcblx0XHRjYXNlIFwiMlwiOlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIDQ6IC8vIERvd25cblx0XHRjYXNlIFwiNFwiOlxuXHRcdGNhc2UgNTogLy8gU3Ryb25nRG93blxuXHRcdGNhc2UgXCI1XCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgZnJvbSBhIFRyZW5kQ2FsY3VsYXRpb24uXG4gKlxuICogQHBhcmFtIGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJXG4gKiBAcGFyYW0gcmVmZXJlbmNlVmFsdWUgVGhlIHJlZmVyZW5jZSB2YWx1ZSB0byBjb21wYXJlIHdpdGhcbiAqIEBwYXJhbSBpc1JlbGF0aXZlIFRydWUgaXMgdGhlIGNvbXBhcmlzb24gaXMgcmVsYXRpdmVcbiAqIEBwYXJhbSBhVGhyZXNob2xkcyBBcnJheSBvZiB0aHJlc2hvbGRzIFtTdHJvbmdEb3duRGlmZmVyZW5jZSwgRG93bkRpZmZlcmVuY2UsIFVwRGlmZmVyZW5jZSwgU3Ryb25nVXBEaWZmZXJlbmNlXVxuICogQHJldHVybnMge3NhcC5tLkRldmlhdGlvbkluZGljYXRvcn0gUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbUNhbGN1bGF0aW9uKFxuXHRrcGlWYWx1ZTogbnVtYmVyLFxuXHRyZWZlcmVuY2VWYWx1ZTogbnVtYmVyLFxuXHRpc1JlbGF0aXZlOiBib29sZWFuLFxuXHRhVGhyZXNob2xkczogKG51bWJlciB8IHVuZGVmaW5lZCB8IG51bGwpW10gfCB1bmRlZmluZWRcbik6IHN0cmluZyB7XG5cdGxldCBkZXZpYXRpb25JbmRpY2F0b3I6IHN0cmluZztcblxuXHRpZiAoIWFUaHJlc2hvbGRzIHx8IChpc1JlbGF0aXZlICYmICFyZWZlcmVuY2VWYWx1ZSkpIHtcblx0XHRyZXR1cm4gXCJOb25lXCI7XG5cdH1cblxuXHRjb25zdCBjb21wVmFsdWUgPSBpc1JlbGF0aXZlID8gKGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWUpIC8gcmVmZXJlbmNlVmFsdWUgOiBrcGlWYWx1ZSAtIHJlZmVyZW5jZVZhbHVlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1swXSkge1xuXHRcdC8vIFN0cm9uZ0Rvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA8PSBhVGhyZXNob2xkc1sxXSkge1xuXHRcdC8vIERvd24gLS0+IERvd25cblx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIkRvd25cIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1szXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzNdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1szXSkge1xuXHRcdC8vIFN0cm9uZ1VwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1syXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzJdICE9PSBudWxsICYmIGNvbXBWYWx1ZSA+PSBhVGhyZXNob2xkc1syXSkge1xuXHRcdC8vIFVwIC0tPiBVcFxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiVXBcIjtcblx0fSBlbHNlIHtcblx0XHQvLyBTaWRld2F5cyAtLT4gTm9uZVxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiTm9uZVwiO1xuXHR9XG5cblx0cmV0dXJuIGRldmlhdGlvbkluZGljYXRvcjtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIGEgZmlsdGVyIGRlZmluaXRpb24uXG4gKlxuICogQHBhcmFtIGZpbHRlckRlZmluaXRpb24gVGhlIGZpbHRlciBkZWZpbml0aW9uXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBkZWZpbml0aW9uLCBvciB1bmRlZmluZWQgaWYgdGhlIGRlZmluaXRpb24gaXMgZW1wdHkgKG5vIHJhbmdlcylcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24oZmlsdGVyRGVmaW5pdGlvbjogRmlsdGVyRGVmaW5pdGlvbik6IEZpbHRlciB8IHVuZGVmaW5lZCB7XG5cdGlmIChmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5sZW5ndGggPT09IDApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBuZXcgRmlsdGVyKFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcixcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLnJhbmdlTG93LFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VIaWdoXG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRjb25zdCBhUmFuZ2VGaWx0ZXJzID0gZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKHJhbmdlID0+IHtcblx0XHRcdHJldHVybiBuZXcgRmlsdGVyKGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlQYXRoLCByYW5nZS5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvciwgcmFuZ2UucmFuZ2VMb3csIHJhbmdlLnJhbmdlSGlnaCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoe1xuXHRcdFx0ZmlsdGVyczogYVJhbmdlRmlsdGVycyxcblx0XHRcdGFuZDogZmFsc2Vcblx0XHR9KTtcblx0fVxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0c2FwLnVpXG5cdFx0XHQuZ2V0Q29yZSgpXG5cdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHQuZ2V0TGFuZ3VhZ2UoKVxuXHQpO1xuXHRjb25zdCByZXNCdW5kbGUgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpO1xuXHRjb25zdCBkYXRlRm9ybWF0ID0gRGF0ZUZvcm1hdC5nZXREYXRlSW5zdGFuY2UoeyBzdHlsZTogXCJtZWRpdW1cIiB9LCBjdXJyZW50TG9jYWxlKTtcblxuXHRmdW5jdGlvbiBmb3JtYXRSYW5nZShyYW5nZTogUmFuZ2VEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0XHRjb25zdCB2YWx1ZUxvdyA9XG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5VHlwZS5pbmRleE9mKFwiRWRtLkRhdGVcIikgPT09IDAgPyBkYXRlRm9ybWF0LmZvcm1hdChuZXcgRGF0ZShyYW5nZS5yYW5nZUxvdykpIDogcmFuZ2UucmFuZ2VMb3c7XG5cdFx0Y29uc3QgdmFsdWVIaWdoID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMCA/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlSGlnaCkpIDogcmFuZ2UucmFuZ2VIaWdoO1xuXG5cdFx0c3dpdGNoIChyYW5nZS5vcGVyYXRvcikge1xuXHRcdFx0Y2FzZSBcIkJUXCI6XG5cdFx0XHRcdHJldHVybiBcIltcIiArIHZhbHVlTG93ICsgXCIgLSBcIiArIHZhbHVlSGlnaCArIFwiXVwiO1xuXG5cdFx0XHRjYXNlIFwiQ29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIFwiKlwiICsgdmFsdWVMb3cgKyBcIipcIjtcblxuXHRcdFx0Y2FzZSBcIkdFXCI6XG5cdFx0XHRcdHJldHVybiBcIlxcdTIyNjVcIiArIHZhbHVlTG93O1xuXG5cdFx0XHRjYXNlIFwiR1RcIjpcblx0XHRcdFx0cmV0dXJuIFwiPlwiICsgdmFsdWVMb3c7XG5cblx0XHRcdGNhc2UgXCJMRVwiOlxuXHRcdFx0XHRyZXR1cm4gXCJcXHUyMjY0XCIgKyB2YWx1ZUxvdztcblxuXHRcdFx0Y2FzZSBcIkxUXCI6XG5cdFx0XHRcdHJldHVybiBcIjxcIiArIHZhbHVlTG93O1xuXG5cdFx0XHRjYXNlIFwiTkJcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW1wiW1wiICsgdmFsdWVMb3cgKyBcIiAtIFwiICsgdmFsdWVIaWdoICsgXCJdXCJdKTtcblxuXHRcdFx0Y2FzZSBcIk5FXCI6XG5cdFx0XHRcdHJldHVybiBcIlxcdTIyNjBcIiArIHZhbHVlTG93O1xuXG5cdFx0XHRjYXNlIFwiTm90Q29udGFpbnNcIjpcblx0XHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0ZJTFRFUlNUUklOR19OT1RcIiwgW1wiKlwiICsgdmFsdWVMb3cgKyBcIipcIl0pO1xuXG5cdFx0XHRjYXNlIFwiRVFcIjpcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHJldHVybiB2YWx1ZUxvdztcblx0XHR9XG5cdH1cblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9IGVsc2UgaWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMSkge1xuXHRcdHJldHVybiBmb3JtYXRSYW5nZShmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXSk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIFwiKFwiICsgZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubWFwKGZvcm1hdFJhbmdlKS5qb2luKFwiLFwiKSArIFwiKVwiO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmOiBLUElEZWZpbml0aW9uKTogc3RyaW5nIHtcblx0Y29uc3QgcmVzQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblxuXHRmdW5jdGlvbiBmb3JtYXRMaXN0KGl0ZW1zOiB7IG5hbWU6IHN0cmluZzsgbGFiZWw6IHN0cmluZyB9W10pIHtcblx0XHRpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9IGVsc2UgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0cmV0dXJuIGl0ZW1zWzBdLmxhYmVsO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRsZXQgcmVzID0gaXRlbXNbMF0ubGFiZWw7XG5cdFx0XHRmb3IgKGxldCBJID0gMTsgSSA8IGl0ZW1zLmxlbmd0aCAtIDE7IEkrKykge1xuXHRcdFx0XHRyZXMgKz0gXCIsIFwiICsgaXRlbXNbSV0ubGFiZWw7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9JVEVNU0xJU1RcIiwgW3JlcywgaXRlbXNbaXRlbXMubGVuZ3RoIC0gMV0ubGFiZWxdKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfQ0hBUlRUSVRMRVwiLCBbZm9ybWF0TGlzdChrcGlEZWYuY2hhcnQubWVhc3VyZXMpLCBmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5kaW1lbnNpb25zKV0pO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVDaGFydExhYmVsU2V0dGluZ3MoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24sIG9DaGFydFByb3BlcnRpZXM6IGFueSk6IHZvaWQge1xuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdC8vIFNob3cgZGF0YSBsYWJlbHMsIGRvIG5vdCBzaG93IGF4aXMgdGl0bGVzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmNhdGVnb3J5QXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHtcblx0XHRcdFx0dmlzaWJsZTogdHJ1ZSxcblx0XHRcdFx0dHlwZTogXCJ2YWx1ZVwiLFxuXHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdF9NRkQyXCJcblx0XHRcdH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJidWJibGVcIjpcblx0XHRcdC8vIFNob3cgYXhpcyB0aXRsZSwgYnViYmxlIHNpemUgbGVnZW5kLCBkbyBub3Qgc2hvdyBkYXRhIGxhYmVsc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogdHJ1ZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzMiA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5sZWdlbmRHcm91cCA9IHtcblx0XHRcdFx0bGF5b3V0OiB7XG5cdFx0XHRcdFx0cG9zaXRpb246IFwiYm90dG9tXCIsXG5cdFx0XHRcdFx0YWxpZ25tZW50OiBcInRvcExlZnRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5zaXplTGVnZW5kID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdFx0XHRicmVhaztcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHQvLyBEbyBub3Qgc2hvdyBkYXRhIGxhYmVscyBhbmQgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0geyB2aXNpYmxlOiBmYWxzZSB9O1xuXHR9XG59XG5mdW5jdGlvbiBmaWx0ZXJNYXAoYU9iamVjdHM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nOyByb2xlPzogc3RyaW5nIH1bXSwgYVJvbGVzPzogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IHN0cmluZ1tdIHtcblx0aWYgKGFSb2xlcyAmJiBhUm9sZXMubGVuZ3RoKSB7XG5cdFx0cmV0dXJuIGFPYmplY3RzXG5cdFx0XHQuZmlsdGVyKGRpbWVuc2lvbiA9PiB7XG5cdFx0XHRcdHJldHVybiBhUm9sZXMuaW5kZXhPZihkaW1lbnNpb24ucm9sZSkgPj0gMDtcblx0XHRcdH0pXG5cdFx0XHQubWFwKGRpbWVuc2lvbiA9PiB7XG5cdFx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gYU9iamVjdHMubWFwKGRpbWVuc2lvbiA9PiB7XG5cdFx0XHRyZXR1cm4gZGltZW5zaW9uLmxhYmVsO1xuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbjogS1BJQ2hhcnREZWZpbml0aW9uKTogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXSB7XG5cdGNvbnN0IGF4aXMxTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMVwiXSk7XG5cdGNvbnN0IGF4aXMyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSk7XG5cdGNvbnN0IGF4aXMzTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzM1wiXSk7XG5cdGNvbnN0IG90aGVyTWVhc3VyZXMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkXSk7XG5cdGNvbnN0IHNlcmllc0RpbWVuc2lvbnMgPSBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSk7XG5cblx0Ly8gR2V0IHRoZSBmaXJzdCBkaW1lbnNpb24gd2l0aCByb2xlIFwiQ2F0ZWdvcnlcIiBmb3IgdGhlIHNoYXBlXG5cdGNvbnN0IHNoYXBlRGltZW5zaW9uID0gY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMuZmluZChkaW1lbnNpb24gPT4ge1xuXHRcdHJldHVybiBkaW1lbnNpb24ucm9sZSA9PT0gXCJDYXRlZ29yeVwiO1xuXHR9KTtcblxuXHQvLyBNZWFzdXJlIGZvciB0aGUgeC1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczEsIG9yIGZvciBBeGlzMiBpZiBub3QgZm91bmQsIG9yIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeE1lYXN1cmUgPSBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczJNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Ly8gTWVhc3VyZSBmb3IgdGhlIHktQXhpcyA6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMyLCBvciBzZWNvbmQgbWVhc3VyZSBmb3IgQXhpczEgaWYgbm90IGZvdW5kLCBvciBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMyBpZiBub3QgZm91bmRcblx0Y29uc3QgeU1lYXN1cmUgPSBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMzTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0Y29uc3QgcmVzID0gW1xuXHRcdHtcblx0XHRcdFwidWlkXCI6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBbeE1lYXN1cmVdXG5cdFx0fSxcblx0XHR7XG5cdFx0XHRcInVpZFwiOiBcInZhbHVlQXhpczJcIixcblx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFwidmFsdWVzXCI6IFt5TWVhc3VyZV1cblx0XHR9XG5cdF07XG5cblx0aWYgKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUgPT09IFwiYnViYmxlXCIpIHtcblx0XHQvLyBNZWFzdXJlIGZvciB0aGUgc2l6ZSBvZiB0aGUgYnViYmxlOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMywgb3IgcmVtYWluaW5nIG1lYXN1cmUgZm9yIEF4aXMxL0F4aXMyIGlmIG5vdCBmb3VuZFxuXHRcdGNvbnN0IHNpemVNZWFzdXJlID0gYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgb3RoZXJNZWFzdXJlcy5zaGlmdCgpIHx8IFwiXCI7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0XCJ1aWRcIjogXCJidWJibGVXaWR0aFwiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogW3NpemVNZWFzdXJlXVxuXHRcdH0pO1xuXHR9XG5cblx0Ly8gQ29sb3IgKG9wdGlvbmFsKVxuXHRpZiAoc2VyaWVzRGltZW5zaW9ucy5sZW5ndGgpIHtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFwidmFsdWVzXCI6IHNlcmllc0RpbWVuc2lvbnNcblx0XHR9KTtcblx0fVxuXHQvLyBTaGFwZSAob3B0aW9uYWwpXG5cdGlmIChzaGFwZURpbWVuc2lvbikge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdFwidWlkXCI6IFwic2hhcGVcIixcblx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogW3NoYXBlRGltZW5zaW9uLmxhYmVsXVxuXHRcdH0pO1xuXHR9XG5cdHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldENoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0bGV0IHJlczogeyB1aWQ6IHN0cmluZzsgdHlwZTogc3RyaW5nOyB2YWx1ZXM6IHN0cmluZ1tdIH1bXTtcblxuXHRzd2l0Y2ggKGNoYXJ0RGVmaW5pdGlvbi5jaGFydFR5cGUpIHtcblx0XHRjYXNlIFwiRG9udXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwic2l6ZVwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjb2xvclwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucylcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdGNhc2UgXCJzY2F0dGVyXCI6XG5cdFx0XHRyZXMgPSBnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyhjaGFydERlZmluaXRpb24pO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwidmVydGljYWxfYnVsbGV0XCI6XG5cdFx0XHRyZXMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImFjdHVhbFZhbHVlc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbdW5kZWZpbmVkLCBcIkF4aXMxXCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJ0YXJnZXRWYWx1ZXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcywgW1wiQXhpczJcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY29sb3JcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwidmFsdWVBeGlzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNhdGVnb3J5QXhpc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW3VuZGVmaW5lZCwgXCJDYXRlZ29yeVwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY29sb3JcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJEaW1lbnNpb25cIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLmRpbWVuc2lvbnMsIFtcIlNlcmllc1wiXSlcblx0XHRcdFx0fVxuXHRcdFx0XTtcblx0fVxuXG5cdHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKFxuXHRuYXZJbmZvOiBOYXZpZ2F0aW9uSW5mbyxcblx0b1NoZWxsU2VydmljZTogYW55XG4pOiBQcm9taXNlPHsgc2VtYW50aWNPYmplY3Q/OiBzdHJpbmc7IGFjdGlvbj86IHN0cmluZzsgb3V0Ym91bmQ/OiBzdHJpbmcgfSB8IHVuZGVmaW5lZD4ge1xuXHRpZiAobmF2SW5mby5zZW1hbnRpY09iamVjdCkge1xuXHRcdGlmIChuYXZJbmZvLmFjdGlvbikge1xuXHRcdFx0Ly8gQWN0aW9uIGlzIGFscmVhZHkgc3BlY2lmaWVkOiBjaGVjayBpZiBpdCdzIGF2YWlsYWJsZSBpbiB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldExpbmtzKHsgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfSkudGhlbigoYUxpbmtzOiBhbnlbXSkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYUxpbmtzLmxlbmd0aCA/IHsgc2VtYW50aWNPYmplY3Q6IG5hdkluZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogbmF2SW5mby5hY3Rpb24gfSA6IHVuZGVmaW5lZDtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBXZSBnZXQgdGhlIHByaW1hcnkgaW50ZW50IGZyb20gdGhlIHNoZWxsXG5cdFx0XHRyZXR1cm4gb1NoZWxsU2VydmljZS5nZXRQcmltYXJ5SW50ZW50KG5hdkluZm8uc2VtYW50aWNPYmplY3QpLnRoZW4oKG9MaW5rOiBhbnkpID0+IHtcblx0XHRcdFx0aWYgKCFvTGluaykge1xuXHRcdFx0XHRcdC8vIE5vIHByaW1hcnkgaW50ZW50Li4uXG5cdFx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIHRoYXQgdGhlIHByaW1hcnkgaW50ZW50IGlzIG5vdCBwYXJ0IG9mIHRoZSB1bmF2YWlsYWJsZSBhY3Rpb25zXG5cdFx0XHRcdGNvbnN0IG9JbmZvID0gb1NoZWxsU2VydmljZS5wYXJzZVNoZWxsSGFzaChvTGluay5pbnRlbnQpO1xuXHRcdFx0XHRyZXR1cm4gbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMgJiYgbmF2SW5mby51bmF2YWlsYWJsZUFjdGlvbnMuaW5kZXhPZihvSW5mby5hY3Rpb24pID49IDBcblx0XHRcdFx0XHQ/IHVuZGVmaW5lZFxuXHRcdFx0XHRcdDogeyBzZW1hbnRpY09iamVjdDogb0luZm8uc2VtYW50aWNPYmplY3QsIGFjdGlvbjogb0luZm8uYWN0aW9uIH07XG5cdFx0XHR9KTtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gT3V0Ym91bmQgbmF2aWdhdGlvbiBzcGVjaWZpZWQgaW4gdGhlIG1hbmlmZXN0XG5cdFx0cmV0dXJuIG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uID8gUHJvbWlzZS5yZXNvbHZlKHsgb3V0Ym91bmQ6IG5hdkluZm8ub3V0Ym91bmROYXZpZ2F0aW9uIH0pIDogUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG5cdH1cbn1cblxuLyoqXG4gKiBAY2xhc3MgQSBjb250cm9sbGVyIGV4dGVuc2lvbiBmb3IgbWFuYWdpbmcgdGhlIEtQSXMgaW4gYW4gYW5hbHl0aWNhbCBsaXN0IHBhZ2VcbiAqXG4gKiBAbmFtZSBzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XG4gKiBAaGlkZWNvbnN0cnVjdG9yXG4gKlxuICogQHByaXZhdGVcbiAqIEBzaW5jZSAxLjkzLjBcbiAqL1xuQFVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuS1BJTWFuYWdlbWVudFwiLCBDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEpXG5jbGFzcyBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbiBleHRlbmRzIENvbnRyb2xsZXJFeHRlbnNpb24ge1xuXHRwcm90ZWN0ZWQgYUtQSURlZmluaXRpb25zPzogS1BJRGVmaW5pdGlvbltdO1xuXHRwcm90ZWN0ZWQgb0NhcmQ6IGFueTtcblx0cHJvdGVjdGVkIG9Qb3BvdmVyITogUG9wb3ZlcjtcblxuXHQvKipcblx0ICogQ3JlYXRlcyB0aGUgY2FyZCBtYW5pZmVzdCBmb3IgYSBLUEkgZGVmaW5pdGlvbiBhbmQgc3RvcmVzIGl0IGluIGEgSlNPTiBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIGtwaURlZmluaXRpb24gVGhlIEtQSSBkZWZpbml0aW9uXG5cdCAqIEBwYXJhbSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgaW4gd2hpY2ggdGhlIG1hbmlmZXN0IHdpbGwgYmUgc3RvcmVkXG5cdCAqL1xuXHRwcm90ZWN0ZWQgaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvS1BJTW9kZWw6IEpTT05Nb2RlbDxhbnk+KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NhcmRNYW5pZmVzdDogYW55ID0ge1xuXHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0aWQ6IFwic2FwLmZlXCIsXG5cdFx0XHRcdHR5cGU6IFwiY2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAudWlcIjoge1xuXHRcdFx0XHR0ZWNobm9sb2d5OiBcIlVJNVwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAuY2FyZFwiOiB7XG5cdFx0XHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0anNvbjoge31cblx0XHRcdFx0fSxcblx0XHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJOdW1lcmljXCIsXG5cdFx0XHRcdFx0dGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRpdGxlLFxuXHRcdFx0XHRcdHN1YlRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR1bml0T2ZNZWFzdXJlbWVudDogXCJ7bWFpblVuaXR9XCIsXG5cdFx0XHRcdFx0bWFpbkluZGljYXRvcjoge1xuXHRcdFx0XHRcdFx0bnVtYmVyOiBcInttYWluVmFsdWVOb1NjYWxlfVwiLFxuXHRcdFx0XHRcdFx0dW5pdDogXCJ7bWFpblZhbHVlU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHRzdGF0ZTogXCJ7bWFpblN0YXRlfVwiLFxuXHRcdFx0XHRcdFx0dHJlbmQ6IFwie3RyZW5kfVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0bWluSGVpZ2h0OiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0Y2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRwbG90QXJlYToge30sXG5cdFx0XHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwibGVmdFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIi9jaGFydERhdGFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBBZGQgc2lkZSBpbmRpY2F0b3JzIGluIHRoZSBjYXJkIGhlYWRlciBpZiBhIHRhcmdldCBpcyBkZWZpbmVkIGZvciB0aGUgS1BJXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKTtcblx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuc2lkZUluZGljYXRvcnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX1RBUkdFVFwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie3RhcmdldE51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcInt0YXJnZXRVbml0fVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX0RFVklBVElPTlwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie2RldmlhdGlvbk51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcIiVcIlxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdC8vIERldGFpbHMgb2YgdGhlIGNhcmQ6IGZpbHRlciBkZXNjcmlwdGlvbnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLmZvckVhY2goZmlsdGVyRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoZGltZW5zaW9uID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsIHZhbHVlOiBcIntcIiArIGRpbWVuc2lvbi5uYW1lICsgXCJ9XCIgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5tZWFzdXJlcyA9IGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMubWFwKG1lYXN1cmUgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IG1lYXN1cmUubGFiZWwsIHZhbHVlOiBcIntcIiArIG1lYXN1cmUubmFtZSArIFwifVwiIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZmVlZHMgPSBnZXRDaGFydEZlZWRzKGtwaURlZmluaXRpb24uY2hhcnQpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCwge1xuXHRcdFx0bWFuaWZlc3Q6IG9DYXJkTWFuaWZlc3Rcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBpbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb0tQSU1vZGVsOiBKU09OTW9kZWw8YW55Piwgb1NoZWxsU2VydmljZTogYW55KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Ly8gQWRkIG5hdmlnYXRpb25cblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRyZXR1cm4gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoa3BpRGVmaW5pdGlvbi5uYXZpZ2F0aW9uLCBvU2hlbGxTZXJ2aWNlKS50aGVuKG9OYXZJbmZvID0+IHtcblx0XHRcdFx0aWYgKG9OYXZJbmZvKSB7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2hlYWRlci9hY3Rpb25zXCIsIFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0dHlwZTogXCJOYXZpZ2F0aW9uXCIsXG5cdFx0XHRcdFx0XHRcdHBhcmFtZXRlcnM6IG9OYXZJbmZvXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHR9XG5cblx0QE92ZXJyaWRlKClcblx0cHVibGljIG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLmFLUElEZWZpbml0aW9ucyA9IHRoaXMuZ2V0S1BJRGF0YSgpO1xuXG5cdFx0aWYgKHRoaXMuYUtQSURlZmluaXRpb25zICYmIHRoaXMuYUtQSURlZmluaXRpb25zLmxlbmd0aCkge1xuXHRcdFx0Y29uc3Qgb1ZpZXcgPSB0aGlzLmdldFZpZXcoKTtcblx0XHRcdGNvbnN0IG9BcHBDb21wb25lbnQgPSAob1ZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIEJhc2VDb250cm9sbGVyKS5nZXRBcHBDb21wb25lbnQoKSBhcyBhbnk7XG5cblx0XHRcdC8vIENyZWF0ZSBhIEpTT04gbW9kZWwgdG8gc3RvcmUgS1BJIGRhdGFcblx0XHRcdGNvbnN0IG9LUElNb2RlbCA9IG5ldyBKU09OTW9kZWwoKTtcblx0XHRcdG9WaWV3LnNldE1vZGVsKG9LUElNb2RlbCwgXCJrcGlNb2RlbFwiKTtcblxuXHRcdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMuZm9yRWFjaChrcGlEZWZpbml0aW9uID0+IHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBtYW5pZmVzdCBmb3IgdGhlIEtQSSBjYXJkIGFuZCBzdG9yZSBpdCBpbiB0aGUgS1BJIG1vZGVsXG5cdFx0XHRcdHRoaXMuaW5pdENhcmRNYW5pZmVzdChrcGlEZWZpbml0aW9uLCBvS1BJTW9kZWwpO1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgbmF2aWdhdGlvbiBpbmZvcm1hdGlvbiBpbiB0aGUgbWFuaWZlc3Rcblx0XHRcdFx0dGhpcy5pbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsLCBvQXBwQ29tcG9uZW50LmdldFNoZWxsU2VydmljZXMoKSkuY2F0Y2goZnVuY3Rpb24oZXJyOiBhbnkpIHtcblx0XHRcdFx0XHRMb2cuZXJyb3IoZXJyKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gTG9hZCB0YWcgZGF0YSBmb3IgdGhlIEtQSVxuXHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsLCBvS1BJTW9kZWwpLmNhdGNoKGZ1bmN0aW9uKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0QE92ZXJyaWRlKClcblx0cHVibGljIG9uRXhpdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSB0aGlzLmdldFZpZXcoKS5nZXRNb2RlbChcImtwaU1vZGVsXCIpIGFzIEpTT05Nb2RlbDxhbnk+O1xuXG5cdFx0aWYgKG9LUElNb2RlbCkge1xuXHRcdFx0b0tQSU1vZGVsLmRlc3Ryb3koKTtcblx0XHR9XG5cdH1cblxuXHRwcml2YXRlIGdldEtQSURhdGEoKTogS1BJRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBvVmlldyA9IHRoaXMuZ2V0VmlldygpLFxuXHRcdFx0c0N1c3RvbURhdGEgPSBvVmlldy5nZXRDb250ZW50KClbMF0uZGF0YShcIktQSURhdGFcIik7XG5cblx0XHRpZiAoc0N1c3RvbURhdGEpIHtcblx0XHRcdGNvbnN0IHZEYXRhID0gdHlwZW9mIHNDdXN0b21EYXRhID09PSBcInN0cmluZ1wiID8gSlNPTi5wYXJzZShzQ3VzdG9tRGF0YSkgOiBzQ3VzdG9tRGF0YTtcblx0XHRcdGlmIChcImN1c3RvbURhdGFcIiBpbiB2RGF0YSkge1xuXHRcdFx0XHRyZXR1cm4gdkRhdGFbXCJjdXN0b21EYXRhXCJdO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHZEYXRhO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbDxhbnk+KSB7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVwiLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRcIiwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZVwiLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlXCIsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdFwiLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRcIiwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbDxhbnk+KSB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IGNyaXRpY2FsaXR5VmFsdWUgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVZhbHVlKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHRjcml0aWNhbGl0eVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5ICh2aWEgYSBwYXRoKVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9XG5cdFx0XHRcdE1lc3NhZ2VUeXBlRnJvbUNyaXRpY2FsaXR5W2twaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKV0gfHwgTWVzc2FnZVR5cGUuTm9uZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzICYmIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25Nb2RlKSB7XG5cdFx0XHQvLyBDcml0aWNhbGl0eSBjYWxjdWxhdGlvblxuXHRcdFx0c3dpdGNoIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL1RhcmdldFwiOlxuXHRcdFx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPSBtZXNzYWdlVHlwZUZyb21UYXJnZXRDYWxjdWxhdGlvbihyYXdWYWx1ZSwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWluaW1pemVcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWluaW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdGNhc2UgXCJVSS5JbXByb3ZlbWVudERpcmVjdGlvblR5cGUvTWF4aW1pemVcIjpcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tTWF4aW1pemVDYWxjdWxhdGlvbihcblx0XHRcdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5XCIsIGNyaXRpY2FsaXR5VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcblx0XHRcdFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluU3RhdGVcIixcblx0XHRcdFZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGVbY3JpdGljYWxpdHlWYWx1ZV0gfHwgXCJOb25lXCJcblx0XHQpO1xuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbDxhbnk+KSB7XG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0bGV0IHRyZW5kVmFsdWUgPSBcIk5vbmVcIjtcblxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlKSB7XG5cdFx0XHQvLyBUcmVuZCBpcyBhIGZpeGVkIHZhbHVlXG5cdFx0XHR0cmVuZFZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRWYWx1ZTtcblx0XHR9IGVsc2UgaWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0Ly8gVHJlbmQgY29tZXMgZnJvbSBhbm90aGVyIHByb3BlcnR5IHZpYSBhIHBhdGhcblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tVHJlbmRUeXBlKGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSk7XG5cdFx0fSBlbHNlIGlmIChcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aFxuXHRcdCkge1xuXHRcdFx0Ly8gQ2FsY3VsYXRlZCB0cmVuZFxuXHRcdFx0bGV0IHRyZW5kUmVmZXJlbmNlVmFsdWU6IG51bWJlcjtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dHJlbmRSZWZlcmVuY2VWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KFxuXHRcdFx0XHRcdGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGggfHwgXCJcIilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHRyZW5kVmFsdWUgPSBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdFx0XHRcdHJhd1ZhbHVlLFxuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlLFxuXHRcdFx0XHQhIWtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlLFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uVHJlc2hvbGRzXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdHJlbmRcIiwgdHJlbmRWYWx1ZSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsPGFueT4pIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblxuXHRcdGxldCB0YXJnZXRSYXdWYWx1ZTogbnVtYmVyO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBcIlwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGRldmlhdGlvblJhd1ZhbHVlID0gdGFyZ2V0UmF3VmFsdWUgIT09IDAgPyAoKHJhd1ZhbHVlIC0gdGFyZ2V0UmF3VmFsdWUpIC8gdGFyZ2V0UmF3VmFsdWUpICogMTAwIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9ybWF0dGluZ1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cdFx0Y29uc3QgdGFyZ2V0U2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlclwiLCB0YXJnZXRWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0XCIsIHRhcmdldFNjYWxlKTtcblxuXHRcdGlmIChkZXZpYXRpb25SYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZXZpYXRpb25WYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0XHQpLmZvcm1hdChkZXZpYXRpb25SYXdWYWx1ZSk7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlclwiLCBkZXZpYXRpb25WYWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyXCIsIFwiTi9BXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0YWcgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0tQSURlZmluaXRpb259IGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIHtPRGF0YU1vZGVsfSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSB7SlNPTk1vZGVsfSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHBhcmFtIGxvYWRGdWxsIElmIG5vdCB0cnVlLCBsb2FkcyBvbmx5IGRhdGEgZm9yIHRoZSBLUEkgdGFnXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLCBvS1BJTW9kZWw6IEpTT05Nb2RlbDxhbnk+LCBsb2FkRnVsbD86IGJvb2xlYW4pOiBhbnkge1xuXHRcdC8vIElmIGxvYWRGdWxsPWZhbHNlLCB0aGVuIHdlJ3JlIGp1c3QgbG9hZGluZyBkYXRhIGZvciB0aGUgdGFnIGFuZCB3ZSB1c2UgdGhlIFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiBncm91cElEXG5cdFx0Ly8gSWYgbG9hZEZ1bGw9dHJ1ZSwgd2UncmUgbG9hZGluZyBkYXRhIGZvciB0aGUgd2hvbGUgS1BJICh0YWcgKyBjYXJkKSBhbmQgd2UgdXNlIHRoZSBkZWZhdWx0IChcIiRhdXRvXCIpIGdyb3VwSURcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBsb2FkRnVsbFxuXHRcdFx0PyBvTWFpbk1vZGVsLmJpbmRMaXN0KFwiL1wiICsga3BpRGVmaW5pdGlvbi5lbnRpdHlTZXQpXG5cdFx0XHQ6IG9NYWluTW9kZWwuYmluZExpc3QoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmVudGl0eVNldCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgeyAkJGdyb3VwSWQ6IFwiJGF1dG8uTG9uZ1J1bm5lcnNcIiB9KTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCB7IHVuaXQ/OiBzdHJpbmcgfT4gPSB7fTtcblxuXHRcdC8vIE1haW4gdmFsdWUgKyBjdXJyZW5jeS91bml0XG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aCkge1xuXHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGhdID0geyB1bml0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LnZhbHVlIH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnR5IGZvciBjcml0aWNhbGl0eVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoXSA9IHt9O1xuXHRcdH1cblxuXHRcdC8vIFByb3BlcnRpZXMgZm9yIHRyZW5kIGFuZCB0cmVuZCBjYWxjdWxhdGlvblxuXHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCkge1xuXHRcdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoXSA9IHt9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7IGFnZ3JlZ2F0ZTogb0FnZ3JlZ2F0ZSB9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcihmaWx0ZXIgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvTGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKDAsIDEpLnRoZW4oKGFDb250ZXh0czogQ29udGV4dFtdKSA9PiB7XG5cdFx0XHRpZiAoYUNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHRcdFx0PyBhQ29udGV4dHNbMF0uZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdFx0XHQ6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LnZhbHVlO1xuXG5cdFx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmICFyYXdVbml0KSB7XG5cdFx0XHRcdFx0Ly8gQSB1bml0L2N1cnJlbmN5IGlzIGRlZmluZWQsIGJ1dCBpdHMgdmFsdWUgaXMgdW5kZWZpbmVkIC0tPiBtdWx0aS11bml0IHNpdHVhdGlvblxuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlXCIsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVVuc2NhbGVkXCIsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZU5vU2NhbGVcIiwgXCIqXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlU2NhbGVcIiwgXCJcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpbkNyaXRpY2FsaXR5XCIsIE1lc3NhZ2VUeXBlLk5vbmUpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlXCIsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RyZW5kXCIsIFwiTm9uZVwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlclwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vdGFyZ2V0VW5pdFwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyXCIsIHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR0aGlzLnVwZGF0ZURhdGFwb2ludENyaXRpY2FsaXR5KGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHRcdGlmIChsb2FkRnVsbCkge1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRUcmVuZChrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZVRhcmdldFZhbHVlKGtwaURlZmluaXRpb24sIGFDb250ZXh0c1swXSwgb0tQSU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyBjYXJkIGRhdGEgZm9yIGEgS1BJLCBhbmQgc3RvcmVzIGl0IGluIHRoZSBKU09OIEtQSSBtb2RlbC5cblx0ICpcblx0ICogQHBhcmFtIHtLUElEZWZpbml0aW9ufSBrcGlEZWZpbml0aW9uIFRoZSBkZWZpbml0aW9uIG9mIHRoZSBLUEkuXG5cdCAqIEBwYXJhbSB7T0RhdGFNb2RlbH0gb01haW5Nb2RlbCBUaGUgbW9kZWwgdXNlZCB0byBsb2FkIHRoZSBkYXRhLlxuXHQgKiBAcGFyYW0ge0pTT05Nb2RlbH0gb0tQSU1vZGVsIFRoZSBKU09OIG1vZGVsIHdoZXJlIHRoZSBkYXRhIHdpbGwgYmUgc3RvcmVkXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJQ2FyZERhdGEoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb01haW5Nb2RlbDogT0RhdGFNb2RlbCwgb0tQSU1vZGVsOiBKU09OTW9kZWw8YW55Pik6IGFueSB7XG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gb01haW5Nb2RlbC5iaW5kTGlzdChcIi9cIiArIGtwaURlZmluaXRpb24uZW50aXR5U2V0KTtcblx0XHRjb25zdCBvR3JvdXA6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblx0XHRjb25zdCBvQWdncmVnYXRlOiBSZWNvcmQ8c3RyaW5nLCBPYmplY3Q+ID0ge307XG5cblx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaChkaW1lbnNpb24gPT4ge1xuXHRcdFx0b0dyb3VwW2RpbWVuc2lvbi5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaChtZWFzdXJlID0+IHtcblx0XHRcdG9BZ2dyZWdhdGVbbWVhc3VyZS5uYW1lXSA9IHt9O1xuXHRcdH0pO1xuXHRcdG9MaXN0QmluZGluZy5zZXRBZ2dyZWdhdGlvbih7XG5cdFx0XHRncm91cDogb0dyb3VwLFxuXHRcdFx0YWdncmVnYXRlOiBvQWdncmVnYXRlXG5cdFx0fSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoZmlsdGVyID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHQvLyBTb3J0aW5nXG5cdFx0aWYgKGtwaURlZmluaXRpb24uY2hhcnQuc29ydE9yZGVyKSB7XG5cdFx0XHRvTGlzdEJpbmRpbmcuc29ydChcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIubWFwKHNvcnRJbmZvID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbmV3IFNvcnRlcihzb3J0SW5mby5uYW1lLCBzb3J0SW5mby5kZXNjZW5kaW5nKTtcblx0XHRcdFx0fSlcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9MaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoMCwga3BpRGVmaW5pdGlvbi5jaGFydC5tYXhJdGVtcykudGhlbigoYUNvbnRleHRzOiBDb250ZXh0W10pID0+IHtcblx0XHRcdGNvbnN0IGNoYXJ0RGF0YSA9IGFDb250ZXh0cy5tYXAoZnVuY3Rpb24ob0NvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgb0RhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblx0XHRcdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5kaW1lbnNpb25zLmZvckVhY2goZGltZW5zaW9uID0+IHtcblx0XHRcdFx0XHRvRGF0YVtkaW1lbnNpb24ubmFtZV0gPSBvQ29udGV4dC5nZXRQcm9wZXJ0eShkaW1lbnNpb24ubmFtZSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0Lm1lYXN1cmVzLmZvckVhY2gobWVhc3VyZSA9PiB7XG5cdFx0XHRcdFx0b0RhdGFbbWVhc3VyZS5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KG1lYXN1cmUubmFtZSk7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiBvRGF0YTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2NoYXJ0RGF0YVwiLCBjaGFydERhdGEpO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIHBvcG92ZXIgdG8gZGlzcGxheSB0aGUgS1BJIGNhcmRcblx0ICogVGhlIHBvcG92ZXIgYW5kIHRoZSBjb250YWluZWQgY2FyZCBmb3IgdGhlIEtQSXMgYXJlIGNyZWF0ZWQgaWYgbmVjZXNzYXJ5LlxuXHQgKiBUaGUgcG9wb3ZlciBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgS1BJcywgc28gaXQncyBjcmVhdGVkIG9ubHkgb25jZS5cblx0ICpcblx0ICogQHBhcmFtIG9LUElUYWcgVGhlIHRhZyB0aGF0IHRyaWdnZXJlZCB0aGUgcG9wb3ZlciBvcGVuaW5nLlxuXHQgKiBAcmV0dXJucyBUaGUgc2hhcmVkIHBvcG92ZXIgYXMgYSBwcm9taXNlLlxuXHQgKi9cblx0cHJvdGVjdGVkIGdldFBvcG92ZXIob0tQSVRhZzogR2VuZXJpY1RhZyk6IFByb21pc2U8UG9wb3Zlcj4ge1xuXHRcdGlmICghdGhpcy5vUG9wb3Zlcikge1xuXHRcdFx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0c2FwLnVpXG5cdFx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHRcdC5sb2FkTGlicmFyeShcInNhcC91aS9pbnRlZ3JhdGlvblwiLCB7IGFzeW5jOiB0cnVlIH0pXG5cdFx0XHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VpL2ludGVncmF0aW9uL3dpZGdldHMvQ2FyZFwiLCBcInNhcC91aS9pbnRlZ3JhdGlvbi9Ib3N0XCJdLCAoQ2FyZDogYW55LCBIb3N0OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0hvc3QgPSBuZXcgSG9zdCgpO1xuXG5cdFx0XHRcdFx0XHRcdG9Ib3N0LmF0dGFjaEFjdGlvbigob0V2ZW50OiBhbnkpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzVHlwZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ0eXBlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9QYXJhbXMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwicGFyYW1ldGVyc1wiKTtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChzVHlwZSA9PT0gXCJOYXZpZ2F0aW9uXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmIChvUGFyYW1zLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG9QYXJhbXMuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtcy5hY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCh0aGlzLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCkgYXMgYW55KS5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlT3V0Ym91bmQob1BhcmFtcy5vdXRib3VuZCk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkID0gbmV3IENhcmQoe1xuXHRcdFx0XHRcdFx0XHRcdHdpZHRoOiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0XHRcdFx0aGVpZ2h0OiBcImF1dG9cIlxuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0dGhpcy5vQ2FyZC5zZXRIb3N0KG9Ib3N0IGFzIGFueSk7XG5cblx0XHRcdFx0XHRcdFx0dGhpcy5vUG9wb3ZlciA9IG5ldyBQb3BvdmVyKHtcblx0XHRcdFx0XHRcdFx0XHRpZDogXCJrcGktUG9wb3ZlclwiLFxuXHRcdFx0XHRcdFx0XHRcdHNob3dIZWFkZXI6IGZhbHNlLFxuXHRcdFx0XHRcdFx0XHRcdHBsYWNlbWVudDogXCJBdXRvXCIsXG5cdFx0XHRcdFx0XHRcdFx0Y29udGVudDogW3RoaXMub0NhcmRdXG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdG9LUElUYWcuYWRkRGVwZW5kZW50KHRoaXMub1BvcG92ZXIpOyAvLyBUaGUgZmlyc3QgY2xpY2tlZCB0YWcgZ2V0cyB0aGUgcG9wb3ZlciBhcyBkZXBlbmRlbnRcblxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZWplY3QoKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMub1BvcG92ZXIpO1xuXHRcdH1cblx0fVxuXG5cdEBQdWJsaWNcblx0cHVibGljIG9uS1BJUHJlc3NlZChvS1BJVGFnOiBhbnksIGtwaUlEOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBvS1BJTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKFwia3BpTW9kZWxcIikgYXMgSlNPTk1vZGVsPGFueT47XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBrcGlEZWZpbml0aW9uID0gdGhpcy5hS1BJRGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbihvRGVmKSB7XG5cdFx0XHRcdHJldHVybiBvRGVmLmlkID09PSBrcGlJRDtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbikge1xuXHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGFQcm9taXNlcyA9IFtcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsLCB0cnVlKSxcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElDYXJkRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCksXG5cdFx0XHRcdFx0dGhpcy5nZXRQb3BvdmVyKG9LUElUYWcpXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0UHJvbWlzZS5hbGwoYVByb21pc2VzKVxuXHRcdFx0XHRcdC50aGVuKGFSZXN1bHRzID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KFwiL1wiICsga3BpSUQgKyBcIi9tYW5pZmVzdFwiKSk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgb1BvcG92ZXIgPSBhUmVzdWx0c1syXTtcblx0XHRcdFx0XHRcdG9Qb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZXJyID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbjtcbiJdfQ==
1169
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIktQSU1hbmFnZW1lbnQudHMiXSwibmFtZXMiOlsiTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHkiLCJNZXNzYWdlVHlwZSIsIkVycm9yIiwiV2FybmluZyIsIlN1Y2Nlc3MiLCJJbmZvcm1hdGlvbiIsIlZhbHVlQ29sb3JGcm9tTWVzc2FnZVR5cGUiLCJOb25lIiwibWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24iLCJrcGlWYWx1ZSIsImFUaHJlc2hvbGRzIiwiY3JpdGljYWxpdHlQcm9wZXJ0eSIsInVuZGVmaW5lZCIsIm1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24iLCJtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uIiwiZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSIsInRyZW5kVmFsdWUiLCJkZXZpYXRpb25JbmRpY2F0b3IiLCJkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24iLCJyZWZlcmVuY2VWYWx1ZSIsImlzUmVsYXRpdmUiLCJjb21wVmFsdWUiLCJjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbiIsImZpbHRlckRlZmluaXRpb24iLCJyYW5nZXMiLCJsZW5ndGgiLCJGaWx0ZXIiLCJwcm9wZXJ0eVBhdGgiLCJvcGVyYXRvciIsInJhbmdlTG93IiwicmFuZ2VIaWdoIiwiYVJhbmdlRmlsdGVycyIsIm1hcCIsInJhbmdlIiwiZmlsdGVycyIsImFuZCIsImdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uIiwiY3VycmVudExvY2FsZSIsIkxvY2FsZSIsInNhcCIsInVpIiwiZ2V0Q29yZSIsImdldENvbmZpZ3VyYXRpb24iLCJnZXRMYW5ndWFnZSIsInJlc0J1bmRsZSIsImdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZSIsImRhdGVGb3JtYXQiLCJEYXRlRm9ybWF0IiwiZ2V0RGF0ZUluc3RhbmNlIiwic3R5bGUiLCJmb3JtYXRSYW5nZSIsInZhbHVlTG93IiwicHJvcGVydHlUeXBlIiwiaW5kZXhPZiIsImZvcm1hdCIsIkRhdGUiLCJ2YWx1ZUhpZ2giLCJnZXRUZXh0Iiwiam9pbiIsImZvcm1hdENoYXJ0VGl0bGUiLCJrcGlEZWYiLCJmb3JtYXRMaXN0IiwiaXRlbXMiLCJsYWJlbCIsInJlcyIsIkkiLCJjaGFydCIsIm1lYXN1cmVzIiwiZGltZW5zaW9ucyIsInVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyIsImNoYXJ0RGVmaW5pdGlvbiIsIm9DaGFydFByb3BlcnRpZXMiLCJjaGFydFR5cGUiLCJjYXRlZ29yeUF4aXMiLCJ0aXRsZSIsInZpc2libGUiLCJ2YWx1ZUF4aXMiLCJmb3JtYXRTdHJpbmciLCJwbG90QXJlYSIsImRhdGFMYWJlbCIsInR5cGUiLCJ2YWx1ZUF4aXMyIiwibGVnZW5kR3JvdXAiLCJsYXlvdXQiLCJwb3NpdGlvbiIsImFsaWdubWVudCIsInNpemVMZWdlbmQiLCJmaWx0ZXJNYXAiLCJhT2JqZWN0cyIsImFSb2xlcyIsImZpbHRlciIsImRpbWVuc2lvbiIsInJvbGUiLCJnZXRTY2F0dGVyQnViYmxlQ2hhcnRGZWVkcyIsImF4aXMxTWVhc3VyZXMiLCJheGlzMk1lYXN1cmVzIiwiYXhpczNNZWFzdXJlcyIsIm90aGVyTWVhc3VyZXMiLCJzZXJpZXNEaW1lbnNpb25zIiwic2hhcGVEaW1lbnNpb24iLCJmaW5kIiwieE1lYXN1cmUiLCJzaGlmdCIsInlNZWFzdXJlIiwic2l6ZU1lYXN1cmUiLCJwdXNoIiwiZ2V0Q2hhcnRGZWVkcyIsImdldE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwibmF2SW5mbyIsIm9TaGVsbFNlcnZpY2UiLCJzZW1hbnRpY09iamVjdCIsImFjdGlvbiIsImdldExpbmtzIiwidGhlbiIsImFMaW5rcyIsImdldFByaW1hcnlJbnRlbnQiLCJvTGluayIsIm9JbmZvIiwicGFyc2VTaGVsbEhhc2giLCJpbnRlbnQiLCJ1bmF2YWlsYWJsZUFjdGlvbnMiLCJvdXRib3VuZE5hdmlnYXRpb24iLCJQcm9taXNlIiwicmVzb2x2ZSIsIm91dGJvdW5kIiwiS1BJTWFuYWdlbWVudENvbnRyb2xsZXJFeHRlbnNpb24iLCJVSTVDbGFzcyIsIkNvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSIsIk92ZXJyaWRlIiwia3BpRGVmaW5pdGlvbiIsIm9LUElNb2RlbCIsIm9DYXJkTWFuaWZlc3QiLCJpZCIsInRlY2hub2xvZ3kiLCJkYXRhIiwianNvbiIsImhlYWRlciIsImRhdGFwb2ludCIsInN1YlRpdGxlIiwiZGVzY3JpcHRpb24iLCJ1bml0T2ZNZWFzdXJlbWVudCIsIm1haW5JbmRpY2F0b3IiLCJudW1iZXIiLCJ1bml0Iiwic3RhdGUiLCJ0cmVuZCIsImNvbnRlbnQiLCJtaW5IZWlnaHQiLCJjaGFydFByb3BlcnRpZXMiLCJwYXRoIiwidGFyZ2V0UGF0aCIsInRhcmdldFZhbHVlIiwic2lkZUluZGljYXRvcnMiLCJzZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMiLCJhRGVzY3JpcHRpb25zIiwiZm9yRWFjaCIsImRlc2MiLCJkZXRhaWxzIiwidGV4dCIsInZhbHVlIiwibmFtZSIsIm1lYXN1cmUiLCJmZWVkcyIsInNldFByb3BlcnR5IiwibWFuaWZlc3QiLCJuYXZpZ2F0aW9uIiwib05hdkluZm8iLCJwYXJhbWV0ZXJzIiwiYUtQSURlZmluaXRpb25zIiwiZ2V0S1BJRGF0YSIsIm9WaWV3IiwiZ2V0VmlldyIsIm9BcHBDb21wb25lbnQiLCJnZXRDb250cm9sbGVyIiwiZ2V0QXBwQ29tcG9uZW50IiwiSlNPTk1vZGVsIiwic2V0TW9kZWwiLCJpbml0Q2FyZE1hbmlmZXN0IiwiaW5pdE5hdmlnYXRpb25JbmZvIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsImNhdGNoIiwiZXJyIiwiTG9nIiwiZXJyb3IiLCJsb2FkS1BJVGFnRGF0YSIsImdldE1vZGVsIiwiZGVzdHJveSIsInNDdXN0b21EYXRhIiwiZ2V0Q29udGVudCIsInZEYXRhIiwiSlNPTiIsInBhcnNlIiwia3BpQ29udGV4dCIsInJhd1VuaXQiLCJpc1BhdGgiLCJnZXRQcm9wZXJ0eSIsImlzUGVyY2VudGFnZSIsImlzQ3VycmVuY3kiLCJyYXdWYWx1ZSIsIk51bWJlciIsInBhcnNlRmxvYXQiLCJOdW1iZXJGb3JtYXQiLCJnZXRGbG9hdEluc3RhbmNlIiwibWluRnJhY3Rpb25EaWdpdHMiLCJtYXhGcmFjdGlvbkRpZ2l0cyIsInNob3dTY2FsZSIsImtwaVZhbHVlVW5zY2FsZWQiLCJncm91cGluZ0VuYWJsZWQiLCJrcGlWYWx1ZU5vU2NhbGUiLCJrcGlWYWx1ZVNjYWxlIiwiZGVjaW1hbHMiLCJtYXhJbnRlZ2VyRGlnaXRzIiwia3BpVW5pdCIsImdldFVuaXRJbnN0YW5jZSIsInNob3dOdW1iZXIiLCJjcml0aWNhbGl0eVZhbHVlIiwiY3JpdGljYWxpdHlQYXRoIiwiY3JpdGljYWxpdHlDYWxjdWxhdGlvblRocmVzaG9sZHMiLCJjcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSIsInRyZW5kUGF0aCIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoIiwidHJlbmRSZWZlcmVuY2VWYWx1ZSIsInRyZW5kQ2FsY3VsYXRpb25Jc1JlbGF0aXZlIiwidHJlbmRDYWxjdWxhdGlvblRyZXNob2xkcyIsInRhcmdldFJhd1ZhbHVlIiwiZGV2aWF0aW9uUmF3VmFsdWUiLCJ0YXJnZXRTY2FsZSIsImRldmlhdGlvblZhbHVlIiwib01haW5Nb2RlbCIsImxvYWRGdWxsIiwib0xpc3RCaW5kaW5nIiwiYmluZExpc3QiLCJlbnRpdHlTZXQiLCIkJGdyb3VwSWQiLCJvQWdncmVnYXRlIiwic2V0QWdncmVnYXRpb24iLCJhZ2dyZWdhdGUiLCJhRmlsdGVycyIsInJlcXVlc3RDb250ZXh0cyIsImFDb250ZXh0cyIsInVwZGF0ZURhdGFwb2ludFZhbHVlQW5kQ3VycmVuY3kiLCJ1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eSIsInVwZGF0ZURhdGFwb2ludFRyZW5kIiwidXBkYXRlVGFyZ2V0VmFsdWUiLCJvR3JvdXAiLCJncm91cCIsInNvcnRPcmRlciIsInNvcnQiLCJzb3J0SW5mbyIsIlNvcnRlciIsImRlc2NlbmRpbmciLCJtYXhJdGVtcyIsImNoYXJ0RGF0YSIsIm9Db250ZXh0Iiwib0RhdGEiLCJvS1BJVGFnIiwib1BvcG92ZXIiLCJyZWplY3QiLCJsb2FkTGlicmFyeSIsImFzeW5jIiwicmVxdWlyZSIsIkNhcmQiLCJIb3N0Iiwib0hvc3QiLCJhdHRhY2hBY3Rpb24iLCJvRXZlbnQiLCJzVHlwZSIsImdldFBhcmFtZXRlciIsIm9QYXJhbXMiLCJfaW50ZW50QmFzZWROYXZpZ2F0aW9uIiwibmF2aWdhdGUiLCJuYXZpZ2F0ZU91dGJvdW5kIiwib0NhcmQiLCJ3aWR0aCIsImhlaWdodCIsInNldEhvc3QiLCJQb3BvdmVyIiwic2hvd0hlYWRlciIsInBsYWNlbWVudCIsImFkZERlcGVuZGVudCIsImtwaUlEIiwib0RlZiIsIm9Nb2RlbCIsImFQcm9taXNlcyIsImxvYWRLUElDYXJkRGF0YSIsImdldFBvcG92ZXIiLCJhbGwiLCJhUmVzdWx0cyIsInNldE1hbmlmZXN0IiwicmVmcmVzaCIsIm9wZW5CeSIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJQdWJsaWMiXSwibWFwcGluZ3MiOiI7QUFBQTtBQUNBO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQW1CQSxNQUFNQSwwQkFBdUQsR0FBRztBQUMvRCxTQUFLQyxXQUFXLENBQUNDLEtBRDhDO0FBRS9ELFNBQUtELFdBQVcsQ0FBQ0UsT0FGOEM7QUFHL0QsU0FBS0YsV0FBVyxDQUFDRyxPQUg4QztBQUkvRCxTQUFLSCxXQUFXLENBQUNJO0FBSjhDLEdBQWhFO0FBT0EsTUFBTUMseUJBQXNELEdBQUc7QUFDOURKLElBQUFBLEtBQUssRUFBRSxPQUR1RDtBQUU5REMsSUFBQUEsT0FBTyxFQUFFLFVBRnFEO0FBRzlEQyxJQUFBQSxPQUFPLEVBQUUsTUFIcUQ7QUFJOURDLElBQUFBLFdBQVcsRUFBRSxNQUppRDtBQUs5REUsSUFBQUEsSUFBSSxFQUFFO0FBTHdELEdBQS9EO0FBUUE7QUFDQTtBQUNBO0FB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QUFBLEdBQUcsQ0FBQ0MsS0FBSixDQUFVRixHQUFWO0FBQ0EsYUFWRjtBQVdBO0FBQ0Q7QUFDRDs7OztJQXhtQjZDK0csbUIsc1dBMGtCN0NDLE07U0FpQ2F4SyxnQyIsInNvdXJjZVJvb3QiOiIuIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRyb2xsZXJFeHRlbnNpb24gZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyRXh0ZW5zaW9uXCI7XG5pbXBvcnQgeyBDb250cm9sbGVyRXh0ZW5zaW9uTWV0YWRhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnNcIjtcbmltcG9ydCB7IFVJNUNsYXNzLCBPdmVycmlkZSwgUHVibGljIH0gZnJvbSBcIi4uL2hlbHBlcnMvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgSlNPTk1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvanNvbi9KU09OTW9kZWxcIjtcbmltcG9ydCBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB7IEtQSUNoYXJ0RGVmaW5pdGlvbiwgS1BJRGVmaW5pdGlvbiwgTmF2aWdhdGlvbkluZm8gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vS1BJXCI7XG5pbXBvcnQgeyBCYXNlQ29udHJvbGxlciB9IGZyb20gXCJzYXAvZmUvY29yZVwiO1xuaW1wb3J0IHsgTWVzc2FnZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvZm9ybWF0dGVycy9UYWJsZUZvcm1hdHRlclR5cGVzXCI7XG5pbXBvcnQgeyBGaWx0ZXJEZWZpbml0aW9uLCBSYW5nZURlZmluaXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL1NlbGVjdGlvblZhcmlhbnRIZWxwZXJcIjtcbmltcG9ydCBOdW1iZXJGb3JtYXQgZnJvbSBcInNhcC91aS9jb3JlL2Zvcm1hdC9OdW1iZXJGb3JtYXRcIjtcbmltcG9ydCBEYXRlRm9ybWF0IGZyb20gXCJzYXAvdWkvY29yZS9mb3JtYXQvRGF0ZUZvcm1hdFwiO1xuaW1wb3J0IExvY2FsZSBmcm9tIFwic2FwL3VpL2NvcmUvTG9jYWxlXCI7XG5pbXBvcnQgRmlsdGVyIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEdlbmVyaWNUYWcgZnJvbSBcInNhcC9tL0dlbmVyaWNUYWdcIjtcbmltcG9ydCBQb3BvdmVyIGZyb20gXCJzYXAvbS9Qb3BvdmVyXCI7XG5pbXBvcnQgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcblxuY29uc3QgTWVzc2FnZVR5cGVGcm9tQ3JpdGljYWxpdHk6IFJlY29yZDxzdHJpbmcsIE1lc3NhZ2VUeXBlPiA9IHtcblx0XCIxXCI6IE1lc3NhZ2VUeXBlLkVycm9yLFxuXHRcIjJcIjogTWVzc2FnZVR5cGUuV2FybmluZyxcblx0XCIzXCI6IE1lc3NhZ2VUeXBlLlN1Y2Nlc3MsXG5cdFwiNVwiOiBNZXNzYWdlVHlwZS5JbmZvcm1hdGlvblxufTtcblxuY29uc3QgVmFsdWVDb2xvckZyb21NZXNzYWdlVHlwZTogUmVjb3JkPE1lc3NhZ2VUeXBlLCBzdHJpbmc+ID0ge1xuXHRFcnJvcjogXCJFcnJvclwiLFxuXHRXYXJuaW5nOiBcIkNyaXRpY2FsXCIsXG5cdFN1Y2Nlc3M6IFwiR29vZFwiLFxuXHRJbmZvcm1hdGlvbjogXCJOb25lXCIsXG5cdE5vbmU6IFwiTm9uZVwiXG59O1xuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnVGFyZ2V0Jy5cbiAqXG4gKiBAcGFyYW0ge251bWJlcn0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUEkgdG8gYmUgdGVzdGVkIGFnYWluc3QuXG4gKiBAcGFyYW0ge251bWJlcltdfSBhVGhyZXNob2xkcyBUaHJlc2hvbGRzIHRvIGJlIHVzZWQgW0RldmlhdGlvblJhbmdlTG93VmFsdWUsVG9sZXJhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VMb3dWYWx1ZSxBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMge01lc3NhZ2VUeXBlfSBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbVRhcmdldENhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbNV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1s1XSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA+IGFUaHJlc2hvbGRzWzVdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzRdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbNF0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1s0XSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1szXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5Ob25lO1xuXHR9IGVsc2Uge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5TdWNjZXNzO1xuXHR9XG5cblx0cmV0dXJuIGNyaXRpY2FsaXR5UHJvcGVydHk7XG59XG5cbi8qKlxuICogRnVuY3Rpb24gdG8gZ2V0IGEgbWVzc2FnZSBzdGF0ZSBmcm9tIGEgY2FsY3VsYXRlZCBjcml0aWNhbGl0eSBvZiB0eXBlICdNaW5pbWl6ZScuXG4gKlxuICogQHBhcmFtIHtudW1iZXJ9IGtwaVZhbHVlIFRoZSB2YWx1ZSBvZiB0aGUgS1BJIHRvIGJlIHRlc3RlZCBhZ2FpbnN0LlxuICogQHBhcmFtIHtudW1iZXJbXX0gYVRocmVzaG9sZHMgVGhyZXNob2xkcyB0byBiZSB1c2VkIFtBY2NlcHRhbmNlUmFuZ2VIaWdoVmFsdWUsVG9sZXJhbmNlUmFuZ2VIaWdoVmFsdWUsRGV2aWF0aW9uUmFuZ2VIaWdoVmFsdWVdLlxuICogQHJldHVybnMge01lc3NhZ2VUeXBlfSBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIE1lc3NhZ2VUeXBlXG4gKi9cbmZ1bmN0aW9uIG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oa3BpVmFsdWU6IG51bWJlciwgYVRocmVzaG9sZHM6IChudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsKVtdKTogTWVzc2FnZVR5cGUge1xuXHRsZXQgY3JpdGljYWxpdHlQcm9wZXJ0eTogTWVzc2FnZVR5cGU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYga3BpVmFsdWUgPiBhVGhyZXNob2xkc1syXSkge1xuXHRcdGNyaXRpY2FsaXR5UHJvcGVydHkgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1sxXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzFdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMV0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0fSBlbHNlIGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlID4gYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0fSBlbHNlIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuU3VjY2Vzcztcblx0fVxuXG5cdHJldHVybiBjcml0aWNhbGl0eVByb3BlcnR5O1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGdldCBhIG1lc3NhZ2Ugc3RhdGUgZnJvbSBhIGNhbGN1bGF0ZWQgY3JpdGljYWxpdHkgb2YgdHlwZSAnTWF4aW1pemUnLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBrcGlWYWx1ZSBUaGUgdmFsdWUgb2YgdGhlIEtQSSB0byBiZSB0ZXN0ZWQgYWdhaW5zdC5cbiAqIEBwYXJhbSB7bnVtYmVyW119IGFUaHJlc2hvbGRzIFRocmVzaG9sZHMgdG8gYmUgdXNlZCBbRGV2aWF0aW9uUmFuZ2VMb3dWYWx1ZSxUb2xlcmFuY2VSYW5nZUxvd1ZhbHVlLEFjY2VwdGFuY2VSYW5nZUxvd1ZhbHVlXS5cbiAqIEByZXR1cm5zIHtNZXNzYWdlVHlwZX0gUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBNZXNzYWdlVHlwZVxuICovXG5mdW5jdGlvbiBtZXNzYWdlVHlwZUZyb21NYXhpbWl6ZUNhbGN1bGF0aW9uKGtwaVZhbHVlOiBudW1iZXIsIGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSk6IE1lc3NhZ2VUeXBlIHtcblx0bGV0IGNyaXRpY2FsaXR5UHJvcGVydHk6IE1lc3NhZ2VUeXBlO1xuXG5cdGlmIChhVGhyZXNob2xkc1swXSAhPT0gdW5kZWZpbmVkICYmIGFUaHJlc2hvbGRzWzBdICE9PSBudWxsICYmIGtwaVZhbHVlIDwgYVRocmVzaG9sZHNbMF0pIHtcblx0XHRjcml0aWNhbGl0eVByb3BlcnR5ID0gTWVzc2FnZVR5cGUuRXJyb3I7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMV0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1sxXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLldhcm5pbmc7XG5cdH0gZWxzZSBpZiAoYVRocmVzaG9sZHNbMl0gIT09IHVuZGVmaW5lZCAmJiBhVGhyZXNob2xkc1syXSAhPT0gbnVsbCAmJiBrcGlWYWx1ZSA8IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdH0gZWxzZSB7XG5cdFx0Y3JpdGljYWxpdHlQcm9wZXJ0eSA9IE1lc3NhZ2VUeXBlLlN1Y2Nlc3M7XG5cdH1cblxuXHRyZXR1cm4gY3JpdGljYWxpdHlQcm9wZXJ0eTtcbn1cblxuLyoqXG4gKiBGdW5jdGlvbiB0byBjYWxjdWxhdGUgYSBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWUgZnJvbSBhIHRyZW5kIHZhbHVlLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfHN0cmluZ30gdHJlbmRWYWx1ZSBUaGUgY3JpdGljYWxpdHkgdmFsdWVzLlxuICogQHJldHVybnMge3N0cmluZ30gUmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBEZXZpYXRpb25JbmRpY2F0b3IgdmFsdWVcbiAqL1xuZnVuY3Rpb24gZGV2aWF0aW9uSW5kaWNhdG9yRnJvbVRyZW5kVHlwZSh0cmVuZFZhbHVlOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRsZXQgZGV2aWF0aW9uSW5kaWNhdG9yOiBzdHJpbmc7XG5cblx0c3dpdGNoICh0cmVuZFZhbHVlKSB7XG5cdFx0Y2FzZSAxOiAvLyBTdHJvbmdVcFxuXHRcdGNhc2UgXCIxXCI6XG5cdFx0Y2FzZSAyOiAvLyBVcFxuXHRcdGNhc2UgXCIyXCI6XG5cdFx0XHRkZXZpYXRpb25JbmRpY2F0b3IgPSBcIlVwXCI7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgNDogLy8gRG93blxuXHRcdGNhc2UgXCI0XCI6XG5cdFx0Y2FzZSA1OiAvLyBTdHJvbmdEb3duXG5cdFx0Y2FzZSBcIjVcIjpcblx0XHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBhIERldmlhdGlvbkluZGljYXRvciBmcm9tIGEgVHJlbmRDYWxjdWxhdGlvbi5cbiAqXG4gKiBAcGFyYW0ga3BpVmFsdWUgVGhlIHZhbHVlIG9mIHRoZSBLUElcbiAqIEBwYXJhbSByZWZlcmVuY2VWYWx1ZSBUaGUgcmVmZXJlbmNlIHZhbHVlIHRvIGNvbXBhcmUgd2l0aFxuICogQHBhcmFtIGlzUmVsYXRpdmUgVHJ1ZSBpcyB0aGUgY29tcGFyaXNvbiBpcyByZWxhdGl2ZVxuICogQHBhcmFtIGFUaHJlc2hvbGRzIEFycmF5IG9mIHRocmVzaG9sZHMgW1N0cm9uZ0Rvd25EaWZmZXJlbmNlLCBEb3duRGlmZmVyZW5jZSwgVXBEaWZmZXJlbmNlLCBTdHJvbmdVcERpZmZlcmVuY2VdXG4gKiBAcmV0dXJucyB7c2FwLm0uRGV2aWF0aW9uSW5kaWNhdG9yfSBSZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIERldmlhdGlvbkluZGljYXRvciB2YWx1ZVxuICovXG5mdW5jdGlvbiBkZXZpYXRpb25JbmRpY2F0b3JGcm9tQ2FsY3VsYXRpb24oXG5cdGtwaVZhbHVlOiBudW1iZXIsXG5cdHJlZmVyZW5jZVZhbHVlOiBudW1iZXIsXG5cdGlzUmVsYXRpdmU6IGJvb2xlYW4sXG5cdGFUaHJlc2hvbGRzOiAobnVtYmVyIHwgdW5kZWZpbmVkIHwgbnVsbClbXSB8IHVuZGVmaW5lZFxuKTogc3RyaW5nIHtcblx0bGV0IGRldmlhdGlvbkluZGljYXRvcjogc3RyaW5nO1xuXG5cdGlmICghYVRocmVzaG9sZHMgfHwgKGlzUmVsYXRpdmUgJiYgIXJlZmVyZW5jZVZhbHVlKSkge1xuXHRcdHJldHVybiBcIk5vbmVcIjtcblx0fVxuXG5cdGNvbnN0IGNvbXBWYWx1ZSA9IGlzUmVsYXRpdmUgPyAoa3BpVmFsdWUgLSByZWZlcmVuY2VWYWx1ZSkgLyByZWZlcmVuY2VWYWx1ZSA6IGtwaVZhbHVlIC0gcmVmZXJlbmNlVmFsdWU7XG5cblx0aWYgKGFUaHJlc2hvbGRzWzBdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMF0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzBdKSB7XG5cdFx0Ly8gU3Ryb25nRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzFdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMV0gIT09IG51bGwgJiYgY29tcFZhbHVlIDw9IGFUaHJlc2hvbGRzWzFdKSB7XG5cdFx0Ly8gRG93biAtLT4gRG93blxuXHRcdGRldmlhdGlvbkluZGljYXRvciA9IFwiRG93blwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzNdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbM10gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzNdKSB7XG5cdFx0Ly8gU3Ryb25nVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2UgaWYgKGFUaHJlc2hvbGRzWzJdICE9PSB1bmRlZmluZWQgJiYgYVRocmVzaG9sZHNbMl0gIT09IG51bGwgJiYgY29tcFZhbHVlID49IGFUaHJlc2hvbGRzWzJdKSB7XG5cdFx0Ly8gVXAgLS0+IFVwXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJVcFwiO1xuXHR9IGVsc2Uge1xuXHRcdC8vIFNpZGV3YXlzIC0tPiBOb25lXG5cdFx0ZGV2aWF0aW9uSW5kaWNhdG9yID0gXCJOb25lXCI7XG5cdH1cblxuXHRyZXR1cm4gZGV2aWF0aW9uSW5kaWNhdG9yO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gYSBmaWx0ZXIgZGVmaW5pdGlvbi5cbiAqXG4gKiBAcGFyYW0gZmlsdGVyRGVmaW5pdGlvbiBUaGUgZmlsdGVyIGRlZmluaXRpb25cbiAqIEByZXR1cm5zIFJldHVybnMgYSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gdGhlIGRlZmluaXRpb24sIG9yIHVuZGVmaW5lZCBpZiB0aGUgZGVmaW5pdGlvbiBpcyBlbXB0eSAobm8gcmFuZ2VzKVxuICovXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uOiBGaWx0ZXJEZWZpbml0aW9uKTogRmlsdGVyIHwgdW5kZWZpbmVkIHtcblx0aWYgKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzLmxlbmd0aCA9PT0gMCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIG5ldyBGaWx0ZXIoXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnByb3BlcnR5UGF0aCxcblx0XHRcdGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLFxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXNbMF0ucmFuZ2VMb3csXG5cdFx0XHRmaWx0ZXJEZWZpbml0aW9uLnJhbmdlc1swXS5yYW5nZUhpZ2hcblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdGNvbnN0IGFSYW5nZUZpbHRlcnMgPSBmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAocmFuZ2UgPT4ge1xuXHRcdFx0cmV0dXJuIG5ldyBGaWx0ZXIoZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVBhdGgsIHJhbmdlLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yLCByYW5nZS5yYW5nZUxvdywgcmFuZ2UucmFuZ2VIaWdoKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gbmV3IEZpbHRlcih7XG5cdFx0XHRmaWx0ZXJzOiBhUmFuZ2VGaWx0ZXJzLFxuXHRcdFx0YW5kOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlclN0cmluZ0Zyb21EZWZpbml0aW9uKGZpbHRlckRlZmluaXRpb246IEZpbHRlckRlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCBjdXJyZW50TG9jYWxlID0gbmV3IExvY2FsZShcblx0XHRzYXAudWlcblx0XHRcdC5nZXRDb3JlKClcblx0XHRcdC5nZXRDb25maWd1cmF0aW9uKClcblx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdCk7XG5cdGNvbnN0IHJlc0J1bmRsZSA9IHNhcC51aS5nZXRDb3JlKCkuZ2V0TGlicmFyeVJlc291cmNlQnVuZGxlKFwic2FwLmZlLmNvcmVcIikgYXMgUmVzb3VyY2VCdW5kbGU7XG5cdGNvbnN0IGRhdGVGb3JtYXQgPSBEYXRlRm9ybWF0LmdldERhdGVJbnN0YW5jZSh7IHN0eWxlOiBcIm1lZGl1bVwiIH0sIGN1cnJlbnRMb2NhbGUpO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdFJhbmdlKHJhbmdlOiBSYW5nZURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IHZhbHVlTG93ID1cblx0XHRcdGZpbHRlckRlZmluaXRpb24ucHJvcGVydHlUeXBlLmluZGV4T2YoXCJFZG0uRGF0ZVwiKSA9PT0gMCA/IGRhdGVGb3JtYXQuZm9ybWF0KG5ldyBEYXRlKHJhbmdlLnJhbmdlTG93KSkgOiByYW5nZS5yYW5nZUxvdztcblx0XHRjb25zdCB2YWx1ZUhpZ2ggPVxuXHRcdFx0ZmlsdGVyRGVmaW5pdGlvbi5wcm9wZXJ0eVR5cGUuaW5kZXhPZihcIkVkbS5EYXRlXCIpID09PSAwID8gZGF0ZUZvcm1hdC5mb3JtYXQobmV3IERhdGUocmFuZ2UucmFuZ2VIaWdoKSkgOiByYW5nZS5yYW5nZUhpZ2g7XG5cblx0XHRzd2l0Y2ggKHJhbmdlLm9wZXJhdG9yKSB7XG5cdFx0XHRjYXNlIFwiQlRcIjpcblx0XHRcdFx0cmV0dXJuIFwiW1wiICsgdmFsdWVMb3cgKyBcIiAtIFwiICsgdmFsdWVIaWdoICsgXCJdXCI7XG5cblx0XHRcdGNhc2UgXCJDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gXCIqXCIgKyB2YWx1ZUxvdyArIFwiKlwiO1xuXG5cdFx0XHRjYXNlIFwiR0VcIjpcblx0XHRcdFx0cmV0dXJuIFwiXFx1MjI2NVwiICsgdmFsdWVMb3c7XG5cblx0XHRcdGNhc2UgXCJHVFwiOlxuXHRcdFx0XHRyZXR1cm4gXCI+XCIgKyB2YWx1ZUxvdztcblxuXHRcdFx0Y2FzZSBcIkxFXCI6XG5cdFx0XHRcdHJldHVybiBcIlxcdTIyNjRcIiArIHZhbHVlTG93O1xuXG5cdFx0XHRjYXNlIFwiTFRcIjpcblx0XHRcdFx0cmV0dXJuIFwiPFwiICsgdmFsdWVMb3c7XG5cblx0XHRcdGNhc2UgXCJOQlwiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbXCJbXCIgKyB2YWx1ZUxvdyArIFwiIC0gXCIgKyB2YWx1ZUhpZ2ggKyBcIl1cIl0pO1xuXG5cdFx0XHRjYXNlIFwiTkVcIjpcblx0XHRcdFx0cmV0dXJuIFwiXFx1MjI2MFwiICsgdmFsdWVMb3c7XG5cblx0XHRcdGNhc2UgXCJOb3RDb250YWluc1wiOlxuXHRcdFx0XHRyZXR1cm4gcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfRklMVEVSU1RSSU5HX05PVFwiLCBbXCIqXCIgKyB2YWx1ZUxvdyArIFwiKlwiXSk7XG5cblx0XHRcdGNhc2UgXCJFUVwiOlxuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0cmV0dXJuIHZhbHVlTG93O1xuXHRcdH1cblx0fVxuXHRpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH0gZWxzZSBpZiAoZmlsdGVyRGVmaW5pdGlvbi5yYW5nZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0cmV0dXJuIGZvcm1hdFJhbmdlKGZpbHRlckRlZmluaXRpb24ucmFuZ2VzWzBdKTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gXCIoXCIgKyBmaWx0ZXJEZWZpbml0aW9uLnJhbmdlcy5tYXAoZm9ybWF0UmFuZ2UpLmpvaW4oXCIsXCIpICsgXCIpXCI7XG5cdH1cbn1cblxuZnVuY3Rpb24gZm9ybWF0Q2hhcnRUaXRsZShrcGlEZWY6IEtQSURlZmluaXRpb24pOiBzdHJpbmcge1xuXHRjb25zdCByZXNCdW5kbGUgPSBzYXAudWkuZ2V0Q29yZSgpLmdldExpYnJhcnlSZXNvdXJjZUJ1bmRsZShcInNhcC5mZS5jb3JlXCIpIGFzIFJlc291cmNlQnVuZGxlO1xuXG5cdGZ1bmN0aW9uIGZvcm1hdExpc3QoaXRlbXM6IHsgbmFtZTogc3RyaW5nOyBsYWJlbDogc3RyaW5nIH1bXSkge1xuXHRcdGlmIChpdGVtcy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH0gZWxzZSBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRyZXR1cm4gaXRlbXNbMF0ubGFiZWw7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCByZXMgPSBpdGVtc1swXS5sYWJlbDtcblx0XHRcdGZvciAobGV0IEkgPSAxOyBJIDwgaXRlbXMubGVuZ3RoIC0gMTsgSSsrKSB7XG5cdFx0XHRcdHJlcyArPSBcIiwgXCIgKyBpdGVtc1tJXS5sYWJlbDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHJlc0J1bmRsZS5nZXRUZXh0KFwiQ19LUElDQVJEX0lURU1TTElTVFwiLCBbcmVzLCBpdGVtc1tpdGVtcy5sZW5ndGggLSAxXS5sYWJlbF0pO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXNCdW5kbGUuZ2V0VGV4dChcIkNfS1BJQ0FSRF9DSEFSVFRJVExFXCIsIFtmb3JtYXRMaXN0KGtwaURlZi5jaGFydC5tZWFzdXJlcyksIGZvcm1hdExpc3Qoa3BpRGVmLmNoYXJ0LmRpbWVuc2lvbnMpXSk7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUNoYXJ0TGFiZWxTZXR0aW5ncyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbiwgb0NoYXJ0UHJvcGVydGllczogYW55KTogdm9pZCB7XG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0Ly8gU2hvdyBkYXRhIGxhYmVscywgZG8gbm90IHNob3cgYXhpcyB0aXRsZXNcblx0XHRcdG9DaGFydFByb3BlcnRpZXMuY2F0ZWdvcnlBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRsYWJlbDoge1xuXHRcdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0XCJcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMucGxvdEFyZWEuZGF0YUxhYmVsID0ge1xuXHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHR0eXBlOiBcInZhbHVlXCIsXG5cdFx0XHRcdGZvcm1hdFN0cmluZzogXCJTaG9ydEZsb2F0X01GRDJcIlxuXHRcdFx0fTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcImJ1YmJsZVwiOlxuXHRcdFx0Ly8gU2hvdyBheGlzIHRpdGxlLCBidWJibGUgc2l6ZSBsZWdlbmQsIGRvIG5vdCBzaG93IGRhdGEgbGFiZWxzXG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpcyA9IHtcblx0XHRcdFx0dGl0bGU6IHtcblx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMyID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLmxlZ2VuZEdyb3VwID0ge1xuXHRcdFx0XHRsYXlvdXQ6IHtcblx0XHRcdFx0XHRwb3NpdGlvbjogXCJib3R0b21cIixcblx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwidG9wTGVmdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnNpemVMZWdlbmQgPSB7XG5cdFx0XHRcdHZpc2libGU6IHRydWVcblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy52YWx1ZUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnZhbHVlQXhpczIgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fSxcblx0XHRcdFx0bGFiZWw6IHtcblx0XHRcdFx0XHRmb3JtYXRTdHJpbmc6IFwiU2hvcnRGbG9hdFwiXG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0XHRvQ2hhcnRQcm9wZXJ0aWVzLnBsb3RBcmVhLmRhdGFMYWJlbCA9IHsgdmlzaWJsZTogZmFsc2UgfTtcblx0XHRcdGJyZWFrO1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdC8vIERvIG5vdCBzaG93IGRhdGEgbGFiZWxzIGFuZCBheGlzIHRpdGxlc1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5jYXRlZ29yeUF4aXMgPSB7XG5cdFx0XHRcdHRpdGxlOiB7XG5cdFx0XHRcdFx0dmlzaWJsZTogZmFsc2Vcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHRcdG9DaGFydFByb3BlcnRpZXMudmFsdWVBeGlzID0ge1xuXHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdHZpc2libGU6IGZhbHNlXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGxhYmVsOiB7XG5cdFx0XHRcdFx0Zm9ybWF0U3RyaW5nOiBcIlNob3J0RmxvYXRcIlxuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0b0NoYXJ0UHJvcGVydGllcy5wbG90QXJlYS5kYXRhTGFiZWwgPSB7IHZpc2libGU6IGZhbHNlIH07XG5cdH1cbn1cbmZ1bmN0aW9uIGZpbHRlck1hcChhT2JqZWN0czogeyBuYW1lOiBzdHJpbmc7IGxhYmVsOiBzdHJpbmc7IHJvbGU/OiBzdHJpbmcgfVtdLCBhUm9sZXM/OiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogc3RyaW5nW10ge1xuXHRpZiAoYVJvbGVzICYmIGFSb2xlcy5sZW5ndGgpIHtcblx0XHRyZXR1cm4gYU9iamVjdHNcblx0XHRcdC5maWx0ZXIoZGltZW5zaW9uID0+IHtcblx0XHRcdFx0cmV0dXJuIGFSb2xlcy5pbmRleE9mKGRpbWVuc2lvbi5yb2xlKSA+PSAwO1xuXHRcdFx0fSlcblx0XHRcdC5tYXAoZGltZW5zaW9uID0+IHtcblx0XHRcdFx0cmV0dXJuIGRpbWVuc2lvbi5sYWJlbDtcblx0XHRcdH0pO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBhT2JqZWN0cy5tYXAoZGltZW5zaW9uID0+IHtcblx0XHRcdHJldHVybiBkaW1lbnNpb24ubGFiZWw7XG5cdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0U2NhdHRlckJ1YmJsZUNoYXJ0RmVlZHMoY2hhcnREZWZpbml0aW9uOiBLUElDaGFydERlZmluaXRpb24pOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdIHtcblx0Y29uc3QgYXhpczFNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMxXCJdKTtcblx0Y29uc3QgYXhpczJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMyXCJdKTtcblx0Y29uc3QgYXhpczNNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFtcIkF4aXMzXCJdKTtcblx0Y29uc3Qgb3RoZXJNZWFzdXJlcyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWRdKTtcblx0Y29uc3Qgc2VyaWVzRGltZW5zaW9ucyA9IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKTtcblxuXHQvLyBHZXQgdGhlIGZpcnN0IGRpbWVuc2lvbiB3aXRoIHJvbGUgXCJDYXRlZ29yeVwiIGZvciB0aGUgc2hhcGVcblx0Y29uc3Qgc2hhcGVEaW1lbnNpb24gPSBjaGFydERlZmluaXRpb24uZGltZW5zaW9ucy5maW5kKGRpbWVuc2lvbiA9PiB7XG5cdFx0cmV0dXJuIGRpbWVuc2lvbi5yb2xlID09PSBcIkNhdGVnb3J5XCI7XG5cdH0pO1xuXG5cdC8vIE1lYXN1cmUgZm9yIHRoZSB4LUF4aXMgOiBmaXJzdCBtZWFzdXJlIGZvciBBeGlzMSwgb3IgZm9yIEF4aXMyIGlmIG5vdCBmb3VuZCwgb3IgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB4TWVhc3VyZSA9IGF4aXMxTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMk1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHQvLyBNZWFzdXJlIGZvciB0aGUgeS1BeGlzIDogZmlyc3QgbWVhc3VyZSBmb3IgQXhpczIsIG9yIHNlY29uZCBtZWFzdXJlIGZvciBBeGlzMSBpZiBub3QgZm91bmQsIG9yIGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzIGlmIG5vdCBmb3VuZFxuXHRjb25zdCB5TWVhc3VyZSA9IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBheGlzMU1lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczNNZWFzdXJlcy5zaGlmdCgpIHx8IG90aGVyTWVhc3VyZXMuc2hpZnQoKSB8fCBcIlwiO1xuXHRjb25zdCByZXMgPSBbXG5cdFx0e1xuXHRcdFx0XCJ1aWRcIjogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFwidmFsdWVzXCI6IFt4TWVhc3VyZV1cblx0XHR9LFxuXHRcdHtcblx0XHRcdFwidWlkXCI6IFwidmFsdWVBeGlzMlwiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogW3lNZWFzdXJlXVxuXHRcdH1cblx0XTtcblxuXHRpZiAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSA9PT0gXCJidWJibGVcIikge1xuXHRcdC8vIE1lYXN1cmUgZm9yIHRoZSBzaXplIG9mIHRoZSBidWJibGU6IGZpcnN0IG1lYXN1cmUgZm9yIEF4aXMzLCBvciByZW1haW5pbmcgbWVhc3VyZSBmb3IgQXhpczEvQXhpczIgaWYgbm90IGZvdW5kXG5cdFx0Y29uc3Qgc2l6ZU1lYXN1cmUgPSBheGlzM01lYXN1cmVzLnNoaWZ0KCkgfHwgYXhpczFNZWFzdXJlcy5zaGlmdCgpIHx8IGF4aXMyTWVhc3VyZXMuc2hpZnQoKSB8fCBvdGhlck1lYXN1cmVzLnNoaWZ0KCkgfHwgXCJcIjtcblx0XHRyZXMucHVzaCh7XG5cdFx0XHRcInVpZFwiOiBcImJ1YmJsZVdpZHRoXCIsXG5cdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBbc2l6ZU1lYXN1cmVdXG5cdFx0fSk7XG5cdH1cblxuXHQvLyBDb2xvciAob3B0aW9uYWwpXG5cdGlmIChzZXJpZXNEaW1lbnNpb25zLmxlbmd0aCkge1xuXHRcdHJlcy5wdXNoKHtcblx0XHRcdFwidWlkXCI6IFwiY29sb3JcIixcblx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XCJ2YWx1ZXNcIjogc2VyaWVzRGltZW5zaW9uc1xuXHRcdH0pO1xuXHR9XG5cdC8vIFNoYXBlIChvcHRpb25hbClcblx0aWYgKHNoYXBlRGltZW5zaW9uKSB7XG5cdFx0cmVzLnB1c2goe1xuXHRcdFx0XCJ1aWRcIjogXCJzaGFwZVwiLFxuXHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcInZhbHVlc1wiOiBbc2hhcGVEaW1lbnNpb24ubGFiZWxdXG5cdFx0fSk7XG5cdH1cblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0Q2hhcnRGZWVkcyhjaGFydERlZmluaXRpb246IEtQSUNoYXJ0RGVmaW5pdGlvbik6IHsgdWlkOiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgdmFsdWVzOiBzdHJpbmdbXSB9W10ge1xuXHRsZXQgcmVzOiB7IHVpZDogc3RyaW5nOyB0eXBlOiBzdHJpbmc7IHZhbHVlczogc3RyaW5nW10gfVtdO1xuXG5cdHN3aXRjaCAoY2hhcnREZWZpbml0aW9uLmNoYXJ0VHlwZSkge1xuXHRcdGNhc2UgXCJEb251dFwiOlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJzaXplXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMpXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcImNvbG9yXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRjYXNlIFwiYnViYmxlXCI6XG5cdFx0Y2FzZSBcInNjYXR0ZXJcIjpcblx0XHRcdHJlcyA9IGdldFNjYXR0ZXJCdWJibGVDaGFydEZlZWRzKGNoYXJ0RGVmaW5pdGlvbik7XG5cdFx0XHRicmVhaztcblxuXHRcdGNhc2UgXCJ2ZXJ0aWNhbF9idWxsZXRcIjpcblx0XHRcdHJlcyA9IFtcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiYWN0dWFsVmFsdWVzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiTWVhc3VyZVwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24ubWVhc3VyZXMsIFt1bmRlZmluZWQsIFwiQXhpczFcIl0pXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRcInVpZFwiOiBcInRhcmdldFZhbHVlc1wiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIk1lYXN1cmVcIixcblx0XHRcdFx0XHRcInZhbHVlc1wiOiBmaWx0ZXJNYXAoY2hhcnREZWZpbml0aW9uLm1lYXN1cmVzLCBbXCJBeGlzMlwiXSlcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjb2xvclwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdFx0YnJlYWs7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmVzID0gW1xuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJ2YWx1ZUF4aXNcIixcblx0XHRcdFx0XHRcInR5cGVcIjogXCJNZWFzdXJlXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5tZWFzdXJlcylcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdFwidWlkXCI6IFwiY2F0ZWdvcnlBeGlzXCIsXG5cdFx0XHRcdFx0XCJ0eXBlXCI6IFwiRGltZW5zaW9uXCIsXG5cdFx0XHRcdFx0XCJ2YWx1ZXNcIjogZmlsdGVyTWFwKGNoYXJ0RGVmaW5pdGlvbi5kaW1lbnNpb25zLCBbdW5kZWZpbmVkLCBcIkNhdGVnb3J5XCJdKVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0XCJ1aWRcIjogXCJjb2xvclwiLFxuXHRcdFx0XHRcdFwidHlwZVwiOiBcIkRpbWVuc2lvblwiLFxuXHRcdFx0XHRcdFwidmFsdWVzXCI6IGZpbHRlck1hcChjaGFydERlZmluaXRpb24uZGltZW5zaW9ucywgW1wiU2VyaWVzXCJdKVxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHR9XG5cblx0cmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblBhcmFtZXRlcnMoXG5cdG5hdkluZm86IE5hdmlnYXRpb25JbmZvLFxuXHRvU2hlbGxTZXJ2aWNlOiBhbnlcbik6IFByb21pc2U8eyBzZW1hbnRpY09iamVjdD86IHN0cmluZzsgYWN0aW9uPzogc3RyaW5nOyBvdXRib3VuZD86IHN0cmluZyB9IHwgdW5kZWZpbmVkPiB7XG5cdGlmIChuYXZJbmZvLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0aWYgKG5hdkluZm8uYWN0aW9uKSB7XG5cdFx0XHQvLyBBY3Rpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQ6IGNoZWNrIGlmIGl0J3MgYXZhaWxhYmxlIGluIHRoZSBzaGVsbFxuXHRcdFx0cmV0dXJuIG9TaGVsbFNlcnZpY2UuZ2V0TGlua3MoeyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9KS50aGVuKChhTGlua3M6IGFueVtdKSA9PiB7XG5cdFx0XHRcdHJldHVybiBhTGlua3MubGVuZ3RoID8geyBzZW1hbnRpY09iamVjdDogbmF2SW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBuYXZJbmZvLmFjdGlvbiB9IDogdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIFdlIGdldCB0aGUgcHJpbWFyeSBpbnRlbnQgZnJvbSB0aGUgc2hlbGxcblx0XHRcdHJldHVybiBvU2hlbGxTZXJ2aWNlLmdldFByaW1hcnlJbnRlbnQobmF2SW5mby5zZW1hbnRpY09iamVjdCkudGhlbigob0xpbms6IGFueSkgPT4ge1xuXHRcdFx0XHRpZiAoIW9MaW5rKSB7XG5cdFx0XHRcdFx0Ly8gTm8gcHJpbWFyeSBpbnRlbnQuLi5cblx0XHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2hlY2sgdGhhdCB0aGUgcHJpbWFyeSBpbnRlbnQgaXMgbm90IHBhcnQgb2YgdGhlIHVuYXZhaWxhYmxlIGFjdGlvbnNcblx0XHRcdFx0Y29uc3Qgb0luZm8gPSBvU2hlbGxTZXJ2aWNlLnBhcnNlU2hlbGxIYXNoKG9MaW5rLmludGVudCk7XG5cdFx0XHRcdHJldHVybiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucyAmJiBuYXZJbmZvLnVuYXZhaWxhYmxlQWN0aW9ucy5pbmRleE9mKG9JbmZvLmFjdGlvbikgPj0gMFxuXHRcdFx0XHRcdD8gdW5kZWZpbmVkXG5cdFx0XHRcdFx0OiB7IHNlbWFudGljT2JqZWN0OiBvSW5mby5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBvSW5mby5hY3Rpb24gfTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fSBlbHNlIHtcblx0XHQvLyBPdXRib3VuZCBuYXZpZ2F0aW9uIHNwZWNpZmllZCBpbiB0aGUgbWFuaWZlc3Rcblx0XHRyZXR1cm4gbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gPyBQcm9taXNlLnJlc29sdmUoeyBvdXRib3VuZDogbmF2SW5mby5vdXRib3VuZE5hdmlnYXRpb24gfSkgOiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxufVxuXG4vKipcbiAqIEBjbGFzcyBBIGNvbnRyb2xsZXIgZXh0ZW5zaW9uIGZvciBtYW5hZ2luZyB0aGUgS1BJcyBpbiBhbiBhbmFseXRpY2FsIGxpc3QgcGFnZVxuICpcbiAqIEBuYW1lIHNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLktQSU1hbmFnZW1lbnRcbiAqIEBoaWRlY29uc3RydWN0b3JcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHNpbmNlIDEuOTMuMFxuICovXG5AVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9ucy5LUElNYW5hZ2VtZW50XCIsIENvbnRyb2xsZXJFeHRlbnNpb25NZXRhZGF0YSlcbmNsYXNzIEtQSU1hbmFnZW1lbnRDb250cm9sbGVyRXh0ZW5zaW9uIGV4dGVuZHMgQ29udHJvbGxlckV4dGVuc2lvbiB7XG5cdHByb3RlY3RlZCBhS1BJRGVmaW5pdGlvbnM/OiBLUElEZWZpbml0aW9uW107XG5cdHByb3RlY3RlZCBvQ2FyZDogYW55O1xuXHRwcm90ZWN0ZWQgb1BvcG92ZXIhOiBQb3BvdmVyO1xuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIHRoZSBjYXJkIG1hbmlmZXN0IGZvciBhIEtQSSBkZWZpbml0aW9uIGFuZCBzdG9yZXMgaXQgaW4gYSBKU09OIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ga3BpRGVmaW5pdGlvbiBUaGUgS1BJIGRlZmluaXRpb25cblx0ICogQHBhcmFtIG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCBpbiB3aGljaCB0aGUgbWFuaWZlc3Qgd2lsbCBiZSBzdG9yZWRcblx0ICovXG5cdHByb3RlY3RlZCBpbml0Q2FyZE1hbmlmZXN0KGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIG9LUElNb2RlbDogSlNPTk1vZGVsKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0NhcmRNYW5pZmVzdDogYW55ID0ge1xuXHRcdFx0XCJzYXAuYXBwXCI6IHtcblx0XHRcdFx0aWQ6IFwic2FwLmZlXCIsXG5cdFx0XHRcdHR5cGU6IFwiY2FyZFwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAudWlcIjoge1xuXHRcdFx0XHR0ZWNobm9sb2d5OiBcIlVJNVwiXG5cdFx0XHR9LFxuXHRcdFx0XCJzYXAuY2FyZFwiOiB7XG5cdFx0XHRcdHR5cGU6IFwiQW5hbHl0aWNhbFwiLFxuXHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0anNvbjoge31cblx0XHRcdFx0fSxcblx0XHRcdFx0aGVhZGVyOiB7XG5cdFx0XHRcdFx0dHlwZTogXCJOdW1lcmljXCIsXG5cdFx0XHRcdFx0dGl0bGU6IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRpdGxlLFxuXHRcdFx0XHRcdHN1YlRpdGxlOiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5kZXNjcmlwdGlvbixcblx0XHRcdFx0XHR1bml0T2ZNZWFzdXJlbWVudDogXCJ7bWFpblVuaXR9XCIsXG5cdFx0XHRcdFx0bWFpbkluZGljYXRvcjoge1xuXHRcdFx0XHRcdFx0bnVtYmVyOiBcInttYWluVmFsdWVOb1NjYWxlfVwiLFxuXHRcdFx0XHRcdFx0dW5pdDogXCJ7bWFpblZhbHVlU2NhbGV9XCIsXG5cdFx0XHRcdFx0XHRzdGF0ZTogXCJ7bWFpblN0YXRlfVwiLFxuXHRcdFx0XHRcdFx0dHJlbmQ6IFwie3RyZW5kfVwiXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0bWluSGVpZ2h0OiBcIjI1cmVtXCIsXG5cdFx0XHRcdFx0Y2hhcnRQcm9wZXJ0aWVzOiB7XG5cdFx0XHRcdFx0XHRwbG90QXJlYToge30sXG5cdFx0XHRcdFx0XHR0aXRsZToge1xuXHRcdFx0XHRcdFx0XHR2aXNpYmxlOiB0cnVlLFxuXHRcdFx0XHRcdFx0XHRhbGlnbm1lbnQ6IFwibGVmdFwiXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhOiB7XG5cdFx0XHRcdFx0XHRwYXRoOiBcIi9jaGFydERhdGFcIlxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cblx0XHQvLyBBZGQgc2lkZSBpbmRpY2F0b3JzIGluIHRoZSBjYXJkIGhlYWRlciBpZiBhIHRhcmdldCBpcyBkZWZpbmVkIGZvciB0aGUgS1BJXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFBhdGggfHwga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgcmVzQnVuZGxlID0gc2FwLnVpLmdldENvcmUoKS5nZXRMaWJyYXJ5UmVzb3VyY2VCdW5kbGUoXCJzYXAuZmUuY29yZVwiKSBhcyBSZXNvdXJjZUJ1bmRsZTtcblx0XHRcdG9DYXJkTWFuaWZlc3RbXCJzYXAuY2FyZFwiXS5oZWFkZXIuc2lkZUluZGljYXRvcnMgPSBbXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX1RBUkdFVFwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie3RhcmdldE51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcInt0YXJnZXRVbml0fVwiXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0aXRsZTogcmVzQnVuZGxlLmdldFRleHQoXCJDX0tQSUNBUkRfSU5ESUNBVE9SX0RFVklBVElPTlwiKSxcblx0XHRcdFx0XHRudW1iZXI6IFwie2RldmlhdGlvbk51bWJlcn1cIixcblx0XHRcdFx0XHR1bml0OiBcIiVcIlxuXHRcdFx0XHR9XG5cdFx0XHRdO1xuXHRcdH1cblxuXHRcdC8vIERldGFpbHMgb2YgdGhlIGNhcmQ6IGZpbHRlciBkZXNjcmlwdGlvbnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYURlc2NyaXB0aW9uczogc3RyaW5nW10gPSBbXTtcblx0XHRcdGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zLmZvckVhY2goZmlsdGVyRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdGNvbnN0IGRlc2MgPSBnZXRGaWx0ZXJTdHJpbmdGcm9tRGVmaW5pdGlvbihmaWx0ZXJEZWZpbml0aW9uKTtcblx0XHRcdFx0aWYgKGRlc2MpIHtcblx0XHRcdFx0XHRhRGVzY3JpcHRpb25zLnB1c2goZGVzYyk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoYURlc2NyaXB0aW9ucy5sZW5ndGgpIHtcblx0XHRcdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmhlYWRlci5kZXRhaWxzID0gYURlc2NyaXB0aW9ucy5qb2luKFwiLCBcIik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2hhcnQgc2V0dGluZ3M6IHR5cGUsIHRpdGxlLCBkaW1lbnNpb25zIGFuZCBtZWFzdXJlcyBpbiB0aGUgbWFuaWZlc3Rcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFR5cGUgPSBrcGlEZWZpbml0aW9uLmNoYXJ0LmNoYXJ0VHlwZTtcblx0XHR1cGRhdGVDaGFydExhYmVsU2V0dGluZ3Moa3BpRGVmaW5pdGlvbi5jaGFydCwgb0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuY2hhcnRQcm9wZXJ0aWVzKTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5jaGFydFByb3BlcnRpZXMudGl0bGUudGV4dCA9IGZvcm1hdENoYXJ0VGl0bGUoa3BpRGVmaW5pdGlvbik7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZGltZW5zaW9ucyA9IGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5tYXAoZGltZW5zaW9uID0+IHtcblx0XHRcdHJldHVybiB7IGxhYmVsOiBkaW1lbnNpb24ubGFiZWwsIHZhbHVlOiBcIntcIiArIGRpbWVuc2lvbi5uYW1lICsgXCJ9XCIgfTtcblx0XHR9KTtcblx0XHRvQ2FyZE1hbmlmZXN0W1wic2FwLmNhcmRcIl0uY29udGVudC5tZWFzdXJlcyA9IGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMubWFwKG1lYXN1cmUgPT4ge1xuXHRcdFx0cmV0dXJuIHsgbGFiZWw6IG1lYXN1cmUubGFiZWwsIHZhbHVlOiBcIntcIiArIG1lYXN1cmUubmFtZSArIFwifVwiIH07XG5cdFx0fSk7XG5cdFx0b0NhcmRNYW5pZmVzdFtcInNhcC5jYXJkXCJdLmNvbnRlbnQuZmVlZHMgPSBnZXRDaGFydEZlZWRzKGtwaURlZmluaXRpb24uY2hhcnQpO1xuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCwge1xuXHRcdFx0bWFuaWZlc3Q6IG9DYXJkTWFuaWZlc3Rcblx0XHR9KTtcblx0fVxuXG5cdHByb3RlY3RlZCBpbml0TmF2aWdhdGlvbkluZm8oa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwgb0tQSU1vZGVsOiBKU09OTW9kZWwsIG9TaGVsbFNlcnZpY2U6IGFueSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEFkZCBuYXZpZ2F0aW9uXG5cdFx0aWYgKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbikge1xuXHRcdFx0cmV0dXJuIGdldE5hdmlnYXRpb25QYXJhbWV0ZXJzKGtwaURlZmluaXRpb24ubmF2aWdhdGlvbiwgb1NoZWxsU2VydmljZSkudGhlbihvTmF2SW5mbyA9PiB7XG5cdFx0XHRcdGlmIChvTmF2SW5mbykge1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9oZWFkZXIvYWN0aW9uc1wiLCBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHR5cGU6IFwiTmF2aWdhdGlvblwiLFxuXHRcdFx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBvTmF2SW5mb1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuXHRcdH1cblx0fVxuXG5cdEBPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5hS1BJRGVmaW5pdGlvbnMgPSB0aGlzLmdldEtQSURhdGEoKTtcblxuXHRcdGlmICh0aGlzLmFLUElEZWZpbml0aW9ucyAmJiB0aGlzLmFLUElEZWZpbml0aW9ucy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCk7XG5cdFx0XHRjb25zdCBvQXBwQ29tcG9uZW50ID0gKG9WaWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcikuZ2V0QXBwQ29tcG9uZW50KCkgYXMgYW55O1xuXG5cdFx0XHQvLyBDcmVhdGUgYSBKU09OIG1vZGVsIHRvIHN0b3JlIEtQSSBkYXRhXG5cdFx0XHRjb25zdCBvS1BJTW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0XHRvVmlldy5zZXRNb2RlbChvS1BJTW9kZWwsIFwia3BpTW9kZWxcIik7XG5cblx0XHRcdHRoaXMuYUtQSURlZmluaXRpb25zLmZvckVhY2goa3BpRGVmaW5pdGlvbiA9PiB7XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgbWFuaWZlc3QgZm9yIHRoZSBLUEkgY2FyZCBhbmQgc3RvcmUgaXQgaW4gdGhlIEtQSSBtb2RlbFxuXHRcdFx0XHR0aGlzLmluaXRDYXJkTWFuaWZlc3Qoa3BpRGVmaW5pdGlvbiwgb0tQSU1vZGVsKTtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIG5hdmlnYXRpb24gaW5mb3JtYXRpb24gaW4gdGhlIG1hbmlmZXN0XG5cdFx0XHRcdHRoaXMuaW5pdE5hdmlnYXRpb25JbmZvKGtwaURlZmluaXRpb24sIG9LUElNb2RlbCwgb0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCkpLmNhdGNoKGZ1bmN0aW9uKGVycjogYW55KSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKGVycik7XG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdC8vIExvYWQgdGFnIGRhdGEgZm9yIHRoZSBLUElcblx0XHRcdFx0dGhpcy5sb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uLCBvQXBwQ29tcG9uZW50LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCwgb0tQSU1vZGVsKS5jYXRjaChmdW5jdGlvbihlcnI6IGFueSkge1xuXHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdEBPdmVycmlkZSgpXG5cdHB1YmxpYyBvbkV4aXQoKTogdm9pZCB7XG5cdFx0Y29uc3Qgb0tQSU1vZGVsID0gdGhpcy5nZXRWaWV3KCkuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAob0tQSU1vZGVsKSB7XG5cdFx0XHRvS1BJTW9kZWwuZGVzdHJveSgpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgZ2V0S1BJRGF0YSgpOiBLUElEZWZpbml0aW9uW10gfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG9WaWV3ID0gdGhpcy5nZXRWaWV3KCksXG5cdFx0XHRzQ3VzdG9tRGF0YSA9IG9WaWV3LmdldENvbnRlbnQoKVswXS5kYXRhKFwiS1BJRGF0YVwiKTtcblxuXHRcdGlmIChzQ3VzdG9tRGF0YSkge1xuXHRcdFx0Y29uc3QgdkRhdGEgPSB0eXBlb2Ygc0N1c3RvbURhdGEgPT09IFwic3RyaW5nXCIgPyBKU09OLnBhcnNlKHNDdXN0b21EYXRhKSA6IHNDdXN0b21EYXRhO1xuXHRcdFx0aWYgKFwiY3VzdG9tRGF0YVwiIGluIHZEYXRhKSB7XG5cdFx0XHRcdHJldHVybiB2RGF0YVtcImN1c3RvbURhdGFcIl07XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdkRhdGE7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRWYWx1ZUFuZEN1cnJlbmN5KGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIGtwaUNvbnRleHQ6IENvbnRleHQsIG9LUElNb2RlbDogSlNPTk1vZGVsKSB7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblx0XHRjb25zdCByYXdVbml0ID0ga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8uaXNQYXRoXG5cdFx0XHQ/IGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSlcblx0XHRcdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdD8udmFsdWU7XG5cblx0XHRjb25zdCBpc1BlcmNlbnRhZ2UgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc0N1cnJlbmN5ID09PSBmYWxzZSAmJiByYXdVbml0ID09PSBcIiVcIjtcblxuXHRcdC8vIC8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuXHRcdC8vIE1haW4gS1BJIHZhbHVlXG5cdFx0Y29uc3QgcmF3VmFsdWUgPSBOdW1iZXIucGFyc2VGbG9hdChrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aCkpO1xuXG5cdFx0Ly8gVmFsdWUgZm9ybWF0dGVkIHdpdGggYSBzY2FsZVxuXHRcdGNvbnN0IGtwaVZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBpc1BlcmNlbnRhZ2UgPyB1bmRlZmluZWQgOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiAhaXNQZXJjZW50YWdlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVwiLCBrcGlWYWx1ZSk7XG5cblx0XHQvLyBWYWx1ZSB3aXRob3V0IGEgc2NhbGVcblx0XHRjb25zdCBrcGlWYWx1ZVVuc2NhbGVkID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdG1heEZyYWN0aW9uRGlnaXRzOiAyLFxuXHRcdFx0XHRzaG93U2NhbGU6IGZhbHNlLFxuXHRcdFx0XHRncm91cGluZ0VuYWJsZWQ6IHRydWVcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlVW5zY2FsZWRcIiwga3BpVmFsdWVVbnNjYWxlZCk7XG5cblx0XHQvLyBWYWx1ZSBmb3JtYXR0ZWQgd2l0aCB0aGUgc2NhbGUgb21pdHRlZFxuXHRcdGNvbnN0IGtwaVZhbHVlTm9TY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRtaW5GcmFjdGlvbkRpZ2l0czogMCxcblx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdHNob3dTY2FsZTogZmFsc2Vcblx0XHRcdH0sXG5cdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0KS5mb3JtYXQocmF3VmFsdWUpO1xuXHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblZhbHVlTm9TY2FsZVwiLCBrcGlWYWx1ZU5vU2NhbGUpO1xuXG5cdFx0Ly8gU2NhbGUgb2YgdGhlIHZhbHVlXG5cdFx0Y29uc3Qga3BpVmFsdWVTY2FsZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0e1xuXHRcdFx0XHRzdHlsZTogaXNQZXJjZW50YWdlID8gdW5kZWZpbmVkIDogXCJzaG9ydFwiLFxuXHRcdFx0XHRkZWNpbWFsczogMCxcblx0XHRcdFx0bWF4SW50ZWdlckRpZ2l0czogMCxcblx0XHRcdFx0c2hvd1NjYWxlOiB0cnVlXG5cdFx0XHR9LFxuXHRcdFx0Y3VycmVudExvY2FsZVxuXHRcdCkuZm9ybWF0KHJhd1ZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlXCIsIGtwaVZhbHVlU2NhbGUpO1xuXG5cdFx0Ly8gLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5cdFx0Ly8gVW5pdCBvciBjdXJyZW5jeVxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0ICYmIHJhd1VuaXQpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0LmlzQ3VycmVuY3kpIHtcblx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVW5pdFwiLCByYXdVbml0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEluIGNhc2Ugb2YgdW5pdCBvZiBtZWFzdXJlLCB3ZSBoYXZlIHRvIGZvcm1hdCBpdCBwcm9wZXJseVxuXHRcdFx0XHRjb25zdCBrcGlVbml0ID0gTnVtYmVyRm9ybWF0LmdldFVuaXRJbnN0YW5jZSh7IHNob3dOdW1iZXI6IGZhbHNlIH0sIGN1cnJlbnRMb2NhbGUpLmZvcm1hdChyYXdWYWx1ZSwgcmF3VW5pdCk7XG5cdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRcIiwga3BpVW5pdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cHJpdmF0ZSB1cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBrcGlDb250ZXh0OiBDb250ZXh0LCBvS1BJTW9kZWw6IEpTT05Nb2RlbCkge1xuXHRcdGNvbnN0IHJhd1ZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5wcm9wZXJ0eVBhdGgpKTtcblxuXHRcdGxldCBjcml0aWNhbGl0eVZhbHVlID0gTWVzc2FnZVR5cGUuTm9uZTtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlWYWx1ZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgaXMgYSBmaXhlZCB2YWx1ZVxuXHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5VmFsdWU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eVBhdGgpIHtcblx0XHRcdC8vIENyaXRpY2FsaXR5IGNvbWVzIGZyb20gYW5vdGhlciBwcm9wZXJ0eSAodmlhIGEgcGF0aClcblx0XHRcdGNyaXRpY2FsaXR5VmFsdWUgPVxuXHRcdFx0XHRNZXNzYWdlVHlwZUZyb21Dcml0aWNhbGl0eVtrcGlDb250ZXh0LmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aCldIHx8IE1lc3NhZ2VUeXBlLk5vbmU7XG5cdFx0fSBlbHNlIGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uVGhyZXNob2xkcyAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC5jcml0aWNhbGl0eUNhbGN1bGF0aW9uTW9kZSkge1xuXHRcdFx0Ly8gQ3JpdGljYWxpdHkgY2FsY3VsYXRpb25cblx0XHRcdHN3aXRjaCAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlDYWxjdWxhdGlvbk1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIlVJLkltcHJvdmVtZW50RGlyZWN0aW9uVHlwZS9UYXJnZXRcIjpcblx0XHRcdFx0XHRjcml0aWNhbGl0eVZhbHVlID0gbWVzc2FnZVR5cGVGcm9tVGFyZ2V0Q2FsY3VsYXRpb24ocmF3VmFsdWUsIGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzKTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01pbmltaXplXCI6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1pbmltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRjYXNlIFwiVUkuSW1wcm92ZW1lbnREaXJlY3Rpb25UeXBlL01heGltaXplXCI6XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Y3JpdGljYWxpdHlWYWx1ZSA9IG1lc3NhZ2VUeXBlRnJvbU1heGltaXplQ2FsY3VsYXRpb24oXG5cdFx0XHRcdFx0XHRyYXdWYWx1ZSxcblx0XHRcdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5Q2FsY3VsYXRpb25UaHJlc2hvbGRzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eVwiLCBjcml0aWNhbGl0eVZhbHVlKTtcblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblN0YXRlXCIsXG5cdFx0XHRWYWx1ZUNvbG9yRnJvbU1lc3NhZ2VUeXBlW2NyaXRpY2FsaXR5VmFsdWVdIHx8IFwiTm9uZVwiXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cblx0XHRsZXQgdHJlbmRWYWx1ZSA9IFwiTm9uZVwiO1xuXG5cdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kVmFsdWUpIHtcblx0XHRcdC8vIFRyZW5kIGlzIGEgZml4ZWQgdmFsdWVcblx0XHRcdHRyZW5kVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFZhbHVlO1xuXHRcdH0gZWxzZSBpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRQYXRoKSB7XG5cdFx0XHQvLyBUcmVuZCBjb21lcyBmcm9tIGFub3RoZXIgcHJvcGVydHkgdmlhIGEgcGF0aFxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21UcmVuZFR5cGUoa3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0a3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVZhbHVlICE9PSB1bmRlZmluZWQgfHxcblx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VQYXRoXG5cdFx0KSB7XG5cdFx0XHQvLyBDYWxjdWxhdGVkIHRyZW5kXG5cdFx0XHRsZXQgdHJlbmRSZWZlcmVuY2VWYWx1ZTogbnVtYmVyO1xuXHRcdFx0aWYgKGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25SZWZlcmVuY2VWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUgPSBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlVmFsdWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0cmVuZFJlZmVyZW5jZVZhbHVlID0gTnVtYmVyLnBhcnNlRmxvYXQoXG5cdFx0XHRcdFx0a3BpQ29udGV4dC5nZXRQcm9wZXJ0eShrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aCB8fCBcIlwiKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0dHJlbmRWYWx1ZSA9IGRldmlhdGlvbkluZGljYXRvckZyb21DYWxjdWxhdGlvbihcblx0XHRcdFx0cmF3VmFsdWUsXG5cdFx0XHRcdHRyZW5kUmVmZXJlbmNlVmFsdWUsXG5cdFx0XHRcdCEha3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvbklzUmVsYXRpdmUsXG5cdFx0XHRcdGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRyZW5kQ2FsY3VsYXRpb25UcmVzaG9sZHNcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZFwiLCB0cmVuZFZhbHVlKTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlVGFyZ2V0VmFsdWUoa3BpRGVmaW5pdGlvbjogS1BJRGVmaW5pdGlvbiwga3BpQ29udGV4dDogQ29udGV4dCwgb0tQSU1vZGVsOiBKU09OTW9kZWwpIHtcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0VmFsdWUgPT09IHVuZGVmaW5lZCAmJiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybjsgLy8gTm8gdGFyZ2V0IHNldCBmb3IgdGhlIEtQSVxuXHRcdH1cblx0XHRjb25zdCByYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoKSk7XG5cdFx0Y29uc3QgY3VycmVudExvY2FsZSA9IG5ldyBMb2NhbGUoXG5cdFx0XHRzYXAudWlcblx0XHRcdFx0LmdldENvcmUoKVxuXHRcdFx0XHQuZ2V0Q29uZmlndXJhdGlvbigpXG5cdFx0XHRcdC5nZXRMYW5ndWFnZSgpXG5cdFx0KTtcblxuXHRcdGxldCB0YXJnZXRSYXdWYWx1ZTogbnVtYmVyO1xuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnRhcmdldFZhbHVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0YXJnZXRSYXdWYWx1ZSA9IE51bWJlci5wYXJzZUZsb2F0KGtwaUNvbnRleHQuZ2V0UHJvcGVydHkoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aCB8fCBcIlwiKSk7XG5cdFx0fVxuXHRcdGNvbnN0IGRldmlhdGlvblJhd1ZhbHVlID0gdGFyZ2V0UmF3VmFsdWUgIT09IDAgPyAoKHJhd1ZhbHVlIC0gdGFyZ2V0UmF3VmFsdWUpIC8gdGFyZ2V0UmF3VmFsdWUpICogMTAwIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gRm9ybWF0dGluZ1xuXHRcdGNvbnN0IHRhcmdldFZhbHVlID0gTnVtYmVyRm9ybWF0LmdldEZsb2F0SW5zdGFuY2UoXG5cdFx0XHR7XG5cdFx0XHRcdHN0eWxlOiBcInNob3J0XCIsXG5cdFx0XHRcdG1pbkZyYWN0aW9uRGlnaXRzOiAwLFxuXHRcdFx0XHRtYXhGcmFjdGlvbkRpZ2l0czogMSxcblx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cdFx0Y29uc3QgdGFyZ2V0U2NhbGUgPSBOdW1iZXJGb3JtYXQuZ2V0RmxvYXRJbnN0YW5jZShcblx0XHRcdHtcblx0XHRcdFx0c3R5bGU6IFwic2hvcnRcIixcblx0XHRcdFx0ZGVjaW1hbHM6IDAsXG5cdFx0XHRcdG1heEludGVnZXJEaWdpdHM6IDAsXG5cdFx0XHRcdHNob3dTY2FsZTogdHJ1ZVxuXHRcdFx0fSxcblx0XHRcdGN1cnJlbnRMb2NhbGVcblx0XHQpLmZvcm1hdCh0YXJnZXRSYXdWYWx1ZSk7XG5cblx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldE51bWJlclwiLCB0YXJnZXRWYWx1ZSk7XG5cdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXRVbml0XCIsIHRhcmdldFNjYWxlKTtcblxuXHRcdGlmIChkZXZpYXRpb25SYXdWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkZXZpYXRpb25WYWx1ZSA9IE51bWJlckZvcm1hdC5nZXRGbG9hdEluc3RhbmNlKFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0bWluRnJhY3Rpb25EaWdpdHM6IDAsXG5cdFx0XHRcdFx0bWF4RnJhY3Rpb25EaWdpdHM6IDEsXG5cdFx0XHRcdFx0c2hvd1NjYWxlOiBmYWxzZVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjdXJyZW50TG9jYWxlXG5cdFx0XHQpLmZvcm1hdChkZXZpYXRpb25SYXdWYWx1ZSk7XG5cdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlclwiLCBkZXZpYXRpb25WYWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vZGV2aWF0aW9uTnVtYmVyXCIsIFwiTi9BXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBMb2FkcyB0YWcgZGF0YSBmb3IgYSBLUEksIGFuZCBzdG9yZXMgaXQgaW4gdGhlIEpTT04gS1BJIG1vZGVsLlxuXHQgKlxuXHQgKiBAcGFyYW0ge0tQSURlZmluaXRpb259IGtwaURlZmluaXRpb24gVGhlIGRlZmluaXRpb24gb2YgdGhlIEtQSS5cblx0ICogQHBhcmFtIHtPRGF0YU1vZGVsfSBvTWFpbk1vZGVsIFRoZSBtb2RlbCB1c2VkIHRvIGxvYWQgdGhlIGRhdGEuXG5cdCAqIEBwYXJhbSB7SlNPTk1vZGVsfSBvS1BJTW9kZWwgVGhlIEpTT04gbW9kZWwgd2hlcmUgdGhlIGRhdGEgd2lsbCBiZSBzdG9yZWRcblx0ICogQHBhcmFtIGxvYWRGdWxsIElmIG5vdCB0cnVlLCBsb2FkcyBvbmx5IGRhdGEgZm9yIHRoZSBLUEkgdGFnXG5cdCAqIEByZXR1cm5zIHtQcm9taXNlfSBSZXR1cm5zIHRoZSBwcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiBkYXRhIGlzIGxvYWRlZC5cblx0ICovXG5cdHByb3RlY3RlZCBsb2FkS1BJVGFnRGF0YShrcGlEZWZpbml0aW9uOiBLUElEZWZpbml0aW9uLCBvTWFpbk1vZGVsOiBPRGF0YU1vZGVsLCBvS1BJTW9kZWw6IEpTT05Nb2RlbCwgbG9hZEZ1bGw/OiBib29sZWFuKTogYW55IHtcblx0XHQvLyBJZiBsb2FkRnVsbD1mYWxzZSwgdGhlbiB3ZSdyZSBqdXN0IGxvYWRpbmcgZGF0YSBmb3IgdGhlIHRhZyBhbmQgd2UgdXNlIHRoZSBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgZ3JvdXBJRFxuXHRcdC8vIElmIGxvYWRGdWxsPXRydWUsIHdlJ3JlIGxvYWRpbmcgZGF0YSBmb3IgdGhlIHdob2xlIEtQSSAodGFnICsgY2FyZCkgYW5kIHdlIHVzZSB0aGUgZGVmYXVsdCAoXCIkYXV0b1wiKSBncm91cElEXG5cdFx0Y29uc3Qgb0xpc3RCaW5kaW5nID0gbG9hZEZ1bGxcblx0XHRcdD8gb01haW5Nb2RlbC5iaW5kTGlzdChcIi9cIiArIGtwaURlZmluaXRpb24uZW50aXR5U2V0KVxuXHRcdFx0OiBvTWFpbk1vZGVsLmJpbmRMaXN0KFwiL1wiICsga3BpRGVmaW5pdGlvbi5lbnRpdHlTZXQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHsgJCRncm91cElkOiBcIiRhdXRvLkxvbmdSdW5uZXJzXCIgfSk7XG5cdFx0Y29uc3Qgb0FnZ3JlZ2F0ZTogUmVjb3JkPHN0cmluZywgeyB1bml0Pzogc3RyaW5nIH0+ID0ge307XG5cblx0XHQvLyBNYWluIHZhbHVlICsgY3VycmVuY3kvdW5pdFxuXHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py5pc1BhdGgpIHtcblx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQucHJvcGVydHlQYXRoXSA9IHsgdW5pdDoga3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdC52YWx1ZSB9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LnByb3BlcnR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0eSBmb3IgY3JpdGljYWxpdHlcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQuY3JpdGljYWxpdHlQYXRoKSB7XG5cdFx0XHRvQWdncmVnYXRlW2twaURlZmluaXRpb24uZGF0YXBvaW50LmNyaXRpY2FsaXR5UGF0aF0gPSB7fTtcblx0XHR9XG5cblx0XHQvLyBQcm9wZXJ0aWVzIGZvciB0cmVuZCBhbmQgdHJlbmQgY2FsY3VsYXRpb25cblx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZFBhdGhdID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudHJlbmRDYWxjdWxhdGlvblJlZmVyZW5jZVBhdGgpIHtcblx0XHRcdFx0b0FnZ3JlZ2F0ZVtrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50cmVuZENhbGN1bGF0aW9uUmVmZXJlbmNlUGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmIChrcGlEZWZpbml0aW9uLmRhdGFwb2ludC50YXJnZXRQYXRoKSB7XG5cdFx0XHRcdG9BZ2dyZWdhdGVba3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudGFyZ2V0UGF0aF0gPSB7fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRvTGlzdEJpbmRpbmcuc2V0QWdncmVnYXRpb24oeyBhZ2dyZWdhdGU6IG9BZ2dyZWdhdGUgfSk7XG5cblx0XHQvLyBNYW5hZ2UgU2VsZWN0aW9uVmFyaWFudCBmaWx0ZXJzXG5cdFx0aWYgKGtwaURlZmluaXRpb24uc2VsZWN0aW9uVmFyaWFudEZpbHRlckRlZmluaXRpb25zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IGFGaWx0ZXJzID0ga3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnMubWFwKGNyZWF0ZUZpbHRlckZyb21EZWZpbml0aW9uKS5maWx0ZXIoZmlsdGVyID0+IHtcblx0XHRcdFx0cmV0dXJuIGZpbHRlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0fSkgYXMgRmlsdGVyW107XG5cdFx0XHRvTGlzdEJpbmRpbmcuZmlsdGVyKGFGaWx0ZXJzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCAxKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSkgPT4ge1xuXHRcdFx0aWYgKGFDb250ZXh0cy5sZW5ndGgpIHtcblx0XHRcdFx0Y29uc3QgcmF3VW5pdCA9IGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQ/LmlzUGF0aFxuXHRcdFx0XHRcdD8gYUNvbnRleHRzWzBdLmdldFByb3BlcnR5KGtwaURlZmluaXRpb24uZGF0YXBvaW50LnVuaXQudmFsdWUpXG5cdFx0XHRcdFx0OiBrcGlEZWZpbml0aW9uLmRhdGFwb2ludC51bml0Py52YWx1ZTtcblxuXHRcdFx0XHRpZiAoa3BpRGVmaW5pdGlvbi5kYXRhcG9pbnQudW5pdCAmJiAhcmF3VW5pdCkge1xuXHRcdFx0XHRcdC8vIEEgdW5pdC9jdXJyZW5jeSBpcyBkZWZpbmVkLCBidXQgaXRzIHZhbHVlIGlzIHVuZGVmaW5lZCAtLT4gbXVsdGktdW5pdCBzaXR1YXRpb25cblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVwiLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVVbnNjYWxlZFwiLCBcIipcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi9tYWluVmFsdWVOb1NjYWxlXCIsIFwiKlwiKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5WYWx1ZVNjYWxlXCIsIFwiXCIpO1xuXHRcdFx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vbWFpblVuaXRcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5Dcml0aWNhbGl0eVwiLCBNZXNzYWdlVHlwZS5Ob25lKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL21haW5TdGF0ZVwiLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90cmVuZFwiLCBcIk5vbmVcIik7XG5cdFx0XHRcdFx0b0tQSU1vZGVsLnNldFByb3BlcnR5KFwiL1wiICsga3BpRGVmaW5pdGlvbi5pZCArIFwiL21hbmlmZXN0L3NhcC5jYXJkL2RhdGEvanNvbi90YXJnZXROdW1iZXJcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL3RhcmdldFVuaXRcIiwgdW5kZWZpbmVkKTtcblx0XHRcdFx0XHRvS1BJTW9kZWwuc2V0UHJvcGVydHkoXCIvXCIgKyBrcGlEZWZpbml0aW9uLmlkICsgXCIvbWFuaWZlc3Qvc2FwLmNhcmQvZGF0YS9qc29uL2RldmlhdGlvbk51bWJlclwiLCB1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VmFsdWVBbmRDdXJyZW5jeShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0dGhpcy51cGRhdGVEYXRhcG9pbnRDcml0aWNhbGl0eShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cblx0XHRcdFx0XHRpZiAobG9hZEZ1bGwpIHtcblx0XHRcdFx0XHRcdHRoaXMudXBkYXRlRGF0YXBvaW50VHJlbmQoa3BpRGVmaW5pdGlvbiwgYUNvbnRleHRzWzBdLCBvS1BJTW9kZWwpO1xuXHRcdFx0XHRcdFx0dGhpcy51cGRhdGVUYXJnZXRWYWx1ZShrcGlEZWZpbml0aW9uLCBhQ29udGV4dHNbMF0sIG9LUElNb2RlbCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTG9hZHMgY2FyZCBkYXRhIGZvciBhIEtQSSwgYW5kIHN0b3JlcyBpdCBpbiB0aGUgSlNPTiBLUEkgbW9kZWwuXG5cdCAqXG5cdCAqIEBwYXJhbSB7S1BJRGVmaW5pdGlvbn0ga3BpRGVmaW5pdGlvbiBUaGUgZGVmaW5pdGlvbiBvZiB0aGUgS1BJLlxuXHQgKiBAcGFyYW0ge09EYXRhTW9kZWx9IG9NYWluTW9kZWwgVGhlIG1vZGVsIHVzZWQgdG8gbG9hZCB0aGUgZGF0YS5cblx0ICogQHBhcmFtIHtKU09OTW9kZWx9IG9LUElNb2RlbCBUaGUgSlNPTiBtb2RlbCB3aGVyZSB0aGUgZGF0YSB3aWxsIGJlIHN0b3JlZFxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUmV0dXJucyB0aGUgcHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gZGF0YSBpcyBsb2FkZWQuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgbG9hZEtQSUNhcmREYXRhKGtwaURlZmluaXRpb246IEtQSURlZmluaXRpb24sIG9NYWluTW9kZWw6IE9EYXRhTW9kZWwsIG9LUElNb2RlbDogSlNPTk1vZGVsKTogYW55IHtcblx0XHRjb25zdCBvTGlzdEJpbmRpbmcgPSBvTWFpbk1vZGVsLmJpbmRMaXN0KFwiL1wiICsga3BpRGVmaW5pdGlvbi5lbnRpdHlTZXQpO1xuXHRcdGNvbnN0IG9Hcm91cDogUmVjb3JkPHN0cmluZywgT2JqZWN0PiA9IHt9O1xuXHRcdGNvbnN0IG9BZ2dyZWdhdGU6IFJlY29yZDxzdHJpbmcsIE9iamVjdD4gPSB7fTtcblxuXHRcdGtwaURlZmluaXRpb24uY2hhcnQuZGltZW5zaW9ucy5mb3JFYWNoKGRpbWVuc2lvbiA9PiB7XG5cdFx0XHRvR3JvdXBbZGltZW5zaW9uLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0a3BpRGVmaW5pdGlvbi5jaGFydC5tZWFzdXJlcy5mb3JFYWNoKG1lYXN1cmUgPT4ge1xuXHRcdFx0b0FnZ3JlZ2F0ZVttZWFzdXJlLm5hbWVdID0ge307XG5cdFx0fSk7XG5cdFx0b0xpc3RCaW5kaW5nLnNldEFnZ3JlZ2F0aW9uKHtcblx0XHRcdGdyb3VwOiBvR3JvdXAsXG5cdFx0XHRhZ2dyZWdhdGU6IG9BZ2dyZWdhdGVcblx0XHR9KTtcblxuXHRcdC8vIE1hbmFnZSBTZWxlY3Rpb25WYXJpYW50IGZpbHRlcnNcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5zZWxlY3Rpb25WYXJpYW50RmlsdGVyRGVmaW5pdGlvbnM/Lmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgYUZpbHRlcnMgPSBrcGlEZWZpbml0aW9uLnNlbGVjdGlvblZhcmlhbnRGaWx0ZXJEZWZpbml0aW9ucy5tYXAoY3JlYXRlRmlsdGVyRnJvbURlZmluaXRpb24pLmZpbHRlcihmaWx0ZXIgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZmlsdGVyICE9PSB1bmRlZmluZWQ7XG5cdFx0XHR9KSBhcyBGaWx0ZXJbXTtcblx0XHRcdG9MaXN0QmluZGluZy5maWx0ZXIoYUZpbHRlcnMpO1xuXHRcdH1cblxuXHRcdC8vIFNvcnRpbmdcblx0XHRpZiAoa3BpRGVmaW5pdGlvbi5jaGFydC5zb3J0T3JkZXIpIHtcblx0XHRcdG9MaXN0QmluZGluZy5zb3J0KFxuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LnNvcnRPcmRlci5tYXAoc29ydEluZm8gPT4ge1xuXHRcdFx0XHRcdHJldHVybiBuZXcgU29ydGVyKHNvcnRJbmZvLm5hbWUsIHNvcnRJbmZvLmRlc2NlbmRpbmcpO1xuXHRcdFx0XHR9KVxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXR1cm4gb0xpc3RCaW5kaW5nLnJlcXVlc3RDb250ZXh0cygwLCBrcGlEZWZpbml0aW9uLmNoYXJ0Lm1heEl0ZW1zKS50aGVuKChhQ29udGV4dHM6IENvbnRleHRbXSkgPT4ge1xuXHRcdFx0Y29uc3QgY2hhcnREYXRhID0gYUNvbnRleHRzLm1hcChmdW5jdGlvbihvQ29udGV4dCkge1xuXHRcdFx0XHRjb25zdCBvRGF0YTogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXHRcdFx0XHRrcGlEZWZpbml0aW9uLmNoYXJ0LmRpbWVuc2lvbnMuZm9yRWFjaChkaW1lbnNpb24gPT4ge1xuXHRcdFx0XHRcdG9EYXRhW2RpbWVuc2lvbi5uYW1lXSA9IG9Db250ZXh0LmdldFByb3BlcnR5KGRpbWVuc2lvbi5uYW1lKTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdGtwaURlZmluaXRpb24uY2hhcnQubWVhc3VyZXMuZm9yRWFjaChtZWFzdXJlID0+IHtcblx0XHRcdFx0XHRvRGF0YVttZWFzdXJlLm5hbWVdID0gb0NvbnRleHQuZ2V0UHJvcGVydHkobWVhc3VyZS5uYW1lKTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIG9EYXRhO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9LUElNb2RlbC5zZXRQcm9wZXJ0eShcIi9cIiArIGtwaURlZmluaXRpb24uaWQgKyBcIi9tYW5pZmVzdC9zYXAuY2FyZC9kYXRhL2pzb24vY2hhcnREYXRhXCIsIGNoYXJ0RGF0YSk7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgcG9wb3ZlciB0byBkaXNwbGF5IHRoZSBLUEkgY2FyZFxuXHQgKiBUaGUgcG9wb3ZlciBhbmQgdGhlIGNvbnRhaW5lZCBjYXJkIGZvciB0aGUgS1BJcyBhcmUgY3JlYXRlZCBpZiBuZWNlc3NhcnkuXG5cdCAqIFRoZSBwb3BvdmVyIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBLUElzLCBzbyBpdCdzIGNyZWF0ZWQgb25seSBvbmNlLlxuXHQgKlxuXHQgKiBAcGFyYW0gb0tQSVRhZyBUaGUgdGFnIHRoYXQgdHJpZ2dlcmVkIHRoZSBwb3BvdmVyIG9wZW5pbmcuXG5cdCAqIEByZXR1cm5zIFRoZSBzaGFyZWQgcG9wb3ZlciBhcyBhIHByb21pc2UuXG5cdCAqL1xuXHRwcm90ZWN0ZWQgZ2V0UG9wb3ZlcihvS1BJVGFnOiBHZW5lcmljVGFnKTogUHJvbWlzZTxQb3BvdmVyPiB7XG5cdFx0aWYgKCF0aGlzLm9Qb3BvdmVyKSB7XG5cdFx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHQoc2FwLnVpLmdldENvcmUoKS5sb2FkTGlicmFyeShcInNhcC91aS9pbnRlZ3JhdGlvblwiLCB7IGFzeW5jOiB0cnVlIH0pIGFzIFByb21pc2U8b2JqZWN0Pilcblx0XHRcdFx0XHQudGhlbigoKSA9PiB7XG5cdFx0XHRcdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdWkvaW50ZWdyYXRpb24vd2lkZ2V0cy9DYXJkXCIsIFwic2FwL3VpL2ludGVncmF0aW9uL0hvc3RcIl0sIChDYXJkOiBhbnksIEhvc3Q6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBvSG9zdCA9IG5ldyBIb3N0KCk7XG5cblx0XHRcdFx0XHRcdFx0b0hvc3QuYXR0YWNoQWN0aW9uKChvRXZlbnQ6IGFueSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IHNUeXBlID0gb0V2ZW50LmdldFBhcmFtZXRlcihcInR5cGVcIik7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJwYXJhbWV0ZXJzXCIpO1xuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKHNUeXBlID09PSBcIk5hdmlnYXRpb25cIikge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKG9QYXJhbXMuc2VtYW50aWNPYmplY3QpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBhbnkpLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0b1BhcmFtcy5zZW1hbnRpY09iamVjdCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvUGFyYW1zLmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0KHRoaXMuZ2V0VmlldygpLmdldENvbnRyb2xsZXIoKSBhcyBhbnkpLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGVPdXRib3VuZChvUGFyYW1zLm91dGJvdW5kKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXG5cdFx0XHRcdFx0XHRcdHRoaXMub0NhcmQgPSBuZXcgQ2FyZCh7XG5cdFx0XHRcdFx0XHRcdFx0d2lkdGg6IFwiMjVyZW1cIixcblx0XHRcdFx0XHRcdFx0XHRoZWlnaHQ6IFwiYXV0b1wiXG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnNldEhvc3Qob0hvc3QgYXMgYW55KTtcblxuXHRcdFx0XHRcdFx0XHR0aGlzLm9Qb3BvdmVyID0gbmV3IFBvcG92ZXIoXCJrcGktUG9wb3ZlclwiLCB7XG5cdFx0XHRcdFx0XHRcdFx0c2hvd0hlYWRlcjogZmFsc2UsXG5cdFx0XHRcdFx0XHRcdFx0cGxhY2VtZW50OiBcIkF1dG9cIixcblx0XHRcdFx0XHRcdFx0XHRjb250ZW50OiBbdGhpcy5vQ2FyZF1cblx0XHRcdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRcdFx0b0tQSVRhZy5hZGREZXBlbmRlbnQodGhpcy5vUG9wb3Zlcik7IC8vIFRoZSBmaXJzdCBjbGlja2VkIHRhZyBnZXRzIHRoZSBwb3BvdmVyIGFzIGRlcGVuZGVudFxuXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHRcdC5jYXRjaChmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJlamVjdCgpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5vUG9wb3Zlcik7XG5cdFx0fVxuXHR9XG5cblx0QFB1YmxpY1xuXHRwdWJsaWMgb25LUElQcmVzc2VkKG9LUElUYWc6IGFueSwga3BpSUQ6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG9LUElNb2RlbCA9IG9LUElUYWcuZ2V0TW9kZWwoXCJrcGlNb2RlbFwiKSBhcyBKU09OTW9kZWw7XG5cblx0XHRpZiAodGhpcy5hS1BJRGVmaW5pdGlvbnMgJiYgdGhpcy5hS1BJRGVmaW5pdGlvbnMubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBrcGlEZWZpbml0aW9uID0gdGhpcy5hS1BJRGVmaW5pdGlvbnMuZmluZChmdW5jdGlvbihvRGVmKSB7XG5cdFx0XHRcdHJldHVybiBvRGVmLmlkID09PSBrcGlJRDtcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoa3BpRGVmaW5pdGlvbikge1xuXHRcdFx0XHRjb25zdCBvTW9kZWwgPSBvS1BJVGFnLmdldE1vZGVsKCk7XG5cdFx0XHRcdGNvbnN0IGFQcm9taXNlcyA9IFtcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElUYWdEYXRhKGtwaURlZmluaXRpb24sIG9Nb2RlbCwgb0tQSU1vZGVsLCB0cnVlKSxcblx0XHRcdFx0XHR0aGlzLmxvYWRLUElDYXJkRGF0YShrcGlEZWZpbml0aW9uLCBvTW9kZWwsIG9LUElNb2RlbCksXG5cdFx0XHRcdFx0dGhpcy5nZXRQb3BvdmVyKG9LUElUYWcpXG5cdFx0XHRcdF07XG5cblx0XHRcdFx0UHJvbWlzZS5hbGwoYVByb21pc2VzKVxuXHRcdFx0XHRcdC50aGVuKGFSZXN1bHRzID0+IHtcblx0XHRcdFx0XHRcdHRoaXMub0NhcmQuc2V0TWFuaWZlc3Qob0tQSU1vZGVsLmdldFByb3BlcnR5KFwiL1wiICsga3BpSUQgKyBcIi9tYW5pZmVzdFwiKSk7XG5cdFx0XHRcdFx0XHR0aGlzLm9DYXJkLnJlZnJlc2goKTtcblxuXHRcdFx0XHRcdFx0Y29uc3Qgb1BvcG92ZXIgPSBhUmVzdWx0c1syXTtcblx0XHRcdFx0XHRcdG9Qb3BvdmVyLm9wZW5CeShvS1BJVGFnLCBmYWxzZSk7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuY2F0Y2goZXJyID0+IHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihlcnIpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBLUElNYW5hZ2VtZW50Q29udHJvbGxlckV4dGVuc2lvbjtcbiJdfQ==