@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
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controllerextensions/routing/RouterProxy", "sap/fe/core/helpers/AppStartupHelper", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ManifestHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticKeyHelper", "sap/ui/base/BindingParser", "sap/ui/base/EventProvider", "sap/ui/core/Component", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/model/odata/v4/ODataUtils", "sap/ui/util/openWindow", "../converters/MetaModelConverter"], function (Log, ClassSupport, BusyLocker, Placeholder, messageHandling, NavigationReason, RouterProxy, AppStartupHelper, EditState, ManifestHelper, ModelHelper, SemanticKeyHelper, BindingParser, EventProvider, Component, Service, ServiceFactory, ODataUtils, openWindow, MetaModelConverter) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controllerextensions/BusyLocker", "sap/fe/core/controllerextensions/Placeholder", "sap/fe/core/controllerextensions/messageHandler/messageHandling", "sap/fe/core/controllerextensions/routing/NavigationReason", "sap/fe/core/controllerextensions/routing/RouterProxy", "sap/fe/core/helpers/AppStartupHelper", "sap/fe/core/helpers/EditState", "sap/fe/core/helpers/ManifestHelper", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/SemanticKeyHelper", "sap/ui/base/BindingInfo", "sap/ui/base/EventProvider", "sap/ui/core/Component", "sap/ui/core/service/Service", "sap/ui/core/service/ServiceFactory", "sap/ui/model/odata/v4/ODataUtils", "sap/ui/util/openWindow", "../converters/MetaModelConverter"], function (Log, ClassSupport, BusyLocker, Placeholder, messageHandling, NavigationReason, RouterProxy, AppStartupHelper, EditState, ManifestHelper, ModelHelper, SemanticKeyHelper, BindingInfo, EventProvider, Component, Service, ServiceFactory, ODataUtils, openWindow, MetaModelConverter) {
6
6
  "use strict";
7
7
 
8
8
  var _dec, _dec2, _dec3, _class, _class2, _descriptor, _descriptor2;
