@sapui5/sap.fe.core 1.130.1 → 1.131.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 (154) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +3 -3
  4. package/src/sap/fe/core/ActionRuntime.ts +1 -1
  5. package/src/sap/fe/core/AppComponent.js +4 -11
  6. package/src/sap/fe/core/AppComponent.ts +3 -12
  7. package/src/sap/fe/core/CommonUtils.js +13 -13
  8. package/src/sap/fe/core/CommonUtils.ts +16 -16
  9. package/src/sap/fe/core/TemplateComponent.js +4 -1
  10. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  11. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  12. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  13. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  14. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  15. package/src/sap/fe/core/controllerextensions/InternalRouting.js +5 -2
  16. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +4 -0
  17. package/src/sap/fe/core/controllerextensions/KPIManagement.js +47 -19
  18. package/src/sap/fe/core/controllerextensions/KPIManagement.ts +57 -19
  19. package/src/sap/fe/core/controllerextensions/PageReady.js +20 -18
  20. package/src/sap/fe/core/controllerextensions/PageReady.ts +19 -18
  21. package/src/sap/fe/core/controllerextensions/Placeholder.js +5 -1
  22. package/src/sap/fe/core/controllerextensions/Placeholder.ts +5 -0
  23. package/src/sap/fe/core/controllerextensions/Routing.js +2 -2
  24. package/src/sap/fe/core/controllerextensions/Routing.ts +1 -1
  25. package/src/sap/fe/core/controllerextensions/Share.js +3 -2
  26. package/src/sap/fe/core/controllerextensions/Share.ts +2 -1
  27. package/src/sap/fe/core/controllerextensions/ViewState.js +5 -1
  28. package/src/sap/fe/core/controllerextensions/ViewState.ts +4 -0
  29. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +1 -2
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +0 -1
  31. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  32. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  33. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  35. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +16 -19
  36. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +29 -28
  37. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  38. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  39. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  40. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  41. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  42. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  45. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  46. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  47. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  48. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  49. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  50. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  51. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  52. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  53. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  54. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  55. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  56. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  57. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  58. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  59. package/src/sap/fe/core/converters/controls/Common/Table.js +43 -46
  60. package/src/sap/fe/core/converters/controls/Common/Table.ts +68 -57
  61. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  62. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  63. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  64. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  65. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  66. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  67. package/src/sap/fe/core/fpm/manifest.json +1 -1
  68. package/src/sap/fe/core/helpers/AppStartupHelper.js +7 -9
  69. package/src/sap/fe/core/helpers/AppStartupHelper.ts +6 -13
  70. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  71. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  72. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  73. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  74. package/src/sap/fe/core/helpers/MetaPath.js +16 -2
  75. package/src/sap/fe/core/helpers/MetaPath.ts +19 -1
  76. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  77. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  78. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  79. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  80. package/src/sap/fe/core/library.js +5 -2
  81. package/src/sap/fe/core/library.support.js +3 -3
  82. package/src/sap/fe/core/library.support.ts +2 -1
  83. package/src/sap/fe/core/library.ts +4 -0
  84. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.js +17 -8
  85. package/src/sap/fe/core/manifestMerger/ChangePageConfiguration.ts +16 -14
  86. package/src/sap/fe/core/messagebundle.properties +6 -0
  87. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  88. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  89. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  90. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  91. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  95. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  97. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  99. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  100. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  102. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  105. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  108. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  109. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  110. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  111. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  113. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  119. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  120. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  121. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  122. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  131. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  132. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  133. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  134. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  136. package/src/sap/fe/core/operationsHelper.js +4 -4
  137. package/src/sap/fe/core/operationsHelper.ts +4 -4
  138. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  139. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  140. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  141. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  142. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  143. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  144. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  145. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  146. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  147. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  148. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  149. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  150. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  151. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  152. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  153. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  154. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
@@ -880,9 +880,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
880
880
  });
881
881
  };
