@sapui5/sap.fe.core 1.136.1 → 1.138.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/core/.library +1 -1
  3. package/src/sap/fe/core/ActionRuntime.js +76 -28
  4. package/src/sap/fe/core/ActionRuntime.ts +106 -30
  5. package/src/sap/fe/core/AppComponent.js +11 -1
  6. package/src/sap/fe/core/AppComponent.ts +10 -0
  7. package/src/sap/fe/core/AppStateHandler.js +9 -2
  8. package/src/sap/fe/core/AppStateHandler.ts +8 -2
  9. package/src/sap/fe/core/CommonUtils.js +15 -3
  10. package/src/sap/fe/core/CommonUtils.ts +13 -2
  11. package/src/sap/fe/core/PageController.controller.js +10 -0
  12. package/src/sap/fe/core/PageController.controller.ts +3 -0
  13. package/src/sap/fe/core/buildingBlocks/TraceInfo.js +3 -4
  14. package/src/sap/fe/core/buildingBlocks/TraceInfo.ts +2 -2
  15. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.js +3 -3
  16. package/src/sap/fe/core/buildingBlocks/templating/BuildingBlockTemplateProcessor.ts +2 -2
  17. package/src/sap/fe/core/controllerextensions/EditFlow.js +25 -12
  18. package/src/sap/fe/core/controllerextensions/EditFlow.ts +27 -16
  19. package/src/sap/fe/core/controllerextensions/InlineEditFlow.js +27 -41
  20. package/src/sap/fe/core/controllerextensions/InlineEditFlow.ts +27 -41
  21. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.js +2 -1
  22. package/src/sap/fe/core/controllerextensions/InternalIntentBasedNavigation.ts +2 -1
  23. package/src/sap/fe/core/controllerextensions/InternalRouting.js +2 -1
  24. package/src/sap/fe/core/controllerextensions/InternalRouting.ts +1 -0
  25. package/src/sap/fe/core/controllerextensions/MessageHandler.js +4 -4
  26. package/src/sap/fe/core/controllerextensions/MessageHandler.ts +22 -15
  27. package/src/sap/fe/core/controllerextensions/Paginator.js +20 -5
  28. package/src/sap/fe/core/controllerextensions/Paginator.ts +19 -0
  29. package/src/sap/fe/core/controllerextensions/SideEffects.js +3 -2
  30. package/src/sap/fe/core/controllerextensions/SideEffects.ts +2 -2
  31. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.js +2 -1
  32. package/src/sap/fe/core/controllerextensions/collaboration/CollaborationCommon.ts +1 -0
  33. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.js +9 -5
  34. package/src/sap/fe/core/controllerextensions/dialog/ODataStrictDialog.tsx +8 -3
  35. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.js +4 -2
  36. package/src/sap/fe/core/controllerextensions/editFlow/NotApplicableContextDialog.tsx +7 -2
  37. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.js +178 -125
  38. package/src/sap/fe/core/controllerextensions/editFlow/TransactionHelper.ts +222 -174
  39. package/src/sap/fe/core/controllerextensions/editFlow/draft.js +5 -3
  40. package/src/sap/fe/core/controllerextensions/editFlow/draft.ts +2 -3
  41. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.js +39 -5
  42. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataOperation.ts +51 -11
  43. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.js +16 -1
  44. package/src/sap/fe/core/controllerextensions/editFlow/operations/ODataStrictHandling.ts +17 -2
  45. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.js +88 -1
  46. package/src/sap/fe/core/controllerextensions/editFlow/operations/Operation.ts +106 -7
  47. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.js +16 -1
  48. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationMessage.ts +15 -0
  49. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.js +25 -1
  50. package/src/sap/fe/core/controllerextensions/editFlow/operations/OperationParameters.ts +24 -0
  51. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.js +11 -8
  52. package/src/sap/fe/core/controllerextensions/messageHandler/messageHandling.ts +13 -10
  53. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.js +7 -4
  54. package/src/sap/fe/core/controllerextensions/routing/RouterProxy.ts +7 -3
  55. package/src/sap/fe/core/controls/DataWatcher.js +2 -2
  56. package/src/sap/fe/core/controls/DataWatcher.tsx +1 -1
  57. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.js +11 -6
  58. package/src/sap/fe/core/controls/Recommendations/ConfirmRecommendationDialog.tsx +13 -9
  59. package/src/sap/fe/core/controls/inlineEditFlow/InlineEditExitDialog.js +144 -0
  60. package/src/sap/fe/core/controls/inlineEditFlow/{BeforeNavigationDialog.tsx → InlineEditExitDialog.tsx} +1 -1
  61. package/src/sap/fe/core/converters/ManifestSettings.js +1 -1
  62. package/src/sap/fe/core/converters/ManifestSettings.ts +4 -0
  63. package/src/sap/fe/core/converters/MetaModelConverter.js +3 -2
  64. package/src/sap/fe/core/converters/MetaModelConverter.ts +12 -4
  65. package/src/sap/fe/core/converters/controls/Common/Action.js +42 -5
  66. package/src/sap/fe/core/converters/controls/Common/Action.ts +42 -5
  67. package/src/sap/fe/core/converters/controls/Common/Chart.js +4 -1
  68. package/src/sap/fe/core/converters/controls/Common/Chart.ts +2 -1
  69. package/src/sap/fe/core/converters/controls/Common/Table.js +46 -13
  70. package/src/sap/fe/core/converters/controls/Common/Table.ts +50 -11
  71. package/src/sap/fe/core/converters/controls/Common/table/Columns.js +11 -10
  72. package/src/sap/fe/core/converters/controls/Common/table/Columns.ts +13 -1
  73. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.js +2 -2
  74. package/src/sap/fe/core/converters/controls/ObjectPage/SubSection.ts +2 -1
  75. package/src/sap/fe/core/fpm/manifest.json +1 -1
  76. package/src/sap/fe/core/helpers/DeleteHelper.js +9 -9
  77. package/src/sap/fe/core/helpers/DeleteHelper.ts +8 -9
  78. package/src/sap/fe/core/helpers/FPMHelper.js +2 -2
  79. package/src/sap/fe/core/helpers/FPMHelper.ts +1 -1
  80. package/src/sap/fe/core/helpers/ModelHelper.js +4 -4
  81. package/src/sap/fe/core/helpers/ModelHelper.ts +8 -4
  82. package/src/sap/fe/core/helpers/PasteHelper.js +2 -2
  83. package/src/sap/fe/core/helpers/PasteHelper.ts +1 -1
  84. package/src/sap/fe/core/library.js +33 -4
  85. package/src/sap/fe/core/library.ts +33 -2
  86. package/src/sap/fe/core/messagebundle.properties +18 -2
  87. package/src/sap/fe/core/messagebundle_ar.properties +3 -2
  88. package/src/sap/fe/core/messagebundle_bg.properties +2 -1
  89. package/src/sap/fe/core/messagebundle_ca.properties +2 -1
  90. package/src/sap/fe/core/messagebundle_cnr.properties +2 -1
  91. package/src/sap/fe/core/messagebundle_cs.properties +4 -3
  92. package/src/sap/fe/core/messagebundle_cy.properties +2 -1
  93. package/src/sap/fe/core/messagebundle_da.properties +2 -1
  94. package/src/sap/fe/core/messagebundle_de.properties +8 -7
  95. package/src/sap/fe/core/messagebundle_el.properties +2 -1
  96. package/src/sap/fe/core/messagebundle_en.properties +2 -1
  97. package/src/sap/fe/core/messagebundle_en_GB.properties +2 -1
  98. package/src/sap/fe/core/messagebundle_en_US_saprigi.properties +2 -1
  99. package/src/sap/fe/core/messagebundle_es.properties +5 -4
  100. package/src/sap/fe/core/messagebundle_es_MX.properties +2 -1
  101. package/src/sap/fe/core/messagebundle_et.properties +2 -1
  102. package/src/sap/fe/core/messagebundle_fi.properties +2 -1
  103. package/src/sap/fe/core/messagebundle_fr.properties +2 -1
  104. package/src/sap/fe/core/messagebundle_fr_CA.properties +2 -1
  105. package/src/sap/fe/core/messagebundle_hi.properties +2 -1
  106. package/src/sap/fe/core/messagebundle_hr.properties +2 -1
  107. package/src/sap/fe/core/messagebundle_hu.properties +2 -1
  108. package/src/sap/fe/core/messagebundle_id.properties +2 -1
  109. package/src/sap/fe/core/messagebundle_it.properties +2 -1
  110. package/src/sap/fe/core/messagebundle_iw.properties +2 -1
  111. package/src/sap/fe/core/messagebundle_ja.properties +3 -2
  112. package/src/sap/fe/core/messagebundle_kk.properties +2 -1
  113. package/src/sap/fe/core/messagebundle_ko.properties +2 -1
  114. package/src/sap/fe/core/messagebundle_lt.properties +2 -1
  115. package/src/sap/fe/core/messagebundle_lv.properties +2 -1
  116. package/src/sap/fe/core/messagebundle_mk.properties +2 -1
  117. package/src/sap/fe/core/messagebundle_ms.properties +2 -1
  118. package/src/sap/fe/core/messagebundle_nl.properties +2 -1
  119. package/src/sap/fe/core/messagebundle_no.properties +3 -2
  120. package/src/sap/fe/core/messagebundle_pl.properties +2 -1
  121. package/src/sap/fe/core/messagebundle_pt.properties +2 -1
  122. package/src/sap/fe/core/messagebundle_pt_PT.properties +2 -1
  123. package/src/sap/fe/core/messagebundle_ro.properties +2 -1
  124. package/src/sap/fe/core/messagebundle_ru.properties +2 -1
  125. package/src/sap/fe/core/messagebundle_sh.properties +2 -1
  126. package/src/sap/fe/core/messagebundle_sk.properties +2 -1
  127. package/src/sap/fe/core/messagebundle_sl.properties +2 -1
  128. package/src/sap/fe/core/messagebundle_sr.properties +2 -1
  129. package/src/sap/fe/core/messagebundle_sv.properties +2 -1
  130. package/src/sap/fe/core/messagebundle_th.properties +2 -1
  131. package/src/sap/fe/core/messagebundle_tr.properties +2 -1
  132. package/src/sap/fe/core/messagebundle_uk.properties +2 -1
  133. package/src/sap/fe/core/messagebundle_vi.properties +2 -1
  134. package/src/sap/fe/core/messagebundle_zh_CN.properties +2 -1
  135. package/src/sap/fe/core/messagebundle_zh_TW.properties +2 -1
  136. package/src/sap/fe/core/rootView/RootViewBaseController.js +6 -6
  137. package/src/sap/fe/core/rootView/RootViewBaseController.ts +5 -5
  138. package/src/sap/fe/core/services/RoutingServiceFactory.js +3 -3
  139. package/src/sap/fe/core/services/RoutingServiceFactory.ts +2 -2
  140. package/src/sap/fe/core/services/SideEffectsServiceFactory.js +4 -1
  141. package/src/sap/fe/core/services/SideEffectsServiceFactory.ts +3 -0
  142. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.js +8 -2
  143. package/src/sap/fe/core/services/collaborativeDraftServiceFactory.ts +7 -1
  144. package/src/sap/fe/core/templating/EntitySetHelper.js +75 -90
  145. package/src/sap/fe/core/templating/EntitySetHelper.ts +92 -118
  146. package/src/sap/fe/core/templating/UIFormatters.js +3 -3
  147. package/src/sap/fe/core/templating/UIFormatters.ts +1 -2
  148. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.js +0 -81
  149. package/src/sap/fe/core/controllerextensions/editFlow/operations/facade.ts +0 -126
  150. package/src/sap/fe/core/controllerextensions/editFlow/operations.js +0 -10
  151. package/src/sap/fe/core/controllerextensions/editFlow/operations.ts +0 -2
  152. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.js +0 -68
  153. package/src/sap/fe/core/controls/inlineEditFlow/BeforeActionDialog.tsx +0 -52
  154. package/src/sap/fe/core/controls/inlineEditFlow/BeforeNavigationDialog.js +0 -144
@@ -324,6 +324,7 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
324
324
  entityType: entitySet.entityType,
325
325
  resourceModel: getResourceModel(this.getView()),
326
326
  notApplicableContexts: mNavigationParameters.notApplicableContexts,
327
+ applicableContexts: mNavigationParameters?.applicableContexts ?? [],
327
328
  entitySet: entitySet.name,
328
329
  actionName: sAction
329
330
  });
