@sapui5/sap.fe.core 1.130.0 → 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 (158) 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/CommonUtils.js +38 -14
  6. package/src/sap/fe/core/CommonUtils.ts +39 -15
  7. package/src/sap/fe/core/TemplateComponent.js +4 -1
  8. package/src/sap/fe/core/TemplateComponent.ts +2 -0
  9. package/src/sap/fe/core/buildingBlocks/BuildingBlock.js +248 -0
  10. package/src/sap/fe/core/buildingBlocks/{BuildingBlockBase.ts → BuildingBlock.ts} +73 -132
  11. package/src/sap/fe/core/controllerextensions/EditFlow.js +17 -7
  12. package/src/sap/fe/core/controllerextensions/EditFlow.ts +17 -6
  13. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +4 -2
  14. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +3 -1
  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 +9 -5
  30. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +17 -6
  31. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +4 -3
  32. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +3 -2
  33. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +4 -4
  34. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +3 -0
  35. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.js +3 -4
  36. package/src/sap/fe/core/controllerextensions/editFlow/draftDataLossPopup.ts +2 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +17 -20
  38. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +30 -29
  39. package/src/sap/fe/core/controllerextensions/editFlow/sticky.js +5 -5
  40. package/src/sap/fe/core/controllerextensions/editFlow/sticky.ts +4 -1
  41. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +77 -35
  42. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +88 -43
  43. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.js +3 -7
  44. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributor.ts +0 -4
  45. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.js +70 -0
  46. package/src/sap/fe/core/controllerextensions/viewState/IViewStateContributorMixin.ts +99 -0
  47. package/src/sap/fe/core/controls/FormElementWrapper.js +1 -1
  48. package/src/sap/fe/core/controls/FormElementWrapper.ts +1 -1
  49. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.js +14 -2
  50. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.block.tsx +20 -6
  51. package/src/sap/fe/core/converters/ConverterContext.js +10 -3
  52. package/src/sap/fe/core/converters/ConverterContext.ts +8 -1
  53. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  54. package/src/sap/fe/core/converters/ManifestSettings.ts +2 -1
  55. package/src/sap/fe/core/converters/controls/Common/Action.js +2 -2
  56. package/src/sap/fe/core/converters/controls/Common/Action.ts +5 -1
  57. package/src/sap/fe/core/converters/controls/Common/Chart.js +1 -1
  58. package/src/sap/fe/core/converters/controls/Common/Chart.ts +10 -5
  59. package/src/sap/fe/core/converters/controls/Common/KPI.js +26 -9
  60. package/src/sap/fe/core/converters/controls/Common/KPI.ts +48 -5
  61. package/src/sap/fe/core/converters/controls/Common/Table.js +63 -67
  62. package/src/sap/fe/core/converters/controls/Common/Table.ts +87 -81
  63. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.js +2 -1
  64. package/src/sap/fe/core/converters/controls/Common/table/StandardActions.ts +1 -0
  65. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.js +2 -3
  66. package/src/sap/fe/core/converters/controls/ListReport/FilterBar.ts +2 -2
  67. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.js +12 -8
  68. package/src/sap/fe/core/converters/controls/ListReport/VisualFilters.ts +10 -6
  69. package/src/sap/fe/core/formatters/StandardFormatter.js +4 -1
  70. package/src/sap/fe/core/formatters/StandardFormatter.ts +4 -1
  71. package/src/sap/fe/core/fpm/manifest.json +1 -1
  72. package/src/sap/fe/core/helpers/AppStartupHelper.js +37 -10
  73. package/src/sap/fe/core/helpers/AppStartupHelper.ts +38 -14
  74. package/src/sap/fe/core/helpers/BindingHelper.js +2 -2
  75. package/src/sap/fe/core/helpers/BindingHelper.ts +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +3 -2
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +2 -1
  78. package/src/sap/fe/core/helpers/MetaPath.js +17 -2
  79. package/src/sap/fe/core/helpers/MetaPath.ts +27 -6
  80. package/src/sap/fe/core/helpers/RecommendationHelper.js +2 -2
  81. package/src/sap/fe/core/helpers/RecommendationHelper.ts +1 -1
  82. package/src/sap/fe/core/helpers/ResourceModelHelper.js +8 -3
  83. package/src/sap/fe/core/helpers/ResourceModelHelper.ts +9 -2
  84. package/src/sap/fe/core/library.js +5 -2
  85. package/src/sap/fe/core/library.support.js +3 -3
  86. package/src/sap/fe/core/library.support.ts +2 -1
  87. package/src/sap/fe/core/library.ts +4 -0
  88. package/src/sap/fe/core/messagebundle.properties +6 -0
  89. package/src/sap/fe/core/messagebundle_ar.properties +11 -3
  90. package/src/sap/fe/core/messagebundle_bg.properties +14 -6
  91. package/src/sap/fe/core/messagebundle_ca.properties +10 -2
  92. package/src/sap/fe/core/messagebundle_cnr.properties +10 -2
  93. package/src/sap/fe/core/messagebundle_cs.properties +10 -2
  94. package/src/sap/fe/core/messagebundle_cy.properties +10 -2
  95. package/src/sap/fe/core/messagebundle_da.properties +10 -2
  96. package/src/sap/fe/core/messagebundle_de.properties +12 -4
  97. package/src/sap/fe/core/messagebundle_el.properties +10 -2
  98. package/src/sap/fe/core/messagebundle_en.properties +9 -1
  99. package/src/sap/fe/core/messagebundle_en_GB.properties +10 -2
  100. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +10 -2
  101. package/src/sap/fe/core/messagebundle_es.properties +12 -4
  102. package/src/sap/fe/core/messagebundle_es_MX.properties +10 -2
  103. package/src/sap/fe/core/messagebundle_et.properties +10 -2
  104. package/src/sap/fe/core/messagebundle_fi.properties +10 -2
  105. package/src/sap/fe/core/messagebundle_fr.properties +10 -2
  106. package/src/sap/fe/core/messagebundle_fr_CA.properties +11 -3
  107. package/src/sap/fe/core/messagebundle_hi.properties +10 -2
  108. package/src/sap/fe/core/messagebundle_hr.properties +11 -3
  109. package/src/sap/fe/core/messagebundle_hu.properties +11 -3
  110. package/src/sap/fe/core/messagebundle_id.properties +10 -2
  111. package/src/sap/fe/core/messagebundle_it.properties +10 -2
  112. package/src/sap/fe/core/messagebundle_iw.properties +11 -3
  113. package/src/sap/fe/core/messagebundle_ja.properties +10 -2
  114. package/src/sap/fe/core/messagebundle_kk.properties +10 -2
  115. package/src/sap/fe/core/messagebundle_ko.properties +10 -2
  116. package/src/sap/fe/core/messagebundle_lt.properties +10 -2
  117. package/src/sap/fe/core/messagebundle_lv.properties +10 -2
  118. package/src/sap/fe/core/messagebundle_mk.properties +10 -2
  119. package/src/sap/fe/core/messagebundle_ms.properties +10 -2
  120. package/src/sap/fe/core/messagebundle_nl.properties +12 -4
  121. package/src/sap/fe/core/messagebundle_no.properties +11 -3
  122. package/src/sap/fe/core/messagebundle_pl.properties +10 -2
  123. package/src/sap/fe/core/messagebundle_pt.properties +10 -2
  124. package/src/sap/fe/core/messagebundle_pt_PT.properties +10 -2
  125. package/src/sap/fe/core/messagebundle_ro.properties +10 -2
  126. package/src/sap/fe/core/messagebundle_ru.properties +10 -2
  127. package/src/sap/fe/core/messagebundle_sh.properties +10 -2
  128. package/src/sap/fe/core/messagebundle_sk.properties +10 -2
  129. package/src/sap/fe/core/messagebundle_sl.properties +10 -2
  130. package/src/sap/fe/core/messagebundle_sr.properties +10 -2
  131. package/src/sap/fe/core/messagebundle_sv.properties +10 -2
  132. package/src/sap/fe/core/messagebundle_th.properties +12 -4
  133. package/src/sap/fe/core/messagebundle_tr.properties +12 -4
  134. package/src/sap/fe/core/messagebundle_uk.properties +10 -2
  135. package/src/sap/fe/core/messagebundle_vi.properties +11 -3
  136. package/src/sap/fe/core/messagebundle_zh_CN.properties +10 -2
  137. package/src/sap/fe/core/messagebundle_zh_TW.properties +10 -2
  138. package/src/sap/fe/core/operationsHelper.js +4 -4
  139. package/src/sap/fe/core/operationsHelper.ts +4 -4
  140. package/src/sap/fe/core/rootView/Fcl.controller.js +2 -2
  141. package/src/sap/fe/core/rootView/Fcl.controller.ts +4 -1
  142. package/src/sap/fe/core/services/EnvironmentServiceFactory.js +5 -5
  143. package/src/sap/fe/core/services/EnvironmentServiceFactory.ts +4 -3
  144. package/src/sap/fe/core/services/NavigationServiceFactory.js +1 -28
  145. package/src/sap/fe/core/services/NavigationServiceFactory.ts +3 -35
  146. package/src/sap/fe/core/services/RoutingServiceFactory.js +2 -4
  147. package/src/sap/fe/core/services/RoutingServiceFactory.ts +1 -3
  148. package/src/sap/fe/core/services/ShellServicesFactory.js +2 -13
  149. package/src/sap/fe/core/services/ShellServicesFactory.ts +1 -17
  150. package/src/sap/fe/core/services/TemplatedViewServiceFactory.js +5 -3
  151. package/src/sap/fe/core/services/TemplatedViewServiceFactory.ts +3 -1
  152. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +3 -4
  153. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +2 -2
  154. package/src/sap/fe/core/templating/DataFieldFormatters.js +13 -6
  155. package/src/sap/fe/core/templating/DataFieldFormatters.ts +13 -6
  156. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  157. package/src/sap/fe/core/templating/UIFormatters.ts +4 -3
  158. package/src/sap/fe/core/buildingBlocks/BuildingBlockBase.js +0 -326
@@ -345,10 +345,22 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
345
345
  return _jsx(Toolbar, {
346
346
  children: {
347
347
  content: _jsxs(_Fragment, {
348
- children: [_jsx(ToolbarSpacer, {}), this.getButton(this.isSave ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_SAVE") : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT"), "Emphasized", this.onAcceptAndSave.bind(this)), this.getButton(this.isSave ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_SAVE") : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE"), "Ghost", this.onIgnoreAndSave.bind(this)), this.getButton(this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_CONTINUE_EDITING"), "Ghost", this.onContinueEditing.bind(this))]
348
+ children: [_jsx(ToolbarSpacer, {}), this.getButton(this._getDialogButtonText(this.isSave, RecommendationDialogDecision.Accept), "Emphasized", this.onAcceptAndSave.bind(this)), this.getButton(this._getDialogButtonText(this.isSave, RecommendationDialogDecision.Ignore), "Ghost", this.onIgnoreAndSave.bind(this)), this.getButton(this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_CONTINUE_EDITING"), "Ghost", this.onContinueEditing.bind(this))]
349
349
  })
350
350
  }
351
351
  });
352
+ };
353
+ _proto._getDialogButtonText = function _getDialogButtonText(save, recommendationDialogDecision) {
354
+ const isAcceptButton = recommendationDialogDecision === RecommendationDialogDecision.Accept;
355
+ if (save) {
356
+ var _this$view$getBinding3;
357
+ if (!((_this$view$getBinding3 = this.view.getBindingContext()) !== null && _this$view$getBinding3 !== void 0 && _this$view$getBinding3.getObject().HasActiveEntity)) {
358
+ return isAcceptButton ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_CREATE") : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_CREATE");
359
+ }
360
+ return isAcceptButton ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_SAVE") : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_SAVE");
361
+ } else {
362
+ return isAcceptButton ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT") : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE");
363
+ }
352
364
  }
353
365
 