882
882
  _proto._manageDeepLinkStartup = async function _manageDeepLinkStartup(oStartupParameters) {
883
- var _this$oAppComponent$g, _this$oAppComponent$g2;
884
- const alwaysCheckTargetExistence = ((_this$oAppComponent$g = this.oAppComponent.getManifestEntry("sap.fe")) === null || _this$oAppComponent$g === void 0 ? void 0 : (_this$oAppComponent$g2 = _this$oAppComponent$g.app) === null || _this$oAppComponent$g2 === void 0 ? void 0 : _this$oAppComponent$g2._checkExistenceOnDeepLink) === true;
885
- return AppStartupHelper.getDeepLinkStartupHash(this.oAppComponent.getManifestEntry("sap.ui5").routing, oStartupParameters, this.oModel, alwaysCheckTargetExistence).then(oDeepLink => {
883
+ return AppStartupHelper.getDeepLinkStartupHash(this.oAppComponent.getManifestEntry("sap.ui5").routing, oStartupParameters, this.oModel).then(oDeepLink => {
886
884
  let sHash;
887
885
  if (oDeepLink.context) {
888
886
  const sTechnicalPath = oDeepLink.context.getPath();
@@ -958,4 +956,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
958
956
  }(ServiceFactory);
959
957
  return RoutingServiceFactory;
960
958
  }, false);
961
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9FdmVudFByb3ZpZGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2Rlc2NyaXB0b3IyIiwiRXZlbnRQcm92aWRlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJwcm90b3R5cGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIlJvdXRpbmdTZXJ2aWNlIiwiX1NlcnZpY2UiLCJfdGhpczIiLCJfbGVuMiIsIl9rZXkyIiwibmF2aWdhdGlvbkluZm9RdWV1ZSIsImVuYWJsZWQiLCJfZXhwb3J0cyIsIl9wcm90byIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJzY29wZVR5cGUiLCJfdGhpcyRvTW9kZWwiLCJfb0FwcENvbmZpZyRjcm9zc05hdmkiLCJvQXBwQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvUm91dGVyIiwiZ2V0Um91dGVyIiwib1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJldmVudFByb3ZpZGVyIiwib1JvdXRpbmdDb25maWciLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsIl9vUm91dGluZ0NvbmZpZyRjb25maSIsImlzRkNMIiwiY29uZmlnIiwicm91dGVyQ2xhc3MiLCJfbVRhcmdldHMiLCJ0YXJnZXRzIiwic1RhcmdldE5hbWUiLCJPYmplY3QiLCJrZXlzIiwiYXNzaWduIiwidGFyZ2V0TmFtZSIsImNvbnRleHRQYXR0ZXJuIiwidW5kZWZpbmVkIiwidmlld0xldmVsIiwiX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuIiwiX21Sb3V0ZXMiLCJyb3V0ZXMiLCJvUm91dGVNYW5pZmVzdEluZm8iLCJhUm91dGVUYXJnZXRzIiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsIml0ZW0iLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInB1c2giLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImZvckVhY2giLCJhTGV2ZWwwUm91dGVOYW1lcyIsImFMZXZlbDFSb3V0ZU5hbWVzIiwic0RlZmF1bHRSb3V0ZU5hbWUiLCJzTmFtZSIsImlMZXZlbCIsIl90aGlzJF9tVGFyZ2V0cyRzRGVmYSIsInNEZWZhdWx0VGFyZ2V0TmFtZSIsInNsaWNlIiwic0NvbnRleHRQYXRoIiwib1NldHRpbmdzIiwib3B0aW9ucyIsInNldHRpbmdzIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtYXAiLCJzVGFyZ2V0S2V5Iiwic29ydCIsImEiLCJiIiwiZnVsbENvbnRleHRQYXRoIiwibmF2aWdhdGlvbiIsInNOYXZOYW1lIiwiX3NOYXZOYW1lJGRldGFpbCIsInRhcmdldFJvdXRlIiwiZGV0YWlsIiwicm91dGUiLCJfdGhpcyRfbVRhcmdldHMkc1RhcmciLCJfdGhpcyRfbVRhcmdldHMkc1RhcmcyIiwiX3RoaXMkX21UYXJnZXRzJHNUYXJnMyIsInN0YXJ0c1dpdGgiLCJzUGF0dGVybiIsInJlcGxhY2UiLCJyZWdleCIsIlJlZ0V4cCIsIm1hdGNoIiwiX2dldFJvdXRlSW5mb3JtYXRpb24iLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJfZ2V0Q29tcG9uZW50SWQiLCJzT3duZXJJZCIsInNDb21wb25lbnRJZCIsInN1YnN0cmluZyIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib0NvbXBvbmVudEluc3RhbmNlIiwic1RhcmdldENvbXBvbmVudElkIiwiX3NPd25lcklkIiwiZ2V0SWQiLCJzQ29ycmVjdFRhcmdldE5hbWUiLCJpZCIsInZpZXdJZCIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTGFzdFNlbWFudGljTWFwcGluZyIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJjb250ZXh0Iiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsInRhcmdldFVSTFByb21pc2UiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljUGF0aCIsInByZXBhcmVQYXJhbWV0ZXJzIiwidGhlbiIsInBhcmFtZXRlcnMiLCJnZXRVUkwiLCJuYXZpZ2F0ZVRvIiwibVBhcmFtZXRlck1hcHBpbmciLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwic1RhcmdldFVSTFByb21pc2UiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtUGFyYW1ldGVycyIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYWxsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJ2aWV3RGF0YSIsImN1cnJlbnRUYXJnZXRJbmZvIiwicm91dGVQYXJhbWV0ZXJzUHJvbWlzZSIsImlzU3RpY2t5TW9kZSIsInRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uSW5mbyIsIm9Sb3V0ZURldGFpbCIsImlzQSIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwic0xheW91dCIsIl9jYWxjdWxhdGVMYXlvdXQiLCJvTmF2aWdhdGlvbkluZm8iLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJwZXJzaXN0T1BTY3JvbGwiLCJiU2hvd1BsYWNlaG9sZGVyIiwic2hvd1BsYWNlaG9sZGVyIiwicmVhc29uIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJ1cGRhdGVGQ0xMZXZlbCIsInJlY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwicm91dGVJbmZvQnlIYXNoIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsInJvdXRlSW5mb3JtYXRpb24iLCJzQ3VycmVudFJvdXRlTmFtZSIsInJvdXRlUGF0dGVybiIsInNDdXJyZW50Um91dGVQYXR0ZXJuIiwidmlld3MiLCJhQ3VycmVudFZpZXdzIiwic2V0Rm9jdXNGb3JjZWQiLCJmb3JjZUZvY3VzIiwidHJhbnNpZW50IiwiaW5jbHVkZXMiLCJuYXZNb2RlIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQ29udGFpbmVyIiwic2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlZFVybCIsInBhcnNlU2hlbGxIYXNoIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsImhhc2giLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldFNlcnZpY2VBc3luYyIsImhyZWYiLCJnZXRIcmVmIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUiLCJnZXRJbmZyYW1lVXJsIiwidXJsIiwiVVJMIiwiZW5jb2RlVVJJIiwid2luZG93Iiwib3JpZ2luIiwicGF0aG5hbWUiLCJvcGVuV2luZG93Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwicHJlc2VydmVIaXN0b3J5Iiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwic1RhcmdldFVSTCIsImlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeSIsInNQYXRoIiwidGVzdCIsInNTZW1hbnRpY1BhdGgiLCJ0ZWNobmljYWxQYXRoIiwic2VtYW50aWNQYXRoIiwiX2ZpbmRQYXRoVG9OYXZpZ2F0ZSIsIl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoIiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNEcmFmdFJvb3QiLCJnZXRQcm9wZXJ0eSIsImVudGl0eVNldE5hbWUiLCJnZXRTZW1hbnRpY0tleXMiLCJfY29udGV4dCRnZXRIZWFkZXJDb24iLCJnZXRIZWFkZXJDb250ZXh0IiwiX3RoaXMkb0xhc3RTZW1hbnRpY01hIiwibGF5b3V0IiwiZmluZExheW91dEZvckhhc2giLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjYWxjdWxhdGVMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIl9iZWZvcmVSb3V0ZU1hdGNoZWQiLCJiUGxhY2Vob2xkZXJFbmFibGVkIiwiUGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsIm9Sb290VmlldyIsImdldFJvb3RDb250cm9sIiwiQnVzeUxvY2tlciIsImxvY2siLCJfaXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSIsIl9oaXN0b3J5JHN0YXRlIiwiaGlzdG9yeSIsInN0YXRlIiwiZmVMZXZlbCIsIl9vblJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiTmF2aWdhdGlvblJlYXNvbiIsIkFwcFN0YXRlQ2hhbmdlZCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsIlJlc3RvcmVIaXN0b3J5IiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJnZXRQYXJhbWV0ZXIiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImluaXRpYWxpemVSb3V0aW5nIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwicHJvY2Vzc0FuZEV4cGFuZEhhc2giLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJiSXNJYXBwU3RhdGUiLCJnZXRIYXNoQ2hhbmdlciIsIm9TdGFydHVwUGFyYW1ldGVycyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwiYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzIiwic0hhc2giLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJfbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0IiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJBcHBTdGFydHVwSGVscGVyIiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsInNOZXdIYXNoIiwicmVwbGFjZUhhc2giLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsIl90aGlzJG9BcHBDb21wb25lbnQkZyIsIl90aGlzJG9BcHBDb21wb25lbnQkZzIiLCJhbHdheXNDaGVja1RhcmdldEV4aXN0ZW5jZSIsImFwcCIsIl9jaGVja0V4aXN0ZW5jZU9uRGVlcExpbmsiLCJnZXREZWVwTGlua1N0YXJ0dXBIYXNoIiwib0RlZXBMaW5rIiwic1RlY2huaWNhbFBhdGgiLCJzZXRTdGFydHVwTW9kZURlZXBsaW5rIiwic3RhcnR1cFBhcmFtZXRlcnMiLCJfc3RhcnR1cFBhcmFtZXRlcnMkcHIiLCJfc3RhcnR1cFBhcmFtZXRlcnMkcHIyIiwiX3N0YXJ0dXBQYXJhbWV0ZXJzJHByMyIsInJlc3VsdGluZ0hhc2giLCJzaG91bGRFZGl0IiwidmVyaWZ5RWRpdEFubm90YXRpb25zIiwicGFyYW1ldGVyIiwiZ2V0T3V0Ym91bmRzIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl9wcm90bzIiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9Sb3V0aW5nU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nU2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcblxuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgdHlwZSBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nUGFyc2VyIGZyb20gXCJzYXAvdWkvYmFzZS9CaW5kaW5nUGFyc2VyXCI7XG5pbXBvcnQgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUJpbmRpbmdJbmZvIH0gZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnksIFJvdXRpbmdDb25maWd1cmF0aW9uLCBSb3V0aW5nVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IG9wZW5XaW5kb3cgZnJvbSBcInNhcC91aS91dGlsL29wZW5XaW5kb3dcIjtcbmltcG9ydCB0eXBlIENvbnRhaW5lciBmcm9tIFwic2FwL3VzaGVsbC9Db250YWluZXJcIjtcbmltcG9ydCB0eXBlIE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcblxudHlwZSBSb3V0aW5nU2VydmljZVNldHRpbmdzID0ge307XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZUV2ZW50aW5nXCIpXG5jbGFzcyBSb3V0aW5nU2VydmljZUV2ZW50aW5nIGV4dGVuZHMgRXZlbnRQcm92aWRlciB7XG5cdEBldmVudCgpXG5cdHJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzICYge1xuXHRuYXZpZ2F0aW9uSW5mbz86IHsgcmVhc29uPzogTmF2aWdhdGlvblJlYXNvbiB9O1xuXHRyb3V0ZUluZm9ybWF0aW9uPzogdW5rbm93bjtcblx0cm91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXHRjb25maWc6IHsgcGF0dGVybj86IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgPVxuXHR8IHsgbW9kZTogXCJBc3luY1wiOyBjcmVhdGVDb250ZXh0UHJvbWlzZTogUHJvbWlzZTxDb250ZXh0PiB9XG5cdHwgeyBtb2RlOiBcIkRlZmVycmVkXCI7IGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nOyBwYXJlbnRDb250ZXh0PzogQ29udGV4dDsgZGF0YT86IG9iamVjdCB9O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGJUYXJnZXRFZGl0YWJsZT86IGJvb2xlYW47XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRiU2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcblx0dXNlQ29udGV4dD86IENvbnRleHQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xuXHRiQWN0aW9uQ3JlYXRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0Y2hlY2tOb0hhc2hDaGFuZ2U/OiBib29sZWFuO1xuXHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz86IENyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzO1xuXHRlZGl0YWJsZT86IGJvb2xlYW47XG5cdHRyYW5zaWVudD86IGJvb2xlYW47XG5cdHBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdEZDTExldmVsPzogbnVtYmVyO1xuXHR1cGRhdGVGQ0xMZXZlbD86IG51bWJlcjtcblx0cHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbjtcblx0bm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47XG5cdHJlY3JlYXRlQ29udGV4dD86IGJvb2xlYW47XG5cdGZvcmNlRm9jdXM/OiBib29sZWFuO1xuXHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRjYWxsRXh0ZW5zaW9uPzogYm9vbGVhbjtcblx0bGF5b3V0Pzogc3RyaW5nO1xuXHRrZWVwQ3VycmVudExheW91dD86IGJvb2xlYW47XG5cdG5hdk1vZGU/OiBzdHJpbmc7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ1BhcmFtZXRlck1hcCA9IHtcblx0W2s6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBTZW1hbnRpY01hcHBpbmcgPSB7XG5cdHNlbWFudGljUGF0aDogc3RyaW5nO1xuXHR0ZWNobmljYWxQYXRoOiBzdHJpbmc7XG59O1xudHlwZSBNaW5pbWFsUGFnZVNldHRpbmcgPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGZ1bGxDb250ZXh0UGF0aD86IHN0cmluZztcblx0bmF2aWdhdGlvbj86IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25Db25maWd1cmF0aW9uPjtcbn07XG5cbnR5cGUgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0dGVybjogc3RyaW5nO1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcblx0cm91dGVMZXZlbDogbnVtYmVyO1xufTtcblxudHlwZSBSZXNvbHZlZFBhcmFtZXRlcnMgPSB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9O1xuXG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblxuXHRvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRvUm91dGVyITogUm91dGVyO1xuXG5cdG9Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdGV2ZW50UHJvdmlkZXIhOiBFdmVudFByb3ZpZGVyO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxSb3V0aW5nU2VydmljZT47XG5cblx0b3V0Ym91bmRzITogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PjtcblxuXHRfbVRhcmdldHMhOiBSZWNvcmQ8c3RyaW5nLCBSb3V0aW5nVGFyZ2V0PjtcblxuXHRfbVJvdXRlcyE6IFJlY29yZDxzdHJpbmcsIEludGVybmFsUm91dGVEZWZpbml0aW9uPjtcblxuXHRvTGFzdFNlbWFudGljTWFwcGluZz86IFNlbWFudGljTWFwcGluZztcblxuXHRiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290PzogYm9vbGVhbjtcblxuXHRzQ3VycmVudFJvdXRlTmFtZT86IHN0cmluZztcblxuXHRzQ3VycmVudFJvdXRlUGF0dGVybj86IHN0cmluZztcblxuXHRhQ3VycmVudFZpZXdzPzogKFZpZXcgfCBDb21wb25lbnRDb250YWluZXIpW107XG5cblx0bmF2aWdhdGlvbkluZm9RdWV1ZTogUm91dGluZ05hdmlnYXRpb25JbmZvW10gPSBbXTtcblxuXHRzQ29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0X2ZuT25Sb3V0ZU1hdGNoZWQhOiAoZXY6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCkgPT4gdm9pZDtcblxuXHRlbmFibGVkID0gZmFsc2U7XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dC5zY29wZVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdFx0dGhpcy5vTW9kZWwgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdHRoaXMub01ldGFNb2RlbCA9IHRoaXMub01vZGVsPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHR0aGlzLmV2ZW50UHJvdmlkZXIgPSBuZXcgUm91dGluZ1NlcnZpY2VFdmVudGluZygpO1xuXG5cdFx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nO1xuXHRcdFx0dGhpcy5fcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZyEpO1xuXG5cdFx0XHRjb25zdCBvQXBwQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdFx0dGhpcy5vdXRib3VuZHMgPSBvQXBwQ29uZmlnLmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzID8/IHt9O1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHRiZWZvcmVFeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdHRoaXMub1JvdXRlci5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5PblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCB7fSk7XG5cdH1cblxuXHRleGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXN0cm95KCk7XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2UgYSBtYW5pZmVzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIHVzYWdlLlxuXHQgKiBAcGFyYW0gb1JvdXRpbmdDb25maWcgVGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKi9cblx0X3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24ob1JvdXRpbmdDb25maWc6IFJvdXRpbmdDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgaXNGQ0wgPSBvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiO1xuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2YgdGFyZ2V0c1xuXHRcdHRoaXMuX21UYXJnZXRzID0ge307XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy50YXJnZXRzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUYXJnZXROYW1lIG9mIE9iamVjdC5rZXlzKG9Sb3V0aW5nQ29uZmlnLnRhcmdldHMpKSB7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXSA9IE9iamVjdC5hc3NpZ24oeyB0YXJnZXROYW1lOiBzVGFyZ2V0TmFtZSB9LCBvUm91dGluZ0NvbmZpZy50YXJnZXRzW3NUYXJnZXROYW1lXSk7XG5cblx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3IgRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgdGFyZ2V0IHBhdHRlcm5cblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdHRlcm4gPSB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdGlmIChjb250ZXh0UGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKGNvbnRleHRQYXR0ZXJuLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEluZm9ybWF0aW9uIG9mIHJvdXRlc1xuXHRcdHRoaXMuX21Sb3V0ZXMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnJvdXRlcykge1xuXHRcdFx0Zm9yIChjb25zdCBvUm91dGVNYW5pZmVzdEluZm8gb2Ygb1JvdXRpbmdDb25maWcucm91dGVzKSB7XG5cdFx0XHRcdGNvbnN0IGFSb3V0ZVRhcmdldHMgPSBnZXRSb3V0ZVRhcmdldE5hbWVzKG9Sb3V0ZU1hbmlmZXN0SW5mby50YXJnZXQpLFxuXHRcdFx0XHRcdHNSb3V0ZU5hbWUgPSBvUm91dGVNYW5pZmVzdEluZm8ubmFtZSxcblx0XHRcdFx0XHRzUm91dGVQYXR0ZXJuID0gb1JvdXRlTWFuaWZlc3RJbmZvLnBhdHRlcm47XG5cdFx0XHRcdGlmICghc1JvdXRlUGF0dGVybikge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdC8vIENoZWNrIHJvdXRlIHBhdHRlcm46IGFsbCBwYXR0ZXJucyBuZWVkIHRvIGVuZCB3aXRoICc6P3F1ZXJ5OicsIHRoYXQgd2UgdXNlIGZvciBwYXJhbWV0ZXJzXG5cdFx0XHRcdGlmIChzUm91dGVQYXR0ZXJuLmxlbmd0aCA8IDggfHwgc1JvdXRlUGF0dGVybi5pbmRleE9mKFwiOj9xdWVyeTpcIikgIT09IHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIC0gOCkge1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBQYXR0ZXJuIGZvciByb3V0ZSAke3NSb3V0ZU5hbWV9IGRvZXNuJ3QgZW5kIHdpdGggJzo/cXVlcnk6JyA6ICR7c1JvdXRlUGF0dGVybn1gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpUm91dGVMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNSb3V0ZVBhdHRlcm4sIDApO1xuXHRcdFx0XHR0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdID0ge1xuXHRcdFx0XHRcdG5hbWU6IHNSb3V0ZU5hbWUsXG5cdFx0XHRcdFx0cGF0dGVybjogc1JvdXRlUGF0dGVybixcblx0XHRcdFx0XHR0YXJnZXRzOiBhUm91dGVUYXJnZXRzLFxuXHRcdFx0XHRcdHJvdXRlTGV2ZWw6IGlSb3V0ZUxldmVsXG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gQWRkIHRoZSBwYXJlbnQgdGFyZ2V0cyBpbiB0aGUgbGlzdCBvZiB0YXJnZXRzIGZvciB0aGUgcm91dGVcblx0XHRcdFx0Zm9yIChjb25zdCBpdGVtIG9mIGFSb3V0ZVRhcmdldHMpIHtcblx0XHRcdFx0XHRjb25zdCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW2l0ZW1dLnBhcmVudDtcblx0XHRcdFx0XHRpZiAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMucHVzaChzUGFyZW50VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCFpc0ZDTCkge1xuXHRcdFx0XHRcdC8vIFZpZXcgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSByb3V0ZSBwYXR0ZXJuXG5cdFx0XHRcdFx0Y29uc3Qgdmlld0xldmVsID0gdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsO1xuXHRcdFx0XHRcdGlmICh2aWV3TGV2ZWwgPT09IHVuZGVmaW5lZCB8fCB2aWV3TGV2ZWwgPCBpUm91dGVMZXZlbCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlcmUgYXJlIGNhc2VzIHdoZW4gZGlmZmVyZW50IHJvdXRlcyBwb2ludCB0byB0aGUgc2FtZSB0YXJnZXQuIFdlIHRha2UgdGhlXG5cdFx0XHRcdFx0XHQvLyBsYXJnZXN0IHZpZXdMZXZlbCBpbiB0aGF0IGNhc2UuXG5cdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWwgPSBpUm91dGVMZXZlbDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGQ0wgbGV2ZWwgZm9yIG5vbi1GQ0wgY2FzZXMgaXMgZXF1YWwgdG8gLTFcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IC0xO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFSb3V0ZVRhcmdldHMubGVuZ3RoID09PSAxICYmIHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLmNvbnRyb2xBZ2dyZWdhdGlvbiAhPT0gXCJiZWdpbkNvbHVtblBhZ2VzXCIpIHtcblx0XHRcdFx0XHQvLyBXZSdyZSBpbiB0aGUgY2FzZSB3aGVyZSB0aGVyZSdzIG9ubHkgMSB0YXJnZXQgZm9yIHRoZSByb3V0ZSwgYW5kIGl0J3Mgbm90IGluIHRoZSBmaXJzdCBjb2x1bW5cblx0XHRcdFx0XHQvLyAtLT4gdGhpcyBpcyBhIGZ1bGxzY3JlZW4gY29sdW1uIGFmdGVyIGFsbCBjb2x1bW5zIGluIHRoZSBGQ0wgaGF2ZSBiZWVuIHVzZWRcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5GQ0xMZXZlbCA9IDM7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gT3RoZXIgRkNMIGNhc2VzXG5cdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0c3dpdGNoICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJiZWdpbkNvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMDtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRjYXNlIFwibWlkQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAxO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMjtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFByb3BhZ2F0ZSB2aWV3TGV2ZWwsIGNvbnRleHRQYXR0ZXJuLCBGQ0xMZXZlbCBhbmQgY29udHJvbEFnZ3JlZ2F0aW9uIHRvIHBhcmVudCB0YXJnZXRzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGxldCBzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR3aGlsZSAoc1BhcmVudFRhcmdldE5hbWUpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLnZpZXdMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbiB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uO1xuXHRcdFx0XHRzVGFyZ2V0TmFtZSA9IHNQYXJlbnRUYXJnZXROYW1lO1xuXHRcdFx0XHRzUGFyZW50VGFyZ2V0TmFtZSA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5wYXJlbnQ7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHQvLyBEZXRlcm1pbmUgdGhlIHJvb3QgZW50aXR5IGZvciB0aGUgYXBwXG5cdFx0Y29uc3QgYUxldmVsMFJvdXRlTmFtZXMgPSBbXTtcblx0XHRjb25zdCBhTGV2ZWwxUm91dGVOYW1lcyA9IFtdO1xuXHRcdGxldCBzRGVmYXVsdFJvdXRlTmFtZTtcblxuXHRcdGZvciAoY29uc3Qgc05hbWUgaW4gdGhpcy5fbVJvdXRlcykge1xuXHRcdFx0Y29uc3QgaUxldmVsID0gdGhpcy5fbVJvdXRlc1tzTmFtZV0ucm91dGVMZXZlbDtcblx0XHRcdGlmIChpTGV2ZWwgPT09IDApIHtcblx0XHRcdFx0YUxldmVsMFJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9IGVsc2UgaWYgKGlMZXZlbCA9PT0gMSkge1xuXHRcdFx0XHRhTGV2ZWwxUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoYUxldmVsMFJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDBSb3V0ZU5hbWVzWzBdO1xuXHRcdH0gZWxzZSBpZiAoYUxldmVsMVJvdXRlTmFtZXMubGVuZ3RoID09PSAxKSB7XG5cdFx0XHRzRGVmYXVsdFJvdXRlTmFtZSA9IGFMZXZlbDFSb3V0ZU5hbWVzWzBdO1xuXHRcdH1cblxuXHRcdGlmIChzRGVmYXVsdFJvdXRlTmFtZSkge1xuXHRcdFx0Y29uc3Qgc0RlZmF1bHRUYXJnZXROYW1lID0gdGhpcy5fbVJvdXRlc1tzRGVmYXVsdFJvdXRlTmFtZV0udGFyZ2V0cy5zbGljZSgtMSlbMF07XG5cdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IFwiXCI7XG5cdFx0XHRjb25zdCBvU2V0dGluZ3MgPSB0aGlzLl9tVGFyZ2V0c1tzRGVmYXVsdFRhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZyB8IHVuZGVmaW5lZDtcblx0XHRcdGlmIChvU2V0dGluZ3MpIHtcblx0XHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBvU2V0dGluZ3MuY29udGV4dFBhdGggfHwgYC8ke29TZXR0aW5ncy5lbnRpdHlTZXR9YDtcblx0XHRcdH1cblx0XHRcdGlmICghdGhpcy5zQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFx0YENhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogY29udGV4dFBhdGggb3IgZW50aXR5U2V0IG1pc3NpbmcgaW4gZGVmYXVsdCB0YXJnZXQ6ICR7c0RlZmF1bHRUYXJnZXROYW1lfWBcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0TG9nLndhcm5pbmcoXCJDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IG5vIGRlZmF1bHQgcm91dGUgZm91bmQuXCIpO1xuXHRcdH1cblxuXHRcdC8vIFdlIG5lZWQgdG8gZXN0YWJsaXNoIHRoZSBjb3JyZWN0IHBhdGggdG8gdGhlIGRpZmZlcmVudCBwYWdlcywgaW5jbHVkaW5nIHRoZSBuYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cylcblx0XHRcdC5tYXAoKHNUYXJnZXRLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldEtleV07XG5cdFx0XHR9KVxuXHRcdFx0LnNvcnQoKGE6IFJvdXRpbmdUYXJnZXQsIGI6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0cmV0dXJuIGEudmlld0xldmVsICE9PSB1bmRlZmluZWQgJiYgYi52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBhLnZpZXdMZXZlbCA8IGIudmlld0xldmVsID8gLTEgOiAxO1xuXHRcdFx0fSlcblx0XHRcdC5mb3JFYWNoKCh0YXJnZXQ6IFJvdXRpbmdUYXJnZXQpID0+IHtcblx0XHRcdFx0Ly8gQWZ0ZXIgc29ydGluZyB0aGUgdGFyZ2V0cyBwZXIgbGV2ZWwgd2UgY2FuIHRoZW4gZ28gdGhyb3VnaCB0aGVpciBuYXZpZ2F0aW9uIG9iamVjdCBhbmQgdXBkYXRlIHRoZSBwYXRocyBhY2NvcmRpbmdseS5cblx0XHRcdFx0aWYgKHRhcmdldC5vcHRpb25zKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc2V0dGluZ3MgPSB0YXJnZXQub3B0aW9ucy5zZXR0aW5ncyBhcyBNaW5pbWFsUGFnZVNldHRpbmc7XG5cdFx0XHRcdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gc2V0dGluZ3MuY29udGV4dFBhdGggfHwgKHNldHRpbmdzLmVudGl0eVNldCA/IGAvJHtzZXR0aW5ncy5lbnRpdHlTZXR9YCA6IFwiXCIpO1xuXHRcdFx0XHRcdGlmICghc2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICYmIHNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoID0gYCR7c0NvbnRleHRQYXRofS9gO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRPYmplY3Qua2V5cyhzZXR0aW5ncy5uYXZpZ2F0aW9uIHx8IHt9KS5mb3JFYWNoKChzTmF2TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHQvLyBDaGVjayBpZiBpdCdzIGEgbmF2aWdhdGlvbiBwcm9wZXJ0eVxuXHRcdFx0XHRcdFx0Y29uc3QgdGFyZ2V0Um91dGUgPSB0aGlzLl9tUm91dGVzW3NldHRpbmdzLm5hdmlnYXRpb24hW3NOYXZOYW1lXS5kZXRhaWw/LnJvdXRlXTtcblx0XHRcdFx0XHRcdGlmICh0YXJnZXRSb3V0ZSAmJiB0YXJnZXRSb3V0ZS50YXJnZXRzKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFJvdXRlLnRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IXRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncz8uZnVsbENvbnRleHRQYXRoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGFyZ2V0LnZpZXdMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9IGAke1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChzTmF2TmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBzTmF2TmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9L2A7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9IGAke1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIGEgdmlldyBsZXZlbCBmcm9tIGEgcGF0dGVybiBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLlxuXHQgKiBAcGFyYW0gc1BhdHRlcm4gVGhlIHBhdHRlcm5cblx0ICogQHBhcmFtIHZpZXdMZXZlbCBUaGUgY3VycmVudCBsZXZlbCBvZiB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBsZXZlbFxuXHQgKi9cblx0X2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuOiBzdHJpbmcsIHZpZXdMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCIvW14vXSokXCIpO1xuXHRcdGlmIChzUGF0dGVybiAmJiBzUGF0dGVyblswXSAhPT0gXCIvXCIgJiYgc1BhdHRlcm5bMF0gIT09IFwiP1wiKSB7XG5cdFx0XHRzUGF0dGVybiA9IGAvJHtzUGF0dGVybn1gO1xuXHRcdH1cblx0XHRpZiAoc1BhdHRlcm4ubGVuZ3RoKSB7XG5cdFx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0dGVybikgfHwgc1BhdHRlcm4gPT09IFwiXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCArK3ZpZXdMZXZlbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sIHZpZXdMZXZlbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB2aWV3TGV2ZWw7XG5cdFx0fVxuXHR9XG5cblx0X2dldFJvdXRlSW5mb3JtYXRpb24oc1JvdXRlTmFtZT86IHN0cmluZyk6IEludGVybmFsUm91dGVEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoc1JvdXRlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fbVJvdXRlc1tzUm91dGVOYW1lXTtcblx0fVxuXG5cdF9nZXRUYXJnZXRJbmZvcm1hdGlvbihzVGFyZ2V0TmFtZT86IHN0cmluZyk6IFJvdXRpbmdUYXJnZXQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzVGFyZ2V0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdO1xuXHR9XG5cblx0X2dldENvbXBvbmVudElkKHNPd25lcklkOiBzdHJpbmcsIHNDb21wb25lbnRJZDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0NvbXBvbmVudElkLmluZGV4T2YoYCR7c093bmVySWR9LS0tYCkgPT09IDApIHtcblx0XHRcdHJldHVybiBzQ29tcG9uZW50SWQuc3Vic3RyaW5nKHNPd25lcklkLmxlbmd0aCArIDMpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbXBvbmVudElkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gY29tcG9uZW50LlxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlIEluc3RhbmNlIG9mIHRoZSBjb21wb25lbnRcblx0ICogQHBhcmFtIG9Db21wb25lbnRJbnN0YW5jZS5fc093bmVySWRcblx0ICogQHBhcmFtIG9Db21wb25lbnRJbnN0YW5jZS5nZXRJZFxuXHQgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldFxuXHQgKi9cblx0Z2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3Iob0NvbXBvbmVudEluc3RhbmNlOiBDb21wb25lbnQgfCBWaWV3KTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3Qgc1RhcmdldENvbXBvbmVudElkID0gdGhpcy5fZ2V0Q29tcG9uZW50SWQoXG5cdFx0XHQob0NvbXBvbmVudEluc3RhbmNlIGFzIHVua25vd24gYXMgeyBfc093bmVySWQ6IHN0cmluZyB9KS5fc093bmVySWQsXG5cdFx0XHRvQ29tcG9uZW50SW5zdGFuY2UuZ2V0SWQoKVxuXHRcdCk7XG5cdFx0bGV0IHNDb3JyZWN0VGFyZ2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmlkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdJZCA9PT0gc1RhcmdldENvbXBvbmVudElkKSB7XG5cdFx0XHRcdHNDb3JyZWN0VGFyZ2V0TmFtZSA9IHNUYXJnZXROYW1lO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzQ29ycmVjdFRhcmdldE5hbWUpO1xuXHR9XG5cblx0Z2V0TGFzdFNlbWFudGljTWFwcGluZygpOiBTZW1hbnRpY01hcHBpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nO1xuXHR9XG5cblx0c2V0TGFzdFNlbWFudGljTWFwcGluZyhvTWFwcGluZz86IFNlbWFudGljTWFwcGluZyk6IHZvaWQge1xuXHRcdHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgPSBvTWFwcGluZztcblx0fVxuXG5cdGFzeW5jIGdldEhhc2hGcm9tUm91dGUoY29udGV4dDogQ29udGV4dCwgcm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLCBwYXJhbWV0ZXJNYXBwaW5nPzogdW5rbm93bik6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRVUkxQcm9taXNlOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cdFx0aWYgKCFwYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHR0YXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcgYXMgUm91dGluZ1BhcmFtZXRlck1hcCwgcm91dGVOYW1lLCBjb250ZXh0KS50aGVuKFxuXHRcdFx0XHQocGFyYW1ldGVyczogb2JqZWN0IHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlci5nZXRVUkwocm91dGVOYW1lISwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXdhaXQgdGFyZ2V0VVJMUHJvbWlzZSkgYXMgc3RyaW5nO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IHRydWVcblx0KTogUHJvbWlzZTwoKSA9PiB2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKFxuXHRcdFx0XHQobVBhcmFtZXRlcnM6IG9iamVjdCB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUhLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IHRhcmdldFVybCA9IGF3YWl0IHNUYXJnZXRVUkxQcm9taXNlO1xuXHRcdGNvbnN0IG5hdmlnYXRlRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGFyZ2V0VXJsISwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fTtcblx0XHRpZiAoZGVsYXllZFVzYWdlID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbjsgLy8gd3JvbmcgYnV0IHNvbWVob3cgdGhlIHR5cGVzIGFyZSBhbm5veWluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0dXJuIGEgbWFwIG9mIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGJpbmRpbmcgc3ludGF4IGlzIHJlc29sdmVkIHRvIHRoZSBjdXJyZW50IG1vZGVsLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyBtYXAgaW4gdGhlIGZvcm1hdCBbazogc3RyaW5nXSA6IENvbXBsZXhCaW5kaW5nU3ludGF4XG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdGFzeW5jIHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzVGFyZ2V0Um91dGU6IHN0cmluZyB8IG51bGwsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRsZXQgb1BhcmFtZXRlcnNQcm9taXNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBhQ29udGV4dFBhdGhQYXJ0cyA9IHNDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzKS5tYXAoYXN5bmMgKHNQYXJhbWV0ZXJLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24gPSBtUGFyYW1ldGVyc1tzUGFyYW1ldGVyS2V5XTtcblx0XHRcdFx0Ly8gV2UgYXNzdW1lIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdFx0Y29uc3Qgb1BhcnNlZEV4cHJlc3Npb24gPSBCaW5kaW5nUGFyc2VyLmNvbXBsZXhQYXJzZXIoc1BhcmFtZXRlck1hcHBpbmdFeHByZXNzaW9uKTtcblx0XHRcdFx0Y29uc3QgYVBhcnRzID0gb1BhcnNlZEV4cHJlc3Npb24ucGFydHMgfHwgW29QYXJzZWRFeHByZXNzaW9uXTtcblx0XHRcdFx0Y29uc3QgYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMgPSBhUGFydHMubWFwKGFzeW5jIGZ1bmN0aW9uIChvUGF0aFBhcnQ6IFByb3BlcnR5QmluZGluZ0luZm8pIHtcblx0XHRcdFx0XHRjb25zdCBhUmVsYXRpdmVQYXJ0cyA9IG9QYXRoUGFydC5wYXRoLnNwbGl0KFwiLi4vXCIpO1xuXHRcdFx0XHRcdC8vIFdlIGdvIHVwIHRoZSBjdXJyZW50IGNvbnRleHQgcGF0aCBhcyBtYW55IHRpbWVzIGFzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdGNvbnN0IGFMb2NhbFBhcnRzID0gYUNvbnRleHRQYXRoUGFydHMuc2xpY2UoMCwgYUNvbnRleHRQYXRoUGFydHMubGVuZ3RoIC0gYVJlbGF0aXZlUGFydHMubGVuZ3RoICsgMSk7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0UGF0aCA9IGFMb2NhbFBhcnRzLmpvaW4oXCIvXCIpO1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQ29udGV4dCA9XG5cdFx0XHRcdFx0XHRsb2NhbENvbnRleHRQYXRoID09PSBvQ29udGV4dC5nZXRQYXRoKClcblx0XHRcdFx0XHRcdFx0PyBvQ29udGV4dFxuXHRcdFx0XHRcdFx0XHQ6IG9Db250ZXh0LmdldE1vZGVsKCkuYmluZENvbnRleHQobG9jYWxDb250ZXh0UGF0aCkuZ2V0Qm91bmRDb250ZXh0KCk7XG5cblx0XHRcdFx0XHRjb25zdCBvTWV0YUNvbnRleHQgPSBvTWV0YU1vZGVsLmdldE1ldGFDb250ZXh0KGxvY2FsQ29udGV4dFBhdGggKyBcIi9cIiArIGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKTtcblx0XHRcdFx0XHRyZXR1cm4gbG9jYWxDb250ZXh0LnJlcXVlc3RQcm9wZXJ0eShhUmVsYXRpdmVQYXJ0c1thUmVsYXRpdmVQYXJ0cy5sZW5ndGggLSAxXSkudGhlbihmdW5jdGlvbiAob1ZhbHVlKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBvUHJvcGVydHlJbmZvID0gb01ldGFDb250ZXh0LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0Y29uc3Qgc0VkbVR5cGUgPSBvUHJvcGVydHlJbmZvLiRUeXBlO1xuXHRcdFx0XHRcdFx0cmV0dXJuIE9EYXRhVXRpbHMuZm9ybWF0TGl0ZXJhbChvVmFsdWUsIHNFZG1UeXBlKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UuYWxsKGFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKChhUmVzb2x2ZWRQYXJhbWV0ZXJzOiBQcm9wZXJ0eUJpbmRpbmdJbmZvKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgdmFsdWUgPSBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXJcblx0XHRcdFx0XHRcdD8gb1BhcnNlZEV4cHJlc3Npb24uZm9ybWF0dGVyLmFwcGx5KHRoaXMsIGFSZXNvbHZlZFBhcmFtZXRlcnMpXG5cdFx0XHRcdFx0XHQ6IGFSZXNvbHZlZFBhcmFtZXRlcnMuam9pbihcIlwiKTtcblx0XHRcdFx0XHRyZXR1cm4geyBrZXk6IHNQYXJhbWV0ZXJLZXksIHZhbHVlOiB2YWx1ZSB9O1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLmFsbChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcykudGhlbihmdW5jdGlvbiAoYUFsbFJlc29sdmVkUGFyYW1ldGVyczogUmVzb2x2ZWRQYXJhbWV0ZXJzW10pIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtZXRlcnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRcdGFBbGxSZXNvbHZlZFBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAob1Jlc29sdmVkUGFyYW1ldGVyOiBSZXNvbHZlZFBhcmFtZXRlcnMpIHtcblx0XHRcdFx0XHRvUGFyYW1ldGVyc1tvUmVzb2x2ZWRQYXJhbWV0ZXIua2V5XSA9IG9SZXNvbHZlZFBhcmFtZXRlci52YWx1ZTtcblx0XHRcdFx0fSk7XG5cdFx0XHRcdHJldHVybiBvUGFyYW1ldGVycztcblx0XHRcdH0pO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKGBDb3VsZCBub3QgcGFyc2UgdGhlIHBhcmFtZXRlcnMgZm9yIHRoZSBuYXZpZ2F0aW9uIHRvIHJvdXRlICR7c1RhcmdldFJvdXRlfWApO1xuXHRcdFx0b1BhcmFtZXRlcnNQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcblx0XHR9XG5cdFx0cmV0dXJuIG9QYXJhbWV0ZXJzUHJvbWlzZTtcblx0fVxuXG5cdF9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVyczogUm91dGUkTWF0Y2hlZEV2ZW50UGFyYW1ldGVycyk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgbVBhcmFtZXRlcnMpO1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5maXJlRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cblx0XHRFZGl0U3RhdGUuY2xlYW5Qcm9jZXNzZWRFZGl0U3RhdGUoKTsgLy8gUmVzZXQgVUkgc3RhdGUgd2hlbiBhbGwgYmluZGluZ3MgaGF2ZSBiZWVuIHJlZnJlc2hlZFxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBDb250ZXh0IHRvIGJlIG5hdmlnYXRlZCB0bywgb3IgdGhlIGxpc3QgYmluZGluZyBmb3IgY3JlYXRpb24gKGRlZmVycmVkIGNyZWF0aW9uKVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnNdIE9wdGlvbmFsLCBtYXAgY29udGFpbmluZyB0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXM6XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5jaGVja05vSGFzaENoYW5nZV0gTmF2aWdhdGUgdG8gdGhlIGNvbnRleHQgd2l0aG91dCBjaGFuZ2luZyB0aGUgVVJMXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5hc3luY0NvbnRleHRdIFRoZSBjb250ZXh0IGlzIGNyZWF0ZWQgYXN5bmMsIG5hdmlnYXRlIHRvICguLi4pIGFuZFxuXHQgKiAgICAgICAgICAgICAgICAgICAgd2FpdCBmb3IgUHJvbWlzZSB0byBiZSByZXNvbHZlZCBhbmQgdGhlbiBuYXZpZ2F0ZSBpbnRvIHRoZSBjb250ZXh0XG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRGVmZXJyZWRDb250ZXh0XSBUaGUgY29udGV4dCBzaGFsbCBiZSBjcmVhdGVkIGRlZmVycmVkIGF0IHRoZSB0YXJnZXQgcGFnZVxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuZWRpdGFibGVdIFRoZSB0YXJnZXQgcGFnZSBzaGFsbCBiZSBpbW1lZGlhdGVseSBpbiB0aGUgZWRpdCBtb2RlIHRvIGF2b2lkIGZsaWNrZXJpbmdcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJQZXJzaXN0T1BTY3JvbGxdIFRoZSBiUGVyc2lzdE9QU2Nyb2xsIHdpbGwgYmUgdXNlZCBmb3Igc2Nyb2xsaW5nIHRvIGZpcnN0IHRhYlxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWxdIGArMWAgaWYgd2UgYWRkIGEgY29sdW1uIGluIEZDTCwgYC0xYCB0byByZW1vdmUgYSBjb2x1bW4sIDAgdG8gc3RheSBvbiB0aGUgc2FtZSBjb2x1bW5cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLm5vUHJlc2VydmF0aW9uQ2FjaGVdIERvIG5hdmlnYXRpb24gd2l0aG91dCB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBwcmVzZXJ2ZWQgY2FjaGUgbWVjaGFuaXNtXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iUmVjcmVhdGVDb250ZXh0XSBGb3JjZSByZS1jcmVhdGlvbiBvZiB0aGUgY29udGV4dCBpbnN0ZWFkIG9mIHVzaW5nIHRoZSBvbmUgcGFzc2VkIGFzIHBhcmFtZXRlclxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYkZvcmNlRm9jdXNdIEZvcmNlcyBmb2N1cyBzZWxlY3Rpb24gYWZ0ZXIgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhXSBWaWV3IGRhdGFcblx0ICogQHBhcmFtIFt2aWV3RGF0YS5uYXZpZ2F0aW9uXVxuXHQgKiBAcGFyYW0gW2N1cnJlbnRUYXJnZXRJbmZvXSBUaGUgdGFyZ2V0IGluZm9ybWF0aW9uIGZyb20gd2hpY2ggdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm8ubmFtZV1cblx0ICogQHJldHVybnMgUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Db250ZXh0KFxuXHRcdGNvbnRleHQ6IENvbnRleHQgfCBPRGF0YUxpc3RCaW5kaW5nLFxuXHRcdHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHt9LFxuXHRcdHZpZXdEYXRhPzogeyBuYXZpZ2F0aW9uPzogb2JqZWN0IH0sXG5cdFx0Y3VycmVudFRhcmdldEluZm8/OiB7IG5hbWU6IHN0cmluZyB9XG5cdCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cblx0XHRsZXQgdGFyZ2V0Um91dGUgPSBcIlwiO1xuXHRcdGxldCByb3V0ZVBhcmFtZXRlcnNQcm9taXNlOiBQcm9taXNlPG9iamVjdD4gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKHRoaXMub01ldGFNb2RlbCk7XG5cblx0XHQvLyBNYW5hZ2UgcGFyYW1ldGVyIG1hcHBpbmdcblx0XHRpZiAocGFyYW1ldGVycz8udGFyZ2V0UGF0aCAmJiB2aWV3RGF0YT8ubmF2aWdhdGlvbikge1xuXHRcdFx0Y29uc3QgbmF2aWdhdGlvbkluZm8gPSB2aWV3RGF0YS5uYXZpZ2F0aW9uIGFzIFJlY29yZDxzdHJpbmcsIHsgZGV0YWlsOiB7IHJvdXRlOiBzdHJpbmc7IHBhcmFtZXRlcnM6IG9iamVjdCB9IH0+O1xuXHRcdFx0Y29uc3Qgb1JvdXRlRGV0YWlsID0gbmF2aWdhdGlvbkluZm9bcGFyYW1ldGVycy50YXJnZXRQYXRoXS5kZXRhaWw7XG5cdFx0XHR0YXJnZXRSb3V0ZSA9IG9Sb3V0ZURldGFpbC5yb3V0ZTtcblxuXHRcdFx0aWYgKG9Sb3V0ZURldGFpbC5wYXJhbWV0ZXJzICYmIGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0cm91dGVQYXJhbWV0ZXJzUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMoXG5cdFx0XHRcdFx0b1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLFxuXHRcdFx0XHRcdHRhcmdldFJvdXRlLFxuXHRcdFx0XHRcdGNvbnRleHRcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRsZXQgc1RhcmdldFBhdGggPSB0aGlzLl9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0Ly8gSWYgdGhlIHBhdGggaXMgZW1wdHksIHdlJ3JlIHN1cHBvc2VkIHRvIG5hdmlnYXRlIHRvIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBhcHBcblx0XHQvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGV4aXQgZnJvbSB0aGUgYXBwIGluc3RlYWRcblx0XHRpZiAoc1RhcmdldFBhdGgubGVuZ3RoID09PSAwICYmIHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkuZXhpdEZyb21BcHAoKTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlIG5hdmlnYXRpb24gZ29lcyB3aXRoIGEgY3JlYXRpb24sIHdlIGFkZCAoLi4uKSB0byB0aGUgcGF0aCAoZXhwZWN0aW5nIGNvbnRleHQgaXMgYW4gT0RhdGFMaXN0QmluZGluZylcblx0XHRpZiAocGFyYW1ldGVycz8uY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMpIHtcblx0XHRcdHNUYXJnZXRQYXRoICs9IFwiKC4uLilcIjtcblx0XHR9XG5cblx0XHQvLyBBZGQgbGF5b3V0IHBhcmFtZXRlciBpZiBuZWVkZWRcblx0XHRjb25zdCBzTGF5b3V0ID0gdGhpcy5fY2FsY3VsYXRlTGF5b3V0KHNUYXJnZXRQYXRoLCBwYXJhbWV0ZXJzKTtcblx0XHRpZiAoc0xheW91dCkge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gYD9sYXlvdXQ9JHtzTGF5b3V0fWA7XG5cdFx0fVxuXG5cdFx0Ly8gTmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2FnZVxuXHRcdGNvbnN0IG9OYXZpZ2F0aW9uSW5mbzogUm91dGluZ05hdmlnYXRpb25JbmZvID0ge1xuXHRcdFx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM6IHBhcmFtZXRlcnMuY3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMsXG5cdFx0XHRiVGFyZ2V0RWRpdGFibGU6IHBhcmFtZXRlcnM/LmVkaXRhYmxlLFxuXHRcdFx0YlBlcnNpc3RPUFNjcm9sbDogcGFyYW1ldGVycz8ucGVyc2lzdE9QU2Nyb2xsLFxuXHRcdFx0YlNob3dQbGFjZWhvbGRlcjogcGFyYW1ldGVycz8uc2hvd1BsYWNlaG9sZGVyICE9PSB1bmRlZmluZWQgPyBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgOiB0cnVlLFxuXHRcdFx0cmVhc29uOiBwYXJhbWV0ZXJzPy5yZWFzb24sXG5cdFx0XHRyZWRpcmVjdGVkVG9Ob25EcmFmdDogcGFyYW1ldGVycy5yZWRpcmVjdGVkVG9Ob25EcmFmdFxuXHRcdH07XG5cblx0XHRpZiAocGFyYW1ldGVycz8udXBkYXRlRkNMTGV2ZWwgIT09IC0xICYmIHBhcmFtZXRlcnM/LnJlY3JlYXRlQ29udGV4dCAhPT0gdHJ1ZSkge1xuXHRcdFx0aWYgKGNvbnRleHQuaXNBPENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0b05hdmlnYXRpb25JbmZvLnVzZUNvbnRleHQgPSBjb250ZXh0O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jaGVja05vSGFzaENoYW5nZSkge1xuXHRcdFx0Ly8gQ2hlY2sgaWYgdGhlIG5ldyBoYXNoIGlzIGRpZmZlcmVudCBmcm9tIHRoZSBjdXJyZW50IG9uZVxuXHRcdFx0Y29uc3Qgc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSA9IHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKS5yZXBsYWNlKC9bJj9dezF9c2FwLWlhcHAtc3RhdGU9W0EtWjAtOV0rLywgXCJcIik7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGggPT09IHNDdXJyZW50SGFzaE5vQXBwU3RhdGUpIHtcblx0XHRcdFx0Ly8gVGhlIGhhc2ggZG9lc24ndCBjaGFuZ2UsIGJ1dCB3ZSBmaXJlIHRoZSByb3V0ZU1hdGNoIGV2ZW50IHRvIHRyaWdnZXIgcGFnZSByZWZyZXNoIC8gYmluZGluZ1xuXHRcdFx0XHRjb25zdCByb3V0ZUluZm9CeUhhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHRoaXMub1JvdXRlclByb3h5LmdldEhhc2goKSk7XG5cdFx0XHRcdGxldCBtRXZlbnRQYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0geyBjb25maWc6IHt9IH07XG5cdFx0XHRcdGlmIChyb3V0ZUluZm9CeUhhc2gpIHtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzID0geyAuLi5yb3V0ZUluZm9CeUhhc2gsIGNvbmZpZzoge30gfTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gb05hdmlnYXRpb25JbmZvO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMucm91dGVJbmZvcm1hdGlvbiA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24odGhpcy5zQ3VycmVudFJvdXRlTmFtZSk7XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMudmlld3MgPSB0aGlzLmFDdXJyZW50Vmlld3M7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5zZXRGb2N1c0ZvcmNlZCghIXBhcmFtZXRlcnMuZm9yY2VGb2N1cyk7XG5cblx0XHRcdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobUV2ZW50UGFyYW1ldGVycyk7XG5cblx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAocGFyYW1ldGVycz8udHJhbnNpZW50ICYmICEhcGFyYW1ldGVycy5lZGl0YWJsZSAmJiAhc1RhcmdldFBhdGguaW5jbHVkZXMoXCIoLi4uKVwiKSkge1xuXHRcdFx0aWYgKHNUYXJnZXRQYXRoLmluY2x1ZGVzKFwiP1wiKSkge1xuXHRcdFx0XHRzVGFyZ2V0UGF0aCArPSBcIiZpLWFjdGlvbj1jcmVhdGVcIjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiP2ktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIpIHtcblx0XHRcdC8vIE5hdmlnYXRlIHRvIG5ldyB0YWIvIHdpbmRvd1xuXHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL3VzaGVsbC9Db250YWluZXJcIl0sIGFzeW5jIChDb250YWluZXI6IENvbnRhaW5lcikgPT4ge1xuXHRcdFx0XHRjb25zdCBzaGVsbFNlcnZpY2VIZWxwZXIgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U2hlbGxTZXJ2aWNlcygpO1xuXHRcdFx0XHRjb25zdCBwYXJzZWRVcmwgPSBzaGVsbFNlcnZpY2VIZWxwZXIucGFyc2VTaGVsbEhhc2goZG9jdW1lbnQubG9jYXRpb24uaGFzaCk7XG5cdFx0XHRcdGNvbnN0IG5hdmlnYXRpb25TZXJ2aWNlID0gKGF3YWl0IENvbnRhaW5lci5nZXRTZXJ2aWNlQXN5bmMoXCJOYXZpZ2F0aW9uXCIpKSBhcyBOYXZpZ2F0aW9uO1xuXHRcdFx0XHRjb25zdCBocmVmID0gYXdhaXQgbmF2aWdhdGlvblNlcnZpY2UuZ2V0SHJlZih7XG5cdFx0XHRcdFx0dGFyZ2V0OiB7XG5cdFx0XHRcdFx0XHRzZW1hbnRpY09iamVjdDogcGFyc2VkVXJsLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0YWN0aW9uOiBwYXJzZWRVcmwuYWN0aW9uXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lID0gYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldEluZnJhbWVVcmwoKTtcblx0XHRcdFx0bGV0IHVybCwgdGFyZ2V0VXJsOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUpIHtcblx0XHRcdFx0XHR1cmwgPSBuZXcgVVJMKGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSk7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lLnJlcGxhY2UodXJsLmhhc2gsIGAke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYCR7dXJsLm9yaWdpbn0ke3VybC5wYXRobmFtZX0ke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVuV2luZG93KHRhcmdldFVybCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHN0YWxlIGVycm9yIG1lc3NhZ2VzIGZyb20gTFIgYXJlIG5vdCBzaG93biB0byB0aGUgdXNlciBhZnRlciBuYXZpZ2F0aW9uIHRvIE9QLlxuXHRcdFx0aWYgKGN1cnJlbnRUYXJnZXRJbmZvPy5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb3V0ZUluZm8gPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNUYXJnZXRQYXRoKTtcblx0XHRcdFx0aWYgKG9Sb3V0ZUluZm8pIHtcblx0XHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0ZSAmJiBvUm91dGUudGFyZ2V0cyAmJiBvUm91dGUudGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTGFzdFRhcmdldE5hbWUgPSBvUm91dGUudGFyZ2V0c1tvUm91dGUudGFyZ2V0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgb1RhcmdldC5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBxdWV1ZVxuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnB1c2gob05hdmlnYXRpb25JbmZvKTtcblxuXHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UudGhlbigob1JvdXRlUGFyYW1ldGVyczogb2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvUm91dGVQYXJhbWV0ZXJzLCB7IGJJc1N0aWNreU1vZGU6IGlzU3RpY2t5TW9kZSB9KTtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8odGFyZ2V0Um91dGUsIG9Sb3V0ZVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQubmF2VG9IYXNoKFxuXHRcdFx0XHRcdHNUYXJnZXRQYXRoLFxuXHRcdFx0XHRcdCEhcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnksXG5cdFx0XHRcdFx0cGFyYW1ldGVycz8ubm9QcmVzZXJ2YXRpb25DYWNoZSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5mb3JjZUZvY3VzLFxuXHRcdFx0XHRcdCFpc1N0aWNreU1vZGVcblx0XHRcdFx0KVxuXHRcdFx0XHQudGhlbigoYk5hdmlnYXRlZCkgPT4ge1xuXHRcdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5wb3AoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlXG5cdCAqIEByZXR1cm5zIFByb21pc2UgdGhhdCBpcyByZXNvbHZlZCB3aGVuIHRoZSBuYXZpZ2F0aW9uIGlzIGZpbmFsaXplZFxuXHQgKiBAZmluYWxcblx0ICovXG5cdGFzeW5jIG5hdmlnYXRlVG9Sb3V0ZShzVGFyZ2V0Um91dGVOYW1lOiBzdHJpbmcsIG9Sb3V0ZVBhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuIH0pOiBQcm9taXNlPGJvb2xlYW4+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHNUYXJnZXRVUkwgPSB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNUYXJnZXRSb3V0ZU5hbWUsIG9Sb3V0ZVBhcmFtZXRlcnMpO1xuXHRcdHJldHVybiB0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2goc1RhcmdldFVSTCEsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsICFvUm91dGVQYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgaW1wYWN0ZWQgb3Igbm90XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIEZpcnN0LCBjaGVjayB3aXRoIHRoZSB0ZWNobmljYWwgcGF0aC4gV2UgaGF2ZSB0byB0cnkgaXQsIGJlY2F1c2UgZm9yIGxldmVsID4gMSwgd2Vcblx0XHQvLyB1c2VzIHRlY2huaWNhbCBrZXlzIGV2ZW4gaWYgU2VtYW50aWMga2V5cyBhcmUgZW5hYmxlZFxuXHRcdGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKC9eW14oKV0rXFwoW14oKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzU2VtYW50aWNQYXRoICE9IHNQYXRoID8gdGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNTZW1hbnRpY1BhdGgpIDogZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHRfZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0c1BhdGggPSBzUGF0aC5yZXBsYWNlKHJlZ2V4LCBcIlwiKTtcblx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXRoKSB8fCBzUGF0aCA9PT0gXCJcIikge1xuXHRcdFx0cmV0dXJuIHNQYXRoO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5fZmluZFBhdGhUb05hdmlnYXRlKHNQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gbmF2aWdhdGUgdG9cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHN1ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGEgbGV2ZWwtMSBvYmplY3QgKHBhdGggPSAvYWFhKGJiYikpXG5cdFx0aWYgKCEvXlxcL1teKF0rXFwoW14pXStcXCkkLy50ZXN0KGNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBpcyBhIGRyYWZ0IHJvb3Rcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpKVxuXHRcdFx0LnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIU1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IHNlbWFudGljIHBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgb2JqZWN0c1xuXHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBlbnRpdHlTZXQubmFtZTtcblx0XHRyZXR1cm4gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgZW50aXR5U2V0TmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblxuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdFx0c1BhdGggPSB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHdlJ3JlIG5hdmlnYXRpbmcgYmFjayB0byBhIHNlbWFudGljIHBhdGggdGhhdCB3YXMgcHJldmlvdXNseSByZXNvbHZlZFxuXHRcdFx0XHRpZiAodGhpcy5vTGFzdFNlbWFudGljTWFwcGluZz8udGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0XHRzUGF0aCA9IHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcuc2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2UgaWYgKHRoaXMuX2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dCkpIHtcblx0XHRcdFx0Ly8gV2UgY2hlY2sgaWYgd2UgaGF2ZSB0byB1c2UgYSBzZW1hbnRpYyBwYXRoXG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgoY29udGV4dCwgdHJ1ZSk7XG5cblx0XHRcdFx0aWYgKCFzU2VtYW50aWNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gV2Ugd2VyZSBub3QgYWJsZSB0byBidWlsZCB0aGUgc2VtYW50aWMgcGF0aCAtLT4gVXNlIHRoZSB0ZWNobmljYWwgcGF0aCBhbmRcblx0XHRcdFx0XHQvLyBjbGVhciB0aGUgcHJldmlvdXMgbWFwcGluZywgb3RoZXJ3aXNlIHRoZSBvbGQgbWFwcGluZyBpcyB1c2VkIGluIEVkaXRGbG93I3VwZGF0ZURvY3VtZW50XG5cdFx0XHRcdFx0Ly8gYW5kIGl0IGxlYWRzIHRvIHVud2FudGVkIHBhZ2UgcmVsb2Fkc1xuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh1bmRlZmluZWQpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHNTZW1hbnRpY1BhdGggIT09IHNQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHRcdHNQYXRoID0gc1NlbWFudGljUGF0aDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIHJlbW92ZSBleHRyYSAnLycgYXQgdGhlIGJlZ2lubmluZyBvZiBwYXRoXG5cdFx0aWYgKHNQYXRoWzBdID09PSBcIi9cIikge1xuXHRcdFx0c1BhdGggPSBzUGF0aC5zdWJzdHJpbmcoMSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHNQYXRoO1xuXHR9XG5cblx0X2NhbGN1bGF0ZUxheW91dChoYXNoOiBzdHJpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0Ly8gT3BlbiBpbiBmdWxsIHNjcmVlbiBtb2RlIHdoZW4gb3BlbmluZyBpbiBuZXcgdGFiLyB3aW5kb3dcblx0XHRpZiAocGFyYW1ldGVycy5uYXZNb2RlID09PSBcIm9wZW5Jbk5ld1RhYlwiICYmIHBhcmFtZXRlcnMuRkNMTGV2ZWwgIT09IC0xKSB7XG5cdFx0XHRyZXR1cm4gcGFyYW1ldGVycy5GQ0xMZXZlbCA9PT0gMCA/IFwiTWlkQ29sdW1uRnVsbFNjcmVlblwiIDogXCJFbmRDb2x1bW5GdWxsU2NyZWVuXCI7XG5cdFx0fVxuXHRcdGxldCBGQ0xMZXZlbCA9IHBhcmFtZXRlcnMuRkNMTGV2ZWwgPz8gMDtcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCkge1xuXHRcdFx0RkNMTGV2ZWwgKz0gcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbDtcblx0XHRcdGlmIChGQ0xMZXZlbCA8IDApIHtcblx0XHRcdFx0RkNMTGV2ZWwgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrLCB0cnkgdG8gZmluZCB0aGUgbGF5b3V0IGluIHRoZSBuYXZpZ2F0aW9uIGhpc3RvcnkgaWYgaXQncyBub3QgcHJvdmlkZWQgYXMgcGFyYW1ldGVyXG5cdFx0Ly8gKGxheW91dCBjYWxjdWxhdGlvbiBpcyBub3QgaGFuZGxlZCBwcm9wZXJseSBieSB0aGUgRmxleGlibGVDb2x1bW5MYXlvdXRTZW1hbnRpY0hlbHBlciBpbiB0aGlzIGNhc2UpXG5cdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsIDwgMCAmJiAhcGFyYW1ldGVycy5sYXlvdXQpIHtcblx0XHRcdHBhcmFtZXRlcnMubGF5b3V0ID0gdGhpcy5vUm91dGVyUHJveHkuZmluZExheW91dEZvckhhc2goaGFzaCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Vmlld0NvbnRyb2xsZXIoKS5jYWxjdWxhdGVMYXlvdXQoRkNMTGV2ZWwsIGhhc2gsIHBhcmFtZXRlcnMubGF5b3V0LCBwYXJhbWV0ZXJzLmtlZXBDdXJyZW50TGF5b3V0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIGJlZm9yZSBhIHJvdXRlIGlzIG1hdGNoZWQuXG5cdCAqIERpc3BsYXlzIGEgYnVzeSBpbmRpY2F0b3IuXG5cdCAqXG5cdCAqL1xuXHRfYmVmb3JlUm91dGVNYXRjaGVkKC8qb0V2ZW50OiBFdmVudCovKTogdm9pZCB7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKCFiUGxhY2Vob2xkZXJFbmFibGVkKSB7XG5cdFx0XHRjb25zdCBvUm9vdFZpZXcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um9vdENvbnRyb2woKTtcblx0XHRcdEJ1c3lMb2NrZXIubG9jayhvUm9vdFZpZXcpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBjdXJyZW50IG5hdmlnYXRpb24gaGFzIGJlZW4gdHJpZ2dlcmVkIGJ5IHRoZSBSb3V0ZXJQcm94eS5cblx0ICovXG5cdF9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5KCk6IGJvb2xlYW4ge1xuXHRcdC8vIFRoZSBSb3V0ZXJQcm94eSBzZXRzIGEgJ2ZlTGV2ZWwnIHByb3BlcnR5IG9uIHRoZSBoaXN0b3J5LnN0YXRlIG9iamVjdFxuXHRcdHJldHVybiBoaXN0b3J5LnN0YXRlPy5mZUxldmVsICE9PSB1bmRlZmluZWQ7XG5cdH1cblxuXHQvKipcblx0ICogRXZlbnQgaGFuZGxlciB3aGVuIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogSGlkZXMgdGhlIGJ1c3kgaW5kaWNhdG9yIGFuZCBmaXJlcyBpdHMgb3duICdyb3V0ZW1hdGNoZWQnIGV2ZW50LlxuXHQgKiBAcGFyYW0gb0V2ZW50IFRoZSBldmVudFxuXHQgKi9cblx0X29uUm91dGVNYXRjaGVkKG9FdmVudDogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KTogdm9pZCB7XG5cdFx0Y29uc3Qgb0FwcFN0YXRlSGFuZGxlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRBcHBTdGF0ZUhhbmRsZXIoKSxcblx0XHRcdG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmIChCdXN5TG9ja2VyLmlzTG9ja2VkKG9Sb290VmlldykgJiYgIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdEJ1c3lMb2NrZXIudW5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHRcdGNvbnN0IG1QYXJhbWV0ZXJzOiBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzID0gb0V2ZW50LmdldFBhcmFtZXRlcnMoKSBhcyBSb3V0aW5nRXZlbnRQYXJhbWV0ZXJzO1xuXHRcdGlmICh0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUubGVuZ3RoKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZVswXTtcblx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5zbGljZSgxKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSB7fTtcblx0XHR9XG5cdFx0aWYgKG9BcHBTdGF0ZUhhbmRsZXIuY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLkFwcFN0YXRlQ2hhbmdlZDtcblx0XHRcdG9BcHBTdGF0ZUhhbmRsZXIucmVzZXRSb3V0ZUNoYW5nZWRCeUlBcHAoKTtcblx0XHR9IGVsc2UgaWYgKHRoaXMub1JvdXRlclByb3h5LmNoZWNrUmVzdG9yZUhpc3RvcnlXYXNUcmlnZ2VyZWQoKSkge1xuXHRcdFx0bVBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8ucmVhc29uID0gTmF2aWdhdGlvblJlYXNvbi5SZXN0b3JlSGlzdG9yeTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc2V0UmVzdG9yZUhpc3RvcnlGbGFnKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlTmFtZSA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJuYW1lXCIpO1xuXHRcdHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm4gPSBtUGFyYW1ldGVycy5jb25maWcucGF0dGVybjtcblx0XHR0aGlzLmFDdXJyZW50Vmlld3MgPSBvRXZlbnQuZ2V0UGFyYW1ldGVyKFwidmlld3NcIik7XG5cblx0XHRtUGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRtUGFyYW1ldGVycy5yb3V0ZVBhdHRlcm4gPSB0aGlzLnNDdXJyZW50Um91dGVQYXR0ZXJuO1xuXG5cdFx0dGhpcy5fZmlyZVJvdXRlTWF0Y2hFdmVudHMobVBhcmFtZXRlcnMpO1xuXG5cdFx0Ly8gQ2hlY2sgaWYgY3VycmVudCBoYXNoIGhhcyBiZWVuIHNldCBieSB0aGUgcm91dGVyUHJveHkubmF2VG9IYXNoIGZ1bmN0aW9uXG5cdFx0Ly8gSWYgbm90LCByZWJ1aWxkIGhpc3RvcnkgcHJvcGVybHkgKGJvdGggaW4gdGhlIGJyb3dzZXIgYW5kIHRoZSBSb3V0ZXJQcm94eSlcblx0XHRpZiAoIXRoaXMuX2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKSkge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHlcblx0XHRcdFx0LnJlc3RvcmVIaXN0b3J5KClcblx0XHRcdFx0LnRoZW4oKCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnJlc29sdmVSb3V0ZU1hdGNoKCk7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9KVxuXHRcdFx0XHQuY2F0Y2goZnVuY3Rpb24gKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIHJlc3RvcmluZyBoaXN0b3J5XCIsIG9FcnJvciBhcyBzdHJpbmcpO1xuXHRcdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHR9XG5cdH1cblxuXHRhdHRhY2hSb3V0ZU1hdGNoZWQob0RhdGE6IG9iamVjdCwgZm5GdW5jdGlvbjogRnVuY3Rpb24sIG9MaXN0ZW5lcj86IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5hdHRhY2hFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaFJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRldGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhdHRhY2hBZnRlclJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwiYWZ0ZXJSb3V0ZU1hdGNoZWRcIiwgb0RhdGEsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZChmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyOiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0YXN5bmMgaW5pdGlhbGl6ZVJvdXRpbmcoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5lbmFibGVkID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLm9BcHBDb21wb25lbnQuZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMoKS5nZXRDYXBhYmlsaXRpZXMoKS5Db2xsYWJvcmF0aW9uKSB7XG5cdFx0XHRjb25zdCB7IGRlZmF1bHQ6IENvbGxhYm9yYXRpb25IZWxwZXIgfSA9IGF3YWl0IGltcG9ydChcInNhcC9zdWl0ZS91aS9jb21tb25zL2NvbGxhYm9yYXRpb24vQ29sbGFib3JhdGlvbkhlbHBlclwiKTtcblx0XHRcdGF3YWl0IENvbGxhYm9yYXRpb25IZWxwZXIucHJvY2Vzc0FuZEV4cGFuZEhhc2goKTtcblx0XHR9XG5cdFx0Ly8gQXR0YWNoIHJvdXRlciBoYW5kbGVyc1xuXG5cdFx0dGhpcy5fZm5PblJvdXRlTWF0Y2hlZCA9IHRoaXMuX29uUm91dGVNYXRjaGVkLmJpbmQodGhpcyk7XG5cdFx0dGhpcy5vUm91dGVyLmF0dGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdHRoaXMub1JvdXRlci5hdHRhY2hCZWZvcmVSb3V0ZU1hdGNoZWQodGhpcy5fYmVmb3JlUm91dGVNYXRjaGVkLmJpbmQodGhpcykpO1xuXHRcdH1cblx0XHQvLyBSZXNldCBpbnRlcm5hbCBzdGF0ZVxuXHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZSA9IFtdO1xuXHRcdEVkaXRTdGF0ZS5yZXNldEVkaXRTdGF0ZSgpO1xuXHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9ICF0aGlzLm9Sb3V0ZXIubWF0Y2goXCJcIik7XG5cblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJzYXAtaWFwcC1zdGF0ZVwiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5vQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gTWFuYWdlIHN0YXJ0dXAgcGFyYW1ldGVycyAoaW4gY2FzZSBvZiBubyBpYXBwLXN0YXRlKVxuXHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURVwiKSkge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0Ly8gVGhpcyBjaGVjayB3aWxsIGNhdGNoIG11bHRpcGxlIG1vZGVzIGxpa2UgY3JlYXRlLCBjcmVhdGVXaXRoIGFuZCBhdXRvQ3JlYXRlV2l0aCB3aGljaCBhbGwgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGJlIGhhbmRsZWQgbGlrZSBjcmVhdGUgc3RhcnR1cCFcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRGVlcCBsaW5rXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc05ld0hhc2gpO1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkFVVE9DUkVBVEVcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3QgYWx3YXlzQ2hlY2tUYXJnZXRFeGlzdGVuY2UgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5mZVwiKT8uYXBwPy5fY2hlY2tFeGlzdGVuY2VPbkRlZXBMaW5rID09PSB0cnVlO1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZXBMaW5rU3RhcnR1cEhhc2goXG5cdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC51aTVcIikucm91dGluZyxcblx0XHRcdG9TdGFydHVwUGFyYW1ldGVycyxcblx0XHRcdHRoaXMub01vZGVsLFxuXHRcdFx0YWx3YXlzQ2hlY2tUYXJnZXRFeGlzdGVuY2Vcblx0XHQpLnRoZW4oKG9EZWVwTGluaykgPT4ge1xuXHRcdFx0bGV0IHNIYXNoO1xuXHRcdFx0aWYgKG9EZWVwTGluay5jb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNUZWNobmljYWxQYXRoID0gb0RlZXBMaW5rLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNQYXRoID0gdGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dClcblx0XHRcdFx0XHQ/IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dCwgZmFsc2UpIVxuXHRcdFx0XHRcdDogc1RlY2huaWNhbFBhdGg7XG5cblx0XHRcdFx0aWYgKHNTZW1hbnRpY1BhdGggIT09IHNUZWNobmljYWxQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzVGVjaG5pY2FsUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c0hhc2ggPSBzU2VtYW50aWNQYXRoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSBsZWFkaW5nICcvJ1xuXHRcdFx0fSBlbHNlIGlmIChvRGVlcExpbmsuaGFzaCkge1xuXHRcdFx0XHRzSGFzaCA9IG9EZWVwTGluay5oYXNoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0hhc2gpIHtcblx0XHRcdFx0Ly9SZXBsYWNlIHRoZSBoYXNoIHdpdGggbmV3bHkgY3JlYXRlZCBoYXNoXG5cdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc0hhc2gpO1xuXHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVEZWVwbGluaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZWZlcnJlZCBtb2RlIGVkaXQgYnkgYXBwZW5kaW5nIFwiWyZ8P11pLWFjdGlvbj1lZGl0XCIgdG8gdGhlIGhhc2ggaWY6XG5cdCAqIC0gVGhlcmUgaXMgYSByZXN1bHRpbmcgaGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsb2dpYyxcblx0ICogLSBUaGUgcHJlZmVycmVkIG1vZGUgaXMgZWRpdCwgYW5kXG5cdCAqIC0gVGhlIGVudGl0eSBpcyBlZGl0YWJsZVxuXHQgKiBUaGlzIHdvcmtzIGZvciBib3RoIGRlZXAtbGluayBzdGFydHVwICgjQXBwP0lEPW15SWQmcHJlZmVycmVkTW9kZT1lZGl0KSBhbmQgb2JqZWN0IHBhZ2Ugcm91dGluZyAoI0FwcD9wcmVmZXJyZWRNb2RlPWVkaXQmL0VudGl0eShJRCkpLlxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVcblx0ICovXG5cdGFzeW5jIF9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQoc3RhcnR1cFBhcmFtZXRlcnM6IHsgcHJlZmVycmVkTW9kZT86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZXN1bHRpbmdIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IHNob3VsZEVkaXQgPSAhIXN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGU/LlswXT8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoXCJFRElUXCIpO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gYXdhaXQgQXBwU3RhcnR1cEhlbHBlci52ZXJpZnlFZGl0QW5ub3RhdGlvbnModGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdGlmIChyZXN1bHRpbmdIYXNoICYmIHNob3VsZEVkaXQgJiYgZWRpdGFibGUpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IChyZXN1bHRpbmdIYXNoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCIpICsgXCJpLWFjdGlvbj1lZGl0XCI7XG5cdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgKGhhc2g6IHN0cmluZykgPT4gdm9pZCkocmVzdWx0aW5nSGFzaCArIHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBuYW1lIG9mIHRoZSBEcmFmdCByb290IGVudGl0eSBzZXQgb3IgdGhlIHN0aWNreS1lbmFibGVkIGVudGl0eSBzZXQuXG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSByb290IEVudGl0eVNldFxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5zQ29udGV4dFBhdGg7XG5cdH1cblxuXHRnZXRJbnRlcmZhY2UoKTogdGhpcyB7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuY2xhc3MgUm91dGluZ1NlcnZpY2VGYWN0b3J5IGV4dGVuZHMgU2VydmljZUZhY3Rvcnk8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRhc3luYyBjcmVhdGVJbnN0YW5jZShvU2VydmljZUNvbnRleHQ6IFNlcnZpY2VDb250ZXh0PFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+KTogUHJvbWlzZTxSb3V0aW5nU2VydmljZT4ge1xuXHRcdGNvbnN0IG9Sb3V0aW5nU2VydmljZSA9IG5ldyBSb3V0aW5nU2VydmljZShvU2VydmljZUNvbnRleHQpO1xuXHRcdHJldHVybiBvUm91dGluZ1NlcnZpY2UuaW5pdFByb21pc2U7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm91dGluZ1NlcnZpY2VGYWN0b3J5O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBDTUEsc0JBQXNCLElBQUFDLElBQUEsR0FEM0JDLGNBQWMsQ0FBQyw2Q0FBNkMsQ0FBQyxFQUFBQyxLQUFBLEdBRTVEQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR1BELEtBQUssQ0FBQyxDQUFDLEVBQUFILElBQUEsQ0FBQUssTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBQUFDLGNBQUEsQ0FBQVQsc0JBQUEsRUFBQVEsY0FBQTtJQUFBLFNBQUFSLHVCQUFBO01BQUEsSUFBQVUsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01B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
959
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9FdmVudFByb3ZpZGVyIiwiX2luaGVyaXRzTG9vc2UiLCJfdGhpcyIsIl9sZW4iLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJhcmdzIiwiQXJyYXkiLCJfa2V5IiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfYXNzZXJ0VGhpc0luaXRpYWxpemVkIiwiX2Rlc2NyaXB0b3IyIiwiRXZlbnRQcm92aWRlciIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJwcm90b3R5cGUiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciIsIlJvdXRpbmdTZXJ2aWNlIiwiX1NlcnZpY2UiLCJfdGhpczIiLCJfbGVuMiIsIl9rZXkyIiwibmF2aWdhdGlvbkluZm9RdWV1ZSIsImVuYWJsZWQiLCJfZXhwb3J0cyIsIl9wcm90byIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJzY29wZVR5cGUiLCJfdGhpcyRvTW9kZWwiLCJfb0FwcENvbmZpZyRjcm9zc05hdmkiLCJvQXBwQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvUm91dGVyIiwiZ2V0Um91dGVyIiwib1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJldmVudFByb3ZpZGVyIiwib1JvdXRpbmdDb25maWciLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsIl9vUm91dGluZ0NvbmZpZyRjb25maSIsImlzRkNMIiwiY29uZmlnIiwicm91dGVyQ2xhc3MiLCJfbVRhcmdldHMiLCJ0YXJnZXRzIiwic1RhcmdldE5hbWUiLCJPYmplY3QiLCJrZXlzIiwiYXNzaWduIiwidGFyZ2V0TmFtZSIsImNvbnRleHRQYXR0ZXJuIiwidW5kZWZpbmVkIiwidmlld0xldmVsIiwiX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuIiwiX21Sb3V0ZXMiLCJyb3V0ZXMiLCJvUm91dGVNYW5pZmVzdEluZm8iLCJhUm91dGVUYXJnZXRzIiwiZ2V0Um91dGVUYXJnZXROYW1lcyIsInRhcmdldCIsInNSb3V0ZU5hbWUiLCJuYW1lIiwic1JvdXRlUGF0dGVybiIsInBhdHRlcm4iLCJpbmRleE9mIiwiTG9nIiwid2FybmluZyIsImlSb3V0ZUxldmVsIiwicm91dGVMZXZlbCIsIml0ZW0iLCJzUGFyZW50VGFyZ2V0TmFtZSIsInBhcmVudCIsInB1c2giLCJGQ0xMZXZlbCIsImNvbnRyb2xBZ2dyZWdhdGlvbiIsImZvckVhY2giLCJhTGV2ZWwwUm91dGVOYW1lcyIsImFMZXZlbDFSb3V0ZU5hbWVzIiwic0RlZmF1bHRSb3V0ZU5hbWUiLCJzTmFtZSIsImlMZXZlbCIsIl90aGlzJF9tVGFyZ2V0cyRzRGVmYSIsInNEZWZhdWx0VGFyZ2V0TmFtZSIsInNsaWNlIiwic0NvbnRleHRQYXRoIiwib1NldHRpbmdzIiwib3B0aW9ucyIsInNldHRpbmdzIiwiY29udGV4dFBhdGgiLCJlbnRpdHlTZXQiLCJtYXAiLCJzVGFyZ2V0S2V5Iiwic29ydCIsImEiLCJiIiwiZnVsbENvbnRleHRQYXRoIiwibmF2aWdhdGlvbiIsInNOYXZOYW1lIiwiX3NOYXZOYW1lJGRldGFpbCIsInRhcmdldFJvdXRlIiwiZGV0YWlsIiwicm91dGUiLCJfdGhpcyRfbVRhcmdldHMkc1RhcmciLCJfdGhpcyRfbVRhcmdldHMkc1RhcmcyIiwiX3RoaXMkX21UYXJnZXRzJHNUYXJnMyIsInN0YXJ0c1dpdGgiLCJzUGF0dGVybiIsInJlcGxhY2UiLCJyZWdleCIsIlJlZ0V4cCIsIm1hdGNoIiwiX2dldFJvdXRlSW5mb3JtYXRpb24iLCJfZ2V0VGFyZ2V0SW5mb3JtYXRpb24iLCJfZ2V0Q29tcG9uZW50SWQiLCJzT3duZXJJZCIsInNDb21wb25lbnRJZCIsInN1YnN0cmluZyIsImdldFRhcmdldEluZm9ybWF0aW9uRm9yIiwib0NvbXBvbmVudEluc3RhbmNlIiwic1RhcmdldENvbXBvbmVudElkIiwiX3NPd25lcklkIiwiZ2V0SWQiLCJzQ29ycmVjdFRhcmdldE5hbWUiLCJpZCIsInZpZXdJZCIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTGFzdFNlbWFudGljTWFwcGluZyIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJjb250ZXh0Iiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsInRhcmdldFVSTFByb21pc2UiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljUGF0aCIsInByZXBhcmVQYXJhbWV0ZXJzIiwidGhlbiIsInBhcmFtZXRlcnMiLCJnZXRVUkwiLCJuYXZpZ2F0ZVRvIiwibVBhcmFtZXRlck1hcHBpbmciLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwic1RhcmdldFVSTFByb21pc2UiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtUGFyYW1ldGVycyIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJzcGxpdCIsImFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwic1BhcmFtZXRlcktleSIsInNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiIsIm9QYXJzZWRFeHByZXNzaW9uIiwiQmluZGluZ1BhcnNlciIsImNvbXBsZXhQYXJzZXIiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYWxsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJ2aWV3RGF0YSIsImN1cnJlbnRUYXJnZXRJbmZvIiwicm91dGVQYXJhbWV0ZXJzUHJvbWlzZSIsImlzU3RpY2t5TW9kZSIsInRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uSW5mbyIsIm9Sb3V0ZURldGFpbCIsImlzQSIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwic0xheW91dCIsIl9jYWxjdWxhdGVMYXlvdXQiLCJvTmF2aWdhdGlvbkluZm8iLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJwZXJzaXN0T1BTY3JvbGwiLCJiU2hvd1BsYWNlaG9sZGVyIiwic2hvd1BsYWNlaG9sZGVyIiwicmVhc29uIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJ1cGRhdGVGQ0xMZXZlbCIsInJlY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwicm91dGVJbmZvQnlIYXNoIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsInJvdXRlSW5mb3JtYXRpb24iLCJzQ3VycmVudFJvdXRlTmFtZSIsInJvdXRlUGF0dGVybiIsInNDdXJyZW50Um91dGVQYXR0ZXJuIiwidmlld3MiLCJhQ3VycmVudFZpZXdzIiwic2V0Rm9jdXNGb3JjZWQiLCJmb3JjZUZvY3VzIiwidHJhbnNpZW50IiwiaW5jbHVkZXMiLCJuYXZNb2RlIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQ29udGFpbmVyIiwic2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlZFVybCIsInBhcnNlU2hlbGxIYXNoIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsImhhc2giLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldFNlcnZpY2VBc3luYyIsImhyZWYiLCJnZXRIcmVmIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUiLCJnZXRJbmZyYW1lVXJsIiwidXJsIiwiVVJMIiwiZW5jb2RlVVJJIiwid2luZG93Iiwib3JpZ2luIiwicGF0aG5hbWUiLCJvcGVuV2luZG93Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwicHJlc2VydmVIaXN0b3J5Iiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwic1RhcmdldFVSTCIsImlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeSIsInNQYXRoIiwidGVzdCIsInNTZW1hbnRpY1BhdGgiLCJ0ZWNobmljYWxQYXRoIiwic2VtYW50aWNQYXRoIiwiX2ZpbmRQYXRoVG9OYXZpZ2F0ZSIsIl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoIiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNEcmFmdFJvb3QiLCJnZXRQcm9wZXJ0eSIsImVudGl0eVNldE5hbWUiLCJnZXRTZW1hbnRpY0tleXMiLCJfY29udGV4dCRnZXRIZWFkZXJDb24iLCJnZXRIZWFkZXJDb250ZXh0IiwiX3RoaXMkb0xhc3RTZW1hbnRpY01hIiwibGF5b3V0IiwiZmluZExheW91dEZvckhhc2giLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjYWxjdWxhdGVMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIl9iZWZvcmVSb3V0ZU1hdGNoZWQiLCJiUGxhY2Vob2xkZXJFbmFibGVkIiwiUGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsIm9Sb290VmlldyIsImdldFJvb3RDb250cm9sIiwiQnVzeUxvY2tlciIsImxvY2siLCJfaXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSIsIl9oaXN0b3J5JHN0YXRlIiwiaGlzdG9yeSIsInN0YXRlIiwiZmVMZXZlbCIsIl9vblJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiTmF2aWdhdGlvblJlYXNvbiIsIkFwcFN0YXRlQ2hhbmdlZCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsIlJlc3RvcmVIaXN0b3J5IiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJnZXRQYXJhbWV0ZXIiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImluaXRpYWxpemVSb3V0aW5nIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwicHJvY2Vzc0FuZEV4cGFuZEhhc2giLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJiSXNJYXBwU3RhdGUiLCJnZXRIYXNoQ2hhbmdlciIsIm9TdGFydHVwUGFyYW1ldGVycyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwiYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzIiwic0hhc2giLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJfbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0IiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJBcHBTdGFydHVwSGVscGVyIiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsInNOZXdIYXNoIiwicmVwbGFjZUhhc2giLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJvRGVlcExpbmsiLCJzVGVjaG5pY2FsUGF0aCIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJzdGFydHVwUGFyYW1ldGVycyIsIl9zdGFydHVwUGFyYW1ldGVycyRwciIsIl9zdGFydHVwUGFyYW1ldGVycyRwcjIiLCJfc3RhcnR1cFBhcmFtZXRlcnMkcHIzIiwicmVzdWx0aW5nSGFzaCIsInNob3VsZEVkaXQiLCJ2ZXJpZnlFZGl0QW5ub3RhdGlvbnMiLCJwYXJhbWV0ZXIiLCJnZXRPdXRib3VuZHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMiIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0Iiwib1JvdXRpbmdTZXJ2aWNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuXG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCB0eXBlIFJvdXRlclByb3h5IGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL1JvdXRlclByb3h5XCI7XG5pbXBvcnQgQXBwU3RhcnR1cEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9BcHBTdGFydHVwSGVscGVyXCI7XG5pbXBvcnQgRWRpdFN0YXRlIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0VkaXRTdGF0ZVwiO1xuaW1wb3J0IHsgZ2V0Um91dGVUYXJnZXROYW1lcyB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01hbmlmZXN0SGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBTZW1hbnRpY0tleUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TZW1hbnRpY0tleUhlbHBlclwiO1xuaW1wb3J0IEJpbmRpbmdQYXJzZXIgZnJvbSBcInNhcC91aS9iYXNlL0JpbmRpbmdQYXJzZXJcIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IHR5cGUgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgUm91dGluZ0NvbmZpZ3VyYXRpb24sIFJvdXRpbmdUYXJnZXQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhVXRpbHMgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVV0aWxzXCI7XG5pbXBvcnQgb3BlbldpbmRvdyBmcm9tIFwic2FwL3VpL3V0aWwvb3BlbldpbmRvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuXG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJSb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgUm91dGluZ0V2ZW50UGFyYW1ldGVycyA9IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgJiB7XG5cdG5hdmlnYXRpb25JbmZvPzogeyByZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uIH07XG5cdHJvdXRlSW5mb3JtYXRpb24/OiB1bmtub3duO1xuXHRyb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cdGNvbmZpZzogeyBwYXR0ZXJuPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyA9XG5cdHwgeyBtb2RlOiBcIkFzeW5jXCI7IGNyZWF0ZUNvbnRleHRQcm9taXNlOiBQcm9taXNlPENvbnRleHQ+IH1cblx0fCB7IG1vZGU6IFwiRGVmZXJyZWRcIjsgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7IHBhcmVudENvbnRleHQ/OiBDb250ZXh0OyBkYXRhPzogb2JqZWN0IH07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyA9IHtcblx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/OiBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycztcblx0YlRhcmdldEVkaXRhYmxlPzogYm9vbGVhbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGJTaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHR1c2VDb250ZXh0PzogQ29udGV4dDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG5cdGJBY3Rpb25DcmVhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0dHJhbnNpZW50PzogYm9vbGVhbjtcblx0cGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0RkNMTGV2ZWw/OiBudW1iZXI7XG5cdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuO1xuXHRub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjtcblx0cmVjcmVhdGVDb250ZXh0PzogYm9vbGVhbjtcblx0Zm9yY2VGb2N1cz86IGJvb2xlYW47XG5cdHRhcmdldFBhdGg/OiBzdHJpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGNhbGxFeHRlbnNpb24/OiBib29sZWFuO1xuXHRsYXlvdXQ/OiBzdHJpbmc7XG5cdGtlZXBDdXJyZW50TGF5b3V0PzogYm9vbGVhbjtcblx0bmF2TW9kZT86IHN0cmluZztcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nUGFyYW1ldGVyTWFwID0ge1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG50eXBlIE1pbmltYWxQYWdlU2V0dGluZyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0ZnVsbENvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+O1xufTtcblxudHlwZSBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHRhcmdldHM6IHN0cmluZ1tdO1xuXHRyb3V0ZUxldmVsOiBudW1iZXI7XG59O1xuXG50eXBlIFJlc29sdmVkUGFyYW1ldGVycyA9IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH07XG5cbmV4cG9ydCBjbGFzcyBSb3V0aW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2U8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0b1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPjtcblxuXHRvdXRib3VuZHMhOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+O1xuXG5cdF9tVGFyZ2V0cyE6IFJlY29yZDxzdHJpbmcsIFJvdXRpbmdUYXJnZXQ+O1xuXG5cdF9tUm91dGVzITogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24+O1xuXG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXG5cdGJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3Q/OiBib29sZWFuO1xuXG5cdHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXG5cdGFDdXJyZW50Vmlld3M/OiAoVmlldyB8IENvbXBvbmVudENvbnRhaW5lcilbXTtcblxuXHRuYXZpZ2F0aW9uSW5mb1F1ZXVlOiBSb3V0aW5nTmF2aWdhdGlvbkluZm9bXSA9IFtdO1xuXG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRfZm5PblJvdXRlTWF0Y2hlZCE6IChldjogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KSA9PiB2b2lkO1xuXG5cdGVuYWJsZWQgPSBmYWxzZTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyBSb3V0aW5nU2VydmljZUV2ZW50aW5nKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnISk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHMgPz8ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGJlZm9yZUV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqIEBwYXJhbSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogUm91dGluZ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnRhcmdldHMpIHtcblx0XHRcdGZvciAoY29uc3Qgc1RhcmdldE5hbWUgb2YgT2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0dGVybiA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2Ygcm91dGVzXG5cdFx0dGhpcy5fbVJvdXRlcyA9IHt9O1xuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8ucm91dGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9Sb3V0ZU1hbmlmZXN0SW5mbyBvZiBvUm91dGluZ0NvbmZpZy5yb3V0ZXMpIHtcblx0XHRcdFx0Y29uc3QgYVJvdXRlVGFyZ2V0cyA9IGdldFJvdXRlVGFyZ2V0TmFtZXMob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCksXG5cdFx0XHRcdFx0c1JvdXRlTmFtZSA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5uYW1lLFxuXHRcdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblx0XHRcdFx0aWYgKCFzUm91dGVQYXR0ZXJuKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdFx0aWYgKHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIDwgOCB8fCBzUm91dGVQYXR0ZXJuLmluZGV4T2YoXCI6P3F1ZXJ5OlwiKSAhPT0gc1JvdXRlUGF0dGVybi5sZW5ndGggLSA4KSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoYFBhdHRlcm4gZm9yIHJvdXRlICR7c1JvdXRlTmFtZX0gZG9lc24ndCBlbmQgd2l0aCAnOj9xdWVyeTonIDogJHtzUm91dGVQYXR0ZXJufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlSb3V0ZUxldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1JvdXRlUGF0dGVybiwgMCk7XG5cdFx0XHRcdHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0XHRwYXR0ZXJuOiBzUm91dGVQYXR0ZXJuLFxuXHRcdFx0XHRcdHRhcmdldHM6IGFSb3V0ZVRhcmdldHMsXG5cdFx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIHBhcmVudCB0YXJnZXRzIGluIHRoZSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSByb3V0ZVxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJvdXRlVGFyZ2V0cykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbaXRlbV0ucGFyZW50O1xuXHRcdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5wdXNoKHNQYXJlbnRUYXJnZXROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIWlzRkNMKSB7XG5cdFx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHJvdXRlIHBhdHRlcm5cblx0XHRcdFx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWw7XG5cdFx0XHRcdFx0aWYgKHZpZXdMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHZpZXdMZXZlbCA8IGlSb3V0ZUxldmVsKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHRcdC8vIGxhcmdlc3Qgdmlld0xldmVsIGluIHRoYXQgY2FzZS5cblx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9IGlSb3V0ZUxldmVsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZDTCBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBlcXVhbCB0byAtMVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHRcdC8vIFdlJ3JlIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSAxIHRhcmdldCBmb3IgdGhlIHJvdXRlLCBhbmQgaXQncyBub3QgaW4gdGhlIGZpcnN0IGNvbHVtblxuXHRcdFx0XHRcdC8vIC0tPiB0aGlzIGlzIGEgZnVsbHNjcmVlbiBjb2x1bW4gYWZ0ZXIgYWxsIGNvbHVtbnMgaW4gdGhlIEZDTCBoYXZlIGJlZW4gdXNlZFxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlciBGQ0wgY2FzZXNcblx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGFnYXRlIHZpZXdMZXZlbCwgY29udGV4dFBhdHRlcm4sIEZDTExldmVsIGFuZCBjb250cm9sQWdncmVnYXRpb24gdG8gcGFyZW50IHRhcmdldHNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdHdoaWxlIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRcdHNUYXJnZXROYW1lID0gc1BhcmVudFRhcmdldE5hbWU7XG5cdFx0XHRcdHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3MgYXMgTWluaW1hbFBhZ2VTZXR0aW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9TZXR0aW5ncykge1xuXHRcdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCBgLyR7b1NldHRpbmdzLmVudGl0eVNldH1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCBvciBlbnRpdHlTZXQgbWlzc2luZyBpbiBkZWZhdWx0IHRhcmdldDogJHtzRGVmYXVsdFRhcmdldE5hbWV9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogbm8gZGVmYXVsdCByb3V0ZSBmb3VuZC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvcnJlY3QgcGF0aCB0byB0aGUgZGlmZmVyZW50IHBhZ2VzLCBpbmNsdWRpbmcgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKVxuXHRcdFx0Lm1hcCgoc1RhcmdldEtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0S2V5XTtcblx0XHRcdH0pXG5cdFx0XHQuc29ydCgoYTogUm91dGluZ1RhcmdldCwgYjogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBiLnZpZXdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGEudmlld0xldmVsIDwgYi52aWV3TGV2ZWwgPyAtMSA6IDE7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKHRhcmdldDogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHQvLyBBZnRlciBzb3J0aW5nIHRoZSB0YXJnZXRzIHBlciBsZXZlbCB3ZSBjYW4gdGhlbiBnbyB0aHJvdWdoIHRoZWlyIG5hdmlnYXRpb24gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBhdGhzIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRpZiAodGFyZ2V0Lm9wdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRhcmdldC5vcHRpb25zLnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gYC8ke3NldHRpbmdzLmVudGl0eVNldH1gIDogXCJcIik7XG5cdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPSBgJHtzQ29udGV4dFBhdGh9L2A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHNldHRpbmdzLm5hdmlnYXRpb24gfHwge30pLmZvckVhY2goKHNOYXZOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRSb3V0ZSA9IHRoaXMuX21Sb3V0ZXNbc2V0dGluZ3MubmF2aWdhdGlvbiFbc05hdk5hbWVdLmRldGFpbD8ucm91dGVdO1xuXHRcdFx0XHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHRhcmdldFJvdXRlLnRhcmdldHMpIHtcblx0XHRcdFx0XHRcdFx0dGFyZ2V0Um91dGUudGFyZ2V0cy5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzICYmXG5cdFx0XHRcdFx0XHRcdFx0XHQhdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnM/LnNldHRpbmdzPy5mdWxsQ29udGV4dFBhdGhcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqIEBwYXJhbSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gYC8ke3NQYXR0ZXJufWA7XG5cdFx0fVxuXHRcdGlmIChzUGF0dGVybi5sZW5ndGgpIHtcblx0XHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXR0ZXJuKSB8fCBzUGF0dGVybiA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sICsrdmlld0xldmVsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgdmlld0xldmVsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHZpZXdMZXZlbDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Um91dGVJbmZvcm1hdGlvbihzUm91dGVOYW1lPzogc3RyaW5nKTogSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChzUm91dGVOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lPzogc3RyaW5nKTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNUYXJnZXROYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IHN0cmluZywgc0NvbXBvbmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChzQ29tcG9uZW50SWQuaW5kZXhPZihgJHtzT3duZXJJZH0tLS1gKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHJpbmcoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqIEBwYXJhbSBvQ29tcG9uZW50SW5zdGFuY2UgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLl9zT3duZXJJZFxuXHQgKiBAcGFyYW0gb0NvbXBvbmVudEluc3RhbmNlLmdldElkXG5cdCAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihvQ29tcG9uZW50SW5zdGFuY2U6IENvbXBvbmVudCB8IFZpZXcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBzVGFyZ2V0Q29tcG9uZW50SWQgPSB0aGlzLl9nZXRDb21wb25lbnRJZChcblx0XHRcdChvQ29tcG9uZW50SW5zdGFuY2UgYXMgdW5rbm93biBhcyB7IF9zT3duZXJJZDogc3RyaW5nIH0pLl9zT3duZXJJZCxcblx0XHRcdG9Db21wb25lbnRJbnN0YW5jZS5nZXRJZCgpXG5cdFx0KTtcblx0XHRsZXQgc0NvcnJlY3RUYXJnZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uaWQgPT09IHNUYXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0lkID09PSBzVGFyZ2V0Q29tcG9uZW50SWQpIHtcblx0XHRcdFx0c0NvcnJlY3RUYXJnZXROYW1lID0gc1RhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNDb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0YXN5bmMgZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0OiBDb250ZXh0LCByb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsIHBhcmFtZXRlck1hcHBpbmc/OiB1bmtub3duKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldFVSTFByb21pc2U6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblx0XHRpZiAoIXBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHRhcmdldFVSTFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKGNvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMocGFyYW1ldGVyTWFwcGluZyBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLCByb3V0ZU5hbWUsIGNvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChwYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChyb3V0ZU5hbWUhLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhd2FpdCB0YXJnZXRVUkxQcm9taXNlKSBhcyBzdHJpbmc7XG5cdH1cblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogdHJ1ZVxuXHQpOiBQcm9taXNlPCgpID0+IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0bGV0IHNUYXJnZXRVUkxQcm9taXNlLCBiSXNTdGlja3lNb2RlOiBib29sZWFuO1xuXHRcdGlmIChvQ29udGV4dC5nZXRNb2RlbCgpICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdGlmICghbVBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlck1hcHBpbmcgYXMgUm91dGluZ1BhcmFtZXRlck1hcCwgc1JvdXRlTmFtZSwgb0NvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChtUGFyYW1ldGVyczogb2JqZWN0IHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlci5nZXRVUkwoc1JvdXRlTmFtZSEsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0VXJsID0gYXdhaXQgc1RhcmdldFVSTFByb21pc2U7XG5cdFx0Y29uc3QgbmF2aWdhdGVGdW5jdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5Lm5hdlRvSGFzaCh0YXJnZXRVcmwhLCBiUHJlc2VydmVIaXN0b3J5LCBmYWxzZSwgZmFsc2UsICFiSXNTdGlja3lNb2RlKTtcblx0XHR9O1xuXHRcdGlmIChkZWxheWVkVXNhZ2UgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0ZUZ1bmN0aW9uOyAvLyB3cm9uZyBidXQgc29tZWhvdyB0aGUgdHlwZXMgYXJlIGFubm95aW5nXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0ZUZ1bmN0aW9uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXR1cm4gYSBtYXAgb2Ygcm91dGluZyB0YXJnZXQgcGFyYW1ldGVycyB3aGVyZSB0aGUgYmluZGluZyBzeW50YXggaXMgcmVzb2x2ZWQgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBQYXJhbWV0ZXJzIG1hcCBpbiB0aGUgZm9ybWF0IFtrOiBzdHJpbmddIDogQ29tcGxleEJpbmRpbmdTeW50YXhcblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byB0aGUgcm91dGluZyB0YXJnZXQgcGFyYW1ldGVyc1xuXHQgKi9cblx0YXN5bmMgcHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlcnM6IFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNUYXJnZXRSb3V0ZTogc3RyaW5nIHwgbnVsbCwgb0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdGxldCBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGFDb250ZXh0UGF0aFBhcnRzID0gc0NvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gT2JqZWN0LmtleXMobVBhcmFtZXRlcnMpLm1hcChhc3luYyAoc1BhcmFtZXRlcktleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiA9IG1QYXJhbWV0ZXJzW3NQYXJhbWV0ZXJLZXldO1xuXHRcdFx0XHQvLyBXZSBhc3N1bWUgdGhlIGRlZmluZWQgcGFyYW1ldGVycyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRcdFx0XHRjb25zdCBvUGFyc2VkRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoYXN5bmMgZnVuY3Rpb24gKG9QYXRoUGFydDogUHJvcGVydHlCaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IGFSZWxhdGl2ZVBhcnRzID0gb1BhdGhQYXJ0LnBhdGguc3BsaXQoXCIuLi9cIik7XG5cdFx0XHRcdFx0Ly8gV2UgZ28gdXAgdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0Y29uc3QgYUxvY2FsUGFydHMgPSBhQ29udGV4dFBhdGhQYXJ0cy5zbGljZSgwLCBhQ29udGV4dFBhdGhQYXJ0cy5sZW5ndGggLSBhUmVsYXRpdmVQYXJ0cy5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRjb25zdCBsb2NhbENvbnRleHRQYXRoID0gYUxvY2FsUGFydHMuam9pbihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0ID1cblx0XHRcdFx0XHRcdGxvY2FsQ29udGV4dFBhdGggPT09IG9Db250ZXh0LmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0XHQ/IG9Db250ZXh0XG5cdFx0XHRcdFx0XHRcdDogb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChsb2NhbENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobG9jYWxDb250ZXh0UGF0aCArIFwiL1wiICsgYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0XHRcdHJldHVybiBsb2NhbENvbnRleHQucmVxdWVzdFByb3BlcnR5KGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKS50aGVuKGZ1bmN0aW9uIChvVmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBvTWV0YUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IG9Qcm9wZXJ0eUluZm8uJFR5cGU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG9WYWx1ZSwgc0VkbVR5cGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMpLnRoZW4oKGFSZXNvbHZlZFBhcmFtZXRlcnM6IFByb3BlcnR5QmluZGluZ0luZm8pID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9QYXJzZWRFeHByZXNzaW9uLmZvcm1hdHRlclxuXHRcdFx0XHRcdFx0PyBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXIuYXBwbHkodGhpcywgYVJlc29sdmVkUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdDogYVJlc29sdmVkUGFyYW1ldGVycy5qb2luKFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybiB7IGtleTogc1BhcmFtZXRlcktleSwgdmFsdWU6IHZhbHVlIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UuYWxsKGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcnNbXSkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVzb2x2ZWRQYXJhbWV0ZXI6IFJlc29sdmVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzW29SZXNvbHZlZFBhcmFtZXRlci5rZXldID0gb1Jlc29sdmVkUGFyYW1ldGVyLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgJHtzVGFyZ2V0Um91dGV9YCk7XG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtZXRlcnNQcm9taXNlO1xuXHR9XG5cblx0X2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzOiBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdEVkaXRTdGF0ZS5jbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSgpOyAvLyBSZXNldCBVSSBzdGF0ZSB3aGVuIGFsbCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVmcmVzaGVkXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvLCBvciB0aGUgbGlzdCBiaW5kaW5nIGZvciBjcmVhdGlvbiAoZGVmZXJyZWQgY3JlYXRpb24pXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwsIG1hcCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlXSBOYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSBVUkxcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJEZWZlcnJlZENvbnRleHRdIFRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgZGVmZXJyZWQgYXQgdGhlIHRhcmdldCBwYWdlXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5lZGl0YWJsZV0gVGhlIHRhcmdldCBwYWdlIHNoYWxsIGJlIGltbWVkaWF0ZWx5IGluIHRoZSBlZGl0IG1vZGUgdG8gYXZvaWQgZmxpY2tlcmluZ1xuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbF0gYCsxYCBpZiB3ZSBhZGQgYSBjb2x1bW4gaW4gRkNMLCBgLTFgIHRvIHJlbW92ZSBhIGNvbHVtbiwgMCB0byBzdGF5IG9uIHRoZSBzYW1lIGNvbHVtblxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJSZWNyZWF0ZUNvbnRleHRdIEZvcmNlIHJlLWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRm9yY2VGb2N1c10gRm9yY2VzIGZvY3VzIHNlbGVjdGlvbiBhZnRlciBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbdmlld0RhdGFdIFZpZXcgZGF0YVxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhLm5hdmlnYXRpb25dXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm9dIFRoZSB0YXJnZXQgaW5mb3JtYXRpb24gZnJvbSB3aGljaCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIFtjdXJyZW50VGFyZ2V0SW5mby5uYW1lXVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb0NvbnRleHQoXG5cdFx0Y29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30sXG5cdFx0dmlld0RhdGE/OiB7IG5hdmlnYXRpb24/OiBvYmplY3QgfSxcblx0XHRjdXJyZW50VGFyZ2V0SW5mbz86IHsgbmFtZTogc3RyaW5nIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCB0YXJnZXRSb3V0ZSA9IFwiXCI7XG5cdFx0bGV0IHJvdXRlUGFyYW1ldGVyc1Byb21pc2U6IFByb21pc2U8b2JqZWN0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQodGhpcy5vTWV0YU1vZGVsKTtcblxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChwYXJhbWV0ZXJzPy50YXJnZXRQYXRoICYmIHZpZXdEYXRhPy5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHZpZXdEYXRhLm5hdmlnYXRpb24gYXMgUmVjb3JkPHN0cmluZywgeyBkZXRhaWw6IHsgcm91dGU6IHN0cmluZzsgcGFyYW1ldGVyczogb2JqZWN0IH0gfT47XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBuYXZpZ2F0aW9uSW5mb1twYXJhbWV0ZXJzLnRhcmdldFBhdGhdLmRldGFpbDtcblx0XHRcdHRhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgJiYgY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRyb3V0ZVBhcmFtZXRlcnNQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvUm91dGVEZXRhaWwucGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFx0dGFyZ2V0Um91dGUsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmF2aWdhdGlvbiBnb2VzIHdpdGggYSBjcmVhdGlvbiwgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoIChleHBlY3RpbmcgY29udGV4dCBpcyBhbiBPRGF0YUxpc3RCaW5kaW5nKVxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycykge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gXCIoLi4uKVwiO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBsYXlvdXQgcGFyYW1ldGVyIGlmIG5lZWRlZFxuXHRcdGNvbnN0IHNMYXlvdXQgPSB0aGlzLl9jYWxjdWxhdGVMYXlvdXQoc1RhcmdldFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke3NMYXlvdXR9YDtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZm9yIGxhdGVyIHVzYWdlXG5cdFx0Y29uc3Qgb05hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVyczogcGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogcGFyYW1ldGVycz8uZWRpdGFibGUsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBwYXJhbWV0ZXJzPy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnM/LnNob3dQbGFjZWhvbGRlciA6IHRydWUsXG5cdFx0XHRyZWFzb246IHBhcmFtZXRlcnM/LnJlYXNvbixcblx0XHRcdHJlZGlyZWN0ZWRUb05vbkRyYWZ0OiBwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0XG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzPy51cGRhdGVGQ0xMZXZlbCAhPT0gLTEgJiYgcGFyYW1ldGVycz8ucmVjcmVhdGVDb250ZXh0ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRvTmF2aWdhdGlvbkluZm8udXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IHJvdXRlSW5mb0J5SGFzaCA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0bGV0IG1FdmVudFBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSB7IGNvbmZpZzoge30gfTtcblx0XHRcdFx0aWYgKHJvdXRlSW5mb0J5SGFzaCkge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMgPSB7IC4uLnJvdXRlSW5mb0J5SGFzaCwgY29uZmlnOiB7fSB9O1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhcGFyYW1ldGVycy5mb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgISFwYXJhbWV0ZXJzLmVkaXRhYmxlICYmICFzVGFyZ2V0UGF0aC5pbmNsdWRlcyhcIiguLi4pXCIpKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiJmktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1RhcmdldFBhdGggKz0gXCI/aS1hY3Rpb249Y3JlYXRlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubmF2TW9kZSA9PT0gXCJvcGVuSW5OZXdUYWJcIikge1xuXHRcdFx0Ly8gTmF2aWdhdGUgdG8gbmV3IHRhYi8gd2luZG93XG5cdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiXSwgYXN5bmMgKENvbnRhaW5lcjogQ29udGFpbmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHBhcnNlZFVybCA9IHNoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2UgPSAoYXdhaXQgQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIk5hdmlnYXRpb25cIikpIGFzIE5hdmlnYXRpb247XG5cdFx0XHRcdGNvbnN0IGhyZWYgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5nZXRIcmVmKHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBwYXJzZWRVcmwuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHBhcnNlZFVybC5hY3Rpb25cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUgPSBhd2FpdCBzaGVsbFNlcnZpY2VIZWxwZXIuZ2V0SW5mcmFtZVVybCgpO1xuXHRcdFx0XHRsZXQgdXJsLCB0YXJnZXRVcmw6IHN0cmluZztcblx0XHRcdFx0aWYgKGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSkge1xuXHRcdFx0XHRcdHVybCA9IG5ldyBVUkwoYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lKTtcblx0XHRcdFx0XHR0YXJnZXRVcmwgPSBhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUucmVwbGFjZSh1cmwuaGFzaCwgYCR7aHJlZn0mLyR7ZW5jb2RlVVJJKHNUYXJnZXRQYXRoKX1gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR1cmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcblx0XHRcdFx0XHR0YXJnZXRVcmwgPSBgJHt1cmwub3JpZ2lufSR7dXJsLnBhdGhuYW1lfSR7aHJlZn0mLyR7ZW5jb2RlVVJJKHNUYXJnZXRQYXRoKX1gO1xuXHRcdFx0XHR9XG5cdFx0XHRcdG9wZW5XaW5kb3codGFyZ2V0VXJsKTtcblx0XHRcdH0pO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gQ2xlYXIgdW5ib3VuZCBtZXNzYWdlcyB1cG9uIG5hdmlnYXRpbmcgZnJvbSBMUiB0byBPUFxuXHRcdFx0Ly8gVGhpcyBpcyB0byBlbnN1cmUgc3RhbGUgZXJyb3IgbWVzc2FnZXMgZnJvbSBMUiBhcmUgbm90IHNob3duIHRvIHRoZSB1c2VyIGFmdGVyIG5hdmlnYXRpb24gdG8gT1AuXG5cdFx0XHRpZiAoY3VycmVudFRhcmdldEluZm8/Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0Y29uc3Qgb1JvdXRlSW5mbyA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2goc1RhcmdldFBhdGgpO1xuXHRcdFx0XHRpZiAob1JvdXRlSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IG9Sb3V0ZSA9IHRoaXMuX2dldFJvdXRlSW5mb3JtYXRpb24ob1JvdXRlSW5mby5uYW1lKTtcblx0XHRcdFx0XHRpZiAob1JvdXRlICYmIG9Sb3V0ZS50YXJnZXRzICYmIG9Sb3V0ZS50YXJnZXRzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0XHRcdGNvbnN0IHNMYXN0VGFyZ2V0TmFtZSA9IG9Sb3V0ZS50YXJnZXRzW29Sb3V0ZS50YXJnZXRzLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb1RhcmdldCA9IHRoaXMuX2dldFRhcmdldEluZm9ybWF0aW9uKHNMYXN0VGFyZ2V0TmFtZSk7XG5cdFx0XHRcdFx0XHRpZiAob1RhcmdldCAmJiBvVGFyZ2V0Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5PYmplY3RQYWdlXCIpIHtcblx0XHRcdFx0XHRcdFx0bWVzc2FnZUhhbmRsaW5nLnJlbW92ZVVuYm91bmRUcmFuc2l0aW9uTWVzc2FnZXMoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgaW4gdGhlIHF1ZXVlXG5cdFx0XHR0aGlzLm5hdmlnYXRpb25JbmZvUXVldWUucHVzaChvTmF2aWdhdGlvbkluZm8pO1xuXG5cdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgcm91dGVQYXJhbWV0ZXJzUHJvbWlzZSkge1xuXHRcdFx0XHRyZXR1cm4gcm91dGVQYXJhbWV0ZXJzUHJvbWlzZS50aGVuKChvUm91dGVQYXJhbWV0ZXJzOiBvYmplY3QpID0+IHtcblx0XHRcdFx0XHRPYmplY3QuYXNzaWduKG9Sb3V0ZVBhcmFtZXRlcnMsIHsgYklzU3RpY2t5TW9kZTogaXNTdGlja3lNb2RlIH0pO1xuXHRcdFx0XHRcdHRoaXMub1JvdXRlci5uYXZUbyh0YXJnZXRSb3V0ZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5XG5cdFx0XHRcdC5uYXZUb0hhc2goXG5cdFx0XHRcdFx0c1RhcmdldFBhdGgsXG5cdFx0XHRcdFx0ISFwYXJhbWV0ZXJzLnByZXNlcnZlSGlzdG9yeSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5ub1ByZXNlcnZhdGlvbkNhY2hlLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM/LmZvcmNlRm9jdXMsXG5cdFx0XHRcdFx0IWlzU3RpY2t5TW9kZVxuXHRcdFx0XHQpXG5cdFx0XHRcdC50aGVuKChiTmF2aWdhdGVkKSA9PiB7XG5cdFx0XHRcdFx0aWYgKCFiTmF2aWdhdGVkKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGUgbmF2aWdhdGlvbiBkaWQgbm90IGhhcHBlbiAtLT4gcmVtb3ZlIHRoZSBuYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZnJvbSB0aGUgcXVldWUgYXMgdGhleSBzaG91bGRuJ3QgYmUgdXNlZFxuXHRcdFx0XHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnBvcCgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gYk5hdmlnYXRlZDtcblx0XHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE5hdmlnYXRlcyB0byBhIHJvdXRlLlxuXHQgKiBAcGFyYW0gc1RhcmdldFJvdXRlTmFtZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIFtvUm91dGVQYXJhbWV0ZXJzXSBQYXJhbWV0ZXJzIHRvIGJlIHVzZWQgd2l0aCByb3V0ZSB0byBjcmVhdGUgdGhlIHRhcmdldCBoYXNoXG5cdCAqIEBwYXJhbSBvUm91dGVQYXJhbWV0ZXJzLmJJc1N0aWNreU1vZGVcblx0ICogQHJldHVybnMgUHJvbWlzZSB0aGF0IGlzIHJlc29sdmVkIHdoZW4gdGhlIG5hdmlnYXRpb24gaXMgZmluYWxpemVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb1JvdXRlKHNUYXJnZXRSb3V0ZU5hbWU6IHN0cmluZywgb1JvdXRlUGFyYW1ldGVycz86IHsgYklzU3RpY2t5TW9kZT86IGJvb2xlYW4gfSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTtcblx0XHR9XG5cdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0Y29uc3Qgc1RhcmdldFVSTCA9IHRoaXMub1JvdXRlci5nZXRVUkwoc1RhcmdldFJvdXRlTmFtZSwgb1JvdXRlUGFyYW1ldGVycyk7XG5cdFx0cmV0dXJuIHRoaXMub1JvdXRlclByb3h5Lm5hdlRvSGFzaChzVGFyZ2V0VVJMISwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgIW9Sb3V0ZVBhcmFtZXRlcnM/LmJJc1N0aWNreU1vZGUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiBvbmUgb2YgdGhlIGN1cnJlbnQgdmlld3Mgb24gdGhlIHNjcmVlbiBpcyBib3VuZCB0byBhIGdpdmVuIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgY29udGV4dFxuXHQgKiBAcmV0dXJucyBgdHJ1ZWAgb3IgYGZhbHNlYCBpZiB0aGUgY3VycmVudCBzdGF0ZSBpcyBpbXBhY3RlZCBvciBub3Rcblx0ICovXG5cdGlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShvQ29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNQYXRoID0gb0NvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0Ly8gRmlyc3QsIGNoZWNrIHdpdGggdGhlIHRlY2huaWNhbCBwYXRoLiBXZSBoYXZlIHRvIHRyeSBpdCwgYmVjYXVzZSBmb3IgbGV2ZWwgPiAxLCB3ZVxuXHRcdC8vIHVzZXMgdGVjaG5pY2FsIGtleXMgZXZlbiBpZiBTZW1hbnRpYyBrZXlzIGFyZSBlbmFibGVkXG5cdFx0aWYgKHRoaXMub1JvdXRlclByb3h5LmlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeShzUGF0aCkpIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSBpZiAoL15bXigpXStcXChbXigpXStcXCkkLy50ZXN0KHNQYXRoKSkge1xuXHRcdFx0Ly8gSWYgdGhlIGN1cnJlbnQgcGF0aCBjYW4gYmUgc2VtYW50aWMgKGkuZS4gaXMgbGlrZSB4eHgoeXl5KSlcblx0XHRcdC8vIGNoZWNrIHdpdGggdGhlIHNlbWFudGljIHBhdGggaWYgd2UgY2FuIGZpbmQgaXRcblx0XHRcdGxldCBzU2VtYW50aWNQYXRoO1xuXHRcdFx0aWYgKHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgJiYgdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHQvLyBXZSBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdGhpcyBzZW1hbnRpYyBwYXRoXG5cdFx0XHRcdHNTZW1hbnRpY1BhdGggPSB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nLnNlbWFudGljUGF0aDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNTZW1hbnRpY1BhdGggPSBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpITtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNTZW1hbnRpY1BhdGggIT0gc1BhdGggPyB0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1NlbWFudGljUGF0aCkgOiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdF9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKFwiL1teL10qJFwiKTtcblx0XHRzUGF0aCA9IHNQYXRoLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdGlmICh0aGlzLm9Sb3V0ZXIubWF0Y2goc1BhdGgpIHx8IHNQYXRoID09PSBcIlwiKSB7XG5cdFx0XHRyZXR1cm4gc1BhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLl9maW5kUGF0aFRvTmF2aWdhdGUoc1BhdGgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgYSBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHVzZWQgdG8gbmF2aWdhdGUgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gY29udGV4dCBUaGUgY29udGV4dCB0byBuYXZpZ2F0ZSB0b1xuXHQgKiBAcmV0dXJucyBUcnVlIGlmIHNlbWFudGljIHBhdGggc2hhbGwgYmUgc3VlZCwgZmFsc2Ugb3RoZXJ3aXNlXG5cdCAqL1xuXHRfY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0OiBDb250ZXh0KTogYm9vbGVhbiB7XG5cdFx0Ly8gRmlyc3QsIGNoZWNrIGlmIHRoaXMgaXMgYSBsZXZlbC0xIG9iamVjdCAocGF0aCA9IC9hYWEoYmJiKSlcblx0XHRpZiAoIS9eXFwvW14oXStcXChbXildK1xcKSQvLnRlc3QoY29udGV4dC5nZXRQYXRoKCkpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlbiBjaGVjayBpZiB0aGUgZW50aXR5IGlzIGEgZHJhZnQgcm9vdFxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IGNvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRjb25zdCBlbnRpdHlTZXQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKG1ldGFNb2RlbC5nZXRNZXRhQ29udGV4dChjb250ZXh0LmdldFBhdGgoKSkpXG5cdFx0XHQudGFyZ2V0T2JqZWN0IGFzIEVudGl0eVNldDtcblxuXHRcdGlmICghTW9kZWxIZWxwZXIuaXNEcmFmdFJvb3QoZW50aXR5U2V0KSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFdlIGRvbid0IHN1cHBvcnQgc2VtYW50aWMgcGF0aCBmb3IgbmV3bHkgY3JlYXRlZCBvYmplY3RzXG5cdFx0aWYgKGNvbnRleHQuZ2V0UHJvcGVydHkoXCJJc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UgJiYgY29udGV4dC5nZXRQcm9wZXJ0eShcIkhhc0FjdGl2ZUVudGl0eVwiKSA9PT0gZmFsc2UpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBGaW5hbGx5LCBjaGVjayBpZiB0aGUgZW50aXR5IGhhcyBzZW1hbnRpYyBrZXlzXG5cdFx0Y29uc3QgZW50aXR5U2V0TmFtZSA9IGVudGl0eVNldC5uYW1lO1xuXHRcdHJldHVybiBTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY0tleXMobWV0YU1vZGVsLCBlbnRpdHlTZXROYW1lKSAhPT0gdW5kZWZpbmVkO1xuXHR9XG5cblx0X2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0OiBDb250ZXh0IHwgT0RhdGFMaXN0QmluZGluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHRsZXQgc1BhdGggPSBcIlwiO1xuXG5cdFx0aWYgKGNvbnRleHQuaXNBPE9EYXRhTGlzdEJpbmRpbmc+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0Lk9EYXRhTGlzdEJpbmRpbmdcIikpIHtcblx0XHRcdHNQYXRoID0gY29udGV4dC5nZXRIZWFkZXJDb250ZXh0KCk/LmdldFBhdGgoKSA/PyBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpO1xuXG5cdFx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCA9PT0gLTEpIHtcblx0XHRcdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2sgZnJvbSBhIGNvbnRleHQsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBvZiB0aGUgcGF0aFxuXHRcdFx0XHRzUGF0aCA9IHRoaXMuX2ZpbmRQYXRoVG9OYXZpZ2F0ZShzUGF0aCk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0KSkge1xuXHRcdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0LCB0cnVlKTtcblxuXHRcdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0XHQvLyBXZSB3ZXJlIG5vdCBhYmxlIHRvIGJ1aWxkIHRoZSBzZW1hbnRpYyBwYXRoIC0tPiBVc2UgdGhlIHRlY2huaWNhbCBwYXRoIGFuZFxuXHRcdFx0XHRcdC8vIGNsZWFyIHRoZSBwcmV2aW91cyBtYXBwaW5nLCBvdGhlcndpc2UgdGhlIG9sZCBtYXBwaW5nIGlzIHVzZWQgaW4gRWRpdEZsb3cjdXBkYXRlRG9jdW1lbnRcblx0XHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1NlbWFudGljUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIGV4dHJhICcvJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGhcblx0XHRpZiAoc1BhdGhbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH1cblxuXHRfY2FsY3VsYXRlTGF5b3V0KGhhc2g6IHN0cmluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHQvLyBPcGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvIHdpbmRvd1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIgJiYgcGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBwYXJhbWV0ZXJzLkZDTExldmVsID09PSAwID8gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgOiBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHR9XG5cdFx0bGV0IEZDTExldmVsID0gcGFyYW1ldGVycy5GQ0xMZXZlbCA/PyAwO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsO1xuXHRcdFx0aWYgKEZDTExldmVsIDwgMCkge1xuXHRcdFx0XHRGQ0xMZXZlbCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2ssIHRyeSB0byBmaW5kIHRoZSBsYXlvdXQgaW4gdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBpZiBpdCdzIG5vdCBwcm92aWRlZCBhcyBwYXJhbWV0ZXJcblx0XHQvLyAobGF5b3V0IGNhbGN1bGF0aW9uIGlzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGluIHRoaXMgY2FzZSlcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPCAwICYmICFwYXJhbWV0ZXJzLmxheW91dCkge1xuXHRcdFx0cGFyYW1ldGVycy5sYXlvdXQgPSB0aGlzLm9Sb3V0ZXJQcm94eS5maW5kTGF5b3V0Rm9ySGFzaChoYXNoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmNhbGN1bGF0ZUxheW91dChGQ0xMZXZlbCwgaGFzaCwgcGFyYW1ldGVycy5sYXlvdXQsIHBhcmFtZXRlcnMua2VlcEN1cnJlbnRMYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgYmVmb3JlIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogRGlzcGxheXMgYSBidXN5IGluZGljYXRvci5cblx0ICpcblx0ICovXG5cdF9iZWZvcmVSb3V0ZU1hdGNoZWQoLypvRXZlbnQ6IEV2ZW50Ki8pOiB2b2lkIHtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKi9cblx0X2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKTogYm9vbGVhbiB7XG5cdFx0Ly8gVGhlIFJvdXRlclByb3h5IHNldHMgYSAnZmVMZXZlbCcgcHJvcGVydHkgb24gdGhlIGhpc3Rvcnkuc3RhdGUgb2JqZWN0XG5cdFx0cmV0dXJuIGhpc3Rvcnkuc3RhdGU/LmZlTGV2ZWwgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBIaWRlcyB0aGUgYnVzeSBpbmRpY2F0b3IgYW5kIGZpcmVzIGl0cyBvd24gJ3JvdXRlbWF0Y2hlZCcgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIFJvdXRpbmdFdmVudFBhcmFtZXRlcnM7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uQXBwU3RhdGVDaGFuZ2VkO1xuXHRcdFx0b0FwcFN0YXRlSGFuZGxlci5yZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vUm91dGVyUHJveHkuY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLlJlc3RvcmVIaXN0b3J5O1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzZXRSZXN0b3JlSGlzdG9yeUZsYWcoKTtcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybiA9IG1QYXJhbWV0ZXJzLmNvbmZpZy5wYXR0ZXJuO1xuXHRcdHRoaXMuYUN1cnJlbnRWaWV3cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblxuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlSW5mb3JtYXRpb24gPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpO1xuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cblx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVycyk7XG5cblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGhhc2ggaGFzIGJlZW4gc2V0IGJ5IHRoZSByb3V0ZXJQcm94eS5uYXZUb0hhc2ggZnVuY3Rpb25cblx0XHQvLyBJZiBub3QsIHJlYnVpbGQgaGlzdG9yeSBwcm9wZXJseSAoYm90aCBpbiB0aGUgYnJvd3NlciBhbmQgdGhlIFJvdXRlclByb3h5KVxuXHRcdGlmICghdGhpcy5faXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQucmVzdG9yZUhpc3RvcnkoKVxuXHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhc3luYyBpbml0aWFsaXplUm91dGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0YXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5wcm9jZXNzQW5kRXhwYW5kSGFzaCgpO1xuXHRcdH1cblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cblx0XHR0aGlzLl9mbk9uUm91dGVNYXRjaGVkID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0dGhpcy5vUm91dGVyLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9iZWZvcmVSb3V0ZU1hdGNoZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdC8vIFJlc2V0IGludGVybmFsIHN0YXRlXG5cdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gW107XG5cdFx0RWRpdFN0YXRlLnJlc2V0RWRpdFN0YXRlKCk7XG5cdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gIXRoaXMub1JvdXRlci5tYXRjaChcIlwiKTtcblxuXHRcdGNvbnN0IGJJc0lhcHBTdGF0ZSA9IHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLmdldEhhc2goKS5pbmNsdWRlcyhcInNhcC1pYXBwLXN0YXRlXCIpO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBvU3RhcnR1cFBhcmFtZXRlcnMgPSBhd2FpdCB0aGlzLm9BcHBDb21wb25lbnQuZ2V0U3RhcnR1cFBhcmFtZXRlcnMoKTtcblx0XHRcdGNvbnN0IGJIYXNTdGFydFVwUGFyYW1ldGVycyA9IG9TdGFydHVwUGFyYW1ldGVycyAhPT0gdW5kZWZpbmVkICYmIE9iamVjdC5rZXlzKG9TdGFydHVwUGFyYW1ldGVycykubGVuZ3RoICE9PSAwO1xuXHRcdFx0Y29uc3Qgc0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0XHQvLyBNYW5hZ2Ugc3RhcnR1cCBwYXJhbWV0ZXJzIChpbiBjYXNlIG9mIG5vIGlhcHAtc3RhdGUpXG5cdFx0XHRpZiAoIWJJc0lhcHBTdGF0ZSAmJiBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgJiYgIXNIYXNoKSB7XG5cdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQ1JFQVRFXCIpKSB7XG5cdFx0XHRcdFx0Ly8gQ3JlYXRlIG1vZGVcblx0XHRcdFx0XHQvLyBUaGlzIGNoZWNrIHdpbGwgY2F0Y2ggbXVsdGlwbGUgbW9kZXMgbGlrZSBjcmVhdGUsIGNyZWF0ZVdpdGggYW5kIGF1dG9DcmVhdGVXaXRoIHdoaWNoIGFsbCBuZWVkXG5cdFx0XHRcdFx0Ly8gdG8gYmUgaGFuZGxlZCBsaWtlIGNyZWF0ZSBzdGFydHVwIVxuXHRcdFx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBEZWVwIGxpbmtcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0KG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0fSBjYXRjaCAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciBkdXJpbmcgcm91dGluZyBpbml0aWFsaXphdGlvblwiLCBvRXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRnZXREZWZhdWx0Q3JlYXRlSGFzaChvU3RhcnR1cFBhcmFtZXRlcnM/OiBTdGFydHVwUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlcik7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlQ3JlYXRlU3RhcnR1cChvU3RhcnR1cFBhcmFtZXRlcnM6IFN0YXJ0dXBQYXJhbWV0ZXJzKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0Q3JlYXRlU3RhcnR1cEhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzLCB0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub1JvdXRlciwgdGhpcy5vTWV0YU1vZGVsKS50aGVuKFxuXHRcdFx0KHNOZXdIYXNoOiBzdHJpbmcpOiB2b2lkID0+IHtcblx0XHRcdFx0aWYgKHNOZXdIYXNoKSB7XG5cdFx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIEZ1bmN0aW9uKShzTmV3SGFzaCk7XG5cdFx0XHRcdFx0aWYgKG9TdGFydHVwUGFyYW1ldGVycz8ucHJlZmVycmVkTW9kZSAmJiBvU3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVswXS50b1VwcGVyQ2FzZSgpLmluY2x1ZGVzKFwiQVVUT0NSRUFURVwiKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSgpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVDcmVhdGUoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cdFx0KTtcblx0fVxuXG5cdGFzeW5jIF9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyB8IG51bGwpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRyZXR1cm4gQXBwU3RhcnR1cEhlbHBlci5nZXREZWVwTGlua1N0YXJ0dXBIYXNoKFxuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmcsXG5cdFx0XHRvU3RhcnR1cFBhcmFtZXRlcnMsXG5cdFx0XHR0aGlzLm9Nb2RlbFxuXHRcdCkudGhlbigob0RlZXBMaW5rKSA9PiB7XG5cdFx0XHRsZXQgc0hhc2g7XG5cdFx0XHRpZiAob0RlZXBMaW5rLmNvbnRleHQpIHtcblx0XHRcdFx0Y29uc3Qgc1RlY2huaWNhbFBhdGggPSBvRGVlcExpbmsuY29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRcdGNvbnN0IHNTZW1hbnRpY1BhdGggPSB0aGlzLl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0KVxuXHRcdFx0XHRcdD8gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9EZWVwTGluay5jb250ZXh0LCBmYWxzZSkhXG5cdFx0XHRcdFx0OiBzVGVjaG5pY2FsUGF0aDtcblxuXHRcdFx0XHRpZiAoc1NlbWFudGljUGF0aCAhPT0gc1RlY2huaWNhbFBhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNUZWNobmljYWxQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRzSGFzaCA9IHNTZW1hbnRpY1BhdGguc3Vic3RyaW5nKDEpOyAvLyBUbyByZW1vdmUgdGhlIGxlYWRpbmcgJy8nXG5cdFx0XHR9IGVsc2UgaWYgKG9EZWVwTGluay5oYXNoKSB7XG5cdFx0XHRcdHNIYXNoID0gb0RlZXBMaW5rLmhhc2g7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzSGFzaCkge1xuXHRcdFx0XHQvL1JlcGxhY2UgdGhlIGhhc2ggd2l0aCBuZXdseSBjcmVhdGVkIGhhc2hcblx0XHRcdFx0KHRoaXMub1JvdXRlci5nZXRIYXNoQ2hhbmdlcigpLnJlcGxhY2VIYXNoIGFzIEZ1bmN0aW9uKShzSGFzaCk7XG5cdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZURlZXBsaW5rKCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm47XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogTWFuYWdlcyB0aGUgcHJlZmVycmVkIG1vZGUgZWRpdCBieSBhcHBlbmRpbmcgXCJbJnw/XWktYWN0aW9uPWVkaXRcIiB0byB0aGUgaGFzaCBpZjpcblx0ICogLSBUaGVyZSBpcyBhIHJlc3VsdGluZyBoYXNoIGZyb20gdGhlIHByZXZpb3VzIGxvZ2ljLFxuXHQgKiAtIFRoZSBwcmVmZXJyZWQgbW9kZSBpcyBlZGl0LCBhbmRcblx0ICogLSBUaGUgZW50aXR5IGlzIGVkaXRhYmxlXG5cdCAqIFRoaXMgd29ya3MgZm9yIGJvdGggZGVlcC1saW5rIHN0YXJ0dXAgKCNBcHA/SUQ9bXlJZCZwcmVmZXJyZWRNb2RlPWVkaXQpIGFuZCBvYmplY3QgcGFnZSByb3V0aW5nICgjQXBwP3ByZWZlcnJlZE1vZGU9ZWRpdCYvRW50aXR5KElEKSkuXG5cdCAqIEBwYXJhbSBzdGFydHVwUGFyYW1ldGVyc1xuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZVxuXHQgKi9cblx0YXN5bmMgX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChzdGFydHVwUGFyYW1ldGVyczogeyBwcmVmZXJyZWRNb2RlPzogc3RyaW5nW10gfSk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IHJlc3VsdGluZ0hhc2ggPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCk7XG5cdFx0Y29uc3Qgc2hvdWxkRWRpdCA9ICEhc3RhcnR1cFBhcmFtZXRlcnMucHJlZmVycmVkTW9kZT8uWzBdPy50b1VwcGVyQ2FzZSgpPy5pbmNsdWRlcyhcIkVESVRcIik7XG5cdFx0Y29uc3QgZWRpdGFibGUgPSBhd2FpdCBBcHBTdGFydHVwSGVscGVyLnZlcmlmeUVkaXRBbm5vdGF0aW9ucyh0aGlzLmdldENvbnRleHRQYXRoKCksIHRoaXMub01ldGFNb2RlbCk7XG5cdFx0aWYgKHJlc3VsdGluZ0hhc2ggJiYgc2hvdWxkRWRpdCAmJiBlZGl0YWJsZSkge1xuXHRcdFx0Y29uc3QgcGFyYW1ldGVyID0gKHJlc3VsdGluZ0hhc2guaW5jbHVkZXMoXCI/XCIpID8gXCImXCIgOiBcIj9cIikgKyBcImktYWN0aW9uPWVkaXRcIjtcblx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyAoaGFzaDogc3RyaW5nKSA9PiB2b2lkKShyZXN1bHRpbmdIYXNoICsgcGFyYW1ldGVyKTtcblx0XHR9XG5cdH1cblxuXHRnZXRPdXRib3VuZHMoKTogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PiB7XG5cdFx0cmV0dXJuIHRoaXMub3V0Ym91bmRzO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIERyYWZ0IHJvb3QgZW50aXR5IHNldCBvciB0aGUgc3RpY2t5LWVuYWJsZWQgZW50aXR5IHNldC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHJvb3QgRW50aXR5U2V0XG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gbmV3IFJvdXRpbmdTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9Sb3V0aW5nU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENNQSxzQkFBc0IsSUFBQUMsSUFBQSxHQUQzQkMsY0FBYyxDQUFDLDZDQUE2QyxDQUFDLEVBQUFDLEtBQUEsR0FFNURDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHUEQsS0FBSyxDQUFDLENBQUMsRUFBQUgsSUFBQSxDQUFBSyxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLGNBQUE7SUFBQUMsY0FBQSxDQUFBVCxzQkFBQSxFQUFBUSxjQUFBO0lBQUEsU0FBQVIsdUJBQUE7TUFBQSxJQUFBVSxLQUFBO01BQUEsU0FBQUMsSUFBQSxHQUFBQyxTQUFBLENBQUFDLE1BQUEsRUFBQUMsSUFBQSxPQUFBQyxLQUFBLENBQUFKLElBQUEsR0FBQUssSUFBQSxNQUFBQSxJQUFBLEdBQUFMLElBQUEsRUFBQUssSUFBQTtRQUFBRixJQUFBLENBQUFFLElBQUEsSUFBQUosU0FBQSxDQUFBSSxJQUFBO01BQUE7TUFBQU4sS0FBQSxHQUFBRixjQUFBLENBQUFTLElBQUEsVUFBQUgsSUFBQTtNQUFBSSwwQkFBQSxDQUFBUixLQUFBLGtCQUFBUyxXQUFBLEVBQUFDLHNCQUFBLENBQUFWLEtBQUE7TUFBQVEsMEJBQUEsQ0FBQVIsS0FBQSx1QkFBQVcsWUFBQSxFQUFBRCxzQkFBQSxDQUFBVixLQUFBO01BQUEsT0FBQUEsS0FBQTtJQUFBO0lBQUEsT0FBQVYsc0JBQUE7RUFBQSxFQUo0QnNCLGFBQWEsSUFBQUgsV0FBQSxHQUFBSSx5QkFBQSxDQUFBaEIsT0FBQSxDQUFBaUIsU0FBQSxtQkFBQXJCLEtBQUE7SUFB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
@@ -1073,12 +1073,10 @@ export class RoutingService extends Service<RoutingServiceSettings> {
1073
1073
  }
1074
1074
 
1075
1075
  async _manageDeepLinkStartup(oStartupParameters: StartupParameters | null): Promise<void> {
1076
- const alwaysCheckTargetExistence = this.oAppComponent.getManifestEntry("sap.fe")?.app?._checkExistenceOnDeepLink === true;
1077
1076
  return AppStartupHelper.getDeepLinkStartupHash(
1078
1077
  this.oAppComponent.getManifestEntry("sap.ui5").routing,
1079
1078
  oStartupParameters,
1080
- this.oModel,
1081
- alwaysCheckTargetExistence
1079
+ this.oModel
1082
1080
  ).then((oDeepLink) => {
1083
1081
  let sHash;
1084
1082
  if (oDeepLink.context) {