@@ -422,7 +422,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
422
422
  const aAllResolvedParameterPromises = Object.keys(mParameters).map(async sParameterKey => {
423
423
  const sParameterMappingExpression = mParameters[sParameterKey];
424
424
  // We assume the defined parameters will be compatible with a binding expression
425
- const oParsedExpression = BindingParser.complexParser(sParameterMappingExpression);
425
+ const oParsedExpression = BindingInfo.parse(sParameterMappingExpression);
426
426
  const aParts = oParsedExpression.parts || [oParsedExpression];
427
427
  const aResolvedParameterPromises = aParts.map(async function (oPathPart) {
428
428
  const aRelativeParts = oPathPart.path.split("../");
@@ -1013,4 +1013,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/core/controll
1013
1013
  }(ServiceFactory);
1014
1014
  return RoutingServiceFactory;
1015
1015
  }, false);
1016
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9FdmVudFByb3ZpZGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2luaGVyaXRzTG9vc2UiLCJFdmVudFByb3ZpZGVyIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsInByb3RvdHlwZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiUm91dGluZ1NlcnZpY2UiLCJfU2VydmljZSIsIl90aGlzMiIsIl9sZW4yIiwiX2tleTIiLCJuYXZpZ2F0aW9uSW5mb1F1ZXVlIiwiZW5hYmxlZCIsImJpbmRpbmdDbGVhbnVwUHJvbWlzZXMiLCJfZXhwb3J0cyIsIl9wcm90byIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJzY29wZVR5cGUiLCJvQXBwQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvUm91dGVyIiwiZ2V0Um91dGVyIiwib1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJldmVudFByb3ZpZGVyIiwib1JvdXRpbmdDb25maWciLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsImFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZSIsInByb21pc2UiLCJwdXNoIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiYWxsIiwiaXNGQ0wiLCJjb25maWciLCJyb3V0ZXJDbGFzcyIsIl9tVGFyZ2V0cyIsInRhcmdldHMiLCJzVGFyZ2V0TmFtZSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJ0YXJnZXROYW1lIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJ2aWV3TGV2ZWwiLCJfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4iLCJyb3V0aW5nSGludHMiLCJfbVJvdXRlcyIsInJvdXRlcyIsIm9Sb3V0ZU1hbmlmZXN0SW5mbyIsImFSb3V0ZVRhcmdldHMiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0Iiwic1JvdXRlTmFtZSIsIm5hbWUiLCJzUm91dGVQYXR0ZXJuIiwicGF0dGVybiIsImluZGV4T2YiLCJMb2ciLCJ3YXJuaW5nIiwiaVJvdXRlTGV2ZWwiLCJyb3V0ZUxldmVsIiwiaXRlbSIsInNQYXJlbnRUYXJnZXROYW1lIiwicGFyZW50Iiwicm91dGVySGFzaEtleXMiLCJSb3V0ZXJQcm94eSIsImV4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2giLCJzcGxpdCIsIkZDTExldmVsIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiZm9yRWFjaCIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvU2V0dGluZ3MiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJwYXJlbnRPZiIsIm5hdmlnYXRpb24iLCJzTmF2TmFtZSIsInRhcmdldFJvdXRlIiwiZGV0YWlsIiwicm91dGUiLCJzdGFydHNXaXRoIiwic1BhdHRlcm4iLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJtYXRjaCIsIl9nZXRSb3V0ZUluZm9ybWF0aW9uIiwiX2dldFRhcmdldEluZm9ybWF0aW9uIiwiX2dldENvbXBvbmVudElkIiwic093bmVySWQiLCJzQ29tcG9uZW50SWQiLCJzdWJzdHJpbmciLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNvbXBvbmVudE9yVmlldyIsImNvcnJlY3RUYXJnZXROYW1lIiwiZ2V0VGFyZ2V0TmFtZSIsInRhcmdldENvbXBvbmVudElkIiwiX3NPd25lcklkIiwiZ2V0SWQiLCJpZCIsInZpZXdJZCIsImdldFRhcmdldE5hbWVGb3JWaWV3IiwidmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTGFzdFNlbWFudGljTWFwcGluZyIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJjb250ZXh0Iiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsInRhcmdldFVSTFByb21pc2UiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljUGF0aCIsInByZXBhcmVQYXJhbWV0ZXJzIiwidGhlbiIsInBhcmFtZXRlcnMiLCJnZXRVUkwiLCJuYXZpZ2F0ZVRvIiwibVBhcmFtZXRlck1hcHBpbmciLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwic1RhcmdldFVSTFByb21pc2UiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtUGFyYW1ldGVycyIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyIsInNQYXJhbWV0ZXJLZXkiLCJzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24iLCJvUGFyc2VkRXhwcmVzc2lvbiIsIkJpbmRpbmdQYXJzZXIiLCJjb21wbGV4UGFyc2VyIiwiYVBhcnRzIiwicGFydHMiLCJhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyIsIm9QYXRoUGFydCIsImFSZWxhdGl2ZVBhcnRzIiwicGF0aCIsImFMb2NhbFBhcnRzIiwibG9jYWxDb250ZXh0UGF0aCIsImpvaW4iLCJsb2NhbENvbnRleHQiLCJiaW5kQ29udGV4dCIsImdldEJvdW5kQ29udGV4dCIsIm9NZXRhQ29udGV4dCIsImdldE1ldGFDb250ZXh0IiwicmVxdWVzdFByb3BlcnR5Iiwib1ZhbHVlIiwib1Byb3BlcnR5SW5mbyIsImdldE9iamVjdCIsInNFZG1UeXBlIiwiJFR5cGUiLCJPRGF0YVV0aWxzIiwiZm9ybWF0TGl0ZXJhbCIsImFSZXNvbHZlZFBhcmFtZXRlcnMiLCJ2YWx1ZSIsImZvcm1hdHRlciIsImFwcGx5Iiwia2V5IiwiYUFsbFJlc29sdmVkUGFyYW1ldGVycyIsIm9QYXJhbWV0ZXJzIiwib1Jlc29sdmVkUGFyYW1ldGVyIiwib0Vycm9yIiwiZXJyb3IiLCJfZmlyZVJvdXRlTWF0Y2hFdmVudHMiLCJFZGl0U3RhdGUiLCJjbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSIsIm5hdmlnYXRlVG9Db250ZXh0Iiwidmlld0RhdGEiLCJjdXJyZW50VGFyZ2V0SW5mbyIsInJvdXRlUGFyYW1ldGVyc1Byb21pc2UiLCJpc1N0aWNreU1vZGUiLCJ0YXJnZXRQYXRoIiwibmF2aWdhdGlvbkluZm8iLCJvUm91dGVEZXRhaWwiLCJpc0EiLCJzVGFyZ2V0UGF0aCIsIl9nZXRQYXRoRnJvbUNvbnRleHQiLCJiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290IiwiZXhpdEZyb21BcHAiLCJjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyIsInNMYXlvdXQiLCJfY2FsY3VsYXRlTGF5b3V0Iiwib05hdmlnYXRpb25JbmZvIiwiYlRhcmdldEVkaXRhYmxlIiwiZWRpdGFibGUiLCJiUGVyc2lzdE9QU2Nyb2xsIiwicGVyc2lzdE9QU2Nyb2xsIiwiYlNob3dQbGFjZWhvbGRlciIsInNob3dQbGFjZWhvbGRlciIsInJlYXNvbiIsInJlZGlyZWN0ZWRUb05vbkRyYWZ0IiwidXBkYXRlRkNMTGV2ZWwiLCJyZWNyZWF0ZUNvbnRleHQiLCJ1c2VDb250ZXh0IiwiY2hlY2tOb0hhc2hDaGFuZ2UiLCJzQ3VycmVudEhhc2hOb0FwcFN0YXRlIiwiZ2V0SGFzaCIsInJvdXRlSW5mb0J5SGFzaCIsImdldFJvdXRlSW5mb0J5SGFzaCIsIm1FdmVudFBhcmFtZXRlcnMiLCJyb3V0ZUluZm9ybWF0aW9uIiwic0N1cnJlbnRSb3V0ZU5hbWUiLCJyb3V0ZVBhdHRlcm4iLCJzQ3VycmVudFJvdXRlUGF0dGVybiIsInZpZXdzIiwiYUN1cnJlbnRWaWV3cyIsInNldEZvY3VzRm9yY2VkIiwiZm9yY2VGb2N1cyIsInRyYW5zaWVudCIsImluY2x1ZGVzIiwibmF2TW9kZSIsInNhcCIsInVpIiwicmVxdWlyZSIsIkNvbnRhaW5lciIsInNoZWxsU2VydmljZUhlbHBlciIsImdldFNoZWxsU2VydmljZXMiLCJwYXJzZWRVcmwiLCJwYXJzZVNoZWxsSGFzaCIsImRvY3VtZW50IiwibG9jYXRpb24iLCJoYXNoIiwibmF2aWdhdGlvblNlcnZpY2UiLCJnZXRTZXJ2aWNlQXN5bmMiLCJocmVmIiwiZ2V0SHJlZiIsInNlbWFudGljT2JqZWN0IiwiYWN0aW9uIiwicGFyYW1zIiwiYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lIiwiZ2V0SW5mcmFtZVVybCIsInVybCIsIlVSTCIsImVuY29kZVVSSSIsIndpbmRvdyIsIm9yaWdpbiIsInBhdGhuYW1lIiwib3BlbldpbmRvdyIsIm9Sb3V0ZUluZm8iLCJvUm91dGUiLCJzTGFzdFRhcmdldE5hbWUiLCJvVGFyZ2V0IiwibWVzc2FnZUhhbmRsaW5nIiwicmVtb3ZlVW5ib3VuZFRyYW5zaXRpb25NZXNzYWdlcyIsIm9Sb3V0ZVBhcmFtZXRlcnMiLCJuYXZUbyIsInByZXNlcnZlSGlzdG9yeSIsIm5vUHJlc2VydmF0aW9uQ2FjaGUiLCJiTmF2aWdhdGVkIiwicG9wIiwibmF2aWdhdGVUb1JvdXRlIiwic1RhcmdldFJvdXRlTmFtZSIsInNUYXJnZXRVUkwiLCJpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkiLCJzUGF0aCIsInRlc3QiLCJzU2VtYW50aWNQYXRoIiwidGVjaG5pY2FsUGF0aCIsInNlbWFudGljUGF0aCIsImdldFBhdGhUb05hdmlnYXRlQmFjayIsIl9jaGVja0lmQ29udGV4dFN1cHBvcnRzU2VtYW50aWNQYXRoIiwibWV0YU1vZGVsIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwidGFyZ2V0T2JqZWN0IiwiaXNEcmFmdFJvb3QiLCJnZXRQcm9wZXJ0eSIsImVudGl0eVNldE5hbWUiLCJnZXRTZW1hbnRpY0tleXMiLCJnZXRIZWFkZXJDb250ZXh0IiwibGF5b3V0IiwiZmluZExheW91dEZvckhhc2giLCJnZXRSb290Vmlld0NvbnRyb2xsZXIiLCJjYWxjdWxhdGVMYXlvdXQiLCJrZWVwQ3VycmVudExheW91dCIsIl9iZWZvcmVSb3V0ZU1hdGNoZWQiLCJiUGxhY2Vob2xkZXJFbmFibGVkIiwiUGxhY2Vob2xkZXIiLCJpc1BsYWNlaG9sZGVyRW5hYmxlZCIsIm9Sb290VmlldyIsImdldFJvb3RDb250cm9sIiwiQnVzeUxvY2tlciIsImxvY2siLCJfaXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSIsImhpc3RvcnkiLCJzdGF0ZSIsImZlTGV2ZWwiLCJfb25Sb3V0ZU1hdGNoZWQiLCJvRXZlbnQiLCJvQXBwU3RhdGVIYW5kbGVyIiwiZ2V0QXBwU3RhdGVIYW5kbGVyIiwiaXNMb2NrZWQiLCJ1bmxvY2siLCJnZXRQYXJhbWV0ZXJzIiwiY2hlY2tJZlJvdXRlQ2hhbmdlZEJ5SUFwcCIsIk5hdmlnYXRpb25SZWFzb24iLCJBcHBTdGF0ZUNoYW5nZWQiLCJyZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCIsImNoZWNrUmVzdG9yZUhpc3RvcnlXYXNUcmlnZ2VyZWQiLCJSZXN0b3JlSGlzdG9yeSIsInJlc2V0UmVzdG9yZUhpc3RvcnlGbGFnIiwiZ2V0UGFyYW1ldGVyIiwicmVzdG9yZUhpc3RvcnkiLCJyZXNvbHZlUm91dGVNYXRjaCIsImNhdGNoIiwiYXR0YWNoUm91dGVNYXRjaGVkIiwib0RhdGEiLCJmbkZ1bmN0aW9uIiwib0xpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJkZXRhY2hFdmVudCIsImF0dGFjaEFmdGVyUm91dGVNYXRjaGVkIiwiZGV0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJpbml0aWFsaXplUm91dGluZyIsImdldEVudmlyb25tZW50Q2FwYWJpbGl0aWVzIiwiZ2V0Q2FwYWJpbGl0aWVzIiwiQ29sbGFib3JhdGlvbiIsImRlZmF1bHQiLCJDb2xsYWJvcmF0aW9uSGVscGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInByb2Nlc3NBbmRFeHBhbmRIYXNoIiwiYmluZCIsImF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCIsInJlc2V0RWRpdFN0YXRlIiwibWFuYWdlU3RhcnR1cE1vZGUiLCJvblJlc3RvcmUiLCJiSXNJYXBwU3RhdGUiLCJnZXRIYXNoQ2hhbmdlciIsIm9TdGFydHVwUGFyYW1ldGVycyIsImdldFN0YXJ0dXBQYXJhbWV0ZXJzIiwiYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzIiwic0hhc2giLCJwcmVmZXJyZWRNb2RlIiwidG9VcHBlckNhc2UiLCJfbWFuYWdlQ3JlYXRlU3RhcnR1cCIsIl9tYW5hZ2VEZWVwTGlua1N0YXJ0dXAiLCJfbWFuYWdlZFByZWZlcnJlZE1vZGVFZGl0IiwiZ2V0RGVmYXVsdENyZWF0ZUhhc2giLCJBcHBTdGFydHVwSGVscGVyIiwiZ2V0Q29udGV4dFBhdGgiLCJnZXRDcmVhdGVTdGFydHVwSGFzaCIsInNOZXdIYXNoIiwicmVwbGFjZUhhc2giLCJzZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUiLCJzZXRTdGFydHVwTW9kZUNyZWF0ZSIsImdldERlZXBMaW5rU3RhcnR1cEhhc2giLCJvRGVlcExpbmsiLCJzVGVjaG5pY2FsUGF0aCIsInNldFN0YXJ0dXBNb2RlRGVlcGxpbmsiLCJzdGFydHVwUGFyYW1ldGVycyIsInJlc3VsdGluZ0hhc2giLCJzaG91bGRFZGl0IiwidmVyaWZ5RWRpdEFubm90YXRpb25zIiwicGFyYW1ldGVyIiwiZ2V0T3V0Ym91bmRzIiwiZ2V0Um91dGluZ0hpbnRzIiwiZ2V0SW50ZXJmYWNlIiwiU2VydmljZSIsIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeSIsIl9TZXJ2aWNlRmFjdG9yeSIsIl9wcm90bzIiLCJjcmVhdGVJbnN0YW5jZSIsIm9TZXJ2aWNlQ29udGV4dCIsIm9Sb3V0aW5nU2VydmljZSIsIlNlcnZpY2VGYWN0b3J5Il0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJSb3V0aW5nU2VydmljZUZhY3RvcnkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFbnRpdHlTZXQgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvRWRtXCI7XG5pbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcblxuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHR5cGUgQXBwQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgU3RhcnR1cFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvQXBwQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IE5hdmlnYXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL1RlbXBsYXRlQ29tcG9uZW50XCI7XG5pbXBvcnQgQnVzeUxvY2tlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvQnVzeUxvY2tlclwiO1xuaW1wb3J0IFBsYWNlaG9sZGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9QbGFjZWhvbGRlclwiO1xuaW1wb3J0IG1lc3NhZ2VIYW5kbGluZyBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvbWVzc2FnZUhhbmRsZXIvbWVzc2FnZUhhbmRsaW5nXCI7XG5pbXBvcnQgTmF2aWdhdGlvblJlYXNvbiBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9OYXZpZ2F0aW9uUmVhc29uXCI7XG5pbXBvcnQgUm91dGVyUHJveHkgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL3JvdXRpbmcvUm91dGVyUHJveHlcIjtcbmltcG9ydCBBcHBTdGFydHVwSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0FwcFN0YXJ0dXBIZWxwZXJcIjtcbmltcG9ydCBFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvRWRpdFN0YXRlXCI7XG5pbXBvcnQgeyBnZXRSb3V0ZVRhcmdldE5hbWVzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTWFuaWZlc3RIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IFNlbWFudGljS2V5SGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1NlbWFudGljS2V5SGVscGVyXCI7XG5pbXBvcnQgQmluZGluZ1BhcnNlciBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ1BhcnNlclwiO1xuaW1wb3J0IEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlCaW5kaW5nSW5mbyB9IGZyb20gXCJzYXAvdWkvYmFzZS9NYW5hZ2VkT2JqZWN0XCI7XG5pbXBvcnQgQ29tcG9uZW50IGZyb20gXCJzYXAvdWkvY29yZS9Db21wb25lbnRcIjtcbmltcG9ydCB0eXBlIENvbXBvbmVudENvbnRhaW5lciBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50Q29udGFpbmVyXCI7XG5pbXBvcnQgdHlwZSB7IE1hbmlmZXN0T3V0Ym91bmRFbnRyeSwgUm91dGluZ0NvbmZpZ3VyYXRpb24sIFJvdXRpbmdUYXJnZXQgfSBmcm9tIFwic2FwL3VpL2NvcmUvTWFuaWZlc3RcIjtcbmltcG9ydCB0eXBlIFZpZXcgZnJvbSBcInNhcC91aS9jb3JlL212Yy9WaWV3XCI7XG5pbXBvcnQgdHlwZSB7IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZVwiO1xuaW1wb3J0IHR5cGUgUm91dGVyIGZyb20gXCJzYXAvdWkvY29yZS9yb3V0aW5nL1JvdXRlclwiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQgfSBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCBTZXJ2aWNlIGZyb20gXCJzYXAvdWkvY29yZS9zZXJ2aWNlL1NlcnZpY2VcIjtcbmltcG9ydCBTZXJ2aWNlRmFjdG9yeSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIE9EYXRhTGlzdEJpbmRpbmcgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YUxpc3RCaW5kaW5nXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1ldGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTWV0YU1vZGVsXCI7XG5pbXBvcnQgdHlwZSBPRGF0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNb2RlbFwiO1xuaW1wb3J0IE9EYXRhVXRpbHMgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YVV0aWxzXCI7XG5pbXBvcnQgb3BlbldpbmRvdyBmcm9tIFwic2FwL3VpL3V0aWwvb3BlbldpbmRvd1wiO1xuaW1wb3J0IHR5cGUgQ29udGFpbmVyIGZyb20gXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgTmF2aWdhdGlvbiBmcm9tIFwic2FwL3VzaGVsbC9zZXJ2aWNlcy9OYXZpZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IFNlcnZpY2VDb250ZXh0IH0gZnJvbSBcInR5cGVzL21ldGFtb2RlbF90eXBlc1wiO1xuaW1wb3J0ICogYXMgTWV0YU1vZGVsQ29udmVydGVyIGZyb20gXCIuLi9jb252ZXJ0ZXJzL01ldGFNb2RlbENvbnZlcnRlclwiO1xuXG50eXBlIFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3MgPSB7fTtcbkBkZWZpbmVVSTVDbGFzcyhcInNhcC5mZS5jb3JlLnNlcnZpY2VzLlJvdXRpbmdTZXJ2aWNlRXZlbnRpbmdcIilcbmNsYXNzIFJvdXRpbmdTZXJ2aWNlRXZlbnRpbmcgZXh0ZW5kcyBFdmVudFByb3ZpZGVyIHtcblx0QGV2ZW50KClcblx0cm91dGVNYXRjaGVkITogRnVuY3Rpb247XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJSb3V0ZU1hdGNoZWQhOiBGdW5jdGlvbjtcbn1cblxuZXhwb3J0IHR5cGUgUm91dGluZ0V2ZW50UGFyYW1ldGVycyA9IFJvdXRlJE1hdGNoZWRFdmVudFBhcmFtZXRlcnMgJiB7XG5cdG5hdmlnYXRpb25JbmZvPzogeyByZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uIH07XG5cdHJvdXRlSW5mb3JtYXRpb24/OiB1bmtub3duO1xuXHRyb3V0ZVBhdHRlcm4/OiBzdHJpbmc7XG5cdGNvbmZpZzogeyBwYXR0ZXJuPzogc3RyaW5nIH07XG59O1xuXG5leHBvcnQgdHlwZSBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyA9XG5cdHwgeyBtb2RlOiBcIkFzeW5jXCI7IGNyZWF0ZUNvbnRleHRQcm9taXNlOiBQcm9taXNlPENvbnRleHQ+IH1cblx0fCB7IG1vZGU6IFwiRGVmZXJyZWRcIjsgbGlzdEJpbmRpbmc6IE9EYXRhTGlzdEJpbmRpbmc7IHBhcmVudENvbnRleHQ/OiBDb250ZXh0OyBkYXRhPzogb2JqZWN0IH07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uSW5mbyA9IHtcblx0Y3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM/OiBDcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycztcblx0YlRhcmdldEVkaXRhYmxlPzogYm9vbGVhbjtcblx0YlBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdGJTaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHR1c2VDb250ZXh0PzogQ29udGV4dDtcblx0cmVhc29uPzogTmF2aWdhdGlvblJlYXNvbjtcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG5cdGJBY3Rpb25DcmVhdGU/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge1xuXHRjaGVja05vSGFzaENoYW5nZT86IGJvb2xlYW47XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGVkaXRhYmxlPzogYm9vbGVhbjtcblx0dHJhbnNpZW50PzogYm9vbGVhbjtcblx0cGVyc2lzdE9QU2Nyb2xsPzogYm9vbGVhbjtcblx0RkNMTGV2ZWw/OiBudW1iZXI7XG5cdHVwZGF0ZUZDTExldmVsPzogbnVtYmVyO1xuXHRwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuO1xuXHRub1ByZXNlcnZhdGlvbkNhY2hlPzogYm9vbGVhbjtcblx0cmVjcmVhdGVDb250ZXh0PzogYm9vbGVhbjtcblx0Zm9yY2VGb2N1cz86IGJvb2xlYW47XG5cdHRhcmdldFBhdGg/OiBzdHJpbmc7XG5cdHNob3dQbGFjZWhvbGRlcj86IGJvb2xlYW47XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdGNhbGxFeHRlbnNpb24/OiBib29sZWFuO1xuXHRsYXlvdXQ/OiBzdHJpbmc7XG5cdGtlZXBDdXJyZW50TGF5b3V0PzogYm9vbGVhbjtcblx0bmF2TW9kZT86IHN0cmluZztcblx0cmVkaXJlY3RlZFRvTm9uRHJhZnQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nUGFyYW1ldGVyTWFwID0ge1xuXHRbazogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFNlbWFudGljTWFwcGluZyA9IHtcblx0c2VtYW50aWNQYXRoOiBzdHJpbmc7XG5cdHRlY2huaWNhbFBhdGg6IHN0cmluZztcbn07XG50eXBlIE1pbmltYWxQYWdlU2V0dGluZyA9IHtcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cdGVudGl0eVNldD86IHN0cmluZztcblx0ZnVsbENvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRuYXZpZ2F0aW9uPzogUmVjb3JkPHN0cmluZywgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24+O1xufTtcblxudHlwZSBJbnRlcm5hbFJvdXRlRGVmaW5pdGlvbiA9IHtcblx0bmFtZTogc3RyaW5nO1xuXHRwYXR0ZXJuOiBzdHJpbmc7XG5cdHRhcmdldHM6IHN0cmluZ1tdO1xuXHRyb3V0ZUxldmVsOiBudW1iZXI7XG59O1xuXG50eXBlIFJlc29sdmVkUGFyYW1ldGVycyA9IHsga2V5OiBzdHJpbmc7IHZhbHVlOiB1bmtub3duIH07XG5cbmV4cG9ydCBjbGFzcyBSb3V0aW5nU2VydmljZSBleHRlbmRzIFNlcnZpY2U8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4ge1xuXHRvQXBwQ29tcG9uZW50ITogQXBwQ29tcG9uZW50O1xuXG5cdG9Nb2RlbCE6IE9EYXRhTW9kZWw7XG5cblx0b01ldGFNb2RlbCE6IE9EYXRhTWV0YU1vZGVsO1xuXG5cdG9Sb3V0ZXIhOiBSb3V0ZXI7XG5cblx0b1JvdXRlclByb3h5ITogUm91dGVyUHJveHk7XG5cblx0ZXZlbnRQcm92aWRlciE6IEV2ZW50UHJvdmlkZXI7XG5cblx0aW5pdFByb21pc2UhOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPjtcblxuXHRvdXRib3VuZHMhOiBSZWNvcmQ8c3RyaW5nLCBNYW5pZmVzdE91dGJvdW5kRW50cnk+O1xuXG5cdF9tVGFyZ2V0cyE6IFJlY29yZDxzdHJpbmcsIFJvdXRpbmdUYXJnZXQ+O1xuXG5cdF9tUm91dGVzITogUmVjb3JkPHN0cmluZywgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24+O1xuXG5cdG9MYXN0U2VtYW50aWNNYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nO1xuXG5cdGJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3Q/OiBib29sZWFuO1xuXG5cdHNDdXJyZW50Um91dGVOYW1lPzogc3RyaW5nO1xuXG5cdHNDdXJyZW50Um91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXG5cdGFDdXJyZW50Vmlld3M/OiAoVmlldyB8IENvbXBvbmVudENvbnRhaW5lcilbXTtcblxuXHRuYXZpZ2F0aW9uSW5mb1F1ZXVlOiBSb3V0aW5nTmF2aWdhdGlvbkluZm9bXSA9IFtdO1xuXG5cdHNDb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRfZm5PblJvdXRlTWF0Y2hlZCE6IChldjogUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50KSA9PiB2b2lkO1xuXG5cdGVuYWJsZWQgPSBmYWxzZTtcblxuXHRyb3V0aW5nSGludHM/OiBSZWNvcmQ8c3RyaW5nLCB7IHBhcmVudE9mOiBzdHJpbmdbXSB9PjtcblxuXHRiaW5kaW5nQ2xlYW51cFByb21pc2VzOiBQcm9taXNlPHZvaWQ+W10gPSBbXTtcblxuXHRpbml0KCk6IHZvaWQge1xuXHRcdGNvbnN0IG9Db250ZXh0ID0gdGhpcy5nZXRDb250ZXh0KCk7XG5cdFx0aWYgKG9Db250ZXh0LnNjb3BlVHlwZSA9PT0gXCJjb21wb25lbnRcIikge1xuXHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50ID0gb0NvbnRleHQuc2NvcGVPYmplY3Q7XG5cdFx0XHR0aGlzLm9Nb2RlbCA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNb2RlbCgpO1xuXHRcdFx0dGhpcy5vTWV0YU1vZGVsID0gdGhpcy5vTW9kZWw/LmdldE1ldGFNb2RlbCgpO1xuXHRcdFx0dGhpcy5vUm91dGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlcigpO1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0Um91dGVyUHJveHkoKTtcblx0XHRcdHRoaXMuZXZlbnRQcm92aWRlciA9IG5ldyBSb3V0aW5nU2VydmljZUV2ZW50aW5nKCk7XG5cblx0XHRcdGNvbnN0IG9Sb3V0aW5nQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAudWk1XCIpLnJvdXRpbmc7XG5cdFx0XHR0aGlzLl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uKG9Sb3V0aW5nQ29uZmlnISk7XG5cblx0XHRcdGNvbnN0IG9BcHBDb25maWcgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TWFuaWZlc3RFbnRyeShcInNhcC5hcHBcIik7XG5cdFx0XHR0aGlzLm91dGJvdW5kcyA9IG9BcHBDb25maWcuY3Jvc3NOYXZpZ2F0aW9uPy5vdXRib3VuZHMgPz8ge307XG5cdFx0fVxuXG5cdFx0dGhpcy5pbml0UHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh0aGlzKTtcblx0fVxuXG5cdGJlZm9yZUV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5vUm91dGVyLmRldGFjaFJvdXRlTWF0Y2hlZCh0aGlzLl9mbk9uUm91dGVNYXRjaGVkLCB0aGlzKTtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZmlyZUV2ZW50KFwicm91dGVNYXRjaGVkXCIsIHt9KTtcblx0fVxuXG5cdGV4aXQoKTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdGFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZShwcm9taXNlOiBQcm9taXNlPHZvaWQ+KTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzLnB1c2gocHJvbWlzZSk7XG5cdH1cblxuXHRhc3luYyB3YWl0Rm9yQmluZGluZ0NsZWFudXAoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzKTtcblx0XHR0aGlzLmJpbmRpbmdDbGVhbnVwUHJvbWlzZXMgPSBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBQYXJzZSBhIG1hbmlmZXN0IHJvdXRpbmcgY29uZmlndXJhdGlvbiBmb3IgaW50ZXJuYWwgdXNhZ2UuXG5cdCAqIEBwYXJhbSBvUm91dGluZ0NvbmZpZyBUaGUgcm91dGluZyBjb25maWd1cmF0aW9uIGZyb20gdGhlIG1hbmlmZXN0XG5cdCAqL1xuXHRfcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZzogUm91dGluZ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcblx0XHRjb25zdCBpc0ZDTCA9IG9Sb3V0aW5nQ29uZmlnPy5jb25maWc/LnJvdXRlckNsYXNzID09PSBcInNhcC5mLnJvdXRpbmcuUm91dGVyXCI7XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiB0YXJnZXRzXG5cdFx0dGhpcy5fbVRhcmdldHMgPSB7fTtcblx0XHRpZiAob1JvdXRpbmdDb25maWc/LnRhcmdldHMpIHtcblx0XHRcdGZvciAoY29uc3Qgc1RhcmdldE5hbWUgb2YgT2JqZWN0LmtleXMob1JvdXRpbmdDb25maWcudGFyZ2V0cykpIHtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdID0gT2JqZWN0LmFzc2lnbih7IHRhcmdldE5hbWU6IHNUYXJnZXROYW1lIH0sIG9Sb3V0aW5nQ29uZmlnLnRhcmdldHNbc1RhcmdldE5hbWVdKTtcblxuXHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBGQ0wgY2FzZXMgaXMgY2FsY3VsYXRlZCBmcm9tIHRoZSB0YXJnZXQgcGF0dGVyblxuXHRcdFx0XHRjb25zdCBjb250ZXh0UGF0dGVybiA9IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0aWYgKGNvbnRleHRQYXR0ZXJuICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0udmlld0xldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oY29udGV4dFBhdHRlcm4sIDApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHRoaXMucm91dGluZ0hpbnRzID0ge307XG5cblx0XHQvLyBJbmZvcm1hdGlvbiBvZiByb3V0ZXNcblx0XHR0aGlzLl9tUm91dGVzID0ge307XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy5yb3V0ZXMpIHtcblx0XHRcdGZvciAoY29uc3Qgb1JvdXRlTWFuaWZlc3RJbmZvIG9mIG9Sb3V0aW5nQ29uZmlnLnJvdXRlcykge1xuXHRcdFx0XHRjb25zdCBhUm91dGVUYXJnZXRzID0gZ2V0Um91dGVUYXJnZXROYW1lcyhvUm91dGVNYW5pZmVzdEluZm8udGFyZ2V0KSxcblx0XHRcdFx0XHRzUm91dGVOYW1lID0gb1JvdXRlTWFuaWZlc3RJbmZvLm5hbWUsXG5cdFx0XHRcdFx0c1JvdXRlUGF0dGVybiA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5wYXR0ZXJuO1xuXHRcdFx0XHRpZiAoIXNSb3V0ZVBhdHRlcm4pIHtcblx0XHRcdFx0XHRjb250aW51ZTtcblx0XHRcdFx0fVxuXHRcdFx0XHQvLyBDaGVjayByb3V0ZSBwYXR0ZXJuOiBhbGwgcGF0dGVybnMgbmVlZCB0byBlbmQgd2l0aCAnOj9xdWVyeTonLCB0aGF0IHdlIHVzZSBmb3IgcGFyYW1ldGVyc1xuXHRcdFx0XHRpZiAoc1JvdXRlUGF0dGVybi5sZW5ndGggPCA4IHx8IHNSb3V0ZVBhdHRlcm4uaW5kZXhPZihcIjo/cXVlcnk6XCIpICE9PSBzUm91dGVQYXR0ZXJuLmxlbmd0aCAtIDgpIHtcblx0XHRcdFx0XHRMb2cud2FybmluZyhgUGF0dGVybiBmb3Igcm91dGUgJHtzUm91dGVOYW1lfSBkb2Vzbid0IGVuZCB3aXRoICc6P3F1ZXJ5OicgOiAke3NSb3V0ZVBhdHRlcm59YCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0Y29uc3QgaVJvdXRlTGV2ZWwgPSB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUm91dGVQYXR0ZXJuLCAwKTtcblx0XHRcdFx0dGhpcy5fbVJvdXRlc1tzUm91dGVOYW1lXSA9IHtcblx0XHRcdFx0XHRuYW1lOiBzUm91dGVOYW1lLFxuXHRcdFx0XHRcdHBhdHRlcm46IHNSb3V0ZVBhdHRlcm4sXG5cdFx0XHRcdFx0dGFyZ2V0czogYVJvdXRlVGFyZ2V0cyxcblx0XHRcdFx0XHRyb3V0ZUxldmVsOiBpUm91dGVMZXZlbFxuXHRcdFx0XHR9O1xuXG5cdFx0XHRcdC8vIEFkZCB0aGUgcGFyZW50IHRhcmdldHMgaW4gdGhlIGxpc3Qgb2YgdGFyZ2V0cyBmb3IgdGhlIHJvdXRlXG5cdFx0XHRcdGZvciAoY29uc3QgaXRlbSBvZiBhUm91dGVUYXJnZXRzKSB7XG5cdFx0XHRcdFx0Y29uc3Qgc1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1tpdGVtXS5wYXJlbnQ7XG5cdFx0XHRcdFx0aWYgKHNQYXJlbnRUYXJnZXROYW1lKSB7XG5cdFx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLnB1c2goc1BhcmVudFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnJvdXRlckhhc2hLZXlzID0gUm91dGVyUHJveHkuZXh0cmFjdEVudGl0eVNldHNGcm9tSGFzaChzUm91dGVQYXR0ZXJuLnNwbGl0KFwiOj9xdWVyeTpcIilbMF0pO1xuXG5cdFx0XHRcdGlmICghaXNGQ0wpIHtcblx0XHRcdFx0XHQvLyBWaWV3IGxldmVsIGZvciBub24tRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgcm91dGUgcGF0dGVyblxuXHRcdFx0XHRcdGNvbnN0IHZpZXdMZXZlbCA9IHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbDtcblx0XHRcdFx0XHRpZiAodmlld0xldmVsID09PSB1bmRlZmluZWQgfHwgdmlld0xldmVsIDwgaVJvdXRlTGV2ZWwpIHtcblx0XHRcdFx0XHRcdC8vIFRoZXJlIGFyZSBjYXNlcyB3aGVuIGRpZmZlcmVudCByb3V0ZXMgcG9pbnQgdG8gdGhlIHNhbWUgdGFyZ2V0LiBXZSB0YWtlIHRoZVxuXHRcdFx0XHRcdFx0Ly8gbGFyZ2VzdCB2aWV3TGV2ZWwgaW4gdGhhdCBjYXNlLlxuXHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0udmlld0xldmVsID0gaVJvdXRlTGV2ZWw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRkNMIGxldmVsIGZvciBub24tRkNMIGNhc2VzIGlzIGVxdWFsIHRvIC0xXG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uRkNMTGV2ZWwgPSAtMTtcblx0XHRcdFx0fSBlbHNlIGlmIChhUm91dGVUYXJnZXRzLmxlbmd0aCA9PT0gMSAmJiB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5jb250cm9sQWdncmVnYXRpb24gIT09IFwiYmVnaW5Db2x1bW5QYWdlc1wiKSB7XG5cdFx0XHRcdFx0Ly8gV2UncmUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlcmUncyBvbmx5IDEgdGFyZ2V0IGZvciB0aGUgcm91dGUsIGFuZCBpdCdzIG5vdCBpbiB0aGUgZmlyc3QgY29sdW1uXG5cdFx0XHRcdFx0Ly8gLS0+IHRoaXMgaXMgYSBmdWxsc2NyZWVuIGNvbHVtbiBhZnRlciBhbGwgY29sdW1ucyBpbiB0aGUgRkNMIGhhdmUgYmVlbiB1c2VkXG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uRkNMTGV2ZWwgPSAzO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIE90aGVyIEZDTCBjYXNlc1xuXHRcdFx0XHRcdGFSb3V0ZVRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWUpID0+IHtcblx0XHRcdFx0XHRcdHN3aXRjaCAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbikge1xuXHRcdFx0XHRcdFx0XHRjYXNlIFwiYmVnaW5Db2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDA7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0Y2FzZSBcIm1pZENvbHVtblBhZ2VzXCI6XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsID0gMTtcblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcm9wYWdhdGUgdmlld0xldmVsLCBjb250ZXh0UGF0dGVybiwgRkNMTGV2ZWwgYW5kIGNvbnRyb2xBZ2dyZWdhdGlvbiB0byBwYXJlbnQgdGFyZ2V0c1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKChzVGFyZ2V0TmFtZTogc3RyaW5nKSA9PiB7XG5cdFx0XHRsZXQgc1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ucGFyZW50O1xuXHRcdFx0d2hpbGUgKHNQYXJlbnRUYXJnZXROYW1lKSB7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS52aWV3TGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbDtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm4gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5GQ0xMZXZlbCB8fCB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gPVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24gfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLmNvbnRyb2xBZ2dyZWdhdGlvbjtcblx0XHRcdFx0c1RhcmdldE5hbWUgPSBzUGFyZW50VGFyZ2V0TmFtZTtcblx0XHRcdFx0c1BhcmVudFRhcmdldE5hbWUgPSB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ucGFyZW50O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIHRoZSByb290IGVudGl0eSBmb3IgdGhlIGFwcFxuXHRcdGNvbnN0IGFMZXZlbDBSb3V0ZU5hbWVzID0gW107XG5cdFx0Y29uc3QgYUxldmVsMVJvdXRlTmFtZXMgPSBbXTtcblx0XHRsZXQgc0RlZmF1bHRSb3V0ZU5hbWU7XG5cblx0XHRmb3IgKGNvbnN0IHNOYW1lIGluIHRoaXMuX21Sb3V0ZXMpIHtcblx0XHRcdGNvbnN0IGlMZXZlbCA9IHRoaXMuX21Sb3V0ZXNbc05hbWVdLnJvdXRlTGV2ZWw7XG5cdFx0XHRpZiAoaUxldmVsID09PSAwKSB7XG5cdFx0XHRcdGFMZXZlbDBSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fSBlbHNlIGlmIChpTGV2ZWwgPT09IDEpIHtcblx0XHRcdFx0YUxldmVsMVJvdXRlTmFtZXMucHVzaChzTmFtZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGFMZXZlbDBSb3V0ZU5hbWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0c0RlZmF1bHRSb3V0ZU5hbWUgPSBhTGV2ZWwwUm91dGVOYW1lc1swXTtcblx0XHR9IGVsc2UgaWYgKGFMZXZlbDFSb3V0ZU5hbWVzLmxlbmd0aCA9PT0gMSkge1xuXHRcdFx0c0RlZmF1bHRSb3V0ZU5hbWUgPSBhTGV2ZWwxUm91dGVOYW1lc1swXTtcblx0XHR9XG5cblx0XHRpZiAoc0RlZmF1bHRSb3V0ZU5hbWUpIHtcblx0XHRcdGNvbnN0IHNEZWZhdWx0VGFyZ2V0TmFtZSA9IHRoaXMuX21Sb3V0ZXNbc0RlZmF1bHRSb3V0ZU5hbWVdLnRhcmdldHMuc2xpY2UoLTEpWzBdO1xuXHRcdFx0dGhpcy5zQ29udGV4dFBhdGggPSBcIlwiO1xuXHRcdFx0Y29uc3Qgb1NldHRpbmdzID0gdGhpcy5fbVRhcmdldHNbc0RlZmF1bHRUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncyBhcyBNaW5pbWFsUGFnZVNldHRpbmcgfCB1bmRlZmluZWQ7XG5cdFx0XHRpZiAob1NldHRpbmdzKSB7XG5cdFx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gb1NldHRpbmdzLmNvbnRleHRQYXRoIHx8IGAvJHtvU2V0dGluZ3MuZW50aXR5U2V0fWA7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIXRoaXMuc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdGBDYW5ub3QgZGV0ZXJtaW5lIGRlZmF1bHQgY29udGV4dFBhdGg6IGNvbnRleHRQYXRoIG9yIGVudGl0eVNldCBtaXNzaW5nIGluIGRlZmF1bHQgdGFyZ2V0OiAke3NEZWZhdWx0VGFyZ2V0TmFtZX1gXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdExvZy53YXJuaW5nKFwiQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBubyBkZWZhdWx0IHJvdXRlIGZvdW5kLlwiKTtcblx0XHR9XG5cblx0XHQvLyBXZSBuZWVkIHRvIGVzdGFibGlzaCB0aGUgY29ycmVjdCBwYXRoIHRvIHRoZSBkaWZmZXJlbnQgcGFnZXMsIGluY2x1ZGluZyB0aGUgbmF2aWdhdGlvbiBwcm9wZXJ0aWVzXG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpXG5cdFx0XHQubWFwKChzVGFyZ2V0S2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX21UYXJnZXRzW3NUYXJnZXRLZXldO1xuXHRcdFx0fSlcblx0XHRcdC5zb3J0KChhOiBSb3V0aW5nVGFyZ2V0LCBiOiBSb3V0aW5nVGFyZ2V0KSA9PiB7XG5cdFx0XHRcdHJldHVybiBhLnZpZXdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGIudmlld0xldmVsICE9PSB1bmRlZmluZWQgJiYgYS52aWV3TGV2ZWwgPCBiLnZpZXdMZXZlbCA/IC0xIDogMTtcblx0XHRcdH0pXG5cdFx0XHQuZm9yRWFjaCgodGFyZ2V0OiBSb3V0aW5nVGFyZ2V0KSA9PiB7XG5cdFx0XHRcdC8vIEFmdGVyIHNvcnRpbmcgdGhlIHRhcmdldHMgcGVyIGxldmVsIHdlIGNhbiB0aGVuIGdvIHRocm91Z2ggdGhlaXIgbmF2aWdhdGlvbiBvYmplY3QgYW5kIHVwZGF0ZSB0aGUgcGF0aHMgYWNjb3JkaW5nbHkuXG5cdFx0XHRcdGlmICh0YXJnZXQub3B0aW9ucykge1xuXHRcdFx0XHRcdGNvbnN0IHNldHRpbmdzID0gdGFyZ2V0Lm9wdGlvbnMuc2V0dGluZ3MgYXMgTWluaW1hbFBhZ2VTZXR0aW5nO1xuXHRcdFx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IHNldHRpbmdzLmNvbnRleHRQYXRoIHx8IChzZXR0aW5ncy5lbnRpdHlTZXQgPyBgLyR7c2V0dGluZ3MuZW50aXR5U2V0fWAgOiBcIlwiKTtcblx0XHRcdFx0XHRpZiAoIXNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCAmJiBzQ29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCA9IGAke3NDb250ZXh0UGF0aH0vYDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcGFyZW50T2Y6IHN0cmluZ1tdID0gW107XG5cdFx0XHRcdFx0aWYgKHRhcmdldC5yb3V0ZXJIYXNoS2V5cz8uWzBdKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnJvdXRpbmdIaW50cyFbdGFyZ2V0LnJvdXRlckhhc2hLZXlzPy5bMF1dID0geyBwYXJlbnRPZjogcGFyZW50T2YgfTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0T2JqZWN0LmtleXMoc2V0dGluZ3MubmF2aWdhdGlvbiB8fCB7fSkuZm9yRWFjaCgoc05hdk5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgaWYgaXQncyBhIG5hdmlnYXRpb24gcHJvcGVydHlcblx0XHRcdFx0XHRcdGlmICh0YXJnZXQubmFtZSA9PT0gXCJzYXAuZmUudGVtcGxhdGVzLkxpc3RSZXBvcnRcIikge1xuXHRcdFx0XHRcdFx0XHRwYXJlbnRPZi5wdXNoKHNOYXZOYW1lKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGNvbnN0IHRhcmdldFJvdXRlID0gdGhpcy5fbVJvdXRlc1tzZXR0aW5ncy5uYXZpZ2F0aW9uIVtzTmF2TmFtZV0uZGV0YWlsPy5yb3V0ZV07XG5cblx0XHRcdFx0XHRcdGlmICh0YXJnZXRSb3V0ZSAmJiB0YXJnZXRSb3V0ZS50YXJnZXRzKSB7XG5cdFx0XHRcdFx0XHRcdHRhcmdldFJvdXRlLnRhcmdldHMuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncyAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0IXRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zPy5zZXR0aW5ncz8uZnVsbENvbnRleHRQYXRoXG5cdFx0XHRcdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAodGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5jb250ZXh0UGF0aCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5jb250ZXh0UGF0aCArIFwiL1wiO1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICh0YXJnZXQudmlld0xldmVsID09PSAwKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KHNOYXZOYW1lLnN0YXJ0c1dpdGgoXCIvXCIpID8gXCJcIiA6IFwiL1wiKSArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuZnVsbENvbnRleHRQYXRoID0gYCR7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0c2V0dGluZ3MuZnVsbENvbnRleHRQYXRoICsgc05hdk5hbWVcblx0XHRcdFx0XHRcdFx0XHRcdFx0fS9gO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIENhbGN1bGF0ZXMgYSB2aWV3IGxldmVsIGZyb20gYSBwYXR0ZXJuIGJ5IGNvdW50aW5nIHRoZSBudW1iZXIgb2Ygc2VnbWVudHMuXG5cdCAqIEBwYXJhbSBzUGF0dGVybiBUaGUgcGF0dGVyblxuXHQgKiBAcGFyYW0gdmlld0xldmVsIFRoZSBjdXJyZW50IGxldmVsIG9mIHZpZXdcblx0ICogQHJldHVybnMgVGhlIGxldmVsXG5cdCAqL1xuXHRfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm46IHN0cmluZywgdmlld0xldmVsOiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShcIjo/cXVlcnk6XCIsIFwiXCIpO1xuXHRcdGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cChcIi9bXi9dKiRcIik7XG5cdFx0aWYgKHNQYXR0ZXJuICYmIHNQYXR0ZXJuWzBdICE9PSBcIi9cIiAmJiBzUGF0dGVyblswXSAhPT0gXCI/XCIpIHtcblx0XHRcdHNQYXR0ZXJuID0gYC8ke3NQYXR0ZXJufWA7XG5cdFx0fVxuXHRcdGlmIChzUGF0dGVybi5sZW5ndGgpIHtcblx0XHRcdHNQYXR0ZXJuID0gc1BhdHRlcm4ucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0XHRpZiAodGhpcy5vUm91dGVyLm1hdGNoKHNQYXR0ZXJuKSB8fCBzUGF0dGVybiA9PT0gXCJcIikge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sICsrdmlld0xldmVsKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9nZXRWaWV3TGV2ZWxGcm9tUGF0dGVybihzUGF0dGVybiwgdmlld0xldmVsKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHZpZXdMZXZlbDtcblx0XHR9XG5cdH1cblxuXHRfZ2V0Um91dGVJbmZvcm1hdGlvbihzUm91dGVOYW1lPzogc3RyaW5nKTogSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gfCB1bmRlZmluZWQge1xuXHRcdGlmIChzUm91dGVOYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tUm91dGVzW3NSb3V0ZU5hbWVdO1xuXHR9XG5cblx0X2dldFRhcmdldEluZm9ybWF0aW9uKHNUYXJnZXROYW1lPzogc3RyaW5nKTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHNUYXJnZXROYW1lID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV07XG5cdH1cblxuXHRfZ2V0Q29tcG9uZW50SWQoc093bmVySWQ6IHN0cmluZywgc0NvbXBvbmVudElkOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdGlmIChzQ29tcG9uZW50SWQuaW5kZXhPZihgJHtzT3duZXJJZH0tLS1gKSA9PT0gMCkge1xuXHRcdFx0cmV0dXJuIHNDb21wb25lbnRJZC5zdWJzdHJpbmcoc093bmVySWQubGVuZ3RoICsgMyk7XG5cdFx0fVxuXHRcdHJldHVybiBzQ29tcG9uZW50SWQ7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRhcmdldCBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiBjb21wb25lbnQuXG5cdCAqIEBwYXJhbSBjb21wb25lbnRPclZpZXcgSW5zdGFuY2Ugb2YgdGhlIGNvbXBvbmVudCBvciB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBjb25maWd1cmF0aW9uIGZvciB0aGUgdGFyZ2V0XG5cdCAqL1xuXHRnZXRUYXJnZXRJbmZvcm1hdGlvbkZvcihjb21wb25lbnRPclZpZXc6IENvbXBvbmVudCB8IFZpZXcpOiBSb3V0aW5nVGFyZ2V0IHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBjb3JyZWN0VGFyZ2V0TmFtZSA9IHRoaXMuZ2V0VGFyZ2V0TmFtZShjb21wb25lbnRPclZpZXcpO1xuXHRcdHJldHVybiB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihjb3JyZWN0VGFyZ2V0TmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYWdlIHNob3duIGluIHRoZSB2aWV3IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvbi5cblx0ICogQHBhcmFtIGNvbXBvbmVudE9yVmlld1xuXHQgKiBAcmV0dXJucyBUaGUgbmFtZSBvZiB0aGUgcGFnZVxuXHQgKi9cblx0Z2V0VGFyZ2V0TmFtZShjb21wb25lbnRPclZpZXc6IENvbXBvbmVudCB8IFZpZXcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHRhcmdldENvbXBvbmVudElkID0gdGhpcy5fZ2V0Q29tcG9uZW50SWQoXG5cdFx0XHQoY29tcG9uZW50T3JWaWV3IGFzIHVua25vd24gYXMgeyBfc093bmVySWQ6IHN0cmluZyB9KS5fc093bmVySWQsXG5cdFx0XHRjb21wb25lbnRPclZpZXcuZ2V0SWQoKVxuXHRcdCk7XG5cdFx0bGV0IGNvcnJlY3RUYXJnZXROYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cdFx0T2JqZWN0LmtleXModGhpcy5fbVRhcmdldHMpLmZvckVhY2goKHRhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW3RhcmdldE5hbWVdLmlkID09PSB0YXJnZXRDb21wb25lbnRJZCB8fCB0aGlzLl9tVGFyZ2V0c1t0YXJnZXROYW1lXS52aWV3SWQgPT09IHRhcmdldENvbXBvbmVudElkKSB7XG5cdFx0XHRcdGNvcnJlY3RUYXJnZXROYW1lID0gdGFyZ2V0TmFtZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gY29ycmVjdFRhcmdldE5hbWU7XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBuYW1lIG9mIHRoZSBwYWdlIHNob3duIGluIHRoZSB2aWV3IGFzIGRlZmluZWQgaW4gdGhlIG1hbmlmZXN0IHJvdXRpbmcgc2VjdGlvbi5cblx0ICogQHBhcmFtIHZpZXdcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHBhZ2Vcblx0ICovXG5cdGdldFRhcmdldE5hbWVGb3JWaWV3KHZpZXc6IFZpZXcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IHBhZ2VDb21wb25lbnQgPSBDb21wb25lbnQuZ2V0T3duZXJDb21wb25lbnRGb3Iodmlldyk7XG5cdFx0bGV0IHRhcmdldE5hbWUgPSBwYWdlQ29tcG9uZW50ID8gdGhpcy5nZXRUYXJnZXROYW1lKHBhZ2VDb21wb25lbnQpIDogdW5kZWZpbmVkO1xuXHRcdGlmICghdGFyZ2V0TmFtZSkge1xuXHRcdFx0dGFyZ2V0TmFtZSA9IHRoaXMuZ2V0VGFyZ2V0TmFtZSh2aWV3KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRhcmdldE5hbWU7XG5cdH1cblxuXHRnZXRMYXN0U2VtYW50aWNNYXBwaW5nKCk6IFNlbWFudGljTWFwcGluZyB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmc7XG5cdH1cblxuXHRzZXRMYXN0U2VtYW50aWNNYXBwaW5nKG9NYXBwaW5nPzogU2VtYW50aWNNYXBwaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5vTGFzdFNlbWFudGljTWFwcGluZyA9IG9NYXBwaW5nO1xuXHR9XG5cblx0YXN5bmMgZ2V0SGFzaEZyb21Sb3V0ZShjb250ZXh0OiBDb250ZXh0LCByb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsIHBhcmFtZXRlck1hcHBpbmc/OiB1bmtub3duKTogUHJvbWlzZTxzdHJpbmc+IHtcblx0XHRpZiAoIXRoaXMuZW5hYmxlZCkge1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShcIlwiKTtcblx0XHR9XG5cdFx0bGV0IHRhcmdldFVSTFByb21pc2U6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPjtcblx0XHRpZiAoIXBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHRhcmdldFVSTFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKGNvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMocGFyYW1ldGVyTWFwcGluZyBhcyBSb3V0aW5nUGFyYW1ldGVyTWFwLCByb3V0ZU5hbWUsIGNvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChwYXJhbWV0ZXJzOiBvYmplY3QgfCB1bmRlZmluZWQpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5vUm91dGVyLmdldFVSTChyb3V0ZU5hbWUhLCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIChhd2FpdCB0YXJnZXRVUkxQcm9taXNlKSBhcyBzdHJpbmc7XG5cdH1cblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogZmFsc2Vcblx0KTogUHJvbWlzZTx2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogdHJ1ZVxuXHQpOiBQcm9taXNlPCgpID0+IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTwoKCkgPT4gdm9pZCkgfCB2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcblx0XHR9XG5cdFx0bGV0IHNUYXJnZXRVUkxQcm9taXNlLCBiSXNTdGlja3lNb2RlOiBib29sZWFuO1xuXHRcdGlmIChvQ29udGV4dC5nZXRNb2RlbCgpICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsICYmIG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpIHtcblx0XHRcdGJJc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQob0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKSk7XG5cdFx0fVxuXHRcdGlmICghbVBhcmFtZXRlck1hcHBpbmcpIHtcblx0XHRcdC8vIGlmIHRoZXJlIGlzIG5vIHBhcmFtZXRlciBtYXBwaW5nIGRlZmluZSB0aGlzIG1lYW4gd2UgcmVseSBlbnRpcmVseSBvbiB0aGUgYmluZGluZyBjb250ZXh0IHBhdGhcblx0XHRcdHNUYXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvQ29udGV4dCkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IHRoaXMucHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlck1hcHBpbmcgYXMgUm91dGluZ1BhcmFtZXRlck1hcCwgc1JvdXRlTmFtZSwgb0NvbnRleHQpLnRoZW4oXG5cdFx0XHRcdChtUGFyYW1ldGVyczogb2JqZWN0IHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlci5nZXRVUkwoc1JvdXRlTmFtZSEsIG1QYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0Y29uc3QgdGFyZ2V0VXJsID0gYXdhaXQgc1RhcmdldFVSTFByb21pc2U7XG5cdFx0Y29uc3QgbmF2aWdhdGVGdW5jdGlvbiA9ICgpOiB2b2lkID0+IHtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5Lm5hdlRvSGFzaCh0YXJnZXRVcmwhLCBiUHJlc2VydmVIaXN0b3J5LCBmYWxzZSwgZmFsc2UsICFiSXNTdGlja3lNb2RlKTtcblx0XHR9O1xuXHRcdGlmIChkZWxheWVkVXNhZ2UgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0ZUZ1bmN0aW9uOyAvLyB3cm9uZyBidXQgc29tZWhvdyB0aGUgdHlwZXMgYXJlIGFubm95aW5nXG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBuYXZpZ2F0ZUZ1bmN0aW9uKCk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIE1ldGhvZCB0byByZXR1cm4gYSBtYXAgb2Ygcm91dGluZyB0YXJnZXQgcGFyYW1ldGVycyB3aGVyZSB0aGUgYmluZGluZyBzeW50YXggaXMgcmVzb2x2ZWQgdG8gdGhlIGN1cnJlbnQgbW9kZWwuXG5cdCAqIEBwYXJhbSBtUGFyYW1ldGVycyBQYXJhbWV0ZXJzIG1hcCBpbiB0aGUgZm9ybWF0IFtrOiBzdHJpbmddIDogQ29tcGxleEJpbmRpbmdTeW50YXhcblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZSBOYW1lIG9mIHRoZSB0YXJnZXQgcm91dGVcblx0ICogQHBhcmFtIG9Db250ZXh0IFRoZSBpbnN0YW5jZSBvZiB0aGUgYmluZGluZyBjb250ZXh0XG5cdCAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCByZXNvbHZlcyB0byB0aGUgcm91dGluZyB0YXJnZXQgcGFyYW1ldGVyc1xuXHQgKi9cblx0YXN5bmMgcHJlcGFyZVBhcmFtZXRlcnMobVBhcmFtZXRlcnM6IFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNUYXJnZXRSb3V0ZTogc3RyaW5nIHwgbnVsbCwgb0NvbnRleHQ6IENvbnRleHQpOiBQcm9taXNlPG9iamVjdD4ge1xuXHRcdGxldCBvUGFyYW1ldGVyc1Byb21pc2U7XG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IHNDb250ZXh0UGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblx0XHRcdGNvbnN0IG9NZXRhTW9kZWw6IE9EYXRhTWV0YU1vZGVsID0gb0NvbnRleHQuZ2V0TW9kZWwoKS5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdGNvbnN0IGFDb250ZXh0UGF0aFBhcnRzID0gc0NvbnRleHRQYXRoLnNwbGl0KFwiL1wiKTtcblx0XHRcdGNvbnN0IGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzID0gT2JqZWN0LmtleXMobVBhcmFtZXRlcnMpLm1hcChhc3luYyAoc1BhcmFtZXRlcktleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNQYXJhbWV0ZXJNYXBwaW5nRXhwcmVzc2lvbiA9IG1QYXJhbWV0ZXJzW3NQYXJhbWV0ZXJLZXldO1xuXHRcdFx0XHQvLyBXZSBhc3N1bWUgdGhlIGRlZmluZWQgcGFyYW1ldGVycyB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBhIGJpbmRpbmcgZXhwcmVzc2lvblxuXHRcdFx0XHRjb25zdCBvUGFyc2VkRXhwcmVzc2lvbiA9IEJpbmRpbmdQYXJzZXIuY29tcGxleFBhcnNlcihzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoYXN5bmMgZnVuY3Rpb24gKG9QYXRoUGFydDogUHJvcGVydHlCaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IGFSZWxhdGl2ZVBhcnRzID0gb1BhdGhQYXJ0LnBhdGguc3BsaXQoXCIuLi9cIik7XG5cdFx0XHRcdFx0Ly8gV2UgZ28gdXAgdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0Y29uc3QgYUxvY2FsUGFydHMgPSBhQ29udGV4dFBhdGhQYXJ0cy5zbGljZSgwLCBhQ29udGV4dFBhdGhQYXJ0cy5sZW5ndGggLSBhUmVsYXRpdmVQYXJ0cy5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRjb25zdCBsb2NhbENvbnRleHRQYXRoID0gYUxvY2FsUGFydHMuam9pbihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0ID1cblx0XHRcdFx0XHRcdGxvY2FsQ29udGV4dFBhdGggPT09IG9Db250ZXh0LmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0XHQ/IG9Db250ZXh0XG5cdFx0XHRcdFx0XHRcdDogb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChsb2NhbENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobG9jYWxDb250ZXh0UGF0aCArIFwiL1wiICsgYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0XHRcdHJldHVybiBsb2NhbENvbnRleHQucmVxdWVzdFByb3BlcnR5KGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKS50aGVuKGZ1bmN0aW9uIChvVmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBvTWV0YUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IG9Qcm9wZXJ0eUluZm8uJFR5cGU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG9WYWx1ZSwgc0VkbVR5cGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMpLnRoZW4oKGFSZXNvbHZlZFBhcmFtZXRlcnM6IFByb3BlcnR5QmluZGluZ0luZm8pID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9QYXJzZWRFeHByZXNzaW9uLmZvcm1hdHRlclxuXHRcdFx0XHRcdFx0PyBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXIuYXBwbHkodGhpcywgYVJlc29sdmVkUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdDogYVJlc29sdmVkUGFyYW1ldGVycy5qb2luKFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybiB7IGtleTogc1BhcmFtZXRlcktleSwgdmFsdWU6IHZhbHVlIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UuYWxsKGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcnNbXSkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVzb2x2ZWRQYXJhbWV0ZXI6IFJlc29sdmVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzW29SZXNvbHZlZFBhcmFtZXRlci5rZXldID0gb1Jlc29sdmVkUGFyYW1ldGVyLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgJHtzVGFyZ2V0Um91dGV9YCk7XG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtZXRlcnNQcm9taXNlO1xuXHR9XG5cblx0X2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzOiBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzID0gW107XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdEVkaXRTdGF0ZS5jbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSgpOyAvLyBSZXNldCBVSSBzdGF0ZSB3aGVuIGFsbCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVmcmVzaGVkXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvLCBvciB0aGUgbGlzdCBiaW5kaW5nIGZvciBjcmVhdGlvbiAoZGVmZXJyZWQgY3JlYXRpb24pXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwsIG1hcCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlXSBOYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSBVUkxcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJEZWZlcnJlZENvbnRleHRdIFRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgZGVmZXJyZWQgYXQgdGhlIHRhcmdldCBwYWdlXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5lZGl0YWJsZV0gVGhlIHRhcmdldCBwYWdlIHNoYWxsIGJlIGltbWVkaWF0ZWx5IGluIHRoZSBlZGl0IG1vZGUgdG8gYXZvaWQgZmxpY2tlcmluZ1xuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbF0gYCsxYCBpZiB3ZSBhZGQgYSBjb2x1bW4gaW4gRkNMLCBgLTFgIHRvIHJlbW92ZSBhIGNvbHVtbiwgMCB0byBzdGF5IG9uIHRoZSBzYW1lIGNvbHVtblxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJSZWNyZWF0ZUNvbnRleHRdIEZvcmNlIHJlLWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRm9yY2VGb2N1c10gRm9yY2VzIGZvY3VzIHNlbGVjdGlvbiBhZnRlciBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbdmlld0RhdGFdIFZpZXcgZGF0YVxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhLm5hdmlnYXRpb25dXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm9dIFRoZSB0YXJnZXQgaW5mb3JtYXRpb24gZnJvbSB3aGljaCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIFtjdXJyZW50VGFyZ2V0SW5mby5uYW1lXVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb0NvbnRleHQoXG5cdFx0Y29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30sXG5cdFx0dmlld0RhdGE/OiB7IG5hdmlnYXRpb24/OiBvYmplY3QgfSxcblx0XHRjdXJyZW50VGFyZ2V0SW5mbz86IHsgbmFtZTogc3RyaW5nIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCB0YXJnZXRSb3V0ZSA9IFwiXCI7XG5cdFx0bGV0IHJvdXRlUGFyYW1ldGVyc1Byb21pc2U6IFByb21pc2U8b2JqZWN0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQodGhpcy5vTWV0YU1vZGVsKTtcblxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChwYXJhbWV0ZXJzPy50YXJnZXRQYXRoICYmIHZpZXdEYXRhPy5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHZpZXdEYXRhLm5hdmlnYXRpb24gYXMgUmVjb3JkPHN0cmluZywgeyBkZXRhaWw6IHsgcm91dGU6IHN0cmluZzsgcGFyYW1ldGVyczogb2JqZWN0IH0gfT47XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBuYXZpZ2F0aW9uSW5mb1twYXJhbWV0ZXJzLnRhcmdldFBhdGhdLmRldGFpbDtcblx0XHRcdHRhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgJiYgY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRyb3V0ZVBhcmFtZXRlcnNQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvUm91dGVEZXRhaWwucGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFx0dGFyZ2V0Um91dGUsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmF2aWdhdGlvbiBnb2VzIHdpdGggYSBjcmVhdGlvbiwgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoIChleHBlY3RpbmcgY29udGV4dCBpcyBhbiBPRGF0YUxpc3RCaW5kaW5nKVxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycykge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gXCIoLi4uKVwiO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBsYXlvdXQgcGFyYW1ldGVyIGlmIG5lZWRlZFxuXHRcdGNvbnN0IHNMYXlvdXQgPSB0aGlzLl9jYWxjdWxhdGVMYXlvdXQoc1RhcmdldFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke3NMYXlvdXR9YDtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZm9yIGxhdGVyIHVzYWdlXG5cdFx0Y29uc3Qgb05hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVyczogcGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogcGFyYW1ldGVycz8uZWRpdGFibGUsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBwYXJhbWV0ZXJzPy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnM/LnNob3dQbGFjZWhvbGRlciA6IHRydWUsXG5cdFx0XHRyZWFzb246IHBhcmFtZXRlcnM/LnJlYXNvbixcblx0XHRcdHJlZGlyZWN0ZWRUb05vbkRyYWZ0OiBwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0XG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzPy51cGRhdGVGQ0xMZXZlbCAhPT0gLTEgJiYgcGFyYW1ldGVycz8ucmVjcmVhdGVDb250ZXh0ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRvTmF2aWdhdGlvbkluZm8udXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IHJvdXRlSW5mb0J5SGFzaCA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0bGV0IG1FdmVudFBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSB7IGNvbmZpZzoge30gfTtcblx0XHRcdFx0aWYgKHJvdXRlSW5mb0J5SGFzaCkge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMgPSB7IC4uLnJvdXRlSW5mb0J5SGFzaCwgY29uZmlnOiB7fSB9O1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhcGFyYW1ldGVycy5mb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgISFwYXJhbWV0ZXJzLmVkaXRhYmxlICYmICFzVGFyZ2V0UGF0aC5pbmNsdWRlcyhcIiguLi4pXCIpKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiJmktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1RhcmdldFBhdGggKz0gXCI/aS1hY3Rpb249Y3JlYXRlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubmF2TW9kZSA9PT0gXCJvcGVuSW5OZXdUYWJcIikge1xuXHRcdFx0Ly8gTmF2aWdhdGUgdG8gbmV3IHRhYi8gd2luZG93XG5cdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiXSwgYXN5bmMgKENvbnRhaW5lcjogQ29udGFpbmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHBhcnNlZFVybCA9IHNoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2UgPSAoYXdhaXQgQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIk5hdmlnYXRpb25cIikpIGFzIE5hdmlnYXRpb247XG5cdFx0XHRcdGNvbnN0IGhyZWYgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5nZXRIcmVmKHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBwYXJzZWRVcmwuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHBhcnNlZFVybC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogcGFyc2VkVXJsLnBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lID0gYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldEluZnJhbWVVcmwoKTtcblx0XHRcdFx0bGV0IHVybCwgdGFyZ2V0VXJsOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUpIHtcblx0XHRcdFx0XHR1cmwgPSBuZXcgVVJMKGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSk7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lLnJlcGxhY2UodXJsLmhhc2gsIGAke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYCR7dXJsLm9yaWdpbn0ke3VybC5wYXRobmFtZX0ke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVuV2luZG93KHRhcmdldFVybCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHN0YWxlIGVycm9yIG1lc3NhZ2VzIGZyb20gTFIgYXJlIG5vdCBzaG93biB0byB0aGUgdXNlciBhZnRlciBuYXZpZ2F0aW9uIHRvIE9QLlxuXHRcdFx0aWYgKGN1cnJlbnRUYXJnZXRJbmZvPy5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb3V0ZUluZm8gPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNUYXJnZXRQYXRoKTtcblx0XHRcdFx0aWYgKG9Sb3V0ZUluZm8pIHtcblx0XHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0ZSAmJiBvUm91dGUudGFyZ2V0cyAmJiBvUm91dGUudGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTGFzdFRhcmdldE5hbWUgPSBvUm91dGUudGFyZ2V0c1tvUm91dGUudGFyZ2V0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgb1RhcmdldC5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBxdWV1ZVxuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnB1c2gob05hdmlnYXRpb25JbmZvKTtcblxuXHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UudGhlbigob1JvdXRlUGFyYW1ldGVyczogb2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvUm91dGVQYXJhbWV0ZXJzLCB7IGJJc1N0aWNreU1vZGU6IGlzU3RpY2t5TW9kZSB9KTtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8odGFyZ2V0Um91dGUsIG9Sb3V0ZVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQubmF2VG9IYXNoKFxuXHRcdFx0XHRcdHNUYXJnZXRQYXRoLFxuXHRcdFx0XHRcdCEhcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnksXG5cdFx0XHRcdFx0cGFyYW1ldGVycz8ubm9QcmVzZXJ2YXRpb25DYWNoZSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5mb3JjZUZvY3VzLFxuXHRcdFx0XHRcdCFpc1N0aWNreU1vZGVcblx0XHRcdFx0KVxuXHRcdFx0XHQudGhlbigoYk5hdmlnYXRlZCkgPT4ge1xuXHRcdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5wb3AoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlXG5cdCAqIEBwYXJhbSBvUm91dGVQYXJhbWV0ZXJzLnByZXNlcnZlSGlzdG9yeVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoXG5cdFx0c1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLFxuXHRcdG9Sb3V0ZVBhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuOyBwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcodW5kZWZpbmVkKTtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKFxuXHRcdFx0c1RhcmdldFVSTCEsXG5cdFx0XHQhIW9Sb3V0ZVBhcmFtZXRlcnM/LnByZXNlcnZlSGlzdG9yeSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdCFvUm91dGVQYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgaW1wYWN0ZWQgb3Igbm90XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIEZpcnN0LCBjaGVjayB3aXRoIHRoZSB0ZWNobmljYWwgcGF0aC4gV2UgaGF2ZSB0byB0cnkgaXQsIGJlY2F1c2UgZm9yIGxldmVsID4gMSwgd2Vcblx0XHQvLyB1c2VzIHRlY2huaWNhbCBrZXlzIGV2ZW4gaWYgU2VtYW50aWMga2V5cyBhcmUgZW5hYmxlZFxuXHRcdGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKC9eW14oKV0rXFwoW14oKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzU2VtYW50aWNQYXRoICE9IHNQYXRoID8gdGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNTZW1hbnRpY1BhdGgpIDogZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB1c2VkIHRvIG5hdmlnYXRlIGJhY2sgZnJvbSBhIHNwZWNpZmllZCBwYXRoLlxuXHQgKiBAcGFyYW0gc1BhdGhcblx0ICogQHJldHVybnMgVGhlIHBhdGhcblx0ICovXG5cdGdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCIvW14vXSokXCIpO1xuXHRcdHNQYXRoID0gc1BhdGgucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0aCkgfHwgc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBzUGF0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGF0aFRvTmF2aWdhdGVCYWNrKHNQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gbmF2aWdhdGUgdG9cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHN1ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGEgbGV2ZWwtMSBvYmplY3QgKHBhdGggPSAvYWFhKGJiYikpXG5cdFx0aWYgKCEvXlxcL1teKF0rXFwoW14pXStcXCkkLy50ZXN0KGNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBpcyBhIGRyYWZ0IHJvb3Rcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpKVxuXHRcdFx0LnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIU1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IHNlbWFudGljIHBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgb2JqZWN0c1xuXHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBlbnRpdHlTZXQubmFtZTtcblx0XHRyZXR1cm4gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgZW50aXR5U2V0TmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblxuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdFx0c1BhdGggPSB0aGlzLmdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aCk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0KSkge1xuXHRcdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0LCB0cnVlKTtcblxuXHRcdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0XHQvLyBXZSB3ZXJlIG5vdCBhYmxlIHRvIGJ1aWxkIHRoZSBzZW1hbnRpYyBwYXRoIC0tPiBVc2UgdGhlIHRlY2huaWNhbCBwYXRoIGFuZFxuXHRcdFx0XHRcdC8vIGNsZWFyIHRoZSBwcmV2aW91cyBtYXBwaW5nLCBvdGhlcndpc2UgdGhlIG9sZCBtYXBwaW5nIGlzIHVzZWQgaW4gRWRpdEZsb3cjdXBkYXRlRG9jdW1lbnRcblx0XHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1NlbWFudGljUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIGV4dHJhICcvJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGhcblx0XHRpZiAoc1BhdGhbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH1cblxuXHRfY2FsY3VsYXRlTGF5b3V0KGhhc2g6IHN0cmluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHQvLyBPcGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvIHdpbmRvd1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIgJiYgcGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBwYXJhbWV0ZXJzLkZDTExldmVsID09PSAwID8gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgOiBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHR9XG5cdFx0bGV0IEZDTExldmVsID0gcGFyYW1ldGVycy5GQ0xMZXZlbCA/PyAwO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsO1xuXHRcdFx0aWYgKEZDTExldmVsIDwgMCkge1xuXHRcdFx0XHRGQ0xMZXZlbCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2ssIHRyeSB0byBmaW5kIHRoZSBsYXlvdXQgaW4gdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBpZiBpdCdzIG5vdCBwcm92aWRlZCBhcyBwYXJhbWV0ZXJcblx0XHQvLyAobGF5b3V0IGNhbGN1bGF0aW9uIGlzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGluIHRoaXMgY2FzZSlcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPCAwICYmICFwYXJhbWV0ZXJzLmxheW91dCkge1xuXHRcdFx0cGFyYW1ldGVycy5sYXlvdXQgPSB0aGlzLm9Sb3V0ZXJQcm94eS5maW5kTGF5b3V0Rm9ySGFzaChoYXNoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmNhbGN1bGF0ZUxheW91dChGQ0xMZXZlbCwgaGFzaCwgcGFyYW1ldGVycy5sYXlvdXQsIHBhcmFtZXRlcnMua2VlcEN1cnJlbnRMYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgYmVmb3JlIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogRGlzcGxheXMgYSBidXN5IGluZGljYXRvci5cblx0ICpcblx0ICovXG5cdF9iZWZvcmVSb3V0ZU1hdGNoZWQoLypvRXZlbnQ6IEV2ZW50Ki8pOiB2b2lkIHtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKi9cblx0X2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKTogYm9vbGVhbiB7XG5cdFx0Ly8gVGhlIFJvdXRlclByb3h5IHNldHMgYSAnZmVMZXZlbCcgcHJvcGVydHkgb24gdGhlIGhpc3Rvcnkuc3RhdGUgb2JqZWN0XG5cdFx0cmV0dXJuIGhpc3Rvcnkuc3RhdGU/LmZlTGV2ZWwgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBIaWRlcyB0aGUgYnVzeSBpbmRpY2F0b3IgYW5kIGZpcmVzIGl0cyBvd24gJ3JvdXRlbWF0Y2hlZCcgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIFJvdXRpbmdFdmVudFBhcmFtZXRlcnM7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uQXBwU3RhdGVDaGFuZ2VkO1xuXHRcdFx0b0FwcFN0YXRlSGFuZGxlci5yZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vUm91dGVyUHJveHkuY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLlJlc3RvcmVIaXN0b3J5O1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzZXRSZXN0b3JlSGlzdG9yeUZsYWcoKTtcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybiA9IG1QYXJhbWV0ZXJzLmNvbmZpZy5wYXR0ZXJuO1xuXHRcdHRoaXMuYUN1cnJlbnRWaWV3cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblxuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlSW5mb3JtYXRpb24gPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpO1xuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cblx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVycyk7XG5cblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGhhc2ggaGFzIGJlZW4gc2V0IGJ5IHRoZSByb3V0ZXJQcm94eS5uYXZUb0hhc2ggZnVuY3Rpb25cblx0XHQvLyBJZiBub3QsIHJlYnVpbGQgaGlzdG9yeSBwcm9wZXJseSAoYm90aCBpbiB0aGUgYnJvd3NlciBhbmQgdGhlIFJvdXRlclByb3h5KVxuXHRcdGlmICghdGhpcy5faXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQucmVzdG9yZUhpc3RvcnkoKVxuXHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhc3luYyBpbml0aWFsaXplUm91dGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0YXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5wcm9jZXNzQW5kRXhwYW5kSGFzaCgpO1xuXHRcdH1cblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cblx0XHR0aGlzLl9mbk9uUm91dGVNYXRjaGVkID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0dGhpcy5vUm91dGVyLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9iZWZvcmVSb3V0ZU1hdGNoZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdC8vIFJlc2V0IGludGVybmFsIHN0YXRlXG5cdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gW107XG5cdFx0RWRpdFN0YXRlLnJlc2V0RWRpdFN0YXRlKCk7XG5cdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gIXRoaXMub1JvdXRlci5tYXRjaChcIlwiKTtcblxuXHRcdGF3YWl0IHRoaXMubWFuYWdlU3RhcnR1cE1vZGUoKTtcblx0fVxuXG5cdG9uUmVzdG9yZSgpOiB2b2lkIHtcblx0XHR0aGlzLm1hbmFnZVN0YXJ0dXBNb2RlKCk7XG5cdH1cblxuXHRhc3luYyBtYW5hZ2VTdGFydHVwTW9kZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJzYXAtaWFwcC1zdGF0ZVwiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5vQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gTWFuYWdlIHN0YXJ0dXAgcGFyYW1ldGVycyAoaW4gY2FzZSBvZiBubyBpYXBwLXN0YXRlKVxuXHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURVwiKSkge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0Ly8gVGhpcyBjaGVjayB3aWxsIGNhdGNoIG11bHRpcGxlIG1vZGVzIGxpa2UgY3JlYXRlLCBjcmVhdGVXaXRoIGFuZCBhdXRvQ3JlYXRlV2l0aCB3aGljaCBhbGwgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGJlIGhhbmRsZWQgbGlrZSBjcmVhdGUgc3RhcnR1cCFcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRGVlcCBsaW5rXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc05ld0hhc2gpO1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkFVVE9DUkVBVEVcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVlcExpbmtTdGFydHVwSGFzaChcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdFx0dGhpcy5vTW9kZWxcblx0XHQpLnRoZW4oKG9EZWVwTGluaykgPT4ge1xuXHRcdFx0bGV0IHNIYXNoO1xuXHRcdFx0aWYgKG9EZWVwTGluay5jb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNUZWNobmljYWxQYXRoID0gb0RlZXBMaW5rLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNQYXRoID0gdGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dClcblx0XHRcdFx0XHQ/IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dCwgZmFsc2UpIVxuXHRcdFx0XHRcdDogc1RlY2huaWNhbFBhdGg7XG5cblx0XHRcdFx0aWYgKHNTZW1hbnRpY1BhdGggIT09IHNUZWNobmljYWxQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzVGVjaG5pY2FsUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c0hhc2ggPSBzU2VtYW50aWNQYXRoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSBsZWFkaW5nICcvJ1xuXHRcdFx0fSBlbHNlIGlmIChvRGVlcExpbmsuaGFzaCkge1xuXHRcdFx0XHRzSGFzaCA9IG9EZWVwTGluay5oYXNoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0hhc2gpIHtcblx0XHRcdFx0Ly9SZXBsYWNlIHRoZSBoYXNoIHdpdGggbmV3bHkgY3JlYXRlZCBoYXNoXG5cdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc0hhc2gpO1xuXHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVEZWVwbGluaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZWZlcnJlZCBtb2RlIGVkaXQgYnkgYXBwZW5kaW5nIFwiWyZ8P11pLWFjdGlvbj1lZGl0XCIgdG8gdGhlIGhhc2ggaWY6XG5cdCAqIC0gVGhlcmUgaXMgYSByZXN1bHRpbmcgaGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsb2dpYyxcblx0ICogLSBUaGUgcHJlZmVycmVkIG1vZGUgaXMgZWRpdCwgYW5kXG5cdCAqIC0gVGhlIGVudGl0eSBpcyBlZGl0YWJsZVxuXHQgKiBUaGlzIHdvcmtzIGZvciBib3RoIGRlZXAtbGluayBzdGFydHVwICgjQXBwP0lEPW15SWQmcHJlZmVycmVkTW9kZT1lZGl0KSBhbmQgb2JqZWN0IHBhZ2Ugcm91dGluZyAoI0FwcD9wcmVmZXJyZWRNb2RlPWVkaXQmL0VudGl0eShJRCkpLlxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVcblx0ICovXG5cdGFzeW5jIF9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQoc3RhcnR1cFBhcmFtZXRlcnM6IHsgcHJlZmVycmVkTW9kZT86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZXN1bHRpbmdIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IHNob3VsZEVkaXQgPSAhIXN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGU/LlswXT8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoXCJFRElUXCIpO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gYXdhaXQgQXBwU3RhcnR1cEhlbHBlci52ZXJpZnlFZGl0QW5ub3RhdGlvbnModGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdGlmIChyZXN1bHRpbmdIYXNoICYmIHNob3VsZEVkaXQgJiYgZWRpdGFibGUpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IChyZXN1bHRpbmdIYXNoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCIpICsgXCJpLWFjdGlvbj1lZGl0XCI7XG5cdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgKGhhc2g6IHN0cmluZykgPT4gdm9pZCkocmVzdWx0aW5nSGFzaCArIHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByb3V0aW5nIGhpbnRzIGZvciB0aGUgY3VycmVudCByb3V0ZS5cblx0ICogQ3VycmVudGx5LCB0aGlzIG9ubHkgY292ZXJzIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwIGZyb20gYSBsaXN0IHJlcG9ydCB0byBhbiBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgVGhlIHJvdXRpbmcgaGludHNcblx0ICovXG5cdGdldFJvdXRpbmdIaW50cygpOiBSZWNvcmQ8c3RyaW5nLCB7IHBhcmVudE9mOiBzdHJpbmdbXSB9PiB7XG5cdFx0cmV0dXJuIHRoaXMucm91dGluZ0hpbnRzID8/IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIERyYWZ0IHJvb3QgZW50aXR5IHNldCBvciB0aGUgc3RpY2t5LWVuYWJsZWQgZW50aXR5IHNldC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHJvb3QgRW50aXR5U2V0XG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gbmV3IFJvdXRpbmdTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9Sb3V0aW5nU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUEwQ01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBSCxJQUFBLENBQUFLLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQUFBLFNBQUFSLHVCQUFBO01BQUEsSUFBQVMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsY0FBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSxrQkFBQVMsV0FBQSxFQUFBVCxLQUFBO01BQUFRLDBCQUFBLENBQUFSLEtBQUEsdUJBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBLE9BQUFBLEtBQUE7SUFBQTtJQUFBVyxjQUFBLENBQUFwQixzQkFBQSxFQUFBUSxjQUFBO0lBQUEsT0FBQVIsc0JBQUE7RUFBQSxFQUo0QnFCLGFBQWEsR0FBQUgsV0FBQSxHQUFBSSx5QkFBQSxDQUFBZixPQUFBLENBQUFnQixTQUFBLG1CQUFBcEIsS0FBQTtJQUFBcUIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFSLFlBQUEsR0FBQUcseUJBQUEsQ0FB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
1016
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSb3V0aW5nU2VydmljZUV2ZW50aW5nIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJldmVudCIsIl9kZWMzIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9FdmVudFByb3ZpZGVyIiwiX3RoaXMiLCJfbGVuIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwiYXJncyIsIkFycmF5IiwiX2tleSIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2luaGVyaXRzTG9vc2UiLCJFdmVudFByb3ZpZGVyIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsInByb3RvdHlwZSIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIiwiUm91dGluZ1NlcnZpY2UiLCJfU2VydmljZSIsIl90aGlzMiIsIl9sZW4yIiwiX2tleTIiLCJuYXZpZ2F0aW9uSW5mb1F1ZXVlIiwiZW5hYmxlZCIsImJpbmRpbmdDbGVhbnVwUHJvbWlzZXMiLCJfZXhwb3J0cyIsIl9wcm90byIsImluaXQiLCJvQ29udGV4dCIsImdldENvbnRleHQiLCJzY29wZVR5cGUiLCJvQXBwQ29tcG9uZW50Iiwic2NvcGVPYmplY3QiLCJvTW9kZWwiLCJnZXRNb2RlbCIsIm9NZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJvUm91dGVyIiwiZ2V0Um91dGVyIiwib1JvdXRlclByb3h5IiwiZ2V0Um91dGVyUHJveHkiLCJldmVudFByb3ZpZGVyIiwib1JvdXRpbmdDb25maWciLCJnZXRNYW5pZmVzdEVudHJ5Iiwicm91dGluZyIsIl9wYXJzZVJvdXRpbmdDb25maWd1cmF0aW9uIiwib0FwcENvbmZpZyIsIm91dGJvdW5kcyIsImNyb3NzTmF2aWdhdGlvbiIsImluaXRQcm9taXNlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJiZWZvcmVFeGl0IiwiZGV0YWNoUm91dGVNYXRjaGVkIiwiX2ZuT25Sb3V0ZU1hdGNoZWQiLCJmaXJlRXZlbnQiLCJleGl0IiwiZGVzdHJveSIsImFkZEJpbmRpbmdDbGVhbnVwUHJvbWlzZSIsInByb21pc2UiLCJwdXNoIiwid2FpdEZvckJpbmRpbmdDbGVhbnVwIiwiYWxsIiwiaXNGQ0wiLCJjb25maWciLCJyb3V0ZXJDbGFzcyIsIl9tVGFyZ2V0cyIsInRhcmdldHMiLCJzVGFyZ2V0TmFtZSIsIk9iamVjdCIsImtleXMiLCJhc3NpZ24iLCJ0YXJnZXROYW1lIiwiY29udGV4dFBhdHRlcm4iLCJ1bmRlZmluZWQiLCJ2aWV3TGV2ZWwiLCJfZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4iLCJyb3V0aW5nSGludHMiLCJfbVJvdXRlcyIsInJvdXRlcyIsIm9Sb3V0ZU1hbmlmZXN0SW5mbyIsImFSb3V0ZVRhcmdldHMiLCJnZXRSb3V0ZVRhcmdldE5hbWVzIiwidGFyZ2V0Iiwic1JvdXRlTmFtZSIsIm5hbWUiLCJzUm91dGVQYXR0ZXJuIiwicGF0dGVybiIsImluZGV4T2YiLCJMb2ciLCJ3YXJuaW5nIiwiaVJvdXRlTGV2ZWwiLCJyb3V0ZUxldmVsIiwiaXRlbSIsInNQYXJlbnRUYXJnZXROYW1lIiwicGFyZW50Iiwicm91dGVySGFzaEtleXMiLCJSb3V0ZXJQcm94eSIsImV4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2giLCJzcGxpdCIsIkZDTExldmVsIiwiY29udHJvbEFnZ3JlZ2F0aW9uIiwiZm9yRWFjaCIsImFMZXZlbDBSb3V0ZU5hbWVzIiwiYUxldmVsMVJvdXRlTmFtZXMiLCJzRGVmYXVsdFJvdXRlTmFtZSIsInNOYW1lIiwiaUxldmVsIiwic0RlZmF1bHRUYXJnZXROYW1lIiwic2xpY2UiLCJzQ29udGV4dFBhdGgiLCJvU2V0dGluZ3MiLCJvcHRpb25zIiwic2V0dGluZ3MiLCJjb250ZXh0UGF0aCIsImVudGl0eVNldCIsIm1hcCIsInNUYXJnZXRLZXkiLCJzb3J0IiwiYSIsImIiLCJmdWxsQ29udGV4dFBhdGgiLCJwYXJlbnRPZiIsIm5hdmlnYXRpb24iLCJzTmF2TmFtZSIsInRhcmdldFJvdXRlIiwiZGV0YWlsIiwicm91dGUiLCJzdGFydHNXaXRoIiwic1BhdHRlcm4iLCJyZXBsYWNlIiwicmVnZXgiLCJSZWdFeHAiLCJtYXRjaCIsIl9nZXRSb3V0ZUluZm9ybWF0aW9uIiwiX2dldFRhcmdldEluZm9ybWF0aW9uIiwiX2dldENvbXBvbmVudElkIiwic093bmVySWQiLCJzQ29tcG9uZW50SWQiLCJzdWJzdHJpbmciLCJnZXRUYXJnZXRJbmZvcm1hdGlvbkZvciIsImNvbXBvbmVudE9yVmlldyIsImNvcnJlY3RUYXJnZXROYW1lIiwiZ2V0VGFyZ2V0TmFtZSIsInRhcmdldENvbXBvbmVudElkIiwiX3NPd25lcklkIiwiZ2V0SWQiLCJpZCIsInZpZXdJZCIsImdldFRhcmdldE5hbWVGb3JWaWV3IiwidmlldyIsInBhZ2VDb21wb25lbnQiLCJDb21wb25lbnQiLCJnZXRPd25lckNvbXBvbmVudEZvciIsImdldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTGFzdFNlbWFudGljTWFwcGluZyIsInNldExhc3RTZW1hbnRpY01hcHBpbmciLCJvTWFwcGluZyIsImdldEhhc2hGcm9tUm91dGUiLCJjb250ZXh0Iiwicm91dGVOYW1lIiwicGFyYW1ldGVyTWFwcGluZyIsInRhcmdldFVSTFByb21pc2UiLCJTZW1hbnRpY0tleUhlbHBlciIsImdldFNlbWFudGljUGF0aCIsInByZXBhcmVQYXJhbWV0ZXJzIiwidGhlbiIsInBhcmFtZXRlcnMiLCJnZXRVUkwiLCJuYXZpZ2F0ZVRvIiwibVBhcmFtZXRlck1hcHBpbmciLCJiUHJlc2VydmVIaXN0b3J5IiwiZGVsYXllZFVzYWdlIiwic1RhcmdldFVSTFByb21pc2UiLCJiSXNTdGlja3lNb2RlIiwiTW9kZWxIZWxwZXIiLCJpc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQiLCJtUGFyYW1ldGVycyIsInRhcmdldFVybCIsIm5hdmlnYXRlRnVuY3Rpb24iLCJuYXZUb0hhc2giLCJzVGFyZ2V0Um91dGUiLCJvUGFyYW1ldGVyc1Byb21pc2UiLCJnZXRQYXRoIiwiYUNvbnRleHRQYXRoUGFydHMiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyIsInNQYXJhbWV0ZXJLZXkiLCJzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24iLCJvUGFyc2VkRXhwcmVzc2lvbiIsIkJpbmRpbmdJbmZvIiwicGFyc2UiLCJhUGFydHMiLCJwYXJ0cyIsImFSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzIiwib1BhdGhQYXJ0IiwiYVJlbGF0aXZlUGFydHMiLCJwYXRoIiwiYUxvY2FsUGFydHMiLCJsb2NhbENvbnRleHRQYXRoIiwiam9pbiIsImxvY2FsQ29udGV4dCIsImJpbmRDb250ZXh0IiwiZ2V0Qm91bmRDb250ZXh0Iiwib01ldGFDb250ZXh0IiwiZ2V0TWV0YUNvbnRleHQiLCJyZXF1ZXN0UHJvcGVydHkiLCJvVmFsdWUiLCJvUHJvcGVydHlJbmZvIiwiZ2V0T2JqZWN0Iiwic0VkbVR5cGUiLCIkVHlwZSIsIk9EYXRhVXRpbHMiLCJmb3JtYXRMaXRlcmFsIiwiYVJlc29sdmVkUGFyYW1ldGVycyIsInZhbHVlIiwiZm9ybWF0dGVyIiwiYXBwbHkiLCJrZXkiLCJhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzIiwib1BhcmFtZXRlcnMiLCJvUmVzb2x2ZWRQYXJhbWV0ZXIiLCJvRXJyb3IiLCJlcnJvciIsIl9maXJlUm91dGVNYXRjaEV2ZW50cyIsIkVkaXRTdGF0ZSIsImNsZWFuUHJvY2Vzc2VkRWRpdFN0YXRlIiwibmF2aWdhdGVUb0NvbnRleHQiLCJ2aWV3RGF0YSIsImN1cnJlbnRUYXJnZXRJbmZvIiwicm91dGVQYXJhbWV0ZXJzUHJvbWlzZSIsImlzU3RpY2t5TW9kZSIsInRhcmdldFBhdGgiLCJuYXZpZ2F0aW9uSW5mbyIsIm9Sb3V0ZURldGFpbCIsImlzQSIsInNUYXJnZXRQYXRoIiwiX2dldFBhdGhGcm9tQ29udGV4dCIsImJFeGl0T25OYXZpZ2F0ZUJhY2tUb1Jvb3QiLCJleGl0RnJvbUFwcCIsImNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzIiwic0xheW91dCIsIl9jYWxjdWxhdGVMYXlvdXQiLCJvTmF2aWdhdGlvbkluZm8iLCJiVGFyZ2V0RWRpdGFibGUiLCJlZGl0YWJsZSIsImJQZXJzaXN0T1BTY3JvbGwiLCJwZXJzaXN0T1BTY3JvbGwiLCJiU2hvd1BsYWNlaG9sZGVyIiwic2hvd1BsYWNlaG9sZGVyIiwicmVhc29uIiwicmVkaXJlY3RlZFRvTm9uRHJhZnQiLCJ1cGRhdGVGQ0xMZXZlbCIsInJlY3JlYXRlQ29udGV4dCIsInVzZUNvbnRleHQiLCJjaGVja05vSGFzaENoYW5nZSIsInNDdXJyZW50SGFzaE5vQXBwU3RhdGUiLCJnZXRIYXNoIiwicm91dGVJbmZvQnlIYXNoIiwiZ2V0Um91dGVJbmZvQnlIYXNoIiwibUV2ZW50UGFyYW1ldGVycyIsInJvdXRlSW5mb3JtYXRpb24iLCJzQ3VycmVudFJvdXRlTmFtZSIsInJvdXRlUGF0dGVybiIsInNDdXJyZW50Um91dGVQYXR0ZXJuIiwidmlld3MiLCJhQ3VycmVudFZpZXdzIiwic2V0Rm9jdXNGb3JjZWQiLCJmb3JjZUZvY3VzIiwidHJhbnNpZW50IiwiaW5jbHVkZXMiLCJuYXZNb2RlIiwic2FwIiwidWkiLCJyZXF1aXJlIiwiQ29udGFpbmVyIiwic2hlbGxTZXJ2aWNlSGVscGVyIiwiZ2V0U2hlbGxTZXJ2aWNlcyIsInBhcnNlZFVybCIsInBhcnNlU2hlbGxIYXNoIiwiZG9jdW1lbnQiLCJsb2NhdGlvbiIsImhhc2giLCJuYXZpZ2F0aW9uU2VydmljZSIsImdldFNlcnZpY2VBc3luYyIsImhyZWYiLCJnZXRIcmVmIiwic2VtYW50aWNPYmplY3QiLCJhY3Rpb24iLCJwYXJhbXMiLCJhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUiLCJnZXRJbmZyYW1lVXJsIiwidXJsIiwiVVJMIiwiZW5jb2RlVVJJIiwid2luZG93Iiwib3JpZ2luIiwicGF0aG5hbWUiLCJvcGVuV2luZG93Iiwib1JvdXRlSW5mbyIsIm9Sb3V0ZSIsInNMYXN0VGFyZ2V0TmFtZSIsIm9UYXJnZXQiLCJtZXNzYWdlSGFuZGxpbmciLCJyZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzIiwib1JvdXRlUGFyYW1ldGVycyIsIm5hdlRvIiwicHJlc2VydmVIaXN0b3J5Iiwibm9QcmVzZXJ2YXRpb25DYWNoZSIsImJOYXZpZ2F0ZWQiLCJwb3AiLCJuYXZpZ2F0ZVRvUm91dGUiLCJzVGFyZ2V0Um91dGVOYW1lIiwic1RhcmdldFVSTCIsImlzQ3VycmVudFN0YXRlSW1wYWN0ZWRCeSIsInNQYXRoIiwidGVzdCIsInNTZW1hbnRpY1BhdGgiLCJ0ZWNobmljYWxQYXRoIiwic2VtYW50aWNQYXRoIiwiZ2V0UGF0aFRvTmF2aWdhdGVCYWNrIiwiX2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgiLCJtZXRhTW9kZWwiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJnZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHMiLCJ0YXJnZXRPYmplY3QiLCJpc0RyYWZ0Um9vdCIsImdldFByb3BlcnR5IiwiZW50aXR5U2V0TmFtZSIsImdldFNlbWFudGljS2V5cyIsImdldEhlYWRlckNvbnRleHQiLCJsYXlvdXQiLCJmaW5kTGF5b3V0Rm9ySGFzaCIsImdldFJvb3RWaWV3Q29udHJvbGxlciIsImNhbGN1bGF0ZUxheW91dCIsImtlZXBDdXJyZW50TGF5b3V0IiwiX2JlZm9yZVJvdXRlTWF0Y2hlZCIsImJQbGFjZWhvbGRlckVuYWJsZWQiLCJQbGFjZWhvbGRlciIsImlzUGxhY2Vob2xkZXJFbmFibGVkIiwib1Jvb3RWaWV3IiwiZ2V0Um9vdENvbnRyb2wiLCJCdXN5TG9ja2VyIiwibG9jayIsIl9pc05hdmlnYXRpb25UcmlnZ2VyZWRCeVJvdXRlclByb3h5IiwiaGlzdG9yeSIsInN0YXRlIiwiZmVMZXZlbCIsIl9vblJvdXRlTWF0Y2hlZCIsIm9FdmVudCIsIm9BcHBTdGF0ZUhhbmRsZXIiLCJnZXRBcHBTdGF0ZUhhbmRsZXIiLCJpc0xvY2tlZCIsInVubG9jayIsImdldFBhcmFtZXRlcnMiLCJjaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwIiwiTmF2aWdhdGlvblJlYXNvbiIsIkFwcFN0YXRlQ2hhbmdlZCIsInJlc2V0Um91dGVDaGFuZ2VkQnlJQXBwIiwiY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCIsIlJlc3RvcmVIaXN0b3J5IiwicmVzZXRSZXN0b3JlSGlzdG9yeUZsYWciLCJnZXRQYXJhbWV0ZXIiLCJyZXN0b3JlSGlzdG9yeSIsInJlc29sdmVSb3V0ZU1hdGNoIiwiY2F0Y2giLCJhdHRhY2hSb3V0ZU1hdGNoZWQiLCJvRGF0YSIsImZuRnVuY3Rpb24iLCJvTGlzdGVuZXIiLCJhdHRhY2hFdmVudCIsImRldGFjaEV2ZW50IiwiYXR0YWNoQWZ0ZXJSb3V0ZU1hdGNoZWQiLCJkZXRhY2hBZnRlclJvdXRlTWF0Y2hlZCIsImluaXRpYWxpemVSb3V0aW5nIiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJnZXRDYXBhYmlsaXRpZXMiLCJDb2xsYWJvcmF0aW9uIiwiZGVmYXVsdCIsIkNvbGxhYm9yYXRpb25IZWxwZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwicHJvY2Vzc0FuZEV4cGFuZEhhc2giLCJiaW5kIiwiYXR0YWNoQmVmb3JlUm91dGVNYXRjaGVkIiwicmVzZXRFZGl0U3RhdGUiLCJtYW5hZ2VTdGFydHVwTW9kZSIsIm9uUmVzdG9yZSIsImJJc0lhcHBTdGF0ZSIsImdldEhhc2hDaGFuZ2VyIiwib1N0YXJ0dXBQYXJhbWV0ZXJzIiwiZ2V0U3RhcnR1cFBhcmFtZXRlcnMiLCJiSGFzU3RhcnRVcFBhcmFtZXRlcnMiLCJzSGFzaCIsInByZWZlcnJlZE1vZGUiLCJ0b1VwcGVyQ2FzZSIsIl9tYW5hZ2VDcmVhdGVTdGFydHVwIiwiX21hbmFnZURlZXBMaW5rU3RhcnR1cCIsIl9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQiLCJnZXREZWZhdWx0Q3JlYXRlSGFzaCIsIkFwcFN0YXJ0dXBIZWxwZXIiLCJnZXRDb250ZXh0UGF0aCIsImdldENyZWF0ZVN0YXJ0dXBIYXNoIiwic05ld0hhc2giLCJyZXBsYWNlSGFzaCIsInNldFN0YXJ0dXBNb2RlQXV0b0NyZWF0ZSIsInNldFN0YXJ0dXBNb2RlQ3JlYXRlIiwiZ2V0RGVlcExpbmtTdGFydHVwSGFzaCIsIm9EZWVwTGluayIsInNUZWNobmljYWxQYXRoIiwic2V0U3RhcnR1cE1vZGVEZWVwbGluayIsInN0YXJ0dXBQYXJhbWV0ZXJzIiwicmVzdWx0aW5nSGFzaCIsInNob3VsZEVkaXQiLCJ2ZXJpZnlFZGl0QW5ub3RhdGlvbnMiLCJwYXJhbWV0ZXIiLCJnZXRPdXRib3VuZHMiLCJnZXRSb3V0aW5nSGludHMiLCJnZXRJbnRlcmZhY2UiLCJTZXJ2aWNlIiwiUm91dGluZ1NlcnZpY2VGYWN0b3J5IiwiX1NlcnZpY2VGYWN0b3J5IiwiX3Byb3RvMiIsImNyZWF0ZUluc3RhbmNlIiwib1NlcnZpY2VDb250ZXh0Iiwib1JvdXRpbmdTZXJ2aWNlIiwiU2VydmljZUZhY3RvcnkiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlJvdXRpbmdTZXJ2aWNlRmFjdG9yeS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEVudGl0eVNldCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuXG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSBBcHBDb21wb25lbnQgZnJvbSBcInNhcC9mZS9jb3JlL0FwcENvbXBvbmVudFwiO1xuaW1wb3J0IHR5cGUgeyBTdGFydHVwUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvY29yZS9BcHBDb21wb25lbnRcIjtcbmltcG9ydCB0eXBlIHsgTmF2aWdhdGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdXN5TG9ja2VyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9CdXN5TG9ja2VyXCI7XG5pbXBvcnQgUGxhY2Vob2xkZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgbWVzc2FnZUhhbmRsaW5nIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9tZXNzYWdlSGFuZGxlci9tZXNzYWdlSGFuZGxpbmdcIjtcbmltcG9ydCBOYXZpZ2F0aW9uUmVhc29uIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy9yb3V0aW5nL05hdmlnYXRpb25SZWFzb25cIjtcbmltcG9ydCBSb3V0ZXJQcm94eSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbGxlcmV4dGVuc2lvbnMvcm91dGluZy9Sb3V0ZXJQcm94eVwiO1xuaW1wb3J0IEFwcFN0YXJ0dXBIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQXBwU3RhcnR1cEhlbHBlclwiO1xuaW1wb3J0IEVkaXRTdGF0ZSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9FZGl0U3RhdGVcIjtcbmltcG9ydCB7IGdldFJvdXRlVGFyZ2V0TmFtZXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NYW5pZmVzdEhlbHBlclwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgU2VtYW50aWNLZXlIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU2VtYW50aWNLZXlIZWxwZXJcIjtcbmltcG9ydCBCaW5kaW5nSW5mbyBmcm9tIFwic2FwL3VpL2Jhc2UvQmluZGluZ0luZm9cIjtcbmltcG9ydCBFdmVudFByb3ZpZGVyIGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFByb3ZpZGVyXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QmluZGluZ0luZm8gfSBmcm9tIFwic2FwL3VpL2Jhc2UvTWFuYWdlZE9iamVjdFwiO1xuaW1wb3J0IENvbXBvbmVudCBmcm9tIFwic2FwL3VpL2NvcmUvQ29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSBDb21wb25lbnRDb250YWluZXIgZnJvbSBcInNhcC91aS9jb3JlL0NvbXBvbmVudENvbnRhaW5lclwiO1xuaW1wb3J0IHR5cGUgeyBNYW5pZmVzdE91dGJvdW5kRW50cnksIFJvdXRpbmdDb25maWd1cmF0aW9uLCBSb3V0aW5nVGFyZ2V0IH0gZnJvbSBcInNhcC91aS9jb3JlL01hbmlmZXN0XCI7XG5pbXBvcnQgdHlwZSBWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvVmlld1wiO1xuaW1wb3J0IHR5cGUgeyBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVcIjtcbmltcG9ydCB0eXBlIFJvdXRlciBmcm9tIFwic2FwL3VpL2NvcmUvcm91dGluZy9Sb3V0ZXJcIjtcbmltcG9ydCB0eXBlIHsgUm91dGVyJFJvdXRlTWF0Y2hlZEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL3JvdXRpbmcvUm91dGVyXCI7XG5pbXBvcnQgU2VydmljZSBmcm9tIFwic2FwL3VpL2NvcmUvc2VydmljZS9TZXJ2aWNlXCI7XG5pbXBvcnQgU2VydmljZUZhY3RvcnkgZnJvbSBcInNhcC91aS9jb3JlL3NlcnZpY2UvU2VydmljZUZhY3RvcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSBPRGF0YUxpc3RCaW5kaW5nIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFMaXN0QmluZGluZ1wiO1xuaW1wb3J0IHR5cGUgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHR5cGUgT0RhdGFNb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L09EYXRhTW9kZWxcIjtcbmltcG9ydCBPRGF0YVV0aWxzIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFVdGlsc1wiO1xuaW1wb3J0IG9wZW5XaW5kb3cgZnJvbSBcInNhcC91aS91dGlsL29wZW5XaW5kb3dcIjtcbmltcG9ydCB0eXBlIENvbnRhaW5lciBmcm9tIFwic2FwL3VzaGVsbC9Db250YWluZXJcIjtcbmltcG9ydCB0eXBlIE5hdmlnYXRpb24gZnJvbSBcInNhcC91c2hlbGwvc2VydmljZXMvTmF2aWdhdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBTZXJ2aWNlQ29udGV4dCB9IGZyb20gXCJ0eXBlcy9tZXRhbW9kZWxfdHlwZXNcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwiLi4vY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcblxudHlwZSBSb3V0aW5nU2VydmljZVNldHRpbmdzID0ge307XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29yZS5zZXJ2aWNlcy5Sb3V0aW5nU2VydmljZUV2ZW50aW5nXCIpXG5jbGFzcyBSb3V0aW5nU2VydmljZUV2ZW50aW5nIGV4dGVuZHMgRXZlbnRQcm92aWRlciB7XG5cdEBldmVudCgpXG5cdHJvdXRlTWF0Y2hlZCE6IEZ1bmN0aW9uO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUm91dGVNYXRjaGVkITogRnVuY3Rpb247XG59XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzICYge1xuXHRuYXZpZ2F0aW9uSW5mbz86IHsgcmVhc29uPzogTmF2aWdhdGlvblJlYXNvbiB9O1xuXHRyb3V0ZUluZm9ybWF0aW9uPzogdW5rbm93bjtcblx0cm91dGVQYXR0ZXJuPzogc3RyaW5nO1xuXHRjb25maWc6IHsgcGF0dGVybj86IHN0cmluZyB9O1xufTtcblxuZXhwb3J0IHR5cGUgQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnMgPVxuXHR8IHsgbW9kZTogXCJBc3luY1wiOyBjcmVhdGVDb250ZXh0UHJvbWlzZTogUHJvbWlzZTxDb250ZXh0PiB9XG5cdHwgeyBtb2RlOiBcIkRlZmVycmVkXCI7IGxpc3RCaW5kaW5nOiBPRGF0YUxpc3RCaW5kaW5nOyBwYXJlbnRDb250ZXh0PzogQ29udGV4dDsgZGF0YT86IG9iamVjdCB9O1xuXG5leHBvcnQgdHlwZSBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdGNyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzPzogQ3JlYXRlT25OYXZpZ2F0ZVBhcmFtZXRlcnM7XG5cdGJUYXJnZXRFZGl0YWJsZT86IGJvb2xlYW47XG5cdGJQZXJzaXN0T1BTY3JvbGw/OiBib29sZWFuO1xuXHRiU2hvd1BsYWNlaG9sZGVyPzogYm9vbGVhbjtcblx0dXNlQ29udGV4dD86IENvbnRleHQ7XG5cdHJlYXNvbj86IE5hdmlnYXRpb25SZWFzb247XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xuXHRiQWN0aW9uQ3JlYXRlPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyA9IHtcblx0Y2hlY2tOb0hhc2hDaGFuZ2U/OiBib29sZWFuO1xuXHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycz86IENyZWF0ZU9uTmF2aWdhdGVQYXJhbWV0ZXJzO1xuXHRlZGl0YWJsZT86IGJvb2xlYW47XG5cdHRyYW5zaWVudD86IGJvb2xlYW47XG5cdHBlcnNpc3RPUFNjcm9sbD86IGJvb2xlYW47XG5cdEZDTExldmVsPzogbnVtYmVyO1xuXHR1cGRhdGVGQ0xMZXZlbD86IG51bWJlcjtcblx0cHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbjtcblx0bm9QcmVzZXJ2YXRpb25DYWNoZT86IGJvb2xlYW47XG5cdHJlY3JlYXRlQ29udGV4dD86IGJvb2xlYW47XG5cdGZvcmNlRm9jdXM/OiBib29sZWFuO1xuXHR0YXJnZXRQYXRoPzogc3RyaW5nO1xuXHRzaG93UGxhY2Vob2xkZXI/OiBib29sZWFuO1xuXHRyZWFzb24/OiBOYXZpZ2F0aW9uUmVhc29uO1xuXHRjYWxsRXh0ZW5zaW9uPzogYm9vbGVhbjtcblx0bGF5b3V0Pzogc3RyaW5nO1xuXHRrZWVwQ3VycmVudExheW91dD86IGJvb2xlYW47XG5cdG5hdk1vZGU/OiBzdHJpbmc7XG5cdHJlZGlyZWN0ZWRUb05vbkRyYWZ0Pzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgUm91dGluZ1BhcmFtZXRlck1hcCA9IHtcblx0W2s6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBTZW1hbnRpY01hcHBpbmcgPSB7XG5cdHNlbWFudGljUGF0aDogc3RyaW5nO1xuXHR0ZWNobmljYWxQYXRoOiBzdHJpbmc7XG59O1xudHlwZSBNaW5pbWFsUGFnZVNldHRpbmcgPSB7XG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXHRlbnRpdHlTZXQ/OiBzdHJpbmc7XG5cdGZ1bGxDb250ZXh0UGF0aD86IHN0cmluZztcblx0bmF2aWdhdGlvbj86IFJlY29yZDxzdHJpbmcsIE5hdmlnYXRpb25Db25maWd1cmF0aW9uPjtcbn07XG5cbnR5cGUgSW50ZXJuYWxSb3V0ZURlZmluaXRpb24gPSB7XG5cdG5hbWU6IHN0cmluZztcblx0cGF0dGVybjogc3RyaW5nO1xuXHR0YXJnZXRzOiBzdHJpbmdbXTtcblx0cm91dGVMZXZlbDogbnVtYmVyO1xufTtcblxudHlwZSBSZXNvbHZlZFBhcmFtZXRlcnMgPSB7IGtleTogc3RyaW5nOyB2YWx1ZTogdW5rbm93biB9O1xuXG5leHBvcnQgY2xhc3MgUm91dGluZ1NlcnZpY2UgZXh0ZW5kcyBTZXJ2aWNlPFJvdXRpbmdTZXJ2aWNlU2V0dGluZ3M+IHtcblx0b0FwcENvbXBvbmVudCE6IEFwcENvbXBvbmVudDtcblxuXHRvTW9kZWwhOiBPRGF0YU1vZGVsO1xuXG5cdG9NZXRhTW9kZWwhOiBPRGF0YU1ldGFNb2RlbDtcblxuXHRvUm91dGVyITogUm91dGVyO1xuXG5cdG9Sb3V0ZXJQcm94eSE6IFJvdXRlclByb3h5O1xuXG5cdGV2ZW50UHJvdmlkZXIhOiBFdmVudFByb3ZpZGVyO1xuXG5cdGluaXRQcm9taXNlITogUHJvbWlzZTxSb3V0aW5nU2VydmljZT47XG5cblx0b3V0Ym91bmRzITogUmVjb3JkPHN0cmluZywgTWFuaWZlc3RPdXRib3VuZEVudHJ5PjtcblxuXHRfbVRhcmdldHMhOiBSZWNvcmQ8c3RyaW5nLCBSb3V0aW5nVGFyZ2V0PjtcblxuXHRfbVJvdXRlcyE6IFJlY29yZDxzdHJpbmcsIEludGVybmFsUm91dGVEZWZpbml0aW9uPjtcblxuXHRvTGFzdFNlbWFudGljTWFwcGluZz86IFNlbWFudGljTWFwcGluZztcblxuXHRiRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290PzogYm9vbGVhbjtcblxuXHRzQ3VycmVudFJvdXRlTmFtZT86IHN0cmluZztcblxuXHRzQ3VycmVudFJvdXRlUGF0dGVybj86IHN0cmluZztcblxuXHRhQ3VycmVudFZpZXdzPzogKFZpZXcgfCBDb21wb25lbnRDb250YWluZXIpW107XG5cblx0bmF2aWdhdGlvbkluZm9RdWV1ZTogUm91dGluZ05hdmlnYXRpb25JbmZvW10gPSBbXTtcblxuXHRzQ29udGV4dFBhdGghOiBzdHJpbmc7XG5cblx0X2ZuT25Sb3V0ZU1hdGNoZWQhOiAoZXY6IFJvdXRlciRSb3V0ZU1hdGNoZWRFdmVudCkgPT4gdm9pZDtcblxuXHRlbmFibGVkID0gZmFsc2U7XG5cblx0cm91dGluZ0hpbnRzPzogUmVjb3JkPHN0cmluZywgeyBwYXJlbnRPZjogc3RyaW5nW10gfT47XG5cblx0YmluZGluZ0NsZWFudXBQcm9taXNlczogUHJvbWlzZTx2b2lkPltdID0gW107XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHRjb25zdCBvQ29udGV4dCA9IHRoaXMuZ2V0Q29udGV4dCgpO1xuXHRcdGlmIChvQ29udGV4dC5zY29wZVR5cGUgPT09IFwiY29tcG9uZW50XCIpIHtcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudCA9IG9Db250ZXh0LnNjb3BlT2JqZWN0O1xuXHRcdFx0dGhpcy5vTW9kZWwgPSB0aGlzLm9BcHBDb21wb25lbnQuZ2V0TW9kZWwoKTtcblx0XHRcdHRoaXMub01ldGFNb2RlbCA9IHRoaXMub01vZGVsPy5nZXRNZXRhTW9kZWwoKTtcblx0XHRcdHRoaXMub1JvdXRlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb3V0ZXIoKTtcblx0XHRcdHRoaXMub1JvdXRlclByb3h5ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvdXRlclByb3h5KCk7XG5cdFx0XHR0aGlzLmV2ZW50UHJvdmlkZXIgPSBuZXcgUm91dGluZ1NlcnZpY2VFdmVudGluZygpO1xuXG5cdFx0XHRjb25zdCBvUm91dGluZ0NvbmZpZyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nO1xuXHRcdFx0dGhpcy5fcGFyc2VSb3V0aW5nQ29uZmlndXJhdGlvbihvUm91dGluZ0NvbmZpZyEpO1xuXG5cdFx0XHRjb25zdCBvQXBwQ29uZmlnID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldE1hbmlmZXN0RW50cnkoXCJzYXAuYXBwXCIpO1xuXHRcdFx0dGhpcy5vdXRib3VuZHMgPSBvQXBwQ29uZmlnLmNyb3NzTmF2aWdhdGlvbj8ub3V0Ym91bmRzID8/IHt9O1xuXHRcdH1cblxuXHRcdHRoaXMuaW5pdFByb21pc2UgPSBQcm9taXNlLnJlc29sdmUodGhpcyk7XG5cdH1cblxuXHRiZWZvcmVFeGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdHRoaXMub1JvdXRlci5kZXRhY2hSb3V0ZU1hdGNoZWQodGhpcy5fZm5PblJvdXRlTWF0Y2hlZCwgdGhpcyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCB7fSk7XG5cdH1cblxuXHRleGl0KCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXN0cm95KCk7XG5cdH1cblxuXHRhZGRCaW5kaW5nQ2xlYW51cFByb21pc2UocHJvbWlzZTogUHJvbWlzZTx2b2lkPik6IHZvaWQge1xuXHRcdHRoaXMuYmluZGluZ0NsZWFudXBQcm9taXNlcy5wdXNoKHByb21pc2UpO1xuXHR9XG5cblx0YXN5bmMgd2FpdEZvckJpbmRpbmdDbGVhbnVwKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGF3YWl0IFByb21pc2UuYWxsKHRoaXMuYmluZGluZ0NsZWFudXBQcm9taXNlcyk7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzID0gW107XG5cdH1cblxuXHQvKipcblx0ICogUGFyc2UgYSBtYW5pZmVzdCByb3V0aW5nIGNvbmZpZ3VyYXRpb24gZm9yIGludGVybmFsIHVzYWdlLlxuXHQgKiBAcGFyYW0gb1JvdXRpbmdDb25maWcgVGhlIHJvdXRpbmcgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBtYW5pZmVzdFxuXHQgKi9cblx0X3BhcnNlUm91dGluZ0NvbmZpZ3VyYXRpb24ob1JvdXRpbmdDb25maWc6IFJvdXRpbmdDb25maWd1cmF0aW9uKTogdm9pZCB7XG5cdFx0Y29uc3QgaXNGQ0wgPSBvUm91dGluZ0NvbmZpZz8uY29uZmlnPy5yb3V0ZXJDbGFzcyA9PT0gXCJzYXAuZi5yb3V0aW5nLlJvdXRlclwiO1xuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2YgdGFyZ2V0c1xuXHRcdHRoaXMuX21UYXJnZXRzID0ge307XG5cdFx0aWYgKG9Sb3V0aW5nQ29uZmlnPy50YXJnZXRzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNUYXJnZXROYW1lIG9mIE9iamVjdC5rZXlzKG9Sb3V0aW5nQ29uZmlnLnRhcmdldHMpKSB7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXSA9IE9iamVjdC5hc3NpZ24oeyB0YXJnZXROYW1lOiBzVGFyZ2V0TmFtZSB9LCBvUm91dGluZ0NvbmZpZy50YXJnZXRzW3NUYXJnZXROYW1lXSk7XG5cblx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3IgRkNMIGNhc2VzIGlzIGNhbGN1bGF0ZWQgZnJvbSB0aGUgdGFyZ2V0IHBhdHRlcm5cblx0XHRcdFx0Y29uc3QgY29udGV4dFBhdHRlcm4gPSB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uY29udGV4dFBhdHRlcm47XG5cdFx0XHRcdGlmIChjb250ZXh0UGF0dGVybiAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnZpZXdMZXZlbCA9IHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKGNvbnRleHRQYXR0ZXJuLCAwKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHR0aGlzLnJvdXRpbmdIaW50cyA9IHt9O1xuXG5cdFx0Ly8gSW5mb3JtYXRpb24gb2Ygcm91dGVzXG5cdFx0dGhpcy5fbVJvdXRlcyA9IHt9O1xuXHRcdGlmIChvUm91dGluZ0NvbmZpZz8ucm91dGVzKSB7XG5cdFx0XHRmb3IgKGNvbnN0IG9Sb3V0ZU1hbmlmZXN0SW5mbyBvZiBvUm91dGluZ0NvbmZpZy5yb3V0ZXMpIHtcblx0XHRcdFx0Y29uc3QgYVJvdXRlVGFyZ2V0cyA9IGdldFJvdXRlVGFyZ2V0TmFtZXMob1JvdXRlTWFuaWZlc3RJbmZvLnRhcmdldCksXG5cdFx0XHRcdFx0c1JvdXRlTmFtZSA9IG9Sb3V0ZU1hbmlmZXN0SW5mby5uYW1lLFxuXHRcdFx0XHRcdHNSb3V0ZVBhdHRlcm4gPSBvUm91dGVNYW5pZmVzdEluZm8ucGF0dGVybjtcblx0XHRcdFx0aWYgKCFzUm91dGVQYXR0ZXJuKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0Ly8gQ2hlY2sgcm91dGUgcGF0dGVybjogYWxsIHBhdHRlcm5zIG5lZWQgdG8gZW5kIHdpdGggJzo/cXVlcnk6JywgdGhhdCB3ZSB1c2UgZm9yIHBhcmFtZXRlcnNcblx0XHRcdFx0aWYgKHNSb3V0ZVBhdHRlcm4ubGVuZ3RoIDwgOCB8fCBzUm91dGVQYXR0ZXJuLmluZGV4T2YoXCI6P3F1ZXJ5OlwiKSAhPT0gc1JvdXRlUGF0dGVybi5sZW5ndGggLSA4KSB7XG5cdFx0XHRcdFx0TG9nLndhcm5pbmcoYFBhdHRlcm4gZm9yIHJvdXRlICR7c1JvdXRlTmFtZX0gZG9lc24ndCBlbmQgd2l0aCAnOj9xdWVyeTonIDogJHtzUm91dGVQYXR0ZXJufWApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlSb3V0ZUxldmVsID0gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1JvdXRlUGF0dGVybiwgMCk7XG5cdFx0XHRcdHRoaXMuX21Sb3V0ZXNbc1JvdXRlTmFtZV0gPSB7XG5cdFx0XHRcdFx0bmFtZTogc1JvdXRlTmFtZSxcblx0XHRcdFx0XHRwYXR0ZXJuOiBzUm91dGVQYXR0ZXJuLFxuXHRcdFx0XHRcdHRhcmdldHM6IGFSb3V0ZVRhcmdldHMsXG5cdFx0XHRcdFx0cm91dGVMZXZlbDogaVJvdXRlTGV2ZWxcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBBZGQgdGhlIHBhcmVudCB0YXJnZXRzIGluIHRoZSBsaXN0IG9mIHRhcmdldHMgZm9yIHRoZSByb3V0ZVxuXHRcdFx0XHRmb3IgKGNvbnN0IGl0ZW0gb2YgYVJvdXRlVGFyZ2V0cykge1xuXHRcdFx0XHRcdGNvbnN0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbaXRlbV0ucGFyZW50O1xuXHRcdFx0XHRcdGlmIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHRcdFx0YVJvdXRlVGFyZ2V0cy5wdXNoKHNQYXJlbnRUYXJnZXROYW1lKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS5yb3V0ZXJIYXNoS2V5cyA9IFJvdXRlclByb3h5LmV4dHJhY3RFbnRpdHlTZXRzRnJvbUhhc2goc1JvdXRlUGF0dGVybi5zcGxpdChcIjo/cXVlcnk6XCIpWzBdKTtcblxuXHRcdFx0XHRpZiAoIWlzRkNMKSB7XG5cdFx0XHRcdFx0Ly8gVmlldyBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBjYWxjdWxhdGVkIGZyb20gdGhlIHJvdXRlIHBhdHRlcm5cblx0XHRcdFx0XHRjb25zdCB2aWV3TGV2ZWwgPSB0aGlzLl9tVGFyZ2V0c1thUm91dGVUYXJnZXRzWzBdXS52aWV3TGV2ZWw7XG5cdFx0XHRcdFx0aWYgKHZpZXdMZXZlbCA9PT0gdW5kZWZpbmVkIHx8IHZpZXdMZXZlbCA8IGlSb3V0ZUxldmVsKSB7XG5cdFx0XHRcdFx0XHQvLyBUaGVyZSBhcmUgY2FzZXMgd2hlbiBkaWZmZXJlbnQgcm91dGVzIHBvaW50IHRvIHRoZSBzYW1lIHRhcmdldC4gV2UgdGFrZSB0aGVcblx0XHRcdFx0XHRcdC8vIGxhcmdlc3Qgdmlld0xldmVsIGluIHRoYXQgY2FzZS5cblx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLnZpZXdMZXZlbCA9IGlSb3V0ZUxldmVsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZDTCBsZXZlbCBmb3Igbm9uLUZDTCBjYXNlcyBpcyBlcXVhbCB0byAtMVxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gLTE7XG5cdFx0XHRcdH0gZWxzZSBpZiAoYVJvdXRlVGFyZ2V0cy5sZW5ndGggPT09IDEgJiYgdGhpcy5fbVRhcmdldHNbYVJvdXRlVGFyZ2V0c1swXV0uY29udHJvbEFnZ3JlZ2F0aW9uICE9PSBcImJlZ2luQ29sdW1uUGFnZXNcIikge1xuXHRcdFx0XHRcdC8vIFdlJ3JlIGluIHRoZSBjYXNlIHdoZXJlIHRoZXJlJ3Mgb25seSAxIHRhcmdldCBmb3IgdGhlIHJvdXRlLCBhbmQgaXQncyBub3QgaW4gdGhlIGZpcnN0IGNvbHVtblxuXHRcdFx0XHRcdC8vIC0tPiB0aGlzIGlzIGEgZnVsbHNjcmVlbiBjb2x1bW4gYWZ0ZXIgYWxsIGNvbHVtbnMgaW4gdGhlIEZDTCBoYXZlIGJlZW4gdXNlZFxuXHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW2FSb3V0ZVRhcmdldHNbMF1dLkZDTExldmVsID0gMztcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBPdGhlciBGQ0wgY2FzZXNcblx0XHRcdFx0XHRhUm91dGVUYXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRzd2l0Y2ggKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb24pIHtcblx0XHRcdFx0XHRcdFx0Y2FzZSBcImJlZ2luQ29sdW1uUGFnZXNcIjpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAwO1xuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXG5cdFx0XHRcdFx0XHRcdGNhc2UgXCJtaWRDb2x1bW5QYWdlc1wiOlxuXHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5GQ0xMZXZlbCA9IDE7XG5cdFx0XHRcdFx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0uRkNMTGV2ZWwgPSAyO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJvcGFnYXRlIHZpZXdMZXZlbCwgY29udGV4dFBhdHRlcm4sIEZDTExldmVsIGFuZCBjb250cm9sQWdncmVnYXRpb24gdG8gcGFyZW50IHRhcmdldHNcblx0XHRPYmplY3Qua2V5cyh0aGlzLl9tVGFyZ2V0cykuZm9yRWFjaCgoc1RhcmdldE5hbWU6IHN0cmluZykgPT4ge1xuXHRcdFx0bGV0IHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdHdoaWxlIChzUGFyZW50VGFyZ2V0TmFtZSkge1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0udmlld0xldmVsIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS52aWV3TGV2ZWw7XG5cdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NQYXJlbnRUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybiA9XG5cdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLmNvbnRleHRQYXR0ZXJuIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250ZXh0UGF0dGVybjtcblx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1BhcmVudFRhcmdldE5hbWVdLkZDTExldmVsID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uRkNMTGV2ZWwgfHwgdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLkZDTExldmVsO1xuXHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uID1cblx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzUGFyZW50VGFyZ2V0TmFtZV0uY29udHJvbEFnZ3JlZ2F0aW9uIHx8IHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5jb250cm9sQWdncmVnYXRpb247XG5cdFx0XHRcdHNUYXJnZXROYW1lID0gc1BhcmVudFRhcmdldE5hbWU7XG5cdFx0XHRcdHNQYXJlbnRUYXJnZXROYW1lID0gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLnBhcmVudDtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIERldGVybWluZSB0aGUgcm9vdCBlbnRpdHkgZm9yIHRoZSBhcHBcblx0XHRjb25zdCBhTGV2ZWwwUm91dGVOYW1lcyA9IFtdO1xuXHRcdGNvbnN0IGFMZXZlbDFSb3V0ZU5hbWVzID0gW107XG5cdFx0bGV0IHNEZWZhdWx0Um91dGVOYW1lO1xuXG5cdFx0Zm9yIChjb25zdCBzTmFtZSBpbiB0aGlzLl9tUm91dGVzKSB7XG5cdFx0XHRjb25zdCBpTGV2ZWwgPSB0aGlzLl9tUm91dGVzW3NOYW1lXS5yb3V0ZUxldmVsO1xuXHRcdFx0aWYgKGlMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRhTGV2ZWwwUm91dGVOYW1lcy5wdXNoKHNOYW1lKTtcblx0XHRcdH0gZWxzZSBpZiAoaUxldmVsID09PSAxKSB7XG5cdFx0XHRcdGFMZXZlbDFSb3V0ZU5hbWVzLnB1c2goc05hbWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChhTGV2ZWwwUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMFJvdXRlTmFtZXNbMF07XG5cdFx0fSBlbHNlIGlmIChhTGV2ZWwxUm91dGVOYW1lcy5sZW5ndGggPT09IDEpIHtcblx0XHRcdHNEZWZhdWx0Um91dGVOYW1lID0gYUxldmVsMVJvdXRlTmFtZXNbMF07XG5cdFx0fVxuXG5cdFx0aWYgKHNEZWZhdWx0Um91dGVOYW1lKSB7XG5cdFx0XHRjb25zdCBzRGVmYXVsdFRhcmdldE5hbWUgPSB0aGlzLl9tUm91dGVzW3NEZWZhdWx0Um91dGVOYW1lXS50YXJnZXRzLnNsaWNlKC0xKVswXTtcblx0XHRcdHRoaXMuc0NvbnRleHRQYXRoID0gXCJcIjtcblx0XHRcdGNvbnN0IG9TZXR0aW5ncyA9IHRoaXMuX21UYXJnZXRzW3NEZWZhdWx0VGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3MgYXMgTWluaW1hbFBhZ2VTZXR0aW5nIHwgdW5kZWZpbmVkO1xuXHRcdFx0aWYgKG9TZXR0aW5ncykge1xuXHRcdFx0XHR0aGlzLnNDb250ZXh0UGF0aCA9IG9TZXR0aW5ncy5jb250ZXh0UGF0aCB8fCBgLyR7b1NldHRpbmdzLmVudGl0eVNldH1gO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCF0aGlzLnNDb250ZXh0UGF0aCkge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRgQ2Fubm90IGRldGVybWluZSBkZWZhdWx0IGNvbnRleHRQYXRoOiBjb250ZXh0UGF0aCBvciBlbnRpdHlTZXQgbWlzc2luZyBpbiBkZWZhdWx0IHRhcmdldDogJHtzRGVmYXVsdFRhcmdldE5hbWV9YFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRMb2cud2FybmluZyhcIkNhbm5vdCBkZXRlcm1pbmUgZGVmYXVsdCBjb250ZXh0UGF0aDogbm8gZGVmYXVsdCByb3V0ZSBmb3VuZC5cIik7XG5cdFx0fVxuXG5cdFx0Ly8gV2UgbmVlZCB0byBlc3RhYmxpc2ggdGhlIGNvcnJlY3QgcGF0aCB0byB0aGUgZGlmZmVyZW50IHBhZ2VzLCBpbmNsdWRpbmcgdGhlIG5hdmlnYXRpb24gcHJvcGVydGllc1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKVxuXHRcdFx0Lm1hcCgoc1RhcmdldEtleTogc3RyaW5nKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0S2V5XTtcblx0XHRcdH0pXG5cdFx0XHQuc29ydCgoYTogUm91dGluZ1RhcmdldCwgYjogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYS52aWV3TGV2ZWwgIT09IHVuZGVmaW5lZCAmJiBiLnZpZXdMZXZlbCAhPT0gdW5kZWZpbmVkICYmIGEudmlld0xldmVsIDwgYi52aWV3TGV2ZWwgPyAtMSA6IDE7XG5cdFx0XHR9KVxuXHRcdFx0LmZvckVhY2goKHRhcmdldDogUm91dGluZ1RhcmdldCkgPT4ge1xuXHRcdFx0XHQvLyBBZnRlciBzb3J0aW5nIHRoZSB0YXJnZXRzIHBlciBsZXZlbCB3ZSBjYW4gdGhlbiBnbyB0aHJvdWdoIHRoZWlyIG5hdmlnYXRpb24gb2JqZWN0IGFuZCB1cGRhdGUgdGhlIHBhdGhzIGFjY29yZGluZ2x5LlxuXHRcdFx0XHRpZiAodGFyZ2V0Lm9wdGlvbnMpIHtcblx0XHRcdFx0XHRjb25zdCBzZXR0aW5ncyA9IHRhcmdldC5vcHRpb25zLnNldHRpbmdzIGFzIE1pbmltYWxQYWdlU2V0dGluZztcblx0XHRcdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBzZXR0aW5ncy5jb250ZXh0UGF0aCB8fCAoc2V0dGluZ3MuZW50aXR5U2V0ID8gYC8ke3NldHRpbmdzLmVudGl0eVNldH1gIDogXCJcIik7XG5cdFx0XHRcdFx0aWYgKCFzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggJiYgc0NvbnRleHRQYXRoKSB7XG5cdFx0XHRcdFx0XHRzZXR0aW5ncy5mdWxsQ29udGV4dFBhdGggPSBgJHtzQ29udGV4dFBhdGh9L2A7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHBhcmVudE9mOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRcdGlmICh0YXJnZXQucm91dGVySGFzaEtleXM/LlswXSkge1xuXHRcdFx0XHRcdFx0dGhpcy5yb3V0aW5nSGludHMhW3RhcmdldC5yb3V0ZXJIYXNoS2V5cz8uWzBdXSA9IHsgcGFyZW50T2Y6IHBhcmVudE9mIH07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdE9iamVjdC5rZXlzKHNldHRpbmdzLm5hdmlnYXRpb24gfHwge30pLmZvckVhY2goKHNOYXZOYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdC8vIENoZWNrIGlmIGl0J3MgYSBuYXZpZ2F0aW9uIHByb3BlcnR5XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0Lm5hbWUgPT09IFwic2FwLmZlLnRlbXBsYXRlcy5MaXN0UmVwb3J0XCIpIHtcblx0XHRcdFx0XHRcdFx0cGFyZW50T2YucHVzaChzTmF2TmFtZSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRjb25zdCB0YXJnZXRSb3V0ZSA9IHRoaXMuX21Sb3V0ZXNbc2V0dGluZ3MubmF2aWdhdGlvbiFbc05hdk5hbWVdLmRldGFpbD8ucm91dGVdO1xuXG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0Um91dGUgJiYgdGFyZ2V0Um91dGUudGFyZ2V0cykge1xuXHRcdFx0XHRcdFx0XHR0YXJnZXRSb3V0ZS50YXJnZXRzLmZvckVhY2goKHNUYXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3MgJiZcblx0XHRcdFx0XHRcdFx0XHRcdCF0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucz8uc2V0dGluZ3M/LmZ1bGxDb250ZXh0UGF0aFxuXHRcdFx0XHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuY29udGV4dFBhdGgpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdLm9wdGlvbnMhLnNldHRpbmdzIS5mdWxsQ29udGV4dFBhdGggPVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuX21UYXJnZXRzW3NUYXJnZXROYW1lXS5vcHRpb25zIS5zZXR0aW5ncyEuY29udGV4dFBhdGggKyBcIi9cIjtcblx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodGFyZ2V0LnZpZXdMZXZlbCA9PT0gMCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9IGAke1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdChzTmF2TmFtZS5zdGFydHNXaXRoKFwiL1wiKSA/IFwiXCIgOiBcIi9cIikgKyBzTmF2TmFtZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9L2A7XG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLl9tVGFyZ2V0c1tzVGFyZ2V0TmFtZV0ub3B0aW9ucyEuc2V0dGluZ3MhLmZ1bGxDb250ZXh0UGF0aCA9IGAke1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNldHRpbmdzLmZ1bGxDb250ZXh0UGF0aCArIHNOYXZOYW1lXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0vYDtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDYWxjdWxhdGVzIGEgdmlldyBsZXZlbCBmcm9tIGEgcGF0dGVybiBieSBjb3VudGluZyB0aGUgbnVtYmVyIG9mIHNlZ21lbnRzLlxuXHQgKiBAcGFyYW0gc1BhdHRlcm4gVGhlIHBhdHRlcm5cblx0ICogQHBhcmFtIHZpZXdMZXZlbCBUaGUgY3VycmVudCBsZXZlbCBvZiB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBsZXZlbFxuXHQgKi9cblx0X2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuOiBzdHJpbmcsIHZpZXdMZXZlbDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UoXCI6P3F1ZXJ5OlwiLCBcIlwiKTtcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCIvW14vXSokXCIpO1xuXHRcdGlmIChzUGF0dGVybiAmJiBzUGF0dGVyblswXSAhPT0gXCIvXCIgJiYgc1BhdHRlcm5bMF0gIT09IFwiP1wiKSB7XG5cdFx0XHRzUGF0dGVybiA9IGAvJHtzUGF0dGVybn1gO1xuXHRcdH1cblx0XHRpZiAoc1BhdHRlcm4ubGVuZ3RoKSB7XG5cdFx0XHRzUGF0dGVybiA9IHNQYXR0ZXJuLnJlcGxhY2UocmVnZXgsIFwiXCIpO1xuXHRcdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0dGVybikgfHwgc1BhdHRlcm4gPT09IFwiXCIpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuX2dldFZpZXdMZXZlbEZyb21QYXR0ZXJuKHNQYXR0ZXJuLCArK3ZpZXdMZXZlbCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5fZ2V0Vmlld0xldmVsRnJvbVBhdHRlcm4oc1BhdHRlcm4sIHZpZXdMZXZlbCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB2aWV3TGV2ZWw7XG5cdFx0fVxuXHR9XG5cblx0X2dldFJvdXRlSW5mb3JtYXRpb24oc1JvdXRlTmFtZT86IHN0cmluZyk6IEludGVybmFsUm91dGVEZWZpbml0aW9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoc1JvdXRlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fbVJvdXRlc1tzUm91dGVOYW1lXTtcblx0fVxuXG5cdF9nZXRUYXJnZXRJbmZvcm1hdGlvbihzVGFyZ2V0TmFtZT86IHN0cmluZyk6IFJvdXRpbmdUYXJnZXQgfCB1bmRlZmluZWQge1xuXHRcdGlmIChzVGFyZ2V0TmFtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5fbVRhcmdldHNbc1RhcmdldE5hbWVdO1xuXHR9XG5cblx0X2dldENvbXBvbmVudElkKHNPd25lcklkOiBzdHJpbmcsIHNDb21wb25lbnRJZDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAoc0NvbXBvbmVudElkLmluZGV4T2YoYCR7c093bmVySWR9LS0tYCkgPT09IDApIHtcblx0XHRcdHJldHVybiBzQ29tcG9uZW50SWQuc3Vic3RyaW5nKHNPd25lcklkLmxlbmd0aCArIDMpO1xuXHRcdH1cblx0XHRyZXR1cm4gc0NvbXBvbmVudElkO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0YXJnZXQgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gY29tcG9uZW50LlxuXHQgKiBAcGFyYW0gY29tcG9uZW50T3JWaWV3IEluc3RhbmNlIG9mIHRoZSBjb21wb25lbnQgb3Igdmlld1xuXHQgKiBAcmV0dXJucyBUaGUgY29uZmlndXJhdGlvbiBmb3IgdGhlIHRhcmdldFxuXHQgKi9cblx0Z2V0VGFyZ2V0SW5mb3JtYXRpb25Gb3IoY29tcG9uZW50T3JWaWV3OiBDb21wb25lbnQgfCBWaWV3KTogUm91dGluZ1RhcmdldCB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgY29ycmVjdFRhcmdldE5hbWUgPSB0aGlzLmdldFRhcmdldE5hbWUoY29tcG9uZW50T3JWaWV3KTtcblx0XHRyZXR1cm4gdGhpcy5fZ2V0VGFyZ2V0SW5mb3JtYXRpb24oY29ycmVjdFRhcmdldE5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbmFtZSBvZiB0aGUgcGFnZSBzaG93biBpbiB0aGUgdmlldyBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCByb3V0aW5nIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSBjb21wb25lbnRPclZpZXdcblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHBhZ2Vcblx0ICovXG5cdGdldFRhcmdldE5hbWUoY29tcG9uZW50T3JWaWV3OiBDb21wb25lbnQgfCBWaWV3KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCB0YXJnZXRDb21wb25lbnRJZCA9IHRoaXMuX2dldENvbXBvbmVudElkKFxuXHRcdFx0KGNvbXBvbmVudE9yVmlldyBhcyB1bmtub3duIGFzIHsgX3NPd25lcklkOiBzdHJpbmcgfSkuX3NPd25lcklkLFxuXHRcdFx0Y29tcG9uZW50T3JWaWV3LmdldElkKClcblx0XHQpO1xuXHRcdGxldCBjb3JyZWN0VGFyZ2V0TmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdE9iamVjdC5rZXlzKHRoaXMuX21UYXJnZXRzKS5mb3JFYWNoKCh0YXJnZXROYW1lOiBzdHJpbmcpID0+IHtcblx0XHRcdGlmICh0aGlzLl9tVGFyZ2V0c1t0YXJnZXROYW1lXS5pZCA9PT0gdGFyZ2V0Q29tcG9uZW50SWQgfHwgdGhpcy5fbVRhcmdldHNbdGFyZ2V0TmFtZV0udmlld0lkID09PSB0YXJnZXRDb21wb25lbnRJZCkge1xuXHRcdFx0XHRjb3JyZWN0VGFyZ2V0TmFtZSA9IHRhcmdldE5hbWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIGNvcnJlY3RUYXJnZXROYW1lO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldCB0aGUgbmFtZSBvZiB0aGUgcGFnZSBzaG93biBpbiB0aGUgdmlldyBhcyBkZWZpbmVkIGluIHRoZSBtYW5pZmVzdCByb3V0aW5nIHNlY3Rpb24uXG5cdCAqIEBwYXJhbSB2aWV3XG5cdCAqIEByZXR1cm5zIFRoZSBuYW1lIG9mIHRoZSBwYWdlXG5cdCAqL1xuXHRnZXRUYXJnZXROYW1lRm9yVmlldyh2aWV3OiBWaWV3KTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBwYWdlQ29tcG9uZW50ID0gQ29tcG9uZW50LmdldE93bmVyQ29tcG9uZW50Rm9yKHZpZXcpO1xuXHRcdGxldCB0YXJnZXROYW1lID0gcGFnZUNvbXBvbmVudCA/IHRoaXMuZ2V0VGFyZ2V0TmFtZShwYWdlQ29tcG9uZW50KSA6IHVuZGVmaW5lZDtcblx0XHRpZiAoIXRhcmdldE5hbWUpIHtcblx0XHRcdHRhcmdldE5hbWUgPSB0aGlzLmdldFRhcmdldE5hbWUodmlldyk7XG5cdFx0fVxuXHRcdHJldHVybiB0YXJnZXROYW1lO1xuXHR9XG5cblx0Z2V0TGFzdFNlbWFudGljTWFwcGluZygpOiBTZW1hbnRpY01hcHBpbmcgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiB0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nO1xuXHR9XG5cblx0c2V0TGFzdFNlbWFudGljTWFwcGluZyhvTWFwcGluZz86IFNlbWFudGljTWFwcGluZyk6IHZvaWQge1xuXHRcdHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcgPSBvTWFwcGluZztcblx0fVxuXG5cdGFzeW5jIGdldEhhc2hGcm9tUm91dGUoY29udGV4dDogQ29udGV4dCwgcm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLCBwYXJhbWV0ZXJNYXBwaW5nPzogdW5rbm93bik6IFByb21pc2U8c3RyaW5nPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoXCJcIik7XG5cdFx0fVxuXHRcdGxldCB0YXJnZXRVUkxQcm9taXNlOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD47XG5cdFx0aWYgKCFwYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHR0YXJnZXRVUkxQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0KSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKHBhcmFtZXRlck1hcHBpbmcgYXMgUm91dGluZ1BhcmFtZXRlck1hcCwgcm91dGVOYW1lLCBjb250ZXh0KS50aGVuKFxuXHRcdFx0XHQocGFyYW1ldGVyczogb2JqZWN0IHwgdW5kZWZpbmVkKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub1JvdXRlci5nZXRVUkwocm91dGVOYW1lISwgcGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiAoYXdhaXQgdGFyZ2V0VVJMUHJvbWlzZSkgYXMgc3RyaW5nO1xuXHR9XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IGZhbHNlXG5cdCk6IFByb21pc2U8dm9pZD47XG5cblx0YXN5bmMgbmF2aWdhdGVUbyhcblx0XHRvQ29udGV4dDogQ29udGV4dCxcblx0XHRzUm91dGVOYW1lOiBzdHJpbmcgfCBudWxsLFxuXHRcdG1QYXJhbWV0ZXJNYXBwaW5nOiB1bmtub3duLFxuXHRcdGJQcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuLFxuXHRcdGRlbGF5ZWRVc2FnZT86IHRydWVcblx0KTogUHJvbWlzZTwoKSA9PiB2b2lkPjtcblxuXHRhc3luYyBuYXZpZ2F0ZVRvKFxuXHRcdG9Db250ZXh0OiBDb250ZXh0LFxuXHRcdHNSb3V0ZU5hbWU6IHN0cmluZyB8IG51bGwsXG5cdFx0bVBhcmFtZXRlck1hcHBpbmc6IHVua25vd24sXG5cdFx0YlByZXNlcnZlSGlzdG9yeT86IGJvb2xlYW4sXG5cdFx0ZGVsYXllZFVzYWdlPzogYm9vbGVhblxuXHQpOiBQcm9taXNlPCgoKSA9PiB2b2lkKSB8IHZvaWQ+O1xuXG5cdGFzeW5jIG5hdmlnYXRlVG8oXG5cdFx0b0NvbnRleHQ6IENvbnRleHQsXG5cdFx0c1JvdXRlTmFtZTogc3RyaW5nIHwgbnVsbCxcblx0XHRtUGFyYW1ldGVyTWFwcGluZzogdW5rbm93bixcblx0XHRiUHJlc2VydmVIaXN0b3J5PzogYm9vbGVhbixcblx0XHRkZWxheWVkVXNhZ2U/OiBib29sZWFuXG5cdCk6IFByb21pc2U8KCgpID0+IHZvaWQpIHwgdm9pZD4ge1xuXHRcdGlmICghdGhpcy5lbmFibGVkKSB7XG5cdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG5cdFx0fVxuXHRcdGxldCBzVGFyZ2V0VVJMUHJvbWlzZSwgYklzU3RpY2t5TW9kZTogYm9vbGVhbjtcblx0XHRpZiAob0NvbnRleHQuZ2V0TW9kZWwoKSAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCAmJiBvQ29udGV4dC5nZXRNb2RlbCgpLmdldE1ldGFNb2RlbCgpKSB7XG5cdFx0XHRiSXNTdGlja3lNb2RlID0gTW9kZWxIZWxwZXIuaXNTdGlja3lTZXNzaW9uU3VwcG9ydGVkKG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCkpO1xuXHRcdH1cblx0XHRpZiAoIW1QYXJhbWV0ZXJNYXBwaW5nKSB7XG5cdFx0XHQvLyBpZiB0aGVyZSBpcyBubyBwYXJhbWV0ZXIgbWFwcGluZyBkZWZpbmUgdGhpcyBtZWFuIHdlIHJlbHkgZW50aXJlbHkgb24gdGhlIGJpbmRpbmcgY29udGV4dCBwYXRoXG5cdFx0XHRzVGFyZ2V0VVJMUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZShTZW1hbnRpY0tleUhlbHBlci5nZXRTZW1hbnRpY1BhdGgob0NvbnRleHQpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1RhcmdldFVSTFByb21pc2UgPSB0aGlzLnByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJNYXBwaW5nIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsIHNSb3V0ZU5hbWUsIG9Db250ZXh0KS50aGVuKFxuXHRcdFx0XHQobVBhcmFtZXRlcnM6IG9iamVjdCB8IHVuZGVmaW5lZCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXIuZ2V0VVJMKHNSb3V0ZU5hbWUhLCBtUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGNvbnN0IHRhcmdldFVybCA9IGF3YWl0IHNUYXJnZXRVUkxQcm9taXNlO1xuXHRcdGNvbnN0IG5hdmlnYXRlRnVuY3Rpb24gPSAoKTogdm9pZCA9PiB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5uYXZUb0hhc2godGFyZ2V0VXJsISwgYlByZXNlcnZlSGlzdG9yeSwgZmFsc2UsIGZhbHNlLCAhYklzU3RpY2t5TW9kZSk7XG5cdFx0fTtcblx0XHRpZiAoZGVsYXllZFVzYWdlID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbjsgLy8gd3JvbmcgYnV0IHNvbWVob3cgdGhlIHR5cGVzIGFyZSBhbm5veWluZ1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gbmF2aWdhdGVGdW5jdGlvbigpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBNZXRob2QgdG8gcmV0dXJuIGEgbWFwIG9mIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnMgd2hlcmUgdGhlIGJpbmRpbmcgc3ludGF4IGlzIHJlc29sdmVkIHRvIHRoZSBjdXJyZW50IG1vZGVsLlxuXHQgKiBAcGFyYW0gbVBhcmFtZXRlcnMgUGFyYW1ldGVycyBtYXAgaW4gdGhlIGZvcm1hdCBbazogc3RyaW5nXSA6IENvbXBsZXhCaW5kaW5nU3ludGF4XG5cdCAqIEBwYXJhbSBzVGFyZ2V0Um91dGUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBvQ29udGV4dCBUaGUgaW5zdGFuY2Ugb2YgdGhlIGJpbmRpbmcgY29udGV4dFxuXHQgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggcmVzb2x2ZXMgdG8gdGhlIHJvdXRpbmcgdGFyZ2V0IHBhcmFtZXRlcnNcblx0ICovXG5cdGFzeW5jIHByZXBhcmVQYXJhbWV0ZXJzKG1QYXJhbWV0ZXJzOiBSb3V0aW5nUGFyYW1ldGVyTWFwLCBzVGFyZ2V0Um91dGU6IHN0cmluZyB8IG51bGwsIG9Db250ZXh0OiBDb250ZXh0KTogUHJvbWlzZTxvYmplY3Q+IHtcblx0XHRsZXQgb1BhcmFtZXRlcnNQcm9taXNlO1xuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBzQ29udGV4dFBhdGggPSBvQ29udGV4dC5nZXRQYXRoKCk7XG5cdFx0XHRjb25zdCBvTWV0YU1vZGVsOiBPRGF0YU1ldGFNb2RlbCA9IG9Db250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0XHRjb25zdCBhQ29udGV4dFBhdGhQYXJ0cyA9IHNDb250ZXh0UGF0aC5zcGxpdChcIi9cIik7XG5cdFx0XHRjb25zdCBhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IE9iamVjdC5rZXlzKG1QYXJhbWV0ZXJzKS5tYXAoYXN5bmMgKHNQYXJhbWV0ZXJLZXk6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRjb25zdCBzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24gPSBtUGFyYW1ldGVyc1tzUGFyYW1ldGVyS2V5XTtcblx0XHRcdFx0Ly8gV2UgYXNzdW1lIHRoZSBkZWZpbmVkIHBhcmFtZXRlcnMgd2lsbCBiZSBjb21wYXRpYmxlIHdpdGggYSBiaW5kaW5nIGV4cHJlc3Npb25cblx0XHRcdFx0Y29uc3Qgb1BhcnNlZEV4cHJlc3Npb24gPSBCaW5kaW5nSW5mby5wYXJzZShzUGFyYW1ldGVyTWFwcGluZ0V4cHJlc3Npb24pO1xuXHRcdFx0XHRjb25zdCBhUGFydHMgPSBvUGFyc2VkRXhwcmVzc2lvbi5wYXJ0cyB8fCBbb1BhcnNlZEV4cHJlc3Npb25dO1xuXHRcdFx0XHRjb25zdCBhUmVzb2x2ZWRQYXJhbWV0ZXJQcm9taXNlcyA9IGFQYXJ0cy5tYXAoYXN5bmMgZnVuY3Rpb24gKG9QYXRoUGFydDogUHJvcGVydHlCaW5kaW5nSW5mbykge1xuXHRcdFx0XHRcdGNvbnN0IGFSZWxhdGl2ZVBhcnRzID0gb1BhdGhQYXJ0LnBhdGguc3BsaXQoXCIuLi9cIik7XG5cdFx0XHRcdFx0Ly8gV2UgZ28gdXAgdGhlIGN1cnJlbnQgY29udGV4dCBwYXRoIGFzIG1hbnkgdGltZXMgYXMgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0Y29uc3QgYUxvY2FsUGFydHMgPSBhQ29udGV4dFBhdGhQYXJ0cy5zbGljZSgwLCBhQ29udGV4dFBhdGhQYXJ0cy5sZW5ndGggLSBhUmVsYXRpdmVQYXJ0cy5sZW5ndGggKyAxKTtcblx0XHRcdFx0XHRjb25zdCBsb2NhbENvbnRleHRQYXRoID0gYUxvY2FsUGFydHMuam9pbihcIi9cIik7XG5cdFx0XHRcdFx0Y29uc3QgbG9jYWxDb250ZXh0ID1cblx0XHRcdFx0XHRcdGxvY2FsQ29udGV4dFBhdGggPT09IG9Db250ZXh0LmdldFBhdGgoKVxuXHRcdFx0XHRcdFx0XHQ/IG9Db250ZXh0XG5cdFx0XHRcdFx0XHRcdDogb0NvbnRleHQuZ2V0TW9kZWwoKS5iaW5kQ29udGV4dChsb2NhbENvbnRleHRQYXRoKS5nZXRCb3VuZENvbnRleHQoKTtcblxuXHRcdFx0XHRcdGNvbnN0IG9NZXRhQ29udGV4dCA9IG9NZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQobG9jYWxDb250ZXh0UGF0aCArIFwiL1wiICsgYVJlbGF0aXZlUGFydHNbYVJlbGF0aXZlUGFydHMubGVuZ3RoIC0gMV0pO1xuXHRcdFx0XHRcdHJldHVybiBsb2NhbENvbnRleHQucmVxdWVzdFByb3BlcnR5KGFSZWxhdGl2ZVBhcnRzW2FSZWxhdGl2ZVBhcnRzLmxlbmd0aCAtIDFdKS50aGVuKGZ1bmN0aW9uIChvVmFsdWUpIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9Qcm9wZXJ0eUluZm8gPSBvTWV0YUNvbnRleHQuZ2V0T2JqZWN0KCk7XG5cdFx0XHRcdFx0XHRjb25zdCBzRWRtVHlwZSA9IG9Qcm9wZXJ0eUluZm8uJFR5cGU7XG5cdFx0XHRcdFx0XHRyZXR1cm4gT0RhdGFVdGlscy5mb3JtYXRMaXRlcmFsKG9WYWx1ZSwgc0VkbVR5cGUpO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5hbGwoYVJlc29sdmVkUGFyYW1ldGVyUHJvbWlzZXMpLnRoZW4oKGFSZXNvbHZlZFBhcmFtZXRlcnM6IFByb3BlcnR5QmluZGluZ0luZm8pID0+IHtcblx0XHRcdFx0XHRjb25zdCB2YWx1ZSA9IG9QYXJzZWRFeHByZXNzaW9uLmZvcm1hdHRlclxuXHRcdFx0XHRcdFx0PyBvUGFyc2VkRXhwcmVzc2lvbi5mb3JtYXR0ZXIuYXBwbHkodGhpcywgYVJlc29sdmVkUGFyYW1ldGVycylcblx0XHRcdFx0XHRcdDogYVJlc29sdmVkUGFyYW1ldGVycy5qb2luKFwiXCIpO1xuXHRcdFx0XHRcdHJldHVybiB7IGtleTogc1BhcmFtZXRlcktleSwgdmFsdWU6IHZhbHVlIH07XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSk7XG5cblx0XHRcdG9QYXJhbWV0ZXJzUHJvbWlzZSA9IFByb21pc2UuYWxsKGFBbGxSZXNvbHZlZFBhcmFtZXRlclByb21pc2VzKS50aGVuKGZ1bmN0aW9uIChhQWxsUmVzb2x2ZWRQYXJhbWV0ZXJzOiBSZXNvbHZlZFBhcmFtZXRlcnNbXSkge1xuXHRcdFx0XHRjb25zdCBvUGFyYW1ldGVyczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblx0XHRcdFx0YUFsbFJlc29sdmVkUGFyYW1ldGVycy5mb3JFYWNoKGZ1bmN0aW9uIChvUmVzb2x2ZWRQYXJhbWV0ZXI6IFJlc29sdmVkUGFyYW1ldGVycykge1xuXHRcdFx0XHRcdG9QYXJhbWV0ZXJzW29SZXNvbHZlZFBhcmFtZXRlci5rZXldID0gb1Jlc29sdmVkUGFyYW1ldGVyLnZhbHVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0cmV0dXJuIG9QYXJhbWV0ZXJzO1xuXHRcdFx0fSk7XG5cdFx0fSBjYXRjaCAob0Vycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoYENvdWxkIG5vdCBwYXJzZSB0aGUgcGFyYW1ldGVycyBmb3IgdGhlIG5hdmlnYXRpb24gdG8gcm91dGUgJHtzVGFyZ2V0Um91dGV9YCk7XG5cdFx0XHRvUGFyYW1ldGVyc1Byb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuXHRcdH1cblx0XHRyZXR1cm4gb1BhcmFtZXRlcnNQcm9taXNlO1xuXHR9XG5cblx0X2ZpcmVSb3V0ZU1hdGNoRXZlbnRzKG1QYXJhbWV0ZXJzOiBSb3V0ZSRNYXRjaGVkRXZlbnRQYXJhbWV0ZXJzKTogdm9pZCB7XG5cdFx0dGhpcy5iaW5kaW5nQ2xlYW51cFByb21pc2VzID0gW107XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcInJvdXRlTWF0Y2hlZFwiLCBtUGFyYW1ldGVycyk7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmZpcmVFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIG1QYXJhbWV0ZXJzKTtcblxuXHRcdEVkaXRTdGF0ZS5jbGVhblByb2Nlc3NlZEVkaXRTdGF0ZSgpOyAvLyBSZXNldCBVSSBzdGF0ZSB3aGVuIGFsbCBiaW5kaW5ncyBoYXZlIGJlZW4gcmVmcmVzaGVkXG5cdH1cblxuXHQvKipcblx0ICogTmF2aWdhdGVzIHRvIGEgY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIENvbnRleHQgdG8gYmUgbmF2aWdhdGVkIHRvLCBvciB0aGUgbGlzdCBiaW5kaW5nIGZvciBjcmVhdGlvbiAoZGVmZXJyZWQgY3JlYXRpb24pXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVyc10gT3B0aW9uYWwsIG1hcCBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgYXR0cmlidXRlczpcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmNoZWNrTm9IYXNoQ2hhbmdlXSBOYXZpZ2F0ZSB0byB0aGUgY29udGV4dCB3aXRob3V0IGNoYW5naW5nIHRoZSBVUkxcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmFzeW5jQ29udGV4dF0gVGhlIGNvbnRleHQgaXMgY3JlYXRlZCBhc3luYywgbmF2aWdhdGUgdG8gKC4uLikgYW5kXG5cdCAqICAgICAgICAgICAgICAgICAgICB3YWl0IGZvciBQcm9taXNlIHRvIGJlIHJlc29sdmVkIGFuZCB0aGVuIG5hdmlnYXRlIGludG8gdGhlIGNvbnRleHRcblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJEZWZlcnJlZENvbnRleHRdIFRoZSBjb250ZXh0IHNoYWxsIGJlIGNyZWF0ZWQgZGVmZXJyZWQgYXQgdGhlIHRhcmdldCBwYWdlXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5lZGl0YWJsZV0gVGhlIHRhcmdldCBwYWdlIHNoYWxsIGJlIGltbWVkaWF0ZWx5IGluIHRoZSBlZGl0IG1vZGUgdG8gYXZvaWQgZmxpY2tlcmluZ1xuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMuYlBlcnNpc3RPUFNjcm9sbF0gVGhlIGJQZXJzaXN0T1BTY3JvbGwgd2lsbCBiZSB1c2VkIGZvciBzY3JvbGxpbmcgdG8gZmlyc3QgdGFiXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbF0gYCsxYCBpZiB3ZSBhZGQgYSBjb2x1bW4gaW4gRkNMLCBgLTFgIHRvIHJlbW92ZSBhIGNvbHVtbiwgMCB0byBzdGF5IG9uIHRoZSBzYW1lIGNvbHVtblxuXHQgKiBAcGFyYW0gW3BhcmFtZXRlcnMubm9QcmVzZXJ2YXRpb25DYWNoZV0gRG8gbmF2aWdhdGlvbiB3aXRob3V0IHRha2luZyBpbnRvIGFjY291bnQgdGhlIHByZXNlcnZlZCBjYWNoZSBtZWNoYW5pc21cblx0ICogQHBhcmFtIFtwYXJhbWV0ZXJzLmJSZWNyZWF0ZUNvbnRleHRdIEZvcmNlIHJlLWNyZWF0aW9uIG9mIHRoZSBjb250ZXh0IGluc3RlYWQgb2YgdXNpbmcgdGhlIG9uZSBwYXNzZWQgYXMgcGFyYW1ldGVyXG5cdCAqIEBwYXJhbSBbcGFyYW1ldGVycy5iRm9yY2VGb2N1c10gRm9yY2VzIGZvY3VzIHNlbGVjdGlvbiBhZnRlciBuYXZpZ2F0aW9uXG5cdCAqIEBwYXJhbSBbdmlld0RhdGFdIFZpZXcgZGF0YVxuXHQgKiBAcGFyYW0gW3ZpZXdEYXRhLm5hdmlnYXRpb25dXG5cdCAqIEBwYXJhbSBbY3VycmVudFRhcmdldEluZm9dIFRoZSB0YXJnZXQgaW5mb3JtYXRpb24gZnJvbSB3aGljaCB0aGUgbmF2aWdhdGlvbiBpcyB0cmlnZ2VyZWRcblx0ICogQHBhcmFtIFtjdXJyZW50VGFyZ2V0SW5mby5uYW1lXVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHdoaWNoIGlzIHJlc29sdmVkIG9uY2UgdGhlIG5hdmlnYXRpb24gaXMgdHJpZ2dlcmVkXG5cdCAqIEBmaW5hbFxuXHQgKi9cblx0YXN5bmMgbmF2aWdhdGVUb0NvbnRleHQoXG5cdFx0Y29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsXG5cdFx0cGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzID0ge30sXG5cdFx0dmlld0RhdGE/OiB7IG5hdmlnYXRpb24/OiBvYmplY3QgfSxcblx0XHRjdXJyZW50VGFyZ2V0SW5mbz86IHsgbmFtZTogc3RyaW5nIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblxuXHRcdGxldCB0YXJnZXRSb3V0ZSA9IFwiXCI7XG5cdFx0bGV0IHJvdXRlUGFyYW1ldGVyc1Byb21pc2U6IFByb21pc2U8b2JqZWN0PiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBpc1N0aWNreU1vZGUgPSBNb2RlbEhlbHBlci5pc1N0aWNreVNlc3Npb25TdXBwb3J0ZWQodGhpcy5vTWV0YU1vZGVsKTtcblxuXHRcdC8vIE1hbmFnZSBwYXJhbWV0ZXIgbWFwcGluZ1xuXHRcdGlmIChwYXJhbWV0ZXJzPy50YXJnZXRQYXRoICYmIHZpZXdEYXRhPy5uYXZpZ2F0aW9uKSB7XG5cdFx0XHRjb25zdCBuYXZpZ2F0aW9uSW5mbyA9IHZpZXdEYXRhLm5hdmlnYXRpb24gYXMgUmVjb3JkPHN0cmluZywgeyBkZXRhaWw6IHsgcm91dGU6IHN0cmluZzsgcGFyYW1ldGVyczogb2JqZWN0IH0gfT47XG5cdFx0XHRjb25zdCBvUm91dGVEZXRhaWwgPSBuYXZpZ2F0aW9uSW5mb1twYXJhbWV0ZXJzLnRhcmdldFBhdGhdLmRldGFpbDtcblx0XHRcdHRhcmdldFJvdXRlID0gb1JvdXRlRGV0YWlsLnJvdXRlO1xuXG5cdFx0XHRpZiAob1JvdXRlRGV0YWlsLnBhcmFtZXRlcnMgJiYgY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRyb3V0ZVBhcmFtZXRlcnNQcm9taXNlID0gdGhpcy5wcmVwYXJlUGFyYW1ldGVycyhcblx0XHRcdFx0XHRvUm91dGVEZXRhaWwucGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJvdXRpbmdQYXJhbWV0ZXJNYXAsXG5cdFx0XHRcdFx0dGFyZ2V0Um91dGUsXG5cdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBzVGFyZ2V0UGF0aCA9IHRoaXMuX2dldFBhdGhGcm9tQ29udGV4dChjb250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHQvLyBJZiB0aGUgcGF0aCBpcyBlbXB0eSwgd2UncmUgc3VwcG9zZWQgdG8gbmF2aWdhdGUgdG8gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIGFwcFxuXHRcdC8vIENoZWNrIGlmIHdlIG5lZWQgdG8gZXhpdCBmcm9tIHRoZSBhcHAgaW5zdGVhZFxuXHRcdGlmIChzVGFyZ2V0UGF0aC5sZW5ndGggPT09IDAgJiYgdGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290KSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5leGl0RnJvbUFwcCgpO1xuXHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0cnVlKTtcblx0XHR9XG5cblx0XHQvLyBJZiB0aGUgbmF2aWdhdGlvbiBnb2VzIHdpdGggYSBjcmVhdGlvbiwgd2UgYWRkICguLi4pIHRvIHRoZSBwYXRoIChleHBlY3RpbmcgY29udGV4dCBpcyBhbiBPRGF0YUxpc3RCaW5kaW5nKVxuXHRcdGlmIChwYXJhbWV0ZXJzPy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycykge1xuXHRcdFx0c1RhcmdldFBhdGggKz0gXCIoLi4uKVwiO1xuXHRcdH1cblxuXHRcdC8vIEFkZCBsYXlvdXQgcGFyYW1ldGVyIGlmIG5lZWRlZFxuXHRcdGNvbnN0IHNMYXlvdXQgPSB0aGlzLl9jYWxjdWxhdGVMYXlvdXQoc1RhcmdldFBhdGgsIHBhcmFtZXRlcnMpO1xuXHRcdGlmIChzTGF5b3V0KSB7XG5cdFx0XHRzVGFyZ2V0UGF0aCArPSBgP2xheW91dD0ke3NMYXlvdXR9YDtcblx0XHR9XG5cblx0XHQvLyBOYXZpZ2F0aW9uIHBhcmFtZXRlcnMgZm9yIGxhdGVyIHVzYWdlXG5cdFx0Y29uc3Qgb05hdmlnYXRpb25JbmZvOiBSb3V0aW5nTmF2aWdhdGlvbkluZm8gPSB7XG5cdFx0XHRjcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVyczogcGFyYW1ldGVycy5jcmVhdGVPbk5hdmlnYXRlUGFyYW1ldGVycyxcblx0XHRcdGJUYXJnZXRFZGl0YWJsZTogcGFyYW1ldGVycz8uZWRpdGFibGUsXG5cdFx0XHRiUGVyc2lzdE9QU2Nyb2xsOiBwYXJhbWV0ZXJzPy5wZXJzaXN0T1BTY3JvbGwsXG5cdFx0XHRiU2hvd1BsYWNlaG9sZGVyOiBwYXJhbWV0ZXJzPy5zaG93UGxhY2Vob2xkZXIgIT09IHVuZGVmaW5lZCA/IHBhcmFtZXRlcnM/LnNob3dQbGFjZWhvbGRlciA6IHRydWUsXG5cdFx0XHRyZWFzb246IHBhcmFtZXRlcnM/LnJlYXNvbixcblx0XHRcdHJlZGlyZWN0ZWRUb05vbkRyYWZ0OiBwYXJhbWV0ZXJzLnJlZGlyZWN0ZWRUb05vbkRyYWZ0XG5cdFx0fTtcblxuXHRcdGlmIChwYXJhbWV0ZXJzPy51cGRhdGVGQ0xMZXZlbCAhPT0gLTEgJiYgcGFyYW1ldGVycz8ucmVjcmVhdGVDb250ZXh0ICE9PSB0cnVlKSB7XG5cdFx0XHRpZiAoY29udGV4dC5pc0E8Q29udGV4dD4oXCJzYXAudWkubW9kZWwub2RhdGEudjQuQ29udGV4dFwiKSkge1xuXHRcdFx0XHRvTmF2aWdhdGlvbkluZm8udXNlQ29udGV4dCA9IGNvbnRleHQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnM/LmNoZWNrTm9IYXNoQ2hhbmdlKSB7XG5cdFx0XHQvLyBDaGVjayBpZiB0aGUgbmV3IGhhc2ggaXMgZGlmZmVyZW50IGZyb20gdGhlIGN1cnJlbnQgb25lXG5cdFx0XHRjb25zdCBzQ3VycmVudEhhc2hOb0FwcFN0YXRlID0gdGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpLnJlcGxhY2UoL1smP117MX1zYXAtaWFwcC1zdGF0ZT1bQS1aMC05XSsvLCBcIlwiKTtcblx0XHRcdGlmIChzVGFyZ2V0UGF0aCA9PT0gc0N1cnJlbnRIYXNoTm9BcHBTdGF0ZSkge1xuXHRcdFx0XHQvLyBUaGUgaGFzaCBkb2Vzbid0IGNoYW5nZSwgYnV0IHdlIGZpcmUgdGhlIHJvdXRlTWF0Y2ggZXZlbnQgdG8gdHJpZ2dlciBwYWdlIHJlZnJlc2ggLyBiaW5kaW5nXG5cdFx0XHRcdGNvbnN0IHJvdXRlSW5mb0J5SGFzaCA9IHRoaXMub1JvdXRlci5nZXRSb3V0ZUluZm9CeUhhc2godGhpcy5vUm91dGVyUHJveHkuZ2V0SGFzaCgpKTtcblx0XHRcdFx0bGV0IG1FdmVudFBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSB7IGNvbmZpZzoge30gfTtcblx0XHRcdFx0aWYgKHJvdXRlSW5mb0J5SGFzaCkge1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMgPSB7IC4uLnJvdXRlSW5mb0J5SGFzaCwgY29uZmlnOiB7fSB9O1xuXHRcdFx0XHRcdG1FdmVudFBhcmFtZXRlcnMubmF2aWdhdGlvbkluZm8gPSBvTmF2aWdhdGlvbkluZm87XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy5yb3V0ZUluZm9ybWF0aW9uID0gdGhpcy5fZ2V0Um91dGVJbmZvcm1hdGlvbih0aGlzLnNDdXJyZW50Um91dGVOYW1lKTtcblx0XHRcdFx0XHRtRXZlbnRQYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cdFx0XHRcdFx0bUV2ZW50UGFyYW1ldGVycy52aWV3cyA9IHRoaXMuYUN1cnJlbnRWaWV3cztcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRoaXMub1JvdXRlclByb3h5LnNldEZvY3VzRm9yY2VkKCEhcGFyYW1ldGVycy5mb3JjZUZvY3VzKTtcblxuXHRcdFx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtRXZlbnRQYXJhbWV0ZXJzKTtcblxuXHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChwYXJhbWV0ZXJzPy50cmFuc2llbnQgJiYgISFwYXJhbWV0ZXJzLmVkaXRhYmxlICYmICFzVGFyZ2V0UGF0aC5pbmNsdWRlcyhcIiguLi4pXCIpKSB7XG5cdFx0XHRpZiAoc1RhcmdldFBhdGguaW5jbHVkZXMoXCI/XCIpKSB7XG5cdFx0XHRcdHNUYXJnZXRQYXRoICs9IFwiJmktYWN0aW9uPWNyZWF0ZVwiO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0c1RhcmdldFBhdGggKz0gXCI/aS1hY3Rpb249Y3JlYXRlXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBhcmFtZXRlcnMubmF2TW9kZSA9PT0gXCJvcGVuSW5OZXdUYWJcIikge1xuXHRcdFx0Ly8gTmF2aWdhdGUgdG8gbmV3IHRhYi8gd2luZG93XG5cdFx0XHRzYXAudWkucmVxdWlyZShbXCJzYXAvdXNoZWxsL0NvbnRhaW5lclwiXSwgYXN5bmMgKENvbnRhaW5lcjogQ29udGFpbmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHNoZWxsU2VydmljZUhlbHBlciA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRTaGVsbFNlcnZpY2VzKCk7XG5cdFx0XHRcdGNvbnN0IHBhcnNlZFVybCA9IHNoZWxsU2VydmljZUhlbHBlci5wYXJzZVNoZWxsSGFzaChkb2N1bWVudC5sb2NhdGlvbi5oYXNoKTtcblx0XHRcdFx0Y29uc3QgbmF2aWdhdGlvblNlcnZpY2UgPSAoYXdhaXQgQ29udGFpbmVyLmdldFNlcnZpY2VBc3luYyhcIk5hdmlnYXRpb25cIikpIGFzIE5hdmlnYXRpb247XG5cdFx0XHRcdGNvbnN0IGhyZWYgPSBhd2FpdCBuYXZpZ2F0aW9uU2VydmljZS5nZXRIcmVmKHtcblx0XHRcdFx0XHR0YXJnZXQ6IHtcblx0XHRcdFx0XHRcdHNlbWFudGljT2JqZWN0OiBwYXJzZWRVcmwuc2VtYW50aWNPYmplY3QsXG5cdFx0XHRcdFx0XHRhY3Rpb246IHBhcnNlZFVybC5hY3Rpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHBhcmFtczogcGFyc2VkVXJsLnBhcmFtc1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0Y29uc3QgYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lID0gYXdhaXQgc2hlbGxTZXJ2aWNlSGVscGVyLmdldEluZnJhbWVVcmwoKTtcblx0XHRcdFx0bGV0IHVybCwgdGFyZ2V0VXJsOiBzdHJpbmc7XG5cdFx0XHRcdGlmIChhcHBsaWNhdGlvblVybEJhc2VkT25JZnJhbWUpIHtcblx0XHRcdFx0XHR1cmwgPSBuZXcgVVJMKGFwcGxpY2F0aW9uVXJsQmFzZWRPbklmcmFtZSk7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYXBwbGljYXRpb25VcmxCYXNlZE9uSWZyYW1lLnJlcGxhY2UodXJsLmhhc2gsIGAke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cdFx0XHRcdFx0dGFyZ2V0VXJsID0gYCR7dXJsLm9yaWdpbn0ke3VybC5wYXRobmFtZX0ke2hyZWZ9Ji8ke2VuY29kZVVSSShzVGFyZ2V0UGF0aCl9YDtcblx0XHRcdFx0fVxuXHRcdFx0XHRvcGVuV2luZG93KHRhcmdldFVybCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdC8vIENsZWFyIHVuYm91bmQgbWVzc2FnZXMgdXBvbiBuYXZpZ2F0aW5nIGZyb20gTFIgdG8gT1Bcblx0XHRcdC8vIFRoaXMgaXMgdG8gZW5zdXJlIHN0YWxlIGVycm9yIG1lc3NhZ2VzIGZyb20gTFIgYXJlIG5vdCBzaG93biB0byB0aGUgdXNlciBhZnRlciBuYXZpZ2F0aW9uIHRvIE9QLlxuXHRcdFx0aWYgKGN1cnJlbnRUYXJnZXRJbmZvPy5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuTGlzdFJlcG9ydFwiKSB7XG5cdFx0XHRcdGNvbnN0IG9Sb3V0ZUluZm8gPSB0aGlzLm9Sb3V0ZXIuZ2V0Um91dGVJbmZvQnlIYXNoKHNUYXJnZXRQYXRoKTtcblx0XHRcdFx0aWYgKG9Sb3V0ZUluZm8pIHtcblx0XHRcdFx0XHRjb25zdCBvUm91dGUgPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKG9Sb3V0ZUluZm8ubmFtZSk7XG5cdFx0XHRcdFx0aWYgKG9Sb3V0ZSAmJiBvUm91dGUudGFyZ2V0cyAmJiBvUm91dGUudGFyZ2V0cy5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdFx0XHRjb25zdCBzTGFzdFRhcmdldE5hbWUgPSBvUm91dGUudGFyZ2V0c1tvUm91dGUudGFyZ2V0cy5sZW5ndGggLSAxXTtcblx0XHRcdFx0XHRcdGNvbnN0IG9UYXJnZXQgPSB0aGlzLl9nZXRUYXJnZXRJbmZvcm1hdGlvbihzTGFzdFRhcmdldE5hbWUpO1xuXHRcdFx0XHRcdFx0aWYgKG9UYXJnZXQgJiYgb1RhcmdldC5uYW1lID09PSBcInNhcC5mZS50ZW1wbGF0ZXMuT2JqZWN0UGFnZVwiKSB7XG5cdFx0XHRcdFx0XHRcdG1lc3NhZ2VIYW5kbGluZy5yZW1vdmVVbmJvdW5kVHJhbnNpdGlvbk1lc3NhZ2VzKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGluIHRoZSBxdWV1ZVxuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnB1c2gob05hdmlnYXRpb25JbmZvKTtcblxuXHRcdFx0aWYgKHRhcmdldFJvdXRlICYmIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UpIHtcblx0XHRcdFx0cmV0dXJuIHJvdXRlUGFyYW1ldGVyc1Byb21pc2UudGhlbigob1JvdXRlUGFyYW1ldGVyczogb2JqZWN0KSA9PiB7XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihvUm91dGVQYXJhbWV0ZXJzLCB7IGJJc1N0aWNreU1vZGU6IGlzU3RpY2t5TW9kZSB9KTtcblx0XHRcdFx0XHR0aGlzLm9Sb3V0ZXIubmF2VG8odGFyZ2V0Um91dGUsIG9Sb3V0ZVBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQubmF2VG9IYXNoKFxuXHRcdFx0XHRcdHNUYXJnZXRQYXRoLFxuXHRcdFx0XHRcdCEhcGFyYW1ldGVycy5wcmVzZXJ2ZUhpc3RvcnksXG5cdFx0XHRcdFx0cGFyYW1ldGVycz8ubm9QcmVzZXJ2YXRpb25DYWNoZSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzPy5mb3JjZUZvY3VzLFxuXHRcdFx0XHRcdCFpc1N0aWNreU1vZGVcblx0XHRcdFx0KVxuXHRcdFx0XHQudGhlbigoYk5hdmlnYXRlZCkgPT4ge1xuXHRcdFx0XHRcdGlmICghYk5hdmlnYXRlZCkge1xuXHRcdFx0XHRcdFx0Ly8gVGhlIG5hdmlnYXRpb24gZGlkIG5vdCBoYXBwZW4gLS0+IHJlbW92ZSB0aGUgbmF2aWdhdGlvbiBwYXJhbWV0ZXJzIGZyb20gdGhlIHF1ZXVlIGFzIHRoZXkgc2hvdWxkbid0IGJlIHVzZWRcblx0XHRcdFx0XHRcdHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5wb3AoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIGJOYXZpZ2F0ZWQ7XG5cdFx0XHRcdH0pO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBOYXZpZ2F0ZXMgdG8gYSByb3V0ZS5cblx0ICogQHBhcmFtIHNUYXJnZXRSb3V0ZU5hbWUgTmFtZSBvZiB0aGUgdGFyZ2V0IHJvdXRlXG5cdCAqIEBwYXJhbSBbb1JvdXRlUGFyYW1ldGVyc10gUGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggcm91dGUgdG8gY3JlYXRlIHRoZSB0YXJnZXQgaGFzaFxuXHQgKiBAcGFyYW0gb1JvdXRlUGFyYW1ldGVycy5iSXNTdGlja3lNb2RlXG5cdCAqIEBwYXJhbSBvUm91dGVQYXJhbWV0ZXJzLnByZXNlcnZlSGlzdG9yeVxuXHQgKiBAcmV0dXJucyBQcm9taXNlIHRoYXQgaXMgcmVzb2x2ZWQgd2hlbiB0aGUgbmF2aWdhdGlvbiBpcyBmaW5hbGl6ZWRcblx0ICogQGZpbmFsXG5cdCAqL1xuXHRhc3luYyBuYXZpZ2F0ZVRvUm91dGUoXG5cdFx0c1RhcmdldFJvdXRlTmFtZTogc3RyaW5nLFxuXHRcdG9Sb3V0ZVBhcmFtZXRlcnM/OiB7IGJJc1N0aWNreU1vZGU/OiBib29sZWFuOyBwcmVzZXJ2ZUhpc3Rvcnk/OiBib29sZWFuIH1cblx0KTogUHJvbWlzZTxib29sZWFuPiB7XG5cdFx0aWYgKCF0aGlzLmVuYWJsZWQpIHtcblx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xuXHRcdH1cblx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcodW5kZWZpbmVkKTtcblx0XHRjb25zdCBzVGFyZ2V0VVJMID0gdGhpcy5vUm91dGVyLmdldFVSTChzVGFyZ2V0Um91dGVOYW1lLCBvUm91dGVQYXJhbWV0ZXJzKTtcblx0XHRyZXR1cm4gdGhpcy5vUm91dGVyUHJveHkubmF2VG9IYXNoKFxuXHRcdFx0c1RhcmdldFVSTCEsXG5cdFx0XHQhIW9Sb3V0ZVBhcmFtZXRlcnM/LnByZXNlcnZlSGlzdG9yeSxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdCFvUm91dGVQYXJhbWV0ZXJzPy5iSXNTdGlja3lNb2RlXG5cdFx0KTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgaWYgb25lIG9mIHRoZSBjdXJyZW50IHZpZXdzIG9uIHRoZSBzY3JlZW4gaXMgYm91bmQgdG8gYSBnaXZlbiBjb250ZXh0LlxuXHQgKiBAcGFyYW0gb0NvbnRleHQgVGhlIGNvbnRleHRcblx0ICogQHJldHVybnMgYHRydWVgIG9yIGBmYWxzZWAgaWYgdGhlIGN1cnJlbnQgc3RhdGUgaXMgaW1wYWN0ZWQgb3Igbm90XG5cdCAqL1xuXHRpc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkob0NvbnRleHQ6IENvbnRleHQpOiBib29sZWFuIHtcblx0XHRjb25zdCBzUGF0aCA9IG9Db250ZXh0LmdldFBhdGgoKTtcblxuXHRcdC8vIEZpcnN0LCBjaGVjayB3aXRoIHRoZSB0ZWNobmljYWwgcGF0aC4gV2UgaGF2ZSB0byB0cnkgaXQsIGJlY2F1c2UgZm9yIGxldmVsID4gMSwgd2Vcblx0XHQvLyB1c2VzIHRlY2huaWNhbCBrZXlzIGV2ZW4gaWYgU2VtYW50aWMga2V5cyBhcmUgZW5hYmxlZFxuXHRcdGlmICh0aGlzLm9Sb3V0ZXJQcm94eS5pc0N1cnJlbnRTdGF0ZUltcGFjdGVkQnkoc1BhdGgpKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2UgaWYgKC9eW14oKV0rXFwoW14oKV0rXFwpJC8udGVzdChzUGF0aCkpIHtcblx0XHRcdC8vIElmIHRoZSBjdXJyZW50IHBhdGggY2FuIGJlIHNlbWFudGljIChpLmUuIGlzIGxpa2UgeHh4KHl5eSkpXG5cdFx0XHQvLyBjaGVjayB3aXRoIHRoZSBzZW1hbnRpYyBwYXRoIGlmIHdlIGNhbiBmaW5kIGl0XG5cdFx0XHRsZXQgc1NlbWFudGljUGF0aDtcblx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nICYmIHRoaXMub0xhc3RTZW1hbnRpY01hcHBpbmcudGVjaG5pY2FsUGF0aCA9PT0gc1BhdGgpIHtcblx0XHRcdFx0Ly8gV2UgaGF2ZSBhbHJlYWR5IHJlc29sdmVkIHRoaXMgc2VtYW50aWMgcGF0aFxuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzU2VtYW50aWNQYXRoID0gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNQYXRoKG9Db250ZXh0KSE7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBzU2VtYW50aWNQYXRoICE9IHNQYXRoID8gdGhpcy5vUm91dGVyUHJveHkuaXNDdXJyZW50U3RhdGVJbXBhY3RlZEJ5KHNTZW1hbnRpY1BhdGgpIDogZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgcGF0aCB1c2VkIHRvIG5hdmlnYXRlIGJhY2sgZnJvbSBhIHNwZWNpZmllZCBwYXRoLlxuXHQgKiBAcGFyYW0gc1BhdGhcblx0ICogQHJldHVybnMgVGhlIHBhdGhcblx0ICovXG5cdGdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aDogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoXCIvW14vXSokXCIpO1xuXHRcdHNQYXRoID0gc1BhdGgucmVwbGFjZShyZWdleCwgXCJcIik7XG5cdFx0aWYgKHRoaXMub1JvdXRlci5tYXRjaChzUGF0aCkgfHwgc1BhdGggPT09IFwiXCIpIHtcblx0XHRcdHJldHVybiBzUGF0aDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0UGF0aFRvTmF2aWdhdGVCYWNrKHNQYXRoKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIGEgc2VtYW50aWMgcGF0aCBzaGFsbCBiZSB1c2VkIHRvIG5hdmlnYXRlIHRvIGEgZ2l2ZW4gY29udGV4dC5cblx0ICogQHBhcmFtIGNvbnRleHQgVGhlIGNvbnRleHQgdG8gbmF2aWdhdGUgdG9cblx0ICogQHJldHVybnMgVHJ1ZSBpZiBzZW1hbnRpYyBwYXRoIHNoYWxsIGJlIHN1ZWQsIGZhbHNlIG90aGVyd2lzZVxuXHQgKi9cblx0X2NoZWNrSWZDb250ZXh0U3VwcG9ydHNTZW1hbnRpY1BhdGgoY29udGV4dDogQ29udGV4dCk6IGJvb2xlYW4ge1xuXHRcdC8vIEZpcnN0LCBjaGVjayBpZiB0aGlzIGlzIGEgbGV2ZWwtMSBvYmplY3QgKHBhdGggPSAvYWFhKGJiYikpXG5cdFx0aWYgKCEvXlxcL1teKF0rXFwoW14pXStcXCkkLy50ZXN0KGNvbnRleHQuZ2V0UGF0aCgpKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIFRoZW4gY2hlY2sgaWYgdGhlIGVudGl0eSBpcyBhIGRyYWZ0IHJvb3Rcblx0XHRjb25zdCBtZXRhTW9kZWwgPSBjb250ZXh0LmdldE1vZGVsKCkuZ2V0TWV0YU1vZGVsKCk7XG5cdFx0Y29uc3QgZW50aXR5U2V0ID0gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhtZXRhTW9kZWwuZ2V0TWV0YUNvbnRleHQoY29udGV4dC5nZXRQYXRoKCkpKVxuXHRcdFx0LnRhcmdldE9iamVjdCBhcyBFbnRpdHlTZXQ7XG5cblx0XHRpZiAoIU1vZGVsSGVscGVyLmlzRHJhZnRSb290KGVudGl0eVNldCkpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBXZSBkb24ndCBzdXBwb3J0IHNlbWFudGljIHBhdGggZm9yIG5ld2x5IGNyZWF0ZWQgb2JqZWN0c1xuXHRcdGlmIChjb250ZXh0LmdldFByb3BlcnR5KFwiSXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlICYmIGNvbnRleHQuZ2V0UHJvcGVydHkoXCJIYXNBY3RpdmVFbnRpdHlcIikgPT09IGZhbHNlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRmluYWxseSwgY2hlY2sgaWYgdGhlIGVudGl0eSBoYXMgc2VtYW50aWMga2V5c1xuXHRcdGNvbnN0IGVudGl0eVNldE5hbWUgPSBlbnRpdHlTZXQubmFtZTtcblx0XHRyZXR1cm4gU2VtYW50aWNLZXlIZWxwZXIuZ2V0U2VtYW50aWNLZXlzKG1ldGFNb2RlbCwgZW50aXR5U2V0TmFtZSkgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdF9nZXRQYXRoRnJvbUNvbnRleHQoY29udGV4dDogQ29udGV4dCB8IE9EYXRhTGlzdEJpbmRpbmcsIHBhcmFtZXRlcnM6IFJvdXRpbmdOYXZpZ2F0aW9uUGFyYW1ldGVycyk6IHN0cmluZyB7XG5cdFx0bGV0IHNQYXRoID0gXCJcIjtcblxuXHRcdGlmIChjb250ZXh0LmlzQTxPRGF0YUxpc3RCaW5kaW5nPihcInNhcC51aS5tb2RlbC5vZGF0YS52NC5PRGF0YUxpc3RCaW5kaW5nXCIpKSB7XG5cdFx0XHRzUGF0aCA9IGNvbnRleHQuZ2V0SGVhZGVyQ29udGV4dCgpPy5nZXRQYXRoKCkgPz8gXCJcIjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0c1BhdGggPSBjb250ZXh0LmdldFBhdGgoKTtcblxuXHRcdFx0aWYgKHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPT09IC0xKSB7XG5cdFx0XHRcdC8vIFdoZW4gbmF2aWdhdGluZyBiYWNrIGZyb20gYSBjb250ZXh0LCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbGFzdCBjb21wb25lbnQgb2YgdGhlIHBhdGhcblx0XHRcdFx0c1BhdGggPSB0aGlzLmdldFBhdGhUb05hdmlnYXRlQmFjayhzUGF0aCk7XG5cblx0XHRcdFx0Ly8gQ2hlY2sgaWYgd2UncmUgbmF2aWdhdGluZyBiYWNrIHRvIGEgc2VtYW50aWMgcGF0aCB0aGF0IHdhcyBwcmV2aW91c2x5IHJlc29sdmVkXG5cdFx0XHRcdGlmICh0aGlzLm9MYXN0U2VtYW50aWNNYXBwaW5nPy50ZWNobmljYWxQYXRoID09PSBzUGF0aCkge1xuXHRcdFx0XHRcdHNQYXRoID0gdGhpcy5vTGFzdFNlbWFudGljTWFwcGluZy5zZW1hbnRpY1BhdGg7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAodGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChjb250ZXh0KSkge1xuXHRcdFx0XHQvLyBXZSBjaGVjayBpZiB3ZSBoYXZlIHRvIHVzZSBhIHNlbWFudGljIHBhdGhcblx0XHRcdFx0Y29uc3Qgc1NlbWFudGljUGF0aCA9IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChjb250ZXh0LCB0cnVlKTtcblxuXHRcdFx0XHRpZiAoIXNTZW1hbnRpY1BhdGgpIHtcblx0XHRcdFx0XHQvLyBXZSB3ZXJlIG5vdCBhYmxlIHRvIGJ1aWxkIHRoZSBzZW1hbnRpYyBwYXRoIC0tPiBVc2UgdGhlIHRlY2huaWNhbCBwYXRoIGFuZFxuXHRcdFx0XHRcdC8vIGNsZWFyIHRoZSBwcmV2aW91cyBtYXBwaW5nLCBvdGhlcndpc2UgdGhlIG9sZCBtYXBwaW5nIGlzIHVzZWQgaW4gRWRpdEZsb3cjdXBkYXRlRG9jdW1lbnRcblx0XHRcdFx0XHQvLyBhbmQgaXQgbGVhZHMgdG8gdW53YW50ZWQgcGFnZSByZWxvYWRzXG5cdFx0XHRcdFx0dGhpcy5zZXRMYXN0U2VtYW50aWNNYXBwaW5nKHVuZGVmaW5lZCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoc1NlbWFudGljUGF0aCAhPT0gc1BhdGgpIHtcblx0XHRcdFx0XHQvLyBTdG9yZSB0aGUgbWFwcGluZyB0ZWNobmljYWwgPC0+IHNlbWFudGljIHBhdGggdG8gYXZvaWQgcmVjYWxjdWxhdGluZyBpdCBsYXRlclxuXHRcdFx0XHRcdC8vIGFuZCB1c2UgdGhlIHNlbWFudGljIHBhdGggaW5zdGVhZCBvZiB0aGUgdGVjaG5pY2FsIG9uZVxuXHRcdFx0XHRcdHRoaXMuc2V0TGFzdFNlbWFudGljTWFwcGluZyh7IHRlY2huaWNhbFBhdGg6IHNQYXRoLCBzZW1hbnRpY1BhdGg6IHNTZW1hbnRpY1BhdGggfSk7XG5cdFx0XHRcdFx0c1BhdGggPSBzU2VtYW50aWNQYXRoO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmVtb3ZlIGV4dHJhICcvJyBhdCB0aGUgYmVnaW5uaW5nIG9mIHBhdGhcblx0XHRpZiAoc1BhdGhbMF0gPT09IFwiL1wiKSB7XG5cdFx0XHRzUGF0aCA9IHNQYXRoLnN1YnN0cmluZygxKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gc1BhdGg7XG5cdH1cblxuXHRfY2FsY3VsYXRlTGF5b3V0KGhhc2g6IHN0cmluZywgcGFyYW1ldGVyczogUm91dGluZ05hdmlnYXRpb25QYXJhbWV0ZXJzKTogc3RyaW5nIHtcblx0XHQvLyBPcGVuIGluIGZ1bGwgc2NyZWVuIG1vZGUgd2hlbiBvcGVuaW5nIGluIG5ldyB0YWIvIHdpbmRvd1xuXHRcdGlmIChwYXJhbWV0ZXJzLm5hdk1vZGUgPT09IFwib3BlbkluTmV3VGFiXCIgJiYgcGFyYW1ldGVycy5GQ0xMZXZlbCAhPT0gLTEpIHtcblx0XHRcdHJldHVybiBwYXJhbWV0ZXJzLkZDTExldmVsID09PSAwID8gXCJNaWRDb2x1bW5GdWxsU2NyZWVuXCIgOiBcIkVuZENvbHVtbkZ1bGxTY3JlZW5cIjtcblx0XHR9XG5cdFx0bGV0IEZDTExldmVsID0gcGFyYW1ldGVycy5GQ0xMZXZlbCA/PyAwO1xuXHRcdGlmIChwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsKSB7XG5cdFx0XHRGQ0xMZXZlbCArPSBwYXJhbWV0ZXJzLnVwZGF0ZUZDTExldmVsO1xuXHRcdFx0aWYgKEZDTExldmVsIDwgMCkge1xuXHRcdFx0XHRGQ0xMZXZlbCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiBuYXZpZ2F0aW5nIGJhY2ssIHRyeSB0byBmaW5kIHRoZSBsYXlvdXQgaW4gdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBpZiBpdCdzIG5vdCBwcm92aWRlZCBhcyBwYXJhbWV0ZXJcblx0XHQvLyAobGF5b3V0IGNhbGN1bGF0aW9uIGlzIG5vdCBoYW5kbGVkIHByb3Blcmx5IGJ5IHRoZSBGbGV4aWJsZUNvbHVtbkxheW91dFNlbWFudGljSGVscGVyIGluIHRoaXMgY2FzZSlcblx0XHRpZiAocGFyYW1ldGVycy51cGRhdGVGQ0xMZXZlbCAhPT0gdW5kZWZpbmVkICYmIHBhcmFtZXRlcnMudXBkYXRlRkNMTGV2ZWwgPCAwICYmICFwYXJhbWV0ZXJzLmxheW91dCkge1xuXHRcdFx0cGFyYW1ldGVycy5sYXlvdXQgPSB0aGlzLm9Sb3V0ZXJQcm94eS5maW5kTGF5b3V0Rm9ySGFzaChoYXNoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RWaWV3Q29udHJvbGxlcigpLmNhbGN1bGF0ZUxheW91dChGQ0xMZXZlbCwgaGFzaCwgcGFyYW1ldGVycy5sYXlvdXQsIHBhcmFtZXRlcnMua2VlcEN1cnJlbnRMYXlvdXQpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEV2ZW50IGhhbmRsZXIgYmVmb3JlIGEgcm91dGUgaXMgbWF0Y2hlZC5cblx0ICogRGlzcGxheXMgYSBidXN5IGluZGljYXRvci5cblx0ICpcblx0ICovXG5cdF9iZWZvcmVSb3V0ZU1hdGNoZWQoLypvRXZlbnQ6IEV2ZW50Ki8pOiB2b2lkIHtcblx0XHRjb25zdCBiUGxhY2Vob2xkZXJFbmFibGVkID0gbmV3IFBsYWNlaG9sZGVyKCkuaXNQbGFjZWhvbGRlckVuYWJsZWQoKTtcblx0XHRpZiAoIWJQbGFjZWhvbGRlckVuYWJsZWQpIHtcblx0XHRcdGNvbnN0IG9Sb290VmlldyA9IHRoaXMub0FwcENvbXBvbmVudC5nZXRSb290Q29udHJvbCgpO1xuXHRcdFx0QnVzeUxvY2tlci5sb2NrKG9Sb290Vmlldyk7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBuYXZpZ2F0aW9uIGhhcyBiZWVuIHRyaWdnZXJlZCBieSB0aGUgUm91dGVyUHJveHkuXG5cdCAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGN1cnJlbnQgbmF2aWdhdGlvbiBoYXMgYmVlbiB0cmlnZ2VyZWQgYnkgdGhlIFJvdXRlclByb3h5LlxuXHQgKi9cblx0X2lzTmF2aWdhdGlvblRyaWdnZXJlZEJ5Um91dGVyUHJveHkoKTogYm9vbGVhbiB7XG5cdFx0Ly8gVGhlIFJvdXRlclByb3h5IHNldHMgYSAnZmVMZXZlbCcgcHJvcGVydHkgb24gdGhlIGhpc3Rvcnkuc3RhdGUgb2JqZWN0XG5cdFx0cmV0dXJuIGhpc3Rvcnkuc3RhdGU/LmZlTGV2ZWwgIT09IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBFdmVudCBoYW5kbGVyIHdoZW4gYSByb3V0ZSBpcyBtYXRjaGVkLlxuXHQgKiBIaWRlcyB0aGUgYnVzeSBpbmRpY2F0b3IgYW5kIGZpcmVzIGl0cyBvd24gJ3JvdXRlbWF0Y2hlZCcgZXZlbnQuXG5cdCAqIEBwYXJhbSBvRXZlbnQgVGhlIGV2ZW50XG5cdCAqL1xuXHRfb25Sb3V0ZU1hdGNoZWQob0V2ZW50OiBSb3V0ZXIkUm91dGVNYXRjaGVkRXZlbnQpOiB2b2lkIHtcblx0XHRjb25zdCBvQXBwU3RhdGVIYW5kbGVyID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldEFwcFN0YXRlSGFuZGxlcigpLFxuXHRcdFx0b1Jvb3RWaWV3ID0gdGhpcy5vQXBwQ29tcG9uZW50LmdldFJvb3RDb250cm9sKCk7XG5cdFx0Y29uc3QgYlBsYWNlaG9sZGVyRW5hYmxlZCA9IG5ldyBQbGFjZWhvbGRlcigpLmlzUGxhY2Vob2xkZXJFbmFibGVkKCk7XG5cdFx0aWYgKEJ1c3lMb2NrZXIuaXNMb2NrZWQob1Jvb3RWaWV3KSAmJiAhYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0QnVzeUxvY2tlci51bmxvY2sob1Jvb3RWaWV3KTtcblx0XHR9XG5cdFx0Y29uc3QgbVBhcmFtZXRlcnM6IFJvdXRpbmdFdmVudFBhcmFtZXRlcnMgPSBvRXZlbnQuZ2V0UGFyYW1ldGVycygpIGFzIFJvdXRpbmdFdmVudFBhcmFtZXRlcnM7XG5cdFx0aWYgKHRoaXMubmF2aWdhdGlvbkluZm9RdWV1ZS5sZW5ndGgpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlWzBdO1xuXHRcdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gdGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlLnNsaWNlKDEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mbyA9IHt9O1xuXHRcdH1cblx0XHRpZiAob0FwcFN0YXRlSGFuZGxlci5jaGVja0lmUm91dGVDaGFuZ2VkQnlJQXBwKCkpIHtcblx0XHRcdG1QYXJhbWV0ZXJzLm5hdmlnYXRpb25JbmZvLnJlYXNvbiA9IE5hdmlnYXRpb25SZWFzb24uQXBwU3RhdGVDaGFuZ2VkO1xuXHRcdFx0b0FwcFN0YXRlSGFuZGxlci5yZXNldFJvdXRlQ2hhbmdlZEJ5SUFwcCgpO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5vUm91dGVyUHJveHkuY2hlY2tSZXN0b3JlSGlzdG9yeVdhc1RyaWdnZXJlZCgpKSB7XG5cdFx0XHRtUGFyYW1ldGVycy5uYXZpZ2F0aW9uSW5mby5yZWFzb24gPSBOYXZpZ2F0aW9uUmVhc29uLlJlc3RvcmVIaXN0b3J5O1xuXHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzZXRSZXN0b3JlSGlzdG9yeUZsYWcoKTtcblx0XHR9XG5cblx0XHR0aGlzLnNDdXJyZW50Um91dGVOYW1lID0gb0V2ZW50LmdldFBhcmFtZXRlcihcIm5hbWVcIik7XG5cdFx0dGhpcy5zQ3VycmVudFJvdXRlUGF0dGVybiA9IG1QYXJhbWV0ZXJzLmNvbmZpZy5wYXR0ZXJuO1xuXHRcdHRoaXMuYUN1cnJlbnRWaWV3cyA9IG9FdmVudC5nZXRQYXJhbWV0ZXIoXCJ2aWV3c1wiKTtcblxuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlSW5mb3JtYXRpb24gPSB0aGlzLl9nZXRSb3V0ZUluZm9ybWF0aW9uKHRoaXMuc0N1cnJlbnRSb3V0ZU5hbWUpO1xuXHRcdG1QYXJhbWV0ZXJzLnJvdXRlUGF0dGVybiA9IHRoaXMuc0N1cnJlbnRSb3V0ZVBhdHRlcm47XG5cblx0XHR0aGlzLl9maXJlUm91dGVNYXRjaEV2ZW50cyhtUGFyYW1ldGVycyk7XG5cblx0XHQvLyBDaGVjayBpZiBjdXJyZW50IGhhc2ggaGFzIGJlZW4gc2V0IGJ5IHRoZSByb3V0ZXJQcm94eS5uYXZUb0hhc2ggZnVuY3Rpb25cblx0XHQvLyBJZiBub3QsIHJlYnVpbGQgaGlzdG9yeSBwcm9wZXJseSAoYm90aCBpbiB0aGUgYnJvd3NlciBhbmQgdGhlIFJvdXRlclByb3h5KVxuXHRcdGlmICghdGhpcy5faXNOYXZpZ2F0aW9uVHJpZ2dlcmVkQnlSb3V0ZXJQcm94eSgpKSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eVxuXHRcdFx0XHQucmVzdG9yZUhpc3RvcnkoKVxuXHRcdFx0XHQudGhlbigoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vUm91dGVyUHJveHkucmVzb2x2ZVJvdXRlTWF0Y2goKTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH0pXG5cdFx0XHRcdC5jYXRjaChmdW5jdGlvbiAob0Vycm9yOiB1bmtub3duKSB7XG5cdFx0XHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgcmVzdG9yaW5nIGhpc3RvcnlcIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm9Sb3V0ZXJQcm94eS5yZXNvbHZlUm91dGVNYXRjaCgpO1xuXHRcdH1cblx0fVxuXG5cdGF0dGFjaFJvdXRlTWF0Y2hlZChvRGF0YTogb2JqZWN0LCBmbkZ1bmN0aW9uOiBGdW5jdGlvbiwgb0xpc3RlbmVyPzogb2JqZWN0KTogdm9pZCB7XG5cdFx0dGhpcy5ldmVudFByb3ZpZGVyLmF0dGFjaEV2ZW50KFwicm91dGVNYXRjaGVkXCIsIG9EYXRhLCBmbkZ1bmN0aW9uLCBvTGlzdGVuZXIpO1xuXHR9XG5cblx0ZGV0YWNoUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuZGV0YWNoRXZlbnQoXCJyb3V0ZU1hdGNoZWRcIiwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGF0dGFjaEFmdGVyUm91dGVNYXRjaGVkKG9EYXRhOiBvYmplY3QsIGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI/OiBvYmplY3QpOiB2b2lkIHtcblx0XHR0aGlzLmV2ZW50UHJvdmlkZXIuYXR0YWNoRXZlbnQoXCJhZnRlclJvdXRlTWF0Y2hlZFwiLCBvRGF0YSwgZm5GdW5jdGlvbiwgb0xpc3RlbmVyKTtcblx0fVxuXG5cdGRldGFjaEFmdGVyUm91dGVNYXRjaGVkKGZuRnVuY3Rpb246IEZ1bmN0aW9uLCBvTGlzdGVuZXI6IG9iamVjdCk6IHZvaWQge1xuXHRcdHRoaXMuZXZlbnRQcm92aWRlci5kZXRhY2hFdmVudChcImFmdGVyUm91dGVNYXRjaGVkXCIsIGZuRnVuY3Rpb24sIG9MaXN0ZW5lcik7XG5cdH1cblxuXHRhc3luYyBpbml0aWFsaXplUm91dGluZygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHR0aGlzLmVuYWJsZWQgPSB0cnVlO1xuXG5cdFx0aWYgKHRoaXMub0FwcENvbXBvbmVudC5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpLmdldENhcGFiaWxpdGllcygpLkNvbGxhYm9yYXRpb24pIHtcblx0XHRcdGNvbnN0IHsgZGVmYXVsdDogQ29sbGFib3JhdGlvbkhlbHBlciB9ID0gYXdhaXQgaW1wb3J0KFwic2FwL3N1aXRlL3VpL2NvbW1vbnMvY29sbGFib3JhdGlvbi9Db2xsYWJvcmF0aW9uSGVscGVyXCIpO1xuXHRcdFx0YXdhaXQgQ29sbGFib3JhdGlvbkhlbHBlci5wcm9jZXNzQW5kRXhwYW5kSGFzaCgpO1xuXHRcdH1cblx0XHQvLyBBdHRhY2ggcm91dGVyIGhhbmRsZXJzXG5cblx0XHR0aGlzLl9mbk9uUm91dGVNYXRjaGVkID0gdGhpcy5fb25Sb3V0ZU1hdGNoZWQuYmluZCh0aGlzKTtcblx0XHR0aGlzLm9Sb3V0ZXIuYXR0YWNoUm91dGVNYXRjaGVkKHRoaXMuX2ZuT25Sb3V0ZU1hdGNoZWQsIHRoaXMpO1xuXHRcdGNvbnN0IGJQbGFjZWhvbGRlckVuYWJsZWQgPSBuZXcgUGxhY2Vob2xkZXIoKS5pc1BsYWNlaG9sZGVyRW5hYmxlZCgpO1xuXHRcdGlmICghYlBsYWNlaG9sZGVyRW5hYmxlZCkge1xuXHRcdFx0dGhpcy5vUm91dGVyLmF0dGFjaEJlZm9yZVJvdXRlTWF0Y2hlZCh0aGlzLl9iZWZvcmVSb3V0ZU1hdGNoZWQuYmluZCh0aGlzKSk7XG5cdFx0fVxuXHRcdC8vIFJlc2V0IGludGVybmFsIHN0YXRlXG5cdFx0dGhpcy5uYXZpZ2F0aW9uSW5mb1F1ZXVlID0gW107XG5cdFx0RWRpdFN0YXRlLnJlc2V0RWRpdFN0YXRlKCk7XG5cdFx0dGhpcy5iRXhpdE9uTmF2aWdhdGVCYWNrVG9Sb290ID0gIXRoaXMub1JvdXRlci5tYXRjaChcIlwiKTtcblxuXHRcdGF3YWl0IHRoaXMubWFuYWdlU3RhcnR1cE1vZGUoKTtcblx0fVxuXG5cdG9uUmVzdG9yZSgpOiB2b2lkIHtcblx0XHR0aGlzLm1hbmFnZVN0YXJ0dXBNb2RlKCk7XG5cdH1cblxuXHRhc3luYyBtYW5hZ2VTdGFydHVwTW9kZSgpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBiSXNJYXBwU3RhdGUgPSB0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5nZXRIYXNoKCkuaW5jbHVkZXMoXCJzYXAtaWFwcC1zdGF0ZVwiKTtcblx0XHR0cnkge1xuXHRcdFx0Y29uc3Qgb1N0YXJ0dXBQYXJhbWV0ZXJzID0gYXdhaXQgdGhpcy5vQXBwQ29tcG9uZW50LmdldFN0YXJ0dXBQYXJhbWV0ZXJzKCk7XG5cdFx0XHRjb25zdCBiSGFzU3RhcnRVcFBhcmFtZXRlcnMgPSBvU3RhcnR1cFBhcmFtZXRlcnMgIT09IHVuZGVmaW5lZCAmJiBPYmplY3Qua2V5cyhvU3RhcnR1cFBhcmFtZXRlcnMpLmxlbmd0aCAhPT0gMDtcblx0XHRcdGNvbnN0IHNIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdFx0Ly8gTWFuYWdlIHN0YXJ0dXAgcGFyYW1ldGVycyAoaW4gY2FzZSBvZiBubyBpYXBwLXN0YXRlKVxuXHRcdFx0aWYgKCFiSXNJYXBwU3RhdGUgJiYgYkhhc1N0YXJ0VXBQYXJhbWV0ZXJzICYmICFzSGFzaCkge1xuXHRcdFx0XHRpZiAob1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkNSRUFURVwiKSkge1xuXHRcdFx0XHRcdC8vIENyZWF0ZSBtb2RlXG5cdFx0XHRcdFx0Ly8gVGhpcyBjaGVjayB3aWxsIGNhdGNoIG11bHRpcGxlIG1vZGVzIGxpa2UgY3JlYXRlLCBjcmVhdGVXaXRoIGFuZCBhdXRvQ3JlYXRlV2l0aCB3aGljaCBhbGwgbmVlZFxuXHRcdFx0XHRcdC8vIHRvIGJlIGhhbmRsZWQgbGlrZSBjcmVhdGUgc3RhcnR1cCFcblx0XHRcdFx0XHRhd2FpdCB0aGlzLl9tYW5hZ2VDcmVhdGVTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gRGVlcCBsaW5rXG5cdFx0XHRcdFx0YXdhaXQgdGhpcy5fbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVycyk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGF3YWl0IHRoaXMuX21hbmFnZWRQcmVmZXJyZWRNb2RlRWRpdChvU3RhcnR1cFBhcmFtZXRlcnMpO1xuXHRcdH0gY2F0Y2ggKG9FcnJvcjogdW5rbm93bikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3IgZHVyaW5nIHJvdXRpbmcgaW5pdGlhbGl6YXRpb25cIiwgb0Vycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Z2V0RGVmYXVsdENyZWF0ZUhhc2gob1N0YXJ0dXBQYXJhbWV0ZXJzPzogU3RhcnR1cFBhcmFtZXRlcnMpOiBzdHJpbmcge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldERlZmF1bHRDcmVhdGVIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIpO1xuXHR9XG5cblx0YXN5bmMgX21hbmFnZUNyZWF0ZVN0YXJ0dXAob1N0YXJ0dXBQYXJhbWV0ZXJzOiBTdGFydHVwUGFyYW1ldGVycyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHJldHVybiBBcHBTdGFydHVwSGVscGVyLmdldENyZWF0ZVN0YXJ0dXBIYXNoKG9TdGFydHVwUGFyYW1ldGVycywgdGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9Sb3V0ZXIsIHRoaXMub01ldGFNb2RlbCkudGhlbihcblx0XHRcdChzTmV3SGFzaDogc3RyaW5nKTogdm9pZCA9PiB7XG5cdFx0XHRcdGlmIChzTmV3SGFzaCkge1xuXHRcdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc05ld0hhc2gpO1xuXHRcdFx0XHRcdGlmIChvU3RhcnR1cFBhcmFtZXRlcnM/LnByZWZlcnJlZE1vZGUgJiYgb1N0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVbMF0udG9VcHBlckNhc2UoKS5pbmNsdWRlcyhcIkFVVE9DUkVBVEVcIikpIHtcblx0XHRcdFx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5zZXRTdGFydHVwTW9kZUF1dG9DcmVhdGUoKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0dGhpcy5vQXBwQ29tcG9uZW50LnNldFN0YXJ0dXBNb2RlQ3JlYXRlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHRoaXMuYkV4aXRPbk5hdmlnYXRlQmFja1RvUm9vdCA9IHRydWU7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXHRcdCk7XG5cdH1cblxuXHRhc3luYyBfbWFuYWdlRGVlcExpbmtTdGFydHVwKG9TdGFydHVwUGFyYW1ldGVyczogU3RhcnR1cFBhcmFtZXRlcnMgfCBudWxsKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0cmV0dXJuIEFwcFN0YXJ0dXBIZWxwZXIuZ2V0RGVlcExpbmtTdGFydHVwSGFzaChcblx0XHRcdHRoaXMub0FwcENvbXBvbmVudC5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLnVpNVwiKS5yb3V0aW5nLFxuXHRcdFx0b1N0YXJ0dXBQYXJhbWV0ZXJzLFxuXHRcdFx0dGhpcy5vTW9kZWxcblx0XHQpLnRoZW4oKG9EZWVwTGluaykgPT4ge1xuXHRcdFx0bGV0IHNIYXNoO1xuXHRcdFx0aWYgKG9EZWVwTGluay5jb250ZXh0KSB7XG5cdFx0XHRcdGNvbnN0IHNUZWNobmljYWxQYXRoID0gb0RlZXBMaW5rLmNvbnRleHQuZ2V0UGF0aCgpO1xuXHRcdFx0XHRjb25zdCBzU2VtYW50aWNQYXRoID0gdGhpcy5fY2hlY2tJZkNvbnRleHRTdXBwb3J0c1NlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dClcblx0XHRcdFx0XHQ/IFNlbWFudGljS2V5SGVscGVyLmdldFNlbWFudGljUGF0aChvRGVlcExpbmsuY29udGV4dCwgZmFsc2UpIVxuXHRcdFx0XHRcdDogc1RlY2huaWNhbFBhdGg7XG5cblx0XHRcdFx0aWYgKHNTZW1hbnRpY1BhdGggIT09IHNUZWNobmljYWxQYXRoKSB7XG5cdFx0XHRcdFx0Ly8gU3RvcmUgdGhlIG1hcHBpbmcgdGVjaG5pY2FsIDwtPiBzZW1hbnRpYyBwYXRoIHRvIGF2b2lkIHJlY2FsY3VsYXRpbmcgaXQgbGF0ZXJcblx0XHRcdFx0XHQvLyBhbmQgdXNlIHRoZSBzZW1hbnRpYyBwYXRoIGluc3RlYWQgb2YgdGhlIHRlY2huaWNhbCBvbmVcblx0XHRcdFx0XHR0aGlzLnNldExhc3RTZW1hbnRpY01hcHBpbmcoeyB0ZWNobmljYWxQYXRoOiBzVGVjaG5pY2FsUGF0aCwgc2VtYW50aWNQYXRoOiBzU2VtYW50aWNQYXRoIH0pO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0c0hhc2ggPSBzU2VtYW50aWNQYXRoLnN1YnN0cmluZygxKTsgLy8gVG8gcmVtb3ZlIHRoZSBsZWFkaW5nICcvJ1xuXHRcdFx0fSBlbHNlIGlmIChvRGVlcExpbmsuaGFzaCkge1xuXHRcdFx0XHRzSGFzaCA9IG9EZWVwTGluay5oYXNoO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoc0hhc2gpIHtcblx0XHRcdFx0Ly9SZXBsYWNlIHRoZSBoYXNoIHdpdGggbmV3bHkgY3JlYXRlZCBoYXNoXG5cdFx0XHRcdCh0aGlzLm9Sb3V0ZXIuZ2V0SGFzaENoYW5nZXIoKS5yZXBsYWNlSGFzaCBhcyBGdW5jdGlvbikoc0hhc2gpO1xuXHRcdFx0XHR0aGlzLm9BcHBDb21wb25lbnQuc2V0U3RhcnR1cE1vZGVEZWVwbGluaygpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuO1xuXHRcdH0pO1xuXHR9XG5cblx0LyoqXG5cdCAqIE1hbmFnZXMgdGhlIHByZWZlcnJlZCBtb2RlIGVkaXQgYnkgYXBwZW5kaW5nIFwiWyZ8P11pLWFjdGlvbj1lZGl0XCIgdG8gdGhlIGhhc2ggaWY6XG5cdCAqIC0gVGhlcmUgaXMgYSByZXN1bHRpbmcgaGFzaCBmcm9tIHRoZSBwcmV2aW91cyBsb2dpYyxcblx0ICogLSBUaGUgcHJlZmVycmVkIG1vZGUgaXMgZWRpdCwgYW5kXG5cdCAqIC0gVGhlIGVudGl0eSBpcyBlZGl0YWJsZVxuXHQgKiBUaGlzIHdvcmtzIGZvciBib3RoIGRlZXAtbGluayBzdGFydHVwICgjQXBwP0lEPW15SWQmcHJlZmVycmVkTW9kZT1lZGl0KSBhbmQgb2JqZWN0IHBhZ2Ugcm91dGluZyAoI0FwcD9wcmVmZXJyZWRNb2RlPWVkaXQmL0VudGl0eShJRCkpLlxuXHQgKiBAcGFyYW0gc3RhcnR1cFBhcmFtZXRlcnNcblx0ICogQHBhcmFtIHN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGVcblx0ICovXG5cdGFzeW5jIF9tYW5hZ2VkUHJlZmVycmVkTW9kZUVkaXQoc3RhcnR1cFBhcmFtZXRlcnM6IHsgcHJlZmVycmVkTW9kZT86IHN0cmluZ1tdIH0pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCByZXN1bHRpbmdIYXNoID0gdGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkuZ2V0SGFzaCgpO1xuXHRcdGNvbnN0IHNob3VsZEVkaXQgPSAhIXN0YXJ0dXBQYXJhbWV0ZXJzLnByZWZlcnJlZE1vZGU/LlswXT8udG9VcHBlckNhc2UoKT8uaW5jbHVkZXMoXCJFRElUXCIpO1xuXHRcdGNvbnN0IGVkaXRhYmxlID0gYXdhaXQgQXBwU3RhcnR1cEhlbHBlci52ZXJpZnlFZGl0QW5ub3RhdGlvbnModGhpcy5nZXRDb250ZXh0UGF0aCgpLCB0aGlzLm9NZXRhTW9kZWwpO1xuXHRcdGlmIChyZXN1bHRpbmdIYXNoICYmIHNob3VsZEVkaXQgJiYgZWRpdGFibGUpIHtcblx0XHRcdGNvbnN0IHBhcmFtZXRlciA9IChyZXN1bHRpbmdIYXNoLmluY2x1ZGVzKFwiP1wiKSA/IFwiJlwiIDogXCI/XCIpICsgXCJpLWFjdGlvbj1lZGl0XCI7XG5cdFx0XHQodGhpcy5vUm91dGVyLmdldEhhc2hDaGFuZ2VyKCkucmVwbGFjZUhhc2ggYXMgKGhhc2g6IHN0cmluZykgPT4gdm9pZCkocmVzdWx0aW5nSGFzaCArIHBhcmFtZXRlcik7XG5cdFx0fVxuXHR9XG5cblx0Z2V0T3V0Ym91bmRzKCk6IFJlY29yZDxzdHJpbmcsIE1hbmlmZXN0T3V0Ym91bmRFbnRyeT4ge1xuXHRcdHJldHVybiB0aGlzLm91dGJvdW5kcztcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSByb3V0aW5nIGhpbnRzIGZvciB0aGUgY3VycmVudCByb3V0ZS5cblx0ICogQ3VycmVudGx5LCB0aGlzIG9ubHkgY292ZXJzIHRoZSBwYXJlbnQtY2hpbGQgcmVsYXRpb25zaGlwIGZyb20gYSBsaXN0IHJlcG9ydCB0byBhbiBvYmplY3QgcGFnZS5cblx0ICogQHJldHVybnMgVGhlIHJvdXRpbmcgaGludHNcblx0ICovXG5cdGdldFJvdXRpbmdIaW50cygpOiBSZWNvcmQ8c3RyaW5nLCB7IHBhcmVudE9mOiBzdHJpbmdbXSB9PiB7XG5cdFx0cmV0dXJuIHRoaXMucm91dGluZ0hpbnRzID8/IHt9O1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgdGhlIG5hbWUgb2YgdGhlIERyYWZ0IHJvb3QgZW50aXR5IHNldCBvciB0aGUgc3RpY2t5LWVuYWJsZWQgZW50aXR5IHNldC5cblx0ICogQHJldHVybnMgVGhlIG5hbWUgb2YgdGhlIHJvb3QgRW50aXR5U2V0XG5cdCAqL1xuXHRnZXRDb250ZXh0UGF0aCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLnNDb250ZXh0UGF0aDtcblx0fVxuXG5cdGdldEludGVyZmFjZSgpOiB0aGlzIHtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufVxuXG5jbGFzcyBSb3V0aW5nU2VydmljZUZhY3RvcnkgZXh0ZW5kcyBTZXJ2aWNlRmFjdG9yeTxSb3V0aW5nU2VydmljZVNldHRpbmdzPiB7XG5cdGFzeW5jIGNyZWF0ZUluc3RhbmNlKG9TZXJ2aWNlQ29udGV4dDogU2VydmljZUNvbnRleHQ8Um91dGluZ1NlcnZpY2VTZXR0aW5ncz4pOiBQcm9taXNlPFJvdXRpbmdTZXJ2aWNlPiB7XG5cdFx0Y29uc3Qgb1JvdXRpbmdTZXJ2aWNlID0gbmV3IFJvdXRpbmdTZXJ2aWNlKG9TZXJ2aWNlQ29udGV4dCk7XG5cdFx0cmV0dXJuIG9Sb3V0aW5nU2VydmljZS5pbml0UHJvbWlzZTtcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBSb3V0aW5nU2VydmljZUZhY3Rvcnk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7TUEwQ01BLHNCQUFzQixJQUFBQyxJQUFBLEdBRDNCQyxjQUFjLENBQUMsNkNBQTZDLENBQUMsRUFBQUMsS0FBQSxHQUU1REMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBSCxJQUFBLENBQUFLLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsY0FBQTtJQUFBLFNBQUFSLHVCQUFBO01BQUEsSUFBQVMsS0FBQTtNQUFBLFNBQUFDLElBQUEsR0FBQUMsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBSixJQUFBLEdBQUFLLElBQUEsTUFBQUEsSUFBQSxHQUFBTCxJQUFBLEVBQUFLLElBQUE7UUFBQUYsSUFBQSxDQUFBRSxJQUFBLElBQUFKLFNBQUEsQ0FBQUksSUFBQTtNQUFBO01BQUFOLEtBQUEsR0FBQUQsY0FBQSxDQUFBUSxJQUFBLFVBQUFILElBQUE7TUFBQUksMEJBQUEsQ0FBQVIsS0FBQSxrQkFBQVMsV0FBQSxFQUFBVCxLQUFBO01BQUFRLDBCQUFBLENBQUFSLEtBQUEsdUJBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBLE9BQUFBLEtBQUE7SUFBQTtJQUFBVyxjQUFBLENBQUFwQixzQkFBQSxFQUFBUSxjQUFBO0lBQUEsT0FBQVIsc0JBQUE7RUFBQSxFQUo0QnFCLGFBQWEsR0FBQUgsV0FBQSxHQUFBSSx5QkFBQSxDQUFBZixPQUFBLENBQUFnQixTQUFBLG1CQUFBcEIsS0FBQTtJQUFBcUIsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFSLFlBQUEsR0FBQUcseUJBQUEsQ0FBQWYsT0FBQSxDQUFBZ0IsU0FBQSx3QkFBQWxCLEtBQUE7SUFBQW1CLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcEIsT0FBQSxNQUFBRCxNQUFBO0VBQUEsSUE0RXJDc0IsY0FBYywwQkFBQUMsUUFBQTtJQUFBLFNBQUFELGVBQUE7TUFBQSxJQUFBRSxNQUFBO01BQUEsU0FBQUMsS0FBQSxHQUFBcEIsU0FBQSxDQUFBQyxNQUFBLEVBQUFDLElBQUEsT0FBQUMsS0FBQSxDQUFBaUIsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO1FBQUFuQixJQUFBLENBQUFtQixLQUFBLElBQUFyQixTQUFBLENBQUFxQixLQUFBO01BQUE7TUFBQUYsTUFBQSxHQUFBRCxRQUFBLENBQUFiLElBQUEsVUFBQUgsSUFBQTtNQUFBaUIsTUFBQSxDQStCMUJHLG1CQUFtQixHQUE0QixFQUFFO01BQUFILE1BQUEsQ0FNakRJLE9BQU8sR0FBRyxLQUFLO01BQUFKLE1BQUEsQ0FJZkssc0JBQXNCLEdBQW9CLEVBQUU7TUFBQSxPQUFBTCxNQUFBO0lBQUE7SUFBQU0sUUFBQSxDQUFBUixjQUFBLEdBQUFBLGNBQUE7SUFBQVIsY0FBQSxDQUFBUSxjQUFBLEVBQUFDLFFBQUE7SUFBQSxJQUFBUSxNQUFBLEdBQUFULGNBQUEsQ0FBQUwsU0FBQTtJQUFBYyxNQUFBLENBRTVDQyxJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ0MsVUFBVSxDQUFDLENBQUM7TUFDbEMsSUFBSUQsUUFBUSxDQUFDRSxTQUFTLEtBQUssV0FBVyxFQUFFO1FBQ3ZDLElBQUksQ0FBQ0MsYUFBYSxHQUFHSCxRQUFRLENBQUNJLFdBQVc7UUFDekMsSUFBSSxDQUFDQyxNQUFNLEdBQUcsSUFBSSxDQUFDRixhQUFhLENBQUNHLFFBQVEsQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQ0MsVUFBVSxHQUFHLElBQUksQ0FBQ0YsTUFBTSxFQUFFRyxZQUFZLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUNDLE9BQU8sR0FBRyxJQUFJLENBQUNOLGFBQWEsQ0FBQ08sU0FBUyxDQUFDLENBQUM7UUFDN0MsSUFBSSxDQUFDQyxZQUFZLEdBQUcsSUFBSSxDQUFDUixhQUFhLENBQUNTLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZELElBQUksQ0FBQ0MsYUFBYSxHQUFHLElBQUlwRCxzQkFBc0IsQ0FBQyxDQUFDO1FBRWpELE1BQU1xRCxjQUFjLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNZLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxDQUFDQyxPQUFPO1FBQzdFLElBQUksQ0FBQ0MsMEJBQTBCLENBQUNILGNBQWUsQ0FBQztRQUVoRCxNQUFNSSxVQUFVLEdBQUcsSUFBSSxDQUFDZixhQUFhLENBQUNZLGdCQUFnQixDQUFDLFNBQVMsQ0FBQztRQUNqRSxJQUFJLENBQUNJLFNBQVMsR0FBR0QsVUFBVSxDQUFDRSxlQUFlLEVBQUVELFNBQVMsSUFBSSxDQUFDLENBQUM7TUFDN0Q7TUFFQSxJQUFJLENBQUNFLFdBQVcsR0FBR0MsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO0lBQ3pDLENBQUM7SUFBQXpCLE1BQUEsQ0FFRDBCLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQVM7TUFDbEIsSUFBSSxDQUFDN0IsT0FBTyxHQUFHLEtBQUs7TUFDcEIsSUFBSSxDQUFDYyxPQUFPLENBQUNnQixrQkFBa0IsQ0FBQyxJQUFJLENBQUNDLGlCQUFpQixFQUFFLElBQUksQ0FBQztNQUM3RCxJQUFJLENBQUNiLGFBQWEsQ0FBQ2MsU0FBUyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBQUE3QixNQUFBLENBRUQ4QixJQUFJLEdBQUosU0FBQUEsSUFBSUEsQ0FBQSxFQUFTO01BQ1osSUFBSSxDQUFDZixhQUFhLENBQUNnQixPQUFPLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBQUEvQixNQUFBLENBRURnQyx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDQyxPQUFzQixFQUFRO01BQ3RELElBQUksQ0FBQ25DLHNCQUFzQixDQUFDb0MsSUFBSSxDQUFDRCxPQUFPLENBQUM7SUFDMUMsQ0FBQztJQUFBakMsTUFBQSxDQUVLbUMscUJBQXFCLEdBQTNCLGVBQU1BLHFCQUFxQkEsQ0FBQSxFQUFrQjtNQUM1QyxNQUFNWCxPQUFPLENBQUNZLEdBQUcsQ0FBQyxJQUFJLENBQUN0QyxzQkFBc0IsQ0FBQztNQUM5QyxJQUFJLENBQUNBLHNCQUFzQixHQUFHLEVBQUU7SUFDakM7O0lBRUE7QUFDRDtBQUNBO0FBQ0EsT0FIQztJQUFBRSxNQUFBLENBSUFtQiwwQkFBMEIsR0FBMUIsU0FBQUEsMEJBQTBCQSxDQUFDSCxjQUFvQyxFQUFRO01BQ3RFLE1BQU1xQixLQUFLLEdBQUdyQixjQUFjLEVBQUVzQixNQUFNLEVBQUVDLFdBQVcsS0FBSyxzQkFBc0I7O01BRTVFO01BQ0EsSUFBSSxDQUFDQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO01BQ25CLElBQUl4QixjQUFjLEVBQUV5QixPQUFPLEVBQUU7UUFDNUIsS0FBSyxNQUFNQyxXQUFXLElBQUlDLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDNUIsY0FBYyxDQUFDeUIsT0FBTyxDQUFDLEVBQUU7VUFDOUQsSUFBSSxDQUFDRCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxHQUFHQyxNQUFNLENBQUNFLE1BQU0sQ0FBQztZQUFFQyxVQUFVLEVBQUVKO1VBQVksQ0FBQyxFQUFFMUIsY0FBYyxDQUFDeUIsT0FBTyxDQUFDQyxXQUFXLENBQUMsQ0FBQzs7VUFFN0c7VUFDQSxNQUFNSyxjQUFjLEdBQUcsSUFBSSxDQUFDUCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDSyxjQUFjO1VBQ2pFLElBQUlBLGNBQWMsS0FBS0MsU0FBUyxFQUFFO1lBQ2pDLElBQUksQ0FBQ1IsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ08sU0FBUyxHQUFHLElBQUksQ0FBQ0Msd0JBQXdCLENBQUNILGNBQWMsRUFBRSxDQUFDLENBQUM7VUFDekY7UUFDRDtNQUNEO01BQ0EsSUFBSSxDQUFDSSxZQUFZLEdBQUcsQ0FBQyxDQUFDOztNQUV0QjtNQUNBLElBQUksQ0FBQ0MsUUFBUSxHQUFHLENBQUMsQ0FBQztNQUNsQixJQUFJcEMsY0FBYyxFQUFFcUMsTUFBTSxFQUFFO1FBQzNCLEtBQUssTUFBTUMsa0JBQWtCLElBQUl0QyxjQUFjLENBQUNxQyxNQUFNLEVBQUU7VUFDdkQsTUFBTUUsYUFBYSxHQUFHQyxtQkFBbUIsQ0FBQ0Ysa0JBQWtCLENBQUNHLE1BQU0sQ0FBQztZQUNuRUMsVUFBVSxHQUFHSixrQkFBa0IsQ0FBQ0ssSUFBSTtZQUNwQ0MsYUFBYSxHQUFHTixrQkFBa0IsQ0FBQ08sT0FBTztVQUMzQyxJQUFJLENBQUNELGFBQWEsRUFBRTtZQUNuQjtVQUNEO1VBQ0E7VUFDQSxJQUFJQSxhQUFhLENBQUNyRixNQUFNLEdBQUcsQ0FBQyxJQUFJcUYsYUFBYSxDQUFDRSxPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUtGLGFBQWEsQ0FBQ3JGLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDL0Z3RixHQUFHLENBQUNDLE9BQU8sQ0FBQyxxQkFBcUJOLFVBQVUsa0NBQWtDRSxhQUFhLEVBQUUsQ0FBQztVQUM5RjtVQUNBLE1BQU1LLFdBQVcsR0FBRyxJQUFJLENBQUNmLHdCQUF3QixDQUFDVSxhQUFhLEVBQUUsQ0FBQyxDQUFDO1VBQ25FLElBQUksQ0FBQ1IsUUFBUSxDQUFDTSxVQUFVLENBQUMsR0FBRztZQUMzQkMsSUFBSSxFQUFFRCxVQUFVO1lBQ2hCRyxPQUFPLEVBQUVELGFBQWE7WUFDdEJuQixPQUFPLEVBQUVjLGFBQWE7WUFDdEJXLFVBQVUsRUFBRUQ7VUFDYixDQUFDOztVQUVEO1VBQ0EsS0FBSyxNQUFNRSxJQUFJLElBQUlaLGFBQWEsRUFBRTtZQUNqQyxNQUFNYSxpQkFBaUIsR0FBRyxJQUFJLENBQUM1QixTQUFTLENBQUMyQixJQUFJLENBQUMsQ0FBQ0UsTUFBTTtZQUNyRCxJQUFJRCxpQkFBaUIsRUFBRTtjQUN0QmIsYUFBYSxDQUFDckIsSUFBSSxDQUFDa0MsaUJBQWlCLENBQUM7WUFDdEM7VUFDRDtVQUVBLElBQUksQ0FBQzVCLFNBQVMsQ0FBQ2UsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNlLGNBQWMsR0FBR0MsV0FBVyxDQUFDQyx5QkFBeUIsQ0FBQ1osYUFBYSxDQUFDYSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7VUFFM0gsSUFBSSxDQUFDcEMsS0FBSyxFQUFFO1lBQ1g7WUFDQSxNQUFNWSxTQUFTLEdBQUcsSUFBSSxDQUFDVCxTQUFTLENBQUNlLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDTixTQUFTO1lBQzVELElBQUlBLFNBQVMsS0FBS0QsU0FBUyxJQUFJQyxTQUFTLEdBQUdnQixXQUFXLEVBQUU7Y0FDdkQ7Y0FDQTtjQUNBLElBQUksQ0FBQ3pCLFNBQVMsQ0FBQ2UsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUNOLFNBQVMsR0FBR2dCLFdBQVc7WUFDekQ7O1lBRUE7WUFDQSxJQUFJLENBQUN6QixTQUFTLENBQUNlLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbUIsUUFBUSxHQUFHLENBQUMsQ0FBQztVQUMvQyxDQUFDLE1BQU0sSUFBSW5CLGFBQWEsQ0FBQ2hGLE1BQU0sS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDaUUsU0FBUyxDQUFDZSxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQ29CLGtCQUFrQixLQUFLLGtCQUFrQixFQUFFO1lBQ3BIO1lBQ0E7WUFDQSxJQUFJLENBQUNuQyxTQUFTLENBQUNlLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDbUIsUUFBUSxHQUFHLENBQUM7VUFDOUMsQ0FBQyxNQUFNO1lBQ047WUFDQW5CLGFBQWEsQ0FBQ3FCLE9BQU8sQ0FBRWxDLFdBQVcsSUFBSztjQUN0QyxRQUFRLElBQUksQ0FBQ0YsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ2lDLGtCQUFrQjtnQkFDckQsS0FBSyxrQkFBa0I7a0JBQ3RCLElBQUksQ0FBQ25DLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUNnQyxRQUFRLEdBQUcsQ0FBQztrQkFDeEM7Z0JBRUQsS0FBSyxnQkFBZ0I7a0JBQ3BCLElBQUksQ0FBQ2xDLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUNnQyxRQUFRLEdBQUcsQ0FBQztrQkFDeEM7Z0JBRUQ7a0JBQ0MsSUFBSSxDQUFDbEMsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ2dDLFFBQVEsR0FBRyxDQUFDO2NBQzFDO1lBQ0QsQ0FBQyxDQUFDO1VBQ0g7UUFDRDtNQUNEOztNQUVBO01BQ0EvQixNQUFNLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUNKLFNBQVMsQ0FBQyxDQUFDb0MsT0FBTyxDQUFFbEMsV0FBbUIsSUFBSztRQUM1RCxJQUFJMEIsaUJBQWlCLEdBQUcsSUFBSSxDQUFDNUIsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQzJCLE1BQU07UUFDMUQsT0FBT0QsaUJBQWlCLEVBQUU7VUFDekIsSUFBSSxDQUFDNUIsU0FBUyxDQUFDNEIsaUJBQWlCLENBQUMsQ0FBQ25CLFNBQVMsR0FDMUMsSUFBSSxDQUFDVCxTQUFTLENBQUM0QixpQkFBaUIsQ0FBQyxDQUFDbkIsU0FBUyxJQUFJLElBQUksQ0FBQ1QsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ08sU0FBUztVQUNyRixJQUFJLENBQUNULFNBQVMsQ0FBQzRCLGlCQUFpQixDQUFDLENBQUNyQixjQUFjLEdBQy9DLElBQUksQ0FBQ1AsU0FBUyxDQUFDNEIsaUJBQWlCLENBQUMsQ0FBQ3JCLGNBQWMsSUFBSSxJQUFJLENBQUNQLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUNLLGNBQWM7VUFDL0YsSUFBSSxDQUFDUCxTQUFTLENBQUM0QixpQkFBaUIsQ0FBQyxDQUFDTSxRQUFRLEdBQ3pDLElBQUksQ0FBQ2xDLFNBQVMsQ0FBQzRCLGlCQUFpQixDQUFDLENBQUNNLFFBQVEsSUFBSSxJQUFJLENBQUNsQyxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDZ0MsUUFBUTtVQUNuRixJQUFJLENBQUNsQyxTQUFTLENBQUM0QixpQkFBaUIsQ0FBQyxDQUFDTyxrQkFBa0IsR0FDbkQsSUFBSSxDQUFDbkMsU0FBUyxDQUFDNEIsaUJBQWlCLENBQUMsQ0FBQ08sa0JBQWtCLElBQUksSUFBSSxDQUFDbkMsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQ2lDLGtCQUFrQjtVQUN2R2pDLFdBQVcsR0FBRzBCLGlCQUFpQjtVQUMvQkEsaUJBQWlCLEdBQUcsSUFBSSxDQUFDNUIsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQzJCLE1BQU07UUFDdkQ7TUFDRCxDQUFDLENBQUM7O01BRUY7TUFDQSxNQUFNUSxpQkFBaUIsR0FBRyxFQUFFO01BQzVCLE1BQU1DLGlCQUFpQixHQUFHLEVBQUU7TUFDNUIsSUFBSUMsaUJBQWlCO01BRXJCLEtBQUssTUFBTUMsS0FBSyxJQUFJLElBQUksQ0FBQzVCLFFBQVEsRUFBRTtRQUNsQyxNQUFNNkIsTUFBTSxHQUFHLElBQUksQ0FBQzdCLFFBQVEsQ0FBQzRCLEtBQUssQ0FBQyxDQUFDZCxVQUFVO1FBQzlDLElBQUllLE1BQU0sS0FBSyxDQUFDLEVBQUU7VUFDakJKLGlCQUFpQixDQUFDM0MsSUFBSSxDQUFDOEMsS0FBSyxDQUFDO1FBQzlCLENBQUMsTUFBTSxJQUFJQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1VBQ3hCSCxpQkFBaUIsQ0FBQzVDLElBQUksQ0FBQzhDLEtBQUssQ0FBQztRQUM5QjtNQUNEO01BRUEsSUFBSUgsaUJBQWlCLENBQUN0RyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ25Dd0csaUJBQWlCLEdBQUdGLGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUN6QyxDQUFDLE1BQU0sSUFBSUMsaUJBQWlCLENBQUN2RyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQzFDd0csaUJBQWlCLEdBQUdELGlCQUFpQixDQUFDLENBQUMsQ0FBQztNQUN6QztNQUVBLElBQUlDLGlCQUFpQixFQUFFO1FBQ3RCLE1BQU1HLGtCQUFrQixHQUFHLElBQUksQ0FBQzlCLFFBQVEsQ0FBQzJCLGlCQUFpQixDQUFDLENBQUN0QyxPQUFPLENBQUMwQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSSxDQUFDQyxZQUFZLEdBQUcsRUFBRTtRQUN0QixNQUFNQyxTQUFTLEdBQUcsSUFBSSxDQUFDN0MsU0FBUyxDQUFDMEMsa0JBQWtCLENBQUMsQ0FBQ0ksT0FBTyxFQUFFQyxRQUEwQztRQUN4RyxJQUFJRixTQUFTLEVBQUU7VUFDZCxJQUFJLENBQUNELFlBQVksR0FBR0MsU0FBUyxDQUFDRyxXQUFXLElBQUksSUFBSUgsU0FBUyxDQUFDSSxTQUFTLEVBQUU7UUFDdkU7UUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDTCxZQUFZLEVBQUU7VUFDdkJyQixHQUFHLENBQUNDLE9BQU8sQ0FDViw2RkFBNkZrQixrQkFBa0IsRUFDaEgsQ0FBQztRQUNGO01BQ0QsQ0FBQyxNQUFNO1FBQ05uQixHQUFHLENBQUNDLE9BQU8sQ0FBQywrREFBK0QsQ0FBQztNQUM3RTs7TUFFQTtNQUNBckIsTUFBTSxDQUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDSixTQUFTLENBQUMsQ0FDekJrRCxHQUFHLENBQUVDLFVBQWtCLElBQUs7UUFDNUIsT0FBTyxJQUFJLENBQUNuRCxTQUFTLENBQUNtRCxVQUFVLENBQUM7TUFDbEMsQ0FBQyxDQUFDLENBQ0RDLElBQUksQ0FBQyxDQUFDQyxDQUFnQixFQUFFQyxDQUFnQixLQUFLO1FBQzdDLE9BQU9ELENBQUMsQ0FBQzVDLFNBQVMsS0FBS0QsU0FBUyxJQUFJOEMsQ0FBQyxDQUFDN0MsU0FBUyxLQUFLRCxTQUFTLElBQUk2QyxDQUFDLENBQUM1QyxTQUFTLEdBQUc2QyxDQUFDLENBQUM3QyxTQUFTLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQztNQUNwRyxDQUFDLENBQUMsQ0FDRDJCLE9BQU8sQ0FBRW5CLE1BQXFCLElBQUs7UUFDbkM7UUFDQSxJQUFJQSxNQUFNLENBQUM2QixPQUFPLEVBQUU7VUFDbkIsTUFBTUMsUUFBUSxHQUFHOUIsTUFBTSxDQUFDNkIsT0FBTyxDQUFDQyxRQUE4QjtVQUM5RCxNQUFNSCxZQUFZLEdBQUdHLFFBQVEsQ0FBQ0MsV0FBVyxLQUFLRCxRQUFRLENBQUNFLFNBQVMsR0FBRyxJQUFJRixRQUFRLENBQUNFLFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQztVQUNqRyxJQUFJLENBQUNGLFFBQVEsQ0FBQ1EsZUFBZSxJQUFJWCxZQUFZLEVBQUU7WUFDOUNHLFFBQVEsQ0FBQ1EsZUFBZSxHQUFHLEdBQUdYLFlBQVksR0FBRztVQUM5QztVQUNBLE1BQU1ZLFFBQWtCLEdBQUcsRUFBRTtVQUM3QixJQUFJdkMsTUFBTSxDQUFDYSxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDL0IsSUFBSSxDQUFDbkIsWUFBWSxDQUFFTSxNQUFNLENBQUNhLGNBQWMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHO2NBQUUwQixRQUFRLEVBQUVBO1lBQVMsQ0FBQztVQUN4RTtVQUNBckQsTUFBTSxDQUFDQyxJQUFJLENBQUMyQyxRQUFRLENBQUNVLFVBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDckIsT0FBTyxDQUFFc0IsUUFBZ0IsSUFBSztZQUNwRTtZQUNBLElBQUl6QyxNQUFNLENBQUNFLElBQUksS0FBSyw2QkFBNkIsRUFBRTtjQUNsRHFDLFFBQVEsQ0FBQzlELElBQUksQ0FBQ2dFLFFBQVEsQ0FBQztZQUN4QjtZQUNBLE1BQU1DLFdBQVcsR0FBRyxJQUFJLENBQUMvQyxRQUFRLENBQUNtQyxRQUFRLENBQUNVLFVBQVUsQ0FBRUMsUUFBUSxDQUFDLENBQUNFLE1BQU0sRUFBRUMsS0FBSyxDQUFDO1lBRS9FLElBQUlGLFdBQVcsSUFBSUEsV0FBVyxDQUFDMUQsT0FBTyxFQUFFO2NBQ3ZDMEQsV0FBVyxDQUFDMUQsT0FBTyxDQUFDbUMsT0FBTyxDQUFFbEMsV0FBbUIsSUFBSztnQkFDcEQsSUFDQyxJQUFJLENBQUNGLFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUM0QyxPQUFPLEVBQUVDLFFBQVEsSUFDN0MsQ0FBQyxJQUFJLENBQUMvQyxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDNEMsT0FBTyxFQUFFQyxRQUFRLEVBQUVRLGVBQWUsRUFDOUQ7a0JBQ0QsSUFBSSxJQUFJLENBQUN2RCxTQUFTLENBQUNFLFdBQVcsQ0FBQyxDQUFDNEMsT0FBTyxDQUFFQyxRQUFRLENBQUVDLFdBQVcsRUFBRTtvQkFDL0QsSUFBSSxDQUFDaEQsU0FBUyxDQUFDRSxXQUFXLENBQUMsQ0FBQzRDLE9BQU8sQ0FBRUMsUUFBUSxDQUFFUSxlQUFlLEdBQzdELElBQUksQ0FBQ3ZELFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUM0QyxPQUFPLENBQUVDLFFBQVEsQ0FBRUMsV0FBVyxHQUFHLEdBQUc7a0JBQ2xFLENBQUMsTUFBTSxJQUFJL0IsTUFBTSxDQUFDUixTQUFTLEtBQUssQ0FBQyxFQUFFO29CQUNsQyxJQUFJLENBQUNULFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUM0QyxPQUFPLENBQUVDLFFBQVEsQ0FBRVEsZUFBZSxHQUFHLEdBQ2hFLENBQUNHLFFBQVEsQ0FBQ0ksVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxHQUFHLElBQUlKLFFBQVEsR0FDOUM7a0JBQ0osQ0FBQyxNQUFNO29CQUNOLElBQUksQ0FBQzFELFNBQVMsQ0FBQ0UsV0FBVyxDQUFDLENBQUM0QyxPQUFPLENBQUVDLFFBQVEsQ0FBRVEsZUFBZSxHQUFHLEdBQ2hFUixRQUFRLENBQUNRLGVBQWUsR0FBR0csUUFBUSxHQUNqQztrQkFDSjtnQkFDRDtjQUNELENBQUMsQ0FBQztZQUNIO1VBQ0QsQ0FBQyxDQUFDO1FBQ0g7TUFDRCxDQUFDLENBQUM7SUFDSjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FMQztJQUFBbEcsTUFBQSxDQU1Ba0Qsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQ3FELFFBQWdCLEVBQUV0RCxTQUFpQixFQUFVO01BQ3JFc0QsUUFBUSxHQUFHQSxRQUFRLENBQUNDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO01BQzNDLE1BQU1DLEtBQUssR0FBRyxJQUFJQyxNQUFNLENBQUMsU0FBUyxDQUFDO01BQ25DLElBQUlILFFBQVEsSUFBSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsRUFBRTtRQUMzREEsUUFBUSxHQUFHLElBQUlBLFFBQVEsRUFBRTtNQUMxQjtNQUNBLElBQUlBLFFBQVEsQ0FBQ2hJLE1BQU0sRUFBRTtRQUNwQmdJLFFBQVEsR0FBR0EsUUFBUSxDQUFDQyxPQUFPLENBQUNDLEtBQUssRUFBRSxFQUFFLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUM5RixPQUFPLENBQUNnRyxLQUFLLENBQUNKLFFBQVEsQ0FBQyxJQUFJQSxRQUFRLEtBQUssRUFBRSxFQUFFO1VBQ3BELE9BQU8sSUFBSSxDQUFDckQsd0JBQXdCLENBQUNxRCxRQUFRLEVBQUUsRUFBRXRELFNBQVMsQ0FBQztRQUM1RCxDQUFDLE1BQU07VUFDTixPQUFPLElBQUksQ0FBQ0Msd0JBQXdCLENBQUNxRCxRQUFRLEVBQUV0RCxTQUFTLENBQUM7UUFDMUQ7TUFDRCxDQUFDLE1BQU07UUFDTixPQUFPQSxTQUFTO01BQ2pCO0lBQ0QsQ0FBQztJQUFBakQsTUFBQSxDQUVENEcsb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ2xELFVBQW1CLEVBQXVDO01BQzlFLElBQUlBLFVBQVUsS0FBS1YsU0FBUyxFQUFFO1FBQzdCLE9BQU9BLFNBQVM7TUFDakI7TUFDQSxPQUFPLElBQUksQ0FBQ0ksUUFBUSxDQUFDTSxVQUFVLENBQUM7SUFDakMsQ0FBQztJQUFBMUQsTUFBQSxDQUVENkcscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ25FLFdBQW9CLEVBQTZCO01BQ3RFLElBQUlBLFdBQVcsS0FBS00sU0FBUyxFQUFFO1FBQzlCLE9BQU9BLFNBQVM7TUFDakI7TUFDQSxPQUFPLElBQUksQ0FBQ1IsU0FBUyxDQUFDRSxXQUFXLENBQUM7SUFDbkMsQ0FBQztJQUFBMUMsTUFBQSxDQUVEOEcsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNDLFFBQWdCLEVBQUVDLFlBQW9CLEVBQVU7TUFDL0QsSUFBSUEsWUFBWSxDQUFDbEQsT0FBTyxDQUFDLEdBQUdpRCxRQUFRLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUNqRCxPQUFPQyxZQUFZLENBQUNDLFNBQVMsQ0FBQ0YsUUFBUSxDQUFDeEksTUFBTSxHQUFHLENBQUMsQ0FBQztNQUNuRDtNQUNBLE9BQU95SSxZQUFZO0lBQ3BCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBaEgsTUFBQSxDQUtBa0gsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ0MsZUFBaUMsRUFBNkI7TUFDckYsTUFBTUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDQyxhQUFhLENBQUNGLGVBQWUsQ0FBQztNQUM3RCxPQUFPLElBQUksQ0FBQ04scUJBQXFCLENBQUNPLGlCQUFpQixDQUFDO0lBQ3JEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBcEgsTUFBQSxDQUtBcUgsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUNGLGVBQWlDLEVBQXNCO01BQ3BFLE1BQU1HLGlCQUFpQixHQUFHLElBQUksQ0FBQ1IsZUFBZSxDQUM1Q0ssZUFBZSxDQUFzQ0ksU0FBUyxFQUMvREosZUFBZSxDQUFDSyxLQUFLLENBQUMsQ0FDdkIsQ0FBQztNQUNELElBQUlKLGlCQUFxQztNQUN6Q3pFLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQ0osU0FBUyxDQUFDLENBQUNvQyxPQUFPLENBQUU5QixVQUFrQixJQUFLO1FBQzNELElBQUksSUFBSSxDQUFDTixTQUFTLENBQUNNLFVBQVUsQ0FBQyxDQUFDMkUsRUFBRSxLQUFLSCxpQkFBaUIsSUFBSSxJQUFJLENBQUM5RSxTQUFTLENBQUNNLFVBQVUsQ0FBQyxDQUFDNEUsTUFBTSxLQUFLSixpQkFBaUIsRUFBRTtVQUNuSEYsaUJBQWlCLEdBQUd0RSxVQUFVO1FBQy9CO01BQ0QsQ0FBQyxDQUFDO01BQ0YsT0FBT3NFLGlCQUFpQjtJQUN6Qjs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBLE9BSkM7SUFBQXBILE1BQUEsQ0FLQTJILG9CQUFvQixHQUFwQixTQUFBQSxvQkFBb0JBLENBQUNDLElBQVUsRUFBc0I7TUFDcEQsTUFBTUMsYUFBYSxHQUFHQyxTQUFTLENBQUNDLG9CQUFvQixDQUFDSCxJQUFJLENBQUM7TUFDMUQsSUFBSTlFLFVBQVUsR0FBRytFLGFBQWEsR0FBRyxJQUFJLENBQUNSLGFBQWEsQ0FBQ1EsYUFBYSxDQUFDLEdBQUc3RSxTQUFTO01BQzlFLElBQUksQ0FBQ0YsVUFBVSxFQUFFO1FBQ2hCQSxVQUFVLEdBQUcsSUFBSSxDQUFDdUUsYUFBYSxDQUFDTyxJQUFJLENBQUM7TUFDdEM7TUFDQSxPQUFPOUUsVUFBVTtJQUNsQixDQUFDO0lBQUE5QyxNQUFBLENBRURnSSxzQkFBc0IsR0FBdEIsU0FBQUEsc0JBQXNCQSxDQUFBLEVBQWdDO01BQ3JELE9BQU8sSUFBSSxDQUFDQyxvQkFBb0I7SUFDakMsQ0FBQztJQUFBakksTUFBQSxDQUVEa0ksc0JBQXNCLEdBQXRCLFNBQUFBLHNCQUFzQkEsQ0FBQ0MsUUFBMEIsRUFBUTtNQUN4RCxJQUFJLENBQUNGLG9CQUFvQixHQUFHRSxRQUFRO0lBQ3JDLENBQUM7SUFBQW5JLE1BQUEsQ0FFS29JLGdCQUFnQixHQUF0QixlQUFNQSxnQkFBZ0JBLENBQUNDLE9BQWdCLEVBQUVDLFNBQXdCLEVBQUVDLGdCQUEwQixFQUFtQjtNQUMvRyxJQUFJLENBQUMsSUFBSSxDQUFDMUksT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxFQUFFLENBQUM7TUFDM0I7TUFDQSxJQUFJK0csZ0JBQTZDO01BQ2pELElBQUksQ0FBQ0QsZ0JBQWdCLEVBQUU7UUFDdEI7UUFDQUMsZ0JBQWdCLEdBQUdoSCxPQUFPLENBQUNDLE9BQU8sQ0FBQ2dILGlCQUFpQixDQUFDQyxlQUFlLENBQUNMLE9BQU8sQ0FBQyxDQUFDO01BQy9FLENBQUMsTUFBTTtRQUNORyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNHLGlCQUFpQixDQUFDSixnQkFBZ0IsRUFBeUJELFNBQVMsRUFBRUQsT0FBTyxDQUFDLENBQUNPLElBQUksQ0FDekdDLFVBQThCLElBQUs7VUFDbkMsT0FBTyxJQUFJLENBQUNsSSxPQUFPLENBQUNtSSxNQUFNLENBQUNSLFNBQVMsRUFBR08sVUFBVSxDQUFDO1FBQ25ELENBQ0QsQ0FBQztNQUNGO01BQ0EsT0FBUSxNQUFNTCxnQkFBZ0I7SUFDL0IsQ0FBQztJQUFBeEksTUFBQSxDQTBCSytJLFVBQVUsR0FBaEIsZUFBTUEsVUFBVUEsQ0FDZjdJLFFBQWlCLEVBQ2pCd0QsVUFBeUIsRUFDekJzRixpQkFBMEIsRUFDMUJDLGdCQUEwQixFQUMxQkMsWUFBc0IsRUFDUztNQUMvQixJQUFJLENBQUMsSUFBSSxDQUFDckosT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxDQUFDO01BQ3pCO01BQ0EsSUFBSTBILGlCQUFpQixFQUFFQyxhQUFzQjtNQUM3QyxJQUFJbEosUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxJQUFJTixRQUFRLENBQUNNLFFBQVEsQ0FBQyxDQUFDLENBQUNFLFlBQVksSUFBSVIsUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQyxFQUFFO1FBQ2xHMEksYUFBYSxHQUFHQyxXQUFXLENBQUNDLHdCQUF3QixDQUFDcEosUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQyxDQUFDO01BQ3pGO01BQ0EsSUFBSSxDQUFDc0ksaUJBQWlCLEVBQUU7UUFDdkI7UUFDQUcsaUJBQWlCLEdBQUczSCxPQUFPLENBQUNDLE9BQU8sQ0FBQ2dILGlCQUFpQixDQUFDQyxlQUFlLENBQUN4SSxRQUFRLENBQUMsQ0FBQztNQUNqRixDQUFDLE1BQU07UUFDTmlKLGlCQUFpQixHQUFHLElBQUksQ0FBQ1IsaUJBQWlCLENBQUNLLGlCQUFpQixFQUF5QnRGLFVBQVUsRUFBRXhELFFBQVEsQ0FBQyxDQUFDMEksSUFBSSxDQUM3R1csV0FBK0IsSUFBSztVQUNwQyxPQUFPLElBQUksQ0FBQzVJLE9BQU8sQ0FBQ21JLE1BQU0sQ0FBQ3BGLFVBQVUsRUFBRzZGLFdBQVcsQ0FBQztRQUNyRCxDQUNELENBQUM7TUFDRjtNQUNBLE1BQU1DLFNBQVMsR0FBRyxNQUFNTCxpQkFBaUI7TUFDekMsTUFBTU0sZ0JBQWdCLEdBQUdBLENBQUEsS0FBWTtRQUNwQyxJQUFJLENBQUM1SSxZQUFZLENBQUM2SSxTQUFTLENBQUNGLFNBQVMsRUFBR1AsZ0JBQWdCLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDRyxhQUFhLENBQUM7TUFDeEYsQ0FBQztNQUNELElBQUlGLFlBQVksS0FBSyxJQUFJLEVBQUU7UUFDMUIsT0FBT08sZ0JBQWdCLENBQUMsQ0FBQztNQUMxQixDQUFDLE1BQU07UUFDTixPQUFPQSxnQkFBZ0IsQ0FBQyxDQUFDO01BQzFCO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FOQztJQUFBekosTUFBQSxDQU9NMkksaUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FBQ1ksV0FBZ0MsRUFBRUksWUFBMkIsRUFBRXpKLFFBQWlCLEVBQW1CO01BQzFILElBQUkwSixrQkFBa0I7TUFDdEIsSUFBSTtRQUNILE1BQU14RSxZQUFZLEdBQUdsRixRQUFRLENBQUMySixPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNcEosVUFBMEIsR0FBR1AsUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQztRQUNyRSxNQUFNb0osaUJBQWlCLEdBQUcxRSxZQUFZLENBQUNYLEtBQUssQ0FBQyxHQUFHLENBQUM7UUFDakQsTUFBTXNGLDZCQUE2QixHQUFHcEgsTUFBTSxDQUFDQyxJQUFJLENBQUMyRyxXQUFXLENBQUMsQ0FBQzdELEdBQUcsQ0FBQyxNQUFPc0UsYUFBcUIsSUFBSztVQUNuRyxNQUFNQywyQkFBMkIsR0FBR1YsV0FBVyxDQUFDUyxhQUFhLENBQUM7VUFDOUQ7VUFDQSxNQUFNRSxpQkFBaUIsR0FBR0MsV0FBVyxDQUFDQyxLQUFLLENBQUNILDJCQUEyQixDQUFDO1VBQ3hFLE1BQU1JLE1BQU0sR0FBR0gsaUJBQWlCLENBQUNJLEtBQUssSUFBSSxDQUFDSixpQkFBaUIsQ0FBQztVQUM3RCxNQUFNSywwQkFBMEIsR0FBR0YsTUFBTSxDQUFDM0UsR0FBRyxDQUFDLGdCQUFnQjhFLFNBQThCLEVBQUU7WUFDN0YsTUFBTUMsY0FBYyxHQUFHRCxTQUFTLENBQUNFLElBQUksQ0FBQ2pHLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDbEQ7WUFDQSxNQUFNa0csV0FBVyxHQUFHYixpQkFBaUIsQ0FBQzNFLEtBQUssQ0FBQyxDQUFDLEVBQUUyRSxpQkFBaUIsQ0FBQ3ZMLE1BQU0sR0FBR2tNLGNBQWMsQ0FBQ2xNLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDcEcsTUFBTXFNLGdCQUFnQixHQUFHRCxXQUFXLENBQUNFLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDOUMsTUFBTUMsWUFBWSxHQUNqQkYsZ0JBQWdCLEtBQUsxSyxRQUFRLENBQUMySixPQUFPLENBQUMsQ0FBQyxHQUNwQzNKLFFBQVEsR0FDUkEsUUFBUSxDQUFDTSxRQUFRLENBQUMsQ0FBQyxDQUFDdUssV0FBVyxDQUFDSCxnQkFBZ0IsQ0FBQyxDQUFDSSxlQUFlLENBQUMsQ0FBQztZQUV2RSxNQUFNQyxZQUFZLEdBQUd4SyxVQUFVLENBQUN5SyxjQUFjLENBQUNOLGdCQUFnQixHQUFHLEdBQUcsR0FBR0gsY0FBYyxDQUFDQSxjQUFjLENBQUNsTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDbEgsT0FBT3VNLFlBQVksQ0FBQ0ssZUFBZSxDQUFDVixjQUFjLENBQUNBLGNBQWMsQ0FBQ2xNLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDcUssSUFBSSxDQUFDLFVBQVV3QyxNQUFNLEVBQUU7Y0FDckcsTUFBTUMsYUFBYSxHQUFHSixZQUFZLENBQUNLLFNBQVMsQ0FBQyxDQUFDO2NBQzlDLE1BQU1DLFFBQVEsR0FBR0YsYUFBYSxDQUFDRyxLQUFLO2NBQ3BDLE9BQU9DLFVBQVUsQ0FBQ0MsYUFBYSxDQUFDTixNQUFNLEVBQUVHLFFBQVEsQ0FBQztZQUNsRCxDQUFDLENBQUM7VUFDSCxDQUFDLENBQUM7VUFFRixPQUFPL0osT0FBTyxDQUFDWSxHQUFHLENBQUNtSSwwQkFBMEIsQ0FBQyxDQUFDM0IsSUFBSSxDQUFFK0MsbUJBQXdDLElBQUs7WUFDakcsTUFBTUMsS0FBSyxHQUFHMUIsaUJBQWlCLENBQUMyQixTQUFTLEdBQ3RDM0IsaUJBQWlCLENBQUMyQixTQUFTLENBQUNDLEtBQUssQ0FBQyxJQUFJLEVBQUVILG1CQUFtQixDQUFDLEdBQzVEQSxtQkFBbUIsQ0FBQ2QsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUMvQixPQUFPO2NBQUVrQixHQUFHLEVBQUUvQixhQUFhO2NBQUU0QixLQUFLLEVBQUVBO1lBQU0sQ0FBQztVQUM1QyxDQUFDLENBQUM7UUFDSCxDQUFDLENBQUM7UUFFRmhDLGtCQUFrQixHQUFHcEksT0FBTyxDQUFDWSxHQUFHLENBQUMySCw2QkFBNkIsQ0FBQyxDQUFDbkIsSUFBSSxDQUFDLFVBQVVvRCxzQkFBNEMsRUFBRTtVQUM1SCxNQUFNQyxXQUFvQyxHQUFHLENBQUMsQ0FBQztVQUMvQ0Qsc0JBQXNCLENBQUNwSCxPQUFPLENBQUMsVUFBVXNILGtCQUFzQyxFQUFFO1lBQ2hGRCxXQUFXLENBQUNDLGtCQUFrQixDQUFDSCxHQUFHLENBQUMsR0FBR0csa0JBQWtCLENBQUNOLEtBQUs7VUFDL0QsQ0FBQyxDQUFDO1VBQ0YsT0FBT0ssV0FBVztRQUNuQixDQUFDLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBT0UsTUFBTSxFQUFFO1FBQ2hCcEksR0FBRyxDQUFDcUksS0FBSyxDQUFDLDhEQUE4RHpDLFlBQVksRUFBRSxDQUFDO1FBQ3ZGQyxrQkFBa0IsR0FBR3BJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQ3pDO01BQ0EsT0FBT21JLGtCQUFrQjtJQUMxQixDQUFDO0lBQUE1SixNQUFBLENBRURxTSxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFDOUMsV0FBeUMsRUFBUTtNQUN0RSxJQUFJLENBQUN6SixzQkFBc0IsR0FBRyxFQUFFO01BQ2hDLElBQUksQ0FBQ2lCLGFBQWEsQ0FBQ2MsU0FBUyxDQUFDLGNBQWMsRUFBRTBILFdBQVcsQ0FBQztNQUN6RCxJQUFJLENBQUN4SSxhQUFhLENBQUNjLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRTBILFdBQVcsQ0FBQztNQUU5RCtDLFNBQVMsQ0FBQ0MsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BcEJDO0lBQUF2TSxNQUFBLENBcUJNd00saUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FDdEJuRSxPQUFtQyxFQUloQjtNQUFBLElBSG5CUSxVQUF1QyxHQUFBdkssU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQTBFLFNBQUEsR0FBQTFFLFNBQUEsTUFBRyxDQUFDLENBQUM7TUFBQSxJQUM1Q21PLFFBQWtDLEdBQUFuTyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBMEUsU0FBQTtNQUFBLElBQ2xDMEosaUJBQW9DLEdBQUFwTyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBMEUsU0FBQTtNQUVwQyxJQUFJLENBQUMsSUFBSSxDQUFDbkQsT0FBTyxFQUFFO1FBQ2xCLE9BQU8yQixPQUFPLENBQUNDLE9BQU8sQ0FBQyxLQUFLLENBQUM7TUFDOUI7TUFFQSxJQUFJMEUsV0FBVyxHQUFHLEVBQUU7TUFDcEIsSUFBSXdHLHNCQUFtRDtNQUN2RCxNQUFNQyxZQUFZLEdBQUd2RCxXQUFXLENBQUNDLHdCQUF3QixDQUFDLElBQUksQ0FBQzdJLFVBQVUsQ0FBQzs7TUFFMUU7TUFDQSxJQUFJb0ksVUFBVSxFQUFFZ0UsVUFBVSxJQUFJSixRQUFRLEVBQUV4RyxVQUFVLEVBQUU7UUFDbkQsTUFBTTZHLGNBQWMsR0FBR0wsUUFBUSxDQUFDeEcsVUFBK0U7UUFDL0csTUFBTThHLFlBQVksR0FBR0QsY0FBYyxDQUFDakUsVUFBVSxDQUFDZ0UsVUFBVSxDQUFDLENBQUN6RyxNQUFNO1FBQ2pFRCxXQUFXLEdBQUc0RyxZQUFZLENBQUMxRyxLQUFLO1FBRWhDLElBQUkwRyxZQUFZLENBQUNsRSxVQUFVLElBQUlSLE9BQU8sQ0FBQzJFLEdBQUcsQ0FBVSwrQkFBK0IsQ0FBQyxFQUFFO1VBQ3JGTCxzQkFBc0IsR0FBRyxJQUFJLENBQUNoRSxpQkFBaUIsQ0FDOUNvRSxZQUFZLENBQUNsRSxVQUFVLEVBQ3ZCMUMsV0FBVyxFQUNYa0MsT0FDRCxDQUFDO1FBQ0Y7TUFDRDtNQUVBLElBQUk0RSxXQUFXLEdBQUcsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQzdFLE9BQU8sRUFBRVEsVUFBVSxDQUFDO01BQy9EO01BQ0E7TUFDQSxJQUFJb0UsV0FBVyxDQUFDMU8sTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUM0Tyx5QkFBeUIsRUFBRTtRQUMvRCxJQUFJLENBQUN0TSxZQUFZLENBQUN1TSxXQUFXLENBQUMsQ0FBQztRQUMvQixPQUFPNUwsT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO01BQzdCOztNQUVBO01BQ0EsSUFBSW9ILFVBQVUsRUFBRXdFLDBCQUEwQixFQUFFO1FBQzNDSixXQUFXLElBQUksT0FBTztNQUN2Qjs7TUFFQTtNQUNBLE1BQU1LLE9BQU8sR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDTixXQUFXLEVBQUVwRSxVQUFVLENBQUM7TUFDOUQsSUFBSXlFLE9BQU8sRUFBRTtRQUNaTCxXQUFXLElBQUksV0FBV0ssT0FBTyxFQUFFO01BQ3BDOztNQUVBO01BQ0EsTUFBTUUsZUFBc0MsR0FBRztRQUM5Q0gsMEJBQTBCLEVBQUV4RSxVQUFVLENBQUN3RSwwQkFBMEI7UUFDakVJLGVBQWUsRUFBRTVFLFVBQVUsRUFBRTZFLFFBQVE7UUFDckNDLGdCQUFnQixFQUFFOUUsVUFBVSxFQUFFK0UsZUFBZTtRQUM3Q0MsZ0JBQWdCLEVBQUVoRixVQUFVLEVBQUVpRixlQUFlLEtBQUs5SyxTQUFTLEdBQUc2RixVQUFVLEVBQUVpRixlQUFlLEdBQUcsSUFBSTtRQUNoR0MsTUFBTSxFQUFFbEYsVUFBVSxFQUFFa0YsTUFBTTtRQUMxQkMsb0JBQW9CLEVBQUVuRixVQUFVLENBQUNtRjtNQUNsQyxDQUFDO01BRUQsSUFBSW5GLFVBQVUsRUFBRW9GLGNBQWMsS0FBSyxDQUFDLENBQUMsSUFBSXBGLFVBQVUsRUFBRXFGLGVBQWUsS0FBSyxJQUFJLEVBQUU7UUFDOUUsSUFBSTdGLE9BQU8sQ0FBQzJFLEdBQUcsQ0FBVSwrQkFBK0IsQ0FBQyxFQUFFO1VBQzFEUSxlQUFlLENBQUNXLFVBQVUsR0FBRzlGLE9BQU87UUFDckM7TUFDRDtNQUVBLElBQUlRLFVBQVUsRUFBRXVGLGlCQUFpQixFQUFFO1FBQ2xDO1FBQ0EsTUFBTUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDeE4sWUFBWSxDQUFDeU4sT0FBTyxDQUFDLENBQUMsQ0FBQzlILE9BQU8sQ0FBQyxpQ0FBaUMsRUFBRSxFQUFFLENBQUM7UUFDekcsSUFBSXlHLFdBQVcsS0FBS29CLHNCQUFzQixFQUFFO1VBQzNDO1VBQ0EsTUFBTUUsZUFBZSxHQUFHLElBQUksQ0FBQzVOLE9BQU8sQ0FBQzZOLGtCQUFrQixDQUFDLElBQUksQ0FBQzNOLFlBQVksQ0FBQ3lOLE9BQU8sQ0FBQyxDQUFDLENBQUM7VUFDcEYsSUFBSUcsZ0JBQXdDLEdBQUc7WUFBRW5NLE1BQU0sRUFBRSxDQUFDO1VBQUUsQ0FBQztVQUM3RCxJQUFJaU0sZUFBZSxFQUFFO1lBQ3BCRSxnQkFBZ0IsR0FBRztjQUFFLEdBQUdGLGVBQWU7Y0FBRWpNLE1BQU0sRUFBRSxDQUFDO1lBQUUsQ0FBQztZQUNyRG1NLGdCQUFnQixDQUFDM0IsY0FBYyxHQUFHVSxlQUFlO1lBQ2pEaUIsZ0JBQWdCLENBQUNDLGdCQUFnQixHQUFHLElBQUksQ0FBQzlILG9CQUFvQixDQUFDLElBQUksQ0FBQytILGlCQUFpQixDQUFDO1lBQ3JGRixnQkFBZ0IsQ0FBQ0csWUFBWSxHQUFHLElBQUksQ0FBQ0Msb0JBQW9CO1lBQ3pESixnQkFBZ0IsQ0FBQ0ssS0FBSyxHQUFHLElBQUksQ0FBQ0MsYUFBYTtVQUM1QztVQUVBLElBQUksQ0FBQ2xPLFlBQVksQ0FBQ21PLGNBQWMsQ0FBQyxDQUFDLENBQUNuRyxVQUFVLENBQUNvRyxVQUFVLENBQUM7VUFFekQsSUFBSSxDQUFDNUMscUJBQXFCLENBQUNvQyxnQkFBZ0IsQ0FBQztVQUU1QyxPQUFPak4sT0FBTyxDQUFDQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQzdCO01BQ0Q7TUFFQSxJQUFJb0gsVUFBVSxFQUFFcUcsU0FBUyxJQUFJLENBQUMsQ0FBQ3JHLFVBQVUsQ0FBQzZFLFFBQVEsSUFBSSxDQUFDVCxXQUFXLENBQUNrQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDckYsSUFBSWxDLFdBQVcsQ0FBQ2tDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtVQUM5QmxDLFdBQVcsSUFBSSxrQkFBa0I7UUFDbEMsQ0FBQyxNQUFNO1VBQ05BLFdBQVcsSUFBSSxrQkFBa0I7UUFDbEM7TUFDRDtNQUVBLElBQUlwRSxVQUFVLENBQUN1RyxPQUFPLEtBQUssY0FBYyxFQUFFO1FBQzFDO1FBQ0FDLEdBQUcsQ0FBQ0MsRUFBRSxDQUFDQyxPQUFPLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxFQUFFLE1BQU9DLFNBQW9CLElBQUs7VUFDeEUsTUFBTUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDcFAsYUFBYSxDQUFDcVAsZ0JBQWdCLENBQUMsQ0FBQztVQUNoRSxNQUFNQyxTQUFTLEdBQUdGLGtCQUFrQixDQUFDRyxjQUFjLENBQUNDLFFBQVEsQ0FBQ0MsUUFBUSxDQUFDQyxJQUFJLENBQUM7VUFDM0UsTUFBTUMsaUJBQWlCLEdBQUksTUFBTVIsU0FBUyxDQUFDUyxlQUFlLENBQUMsWUFBWSxDQUFnQjtVQUN2RixNQUFNQyxJQUFJLEdBQUcsTUFBTUYsaUJBQWlCLENBQUNHLE9BQU8sQ0FBQztZQUM1QzFNLE1BQU0sRUFBRTtjQUNQMk0sY0FBYyxFQUFFVCxTQUFTLENBQUNTLGNBQWM7Y0FDeENDLE1BQU0sRUFBRVYsU0FBUyxDQUFDVTtZQUNuQixDQUFDO1lBQ0RDLE1BQU0sRUFBRVgsU0FBUyxDQUFDVztVQUNuQixDQUFDLENBQUM7VUFDRixNQUFNQywyQkFBMkIsR0FBRyxNQUFNZCxrQkFBa0IsQ0FBQ2UsYUFBYSxDQUFDLENBQUM7VUFDNUUsSUFBSUMsR0FBRyxFQUFFakgsU0FBaUI7VUFDMUIsSUFBSStHLDJCQUEyQixFQUFFO1lBQ2hDRSxHQUFHLEdBQUcsSUFBSUMsR0FBRyxDQUFDSCwyQkFBMkIsQ0FBQztZQUMxQy9HLFNBQVMsR0FBRytHLDJCQUEyQixDQUFDL0osT0FBTyxDQUFDaUssR0FBRyxDQUFDVixJQUFJLEVBQUUsR0FBR0csSUFBSSxLQUFLUyxTQUFTLENBQUMxRCxXQUFXLENBQUMsRUFBRSxDQUFDO1VBQ2hHLENBQUMsTUFBTTtZQUNOd0QsR0FBRyxHQUFHLElBQUlDLEdBQUcsQ0FBQ0UsTUFBTSxDQUFDZCxRQUFRLENBQUNJLElBQUksQ0FBQztZQUNuQzFHLFNBQVMsR0FBRyxHQUFHaUgsR0FBRyxDQUFDSSxNQUFNLEdBQUdKLEdBQUcsQ0FBQ0ssUUFBUSxHQUFHWixJQUFJLEtBQUtTLFNBQVMsQ0FBQzFELFdBQVcsQ0FBQyxFQUFFO1VBQzdFO1VBQ0E4RCxVQUFVLENBQUN2SCxTQUFTLENBQUM7UUFDdEIsQ0FBQyxDQUFDO1FBQ0YsT0FBT2hJLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLElBQUksQ0FBQztNQUM3QixDQUFDLE1BQU07UUFDTjtRQUNBO1FBQ0EsSUFBSWlMLGlCQUFpQixFQUFFL0ksSUFBSSxLQUFLLDZCQUE2QixFQUFFO1VBQzlELE1BQU1xTixVQUFVLEdBQUcsSUFBSSxDQUFDclEsT0FBTyxDQUFDNk4sa0JBQWtCLENBQUN2QixXQUFXLENBQUM7VUFDL0QsSUFBSStELFVBQVUsRUFBRTtZQUNmLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNySyxvQkFBb0IsQ0FBQ29LLFVBQVUsQ0FBQ3JOLElBQUksQ0FBQztZQUN6RCxJQUFJc04sTUFBTSxJQUFJQSxNQUFNLENBQUN4TyxPQUFPLElBQUl3TyxNQUFNLENBQUN4TyxPQUFPLENBQUNsRSxNQUFNLEdBQUcsQ0FBQyxFQUFFO2NBQzFELE1BQU0yUyxlQUFlLEdBQUdELE1BQU0sQ0FBQ3hPLE9BQU8sQ0FBQ3dPLE1BQU0sQ0FBQ3hPLE9BQU8sQ0FBQ2xFLE1BQU0sR0FBRyxDQUFDLENBQUM7Y0FDakUsTUFBTTRTLE9BQU8sR0FBRyxJQUFJLENBQUN0SyxxQkFBcUIsQ0FBQ3FLLGVBQWUsQ0FBQztjQUMzRCxJQUFJQyxPQUFPLElBQUlBLE9BQU8sQ0FBQ3hOLElBQUksS0FBSyw2QkFBNkIsRUFBRTtnQkFDOUR5TixlQUFlLENBQUNDLCtCQUErQixDQUFDLENBQUM7Y0FDbEQ7WUFDRDtVQUNEO1FBQ0Q7O1FBRUE7UUFDQSxJQUFJLENBQUN6UixtQkFBbUIsQ0FBQ3NDLElBQUksQ0FBQ3NMLGVBQWUsQ0FBQztRQUU5QyxJQUFJckgsV0FBVyxJQUFJd0csc0JBQXNCLEVBQUU7VUFDMUMsT0FBT0Esc0JBQXNCLENBQUMvRCxJQUFJLENBQUUwSSxnQkFBd0IsSUFBSztZQUNoRTNPLE1BQU0sQ0FBQ0UsTUFBTSxDQUFDeU8sZ0JBQWdCLEVBQUU7Y0FBRWxJLGFBQWEsRUFBRXdEO1lBQWEsQ0FBQyxDQUFDO1lBQ2hFLElBQUksQ0FBQ2pNLE9BQU8sQ0FBQzRRLEtBQUssQ0FBQ3BMLFdBQVcsRUFBRW1MLGdCQUFnQixDQUFDO1lBQ2pELE9BQU8sSUFBSTtVQUNaLENBQUMsQ0FBQztRQUNIO1FBQ0EsT0FBTyxJQUFJLENBQUN6USxZQUFZLENBQ3RCNkksU0FBUyxDQUNUdUQsV0FBVyxFQUNYLENBQUMsQ0FBQ3BFLFVBQVUsQ0FBQzJJLGVBQWUsRUFDNUIzSSxVQUFVLEVBQUU0SSxtQkFBbUIsRUFDL0I1SSxVQUFVLEVBQUVvRyxVQUFVLEVBQ3RCLENBQUNyQyxZQUNGLENBQUMsQ0FDQWhFLElBQUksQ0FBRThJLFVBQVUsSUFBSztVQUNyQixJQUFJLENBQUNBLFVBQVUsRUFBRTtZQUNoQjtZQUNBLElBQUksQ0FBQzlSLG1CQUFtQixDQUFDK1IsR0FBRyxDQUFDLENBQUM7VUFDL0I7VUFDQSxPQUFPRCxVQUFVO1FBQ2xCLENBQUMsQ0FBQztNQUNKO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BUkM7SUFBQTFSLE1BQUEsQ0FTTTRSLGVBQWUsR0FBckIsZUFBTUEsZUFBZUEsQ0FDcEJDLGdCQUF3QixFQUN4QlAsZ0JBQXlFLEVBQ3REO01BQ25CLElBQUksQ0FBQyxJQUFJLENBQUN6UixPQUFPLEVBQUU7UUFDbEIsT0FBTzJCLE9BQU8sQ0FBQ0MsT0FBTyxDQUFDLEtBQUssQ0FBQztNQUM5QjtNQUNBLElBQUksQ0FBQ3lHLHNCQUFzQixDQUFDbEYsU0FBUyxDQUFDO01BQ3RDLE1BQU04TyxVQUFVLEdBQUcsSUFBSSxDQUFDblIsT0FBTyxDQUFDbUksTUFBTSxDQUFDK0ksZ0JBQWdCLEVBQUVQLGdCQUFnQixDQUFDO01BQzFFLE9BQU8sSUFBSSxDQUFDelEsWUFBWSxDQUFDNkksU0FBUyxDQUNqQ29JLFVBQVUsRUFDVixDQUFDLENBQUNSLGdCQUFnQixFQUFFRSxlQUFlLEVBQ25DeE8sU0FBUyxFQUNUQSxTQUFTLEVBQ1QsQ0FBQ3NPLGdCQUFnQixFQUFFbEksYUFDcEIsQ0FBQztJQUNGOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBcEosTUFBQSxDQUtBK1Isd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQzdSLFFBQWlCLEVBQVc7TUFDcEQsTUFBTThSLEtBQUssR0FBRzlSLFFBQVEsQ0FBQzJKLE9BQU8sQ0FBQyxDQUFDOztNQUVoQztNQUNBO01BQ0EsSUFBSSxJQUFJLENBQUNoSixZQUFZLENBQUNrUix3QkFBd0IsQ0FBQ0MsS0FBSyxDQUFDLEVBQUU7UUFDdEQsT0FBTyxJQUFJO01BQ1osQ0FBQyxNQUFNLElBQUksb0JBQW9CLENBQUNDLElBQUksQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7UUFDNUM7UUFDQTtRQUNBLElBQUlFLGFBQWE7UUFDakIsSUFBSSxJQUFJLENBQUNqSyxvQkFBb0IsSUFBSSxJQUFJLENBQUNBLG9CQUFvQixDQUFDa0ssYUFBYSxLQUFLSCxLQUFLLEVBQUU7VUFDbkY7VUFDQUUsYUFBYSxHQUFHLElBQUksQ0FBQ2pLLG9CQUFvQixDQUFDbUssWUFBWTtRQUN2RCxDQUFDLE1BQU07VUFDTkYsYUFBYSxHQUFHekosaUJBQWlCLENBQUNDLGVBQWUsQ0FBQ3hJLFFBQVEsQ0FBRTtRQUM3RDtRQUVBLE9BQU9nUyxhQUFhLElBQUlGLEtBQUssR0FBRyxJQUFJLENBQUNuUixZQUFZLENBQUNrUix3QkFBd0IsQ0FBQ0csYUFBYSxDQUFDLEdBQUcsS0FBSztNQUNsRyxDQUFDLE1BQU07UUFDTixPQUFPLEtBQUs7TUFDYjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBbFMsTUFBQSxDQUtBcVMscUJBQXFCLEdBQXJCLFNBQUFBLHFCQUFxQkEsQ0FBQ0wsS0FBYSxFQUFVO01BQzVDLE1BQU12TCxLQUFLLEdBQUcsSUFBSUMsTUFBTSxDQUFDLFNBQVMsQ0FBQztNQUNuQ3NMLEtBQUssR0FBR0EsS0FBSyxDQUFDeEwsT0FBTyxDQUFDQyxLQUFLLEVBQUUsRUFBRSxDQUFDO01BQ2hDLElBQUksSUFBSSxDQUFDOUYsT0FBTyxDQUFDZ0csS0FBSyxDQUFDcUwsS0FBSyxDQUFDLElBQUlBLEtBQUssS0FBSyxFQUFFLEVBQUU7UUFDOUMsT0FBT0EsS0FBSztNQUNiLENBQUMsTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDSyxxQkFBcUIsQ0FBQ0wsS0FBSyxDQUFDO01BQ3pDO0lBQ0Q7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFoUyxNQUFBLENBS0FzUyxtQ0FBbUMsR0FBbkMsU0FBQUEsbUNBQW1DQSxDQUFDakssT0FBZ0IsRUFBVztNQUM5RDtNQUNBLElBQUksQ0FBQyxvQkFBb0IsQ0FBQzRKLElBQUksQ0FBQzVKLE9BQU8sQ0FBQ3dCLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUNsRCxPQUFPLEtBQUs7TUFDYjs7TUFFQTtNQUNBLE1BQU0wSSxTQUFTLEdBQUdsSyxPQUFPLENBQUM3SCxRQUFRLENBQUMsQ0FBQyxDQUFDRSxZQUFZLENBQUMsQ0FBQztNQUNuRCxNQUFNK0UsU0FBUyxHQUFHK00sa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDRixTQUFTLENBQUNySCxjQUFjLENBQUM3QyxPQUFPLENBQUN3QixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDM0c2SSxZQUF5QjtNQUUzQixJQUFJLENBQUNySixXQUFXLENBQUNzSixXQUFXLENBQUNsTixTQUFTLENBQUMsRUFBRTtRQUN4QyxPQUFPLEtBQUs7TUFDYjs7TUFFQTtNQUNBLElBQUk0QyxPQUFPLENBQUN1SyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxLQUFLLElBQUl2SyxPQUFPLENBQUN1SyxXQUFXLENBQUMsaUJBQWlCLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDeEcsT0FBTyxLQUFLO01BQ2I7O01BRUE7TUFDQSxNQUFNQyxhQUFhLEdBQUdwTixTQUFTLENBQUM5QixJQUFJO01BQ3BDLE9BQU84RSxpQkFBaUIsQ0FBQ3FLLGVBQWUsQ0FBQ1AsU0FBUyxFQUFFTSxhQUFhLENBQUMsS0FBSzdQLFNBQVM7SUFDakYsQ0FBQztJQUFBaEQsTUFBQSxDQUVEa04sbUJBQW1CLEdBQW5CLFNBQUFBLG1CQUFtQkEsQ0FBQzdFLE9BQW1DLEVBQUVRLFVBQXVDLEVBQVU7TUFDekcsSUFBSW1KLEtBQUssR0FBRyxFQUFFO01BRWQsSUFBSTNKLE9BQU8sQ0FBQzJFLEdBQUcsQ0FBbUIsd0NBQXdDLENBQUMsRUFBRTtRQUM1RWdGLEtBQUssR0FBRzNKLE9BQU8sQ0FBQzBLLGdCQUFnQixDQUFDLENBQUMsRUFBRWxKLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRTtNQUNwRCxDQUFDLE1BQU07UUFDTm1JLEtBQUssR0FBRzNKLE9BQU8sQ0FBQ3dCLE9BQU8sQ0FBQyxDQUFDO1FBRXpCLElBQUloQixVQUFVLENBQUNvRixjQUFjLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDckM7VUFDQStELEtBQUssR0FBRyxJQUFJLENBQUNLLHFCQUFxQixDQUFDTCxLQUFLLENBQUM7O1VBRXpDO1VBQ0EsSUFBSSxJQUFJLENBQUMvSixvQkFBb0IsRUFBRWtLLGFBQWEsS0FBS0gsS0FBSyxFQUFFO1lBQ3ZEQSxLQUFLLEdBQUcsSUFBSSxDQUFDL0osb0JBQW9CLENBQUNtSyxZQUFZO1VBQy9DO1FBQ0QsQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDRSxtQ0FBbUMsQ0FBQ2pLLE9BQU8sQ0FBQyxFQUFFO1VBQzdEO1VBQ0EsTUFBTTZKLGFBQWEsR0FBR3pKLGlCQUFpQixDQUFDQyxlQUFlLENBQUNMLE9BQU8sRUFBRSxJQUFJLENBQUM7VUFFdEUsSUFBSSxDQUFDNkosYUFBYSxFQUFFO1lBQ25CO1lBQ0E7WUFDQTtZQUNBLElBQUksQ0FBQ2hLLHNCQUFzQixDQUFDbEYsU0FBUyxDQUFDO1VBQ3ZDLENBQUMsTUFBTSxJQUFJa1AsYUFBYSxLQUFLRixLQUFLLEVBQUU7WUFDbkM7WUFDQTtZQUNBLElBQUksQ0FBQzlKLHNCQUFzQixDQUFDO2NBQUVpSyxhQUFhLEVBQUVILEtBQUs7Y0FBRUksWUFBWSxFQUFFRjtZQUFjLENBQUMsQ0FBQztZQUNsRkYsS0FBSyxHQUFHRSxhQUFhO1VBQ3RCO1FBQ0Q7TUFDRDs7TUFFQTtNQUNBLElBQUlGLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLEVBQUU7UUFDckJBLEtBQUssR0FBR0EsS0FBSyxDQUFDL0ssU0FBUyxDQUFDLENBQUMsQ0FBQztNQUMzQjtNQUVBLE9BQU8rSyxLQUFLO0lBQ2IsQ0FBQztJQUFBaFMsTUFBQSxDQUVEdU4sZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQ3dDLElBQVksRUFBRWxILFVBQXVDLEVBQVU7TUFDL0U7TUFDQSxJQUFJQSxVQUFVLENBQUN1RyxPQUFPLEtBQUssY0FBYyxJQUFJdkcsVUFBVSxDQUFDbkUsUUFBUSxLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQ3hFLE9BQU9tRSxVQUFVLENBQUNuRSxRQUFRLEtBQUssQ0FBQyxHQUFHLHFCQUFxQixHQUFHLHFCQUFxQjtNQUNqRjtNQUNBLElBQUlBLFFBQVEsR0FBR21FLFVBQVUsQ0FBQ25FLFFBQVEsSUFBSSxDQUFDO01BQ3ZDLElBQUltRSxVQUFVLENBQUNvRixjQUFjLEVBQUU7UUFDOUJ2SixRQUFRLElBQUltRSxVQUFVLENBQUNvRixjQUFjO1FBQ3JDLElBQUl2SixRQUFRLEdBQUcsQ0FBQyxFQUFFO1VBQ2pCQSxRQUFRLEdBQUcsQ0FBQztRQUNiO01BQ0Q7O01BRUE7TUFDQTtNQUNBLElBQUltRSxVQUFVLENBQUNvRixjQUFjLEtBQUtqTCxTQUFTLElBQUk2RixVQUFVLENBQUNvRixjQUFjLEdBQUcsQ0FBQyxJQUFJLENBQUNwRixVQUFVLENBQUNtSyxNQUFNLEVBQUU7UUFDbkduSyxVQUFVLENBQUNtSyxNQUFNLEdBQUcsSUFBSSxDQUFDblMsWUFBWSxDQUFDb1MsaUJBQWlCLENBQUNsRCxJQUFJLENBQUM7TUFDOUQ7TUFFQSxPQUFPLElBQUksQ0FBQzFQLGFBQWEsQ0FBQzZTLHFCQUFxQixDQUFDLENBQUMsQ0FBQ0MsZUFBZSxDQUFDek8sUUFBUSxFQUFFcUwsSUFBSSxFQUFFbEgsVUFBVSxDQUFDbUssTUFBTSxFQUFFbkssVUFBVSxDQUFDdUssaUJBQWlCLENBQUM7SUFDbkk7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQSxPQUpDO0lBQUFwVCxNQUFBLENBS0FxVCxtQkFBbUIsR0FBbkIsU0FBQUEsbUJBQW1CQSxDQUFDO0lBQUEsRUFBeUI7TUFDNUMsTUFBTUMsbUJBQW1CLEdBQUcsSUFBSUMsV0FBVyxDQUFDLENBQUMsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztNQUNwRSxJQUFJLENBQUNGLG1CQUFtQixFQUFFO1FBQ3pCLE1BQU1HLFNBQVMsR0FBRyxJQUFJLENBQUNwVCxhQUFhLENBQUNxVCxjQUFjLENBQUMsQ0FBQztRQUNyREMsVUFBVSxDQUFDQyxJQUFJLENBQUNILFNBQVMsQ0FBQztNQUMzQjtJQUNEOztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQXpULE1BQUEsQ0FJQTZULG1DQUFtQyxHQUFuQyxTQUFBQSxtQ0FBbUNBLENBQUEsRUFBWTtNQUM5QztNQUNBLE9BQU9DLE9BQU8sQ0FBQ0MsS0FBSyxFQUFFQyxPQUFPLEtBQUtoUixTQUFTO0lBQzVDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBaEQsTUFBQSxDQUtBaVUsZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUNDLE1BQWdDLEVBQVE7TUFDdkQsTUFBTUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDOVQsYUFBYSxDQUFDK1Qsa0JBQWtCLENBQUMsQ0FBQztRQUMvRFgsU0FBUyxHQUFHLElBQUksQ0FBQ3BULGFBQWEsQ0FBQ3FULGNBQWMsQ0FBQyxDQUFDO01BQ2hELE1BQU1KLG1CQUFtQixHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDcEUsSUFBSUcsVUFBVSxDQUFDVSxRQUFRLENBQUNaLFNBQVMsQ0FBQyxJQUFJLENBQUNILG1CQUFtQixFQUFFO1FBQzNESyxVQUFVLENBQUNXLE1BQU0sQ0FBQ2IsU0FBUyxDQUFDO01BQzdCO01BQ0EsTUFBTWxLLFdBQW1DLEdBQUcySyxNQUFNLENBQUNLLGFBQWEsQ0FBQyxDQUEyQjtNQUM1RixJQUFJLElBQUksQ0FBQzNVLG1CQUFtQixDQUFDckIsTUFBTSxFQUFFO1FBQ3BDZ0wsV0FBVyxDQUFDdUQsY0FBYyxHQUFHLElBQUksQ0FBQ2xOLG1CQUFtQixDQUFDLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUNBLG1CQUFtQixHQUFHLElBQUksQ0FBQ0EsbUJBQW1CLENBQUN1RixLQUFLLENBQUMsQ0FBQyxDQUFDO01BQzdELENBQUMsTUFBTTtRQUNOb0UsV0FBVyxDQUFDdUQsY0FBYyxHQUFHLENBQUMsQ0FBQztNQUNoQztNQUNBLElBQUlxSCxnQkFBZ0IsQ0FBQ0sseUJBQXlCLENBQUMsQ0FBQyxFQUFFO1FBQ2pEakwsV0FBVyxDQUFDdUQsY0FBYyxDQUFDaUIsTUFBTSxHQUFHMEcsZ0JBQWdCLENBQUNDLGVBQWU7UUFDcEVQLGdCQUFnQixDQUFDUSx1QkFBdUIsQ0FBQyxDQUFDO01BQzNDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQzlULFlBQVksQ0FBQytULCtCQUErQixDQUFDLENBQUMsRUFBRTtRQUMvRHJMLFdBQVcsQ0FBQ3VELGNBQWMsQ0FBQ2lCLE1BQU0sR0FBRzBHLGdCQUFnQixDQUFDSSxjQUFjO1FBQ25FLElBQUksQ0FBQ2hVLFlBQVksQ0FBQ2lVLHVCQUF1QixDQUFDLENBQUM7TUFDNUM7TUFFQSxJQUFJLENBQUNuRyxpQkFBaUIsR0FBR3VGLE1BQU0sQ0FBQ2EsWUFBWSxDQUFDLE1BQU0sQ0FBQztNQUNwRCxJQUFJLENBQUNsRyxvQkFBb0IsR0FBR3RGLFdBQVcsQ0FBQ2pILE1BQU0sQ0FBQ3VCLE9BQU87TUFDdEQsSUFBSSxDQUFDa0wsYUFBYSxHQUFHbUYsTUFBTSxDQUFDYSxZQUFZLENBQUMsT0FBTyxDQUFDO01BRWpEeEwsV0FBVyxDQUFDbUYsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDOUgsb0JBQW9CLENBQUMsSUFBSSxDQUFDK0gsaUJBQWlCLENBQUM7TUFDaEZwRixXQUFXLENBQUNxRixZQUFZLEdBQUcsSUFBSSxDQUFDQyxvQkFBb0I7TUFFcEQsSUFBSSxDQUFDeEMscUJBQXFCLENBQUM5QyxXQUFXLENBQUM7O01BRXZDO01BQ0E7TUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDc0ssbUNBQW1DLENBQUMsQ0FBQyxFQUFFO1FBQ2hELElBQUksQ0FBQ2hULFlBQVksQ0FDZm1VLGNBQWMsQ0FBQyxDQUFDLENBQ2hCcE0sSUFBSSxDQUFDLE1BQVk7VUFDakIsSUFBSSxDQUFDL0gsWUFBWSxDQUFDb1UsaUJBQWlCLENBQUMsQ0FBQztVQUNyQztRQUNELENBQUMsQ0FBQyxDQUNEQyxLQUFLLENBQUMsVUFBVS9JLE1BQWUsRUFBRTtVQUNqQ3BJLEdBQUcsQ0FBQ3FJLEtBQUssQ0FBQywrQkFBK0IsRUFBRUQsTUFBZ0IsQ0FBQztRQUM3RCxDQUFDLENBQUM7TUFDSixDQUFDLE1BQU07UUFDTixJQUFJLENBQUN0TCxZQUFZLENBQUNvVSxpQkFBaUIsQ0FBQyxDQUFDO01BQ3RDO0lBQ0QsQ0FBQztJQUFBalYsTUFBQSxDQUVEbVYsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQ0MsS0FBYSxFQUFFQyxVQUFvQixFQUFFQyxTQUFrQixFQUFRO01BQ2pGLElBQUksQ0FBQ3ZVLGFBQWEsQ0FBQ3dVLFdBQVcsQ0FBQyxjQUFjLEVBQUVILEtBQUssRUFBRUMsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDN0UsQ0FBQztJQUFBdFYsTUFBQSxDQUVEMkIsa0JBQWtCLEdBQWxCLFNBQUFBLGtCQUFrQkEsQ0FBQzBULFVBQW9CLEVBQUVDLFNBQWtCLEVBQVE7TUFDbEUsSUFBSSxDQUFDdlUsYUFBYSxDQUFDeVUsV0FBVyxDQUFDLGNBQWMsRUFBRUgsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDdEUsQ0FBQztJQUFBdFYsTUFBQSxDQUVEeVYsdUJBQXVCLEdBQXZCLFNBQUFBLHVCQUF1QkEsQ0FBQ0wsS0FBYSxFQUFFQyxVQUFvQixFQUFFQyxTQUFrQixFQUFRO01BQ3RGLElBQUksQ0FBQ3ZVLGFBQWEsQ0FBQ3dVLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRUgsS0FBSyxFQUFFQyxVQUFVLEVBQUVDLFNBQVMsQ0FBQztJQUNsRixDQUFDO0lBQUF0VixNQUFBLENBRUQwVix1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFDTCxVQUFvQixFQUFFQyxTQUFpQixFQUFRO01BQ3RFLElBQUksQ0FBQ3ZVLGFBQWEsQ0FBQ3lVLFdBQVcsQ0FBQyxtQkFBbUIsRUFBRUgsVUFBVSxFQUFFQyxTQUFTLENBQUM7SUFDM0UsQ0FBQztJQUFBdFYsTUFBQSxDQUVLMlYsaUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FBQSxFQUFrQjtNQUN4QyxJQUFJLENBQUM5VixPQUFPLEdBQUcsSUFBSTtNQUVuQixJQUFJLElBQUksQ0FBQ1EsYUFBYSxDQUFDdVYsMEJBQTBCLENBQUMsQ0FBQyxDQUFDQyxlQUFlLENBQUMsQ0FBQyxDQUFDQyxhQUFhLEVBQUU7UUFDcEYsTUFBTTtVQUFFQyxPQUFPLEVBQUVDO1FBQW9CLENBQUMsR0FBRyxNQUFNQyxtQkFBQSxDQUFPLHdEQUF3RCxDQUFDO1FBQy9HLE1BQU1ELG1CQUFtQixDQUFDRSxvQkFBb0IsQ0FBQyxDQUFDO01BQ2pEO01BQ0E7O01BRUEsSUFBSSxDQUFDdFUsaUJBQWlCLEdBQUcsSUFBSSxDQUFDcVMsZUFBZSxDQUFDa0MsSUFBSSxDQUFDLElBQUksQ0FBQztNQUN4RCxJQUFJLENBQUN4VixPQUFPLENBQUN3VSxrQkFBa0IsQ0FBQyxJQUFJLENBQUN2VCxpQkFBaUIsRUFBRSxJQUFJLENBQUM7TUFDN0QsTUFBTTBSLG1CQUFtQixHQUFHLElBQUlDLFdBQVcsQ0FBQyxDQUFDLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDcEUsSUFBSSxDQUFDRixtQkFBbUIsRUFBRTtRQUN6QixJQUFJLENBQUMzUyxPQUFPLENBQUN5Vix3QkFBd0IsQ0FBQyxJQUFJLENBQUMvQyxtQkFBbUIsQ0FBQzhDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUMzRTtNQUNBO01BQ0EsSUFBSSxDQUFDdlcsbUJBQW1CLEdBQUcsRUFBRTtNQUM3QjBNLFNBQVMsQ0FBQytKLGNBQWMsQ0FBQyxDQUFDO01BQzFCLElBQUksQ0FBQ2xKLHlCQUF5QixHQUFHLENBQUMsSUFBSSxDQUFDeE0sT0FBTyxDQUFDZ0csS0FBSyxDQUFDLEVBQUUsQ0FBQztNQUV4RCxNQUFNLElBQUksQ0FBQzJQLGlCQUFpQixDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUFBdFcsTUFBQSxDQUVEdVcsU0FBUyxHQUFULFNBQUFBLFNBQVNBLENBQUEsRUFBUztNQUNqQixJQUFJLENBQUNELGlCQUFpQixDQUFDLENBQUM7SUFDekIsQ0FBQztJQUFBdFcsTUFBQSxDQUVLc1csaUJBQWlCLEdBQXZCLGVBQU1BLGlCQUFpQkEsQ0FBQSxFQUFrQjtNQUN4QyxNQUFNRSxZQUFZLEdBQUcsSUFBSSxDQUFDN1YsT0FBTyxDQUFDOFYsY0FBYyxDQUFDLENBQUMsQ0FBQ25JLE9BQU8sQ0FBQyxDQUFDLENBQUNhLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQztNQUN2RixJQUFJO1FBQ0gsTUFBTXVILGtCQUFrQixHQUFHLE1BQU0sSUFBSSxDQUFDclcsYUFBYSxDQUFDc1csb0JBQW9CLENBQUMsQ0FBQztRQUMxRSxNQUFNQyxxQkFBcUIsR0FBR0Ysa0JBQWtCLEtBQUsxVCxTQUFTLElBQUlMLE1BQU0sQ0FBQ0MsSUFBSSxDQUFDOFQsa0JBQWtCLENBQUMsQ0FBQ25ZLE1BQU0sS0FBSyxDQUFDO1FBQzlHLE1BQU1zWSxLQUFLLEdBQUcsSUFBSSxDQUFDbFcsT0FBTyxDQUFDOFYsY0FBYyxDQUFDLENBQUMsQ0FBQ25JLE9BQU8sQ0FBQyxDQUFDO1FBQ3JEO1FBQ0EsSUFBSSxDQUFDa0ksWUFBWSxJQUFJSSxxQkFBcUIsSUFBSSxDQUFDQyxLQUFLLEVBQUU7VUFDckQsSUFBSUgsa0JBQWtCLENBQUNJLGFBQWEsSUFBSUosa0JBQWtCLENBQUNJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQ0MsV0FBVyxDQUFDLENBQUMsQ0FBQzVILFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM3RztZQUNBO1lBQ0E7WUFDQSxNQUFNLElBQUksQ0FBQzZILG9CQUFvQixDQUFDTixrQkFBa0IsQ0FBQztVQUNwRCxDQUFDLE1BQU07WUFDTjtZQUNBLE1BQU0sSUFBSSxDQUFDTyxzQkFBc0IsQ0FBQ1Asa0JBQWtCLENBQUM7VUFDdEQ7UUFDRDtRQUNBLE1BQU0sSUFBSSxDQUFDUSx5QkFBeUIsQ0FBQ1Isa0JBQWtCLENBQUM7TUFDekQsQ0FBQyxDQUFDLE9BQU92SyxNQUFlLEVBQUU7UUFDekJwSSxHQUFHLENBQUNxSSxLQUFLLENBQUMscUNBQXFDLEVBQUVELE1BQWdCLENBQUM7TUFDbkU7SUFDRCxDQUFDO0lBQUFuTSxNQUFBLENBRURtWCxvQkFBb0IsR0FBcEIsU0FBQUEsb0JBQW9CQSxDQUFDVCxrQkFBc0MsRUFBVTtNQUNwRSxPQUFPVSxnQkFBZ0IsQ0FBQ0Qsb0JBQW9CLENBQUNULGtCQUFrQixFQUFFLElBQUksQ0FBQ1csY0FBYyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMxVyxPQUFPLENBQUM7SUFDdEcsQ0FBQztJQUFBWCxNQUFBLENBRUtnWCxvQkFBb0IsR0FBMUIsZUFBTUEsb0JBQW9CQSxDQUFDTixrQkFBcUMsRUFBaUI7TUFDaEYsT0FBT1UsZ0JBQWdCLENBQUNFLG9CQUFvQixDQUFDWixrQkFBa0IsRUFBRSxJQUFJLENBQUNXLGNBQWMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDMVcsT0FBTyxFQUFFLElBQUksQ0FBQ0YsVUFBVSxDQUFDLENBQUNtSSxJQUFJLENBQ3pIMk8sUUFBZ0IsSUFBVztRQUMzQixJQUFJQSxRQUFRLEVBQUU7VUFDWixJQUFJLENBQUM1VyxPQUFPLENBQUM4VixjQUFjLENBQUMsQ0FBQyxDQUFDZSxXQUFXLENBQWNELFFBQVEsQ0FBQztVQUNqRSxJQUFJYixrQkFBa0IsRUFBRUksYUFBYSxJQUFJSixrQkFBa0IsQ0FBQ0ksYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDQyxXQUFXLENBQUMsQ0FBQyxDQUFDNUgsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQ2xILElBQUksQ0FBQzlPLGFBQWEsQ0FBQ29YLHdCQUF3QixDQUFDLENBQUM7VUFDOUMsQ0FBQyxNQUFNO1lBQ04sSUFBSSxDQUFDcFgsYUFBYSxDQUFDcVgsb0JBQW9CLENBQUMsQ0FBQztVQUMxQztVQUNBLElBQUksQ0FBQ3ZLLHlCQUF5QixHQUFHLElBQUk7UUFDdEM7UUFDQTtNQUNELENBQ0QsQ0FBQztJQUNGLENBQUM7SUFBQW5OLE1BQUEsQ0FFS2lYLHNCQUFzQixHQUE1QixlQUFNQSxzQkFBc0JBLENBQUNQLGtCQUE0QyxFQUFpQjtNQUN6RixPQUFPVSxnQkFBZ0IsQ0FBQ08sc0JBQXNCLENBQzdDLElBQUksQ0FBQ3RYLGFBQWEsQ0FBQ1ksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUNDLE9BQU8sRUFDdER3VixrQkFBa0IsRUFDbEIsSUFBSSxDQUFDblcsTUFDTixDQUFDLENBQUNxSSxJQUFJLENBQUVnUCxTQUFTLElBQUs7UUFDckIsSUFBSWYsS0FBSztRQUNULElBQUllLFNBQVMsQ0FBQ3ZQLE9BQU8sRUFBRTtVQUN0QixNQUFNd1AsY0FBYyxHQUFHRCxTQUFTLENBQUN2UCxPQUFPLENBQUN3QixPQUFPLENBQUMsQ0FBQztVQUNsRCxNQUFNcUksYUFBYSxHQUFHLElBQUksQ0FBQ0ksbUNBQW1DLENBQUNzRixTQUFTLENBQUN2UCxPQUFPLENBQUMsR0FDOUVJLGlCQUFpQixDQUFDQyxlQUFlLENBQUNrUCxTQUFTLENBQUN2UCxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQzNEd1AsY0FBYztVQUVqQixJQUFJM0YsYUFBYSxLQUFLMkYsY0FBYyxFQUFFO1lBQ3JDO1lBQ0E7WUFDQSxJQUFJLENBQUMzUCxzQkFBc0IsQ0FBQztjQUFFaUssYUFBYSxFQUFFMEYsY0FBYztjQUFFekYsWUFBWSxFQUFFRjtZQUFjLENBQUMsQ0FBQztVQUM1RjtVQUVBMkUsS0FBSyxHQUFHM0UsYUFBYSxDQUFDakwsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckMsQ0FBQyxNQUFNLElBQUkyUSxTQUFTLENBQUM3SCxJQUFJLEVBQUU7VUFDMUI4RyxLQUFLLEdBQUdlLFNBQVMsQ0FBQzdILElBQUk7UUFDdkI7UUFFQSxJQUFJOEcsS0FBSyxFQUFFO1VBQ1Y7VUFDQyxJQUFJLENBQUNsVyxPQUFPLENBQUM4VixjQUFjLENBQUMsQ0FBQyxDQUFDZSxXQUFXLENBQWNYLEtBQUssQ0FBQztVQUM5RCxJQUFJLENBQUN4VyxhQUFhLENBQUN5WCxzQkFBc0IsQ0FBQyxDQUFDO1FBQzVDO1FBQ0E7TUFDRCxDQUFDLENBQUM7SUFDSDs7SUFFQTtBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FSQztJQUFBOVgsTUFBQSxDQVNNa1gseUJBQXlCLEdBQS9CLGVBQU1BLHlCQUF5QkEsQ0FBQ2EsaUJBQStDLEVBQWlCO01BQy9GLE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUNyWCxPQUFPLENBQUM4VixjQUFjLENBQUMsQ0FBQyxDQUFDbkksT0FBTyxDQUFDLENBQUM7TUFDN0QsTUFBTTJKLFVBQVUsR0FBRyxDQUFDLENBQUNGLGlCQUFpQixDQUFDakIsYUFBYSxHQUFHLENBQUMsQ0FBQyxFQUFFQyxXQUFXLENBQUMsQ0FBQyxFQUFFNUgsUUFBUSxDQUFDLE1BQU0sQ0FBQztNQUMxRixNQUFNekIsUUFBUSxHQUFHLE1BQU0wSixnQkFBZ0IsQ0FBQ2MscUJBQXFCLENBQUMsSUFBSSxDQUFDYixjQUFjLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQzVXLFVBQVUsQ0FBQztNQUNyRyxJQUFJdVgsYUFBYSxJQUFJQyxVQUFVLElBQUl2SyxRQUFRLEVBQUU7UUFDNUMsTUFBTXlLLFNBQVMsR0FBRyxDQUFDSCxhQUFhLENBQUM3SSxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsSUFBSSxlQUFlO1FBQzVFLElBQUksQ0FBQ3hPLE9BQU8sQ0FBQzhWLGNBQWMsQ0FBQyxDQUFDLENBQUNlLFdBQVcsQ0FBNEJRLGFBQWEsR0FBR0csU0FBUyxDQUFDO01BQ2pHO0lBQ0QsQ0FBQztJQUFBblksTUFBQSxDQUVEb1ksWUFBWSxHQUFaLFNBQUFBLFlBQVlBLENBQUEsRUFBMEM7TUFDckQsT0FBTyxJQUFJLENBQUMvVyxTQUFTO0lBQ3RCOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBckIsTUFBQSxDQUtBcVksZUFBZSxHQUFmLFNBQUFBLGVBQWVBLENBQUEsRUFBMkM7TUFDekQsT0FBTyxJQUFJLENBQUNsVixZQUFZLElBQUksQ0FBQyxDQUFDO0lBQy9COztJQUVBO0FBQ0Q7QUFDQTtBQUNBLE9BSEM7SUFBQW5ELE1BQUEsQ0FJQXFYLGNBQWMsR0FBZCxTQUFBQSxjQUFjQSxDQUFBLEVBQVc7TUFDeEIsT0FBTyxJQUFJLENBQUNqUyxZQUFZO0lBQ3pCLENBQUM7SUFBQXBGLE1BQUEsQ0FFRHNZLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFBLEVBQVM7TUFDcEIsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUFBLE9BQUEvWSxjQUFBO0VBQUEsRUFqbENrQ2daLE9BQU87RUFBQXhZLFFBQUEsQ0FBQVIsY0FBQSxHQUFBQSxjQUFBO0VBQUEsSUFvbENyQ2laLHFCQUFxQiwwQkFBQUMsZUFBQTtJQUFBLFNBQUFELHNCQUFBO01BQUEsT0FBQUMsZUFBQSxDQUFBM00sS0FBQSxPQUFBeE4sU0FBQTtJQUFBO0lBQUFTLGNBQUEsQ0FBQXlaLHFCQUFBLEVBQUFDLGVBQUE7SUFBQSxJQUFBQyxPQUFBLEdBQUFGLHFCQUFBLENBQUF0WixTQUFBO0lBQUF3WixPQUFBLENBQ3BCQyxjQUFjLEdBQXBCLGVBQU1BLGNBQWNBLENBQUNDLGVBQXVELEVBQTJCO01BQ3RHLE1BQU1DLGVBQWUsR0FBRyxJQUFJdFosY0FBYyxDQUFDcVosZUFBZSxDQUFDO01BQzNELE9BQU9DLGVBQWUsQ0FBQ3RYLFdBQVc7SUFDbkMsQ0FBQztJQUFBLE9BQUFpWCxxQkFBQTtFQUFBLEVBSmtDTSxjQUFjO0VBQUEsT0FPbkNOLHFCQUFxQjtBQUFBIiwiaWdub3JlTGlzdCI6W119