354
366
  /**
@@ -456,4 +468,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/building
456
468
  _exports.ConfirmRecommendationDialogBlock = ConfirmRecommendationDialogBlock;
457
469
  return _exports;
458
470
  }, false);
459
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dCbG9jayIsIl9kZWMiLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwibmFtZSIsIm5hbWVzcGFjZSIsIl9kZWMyIiwiZGVmaW5lUmVmZXJlbmNlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9SdW50aW1lQnVpbGRpbmdCbG9jayIsIl9pbmhlcml0c0xvb3NlIiwicHJvcHMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9wcm90byIsInByb3RvdHlwZSIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnMiLCJ2aXNpYmxlQ29udGV4dFBhdGhzIiwiZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJvcGVuUmVjb21tZW5kYXRpb25zIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJsZW5ndGgiLCJmb3JFYWNoIiwicmVjb21tZW5kYXRpb24iLCJjb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJnZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsInB1c2giLCJfdGhpcyR2aWV3JGdldEJpbmRpbmciLCJ2aXNpYmxlUGFnZUNvbnRleHRQYXRocyIsImdldFBhdGgiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImZjbENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJfaXNGY2xFbmFibGVkIiwiaXNGdWxsU2NyZWVuIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJyaWdodE1vc3RDb250ZXh0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwiaW5jbHVkZXMiLCJrZXlzIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dCIsImNvbnRleHREYXRhIiwicmVjb21tZW5kYXRpb25Db250ZXh0IiwiY29udGV4dEtleSIsImFyZ3VtZW50cyIsImN1cnJlbnRWYWx1ZUlzQ29udGV4dCIsImlzQSIsInNwbGl0Iiwib3BlblJlY29tbWVuZGF0aW9uIiwidmFsdWUiLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJkZXNjcmlwdGlvbiIsInRleHQiLCJBcnJheSIsImlzQXJyYXkiLCJvcGVuIiwiaXNTYXZlIiwiX2FjY2VwdE1vZGVsJGdldERhdGEkIiwiX3RoaXMkdmlldyRnZXRCaW5kaW5nMiIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJhZGRDb250ZXh0SWRlbnRpZmllclRleHQiLCJyZWNvbW1lbmRhdGlvbkRhdGEiLCJhY2NlcHRBbGxQYXJhbXMiLCJfdGhpcyR2aWV3IiwibGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJfdGhpcyR2aWV3MiIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiYWNjZXB0TW9kZWwiLCJnZXRBY2NlcHRBbGxNb2RlbCIsInNldE1vZGVsIiwiZ2V0RGF0YSIsIml0ZW1zIiwiU2tpcHBlZCIsImRpYWxvZyIsImdldENvbnRlbnQiLCJzZXRFc2NhcGVIYW5kbGVyIiwib25Db250aW51ZUVkaXRpbmciLCJiaW5kIiwiYWRkRGVwZW5kZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJjbG9zZSIsIl90aGlzJGNvbmZpcm1SZWNvbW1lbiIsIl90aGlzJGNvbmZpcm1SZWNvbW1lbjIiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsIm9uQWNjZXB0QW5kU2F2ZSIsIl90aGlzJHZpZXczIiwiaXNBY2NlcHRlZCIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsIkFjY2VwdCIsIkxvZyIsImVycm9yIiwib25JZ25vcmVBbmRTYXZlIiwiX3RoaXMkdmlldzQiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwiSWdub3JlIiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiX3RoaXMkdmlldzUiLCJfdGhpcyR2aWV3NSRnZXRCaW5kaW4iLCJfdGhpcyR2aWV3NSRnZXRCaW5kaW4yIiwiX2ludm9sdmVkRGF0YU1vZGVsT2JqIiwiX2ludm9sdmVkRGF0YU1vZGVsT2JqMiIsIl9pbnZvbHZlZERhdGFNb2RlbE9iajMiLCJfaW52b2x2ZWREYXRhTW9kZWxPYmo0IiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIkpTT05Nb2RlbCIsIl90aGlzJGFjY2VwdEFsbFBhcmFtcyIsImVudGl0eU5hbWVMYWJlbCIsImdldEVudGl0eU5hbWUiLCJpZGVudGlmaWVyVGV4dHMiLCJfcmVjb21tZW5kYXRpb25EYXRhJGMiLCJfdGhpcyR2aWV3NiIsIl90aGlzJHZpZXc2JGdldEJpbmRpbiIsIl90aGlzJHZpZXc2JGdldEJpbmRpbjIiLCJnZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgiLCJsaXN0RGF0YSIsImZpZWxkTmFtZSIsInZhbHVlT2YiLCJmaWVsZFZhbHVlIiwic2V0RGF0YSIsImdldEdyb3VwIiwiZ2V0TWVzc2FnZSIsIl90aGlzJHZpZXckZ2V0TW9kZWwiLCJfdGhpcyR2aWV3JGdldE1vZGVsJGciLCJhY2NlcHRBbGxEYXRhIiwibWVzc2FnZVRleHQiLCJUZXh0IiwiZ2V0RGlhbG9nQ29udGVudCIsIkxpc3QiLCJtb2RlbCIsInBhdGgiLCJzb3J0ZXIiLCJTb3J0ZXIiLCJDdXN0b21MaXN0SXRlbSIsIkhCb3giLCJjbGFzcyIsIkRpYWxvZyIsInRpdGxlIiwic3RhdGUiLCJWYWx1ZVN0YXRlIiwiSW5mb3JtYXRpb24iLCJyZWYiLCJyZXNpemFibGUiLCJjb250ZW50V2lkdGgiLCJmb290ZXIiLCJSdW50aW1lQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmJsb2NrLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgZGVmaW5lUmVmZXJlbmNlIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgeyBSZWYgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvanN4LXJ1bnRpbWUvanN4XCI7XG5pbXBvcnQgeyBkZWZpbmVCdWlsZGluZ0Jsb2NrIH0gZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvQnVpbGRpbmdCbG9ja1N1cHBvcnRcIjtcbmltcG9ydCBSdW50aW1lQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvdGVtcGxhdGluZy9SdW50aW1lQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2VNb2RlbCB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1Jlc291cmNlTW9kZWxIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IERpYWxvZyBmcm9tIFwic2FwL20vRGlhbG9nXCI7XG5pbXBvcnQgRmxleEl0ZW1EYXRhIGZyb20gXCJzYXAvbS9GbGV4SXRlbURhdGFcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTGlzdCBmcm9tIFwic2FwL20vTGlzdFwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUb29sYmFyIGZyb20gXCJzYXAvbS9Ub29sYmFyXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IHR5cGUgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHsgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IFNvcnRlciBmcm9tIFwic2FwL3VpL21vZGVsL1NvcnRlclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IGRlZmF1bHQgYXMgT0RhdGFWNENvbnRleHQgfSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIE9EYXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCJ0eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB0eXBlIEJhc2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9CYXNlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUGFnZUNvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL1BhZ2VDb250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZU1vZGVsIGZyb20gXCIuLi8uLi9SZXNvdXJjZU1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IEFjY2VwdEFsbFBhcmFtcywgUmVjb21tZW5kYXRpb25EYXRhIH0gZnJvbSBcIi4uLy4uL2NvbnRyb2xsZXJleHRlbnNpb25zL1JlY29tbWVuZGF0aW9uc1wiO1xuaW1wb3J0IHZhbHVlRm9ybWF0dGVycyBmcm9tIFwiLi4vLi4vZm9ybWF0dGVycy9WYWx1ZUZvcm1hdHRlclwiO1xuaW1wb3J0IHR5cGUgeyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbyB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB7IHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIsIHR5cGUgU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkRhdGFUeXBlIH0gZnJvbSBcIi4uLy4uL2hlbHBlcnMvU3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRmNsQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vcm9vdFZpZXcvRmNsLmNvbnRyb2xsZXJcIjtcblxuZXhwb3J0IGVudW0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB7XG5cdEFjY2VwdCA9IFwiQWNjZXB0X1JlY29tbWVuZGF0aW9uc1wiLFxuXHRJZ25vcmUgPSBcIklnbm9yZV9SZWNvbW1lbmRhdGlvbnNcIixcblx0Q29udGludWUgPSBcIkNvbnRpbnVlX0VkaXRpbmdcIixcblx0U2tpcHBlZCA9IFwiU2tpcHBlZFwiXG59XG5cbkBkZWZpbmVCdWlsZGluZ0Jsb2NrKHtcblx0bmFtZTogXCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dcIixcblx0bmFtZXNwYWNlOiBcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zXCJcbn0pXG5leHBvcnQgY2xhc3MgQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nQmxvY2sgZXh0ZW5kcyBSdW50aW1lQnVpbGRpbmdCbG9jayB7XG5cdGNvbnN0cnVjdG9yKHByb3BzOiBQcm9wZXJ0aWVzT2Y8Q29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nQmxvY2s+KSB7XG5cdFx0c3VwZXIocHJvcHMpO1xuXHRcdHRoaXMudmlldyA9IHByb3BzLnZpZXcgYXMgVmlldztcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwgPSBnZXRSZXNvdXJjZU1vZGVsKHRoaXMudmlldyk7XG5cdH1cblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0Y29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nITogUmVmPERpYWxvZz47XG5cblx0cHVibGljIHZpZXchOiBWaWV3O1xuXG5cdHByaXZhdGUgY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbCE6IFJlc291cmNlTW9kZWw7XG5cblx0cHJvdGVjdGVkIGtleSE6IHN0cmluZztcblxuXHRwcml2YXRlIGlzU2F2ZSE6IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBhY2NlcHRBbGxQYXJhbXMhOiBBY2NlcHRBbGxQYXJhbXM7XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIHRoZSBwcm9taXNlIHdpdGggdGhlIHNlbGVjdGVkIGRpYWxvZyBsaXN0IG9wdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBwcm9taXNlUmVzb2x2ZSE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKiBSZWplY3RzIHRoZSBwcm9taXNlIG9mIG9wZW4gZGlhbG9nXG5cdCAqL1xuXHRwdWJsaWMgcHJvbWlzZVJlamVjdCE6IEZ1bmN0aW9uO1xuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcmV0dXJucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXRPcGVuUmVjb21tZW5kYXRpb25zKCk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCB2aXNpYmxlQ29udGV4dFBhdGhzID0gdGhpcy5nZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocygpO1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnMgPSB0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKHZpc2libGVDb250ZXh0UGF0aHMpO1xuXHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10gPSBbXTtcblx0XHRpZiAob3BlblJlY29tbWVuZGF0aW9ucy5sZW5ndGggPiAwKSB7XG5cdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zLmZvckVhY2goKHJlY29tbWVuZGF0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGNvbnRleHQgPSB0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKTtcblx0XHRcdFx0Y29uc3QgcHJvcGVydHlQYXRoOiBzdHJpbmcgPSByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggPyByZWNvbW1lbmRhdGlvbi5wcm9wZXJ0eVBhdGggOiBcIlwiO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0Y29udGV4dD8uZ2V0UHJvcGVydHkocHJvcGVydHlQYXRoKSA9PT0gbnVsbCB8fFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT0gXCJcIlxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbnMucHVzaChyZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb25zO1xuXHRcdC8vIGNoZWNrIGlmIHdlIGhhdmUgcmVjb21tZW5kYXRpb25zIGZyb20gdGhlIGN1cnJlbnQgcGFnZSBpbiB0aGUgbG9jYWxBbm5vdGF0aW9uTW9kZWxcblx0XHQvLyByZXR1cm4gb3BlbiByZWNvbW1lbmRhdGlvbnMuXG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgQ29sbGVjdGlvbiBvZiBjb250ZXh0IHBhdGhzXG5cdCAqL1xuXG5cdHB1YmxpYyBnZXRWaXNpYmxlUGFnZUNvbnRleHRQYXRocygpOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdIHtcblx0XHRjb25zdCB2aXNpYmxlUGFnZUNvbnRleHRQYXRocyA9IFt0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXTtcblx0XHRjb25zdCBjb250cm9sbGVyID0gdGhpcy52aWV3LmdldENvbnRyb2xsZXIoKSBhcyBCYXNlQ29udHJvbGxlcjtcblx0XHRjb25zdCBmY2xDb250cm9sbGVyID0gY29udHJvbGxlci5nZXRBcHBDb21wb25lbnQoKS5nZXRSb290Vmlld0NvbnRyb2xsZXIoKSBhcyBGY2xDb250cm9sbGVyO1xuXHRcdGNvbnN0IGlzRmNsRW5hYmxlZCA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuX2lzRmNsRW5hYmxlZCgpO1xuXHRcdGNvbnN0IGlzRnVsbFNjcmVlbiA9IGlzRmNsRW5hYmxlZCA/IGZjbENvbnRyb2xsZXIuZ2V0SGVscGVyKCkuZ2V0Q3VycmVudFVJU3RhdGUoKS5pc0Z1bGxTY3JlZW4gOiB0cnVlO1xuXHRcdGlmIChpc0ZjbEVuYWJsZWQgJiYgIWlzRnVsbFNjcmVlbikge1xuXHRcdFx0Y29uc3QgcmlnaHRNb3N0Q29udGV4dCA9IGZjbENvbnRyb2xsZXIuZ2V0UmlnaHRtb3N0Q29udGV4dCgpO1xuXHRcdFx0dmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMucHVzaChyaWdodE1vc3RDb250ZXh0Py5nZXRQYXRoKCkpO1xuXHRcdH1cblx0XHRyZXR1cm4gdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHM7XG5cdH1cblxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHRQYXRocyBQYXRocyBvZiB0aGUgY29udGV4dHNcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb25EYXRhIGZvciB2aXNpYmxlIGNvbnRleHRzXG5cdCAqL1xuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHMoY29udGV4dFBhdGhzOiAoc3RyaW5nIHwgdW5kZWZpbmVkKVtdKTogUmVjb21tZW5kYXRpb25EYXRhW10ge1xuXHRcdGNvbnN0IG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKGNvbnRleHRQYXRocy5sZW5ndGggPiAwKSB7XG5cdFx0XHRjb25zdCBsb2NhbEFubm90YXRpb25Nb2RlbCA9ICh0aGlzLnZpZXcuZ2V0TW9kZWwoKSBhcyBPRGF0YU1vZGVsKS5nZXRMb2NhbEFubm90YXRpb25Nb2RlbCgpO1xuXHRcdFx0Ly8gY2hlY2sgY29udGV4dCBwYXRocyBpbiBsb2NhbCBhbm5vdGF0aW9uIG1vZGVscyB3aGljaCBtYXRjaCB0b1xuXHRcdFx0Ly8gMS4gY3VycmVudCBwYWdlIGFuZFxuXHRcdFx0Ly8gMi4gaW1tZWRpYXRlIGNoaWxkcmVuIG9mIHRoZSBjdXJyZW50IHBhZ2Vcblx0XHRcdC8vIE5lZWQgdG8gY29uc2lkZXIgYWxzbyBpbW1lZGlhdGUgY2hpbGRyZW5cblx0XHRcdC8vIGl0ZXJhdGUgb3ZlciBhbGwga2V5c1xuXHRcdFx0Y29udGV4dFBhdGhzLmZvckVhY2goKGNvbnRleHRQYXRoKSA9PiB7XG5cdFx0XHRcdGlmIChjb250ZXh0UGF0aCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uTW9kZWwuZ2V0T2JqZWN0KGNvbnRleHRQYXRoKTtcblx0XHRcdFx0XHRpZiAobG9jYWxBbm5vdGF0aW9uT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBhbm5vdGF0aW9uT2JqZWN0ID0gbG9jYWxBbm5vdGF0aW9uT2JqZWN0O1xuXHRcdFx0XHRcdFx0LyoqXG5cdFx0XHRcdFx0XHQgKiBUaGUgbG9jYWwgYW5ub3RhdGlvbiBvYmplY3Qgd2lsbCBiZSBvZiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSA6XG5cdFx0XHRcdFx0XHQgKiB7XG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy50eXBlQWhlYWRWYWx1ZXNcIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFByb3BlcnR5TmFtZToge1xuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIjogVmFsdWVcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiBcdCB9XG5cdFx0XHRcdFx0XHQgKiByZWNvbW1lbmRhdGlvbkNvbnRleHQ6eyBjb250ZXh0IH1cblx0XHRcdFx0XHRcdCAqIH1cblx0XHRcdFx0XHRcdCAqXG5cdFx0XHRcdFx0XHQgKiBzbyBpbiBvcmRlciB0byBnZXQgdGhlIHJlY29tbWVuZGF0aW9ucyBhcyBwZXIgZWFjaCBjb250ZXh0IC0gZm9yIHBhcmVudC9jaGlsZCBlbnRpdGllcyB3ZSBuZWVkIHRvIGl0ZXJhdGUgb3ZlciBlYWNoIGtleXMgcmVjdXJzaXZlbHkgaW4gdGhlIGZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IGZ1bmN0aW9uLFxuXHRcdFx0XHRcdFx0ICogZm9ybSB0aGUgY29ycmVzcG9uZGluZyBzdHJ1Y3R1cmUgYW5kIHRoZW4gc2VuZCBpdCBmb3IgZ2V0dGluZyB0aGUgcmVjb21tZW5kYXRpb25zIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRcdFx0ICovXG5cdFx0XHRcdFx0XHR0aGlzLmZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0KGFubm90YXRpb25PYmplY3QsIG9wZW5SZWNvbW1lbmRhdGlvbnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdHJldHVybiBvcGVuUmVjb21tZW5kYXRpb25zO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uT2JqZWN0XG5cdCAqIEBwYXJhbSBvcGVuUmVjb21tZW5kYXRpb25zIFJlY29tbWVuZGF0aW9uIERhdGFcblx0ICovXG5cblx0cHJpdmF0ZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10pOiB2b2lkIHtcblx0XHRpZiAoYW5ub3RhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSkge1xuXHRcdFx0Y29uc3QgcmVjb21tZW5kYXRpb25PYmplY3Q6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSA9IGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRmb3IgKGNvbnN0IGN1cnJlbnRLZXkgaW4gYW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBhbm5vdGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldO1xuXHRcdFx0XHRpZiAoY3VycmVudFZhbHVlKSB7XG5cdFx0XHRcdFx0aWYgKChjdXJyZW50VmFsdWUgYXMgUmVjb3JkPHN0cmluZywgT0RhdGFWNENvbnRleHQ+KVtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSkge1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0W2N1cnJlbnRLZXldIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlclZhbHVlXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyRGVzY3JpcHRpb25cIikgfHxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCIpXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtjdXJyZW50S2V5XSA9IGN1cnJlbnRWYWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGNvbnN0IGtleXMgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzKFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dFxuXHRcdFx0KTtcblx0XHRcdChyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIgPSBrZXlzW1wic2VtYW50aWNLZXlzXCJdXG5cdFx0XHRcdD8ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ6IGtleXNbXCJ0ZWNobmljYWxLZXlzXCJdO1xuXHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3QsXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0LFxuXHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb25zXG5cdFx0XHQpO1xuXHRcdH1cblx0fVxuXHQvKipcblx0ICpcblx0ICogQHBhcmFtIGNvbnRleHREYXRhIFRoZSBjb250ZXh0IGRhdGEgb2JqZWN0IGZvciByZWNvbW1lbmRhdGlvbnNcblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uQ29udGV4dCBUaGUgcmVjb21tZW5kYXRpb24gY29udGV4dFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbkRhdGFcblx0ICogQHBhcmFtIGNvbnRleHRLZXkgQ29udGV4dCBLZXlcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRjb250ZXh0RGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cmVjb21tZW5kYXRpb25Db250ZXh0OiBPRGF0YVY0Q29udGV4dCxcblx0XHRvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSxcblx0XHRjb250ZXh0S2V5ID0gXCJcIlxuXHQpOiB2b2lkIHtcblx0XHRmb3IgKGNvbnN0IGN1cnJlbnRLZXkgaW4gY29udGV4dERhdGEpIHtcblx0XHRcdGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGNvbnRleHREYXRhW2N1cnJlbnRLZXldO1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50VmFsdWVJc0NvbnRleHQgPVxuXHRcdFx0XHRcdChjdXJyZW50VmFsdWUgYXMgT0RhdGFWNENvbnRleHQpLmlzQSAmJiAoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKTtcblx0XHRcdFx0aWYgKGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSkge1xuXHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGN1cnJlbnRLZXkuc3BsaXQoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKVswXTtcblx0XHRcdFx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb246IFJlY29tbWVuZGF0aW9uRGF0YSA9IHtcblx0XHRcdFx0XHRcdGNvbnRleHQ6IHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHByb3BlcnR5UGF0aDogY29udGV4dEtleSA/IGAke2NvbnRleHRLZXl9LyR7cHJvcGVydHlQYXRofWAgOiBwcm9wZXJ0eVBhdGgsXG5cdFx0XHRcdFx0XHR2YWx1ZTogY3VycmVudFZhbHVlIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyOiAocmVjb21tZW5kYXRpb25Db250ZXh0IGFzIFJlY29tbWVuZGF0aW9uQ29udGV4dHNJbmZvKS5jb250ZXh0SWRlbnRpZmllcixcblx0XHRcdFx0XHRcdGNvbnRleHRJZGVudGlmaWVyVGV4dDogW11cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdGNvbnN0IGRlc2NyaXB0aW9uID0gY29udGV4dERhdGFbYCR7cHJvcGVydHlQYXRofUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uYF07XG5cdFx0XHRcdFx0aWYgKGRlc2NyaXB0aW9uKSB7XG5cdFx0XHRcdFx0XHRvcGVuUmVjb21tZW5kYXRpb24udGV4dCA9IGRlc2NyaXB0aW9uIGFzIHN0cmluZztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5wdXNoKG9wZW5SZWNvbW1lbmRhdGlvbik7XG5cdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIGN1cnJlbnRWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpICYmICFjdXJyZW50VmFsdWVJc0NvbnRleHQpIHtcblx0XHRcdFx0XHR0aGlzLmdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JDb250ZXh0KFxuXHRcdFx0XHRcdFx0Y3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucyxcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE9wZW5zIHRoZSBjb25maXJtIHJlY29tbWVuZGF0aW9ucyBkaWFsb2cuXG5cdCAqIEBwYXJhbSBpc1NhdmUgQm9vbGVhbiBmbGFnIHdoaWNoIHdvdWxkIGJlIHNldCB0byB0cnVlIGlmIHdlIGFyZSBzYXZpbmcgdGhlIGRvY3VtZW50IGFuZCB3b3VsZCBiZSBmYWxzZSBpZiB3ZSBkbyBhcHBseSBjaGFuZ2VzXG5cdCAqIEByZXR1cm5zIFByb21pc2Ugd2hpY2ggd291bGQgcmVzb2x2ZSB3aXRoIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gKEFjY2VwdCwgSWdub3JlLCBDb250aW51ZSwgU2tpcHBlZClcblx0ICovXG5cdHB1YmxpYyBhc3luYyBvcGVuKGlzU2F2ZTogYm9vbGVhbik6IFByb21pc2U8UmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiB8IHVuZGVmaW5lZD4ge1xuXHRcdC8vIGNoZWNrIGZvciBidWlsdC1pbiByZWNvbW1lbmRhdGlvbnNcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zKCk7XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0c3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5hZGRDb250ZXh0SWRlbnRpZmllclRleHQoXG5cdFx0XHRcdHsgcmVjb21tZW5kYXRpb25EYXRhOiBvcGVuUmVjb21tZW5kYXRpb25zIH0sXG5cdFx0XHRcdHRoaXMudmlldy5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRQYXRoKClcblx0XHRcdCk7XG5cdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcyA9IHtcblx0XHRcdFx0cmVjb21tZW5kYXRpb25EYXRhOiBvcGVuUmVjb21tZW5kYXRpb25zXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZiBidWlsdC1pbiByZWNvbW1lbmRhdGlvbnMgYXJlIG5vdCBmb3VuZCB0aGVuIGNoZWNrIGZvciBsZWdhY3kgcmVjb21tZW5kYXRpb25zLlxuXHRcdFx0Y29uc3QgbGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QgPSAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5jaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QoKTtcblx0XHRcdGlmIChsZWdhY3lSZWNvbW1lbmRhdGlvbnNFeGlzdCkge1xuXHRcdFx0XHR0aGlzLmFjY2VwdEFsbFBhcmFtcyA9IGF3YWl0ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmZldGNoQWNjZXB0QWxsUGFyYW1zKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRjb25zdCBhY2NlcHRNb2RlbCA9IHRoaXMuZ2V0QWNjZXB0QWxsTW9kZWwoKTtcblx0XHR0aGlzLnZpZXcuc2V0TW9kZWwoYWNjZXB0TW9kZWwsIFwiX2FjY2VwdERpYWxvZ01vZGVsXCIpO1xuXHRcdGlmICghYWNjZXB0TW9kZWwuZ2V0RGF0YSgpLml0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdHJldHVybiBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLlNraXBwZWQ7XG5cdFx0fVxuXHRcdHRoaXMuaXNTYXZlID0gaXNTYXZlO1xuXHRcdGNvbnN0IGRpYWxvZyA9IHRoaXMuZ2V0Q29udGVudCgpO1xuXHRcdGRpYWxvZz8uc2V0RXNjYXBlSGFuZGxlcih0aGlzLm9uQ29udGludWVFZGl0aW5nLmJpbmQodGhpcykpO1xuXHRcdHRoaXMudmlldy5hZGREZXBlbmRlbnQoZGlhbG9nIGFzIFVJNUVsZW1lbnQpO1xuXHRcdGRpYWxvZz8ub3BlbigpO1xuXHRcdHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlID0gcmVzb2x2ZTtcblx0XHRcdHRoaXMucHJvbWlzZVJlamVjdCA9IHJlamVjdDtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIHRvIGNsb3NlIHRoZSBjb25maXJtUmVjb21tZW5kYXRpb24gZGlhbG9nLlxuXHQgKlxuXHQgKi9cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmNsb3NlKCk7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2cuY3VycmVudD8uZGVzdHJveSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIEFjY2VwdCBhbmQgU2F2ZSBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIGFzeW5jIG9uQWNjZXB0QW5kU2F2ZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3QgaXNBY2NlcHRlZCA9IGF3YWl0ICh0aGlzLnZpZXc/LmdldENvbnRyb2xsZXIoKSBhcyBQYWdlQ29udHJvbGxlcikucmVjb21tZW5kYXRpb25zLmFjY2VwdFJlY29tbWVuZGF0aW9ucyhcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXNcblx0XHRcdCk7XG5cdFx0XHRpZiAoIWlzQWNjZXB0ZWQpIHtcblx0XHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHRcdH1cblx0XHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQpO1xuXHRcdH0gY2F0Y2gge1xuXHRcdFx0TG9nLmVycm9yKFwiQWNjZXB0IFJlY29tbWVuZGF0aW9ucyBGYWlsZWRcIik7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QoXCJBY2NlcHQgRmFpbGVkXCIpO1xuXHRcdH0gZmluYWxseSB7XG5cdFx0XHR0aGlzLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIElnbm9yZSBhbmQgU2F2ZSBidXR0b24uXG5cdCAqL1xuXHRwcml2YXRlIG9uSWdub3JlQW5kU2F2ZSgpOiB2b2lkIHtcblx0XHQodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5pZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzKCk7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLklnbm9yZSk7XG5cdFx0dGhpcy5jbG9zZSgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXIgZm9yIENvbnRpbnVlIEVkaXRpbmcgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbkNvbnRpbnVlRWRpdGluZygpOiB2b2lkIHtcblx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQ29udGludWUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBsYWJlbCBvciBuYW1lIG9mIHRoZSBGaWVsZCBiYXNlZCBvbiBpdHMgcHJvcGVydHkgcGF0aC5cblx0ICogQHBhcmFtIHRhcmdldFBhdGhcblx0ICogQHJldHVybnMgUmV0dXJucyB0aGUgbGFiZWwgb2YgdGhlIEZpZWxkLlxuXHQgKi9cblx0cHJpdmF0ZSBnZXRGaWVsZE5hbWUodGFyZ2V0UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCBpbnZvbHZlZERhdGFNb2RlbE9iamVjdCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoPFByb3BlcnR5Pihcblx0XHRcdHRhcmdldFBhdGgsXG5cdFx0XHR0aGlzLnZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsXG5cdFx0KTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0aW52b2x2ZWREYXRhTW9kZWxPYmplY3Q/LnRhcmdldE9iamVjdD8uYW5ub3RhdGlvbnM/LkNvbW1vbj8uTGFiZWw/LnRvU3RyaW5nKCkgfHxcblx0XHRcdHRhcmdldFBhdGguc3BsaXQoXCIvXCIpW3RhcmdldFBhdGguc3BsaXQoXCIvXCIpLmxlbmd0aCAtIDFdXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBGZXRjaGVzIHRleHQgZm9yIHJlY29tbWVuZGF0aW9uIGJhc2VkIG9uIGRpc3BsYXkgbW9kZS5cblx0ICogQHBhcmFtIHJlY29tbWVuZGF0aW9uXG5cdCAqIEBwYXJhbSBkaXNwbGF5TW9kZVxuXHQgKiBAcmV0dXJucyBUZXh0IGZvciBhIHJlY29tbWVuZGF0aW9uXG5cdCAqL1xuXHRwcml2YXRlIGdldFRleHQocmVjb21tZW5kYXRpb246IFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSwgZGlzcGxheU1vZGU6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHJlY29tbWVuZGF0aW9uLnRleHQgfHwgcmVjb21tZW5kYXRpb24udmFsdWUpIHtcblx0XHRcdHN3aXRjaCAoZGlzcGxheU1vZGUpIHtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9uLnRleHQhO1xuXHRcdFx0XHRjYXNlIFwiRGVzY3JpcHRpb25WYWx1ZVwiOlxuXHRcdFx0XHRcdHJldHVybiB2YWx1ZUZvcm1hdHRlcnMuZm9ybWF0V2l0aEJyYWNrZXRzKHJlY29tbWVuZGF0aW9uLnRleHQsIHJlY29tbWVuZGF0aW9uLnZhbHVlKTtcblx0XHRcdFx0Y2FzZSBcIlZhbHVlRGVzY3JpcHRpb25cIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi52YWx1ZSwgcmVjb21tZW5kYXRpb24udGV4dCk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZVwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi52YWx1ZSE7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi52YWx1ZSB8fCBcIlwiO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgQnV0dG9uIHdpdGggZ2l2ZW4gdGV4dCwgdHlwZSBhbmQgcHJlc3NIYW5kbGVyLlxuXHQgKiBAcGFyYW0gdGV4dCBUZXh0IGZvciB0aGUgYnV0dG9uXG5cdCAqIEBwYXJhbSB0eXBlIFR5cGUgb2YgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gcHJlc3NIYW5kbGVyIFByZXNzIEhhbmRsZXIgZm9yIHRoZSBidXR0b25cblx0ICogQHJldHVybnMgQnV0dG9uIHdpdGggdGhlIGdpdmVuIHNldHRpbmdzXG5cdCAqL1xuXHRwcml2YXRlIGdldEJ1dHRvbih0ZXh0OiBzdHJpbmcsIHR5cGU6IHN0cmluZywgcHJlc3NIYW5kbGVyOiBFdmVudEhhbmRsZXIpOiBCdXR0b24ge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uIHRleHQ9e3RleHR9IHR5cGU9e3R5cGV9IHdpZHRoPXtcImF1dG9cIn0gcHJlc3M9e3ByZXNzSGFuZGxlcn0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PEZsZXhJdGVtRGF0YSBtaW5XaWR0aD17XCIxMDAlXCJ9PjwvRmxleEl0ZW1EYXRhPlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEZvb3RlciB3aXRoIEJ1dHRvbnMuXG5cdCAqIEByZXR1cm5zIEZvb3RlclxuXHQgKi9cblxuXHRwcml2YXRlIGdldEZvb3RlcigpOiBUb29sYmFyIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRvb2xiYXI+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaXNTYXZlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9TQVZFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiRW1waGFzaXplZFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25BY2NlcHRBbmRTYXZlLmJpbmQodGhpcylcblx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0QnV0dG9uKFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuaXNTYXZlXG5cdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9TQVZFXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFXCIpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uSWdub3JlQW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0NPTlRJTlVFX0VESVRJTkdcIiksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgY3JlYXRlZCBhIEpTT04gTW9kZWwgZm9yIHRoZSBhY2NlcHQgYWxsIGRpYWxvZyBkYXRhLlxuXHQgKiBAcmV0dXJucyBUaGUgSlNPTiBNb2RlbCBmb3IgYWNjZXB0IGFsbCBkaWFsb2cuXG5cdCAqL1xuXHRnZXRBY2NlcHRBbGxNb2RlbCgpOiBKU09OTW9kZWwge1xuXHRcdGNvbnN0IGFjY2VwdE1vZGVsID0gbmV3IEpTT05Nb2RlbCgpO1xuXHRcdGNvbnN0IGl0ZW1zID0gW107XG5cdFx0Zm9yIChjb25zdCByZWNvbW1lbmRhdGlvbkRhdGEgb2YgdGhpcy5hY2NlcHRBbGxQYXJhbXM/LnJlY29tbWVuZGF0aW9uRGF0YSB8fCBbXSkge1xuXHRcdFx0Y29uc3QgZW50aXR5TmFtZUxhYmVsID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXRFbnRpdHlOYW1lKHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0IGFzIE9EYXRhVjRDb250ZXh0KSB8fCBcIlwiO1xuXG5cdFx0XHRjb25zdCBpZGVudGlmaWVyVGV4dHMgPVxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0ICYmIHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQubGVuZ3RoID4gMFxuXHRcdFx0XHRcdD8gYCR7ZW50aXR5TmFtZUxhYmVsfSAoJHtyZWNvbW1lbmRhdGlvbkRhdGEuY29udGV4dElkZW50aWZpZXJUZXh0fSlgXG5cdFx0XHRcdFx0OiBlbnRpdHlOYW1lTGFiZWw7XG5cblx0XHRcdGlmIChyZWNvbW1lbmRhdGlvbkRhdGEudmFsdWUgfHwgcmVjb21tZW5kYXRpb25EYXRhLnRleHQpIHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0Py5nZXRQYXRoKCkgKyBcIi9cIiArIHJlY29tbWVuZGF0aW9uRGF0YS5wcm9wZXJ0eVBhdGg7XG5cdFx0XHRcdGNvbnN0IGRpc3BsYXlNb2RlID0gc3RhbmRhcmRSZWNvbW1lbmRhdGlvbkhlbHBlci5nZXREaXNwbGF5TW9kZUZvclRhcmdldFBhdGgoXG5cdFx0XHRcdFx0dGFyZ2V0UGF0aCxcblx0XHRcdFx0XHR0aGlzLnZpZXc/LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE1vZGVsKCk/LmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGxpc3REYXRhID0ge1xuXHRcdFx0XHRcdGZpZWxkTmFtZTogdGhpcy5nZXRGaWVsZE5hbWUodGFyZ2V0UGF0aCkudmFsdWVPZigpLFxuXHRcdFx0XHRcdGZpZWxkVmFsdWU6IHRoaXMuZ2V0VGV4dChyZWNvbW1lbmRhdGlvbkRhdGEsIGRpc3BsYXlNb2RlKSxcblx0XHRcdFx0XHRpZGVudGlmaWVyVGV4dHM6IGlkZW50aWZpZXJUZXh0c1xuXHRcdFx0XHR9O1xuXHRcdFx0XHRpdGVtcy5wdXNoKGxpc3REYXRhKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YWNjZXB0TW9kZWwuc2V0RGF0YSh7IGl0ZW1zOiBpdGVtcyB9KTtcblx0XHRyZXR1cm4gYWNjZXB0TW9kZWw7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBtZXRob2QgZ3JvdXBzIHRoZSBjb250ZXh0cyBhY2NvcmRpbmcgdG8gdGhlIGlkZW50aWZpZXIgdGV4dHMuXG5cdCAqIEBwYXJhbSBjb250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBpdGVtXG5cdCAqIEByZXR1cm5zIFRoZSB0ZXh0IG9mIHRoZSBncm91cFxuXHQgKi9cblx0Z2V0R3JvdXAoY29udGV4dDogT0RhdGFWNENvbnRleHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBjb250ZXh0LmdldFByb3BlcnR5KFwiaWRlbnRpZmllclRleHRzXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbWVzc2FnZSB0byBiZSBzaG93biBpbiB0aGUgYWNjZXB0IGRpYWxvZy5cblx0ICogQHJldHVybnMgQSBtZXNzYWdlIHdpdGggdGhlIGRlc2lyZWQgdGV4dC5cblx0ICovXG5cdGdldE1lc3NhZ2UoKTogVGV4dCB7XG5cdFx0Y29uc3QgYWNjZXB0QWxsRGF0YSA9ICh0aGlzLnZpZXcuZ2V0TW9kZWwoXCJfYWNjZXB0RGlhbG9nTW9kZWxcIikgYXMgSlNPTk1vZGVsKT8uZ2V0RGF0YSgpPy5pdGVtcztcblx0XHRjb25zdCBtZXNzYWdlVGV4dCA9XG5cdFx0XHRhY2NlcHRBbGxEYXRhLmxlbmd0aCA+IDFcblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRcIiwgW2FjY2VwdEFsbERhdGEubGVuZ3RoXSlcblx0XHRcdFx0OiB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RFWFRfU0lOR1VMQVJcIik7XG5cdFx0cmV0dXJuIDxUZXh0IHRleHQ9e21lc3NhZ2VUZXh0fSAvPjtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVzIHRoZSBjb250ZW50IGZvciB0aGUgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIGxpc3QgYXMgY29udGVudCBvZiB0aGUgZGlhbG9nLlxuXHQgKi9cblx0Z2V0RGlhbG9nQ29udGVudCgpOiBMaXN0IHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PExpc3QgaXRlbXM9e3sgbW9kZWw6IFwiX2FjY2VwdERpYWxvZ01vZGVsXCIsIHBhdGg6IFwiL2l0ZW1zXCIsIHNvcnRlcjogbmV3IFNvcnRlcihcImlkZW50aWZpZXJUZXh0c1wiLCBmYWxzZSwgdGhpcy5nZXRHcm91cCkgfX0+XG5cdFx0XHRcdDxDdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHQ8SEJveCBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5CZWdpbiBzYXBVaVRpbnlNYXJnaW5cIj5cblx0XHRcdFx0XHRcdDxUZXh0IHRleHQ9XCJ7X2FjY2VwdERpYWxvZ01vZGVsPmZpZWxkTmFtZX06IHtfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGRWYWx1ZX1cIiAvPlxuXHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdDwvTGlzdD5cblx0XHQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoZSBidWlsZGluZyBibG9jayByZW5kZXIgZnVuY3Rpb24uXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmdcblx0ICovXG5cdGdldENvbnRlbnQoKTogRGlhbG9nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PERpYWxvZ1xuXHRcdFx0XHR0aXRsZT17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsLmdldFRleHQoXCJDX1JFQ09NTUVOREFUSU9OX0RJQUxPR19USVRMRVwiKX1cblx0XHRcdFx0c3RhdGU9e1ZhbHVlU3RhdGUuSW5mb3JtYXRpb259XG5cdFx0XHRcdHR5cGU9e1wiTWVzc2FnZVwifVxuXHRcdFx0XHRyZWY9e3RoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nfVxuXHRcdFx0XHRyZXNpemFibGU9e1widHJ1ZVwifVxuXHRcdFx0XHRjb250ZW50V2lkdGg9e1wiMzVyZW1cIn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRNZXNzYWdlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldERpYWxvZ0NvbnRlbnQoKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0Zm9vdGVyOiA8Pnt0aGlzLmdldEZvb3RlcigpfTwvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EaWFsb2c+XG5cdFx0KSBhcyBEaWFsb2c7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUFvQ1lBLDRCQUE0QjtFQUFBLFdBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtFQUFBLEdBQTVCQSw0QkFBNEIsS0FBNUJBLDRCQUE0QjtFQUFBQyxRQUFBLENBQUFELDRCQUFBLEdBQUFBLDRCQUFBO0VBQUEsSUFXM0JFLGdDQUFnQyxJQUFBQyxJQUFBLEdBSjVDQyxtQkFBbUIsQ0FBQztJQUNwQkMsSUFBSSxFQUFFLDZCQUE2QjtJQUNuQ0MsU0FBUyxFQUFFO0VBQ1osQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FRQUMsZUFBZSxDQUFDLENBQUMsRUFBQUwsSUFBQSxDQUFBTSxNQUFBLElBQUFDLE9BQUEsMEJBQUFDLHFCQUFBO0lBQUFDLGNBQUEsQ0FBQVYsZ0NBQUEsRUFBQVMscUJBQUE7SUFObEIsU0FBQVQsaUNBQVlXLEtBQXFELEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ2xFQSxLQUFBLEdBQUFILHFCQUFBLENBQUFJLElBQUEsT0FBTUYsS0FBSyxDQUFDO01BQUNHLDBCQUFBLENBQUFGLEtBQUEsaUNBQUFHLFdBQUEsRUFBQUMsc0JBQUEsQ0FBQUosS0FBQTtNQUNiQSxLQUFBLENBQUtLLElBQUksR0FBR04sS0FBSyxDQUFDTSxJQUFZO01BQzlCTCxLQUFBLENBQUtNLHdDQUF3QyxHQUFHQyxnQkFBZ0IsQ0FBQ1AsS0FBQSxDQUFLSyxJQUFJLENBQUM7TUFBQyxPQUFBTCxLQUFBO0lBQzdFO0lBQUNiLFFBQUEsQ0FBQUMsZ0NBQUEsR0FBQUEsZ0NBQUE7SUFBQSxJQUFBb0IsTUFBQSxHQUFBcEIsZ0NBQUEsQ0FBQXFCLFNBQUE7SUFlRDtBQUNEO0FBQ0E7SUFHQztBQUNEO0FBQ0E7SUFHQztBQUNEO0FBQ0E7QUFDQTtJQUhDRCxNQUFBLENBS09FLHNCQUFzQixHQUE3QixTQUFBQSx1QkFBQSxFQUFzRDtNQUNyRCxNQUFNQyxtQkFBbUIsR0FBRyxJQUFJLENBQUNDLDBCQUEwQixDQUFDLENBQUM7TUFDN0QsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDQyw0Q0FBNEMsQ0FBQ0gsbUJBQW1CLENBQUM7TUFDbEcsTUFBTUksZUFBcUMsR0FBRyxFQUFFO01BQ2hELElBQUlGLG1CQUFtQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ25DSCxtQkFBbUIsQ0FBQ0ksT0FBTyxDQUFFQyxjQUFjLElBQUs7VUFDL0MsTUFBTUMsT0FBTyxHQUFHLElBQUksQ0FBQ2QsSUFBSSxDQUFDZSxpQkFBaUIsQ0FBQyxDQUFDO1VBQzdDLE1BQU1DLFlBQW9CLEdBQUdILGNBQWMsQ0FBQ0csWUFBWSxHQUFHSCxjQUFjLENBQUNHLFlBQVksR0FBRyxFQUFFO1VBQzNGLElBQ0MsQ0FBQUYsT0FBTyxhQUFQQSxPQUFPLHVCQUFQQSxPQUFPLENBQUVHLFdBQVcsQ0FBQ0QsWUFBWSxDQUFDLE1BQUssSUFBSSxJQUMzQyxDQUFBRixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUcsV0FBVyxDQUFDRCxZQUFZLENBQUMsTUFBS0UsU0FBUyxJQUNoRCxDQUFBSixPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRUcsV0FBVyxDQUFDRCxZQUFZLENBQUMsS0FBSSxFQUFFLEVBQ3ZDO1lBQ0ROLGVBQWUsQ0FBQ1MsSUFBSSxDQUFDTixjQUFjLENBQUM7VUFDckM7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9ILGVBQWU7TUFDdEI7TUFDQTtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQVAsTUFBQSxDQUtPSSwwQkFBMEIsR0FBakMsU0FBQUEsMkJBQUEsRUFBNEQ7TUFBQSxJQUFBYSxxQkFBQTtNQUMzRCxNQUFNQyx1QkFBdUIsR0FBRyxFQUFBRCxxQkFBQSxHQUFDLElBQUksQ0FBQ3BCLElBQUksQ0FBQ2UsaUJBQWlCLENBQUMsQ0FBQyxjQUFBSyxxQkFBQSx1QkFBN0JBLHFCQUFBLENBQStCRSxPQUFPLENBQUMsQ0FBQyxDQUFDO01BQzFFLE1BQU1DLFVBQVUsR0FBRyxJQUFJLENBQUN2QixJQUFJLENBQUN3QixhQUFhLENBQUMsQ0FBbUI7TUFDOUQsTUFBTUMsYUFBYSxHQUFHRixVQUFVLENBQUNHLGVBQWUsQ0FBQyxDQUFDLENBQUNDLHFCQUFxQixDQUFDLENBQWtCO01BQzNGLE1BQU1DLFlBQVksR0FBR0wsVUFBVSxDQUFDRyxlQUFlLENBQUMsQ0FBQyxDQUFDRyxhQUFhLENBQUMsQ0FBQztNQUNqRSxNQUFNQyxZQUFZLEdBQUdGLFlBQVksR0FBR0gsYUFBYSxDQUFDTSxTQUFTLENBQUMsQ0FBQyxDQUFDQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUNGLFlBQVksR0FBRyxJQUFJO01BQ3JHLElBQUlGLFlBQVksSUFBSSxDQUFDRSxZQUFZLEVBQUU7UUFDbEMsTUFBTUcsZ0JBQWdCLEdBQUdSLGFBQWEsQ0FBQ1MsbUJBQW1CLENBQUMsQ0FBQztRQUM1RGIsdUJBQXVCLENBQUNGLElBQUksQ0FBQ2MsZ0JBQWdCLGFBQWhCQSxnQkFBZ0IsdUJBQWhCQSxnQkFBZ0IsQ0FBRVgsT0FBTyxDQUFDLENBQUMsQ0FBQztNQUMxRDtNQUNBLE9BQU9ELHVCQUF1QjtJQUMvQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQWxCLE1BQUEsQ0FLT00sNENBQTRDLEdBQW5ELFNBQUFBLDZDQUFvRDBCLFlBQW9DLEVBQXdCO01BQy9HLE1BQU0zQixtQkFBeUMsR0FBRyxFQUFFO01BQ3BELElBQUkyQixZQUFZLENBQUN4QixNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQzVCLE1BQU15QixvQkFBb0IsR0FBSSxJQUFJLENBQUNwQyxJQUFJLENBQUNxQyxRQUFRLENBQUMsQ0FBQyxDQUFnQkMsdUJBQXVCLENBQUMsQ0FBQztRQUMzRjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0FILFlBQVksQ0FBQ3ZCLE9BQU8sQ0FBRTJCLFdBQVcsSUFBSztVQUNyQyxJQUFJQSxXQUFXLEtBQUtyQixTQUFTLEVBQUU7WUFDOUIsTUFBTXNCLHFCQUFxQixHQUFHSixvQkFBb0IsQ0FBQ0ssU0FBUyxDQUFDRixXQUFXLENBQUM7WUFDekUsSUFBSUMscUJBQXFCLEVBQUU7Y0FDMUIsTUFBTUUsZ0JBQWdCLEdBQUdGLHFCQUFxQjtjQUM5QztBQUNOO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Y0FDTSxJQUFJLENBQUNHLDBCQUEwQixDQUFDRCxnQkFBZ0IsRUFBRWxDLG1CQUFtQixDQUFDO1lBQ3ZFO1VBQ0Q7UUFDRCxDQUFDLENBQUM7TUFDSDtNQUNBLE9BQU9BLG1CQUFtQjtJQUMzQjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQUwsTUFBQSxDQU1Rd0MsMEJBQTBCLEdBQWxDLFNBQUFBLDJCQUFtQ0QsZ0JBQXlDLEVBQUVsQyxtQkFBeUMsRUFBUTtNQUM5SCxJQUFJa0MsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsRUFBRTtRQUM5QyxNQUFNRSxvQkFBNkMsR0FBRyxDQUFDLENBQUM7UUFDeERBLG9CQUFvQixDQUFDLHVCQUF1QixDQUFDLEdBQUdGLGdCQUFnQixDQUFDLHVCQUF1QixDQUFtQjtRQUMzRyxLQUFLLE1BQU1HLFVBQVUsSUFBSUgsZ0JBQWdCLEVBQUU7VUFDMUMsTUFBTUksWUFBWSxHQUFHSixnQkFBZ0IsQ0FBQ0csVUFBVSxDQUFDO1VBQ2pELElBQUlDLFlBQVksRUFBRTtZQUNqQixJQUFLQSxZQUFZLENBQW9DLHVCQUF1QixDQUFDLEVBQUU7Y0FDOUUsSUFBSSxDQUFDSCwwQkFBMEIsQ0FBQ0QsZ0JBQWdCLENBQUNHLFVBQVUsQ0FBQyxFQUE2QnJDLG1CQUFtQixDQUFDO1lBQzlHLENBQUMsTUFBTSxJQUNOcUMsVUFBVSxDQUFDRSxRQUFRLENBQUMsMkNBQTJDLENBQUMsSUFDaEVGLFVBQVUsQ0FBQ0UsUUFBUSxDQUFDLGlEQUFpRCxDQUFDLElBQ3RFRixVQUFVLENBQUNFLFFBQVEsQ0FBQywwQ0FBMEMsQ0FBQyxFQUM5RDtjQUNESCxvQkFBb0IsQ0FBQ0MsVUFBVSxDQUFDLEdBQUdDLFlBQVk7WUFDaEQ7VUFDRDtRQUNEO1FBQ0EsTUFBTUUsSUFBSSxHQUFHQyxrQkFBa0IsQ0FBQ0Msb0NBQW9DLENBQ25FTixvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FDN0MsQ0FBQztRQUNBQSxvQkFBb0IsQ0FBQyx1QkFBdUIsQ0FBQyxDQUFnQ08saUJBQWlCLEdBQUdILElBQUksQ0FBQyxjQUFjLENBQUMsR0FDbkhBLElBQUksQ0FBQyxjQUFjLENBQUMsR0FDcEJBLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDeEIsSUFBSSxDQUFDSSxnQ0FBZ0MsQ0FDcENSLG9CQUFvQixFQUNwQkEsb0JBQW9CLENBQUMsdUJBQXVCLENBQUMsRUFDN0NwQyxtQkFDRCxDQUFDO01BQ0Y7SUFDRDtJQUNBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTkM7SUFBQUwsTUFBQSxDQVFRaUQsZ0NBQWdDLEdBQXhDLFNBQUFBLGlDQUNDQyxXQUFvQyxFQUNwQ0MscUJBQXFDLEVBQ3JDOUMsbUJBQXlDLEVBRWxDO01BQUEsSUFEUCtDLFVBQVUsR0FBQUMsU0FBQSxDQUFBN0MsTUFBQSxRQUFBNkMsU0FBQSxRQUFBdEMsU0FBQSxHQUFBc0MsU0FBQSxNQUFHLEVBQUU7TUFFZixLQUFLLE1BQU1YLFVBQVUsSUFBSVEsV0FBVyxFQUFFO1FBQ3JDLE1BQU1QLFlBQVksR0FBR08sV0FBVyxDQUFDUixVQUFVLENBQUM7UUFDNUMsSUFBSUMsWUFBWSxFQUFFO1VBQ2pCLE1BQU1XLHFCQUFxQixHQUN6QlgsWUFBWSxDQUFvQlksR0FBRyxJQUFLWixZQUFZLENBQW9CWSxHQUFHLENBQUMsK0JBQStCLENBQUM7VUFDOUcsSUFBSWIsVUFBVSxDQUFDRSxRQUFRLENBQUMsMkNBQTJDLENBQUMsRUFBRTtZQUNyRSxNQUFNL0IsWUFBWSxHQUFHNkIsVUFBVSxDQUFDYyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckYsTUFBTUMsa0JBQXNDLEdBQUc7Y0FDOUM5QyxPQUFPLEVBQUV3QyxxQkFBcUI7Y0FDOUJ0QyxZQUFZLEVBQUV1QyxVQUFVLEdBQUcsR0FBR0EsVUFBVSxJQUFJdkMsWUFBWSxFQUFFLEdBQUdBLFlBQVk7Y0FDekU2QyxLQUFLLEVBQUVmLFlBQXNCO2NBQzdCSyxpQkFBaUIsRUFBR0cscUJBQXFCLENBQWdDSCxpQkFBaUI7Y0FDMUZXLHFCQUFxQixFQUFFO1lBQ3hCLENBQUM7WUFDRCxNQUFNQyxXQUFXLEdBQUdWLFdBQVcsQ0FBQyxHQUFHckMsWUFBWSxpREFBaUQsQ0FBQztZQUNqRyxJQUFJK0MsV0FBVyxFQUFFO2NBQ2hCSCxrQkFBa0IsQ0FBQ0ksSUFBSSxHQUFHRCxXQUFxQjtZQUNoRDtZQUNBdkQsbUJBQW1CLENBQUNXLElBQUksQ0FBQ3lDLGtCQUFrQixDQUFDO1VBQzdDLENBQUMsTUFBTSxJQUFJLE9BQU9kLFlBQVksS0FBSyxRQUFRLElBQUksQ0FBQ21CLEtBQUssQ0FBQ0MsT0FBTyxDQUFDcEIsWUFBWSxDQUFDLElBQUksQ0FBQ1cscUJBQXFCLEVBQUU7WUFDdEcsSUFBSSxDQUFDTCxnQ0FBZ0MsQ0FDcENOLFlBQVksRUFDWlEscUJBQXFCLEVBQ3JCOUMsbUJBQW1CLEVBQ25CcUMsVUFDRCxDQUFDO1VBQ0Y7UUFDRDtNQUNEO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUExQyxNQUFBLENBS2FnRSxJQUFJLEdBQWpCLGVBQUFBLEtBQWtCQyxNQUFlLEVBQXFEO01BQUEsSUFBQUMscUJBQUE7TUFDckY7TUFDQSxNQUFNN0QsbUJBQW1CLEdBQUcsSUFBSSxDQUFDSCxzQkFBc0IsQ0FBQyxDQUFDO01BQ3pELElBQUlHLG1CQUFtQixDQUFDRyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQUEsSUFBQTJELHNCQUFBO1FBQ25DQyw0QkFBNEIsQ0FBQ0Msd0JBQXdCLENBQ3BEO1VBQUVDLGtCQUFrQixFQUFFakU7UUFBb0IsQ0FBQyxHQUFBOEQsc0JBQUEsR0FDM0MsSUFBSSxDQUFDdEUsSUFBSSxDQUFDZSxpQkFBaUIsQ0FBQyxDQUFDLGNBQUF1RCxzQkFBQSx1QkFBN0JBLHNCQUFBLENBQStCaEQsT0FBTyxDQUFDLENBQ3hDLENBQUM7UUFDRCxJQUFJLENBQUNvRCxlQUFlLEdBQUc7VUFDdEJELGtCQUFrQixFQUFFakU7UUFDckIsQ0FBQztNQUNGLENBQUMsTUFBTTtRQUFBLElBQUFtRSxVQUFBO1FBQ047UUFDQSxNQUFNQywwQkFBMEIsR0FBRyxFQUFBRCxVQUFBLEdBQUMsSUFBSSxDQUFDM0UsSUFBSSxjQUFBMkUsVUFBQSx1QkFBVEEsVUFBQSxDQUFXbkQsYUFBYSxDQUFDLENBQUMsRUFBb0JkLGVBQWUsQ0FBQ21FLDJCQUEyQixDQUFDLENBQUM7UUFDL0gsSUFBSUQsMEJBQTBCLEVBQUU7VUFBQSxJQUFBRSxXQUFBO1VBQy9CLElBQUksQ0FBQ0osZUFBZSxHQUFHLE1BQU0sRUFBQUksV0FBQSxHQUFDLElBQUksQ0FBQzlFLElBQUksY0FBQThFLFdBQUEsdUJBQVRBLFdBQUEsQ0FBV3RELGFBQWEsQ0FBQyxDQUFDLEVBQW9CZCxlQUFlLENBQUNxRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQ25ILENBQUMsTUFBTTtVQUNOLE9BQU83RCxTQUFTO1FBQ2pCO01BQ0Q7TUFDQSxNQUFNOEQsV0FBVyxHQUFHLElBQUksQ0FBQ0MsaUJBQWlCLENBQUMsQ0FBQztNQUM1QyxJQUFJLENBQUNqRixJQUFJLENBQUNrRixRQUFRLENBQUNGLFdBQVcsRUFBRSxvQkFBb0IsQ0FBQztNQUNyRCxJQUFJLEdBQUFYLHFCQUFBLEdBQUNXLFdBQVcsQ0FBQ0csT0FBTyxDQUFDLENBQUMsQ0FBQ0MsS0FBSyxjQUFBZixxQkFBQSxlQUEzQkEscUJBQUEsQ0FBNkIxRCxNQUFNLEdBQUU7UUFDekMsT0FBTzlCLDRCQUE0QixDQUFDd0csT0FBTztNQUM1QztNQUNBLElBQUksQ0FBQ2pCLE1BQU0sR0FBR0EsTUFBTTtNQUNwQixNQUFNa0IsTUFBTSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDaENELE1BQU0sYUFBTkEsTUFBTSx1QkFBTkEsTUFBTSxDQUFFRSxnQkFBZ0IsQ0FBQyxJQUFJLENBQUNDLGlCQUFpQixDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDM0QsSUFBSSxDQUFDMUYsSUFBSSxDQUFDMkYsWUFBWSxDQUFDTCxNQUFvQixDQUFDO01BQzVDQSxNQUFNLGFBQU5BLE1BQU0sdUJBQU5BLE1BQU0sQ0FBRW5CLElBQUksQ0FBQyxDQUFDO01BQ2QsT0FBTyxJQUFJeUIsT0FBTyxDQUFDLENBQUNDLE9BQU8sRUFBRUMsTUFBTSxLQUFLO1FBQ3ZDLElBQUksQ0FBQ0MsY0FBYyxHQUFHRixPQUFPO1FBQzdCLElBQUksQ0FBQ0csYUFBYSxHQUFHRixNQUFNO01BQzVCLENBQUMsQ0FBQztJQUNIOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTNGLE1BQUEsQ0FJTzhGLEtBQUssR0FBWixTQUFBQSxNQUFBLEVBQXFCO01BQUEsSUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7TUFDcEIsQ0FBQUQscUJBQUEsT0FBSSxDQUFDRSwyQkFBMkIsQ0FBQ0MsT0FBTyxjQUFBSCxxQkFBQSx1QkFBeENBLHFCQUFBLENBQTBDRCxLQUFLLENBQUMsQ0FBQztNQUNqRCxDQUFBRSxzQkFBQSxPQUFJLENBQUNDLDJCQUEyQixDQUFDQyxPQUFPLGNBQUFGLHNCQUFBLHVCQUF4Q0Esc0JBQUEsQ0FBMENHLE9BQU8sQ0FBQyxDQUFDO0lBQ3BEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUFuRyxNQUFBLENBR2NvRyxlQUFlLEdBQTdCLGVBQUFBLGdCQUFBLEVBQStDO01BQzlDLElBQUk7UUFBQSxJQUFBQyxXQUFBO1FBQ0gsTUFBTUMsVUFBVSxHQUFHLE1BQU0sRUFBQUQsV0FBQSxHQUFDLElBQUksQ0FBQ3hHLElBQUksY0FBQXdHLFdBQUEsdUJBQVRBLFdBQUEsQ0FBV2hGLGFBQWEsQ0FBQyxDQUFDLEVBQW9CZCxlQUFlLENBQUNnRyxxQkFBcUIsQ0FDNUcsSUFBSSxDQUFDaEMsZUFDTixDQUFDO1FBQ0QsSUFBSSxDQUFDK0IsVUFBVSxFQUFFO1VBQ2hCLElBQUksQ0FBQ1QsYUFBYSxDQUFDLGVBQWUsQ0FBQztRQUNwQztRQUNBLElBQUksQ0FBQ0QsY0FBYyxDQUFDbEgsNEJBQTRCLENBQUM4SCxNQUFNLENBQUM7TUFDekQsQ0FBQyxDQUFDLE1BQU07UUFDUEMsR0FBRyxDQUFDQyxLQUFLLENBQUMsK0JBQStCLENBQUM7UUFDMUMsSUFBSSxDQUFDYixhQUFhLENBQUMsZUFBZSxDQUFDO01BQ3BDLENBQUMsU0FBUztRQUNULElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUM7TUFDYjtJQUNEOztJQUVBO0FBQ0Q7QUFDQSxPQUZDO0lBQUE5RixNQUFBLENBR1EyRyxlQUFlLEdBQXZCLFNBQUFBLGdCQUFBLEVBQWdDO01BQUEsSUFBQUMsV0FBQTtNQUMvQixFQUFBQSxXQUFBLEdBQUMsSUFBSSxDQUFDL0csSUFBSSxjQUFBK0csV0FBQSx1QkFBVEEsV0FBQSxDQUFXdkYsYUFBYSxDQUFDLENBQUMsRUFBb0JkLGVBQWUsQ0FBQ3NHLCtCQUErQixDQUFDLENBQUM7TUFDaEcsSUFBSSxDQUFDakIsY0FBYyxDQUFDbEgsNEJBQTRCLENBQUNvSSxNQUFNLENBQUM7TUFDeEQsSUFBSSxDQUFDaEIsS0FBSyxDQUFDLENBQUM7SUFDYjs7SUFFQTtBQUNEO0FBQ0EsT0FGQztJQUFBOUYsTUFBQSxDQUdRc0YsaUJBQWlCLEdBQXpCLFNBQUFBLGtCQUFBLEVBQWtDO01BQ2pDLElBQUksQ0FBQ00sY0FBYyxDQUFDbEgsNEJBQTRCLENBQUNxSSxRQUFRLENBQUM7TUFDMUQsSUFBSSxDQUFDakIsS0FBSyxDQUFDLENBQUM7SUFDYjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQTlGLE1BQUEsQ0FLUWdILFlBQVksR0FBcEIsU0FBQUEsYUFBcUJDLFVBQWtCLEVBQVU7TUFBQSxJQUFBQyxXQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQ2hELE1BQU1DLHVCQUF1QixHQUFHM0Usa0JBQWtCLENBQUM0RSx3Q0FBd0MsQ0FDMUZULFVBQVUsR0FBQUMsV0FBQSxHQUNWLElBQUksQ0FBQ3JILElBQUksY0FBQXFILFdBQUEsd0JBQUFDLHFCQUFBLEdBQVRELFdBQUEsQ0FBV3RHLGlCQUFpQixDQUFDLENBQUMsY0FBQXVHLHFCQUFBLHdCQUFBQyxzQkFBQSxHQUE5QkQscUJBQUEsQ0FBZ0NqRixRQUFRLENBQUMsQ0FBQyxjQUFBa0Ysc0JBQUEsdUJBQTFDQSxzQkFBQSxDQUE0Q08sWUFBWSxDQUFDLENBQzFELENBQUM7TUFDRCxPQUNDLENBQUFGLHVCQUF1QixhQUF2QkEsdUJBQXVCLHdCQUFBSixxQkFBQSxHQUF2QkksdUJBQXVCLENBQUVHLFlBQVksY0FBQVAscUJBQUEsd0JBQUFDLHNCQUFBLEdBQXJDRCxxQkFBQSxDQUF1Q1EsV0FBVyxjQUFBUCxzQkFBQSx3QkFBQUMsc0JBQUEsR0FBbERELHNCQUFBLENBQW9EUSxNQUFNLGNBQUFQLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUExREQsc0JBQUEsQ0FBNERRLEtBQUssY0FBQVAsc0JBQUEsdUJBQWpFQSxzQkFBQSxDQUFtRVEsUUFBUSxDQUFDLENBQUMsS0FDN0VmLFVBQVUsQ0FBQ3pELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ3lELFVBQVUsQ0FBQ3pELEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQ2hELE1BQU0sR0FBRyxDQUFDLENBQUM7SUFFekQ7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BTEM7SUFBQVIsTUFBQSxDQU1RaUksT0FBTyxHQUFmLFNBQUFBLFFBQWdCdkgsY0FBOEMsRUFBRXdILFdBQW1CLEVBQVU7TUFDNUYsSUFBSXhILGNBQWMsQ0FBQ21ELElBQUksSUFBSW5ELGNBQWMsQ0FBQ2dELEtBQUssRUFBRTtRQUNoRCxRQUFRd0UsV0FBVztVQUNsQixLQUFLLGFBQWE7WUFDakIsT0FBT3hILGNBQWMsQ0FBQ21ELElBQUk7VUFDM0IsS0FBSyxrQkFBa0I7WUFDdEIsT0FBT3NFLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQUMxSCxjQUFjLENBQUNtRCxJQUFJLEVBQUVuRCxjQUFjLENBQUNnRCxLQUFLLENBQUM7VUFDckYsS0FBSyxrQkFBa0I7WUFDdEIsT0FBT3lFLGVBQWUsQ0FBQ0Msa0JBQWtCLENBQUMxSCxjQUFjLENBQUNnRCxLQUFLLEVBQUVoRCxjQUFjLENBQUNtRCxJQUFJLENBQUM7VUFDckYsS0FBSyxPQUFPO1lBQ1gsT0FBT25ELGNBQWMsQ0FBQ2dELEtBQUs7UUFDN0I7TUFDRDtNQUNBLE9BQU9oRCxjQUFjLENBQUNnRCxLQUFLLElBQUksRUFBRTtJQUNsQzs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQU5DO0lBQUExRCxNQUFBLENBT1FxSSxTQUFTLEdBQWpCLFNBQUFBLFVBQWtCeEUsSUFBWSxFQUFFeUUsSUFBWSxFQUFFQyxZQUEwQixFQUFVO01BQ2pGLE9BQ0NDLElBQUEsQ0FBQ0MsTUFBTTtRQUFDNUUsSUFBSSxFQUFFQSxJQUFLO1FBQUN5RSxJQUFJLEVBQUVBLElBQUs7UUFBQ0ksS0FBSyxFQUFFLE1BQU87UUFBQ0MsS0FBSyxFQUFFSixZQUFhO1FBQUFLLFFBQUEsRUFDakU7VUFDQUMsVUFBVSxFQUNUTCxJQUFBLENBQUFNLFNBQUE7WUFBQUYsUUFBQSxFQUNDSixJQUFBLENBQUNPLFlBQVk7Y0FBQ0MsUUFBUSxFQUFFO1lBQU8sQ0FBZTtVQUFDLENBQzlDO1FBRUo7TUFBQyxDQUNNLENBQUM7SUFFWDs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUFoSixNQUFBLENBS1FpSixTQUFTLEdBQWpCLFNBQUFBLFVBQUEsRUFBNkI7TUFDNUIsT0FDQ1QsSUFBQSxDQUFDVSxPQUFPO1FBQUFOLFFBQUEsRUFDTjtVQUNBTyxPQUFPLEVBQ05DLEtBQUEsQ0FBQU4sU0FBQTtZQUFBRixRQUFBLEdBQ0NKLElBQUEsQ0FBQ2EsYUFBYSxJQUFFLENBQUMsRUFDaEIsSUFBSSxDQUFDaEIsU0FBUyxDQUNkLElBQUksQ0FBQ3BFLE1BQU0sR0FDUixJQUFJLENBQUNuRSx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxHQUNoRyxJQUFJLENBQUNuSSx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMxRixZQUFZLEVBQ1osSUFBSSxDQUFDN0IsZUFBZSxDQUFDYixJQUFJLENBQUMsSUFBSSxDQUMvQixDQUFDLEVBQ0EsSUFBSSxDQUFDOEMsU0FBUyxDQUNkLElBQUksQ0FBQ3BFLE1BQU0sR0FDUixJQUFJLENBQUNuRSx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBQyxHQUNoRyxJQUFJLENBQUNuSSx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUMxRixPQUFPLEVBQ1AsSUFBSSxDQUFDdEIsZUFBZSxDQUFDcEIsSUFBSSxDQUFDLElBQUksQ0FDL0IsQ0FBQyxFQUNBLElBQUksQ0FBQzhDLFNBQVMsQ0FDZCxJQUFJLENBQUN2SSx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxFQUNqRyxPQUFPLEVBQ1AsSUFBSSxDQUFDM0MsaUJBQWlCLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQ2pDLENBQUM7VUFBQSxDQUNBO1FBRUo7TUFBQyxDQUNPLENBQUM7SUFFWjs7SUFFQTtBQUNEO0FBQ0E7QUFDQSxPQUhDO0lBQUF2RixNQUFBLENBSUE4RSxpQkFBaUIsR0FBakIsU0FBQUEsa0JBQUEsRUFBK0I7TUFDOUIsTUFBTUQsV0FBVyxHQUFHLElBQUl5RSxTQUFTLENBQUMsQ0FBQztNQUNuQyxNQUFNckUsS0FBSyxHQUFHLEVBQUU7TUFDaEIsS0FBSyxNQUFNWCxrQkFBa0IsSUFBSSxFQUFBaUYscUJBQUEsT0FBSSxDQUFDaEYsZUFBZSxjQUFBZ0YscUJBQUEsdUJBQXBCQSxxQkFBQSxDQUFzQmpGLGtCQUFrQixLQUFJLEVBQUUsRUFBRTtRQUFBLElBQUFpRixxQkFBQTtRQUNoRixNQUFNQyxlQUFlLEdBQUdwRiw0QkFBNEIsQ0FBQ3FGLGFBQWEsQ0FBQ25GLGtCQUFrQixDQUFDM0QsT0FBeUIsQ0FBQyxJQUFJLEVBQUU7UUFFdEgsTUFBTStJLGVBQWUsR0FDcEJwRixrQkFBa0IsQ0FBQ1gscUJBQXFCLElBQUlXLGtCQUFrQixDQUFDWCxxQkFBcUIsQ0FBQ25ELE1BQU0sR0FBRyxDQUFDLEdBQzVGLEdBQUdnSixlQUFlLEtBQUtsRixrQkFBa0IsQ0FBQ1gscUJBQXFCLEdBQUcsR0FDbEU2RixlQUFlO1FBRW5CLElBQUlsRixrQkFBa0IsQ0FBQ1osS0FBSyxJQUFJWSxrQkFBa0IsQ0FBQ1QsSUFBSSxFQUFFO1VBQUEsSUFBQThGLHFCQUFBLEVBQUFDLFdBQUEsRUFBQUMscUJBQUEsRUFBQUMsc0JBQUE7VUFDeEQsTUFBTTdDLFVBQVUsR0FBRyxFQUFBMEMscUJBQUEsR0FBQXJGLGtCQUFrQixDQUFDM0QsT0FBTyxjQUFBZ0oscUJBQUEsdUJBQTFCQSxxQkFBQSxDQUE0QnhJLE9BQU8sQ0FBQyxDQUFDLElBQUcsR0FBRyxHQUFHbUQsa0JBQWtCLENBQUN6RCxZQUFZO1VBQ2hHLE1BQU1xSCxXQUFXLEdBQUc5RCw0QkFBNEIsQ0FBQzJGLDJCQUEyQixDQUMzRTlDLFVBQVUsR0FBQTJDLFdBQUEsR0FDVixJQUFJLENBQUMvSixJQUFJLGNBQUErSixXQUFBLHdCQUFBQyxxQkFBQSxHQUFURCxXQUFBLENBQVdoSixpQkFBaUIsQ0FBQyxDQUFDLGNBQUFpSixxQkFBQSx3QkFBQUMsc0JBQUEsR0FBOUJELHFCQUFBLENBQWdDM0gsUUFBUSxDQUFDLENBQUMsY0FBQTRILHNCQUFBLHVCQUExQ0Esc0JBQUEsQ0FBNENuQyxZQUFZLENBQUMsQ0FDMUQsQ0FBQztVQUNELE1BQU1xQyxRQUFRLEdBQUc7WUFDaEJDLFNBQVMsRUFBRSxJQUFJLENBQUNqRCxZQUFZLENBQUNDLFVBQVUsQ0FBQyxDQUFDaUQsT0FBTyxDQUFDLENBQUM7WUFDbERDLFVBQVUsRUFBRSxJQUFJLENBQUNsQyxPQUFPLENBQUMzRCxrQkFBa0IsRUFBRTRELFdBQVcsQ0FBQztZQUN6RHdCLGVBQWUsRUFBRUE7VUFDbEIsQ0FBQztVQUNEekUsS0FBSyxDQUFDakUsSUFBSSxDQUFDZ0osUUFBUSxDQUFDO1FBQ3JCO01BQ0Q7TUFDQW5GLFdBQVcsQ0FBQ3VGLE9BQU8sQ0FBQztRQUFFbkYsS0FBSyxFQUFFQTtNQUFNLENBQUMsQ0FBQztNQUNyQyxPQUFPSixXQUFXO0lBQ25COztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBN0UsTUFBQSxDQUtBcUssUUFBUSxHQUFSLFNBQUFBLFNBQVMxSixPQUF1QixFQUFVO01BQ3pDLE9BQU9BLE9BQU8sQ0FBQ0csV0FBVyxDQUFDLGlCQUFpQixDQUFDO0lBQzlDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQWQsTUFBQSxDQUlBc0ssVUFBVSxHQUFWLFNBQUFBLFdBQUEsRUFBbUI7TUFBQSxJQUFBQyxtQkFBQSxFQUFBQyxxQkFBQTtNQUNsQixNQUFNQyxhQUFhLElBQUFGLG1CQUFBLEdBQUksSUFBSSxDQUFDMUssSUFBSSxDQUFDcUMsUUFBUSxDQUFDLG9CQUFvQixDQUFDLGNBQUFxSSxtQkFBQSx3QkFBQUMscUJBQUEsR0FBekNELG1CQUFBLENBQXlEdkYsT0FBTyxDQUFDLENBQUMsY0FBQXdGLHFCQUFBLHVCQUFsRUEscUJBQUEsQ0FBb0V2RixLQUFLO01BQy9GLE1BQU15RixXQUFXLEdBQ2hCRCxhQUFhLENBQUNqSyxNQUFNLEdBQUcsQ0FBQyxHQUNyQixJQUFJLENBQUNWLHdDQUF3QyxDQUFDbUksT0FBTyxDQUFDLDhCQUE4QixFQUFFLENBQUN3QyxhQUFhLENBQUNqSyxNQUFNLENBQUMsQ0FBQyxHQUM3RyxJQUFJLENBQUNWLHdDQUF3QyxDQUFDbUksT0FBTyxDQUFDLHVDQUF1QyxDQUFDO01BQ2xHLE9BQU9PLElBQUEsQ0FBQ21DLElBQUk7UUFBQzlHLElBQUksRUFBRTZHO01BQVksQ0FBRSxDQUFDO0lBQ25DOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTFLLE1BQUEsQ0FJQTRLLGdCQUFnQixHQUFoQixTQUFBQSxpQkFBQSxFQUF5QjtNQUN4QixPQUNDcEMsSUFBQSxDQUFDcUMsSUFBSTtRQUFDNUYsS0FBSyxFQUFFO1VBQUU2RixLQUFLLEVBQUUsb0JBQW9CO1VBQUVDLElBQUksRUFBRSxRQUFRO1VBQUVDLE1BQU0sRUFBRSxJQUFJQyxNQUFNLENBQUMsaUJBQWlCLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQ1osUUFBUTtRQUFFLENBQUU7UUFBQXpCLFFBQUEsRUFDekhKLElBQUEsQ0FBQzBDLGNBQWM7VUFBQXRDLFFBQUEsRUFDZEosSUFBQSxDQUFDMkMsSUFBSTtZQUFDQyxLQUFLLEVBQUMsdUNBQXVDO1lBQUF4QyxRQUFBLEVBQ2xESixJQUFBLENBQUNtQyxJQUFJO2NBQUM5RyxJQUFJLEVBQUM7WUFBaUUsQ0FBRTtVQUFDLENBQzFFO1FBQUMsQ0FDUTtNQUFDLENBQ1osQ0FBQztJQUVUOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQTdELE1BQUEsQ0FJQW9GLFVBQVUsR0FBVixTQUFBQSxXQUFBLEVBQXFCO01BQ3BCLE9BQ0NvRCxJQUFBLENBQUM2QyxNQUFNO1FBQ05DLEtBQUssRUFBRSxJQUFJLENBQUN4TCx3Q0FBd0MsQ0FBQ21JLE9BQU8sQ0FBQywrQkFBK0IsQ0FBRTtRQUM5RnNELEtBQUssRUFBRUMsVUFBVSxDQUFDQyxXQUFZO1FBQzlCbkQsSUFBSSxFQUFFLFNBQVU7UUFDaEJvRCxHQUFHLEVBQUUsSUFBSSxDQUFDekYsMkJBQTRCO1FBQ3RDMEYsU0FBUyxFQUFFLE1BQU87UUFDbEJDLFlBQVksRUFBRSxPQUFRO1FBQUFoRCxRQUFBLEVBRXJCO1VBQ0FPLE9BQU8sRUFDTkMsS0FBQSxDQUFBTixTQUFBO1lBQUFGLFFBQUEsR0FDRSxJQUFJLENBQUMwQixVQUFVLENBQUMsQ0FBQyxFQUNqQixJQUFJLENBQUNNLGdCQUFnQixDQUFDLENBQUM7VUFBQSxDQUN2QixDQUNGO1VBQ0RpQixNQUFNLEVBQUVyRCxJQUFBLENBQUFNLFNBQUE7WUFBQUYsUUFBQSxFQUFHLElBQUksQ0FBQ0ssU0FBUyxDQUFDO1VBQUMsQ0FBRztRQUMvQjtNQUFDLENBQ00sQ0FBQztJQUVYLENBQUM7SUFBQSxPQUFBckssZ0NBQUE7RUFBQSxFQWxlb0RrTixvQkFBb0IsSUFBQW5NLFdBQUEsR0FBQW9NLHlCQUFBLENBQUEzTSxPQUFBLENBQUFhLFNBQUEsa0NBQUFoQixLQUFBO0lBQUErTSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsS0FBQS9NLE9BQUEsTUFBQUQsTUFBQTtFQUFBUixRQUFBLENBQUFDLGdDQUFBLEdBQUFBLGdDQUFBO0VBQUEsT0FBQUQsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119
471
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIiwiX2V4cG9ydHMiLCJDb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dCbG9jayIsIl9kZWMiLCJkZWZpbmVCdWlsZGluZ0Jsb2NrIiwibmFtZSIsIm5hbWVzcGFjZSIsIl9kZWMyIiwiZGVmaW5lUmVmZXJlbmNlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9SdW50aW1lQnVpbGRpbmdCbG9jayIsIl9pbmhlcml0c0xvb3NlIiwicHJvcHMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInZpZXciLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIl9wcm90byIsInByb3RvdHlwZSIsImdldE9wZW5SZWNvbW1lbmRhdGlvbnMiLCJ2aXNpYmxlQ29udGV4dFBhdGhzIiwiZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMiLCJvcGVuUmVjb21tZW5kYXRpb25zIiwiZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvclZpc2libGVDb250ZXh0UGF0aHMiLCJyZWNvbW1lbmRhdGlvbnMiLCJsZW5ndGgiLCJmb3JFYWNoIiwicmVjb21tZW5kYXRpb24iLCJjb250ZXh0IiwiZ2V0QmluZGluZ0NvbnRleHQiLCJwcm9wZXJ0eVBhdGgiLCJnZXRQcm9wZXJ0eSIsInVuZGVmaW5lZCIsInB1c2giLCJfdGhpcyR2aWV3JGdldEJpbmRpbmciLCJ2aXNpYmxlUGFnZUNvbnRleHRQYXRocyIsImdldFBhdGgiLCJjb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImZjbENvbnRyb2xsZXIiLCJnZXRBcHBDb21wb25lbnQiLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJpc0ZjbEVuYWJsZWQiLCJfaXNGY2xFbmFibGVkIiwiaXNGdWxsU2NyZWVuIiwiZ2V0SGVscGVyIiwiZ2V0Q3VycmVudFVJU3RhdGUiLCJyaWdodE1vc3RDb250ZXh0IiwiZ2V0UmlnaHRtb3N0Q29udGV4dCIsImNvbnRleHRQYXRocyIsImxvY2FsQW5ub3RhdGlvbk1vZGVsIiwiZ2V0TW9kZWwiLCJnZXRMb2NhbEFubm90YXRpb25Nb2RlbCIsImNvbnRleHRQYXRoIiwibG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwiZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbk9iamVjdCIsImZldGNoTG9jYWxBbm5vdGF0aW9uT2JqZWN0IiwicmVjb21tZW5kYXRpb25PYmplY3QiLCJjdXJyZW50S2V5IiwiY3VycmVudFZhbHVlIiwiaW5jbHVkZXMiLCJrZXlzIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RFbnRpdHlLZXlzIiwiY29udGV4dElkZW50aWZpZXIiLCJnZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dCIsImNvbnRleHREYXRhIiwicmVjb21tZW5kYXRpb25Db250ZXh0IiwiY29udGV4dEtleSIsImFyZ3VtZW50cyIsImN1cnJlbnRWYWx1ZUlzQ29udGV4dCIsImlzQSIsInNwbGl0Iiwib3BlblJlY29tbWVuZGF0aW9uIiwidmFsdWUiLCJjb250ZXh0SWRlbnRpZmllclRleHQiLCJkZXNjcmlwdGlvbiIsInRleHQiLCJBcnJheSIsImlzQXJyYXkiLCJvcGVuIiwiaXNTYXZlIiwiX2FjY2VwdE1vZGVsJGdldERhdGEkIiwiX3RoaXMkdmlldyRnZXRCaW5kaW5nMiIsInN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIiLCJhZGRDb250ZXh0SWRlbnRpZmllclRleHQiLCJyZWNvbW1lbmRhdGlvbkRhdGEiLCJhY2NlcHRBbGxQYXJhbXMiLCJfdGhpcyR2aWV3IiwibGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QiLCJjaGVja0lmUmVjb21tZW5kYXRpb25zRXhpc3QiLCJfdGhpcyR2aWV3MiIsImZldGNoQWNjZXB0QWxsUGFyYW1zIiwiYWNjZXB0TW9kZWwiLCJnZXRBY2NlcHRBbGxNb2RlbCIsInNldE1vZGVsIiwiZ2V0RGF0YSIsIml0ZW1zIiwiU2tpcHBlZCIsImRpYWxvZyIsImdldENvbnRlbnQiLCJzZXRFc2NhcGVIYW5kbGVyIiwib25Db250aW51ZUVkaXRpbmciLCJiaW5kIiwiYWRkRGVwZW5kZW50IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJwcm9taXNlUmVzb2x2ZSIsInByb21pc2VSZWplY3QiLCJjbG9zZSIsIl90aGlzJGNvbmZpcm1SZWNvbW1lbiIsIl90aGlzJGNvbmZpcm1SZWNvbW1lbjIiLCJjb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2ciLCJjdXJyZW50IiwiZGVzdHJveSIsIm9uQWNjZXB0QW5kU2F2ZSIsIl90aGlzJHZpZXczIiwiaXNBY2NlcHRlZCIsImFjY2VwdFJlY29tbWVuZGF0aW9ucyIsIkFjY2VwdCIsIkxvZyIsImVycm9yIiwib25JZ25vcmVBbmRTYXZlIiwiX3RoaXMkdmlldzQiLCJpZ25vcmVSZWNvbW1lbmRhdGlvbkZvckNvbnRleHRzIiwiSWdub3JlIiwiQ29udGludWUiLCJnZXRGaWVsZE5hbWUiLCJ0YXJnZXRQYXRoIiwiX3RoaXMkdmlldzUiLCJfdGhpcyR2aWV3NSRnZXRCaW5kaW4iLCJfdGhpcyR2aWV3NSRnZXRCaW5kaW4yIiwiX2ludm9sdmVkRGF0YU1vZGVsT2JqIiwiX2ludm9sdmVkRGF0YU1vZGVsT2JqMiIsIl9pbnZvbHZlZERhdGFNb2RlbE9iajMiLCJfaW52b2x2ZWREYXRhTW9kZWxPYmo0IiwiaW52b2x2ZWREYXRhTW9kZWxPYmplY3QiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHNGb3JUYXJnZXRQYXRoIiwiZ2V0TWV0YU1vZGVsIiwidGFyZ2V0T2JqZWN0IiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJMYWJlbCIsInRvU3RyaW5nIiwiZ2V0VGV4dCIsImRpc3BsYXlNb2RlIiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0V2l0aEJyYWNrZXRzIiwiZ2V0QnV0dG9uIiwidHlwZSIsInByZXNzSGFuZGxlciIsIl9qc3giLCJCdXR0b24iLCJ3aWR0aCIsInByZXNzIiwiY2hpbGRyZW4iLCJsYXlvdXREYXRhIiwiX0ZyYWdtZW50IiwiRmxleEl0ZW1EYXRhIiwibWluV2lkdGgiLCJnZXRGb290ZXIiLCJUb29sYmFyIiwiY29udGVudCIsIl9qc3hzIiwiVG9vbGJhclNwYWNlciIsIl9nZXREaWFsb2dCdXR0b25UZXh0Iiwic2F2ZSIsInJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24iLCJpc0FjY2VwdEJ1dHRvbiIsIl90aGlzJHZpZXckZ2V0QmluZGluZzMiLCJIYXNBY3RpdmVFbnRpdHkiLCJKU09OTW9kZWwiLCJfdGhpcyRhY2NlcHRBbGxQYXJhbXMiLCJlbnRpdHlOYW1lTGFiZWwiLCJnZXRFbnRpdHlOYW1lIiwiaWRlbnRpZmllclRleHRzIiwiX3JlY29tbWVuZGF0aW9uRGF0YSRjIiwiX3RoaXMkdmlldzYiLCJfdGhpcyR2aWV3NiRnZXRCaW5kaW4iLCJfdGhpcyR2aWV3NiRnZXRCaW5kaW4yIiwiZ2V0RGlzcGxheU1vZGVGb3JUYXJnZXRQYXRoIiwibGlzdERhdGEiLCJmaWVsZE5hbWUiLCJ2YWx1ZU9mIiwiZmllbGRWYWx1ZSIsInNldERhdGEiLCJnZXRHcm91cCIsImdldE1lc3NhZ2UiLCJfdGhpcyR2aWV3JGdldE1vZGVsIiwiX3RoaXMkdmlldyRnZXRNb2RlbCRnIiwiYWNjZXB0QWxsRGF0YSIsIm1lc3NhZ2VUZXh0IiwiVGV4dCIsImdldERpYWxvZ0NvbnRlbnQiLCJMaXN0IiwibW9kZWwiLCJwYXRoIiwic29ydGVyIiwiU29ydGVyIiwiQ3VzdG9tTGlzdEl0ZW0iLCJIQm94IiwiY2xhc3MiLCJEaWFsb2ciLCJ0aXRsZSIsInN0YXRlIiwiVmFsdWVTdGF0ZSIsIkluZm9ybWF0aW9uIiwicmVmIiwicmVzaXphYmxlIiwiY29udGVudFdpZHRoIiwiZm9vdGVyIiwiUnVudGltZUJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5ibG9jay50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB7IGRlZmluZVJlZmVyZW5jZSB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIHsgUmVmIH0gZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IHsgZGVmaW5lQnVpbGRpbmdCbG9jayB9IGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy90ZW1wbGF0aW5nL0J1aWxkaW5nQmxvY2tTdXBwb3J0XCI7XG5pbXBvcnQgUnVudGltZUJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL3RlbXBsYXRpbmcvUnVudGltZUJ1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBDdXN0b21MaXN0SXRlbSBmcm9tIFwic2FwL20vQ3VzdG9tTGlzdEl0ZW1cIjtcbmltcG9ydCBEaWFsb2cgZnJvbSBcInNhcC9tL0RpYWxvZ1wiO1xuaW1wb3J0IEZsZXhJdGVtRGF0YSBmcm9tIFwic2FwL20vRmxleEl0ZW1EYXRhXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IExpc3QgZnJvbSBcInNhcC9tL0xpc3RcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVG9vbGJhciBmcm9tIFwic2FwL20vVG9vbGJhclwiO1xuaW1wb3J0IFRvb2xiYXJTcGFjZXIgZnJvbSBcInNhcC9tL1Rvb2xiYXJTcGFjZXJcIjtcbmltcG9ydCB0eXBlIFVJNUVsZW1lbnQgZnJvbSBcInNhcC91aS9jb3JlL0VsZW1lbnRcIjtcbmltcG9ydCB7IFZhbHVlU3RhdGUgfSBmcm9tIFwic2FwL3VpL2NvcmUvbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgVmlldyBmcm9tIFwic2FwL3VpL2NvcmUvbXZjL1ZpZXdcIjtcbmltcG9ydCBTb3J0ZXIgZnJvbSBcInNhcC91aS9tb2RlbC9Tb3J0ZXJcIjtcbmltcG9ydCBKU09OTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9qc29uL0pTT05Nb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBkZWZhdWx0IGFzIE9EYXRhVjRDb250ZXh0IH0gZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBFdmVudEhhbmRsZXIgfSBmcm9tIFwidHlwZXMvZXh0ZW5zaW9uX3R5cGVzXCI7XG5pbXBvcnQgdHlwZSBCYXNlQ29udHJvbGxlciBmcm9tIFwiLi4vLi4vQmFzZUNvbnRyb2xsZXJcIjtcbmltcG9ydCB0eXBlIFBhZ2VDb250cm9sbGVyIGZyb20gXCIuLi8uLi9QYWdlQ29udHJvbGxlclwiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VNb2RlbCBmcm9tIFwiLi4vLi4vUmVzb3VyY2VNb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBBY2NlcHRBbGxQYXJhbXMsIFJlY29tbWVuZGF0aW9uRGF0YSB9IGZyb20gXCIuLi8uLi9jb250cm9sbGVyZXh0ZW5zaW9ucy9SZWNvbW1lbmRhdGlvbnNcIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcIi4uLy4uL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8gfSBmcm9tIFwiLi4vLi4vaGVscGVycy9TdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyXCI7XG5pbXBvcnQgeyBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLCB0eXBlIFN0YW5kYXJkUmVjb21tZW5kYXRpb25EYXRhVHlwZSB9IGZyb20gXCIuLi8uLi9oZWxwZXJzL1N0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXJcIjtcbmltcG9ydCB0eXBlIEZjbENvbnRyb2xsZXIgZnJvbSBcIi4uLy4uL3Jvb3RWaWV3L0ZjbC5jb250cm9sbGVyXCI7XG5cbmV4cG9ydCBlbnVtIFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24ge1xuXHRBY2NlcHQgPSBcIkFjY2VwdF9SZWNvbW1lbmRhdGlvbnNcIixcblx0SWdub3JlID0gXCJJZ25vcmVfUmVjb21tZW5kYXRpb25zXCIsXG5cdENvbnRpbnVlID0gXCJDb250aW51ZV9FZGl0aW5nXCIsXG5cdFNraXBwZWQgPSBcIlNraXBwZWRcIlxufVxuXG5AZGVmaW5lQnVpbGRpbmdCbG9jayh7XG5cdG5hbWU6IFwiQ29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nXCIsXG5cdG5hbWVzcGFjZTogXCJzYXAuZmUuY29yZS5jb250cm9sbGVyZXh0ZW5zaW9uc1wiXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ0Jsb2NrIGV4dGVuZHMgUnVudGltZUJ1aWxkaW5nQmxvY2sge1xuXHRjb25zdHJ1Y3Rvcihwcm9wczogUHJvcGVydGllc09mPENvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ0Jsb2NrPikge1xuXHRcdHN1cGVyKHByb3BzKTtcblx0XHR0aGlzLnZpZXcgPSBwcm9wcy52aWV3IGFzIFZpZXc7XG5cdFx0dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2dSZXNvdXJjZU1vZGVsID0gZ2V0UmVzb3VyY2VNb2RlbCh0aGlzLnZpZXcpO1xuXHR9XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZyE6IFJlZjxEaWFsb2c+O1xuXG5cdHB1YmxpYyB2aWV3ITogVmlldztcblxuXHRwcml2YXRlIGNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwhOiBSZXNvdXJjZU1vZGVsO1xuXG5cdHByb3RlY3RlZCBrZXkhOiBzdHJpbmc7XG5cblx0cHJpdmF0ZSBpc1NhdmUhOiBib29sZWFuO1xuXG5cdHByaXZhdGUgYWNjZXB0QWxsUGFyYW1zITogQWNjZXB0QWxsUGFyYW1zO1xuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyB0aGUgcHJvbWlzZSB3aXRoIHRoZSBzZWxlY3RlZCBkaWFsb2cgbGlzdCBvcHRpb25cblx0ICovXG5cdHByaXZhdGUgcHJvbWlzZVJlc29sdmUhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICogUmVqZWN0cyB0aGUgcHJvbWlzZSBvZiBvcGVuIGRpYWxvZ1xuXHQgKi9cblx0cHVibGljIHByb21pc2VSZWplY3QhOiBGdW5jdGlvbjtcblxuXHQvKipcblx0ICpcblx0ICogQHJldHVybnMgUmVjb21tZW5kYXRpb24gRGF0YVxuXHQgKi9cblxuXHRwdWJsaWMgZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZUNvbnRleHRQYXRocyA9IHRoaXMuZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zID0gdGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yVmlzaWJsZUNvbnRleHRQYXRocyh2aXNpYmxlQ29udGV4dFBhdGhzKTtcblx0XHRjb25zdCByZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdID0gW107XG5cdFx0aWYgKG9wZW5SZWNvbW1lbmRhdGlvbnMubGVuZ3RoID4gMCkge1xuXHRcdFx0b3BlblJlY29tbWVuZGF0aW9ucy5mb3JFYWNoKChyZWNvbW1lbmRhdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBjb250ZXh0ID0gdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aDogc3RyaW5nID0gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoID8gcmVjb21tZW5kYXRpb24ucHJvcGVydHlQYXRoIDogXCJcIjtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGNvbnRleHQ/LmdldFByb3BlcnR5KHByb3BlcnR5UGF0aCkgPT09IG51bGwgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09PSB1bmRlZmluZWQgfHxcblx0XHRcdFx0XHRjb250ZXh0Py5nZXRQcm9wZXJ0eShwcm9wZXJ0eVBhdGgpID09IFwiXCJcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmVjb21tZW5kYXRpb25zLnB1c2gocmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlY29tbWVuZGF0aW9ucztcblx0XHQvLyBjaGVjayBpZiB3ZSBoYXZlIHJlY29tbWVuZGF0aW9ucyBmcm9tIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGxvY2FsQW5ub3RhdGlvbk1vZGVsXG5cdFx0Ly8gcmV0dXJuIG9wZW4gcmVjb21tZW5kYXRpb25zLlxuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEByZXR1cm5zIENvbGxlY3Rpb24gb2YgY29udGV4dCBwYXRoc1xuXHQgKi9cblxuXHRwdWJsaWMgZ2V0VmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMoKTogKHN0cmluZyB8IHVuZGVmaW5lZClbXSB7XG5cdFx0Y29uc3QgdmlzaWJsZVBhZ2VDb250ZXh0UGF0aHMgPSBbdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldFBhdGgoKV07XG5cdFx0Y29uc3QgY29udHJvbGxlciA9IHRoaXMudmlldy5nZXRDb250cm9sbGVyKCkgYXMgQmFzZUNvbnRyb2xsZXI7XG5cdFx0Y29uc3QgZmNsQ29udHJvbGxlciA9IGNvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um9vdFZpZXdDb250cm9sbGVyKCkgYXMgRmNsQ29udHJvbGxlcjtcblx0XHRjb25zdCBpc0ZjbEVuYWJsZWQgPSBjb250cm9sbGVyLmdldEFwcENvbXBvbmVudCgpLl9pc0ZjbEVuYWJsZWQoKTtcblx0XHRjb25zdCBpc0Z1bGxTY3JlZW4gPSBpc0ZjbEVuYWJsZWQgPyBmY2xDb250cm9sbGVyLmdldEhlbHBlcigpLmdldEN1cnJlbnRVSVN0YXRlKCkuaXNGdWxsU2NyZWVuIDogdHJ1ZTtcblx0XHRpZiAoaXNGY2xFbmFibGVkICYmICFpc0Z1bGxTY3JlZW4pIHtcblx0XHRcdGNvbnN0IHJpZ2h0TW9zdENvbnRleHQgPSBmY2xDb250cm9sbGVyLmdldFJpZ2h0bW9zdENvbnRleHQoKTtcblx0XHRcdHZpc2libGVQYWdlQ29udGV4dFBhdGhzLnB1c2gocmlnaHRNb3N0Q29udGV4dD8uZ2V0UGF0aCgpKTtcblx0XHR9XG5cdFx0cmV0dXJuIHZpc2libGVQYWdlQ29udGV4dFBhdGhzO1xuXHR9XG5cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0UGF0aHMgUGF0aHMgb2YgdGhlIGNvbnRleHRzXG5cdCAqIEByZXR1cm5zIFJlY29tbWVuZGF0aW9uRGF0YSBmb3IgdmlzaWJsZSBjb250ZXh0c1xuXHQgKi9cblx0cHVibGljIGdldE9wZW5SZWNvbW1lbmRhdGlvbnNGb3JWaXNpYmxlQ29udGV4dFBhdGhzKGNvbnRleHRQYXRoczogKHN0cmluZyB8IHVuZGVmaW5lZClbXSk6IFJlY29tbWVuZGF0aW9uRGF0YVtdIHtcblx0XHRjb25zdCBvcGVuUmVjb21tZW5kYXRpb25zOiBSZWNvbW1lbmRhdGlvbkRhdGFbXSA9IFtdO1xuXHRcdGlmIChjb250ZXh0UGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Y29uc3QgbG9jYWxBbm5vdGF0aW9uTW9kZWwgPSAodGhpcy52aWV3LmdldE1vZGVsKCkgYXMgT0RhdGFNb2RlbCkuZ2V0TG9jYWxBbm5vdGF0aW9uTW9kZWwoKTtcblx0XHRcdC8vIGNoZWNrIGNvbnRleHQgcGF0aHMgaW4gbG9jYWwgYW5ub3RhdGlvbiBtb2RlbHMgd2hpY2ggbWF0Y2ggdG9cblx0XHRcdC8vIDEuIGN1cnJlbnQgcGFnZSBhbmRcblx0XHRcdC8vIDIuIGltbWVkaWF0ZSBjaGlsZHJlbiBvZiB0aGUgY3VycmVudCBwYWdlXG5cdFx0XHQvLyBOZWVkIHRvIGNvbnNpZGVyIGFsc28gaW1tZWRpYXRlIGNoaWxkcmVuXG5cdFx0XHQvLyBpdGVyYXRlIG92ZXIgYWxsIGtleXNcblx0XHRcdGNvbnRleHRQYXRocy5mb3JFYWNoKChjb250ZXh0UGF0aCkgPT4ge1xuXHRcdFx0XHRpZiAoY29udGV4dFBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGNvbnN0IGxvY2FsQW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk1vZGVsLmdldE9iamVjdChjb250ZXh0UGF0aCk7XG5cdFx0XHRcdFx0aWYgKGxvY2FsQW5ub3RhdGlvbk9iamVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgYW5ub3RhdGlvbk9iamVjdCA9IGxvY2FsQW5ub3RhdGlvbk9iamVjdDtcblx0XHRcdFx0XHRcdC8qKlxuXHRcdFx0XHRcdFx0ICogVGhlIGxvY2FsIGFubm90YXRpb24gb2JqZWN0IHdpbGwgYmUgb2YgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgOlxuXHRcdFx0XHRcdFx0ICoge1xuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvblwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMudHlwZUFoZWFkVmFsdWVzXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBQcm9wZXJ0eU5hbWU6IHtcblx0XHRcdFx0XHRcdCAqIFx0XHRcIlByb3BlcnR5TmFtZUAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCI6IFZhbHVlXG5cdFx0XHRcdFx0XHQgKiBcdFx0XCJQcm9wZXJ0eU5hbWVAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdFwiUHJvcGVydHlOYW1lQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiOiBWYWx1ZVxuXHRcdFx0XHRcdFx0ICogXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDp7IGNvbnRleHQgfVxuXHRcdFx0XHRcdFx0ICogXHQgfVxuXHRcdFx0XHRcdFx0ICogcmVjb21tZW5kYXRpb25Db250ZXh0OnsgY29udGV4dCB9XG5cdFx0XHRcdFx0XHQgKiB9XG5cdFx0XHRcdFx0XHQgKlxuXHRcdFx0XHRcdFx0ICogc28gaW4gb3JkZXIgdG8gZ2V0IHRoZSByZWNvbW1lbmRhdGlvbnMgYXMgcGVyIGVhY2ggY29udGV4dCAtIGZvciBwYXJlbnQvY2hpbGQgZW50aXRpZXMgd2UgbmVlZCB0byBpdGVyYXRlIG92ZXIgZWFjaCBrZXlzIHJlY3Vyc2l2ZWx5IGluIHRoZSBmZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdCBmdW5jdGlvbixcblx0XHRcdFx0XHRcdCAqIGZvcm0gdGhlIGNvcnJlc3BvbmRpbmcgc3RydWN0dXJlIGFuZCB0aGVuIHNlbmQgaXQgZm9yIGdldHRpbmcgdGhlIHJlY29tbWVuZGF0aW9ucyBhY2NvcmRpbmdseS5cblx0XHRcdFx0XHRcdCAqL1xuXHRcdFx0XHRcdFx0dGhpcy5mZXRjaExvY2FsQW5ub3RhdGlvbk9iamVjdChhbm5vdGF0aW9uT2JqZWN0LCBvcGVuUmVjb21tZW5kYXRpb25zKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gb3BlblJlY29tbWVuZGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvbk9iamVjdFxuXHQgKiBAcGFyYW0gb3BlblJlY29tbWVuZGF0aW9ucyBSZWNvbW1lbmRhdGlvbiBEYXRhXG5cdCAqL1xuXG5cdHByaXZhdGUgZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIG9wZW5SZWNvbW1lbmRhdGlvbnM6IFJlY29tbWVuZGF0aW9uRGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKGFubm90YXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdGNvbnN0IHJlY29tbWVuZGF0aW9uT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gPSBhbm5vdGF0aW9uT2JqZWN0W1wicmVjb21tZW5kYXRpb25Db250ZXh0XCJdIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGFubm90YXRpb25PYmplY3QpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlID0gYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XTtcblx0XHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0XHRcdGlmICgoY3VycmVudFZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIE9EYXRhVjRDb250ZXh0PilbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0pIHtcblx0XHRcdFx0XHRcdHRoaXMuZmV0Y2hMb2NhbEFubm90YXRpb25PYmplY3QoYW5ub3RhdGlvbk9iamVjdFtjdXJyZW50S2V5XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgb3BlblJlY29tbWVuZGF0aW9ucyk7XG5cdFx0XHRcdFx0fSBlbHNlIGlmIChcblx0XHRcdFx0XHRcdGN1cnJlbnRLZXkuaW5jbHVkZXMoXCJAJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJWYWx1ZVwiKSB8fFxuXHRcdFx0XHRcdFx0Y3VycmVudEtleS5pbmNsdWRlcyhcIkAkdWk1LmZlLnJlY29tbWVuZGF0aW9ucy5wbGFjZWhvbGRlckRlc2NyaXB0aW9uXCIpIHx8XG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnR5cGVBaGVhZFZhbHVlc1wiKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbY3VycmVudEtleV0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBrZXlzID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RW50aXR5S2V5cyhcblx0XHRcdFx0cmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgT0RhdGFWNENvbnRleHRcblx0XHRcdCk7XG5cdFx0XHQocmVjb21tZW5kYXRpb25PYmplY3RbXCJyZWNvbW1lbmRhdGlvbkNvbnRleHRcIl0gYXMgUmVjb21tZW5kYXRpb25Db250ZXh0c0luZm8pLmNvbnRleHRJZGVudGlmaWVyID0ga2V5c1tcInNlbWFudGljS2V5c1wiXVxuXHRcdFx0XHQ/IGtleXNbXCJzZW1hbnRpY0tleXNcIl1cblx0XHRcdFx0OiBrZXlzW1widGVjaG5pY2FsS2V5c1wiXTtcblx0XHRcdHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uT2JqZWN0LFxuXHRcdFx0XHRyZWNvbW1lbmRhdGlvbk9iamVjdFtcInJlY29tbWVuZGF0aW9uQ29udGV4dFwiXSBhcyBPRGF0YVY0Q29udGV4dCxcblx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0LyoqXG5cdCAqXG5cdCAqIEBwYXJhbSBjb250ZXh0RGF0YSBUaGUgY29udGV4dCBkYXRhIG9iamVjdCBmb3IgcmVjb21tZW5kYXRpb25zXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvbkNvbnRleHQgVGhlIHJlY29tbWVuZGF0aW9uIGNvbnRleHRcblx0ICogQHBhcmFtIG9wZW5SZWNvbW1lbmRhdGlvbnMgUmVjb21tZW5kYXRpb25EYXRhXG5cdCAqIEBwYXJhbSBjb250ZXh0S2V5IENvbnRleHQgS2V5XG5cdCAqL1xuXG5cdHByaXZhdGUgZ2V0T3BlblJlY29tbWVuZGF0aW9uc0ZvckNvbnRleHQoXG5cdFx0Y29udGV4dERhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dDogT0RhdGFWNENvbnRleHQsXG5cdFx0b3BlblJlY29tbWVuZGF0aW9uczogUmVjb21tZW5kYXRpb25EYXRhW10sXG5cdFx0Y29udGV4dEtleSA9IFwiXCJcblx0KTogdm9pZCB7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50S2V5IGluIGNvbnRleHREYXRhKSB7XG5cdFx0XHRjb25zdCBjdXJyZW50VmFsdWUgPSBjb250ZXh0RGF0YVtjdXJyZW50S2V5XTtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUpIHtcblx0XHRcdFx0Y29uc3QgY3VycmVudFZhbHVlSXNDb250ZXh0ID1cblx0XHRcdFx0XHQoY3VycmVudFZhbHVlIGFzIE9EYXRhVjRDb250ZXh0KS5pc0EgJiYgKGN1cnJlbnRWYWx1ZSBhcyBPRGF0YVY0Q29udGV4dCkuaXNBKFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIik7XG5cdFx0XHRcdGlmIChjdXJyZW50S2V5LmluY2x1ZGVzKFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIikpIHtcblx0XHRcdFx0XHRjb25zdCBwcm9wZXJ0eVBhdGggPSBjdXJyZW50S2V5LnNwbGl0KFwiQCR1aTUuZmUucmVjb21tZW5kYXRpb25zLnBsYWNlaG9sZGVyVmFsdWVcIilbMF07XG5cdFx0XHRcdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9uOiBSZWNvbW1lbmRhdGlvbkRhdGEgPSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0OiByZWNvbW1lbmRhdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0XHRwcm9wZXJ0eVBhdGg6IGNvbnRleHRLZXkgPyBgJHtjb250ZXh0S2V5fS8ke3Byb3BlcnR5UGF0aH1gIDogcHJvcGVydHlQYXRoLFxuXHRcdFx0XHRcdFx0dmFsdWU6IGN1cnJlbnRWYWx1ZSBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllcjogKHJlY29tbWVuZGF0aW9uQ29udGV4dCBhcyBSZWNvbW1lbmRhdGlvbkNvbnRleHRzSW5mbykuY29udGV4dElkZW50aWZpZXIsXG5cdFx0XHRcdFx0XHRjb250ZXh0SWRlbnRpZmllclRleHQ6IFtdXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRjb25zdCBkZXNjcmlwdGlvbiA9IGNvbnRleHREYXRhW2Ake3Byb3BlcnR5UGF0aH1AJHVpNS5mZS5yZWNvbW1lbmRhdGlvbnMucGxhY2Vob2xkZXJEZXNjcmlwdGlvbmBdO1xuXHRcdFx0XHRcdGlmIChkZXNjcmlwdGlvbikge1xuXHRcdFx0XHRcdFx0b3BlblJlY29tbWVuZGF0aW9uLnRleHQgPSBkZXNjcmlwdGlvbiBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMucHVzaChvcGVuUmVjb21tZW5kYXRpb24pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09IFwib2JqZWN0XCIgJiYgIUFycmF5LmlzQXJyYXkoY3VycmVudFZhbHVlKSAmJiAhY3VycmVudFZhbHVlSXNDb250ZXh0KSB7XG5cdFx0XHRcdFx0dGhpcy5nZXRPcGVuUmVjb21tZW5kYXRpb25zRm9yQ29udGV4dChcblx0XHRcdFx0XHRcdGN1cnJlbnRWYWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0XHRcdFx0XHRcdHJlY29tbWVuZGF0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdG9wZW5SZWNvbW1lbmRhdGlvbnMsXG5cdFx0XHRcdFx0XHRjdXJyZW50S2V5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBPcGVucyB0aGUgY29uZmlybSByZWNvbW1lbmRhdGlvbnMgZGlhbG9nLlxuXHQgKiBAcGFyYW0gaXNTYXZlIEJvb2xlYW4gZmxhZyB3aGljaCB3b3VsZCBiZSBzZXQgdG8gdHJ1ZSBpZiB3ZSBhcmUgc2F2aW5nIHRoZSBkb2N1bWVudCBhbmQgd291bGQgYmUgZmFsc2UgaWYgd2UgZG8gYXBwbHkgY2hhbmdlc1xuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIHdvdWxkIHJlc29sdmUgd2l0aCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uIChBY2NlcHQsIElnbm9yZSwgQ29udGludWUsIFNraXBwZWQpXG5cdCAqL1xuXHRwdWJsaWMgYXN5bmMgb3Blbihpc1NhdmU6IGJvb2xlYW4pOiBQcm9taXNlPFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24gfCB1bmRlZmluZWQ+IHtcblx0XHQvLyBjaGVjayBmb3IgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zXG5cdFx0Y29uc3Qgb3BlblJlY29tbWVuZGF0aW9ucyA9IHRoaXMuZ2V0T3BlblJlY29tbWVuZGF0aW9ucygpO1xuXHRcdGlmIChvcGVuUmVjb21tZW5kYXRpb25zLmxlbmd0aCA+IDApIHtcblx0XHRcdHN0YW5kYXJkUmVjb21tZW5kYXRpb25IZWxwZXIuYWRkQ29udGV4dElkZW50aWZpZXJUZXh0KFxuXHRcdFx0XHR7IHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9ucyB9LFxuXHRcdFx0XHR0aGlzLnZpZXcuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHQpO1xuXHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSB7XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YTogb3BlblJlY29tbWVuZGF0aW9uc1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gaWYgYnVpbHQtaW4gcmVjb21tZW5kYXRpb25zIGFyZSBub3QgZm91bmQgdGhlbiBjaGVjayBmb3IgbGVnYWN5IHJlY29tbWVuZGF0aW9ucy5cblx0XHRcdGNvbnN0IGxlZ2FjeVJlY29tbWVuZGF0aW9uc0V4aXN0ID0gKHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuY2hlY2tJZlJlY29tbWVuZGF0aW9uc0V4aXN0KCk7XG5cdFx0XHRpZiAobGVnYWN5UmVjb21tZW5kYXRpb25zRXhpc3QpIHtcblx0XHRcdFx0dGhpcy5hY2NlcHRBbGxQYXJhbXMgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5mZXRjaEFjY2VwdEFsbFBhcmFtcygpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHR9XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSB0aGlzLmdldEFjY2VwdEFsbE1vZGVsKCk7XG5cdFx0dGhpcy52aWV3LnNldE1vZGVsKGFjY2VwdE1vZGVsLCBcIl9hY2NlcHREaWFsb2dNb2RlbFwiKTtcblx0XHRpZiAoIWFjY2VwdE1vZGVsLmdldERhdGEoKS5pdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5Ta2lwcGVkO1xuXHRcdH1cblx0XHR0aGlzLmlzU2F2ZSA9IGlzU2F2ZTtcblx0XHRjb25zdCBkaWFsb2cgPSB0aGlzLmdldENvbnRlbnQoKTtcblx0XHRkaWFsb2c/LnNldEVzY2FwZUhhbmRsZXIodGhpcy5vbkNvbnRpbnVlRWRpdGluZy5iaW5kKHRoaXMpKTtcblx0XHR0aGlzLnZpZXcuYWRkRGVwZW5kZW50KGRpYWxvZyBhcyBVSTVFbGVtZW50KTtcblx0XHRkaWFsb2c/Lm9wZW4oKTtcblx0XHRyZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0dGhpcy5wcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XG5cdFx0XHR0aGlzLnByb21pc2VSZWplY3QgPSByZWplY3Q7XG5cdFx0fSk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlciB0byBjbG9zZSB0aGUgY29uZmlybVJlY29tbWVuZGF0aW9uIGRpYWxvZy5cblx0ICpcblx0ICovXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZy5jdXJyZW50Py5jbG9zZSgpO1xuXHRcdHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nLmN1cnJlbnQ/LmRlc3Ryb3koKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBBY2NlcHQgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBhc3luYyBvbkFjY2VwdEFuZFNhdmUoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGlzQWNjZXB0ZWQgPSBhd2FpdCAodGhpcy52aWV3Py5nZXRDb250cm9sbGVyKCkgYXMgUGFnZUNvbnRyb2xsZXIpLnJlY29tbWVuZGF0aW9ucy5hY2NlcHRSZWNvbW1lbmRhdGlvbnMoXG5cdFx0XHRcdHRoaXMuYWNjZXB0QWxsUGFyYW1zXG5cdFx0XHQpO1xuXHRcdFx0aWYgKCFpc0FjY2VwdGVkKSB7XG5cdFx0XHRcdHRoaXMucHJvbWlzZVJlamVjdChcIkFjY2VwdCBGYWlsZWRcIik7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnByb21pc2VSZXNvbHZlKFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24uQWNjZXB0KTtcblx0XHR9IGNhdGNoIHtcblx0XHRcdExvZy5lcnJvcihcIkFjY2VwdCBSZWNvbW1lbmRhdGlvbnMgRmFpbGVkXCIpO1xuXHRcdFx0dGhpcy5wcm9taXNlUmVqZWN0KFwiQWNjZXB0IEZhaWxlZFwiKTtcblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5jbG9zZSgpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBJZ25vcmUgYW5kIFNhdmUgYnV0dG9uLlxuXHQgKi9cblx0cHJpdmF0ZSBvbklnbm9yZUFuZFNhdmUoKTogdm9pZCB7XG5cdFx0KHRoaXMudmlldz8uZ2V0Q29udHJvbGxlcigpIGFzIFBhZ2VDb250cm9sbGVyKS5yZWNvbW1lbmRhdGlvbnMuaWdub3JlUmVjb21tZW5kYXRpb25Gb3JDb250ZXh0cygpO1xuXHRcdHRoaXMucHJvbWlzZVJlc29sdmUoUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpO1xuXHRcdHRoaXMuY2xvc2UoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBIYW5kbGVyIGZvciBDb250aW51ZSBFZGl0aW5nIGJ1dHRvbi5cblx0ICovXG5cdHByaXZhdGUgb25Db250aW51ZUVkaXRpbmcoKTogdm9pZCB7XG5cdFx0dGhpcy5wcm9taXNlUmVzb2x2ZShSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkNvbnRpbnVlKTtcblx0XHR0aGlzLmNsb3NlKCk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0cyB0aGUgbGFiZWwgb3IgbmFtZSBvZiB0aGUgRmllbGQgYmFzZWQgb24gaXRzIHByb3BlcnR5IHBhdGguXG5cdCAqIEBwYXJhbSB0YXJnZXRQYXRoXG5cdCAqIEByZXR1cm5zIFJldHVybnMgdGhlIGxhYmVsIG9mIHRoZSBGaWVsZC5cblx0ICovXG5cdHByaXZhdGUgZ2V0RmllbGROYW1lKHRhcmdldFBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgaW52b2x2ZWREYXRhTW9kZWxPYmplY3QgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzRm9yVGFyZ2V0UGF0aDxQcm9wZXJ0eT4oXG5cdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0dGhpcy52aWV3Py5nZXRCaW5kaW5nQ29udGV4dCgpPy5nZXRNb2RlbCgpPy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbFxuXHRcdCk7XG5cdFx0cmV0dXJuIChcblx0XHRcdGludm9sdmVkRGF0YU1vZGVsT2JqZWN0Py50YXJnZXRPYmplY3Q/LmFubm90YXRpb25zPy5Db21tb24/LkxhYmVsPy50b1N0cmluZygpIHx8XG5cdFx0XHR0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKVt0YXJnZXRQYXRoLnNwbGl0KFwiL1wiKS5sZW5ndGggLSAxXVxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogRmV0Y2hlcyB0ZXh0IGZvciByZWNvbW1lbmRhdGlvbiBiYXNlZCBvbiBkaXNwbGF5IG1vZGUuXG5cdCAqIEBwYXJhbSByZWNvbW1lbmRhdGlvblxuXHQgKiBAcGFyYW0gZGlzcGxheU1vZGVcblx0ICogQHJldHVybnMgVGV4dCBmb3IgYSByZWNvbW1lbmRhdGlvblxuXHQgKi9cblx0cHJpdmF0ZSBnZXRUZXh0KHJlY29tbWVuZGF0aW9uOiBTdGFuZGFyZFJlY29tbWVuZGF0aW9uRGF0YVR5cGUsIGRpc3BsYXlNb2RlOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChyZWNvbW1lbmRhdGlvbi50ZXh0IHx8IHJlY29tbWVuZGF0aW9uLnZhbHVlKSB7XG5cdFx0XHRzd2l0Y2ggKGRpc3BsYXlNb2RlKSB7XG5cdFx0XHRcdGNhc2UgXCJEZXNjcmlwdGlvblwiOlxuXHRcdFx0XHRcdHJldHVybiByZWNvbW1lbmRhdGlvbi50ZXh0ITtcblx0XHRcdFx0Y2FzZSBcIkRlc2NyaXB0aW9uVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWVGb3JtYXR0ZXJzLmZvcm1hdFdpdGhCcmFja2V0cyhyZWNvbW1lbmRhdGlvbi50ZXh0LCByZWNvbW1lbmRhdGlvbi52YWx1ZSk7XG5cdFx0XHRcdGNhc2UgXCJWYWx1ZURlc2NyaXB0aW9uXCI6XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRXaXRoQnJhY2tldHMocmVjb21tZW5kYXRpb24udmFsdWUsIHJlY29tbWVuZGF0aW9uLnRleHQpO1xuXHRcdFx0XHRjYXNlIFwiVmFsdWVcIjpcblx0XHRcdFx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUhO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVjb21tZW5kYXRpb24udmFsdWUgfHwgXCJcIjtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIEJ1dHRvbiB3aXRoIGdpdmVuIHRleHQsIHR5cGUgYW5kIHByZXNzSGFuZGxlci5cblx0ICogQHBhcmFtIHRleHQgVGV4dCBmb3IgdGhlIGJ1dHRvblxuXHQgKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBidXR0b25cblx0ICogQHBhcmFtIHByZXNzSGFuZGxlciBQcmVzcyBIYW5kbGVyIGZvciB0aGUgYnV0dG9uXG5cdCAqIEByZXR1cm5zIEJ1dHRvbiB3aXRoIHRoZSBnaXZlbiBzZXR0aW5nc1xuXHQgKi9cblx0cHJpdmF0ZSBnZXRCdXR0b24odGV4dDogc3RyaW5nLCB0eXBlOiBzdHJpbmcsIHByZXNzSGFuZGxlcjogRXZlbnRIYW5kbGVyKTogQnV0dG9uIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvbiB0ZXh0PXt0ZXh0fSB0eXBlPXt0eXBlfSB3aWR0aD17XCJhdXRvXCJ9IHByZXNzPXtwcmVzc0hhbmRsZXJ9PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxGbGV4SXRlbURhdGEgbWluV2lkdGg9e1wiMTAwJVwifT48L0ZsZXhJdGVtRGF0YT5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBGb290ZXIgd2l0aCBCdXR0b25zLlxuXHQgKiBAcmV0dXJucyBGb290ZXJcblx0ICovXG5cblx0cHJpdmF0ZSBnZXRGb290ZXIoKTogVG9vbGJhciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxUb29sYmFyPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9nZXREaWFsb2dCdXR0b25UZXh0KHRoaXMuaXNTYXZlLCBSZWNvbW1lbmRhdGlvbkRpYWxvZ0RlY2lzaW9uLkFjY2VwdCksXG5cdFx0XHRcdFx0XHRcdFx0XCJFbXBoYXNpemVkXCIsXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkFjY2VwdEFuZFNhdmUuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRCdXR0b24oXG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fZ2V0RGlhbG9nQnV0dG9uVGV4dCh0aGlzLmlzU2F2ZSwgUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5JZ25vcmUpLFxuXHRcdFx0XHRcdFx0XHRcdFwiR2hvc3RcIixcblx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uSWdub3JlQW5kU2F2ZS5iaW5kKHRoaXMpXG5cdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldEJ1dHRvbihcblx0XHRcdFx0XHRcdFx0XHR0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0NPTlRJTlVFX0VESVRJTkdcIiksXG5cdFx0XHRcdFx0XHRcdFx0XCJHaG9zdFwiLFxuXHRcdFx0XHRcdFx0XHRcdHRoaXMub25Db250aW51ZUVkaXRpbmcuYmluZCh0aGlzKVxuXHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Ub29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXREaWFsb2dCdXR0b25UZXh0KHNhdmU6IGJvb2xlYW4sIHJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb246IFJlY29tbWVuZGF0aW9uRGlhbG9nRGVjaXNpb24pOiBzdHJpbmcge1xuXHRcdGNvbnN0IGlzQWNjZXB0QnV0dG9uOiBib29sZWFuID0gcmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbiA9PT0gUmVjb21tZW5kYXRpb25EaWFsb2dEZWNpc2lvbi5BY2NlcHQ7XG5cdFx0aWYgKHNhdmUpIHtcblx0XHRcdGlmICghdGhpcy52aWV3LmdldEJpbmRpbmdDb250ZXh0KCk/LmdldE9iamVjdCgpLkhhc0FjdGl2ZUVudGl0eSkge1xuXHRcdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfQUNDRVBUX0FORF9DUkVBVEVcIilcblx0XHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9DUkVBVEVcIik7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVF9BTkRfU0FWRVwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFX0FORF9TQVZFXCIpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gaXNBY2NlcHRCdXR0b25cblx0XHRcdFx0PyB0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX0FDQ0VQVFwiKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfSUdOT1JFXCIpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBjcmVhdGVkIGEgSlNPTiBNb2RlbCBmb3IgdGhlIGFjY2VwdCBhbGwgZGlhbG9nIGRhdGEuXG5cdCAqIEByZXR1cm5zIFRoZSBKU09OIE1vZGVsIGZvciBhY2NlcHQgYWxsIGRpYWxvZy5cblx0ICovXG5cdGdldEFjY2VwdEFsbE1vZGVsKCk6IEpTT05Nb2RlbCB7XG5cdFx0Y29uc3QgYWNjZXB0TW9kZWwgPSBuZXcgSlNPTk1vZGVsKCk7XG5cdFx0Y29uc3QgaXRlbXMgPSBbXTtcblx0XHRmb3IgKGNvbnN0IHJlY29tbWVuZGF0aW9uRGF0YSBvZiB0aGlzLmFjY2VwdEFsbFBhcmFtcz8ucmVjb21tZW5kYXRpb25EYXRhIHx8IFtdKSB7XG5cdFx0XHRjb25zdCBlbnRpdHlOYW1lTGFiZWwgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldEVudGl0eU5hbWUocmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQpIHx8IFwiXCI7XG5cblx0XHRcdGNvbnN0IGlkZW50aWZpZXJUZXh0cyA9XG5cdFx0XHRcdHJlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHQgJiYgcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHRJZGVudGlmaWVyVGV4dC5sZW5ndGggPiAwXG5cdFx0XHRcdFx0PyBgJHtlbnRpdHlOYW1lTGFiZWx9ICgke3JlY29tbWVuZGF0aW9uRGF0YS5jb250ZXh0SWRlbnRpZmllclRleHR9KWBcblx0XHRcdFx0XHQ6IGVudGl0eU5hbWVMYWJlbDtcblxuXHRcdFx0aWYgKHJlY29tbWVuZGF0aW9uRGF0YS52YWx1ZSB8fCByZWNvbW1lbmRhdGlvbkRhdGEudGV4dCkge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRQYXRoID0gcmVjb21tZW5kYXRpb25EYXRhLmNvbnRleHQ/LmdldFBhdGgoKSArIFwiL1wiICsgcmVjb21tZW5kYXRpb25EYXRhLnByb3BlcnR5UGF0aDtcblx0XHRcdFx0Y29uc3QgZGlzcGxheU1vZGUgPSBzdGFuZGFyZFJlY29tbWVuZGF0aW9uSGVscGVyLmdldERpc3BsYXlNb2RlRm9yVGFyZ2V0UGF0aChcblx0XHRcdFx0XHR0YXJnZXRQYXRoLFxuXHRcdFx0XHRcdHRoaXMudmlldz8uZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0TW9kZWwoKT8uZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWxcblx0XHRcdFx0KTtcblx0XHRcdFx0Y29uc3QgbGlzdERhdGEgPSB7XG5cdFx0XHRcdFx0ZmllbGROYW1lOiB0aGlzLmdldEZpZWxkTmFtZSh0YXJnZXRQYXRoKS52YWx1ZU9mKCksXG5cdFx0XHRcdFx0ZmllbGRWYWx1ZTogdGhpcy5nZXRUZXh0KHJlY29tbWVuZGF0aW9uRGF0YSwgZGlzcGxheU1vZGUpLFxuXHRcdFx0XHRcdGlkZW50aWZpZXJUZXh0czogaWRlbnRpZmllclRleHRzXG5cdFx0XHRcdH07XG5cdFx0XHRcdGl0ZW1zLnB1c2gobGlzdERhdGEpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRhY2NlcHRNb2RlbC5zZXREYXRhKHsgaXRlbXM6IGl0ZW1zIH0pO1xuXHRcdHJldHVybiBhY2NlcHRNb2RlbDtcblx0fVxuXG5cdC8qKlxuXHQgKiBUaGlzIG1ldGhvZCBncm91cHMgdGhlIGNvbnRleHRzIGFjY29yZGluZyB0byB0aGUgaWRlbnRpZmllciB0ZXh0cy5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGl0ZW1cblx0ICogQHJldHVybnMgVGhlIHRleHQgb2YgdGhlIGdyb3VwXG5cdCAqL1xuXHRnZXRHcm91cChjb250ZXh0OiBPRGF0YVY0Q29udGV4dCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJpZGVudGlmaWVyVGV4dHNcIik7XG5cdH1cblxuXHQvKipcblx0ICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBhY2NlcHQgZGlhbG9nLlxuXHQgKiBAcmV0dXJucyBBIG1lc3NhZ2Ugd2l0aCB0aGUgZGVzaXJlZCB0ZXh0LlxuXHQgKi9cblx0Z2V0TWVzc2FnZSgpOiBUZXh0IHtcblx0XHRjb25zdCBhY2NlcHRBbGxEYXRhID0gKHRoaXMudmlldy5nZXRNb2RlbChcIl9hY2NlcHREaWFsb2dNb2RlbFwiKSBhcyBKU09OTW9kZWwpPy5nZXREYXRhKCk/Lml0ZW1zO1xuXHRcdGNvbnN0IG1lc3NhZ2VUZXh0ID1cblx0XHRcdGFjY2VwdEFsbERhdGEubGVuZ3RoID4gMVxuXHRcdFx0XHQ/IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVFwiLCBbYWNjZXB0QWxsRGF0YS5sZW5ndGhdKVxuXHRcdFx0XHQ6IHRoaXMuY29uZmlybVJlY29tbWVuZGF0aW9uRGlhbG9nUmVzb3VyY2VNb2RlbC5nZXRUZXh0KFwiQ19SRUNPTU1FTkRBVElPTl9ESUFMT0dfVEVYVF9TSU5HVUxBUlwiKTtcblx0XHRyZXR1cm4gPFRleHQgdGV4dD17bWVzc2FnZVRleHR9IC8+O1xuXHR9XG5cblx0LyoqXG5cdCAqIFRoaXMgbWV0aG9kIGNyZWF0ZXMgdGhlIGNvbnRlbnQgZm9yIHRoZSBkaWFsb2cuXG5cdCAqIEByZXR1cm5zIEEgbGlzdCBhcyBjb250ZW50IG9mIHRoZSBkaWFsb2cuXG5cdCAqL1xuXHRnZXREaWFsb2dDb250ZW50KCk6IExpc3Qge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlzdCBpdGVtcz17eyBtb2RlbDogXCJfYWNjZXB0RGlhbG9nTW9kZWxcIiwgcGF0aDogXCIvaXRlbXNcIiwgc29ydGVyOiBuZXcgU29ydGVyKFwiaWRlbnRpZmllclRleHRzXCIsIGZhbHNlLCB0aGlzLmdldEdyb3VwKSB9fT5cblx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtPlxuXHRcdFx0XHRcdDxIQm94IGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luIHNhcFVpVGlueU1hcmdpblwiPlxuXHRcdFx0XHRcdFx0PFRleHQgdGV4dD1cIntfYWNjZXB0RGlhbG9nTW9kZWw+ZmllbGROYW1lfToge19hY2NlcHREaWFsb2dNb2RlbD5maWVsZFZhbHVlfVwiIC8+XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0N1c3RvbUxpc3RJdGVtPlxuXHRcdFx0PC9MaXN0PlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogVGhlIGJ1aWxkaW5nIGJsb2NrIHJlbmRlciBmdW5jdGlvbi5cblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZ1xuXHQgKi9cblx0Z2V0Q29udGVudCgpOiBEaWFsb2cge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RGlhbG9nXG5cdFx0XHRcdHRpdGxlPXt0aGlzLmNvbmZpcm1SZWNvbW1lbmRhdGlvbkRpYWxvZ1Jlc291cmNlTW9kZWwuZ2V0VGV4dChcIkNfUkVDT01NRU5EQVRJT05fRElBTE9HX1RJVExFXCIpfVxuXHRcdFx0XHRzdGF0ZT17VmFsdWVTdGF0ZS5JbmZvcm1hdGlvbn1cblx0XHRcdFx0dHlwZT17XCJNZXNzYWdlXCJ9XG5cdFx0XHRcdHJlZj17dGhpcy5jb25maXJtUmVjb21tZW5kYXRpb25EaWFsb2d9XG5cdFx0XHRcdHJlc2l6YWJsZT17XCJ0cnVlXCJ9XG5cdFx0XHRcdGNvbnRlbnRXaWR0aD17XCIzNXJlbVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldE1lc3NhZ2UoKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0RGlhbG9nQ29udGVudCgpfVxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRmb290ZXI6IDw+e3RoaXMuZ2V0Rm9vdGVyKCl9PC8+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0RpYWxvZz5cblx0XHQpIGFzIERpYWxvZztcblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQW9DWUEsNEJBQTRCO0VBQUEsV0FBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0lBQTVCQSw0QkFBNEI7SUFBNUJBLDRCQUE0QjtJQUE1QkEsNEJBQTRCO0VBQUEsR0FBNUJBLDRCQUE0QixLQUE1QkEsNEJBQTRCO0VBQUFDLFFBQUEsQ0FBQUQsNEJBQUEsR0FBQUEsNEJBQUE7RUFBQSxJQVczQkUsZ0NBQWdDLElBQUFDLElBQUEsR0FKNUNDLG1CQUFtQixDQUFDO0lBQ3BCQyxJQUFJLEVBQUUsNkJBQTZCO0lBQ25DQyxTQUFTLEVBQUU7RUFDWixDQUFDLENBQUMsRUFBQUMsS0FBQSxHQVFBQyxlQUFlLENBQUMsQ0FBQyxFQUFBTCxJQUFBLENBQUFNLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMscUJBQUE7SUFBQUMsY0FBQSxDQUFBVixnQ0FBQSxFQUFBUyxxQkFBQTtJ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
@@ -406,16 +406,12 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
406
406
  <>
407
407
  <ToolbarSpacer />
408
408
  {this.getButton(
409
- this.isSave
410
- ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_SAVE")
411
- : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT"),
409
+ this._getDialogButtonText(this.isSave, RecommendationDialogDecision.Accept),
412
410
  "Emphasized",
413
411
  this.onAcceptAndSave.bind(this)
414
412
  )}
415
413
  {this.getButton(
416
- this.isSave
417
- ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_SAVE")
418
- : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE"),
414
+ this._getDialogButtonText(this.isSave, RecommendationDialogDecision.Ignore),
419
415
  "Ghost",
420
416
  this.onIgnoreAndSave.bind(this)
421
417
  )}
@@ -431,6 +427,24 @@ export class ConfirmRecommendationDialogBlock extends RuntimeBuildingBlock {
431
427
  );
432
428
  }
433
429
 
430
+ private _getDialogButtonText(save: boolean, recommendationDialogDecision: RecommendationDialogDecision): string {
431
+ const isAcceptButton: boolean = recommendationDialogDecision === RecommendationDialogDecision.Accept;
432
+ if (save) {
433
+ if (!this.view.getBindingContext()?.getObject().HasActiveEntity) {
434
+ return isAcceptButton
435
+ ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_CREATE")
436
+ : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_CREATE");
437
+ }
438
+ return isAcceptButton
439
+ ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT_AND_SAVE")
440
+ : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE_AND_SAVE");
441
+ } else {
442
+ return isAcceptButton
443
+ ? this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_ACCEPT")
444
+ : this.confirmRecommendationDialogResourceModel.getText("C_RECOMMENDATION_DIALOG_IGNORE");
445
+ }
446
+ }
447
+
434
448
  /**
435
449
  * This method created a JSON Model for the accept all dialog data.
436
450
  * @returns The JSON Model for accept all dialog.
@@ -2,13 +2,14 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2024 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper"], function (ManifestWrapper, MetaModelConverter, ModelHelper, TypeGuards, DataModelPathHelper) {
5
+ sap.ui.define(["sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/TypeGuards", "sap/fe/core/templating/DataModelPathHelper"], function (ManifestWrapper, MetaModelConverter, BindingHelper, ModelHelper, TypeGuards, DataModelPathHelper) {
6
6
  "use strict";
7
7
 
8
8
  var getTargetObjectPath = DataModelPathHelper.getTargetObjectPath;
9
9
  var getContextRelativeTargetObjectPath = DataModelPathHelper.getContextRelativeTargetObjectPath;
10
10
  var enhanceDataModelPath = DataModelPathHelper.enhanceDataModelPath;
11
11
  var isServiceObject = TypeGuards.isServiceObject;
12
+ var singletonPathVisitor = BindingHelper.singletonPathVisitor;
12
13
  var getInvolvedDataModelObjectFromPath = MetaModelConverter.getInvolvedDataModelObjectFromPath;
13
14
  var convertTypes = MetaModelConverter.convertTypes;
14
15
  /**
@@ -346,9 +347,15 @@ sap.ui.define(["sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters
346
347
  */;