@@ -761,4 +762,4 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/ClassSupport"
761
762
  }(ControllerExtension), _applyDecoratedDescriptor(_class2.prototype, "onInit", [_dec2], Object.getOwnPropertyDescriptor(_class2.prototype, "onInit"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigate", [_dec3, _dec4], Object.getOwnPropertyDescriptor(_class2.prototype, "navigate"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "prepareContextForExternalNavigation", [_dec5, _dec6], Object.getOwnPropertyDescriptor(_class2.prototype, "prepareContextForExternalNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getNavigationMode", [_dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "getNavigationMode"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateWithConfirmationDialog", [_dec9, _dec10], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateWithConfirmationDialog"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getEntitySet", [_dec11], Object.getOwnPropertyDescriptor(_class2.prototype, "getEntitySet"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "removeSensitiveData", [_dec12, _dec13], Object.getOwnPropertyDescriptor(_class2.prototype, "removeSensitiveData"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "navigateOutbound", [_dec14, _dec15], Object.getOwnPropertyDescriptor(_class2.prototype, "navigateOutbound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getOutboundParams", [_dec16, _dec17], Object.getOwnPropertyDescriptor(_class2.prototype, "getOutboundParams"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "onChevronPressNavigateOutBound", [_dec18, _dec19], Object.getOwnPropertyDescriptor(_class2.prototype, "onChevronPressNavigateOutBound"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation", [_dec20, _dec21], Object.getOwnPropertyDescriptor(_class2.prototype, "keepNavigationPropertiesForNavigation"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties", [_dec22, _dec23], Object.getOwnPropertyDescriptor(_class2.prototype, "getSemanticAttributesWithoutNavigationProperties"), _class2.prototype), _class2)) || _class);
762
763
  return InternalIntentBasedNavigation;
763
764
  }, false);
764
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM0IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJfZGVjMjAiLCJfZGVjMjEiLCJfZGVjMjIiLCJfZGVjMjMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJjYWxsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJfb0FwcENvbXBvbmVudCIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJfb01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiX29OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiX29WaWV3IiwiZ2V0VmlldyIsIm5hdmlnYXRlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNvdXJjZSIsIm5hdmlnYXRpb25BbHJlYWR5U3RhcnRlZCIsIl9kb05hdmlnYXRlIiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImFTZW1hbnRpY0F0dHJpYnV0ZXMiLCJvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJsZW5ndGgiLCJmb3JFYWNoIiwib05hdmlnYXRpb25Db250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QiLCJpc0EiLCJvU2VtYW50aWNBdHRyaWJ1dGVzIiwiZ2V0T2JqZWN0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMiLCJwcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9OYXZDb250ZXh0IiwicHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwicHVzaCIsInNlbWFudGljQXR0cmlidXRlcyIsImRhdGEiLCJtZXRhUGF0aCIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwib01vZGVsIiwic0VudGl0eVNldCIsImdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInVuZGVmaW5lZCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJfYXBwbHlPdXRib3VuZFBhcmFtcyIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwiX3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMiLCJzTmF2TW9kZSIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXROYXZpZ2F0aW9uTW9kZSIsIm1SZWZyZXNoU3RyYXRlZ2llcyIsInJlZnJlc2hTdHJhdGVnaWVzIiwib0ludGVybmFsTW9kZWwiLCJnZXRWaWV3RGF0YSIsInJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSIsIm1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMiLCJtZXJnZU9iamVjdHMiLCJtUmVmcmVzaFN0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50Iiwic2V0UHJvcGVydHkiLCJuYXZNb2RlIiwib25FcnJvciIsInNhcCIsInVpIiwicmVxdWlyZSIsIk1lc3NhZ2VCb3hDbGFzcyIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiRXJyb3IiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJjb252ZXJ0ZXJUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYmluZCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiIsIm9Db250ZXh0Iiwib0Rpc3RpbmN0S2V5cyIsInNDb250ZXh0UGF0aCIsImFNZXRhUGF0aFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdCIsIkxvb2tVcE9iamVjdCIsInNMb29rVXBPYmplY3RNZXRhUGF0aCIsInNLZXkiLCJvTmV3TG9va1VwT2JqZWN0Iiwic01haW5FbnRpdHlTZXROYW1lIiwic01haW5FbnRpdHlUeXBlTmFtZSIsIm9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic01haW5FbnRpdHlWYWx1ZVBhdGgiLCJzQ3VycmVudFZhbHVlUGF0aCIsInNMYXN0VmFsdWVQYXRoIiwic0Rpc3RpbmN0S2V5IiwiYUNvbmZsaWN0aW5nUGF0aHMiLCJzV2lubmVyVmFsdWVQYXRoIiwiaSIsInNQYXRoIiwic1BhdGhJbkNvbnRleHQiLCJyZXBsYWNlIiwic0VudGl0eVR5cGVOYW1lIiwic1ZhbHVlIiwiam9pbiIsImdldFByb3BlcnR5Iiwic1Byb3BlcnR5IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNob3VsZENvbnRpbnVlIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0IiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2ciLCJOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsImVudGl0eVR5cGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsIm5hbWUiLCJhY3Rpb25OYW1lIiwiYXBwbGljYWJsZUNvbnRleHRzIiwib3BlbiIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm9BdHRyaWJ1dGVzIiwidHJhbnNBZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVzIiwiX2dldEFnZ3JlZ2F0ZXMiLCJnZXREaWFnbm9zdGljcyIsImFQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsImVsZW1lbnQiLCJpbmNsdWRlcyIsIl9kZWxldGVBZ2dyZWdhdGVzIiwiYVByb3BlcnR5QW5ub3RhdGlvbnMiLCJfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyIsIlBlcnNvbmFsRGF0YSIsIklzUG90ZW50aWFsbHlTZW5zaXRpdmUiLCJVSSIsIkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHQiLCJBbmFseXRpY3MiLCJNZWFzdXJlIiwiQ29tbW9uIiwiRmllbGRDb250cm9sIiwib0ZpZWxkQ29udHJvbCIsIl9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJhZ2dyZWdhdGVzIiwic1Byb3AiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm9GdWxsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwib0RpYWdub3N0aWNzIiwiY29udmVydGVyQ29udGV4dCIsIl9nZXRDb252ZXJ0ZXJDb250ZXh0IiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwibWFwIiwidHJhbnNBZ2ciLCJOYW1lIiwiVmFsdWUiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImN1c3RvbUFnZ3JlZ2F0ZSIsInF1YWxpZmllciIsIm9WaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZnVsbENvbnRleHRQYXRoIiwiQ29tbW9uVXRpbHMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsIml0ZW0iLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5Iiwib1NlbGVjdE9wdGlvbiIsImdldFNlbGVjdE9wdGlvbiIsInJlbmFtZVNlbGVjdE9wdGlvbiIsInN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5IiwiZm9jdXNJbmZvIiwiZm9jdXNDb250cm9sIiwiRWxlbWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJmb2N1c0NvbnRyb2xJZCIsImdldElkIiwiZm9jdXNNRENUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwidHlwZSIsImNvbnRyb2xJZCIsInRhYmxlSWQiLCJjb250ZXh0UGF0aEZvY3VzIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImFzc2lnbiIsInN0YXRlIiwibmF2aWdhdGVPdXRib3VuZCIsInNPdXRib3VuZCIsImFOYXZQYXJhbXMiLCJvTWFuaWZlc3RFbnRyeSIsImdldE1hbmlmZXN0RW50cnkiLCJvT3V0Ym91bmQiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJMb2ciLCJvdXRib3VuZFBhcmFtcyIsInBhcmFtZXRlcnMiLCJnZXRPdXRib3VuZFBhcmFtcyIsImtleSIsIm9QYXJhbXMiLCJuYXZQYXJhbWV0ZXJWYWx1ZSIsImFQYXJhbWV0ZXJzIiwiYVNlbGVjdFByb3BlcnRpZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFkZFNlbGVjdE9wdGlvbiIsIm9PdXRib3VuZFBhcmFtcyIsIm9QYXJhbXNNYXBwaW5nIiwib01hcHBpbmciLCJ2YWx1ZSIsImZvcm1hdCIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib091dGJvdW5kcyIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib0Rpc3BsYXlPdXRib3VuZCIsIm9SZWZyZXNoU3RyYXRlZ2llcyIsImludGVudHMiLCJvRGVmYXVsdFJlZnJlc2hTdHJhdGVneSIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIlJlZnJlc2hTdHJhdGVneVR5cGUiLCJTZWxmIiwiX2ZlRGVmYXVsdCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dCIsInBhdGhzVG9SZXRhaW4iLCJiS2VlcE5hdlByb3BlcnRpZXMiLCJrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uIiwiZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFuaWZlc3QiLCJhcHAiLCJjb25zaWRlck5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwicmV0IiwibmF2UHJvcGVydGllcyIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUiLCJuYXZQcm9wIiwibmF2UHJvcE5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2dcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVmcmVzaFN0cmF0ZWdpZXMsIFNPUmVmcmVzaFN0cmF0ZWd5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlUmVmcmVzaFR5cGVzXCI7XG5pbXBvcnQgeyBSZWZyZXNoU3RyYXRlZ3lUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlUmVmcmVzaFR5cGVzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnlQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuXG4vKipcbiAqIE5hdmlnYXRpb24gUGFyYW1ldGVycyB1c2VkIGR1cmluZyBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHQvKipcblx0ICogU2luZ2xlIGluc3RhbmNlIG9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9LCBvciBhbHRlcm5hdGl2ZWx5IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzLCB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudC5cblx0ICovXG5cdG5hdmlnYXRpb25Db250ZXh0cz86IG9iamVjdCB8IE9EYXRhVjRDb250ZXh0W107XG5cdC8qKlxuXHQgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uLlxuXHQgKi9cblx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nIHwgb2JqZWN0O1xuXHRkZWZhdWx0UmVmcmVzaFN0cmF0ZWd5Pzogb2JqZWN0O1xuXHRyZWZyZXNoU3RyYXRlZ2llcz86IFJlZnJlc2hTdHJhdGVnaWVzO1xuXHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHQvKipcblx0ICogU2luZ2xlIGluc3RhbmNlIG9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9LCBvciBhbHRlcm5hdGl2ZWx5IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzLCB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudCBhbmQgZm9yIHdoaWNoIHRoZSBJQk4gYnV0dG9uIGlzIGVuYWJsZWRcblx0ICovXG5cdGFwcGxpY2FibGVDb250ZXh0cz86IG9iamVjdCB8IE9EYXRhVjRDb250ZXh0W107XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHdoaWNoIGNhbm5vdCBiZSBwYXNzZWQgdG8gdGhlIGludGVudC5cblx0ICogXHRpZiBhbiBhcnJheSBvZiBjb250ZXh0cyBpcyBwYXNzZWQgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1ldGEgcGF0aCBhbmQgYWNjb3JkaW5nbHkgcmVtb3ZlIHRoZSBzZW5zaXRpdmUgZGF0YVxuXHQgKiBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXMgZXhwZWN0ZWQ6XG5cdCAqIHtcblx0ICogXHRkYXRhOiB7XG5cdCAqIFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqIFx0XHRcdE5hbWU6IFwiTGFwdG9wXCJcblx0ICogXHR9LFxuXHQgKiBcdG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogfVxuXHQgKiBUaGUgbWV0YVBhdGggaXMgdXNlZCB0byByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhLlxuXHQgKi9cblx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblxuXHRsYWJlbD86IHN0cmluZztcblx0bmF2TW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIHtAbGluayBzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvbiBDb250cm9sbGVyIGV4dGVuc2lvbn1cbiAqIEBzaW5jZSAxLjg0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxJbnRlcm5hbEJhc2VkTmF2aWdhdGlvblwiKVxuY2xhc3MgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIF9vTmF2aWdhdGlvblNlcnZpY2UhOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRuYXZpZ2F0aW9uQWxyZWFkeVN0YXJ0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdHRoaXMuX29NZXRhTW9kZWwgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGVzIGludGVudC1iYXNlZCBuYXZpZ2F0aW9uIChTZW1hbnRpY09iamVjdC1BY3Rpb24pIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqIElmIHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIHByb3ZpZGVkLCB0aGlzIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgdGhlIGFkYXB0YXRpb24gYnkgYSBjb25zdW1lci5cblx0ICogVGhpcyB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBleHBsYWNlIG9yIGlucGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdCBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIGFjdGlvbiAgQWN0aW9uIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0c10gVXNlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudDpcblx0ICogICAgYSBzaW5nbGUgaW5zdGFuY2Ugb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuXHQgKlx0XHQgIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YVBhdGggYW5kIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGFcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXggZXhwZWN0ZWQ6XG5cdCAqXHRcdCAge1xuXHQgKlx0XHRcdGRhdGE6IHtcblx0ICpcdCBcdFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqXHRcdFx0XHROYW1lOiBcIkxhcHRvcFwiXG5cdCAqXHRcdFx0IH0sXG5cdCAqXHRcdFx0IG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogICAgICAgIH1cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmddIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuZGVmYXVsdFJlZnJlc2hTdHJhdGVneV0gRGVmYXVsdCByZWZyZXNoIHN0cmF0ZWd5IHRvIGJlIHVzZWQgaW4gY2FzZSBubyByZWZyZXNoIHN0cmF0ZWd5IGlzIHNwZWNpZmllZCBmb3IgdGhlIGludGVudCBpbiB0aGUgdmlldy5cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llc11cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNdIEFkZGl0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIGNyb3NzQXBwTmF2aWdhdGlvbiBvdXRib3VuZCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBjb250cm9sIG9iamVjdCBvZiB0aGUgbmF2aWdhdGlvbiBzb3VyY2UuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUoc2VtYW50aWNPYmplY3Q6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcnMsIHNvdXJjZT86IENvbnRyb2wpOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMubmF2aWdhdGlvbkFscmVhZHlTdGFydGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMubmF2aWdhdGlvbkFscmVhZHlTdGFydGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgX2RvTmF2aWdhdGUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgdk5hdmlnYXRpb25Db250ZXh0czogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHM7XG5cdFx0XHRcdFx0Y29uc3QgYU5hdmlnYXRpb25Db250ZXh0czogdW5kZWZpbmVkIHwgKE9EYXRhVjRDb250ZXh0IHwgb2JqZWN0KVtdID1cblx0XHRcdFx0XHRcdHZOYXZpZ2F0aW9uQ29udGV4dHMgJiYgIUFycmF5LmlzQXJyYXkodk5hdmlnYXRpb25Db250ZXh0cykgPyBbdk5hdmlnYXRpb25Db250ZXh0c10gOiB2TmF2aWdhdGlvbkNvbnRleHRzO1xuXHRcdFx0XHRcdGNvbnN0IHZTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0XHR2T3V0Ym91bmRQYXJhbXMgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mbzogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nOyBhY3Rpb246IHN0cmluZzsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IGFjdGlvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKSxcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ICYmIGFjdGlvbikge1xuXHRcdFx0XHRcdFx0bGV0IGFTZW1hbnRpY0F0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRcdFx0XHQvLyAxLiBnZXQgU2VtYW50aWNBdHRyaWJ1dGVzIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0XHRpZiAoYU5hdmlnYXRpb25Db250ZXh0cyAmJiBhTmF2aWdhdGlvbkNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRhTmF2aWdhdGlvbkNvbnRleHRzLmZvckVhY2goKG9OYXZpZ2F0aW9uQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5hIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBpbnN0YW5jZSBvZiBzYXAudWkubW9kZS5vZGF0YS52NC5Db250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZWxzZSBjaGVjayBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgb2YgdHlwZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXNcblx0XHRcdFx0XHRcdFx0XHRcdHwgeyBkYXRhOiB1bmtub3duW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgbWV0YVBhdGg6IHN0cmluZyB9XG5cdFx0XHRcdFx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0EgJiZcblx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIilcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSB0aGlzLl9vTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogYWxzbyByZW1vdmUgc2Vuc2l0aXZlIGRhdGEgZnJvbSAgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaW5hbFNlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShmaW5hbFNlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OYXZDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvW1wicHJvcGVydGllc1dpdGhvdXRDb25mbGljdFwiXSA9IG9OYXZDb250ZXh0LnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2gob05hdkNvbnRleHQuc2VtYW50aWNBdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBvTmF2aWdhdGlvbkNvbnRleHQgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tIG9iamVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSwgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QubWV0YVBhdGgpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gb05hdmlnYXRpb25Db250ZXh0LmRhdGEgY2FuIGJlIGFycmF5IGFscmVhZHkgZXggOiBbe0N1c3RvbWVyOiBcIjEwMDAxXCJ9LCB7Q3VzdG9tZXI6IFwiMTAwOTFcIn1dXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZW5jZSBhc3NpZ25pbmcgaXQgdG8gdGhlIGFTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAyLjEgTWVyZ2UgYmFzZSBzZWxlY3Rpb24gdmFyaWFudCBhbmQgc2FuaXRpemVkIHNlbWFudGljIGF0dHJpYnV0ZXMgaW50byBvbmUgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRcdFx0aWYgKGFTZW1hbnRpY0F0dHJpYnV0ZXMgJiYgYVNlbWFudGljQXR0cmlidXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyAzLiBBZGQgZmlsdGVyQ29udGV4dFVybCB0byBTViBzbyB0aGUgTmF2aWdhdGlvbkhhbmRsZXIgY2FuIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEgYmFzZWQgb24gdmlldyBlbnRpdHlTZXRcblx0XHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHNFbnRpdHlTZXQgPSB0aGlzLmdldEVudGl0eVNldCgpLFxuXHRcdFx0XHRcdFx0XHRzQ29udGV4dFVybCA9IHNFbnRpdHlTZXQgPyB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0LCBvTW9kZWwpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHNDb250ZXh0VXJsKSB7XG5cdFx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBBcHBseSBPdXRib3VuZCBQYXJhbWV0ZXJzIHRvIHRoZSBTVlxuXHRcdFx0XHRcdFx0aWYgKHZPdXRib3VuZFBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyA0LiBnaXZlIGFuIG9wcG9ydHVuaXR5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gaW5mbHVlbmNlIHRoZSBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlci5pbnRlbnRCYXNlZE5hdmlnYXRpb24uYWRhcHROYXZpZ2F0aW9uQ29udGV4dChvU2VsZWN0aW9uVmFyaWFudCwgb1RhcmdldEluZm8pO1xuXG5cdFx0XHRcdFx0XHQvLyA1LiBBcHBseSBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MgdG8gdGhlIFNWXG5cdFx0XHRcdFx0XHRpZiAodlNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQsIHZTZW1hbnRpY09iamVjdE1hcHBpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyA2LiByZW1vdmUgdGVjaG5pY2FsIHBhcmFtZXRlcnMgZnJvbSBTZWxlY3Rpb24gVmFyaWFudFxuXHRcdFx0XHRcdFx0dGhpcy5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cblx0XHRcdFx0XHRcdC8vIDcuIGNoZWNrIGlmIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreSBhbmQgcGFnZSBpcyBlZGl0YWJsZVxuXHRcdFx0XHRcdFx0bGV0IHNOYXZNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE5hdmlnYXRpb25Nb2RlKCk7XG5cblx0XHRcdFx0XHRcdC8vIDguIFVwZGF0aW5nIHJlZnJlc2ggc3RyYXRlZ3kgaW4gaW50ZXJuYWwgbW9kZWxcblx0XHRcdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ2llcyA9IChuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llcykgfHwge30sXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsID0gb1ZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoKG9WaWV3ICYmIG9WaWV3LmdldFZpZXdEYXRhKCkpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRtZXJnZU9iamVjdHMobVJlZnJlc2hTdHJhdGVnaWVzLCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBtUmVmcmVzaFN0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldFJlZnJlc2hTdHJhdGVneUZvckludGVudChcblx0XHRcdFx0XHRcdFx0XHRtUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChtUmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlXCIsIG1SZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIDkuIENoZWNrIGlmIG5hdk1vZGUgcGFyYW1ldGVyIGlzIHNldCBhbmQgdXNlIGl0XG5cdFx0XHRcdFx0XHRzTmF2TW9kZSA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID8gbmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgOiBzTmF2TW9kZTtcblxuXHRcdFx0XHRcdFx0Ly8gMTAuIE5hdmlnYXRlIHZpYSBOYXZpZ2F0aW9uSGFuZGxlclxuXHRcdFx0XHRcdFx0Y29uc3Qgb25FcnJvciA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vTWVzc2FnZUJveFwiXSwgZnVuY3Rpb24gKE1lc3NhZ2VCb3hDbGFzczogdHlwZW9mIE1lc3NhZ2VCb3gpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3hDbGFzcy5lcnJvcihvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0hFTFBFUl9OQVZJR0FUSU9OX0VSUk9SX01FU1NBR0VcIiksIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZShcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0b25FcnJvcixcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRzTmF2TW9kZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2VtYW50aWMgT2JqZWN0L2FjdGlvbiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoc291cmNlPy5kYXRhKFwiZGVib3VuY2VcIikpIHJldHVybjsgLy9kZWJvdW5jaW5nIHRoZSBJQk4gbmF2aWdhdGlvblxuXHRcdFx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCB0cnVlKTtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiICYmXG5cdFx0XHRcdFx0b01ldGFNb2RlbCAmJlxuXHRcdFx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCkgJiZcblx0XHRcdFx0XHQhKG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID09PSBcImV4cGxhY2VcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdFx0XHRfZG9OYXZpZ2F0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfZG9OYXZpZ2F0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uQWxyZWFkeVN0YXJ0ZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZSBhdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb1NlbWFudGljQXR0cmlidXRlcyBDb250ZXh0IGRhdGEgYWZ0ZXIgcmVtb3ZpbmcgYWxsIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIG9Db250ZXh0IEFjdHVhbCBjb250ZXh0IGZyb20gd2hpY2ggdGhlIHNlbWFudGljQXR0cmlidXRlcyB3ZXJlIGRlcml2ZWQuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBhdHRyaWJ1dGVzIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9Db250ZXh0OiBDb250ZXh0XG5cdCk6IHsgc2VtYW50aWNBdHRyaWJ1dGVzOiB1bmtub3duOyBwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0ge1xuXHRcdC8vIDEuIEZpbmQgYWxsIGRpc3RpbmN0IGtleXMgaW4gdGhlIG9iamVjdCBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHQvLyBTdG9yZSBtZXRhIHBhdGggZm9yIGVhY2ggb2NjdXJlbmNlIG9mIHRoZSBrZXlcblx0XHRjb25zdCBvRGlzdGluY3RLZXlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzQ29udGV4dFBhdGgpLFxuXHRcdFx0YU1ldGFQYXRoUGFydHMgPSBzTWV0YVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcblxuXHRcdGZ1bmN0aW9uIF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QoTG9va1VwT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc0xvb2tVcE9iamVjdE1ldGFQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBMb29rVXBPYmplY3QpIHtcblx0XHRcdFx0Ly8gbnVsbCBjYXNlPz9cblx0XHRcdFx0aWYgKExvb2tVcE9iamVjdFtzS2V5XSA9PT0gbnVsbCB8fCB0eXBlb2YgTG9va1VwT2JqZWN0W3NLZXldICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RLZXlzW3NLZXldKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBrZXkgaXMgZm91bmQgZm9yIHRoZSBmaXJzdCB0aW1lIHRoZW4gY3JlYXRlIGFycmF5XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHB1c2ggcGF0aCB0byBhcnJheVxuXHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0ucHVzaChzTG9va1VwT2JqZWN0TWV0YVBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIGEgbmVzdGVkIG9iamVjdCBpcyBmb3VuZFxuXHRcdFx0XHRcdGNvbnN0IG9OZXdMb29rVXBPYmplY3QgPSBMb29rVXBPYmplY3Rbc0tleV07XG5cdFx0XHRcdFx0X2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChvTmV3TG9va1VwT2JqZWN0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBgJHtzTG9va1VwT2JqZWN0TWV0YVBhdGh9LyR7c0tleX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob1NlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblxuXHRcdC8vIDIuIERldGVybWluZSBkaXN0aW5jdCBrZXkgdmFsdWUgYW5kIGFkZCBjb25mbGljdGVkIHBhdGhzIHRvIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0XHRjb25zdCBzTWFpbkVudGl0eVNldE5hbWUgPSBhTWV0YVBhdGhQYXJ0c1swXSxcblx0XHRcdHNNYWluRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c01haW5FbnRpdHlTZXROYW1lfS9Ac2FwdWkubmFtZWApLFxuXHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRsZXQgc01haW5FbnRpdHlWYWx1ZVBhdGgsIHNDdXJyZW50VmFsdWVQYXRoLCBzTGFzdFZhbHVlUGF0aDtcblx0XHRmb3IgKGNvbnN0IHNEaXN0aW5jdEtleSBpbiBvRGlzdGluY3RLZXlzKSB7XG5cdFx0XHRjb25zdCBhQ29uZmxpY3RpbmdQYXRocyA9IG9EaXN0aW5jdEtleXNbc0Rpc3RpbmN0S2V5XTtcblx0XHRcdGxldCBzV2lubmVyVmFsdWVQYXRoO1xuXHRcdFx0Ly8gRmluZCB3aW5uZXIgdmFsdWUgZm9yIGVhY2ggZGlzdGluY3Qga2V5IGluIGNhc2Ugb2YgY29uZmxpY3QgYnkgdGhlIGZvbGxvd2luZyBydWxlOlxuXG5cdFx0XHQvLyAtPiBBLiBpZiBhbnkgbWV0YSBwYXRoIGZvciBhIGRpc3RpbmN0IGtleSBpcyB0aGUgc2FtZSBhcyBtYWluIGVudGl0eSB0YWtlIHRoYXQgYXMgdGhlIHZhbHVlXG5cdFx0XHQvLyAtPiBCLiBpZiBBIGlzIG5vdCBtZXQga2VlcCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0IChzTWV0YVBhdGggPT09IHBhdGggb2YgZGlzdGluY2Uga2V5KVxuXHRcdFx0Ly8gLT4gQy4gaWYgQSwgQiBvciBDIGFyZSBub3QgbWV0IHRha2UgdGhlIGxhc3QgcGF0aCBmb3IgdmFsdWVcblx0XHRcdGlmIChhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdC8vIGNvbmZsaWN0XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGFDb25mbGljdGluZ1BhdGhzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbaV07XG5cdFx0XHRcdFx0bGV0IHNQYXRoSW5Db250ZXh0ID0gc1BhdGgucmVwbGFjZShzUGF0aCA9PT0gc01ldGFQYXRoID8gc01ldGFQYXRoIDogYCR7c01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHRcdFx0XHRzUGF0aEluQ29udGV4dCA9IChzUGF0aEluQ29udGV4dCA9PT0gXCJcIiA/IHNQYXRoSW5Db250ZXh0IDogYCR7c1BhdGhJbkNvbnRleHR9L2ApICsgc0Rpc3RpbmN0S2V5O1xuXHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBBXG5cdFx0XHRcdFx0aWYgKHNFbnRpdHlUeXBlTmFtZSA9PT0gc01haW5FbnRpdHlUeXBlTmFtZSkge1xuXHRcdFx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIEJcblx0XHRcdFx0XHRpZiAoc1BhdGggPT09IHNNZXRhUGF0aCkge1xuXHRcdFx0XHRcdFx0c0N1cnJlbnRWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIENcblx0XHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHNQYXRoSW5Db250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gYWRkIGNvbmZsaWN0ZWQgcGF0aCB0byBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGF0aCBwb2ludHMgdG8gbWFpbiBlbnRpdHkgYW5kIHByZWZpeCBhdHRyaWJ1dGUgbmFtZXMgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW1xuXHRcdFx0XHRcdFx0YCR7c01ldGFQYXRofS8ke3NQYXRoSW5Db250ZXh0fWBcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIuXCIpXG5cdFx0XHRcdFx0XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBBIHx8IEIgfHwgQ1xuXHRcdFx0XHRzV2lubmVyVmFsdWVQYXRoID0gc01haW5FbnRpdHlWYWx1ZVBhdGggfHwgc0N1cnJlbnRWYWx1ZVBhdGggfHwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNXaW5uZXJWYWx1ZVBhdGggYXMgc3RyaW5nKTtcblx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vIGNvbmZsaWN0LCBhZGQgZGlzdGluY3Qga2V5IHdpdGhvdXQgYWRkaW5nIHBhdGhzXG5cdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbMF07IC8vIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgYW5kIGhlbmNlIG5vIGNvbmZsaWN0XG5cdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdHNQYXRoSW5Db250ZXh0ID0gKHNQYXRoSW5Db250ZXh0ID09PSBcIlwiID8gc1BhdGhJbkNvbnRleHQgOiBgJHtzUGF0aEluQ29udGV4dH0vYCkgKyBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0Rpc3RpbmN0S2V5XSA9IGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIi5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIDMuIFJlbW92ZSBhbGwgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gb1NlbWFudGljQXR0cmlidXRlcykge1xuXHRcdFx0aWYgKG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGRlbGV0ZSBvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE5hdmlnYXRpb24gbW9kZS5cblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gbW9kZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldE5hdmlnYXRpb25Nb2RlKCk6IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgZm9yIG5hdmlnYXRpb24gdG8gYSBnaXZlbiBpbnRlbnQgKFNlbWFudGljT2JqZWN0LUFjdGlvbikgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgdXNpbmcgYSBkaWFsb2cgdGhhdCBzaG93cyB0aGUgY29udGV4dHMgd2hpY2ggY2Fubm90IGJlIHBhc3NlZFxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBzZXR0aW5nIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgYWRhcHRhdGlvbiBieSBhIGNvbnN1bWVyLlxuXHQgKiBUaGlzIHNldHRpbmcgYWxzbyByZW1vdmVzIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBpbnBsYWNlIG9yIGV4cGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICogQHBhcmFtIHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBzQWN0aW9uICBBY3Rpb24gZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gc291cmNlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKFxuXHRcdHNTZW1hbnRpY09iamVjdDogc3RyaW5nLFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRzb3VyY2U/OiBDb250cm9sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBzaG91bGRDb250aW51ZSA9IHRydWU7XG5cdFx0aWYgKHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIpKSByZXR1cm47IC8vZGVib3VuY2luZyB0aGUgSUJOIG5hdmlnYXRpb25cblx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCB0cnVlKTtcblx0XHRpZiAobU5hdmlnYXRpb25QYXJhbWV0ZXJzPy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgJiYgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cz8ubGVuZ3RoID49IDEpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGVudGl0eVNldFBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPEVudGl0eVNldD4oZW50aXR5U2V0UGF0aCkudGFyZ2V0ITtcblx0XHRcdC8vIFNob3cgdGhlIGNvbnRleHRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIGFuZCB3aWxsIG5vdCB0aGVyZWZvcmUgYmUgcHJvY2Vzc2VkXG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2cgPSBuZXcgTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2coe1xuXHRcdFx0XHR0aXRsZTogXCJcIixcblx0XHRcdFx0ZW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpLFxuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6IG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25cblx0XHRcdH0pO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHM7XG5cdFx0XHRzaG91bGRDb250aW51ZSA9IGF3YWl0IG5vdEFwcGxpY2FibGVDb250ZXh0c0RpYWxvZy5vcGVuKHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0aWYgKHNob3VsZENvbnRpbnVlKSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgZmFsc2UpO1xuXHR9XG5cblx0X3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQpOiB2b2lkIHtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEuY29udGV4dFwiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEubWV0YWRhdGFFdGFnXCIpO1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIlNBUF9fTWVzc2FnZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldGVkIEVudGl0eSBzZXQuXG5cdCAqIEByZXR1cm5zIEVudGl0eSBzZXQgbmFtZVxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRnZXRFbnRpdHlTZXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXQhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgc2Vuc2l0aXZlIGRhdGEgZnJvbSB0aGUgc2VtYW50aWMgYXR0cmlidXRlIHdpdGggcmVzcGVjdCB0byB0aGUgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgQ29udGV4dCBkYXRhXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGggTWV0YSBwYXRoIHRvIHJlYWNoIHRoZSBlbnRpdHlTZXQgaW4gdGhlIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBzZW1hbnRpYyBBdHRyaWJ1dGVzXG5cdCAqL1xuXHQvLyBUTy1ETyBhZGQgdW5pdCB0ZXN0cyBmb3IgdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gcXVuaXQuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXT4ob0F0dHJpYnV0ZXM6IFQsIHNNZXRhUGF0aDogc3RyaW5nLCBtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbCk6IFQge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KG9BdHRyaWJ1dGVzKSAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1tlbGVtZW50XSAmJiB0eXBlb2Ygb0F0dHJpYnV0ZXNbZWxlbWVudF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlc1tlbGVtZW50XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c01ldGFQYXRofS8ke2VsZW1lbnR9YCwgbWV0YU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuaW5jbHVkZXMoXCJAb2RhdGEudHlwZVwiKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW2VsZW1lbnRdO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2RlbGV0ZUFnZ3JlZ2F0ZXMoWy4uLnRyYW5zQWdncmVnYXRpb25zLCAuLi5jdXN0b21BZ2dyZWdhdGVzXSwgZWxlbWVudCwgb0F0dHJpYnV0ZXMpO1xuXHRcdFx0XHRcdGNvbnN0IGFQcm9wZXJ0eUFubm90YXRpb25zID0gdGhpcy5fZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdFx0XHRzTWV0YVBhdGgsXG5cdFx0XHRcdFx0XHRvQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbCB8fCB0aGlzLl9vTWV0YU1vZGVsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMuUGVyc29uYWxEYXRhPy5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlIHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlVJPy5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLkFuYWx5dGljcz8uTWVhc3VyZVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMuQ29tbW9uPy5GaWVsZENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbi5GaWVsZENvbnRyb2wgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0JFBhdGg/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiB0aGlzLl9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlcykpXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0F0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSBuYXZpZ2F0aW9uIGRhdGEgaWYgaXQgaXMgYSBtZWFzdXJlLlxuXHQgKiBAcGFyYW0gYWdncmVnYXRlcyBBcnJheSBvZiBBZ2dyZWdhdGVzXG5cdCAqIEBwYXJhbSBzUHJvcCBBdHRyaWJ1dGUgbmFtZVxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqL1xuXHRfZGVsZXRlQWdncmVnYXRlcyhhZ2dyZWdhdGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgc1Byb3A6IHN0cmluZywgb0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMgJiYgYWdncmVnYXRlcy5pbmNsdWRlcyhzUHJvcCkpIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tzUHJvcF07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByb3BlcnR5IGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gc1Byb3Bcblx0ICogQHBhcmFtIHNNZXRhUGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxcblx0ICogQHJldHVybnMgLSBUaGUgcHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICovXG5cdF9nZXRQcm9wZXJ0eUFubm90YXRpb25zKFxuXHRcdHNQcm9wOiBzdHJpbmcsXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob0F0dHJpYnV0ZXNbc1Byb3BdICYmIHNNZXRhUGF0aCAmJiAhc01ldGFQYXRoLmluY2x1ZGVzKFwidW5kZWZpbmVkXCIpKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NQcm9wfWApIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb0Z1bGxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4ob0NvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9GdWxsQ29udGV4dD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYWdncmVnYXRlcyBwYXJ0IG9mIHRoZSBFbnRpdHlTZXQgb3IgRW50aXR5VHlwZS5cblx0ICogQHBhcmFtIHNNZXRhUGF0aFxuXHQgKiBAcGFyYW0gb1ZpZXdcblx0ICogQHBhcmFtIG9EaWFnbm9zdGljc1xuXHQgKiBAcmV0dXJucyAtIFRoZSBhZ2dyZWdhdGVzXG5cdCAqL1xuXHRfZ2V0QWdncmVnYXRlcyhcblx0XHRzTWV0YVBhdGg6IHN0cmluZyxcblx0XHRvVmlldzogRkVWaWV3LFxuXHRcdG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncblx0KTogeyB0cmFuc0FnZ3JlZ2F0aW9uczogc3RyaW5nW107IGN1c3RvbUFnZ3JlZ2F0ZXM6IHN0cmluZ1tdIH0ge1xuXHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSB0aGlzLl9nZXRDb252ZXJ0ZXJDb250ZXh0KHNNZXRhUGF0aCwgb1ZpZXcsIG9EaWFnbm9zdGljcyk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGlzQW5hbHl0aWNzU3VwcG9ydGVkID0gYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTtcblx0XHRsZXQgdHJhbnNBZ2dyZWdhdGlvbnM6IHN0cmluZ1tdLCBjdXN0b21BZ2dyZWdhdGVzO1xuXHRcdGlmIChpc0FuYWx5dGljc1N1cHBvcnRlZCkge1xuXHRcdFx0Y29uc3QgdHJhbnNBZ2dyZWdhdGlvbnNQcmVwcm9jZXNzaW5nID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0XHRcdGlmICh0cmFuc0FnZ3JlZ2F0aW9uc1ByZXByb2Nlc3Npbmc/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cmFuc0FnZ3JlZ2F0aW9ucyA9IHRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZy5tYXAoKHRyYW5zQWdnKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuICh0cmFuc0FnZy5OYW1lIGFzIHN0cmluZykgfHwgKHRyYW5zQWdnIGFzIHVua25vd24gYXMgeyBWYWx1ZTogc3RyaW5nIH0pLlZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRcdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlcy5tYXAoKGN1c3RvbUFnZ3JlZ2F0ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjdXN0b21BZ2dyZWdhdGUucXVhbGlmaWVyO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPz89IFtdO1xuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzID8gKGN1c3RvbUFnZ3JlZ2F0ZXMgYXMgc3RyaW5nW10pIDogW107XG5cdFx0cmV0dXJuIHsgdHJhbnNBZ2dyZWdhdGlvbnMsIGN1c3RvbUFnZ3JlZ2F0ZXMgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGNvbnZlcnRlckNvbnRleHQuXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGg6IHN0cmluZywgb1ZpZXc6IEZFVmlldywgb0RpYWdub3N0aWNzOiBEaWFnbm9zdGljcyk6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRsZXQgc0VudGl0eVNldCA9IG9WaWV3RGF0YS5lbnRpdHlTZXQ7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb1ZpZXdEYXRhLmNvbnRleHRQYXRoO1xuXHRcdGlmIChzQ29udGV4dFBhdGggJiYgKCFzRW50aXR5U2V0IHx8IHNFbnRpdHlTZXQuaW5jbHVkZXMoXCIvXCIpKSkge1xuXHRcdFx0c0VudGl0eVNldCA9IG9WaWV3RGF0YT8uZnVsbENvbnRleHRQYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHR9XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKHNNZXRhUGF0aCwgb1ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgc0VudGl0eVNldCEsIG9EaWFnbm9zdGljcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgcGF0aC1iYXNlZCBGaWVsZENvbnRyb2wgZXZhbHVhdGVzIHRvIGluYXBwbGljYWJsZS5cblx0ICogQHBhcmFtIHNGaWVsZENvbnRyb2xQYXRoIEZpZWxkIGNvbnRyb2wgcGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZSBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGluYXBwbGljYWJsZVxuXHQgKi9cblx0X2lzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGxldCBiSW5hcHBsaWNhYmxlID0gZmFsc2U7XG5cdFx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdC8vIHNlbnNpdGl2ZSBkYXRhIGlzIHJlbW92ZWQgb25seSBpZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLlxuXHRcdGlmIChhUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YkluYXBwbGljYWJsZSA9ICEhKFxuXHRcdFx0XHRvQXR0cmlidXRlW2FQYXJ0c1swXV0gJiZcblx0XHRcdFx0KG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSBhcyBvYmplY3QpLmhhc093blByb3BlcnR5KGFQYXJ0c1sxXSkgJiZcblx0XHRcdFx0KG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KVthUGFydHNbMV1dID09PSAwXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdFx0fVxuXHRcdHJldHVybiBiSW5hcHBsaWNhYmxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXBsYWNlIExvY2FsIFByb3BlcnRpZXMgd2l0aCBTZW1hbnRpYyBPYmplY3QgbWFwcGluZ3MuXG5cdCAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb25WYXJpYW50IGNvbnNpc3Rpbmcgb2YgZmlsdGVyYmFyLCBUYWJsZSBhbmQgUGFnZSBDb250ZXh0XG5cdCAqIEBwYXJhbSB2TWFwcGluZ3MgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdcblx0ICogQHJldHVybnMgLSBNb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggTG9jYWxQcm9wZXJ0eSByZXBsYWNlZCB3aXRoIFNlbWFudGljT2JqZWN0UHJvcGVydGllcy5cblx0ICovXG5cdF9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogb2JqZWN0IHwgc3RyaW5nKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygb01hcHBpbmdzKSB7XG5cdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9XG5cdFx0XHRcdChpdGVtW1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBpdGVtW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHRcdChpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmIGl0ZW1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRcdGl0ZW1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGl0ZW1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdGlmIChvU2VsZWN0T3B0aW9uICYmIHNMb2NhbFByb3BlcnR5ICE9PSBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSkge1xuXHRcdFx0XHQvL3JlbW92ZSB0aGUgc2VsZWN0T3B0aW9uIHRvIGJlIG92ZXJ3cml0dGVuIHRoZW4gcmVuYW1lIHRoZSBvbmUgY29taW5nIGZyb20gdGhlIGxvY2FsIHByb3BlcnR5XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSk7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbmFtZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIHRvIHRoZSBoaXN0b3J5IG9iamVjdC5cblx0ICovXG5cdHByb3RlY3RlZCBzdG9yZUZvY3VzSW5mb0luSGlzdG9yeSgpOiB2b2lkIHtcblx0XHRsZXQgZm9jdXNJbmZvID0gbnVsbDtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKTtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2xJZCA9IGZvY3VzQ29udHJvbD8uZ2V0SWQoKTtcblx0XHRjb25zdCBmb2N1c01EQ1RhYmxlID0gZm9jdXNDb250cm9sICYmIEZQTUhlbHBlci5nZXRNZGNUYWJsZShmb2N1c0NvbnRyb2wpO1xuXHRcdGlmIChmb2N1c0NvbnRyb2w/LmlzQShcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0Zm9jdXNJbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIkNvbnRyb2xcIixcblx0XHRcdFx0Y29udHJvbElkOiBmb2N1c0NvbnRyb2xJZFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGZvY3VzTURDVGFibGUpIHtcblx0XHRcdGZvY3VzSW5mbyA9IHtcblx0XHRcdFx0dHlwZTogXCJSb3dcIixcblx0XHRcdFx0dGFibGVJZDogZm9jdXNNRENUYWJsZS5nZXRJZCgpLFxuXHRcdFx0XHRjb250ZXh0UGF0aEZvY3VzOiBmb2N1c0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlLCB7IGZvY3VzSW5mbzogZm9jdXNJbmZvIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYW4gT3V0Ym91bmQgcHJvdmlkZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gc091dGJvdW5kIElkZW50aWZpZXIgdG8gbG9jYXRpb24gdGhlIG91dGJvdW5kIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9wdGlvbmFsIG1hcCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudFxuXHQgKiBAc2luY2UgMS44Ni4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVPdXRib3VuZChzT3V0Ym91bmQ6IHN0cmluZywgbU5hdmlnYXRpb25QYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IHVua25vd25bXT4pOiB2b2lkIHtcblx0XHR0aGlzLnN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5KCk7XG5cdFx0bGV0IGFOYXZQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdG9PdXRib3VuZCA9IG9NYW5pZmVzdEVudHJ5LmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzPy5bc091dGJvdW5kXTtcblx0XHRpZiAoIW9PdXRib3VuZCkge1xuXHRcdFx0TG9nLmVycm9yKFwiT3V0Ym91bmQgaXMgbm90IGRlZmluZWQgaW4gbWFuaWZlc3QhIVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0c0FjdGlvbiA9IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRvdXRib3VuZFBhcmFtcyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzICYmIHRoaXMuZ2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kLnBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0YU5hdlBhcmFtcyA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb25QYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRsZXQgb1BhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRcdFx0Y29uc3QgbmF2UGFyYW1ldGVyVmFsdWUgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMhW2tleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG5hdlBhcmFtZXRlclZhbHVlKSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBuYXZQYXJhbWV0ZXJWYWx1ZSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0b1BhcmFtc1trZXldID0gaXRlbTtcblx0XHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9QYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRvUGFyYW1zW2tleV0gPSBuYXZQYXJhbWV0ZXJWYWx1ZSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0YU5hdlBhcmFtcz8ucHVzaChvUGFyYW1zKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czoge1xuXHRcdFx0XHRcdGRhdGE6IGFOYXZQYXJhbXMgfHwgb3V0Ym91bmRQYXJhbXNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoc1NlbWFudGljT2JqZWN0LCBzQWN0aW9uLCBtTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhcHBseSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGEgZmlsdGVyIGJhciwgYSB0YWJsZSwgYW5kIGEgcGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSB2T3V0Ym91bmRQYXJhbXMgT3V0Ym91bmQgUHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcmV0dXJucyAtIFRoZSBtb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdF9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKHZPdXRib3VuZFBhcmFtcyk7XG5cdFx0Y29uc3QgYVNlbGVjdFByb3BlcnRpZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKGtleSwgXCJJXCIsIFwiRVFcIiwgdk91dGJvdW5kUGFyYW1zW2tleV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gb091dGJvdW5kUGFyYW1zIFBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgb3V0Ym91bmRzLiBPbmx5IFwicGxhaW5cIiBpcyBzdXBwb3J0ZWRcblx0ICogQHJldHVybnMgUGFyYW1ldGVycyB3aXRoIHRoZSBrZXktVmFsdWUgcGFpclxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldE91dGJvdW5kUGFyYW1zKG9PdXRib3VuZFBhcmFtczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5UGFyYW1ldGVyPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRcdGNvbnN0IG9QYXJhbXNNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0aWYgKG9PdXRib3VuZFBhcmFtcykge1xuXHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmRQYXJhbXMpIHx8IFtdO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZFBhcmFtc1trZXldO1xuXHRcdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwicGxhaW5cIikge1xuXHRcdFx0XHRcdFx0aWYgKCFvUGFyYW1zTWFwcGluZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNNYXBwaW5nW2tleV0gPSBvTWFwcGluZy52YWx1ZS52YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtc01hcHBpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdk1vZGUgT3BlbnMgaW4gbmV3IHRhYiBvciB3aW5kb3cgd2hlbiBzZXQgdG8gJ2V4cGxhY2UnLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdIHwgdW5kZWZpbmVkLFxuXHRcdHNDcmVhdGVQYXRoOiBzdHJpbmcsXG5cdFx0bmF2TW9kZT86IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvT3V0Ym91bmRzID0gb0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKTtcblx0XHRjb25zdCBvRGlzcGxheU91dGJvdW5kID0gb091dGJvdW5kc1tzT3V0Ym91bmRUYXJnZXRdO1xuXHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvRGlzcGxheU91dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHtcblx0XHRcdFx0aW50ZW50czoge31cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRGVmYXVsdFJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgPSB7fTtcblx0XHRcdGxldCBzTWV0YVBhdGg6IHN0cmluZztcblx0XHRcdGxldCBuYXZpZ2F0aW9uQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBvQ29udGV4dDtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHRbMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250ZXh0LmlzQSAmJiBvQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cyA9IFtvQ29udGV4dF07XG5cdFx0XHRcdH1cblx0XHRcdFx0b0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3lbc01ldGFQYXRoIV0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5fZmVEZWZhdWx0ID0gb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzQ3JlYXRlUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzS2V5ID0gYCR7b0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdH0tJHtvRGlzcGxheU91dGJvdW5kLmFjdGlvbn1gO1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cyFbc0tleV0gPSB7fTtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHMhW3NLZXldIVtzQ3JlYXRlUGF0aF0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0Rpc3BsYXlPdXRib3VuZCAmJiBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QsIG9EaXNwbGF5T3V0Ym91bmQuYWN0aW9uLCB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogbmF2aWdhdGlvbkNvbnRleHRzLFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llczogb1JlZnJlc2hTdHJhdGVnaWVzLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0bmF2TW9kZTogbmF2TW9kZVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vVE9ETzogY2hlY2sgd2h5IHJldHVybmluZyBhIHByb21pc2UgaXMgcmVxdWlyZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBvdXRib3VuZCB0YXJnZXQgJHtzT3V0Ym91bmRUYXJnZXR9IG5vdCBmb3VuZCBpbiBjcm9zcyBuYXZpZ2F0aW9uIGRlZmluaXRpb24gb2YgbWFuaWZlc3RgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2VzcyB0aGUgc2VtYW50aWMgYXR0cmlidXRlcyBiYXNlZCBvbiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBzZW1hbnRpY0F0dHJpYnV0ZXMgU2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGF0aHNUb1JldGFpbiBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gYmUgcmV0YWluZWQgaW4gY2FzZSBvZiBsaW5rc1xuXHQgKiBAcmV0dXJucyBQcm9jZXNzZWQgc2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKi9cblx0cHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdHNlbWFudGljQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cGF0aHNUb1JldGFpbj86IEFycmF5PHN0cmluZz5cblx0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGNvbnN0IGJLZWVwTmF2UHJvcGVydGllcyA9IHRoaXMua2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpO1xuXHRcdGlmICghYktlZXBOYXZQcm9wZXJ0aWVzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dCwgcGF0aHNUb1JldGFpbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzZW1hbnRpY0F0dHJpYnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIG5hdmlnYXRpb24gcHJvcGVydGllcyBoYXMgdG8gYmUgY29uc2lkZXJlZCBmb3IgdGhlIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdGxldCBiS2VlcE5hdlByb3BlcnRpZXMgPSBmYWxzZTtcblx0XHRjb25zdCBtYW5pZmVzdCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRcdGJLZWVwTmF2UHJvcGVydGllcyA9IG1hbmlmZXN0Py5hcHA/LmNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24gfHwgZmFsc2U7XG5cdFx0cmV0dXJuIGJLZWVwTmF2UHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgc2VtYW50aWMgYXR0cmlidXRlcyBmcm9tIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHBhdGhzVG9SZXRhaW4gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHJldGFpbmVkIGluIGNhc2Ugb2YgbGlua3Ncblx0ICogQHJldHVybnMgU2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFNlbWFudGljQXR0cmlidXRlc1dpdGhvdXROYXZpZ2F0aW9uUHJvcGVydGllcyhjb250ZXh0OiBDb250ZXh0LCBwYXRoc1RvUmV0YWluPzogQXJyYXk8c3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dFBhdGgpLFxuXHRcdFx0cmV0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCBuYXZQcm9wZXJ0aWVzID0gdGhpcy5nZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbCwgbWV0YVBhdGgpO1xuXHRcdGlmIChuYXZQcm9wZXJ0aWVzICYmIG5hdlByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0bmF2UHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0Y29uc3QgbmF2UHJvcE5hbWUgPSBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHBhdGhzVG9SZXRhaW4pICYmIHBhdGhzVG9SZXRhaW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIFdlIGNvbnNpZGVyIDEuMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgc2VtYW50aWMgbGlua3MgdG8gYmUgcGFzc2VkIGFzIHBhcnQgb2YgY29udGV4dFxuXHRcdFx0XHRcdGlmIChyZXQuaGFzT3duUHJvcGVydHkobmF2UHJvcE5hbWUpICYmIHJldFtuYXZQcm9wTmFtZV0pIHtcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAke25hdlByb3BOYW1lfS8ke2tleX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXBhdGhzVG9SZXRhaW4/LmluY2x1ZGVzKHByb3BlcnR5UGF0aCkgJiYgcmV0W25hdlByb3BOYW1lXS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV1ba2V5XTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMocmV0W25hdlByb3BOYW1lXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gZW50aXR5VHlwZSB1c2luZyBtZXRhbW9kZWwuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBNZXRhUGF0aFxuXHQgKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0ICovXG5cdGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgbWV0YVBhdGg6IHN0cmluZyk6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdIHtcblx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlUeXBlPihgJHttZXRhUGF0aH0vYCkudGFyZ2V0ITtcblx0XHRyZXR1cm4gZW50aXR5VHlwZT8ubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9DQTtBQUNBO0FBQ0E7RUFtQ0E7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtNQSw2QkFBNkIsSUFBQUMsSUFBQSxHQURsQ0MsY0FBYyxDQUFD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
765
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbiIsIl9kZWMiLCJkZWZpbmVVSTVDbGFzcyIsIl9kZWMyIiwibWV0aG9kT3ZlcnJpZGUiLCJfZGVjMyIsInB1YmxpY0V4dGVuc2lvbiIsIl9kZWM0IiwiZmluYWxFeHRlbnNpb24iLCJfZGVjNSIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImV4dGVuc2libGUiLCJPdmVycmlkZUV4ZWN1dGlvbiIsIkluc3RlYWQiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsInByaXZhdGVFeHRlbnNpb24iLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJfZGVjMTkiLCJfZGVjMjAiLCJfZGVjMjEiLCJfZGVjMjIiLCJfZGVjMjMiLCJfY2xhc3MiLCJfY2xhc3MyIiwiX0NvbnRyb2xsZXJFeHRlbnNpb24iLCJjYWxsIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbkluaXQiLCJfb0FwcENvbXBvbmVudCIsImJhc2UiLCJnZXRBcHBDb21wb25lbnQiLCJfb01ldGFNb2RlbCIsImdldE1vZGVsIiwiZ2V0TWV0YU1vZGVsIiwiX29OYXZpZ2F0aW9uU2VydmljZSIsImdldE5hdmlnYXRpb25TZXJ2aWNlIiwiX29WaWV3IiwiZ2V0VmlldyIsIm5hdmlnYXRlIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJuYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNvdXJjZSIsIm5hdmlnYXRpb25BbHJlYWR5U3RhcnRlZCIsIl9kb05hdmlnYXRlIiwidk5hdmlnYXRpb25Db250ZXh0cyIsIm5hdmlnYXRpb25Db250ZXh0cyIsImFOYXZpZ2F0aW9uQ29udGV4dHMiLCJBcnJheSIsImlzQXJyYXkiLCJ2U2VtYW50aWNPYmplY3RNYXBwaW5nIiwic2VtYW50aWNPYmplY3RNYXBwaW5nIiwidk91dGJvdW5kUGFyYW1zIiwiYWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzIiwib1RhcmdldEluZm8iLCJvVmlldyIsIm9Db250cm9sbGVyIiwiZ2V0Q29udHJvbGxlciIsImFTZW1hbnRpY0F0dHJpYnV0ZXMiLCJvU2VsZWN0aW9uVmFyaWFudCIsIlNlbGVjdGlvblZhcmlhbnQiLCJsZW5ndGgiLCJmb3JFYWNoIiwib05hdmlnYXRpb25Db250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0Iiwib05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QiLCJpc0EiLCJvU2VtYW50aWNBdHRyaWJ1dGVzIiwiZ2V0T2JqZWN0Iiwic01ldGFQYXRoIiwiZ2V0TWV0YVBhdGgiLCJnZXRQYXRoIiwiZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMiLCJwcm9jZXNzU2VtYW50aWNBdHRyaWJ1dGVzIiwicmVtb3ZlU2Vuc2l0aXZlRGF0YSIsIm9OYXZDb250ZXh0IiwicHJlcGFyZUNvbnRleHRGb3JFeHRlcm5hbE5hdmlnYXRpb24iLCJwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0IiwicHVzaCIsInNlbWFudGljQXR0cmlidXRlcyIsImRhdGEiLCJtZXRhUGF0aCIsIm1peEF0dHJpYnV0ZXNBbmRTZWxlY3Rpb25WYXJpYW50IiwidG9KU09OU3RyaW5nIiwib01vZGVsIiwic0VudGl0eVNldCIsImdldEVudGl0eVNldCIsInNDb250ZXh0VXJsIiwiY29uc3RydWN0Q29udGV4dFVybCIsInVuZGVmaW5lZCIsInNldEZpbHRlckNvbnRleHRVcmwiLCJfYXBwbHlPdXRib3VuZFBhcmFtcyIsImludGVudEJhc2VkTmF2aWdhdGlvbiIsImFkYXB0TmF2aWdhdGlvbkNvbnRleHQiLCJfYXBwbHlTZW1hbnRpY09iamVjdE1hcHBpbmdzIiwiX3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMiLCJzTmF2TW9kZSIsIl9pbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJnZXROYXZpZ2F0aW9uTW9kZSIsIm1SZWZyZXNoU3RyYXRlZ2llcyIsInJlZnJlc2hTdHJhdGVnaWVzIiwib0ludGVybmFsTW9kZWwiLCJnZXRWaWV3RGF0YSIsInJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSIsIm1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMiLCJtZXJnZU9iamVjdHMiLCJtUmVmcmVzaFN0cmF0ZWd5IiwiS2VlcEFsaXZlSGVscGVyIiwiZ2V0UmVmcmVzaFN0cmF0ZWd5Rm9ySW50ZW50Iiwic2V0UHJvcGVydHkiLCJuYXZNb2RlIiwib25FcnJvciIsInNhcCIsInVpIiwicmVxdWlyZSIsIk1lc3NhZ2VCb3hDbGFzcyIsIm9SZXNvdXJjZUJ1bmRsZSIsIkxpYnJhcnkiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImVycm9yIiwiZ2V0VGV4dCIsInRpdGxlIiwiRXJyb3IiLCJvQmluZGluZ0NvbnRleHQiLCJnZXRCaW5kaW5nQ29udGV4dCIsIm9NZXRhTW9kZWwiLCJjb252ZXJ0ZXJUeXBlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJkcmFmdCIsInByb2Nlc3NEYXRhTG9zc09yRHJhZnREaXNjYXJkQ29uZmlybWF0aW9uIiwiYmluZCIsIkZ1bmN0aW9uIiwiTmF2aWdhdGlvblR5cGUiLCJGb3J3YXJkTmF2aWdhdGlvbiIsIm9Db250ZXh0Iiwib0Rpc3RpbmN0S2V5cyIsInNDb250ZXh0UGF0aCIsImFNZXRhUGF0aFBhcnRzIiwic3BsaXQiLCJmaWx0ZXIiLCJCb29sZWFuIiwiX2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdCIsIkxvb2tVcE9iamVjdCIsInNMb29rVXBPYmplY3RNZXRhUGF0aCIsInNLZXkiLCJvTmV3TG9va1VwT2JqZWN0Iiwic01haW5FbnRpdHlTZXROYW1lIiwic01haW5FbnRpdHlUeXBlTmFtZSIsIm9Qcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0Iiwic01haW5FbnRpdHlWYWx1ZVBhdGgiLCJzQ3VycmVudFZhbHVlUGF0aCIsInNMYXN0VmFsdWVQYXRoIiwic0Rpc3RpbmN0S2V5IiwiYUNvbmZsaWN0aW5nUGF0aHMiLCJzV2lubmVyVmFsdWVQYXRoIiwiaSIsInNQYXRoIiwic1BhdGhJbkNvbnRleHQiLCJyZXBsYWNlIiwic0VudGl0eVR5cGVOYW1lIiwic1ZhbHVlIiwiam9pbiIsImdldFByb3BlcnR5Iiwic1Byb3BlcnR5IiwibmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nIiwic1NlbWFudGljT2JqZWN0Iiwic0FjdGlvbiIsIm1OYXZpZ2F0aW9uUGFyYW1ldGVycyIsInNob3VsZENvbnRpbnVlIiwibm90QXBwbGljYWJsZUNvbnRleHRzIiwibWV0YU1vZGVsIiwiZW50aXR5U2V0UGF0aCIsImNvbnZlcnRlZE1ldGFkYXRhIiwiY29udmVydFR5cGVzIiwiZW50aXR5U2V0IiwicmVzb2x2ZVBhdGgiLCJ0YXJnZXQiLCJub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2ciLCJOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyIsImVudGl0eVR5cGUiLCJyZXNvdXJjZU1vZGVsIiwiZ2V0UmVzb3VyY2VNb2RlbCIsImFwcGxpY2FibGVDb250ZXh0cyIsIm5hbWUiLCJhY3Rpb25OYW1lIiwib3BlbiIsInJlbW92ZVNlbGVjdE9wdGlvbiIsIm9BdHRyaWJ1dGVzIiwidHJhbnNBZ2dyZWdhdGlvbnMiLCJjdXN0b21BZ2dyZWdhdGVzIiwiX2dldEFnZ3JlZ2F0ZXMiLCJnZXREaWFnbm9zdGljcyIsImFQcm9wZXJ0aWVzIiwiT2JqZWN0Iiwia2V5cyIsImVsZW1lbnQiLCJpbmNsdWRlcyIsIl9kZWxldGVBZ2dyZWdhdGVzIiwiYVByb3BlcnR5QW5ub3RhdGlvbnMiLCJfZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyIsIlBlcnNvbmFsRGF0YSIsIklzUG90ZW50aWFsbHlTZW5zaXRpdmUiLCJVSSIsIkV4Y2x1ZGVGcm9tTmF2aWdhdGlvbkNvbnRleHQiLCJBbmFseXRpY3MiLCJNZWFzdXJlIiwiQ29tbW9uIiwiRmllbGRDb250cm9sIiwib0ZpZWxkQ29udHJvbCIsIl9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUiLCJhZ2dyZWdhdGVzIiwic1Byb3AiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsIm9GdWxsQ29udGV4dCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsInRhcmdldE9iamVjdCIsImFubm90YXRpb25zIiwib0RpYWdub3N0aWNzIiwiY29udmVydGVyQ29udGV4dCIsIl9nZXRDb252ZXJ0ZXJDb250ZXh0IiwiYWdncmVnYXRpb25IZWxwZXIiLCJBZ2dyZWdhdGlvbkhlbHBlciIsImdldEVudGl0eVR5cGUiLCJpc0FuYWx5dGljc1N1cHBvcnRlZCIsInRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZyIsImdldFRyYW5zQWdncmVnYXRpb25zIiwibWFwIiwidHJhbnNBZ2ciLCJOYW1lIiwiVmFsdWUiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsImN1c3RvbUFnZ3JlZ2F0ZSIsInF1YWxpZmllciIsIm9WaWV3RGF0YSIsImNvbnRleHRQYXRoIiwiZnVsbENvbnRleHRQYXRoIiwiQ29tbW9uVXRpbHMiLCJnZXRDb252ZXJ0ZXJDb250ZXh0Rm9yUGF0aCIsInNGaWVsZENvbnRyb2xQYXRoIiwib0F0dHJpYnV0ZSIsImJJbmFwcGxpY2FibGUiLCJhUGFydHMiLCJoYXNPd25Qcm9wZXJ0eSIsInZNYXBwaW5ncyIsIm9NYXBwaW5ncyIsIkpTT04iLCJwYXJzZSIsIml0ZW0iLCJzTG9jYWxQcm9wZXJ0eSIsInNTZW1hbnRpY09iamVjdFByb3BlcnR5Iiwib1NlbGVjdE9wdGlvbiIsImdldFNlbGVjdE9wdGlvbiIsInJlbmFtZVNlbGVjdE9wdGlvbiIsInN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5IiwiZm9jdXNJbmZvIiwiZm9jdXNDb250cm9sIiwiRWxlbWVudCIsImdldEFjdGl2ZUVsZW1lbnQiLCJmb2N1c0NvbnRyb2xJZCIsImdldElkIiwiZm9jdXNNRENUYWJsZSIsIkZQTUhlbHBlciIsImdldE1kY1RhYmxlIiwidHlwZSIsImNvbnRyb2xJZCIsInRhYmxlSWQiLCJjb250ZXh0UGF0aEZvY3VzIiwiaGlzdG9yeSIsInJlcGxhY2VTdGF0ZSIsImFzc2lnbiIsInN0YXRlIiwibmF2aWdhdGVPdXRib3VuZCIsInNPdXRib3VuZCIsImFOYXZQYXJhbXMiLCJvTWFuaWZlc3RFbnRyeSIsImdldE1hbmlmZXN0RW50cnkiLCJvT3V0Ym91bmQiLCJjcm9zc05hdmlnYXRpb24iLCJvdXRib3VuZHMiLCJMb2ciLCJvdXRib3VuZFBhcmFtcyIsInBhcmFtZXRlcnMiLCJnZXRPdXRib3VuZFBhcmFtcyIsImtleSIsIm9QYXJhbXMiLCJuYXZQYXJhbWV0ZXJWYWx1ZSIsImFQYXJhbWV0ZXJzIiwiYVNlbGVjdFByb3BlcnRpZXMiLCJnZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcyIsImFkZFNlbGVjdE9wdGlvbiIsIm9PdXRib3VuZFBhcmFtcyIsIm9QYXJhbXNNYXBwaW5nIiwib01hcHBpbmciLCJ2YWx1ZSIsImZvcm1hdCIsIm9uQ2hldnJvblByZXNzTmF2aWdhdGVPdXRCb3VuZCIsInNPdXRib3VuZFRhcmdldCIsInNDcmVhdGVQYXRoIiwib091dGJvdW5kcyIsImdldFJvdXRpbmdTZXJ2aWNlIiwiZ2V0T3V0Ym91bmRzIiwib0Rpc3BsYXlPdXRib3VuZCIsIm9SZWZyZXNoU3RyYXRlZ2llcyIsImludGVudHMiLCJvRGVmYXVsdFJlZnJlc2hTdHJhdGVneSIsImdldE1ldGFQYXRoRm9yQ29udGV4dCIsIlJlZnJlc2hTdHJhdGVneVR5cGUiLCJTZWxmIiwiX2ZlRGVmYXVsdCIsIlByb21pc2UiLCJyZXNvbHZlIiwiY29udGV4dCIsInBhdGhzVG9SZXRhaW4iLCJiS2VlcE5hdlByb3BlcnRpZXMiLCJrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uIiwiZ2V0U2VtYW50aWNBdHRyaWJ1dGVzV2l0aG91dE5hdmlnYXRpb25Qcm9wZXJ0aWVzIiwibWFuaWZlc3QiLCJhcHAiLCJjb25zaWRlck5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yRXh0ZXJuYWxOYXZpZ2F0aW9uIiwicmV0IiwibmF2UHJvcGVydGllcyIsImdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUiLCJuYXZQcm9wIiwibmF2UHJvcE5hbWUiLCJwcm9wZXJ0eVBhdGgiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsIkNvbnRyb2xsZXJFeHRlbnNpb24iLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJJbnRlcm5hbEludGVudEJhc2VkTmF2aWdhdGlvbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgRW50aXR5VHlwZSwgTmF2aWdhdGlvblByb3BlcnR5LCBQcm9wZXJ0eSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlT2JqZWN0cyBmcm9tIFwic2FwL2Jhc2UvdXRpbC9tZXJnZVwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV4dGVuc2libGUsIGZpbmFsRXh0ZW5zaW9uLCBtZXRob2RPdmVycmlkZSwgcHJpdmF0ZUV4dGVuc2lvbiwgcHVibGljRXh0ZW5zaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgRkVWaWV3IH0gZnJvbSBcInNhcC9mZS9jb3JlL0Jhc2VDb250cm9sbGVyXCI7XG5pbXBvcnQgQ29tbW9uVXRpbHMgZnJvbSBcInNhcC9mZS9jb3JlL0NvbW1vblV0aWxzXCI7XG5pbXBvcnQgdHlwZSBQYWdlQ29udHJvbGxlciBmcm9tIFwic2FwL2ZlL2NvcmUvUGFnZUNvbnRyb2xsZXJcIjtcbmltcG9ydCBOb3RBcHBsaWNhYmxlQ29udGV4dERpYWxvZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2dcIjtcbmltcG9ydCBkcmFmdCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvZWRpdEZsb3cvZHJhZnRcIjtcbmltcG9ydCB0eXBlIENvbnZlcnRlckNvbnRleHQgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvQ29udmVydGVyQ29udGV4dFwiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuaW1wb3J0IHsgY29udmVydFR5cGVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgdHlwZSB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgRlBNSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlclwiO1xuaW1wb3J0IEtlZXBBbGl2ZUhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9LZWVwQWxpdmVIZWxwZXJcIjtcbmltcG9ydCB0eXBlIHsgUmVmcmVzaFN0cmF0ZWdpZXMsIFNPUmVmcmVzaFN0cmF0ZWd5IH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlUmVmcmVzaFR5cGVzXCI7XG5pbXBvcnQgeyBSZWZyZXNoU3RyYXRlZ3lUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvS2VlcEFsaXZlUmVmcmVzaFR5cGVzXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdldFJlc291cmNlTW9kZWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9SZXNvdXJjZU1vZGVsSGVscGVyXCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25TZXJ2aWNlIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL05hdmlnYXRpb25TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCBTZWxlY3Rpb25WYXJpYW50IGZyb20gXCJzYXAvZmUvbmF2aWdhdGlvbi9TZWxlY3Rpb25WYXJpYW50XCI7XG5pbXBvcnQgdHlwZSBNZXNzYWdlQm94IGZyb20gXCJzYXAvbS9NZXNzYWdlQm94XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgRWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IExpYnJhcnkgZnJvbSBcInNhcC91aS9jb3JlL0xpYlwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnlQYXJhbWV0ZXIgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCBDb250cm9sbGVyRXh0ZW5zaW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvQ29udHJvbGxlckV4dGVuc2lvblwiO1xuaW1wb3J0IE92ZXJyaWRlRXhlY3V0aW9uIGZyb20gXCJzYXAvdWkvY29yZS9tdmMvT3ZlcnJpZGVFeGVjdXRpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YVY0Q29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IEFnZ3JlZ2F0aW9uSGVscGVyIH0gZnJvbSBcIi4uL2NvbnZlcnRlcnMvaGVscGVycy9BZ2dyZWdhdGlvblwiO1xuXG4vKipcbiAqIE5hdmlnYXRpb24gUGFyYW1ldGVycyB1c2VkIGR1cmluZyBuYXZpZ2F0aW9uXG4gKi9cbmV4cG9ydCB0eXBlIE5hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHQvKipcblx0ICogU2luZ2xlIGluc3RhbmNlIG9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9LCBvciBhbHRlcm5hdGl2ZWx5IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzLCB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudC5cblx0ICovXG5cdG5hdmlnYXRpb25Db250ZXh0cz86IG9iamVjdCB8IE9EYXRhVjRDb250ZXh0W107XG5cdC8qKlxuXHQgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uLlxuXHQgKi9cblx0c2VtYW50aWNPYmplY3RNYXBwaW5nPzogc3RyaW5nIHwgb2JqZWN0O1xuXHRkZWZhdWx0UmVmcmVzaFN0cmF0ZWd5Pzogb2JqZWN0O1xuXHRyZWZyZXNoU3RyYXRlZ2llcz86IFJlZnJlc2hTdHJhdGVnaWVzO1xuXHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXHQvKipcblx0ICogU2luZ2xlIGluc3RhbmNlIG9yIG11bHRpcGxlIGluc3RhbmNlcyBvZiB7QGxpbmsgc2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHR9LCBvciBhbHRlcm5hdGl2ZWx5IGFuIG9iamVjdCBvciBhcnJheSBvZiBvYmplY3RzLCB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudCBhbmQgZm9yIHdoaWNoIHRoZSBJQk4gYnV0dG9uIGlzIGVuYWJsZWRcblx0ICovXG5cdGFwcGxpY2FibGVDb250ZXh0cz86IE9EYXRhVjRDb250ZXh0W107XG5cdC8qKlxuXHQgKiBTaW5nbGUgaW5zdGFuY2Ugb3IgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHtAbGluayBzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dH0sIG9yIGFsdGVybmF0aXZlbHkgYW4gb2JqZWN0IG9yIGFycmF5IG9mIG9iamVjdHMsIHdoaWNoIGNhbm5vdCBiZSBwYXNzZWQgdG8gdGhlIGludGVudC5cblx0ICogXHRpZiBhbiBhcnJheSBvZiBjb250ZXh0cyBpcyBwYXNzZWQgdGhlIGNvbnRleHQgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIG1ldGEgcGF0aCBhbmQgYWNjb3JkaW5nbHkgcmVtb3ZlIHRoZSBzZW5zaXRpdmUgZGF0YVxuXHQgKiBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXMgZXhwZWN0ZWQ6XG5cdCAqIHtcblx0ICogXHRkYXRhOiB7XG5cdCAqIFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqIFx0XHRcdE5hbWU6IFwiTGFwdG9wXCJcblx0ICogXHR9LFxuXHQgKiBcdG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogfVxuXHQgKiBUaGUgbWV0YVBhdGggaXMgdXNlZCB0byByZW1vdmUgYW55IHNlbnNpdGl2ZSBkYXRhLlxuXHQgKi9cblx0bm90QXBwbGljYWJsZUNvbnRleHRzPzogT0RhdGFWNENvbnRleHRbXTtcblxuXHRsYWJlbD86IHN0cmluZztcblx0bmF2TW9kZT86IHN0cmluZztcbn07XG4vKipcbiAqIHtAbGluayBzYXAudWkuY29yZS5tdmMuQ29udHJvbGxlckV4dGVuc2lvbiBDb250cm9sbGVyIGV4dGVuc2lvbn1cbiAqIEBzaW5jZSAxLjg0LjBcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMuSW50ZXJuYWxJbnRlcm5hbEJhc2VkTmF2aWdhdGlvblwiKVxuY2xhc3MgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb24gZXh0ZW5kcyBDb250cm9sbGVyRXh0ZW5zaW9uIHtcblx0cHJvdGVjdGVkIGJhc2UhOiBQYWdlQ29udHJvbGxlcjtcblxuXHRwcml2YXRlIF9vQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdHByaXZhdGUgX29NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRwcml2YXRlIF9vTmF2aWdhdGlvblNlcnZpY2UhOiBOYXZpZ2F0aW9uU2VydmljZTtcblxuXHRwcml2YXRlIF9vVmlldyE6IEZFVmlldztcblxuXHRuYXZpZ2F0aW9uQWxyZWFkeVN0YXJ0ZWQ6IGJvb2xlYW4gfCB1bmRlZmluZWQ7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0fVxuXG5cdEBtZXRob2RPdmVycmlkZSgpXG5cdG9uSW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLl9vQXBwQ29tcG9uZW50ID0gdGhpcy5iYXNlLmdldEFwcENvbXBvbmVudCgpO1xuXHRcdHRoaXMuX29NZXRhTW9kZWwgPSB0aGlzLl9vQXBwQ29tcG9uZW50LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0dGhpcy5fb05hdmlnYXRpb25TZXJ2aWNlID0gdGhpcy5fb0FwcENvbXBvbmVudC5nZXROYXZpZ2F0aW9uU2VydmljZSgpO1xuXHRcdHRoaXMuX29WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBFbmFibGVzIGludGVudC1iYXNlZCBuYXZpZ2F0aW9uIChTZW1hbnRpY09iamVjdC1BY3Rpb24pIHdpdGggdGhlIHByb3ZpZGVkIGNvbnRleHQuXG5cdCAqIElmIHNlbWFudGljIG9iamVjdCBtYXBwaW5nIGlzIHByb3ZpZGVkLCB0aGlzIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgdGhlIGFkYXB0YXRpb24gYnkgYSBjb25zdW1lci5cblx0ICogVGhpcyB0YWtlcyBjYXJlIG9mIHJlbW92aW5nIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBleHBsYWNlIG9yIGlucGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICogQHBhcmFtIHNlbWFudGljT2JqZWN0IFNlbWFudGljIG9iamVjdCBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIGFjdGlvbiAgQWN0aW9uIGZvciB0aGUgdGFyZ2V0IGFwcFxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gW25hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0c10gVXNlcyBvbmUgb2YgdGhlIGZvbGxvd2luZyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudDpcblx0ICogICAgYSBzaW5nbGUgaW5zdGFuY2Ugb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBtdWx0aXBsZSBpbnN0YW5jZXMgb2Yge0BsaW5rIHNhcC51aS5tb2RlbC5vZGF0YS52NC5Db250ZXh0fVxuXHQgKiAgICBhbiBvYmplY3Qgb3IgYW4gYXJyYXkgb2Ygb2JqZWN0c1xuXHQgKlx0XHQgIElmIGFuIGFycmF5IG9mIG9iamVjdHMgaXMgcGFzc2VkLCB0aGUgY29udGV4dCBpcyB1c2VkIHRvIGRldGVybWluZSB0aGUgbWV0YVBhdGggYW5kIHRvIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGFcblx0ICpcdFx0ICBJZiBhbiBhcnJheSBvZiBvYmplY3RzIGlzIHBhc3NlZCwgdGhlIGZvbGxvd2luZyBmb3JtYXQgaXggZXhwZWN0ZWQ6XG5cdCAqXHRcdCAge1xuXHQgKlx0XHRcdGRhdGE6IHtcblx0ICpcdCBcdFx0XHRQcm9kdWN0SUQ6IDc2MzQsXG5cdCAqXHRcdFx0XHROYW1lOiBcIkxhcHRvcFwiXG5cdCAqXHRcdFx0IH0sXG5cdCAqXHRcdFx0IG1ldGFQYXRoOiBcIi9TYWxlc09yZGVyTWFuYWdlXCJcblx0ICogICAgICAgIH1cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmddIFN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgU2VtYW50aWNPYmplY3RNYXBwaW5nIG9yIFNlbWFudGljT2JqZWN0TWFwcGluZyB0aGF0IGFwcGxpZXMgdG8gdGhpcyBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbbmF2aWdhdGlvblBhcmFtZXRlcnMuZGVmYXVsdFJlZnJlc2hTdHJhdGVneV0gRGVmYXVsdCByZWZyZXNoIHN0cmF0ZWd5IHRvIGJlIHVzZWQgaW4gY2FzZSBubyByZWZyZXNoIHN0cmF0ZWd5IGlzIHNwZWNpZmllZCBmb3IgdGhlIGludGVudCBpbiB0aGUgdmlldy5cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llc11cblx0ICogQHBhcmFtIFtuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnNdIEFkZGl0aW9uYWwgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGNvbmZpZ3VyZWQgaW4gdGhlIGNyb3NzQXBwTmF2aWdhdGlvbiBvdXRib3VuZCBwYXJhbWV0ZXJzLlxuXHQgKiBAcGFyYW0gc291cmNlIFRoZSBjb250cm9sIG9iamVjdCBvZiB0aGUgbmF2aWdhdGlvbiBzb3VyY2UuXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGUoc2VtYW50aWNPYmplY3Q6IHN0cmluZywgYWN0aW9uOiBzdHJpbmcsIG5hdmlnYXRpb25QYXJhbWV0ZXJzPzogTmF2aWdhdGlvblBhcmFtZXRlcnMsIHNvdXJjZT86IENvbnRyb2wpOiB2b2lkIHtcblx0XHR0cnkge1xuXHRcdFx0aWYgKHRoaXMubmF2aWdhdGlvbkFscmVhZHlTdGFydGVkICE9PSB0cnVlKSB7XG5cdFx0XHRcdHRoaXMubmF2aWdhdGlvbkFscmVhZHlTdGFydGVkID0gdHJ1ZTtcblx0XHRcdFx0Y29uc3QgX2RvTmF2aWdhdGUgPSAoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgdk5hdmlnYXRpb25Db250ZXh0czogb2JqZWN0IHwgT0RhdGFWNENvbnRleHRbXSB8IHVuZGVmaW5lZCA9XG5cdFx0XHRcdFx0XHRuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5uYXZpZ2F0aW9uQ29udGV4dHM7XG5cdFx0XHRcdFx0Y29uc3QgYU5hdmlnYXRpb25Db250ZXh0czogdW5kZWZpbmVkIHwgKE9EYXRhVjRDb250ZXh0IHwgb2JqZWN0KVtdID1cblx0XHRcdFx0XHRcdHZOYXZpZ2F0aW9uQ29udGV4dHMgJiYgIUFycmF5LmlzQXJyYXkodk5hdmlnYXRpb25Db250ZXh0cykgPyBbdk5hdmlnYXRpb25Db250ZXh0c10gOiB2TmF2aWdhdGlvbkNvbnRleHRzO1xuXHRcdFx0XHRcdGNvbnN0IHZTZW1hbnRpY09iamVjdE1hcHBpbmcgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5zZW1hbnRpY09iamVjdE1hcHBpbmcsXG5cdFx0XHRcdFx0XHR2T3V0Ym91bmRQYXJhbXMgPSBuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5hZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnMsXG5cdFx0XHRcdFx0XHRvVGFyZ2V0SW5mbzogeyBzZW1hbnRpY09iamVjdDogc3RyaW5nOyBhY3Rpb246IHN0cmluZzsgcHJvcGVydGllc1dpdGhvdXRDb25mbGljdD86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfSA9IHtcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3Q6IHNlbWFudGljT2JqZWN0LFxuXHRcdFx0XHRcdFx0XHRhY3Rpb246IGFjdGlvblxuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdG9WaWV3ID0gdGhpcy5iYXNlLmdldFZpZXcoKSxcblx0XHRcdFx0XHRcdG9Db250cm9sbGVyID0gb1ZpZXcuZ2V0Q29udHJvbGxlcigpO1xuXG5cdFx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0ICYmIGFjdGlvbikge1xuXHRcdFx0XHRcdFx0bGV0IGFTZW1hbnRpY0F0dHJpYnV0ZXM6IHVua25vd25bXSA9IFtdLFxuXHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudCA9IG5ldyBTZWxlY3Rpb25WYXJpYW50KCk7XG5cdFx0XHRcdFx0XHQvLyAxLiBnZXQgU2VtYW50aWNBdHRyaWJ1dGVzIGZvciBuYXZpZ2F0aW9uXG5cdFx0XHRcdFx0XHRpZiAoYU5hdmlnYXRpb25Db250ZXh0cyAmJiBhTmF2aWdhdGlvbkNvbnRleHRzLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0XHRhTmF2aWdhdGlvbkNvbnRleHRzLmZvckVhY2goKG9OYXZpZ2F0aW9uQ29udGV4dCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5hIGlmIG5hdmlnYXRpb24gY29udGV4dCBpcyBpbnN0YW5jZSBvZiBzYXAudWkubW9kZS5vZGF0YS52NC5Db250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0Ly8gZWxzZSBjaGVjayBpZiBuYXZpZ2F0aW9uIGNvbnRleHQgaXMgb2YgdHlwZSBvYmplY3Rcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXMgT0RhdGFWNENvbnRleHQ7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgPSBvTmF2aWdhdGlvbkNvbnRleHQgYXNcblx0XHRcdFx0XHRcdFx0XHRcdHwgeyBkYXRhOiB1bmtub3duW10gfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjsgbWV0YVBhdGg6IHN0cmluZyB9XG5cdFx0XHRcdFx0XHRcdFx0XHR8IHVuZGVmaW5lZDtcblxuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0EgJiZcblx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIilcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0bGV0IG9TZW1hbnRpY0F0dHJpYnV0ZXMgPSBvTmF2aWdhdGlvbkNvbnRleHRBc0NvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBzTWV0YVBhdGggPSB0aGlzLl9vTWV0YU1vZGVsLmdldE1ldGFQYXRoKG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dC5nZXRQYXRoKCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogYWxzbyByZW1vdmUgc2Vuc2l0aXZlIGRhdGEgZnJvbSAgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBmaW5hbFNlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhcblx0XHRcdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNDb250ZXh0LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0b1NlbWFudGljQXR0cmlidXRlcyA9IHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShmaW5hbFNlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9OYXZDb250ZXh0ID0gdGhpcy5wcmVwYXJlQ29udGV4dEZvckV4dGVybmFsTmF2aWdhdGlvbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0ZmluYWxTZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzQ29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdG9UYXJnZXRJbmZvW1wicHJvcGVydGllc1dpdGhvdXRDb25mbGljdFwiXSA9IG9OYXZDb250ZXh0LnByb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q7XG5cdFx0XHRcdFx0XHRcdFx0XHRhU2VtYW50aWNBdHRyaWJ1dGVzLnB1c2gob05hdkNvbnRleHQuc2VtYW50aWNBdHRyaWJ1dGVzKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0XHRcdFx0XHRcdFx0b05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBvTmF2aWdhdGlvbkNvbnRleHQgPT09IFwib2JqZWN0XCJcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdC8vIDEuMS5iIHJlbW92ZSBzZW5zaXRpdmUgZGF0YSBmcm9tIG9iamVjdFxuXHRcdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcy5wdXNoKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QuZGF0YSwgb05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QubWV0YVBhdGgpXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAob05hdmlnYXRpb25Db250ZXh0QXNPYmplY3QgJiYgQXJyYXkuaXNBcnJheShvTmF2aWdhdGlvbkNvbnRleHRBc09iamVjdC5kYXRhKSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gb05hdmlnYXRpb25Db250ZXh0LmRhdGEgY2FuIGJlIGFycmF5IGFscmVhZHkgZXggOiBbe0N1c3RvbWVyOiBcIjEwMDAxXCJ9LCB7Q3VzdG9tZXI6IFwiMTAwOTFcIn1dXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBoZW5jZSBhc3NpZ25pbmcgaXQgdG8gdGhlIGFTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHRcdFx0XHRcdFx0XHRcdGFTZW1hbnRpY0F0dHJpYnV0ZXMgPSB0aGlzLnJlbW92ZVNlbnNpdGl2ZURhdGEoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0LmRhdGEsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdG9OYXZpZ2F0aW9uQ29udGV4dEFzT2JqZWN0Lm1ldGFQYXRoXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHQvLyAyLjEgTWVyZ2UgYmFzZSBzZWxlY3Rpb24gdmFyaWFudCBhbmQgc2FuaXRpemVkIHNlbWFudGljIGF0dHJpYnV0ZXMgaW50byBvbmUgU2VsZWN0aW9uVmFyaWFudFxuXHRcdFx0XHRcdFx0aWYgKGFTZW1hbnRpY0F0dHJpYnV0ZXMgJiYgYVNlbWFudGljQXR0cmlidXRlcy5sZW5ndGgpIHtcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQgPSB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UubWl4QXR0cmlidXRlc0FuZFNlbGVjdGlvblZhcmlhbnQoXG5cdFx0XHRcdFx0XHRcdFx0YVNlbWFudGljQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdFx0XHRvU2VsZWN0aW9uVmFyaWFudC50b0pTT05TdHJpbmcoKVxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyAzLiBBZGQgZmlsdGVyQ29udGV4dFVybCB0byBTViBzbyB0aGUgTmF2aWdhdGlvbkhhbmRsZXIgY2FuIHJlbW92ZSBhbnkgc2Vuc2l0aXZlIGRhdGEgYmFzZWQgb24gdmlldyBlbnRpdHlTZXRcblx0XHRcdFx0XHRcdGNvbnN0IG9Nb2RlbCA9IHRoaXMuX29WaWV3LmdldE1vZGVsKCksXG5cdFx0XHRcdFx0XHRcdHNFbnRpdHlTZXQgPSB0aGlzLmdldEVudGl0eVNldCgpLFxuXHRcdFx0XHRcdFx0XHRzQ29udGV4dFVybCA9IHNFbnRpdHlTZXQgPyB0aGlzLl9vTmF2aWdhdGlvblNlcnZpY2UuY29uc3RydWN0Q29udGV4dFVybChzRW50aXR5U2V0LCBvTW9kZWwpIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0aWYgKHNDb250ZXh0VXJsKSB7XG5cdFx0XHRcdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnNldEZpbHRlckNvbnRleHRVcmwoc0NvbnRleHRVcmwpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBBcHBseSBPdXRib3VuZCBQYXJhbWV0ZXJzIHRvIHRoZSBTVlxuXHRcdFx0XHRcdFx0aWYgKHZPdXRib3VuZFBhcmFtcykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXMpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyA0LiBnaXZlIGFuIG9wcG9ydHVuaXR5IGZvciB0aGUgYXBwbGljYXRpb24gdG8gaW5mbHVlbmNlIHRoZSBTZWxlY3Rpb25WYXJpYW50XG5cdFx0XHRcdFx0XHRvQ29udHJvbGxlci5pbnRlbnRCYXNlZE5hdmlnYXRpb24uYWRhcHROYXZpZ2F0aW9uQ29udGV4dChvU2VsZWN0aW9uVmFyaWFudCwgb1RhcmdldEluZm8pO1xuXG5cdFx0XHRcdFx0XHQvLyA1LiBBcHBseSBzZW1hbnRpYyBvYmplY3QgbWFwcGluZ3MgdG8gdGhlIFNWXG5cdFx0XHRcdFx0XHRpZiAodlNlbWFudGljT2JqZWN0TWFwcGluZykge1xuXHRcdFx0XHRcdFx0XHR0aGlzLl9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQsIHZTZW1hbnRpY09iamVjdE1hcHBpbmcpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyA2LiByZW1vdmUgdGVjaG5pY2FsIHBhcmFtZXRlcnMgZnJvbSBTZWxlY3Rpb24gVmFyaWFudFxuXHRcdFx0XHRcdFx0dGhpcy5fcmVtb3ZlVGVjaG5pY2FsUGFyYW1ldGVycyhvU2VsZWN0aW9uVmFyaWFudCk7XG5cblx0XHRcdFx0XHRcdC8vIDcuIGNoZWNrIGlmIHByb2dyYW1taW5nIG1vZGVsIGlzIHN0aWNreSBhbmQgcGFnZSBpcyBlZGl0YWJsZVxuXHRcdFx0XHRcdFx0bGV0IHNOYXZNb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQgPSBvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLmdldE5hdmlnYXRpb25Nb2RlKCk7XG5cblx0XHRcdFx0XHRcdC8vIDguIFVwZGF0aW5nIHJlZnJlc2ggc3RyYXRlZ3kgaW4gaW50ZXJuYWwgbW9kZWxcblx0XHRcdFx0XHRcdGNvbnN0IG1SZWZyZXNoU3RyYXRlZ2llcyA9IChuYXZpZ2F0aW9uUGFyYW1ldGVycyAmJiBuYXZpZ2F0aW9uUGFyYW1ldGVycy5yZWZyZXNoU3RyYXRlZ2llcykgfHwge30sXG5cdFx0XHRcdFx0XHRcdG9JbnRlcm5hbE1vZGVsID0gb1ZpZXcuZ2V0TW9kZWwoXCJpbnRlcm5hbFwiKTtcblx0XHRcdFx0XHRcdGlmIChvSW50ZXJuYWxNb2RlbCkge1xuXHRcdFx0XHRcdFx0XHRpZiAoKG9WaWV3ICYmIG9WaWV3LmdldFZpZXdEYXRhKCkpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IG1WaWV3UmVmcmVzaFN0cmF0ZWdpZXMgPSBvVmlldy5nZXRWaWV3RGF0YSgpLnJlZnJlc2hTdHJhdGVneU9uQXBwUmVzdG9yZSB8fCB7fTtcblx0XHRcdFx0XHRcdFx0XHRtZXJnZU9iamVjdHMobVJlZnJlc2hTdHJhdGVnaWVzLCBtVmlld1JlZnJlc2hTdHJhdGVnaWVzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRjb25zdCBtUmVmcmVzaFN0cmF0ZWd5ID0gS2VlcEFsaXZlSGVscGVyLmdldFJlZnJlc2hTdHJhdGVneUZvckludGVudChcblx0XHRcdFx0XHRcdFx0XHRtUmVmcmVzaFN0cmF0ZWdpZXMsXG5cdFx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdGlmIChtUmVmcmVzaFN0cmF0ZWd5KSB7XG5cdFx0XHRcdFx0XHRcdFx0b0ludGVybmFsTW9kZWwuc2V0UHJvcGVydHkoXCIvcmVmcmVzaFN0cmF0ZWd5T25BcHBSZXN0b3JlXCIsIG1SZWZyZXNoU3RyYXRlZ3kpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIDkuIENoZWNrIGlmIG5hdk1vZGUgcGFyYW1ldGVyIGlzIHNldCBhbmQgdXNlIGl0XG5cdFx0XHRcdFx0XHRzTmF2TW9kZSA9IG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID8gbmF2aWdhdGlvblBhcmFtZXRlcnM/Lm5hdk1vZGUgOiBzTmF2TW9kZTtcblxuXHRcdFx0XHRcdFx0Ly8gMTAuIE5hdmlnYXRlIHZpYSBOYXZpZ2F0aW9uSGFuZGxlclxuXHRcdFx0XHRcdFx0Y29uc3Qgb25FcnJvciA9IGZ1bmN0aW9uICgpOiB2b2lkIHtcblx0XHRcdFx0XHRcdFx0c2FwLnVpLnJlcXVpcmUoW1wic2FwL20vTWVzc2FnZUJveFwiXSwgZnVuY3Rpb24gKE1lc3NhZ2VCb3hDbGFzczogdHlwZW9mIE1lc3NhZ2VCb3gpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBvUmVzb3VyY2VCdW5kbGUgPSBMaWJyYXJ5LmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvcmVcIikhO1xuXHRcdFx0XHRcdFx0XHRcdE1lc3NhZ2VCb3hDbGFzcy5lcnJvcihvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX0hFTFBFUl9OQVZJR0FUSU9OX0VSUk9SX01FU1NBR0VcIiksIHtcblx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlOiBvUmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfQ09NTU9OX1NBUEZFX0VSUk9SXCIpXG5cdFx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdHRoaXMuX29OYXZpZ2F0aW9uU2VydmljZS5uYXZpZ2F0ZShcblx0XHRcdFx0XHRcdFx0c2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQudG9KU09OU3RyaW5nKCksXG5cdFx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdFx0b25FcnJvcixcblx0XHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0XHRzTmF2TW9kZVxuXHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiU2VtYW50aWMgT2JqZWN0L2FjdGlvbiBpcyBub3QgcHJvdmlkZWRcIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0XHRpZiAoc291cmNlPy5kYXRhKFwiZGVib3VuY2VcIikpIHJldHVybjsgLy9kZWJvdW5jaW5nIHRoZSBJQk4gbmF2aWdhdGlvblxuXHRcdFx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCB0cnVlKTtcblx0XHRcdFx0Y29uc3Qgb0JpbmRpbmdDb250ZXh0ID0gdGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpO1xuXHRcdFx0XHRjb25zdCBvTWV0YU1vZGVsID0gb0JpbmRpbmdDb250ZXh0ICYmIG9CaW5kaW5nQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpLmNvbnZlcnRlclR5cGUgPT09IFwiT2JqZWN0UGFnZVwiICYmXG5cdFx0XHRcdFx0b01ldGFNb2RlbCAmJlxuXHRcdFx0XHRcdCFNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob01ldGFNb2RlbCkgJiZcblx0XHRcdFx0XHQhKG5hdmlnYXRpb25QYXJhbWV0ZXJzPy5uYXZNb2RlID09PSBcImV4cGxhY2VcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZHJhZnQucHJvY2Vzc0RhdGFMb3NzT3JEcmFmdERpc2NhcmRDb25maXJtYXRpb24oXG5cdFx0XHRcdFx0XHRfZG9OYXZpZ2F0ZS5iaW5kKHRoaXMpLFxuXHRcdFx0XHRcdFx0RnVuY3Rpb24ucHJvdG90eXBlLFxuXHRcdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRCaW5kaW5nQ29udGV4dCgpLFxuXHRcdFx0XHRcdFx0dGhpcy5iYXNlLmdldFZpZXcoKS5nZXRDb250cm9sbGVyKCksXG5cdFx0XHRcdFx0XHRmYWxzZSxcblx0XHRcdFx0XHRcdGRyYWZ0Lk5hdmlnYXRpb25UeXBlLkZvcndhcmROYXZpZ2F0aW9uXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRfZG9OYXZpZ2F0ZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIsIGZhbHNlKTtcblx0XHRcdH1cblx0XHR9IGZpbmFsbHkge1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uQWxyZWFkeVN0YXJ0ZWQgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJlcGFyZSBhdHRyaWJ1dGVzIHRvIGJlIHBhc3NlZCB0byBleHRlcm5hbCBuYXZpZ2F0aW9uLlxuXHQgKiBAcGFyYW0gb1NlbWFudGljQXR0cmlidXRlcyBDb250ZXh0IGRhdGEgYWZ0ZXIgcmVtb3ZpbmcgYWxsIHNlbnNpdGl2ZSBpbmZvcm1hdGlvbi5cblx0ICogQHBhcmFtIG9Db250ZXh0IEFjdHVhbCBjb250ZXh0IGZyb20gd2hpY2ggdGhlIHNlbWFudGljQXR0cmlidXRlcyB3ZXJlIGRlcml2ZWQuXG5cdCAqIEByZXR1cm5zIE9iamVjdCBvZiBwcmVwYXJlZCBhdHRyaWJ1dGVzIGZvciBleHRlcm5hbCBuYXZpZ2F0aW9uIGFuZCBubyBjb25mbGljdCBwcm9wZXJ0aWVzLlxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdHByZXBhcmVDb250ZXh0Rm9yRXh0ZXJuYWxOYXZpZ2F0aW9uKFxuXHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9Db250ZXh0OiBDb250ZXh0XG5cdCk6IHsgc2VtYW50aWNBdHRyaWJ1dGVzOiB1bmtub3duOyBwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IH0ge1xuXHRcdC8vIDEuIEZpbmQgYWxsIGRpc3RpbmN0IGtleXMgaW4gdGhlIG9iamVjdCBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0XHQvLyBTdG9yZSBtZXRhIHBhdGggZm9yIGVhY2ggb2NjdXJlbmNlIG9mIHRoZSBrZXlcblx0XHRjb25zdCBvRGlzdGluY3RLZXlzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmdbXT4gPSB7fSxcblx0XHRcdHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKSxcblx0XHRcdG9NZXRhTW9kZWwgPSBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpIGFzIE9EYXRhTWV0YU1vZGVsLFxuXHRcdFx0c01ldGFQYXRoID0gb01ldGFNb2RlbC5nZXRNZXRhUGF0aChzQ29udGV4dFBhdGgpLFxuXHRcdFx0YU1ldGFQYXRoUGFydHMgPSBzTWV0YVBhdGguc3BsaXQoXCIvXCIpLmZpbHRlcihCb29sZWFuKTtcblxuXHRcdGZ1bmN0aW9uIF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3QoTG9va1VwT2JqZWN0OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgc0xvb2tVcE9iamVjdE1ldGFQYXRoOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRcdGZvciAoY29uc3Qgc0tleSBpbiBMb29rVXBPYmplY3QpIHtcblx0XHRcdFx0Ly8gbnVsbCBjYXNlPz9cblx0XHRcdFx0aWYgKExvb2tVcE9iamVjdFtzS2V5XSA9PT0gbnVsbCB8fCB0eXBlb2YgTG9va1VwT2JqZWN0W3NLZXldICE9PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0aWYgKCFvRGlzdGluY3RLZXlzW3NLZXldKSB7XG5cdFx0XHRcdFx0XHQvLyBpZiBrZXkgaXMgZm91bmQgZm9yIHRoZSBmaXJzdCB0aW1lIHRoZW4gY3JlYXRlIGFycmF5XG5cdFx0XHRcdFx0XHRvRGlzdGluY3RLZXlzW3NLZXldID0gW107XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdC8vIHB1c2ggcGF0aCB0byBhcnJheVxuXHRcdFx0XHRcdG9EaXN0aW5jdEtleXNbc0tleV0ucHVzaChzTG9va1VwT2JqZWN0TWV0YVBhdGgpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGlmIGEgbmVzdGVkIG9iamVjdCBpcyBmb3VuZFxuXHRcdFx0XHRcdGNvbnN0IG9OZXdMb29rVXBPYmplY3QgPSBMb29rVXBPYmplY3Rbc0tleV07XG5cdFx0XHRcdFx0X2ZpbmREaXN0aW5jdEtleXNJbk9iamVjdChvTmV3TG9va1VwT2JqZWN0IGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBgJHtzTG9va1VwT2JqZWN0TWV0YVBhdGh9LyR7c0tleX1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdF9maW5kRGlzdGluY3RLZXlzSW5PYmplY3Qob1NlbWFudGljQXR0cmlidXRlcywgc01ldGFQYXRoKTtcblxuXHRcdC8vIDIuIERldGVybWluZSBkaXN0aW5jdCBrZXkgdmFsdWUgYW5kIGFkZCBjb25mbGljdGVkIHBhdGhzIHRvIHNlbWFudGljIGF0dHJpYnV0ZXNcblx0XHRjb25zdCBzTWFpbkVudGl0eVNldE5hbWUgPSBhTWV0YVBhdGhQYXJ0c1swXSxcblx0XHRcdHNNYWluRW50aXR5VHlwZU5hbWUgPSBvTWV0YU1vZGVsLmdldE9iamVjdChgLyR7c01haW5FbnRpdHlTZXROYW1lfS9Ac2FwdWkubmFtZWApLFxuXHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Q6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblx0XHRsZXQgc01haW5FbnRpdHlWYWx1ZVBhdGgsIHNDdXJyZW50VmFsdWVQYXRoLCBzTGFzdFZhbHVlUGF0aDtcblx0XHRmb3IgKGNvbnN0IHNEaXN0aW5jdEtleSBpbiBvRGlzdGluY3RLZXlzKSB7XG5cdFx0XHRjb25zdCBhQ29uZmxpY3RpbmdQYXRocyA9IG9EaXN0aW5jdEtleXNbc0Rpc3RpbmN0S2V5XTtcblx0XHRcdGxldCBzV2lubmVyVmFsdWVQYXRoO1xuXHRcdFx0Ly8gRmluZCB3aW5uZXIgdmFsdWUgZm9yIGVhY2ggZGlzdGluY3Qga2V5IGluIGNhc2Ugb2YgY29uZmxpY3QgYnkgdGhlIGZvbGxvd2luZyBydWxlOlxuXG5cdFx0XHQvLyAtPiBBLiBpZiBhbnkgbWV0YSBwYXRoIGZvciBhIGRpc3RpbmN0IGtleSBpcyB0aGUgc2FtZSBhcyBtYWluIGVudGl0eSB0YWtlIHRoYXQgYXMgdGhlIHZhbHVlXG5cdFx0XHQvLyAtPiBCLiBpZiBBIGlzIG5vdCBtZXQga2VlcCB0aGUgdmFsdWUgZnJvbSB0aGUgY3VycmVudCBjb250ZXh0IChzTWV0YVBhdGggPT09IHBhdGggb2YgZGlzdGluY2Uga2V5KVxuXHRcdFx0Ly8gLT4gQy4gaWYgQSwgQiBvciBDIGFyZSBub3QgbWV0IHRha2UgdGhlIGxhc3QgcGF0aCBmb3IgdmFsdWVcblx0XHRcdGlmIChhQ29uZmxpY3RpbmdQYXRocy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdC8vIGNvbmZsaWN0XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IGFDb25mbGljdGluZ1BhdGhzLmxlbmd0aCAtIDE7IGkrKykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbaV07XG5cdFx0XHRcdFx0bGV0IHNQYXRoSW5Db250ZXh0ID0gc1BhdGgucmVwbGFjZShzUGF0aCA9PT0gc01ldGFQYXRoID8gc01ldGFQYXRoIDogYCR7c01ldGFQYXRofS9gLCBcIlwiKTtcblx0XHRcdFx0XHRzUGF0aEluQ29udGV4dCA9IChzUGF0aEluQ29udGV4dCA9PT0gXCJcIiA/IHNQYXRoSW5Db250ZXh0IDogYCR7c1BhdGhJbkNvbnRleHR9L2ApICsgc0Rpc3RpbmN0S2V5O1xuXHRcdFx0XHRcdGNvbnN0IHNFbnRpdHlUeXBlTmFtZSA9IG9NZXRhTW9kZWwuZ2V0T2JqZWN0KGAke3NQYXRofS9Ac2FwdWkubmFtZWApO1xuXHRcdFx0XHRcdC8vIHJ1bGUgQVxuXG5cdFx0XHRcdFx0Ly8gcnVsZSBBXG5cdFx0XHRcdFx0aWYgKHNFbnRpdHlUeXBlTmFtZSA9PT0gc01haW5FbnRpdHlUeXBlTmFtZSkge1xuXHRcdFx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIEJcblx0XHRcdFx0XHRpZiAoc1BhdGggPT09IHNNZXRhUGF0aCkge1xuXHRcdFx0XHRcdFx0c0N1cnJlbnRWYWx1ZVBhdGggPSBzUGF0aEluQ29udGV4dDtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBydWxlIENcblx0XHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHNQYXRoSW5Db250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gYWRkIGNvbmZsaWN0ZWQgcGF0aCB0byBzZW1hbnRpYyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0Ly8gY2hlY2sgaWYgdGhlIGN1cnJlbnQgcGF0aCBwb2ludHMgdG8gbWFpbiBlbnRpdHkgYW5kIHByZWZpeCBhdHRyaWJ1dGUgbmFtZXMgYWNjb3JkaW5nbHlcblx0XHRcdFx0XHRvU2VtYW50aWNBdHRyaWJ1dGVzW1xuXHRcdFx0XHRcdFx0YCR7c01ldGFQYXRofS8ke3NQYXRoSW5Db250ZXh0fWBcblx0XHRcdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdFx0XHQuZmlsdGVyKGZ1bmN0aW9uIChzVmFsdWU6IHN0cmluZykge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBzVmFsdWUgIT0gXCJcIjtcblx0XHRcdFx0XHRcdFx0fSlcblx0XHRcdFx0XHRcdFx0LmpvaW4oXCIuXCIpXG5cdFx0XHRcdFx0XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBBIHx8IEIgfHwgQ1xuXHRcdFx0XHRzV2lubmVyVmFsdWVQYXRoID0gc01haW5FbnRpdHlWYWx1ZVBhdGggfHwgc0N1cnJlbnRWYWx1ZVBhdGggfHwgc0xhc3RWYWx1ZVBhdGg7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNXaW5uZXJWYWx1ZVBhdGggYXMgc3RyaW5nKTtcblx0XHRcdFx0c01haW5FbnRpdHlWYWx1ZVBhdGggPSB1bmRlZmluZWQ7XG5cdFx0XHRcdHNDdXJyZW50VmFsdWVQYXRoID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRzTGFzdFZhbHVlUGF0aCA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIG5vIGNvbmZsaWN0LCBhZGQgZGlzdGluY3Qga2V5IHdpdGhvdXQgYWRkaW5nIHBhdGhzXG5cdFx0XHRcdGNvbnN0IHNQYXRoID0gYUNvbmZsaWN0aW5nUGF0aHNbMF07IC8vIGJlY2F1c2UgdGhlcmUgaXMgb25seSBvbmUgYW5kIGhlbmNlIG5vIGNvbmZsaWN0XG5cdFx0XHRcdGxldCBzUGF0aEluQ29udGV4dCA9IHNQYXRoLnJlcGxhY2Uoc1BhdGggPT09IHNNZXRhUGF0aCA/IHNNZXRhUGF0aCA6IGAke3NNZXRhUGF0aH0vYCwgXCJcIik7XG5cdFx0XHRcdHNQYXRoSW5Db250ZXh0ID0gKHNQYXRoSW5Db250ZXh0ID09PSBcIlwiID8gc1BhdGhJbkNvbnRleHQgOiBgJHtzUGF0aEluQ29udGV4dH0vYCkgKyBzRGlzdGluY3RLZXk7XG5cdFx0XHRcdG9TZW1hbnRpY0F0dHJpYnV0ZXNbc0Rpc3RpbmN0S2V5XSA9IG9Db250ZXh0LmdldFByb3BlcnR5KHNQYXRoSW5Db250ZXh0KTtcblx0XHRcdFx0b1Byb3BlcnRpZXNXaXRob3V0Q29uZmxpY3Rbc0Rpc3RpbmN0S2V5XSA9IGAke3NNZXRhUGF0aH0vJHtzUGF0aEluQ29udGV4dH1gXG5cdFx0XHRcdFx0LnNwbGl0KFwiL1wiKVxuXHRcdFx0XHRcdC5maWx0ZXIoZnVuY3Rpb24gKHNWYWx1ZTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gc1ZhbHVlICE9IFwiXCI7XG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0XHQuam9pbihcIi5cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIDMuIFJlbW92ZSBhbGwgTmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0Zm9yIChjb25zdCBzUHJvcGVydHkgaW4gb1NlbWFudGljQXR0cmlidXRlcykge1xuXHRcdFx0aWYgKG9TZW1hbnRpY0F0dHJpYnV0ZXNbc1Byb3BlcnR5XSAhPT0gbnVsbCAmJiB0eXBlb2Ygb1NlbWFudGljQXR0cmlidXRlc1tzUHJvcGVydHldID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdGRlbGV0ZSBvU2VtYW50aWNBdHRyaWJ1dGVzW3NQcm9wZXJ0eV07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7XG5cdFx0XHRzZW1hbnRpY0F0dHJpYnV0ZXM6IG9TZW1hbnRpY0F0dHJpYnV0ZXMsXG5cdFx0XHRwcm9wZXJ0aWVzV2l0aG91dENvbmZsaWN0OiBvUHJvcGVydGllc1dpdGhvdXRDb25mbGljdFxuXHRcdH07XG5cdH1cblxuXHQvKipcblx0ICogR2V0IE5hdmlnYXRpb24gbW9kZS5cblx0ICogQHJldHVybnMgVGhlIG5hdmlnYXRpb24gbW9kZVxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBleHRlbnNpYmxlKE92ZXJyaWRlRXhlY3V0aW9uLkluc3RlYWQpXG5cdGdldE5hdmlnYXRpb25Nb2RlKCk6IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBBbGxvd3MgZm9yIG5hdmlnYXRpb24gdG8gYSBnaXZlbiBpbnRlbnQgKFNlbWFudGljT2JqZWN0LUFjdGlvbikgd2l0aCB0aGUgcHJvdmlkZWQgY29udGV4dCwgdXNpbmcgYSBkaWFsb2cgdGhhdCBzaG93cyB0aGUgY29udGV4dHMgd2hpY2ggY2Fubm90IGJlIHBhc3NlZFxuXHQgKiBJZiBzZW1hbnRpYyBvYmplY3QgbWFwcGluZyBpcyBwcm92aWRlZCwgdGhpcyBzZXR0aW5nIGlzIGFsc28gYXBwbGllZCB0byB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgYWZ0ZXIgYWRhcHRhdGlvbiBieSBhIGNvbnN1bWVyLlxuXHQgKiBUaGlzIHNldHRpbmcgYWxzbyByZW1vdmVzIGFueSB0ZWNobmljYWwgcGFyYW1ldGVycyBhbmQgZGV0ZXJtaW5lcyBpZiBhbiBpbnBsYWNlIG9yIGV4cGxhY2UgbmF2aWdhdGlvbiBzaG91bGQgdGFrZSBwbGFjZS5cblx0ICogQHBhcmFtIHNTZW1hbnRpY09iamVjdCBTZW1hbnRpYyBvYmplY3QgZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBzQWN0aW9uICBBY3Rpb24gZm9yIHRoZSB0YXJnZXQgYXBwXG5cdCAqIEBwYXJhbSBbbU5hdmlnYXRpb25QYXJhbWV0ZXJzXSBPcHRpb25hbCBwYXJhbWV0ZXJzIHRvIGJlIHBhc3NlZCB0byB0aGUgZXh0ZXJuYWwgbmF2aWdhdGlvblxuXHQgKiBAcGFyYW0gc291cmNlXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgbmF2aWdhdGVXaXRoQ29uZmlybWF0aW9uRGlhbG9nKFxuXHRcdHNTZW1hbnRpY09iamVjdDogc3RyaW5nLFxuXHRcdHNBY3Rpb246IHN0cmluZyxcblx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRzb3VyY2U/OiBDb250cm9sXG5cdCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGxldCBzaG91bGRDb250aW51ZSA9IHRydWU7XG5cdFx0aWYgKHNvdXJjZT8uZGF0YShcImRlYm91bmNlXCIpKSByZXR1cm47IC8vZGVib3VuY2luZyB0aGUgSUJOIG5hdmlnYXRpb25cblx0XHRzb3VyY2U/LmRhdGEoXCJkZWJvdW5jZVwiLCB0cnVlKTtcblx0XHRpZiAobU5hdmlnYXRpb25QYXJhbWV0ZXJzPy5ub3RBcHBsaWNhYmxlQ29udGV4dHMgJiYgbU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0cz8ubGVuZ3RoID49IDEpIHtcblx0XHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuYmFzZS5nZXRWaWV3KCkuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGVudGl0eVNldFBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgobU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5vdEFwcGxpY2FibGVDb250ZXh0c1swXS5nZXRQYXRoKCkpO1xuXHRcdFx0Y29uc3QgY29udmVydGVkTWV0YWRhdGEgPSBjb252ZXJ0VHlwZXMobWV0YU1vZGVsKTtcblx0XHRcdGNvbnN0IGVudGl0eVNldCA9IGNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoPEVudGl0eVNldD4oZW50aXR5U2V0UGF0aCkudGFyZ2V0ITtcblx0XHRcdC8vIFNob3cgdGhlIGNvbnRleHRzIHRoYXQgYXJlIG5vdCBhcHBsaWNhYmxlIGFuZCB3aWxsIG5vdCB0aGVyZWZvcmUgYmUgcHJvY2Vzc2VkXG5cdFx0XHRjb25zdCBub3RBcHBsaWNhYmxlQ29udGV4dHNEaWFsb2cgPSBuZXcgTm90QXBwbGljYWJsZUNvbnRleHREaWFsb2coe1xuXHRcdFx0XHR0aXRsZTogXCJcIixcblx0XHRcdFx0ZW50aXR5VHlwZTogZW50aXR5U2V0LmVudGl0eVR5cGUsXG5cdFx0XHRcdHJlc291cmNlTW9kZWw6IGdldFJlc291cmNlTW9kZWwodGhpcy5nZXRWaWV3KCkpLFxuXHRcdFx0XHRub3RBcHBsaWNhYmxlQ29udGV4dHM6IG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5ub3RBcHBsaWNhYmxlQ29udGV4dHMsXG5cdFx0XHRcdGFwcGxpY2FibGVDb250ZXh0czogbU5hdmlnYXRpb25QYXJhbWV0ZXJzPy5hcHBsaWNhYmxlQ29udGV4dHMgPz8gW10sXG5cdFx0XHRcdGVudGl0eVNldDogZW50aXR5U2V0Lm5hbWUsXG5cdFx0XHRcdGFjdGlvbk5hbWU6IHNBY3Rpb25cblx0XHRcdH0pO1xuXHRcdFx0bU5hdmlnYXRpb25QYXJhbWV0ZXJzLm5hdmlnYXRpb25Db250ZXh0cyA9IG1OYXZpZ2F0aW9uUGFyYW1ldGVycy5hcHBsaWNhYmxlQ29udGV4dHM7XG5cdFx0XHRzaG91bGRDb250aW51ZSA9IGF3YWl0IG5vdEFwcGxpY2FibGVDb250ZXh0c0RpYWxvZy5vcGVuKHRoaXMuZ2V0VmlldygpKTtcblx0XHR9XG5cdFx0aWYgKHNob3VsZENvbnRpbnVlKSB7XG5cdFx0XHR0aGlzLm5hdmlnYXRlKHNTZW1hbnRpY09iamVjdCwgc0FjdGlvbiwgbU5hdmlnYXRpb25QYXJhbWV0ZXJzKTtcblx0XHR9XG5cdFx0c291cmNlPy5kYXRhKFwiZGVib3VuY2VcIiwgZmFsc2UpO1xuXHR9XG5cblx0X3JlbW92ZVRlY2huaWNhbFBhcmFtZXRlcnMob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQpOiB2b2lkIHtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEuY29udGV4dFwiKTtcblx0XHRvU2VsZWN0aW9uVmFyaWFudC5yZW1vdmVTZWxlY3RPcHRpb24oXCJAb2RhdGEubWV0YWRhdGFFdGFnXCIpO1xuXHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihcIlNBUF9fTWVzc2FnZXNcIik7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldGVkIEVudGl0eSBzZXQuXG5cdCAqIEByZXR1cm5zIEVudGl0eSBzZXQgbmFtZVxuXHQgKi9cblx0QHByaXZhdGVFeHRlbnNpb24oKVxuXHRnZXRFbnRpdHlTZXQoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5fb1ZpZXcuZ2V0Vmlld0RhdGEoKS5lbnRpdHlTZXQhO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlbW92ZXMgc2Vuc2l0aXZlIGRhdGEgZnJvbSB0aGUgc2VtYW50aWMgYXR0cmlidXRlIHdpdGggcmVzcGVjdCB0byB0aGUgZW50aXR5U2V0LlxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgQ29udGV4dCBkYXRhXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGggTWV0YSBwYXRoIHRvIHJlYWNoIHRoZSBlbnRpdHlTZXQgaW4gdGhlIE1ldGFNb2RlbFxuXHQgKiBAcGFyYW0gbWV0YU1vZGVsIE1ldGFNb2RlbFxuXHQgKiBAcmV0dXJucyBBcnJheSBvZiBzZW1hbnRpYyBBdHRyaWJ1dGVzXG5cdCAqL1xuXHQvLyBUTy1ETyBhZGQgdW5pdCB0ZXN0cyBmb3IgdGhpcyBmdW5jdGlvbiBpbiB0aGUgY29udHJvbGxlciBleHRlbnNpb24gcXVuaXQuXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRyZW1vdmVTZW5zaXRpdmVEYXRhPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVua25vd25bXT4ob0F0dHJpYnV0ZXM6IFQsIHNNZXRhUGF0aDogc3RyaW5nLCBtZXRhTW9kZWw/OiBPRGF0YU1ldGFNb2RlbCk6IFQge1xuXHRcdGlmIChvQXR0cmlidXRlcykge1xuXHRcdFx0Y29uc3QgeyB0cmFuc0FnZ3JlZ2F0aW9ucywgY3VzdG9tQWdncmVnYXRlcyB9ID0gdGhpcy5fZ2V0QWdncmVnYXRlcyhcblx0XHRcdFx0c01ldGFQYXRoLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0VmlldygpLFxuXHRcdFx0XHR0aGlzLmJhc2UuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0RGlhZ25vc3RpY3MoKVxuXHRcdFx0KTtcblx0XHRcdGNvbnN0IGFQcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMob0F0dHJpYnV0ZXMpO1xuXHRcdFx0aWYgKCFBcnJheS5pc0FycmF5KG9BdHRyaWJ1dGVzKSAmJiBhUHJvcGVydGllcy5sZW5ndGgpIHtcblx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW1wiQG9kYXRhLmNvbnRleHRcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIkBvZGF0YS5tZXRhZGF0YUV0YWdcIl07XG5cdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tcIlNBUF9fTWVzc2FnZXNcIl07XG5cdFx0XHRcdGZvciAoY29uc3QgZWxlbWVudCBvZiBhUHJvcGVydGllcykge1xuXHRcdFx0XHRcdGlmIChvQXR0cmlidXRlc1tlbGVtZW50XSAmJiB0eXBlb2Ygb0F0dHJpYnV0ZXNbZWxlbWVudF0gPT09IFwib2JqZWN0XCIpIHtcblx0XHRcdFx0XHRcdHRoaXMucmVtb3ZlU2Vuc2l0aXZlRGF0YShvQXR0cmlidXRlc1tlbGVtZW50XSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwgYCR7c01ldGFQYXRofS8ke2VsZW1lbnR9YCwgbWV0YU1vZGVsKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKGVsZW1lbnQuaW5jbHVkZXMoXCJAb2RhdGEudHlwZVwiKSkge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIG9BdHRyaWJ1dGVzW2VsZW1lbnRdO1xuXHRcdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuX2RlbGV0ZUFnZ3JlZ2F0ZXMoWy4uLnRyYW5zQWdncmVnYXRpb25zLCAuLi5jdXN0b21BZ2dyZWdhdGVzXSwgZWxlbWVudCwgb0F0dHJpYnV0ZXMpO1xuXHRcdFx0XHRcdGNvbnN0IGFQcm9wZXJ0eUFubm90YXRpb25zID0gdGhpcy5fZ2V0UHJvcGVydHlBbm5vdGF0aW9ucyhcblx0XHRcdFx0XHRcdGVsZW1lbnQsXG5cdFx0XHRcdFx0XHRzTWV0YVBhdGgsXG5cdFx0XHRcdFx0XHRvQXR0cmlidXRlcyxcblx0XHRcdFx0XHRcdG1ldGFNb2RlbCB8fCB0aGlzLl9vTWV0YU1vZGVsXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMpIHtcblx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0YVByb3BlcnR5QW5ub3RhdGlvbnMuUGVyc29uYWxEYXRhPy5Jc1BvdGVudGlhbGx5U2Vuc2l0aXZlIHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLlVJPy5FeGNsdWRlRnJvbU5hdmlnYXRpb25Db250ZXh0IHx8XG5cdFx0XHRcdFx0XHRcdGFQcm9wZXJ0eUFubm90YXRpb25zLkFuYWx5dGljcz8uTWVhc3VyZVxuXHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoYVByb3BlcnR5QW5ub3RhdGlvbnMuQ29tbW9uPy5GaWVsZENvbnRyb2wpIHtcblx0XHRcdFx0XHRcdFx0Y29uc3Qgb0ZpZWxkQ29udHJvbCA9IGFQcm9wZXJ0eUFubm90YXRpb25zLkNvbW1vbi5GaWVsZENvbnRyb2wgYXMgdW5rbm93biBhcyB7XG5cdFx0XHRcdFx0XHRcdFx0JEVudW1NZW1iZXI/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdFx0JFBhdGg/OiBzdHJpbmc7XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHQob0ZpZWxkQ29udHJvbFtcIiRFbnVtTWVtYmVyXCJdICYmIG9GaWVsZENvbnRyb2xbXCIkRW51bU1lbWJlclwiXS5zcGxpdChcIi9cIilbMV0gPT09IFwiSW5hcHBsaWNhYmxlXCIpIHx8XG5cdFx0XHRcdFx0XHRcdFx0KG9GaWVsZENvbnRyb2xbXCIkUGF0aFwiXSAmJiB0aGlzLl9pc0ZpZWxkQ29udHJvbFBhdGhJbmFwcGxpY2FibGUob0ZpZWxkQ29udHJvbFtcIiRQYXRoXCJdLCBvQXR0cmlidXRlcykpXG5cdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tlbGVtZW50XTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb0F0dHJpYnV0ZXM7XG5cdH1cblxuXHQvKipcblx0ICogUmVtb3ZlIHRoZSBhdHRyaWJ1dGUgZnJvbSBuYXZpZ2F0aW9uIGRhdGEgaWYgaXQgaXMgYSBtZWFzdXJlLlxuXHQgKiBAcGFyYW0gYWdncmVnYXRlcyBBcnJheSBvZiBBZ2dyZWdhdGVzXG5cdCAqIEBwYXJhbSBzUHJvcCBBdHRyaWJ1dGUgbmFtZVxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXMgU2VtYW50aWNBdHRyaWJ1dGVzXG5cdCAqL1xuXHRfZGVsZXRlQWdncmVnYXRlcyhhZ2dyZWdhdGVzOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCwgc1Byb3A6IHN0cmluZywgb0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogdm9pZCB7XG5cdFx0aWYgKGFnZ3JlZ2F0ZXMgJiYgYWdncmVnYXRlcy5pbmNsdWRlcyhzUHJvcCkpIHtcblx0XHRcdGRlbGV0ZSBvQXR0cmlidXRlc1tzUHJvcF07XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByb3BlcnR5IGFubm90YXRpb25zLlxuXHQgKiBAcGFyYW0gc1Byb3Bcblx0ICogQHBhcmFtIHNNZXRhUGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZXNcblx0ICogQHBhcmFtIG9NZXRhTW9kZWxcblx0ICogQHJldHVybnMgLSBUaGUgcHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICovXG5cdF9nZXRQcm9wZXJ0eUFubm90YXRpb25zKFxuXHRcdHNQcm9wOiBzdHJpbmcsXG5cdFx0c01ldGFQYXRoOiBzdHJpbmcsXG5cdFx0b0F0dHJpYnV0ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRcdG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsXG5cdCk6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAob0F0dHJpYnV0ZXNbc1Byb3BdICYmIHNNZXRhUGF0aCAmJiAhc01ldGFQYXRoLmluY2x1ZGVzKFwidW5kZWZpbmVkXCIpKSB7XG5cdFx0XHRjb25zdCBvQ29udGV4dCA9IG9NZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYCR7c01ldGFQYXRofS8ke3NQcm9wfWApIGFzIE9EYXRhVjRDb250ZXh0O1xuXHRcdFx0Y29uc3Qgb0Z1bGxDb250ZXh0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxQcm9wZXJ0eT4ob0NvbnRleHQpO1xuXHRcdFx0cmV0dXJuIG9GdWxsQ29udGV4dD8udGFyZ2V0T2JqZWN0Py5hbm5vdGF0aW9ucztcblx0XHR9XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgYWdncmVnYXRlcyBwYXJ0IG9mIHRoZSBFbnRpdHlTZXQgb3IgRW50aXR5VHlwZS5cblx0ICogQHBhcmFtIHNNZXRhUGF0aFxuXHQgKiBAcGFyYW0gb1ZpZXdcblx0ICogQHBhcmFtIG9EaWFnbm9zdGljc1xuXHQgKiBAcmV0dXJucyAtIFRoZSBhZ2dyZWdhdGVzXG5cdCAqL1xuXHRfZ2V0QWdncmVnYXRlcyhcblx0XHRzTWV0YVBhdGg6IHN0cmluZyxcblx0XHRvVmlldzogRkVWaWV3LFxuXHRcdG9EaWFnbm9zdGljczogRGlhZ25vc3RpY3Ncblx0KTogeyB0cmFuc0FnZ3JlZ2F0aW9uczogc3RyaW5nW107IGN1c3RvbUFnZ3JlZ2F0ZXM6IHN0cmluZ1tdIH0ge1xuXHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSB0aGlzLl9nZXRDb252ZXJ0ZXJDb250ZXh0KHNNZXRhUGF0aCwgb1ZpZXcsIG9EaWFnbm9zdGljcyk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGlzQW5hbHl0aWNzU3VwcG9ydGVkID0gYWdncmVnYXRpb25IZWxwZXIuaXNBbmFseXRpY3NTdXBwb3J0ZWQoKTtcblx0XHRsZXQgdHJhbnNBZ2dyZWdhdGlvbnM6IHN0cmluZ1tdLCBjdXN0b21BZ2dyZWdhdGVzO1xuXHRcdGlmIChpc0FuYWx5dGljc1N1cHBvcnRlZCkge1xuXHRcdFx0Y29uc3QgdHJhbnNBZ2dyZWdhdGlvbnNQcmVwcm9jZXNzaW5nID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0VHJhbnNBZ2dyZWdhdGlvbnMoKTtcblx0XHRcdGlmICh0cmFuc0FnZ3JlZ2F0aW9uc1ByZXByb2Nlc3Npbmc/Lmxlbmd0aCkge1xuXHRcdFx0XHR0cmFuc0FnZ3JlZ2F0aW9ucyA9IHRyYW5zQWdncmVnYXRpb25zUHJlcHJvY2Vzc2luZy5tYXAoKHRyYW5zQWdnKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuICh0cmFuc0FnZy5OYW1lIGFzIHN0cmluZykgfHwgKHRyYW5zQWdnIGFzIHVua25vd24gYXMgeyBWYWx1ZTogc3RyaW5nIH0pLlZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRcdFx0aWYgKGN1c3RvbUFnZ3JlZ2F0ZXM/Lmxlbmd0aCkge1xuXHRcdFx0XHRjdXN0b21BZ2dyZWdhdGVzID0gY3VzdG9tQWdncmVnYXRlcy5tYXAoKGN1c3RvbUFnZ3JlZ2F0ZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBjdXN0b21BZ2dyZWdhdGUucXVhbGlmaWVyO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dHJhbnNBZ2dyZWdhdGlvbnMgPz89IFtdO1xuXHRcdGN1c3RvbUFnZ3JlZ2F0ZXMgPSBjdXN0b21BZ2dyZWdhdGVzID8gKGN1c3RvbUFnZ3JlZ2F0ZXMgYXMgc3RyaW5nW10pIDogW107XG5cdFx0cmV0dXJuIHsgdHJhbnNBZ2dyZWdhdGlvbnMsIGN1c3RvbUFnZ3JlZ2F0ZXMgfTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGNvbnZlcnRlckNvbnRleHQuXG5cdCAqIEBwYXJhbSBzTWV0YVBhdGhcblx0ICogQHBhcmFtIG9WaWV3XG5cdCAqIEBwYXJhbSBvRGlhZ25vc3RpY3Ncblx0ICogQHJldHVybnMgLSBDb252ZXJ0ZXJDb250ZXh0XG5cdCAqL1xuXHRfZ2V0Q29udmVydGVyQ29udGV4dChzTWV0YVBhdGg6IHN0cmluZywgb1ZpZXc6IEZFVmlldywgb0RpYWdub3N0aWNzOiBEaWFnbm9zdGljcyk6IENvbnZlcnRlckNvbnRleHQ8UGFnZUNvbnRleHRQYXRoVGFyZ2V0PiB7XG5cdFx0Y29uc3Qgb1ZpZXdEYXRhID0gb1ZpZXcuZ2V0Vmlld0RhdGEoKTtcblx0XHRsZXQgc0VudGl0eVNldCA9IG9WaWV3RGF0YS5lbnRpdHlTZXQ7XG5cdFx0Y29uc3Qgc0NvbnRleHRQYXRoID0gb1ZpZXdEYXRhLmNvbnRleHRQYXRoO1xuXHRcdGlmIChzQ29udGV4dFBhdGggJiYgKCFzRW50aXR5U2V0IHx8IHNFbnRpdHlTZXQuaW5jbHVkZXMoXCIvXCIpKSkge1xuXHRcdFx0c0VudGl0eVNldCA9IG9WaWV3RGF0YT8uZnVsbENvbnRleHRQYXRoLnNwbGl0KFwiL1wiKVsxXTtcblx0XHR9XG5cdFx0cmV0dXJuIENvbW1vblV0aWxzLmdldENvbnZlcnRlckNvbnRleHRGb3JQYXRoKHNNZXRhUGF0aCwgb1ZpZXcuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSwgc0VudGl0eVNldCEsIG9EaWFnbm9zdGljcyk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgcGF0aC1iYXNlZCBGaWVsZENvbnRyb2wgZXZhbHVhdGVzIHRvIGluYXBwbGljYWJsZS5cblx0ICogQHBhcmFtIHNGaWVsZENvbnRyb2xQYXRoIEZpZWxkIGNvbnRyb2wgcGF0aFxuXHQgKiBAcGFyYW0gb0F0dHJpYnV0ZSBTZW1hbnRpY0F0dHJpYnV0ZXNcblx0ICogQHJldHVybnMgYHRydWVgIGlmIGluYXBwbGljYWJsZVxuXHQgKi9cblx0X2lzRmllbGRDb250cm9sUGF0aEluYXBwbGljYWJsZShzRmllbGRDb250cm9sUGF0aDogc3RyaW5nLCBvQXR0cmlidXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IGJvb2xlYW4ge1xuXHRcdGxldCBiSW5hcHBsaWNhYmxlID0gZmFsc2U7XG5cdFx0Y29uc3QgYVBhcnRzID0gc0ZpZWxkQ29udHJvbFBhdGguc3BsaXQoXCIvXCIpO1xuXHRcdC8vIHNlbnNpdGl2ZSBkYXRhIGlzIHJlbW92ZWQgb25seSBpZiB0aGUgcGF0aCBoYXMgYWxyZWFkeSBiZWVuIHJlc29sdmVkLlxuXHRcdGlmIChhUGFydHMubGVuZ3RoID4gMSkge1xuXHRcdFx0YkluYXBwbGljYWJsZSA9ICEhKFxuXHRcdFx0XHRvQXR0cmlidXRlW2FQYXJ0c1swXV0gJiZcblx0XHRcdFx0KG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSBhcyBvYmplY3QpLmhhc093blByb3BlcnR5KGFQYXJ0c1sxXSkgJiZcblx0XHRcdFx0KG9BdHRyaWJ1dGVbYVBhcnRzWzBdXSBhcyBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+KVthUGFydHNbMV1dID09PSAwXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRiSW5hcHBsaWNhYmxlID0gb0F0dHJpYnV0ZVtzRmllbGRDb250cm9sUGF0aF0gPT09IDA7XG5cdFx0fVxuXHRcdHJldHVybiBiSW5hcHBsaWNhYmxlO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXBsYWNlIExvY2FsIFByb3BlcnRpZXMgd2l0aCBTZW1hbnRpYyBPYmplY3QgbWFwcGluZ3MuXG5cdCAqIEBwYXJhbSBvU2VsZWN0aW9uVmFyaWFudCBTZWxlY3Rpb25WYXJpYW50IGNvbnNpc3Rpbmcgb2YgZmlsdGVyYmFyLCBUYWJsZSBhbmQgUGFnZSBDb250ZXh0XG5cdCAqIEBwYXJhbSB2TWFwcGluZ3MgQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2Ygc2VtYW50aWMgb2JqZWN0IG1hcHBpbmdcblx0ICogQHJldHVybnMgLSBNb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggTG9jYWxQcm9wZXJ0eSByZXBsYWNlZCB3aXRoIFNlbWFudGljT2JqZWN0UHJvcGVydGllcy5cblx0ICovXG5cdF9hcHBseVNlbWFudGljT2JqZWN0TWFwcGluZ3Mob1NlbGVjdGlvblZhcmlhbnQ6IFNlbGVjdGlvblZhcmlhbnQsIHZNYXBwaW5nczogb2JqZWN0IHwgc3RyaW5nKTogU2VsZWN0aW9uVmFyaWFudCB7XG5cdFx0Y29uc3Qgb01hcHBpbmdzID0gdHlwZW9mIHZNYXBwaW5ncyA9PT0gXCJzdHJpbmdcIiA/IEpTT04ucGFyc2Uodk1hcHBpbmdzKSA6IHZNYXBwaW5ncztcblx0XHRmb3IgKGNvbnN0IGl0ZW0gb2Ygb01hcHBpbmdzKSB7XG5cdFx0XHRjb25zdCBzTG9jYWxQcm9wZXJ0eSA9XG5cdFx0XHRcdChpdGVtW1wiTG9jYWxQcm9wZXJ0eVwiXSAmJiBpdGVtW1wiTG9jYWxQcm9wZXJ0eVwiXVtcIiRQcm9wZXJ0eVBhdGhcIl0pIHx8XG5cdFx0XHRcdChpdGVtW1wiQGNvbS5zYXAudm9jYWJ1bGFyaWVzLkNvbW1vbi52MS5Mb2NhbFByb3BlcnR5XCJdICYmIGl0ZW1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLkxvY2FsUHJvcGVydHlcIl1bXCIkUGF0aFwiXSk7XG5cdFx0XHRjb25zdCBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSA9XG5cdFx0XHRcdGl0ZW1bXCJTZW1hbnRpY09iamVjdFByb3BlcnR5XCJdIHx8IGl0ZW1bXCJAY29tLnNhcC52b2NhYnVsYXJpZXMuQ29tbW9uLnYxLlNlbWFudGljT2JqZWN0UHJvcGVydHlcIl07XG5cdFx0XHRjb25zdCBvU2VsZWN0T3B0aW9uID0gb1NlbGVjdGlvblZhcmlhbnQuZ2V0U2VsZWN0T3B0aW9uKHNMb2NhbFByb3BlcnR5KTtcblx0XHRcdGlmIChvU2VsZWN0T3B0aW9uICYmIHNMb2NhbFByb3BlcnR5ICE9PSBzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSkge1xuXHRcdFx0XHQvL3JlbW92ZSB0aGUgc2VsZWN0T3B0aW9uIHRvIGJlIG92ZXJ3cml0dGVuIHRoZW4gcmVuYW1lIHRoZSBvbmUgY29taW5nIGZyb20gdGhlIGxvY2FsIHByb3BlcnR5XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbW92ZVNlbGVjdE9wdGlvbihzU2VtYW50aWNPYmplY3RQcm9wZXJ0eSk7XG5cdFx0XHRcdG9TZWxlY3Rpb25WYXJpYW50LnJlbmFtZVNlbGVjdE9wdGlvbihzTG9jYWxQcm9wZXJ0eSwgc1NlbWFudGljT2JqZWN0UHJvcGVydHkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1NlbGVjdGlvblZhcmlhbnQ7XG5cdH1cblxuXHQvKipcblx0ICogTWV0aG9kIHRvIHN0b3JlIHRoZSBmb2N1c0luZm9ybWF0aW9uIHRvIHRoZSBoaXN0b3J5IG9iamVjdC5cblx0ICovXG5cdHByb3RlY3RlZCBzdG9yZUZvY3VzSW5mb0luSGlzdG9yeSgpOiB2b2lkIHtcblx0XHRsZXQgZm9jdXNJbmZvID0gbnVsbDtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2wgPSBFbGVtZW50LmdldEFjdGl2ZUVsZW1lbnQoKTtcblx0XHRjb25zdCBmb2N1c0NvbnRyb2xJZCA9IGZvY3VzQ29udHJvbD8uZ2V0SWQoKTtcblx0XHRjb25zdCBmb2N1c01EQ1RhYmxlID0gZm9jdXNDb250cm9sICYmIEZQTUhlbHBlci5nZXRNZGNUYWJsZShmb2N1c0NvbnRyb2wpO1xuXHRcdGlmIChmb2N1c0NvbnRyb2w/LmlzQShcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0Zm9jdXNJbmZvID0ge1xuXHRcdFx0XHR0eXBlOiBcIkNvbnRyb2xcIixcblx0XHRcdFx0Y29udHJvbElkOiBmb2N1c0NvbnRyb2xJZFxuXHRcdFx0fTtcblx0XHR9IGVsc2UgaWYgKGZvY3VzTURDVGFibGUpIHtcblx0XHRcdGZvY3VzSW5mbyA9IHtcblx0XHRcdFx0dHlwZTogXCJSb3dcIixcblx0XHRcdFx0dGFibGVJZDogZm9jdXNNRENUYWJsZS5nZXRJZCgpLFxuXHRcdFx0XHRjb250ZXh0UGF0aEZvY3VzOiBmb2N1c0NvbnRyb2wuZ2V0QmluZGluZ0NvbnRleHQoKT8uZ2V0UGF0aCgpXG5cdFx0XHR9O1xuXHRcdH1cblx0XHRoaXN0b3J5LnJlcGxhY2VTdGF0ZShPYmplY3QuYXNzaWduKHt9LCBoaXN0b3J5LnN0YXRlLCB7IGZvY3VzSW5mbzogZm9jdXNJbmZvIH0pLCBcIlwiKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYW4gT3V0Ym91bmQgcHJvdmlkZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gc091dGJvdW5kIElkZW50aWZpZXIgdG8gbG9jYXRpb24gdGhlIG91dGJvdW5kIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcGFyYW0gbU5hdmlnYXRpb25QYXJhbWV0ZXJzIE9wdGlvbmFsIG1hcCBjb250YWluaW5nIGtleS92YWx1ZSBwYWlycyB0byBiZSBwYXNzZWQgdG8gdGhlIGludGVudFxuXHQgKiBAc2luY2UgMS44Ni4wXG5cdCAqL1xuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0bmF2aWdhdGVPdXRib3VuZChzT3V0Ym91bmQ6IHN0cmluZywgbU5hdmlnYXRpb25QYXJhbWV0ZXJzPzogUmVjb3JkPHN0cmluZywgdW5rbm93biB8IHVua25vd25bXT4pOiB2b2lkIHtcblx0XHR0aGlzLnN0b3JlRm9jdXNJbmZvSW5IaXN0b3J5KCk7XG5cdFx0bGV0IGFOYXZQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz5bXSB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBvTWFuaWZlc3RFbnRyeSA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKSxcblx0XHRcdG9PdXRib3VuZCA9IG9NYW5pZmVzdEVudHJ5LmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzPy5bc091dGJvdW5kXTtcblx0XHRpZiAoIW9PdXRib3VuZCkge1xuXHRcdFx0TG9nLmVycm9yKFwiT3V0Ym91bmQgaXMgbm90IGRlZmluZWQgaW4gbWFuaWZlc3QhIVwiKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0Y29uc3Qgc1NlbWFudGljT2JqZWN0ID0gb091dGJvdW5kLnNlbWFudGljT2JqZWN0LFxuXHRcdFx0c0FjdGlvbiA9IG9PdXRib3VuZC5hY3Rpb24sXG5cdFx0XHRvdXRib3VuZFBhcmFtcyA9IG9PdXRib3VuZC5wYXJhbWV0ZXJzICYmIHRoaXMuZ2V0T3V0Ym91bmRQYXJhbXMob091dGJvdW5kLnBhcmFtZXRlcnMpO1xuXG5cdFx0aWYgKG1OYXZpZ2F0aW9uUGFyYW1ldGVycykge1xuXHRcdFx0YU5hdlBhcmFtcyA9IFtdO1xuXHRcdFx0T2JqZWN0LmtleXMobU5hdmlnYXRpb25QYXJhbWV0ZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXk6IHN0cmluZykge1xuXHRcdFx0XHRsZXQgb1BhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblx0XHRcdFx0Y29uc3QgbmF2UGFyYW1ldGVyVmFsdWUgPSBtTmF2aWdhdGlvblBhcmFtZXRlcnMhW2tleV07XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG5hdlBhcmFtZXRlclZhbHVlKSkge1xuXHRcdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBuYXZQYXJhbWV0ZXJWYWx1ZSkge1xuXHRcdFx0XHRcdFx0b1BhcmFtcyA9IHt9O1xuXHRcdFx0XHRcdFx0b1BhcmFtc1trZXldID0gaXRlbTtcblx0XHRcdFx0XHRcdGFOYXZQYXJhbXM/LnB1c2gob1BhcmFtcyk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdG9QYXJhbXMgPSB7fTtcblx0XHRcdFx0XHRvUGFyYW1zW2tleV0gPSBuYXZQYXJhbWV0ZXJWYWx1ZSBhcyBzdHJpbmc7XG5cdFx0XHRcdFx0YU5hdlBhcmFtcz8ucHVzaChvUGFyYW1zKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cdFx0fVxuXHRcdGlmIChhTmF2UGFyYW1zIHx8IG91dGJvdW5kUGFyYW1zKSB7XG5cdFx0XHRtTmF2aWdhdGlvblBhcmFtZXRlcnMgPSB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czoge1xuXHRcdFx0XHRcdGRhdGE6IGFOYXZQYXJhbXMgfHwgb3V0Ym91bmRQYXJhbXNcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0dGhpcy5iYXNlLl9pbnRlbnRCYXNlZE5hdmlnYXRpb24ubmF2aWdhdGUoc1NlbWFudGljT2JqZWN0LCBzQWN0aW9uLCBtTmF2aWdhdGlvblBhcmFtZXRlcnMpO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byBhcHBseSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gb1NlbGVjdGlvblZhcmlhbnQgU2VsZWN0aW9uVmFyaWFudCBjb25zaXN0aW5nIG9mIGEgZmlsdGVyIGJhciwgYSB0YWJsZSwgYW5kIGEgcGFnZSBjb250ZXh0XG5cdCAqIEBwYXJhbSB2T3V0Ym91bmRQYXJhbXMgT3V0Ym91bmQgUHJvcGVydGllcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdFxuXHQgKiBAcmV0dXJucyAtIFRoZSBtb2RpZmllZCBTZWxlY3Rpb25WYXJpYW50IHdpdGggb3V0Ym91bmQgcGFyYW1ldGVycy5cblx0ICovXG5cdF9hcHBseU91dGJvdW5kUGFyYW1zKG9TZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50LCB2T3V0Ym91bmRQYXJhbXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBTZWxlY3Rpb25WYXJpYW50IHtcblx0XHRjb25zdCBhUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKHZPdXRib3VuZFBhcmFtcyk7XG5cdFx0Y29uc3QgYVNlbGVjdFByb3BlcnRpZXMgPSBvU2VsZWN0aW9uVmFyaWFudC5nZXRTZWxlY3RPcHRpb25zUHJvcGVydHlOYW1lcygpO1xuXHRcdGFQYXJhbWV0ZXJzLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRpZiAoIWFTZWxlY3RQcm9wZXJ0aWVzLmluY2x1ZGVzKGtleSkpIHtcblx0XHRcdFx0b1NlbGVjdGlvblZhcmlhbnQuYWRkU2VsZWN0T3B0aW9uKGtleSwgXCJJXCIsIFwiRVFcIiwgdk91dGJvdW5kUGFyYW1zW2tleV0pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiBvU2VsZWN0aW9uVmFyaWFudDtcblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gZ2V0IHRoZSBvdXRib3VuZCBwYXJhbWV0ZXJzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0LlxuXHQgKiBAcGFyYW0gb091dGJvdW5kUGFyYW1zIFBhcmFtZXRlcnMgZGVmaW5lZCBpbiB0aGUgb3V0Ym91bmRzLiBPbmx5IFwicGxhaW5cIiBpcyBzdXBwb3J0ZWRcblx0ICogQHJldHVybnMgUGFyYW1ldGVycyB3aXRoIHRoZSBrZXktVmFsdWUgcGFpclxuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldE91dGJvdW5kUGFyYW1zKG9PdXRib3VuZFBhcmFtczogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5UGFyYW1ldGVyPik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuXHRcdGNvbnN0IG9QYXJhbXNNYXBwaW5nOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cdFx0aWYgKG9PdXRib3VuZFBhcmFtcykge1xuXHRcdFx0Y29uc3QgYVBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvT3V0Ym91bmRQYXJhbXMpIHx8IFtdO1xuXHRcdFx0aWYgKGFQYXJhbWV0ZXJzLmxlbmd0aCA+IDApIHtcblx0XHRcdFx0YVBhcmFtZXRlcnMuZm9yRWFjaChmdW5jdGlvbiAoa2V5OiBzdHJpbmcpIHtcblx0XHRcdFx0XHRjb25zdCBvTWFwcGluZyA9IG9PdXRib3VuZFBhcmFtc1trZXldO1xuXHRcdFx0XHRcdGlmIChvTWFwcGluZy52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS52YWx1ZSAmJiBvTWFwcGluZy52YWx1ZS5mb3JtYXQgPT09IFwicGxhaW5cIikge1xuXHRcdFx0XHRcdFx0aWYgKCFvUGFyYW1zTWFwcGluZ1trZXldKSB7XG5cdFx0XHRcdFx0XHRcdG9QYXJhbXNNYXBwaW5nW2tleV0gPSBvTWFwcGluZy52YWx1ZS52YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtc01hcHBpbmc7XG5cdH1cblxuXHQvKipcblx0ICogVHJpZ2dlcnMgYW4gb3V0Ym91bmQgbmF2aWdhdGlvbiB3aGVuIGEgdXNlciBjaG9vc2VzIHRoZSBjaGV2cm9uLlxuXHQgKiBAcGFyYW0ge29iamVjdH0gb0NvbnRyb2xsZXJcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNPdXRib3VuZFRhcmdldCBOYW1lIG9mIHRoZSBvdXRib3VuZCB0YXJnZXQgKG5lZWRzIHRvIGJlIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0KVxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHQgdGhhdCBjb250YWlucyB0aGUgZGF0YSBmb3IgdGhlIHRhcmdldCBhcHBcblx0ICogQHBhcmFtIHtzdHJpbmd9IHNDcmVhdGVQYXRoIENyZWF0ZSBwYXRoIHdoZW4gdGhlIGNoZXZyb24gaXMgY3JlYXRlZC5cblx0ICogQHBhcmFtIHtzdHJpbmd9IG5hdk1vZGUgT3BlbnMgaW4gbmV3IHRhYiBvciB3aW5kb3cgd2hlbiBzZXQgdG8gJ2V4cGxhY2UnLlxuXHQgKiBAcmV0dXJucyB7UHJvbWlzZX0gUHJvbWlzZSB3aGljaCBpcyByZXNvbHZlZCBvbmNlIHRoZSBuYXZpZ2F0aW9uIGlzIHRyaWdnZXJlZFxuXHQgKi9cblxuXHRAcHVibGljRXh0ZW5zaW9uKClcblx0QGZpbmFsRXh0ZW5zaW9uKClcblx0YXN5bmMgb25DaGV2cm9uUHJlc3NOYXZpZ2F0ZU91dEJvdW5kKFxuXHRcdG9Db250cm9sbGVyOiBQYWdlQ29udHJvbGxlcixcblx0XHRzT3V0Ym91bmRUYXJnZXQ6IHN0cmluZyxcblx0XHRvQ29udGV4dDogT0RhdGFWNENvbnRleHQgfCBPRGF0YVY0Q29udGV4dFtdIHwgdW5kZWZpbmVkLFxuXHRcdHNDcmVhdGVQYXRoOiBzdHJpbmcsXG5cdFx0bmF2TW9kZT86IHN0cmluZ1xuXHQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBvT3V0Ym91bmRzID0gb0NvbnRyb2xsZXIuZ2V0QXBwQ29tcG9uZW50KCkuZ2V0Um91dGluZ1NlcnZpY2UoKS5nZXRPdXRib3VuZHMoKTtcblx0XHRjb25zdCBvRGlzcGxheU91dGJvdW5kID0gb091dGJvdW5kc1tzT3V0Ym91bmRUYXJnZXRdO1xuXHRcdGxldCBhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM7XG5cdFx0aWYgKG9EaXNwbGF5T3V0Ym91bmQgJiYgb0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdCAmJiBvRGlzcGxheU91dGJvdW5kLmFjdGlvbikge1xuXHRcdFx0Y29uc3Qgb1JlZnJlc2hTdHJhdGVnaWVzOiBSZWZyZXNoU3RyYXRlZ2llcyA9IHtcblx0XHRcdFx0aW50ZW50czoge31cblx0XHRcdH07XG5cdFx0XHRjb25zdCBvRGVmYXVsdFJlZnJlc2hTdHJhdGVneTogU09SZWZyZXNoU3RyYXRlZ3kgPSB7fTtcblx0XHRcdGxldCBzTWV0YVBhdGg6IHN0cmluZztcblx0XHRcdGxldCBuYXZpZ2F0aW9uQ29udGV4dHM6IE9EYXRhVjRDb250ZXh0W10gPSBbXTtcblx0XHRcdGlmIChvQ29udGV4dCkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvQ29udGV4dCkpIHtcblx0XHRcdFx0XHRuYXZpZ2F0aW9uQ29udGV4dHMgPSBvQ29udGV4dDtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHRbMF0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9Db250ZXh0LmlzQSAmJiBvQ29udGV4dC5pc0E8T0RhdGFWNENvbnRleHQ+KFwic2FwLnVpLm1vZGVsLm9kYXRhLnY0LkNvbnRleHRcIikpIHtcblx0XHRcdFx0XHRzTWV0YVBhdGggPSBNb2RlbEhlbHBlci5nZXRNZXRhUGF0aEZvckNvbnRleHQob0NvbnRleHQpO1xuXHRcdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0cyA9IFtvQ29udGV4dF07XG5cdFx0XHRcdH1cblx0XHRcdFx0b0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3lbc01ldGFQYXRoIV0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHRcdG9SZWZyZXNoU3RyYXRlZ2llcy5fZmVEZWZhdWx0ID0gb0RlZmF1bHRSZWZyZXNoU3RyYXRlZ3k7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChzQ3JlYXRlUGF0aCkge1xuXHRcdFx0XHRjb25zdCBzS2V5ID0gYCR7b0Rpc3BsYXlPdXRib3VuZC5zZW1hbnRpY09iamVjdH0tJHtvRGlzcGxheU91dGJvdW5kLmFjdGlvbn1gO1xuXHRcdFx0XHRvUmVmcmVzaFN0cmF0ZWdpZXMuaW50ZW50cyFbc0tleV0gPSB7fTtcblx0XHRcdFx0b1JlZnJlc2hTdHJhdGVnaWVzLmludGVudHMhW3NLZXldIVtzQ3JlYXRlUGF0aF0gPSBSZWZyZXNoU3RyYXRlZ3lUeXBlLlNlbGY7XG5cdFx0XHR9XG5cdFx0XHRpZiAob0Rpc3BsYXlPdXRib3VuZCAmJiBvRGlzcGxheU91dGJvdW5kLnBhcmFtZXRlcnMpIHtcblx0XHRcdFx0Y29uc3Qgb1BhcmFtcyA9IG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyAmJiB0aGlzLmdldE91dGJvdW5kUGFyYW1zKG9EaXNwbGF5T3V0Ym91bmQucGFyYW1ldGVycyk7XG5cdFx0XHRcdGlmIChPYmplY3Qua2V5cyhvUGFyYW1zKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0YWRkaXRpb25hbE5hdmlnYXRpb25QYXJhbWV0ZXJzID0gb1BhcmFtcztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRvQ29udHJvbGxlci5faW50ZW50QmFzZWROYXZpZ2F0aW9uLm5hdmlnYXRlKG9EaXNwbGF5T3V0Ym91bmQuc2VtYW50aWNPYmplY3QsIG9EaXNwbGF5T3V0Ym91bmQuYWN0aW9uLCB7XG5cdFx0XHRcdG5hdmlnYXRpb25Db250ZXh0czogbmF2aWdhdGlvbkNvbnRleHRzLFxuXHRcdFx0XHRyZWZyZXNoU3RyYXRlZ2llczogb1JlZnJlc2hTdHJhdGVnaWVzLFxuXHRcdFx0XHRhZGRpdGlvbmFsTmF2aWdhdGlvblBhcmFtZXRlcnM6IGFkZGl0aW9uYWxOYXZpZ2F0aW9uUGFyYW1ldGVycyxcblx0XHRcdFx0bmF2TW9kZTogbmF2TW9kZVxuXHRcdFx0fSk7XG5cblx0XHRcdC8vVE9ETzogY2hlY2sgd2h5IHJldHVybmluZyBhIHByb21pc2UgaXMgcmVxdWlyZWRcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKGBvdXRib3VuZCB0YXJnZXQgJHtzT3V0Ym91bmRUYXJnZXR9IG5vdCBmb3VuZCBpbiBjcm9zcyBuYXZpZ2F0aW9uIGRlZmluaXRpb24gb2YgbWFuaWZlc3RgKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUHJvY2VzcyB0aGUgc2VtYW50aWMgYXR0cmlidXRlcyBiYXNlZCBvbiB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzLlxuXHQgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0XG5cdCAqIEBwYXJhbSBzZW1hbnRpY0F0dHJpYnV0ZXMgU2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKiBAcGFyYW0gcGF0aHNUb1JldGFpbiBOYXZpZ2F0aW9uIHByb3BlcnRpZXMgdG8gYmUgcmV0YWluZWQgaW4gY2FzZSBvZiBsaW5rc1xuXHQgKiBAcmV0dXJucyBQcm9jZXNzZWQgc2VtYW50aWMgYXR0cmlidXRlc1xuXHQgKi9cblx0cHJvY2Vzc1NlbWFudGljQXR0cmlidXRlcyhcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdHNlbWFudGljQXR0cmlidXRlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdFx0cGF0aHNUb1JldGFpbj86IEFycmF5PHN0cmluZz5cblx0KTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuXHRcdGNvbnN0IGJLZWVwTmF2UHJvcGVydGllcyA9IHRoaXMua2VlcE5hdmlnYXRpb25Qcm9wZXJ0aWVzRm9yTmF2aWdhdGlvbigpO1xuXHRcdGlmICghYktlZXBOYXZQcm9wZXJ0aWVzKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5nZXRTZW1hbnRpY0F0dHJpYnV0ZXNXaXRob3V0TmF2aWdhdGlvblByb3BlcnRpZXMoY29udGV4dCwgcGF0aHNUb1JldGFpbik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBzZW1hbnRpY0F0dHJpYnV0ZXM7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrIGlmIG5hdmlnYXRpb24gcHJvcGVydGllcyBoYXMgdG8gYmUgY29uc2lkZXJlZCBmb3IgdGhlIGV4dGVybmFsIG5hdmlnYXRpb24uXG5cdCAqIEByZXR1cm5zIGB0cnVlYCBpZiBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaGFzIHRvIGJlIGNvbnNpZGVyZWRcblx0ICovXG5cdEBwdWJsaWNFeHRlbnNpb24oKVxuXHRAZmluYWxFeHRlbnNpb24oKVxuXHRrZWVwTmF2aWdhdGlvblByb3BlcnRpZXNGb3JOYXZpZ2F0aW9uKCk6IGJvb2xlYW4ge1xuXHRcdGxldCBiS2VlcE5hdlByb3BlcnRpZXMgPSBmYWxzZTtcblx0XHRjb25zdCBtYW5pZmVzdCA9IHRoaXMuYmFzZS5nZXRBcHBDb21wb25lbnQoKS5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpO1xuXHRcdGJLZWVwTmF2UHJvcGVydGllcyA9IG1hbmlmZXN0Py5hcHA/LmNvbnNpZGVyTmF2aWdhdGlvblByb3BlcnRpZXNGb3JFeHRlcm5hbE5hdmlnYXRpb24gfHwgZmFsc2U7XG5cdFx0cmV0dXJuIGJLZWVwTmF2UHJvcGVydGllcztcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgc2VtYW50aWMgYXR0cmlidXRlcyBmcm9tIGNvbnRleHQuXG5cdCAqIEBwYXJhbSBjb250ZXh0IENvbnRleHRcblx0ICogQHBhcmFtIHBhdGhzVG9SZXRhaW4gTmF2aWdhdGlvbiBwcm9wZXJ0aWVzIHRvIGJlIHJldGFpbmVkIGluIGNhc2Ugb2YgbGlua3Ncblx0ICogQHJldHVybnMgU2VtYW50aWMgQXR0cmlidXRlc1xuXHQgKi9cblx0QHB1YmxpY0V4dGVuc2lvbigpXG5cdEBmaW5hbEV4dGVuc2lvbigpXG5cdGdldFNlbWFudGljQXR0cmlidXRlc1dpdGhvdXROYXZpZ2F0aW9uUHJvcGVydGllcyhjb250ZXh0OiBDb250ZXh0LCBwYXRoc1RvUmV0YWluPzogQXJyYXk8c3RyaW5nPik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWwsXG5cdFx0XHRjb250ZXh0UGF0aCA9IGNvbnRleHQuZ2V0UGF0aCgpLFxuXHRcdFx0bWV0YVBhdGggPSBtZXRhTW9kZWwuZ2V0TWV0YVBhdGgoY29udGV4dFBhdGgpLFxuXHRcdFx0cmV0ID0gY29udGV4dC5nZXRPYmplY3QoKTtcblx0XHRjb25zdCBuYXZQcm9wZXJ0aWVzID0gdGhpcy5nZXROYXZpZ2F0aW9uUHJvcGVydGllc0Zyb21FbnRpdHlUeXBlKG1ldGFNb2RlbCwgbWV0YVBhdGgpO1xuXHRcdGlmIChuYXZQcm9wZXJ0aWVzICYmIG5hdlByb3BlcnRpZXMubGVuZ3RoID4gMCkge1xuXHRcdFx0bmF2UHJvcGVydGllcy5mb3JFYWNoKChuYXZQcm9wOiBOYXZpZ2F0aW9uUHJvcGVydHkpID0+IHtcblx0XHRcdFx0Y29uc3QgbmF2UHJvcE5hbWUgPSBuYXZQcm9wLm5hbWU7XG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHBhdGhzVG9SZXRhaW4pICYmIHBhdGhzVG9SZXRhaW4ubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRcdC8vIFdlIGNvbnNpZGVyIDEuMSBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgd2hpY2ggYXJlIHVzZWQgZm9yIHJlbmRlcmluZyB0aGUgc2VtYW50aWMgbGlua3MgdG8gYmUgcGFzc2VkIGFzIHBhcnQgb2YgY29udGV4dFxuXHRcdFx0XHRcdGlmIChyZXQuaGFzT3duUHJvcGVydHkobmF2UHJvcE5hbWUpICYmIHJldFtuYXZQcm9wTmFtZV0pIHtcblx0XHRcdFx0XHRcdE9iamVjdC5rZXlzKHJldFtuYXZQcm9wTmFtZV0pLmZvckVhY2goZnVuY3Rpb24gKGtleTogc3RyaW5nKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHByb3BlcnR5UGF0aCA9IGAke25hdlByb3BOYW1lfS8ke2tleX1gO1xuXHRcdFx0XHRcdFx0XHRpZiAoIXBhdGhzVG9SZXRhaW4/LmluY2x1ZGVzKHByb3BlcnR5UGF0aCkgJiYgcmV0W25hdlByb3BOYW1lXS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG5cdFx0XHRcdFx0XHRcdFx0ZGVsZXRlIHJldFtuYXZQcm9wTmFtZV1ba2V5XTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoT2JqZWN0LmtleXMocmV0W25hdlByb3BOYW1lXSkubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRkZWxldGUgcmV0W25hdlByb3BOYW1lXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gZWxzZSBpZiAocmV0Lmhhc093blByb3BlcnR5KG5hdlByb3BOYW1lKSkge1xuXHRcdFx0XHRcdGRlbGV0ZSByZXRbbmF2UHJvcE5hbWVdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZSB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzIGZyb20gZW50aXR5VHlwZSB1c2luZyBtZXRhbW9kZWwuXG5cdCAqIEBwYXJhbSBtZXRhTW9kZWwgTWV0YU1vZGVsXG5cdCAqIEBwYXJhbSBtZXRhUGF0aCBNZXRhUGF0aFxuXHQgKiBAcmV0dXJucyBOYXZpZ2F0aW9uIHByb3BlcnRpZXNcblx0ICovXG5cdGdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzRnJvbUVudGl0eVR5cGUobWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCwgbWV0YVBhdGg6IHN0cmluZyk6IE5hdmlnYXRpb25Qcm9wZXJ0eVtdIHtcblx0XHRjb25zdCBjb252ZXJ0ZWRNZXRhZGF0YSA9IGNvbnZlcnRUeXBlcyhtZXRhTW9kZWwpO1xuXHRcdGNvbnN0IGVudGl0eVR5cGUgPSBjb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxFbnRpdHlUeXBlPihgJHttZXRhUGF0aH0vYCkudGFyZ2V0ITtcblx0XHRyZXR1cm4gZW50aXR5VHlwZT8ubmF2aWdhdGlvblByb3BlcnRpZXM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgSW50ZXJuYWxJbnRlbnRCYXNlZE5hdmlnYXRpb247XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9DQTtBQUNBO0FB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
@@ -52,7 +52,7 @@ export type NavigationParameters = {
52
52
  /**
53
53
  * Single instance or multiple instances of {@link sap.ui.model.odata.v4.Context}, or alternatively an object or array of objects, to be passed to the intent and for which the IBN button is enabled
54
54
  */
55
- applicableContexts?: object | ODataV4Context[];
55
+ applicableContexts?: ODataV4Context[];
56
56
  /**
57
57
  * Single instance or multiple instances of {@link sap.ui.model.odata.v4.Context}, or alternatively an object or array of objects, which cannot be passed to the intent.
58
58
  * if an array of contexts is passed the context is used to determine the meta path and accordingly remove the sensitive data
@@ -463,6 +463,7 @@ class InternalIntentBasedNavigation extends ControllerExtension {
463
463
  entityType: entitySet.entityType,
464
464
  resourceModel: getResourceModel(this.getView()),
465
465
  notApplicableContexts: mNavigationParameters.notApplicableContexts,
466
+ applicableContexts: mNavigationParameters?.applicableContexts ?? [],
466
467
  entitySet: entitySet.name,
467
468
  actionName: sAction
468
469
  });