347
348
  _proto.getRelativeModelPathFunction = function getRelativeModelPathFunction() {
348
349
  const targetDataModelPath = this.targetDataModelPath;
350
+ const convertedMetaModel = this.convertedTypes;
349
351
  return function (sPath) {
352
+ const singletonPath = singletonPathVisitor(sPath, convertedMetaModel, []);
350
353
  const enhancedPath = enhanceDataModelPath(targetDataModelPath, sPath);
351
- return getContextRelativeTargetObjectPath(enhancedPath, true);
354
+ const contextRelativePath = getContextRelativeTargetObjectPath(enhancedPath, true);
355
+ if (contextRelativePath) {
356
+ return contextRelativePath;
357
+ }
358
+ return singletonPath;
352
359
  };
353
360
  }
354
361
 
@@ -397,4 +404,4 @@ sap.ui.define(["sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters
397
404
  }();
398
405
  return ConverterContext;
399
406
  }, false);
400
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0Fubm90YXRpb25UZXJtIiwidkFubm90YXRpb25QYXRoIiwiZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCIsInJlc29sdmVkTWV0YVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwicHJldmlvdXNFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5VHlwZSIsIm5hdmlnYXRlZFBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJvYmplY3RQYXRoIiwiZm9yRWFjaCIsIm9iamVjdFBhcnQiLCJfY3VycmVudEVudGl0eVNldCIsImlzU2VydmljZU9iamVjdCIsIl90eXBlIiwicHVzaCIsIm5hbWUiLCJ0YXJnZXRUeXBlIiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5Iiwiam9pbiIsInVuZGVmaW5lZCIsImVudGl0eVR5cGUiLCJkYXRhTW9kZWxQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5U2V0IiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0IiwiQ29udmVydGVyQ29udGV4dCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJkaWFnbm9zdGljcyIsIm1lcmdlRm4iLCJ0YXJnZXREYXRhTW9kZWxQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiTWFuaWZlc3RXcmFwcGVyIiwiYmFzZUNvbnRleHRQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsIl9wcm90byIsInByb3RvdHlwZSIsIl9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVR5cGVzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlQW5ub3RhdGlvbiIsInJlcGxhY2UiLCJnZXRBbm5vdGF0aW9uRW50aXR5VHlwZSIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsIkVycm9yIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwiaGFzRW50aXR5U2V0S2V5SW5NYW5pZmVzdCIsImdldEVudGl0eVNldCIsImxlbmd0aCIsImhhc0NvbnRleHRQYXRoS2V5SW5NYW5pZmVzdCIsImdldENvbnRleHRQYXRoIiwiaXNQYXRoQWJzb2x1dGUiLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsInNBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRFbnRpdHlDb250YWluZXIiLCJlbnRpdHlDb250YWluZXIiLCJnZXRFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsIl9wYXJhbWV0ZXJFbnRpdHlUeXBlJCIsIl9wYXJhbWV0ZXJFbnRpdHlUeXBlJDIiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNQYXJhbWV0ZXJpemVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJpbmNsdWRlcyIsImlzQWJzb2x1dGUiLCJwYXRoIiwiYmFzZSIsInNwbGl0IiwiZW5kc1dpdGgiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJ2aXNpdGVkT2JqZWN0cyIsImNvbnZlcnRlckNvbnRleHQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZW50aXR5VHlwZUZRTiIsIm1hdGNoIiwicmVwbGFjZWRBbm5vdGF0aW9uUGF0aCIsInN1YnN0cmluZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERpYWdub3N0aWNzIiwicmVzb2x2ZVBhdGgiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiY29udGV4dFBhdGgiLCJ0YXJnZXRQYXRoIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ2b2NhYnVsYXJ5TmFtZSIsImFubm90YXRpb25UZXJtIiwiYW5ub3RhdGlvblNvdXJjZXMiLCJhcmd1bWVudHMiLCJvdXRBbm5vdGF0aW9ucyIsImFubm90YXRpb25Tb3VyY2UiLCJmaWx0ZXIiLCJ0ZXJtIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsImtleSIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJzUGF0aCIsImVuaGFuY2VkUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyIsImVudGl0eU5hbWUiLCJvTWV0YU1vZGVsQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJpc0EiLCJnZXRNb2RlbCIsIm9Db252ZXJ0ZWRNZXRhZGF0YSIsImNvbnZlcnRUeXBlcyIsImVudGl0eVNldHMiLCJlbnRpdHlTZXQiLCJzaW5nbGV0b25zIiwiX3RhcmdldEVudGl0eVNldCIsImZldGNoVGV4dEZyb21NZXRhTW9kZWwiLCJNb2RlbEhlbHBlciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQ29udmVydGVyQ29udGV4dC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7XG5cdEFubm90YXRpb25UZXJtLFxuXHRDb252ZXJ0ZWRNZXRhZGF0YSxcblx0RW50aXR5Q29udGFpbmVyLFxuXHRFbnRpdHlTZXQsXG5cdEVudGl0eVR5cGUsXG5cdE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0UmVzb2x1dGlvblRhcmdldCxcblx0U2VydmljZU9iamVjdCxcblx0U2VydmljZU9iamVjdEFuZEFubm90YXRpb24sXG5cdFNpbmdsZXRvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUmVjb3JkQ29tcGxleFR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgdHlwZSB7IEVudGl0eVR5cGVBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEJhc2VNYW5pZmVzdFNldHRpbmdzLCBDb250cm9sTWFuaWZlc3RDb25maWd1cmF0aW9uLCBUZW1wbGF0ZVR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgTWFuaWZlc3RXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0V3JhcHBlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzLCBnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdEZyb21QYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IElEaWFnbm9zdGljcywgUGFnZUNvbnRleHRQYXRoVGFyZ2V0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvVGVtcGxhdGVDb252ZXJ0ZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNTZXJ2aWNlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0PFQ+ID0ge1xuXHRhbm5vdGF0aW9uOiBBbm5vdGF0aW9uVGVybTxUPiB8IHVuZGVmaW5lZDtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gYW5ub3RhdGlvbiB0ZXJtLlxuICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiB0ZXJtXG4gKi9cbmNvbnN0IGlzQW5ub3RhdGlvblRlcm0gPSBmdW5jdGlvbiA8VD4odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxUPik6IHZBbm5vdGF0aW9uUGF0aCBpcyBBbm5vdGF0aW9uVGVybTxUPiB7XG5cdHJldHVybiB0eXBlb2YgdkFubm90YXRpb25QYXRoID09PSBcIm9iamVjdFwiO1xufTtcblxuY29uc3QgZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCA9IGZ1bmN0aW9uIDxUPihcblx0cmVzb2x2ZWRNZXRhUGF0aDogUmVzb2x1dGlvblRhcmdldDxUPixcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0bGV0IHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IHByZXZpb3VzRW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0cmVzb2x2ZWRNZXRhUGF0aC5vYmplY3RQYXRoLmZvckVhY2goKG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0c3dpdGNoIChvYmplY3RQYXJ0Ll90eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjpcblx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvYmplY3RQYXJ0KTtcblx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRpZiAocHJldmlvdXNFbnRpdHlTZXQgJiYgcHJldmlvdXNFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBwcmV2aW91c0VudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpXSBhcyBFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0Py5lbnRpdHlUeXBlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQgYXMgRW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHVuZGVmaW5lZCxcblx0XHR0YXJnZXRPYmplY3Q6IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0LFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IGRhdGFNb2RlbFBhdGg7XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb252ZXJ0ZXJDb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGNvbnZlcnRlcnMuXG4gKiBAcGFyYW0ge0NvbnZlcnRlZE1ldGFkYXRhfSBvQ29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGFuZCBzZXJ2aWNlIHR5cGVzXG4gKiBAcGFyYW0ge0Jhc2VNYW5pZmVzdFNldHRpbmdzfSBvTWFuaWZlc3RTZXR0aW5ncyBUaGUgbWFuaWZlc3RTZXR0aW5ncyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBwYWdlXG4gKiBAcGFyYW0ge1RlbXBsYXRlVHlwZX0gdGVtcGxhdGVUeXBlIFRoZSB0eXBlIG9mIHRlbXBsYXRlIHdlJ3JlIGxvb2tpbmcgYXQgcmlnaHQgbm93XG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gZGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHNoaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gVGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gcGVyZm9tIHNvbWUgZGVlcCBtZXJnZXMgYmV0d2VlbiBvYmplY3RcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gdGFyZ2V0RGF0YU1vZGVsUGF0aCBUaGUgZ2xvYmFsIHBhdGggdG8gcmVhY2ggdGhlIGVudGl0eVNldFxuICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IEEgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBjb252ZXJ0ZXJzXG4gKi9cbmNsYXNzIENvbnZlcnRlckNvbnRleHQ8VCA9IFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRwcml2YXRlIG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyO1xuXG5cdHByaXZhdGUgYmFzZUNvbnRleHRQYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0cHJpdmF0ZSBtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRwcml2YXRlIGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0cHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbixcblx0XHRwcml2YXRlIHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD5cblx0KSB7XG5cdFx0dGhpcy5tYW5pZmVzdFdyYXBwZXIgPSBuZXcgTWFuaWZlc3RXcmFwcGVyKHRoaXMubWFuaWZlc3RTZXR0aW5ncywgbWVyZ2VGbik7XG5cdFx0dGhpcy5iYXNlQ29udGV4dFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eVR5cGVzLmZpbmQoKGVudGl0eVR5cGUpID0+IHtcblx0XHRcdGlmIChmdWxseVF1YWxpZmllZE5hbWUuc3RhcnRzV2l0aChlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcmVwbGFjZUFubm90YXRpb24gPSBmdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIik7XG5cdFx0XHRcdHJldHVybiByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSB8fCByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiQFwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgZW50aXR5VHlwZSBhc3NvY2lhdGVkIHdpdGggYW4gYW5ub3RhdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uIFRoZSBhbm5vdGF0aW9uIG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIHRoZSBlbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlUeXBlIHRoZSBhbm5vdGF0aW9uIHJlZmVycyB0b1xuXHQgKi9cblx0Z2V0QW5ub3RhdGlvbkVudGl0eVR5cGU8VFQgZXh0ZW5kcyBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbj4oXG5cdFx0YW5ub3RhdGlvbj86IFRUIGV4dGVuZHMgU2VydmljZU9iamVjdCA/IFRUIDogQW5ub3RhdGlvblRlcm08VFQ+XG5cdCk6IEVudGl0eVR5cGUge1xuXHRcdGlmIChhbm5vdGF0aW9uICYmIHR5cGVvZiBhbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lKGFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmICghdGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIEVudGl0eSBUeXBlIGZvciAke2Fubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfWApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhcmdldEVudGl0eVR5cGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG1hbmlmZXN0IHNldHRpbmdzIGRlZmluZWQgZm9yIGEgc3BlY2lmaWMgY29udHJvbCB3aXRoaW4gY29udHJvbENvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIG9yIG9iamVjdCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHNwZWNpZmljIGFubm90YXRpb24gcGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248VFQgPSBDb250cm9sTWFuaWZlc3RDb25maWd1cmF0aW9uPihhbm5vdGF0aW9uUGF0aDogc3RyaW5nIHwgQW5ub3RhdGlvblRlcm08dW5rbm93bj4pOiBUVCB7XG5cdFx0aWYgKGlzQW5ub3RhdGlvblRlcm0oYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb248VFQ+KFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aC5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCBoYXNFbnRpdHlTZXRLZXlJbk1hbmlmZXN0ID1cblx0XHRcdHR5cGVvZiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA9PT0gXCJzdHJpbmdcIiAmJiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSEubGVuZ3RoID4gMDtcblx0XHRjb25zdCBoYXNDb250ZXh0UGF0aEtleUluTWFuaWZlc3QgPVxuXHRcdFx0dHlwZW9mIHRoaXMubWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgPT09IFwic3RyaW5nXCIgJiYgdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSEubGVuZ3RoID4gMDtcblx0XHRjb25zdCBpc1BhdGhBYnNvbHV0ZSA9IGFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBtdWx0aXBsZS1lbnRpdHlTZXQsIHdlIGNvbXBhcmUgdGhlIGVudGl0eSBzZXQgb2YgdGhlIENvbnRyb2xDb25maWd1cmF0aW9uIHdpdGggd2hhdCBpcyBzcGVjaWZpZWQgZWl0aGVyIGluIHRoZSAnZW50aXR5U2V0JyBvciAnY29udGV4dFBhdGgnIG1hbmlmZXN0IHNldHRpbmcuXG5cdFx0aWYgKCF0aGlzLm1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMubWFuaWZlc3RXcmFwcGVyLmdldENvbnRyb2xDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0IWlzUGF0aEFic29sdXRlICYmXG5cdFx0XHQoKGhhc0VudGl0eVNldEtleUluTWFuaWZlc3QgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGggIT09IGAvJHt0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKX1gKSB8fFxuXHRcdFx0XHQoaGFzQ29udGV4dFBhdGhLZXlJbk1hbmlmZXN0ICYmIHRoaXMuYmFzZUNvbnRleHRQYXRoICE9PSB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpKSlcblx0XHQpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbjxUVD4oYCR7dGhpcy5iYXNlQ29udGV4dFBhdGh9LyR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCkpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihgJHt0aGlzLmJhc2VDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYWJzb2x1dGUgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldGEgbW9kZWwgY29udGV4dC5cblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGFubm90YXRpb24gcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdCAqL1xuXHRnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmJhc2VDb250ZXh0UGF0aH0vJHtzQW5ub3RhdGlvblBhdGh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBlbnRpdHlTZXQuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVNldCBpZiBpdCBleGlzdHMuXG5cdCAqL1xuXHRnZXRFbnRpdHlTZXQoKTogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCBTaW5nbGV0b247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNvbnRleHQgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgY29udmVydGVyLlxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlQ29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKi9cblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5Q29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZXJ2aWNlIEVudGl0eUNvbnRhaW5lclxuXHQgKi9cblx0Z2V0RW50aXR5Q29udGFpbmVyKCk6IEVudGl0eUNvbnRhaW5lciB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMuZW50aXR5Q29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5VHlwZSBiYXNlZCBvbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVR5cGUuXG5cdCAqL1xuXHRnZXRFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgcGFyYW1ldGVyXG5cdCAqL1xuXHRnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0XHRyZXR1cm4gKGlzUGFyYW1ldGVyaXplZCAmJiBwYXJhbWV0ZXJFbnRpdHlUeXBlKSBhcyBFbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhbiBhbm5vdGF0aW9uIGZyb20gYW4gZW50aXR5IHR5cGUgYmFzZWQgb24gYW5ub3RhdGlvbiBwYXRoLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aCB0byBiZSBldmFsdWF0ZWRcblx0ICogQHJldHVybnMgVGhlIHRhcmdldCBhbm5vdGF0aW9uIHBhdGggYXMgd2VsbCBhcyBhIGNvbnZlcnRlciBjb250ZXh0IHRvIGdvIHdpdGggaXRcblx0ICovXG5cdGdldEVudGl0eVR5cGVBbm5vdGF0aW9uPFRUIGV4dGVuZHMgU2VydmljZU9iamVjdCB8IFJlY29yZENvbXBsZXhUeXBlPihhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogUmVzb2x2ZWRBbm5vdGF0aW9uQ29udGV4dDxUVD4ge1xuXHRcdGlmICghYW5ub3RhdGlvblBhdGguaW5jbHVkZXMoXCJAXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vdCBhbiBhbm5vdGF0aW9uIHBhdGg6ICcke2Fubm90YXRpb25QYXRofSdgKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc0Fic29sdXRlID0gYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIi9cIik7XG5cdFx0bGV0IHBhdGg6IHN0cmluZztcblxuXHRcdGlmIChpc0Fic29sdXRlKSB7XG5cdFx0XHQvLyBwYXRoIGNhbiBiZSB1c2VkIGFzLWlzXG5cdFx0XHRwYXRoID0gYW5ub3RhdGlvblBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGJ1aWxkIGFuIGFic29sdXRlIHBhdGggYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlICh0aGlzIGZ1bmN0aW9uIHdvcmtzIG9uIHRoZSB0eXBlISlcblx0XHRcdGNvbnN0IGJhc2UgPSB0aGlzLmdldENvbnRleHRQYXRoKCkuc3BsaXQoXCJAXCIsIDEpWzBdO1xuXHRcdFx0cGF0aCA9IGJhc2UuZW5kc1dpdGgoXCIvXCIpID8gYmFzZSArIGFubm90YXRpb25QYXRoIDogYCR7YmFzZX0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldDogUmVzb2x1dGlvblRhcmdldDxBbm5vdGF0aW9uVGVybTxUVD4+ID0gdGhpcy5yZXNvbHZlQWJzb2x1dGVQYXRoKHBhdGgpO1xuXG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRcdHsgdGFyZ2V0OiB0YXJnZXQudGFyZ2V0IGFzIFNlcnZpY2VPYmplY3QsIHZpc2l0ZWRPYmplY3RzOiB0YXJnZXQub2JqZWN0UGF0aCB9LFxuXHRcdFx0dGhpcy5jb252ZXJ0ZWRUeXBlcyxcblx0XHRcdGlzQWJzb2x1dGUgPyB1bmRlZmluZWQgOiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YW5ub3RhdGlvbjogdGFyZ2V0LnRhcmdldCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHR0aGlzLmNvbnZlcnRlZFR5cGVzLFxuXHRcdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdHRoaXMuZGlhZ25vc3RpY3MsXG5cdFx0XHRcdHRoaXMubWVyZ2VGbixcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aFxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgd29ya2luZyBvbiAoZS5nLiBMaXN0UmVwb3J0IC8gT2JqZWN0UGFnZSAvIC4uLikuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRlbnBsYXRlIHR5cGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udmVydGVkIHR5cGVzLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb252ZXJ0ZWQgdHlwZXNcblx0ICovXG5cdGdldENvbnZlcnRlZFR5cGVzKCk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0ZWRUeXBlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aCBiZXR3ZWVuIGFuIGFubm90YXRpb24gcGF0aCBhbmQgYW4gZW50aXR5IHR5cGUuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgYW5udG90YXRpb24gcGF0aC5cblx0ICovXG5cdGdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25QYXRoLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybSBhbiBlbnRpdHlUeXBlIGJhc2VkIHBhdGggdG8gYW4gZW50aXR5U2V0IGJhc2VkIG9uZSAodWk1IHRlbXBsYXRpbmcgZ2VuZXJhbGx5IGV4cGVjdCBhbiBlbnRpdHlTZXRCYXNlZFBhdGgpLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBiYXNlZCBhbm5vdGF0aW9uIHBhdGhcblx0ICovXG5cdGdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlUeXBlRlFOID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGlmIChcblx0XHRcdHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgfHxcblx0XHRcdCgodGhpcy5iYXNlQ29udGV4dFBhdGguc3RhcnRzV2l0aChcIi9cIikgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGgubWF0Y2goL1xcLy9nKSkgfHwgW10pLmxlbmd0aCA+IDFcblx0XHQpIHtcblx0XHRcdGxldCByZXBsYWNlZEFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGgucmVwbGFjZShlbnRpdHlUeXBlRlFOLCBcIi9cIik7XG5cdFx0XHRpZiAocmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5sZW5ndGggPiAyICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMF0gPT09IFwiL1wiICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMV0gPT09IFwiL1wiKSB7XG5cdFx0XHRcdHJlcGxhY2VkQW5ub3RhdGlvblBhdGggPSByZXBsYWNlZEFubm90YXRpb25QYXRoLnN1YnN0cmluZygxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIChyZXBsYWNlZEFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcmVwbGFjZWRBbm5vdGF0aW9uUGF0aCA6IGAvJHtyZXBsYWNlZEFubm90YXRpb25QYXRofWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYC8ke2Fubm90YXRpb25QYXRofWA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBtYW5pZmVzdCB3cmFwcGVyIGZvciB0aGUgY3VycmVudCBjb250ZXh0LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBtYW5pZmVzdCB3cmFwcGVyXG5cdCAqL1xuXHRnZXRNYW5pZmVzdFdyYXBwZXIoKTogTWFuaWZlc3RXcmFwcGVyIHtcblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXI7XG5cdH1cblxuXHRnZXREaWFnbm9zdGljcygpOiBJRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLmRpYWdub3N0aWNzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB0YXJnZXQgZnJvbSBhbiBhYnNvbHV0ZSBwYXRoLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB3ZSB3YW50IHRvIGdldCB0aGUgdGFyZ2V0XG5cdCAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoXG5cdCAqL1xuXHRyZXNvbHZlQWJzb2x1dGVQYXRoPFRUPihwYXRoOiBzdHJpbmcpOiBSZXNvbHV0aW9uVGFyZ2V0PFRUPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgocGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSBuZXcgY29udmVydGVyIGNvbnRleHQsIHNjb3BlZCBmb3IgYSBkaWZmZXJlbnQgY29udGV4dCBwYXRoLlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIHBhdGggd2Ugd2FudCB0byBvcmNoZXN0cmF0ZSB0aGUgY29udmVydGVyIGNvbnRleHQgYXJvdW5kXG5cdCAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgY29udGV4dCBmb3IgdGhlIHN1YiBwYXRoXG5cdCAqL1xuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEs+KGNvbnRleHRQYXRoOiBzdHJpbmcpOiBDb252ZXJ0ZXJDb250ZXh0PEs+IHtcblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PEs+ID0gdGhpcy5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxLPihjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQocmVzb2x2ZWRNZXRhUGF0aCwgdGhpcy5jb252ZXJ0ZWRUeXBlcyk7XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PEs+KHRoaXMuY29udmVydGVkVHlwZXMsIHRoaXMubWFuaWZlc3RTZXR0aW5ncywgdGhpcy5kaWFnbm9zdGljcywgdGhpcy5tZXJnZUZuLCB0YXJnZXRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIGFubm90YXRpb25zIG9mIGEgZ2l2ZW4gdGVybSBhbmQgdm9jYWJ1bGFyeSBvbiBhbiBlbnRpdHkgdHlwZVxuXHQgKiAob3Igb24gdGhlIGN1cnJlbnQgZW50aXR5IHR5cGUgaWYgZW50aXR5VHlwZSBpc24ndCBzcGVjaWZpZWQpLlxuXHQgKiBAcGFyYW0gdm9jYWJ1bGFyeU5hbWVcblx0ICogQHBhcmFtIGFubm90YXRpb25UZXJtXG5cdCAqIEBwYXJhbSBbYW5ub3RhdGlvblNvdXJjZXNdXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0ZXJtIGFuZCB2b2NhYnVsYXJ5IGZyb20gYW4gZW50aXR5IHR5cGVcblx0ICovXG5cdGdldEFubm90YXRpb25zQnlUZXJtPFRUPihcblx0XHR2b2NhYnVsYXJ5TmFtZToga2V5b2YgRW50aXR5VHlwZUFubm90YXRpb25zLFxuXHRcdGFubm90YXRpb25UZXJtOiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvblNvdXJjZXM6IChTZXJ2aWNlT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gW3RoaXMuZ2V0RW50aXR5VHlwZSgpXVxuXHQpOiBBbm5vdGF0aW9uVGVybTxUVD5bXSB7XG5cdFx0bGV0IG91dEFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxUVD5bXSA9IFtdO1xuXHRcdGFubm90YXRpb25Tb3VyY2VzLmZvckVhY2goKGFubm90YXRpb25Tb3VyY2UpID0+IHtcblx0XHRcdGlmIChhbm5vdGF0aW9uU291cmNlKSB7XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uVGVybTxUVD4gJiB7IHRlcm06IHN0cmluZyB9PiA9XG5cdFx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZT8uYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeU5hbWVdIHx8IHt9O1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRBbm5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcigoYW5ub3RhdGlvbikgPT4gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbl0udGVybSA9PT0gYW5ub3RhdGlvblRlcm0pXG5cdFx0XHRcdFx0XHQucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBBbm5vdGF0aW9uVGVybTxUVD5bXSwga2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0cHJldmlvdXNWYWx1ZS5wdXNoKGFubm90YXRpb25zW2tleV0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0XHRcdH0sIG91dEFubm90YXRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvdXRBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHJlbGF0aXZlIG1vZGVsIHBhdGggYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoLlxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBvciB1bmRlZmluZWQgaWYgdGhlIHBhdGggaXMgbm90IHJlc29sdmVhYmxlXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCk6IEZ1bmN0aW9uIHtcblx0XHRjb25zdCB0YXJnZXREYXRhTW9kZWxQYXRoID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHRcdHJldHVybiBmdW5jdGlvbiAoc1BhdGg6IHN0cmluZykge1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgodGFyZ2V0RGF0YU1vZGVsUGF0aCwgc1BhdGgpO1xuXHRcdFx0cmV0dXJuIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKTtcblx0XHR9O1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZSB0aGUgY29udmVydGVyIGNvbnRleHQgbmVjZXNzYXJ5IGZvciBhIG1hY3JvIGJhc2VkIG9uIGEgbWV0YW1vZGVsIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBlbnRpdHlOYW1lXG5cdCAqIEBwYXJhbSBvTWV0YU1vZGVsQ29udGV4dFxuXHQgKiBAcGFyYW0gZGlhZ25vc3RpY3Ncblx0ICogQHBhcmFtIG1lcmdlRm5cblx0ICogQHBhcmFtIHRhcmdldERhdGFNb2RlbFBhdGhcblx0ICogQHBhcmFtIG1hbmlmZXN0U2V0dGluZ3Ncblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgY29udmVydGVyIGNvbnRleHRcblx0ICovXG5cdHN0YXRpYyBjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0ZW50aXR5TmFtZTogc3RyaW5nLFxuXHRcdG9NZXRhTW9kZWxDb250ZXh0OiBDb250ZXh0IHwgT0RhdGFNZXRhTW9kZWwsXG5cdFx0ZGlhZ25vc3RpY3M6IElEaWFnbm9zdGljcyxcblx0XHRtZXJnZUZuOiBGdW5jdGlvbixcblx0XHR0YXJnZXREYXRhTW9kZWxQYXRoPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+LFxuXHRcdG1hbmlmZXN0U2V0dGluZ3M6IEJhc2VNYW5pZmVzdFNldHRpbmdzID0ge30gYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3Ncblx0KTogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+IHtcblx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9NZXRhTW9kZWxDb250ZXh0LmlzQShcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YU1ldGFNb2RlbFwiKVxuXHRcdFx0PyAob01ldGFNb2RlbENvbnRleHQgYXMgT0RhdGFNZXRhTW9kZWwpXG5cdFx0XHQ6ICgob01ldGFNb2RlbENvbnRleHQgYXMgQ29udGV4dCkuZ2V0TW9kZWwoKSBhcyB1bmtub3duIGFzIE9EYXRhTWV0YU1vZGVsKTtcblx0XHRjb25zdCBvQ29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMob01ldGFNb2RlbCk7XG5cdFx0bGV0IHRhcmdldEVudGl0eVNldDogU2luZ2xldG9uIHwgRW50aXR5U2V0ID0gb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVNldHMuZmluZChcblx0XHRcdChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5uYW1lID09PSBlbnRpdHlOYW1lXG5cdFx0KSBhcyBFbnRpdHlTZXQ7XG5cdFx0aWYgKCF0YXJnZXRFbnRpdHlTZXQpIHtcblx0XHRcdHRhcmdldEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5zaW5nbGV0b25zLmZpbmQoKGVudGl0eVNldCkgPT4gZW50aXR5U2V0Lm5hbWUgPT09IGVudGl0eU5hbWUpIGFzIFNpbmdsZXRvbjtcblx0XHR9XG5cdFx0aWYgKCF0YXJnZXREYXRhTW9kZWxQYXRoIHx8IHRhcmdldEVudGl0eVNldCAhPT0gdGFyZ2V0RGF0YU1vZGVsUGF0aC5zdGFydGluZ0VudGl0eVNldCkge1xuXHRcdFx0dGFyZ2V0RGF0YU1vZGVsUGF0aCA9IHtcblx0XHRcdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXM6IFtdLFxuXHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQ6IHRhcmdldEVudGl0eVNldCxcblx0XHRcdFx0Ly8gY29udGFpbmVkIGVudGl0eSBkb2VzIG5vdCBoYXZlIGFuIGVudGl0eSBzZXQgYnV0IG9ubHkgZW50aXR5IHR5cGVcblx0XHRcdFx0dGFyZ2V0RW50aXR5VHlwZTpcblx0XHRcdFx0XHR0YXJnZXRFbnRpdHlTZXQ/LmVudGl0eVR5cGUgfHwgb0NvbnZlcnRlZE1ldGFkYXRhLmVudGl0eVR5cGVzLmZpbmQoKGVudGl0eVR5cGUpID0+IGVudGl0eVR5cGUubmFtZSA9PT0gZW50aXR5TmFtZSksXG5cdFx0XHRcdHRhcmdldE9iamVjdDogdGFyZ2V0RW50aXR5U2V0IGFzIEVudGl0eVNldCxcblx0XHRcdFx0Y29udmVydGVkVHlwZXM6IG9Db252ZXJ0ZWRNZXRhZGF0YVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0KG9Db252ZXJ0ZWRNZXRhZGF0YSwgbWFuaWZlc3RTZXR0aW5ncywgZGlhZ25vc3RpY3MsIG1lcmdlRm4sIHRhcmdldERhdGFNb2RlbFBhdGgpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc29sdmVzIGEgbWV0YWRhdGEgYmluZGluZyB0byBpdHMgdGV4dC5cblx0ICogQHBhcmFtIHBhdGhcblx0ICogQHJldHVybnMgVGhlIHJlc29sdmVkIHRleHQgaWYgcG9zc2libGUsIGVsc2UgdGhlIGlucHV0IHZhbHVlIG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgcGF0aCB3YXMgdW5kZWZpbmVkXG5cdCAqL1xuXHRmZXRjaFRleHRGcm9tTWV0YU1vZGVsKHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIE1vZGVsSGVscGVyLmZldGNoVGV4dEZyb21NZXRhTW9kZWwocGF0aCwgdGhpcyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29udmVydGVyQ29udGV4dDtcbiJdLCJtYXBwaW5ncyI6Ijs7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
407
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc0Fubm90YXRpb25UZXJtIiwidkFubm90YXRpb25QYXRoIiwiZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCIsInJlc29sdmVkTWV0YVBhdGgiLCJjb252ZXJ0ZWRUeXBlcyIsInJvb3RFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5U2V0IiwicHJldmlvdXNFbnRpdHlTZXQiLCJjdXJyZW50RW50aXR5VHlwZSIsIm5hdmlnYXRlZFBhdGhzIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJvYmplY3RQYXRoIiwiZm9yRWFjaCIsIm9iamVjdFBhcnQiLCJfY3VycmVudEVudGl0eVNldCIsImlzU2VydmljZU9iamVjdCIsIl90eXBlIiwicHVzaCIsIm5hbWUiLCJ0YXJnZXRUeXBlIiwibmF2aWdhdGlvblByb3BlcnR5QmluZGluZyIsImhhc093blByb3BlcnR5Iiwiam9pbiIsInVuZGVmaW5lZCIsImVudGl0eVR5cGUiLCJkYXRhTW9kZWxQYXRoIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJ0YXJnZXRFbnRpdHlUeXBlIiwidGFyZ2V0RW50aXR5U2V0IiwiY29udGV4dExvY2F0aW9uIiwidGFyZ2V0T2JqZWN0IiwidGFyZ2V0IiwiQ29udmVydGVyQ29udGV4dCIsIm1hbmlmZXN0U2V0dGluZ3MiLCJkaWFnbm9zdGljcyIsIm1lcmdlRm4iLCJ0YXJnZXREYXRhTW9kZWxQYXRoIiwibWFuaWZlc3RXcmFwcGVyIiwiTWFuaWZlc3RXcmFwcGVyIiwiYmFzZUNvbnRleHRQYXRoIiwiZ2V0VGFyZ2V0T2JqZWN0UGF0aCIsIl9wcm90byIsInByb3RvdHlwZSIsIl9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZSIsImZ1bGx5UXVhbGlmaWVkTmFtZSIsImVudGl0eVR5cGVzIiwiZmluZCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlQW5ub3RhdGlvbiIsInJlcGxhY2UiLCJnZXRBbm5vdGF0aW9uRW50aXR5VHlwZSIsImFubm90YXRpb24iLCJhbm5vdGF0aW9uUGF0aCIsIkVycm9yIiwiZ2V0TWFuaWZlc3RDb250cm9sQ29uZmlndXJhdGlvbiIsImdldENvbnRyb2xDb25maWd1cmF0aW9uIiwiaGFzRW50aXR5U2V0S2V5SW5NYW5pZmVzdCIsImdldEVudGl0eVNldCIsImxlbmd0aCIsImhhc0NvbnRleHRQYXRoS2V5SW5NYW5pZmVzdCIsImdldENvbnRleHRQYXRoIiwiaXNQYXRoQWJzb2x1dGUiLCJoYXNNdWx0aXBsZUVudGl0eVNldHMiLCJPYmplY3QiLCJrZXlzIiwiZ2V0QWJzb2x1dGVBbm5vdGF0aW9uUGF0aCIsInNBbm5vdGF0aW9uUGF0aCIsImdldERhdGFNb2RlbE9iamVjdFBhdGgiLCJnZXRFbnRpdHlDb250YWluZXIiLCJlbnRpdHlDb250YWluZXIiLCJnZXRFbnRpdHlUeXBlIiwiZ2V0UGFyYW1ldGVyRW50aXR5VHlwZSIsIl9wYXJhbWV0ZXJFbnRpdHlUeXBlJCIsIl9wYXJhbWV0ZXJFbnRpdHlUeXBlJDIiLCJwYXJhbWV0ZXJFbnRpdHlUeXBlIiwiaXNQYXJhbWV0ZXJpemVkIiwiYW5ub3RhdGlvbnMiLCJDb21tb24iLCJSZXN1bHRDb250ZXh0IiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJpbmNsdWRlcyIsImlzQWJzb2x1dGUiLCJwYXRoIiwiYmFzZSIsInNwbGl0IiwiZW5kc1dpdGgiLCJyZXNvbHZlQWJzb2x1dGVQYXRoIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGgiLCJ2aXNpdGVkT2JqZWN0cyIsImNvbnZlcnRlckNvbnRleHQiLCJnZXRUZW1wbGF0ZVR5cGUiLCJnZXRDb252ZXJ0ZWRUeXBlcyIsImdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlTZXRCYXNlZEFubm90YXRpb25QYXRoIiwiZW50aXR5VHlwZUZRTiIsIm1hdGNoIiwicmVwbGFjZWRBbm5vdGF0aW9uUGF0aCIsInN1YnN0cmluZyIsImdldE1hbmlmZXN0V3JhcHBlciIsImdldERpYWdub3N0aWNzIiwicmVzb2x2ZVBhdGgiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yIiwiY29udGV4dFBhdGgiLCJ0YXJnZXRQYXRoIiwiZ2V0QW5ub3RhdGlvbnNCeVRlcm0iLCJ2b2NhYnVsYXJ5TmFtZSIsImFubm90YXRpb25UZXJtIiwiYW5ub3RhdGlvblNvdXJjZXMiLCJhcmd1bWVudHMiLCJvdXRBbm5vdGF0aW9ucyIsImFubm90YXRpb25Tb3VyY2UiLCJmaWx0ZXIiLCJ0ZXJtIiwicmVkdWNlIiwicHJldmlvdXNWYWx1ZSIsImtleSIsImdldFJlbGF0aXZlTW9kZWxQYXRoRnVuY3Rpb24iLCJjb252ZXJ0ZWRNZXRhTW9kZWwiLCJzUGF0aCIsInNpbmdsZXRvblBhdGgiLCJzaW5nbGV0b25QYXRoVmlzaXRvciIsImVuaGFuY2VkUGF0aCIsImVuaGFuY2VEYXRhTW9kZWxQYXRoIiwiY29udGV4dFJlbGF0aXZlUGF0aCIsImdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJlbnRpdHlOYW1lIiwib01ldGFNb2RlbENvbnRleHQiLCJvTWV0YU1vZGVsIiwiaXNBIiwiZ2V0TW9kZWwiLCJvQ29udmVydGVkTWV0YWRhdGEiLCJjb252ZXJ0VHlwZXMiLCJlbnRpdHlTZXRzIiwiZW50aXR5U2V0Iiwic2luZ2xldG9ucyIsIl90YXJnZXRFbnRpdHlTZXQiLCJmZXRjaFRleHRGcm9tTWV0YU1vZGVsIiwiTW9kZWxIZWxwZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkNvbnZlcnRlckNvbnRleHQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUge1xuXHRBbm5vdGF0aW9uVGVybSxcblx0Q29udmVydGVkTWV0YWRhdGEsXG5cdEVudGl0eUNvbnRhaW5lcixcblx0RW50aXR5U2V0LFxuXHRFbnRpdHlUeXBlLFxuXHROYXZpZ2F0aW9uUHJvcGVydHksXG5cdFJlc29sdXRpb25UYXJnZXQsXG5cdFNlcnZpY2VPYmplY3QsXG5cdFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uLFxuXHRTaW5nbGV0b25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFJlY29yZENvbXBsZXhUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHlUeXBlQW5ub3RhdGlvbnMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0VkbV9UeXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncywgQ29udHJvbE1hbmlmZXN0Q29uZmlndXJhdGlvbiwgVGVtcGxhdGVUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IGNvbnZlcnRUeXBlcywgZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RGcm9tUGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHR5cGUgeyBJRGlhZ25vc3RpY3MsIFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBzaW5nbGV0b25QYXRoVmlzaXRvciB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgaXNTZXJ2aWNlT2JqZWN0IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvVHlwZUd1YXJkc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgsIGdldFRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuXG5leHBvcnQgdHlwZSBSZXNvbHZlZEFubm90YXRpb25Db250ZXh0PFQ+ID0ge1xuXHRhbm5vdGF0aW9uOiBBbm5vdGF0aW9uVGVybTxUPiB8IHVuZGVmaW5lZDtcblx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xufTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhbiBvYmplY3QgaXMgYW4gYW5ub3RhdGlvbiB0ZXJtLlxuICogQHBhcmFtIHZBbm5vdGF0aW9uUGF0aFxuICogQHJldHVybnMgYHRydWVgIGlmIGl0J3MgYW4gYW5ub3RhdGlvbiB0ZXJtXG4gKi9cbmNvbnN0IGlzQW5ub3RhdGlvblRlcm0gPSBmdW5jdGlvbiA8VD4odkFubm90YXRpb25QYXRoOiBzdHJpbmcgfCBBbm5vdGF0aW9uVGVybTxUPik6IHZBbm5vdGF0aW9uUGF0aCBpcyBBbm5vdGF0aW9uVGVybTxUPiB7XG5cdHJldHVybiB0eXBlb2YgdkFubm90YXRpb25QYXRoID09PSBcIm9iamVjdFwiO1xufTtcblxuY29uc3QgZ2V0RGF0YU1vZGVsUGF0aEZvckVudGl0eVNldCA9IGZ1bmN0aW9uIDxUPihcblx0cmVzb2x2ZWRNZXRhUGF0aDogUmVzb2x1dGlvblRhcmdldDxUPixcblx0Y29udmVydGVkVHlwZXM6IENvbnZlcnRlZE1ldGFkYXRhXG4pOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0bGV0IHJvb3RFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IGN1cnJlbnRFbnRpdHlTZXQ6IEVudGl0eVNldCB8IHVuZGVmaW5lZDtcblx0bGV0IHByZXZpb3VzRW50aXR5U2V0OiBFbnRpdHlTZXQgfCB1bmRlZmluZWQ7XG5cdGxldCBjdXJyZW50RW50aXR5VHlwZTogRW50aXR5VHlwZSB8IHVuZGVmaW5lZDtcblx0bGV0IG5hdmlnYXRlZFBhdGhzOiBzdHJpbmdbXSA9IFtdO1xuXHRjb25zdCBuYXZpZ2F0aW9uUHJvcGVydGllczogTmF2aWdhdGlvblByb3BlcnR5W10gPSBbXTtcblx0cmVzb2x2ZWRNZXRhUGF0aC5vYmplY3RQYXRoLmZvckVhY2goKG9iamVjdFBhcnQ6IFNlcnZpY2VPYmplY3RBbmRBbm5vdGF0aW9uKSA9PiB7XG5cdFx0aWYgKGlzU2VydmljZU9iamVjdChvYmplY3RQYXJ0KSkge1xuXHRcdFx0c3dpdGNoIChvYmplY3RQYXJ0Ll90eXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJOYXZpZ2F0aW9uUHJvcGVydHlcIjpcblx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocy5wdXNoKG9iamVjdFBhcnQubmFtZSk7XG5cdFx0XHRcdFx0bmF2aWdhdGlvblByb3BlcnRpZXMucHVzaChvYmplY3RQYXJ0KTtcblx0XHRcdFx0XHRjdXJyZW50RW50aXR5VHlwZSA9IG9iamVjdFBhcnQudGFyZ2V0VHlwZTtcblx0XHRcdFx0XHRpZiAocHJldmlvdXNFbnRpdHlTZXQgJiYgcHJldmlvdXNFbnRpdHlTZXQubmF2aWdhdGlvblByb3BlcnR5QmluZGluZy5oYXNPd25Qcm9wZXJ0eShuYXZpZ2F0ZWRQYXRocy5qb2luKFwiL1wiKSkpIHtcblx0XHRcdFx0XHRcdGN1cnJlbnRFbnRpdHlTZXQgPSBwcmV2aW91c0VudGl0eVNldC5uYXZpZ2F0aW9uUHJvcGVydHlCaW5kaW5nW25hdmlnYXRlZFBhdGhzLmpvaW4oXCIvXCIpXSBhcyBFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0XHRuYXZpZ2F0ZWRQYXRocyA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcIkVudGl0eVNldFwiOlxuXHRcdFx0XHRcdGlmIChyb290RW50aXR5U2V0ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdHJvb3RFbnRpdHlTZXQgPSBvYmplY3RQYXJ0O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjdXJyZW50RW50aXR5U2V0ID0gb2JqZWN0UGFydDtcblx0XHRcdFx0XHRwcmV2aW91c0VudGl0eVNldCA9IGN1cnJlbnRFbnRpdHlTZXQ7XG5cdFx0XHRcdFx0Y3VycmVudEVudGl0eVR5cGUgPSBjdXJyZW50RW50aXR5U2V0Py5lbnRpdHlUeXBlO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdGNvbnN0IGRhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD4gPSB7XG5cdFx0c3RhcnRpbmdFbnRpdHlTZXQ6IHJvb3RFbnRpdHlTZXQgYXMgRW50aXR5U2V0LFxuXHRcdHRhcmdldEVudGl0eVR5cGU6IGN1cnJlbnRFbnRpdHlUeXBlIGFzIEVudGl0eVR5cGUsXG5cdFx0dGFyZ2V0RW50aXR5U2V0OiBjdXJyZW50RW50aXR5U2V0LFxuXHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBuYXZpZ2F0aW9uUHJvcGVydGllcyxcblx0XHRjb250ZXh0TG9jYXRpb246IHVuZGVmaW5lZCxcblx0XHR0YXJnZXRPYmplY3Q6IHJlc29sdmVkTWV0YVBhdGgudGFyZ2V0LFxuXHRcdGNvbnZlcnRlZFR5cGVzOiBjb252ZXJ0ZWRUeXBlc1xuXHR9O1xuXHRkYXRhTW9kZWxQYXRoLmNvbnRleHRMb2NhdGlvbiA9IGRhdGFNb2RlbFBhdGg7XG5cdHJldHVybiBkYXRhTW9kZWxQYXRoO1xufTtcblxuLyoqXG4gKiBDcmVhdGUgYSBDb252ZXJ0ZXJDb250ZXh0IG9iamVjdCB0aGF0IHdpbGwgYmUgdXNlZCB3aXRoaW4gdGhlIGNvbnZlcnRlcnMuXG4gKiBAcGFyYW0ge0NvbnZlcnRlZE1ldGFkYXRhfSBvQ29udmVydGVkVHlwZXMgVGhlIGNvbnZlcnRlZCBhbm5vdGF0aW9uIGFuZCBzZXJ2aWNlIHR5cGVzXG4gKiBAcGFyYW0ge0Jhc2VNYW5pZmVzdFNldHRpbmdzfSBvTWFuaWZlc3RTZXR0aW5ncyBUaGUgbWFuaWZlc3RTZXR0aW5ncyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBwYWdlXG4gKiBAcGFyYW0ge1RlbXBsYXRlVHlwZX0gdGVtcGxhdGVUeXBlIFRoZSB0eXBlIG9mIHRlbXBsYXRlIHdlJ3JlIGxvb2tpbmcgYXQgcmlnaHQgbm93XG4gKiBAcGFyYW0ge0lEaWFnbm9zdGljc30gZGlhZ25vc3RpY3MgVGhlIGRpYWdub3N0aWNzIHNoaW1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IG1lcmdlRm4gVGhlIGZ1bmN0aW9uIHRvIGJlIHVzZWQgdG8gcGVyZm9tIHNvbWUgZGVlcCBtZXJnZXMgYmV0d2VlbiBvYmplY3RcbiAqIEBwYXJhbSB7RGF0YU1vZGVsT2JqZWN0UGF0aH0gdGFyZ2V0RGF0YU1vZGVsUGF0aCBUaGUgZ2xvYmFsIHBhdGggdG8gcmVhY2ggdGhlIGVudGl0eVNldFxuICogQHJldHVybnMge0NvbnZlcnRlckNvbnRleHR9IEEgY29udmVydGVyIGNvbnRleHQgZm9yIHRoZSBjb252ZXJ0ZXJzXG4gKi9cbmNsYXNzIENvbnZlcnRlckNvbnRleHQ8VCA9IFBhZ2VDb250ZXh0UGF0aFRhcmdldD4ge1xuXHRwcml2YXRlIG1hbmlmZXN0V3JhcHBlcjogTWFuaWZlc3RXcmFwcGVyO1xuXG5cdHByaXZhdGUgYmFzZUNvbnRleHRQYXRoOiBzdHJpbmc7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHJpdmF0ZSBjb252ZXJ0ZWRUeXBlczogQ29udmVydGVkTWV0YWRhdGEsXG5cdFx0cHJpdmF0ZSBtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyxcblx0XHRwcml2YXRlIGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0cHJpdmF0ZSBtZXJnZUZuOiBGdW5jdGlvbixcblx0XHRwcml2YXRlIHRhcmdldERhdGFNb2RlbFBhdGg6IERhdGFNb2RlbE9iamVjdFBhdGg8VD5cblx0KSB7XG5cdFx0dGhpcy5tYW5pZmVzdFdyYXBwZXIgPSBuZXcgTWFuaWZlc3RXcmFwcGVyKHRoaXMubWFuaWZlc3RTZXR0aW5ncywgbWVyZ2VGbik7XG5cdFx0dGhpcy5iYXNlQ29udGV4dFBhdGggPSBnZXRUYXJnZXRPYmplY3RQYXRoKHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aCk7XG5cdH1cblxuXHRwcml2YXRlIF9nZXRFbnRpdHlUeXBlRnJvbUZ1bGx5UXVhbGlmaWVkTmFtZShmdWxseVF1YWxpZmllZE5hbWU6IHN0cmluZyk6IEVudGl0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLmNvbnZlcnRlZFR5cGVzLmVudGl0eVR5cGVzLmZpbmQoKGVudGl0eVR5cGUpID0+IHtcblx0XHRcdGlmIChmdWxseVF1YWxpZmllZE5hbWUuc3RhcnRzV2l0aChlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSkpIHtcblx0XHRcdFx0Y29uc3QgcmVwbGFjZUFubm90YXRpb24gPSBmdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZShlbnRpdHlUeXBlLmZ1bGx5UXVhbGlmaWVkTmFtZSwgXCJcIik7XG5cdFx0XHRcdHJldHVybiByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiL1wiKSB8fCByZXBsYWNlQW5ub3RhdGlvbi5zdGFydHNXaXRoKFwiQFwiKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgZW50aXR5VHlwZSBhc3NvY2lhdGVkIHdpdGggYW4gYW5ub3RhdGlvbiBvYmplY3QuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uIFRoZSBhbm5vdGF0aW9uIG9iamVjdCBmb3Igd2hpY2ggd2Ugd2FudCB0byBmaW5kIHRoZSBlbnRpdHlUeXBlXG5cdCAqIEByZXR1cm5zIFRoZSBFbnRpdHlUeXBlIHRoZSBhbm5vdGF0aW9uIHJlZmVycyB0b1xuXHQgKi9cblx0Z2V0QW5ub3RhdGlvbkVudGl0eVR5cGU8VFQgZXh0ZW5kcyBTZXJ2aWNlT2JqZWN0QW5kQW5ub3RhdGlvbj4oXG5cdFx0YW5ub3RhdGlvbj86IFRUIGV4dGVuZHMgU2VydmljZU9iamVjdCA/IFRUIDogQW5ub3RhdGlvblRlcm08VFQ+XG5cdCk6IEVudGl0eVR5cGUge1xuXHRcdGlmIChhbm5vdGF0aW9uICYmIHR5cGVvZiBhbm5vdGF0aW9uID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRjb25zdCBhbm5vdGF0aW9uUGF0aCA9IGFubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdFx0Y29uc3QgdGFyZ2V0RW50aXR5VHlwZSA9IHRoaXMuX2dldEVudGl0eVR5cGVGcm9tRnVsbHlRdWFsaWZpZWROYW1lKGFubm90YXRpb25QYXRoKTtcblx0XHRcdGlmICghdGFyZ2V0RW50aXR5VHlwZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBmaW5kIEVudGl0eSBUeXBlIGZvciAke2Fubm90YXRpb24uZnVsbHlRdWFsaWZpZWROYW1lfWApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRhcmdldEVudGl0eVR5cGU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIG1hbmlmZXN0IHNldHRpbmdzIGRlZmluZWQgZm9yIGEgc3BlY2lmaWMgY29udHJvbCB3aXRoaW4gY29udHJvbENvbmZpZ3VyYXRpb24uXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aCBUaGUgYW5ub3RhdGlvbiBwYXRoIG9yIG9iamVjdCB0byBldmFsdWF0ZVxuXHQgKiBAcmV0dXJucyBUaGUgY29udHJvbCBjb25maWd1cmF0aW9uIGZvciB0aGF0IHNwZWNpZmljIGFubm90YXRpb24gcGF0aCBpZiBpdCBleGlzdHNcblx0ICovXG5cdGdldE1hbmlmZXN0Q29udHJvbENvbmZpZ3VyYXRpb248VFQgPSBDb250cm9sTWFuaWZlc3RDb25maWd1cmF0aW9uPihhbm5vdGF0aW9uUGF0aDogc3RyaW5nIHwgQW5ub3RhdGlvblRlcm08dW5rbm93bj4pOiBUVCB7XG5cdFx0aWYgKGlzQW5ub3RhdGlvblRlcm0oYW5ub3RhdGlvblBhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udHJvbENvbmZpZ3VyYXRpb248VFQ+KFxuXHRcdFx0XHRhbm5vdGF0aW9uUGF0aC5mdWxseVF1YWxpZmllZE5hbWUucmVwbGFjZSh0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpXG5cdFx0XHQpO1xuXHRcdH1cblx0XHRjb25zdCBoYXNFbnRpdHlTZXRLZXlJbk1hbmlmZXN0ID1cblx0XHRcdHR5cGVvZiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSA9PT0gXCJzdHJpbmdcIiAmJiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKSEubGVuZ3RoID4gMDtcblx0XHRjb25zdCBoYXNDb250ZXh0UGF0aEtleUluTWFuaWZlc3QgPVxuXHRcdFx0dHlwZW9mIHRoaXMubWFuaWZlc3RXcmFwcGVyLmdldENvbnRleHRQYXRoKCkgPT09IFwic3RyaW5nXCIgJiYgdGhpcy5tYW5pZmVzdFdyYXBwZXIuZ2V0Q29udGV4dFBhdGgoKSEubGVuZ3RoID4gMDtcblx0XHRjb25zdCBpc1BhdGhBYnNvbHV0ZSA9IGFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCIvXCIpO1xuXG5cdFx0Ly8gSW4gY2FzZSBvZiBtdWx0aXBsZS1lbnRpdHlTZXQsIHdlIGNvbXBhcmUgdGhlIGVudGl0eSBzZXQgb2YgdGhlIENvbnRyb2xDb25maWd1cmF0aW9uIHdpdGggd2hhdCBpcyBzcGVjaWZpZWQgZWl0aGVyIGluIHRoZSAnZW50aXR5U2V0JyBvciAnY29udGV4dFBhdGgnIG1hbmlmZXN0IHNldHRpbmcuXG5cdFx0aWYgKCF0aGlzLm1hbmlmZXN0V3JhcHBlci5oYXNNdWx0aXBsZUVudGl0eVNldHMoKSkge1xuXHRcdFx0cmV0dXJuIHRoaXMubWFuaWZlc3RXcmFwcGVyLmdldENvbnRyb2xDb25maWd1cmF0aW9uKGFubm90YXRpb25QYXRoKTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0IWlzUGF0aEFic29sdXRlICYmXG5cdFx0XHQoKGhhc0VudGl0eVNldEtleUluTWFuaWZlc3QgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGggIT09IGAvJHt0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRFbnRpdHlTZXQoKX1gKSB8fFxuXHRcdFx0XHQoaGFzQ29udGV4dFBhdGhLZXlJbk1hbmlmZXN0ICYmIHRoaXMuYmFzZUNvbnRleHRQYXRoICE9PSB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250ZXh0UGF0aCgpKSlcblx0XHQpIHtcblx0XHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbjxUVD4oYCR7dGhpcy5iYXNlQ29udGV4dFBhdGh9LyR7YW5ub3RhdGlvblBhdGh9YCk7XG5cdFx0fSBlbHNlIGlmIChPYmplY3Qua2V5cyh0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCkpLmxlbmd0aCA+IDApIHtcblx0XHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihhbm5vdGF0aW9uUGF0aCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRDb250cm9sQ29uZmlndXJhdGlvbihgJHt0aGlzLmJhc2VDb250ZXh0UGF0aH0vJHthbm5vdGF0aW9uUGF0aH1gKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgYW4gYWJzb2x1dGUgYW5ub3RhdGlvbiBwYXRoIGJhc2VkIG9uIHRoZSBjdXJyZW50IG1ldGEgbW9kZWwgY29udGV4dC5cblx0ICogQHBhcmFtIHNBbm5vdGF0aW9uUGF0aCBUaGUgcmVsYXRpdmUgYW5ub3RhdGlvbiBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSBjb3JyZWN0IGFubm90YXRpb24gcGF0aCBiYXNlZCBvbiB0aGUgY3VycmVudCBjb250ZXh0XG5cdCAqL1xuXHRnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHNBbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoIXNBbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIHNBbm5vdGF0aW9uUGF0aDtcblx0XHR9XG5cdFx0aWYgKHNBbm5vdGF0aW9uUGF0aFswXSA9PT0gXCIvXCIpIHtcblx0XHRcdHJldHVybiBzQW5ub3RhdGlvblBhdGg7XG5cdFx0fVxuXHRcdHJldHVybiBgJHt0aGlzLmJhc2VDb250ZXh0UGF0aH0vJHtzQW5ub3RhdGlvblBhdGh9YDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY3VycmVudCBlbnRpdHlTZXQuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVNldCBpZiBpdCBleGlzdHMuXG5cdCAqL1xuXHRnZXRFbnRpdHlTZXQoKTogRW50aXR5U2V0IHwgU2luZ2xldG9uIHwgdW5kZWZpbmVkIHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQgfCBTaW5nbGV0b247XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGNvbnRleHQgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGNvbnRleHQgcGF0aCBvZiB0aGUgY29udmVydGVyLlxuXHQgKi9cblx0Z2V0Q29udGV4dFBhdGgoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5iYXNlQ29udGV4dFBhdGg7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aC5cblx0ICogQHJldHVybnMgVGhlIGN1cnJlbnQgZGF0YSBtb2RlbCBvYmplY3QgcGF0aFxuXHQgKi9cblx0Z2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpOiBEYXRhTW9kZWxPYmplY3RQYXRoPFQ+IHtcblx0XHRyZXR1cm4gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5Q29udGFpbmVyLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBzZXJ2aWNlIEVudGl0eUNvbnRhaW5lclxuXHQgKi9cblx0Z2V0RW50aXR5Q29udGFpbmVyKCk6IEVudGl0eUNvbnRhaW5lciB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMuZW50aXR5Q29udGFpbmVyO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgRW50aXR5VHlwZSBiYXNlZCBvbiB0aGUgZnVsbHkgcXVhbGlmaWVkIG5hbWUuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IEVudGl0eVR5cGUuXG5cdCAqL1xuXHRnZXRFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdHJldHVybiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGgudGFyZ2V0RW50aXR5VHlwZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgcGFyYW1ldGVyIGluIGNhc2Ugb2YgYSBwYXJhbWV0ZXJpemVkIHNlcnZpY2UuXG5cdCAqIEByZXR1cm5zIFRoZSBlbnRpdHkgdHlwZSBvZiB0aGUgcGFyYW1ldGVyXG5cdCAqL1xuXHRnZXRQYXJhbWV0ZXJFbnRpdHlUeXBlKCk6IEVudGl0eVR5cGUge1xuXHRcdGNvbnN0IHBhcmFtZXRlckVudGl0eVR5cGUgPSB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQuZW50aXR5VHlwZTtcblx0XHRjb25zdCBpc1BhcmFtZXRlcml6ZWQgPSAhIXBhcmFtZXRlckVudGl0eVR5cGUuYW5ub3RhdGlvbnM/LkNvbW1vbj8uUmVzdWx0Q29udGV4dDtcblx0XHRyZXR1cm4gKGlzUGFyYW1ldGVyaXplZCAmJiBwYXJhbWV0ZXJFbnRpdHlUeXBlKSBhcyBFbnRpdHlUeXBlO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyBhbiBhbm5vdGF0aW9uIGZyb20gYW4gZW50aXR5IHR5cGUgYmFzZWQgb24gYW5ub3RhdGlvbiBwYXRoLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGggVGhlIGFubm90YXRpb24gcGF0aCB0byBiZSBldmFsdWF0ZWRcblx0ICogQHJldHVybnMgVGhlIHRhcmdldCBhbm5vdGF0aW9uIHBhdGggYXMgd2VsbCBhcyBhIGNvbnZlcnRlciBjb250ZXh0IHRvIGdvIHdpdGggaXRcblx0ICovXG5cdGdldEVudGl0eVR5cGVBbm5vdGF0aW9uPFRUIGV4dGVuZHMgU2VydmljZU9iamVjdCB8IFJlY29yZENvbXBsZXhUeXBlPihhbm5vdGF0aW9uUGF0aDogc3RyaW5nKTogUmVzb2x2ZWRBbm5vdGF0aW9uQ29udGV4dDxUVD4ge1xuXHRcdGlmICghYW5ub3RhdGlvblBhdGguaW5jbHVkZXMoXCJAXCIpKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE5vdCBhbiBhbm5vdGF0aW9uIHBhdGg6ICcke2Fubm90YXRpb25QYXRofSdgKTtcblx0XHR9XG5cblx0XHRjb25zdCBpc0Fic29sdXRlID0gYW5ub3RhdGlvblBhdGguc3RhcnRzV2l0aChcIi9cIik7XG5cdFx0bGV0IHBhdGg6IHN0cmluZztcblxuXHRcdGlmIChpc0Fic29sdXRlKSB7XG5cdFx0XHQvLyBwYXRoIGNhbiBiZSB1c2VkIGFzLWlzXG5cdFx0XHRwYXRoID0gYW5ub3RhdGlvblBhdGg7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIGJ1aWxkIGFuIGFic29sdXRlIHBhdGggYmFzZWQgb24gdGhlIGVudGl0eSB0eXBlICh0aGlzIGZ1bmN0aW9uIHdvcmtzIG9uIHRoZSB0eXBlISlcblx0XHRcdGNvbnN0IGJhc2UgPSB0aGlzLmdldENvbnRleHRQYXRoKCkuc3BsaXQoXCJAXCIsIDEpWzBdO1xuXHRcdFx0cGF0aCA9IGJhc2UuZW5kc1dpdGgoXCIvXCIpID8gYmFzZSArIGFubm90YXRpb25QYXRoIDogYCR7YmFzZX0vJHthbm5vdGF0aW9uUGF0aH1gO1xuXHRcdH1cblxuXHRcdGNvbnN0IHRhcmdldDogUmVzb2x1dGlvblRhcmdldDxBbm5vdGF0aW9uVGVybTxUVD4+ID0gdGhpcy5yZXNvbHZlQWJzb2x1dGVQYXRoKHBhdGgpO1xuXG5cdFx0Y29uc3QgZGF0YU1vZGVsT2JqZWN0UGF0aCA9IGdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0RnJvbVBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pihcblx0XHRcdHsgdGFyZ2V0OiB0YXJnZXQudGFyZ2V0IGFzIFNlcnZpY2VPYmplY3QsIHZpc2l0ZWRPYmplY3RzOiB0YXJnZXQub2JqZWN0UGF0aCB9LFxuXHRcdFx0dGhpcy5jb252ZXJ0ZWRUeXBlcyxcblx0XHRcdGlzQWJzb2x1dGUgPyB1bmRlZmluZWQgOiB0aGlzLnRhcmdldERhdGFNb2RlbFBhdGguY29udGV4dExvY2F0aW9uLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0YW5ub3RhdGlvbjogdGFyZ2V0LnRhcmdldCxcblx0XHRcdGNvbnZlcnRlckNvbnRleHQ6IG5ldyBDb252ZXJ0ZXJDb250ZXh0KFxuXHRcdFx0XHR0aGlzLmNvbnZlcnRlZFR5cGVzLFxuXHRcdFx0XHR0aGlzLm1hbmlmZXN0U2V0dGluZ3MsXG5cdFx0XHRcdHRoaXMuZGlhZ25vc3RpY3MsXG5cdFx0XHRcdHRoaXMubWVyZ2VGbixcblx0XHRcdFx0ZGF0YU1vZGVsT2JqZWN0UGF0aFxuXHRcdFx0KVxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgdGhlIHR5cGUgb2YgdGVtcGxhdGUgd2UncmUgd29ya2luZyBvbiAoZS5nLiBMaXN0UmVwb3J0IC8gT2JqZWN0UGFnZSAvIC4uLikuXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IHRlbnBsYXRlIHR5cGVcblx0ICovXG5cdGdldFRlbXBsYXRlVHlwZSgpOiBUZW1wbGF0ZVR5cGUge1xuXHRcdHJldHVybiB0aGlzLm1hbmlmZXN0V3JhcHBlci5nZXRUZW1wbGF0ZVR5cGUoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgY29udmVydGVkIHR5cGVzLlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBjb252ZXJ0ZWQgdHlwZXNcblx0ICovXG5cdGdldENvbnZlcnRlZFR5cGVzKCk6IENvbnZlcnRlZE1ldGFkYXRhIHtcblx0XHRyZXR1cm4gdGhpcy5jb252ZXJ0ZWRUeXBlcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSBhIHJlbGF0aXZlIGFubm90YXRpb24gcGF0aCBiZXR3ZWVuIGFuIGFubm90YXRpb24gcGF0aCBhbmQgYW4gZW50aXR5IHR5cGUuXG5cdCAqIEBwYXJhbSBhbm5vdGF0aW9uUGF0aFxuXHQgKiBAcGFyYW0gZW50aXR5VHlwZVxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgYW5udG90YXRpb24gcGF0aC5cblx0ICovXG5cdGdldFJlbGF0aXZlQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZywgZW50aXR5VHlwZTogRW50aXR5VHlwZSk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIGFubm90YXRpb25QYXRoLnJlcGxhY2UoZW50aXR5VHlwZS5mdWxseVF1YWxpZmllZE5hbWUsIFwiXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFRyYW5zZm9ybSBhbiBlbnRpdHlUeXBlIGJhc2VkIHBhdGggdG8gYW4gZW50aXR5U2V0IGJhc2VkIG9uZSAodWk1IHRlbXBsYXRpbmcgZ2VuZXJhbGx5IGV4cGVjdCBhbiBlbnRpdHlTZXRCYXNlZFBhdGgpLlxuXHQgKiBAcGFyYW0gYW5ub3RhdGlvblBhdGhcblx0ICogQHJldHVybnMgVGhlIEVudGl0eVNldCBiYXNlZCBhbm5vdGF0aW9uIHBhdGhcblx0ICovXG5cdGdldEVudGl0eVNldEJhc2VkQW5ub3RhdGlvblBhdGgoYW5ub3RhdGlvblBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKCFhbm5vdGF0aW9uUGF0aCkge1xuXHRcdFx0cmV0dXJuIGFubm90YXRpb25QYXRoO1xuXHRcdH1cblx0XHRjb25zdCBlbnRpdHlUeXBlRlFOID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoLnRhcmdldEVudGl0eVR5cGUuZnVsbHlRdWFsaWZpZWROYW1lO1xuXHRcdGlmIChcblx0XHRcdHRoaXMudGFyZ2V0RGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlTZXQgfHxcblx0XHRcdCgodGhpcy5iYXNlQ29udGV4dFBhdGguc3RhcnRzV2l0aChcIi9cIikgJiYgdGhpcy5iYXNlQ29udGV4dFBhdGgubWF0Y2goL1xcLy9nKSkgfHwgW10pLmxlbmd0aCA+IDFcblx0XHQpIHtcblx0XHRcdGxldCByZXBsYWNlZEFubm90YXRpb25QYXRoID0gYW5ub3RhdGlvblBhdGgucmVwbGFjZShlbnRpdHlUeXBlRlFOLCBcIi9cIik7XG5cdFx0XHRpZiAocmVwbGFjZWRBbm5vdGF0aW9uUGF0aC5sZW5ndGggPiAyICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMF0gPT09IFwiL1wiICYmIHJlcGxhY2VkQW5ub3RhdGlvblBhdGhbMV0gPT09IFwiL1wiKSB7XG5cdFx0XHRcdHJlcGxhY2VkQW5ub3RhdGlvblBhdGggPSByZXBsYWNlZEFubm90YXRpb25QYXRoLnN1YnN0cmluZygxKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLmJhc2VDb250ZXh0UGF0aCArIChyZXBsYWNlZEFubm90YXRpb25QYXRoLnN0YXJ0c1dpdGgoXCIvXCIpID8gcmVwbGFjZWRBbm5vdGF0aW9uUGF0aCA6IGAvJHtyZXBsYWNlZEFubm90YXRpb25QYXRofWApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gYC8ke2Fubm90YXRpb25QYXRofWA7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSBtYW5pZmVzdCB3cmFwcGVyIGZvciB0aGUgY3VycmVudCBjb250ZXh0LlxuXHQgKiBAcmV0dXJucyBUaGUgY3VycmVudCBtYW5pZmVzdCB3cmFwcGVyXG5cdCAqL1xuXHRnZXRNYW5pZmVzdFdyYXBwZXIoKTogTWFuaWZlc3RXcmFwcGVyIHtcblx0XHRyZXR1cm4gdGhpcy5tYW5pZmVzdFdyYXBwZXI7XG5cdH1cblxuXHRnZXREaWFnbm9zdGljcygpOiBJRGlhZ25vc3RpY3Mge1xuXHRcdHJldHVybiB0aGlzLmRpYWdub3N0aWNzO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlIHRoZSB0YXJnZXQgZnJvbSBhbiBhYnNvbHV0ZSBwYXRoLlxuXHQgKiBAcGFyYW0gcGF0aCBUaGUgcGF0aCB3ZSB3YW50IHRvIGdldCB0aGUgdGFyZ2V0XG5cdCAqIEByZXR1cm5zIFRoZSBhYnNvbHV0ZSBwYXRoXG5cdCAqL1xuXHRyZXNvbHZlQWJzb2x1dGVQYXRoPFRUPihwYXRoOiBzdHJpbmcpOiBSZXNvbHV0aW9uVGFyZ2V0PFRUPiB7XG5cdFx0cmV0dXJuIHRoaXMuY29udmVydGVkVHlwZXMucmVzb2x2ZVBhdGgocGF0aCk7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmUgYSBuZXcgY29udmVydGVyIGNvbnRleHQsIHNjb3BlZCBmb3IgYSBkaWZmZXJlbnQgY29udGV4dCBwYXRoLlxuXHQgKiBAcGFyYW0gY29udGV4dFBhdGggVGhlIHBhdGggd2Ugd2FudCB0byBvcmNoZXN0cmF0ZSB0aGUgY29udmVydGVyIGNvbnRleHQgYXJvdW5kXG5cdCAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgY29udGV4dCBmb3IgdGhlIHN1YiBwYXRoXG5cdCAqL1xuXHRnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEs+KGNvbnRleHRQYXRoOiBzdHJpbmcpOiBDb252ZXJ0ZXJDb250ZXh0PEs+IHtcblx0XHRjb25zdCByZXNvbHZlZE1ldGFQYXRoOiBSZXNvbHV0aW9uVGFyZ2V0PEs+ID0gdGhpcy5jb252ZXJ0ZWRUeXBlcy5yZXNvbHZlUGF0aDxLPihjb250ZXh0UGF0aCk7XG5cdFx0Y29uc3QgdGFyZ2V0UGF0aCA9IGdldERhdGFNb2RlbFBhdGhGb3JFbnRpdHlTZXQocmVzb2x2ZWRNZXRhUGF0aCwgdGhpcy5jb252ZXJ0ZWRUeXBlcyk7XG5cdFx0cmV0dXJuIG5ldyBDb252ZXJ0ZXJDb250ZXh0PEs+KHRoaXMuY29udmVydGVkVHlwZXMsIHRoaXMubWFuaWZlc3RTZXR0aW5ncywgdGhpcy5kaWFnbm9zdGljcywgdGhpcy5tZXJnZUZuLCB0YXJnZXRQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgYWxsIGFubm90YXRpb25zIG9mIGEgZ2l2ZW4gdGVybSBhbmQgdm9jYWJ1bGFyeSBvbiBhbiBlbnRpdHkgdHlwZVxuXHQgKiAob3Igb24gdGhlIGN1cnJlbnQgZW50aXR5IHR5cGUgaWYgZW50aXR5VHlwZSBpc24ndCBzcGVjaWZpZWQpLlxuXHQgKiBAcGFyYW0gdm9jYWJ1bGFyeU5hbWVcblx0ICogQHBhcmFtIGFubm90YXRpb25UZXJtXG5cdCAqIEBwYXJhbSBbYW5ub3RhdGlvblNvdXJjZXNdXG5cdCAqIEByZXR1cm5zIEFsbCB0aGUgYW5ub3RhdGlvbiBmb3IgYSBzcGVjaWZpYyB0ZXJtIGFuZCB2b2NhYnVsYXJ5IGZyb20gYW4gZW50aXR5IHR5cGVcblx0ICovXG5cdGdldEFubm90YXRpb25zQnlUZXJtPFRUPihcblx0XHR2b2NhYnVsYXJ5TmFtZToga2V5b2YgRW50aXR5VHlwZUFubm90YXRpb25zLFxuXHRcdGFubm90YXRpb25UZXJtOiBzdHJpbmcsXG5cdFx0YW5ub3RhdGlvblNvdXJjZXM6IChTZXJ2aWNlT2JqZWN0IHwgdW5kZWZpbmVkKVtdID0gW3RoaXMuZ2V0RW50aXR5VHlwZSgpXVxuXHQpOiBBbm5vdGF0aW9uVGVybTxUVD5bXSB7XG5cdFx0bGV0IG91dEFubm90YXRpb25zOiBBbm5vdGF0aW9uVGVybTxUVD5bXSA9IFtdO1xuXHRcdGFubm90YXRpb25Tb3VyY2VzLmZvckVhY2goKGFubm90YXRpb25Tb3VyY2UpID0+IHtcblx0XHRcdGlmIChhbm5vdGF0aW9uU291cmNlKSB7XG5cdFx0XHRcdGNvbnN0IGFubm90YXRpb25zOiBSZWNvcmQ8c3RyaW5nLCBBbm5vdGF0aW9uVGVybTxUVD4gJiB7IHRlcm06IHN0cmluZyB9PiA9XG5cdFx0XHRcdFx0YW5ub3RhdGlvblNvdXJjZT8uYW5ub3RhdGlvbnNbdm9jYWJ1bGFyeU5hbWVdIHx8IHt9O1xuXHRcdFx0XHRpZiAoYW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRvdXRBbm5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKGFubm90YXRpb25zKVxuXHRcdFx0XHRcdFx0LmZpbHRlcigoYW5ub3RhdGlvbikgPT4gYW5ub3RhdGlvbnNbYW5ub3RhdGlvbl0udGVybSA9PT0gYW5ub3RhdGlvblRlcm0pXG5cdFx0XHRcdFx0XHQucmVkdWNlKChwcmV2aW91c1ZhbHVlOiBBbm5vdGF0aW9uVGVybTxUVD5bXSwga2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0cHJldmlvdXNWYWx1ZS5wdXNoKGFubm90YXRpb25zW2tleV0pO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcHJldmlvdXNWYWx1ZTtcblx0XHRcdFx0XHRcdH0sIG91dEFubm90YXRpb25zKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvdXRBbm5vdGF0aW9ucztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHJlbGF0aXZlIG1vZGVsIHBhdGggYmFzZWQgb24gdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoLlxuXHQgKiBAcmV0dXJucyBUaGUgcmVsYXRpdmUgbW9kZWwgcGF0aCBvciB1bmRlZmluZWQgaWYgdGhlIHBhdGggaXMgbm90IHJlc29sdmVhYmxlXG5cdCAqL1xuXHRnZXRSZWxhdGl2ZU1vZGVsUGF0aEZ1bmN0aW9uKCk6IEZ1bmN0aW9uIHtcblx0XHRjb25zdCB0YXJnZXREYXRhTW9kZWxQYXRoID0gdGhpcy50YXJnZXREYXRhTW9kZWxQYXRoO1xuXHRcdGNvbnN0IGNvbnZlcnRlZE1ldGFNb2RlbCA9IHRoaXMuY29udmVydGVkVHlwZXM7XG5cdFx0cmV0dXJuIGZ1bmN0aW9uIChzUGF0aDogc3RyaW5nKSB7XG5cdFx0XHRjb25zdCBzaW5nbGV0b25QYXRoID0gc2luZ2xldG9uUGF0aFZpc2l0b3Ioc1BhdGgsIGNvbnZlcnRlZE1ldGFNb2RlbCwgW10pO1xuXHRcdFx0Y29uc3QgZW5oYW5jZWRQYXRoID0gZW5oYW5jZURhdGFNb2RlbFBhdGgodGFyZ2V0RGF0YU1vZGVsUGF0aCwgc1BhdGgpO1xuXHRcdFx0Y29uc3QgY29udGV4dFJlbGF0aXZlUGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZW5oYW5jZWRQYXRoLCB0cnVlKTtcblx0XHRcdGlmIChjb250ZXh0UmVsYXRpdmVQYXRoKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0UmVsYXRpdmVQYXRoO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHNpbmdsZXRvblBhdGg7XG5cdFx0fTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGUgdGhlIGNvbnZlcnRlciBjb250ZXh0IG5lY2Vzc2FyeSBmb3IgYSBtYWNybyBiYXNlZCBvbiBhIG1ldGFtb2RlbCBjb250ZXh0LlxuXHQgKiBAcGFyYW0gZW50aXR5TmFtZVxuXHQgKiBAcGFyYW0gb01ldGFNb2RlbENvbnRleHRcblx0ICogQHBhcmFtIGRpYWdub3N0aWNzXG5cdCAqIEBwYXJhbSBtZXJnZUZuXG5cdCAqIEBwYXJhbSB0YXJnZXREYXRhTW9kZWxQYXRoXG5cdCAqIEBwYXJhbSBtYW5pZmVzdFNldHRpbmdzXG5cdCAqIEByZXR1cm5zIFRoZSBjdXJyZW50IGNvbnZlcnRlciBjb250ZXh0XG5cdCAqL1xuXHRzdGF0aWMgY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvKFxuXHRcdGVudGl0eU5hbWU6IHN0cmluZyxcblx0XHRvTWV0YU1vZGVsQ29udGV4dDogQ29udGV4dCB8IE9EYXRhTWV0YU1vZGVsLFxuXHRcdGRpYWdub3N0aWNzOiBJRGlhZ25vc3RpY3MsXG5cdFx0bWVyZ2VGbjogRnVuY3Rpb24sXG5cdFx0dGFyZ2V0RGF0YU1vZGVsUGF0aD86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pixcblx0XHRtYW5pZmVzdFNldHRpbmdzOiBCYXNlTWFuaWZlc3RTZXR0aW5ncyA9IHt9IGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzXG5cdCk6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdFx0Y29uc3Qgb01ldGFNb2RlbDogT0RhdGFNZXRhTW9kZWwgPSBvTWV0YU1vZGVsQ29udGV4dC5pc0EoXCJzYXAudWkubW9kZWwub2RhdGEudjQuT0RhdGFNZXRhTW9kZWxcIilcblx0XHRcdD8gKG9NZXRhTW9kZWxDb250ZXh0IGFzIE9EYXRhTWV0YU1vZGVsKVxuXHRcdFx0OiAoKG9NZXRhTW9kZWxDb250ZXh0IGFzIENvbnRleHQpLmdldE1vZGVsKCkgYXMgdW5rbm93biBhcyBPRGF0YU1ldGFNb2RlbCk7XG5cdFx0Y29uc3Qgb0NvbnZlcnRlZE1ldGFkYXRhID0gY29udmVydFR5cGVzKG9NZXRhTW9kZWwpO1xuXHRcdGxldCB0YXJnZXRFbnRpdHlTZXQ6IFNpbmdsZXRvbiB8IEVudGl0eVNldCA9IG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlTZXRzLmZpbmQoXG5cdFx0XHQoZW50aXR5U2V0KSA9PiBlbnRpdHlTZXQubmFtZSA9PT0gZW50aXR5TmFtZVxuXHRcdCkgYXMgRW50aXR5U2V0O1xuXHRcdGlmICghdGFyZ2V0RW50aXR5U2V0KSB7XG5cdFx0XHR0YXJnZXRFbnRpdHlTZXQgPSBvQ29udmVydGVkTWV0YWRhdGEuc2luZ2xldG9ucy5maW5kKChlbnRpdHlTZXQpID0+IGVudGl0eVNldC5uYW1lID09PSBlbnRpdHlOYW1lKSBhcyBTaW5nbGV0b247XG5cdFx0fVxuXHRcdGlmICghdGFyZ2V0RGF0YU1vZGVsUGF0aCB8fCB0YXJnZXRFbnRpdHlTZXQgIT09IHRhcmdldERhdGFNb2RlbFBhdGguc3RhcnRpbmdFbnRpdHlTZXQpIHtcblx0XHRcdHRhcmdldERhdGFNb2RlbFBhdGggPSB7XG5cdFx0XHRcdHN0YXJ0aW5nRW50aXR5U2V0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdG5hdmlnYXRpb25Qcm9wZXJ0aWVzOiBbXSxcblx0XHRcdFx0dGFyZ2V0RW50aXR5U2V0OiB0YXJnZXRFbnRpdHlTZXQsXG5cdFx0XHRcdC8vIGNvbnRhaW5lZCBlbnRpdHkgZG9lcyBub3QgaGF2ZSBhbiBlbnRpdHkgc2V0IGJ1dCBvbmx5IGVudGl0eSB0eXBlXG5cdFx0XHRcdHRhcmdldEVudGl0eVR5cGU6XG5cdFx0XHRcdFx0dGFyZ2V0RW50aXR5U2V0Py5lbnRpdHlUeXBlIHx8IG9Db252ZXJ0ZWRNZXRhZGF0YS5lbnRpdHlUeXBlcy5maW5kKChlbnRpdHlUeXBlKSA9PiBlbnRpdHlUeXBlLm5hbWUgPT09IGVudGl0eU5hbWUpLFxuXHRcdFx0XHR0YXJnZXRPYmplY3Q6IHRhcmdldEVudGl0eVNldCBhcyBFbnRpdHlTZXQsXG5cdFx0XHRcdGNvbnZlcnRlZFR5cGVzOiBvQ29udmVydGVkTWV0YWRhdGFcblx0XHRcdH07XG5cdFx0fVxuXHRcdHJldHVybiBuZXcgQ29udmVydGVyQ29udGV4dChvQ29udmVydGVkTWV0YWRhdGEsIG1hbmlmZXN0U2V0dGluZ3MsIGRpYWdub3N0aWNzLCBtZXJnZUZuLCB0YXJnZXREYXRhTW9kZWxQYXRoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXNvbHZlcyBhIG1ldGFkYXRhIGJpbmRpbmcgdG8gaXRzIHRleHQuXG5cdCAqIEBwYXJhbSBwYXRoXG5cdCAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCB0ZXh0IGlmIHBvc3NpYmxlLCBlbHNlIHRoZSBpbnB1dCB2YWx1ZSBvciBhbiBlbXB0eSBzdHJpbmcgaWYgdGhlIHBhdGggd2FzIHVuZGVmaW5lZFxuXHQgKi9cblx0ZmV0Y2hUZXh0RnJvbU1ldGFNb2RlbChwYXRoOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuXHRcdHJldHVybiBNb2RlbEhlbHBlci5mZXRjaFRleHRGcm9tTWV0YU1vZGVsKHBhdGgsIHRoaXMpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbnZlcnRlckNvbnRleHQ7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0VBK0JBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxNQUFNQSxnQkFBZ0IsR0FBRyxTQUFBQSxDQUFhQyxlQUEyQyxFQUF3QztJQUN4SCxPQUFPLE9BQU9BLGVBQWUsS0FBSyxRQUFRO0VBQzNDLENBQUM7RUFFRCxNQUFNQyw0QkFBNEIsR0FBRyxTQUFBQSxDQUNwQ0MsZ0JBQXFDLEVBQ3JDQyxjQUFpQyxFQUNSO0lBQ3pCLElBQUlDLGFBQW9DO0lBQ3hDLElBQUlDLGdCQUF1QztJQUMzQyxJQUFJQyxpQkFBd0M7SUFDNUMsSUFBSUMsaUJBQXlDO0lBQzdDLElBQUlDLGNBQXdCLEdBQUcsRUFBRTtJQUNqQyxNQUFNQyxvQkFBMEMsR0FBRyxFQUFFO0lBQ3JEUCxnQkFBZ0IsQ0FBQ1EsVUFBVSxDQUFDQyxPQUFPLENBQUVDLFVBQXNDLElBQUs7TUFBQSxJQUFBQyxpQkFBQTtNQUMvRSxJQUFJQyxlQUFlLENBQUNGLFVBQVUsQ0FBQyxFQUFFO1FBQ2hDLFFBQVFBLFVBQVUsQ0FBQ0csS0FBSztVQUN2QixLQUFLLG9CQUFvQjtZ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
@@ -16,6 +16,7 @@ import type { BaseManifestSettings, ControlManifestConfiguration, TemplateType }
16
16
  import ManifestWrapper from "sap/fe/core/converters/ManifestWrapper";
17
17
  import { convertTypes, getInvolvedDataModelObjectFromPath } from "sap/fe/core/converters/MetaModelConverter";
18
18
  import type { IDiagnostics, PageContextPathTarget } from "sap/fe/core/converters/TemplateConverter";
19
+ import { singletonPathVisitor } from "sap/fe/core/helpers/BindingHelper";
19
20
  import ModelHelper from "sap/fe/core/helpers/ModelHelper";
20
21
  import { isServiceObject } from "sap/fe/core/helpers/TypeGuards";
21
22
  import type { DataModelObjectPath } from "sap/fe/core/templating/DataModelPathHelper";
@@ -403,9 +404,15 @@ class ConverterContext<T = PageContextPathTarget> {
403
404
  */
404
405
  getRelativeModelPathFunction(): Function {
405
406
  const targetDataModelPath = this.targetDataModelPath;
407
+ const convertedMetaModel = this.convertedTypes;
406
408
  return function (sPath: string) {
409
+ const singletonPath = singletonPathVisitor(sPath, convertedMetaModel, []);
407
410
  const enhancedPath = enhanceDataModelPath(targetDataModelPath, sPath);
408
- return getContextRelativeTargetObjectPath(enhancedPath, true);
411
+ const contextRelativePath = getContextRelativeTargetObjectPath(enhancedPath, true);
412
+ if (contextRelativePath) {
413
+ return contextRelativePath;
414
+ }
415
+ return singletonPath;
409
416
  };
410
417
  }
411
418