@sapui5/sap.fe.controls 1.147.0 → 1.148.1

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.
@@ -23,6 +23,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
23
23
  var defineUI5Class = ClassSupport.defineUI5Class;
24
24
  var defineState = ClassSupport.defineState;
25
25
  var aggregation = ClassSupport.aggregation;
26
+ var not = BindingToolkit.not;
26
27
  var lessThan = BindingToolkit.lessThan;
27
28
  var length = BindingToolkit.length;
28
29
  var equal = BindingToolkit.equal;
@@ -93,7 +94,12 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
93
94
  _proto.createInput = function createInput() {
94
95
  this.$searchInput = _jsx(Input, {
95
96
  width: "100%",
96
- showClearIcon: true,
97
+ showClearIcon: not(bindState(this.state, "isQuerySuccessful")),
98
+ showValueHelp: bindState(this.state, "isQuerySuccessful"),
99
+ valueHelpIconSrc: bindState(this.state, "favoriteIconName"),
100
+ valueHelpRequest: () => {
101
+ this.onFavoriteIconPress();
102
+ },
97
103
  change: e => {
98
104
  this.fireEvent("queryChanged", {
99
105
  query: e.getParameter("value")
@@ -101,13 +107,16 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
101
107
  },
102
108
  liveChange: e => {
103
109
  this.state.queryChanged = true;
110
+ // When user starts typing, hide favorite icon and show X
111
+ this.state.isQuerySuccessful = false;
112
+ if (e.getParameter("value") === "") {
113
+ this.state.currentExecutedQuery = "";
114
+ this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
115
+ }
104
116
  this.fireEvent("liveChange");
105
117
  if (!e.getSource().getValue() && !(this.$favoritePopover?.isOpen() ?? false)) {
106
118
  this.openSuggestionPopover();
107
119
  }
108
- if (e.getParameter("value") === "") {
109
- this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
110
- }
111
120
  if (this.$searchInput.getValueState() === ValueState.Warning) {
112
121
  this.setAsValid();
113
122
  }
@@ -174,6 +183,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
174
183
  _proto.openSuggestionPopover = async function openSuggestionPopover() {
175
184
  if (!this.$searchInput?.getValue() && (!this.$favoritePopover || !this.$favoritePopover?.isOpen())) {
176
185
  // Open the easy filter popover
186
+ if (!this.shellHistoryProvider) {
187
+ await this.initShellHistoryProvider();
188
+ }
177
189
  this.state.isHistoryEnabled = this.shellHistoryProvider?.isHistoryEnabled() ?? false;
178
190
  this.state.favoriteQueries = (await this.shellHistoryProvider?.getFavoriteQueries()) ?? [];
179
191
  this.state.recentQueries = (await this.shellHistoryProvider?.getRecentQueries()) ?? [];
@@ -226,6 +238,20 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
226
238
  };
227
239
  });
228
240
  }
241
+ // Update favorite icon when query or favorites change
242
+ if (changedProps.includes("currentExecutedQuery") || changedProps.includes("favoriteQueries")) {
243
+ this.updateFavoriteIcon();
244
+ }
245
+ };
246
+ _proto.updateFavoriteIcon = function updateFavoriteIcon() {
247
+ const isFavorited = this.isCurrentQueryFavorited();
248
+ this.state.favoriteIconName = isFavorited ? "sap-icon://favorite" : "sap-icon://add-favorite";
249
+ this.state.favoriteIconEnabled = isFavorited || this.state.favoriteQueries.length < 5;
250
+ this.$searchInput?.toggleStyleClass("sapFEFavoriteIconDisabled", !this.state.favoriteIconEnabled);
251
+ const valueHelpBtn = this.$searchInput?.getDomRef()?.querySelector('[aria-label="Show Value Help"]');
252
+ if (valueHelpBtn) {
253
+ valueHelpBtn.title = this.state.favoriteIconEnabled ? this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START") : this.resourceBundle.getText("M_EASY_FILTER_MAX_FAVORITE_REACHED");
254
+ }
229
255
  };
230
256
  _proto.initShellHistoryProvider = async function initShellHistoryProvider() {
231
257
  try {
@@ -442,6 +468,35 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
442
468
  }
443
469
  this.state.favoriteQueries = newFavorite;
444
470
  };
471
+ _proto.isCurrentQueryFavorited = function isCurrentQueryFavorited() {
472
+ const currentQuery = this.state.currentExecutedQuery.toLowerCase().trim();
473
+ return this.state.favoriteQueries.some(fav => fav.toLowerCase().trim() === currentQuery);
474
+ };
475
+ _proto.setQuerySuccess = function setQuerySuccess(query) {
476
+ this.state.currentExecutedQuery = query;
477
+ this.state.isQuerySuccessful = true;
478
+ this.updateFavoriteIcon();
479
+ };
480
+ _proto.setQueryFailure = function setQueryFailure() {
481
+ this.state.isQuerySuccessful = false;
482
+ this.state.currentExecutedQuery = "";
483
+ };
484
+ _proto.clearQueryStatus = function clearQueryStatus() {
485
+ this.state.isQuerySuccessful = false;
486
+ this.state.currentExecutedQuery = "";
487
+ };
488
+ _proto.onFavoriteIconPress = function onFavoriteIconPress() {
489
+ if (!this.state.favoriteIconEnabled) {
490
+ return;
491
+ }
492
+ // Toggle favorite status for the current query
493
+ const isFavorited = this.isCurrentQueryFavorited();
494
+ if (isFavorited) {
495
+ this.removeFromFavorites(this.state.currentExecutedQuery);
496
+ } else {
497
+ this.addToFavorites(this.state.currentExecutedQuery);
498
+ }
499
+ };
445
500
  EasyFilterInput.render = function render(rm, control) {
446
501
  return jsx.renderUsingRenderManager(rm, control, () => {
447
502
  return _jsx("span", {
@@ -493,11 +548,15 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassS
493
548
  recentQueries: [],
494
549
  recentQueriesWitFavorites: [],
495
550
  favoriteQueries: [],
496
- recommendedQueries: []
551
+ recommendedQueries: [],
552
+ currentExecutedQuery: "",
553
+ isQuerySuccessful: false,
554
+ favoriteIconName: "sap-icon://add-favorite",
555
+ favoriteIconEnabled: true
497
556
  };
498
557
  }
499
558
  }), _class2)) || _class);
500
559
  _exports = EasyFilterInput;
501
560
  return _exports;
502
561
  }, false);
503
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJmYXZvcml0ZUJ1dHRvbkNsaWNrZWQiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicG9wb3ZlckludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsInNldEFzSW52YWxpZCIsIm1lc3NhZ2UiLCJzZXRWYWx1ZVN0YXRlIiwiVmFsdWVTdGF0ZSIsIldhcm5pbmciLCJzZXRWYWx1ZVN0YXRlVGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsInNldEFzVmFsaWQiLCJOb25lIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIl9qc3giLCJJbnB1dCIsIndpZHRoIiwic2hvd0NsZWFySWNvbiIsImNoYW5nZSIsImUiLCJmaXJlRXZlbnQiLCJxdWVyeSIsImdldFBhcmFtZXRlciIsImxpdmVDaGFuZ2UiLCJxdWVyeUNoYW5nZWQiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VGV4dCIsImdldFZhbHVlU3RhdGUiLCJwbGFjZWhvbGRlciIsImZhdm9yaXRlUG9wb3ZlciIsImNyZWF0ZUZhdm9yaXRlUG9wb3ZlciIsImFkZERlcGVuZGVudCIsImFkZEV2ZW50RGVsZWdhdGUiLCJvbmtleXVwIiwia2V5Iiwib25FbnRlclByZXNzZWQiLCJjbG9zZSIsIm9ua2V5ZG93biIsImxlbmd0aCIsInByZXZlbnREZWZhdWx0IiwicG9wb3ZlckNvbmFpbmVyIiwiZ2V0Q29udGVudCIsImNvbnRhaW5lckl0ZW1zIiwiZ2V0SXRlbXMiLCJmaW5kIiwiaXRlbSIsImlzRm9jdXNhYmxlIiwiZm9jdXMiLCJvbnRhcCIsIm9uZm9jdXNpbiIsInRhcmdldFRleHQiLCJ0YXJnZXQiLCJvdXRlclRleHQiLCJ0YXJnZXRJZCIsImlkIiwiaW5jbHVkZXMiLCJmYXZvcml0ZVF1ZXJpZXMiLCJmaWx0ZXIiLCJkYXRhIiwidG9Mb3dlckNhc2UiLCJyZWNlbnRRdWVyaWVzIiwib25BZnRlclJlbmRlcmluZyIsImFubm91bmNlIiwiSW52aXNpYmxlTWVzc2FnZU1vZGUiLCJBc3NlcnRpdmUiLCJzaGVsbEhpc3RvcnlQcm92aWRlciIsImdldEZhdm9yaXRlUXVlcmllcyIsImdldFJlY2VudFF1ZXJpZXMiLCJvcGVuQnkiLCJyZXF1ZXN0RmF2b3JpdGUiLCJtYWdpY1F1ZXJ5IiwiYWRkUmVjZW50UXVlcnkiLCJxdWVyeVN0cmluZyIsInJlcGxhY2UiLCJyZWNlbnRRdWVyeUluZGV4IiwiZmluZEluZGV4IiwiY29uY2F0Iiwic2xpY2UiLCJ1bnNoaWZ0Iiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsInNldEZhdm9yaXRlUXVlcmllcyIsInNldFJlY2VudFF1ZXJpZXMiLCJtYXAiLCJyZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzIiwicmVjZW50UXVlcnkiLCJ0ZXh0IiwiaXNGYXZvcml0ZSIsImZhdm9yaXRlUXVlcnkiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImJpbmRTdGF0ZSIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwidGl0bGUiLCJpbGx1c3RyYXRpb25TaXplIiwiSWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZSIsIkV4dHJhU21hbGwiLCJpbGx1c3RyYXRpb25UeXBlIiwiSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSIsIk5vRW50cmllcyIsImRlc2NyaXB0aW9uIiwiQ3VzdG9tTGlzdEl0ZW0iLCJhcmlhTGFiZWxsZWRCeSIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiX2pzeHMiLCJSb3ciLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIlRleHQiLCJ0b29sdGlwIiwid3JhcHBpbmciLCJpY29uIiwiQnV0dG9uVHlwZSIsIlRyYW5zcGFyZW50IiwiaW5kZXgiLCJpbmRleE9mIiwiZGVwZW5kZW50cyIsIkV2ZW50RGVsZWdhdGVIb29rIiwidGFwIiwidHJpZ2dlclBYSW50ZWdyYXRpb24iLCJtb2RlIiwiTGlzdE1vZGUiLCJEZWxldGUiLCJkZWxldGUiLCJlbmFibGVkIiwibGVzc1RoYW4iLCJyZW1vdmVGcm9tRmF2b3JpdGVzIiwiYWRkVG9GYXZvcml0ZXMiLCJuZXdGYXZvcml0ZSIsInBvcCIsInJlbmRlciIsInJtIiwiY29udHJvbCIsImpzeCIsInJlbmRlclVzaW5nUmVuZGVyTWFuYWdlciIsInJlZiIsIkNvbnRyb2wiLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkVhc3lGaWx0ZXJJbnB1dC50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSBSZXNvdXJjZUJ1bmRsZSBmcm9tIFwic2FwL2Jhc2UvaTE4bi9SZXNvdXJjZUJ1bmRsZVwiO1xuaW1wb3J0IHR5cGUgeyBQYXRoSW5Nb2RlbEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGJpbmRTdGF0ZSwgZXF1YWwsIGxlbmd0aCwgbGVzc1RoYW4gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHR9PiA9IHtcblx0XHRxdWVyeUNoYW5nZWQ6IGZhbHNlLFxuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGZhbHNlLFxuXHRcdHJlY2VudFF1ZXJpZXM6IFtdLFxuXHRcdHJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXM6IFtdLFxuXHRcdGZhdm9yaXRlUXVlcmllczogW10gYXMgc3RyaW5nW10sXG5cdFx0cmVjb21tZW5kZWRRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e3RydWV9XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdHRoaXMuZmlyZUV2ZW50KFwibGl2ZUNoYW5nZVwiKTtcblx0XHRcdFx0XHRpZiAoIWUuZ2V0U291cmNlKCkuZ2V0VmFsdWUoKSAmJiAhKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdFx0XHR0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXRQbGFjZWhvbGRlcih0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0PjwvSW5wdXQ+XG5cdFx0KTtcblxuXHRcdGNvbnN0IGZhdm9yaXRlUG9wb3ZlciA9IHRoaXMuY3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyID0gZmF2b3JpdGVQb3BvdmVyO1xuXG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRGVwZW5kZW50KGZhdm9yaXRlUG9wb3Zlcik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuYWRkRXZlbnREZWxlZ2F0ZSh7XG5cdFx0XHRvbmtleXVwOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoZS5rZXkgPT09IFwiRW50ZXJcIikge1xuXHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlKCkpIHtcblx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdGUua2V5ID09PSBcIlRhYlwiICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkubGVuZ3RoID09PSAwICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCkgIT09IHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpICYmXG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIilcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZSh0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSk7XG5cdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJsaXZlQ2hhbmdlXCIpO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGUua2V5ID09PSBcIkFycm93RG93blwiKSB7XG5cdFx0XHRcdFx0Y29uc3QgcG9wb3ZlckNvbmFpbmVyID0gdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5nZXRDb250ZW50KClbMF07XG5cdFx0XHRcdFx0Y29uc3QgY29udGFpbmVySXRlbXMgPSAocG9wb3ZlckNvbmFpbmVyIGFzIEZsZXhCb3gpLmdldEl0ZW1zKCk7XG5cdFx0XHRcdFx0Y29udGFpbmVySXRlbXM/LmZpbmQoKGl0ZW0pID0+IGl0ZW0uaXNGb2N1c2FibGUoKSAmJiAoaXRlbS5mb2N1cygpLCB0cnVlKSk7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRvbnRhcDogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fSxcblx0XHRcdG9uZm9jdXNpbjogYXN5bmMgKCkgPT4ge1xuXHRcdFx0XHRhd2FpdCB0aGlzLm9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5ZG93bjogKGU6IEtleWJvYXJkRXZlbnQpID0+IHtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0VGV4dCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/Lm91dGVyVGV4dDtcblx0XHRcdFx0Y29uc3QgdGFyZ2V0SWQgPSAoZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQpPy5pZDtcblx0XHRcdFx0c3dpdGNoIChlLmtleSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFbnRlclwiOlxuXHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkRlbGV0ZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRhcmdldElkPy5pbmNsdWRlcyhcImVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIikpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gdGFyZ2V0VGV4dC50b0xvd2VyQ2FzZSgpXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHRhcmdldFRleHQpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVzY2FwZVwiOlxuXHRcdFx0XHRcdFx0aWYgKHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uaXNPcGVuKCkpIHtcblx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmNsb3NlKCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9uQWZ0ZXJSZW5kZXJpbmc6ICgpID0+IHtcblx0XHRcdFx0dGhpcy5wb3BvdmVySW52aXNpYmxlTWVzc2FnZT8uYW5ub3VuY2UoXG5cdFx0XHRcdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiVF9FQVNZX0ZJTFRFUl9JTlBVVF9URVhUX0xJTktfUE9QT1ZFUl9BUklBXCIpLFxuXHRcdFx0XHRcdEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBhc3luYyBvcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAmJiAoIXRoaXMuJGZhdm9yaXRlUG9wb3ZlciB8fCAhdGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkpIHtcblx0XHRcdC8vIE9wZW4gdGhlIGVhc3kgZmlsdGVyIHBvcG92ZXJcblx0XHRcdHRoaXMuc3RhdGUuaXNIaXN0b3J5RW5hYmxlZCA9IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmlzSGlzdG9yeUVuYWJsZWQoKSA/PyBmYWxzZTtcblx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gKGF3YWl0IHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LmdldEZhdm9yaXRlUXVlcmllcygpKSA/PyBbXTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IChhd2FpdCB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5nZXRSZWNlbnRRdWVyaWVzKCkpID8/IFtdO1xuXHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5vcGVuQnkodGhpcy4kc2VhcmNoSW5wdXQpO1xuXHRcdH1cblx0fVxuXG5cdHJlcXVlc3RGYXZvcml0ZShlOiBCdXR0b24kUHJlc3NFdmVudCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoZS5nZXRTb3VyY2UoKS5nZXRUZXh0KCkpO1xuXHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKCk6IHZvaWQge1xuXHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uY2xvc2UoKTtcblx0XHR0aGlzLnN0YXRlLnF1ZXJ5Q2hhbmdlZCA9IGZhbHNlO1xuXHRcdGxldCBtYWdpY1F1ZXJ5ID0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFZhbHVlKCk7XG5cdFx0aWYgKG1hZ2ljUXVlcnkgPT09IFwiXCIgJiYgdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKSkge1xuXHRcdFx0bWFnaWNRdWVyeSA9IHRoaXMuJHNlYXJjaElucHV0LmdldFBsYWNlaG9sZGVyKCk7XG5cdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUobWFnaWNRdWVyeSk7XG5cdFx0fVxuXHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZVN0YXRlVGV4dChcIlwiKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWVTdGF0ZShcIk5vbmVcIik7XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJlbnRlclByZXNzZWRcIiwgeyBxdWVyeTogbWFnaWNRdWVyeSB9KTtcblx0fVxuXG5cdGFkZFJlY2VudFF1ZXJ5KHF1ZXJ5U3RyaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQpOiB2b2lkIHtcblx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIHN0b3Jpbmdcblx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRjb25zdCByZWNlbnRRdWVyeUluZGV4ID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbmRJbmRleCgocXVlcnkpID0+IHF1ZXJ5LnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5U3RyaW5nPy50b0xvd2VyQ2FzZSgpKTtcblx0XHRpZiAocXVlcnlTdHJpbmcgJiYgcmVjZW50UXVlcnlJbmRleCA9PT0gLTEpIHtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IFtxdWVyeVN0cmluZ10uY29uY2F0KHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyk7XG5cdFx0XHRpZiAodGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmxlbmd0aCA+IDUpIHtcblx0XHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLnNsaWNlKDAsIDUpO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAocXVlcnlTdHJpbmcpIHtcblx0XHRcdGNvbnN0IHJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnlTdHJpbmc/LnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0cmVjZW50UXVlcmllcy51bnNoaWZ0KHF1ZXJ5U3RyaW5nKTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHJlY2VudFF1ZXJpZXM7XG5cdFx0fVxuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZmF2b3JpdGVRdWVyaWVzXCIpIHx8IGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcInJlY2VudFF1ZXJpZXNcIikpIHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXI/LnNldEZhdm9yaXRlUXVlcmllcyh0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyk7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5zZXRSZWNlbnRRdWVyaWVzKHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5tYXAoKHF1ZXJ5KSA9PiBxdWVyeSkpO1xuXHRcdFx0dGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzV2l0RmF2b3JpdGVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLm1hcCgocmVjZW50UXVlcnkpID0+IHtcblx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHR0ZXh0OiByZWNlbnRRdWVyeSxcblx0XHRcdFx0XHRpc0Zhdm9yaXRlOiAhIXRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbmQoKGZhdm9yaXRlUXVlcnkpID0+IGZhdm9yaXRlUXVlcnkgPT09IHJlY2VudFF1ZXJ5KVxuXHRcdFx0XHR9O1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdHRyeSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyID0gYXdhaXQgU2hlbGxIaXN0b3J5UHJvdmlkZXIuZ2V0SW5zdGFuY2UodGhpcy5hcHBJZCA/PyBcIjx1bmtub3duQXBwPlwiKTtcblx0XHR9IGNhdGNoIChlcnJvcikge1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgY3JlYXRpbmcgU2hlbGxIaXN0b3J5UHJvdmlkZXIgZm9yIGVhc3kgZmlsdGVyXCIsIGVycm9yIGFzIHN0cmluZyk7XG5cdFx0fVxuXHR9XG5cblx0Y3JlYXRlRmF2b3JpdGVQb3BvdmVyKCk6IFBvcG92ZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZmF2b3JpdGVQb3BvdmVyXCJ9XG5cdFx0XHRcdHNob3dIZWFkZXI9e2ZhbHNlfVxuXHRcdFx0XHRob3Jpem9udGFsU2Nyb2xsaW5nPXtmYWxzZX1cblx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0c2hvd0Fycm93PXtmYWxzZX1cblx0XHRcdFx0aW5pdGlhbEZvY3VzPXt0aGlzLiRzZWFyY2hJbnB1dH1cblx0XHRcdFx0Y2xhc3M9e1wic2FwRkVDb250cm9sc1BvcG92ZXJcIn1cblx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMCB8fCBlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8RmxleEJveCBkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uQ29sdW1ufSBjbGFzcz17XCJzYXBVaUNvbnRlbnRQYWRkaW5nXCJ9IHJlbmRlclR5cGU9e1wiQmFyZVwifT5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRpdGVtczogW1xuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TVUdHRVNUSU9OU19USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e3RoaXMuc3RhdGUucmVjb21tZW5kZWRRdWVyaWVzLmxlbmd0aCA+IDB9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxIQm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY29tbWVuZGVkUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcD17RmxleFdyYXAuV3JhcH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpVGlueU1hcmdpbkVuZFwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5yZXF1ZXN0RmF2b3JpdGUuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9IQm94Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckZhdm9yaXRlVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQvPixcblx0XHRcdFx0XHRcdFx0XHRcdDxMaXN0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZVF1ZXJpZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25TaXplPXtJbGx1c3RyYXRlZE1lc3NhZ2VTaXplLkV4dHJhU21hbGx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblR5cGU9e0lsbHVzdHJhdGVkTWVzc2FnZVR5cGUuTm9FbnRyaWVzfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbj17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0ZBVk9SSVRFX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IFN0YW5kYXJkTGlzdEl0ZW0gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcFVpU21hbGxNYXJnaW5CZWdpblwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKX0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RmxleEJveFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d2lkdGg9e1wiMTAwJVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGlyZWN0aW9uPXtGbGV4RGlyZWN0aW9uLlJvd31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFsaWduSXRlbXM9e0ZsZXhBbGlnbkl0ZW1zLkNlbnRlcn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGp1c3RpZnlDb250ZW50PXtGbGV4SnVzdGlmeUNvbnRlbnQuU3BhY2VCZXR3ZWVufVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVuZGVyVHlwZT17XCJCYXJlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vZmF2b3JpdGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9GSUxMRURfU1RBUlwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpbmRleCA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmluZGV4T2YocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuZmlsdGVyKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQocXVlcnkpID0+IHF1ZXJ5ICE9PSBxdWVyeVN0cmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJmYXZvcml0ZVwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlU3R5bGU9e1RpdGxlTGV2ZWwuSDZ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9MQVNUX1VTRURcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXNcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtb2RlPXtMaXN0TW9kZS5EZWxldGV9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbdGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRlbGV0ZT17KGU6IExpc3RCYXNlJERlbGV0ZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgaXRlbSA9IGUuZ2V0UGFyYW1ldGVyKFwibGlzdEl0ZW1cIikgYXMgQ3VzdG9tTGlzdEl0ZW07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbS5mb2N1cygpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bGV0IHF1ZXJ5U3RyaW5nID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKT8uZGF0YShcInRleHRcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXF1ZXJ5U3RyaW5nKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBjb21wYXJpbmdcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRxdWVyeVN0cmluZyA9IHF1ZXJ5U3RyaW5nPy5yZXBsYWNlKC9cXFxcL2csIFwiXFxcXFxcXFxcIik7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSB0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMuZmlsdGVyKChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRub0RhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxJbGx1c3RyYXRlZE1lc3NhZ2Vcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGU9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9MQVNUX1VTRURfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfUkVDRU5UX0RFU0NSSVBUSU9OXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtczogKGlkOiBzdHJpbmcsIGN0eDogQ29udGV4dCk6IEZsZXhCb3ggPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbUxpc3RJdGVtXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkICsgXCItZWFzeUZpbHRlckxhc3RVc2VkSXRlbVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoY3R4LmdldE9iamVjdCgpLnRleHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YT17WzxDdXN0b21EYXRhIGtleT17XCJ0ZXh0XCJ9IHZhbHVlPXtjdHguZ2V0T2JqZWN0KCkudGV4dH0gLz5dfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dG9vbHRpcD17Y3R4LmdldE9iamVjdCgpLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdyYXBwaW5nPXtmYWxzZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBGRUNvbnRyb2xzUG9pbnRlclwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+PC9UZXh0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpY29uPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyBcInNhcC1pY29uOi8vZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRU1QVFlfU1RBUlRcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXtsZXNzVGhhbihcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZW5ndGgoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRiaW5kU3RhdGUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFwiZmF2b3JpdGVRdWVyaWVzXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCkgYXMgUGF0aEluTW9kZWxFeHByZXNzaW9uPHVua25vd24+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ1XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtbaWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkID0gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmZvY3VzKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgcXVlcnlTdHJpbmcgPSBjdHguZ2V0T2JqZWN0KCkudGV4dDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpc0Zhdm9yaXRlID0gY3R4LmdldE9iamVjdCgpLmlzRmF2b3JpdGU7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoaXNGYXZvcml0ZSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5yZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5hZGRUb0Zhdm9yaXRlcyhxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8RXZlbnREZWxlZ2F0ZUhvb2tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRhcD17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBzaG91bGQgbm90IGJlIGV4ZWN1dGVkIHdoZW4gY2xpY2tpbmcgb24gYWRkIGZhdm9yaXRlIGJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIXRoaXMuZmF2b3JpdGVCdXR0b25DbGlja2VkKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3R4LmdldE9iamVjdCgpLnRleHQucmVwbGFjZSgvXFxcXFxcXFwvZywgXCJcXFxcXCIpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInJlY2VudFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSBmYWxzZTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvQ3VzdG9tTGlzdEl0ZW0+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdDwvTGlzdD5cblx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9Qb3BvdmVyPlxuXHRcdCkgYXMgUG9wb3Zlcjtcblx0fVxuXG5cdHByaXZhdGUgcmVtb3ZlRnJvbUZhdm9yaXRlcyhxdWVyeTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoKGRhdGEpID0+IGRhdGEudG9Mb3dlckNhc2UoKSAhPT0gcXVlcnkudG9Mb3dlckNhc2UoKSk7XG5cdH1cblxuXHRwcml2YXRlIGFkZFRvRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdGYXZvcml0ZSA9IFtxdWVyeV0uY29uY2F0KHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmNvbmNhdCgpKTtcblx0XHRpZiAobmV3RmF2b3JpdGUubGVuZ3RoID4gNSkge1xuXHRcdFx0bmV3RmF2b3JpdGUucG9wKCk7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzID0gbmV3RmF2b3JpdGU7XG5cdH1cblxuXHRzdGF0aWMgcmVuZGVyKHJtOiBSZW5kZXJNYW5hZ2VyLCBjb250cm9sOiBFYXN5RmlsdGVySW5wdXQpOiB2b2lkIHtcblx0XHRyZXR1cm4ganN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlcihybSwgY29udHJvbCwgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PHNwYW4gcmVmPXtjb250cm9sfSBjbGFzcz17XCJzYXBGRUVhc3lGaWx0ZXJJbnB1dFwifT5cblx0XHRcdFx0XHR7Y29udHJvbC4kc2VhcmNoSW5wdXR9XG5cdFx0XHRcdDwvc3Bhbj5cblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztNQTBDcUJBLGVBQWUsSUFBQUMsSUFBQSxHQURuQ0MsY0FBYyxDQUFDLDRDQUE0QyxDQUFDLEVBQUFDLEtBQUEsR0FFM0RDLFdBQVcsQ0FBQztJQUFFQyxJQUFJLEVBQUUsYUFBYTtJQUFFQyxRQUFRLEVBQUUsS0FBSztJQUFFQyxTQUFTLEVBQUU7RUFBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUd0RUMsUUFBUSxDQUFDO0lBQUVKLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSyxLQUFBLEdBRzVCRCxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVEsQ0FBQyxDQUFDLEVBQUFNLEtBQUEsR0FHM0JDLEtBQUssQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHUEQsS0FBSyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdQRixLQUFLLENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBYVBDLFdBQVcsQ0FBQyxDQUFDLEVBQUFmLElBQUEsQ0FBQWdCLE1BQUEsSUFBQUMsT0FBQSwwQkFBQUMsUUFBQTtJQWlCZCxTQUFBbkIsZ0JBQVlvQixVQUF1RSxFQUFFQyxNQUF5QixFQUFFO01BQUEsSUFBQUMsS0FBQTtNQUMvR0EsS0FBQSxHQUFBSCxRQUFBLENBQUFJLElBQUEsT0FBTUgsVUFBVSxFQUFZQyxNQUFNLENBQUM7TUFBQ0csMEJBQUEsQ0FBQUYsS0FBQSxrQkFBQUcsV0FBQSxFQUFBSCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsV0FBQUksWUFBQSxFQUFBSixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsdUJBQUFLLFlBQUEsRUFBQUwsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGtCQUFBTSxZQUFBLEVBQUFOLEtBQUE7TUFBQUUsMEJB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
562
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVySW5wdXQiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImFnZ3JlZ2F0aW9uIiwidHlwZSIsIm11bHRpcGxlIiwiaXNEZWZhdWx0IiwiX2RlYzMiLCJwcm9wZXJ0eSIsIl9kZWM0IiwiX2RlYzUiLCJldmVudCIsIl9kZWM2IiwiX2RlYzciLCJfZGVjOCIsImRlZmluZVN0YXRlIiwiX2NsYXNzIiwiX2NsYXNzMiIsIl9Db250cm9sIiwicHJvcGVydGllcyIsIm90aGVycyIsIl90aGlzIiwiY2FsbCIsIl9pbml0aWFsaXplckRlZmluZVByb3BlcnR5IiwiX2Rlc2NyaXB0b3IiLCJfZGVzY3JpcHRvcjIiLCJfZGVzY3JpcHRvcjMiLCJfZGVzY3JpcHRvcjQiLCJfZGVzY3JpcHRvcjUiLCJfZGVzY3JpcHRvcjYiLCJmYXZvcml0ZUJ1dHRvbkNsaWNrZWQiLCJfZGVzY3JpcHRvcjciLCJpbml0aWFsaXplIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImdldFZhbHVlIiwiJHNlYXJjaElucHV0IiwiaXNIaXN0b3J5RW5hYmxlZCIsInN0YXRlIiwidmFsdWVPZiIsInNldFZhbHVlIiwidmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFBsYWNlaG9sZGVyIiwicmVjb21tZW5kZWRRdWVyaWVzIiwicmVjb21tZW5kZWRWYWx1ZXMiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwicG9wb3ZlckludmlzaWJsZU1lc3NhZ2UiLCJJbnZpc2libGVNZXNzYWdlIiwiZ2V0SW5zdGFuY2UiLCJjcmVhdGVJbnB1dCIsInNldEFzSW52YWxpZCIsIm1lc3NhZ2UiLCJzZXRWYWx1ZVN0YXRlIiwiVmFsdWVTdGF0ZSIsIldhcm5pbmciLCJzZXRWYWx1ZVN0YXRlVGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsInNldEFzVmFsaWQiLCJOb25lIiwiY2xvc2VWYWx1ZVN0YXRlTWVzc2FnZSIsIl9qc3giLCJJbnB1dCIsIndpZHRoIiwic2hvd0NsZWFySWNvbiIsIm5vdCIsImJpbmRTdGF0ZSIsInNob3dWYWx1ZUhlbHAiLCJ2YWx1ZUhlbHBJY29uU3JjIiwidmFsdWVIZWxwUmVxdWVzdCIsIm9uRmF2b3JpdGVJY29uUHJlc3MiLCJjaGFuZ2UiLCJlIiwiZmlyZUV2ZW50IiwicXVlcnkiLCJnZXRQYXJhbWV0ZXIiLCJsaXZlQ2hhbmdlIiwicXVlcnlDaGFuZ2VkIiwiaXNRdWVyeVN1Y2Nlc3NmdWwiLCJjdXJyZW50RXhlY3V0ZWRRdWVyeSIsImdldFRleHQiLCJnZXRTb3VyY2UiLCIkZmF2b3JpdGVQb3BvdmVyIiwiaXNPcGVuIiwib3BlblN1Z2dlc3Rpb25Qb3BvdmVyIiwiZ2V0VmFsdWVTdGF0ZSIsInBsYWNlaG9sZGVyIiwiZmF2b3JpdGVQb3BvdmVyIiwiY3JlYXRlRmF2b3JpdGVQb3BvdmVyIiwiYWRkRGVwZW5kZW50IiwiYWRkRXZlbnREZWxlZ2F0ZSIsIm9ua2V5dXAiLCJrZXkiLCJvbkVudGVyUHJlc3NlZCIsImNsb3NlIiwib25rZXlkb3duIiwibGVuZ3RoIiwicHJldmVudERlZmF1bHQiLCJwb3BvdmVyQ29uYWluZXIiLCJnZXRDb250ZW50IiwiY29udGFpbmVySXRlbXMiLCJnZXRJdGVtcyIsImZpbmQiLCJpdGVtIiwiaXNGb2N1c2FibGUiLCJmb2N1cyIsIm9udGFwIiwib25mb2N1c2luIiwidGFyZ2V0VGV4dCIsInRhcmdldCIsIm91dGVyVGV4dCIsInRhcmdldElkIiwiaWQiLCJpbmNsdWRlcyIsImZhdm9yaXRlUXVlcmllcyIsImZpbHRlciIsImRhdGEiLCJ0b0xvd2VyQ2FzZSIsInJlY2VudFF1ZXJpZXMiLCJvbkFmdGVyUmVuZGVyaW5nIiwiYW5ub3VuY2UiLCJJbnZpc2libGVNZXNzYWdlTW9kZSIsIkFzc2VydGl2ZSIsInNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwiZ2V0RmF2b3JpdGVRdWVyaWVzIiwiZ2V0UmVjZW50UXVlcmllcyIsIm9wZW5CeSIsInJlcXVlc3RGYXZvcml0ZSIsIm1hZ2ljUXVlcnkiLCJhZGRSZWNlbnRRdWVyeSIsInF1ZXJ5U3RyaW5nIiwicmVwbGFjZSIsInJlY2VudFF1ZXJ5SW5kZXgiLCJmaW5kSW5kZXgiLCJjb25jYXQiLCJzbGljZSIsInVuc2hpZnQiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwic2V0RmF2b3JpdGVRdWVyaWVzIiwic2V0UmVjZW50UXVlcmllcyIsIm1hcCIsInJlY2VudFF1ZXJpZXNXaXRGYXZvcml0ZXMiLCJyZWNlbnRRdWVyeSIsInRleHQiLCJpc0Zhdm9yaXRlIiwiZmF2b3JpdGVRdWVyeSIsInVwZGF0ZUZhdm9yaXRlSWNvbiIsImlzRmF2b3JpdGVkIiwiaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQiLCJmYXZvcml0ZUljb25OYW1lIiwiZmF2b3JpdGVJY29uRW5hYmxlZCIsInRvZ2dsZVN0eWxlQ2xhc3MiLCJ2YWx1ZUhlbHBCdG4iLCJnZXREb21SZWYiLCJxdWVyeVNlbGVjdG9yIiwidGl0bGUiLCJTaGVsbEhpc3RvcnlQcm92aWRlciIsImFwcElkIiwiZXJyb3IiLCJMb2ciLCJQb3BvdmVyIiwiZ2V0SWQiLCJzaG93SGVhZGVyIiwiaG9yaXpvbnRhbFNjcm9sbGluZyIsInBsYWNlbWVudCIsIlBsYWNlbWVudFR5cGUiLCJCb3R0b20iLCJzaG93QXJyb3ciLCJpbml0aWFsRm9jdXMiLCJjbGFzcyIsInZpc2libGUiLCJlcXVhbCIsImNoaWxkcmVuIiwiY29udGVudCIsIkZsZXhCb3giLCJkaXJlY3Rpb24iLCJGbGV4RGlyZWN0aW9uIiwiQ29sdW1uIiwicmVuZGVyVHlwZSIsIml0ZW1zIiwiVGl0bGUiLCJ0aXRsZVN0eWxlIiwiVGl0bGVMZXZlbCIsIkg2IiwiSEJveCIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJjdHgiLCJCdXR0b24iLCJnZXRPYmplY3QiLCJwcmVzcyIsImJpbmQiLCJMaXN0Iiwibm9EYXRhIiwiSWxsdXN0cmF0ZWRNZXNzYWdlIiwiaWxsdXN0cmF0aW9uU2l6ZSIsIklsbHVzdHJhdGVkTWVzc2FnZVNpemUiLCJFeHRyYVNtYWxsIiwiaWxsdXN0cmF0aW9uVHlwZSIsIklsbHVzdHJhdGVkTWVzc2FnZVR5cGUiLCJOb0VudHJpZXMiLCJkZXNjcmlwdGlvbiIsIkN1c3RvbUxpc3RJdGVtIiwiYXJpYUxhYmVsbGVkQnkiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsIl9qc3hzIiwiUm93IiwiYWxpZ25JdGVtcyIsIkZsZXhBbGlnbkl0ZW1zIiwiQ2VudGVyIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJUZXh0IiwidG9vbHRpcCIsIndyYXBwaW5nIiwiaWNvbiIsIkJ1dHRvblR5cGUiLCJUcmFuc3BhcmVudCIsImluZGV4IiwiaW5kZXhPZiIsImRlcGVuZGVudHMiLCJFdmVudERlbGVnYXRlSG9vayIsInRhcCIsInRyaWdnZXJQWEludGVncmF0aW9uIiwibW9kZSIsIkxpc3RNb2RlIiwiRGVsZXRlIiwiZGVsZXRlIiwiZW5hYmxlZCIsImxlc3NUaGFuIiwicmVtb3ZlRnJvbUZhdm9yaXRlcyIsImFkZFRvRmF2b3JpdGVzIiwibmV3RmF2b3JpdGUiLCJwb3AiLCJjdXJyZW50UXVlcnkiLCJ0cmltIiwic29tZSIsImZhdiIsInNldFF1ZXJ5U3VjY2VzcyIsInNldFF1ZXJ5RmFpbHVyZSIsImNsZWFyUXVlcnlTdGF0dXMiLCJyZW5kZXIiLCJybSIsImNvbnRyb2wiLCJqc3giLCJyZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIiLCJyZWYiLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVySW5wdXQudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCB0eXBlIHsgUGF0aEluTW9kZWxFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBiaW5kU3RhdGUsIGVxdWFsLCBsZW5ndGgsIGxlc3NUaGFuLCBub3QgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IGFnZ3JlZ2F0aW9uLCBkZWZpbmVTdGF0ZSwgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YsIHR5cGUgU3RhdGVPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBFdmVudERlbGVnYXRlSG9vayBmcm9tIFwic2FwL2ZlL2Jhc2UvRXZlbnREZWxlZ2F0ZUhvb2tcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFNoZWxsSGlzdG9yeVByb3ZpZGVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9TaGVsbEhpc3RvcnlQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgeyBCdXR0b24kUHJlc3NFdmVudCB9IGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IEN1c3RvbUxpc3RJdGVtIGZyb20gXCJzYXAvbS9DdXN0b21MaXN0SXRlbVwiO1xuaW1wb3J0IEZsZXhCb3ggZnJvbSBcInNhcC9tL0ZsZXhCb3hcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VcIjtcbmltcG9ydCBJbGx1c3RyYXRlZE1lc3NhZ2VTaXplIGZyb20gXCJzYXAvbS9JbGx1c3RyYXRlZE1lc3NhZ2VTaXplXCI7XG5pbXBvcnQgSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZSBmcm9tIFwic2FwL20vSWxsdXN0cmF0ZWRNZXNzYWdlVHlwZVwiO1xuaW1wb3J0IHR5cGUgeyBJbnB1dCRMaXZlQ2hhbmdlRXZlbnQgfSBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBJbnB1dCBmcm9tIFwic2FwL20vSW5wdXRcIjtcbmltcG9ydCBMaXN0IGZyb20gXCJzYXAvbS9MaXN0XCI7XG5pbXBvcnQgdHlwZSB7IExpc3RCYXNlJERlbGV0ZUV2ZW50IH0gZnJvbSBcInNhcC9tL0xpc3RCYXNlXCI7XG5pbXBvcnQgUG9wb3ZlciBmcm9tIFwic2FwL20vUG9wb3ZlclwiO1xuaW1wb3J0IHR5cGUgU3RhbmRhcmRMaXN0SXRlbSBmcm9tIFwic2FwL20vU3RhbmRhcmRMaXN0SXRlbVwiO1xuaW1wb3J0IFRleHQgZnJvbSBcInNhcC9tL1RleHRcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4RGlyZWN0aW9uLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBMaXN0TW9kZSwgUGxhY2VtZW50VHlwZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCBJbnZpc2libGVNZXNzYWdlIGZyb20gXCJzYXAvdWkvY29yZS9JbnZpc2libGVNZXNzYWdlXCI7XG5pbXBvcnQgTGliIGZyb20gXCJzYXAvdWkvY29yZS9MaWJcIjtcbmltcG9ydCB0eXBlIFJlbmRlck1hbmFnZXIgZnJvbSBcInNhcC91aS9jb3JlL1JlbmRlck1hbmFnZXJcIjtcbmltcG9ydCB7IEludmlzaWJsZU1lc3NhZ2VNb2RlLCBUaXRsZUxldmVsLCBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuXG50eXBlIFJlY2VudFR5cGUgPSB7XG5cdHRleHQ6IHN0cmluZztcblx0aXNGYXZvcml0ZTogYm9vbGVhbjtcbn07XG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVySW5wdXRcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJJbnB1dCBleHRlbmRzIENvbnRyb2wge1xuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC5tLklucHV0XCIsIG11bHRpcGxlOiBmYWxzZSwgaXNEZWZhdWx0OiB0cnVlIH0pXG5cdCRzZWFyY2hJbnB1dCE6IElucHV0O1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QGV2ZW50KClcblx0cXVlcnlDaGFuZ2VkPzogRXZlbnRIYW5kbGVyPFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZXZlbnQoKVxuXHRlbnRlclByZXNzZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBldmVudCgpXG5cdGxpdmVDaGFuZ2U/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdHNoZWxsSGlzdG9yeVByb3ZpZGVyOiBTaGVsbEhpc3RvcnlQcm92aWRlciB8IHVuZGVmaW5lZDtcblxuXHRwb3BvdmVySW52aXNpYmxlTWVzc2FnZTogSW52aXNpYmxlTWVzc2FnZSB8IHVuZGVmaW5lZDtcblxuXHQkZmF2b3JpdGVQb3BvdmVyOiBQb3BvdmVyIHwgdW5kZWZpbmVkO1xuXG5cdHByaXZhdGUgZmF2b3JpdGVCdXR0b25DbGlja2VkID0gZmFsc2U7XG5cblx0QGRlZmluZVN0YXRlKClcblx0cHJvdGVjdGVkIHN0YXRlOiBTdGF0ZU9mPHtcblx0XHRxdWVyeUNoYW5nZWQ6IGJvb2xlYW47XG5cdFx0cmVjZW50UXVlcmllczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogcmVhZG9ubHkgUmVjZW50VHlwZVtdO1xuXHRcdGlzSGlzdG9yeUVuYWJsZWQ6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBzdHJpbmdbXTtcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IHN0cmluZ1tdO1xuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBzdHJpbmc7XG5cdFx0aXNRdWVyeVN1Y2Nlc3NmdWw6IGJvb2xlYW47XG5cdFx0ZmF2b3JpdGVJY29uTmFtZTogc3RyaW5nO1xuXHRcdGZhdm9yaXRlSWNvbkVuYWJsZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHF1ZXJ5Q2hhbmdlZDogZmFsc2UsXG5cdFx0aXNIaXN0b3J5RW5hYmxlZDogZmFsc2UsXG5cdFx0cmVjZW50UXVlcmllczogW10sXG5cdFx0cmVjZW50UXVlcmllc1dpdEZhdm9yaXRlczogW10sXG5cdFx0ZmF2b3JpdGVRdWVyaWVzOiBbXSBhcyBzdHJpbmdbXSxcblx0XHRyZWNvbW1lbmRlZFF1ZXJpZXM6IFtdIGFzIHN0cmluZ1tdLFxuXHRcdGN1cnJlbnRFeGVjdXRlZFF1ZXJ5OiBcIlwiLFxuXHRcdGlzUXVlcnlTdWNjZXNzZnVsOiBmYWxzZSxcblx0XHRmYXZvcml0ZUljb25OYW1lOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCIsXG5cdFx0ZmF2b3JpdGVJY29uRW5hYmxlZDogdHJ1ZVxuXHR9O1xuXG5cdGNvbnN0cnVjdG9yKHByb3BlcnRpZXM6IHN0cmluZyB8ICgkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPEVhc3lGaWx0ZXJJbnB1dD4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VmFsdWUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0hpc3RvcnlFbmFibGVkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQudmFsdWVPZigpO1xuXHR9XG5cblx0c2V0VmFsdWUodmFsdWU6IHN0cmluZyk6IHRoaXMge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKHZhbHVlKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldFBsYWNlaG9sZGVyKHZhbHVlOiBzdHJpbmcpOiB0aGlzIHtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRQbGFjZWhvbGRlcih2YWx1ZSk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGxhY2Vob2xkZXIoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy4kc2VhcmNoSW5wdXQuZ2V0UGxhY2Vob2xkZXIoKTtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLnJlY29tbWVuZGVkVmFsdWVzID8/IFtdO1xuXHRcdHRoaXMucmVzb3VyY2VCdW5kbGUgPSBMaWIuZ2V0UmVzb3VyY2VCdW5kbGVGb3IoXCJzYXAuZmUuY29udHJvbHNcIikhO1xuXHRcdHRoaXMucG9wb3ZlckludmlzaWJsZU1lc3NhZ2UgPSBJbnZpc2libGVNZXNzYWdlLmdldEluc3RhbmNlKCk7XG5cdFx0dGhpcy5jcmVhdGVJbnB1dCgpO1xuXHR9XG5cblx0c2V0QXNJbnZhbGlkKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlU3RhdGUoVmFsdWVTdGF0ZS5XYXJuaW5nKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5zZXRWYWx1ZVN0YXRlVGV4dChtZXNzYWdlKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5vcGVuVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdHNldEFzVmFsaWQoKTogdm9pZCB7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQuc2V0VmFsdWVTdGF0ZShWYWx1ZVN0YXRlLk5vbmUpO1xuXHRcdHRoaXMuJHNlYXJjaElucHV0LmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKTtcblx0fVxuXG5cdGNyZWF0ZUlucHV0KCk6IHZvaWQge1xuXHRcdHRoaXMuJHNlYXJjaElucHV0ID0gKFxuXHRcdFx0PElucHV0XG5cdFx0XHRcdHdpZHRoPVwiMTAwJVwiXG5cdFx0XHRcdHNob3dDbGVhckljb249e25vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc1F1ZXJ5U3VjY2Vzc2Z1bFwiKSl9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzUXVlcnlTdWNjZXNzZnVsXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBJY29uU3JjPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJmYXZvcml0ZUljb25OYW1lXCIpfVxuXHRcdFx0XHR2YWx1ZUhlbHBSZXF1ZXN0PXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5vbkZhdm9yaXRlSWNvblByZXNzKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGNoYW5nZT17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInF1ZXJ5Q2hhbmdlZFwiLCB7IHF1ZXJ5OiBlLmdldFBhcmFtZXRlcihcInZhbHVlXCIpIH0pO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRsaXZlQ2hhbmdlPXsoZTogSW5wdXQkTGl2ZUNoYW5nZUV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSB0cnVlO1xuXHRcdFx0XHRcdC8vIFdoZW4gdXNlciBzdGFydHMgdHlwaW5nLCBoaWRlIGZhdm9yaXRlIGljb24gYW5kIHNob3cgWFxuXHRcdFx0XHRcdHRoaXMuc3RhdGUuaXNRdWVyeVN1Y2Nlc3NmdWwgPSBmYWxzZTtcblx0XHRcdFx0XHRpZiAoZS5nZXRQYXJhbWV0ZXIoXCJ2YWx1ZVwiKSA9PT0gXCJcIikge1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSA9IFwiXCI7XG5cdFx0XHRcdFx0XHR0aGlzLnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdFx0aWYgKCFlLmdldFNvdXJjZSgpLmdldFZhbHVlKCkgJiYgISh0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpID8/IGZhbHNlKSkge1xuXHRcdFx0XHRcdFx0dGhpcy5vcGVuU3VnZ2VzdGlvblBvcG92ZXIoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKHRoaXMuJHNlYXJjaElucHV0LmdldFZhbHVlU3RhdGUoKSA9PT0gVmFsdWVTdGF0ZS5XYXJuaW5nKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnNldEFzVmFsaWQoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH19XG5cdFx0XHRcdHBsYWNlaG9sZGVyPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BMQUNFSE9MREVSXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXG5cdFx0Y29uc3QgZmF2b3JpdGVQb3BvdmVyID0gdGhpcy5jcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIgPSBmYXZvcml0ZVBvcG92ZXI7XG5cblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5hZGREZXBlbmRlbnQoZmF2b3JpdGVQb3BvdmVyKTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dC5hZGRFdmVudERlbGVnYXRlKHtcblx0XHRcdG9ua2V5dXA6IChlOiBLZXlib2FyZEV2ZW50KSA9PiB7XG5cdFx0XHRcdGlmIChlLmtleSA9PT0gXCJFbnRlclwiKSB7XG5cdFx0XHRcdFx0dGhpcy5vbkVudGVyUHJlc3NlZCgpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICh0aGlzLiRmYXZvcml0ZVBvcG92ZXIgJiYgdGhpcy4kc2VhcmNoSW5wdXQuZ2V0VmFsdWUoKSkge1xuXHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlci5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b25rZXlkb3duOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0ZS5rZXkgPT09IFwiVGFiXCIgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKS5sZW5ndGggPT09IDAgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0VmFsdWUoKSAhPT0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldFBsYWNlaG9sZGVyKCkgJiZcblx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uZ2V0UGxhY2Vob2xkZXIoKSAhPT0gdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QTEFDRUhPTERFUlwiKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRlLnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKHRoaXMuJHNlYXJjaElucHV0Py5nZXRQbGFjZWhvbGRlcigpKTtcblx0XHRcdFx0XHR0aGlzLmZpcmVFdmVudChcImxpdmVDaGFuZ2VcIik7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZS5rZXkgPT09IFwiQXJyb3dEb3duXCIpIHtcblx0XHRcdFx0XHRjb25zdCBwb3BvdmVyQ29uYWluZXIgPSB0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmdldENvbnRlbnQoKVswXTtcblx0XHRcdFx0XHRjb25zdCBjb250YWluZXJJdGVtcyA9IChwb3BvdmVyQ29uYWluZXIgYXMgRmxleEJveCkuZ2V0SXRlbXMoKTtcblx0XHRcdFx0XHRjb250YWluZXJJdGVtcz8uZmluZCgoaXRlbSkgPT4gaXRlbS5pc0ZvY3VzYWJsZSgpICYmIChpdGVtLmZvY3VzKCksIHRydWUpKTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdG9udGFwOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGF3YWl0IHRoaXMub3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk7XG5cdFx0XHR9LFxuXHRcdFx0b25mb2N1c2luOiBhc3luYyAoKSA9PiB7XG5cdFx0XHRcdGF3YWl0IHRoaXMub3BlblN1Z2dlc3Rpb25Qb3BvdmVyKCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyLmFkZEV2ZW50RGVsZWdhdGUoe1xuXHRcdFx0b25rZXlkb3duOiAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuXHRcdFx0XHRjb25zdCB0YXJnZXRUZXh0ID0gKGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50KT8ub3V0ZXJUZXh0O1xuXHRcdFx0XHRjb25zdCB0YXJnZXRJZCA9IChlLnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmlkO1xuXHRcdFx0XHRzd2l0Y2ggKGUua2V5KSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVudGVyXCI6XG5cdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUodGFyZ2V0VGV4dCk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRGVsZXRlXCI6XG5cdFx0XHRcdFx0XHRpZiAodGFyZ2V0SWQ/LmluY2x1ZGVzKFwiZWFzeUZpbHRlckZhdm9yaXRlSXRlbVwiKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcihcblx0XHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSB0YXJnZXRUZXh0LnRvTG93ZXJDYXNlKClcblx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gdGFyZ2V0VGV4dCk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRXNjYXBlXCI6XG5cdFx0XHRcdFx0XHRpZiAodGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5pc09wZW4oKSkge1xuXHRcdFx0XHRcdFx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXIuY2xvc2UoKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0b25BZnRlclJlbmRlcmluZzogKCkgPT4ge1xuXHRcdFx0XHR0aGlzLnBvcG92ZXJJbnZpc2libGVNZXNzYWdlPy5hbm5vdW5jZShcblx0XHRcdFx0XHR0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJUX0VBU1lfRklMVEVSX0lOUFVUX1RFWFRfTElOS19QT1BPVkVSX0FSSUFcIiksXG5cdFx0XHRcdFx0SW52aXNpYmxlTWVzc2FnZU1vZGUuQXNzZXJ0aXZlXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIG9wZW5TdWdnZXN0aW9uUG9wb3ZlcigpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRpZiAoIXRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpICYmICghdGhpcy4kZmF2b3JpdGVQb3BvdmVyIHx8ICF0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmlzT3BlbigpKSkge1xuXHRcdFx0Ly8gT3BlbiB0aGUgZWFzeSBmaWx0ZXIgcG9wb3ZlclxuXHRcdFx0aWYgKCF0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyKSB7XG5cdFx0XHRcdGF3YWl0IHRoaXMuaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyKCk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLmlzSGlzdG9yeUVuYWJsZWQgPSB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2U7XG5cdFx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IChhd2FpdCB0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5nZXRGYXZvcml0ZVF1ZXJpZXMoKSkgPz8gW107XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSAoYXdhaXQgdGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uZ2V0UmVjZW50UXVlcmllcygpKSA/PyBbXTtcblx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8ub3BlbkJ5KHRoaXMuJHNlYXJjaElucHV0KTtcblx0XHR9XG5cdH1cblxuXHRyZXF1ZXN0RmF2b3JpdGUoZTogQnV0dG9uJFByZXNzRXZlbnQpOiB2b2lkIHtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmNsb3NlKCk7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKGUuZ2V0U291cmNlKCkuZ2V0VGV4dCgpKTtcblx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdH1cblxuXHRvbkVudGVyUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLiRmYXZvcml0ZVBvcG92ZXI/LmNsb3NlKCk7XG5cdFx0dGhpcy5zdGF0ZS5xdWVyeUNoYW5nZWQgPSBmYWxzZTtcblx0XHRsZXQgbWFnaWNRdWVyeSA9IHRoaXMuJHNlYXJjaElucHV0Py5nZXRWYWx1ZSgpO1xuXHRcdGlmIChtYWdpY1F1ZXJ5ID09PSBcIlwiICYmIHRoaXMuJHNlYXJjaElucHV0LmdldFBsYWNlaG9sZGVyKCkgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdG1hZ2ljUXVlcnkgPSB0aGlzLiRzZWFyY2hJbnB1dC5nZXRQbGFjZWhvbGRlcigpO1xuXHRcdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlKG1hZ2ljUXVlcnkpO1xuXHRcdH1cblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWVTdGF0ZVRleHQoXCJcIik7XG5cdFx0dGhpcy4kc2VhcmNoSW5wdXQ/LnNldFZhbHVlU3RhdGUoXCJOb25lXCIpO1xuXHRcdHRoaXMuZmlyZUV2ZW50KFwiZW50ZXJQcmVzc2VkXCIsIHsgcXVlcnk6IG1hZ2ljUXVlcnkgfSk7XG5cdH1cblxuXHRhZGRSZWNlbnRRdWVyeShxdWVyeVN0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdFx0Ly8gTm9ybWFsaXplIGJhY2tzbGFzaGVzIGJlZm9yZSBzdG9yaW5nXG5cdFx0cXVlcnlTdHJpbmcgPSBxdWVyeVN0cmluZz8ucmVwbGFjZSgvXFxcXC9nLCBcIlxcXFxcXFxcXCIpO1xuXG5cdFx0Y29uc3QgcmVjZW50UXVlcnlJbmRleCA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maW5kSW5kZXgoKHF1ZXJ5KSA9PiBxdWVyeS50b0xvd2VyQ2FzZSgpID09PSBxdWVyeVN0cmluZz8udG9Mb3dlckNhc2UoKSk7XG5cdFx0aWYgKHF1ZXJ5U3RyaW5nICYmIHJlY2VudFF1ZXJ5SW5kZXggPT09IC0xKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSBbcXVlcnlTdHJpbmddLmNvbmNhdCh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMpO1xuXHRcdFx0aWYgKHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5sZW5ndGggPiA1KSB7XG5cdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5zbGljZSgwLCA1KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHF1ZXJ5U3RyaW5nKSB7XG5cdFx0XHRjb25zdCByZWNlbnRRdWVyaWVzID0gdGhpcy5zdGF0ZS5yZWNlbnRRdWVyaWVzLmZpbHRlcigocXVlcnkpID0+IHF1ZXJ5LnRvTG93ZXJDYXNlKCkgIT09IHF1ZXJ5U3RyaW5nPy50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdHJlY2VudFF1ZXJpZXMudW5zaGlmdChxdWVyeVN0cmluZyk7XG5cdFx0XHR0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMgPSByZWNlbnRRdWVyaWVzO1xuXHRcdH1cblx0fVxuXG5cdG9uU3RhdGVDaGFuZ2UoY2hhbmdlZFByb3BzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGNoYW5nZWRQcm9wcy5pbmNsdWRlcyhcImZhdm9yaXRlUXVlcmllc1wiKSB8fCBjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJyZWNlbnRRdWVyaWVzXCIpKSB7XG5cdFx0XHR0aGlzLnNoZWxsSGlzdG9yeVByb3ZpZGVyPy5zZXRGYXZvcml0ZVF1ZXJpZXModGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMpO1xuXHRcdFx0dGhpcy5zaGVsbEhpc3RvcnlQcm92aWRlcj8uc2V0UmVjZW50UXVlcmllcyh0aGlzLnN0YXRlLnJlY2VudFF1ZXJpZXMubWFwKChxdWVyeSkgPT4gcXVlcnkpKTtcblx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllc1dpdEZhdm9yaXRlcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5tYXAoKHJlY2VudFF1ZXJ5KSA9PiB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0dGV4dDogcmVjZW50UXVlcnksXG5cdFx0XHRcdFx0aXNGYXZvcml0ZTogISF0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maW5kKChmYXZvcml0ZVF1ZXJ5KSA9PiBmYXZvcml0ZVF1ZXJ5ID09PSByZWNlbnRRdWVyeSlcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH1cblx0XHQvLyBVcGRhdGUgZmF2b3JpdGUgaWNvbiB3aGVuIHF1ZXJ5IG9yIGZhdm9yaXRlcyBjaGFuZ2Vcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiY3VycmVudEV4ZWN1dGVkUXVlcnlcIikgfHwgY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwiZmF2b3JpdGVRdWVyaWVzXCIpKSB7XG5cdFx0XHR0aGlzLnVwZGF0ZUZhdm9yaXRlSWNvbigpO1xuXHRcdH1cblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlRmF2b3JpdGVJY29uKCk6IHZvaWQge1xuXHRcdGNvbnN0IGlzRmF2b3JpdGVkID0gdGhpcy5pc0N1cnJlbnRRdWVyeUZhdm9yaXRlZCgpO1xuXHRcdHRoaXMuc3RhdGUuZmF2b3JpdGVJY29uTmFtZSA9IGlzRmF2b3JpdGVkID8gXCJzYXAtaWNvbjovL2Zhdm9yaXRlXCIgOiBcInNhcC1pY29uOi8vYWRkLWZhdm9yaXRlXCI7XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkID0gaXNGYXZvcml0ZWQgfHwgdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMubGVuZ3RoIDwgNTtcblx0XHR0aGlzLiRzZWFyY2hJbnB1dD8udG9nZ2xlU3R5bGVDbGFzcyhcInNhcEZFRmF2b3JpdGVJY29uRGlzYWJsZWRcIiwgIXRoaXMuc3RhdGUuZmF2b3JpdGVJY29uRW5hYmxlZCk7XG5cdFx0Y29uc3QgdmFsdWVIZWxwQnRuID0gdGhpcy4kc2VhcmNoSW5wdXQ/LmdldERvbVJlZigpPy5xdWVyeVNlbGVjdG9yKCdbYXJpYS1sYWJlbD1cIlNob3cgVmFsdWUgSGVscFwiXScpIGFzIEhUTUxFbGVtZW50IHwgbnVsbDtcblx0XHRpZiAodmFsdWVIZWxwQnRuKSB7XG5cdFx0XHR2YWx1ZUhlbHBCdG4udGl0bGUgPSB0aGlzLnN0YXRlLmZhdm9yaXRlSWNvbkVuYWJsZWRcblx0XHRcdFx0PyB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0VNUFRZX1NUQVJUXCIpXG5cdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9NQVhfRkFWT1JJVEVfUkVBQ0hFRFwiKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dHJ5IHtcblx0XHRcdHRoaXMuc2hlbGxIaXN0b3J5UHJvdmlkZXIgPSBhd2FpdCBTaGVsbEhpc3RvcnlQcm92aWRlci5nZXRJbnN0YW5jZSh0aGlzLmFwcElkID8/IFwiPHVua25vd25BcHA+XCIpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRMb2cuZXJyb3IoXCJFcnJvciB3aGlsZSBjcmVhdGluZyBTaGVsbEhpc3RvcnlQcm92aWRlciBmb3IgZWFzeSBmaWx0ZXJcIiwgZXJyb3IgYXMgc3RyaW5nKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVGYXZvcml0ZVBvcG92ZXIoKTogUG9wb3ZlciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1mYXZvcml0ZVBvcG92ZXJcIn1cblx0XHRcdFx0c2hvd0hlYWRlcj17ZmFsc2V9XG5cdFx0XHRcdGhvcml6b250YWxTY3JvbGxpbmc9e2ZhbHNlfVxuXHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRpbml0aWFsRm9jdXM9e3RoaXMuJHNlYXJjaElucHV0fVxuXHRcdFx0XHRjbGFzcz17XCJzYXBGRUNvbnRyb2xzUG9wb3ZlclwifVxuXHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwIHx8IGVxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDxGbGV4Qm94IGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Db2x1bW59IGNsYXNzPXtcInNhcFVpQ29udGVudFBhZGRpbmdcIn0gcmVuZGVyVHlwZT17XCJCYXJlXCJ9PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiBbXG5cdFx0XHRcdFx0XHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX1NVR0dFU1RJT05TX1RJVExFXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBGZUNvbnRyb2xzVGl0bGVCb3JkZXJcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17dGhpcy5zdGF0ZS5yZWNvbW1lbmRlZFF1ZXJpZXMubGVuZ3RoID4gMH1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PEhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlDb250ZW50UGFkZGluZ1wifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjb21tZW5kZWRRdWVyaWVzXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR3cmFwPXtGbGV4V3JhcC5XcmFwfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXt0aGlzLnN0YXRlLnJlY29tbWVuZGVkUXVlcmllcy5sZW5ndGggPiAwfVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luRW5kXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17Y3R4LmdldE9iamVjdCgpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXt0aGlzLnJlcXVlc3RGYXZvcml0ZS5iaW5kKHRoaXMpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHQ8L0hCb3g+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVUaXRsZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZVN0eWxlPXtUaXRsZUxldmVsLkg2fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUaXRsZUJvcmRlclwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR2aXNpYmxlPXtlcXVhbChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJpc0hpc3RvcnlFbmFibGVkXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0XHRcdC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0PExpc3Rcblx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImZhdm9yaXRlUXVlcmllc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9EYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8SWxsdXN0cmF0ZWRNZXNzYWdlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRpdGxlPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfVElUTEVcIil9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlsbHVzdHJhdGlvblNpemU9e0lsbHVzdHJhdGVkTWVzc2FnZVNpemUuRXh0cmFTbWFsbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uVHlwZT17SWxsdXN0cmF0ZWRNZXNzYWdlVHlwZS5Ob0VudHJpZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfRU1QVFlfRkFWT1JJVEVfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogU3RhbmRhcmRMaXN0SXRlbSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyRmF2b3JpdGVJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZVRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE9e1s8Q3VzdG9tRGF0YSBrZXk9e1widGV4dFwifSB2YWx1ZT17Y3R4LmdldE9iamVjdCgpfSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0LnNldFZhbHVlKGN0eC5nZXRPYmplY3QoKSk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR3aWR0aD17XCIxMDAlXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkaXJlY3Rpb249e0ZsZXhEaXJlY3Rpb24uUm93fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZW5kZXJUeXBlPXtcIkJhcmVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlkPXtpZH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0ZXh0PXtjdHguZ2V0T2JqZWN0KCl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e2N0eC5nZXRPYmplY3QoKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9mYXZvcml0ZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX0ZJTExFRF9TVEFSXCIpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17W3RoaXMuZ2V0SWQoKSArIFwiLWVhc3lGaWx0ZXJGYXZvcml0ZUl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly9SZXRhaW5pbmcgdGhlIGZvY3VzIG9uIHBvcG92ZXIgZG9lc24ndCBtYWtlIHRoZSBwb3BvdmVyIGNsb3NlIG9uIGV2ZXJ5IGludGVyYWN0aW9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy4kZmF2b3JpdGVQb3BvdmVyPy5mb2N1cygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHF1ZXJ5U3RyaW5nID0gY3R4LmdldE9iamVjdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGluZGV4ID0gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuaW5kZXhPZihxdWVyeVN0cmluZyk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSB0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcy5maWx0ZXIoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdChxdWVyeSkgPT4gcXVlcnkgIT09IHF1ZXJ5U3RyaW5nXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcImZhdm9yaXRlXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0Pixcblx0XHRcdFx0XHRcdFx0XHRcdDxUaXRsZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17dGhpcy5nZXRJZCgpICsgXCItZWFzeUZpbHRlckxhc3RVc2VkVGl0bGVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGl0bGVTdHlsZT17VGl0bGVMZXZlbC5INn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0xBU1RfVVNFRFwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1RpdGxlQm9yZGVyXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2VxdWFsKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcImlzSGlzdG9yeUVuYWJsZWRcIiksIHRydWUpfVxuXHRcdFx0XHRcdFx0XHRcdFx0Lz4sXG5cdFx0XHRcdFx0XHRcdFx0XHQ8TGlzdFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwicmVjZW50UXVlcmllc1dpdEZhdm9yaXRlc1wiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZXF1YWwoYmluZFN0YXRlKHRoaXMuc3RhdGUsIFwiaXNIaXN0b3J5RW5hYmxlZFwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG1vZGU9e0xpc3RNb2RlLkRlbGV0ZX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1t0aGlzLmdldElkKCkgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRUaXRsZVwiXX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoZTogTGlzdEJhc2UkRGVsZXRlRXZlbnQpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBpdGVtID0gZS5nZXRQYXJhbWV0ZXIoXCJsaXN0SXRlbVwiKSBhcyBDdXN0b21MaXN0SXRlbTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtLmZvY3VzKCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsZXQgcXVlcnlTdHJpbmcgPSBlLmdldFBhcmFtZXRlcihcImxpc3RJdGVtXCIpPy5kYXRhKFwidGV4dFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghcXVlcnlTdHJpbmcpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBOb3JtYWxpemUgYmFja3NsYXNoZXMgYmVmb3JlIGNvbXBhcmluZ1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHF1ZXJ5U3RyaW5nID0gcXVlcnlTdHJpbmc/LnJlcGxhY2UoL1xcXFwvZywgXCJcXFxcXFxcXFwiKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUucmVjZW50UXVlcmllcyA9IHRoaXMuc3RhdGUucmVjZW50UXVlcmllcy5maWx0ZXIoKHF1ZXJ5KSA9PiBxdWVyeSAhPT0gcXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG5vRGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PElsbHVzdHJhdGVkTWVzc2FnZVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aXRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX0VNUFRZX0xBU1RfVVNFRF9USVRMRVwiKX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWxsdXN0cmF0aW9uU2l6ZT17SWxsdXN0cmF0ZWRNZXNzYWdlU2l6ZS5FeHRyYVNtYWxsfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpbGx1c3RyYXRpb25UeXBlPXtJbGx1c3RyYXRlZE1lc3NhZ2VUeXBlLk5vRW50cmllc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb249e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9FTVBUWV9SRUNFTlRfREVTQ1JJUFRJT05cIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGl0ZW1zOiAoaWQ6IHN0cmluZywgY3R4OiBDb250ZXh0KTogRmxleEJveCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tTGlzdEl0ZW1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZD17aWQgKyBcIi1lYXN5RmlsdGVyTGFzdFVzZWRJdGVtXCJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJHNlYXJjaElucHV0Py5zZXRWYWx1ZShjdHguZ2V0T2JqZWN0KCkudGV4dCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLm9uRW50ZXJQcmVzc2VkKCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz17XCJzYXBVaVNtYWxsTWFyZ2luQmVnaW5cIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhPXtbPEN1c3RvbURhdGEga2V5PXtcInRleHRcIn0gdmFsdWU9e2N0eC5nZXRPYmplY3QoKS50ZXh0fSAvPl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZFRpdGxlXCJdfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEZsZXhCb3hcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHdpZHRoPXtcIjEwMCVcIn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRpcmVjdGlvbj17RmxleERpcmVjdGlvbi5Sb3d9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhbGlnbkl0ZW1zPXtGbGV4QWxpZ25JdGVtcy5DZW50ZXJ9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqdXN0aWZ5Q29udGVudD17RmxleEp1c3RpZnlDb250ZW50LlNwYWNlQmV0d2Vlbn1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlbmRlclR5cGU9e1wiQmFyZVwifVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxUZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRleHQ9e2N0eC5nZXRPYmplY3QoKS50ZXh0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0b29sdGlwPXtjdHguZ2V0T2JqZWN0KCkudGV4dH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0d3JhcHBpbmc9e2ZhbHNlfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjbGFzcz1cInNhcEZFQ29udHJvbHNQb2ludGVyXCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdD48L1RleHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGljb249e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IFwic2FwLWljb246Ly9mYXZvcml0ZVwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ6IFwic2FwLWljb246Ly9hZGQtZmF2b3JpdGVcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRvb2x0aXA9e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN0eC5nZXRPYmplY3QoKS5pc0Zhdm9yaXRlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ/IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfRklMTEVEX1NUQVJcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDogdGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9FTVBUWV9TVEFSVFwiKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2xlc3NUaGFuKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxlbmd0aChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJpbmRTdGF0ZShcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XCJmYXZvcml0ZVF1ZXJpZXNcIlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KSBhcyBQYXRoSW5Nb2RlbEV4cHJlc3Npb248dW5rbm93bj5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDVcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e1tpZCArIFwiLWVhc3lGaWx0ZXJMYXN0VXNlZEl0ZW1cIl19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vUmV0YWluaW5nIHRoZSBmb2N1cyBvbiBwb3BvdmVyIGRvZXNuJ3QgbWFrZSB0aGUgcG9wb3ZlciBjbG9zZSBvbiBldmVyeSBpbnRlcmFjdGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuJGZhdm9yaXRlUG9wb3Zlcj8uZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCBxdWVyeVN0cmluZyA9IGN0eC5nZXRPYmplY3QoKS50ZXh0O1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IGlzRmF2b3JpdGUgPSBjdHguZ2V0T2JqZWN0KCkuaXNGYXZvcml0ZTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChpc0Zhdm9yaXRlKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXMocXVlcnlTdHJpbmcpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmFkZFRvRmF2b3JpdGVzKHF1ZXJ5U3RyaW5nKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVwZW5kZW50czogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxFdmVudERlbGVnYXRlSG9va1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGFwPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIHNob3VsZCBub3QgYmUgZXhlY3V0ZWQgd2hlbiBjbGlja2luZyBvbiBhZGQgZmF2b3JpdGUgYnV0dG9uXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICghdGhpcy5mYXZvcml0ZUJ1dHRvbkNsaWNrZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLiRzZWFyY2hJbnB1dD8uc2V0VmFsdWUoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjdHguZ2V0T2JqZWN0KCkudGV4dC5yZXBsYWNlKC9cXFxcXFxcXC9nLCBcIlxcXFxcIilcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRyaWdnZXJQWEludGVncmF0aW9uKFwicmVjZW50XCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMub25FbnRlclByZXNzZWQoKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLmZhdm9yaXRlQnV0dG9uQ2xpY2tlZCA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PC9DdXN0b21MaXN0SXRlbT5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0PC9MaXN0PlxuXHRcdFx0XHRcdFx0XHRcdF1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvRmxleEJveD5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L1BvcG92ZXI+XG5cdFx0KSBhcyBQb3BvdmVyO1xuXHR9XG5cblx0cHJpdmF0ZSByZW1vdmVGcm9tRmF2b3JpdGVzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmZhdm9yaXRlUXVlcmllcyA9IHRoaXMuc3RhdGUuZmF2b3JpdGVRdWVyaWVzLmZpbHRlcigoZGF0YSkgPT4gZGF0YS50b0xvd2VyQ2FzZSgpICE9PSBxdWVyeS50b0xvd2VyQ2FzZSgpKTtcblx0fVxuXG5cdHByaXZhdGUgYWRkVG9GYXZvcml0ZXMocXVlcnk6IHN0cmluZyk6IHZvaWQge1xuXHRcdGNvbnN0IG5ld0Zhdm9yaXRlID0gW3F1ZXJ5XS5jb25jYXQodGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuY29uY2F0KCkpO1xuXHRcdGlmIChuZXdGYXZvcml0ZS5sZW5ndGggPiA1KSB7XG5cdFx0XHRuZXdGYXZvcml0ZS5wb3AoKTtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMgPSBuZXdGYXZvcml0ZTtcblx0fVxuXG5cdHByaXZhdGUgaXNDdXJyZW50UXVlcnlGYXZvcml0ZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgY3VycmVudFF1ZXJ5ID0gdGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS5mYXZvcml0ZVF1ZXJpZXMuc29tZSgoZmF2KSA9PiBmYXYudG9Mb3dlckNhc2UoKS50cmltKCkgPT09IGN1cnJlbnRRdWVyeSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UXVlcnlTdWNjZXNzKHF1ZXJ5OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLmN1cnJlbnRFeGVjdXRlZFF1ZXJ5ID0gcXVlcnk7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IHRydWU7XG5cdFx0dGhpcy51cGRhdGVGYXZvcml0ZUljb24oKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRRdWVyeUZhaWx1cmUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkgPSBcIlwiO1xuXHR9XG5cblx0cHVibGljIGNsZWFyUXVlcnlTdGF0dXMoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5pc1F1ZXJ5U3VjY2Vzc2Z1bCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuY3VycmVudEV4ZWN1dGVkUXVlcnkgPSBcIlwiO1xuXHR9XG5cblx0cHJpdmF0ZSBvbkZhdm9yaXRlSWNvblByZXNzKCk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5zdGF0ZS5mYXZvcml0ZUljb25FbmFibGVkKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdC8vIFRvZ2dsZSBmYXZvcml0ZSBzdGF0dXMgZm9yIHRoZSBjdXJyZW50IHF1ZXJ5XG5cdFx0Y29uc3QgaXNGYXZvcml0ZWQgPSB0aGlzLmlzQ3VycmVudFF1ZXJ5RmF2b3JpdGVkKCk7XG5cdFx0aWYgKGlzRmF2b3JpdGVkKSB7XG5cdFx0XHR0aGlzLnJlbW92ZUZyb21GYXZvcml0ZXModGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuYWRkVG9GYXZvcml0ZXModGhpcy5zdGF0ZS5jdXJyZW50RXhlY3V0ZWRRdWVyeSk7XG5cdFx0fVxuXHR9XG5cblx0c3RhdGljIHJlbmRlcihybTogUmVuZGVyTWFuYWdlciwgY29udHJvbDogRWFzeUZpbHRlcklucHV0KTogdm9pZCB7XG5cdFx0cmV0dXJuIGpzeC5yZW5kZXJVc2luZ1JlbmRlck1hbmFnZXIocm0sIGNvbnRyb2wsICgpID0+IHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxzcGFuIHJlZj17Y29udHJvbH0gY2xhc3M9e1wic2FwRkVFYXN5RmlsdGVySW5wdXRcIn0+XG5cdFx0XHRcdFx0e2NvbnRyb2wuJHNlYXJjaElucHV0fVxuXHRcdFx0XHQ8L3NwYW4+XG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMENxQkEsZUFBZSxJQUFBQyxJQUFBLEdBRG5DQyxjQUFjLENBQUMsNENBQTRDLENBQUMsRUFBQUMsS0FBQSxHQUUzREMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRSxhQUFhO0lBQUVDLFFBQVEsRUFBRSxLQUFLO0lBQUVDLFNBQVMsRUFBRTtFQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR3RFQyxRQUFRLENBQUM7SUFBRUosSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHNUJELFFBQVEsQ0FBQztJQUFFSixJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQU0sS0FBQSxHQUczQkMsS0FBSyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdQRCxLQUFLLENBQUMsQ0FBQyxFQUFBRSxLQUFBLEdBR1BGLEtBQUssQ0FBQyxDQUFDLEVBQUFHLEtBQUEsR0FhUEMsV0FBVyxDQUFDLENBQUMsRUFBQWYsSUFBQSxDQUFBZ0IsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBeUJkLFNBQUFuQixnQkFBWW9CLFVBQXVFLEVBQUVDLE1BQXlCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQy9HQSxLQUFBLEdBQUFILFFBQUEsQ0FBQUksSUFBQSxPQUFNSCxVQUFVLEVBQVlDLE1BQU0sQ0FBQztNQUFDRywwQkFBQSxDQUFBRixLQUFBLGtCQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSx1QkFBQUssWUFBQSxFQUFBTCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsa0JBQUFNLFlBQUEsRUFBQU4sS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGtCQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxnQkFBQVEsWUFBQSxFQUFBUixLQUFBO01BQUFBLEtBQUEsQ0E1QjdCUyxxQkFBcUIsR0FBRyxLQUFLO01BQUFQLDBCQUFBLENBQUFGLEtBQUEsV0FBQVUsWUFBQSxFQUFBVixLQUFBO01BNkJwQ0EsS0FBQSxDQUFLVyxVQUFVLENBQUMsQ0FBQztNQUFDLE9BQUFYLEtBQUE7SUFDbkI7SUFBQ1ksUUFBQSxHQUFBbEMsZUFBQTtJQUFBbUMsY0FBQSxDQUFBbkMsZUFBQSxFQUFBbUIsUUFBQTtJQUFBLElBQUFpQixNQUFBLEdBQUFwQyxlQUFBLENBQUFxQyxTQUFBO0lBQUFELE1BQUEsQ0FFTUUsUUFBUSxHQUFmLFNBQU9BLFFBQVFBLENBQUEsRUFBVztNQUN6QixPQUFPLElBQUksQ0FBQ0MsWUFBWSxDQUFDRCxRQUFRLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBQUFGLE1BQUEsQ0FFTUksZ0JBQWdCLEdBQXZCLFNBQU9BLGdCQUFnQkEsQ0FBQSxFQUFZO01BQ2xDLE9BQU8sSUFBSSxDQUFDQyxLQUFLLENBQUNELGdCQUFnQixDQUFDRSxPQUFPLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBQUFOLE1BQUEsQ0FFRE8sUUFBUSxHQUFSLFNBQUFBLFFBQVFBLENBQUNDLEtBQWEsRUFBUTtNQUM3QixJQUFJLENBQUNMLFlBQVksQ0FBQ0ksUUFBUSxDQUFDQyxLQUFLLENBQUM7TUFDakMsT0FBTyxJQUFJO0lBQ1osQ0FBQztJQUFBUixNQUFBLENBRURTLGNBQWMsR0FBZCxTQUFBQSxjQUFjQSxDQUFDRCxLQUFhLEVBQVE7TUFDbkMsSUFBSSxDQUFDTCxZQUFZLENBQUNNLGNBQWMsQ0FBQ0QsS0FBSyxDQUFDO01BQ3ZDLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFBQVIsTUFBQSxDQUVNVSxjQUFjLEdBQXJCLFNBQU9BLGNBQWNBLENBQUEsRUFBVztNQUMvQixPQUFPLElBQUksQ0FBQ1AsWUFBWSxDQUFDTyxjQUFjLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBQUFWLE1BQUEsQ0FFREgsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUEsRUFBUztNQUNsQixJQUFJLENBQUNRLEtBQUssQ0FBQ00sa0JBQWtCLEdBQUcsSUFBSSxDQUFDQyxpQkFBaUIsSUFBSSxFQUFFO01BQzVELElBQUksQ0FBQ0MsY0FBYyxHQUFHQyxHQUFHLENBQUNDLG9CQUFvQixDQUFDLGlCQUFpQixDQUFFO01BQ2xFLElBQUksQ0FBQ0MsdUJBQXVCLEdBQUdDLGdCQUFnQixDQUFDQyxXQUFXLENBQUMsQ0FBQztNQUM3RCxJQUFJLENBQUNDLFdBQVcsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFBQW5CLE1BQUEsQ0FFRG9CLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDQyxPQUFlLEVBQVE7TUFDbkMsSUFBSSxDQUFDbEIsWUFBWSxDQUFDbUIsYUFBYSxDQUFDQyxVQUFVLENBQUNDLE9BQU8sQ0FBQztNQUNuRCxJQUFJLENBQUNyQixZQUFZLENBQUNzQixpQkFBaUIsQ0FBQ0osT0FBTyxDQUFDO01BQzVDLElBQUksQ0FBQ2xCLFlBQVksQ0FBQ3VCLHFCQUFxQixDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUFBMUIsTUFBQSxDQUVEMkIsVUFBVSxHQUFWLFNBQUFBLFVBQVVBLENBQUEsRUFBUztNQUNsQixJQUFJLENBQUN4QixZQUFZLENBQUNtQixhQUFhLENBQUNDLFVBQVUsQ0FBQ0ssSUFBSSxDQUFDO01BQ2hELElBQUksQ0FBQ3pCLFlBQVksQ0FBQzBCLHNCQUFzQixDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUFBN0IsTUFBQSxDQUVEbUIsV0FBVyxHQUFYLFNBQUFBLFdBQVdBLENBQUEsRUFBUztNQUNuQixJQUFJLENBQUNoQixZQUFZLEdBQ2hCMkIsSUFBQSxDQUFDQyxLQUFLO1FBQ0xDLEtBQUssRUFBQyxNQUFNO1FBQ1pDLGFBQWEsRUFBRUMsR0FBRyxDQUFDQyxTQUFTLENBQUMsSUFBSSxDQUFDOUIsS0FBSyxFQUFFLG1CQUFtQixDQUFDLENBQUU7UUFDL0QrQixhQUFhLEVBQUVELFNBQVMsQ0FBQyxJQUFJLENBQUM5QixLQUFLLEVBQUUsbUJBQW1CLENBQUU7UUFDMURnQyxnQkFBZ0IsRUFBRUYsU0FBUyxDQUFDLElBQUksQ0FBQzlCLEtBQUssRUFBRSxrQkFBa0IsQ0FBRTtRQUM1RGlDLGdCQUFnQixFQUFFQSxDQUFBLEtBQVk7VUFDN0IsSUFBSSxDQUFDQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQzNCLENBQUU7UUFDRkMsTUFBTSxFQUFHQyxDQUFDLElBQVc7VUFDcEIsSUFBSSxDQUFDQyxTQUFTLENBQUMsY0FBYyxFQUFFO1lBQUVDLEtBQUssRUFBRUYsQ0FBQyxDQUFDRyxZQUFZLENBQUMsT0FBTztVQUFFLENBQUMsQ0FBQztRQUNuRSxDQUFFO1FBQ0ZDLFVBQVUsRUFBR0osQ0FBd0IsSUFBVztVQUMvQyxJQUFJLENBQUNwQyxLQUFLLENBQUN5QyxZQUFZLEdBQUcsSUFBSTtVQUM5QjtVQUNBLElBQUksQ0FBQ3pDLEtBQUssQ0FBQzBDLGlCQUFpQixHQUFHLEtBQUs7VUFDcEMsSUFBSU4sQ0FBQyxDQUFDRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFO1lBQ25DLElBQUksQ0FBQ3ZDLEtBQUssQ0FBQzJDLG9CQUFvQixHQUFHLEVBQUU7WUFDcEMsSUFBSSxDQUFDdkMsY0FBYyxDQUFDLElBQUksQ0FBQ0ksY0FBYyxDQUFDb0MsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7VUFDOUU7VUFDQSxJQUFJLENBQUNQLFNBQVMsQ0FBQyxZQUFZLENBQUM7VUFDNUIsSUFBSSxDQUFDRCxDQUFDLENBQUNTLFNBQVMsQ0FBQyxDQUFDLENBQUNoRCxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDaUQsZ0JBQWdCLEVBQUVDLE1BQU0sQ0FBQyxDQUFDLElBQUksS0FBSyxDQUFDLEVBQUU7WUFDN0UsSUFBSSxDQUFDQyxxQkFBcUIsQ0FBQyxDQUFDO1VBQzdCO1VBQ0EsSUFBSSxJQUFJLENBQUNsRCxZQUFZLENBQUNtRCxhQUFhLENBQUMsQ0FBQyxLQUFLL0IsVUFBVSxDQUFDQyxPQUFPLEVBQUU7WUFDN0QsSUFBSSxDQUFDRyxVQUFVLENBQUMsQ0FBQztVQUNsQjtRQUNELENBQUU7UUFDRjRCLFdBQVcsRUFBRSxJQUFJLENBQUMxQyxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCO01BQUUsQ0FDdEUsQ0FDRDtNQUVELE1BQU1PLGVBQWUsR0FBRyxJQUFJLENBQUNDLHFCQUFxQixDQUFDLENBQUM7TUFDcEQsSUFBSSxDQUFDTixnQkFBZ0IsR0FBR0ssZUFBZTtNQUV2QyxJQUFJLENBQUNyRCxZQUFZLENBQUN1RCxZQUFZLENBQUNGLGVBQWUsQ0FBQztNQUMvQyxJQUFJLENBQUNyRCxZQUFZLENBQUN3RCxnQkFBZ0IsQ0FBQztRQUNsQ0MsT0FBTyxFQUFHbkIsQ0FBZ0IsSUFBSztVQUM5QixJQUFJQSxDQUFDLENBQUNvQixHQUFHLEtBQUssT0FBTyxFQUFFO1lBQ3RCLElBQUksQ0FBQ0MsY0FBYyxDQUFDLENBQUM7VUFDdEI7VUFDQSxJQUFJLElBQUksQ0FBQ1gsZ0JBQWdCLElBQUksSUFBSSxDQUFDaEQsWUFBWSxDQUFDRCxRQUFRLENBQUMsQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQ2lELGdCQUFnQixDQUFDWSxLQUFLLENBQUMsQ0FBQztVQUM5QjtRQUNELENBQUM7UUFDREMsU0FBUyxFQUFHdkIsQ0FBZ0IsSUFBSztVQUNoQyxJQUNDQSxDQUFDLENBQUNvQixHQUFHLEtBQUssS0FBSyxJQUNmLElBQUksQ0FBQzFELFlBQVksRUFBRUQsUUFBUSxDQUFDLENBQUMsQ0FBQytELE1BQU0sS0FBSyxDQUFDLElBQzFDLElBQUksQ0FBQzlELFlBQVksRUFBRUQsUUFBUSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUNDLFlBQVksRUFBRU8sY0FBYyxDQUFDLENBQUMsSUFDckUsSUFBSSxDQUFDUCxZQUFZLEVBQUVPLGNBQWMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDRyxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFDL0Y7WUFDRFIsQ0FBQyxDQUFDeUIsY0FBYyxDQUFDLENBQUM7WUFDbEIsSUFBSSxDQUFDL0QsWUFBWSxFQUFFSSxRQUFRLENBQUMsSUFBSSxDQUFDSixZQUFZLEVBQUVPLGNBQWMsQ0FBQyxDQUFDLENBQUM7WUFDaEUsSUFBSSxDQUFDZ0MsU0FBUyxDQUFDLFlBQVksQ0FBQztVQUM3QixDQUFDLE1BQU0sSUFBSUQsQ0FBQyxDQUFDb0IsR0FBRyxLQUFLLFdBQVcsRUFBRTtZQUNqQyxNQUFNTSxlQUFlLEdBQUcsSUFBSSxDQUFDaEIsZ0JBQWdCLEVBQUVpQixVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM5RCxNQUFNQyxjQUFjLEdBQUlGLGVBQWUsQ0FBYUcsUUFBUSxDQUFDLENBQUM7WUFDOURELGNBQWMsRUFBRUUsSUFBSSxDQUFFQyxJQUFJLElBQUtBLElBQUksQ0FBQ0MsV0FBVyxDQUFDLENBQUMsS0FBS0QsSUFBSSxDQUFDRSxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1VBQzNFO1FBQ0QsQ0FBQztRQUNEQyxLQUFLLEVBQUUsTUFBQUEsQ0FBQSxLQUFZO1VBQ2xCLE1BQU0sSUFBSSxDQUFDdEIscUJBQXFCLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0R1QixTQUFTLEVBQUUsTUFBQUEsQ0FBQSxLQUFZO1VBQ3RCLE1BQU0sSUFBSSxDQUFDdkIscUJBQXFCLENBQUMsQ0FBQztRQUNuQztNQUNELENBQUMsQ0FBQztNQUNGLElBQUksQ0FBQ0YsZ0JBQWdCLENBQUNRLGdCQUFnQixDQUFDO1FBQ3RDSyxTQUFTLEVBQUd2QixDQUFnQixJQUFLO1VBQ2hDLE1BQU1vQyxVQUFVLEdBQUlwQyxDQUFDLENBQUNxQyxNQUFNLEVBQWtCQyxTQUFTO1VBQ3ZELE1BQU1DLFFBQVEsR0FBSXZDLENBQUMsQ0FBQ3FDLE1BQU0sRUFBa0JHLEVBQUU7VUFDOUMsUUFBUXhDLENBQUMsQ0FBQ29CLEdBQUc7WUFDWixLQUFLLE9BQU87Y0FDWCxJQUFJLENBQUMxRCxZQUFZLEVBQUVJLFFBQVEsQ0FBQ3NFLFVBQVUsQ0FBQztjQUN2QztZQUNELEtBQUssUUFBUTtjQUNaLElBQUlHLFFBQVEsRUFBRUUsUUFBUSxDQUFDLHdCQUF3QixDQUFDLEVBQUU7Z0JBQ2pELElBQUksQ0FBQzdFLEtBQUssQ0FBQzhFLGVBQWUsR0FBRyxJQUFJLENBQUM5RSxLQUFLLENBQUM4RSxlQUFlLENBQUNDLE1BQU0sQ0FDNURDLElBQUksSUFBS0EsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQyxLQUFLVCxVQUFVLENBQUNTLFdBQVcsQ0FBQyxDQUN6RCxDQUFDO2NBQ0YsQ0FBQyxNQUFNO2dCQUNOLElBQUksQ0FBQ2pGLEtBQUssQ0FBQ2tGLGFBQWEsR0FBRyxJQUFJLENBQUNsRixLQUFLLENBQUNrRixhQUFhLENBQUNILE1BQU0sQ0FBRXpDLEtBQUssSUFBS0EsS0FBSyxLQUFLa0MsVUFBVSxDQUFDO2NBQzVGO2NBQ0E7WUFDRCxLQUFLLFFBQVE7Y0FDWixJQUFJLElBQUksQ0FBQzFCLGdCQUFnQixFQUFFQyxNQUFNLENBQUMsQ0FBQyxFQUFFO2dCQUNwQyxJQUFJLENBQUNELGdCQUFnQixDQUFDWSxLQUFLLENBQUMsQ0FBQztjQUM5QjtjQUNBO1VBQ0Y7UUFDRCxDQUFDO1FBQ0R5QixnQkFBZ0IsRUFBRUEsQ0FBQSxLQUFNO1VBQ3ZCLElBQUksQ0FBQ3hFLHVCQUF1QixFQUFFeUUsUUFBUSxDQUNyQyxJQUFJLENBQUM1RSxjQUFjLENBQUNvQyxPQUFPLENBQUMsNENBQTRDLENBQUMsRUFDekV5QyxvQkFBb0IsQ0FBQ0MsU0FDdEIsQ0FBQztRQUNGO01BQ0QsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBM0YsTUFBQSxDQUVhcUQscUJBQXFCLEdBQW5DLGVBQWNBLHFCQUFxQkEsQ0FBQSxFQUFrQjtNQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDbEQsWUFBWSxFQUFFRCxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDaUQsZ0JBQWdCLElBQUksQ0FBQyxJQUFJLENBQUNBLGdCQUFnQixFQUFFQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDbkc7UUFDQSxJQUFJLENBQUMsSUFBSSxDQUFDd0Msb0JBQW9CLEVBQUU7VUFDL0IsTUFBTSxJQUFJLENBQUNDLHdCQUF3QixDQUFDLENBQUM7UUFDdEM7UUFDQSxJQUFJLENBQUN4RixLQUFLLENBQUNELGdCQUFnQixHQUFHLElBQUksQ0FBQ3dGLG9CQUFvQixFQUFFeEYsZ0JBQWdCLENBQUMsQ0FBQyxJQUFJLEtBQUs7UUFDcEYsSUFBSSxDQUFDQyxLQUFLLENBQUM4RSxlQUFlLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQ1Msb0JBQW9CLEVBQUVFLGtCQUFrQixDQUFDLENBQUMsS0FBSyxFQUFFO1FBQzFGLElBQUksQ0FBQ3pGLEtBQUssQ0FBQ2tGLGFBQWEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDSyxvQkFBb0IsRUFBRUcsZ0JBQWdCLENBQUMsQ0FBQyxLQUFLLEVBQUU7UUFDdEYsSUFBSSxDQUFDNUMsZ0JBQWdCLEVBQUU2QyxNQUFNLENBQUMsSUFBSSxDQUFDN0YsWUFBWSxDQUFDO01BQ2pEO0lBQ0QsQ0FBQztJQUFBSCxNQUFBLENBRURpRyxlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQ3hELENBQW9CLEVBQVE7TUFDM0MsSUFBSSxDQUFDVSxnQkFBZ0IsRUFBRVksS0FBSyxDQUFDLENBQUM7TUFDOUIsSUFBSSxDQUFDNUQsWUFBWSxFQUFFSSxRQUFRLENBQUNrQyxDQUFDLENBQUNTLFNBQVMsQ0FBQyxDQUFDLENBQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7TUFDcEQsSUFBSSxDQUFDYSxjQUFjLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQUE5RCxNQUFBLENBRUQ4RCxjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQSxFQUFTO01BQ3RCLElBQUksQ0FBQ1gsZ0JBQWdCLEVBQUVZLEtBQUssQ0FBQyxDQUFDO01BQzlCLElBQUksQ0FBQzFELEtBQUssQ0FBQ3lDLFlBQVksR0FBRyxLQUFLO01BQy9CLElBQUlvRCxVQUFVLEdBQUcsSUFBSSxDQUFDL0YsWUFBWSxFQUFFRCxRQUFRLENBQUMsQ0FBQztNQUM5QyxJQUFJZ0csVUFBVSxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMvRixZQUFZLENBQUNPLGNBQWMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDRyxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsRUFBRTtRQUN6SGlELFVBQVUsR0FBRyxJQUFJLENBQUMvRixZQUFZLENBQUNPLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQ1AsWUFBWSxFQUFFSSxRQUFRLENBQUMyRixVQUFVLENBQUM7TUFDeEM7TUFDQSxJQUFJLENBQUMvRixZQUFZLEVBQUVzQixpQkFBaUIsQ0FBQyxFQUFFLENBQUM7TUFDeEMsSUFBSSxDQUFDdEIsWUFBWSxFQUFFbUIsYUFBYSxDQUFDLE1BQU0sQ0FBQztNQUN4QyxJQUFJLENBQUNvQixTQUFTLENBQUMsY0FBYyxFQUFFO1FBQUVDLEtBQUssRUFBRXVEO01BQVcsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFBQWxHLE1BQUEsQ0FFRG1HLGNBQWMsR0FBZCxTQUFBQSxjQUFjQSxDQUFDQyxXQUErQixFQUFRO01BQ3JEO01BQ0FBLFdBQVcsR0FBR0EsV0FBVyxFQUFFQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQztNQUVqRCxNQUFNQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUNqRyxLQUFLLENBQUNrRixhQUFhLENBQUNnQixTQUFTLENBQUU1RCxLQUFLLElBQUtBLEtBQUssQ0FBQzJDLFdBQVcsQ0FBQyxDQUFDLEtBQUtjLFdBQVcsRUFBRWQsV0FBVyxDQUFDLENBQUMsQ0FBQztNQUMxSCxJQUFJYyxXQUFXLElBQUlFLGdCQUFnQixLQUFLLENBQUMsQ0FBQyxFQUFFO1FBQzNDLElBQUksQ0FBQ2pHLEtBQUssQ0FBQ2tGLGFBQWEsR0FBRyxDQUFDYSxXQUFXLENBQUMsQ0FBQ0ksTUFBTSxDQUFDLElBQUksQ0FBQ25HLEtBQUssQ0FBQ2tGLGFBQWEsQ0FBQztRQUN6RSxJQUFJLElBQUksQ0FBQ2xGLEtBQUssQ0FBQ2tGLGFBQWEsQ0FBQ3RCLE1BQU0sR0FBRyxDQUFDLEVBQUU7VUFDeEMsSUFBSSxDQUFDNUQsS0FBSyxDQUFDa0YsYUFBYSxHQUFHLElBQUksQ0FBQ2xGLEtBQUssQ0FBQ2tGLGFBQWEsQ0FBQ2tCLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hFO01BQ0QsQ0FBQyxNQUFNLElBQUlMLFdBQVcsRUFBRTtRQUN2QixNQUFNYixhQUFhLEdBQUcsSUFBSSxDQUFDbEYsS0FBSyxDQUFDa0YsYUFBYSxDQUFDSCxNQUFNLENBQUV6QyxLQUFLLElBQUtBLEtBQUssQ0FBQzJDLFdBQVcsQ0FBQyxDQUFDLEtBQUtjLFdBQVcsRUFBRWQsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUNwSEMsYUFBYSxDQUFDbUIsT0FBTyxDQUFDTixXQUFXLENBQUM7UUFDbEMsSUFBSSxDQUFDL0YsS0FBSyxDQUFDa0YsYUFBYSxHQUFHQSxhQUFhO01BQ3pDO0lBQ0QsQ0FBQztJQUFBdkYsTUFBQSxDQUVEMkcsYUFBYSxHQUFiLFNBQUFBLGFBQWFBLENBQUEsRUFBb0M7TUFBQSxJQUFuQ0MsWUFBc0IsR0FBQUMsU0FBQSxDQUFBNUMsTUFBQSxRQUFBNEMsU0FBQSxRQUFBQyxTQUFBLEdBQUFELFNBQUEsTUFBRyxFQUFFO01BQ3hDLElBQUlELFlBQVksQ0FBQzFCLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJMEIsWUFBWSxDQUFDMUIsUUFBUSxDQUFDLGVBQWUsQ0FBQyxFQUFFO1FBQ3ZGLElBQUksQ0FBQ1Usb0JBQW9CLEVBQUVtQixrQkFBa0IsQ0FBQyxJQUFJLENBQUMxRyxLQUFLLENBQUM4RSxlQUFlLENBQUM7UUFDekUsSUFBSSxDQUFDUyxvQkFBb0IsRUFBRW9CLGdCQUFnQixDQUFDLElBQUksQ0FBQzNHLEtBQUssQ0FBQ2tGLGFBQWEsQ0FBQzBCLEdBQUcsQ0FBRXRFLEtBQUssSUFBS0EsS0FBSyxDQUFDLENBQUM7UUFDM0YsSUFBSSxDQUFDdEMsS0FBSyxDQUFDNkcseUJBQXlCLEdBQUcsSUFBSSxDQUFDN0csS0FBSyxDQUFDa0YsYUFBYSxDQUFDMEIsR0FBRyxDQUFFRSxXQUFXLElBQUs7VUFDcEYsT0FBTztZQUNOQyxJQUFJLEVBQUVELFdBQVc7WUFDakJFLFVBQVUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDaEgsS0FBSyxDQUFDOEUsZUFBZSxDQUFDWixJQUFJLENBQUUrQyxhQUFhLElBQUtBLGFBQWEsS0FBS0gsV0FBVztVQUMvRixDQUFDO1FBQ0YsQ0FBQyxDQUFDO01BQ0g7TUFDQTtNQUNBLElBQUlQLFlBQVksQ0FBQzFCLFFBQVEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJMEIsWUFBWSxDQUFDMUIsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEVBQUU7UUFDOUYsSUFBSSxDQUFDcUMsa0JBQWtCLENBQUMsQ0FBQztNQUMxQjtJQUNELENBQUM7SUFBQXZILE1BQUEsQ0FFT3VILGtCQUFrQixHQUExQixTQUFRQSxrQkFBa0JBLENBQUEsRUFBUztNQUNsQyxNQUFNQyxXQUFXLEdBQUcsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQyxDQUFDO01BQ2xELElBQUksQ0FBQ3BILEtBQUssQ0FBQ3FILGdCQUFnQixHQUFHRixXQUFXLEdBQUcscUJBQXFCLEdBQUcseUJBQXlCO01BQzdGLElBQUksQ0FBQ25ILEtBQUssQ0FBQ3NILG1CQUFtQixHQUFHSCxXQUFXLElBQUksSUFBSSxDQUFDbkgsS0FBSyxDQUFDOEUsZUFBZSxDQUFDbEIsTUFBTSxHQUFHLENBQUM7TUFDckYsSUFBSSxDQUFDOUQsWUFBWSxFQUFFeUgsZ0JBQWdCLENBQUMsMkJBQTJCLEVBQUUsQ0FBQyxJQUFJLENBQUN2SCxLQUFLLENBQUNzSCxtQkFBbUIsQ0FBQztNQUNqRyxNQUFNRSxZQUFZLEdBQUcsSUFBSSxDQUFDMUgsWUFBWSxFQUFFMkgsU0FBUyxDQUFDLENBQUMsRUFBRUMsYUFBYSxDQUFDLGdDQUFnQyxDQUF1QjtNQUMxSCxJQUFJRixZQUFZLEVBQUU7UUFDakJBLFlBQVksQ0FBQ0csS0FBSyxHQUFHLElBQUksQ0FBQzNILEtBQUssQ0FBQ3NILG1CQUFtQixHQUNoRCxJQUFJLENBQUM5RyxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsR0FDeEQsSUFBSSxDQUFDcEMsY0FBYyxDQUFDb0MsT0FBTyxDQUFDLG9DQUFvQyxDQUFDO01BQ3JFO0lBQ0QsQ0FBQztJQUFBakQsTUFBQSxDQUVLNkYsd0JBQXdCLEdBQTlCLGVBQU1BLHdCQUF3QkEsQ0FBQSxFQUFrQjtNQUMvQyxJQUFJO1FBQ0gsSUFBSSxDQUFDRCxvQkFBb0IsR0FBRyxNQUFNcUMsb0JBQW9CLENBQUMvRyxXQUFXLENBQUMsSUFBSSxDQUFDZ0gsS0FBSyxJQUFJLGNBQWMsQ0FBQztNQUNqRyxDQUFDLENBQUMsT0FBT0MsS0FBSyxFQUFFO1FBQ2ZDLEdBQUcsQ0FBQ0QsS0FBSyxDQUFDLDJEQUEyRCxFQUFFQSxLQUFlLENBQUM7TUFDeEY7SUFDRCxDQUFDO0lBQUFuSSxNQUFBLENBRUR5RCxxQkFBcUIsR0FBckIsU0FBQUEscUJBQXFCQSxDQUFBLEVBQVk7TUFDaEMsT0FDQzNCLElBQUEsQ0FBQ3VHLE9BQU87UUFDUHBELEVBQUUsRUFBRSxJQUFJLENBQUNxRCxLQUFLLENBQUMsQ0FBQyxHQUFHLGtCQUFtQjtRQUN0Q0MsVUFBVSxFQUFFLEtBQU07UUFDbEJDLG1CQUFtQixFQUFFLEtBQU07UUFDM0JDLFNBQVMsRUFBRUMsYUFBYSxDQUFDQyxNQUFPO1FBQ2hDQyxTQUFTLEVBQUUsS0FBTTtRQUNqQkMsWUFBWSxFQUFFLElBQUksQ0FBQzFJLFlBQWE7UUFDaEMySSxLQUFLLEVBQUUsc0JBQXVCO1FBQzlCQyxPQUFPLEVBQUUsSUFBSSxDQUFDMUksS0FBSyxDQUFDTSxrQkFBa0IsQ0FBQ3NELE1BQU0sR0FBRyxDQUFDLElBQUkrRSxLQUFLLENBQUM3RyxTQUFTLENBQUMsSUFBSSxDQUFDOUIsS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUUsSUFBSSxDQUFFO1FBQUE0SSxRQUFBLEVBRTNHO1VBQ0FDLE9BQU8sRUFDTnBILElBQUEsQ0FBQ3FILE9BQU87WUFBQ0MsU0FBUyxFQUFFQyxhQUFhLENBQUNDLE1BQU87WUFBQ1IsS0FBSyxFQUFFLHFCQUFzQjtZQUFDUyxVQUFVLEVBQUUsTUFBTztZQUFBTixRQUFBLEVBQ3pGO2NBQ0FPLEtBQUssRUFBRSxDQUNOMUgsSUFBQSxDQUFDMkgsS0FBSztnQkFDTEMsVUFBVSxFQUFFQyxVQUFVLENBQUNDLEVBQUc7Z0JBQzFCeEMsSUFBSSxFQUFFLElBQUksQ0FBQ3ZHLGNBQWMsQ0FBQ29DLE9BQU8sQ0FBQyx5Q0FBeUMsQ0FBRTtnQkFDN0U2RixLQUFLLEVBQUUsMEJBQTJCO2dCQUNsQ0MsT0FBTyxFQUFFLElBQUksQ0FBQzFJLEtBQUssQ0FBQ00sa0JBQWtCLENBQUNzRCxNQUFNLEdBQUc7Y0FBRSxDQUNsRCxDQUFDLEVBQ0ZuQyxJQUFBLENBQUMrSCxJQUFJO2dCQUNKZixLQUFLLEVBQUUscUJBQXNCO2dCQUM3QlUsS0FBSyxFQUFFckgsU0FBUyxDQUFDLElBQUksQ0FBQzlCLEtBQUssRUFBRSxvQkFBb0IsQ0FBRTtnQkFDbkR5SixJQUFJLEVBQUVDLFFBQVEsQ0FBQ0MsSUFBSztnQkFDcEJqQixPQUFPLEVBQUUsSUFBSSxDQUFDMUksS0FBSyxDQUFDTSxrQkFBa0IsQ0FBQ3NELE1BQU0sR0FBRyxDQUFFO2dCQUFBZ0YsUUFBQSxFQUVqRDtrQkFDQU8sS0FBSyxFQUFFQSxDQUFDdkUsRUFBVSxFQUFFZ0YsR0FBWSxLQUF1QjtvQkFDdEQsT0FDQ25JLElBQUEsQ0FBQ29JLE1BQU07c0JBQ05wQixLQUFLLEVBQUUsb0JBQXFCO3NCQUM1QjFCLElBQUksRUFBRTZDLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLENBQUU7c0JBQ3RCQyxLQUFLLEVBQUUsSUFBSSxDQUFDbkUsZUFBZSxDQUFDb0UsSUFBSSxDQUFDLElBQUk7b0JBQUUsQ0FDdkMsQ0FBQztrQkFFSjtnQkFDRDtjQUFDLENBQ0ksQ0FBQyxFQUNQdkksSUFBQSxDQUFDMkgsS0FBSztnQkFDTHhFLEVBQUUsRUFBRSxJQUFJLENBQUNxRCxLQUFLLENBQUMsQ0FBQyxHQUFHLDBCQUEyQjtnQkFDOUNvQixVQUFVLEVBQUVDLFVBQVUsQ0FBQ0MsRUFBRztnQkFDMUJ4QyxJQUFJLEVBQUUsSUFBSSxDQUFDdkcsY0FBYyxDQUFDb0MsT0FBTyxDQUFDLHNDQUFzQyxDQUFFO2dCQUMxRTZGLEtBQUssRUFBRSwwQkFBMkI7Z0JBQ2xDQyxPQUFPLEVBQUVDLEtBQUssQ0FBQzdHLFNBQVMsQ0FBQyxJQUFJLENBQUM5QixLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJO2NBQUUsQ0FDaEUsQ0FBQyxFQUNGeUIsSUFBQSxDQUFDd0ksSUFBSTtnQkFDSmQsS0FBSyxFQUFFckgsU0FBUyxDQUFDLElBQUksQ0FBQzlCLEtBQUssRUFBRSxpQkFBaUIsQ0FBRTtnQkFDaEQwSSxPQUFPLEVBQUVDLEtBQUssQ0FBQzdHLFNBQVMsQ0FBQyxJQUFJLENBQUM5QixLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUU7Z0JBQUE0SSxRQUFBLEVBRS9EO2tCQUNBc0IsTUFBTSxFQUNMekksSUFBQSxDQUFDMEksa0JBQWtCO29CQUNsQnhDLEtBQUssRUFBRSxJQUFJLENBQUNuSCxjQUFjLENBQUNvQyxPQUFPLENBQUMsNENBQTRDLENBQUU7b0JBQ2pGd0gsZ0JBQWdCLEVBQUVDLHNCQUFzQixDQUFDQyxVQUFXO29CQUNwREMsZ0JBQWdCLEVBQUVDLHNCQUFzQixDQUFDQyxTQUFVO29CQUNuREMsV0FBVyxFQUFFLElBQUksQ0FBQ2xLLGNBQWMsQ0FBQ29DLE9BQU8sQ0FDdkMsa0RBQ0Q7a0JBQUUsQ0FDRixDQUNEO2tCQUNEdUcsS0FBSyxFQUFFQSxDQUFDdkUsRUFBVSxFQUFFZ0YsR0FBWSxLQUF1QjtvQkFDdEQsT0FDQ25JLElBQUEsQ0FBQ2tKLGNBQWM7c0JBQ2QvRixFQUFFLEVBQUVBLEVBQUUsR0FBRyx5QkFBMEI7c0JBQ25DNkQsS0FBSyxFQUFFLHVCQUF3QjtzQkFDL0JtQyxjQUFjLEVBQUUsQ0FBQ2hHLEVBQUUsR0FBRywwQkFBMEIsQ0FBRTtzQkFDbERpRyxVQUFVLEVBQUUsQ0FBQ3BKLElBQUEsQ0FBQ3FKLFVBQVU7d0JBQWMzSyxLQUFLLEVBQUV5SixHQUFHLENBQUNFLFNBQVMsQ0FBQztzQkFBRSxHQUEvQixNQUFpQyxDQUFDLENBQUU7c0JBQ2xFQyxLQUFLLEVBQUVBLENBQUEsS0FBWTt3QkFDbEIsSUFBSSxDQUFDakssWUFBWSxDQUFDSSxRQUFRLENBQUMwSixHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDLENBQUM7d0JBQzNDLElBQUksQ0FBQ3JHLGNBQWMsQ0FBQyxDQUFDO3NCQUN0QixDQUFFO3NCQUFBbUYsUUFBQSxFQUVGbUMsS0FBQSxDQUFDakMsT0FBTzt3QkFDUG5ILEtBQUssRUFBRSxNQUFPO3dCQUNkb0gsU0FBUyxFQUFFQyxhQUFhLENBQUNnQyxHQUFJO3dCQUM3QkMsVUFBVSxFQUFFQyxjQUFjLENBQUNDLE1BQU87d0JBQ2xDQyxjQUFjLEVBQUVDLGtCQUFrQixDQUFDQyxZQUFhO3dCQUNoRHBDLFVBQVUsRUFBRSxNQUFPO3dCQUNuQnRFLEVBQUUsRUFBRUEsRUFBRzt3QkFBQWdFLFFBQUEsR0FFUG5ILElBQUEsQ0FBQzhKLElBQUk7MEJBQ0p4RSxJQUFJLEVBQUU2QyxHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFFOzBCQUN0QjBCLE9BQU8sRUFBRTVCLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLENBQUU7MEJBQ3pCMkIsUUFBUSxFQUFFLEtBQU07MEJBQ2hCaEQsS0FBSyxFQUFDO3dCQUFzQixDQUN0QixDQUFDLEVBQ1JoSCxJQUFBLENBQUNvSSxNQUFNOzBCQUNONkIsSUFBSSxFQUFFLHFCQUFzQjswQkFDNUJGLE9BQU8sRUFBRSxJQUFJLENBQUNoTCxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCLENBQUU7MEJBQ2xFZ0ksY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDM0MsS0FBSyxDQUFDLENBQUMsR0FBRyx5QkFBeUIsQ0FBRTswQkFDM0RySyxJQUFJLEVBQUUrTixVQUFVLENBQUNDLFdBQVk7MEJBQzdCN0IsS0FBSyxFQUFFQSxDQUFBLEtBQVk7NEJBQ2xCOzRCQUNBLElBQUksQ0FBQ2pILGdCQUFnQixFQUFFdUIsS0FBSyxDQUFDLENBQUM7NEJBQzlCLE1BQU0wQixXQUFXLEdBQUc2RCxHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDOzRCQUNuQyxNQUFNK0IsS0FBSyxHQUFHLElBQUksQ0FBQzdMLEtBQUssQ0FBQzhFLGVBQWUsQ0FBQ2dILE9BQU8sQ0FBQy9GLFdBQVcsQ0FBQzs0QkFDN0QsSUFBSThGLEtBQUssS0FBSyxDQUFDLENBQUMsRUFBRTs4QkFDakIsSUFBSSxDQUFDN0wsS0FBSyxDQUFDOEUsZUFBZSxHQUFHLElBQUksQ0FBQzlFLEtBQUssQ0FBQzhFLGVBQWUsQ0FBQ0MsTUFBTSxDQUM1RHpDLEtBQUssSUFBS0EsS0FBSyxLQUFLeUQsV0FDdEIsQ0FBQzs0QkFDRjs0QkFDQSxJQUFJLENBQUN6RyxxQkFBcUIsR0FBRyxJQUFJOzBCQUNsQzt3QkFBRSxDQUNGLENBQUMsRUFDRDswQkFDQXlNLFVBQVUsRUFDVHRLLElBQUEsQ0FBQ3VLLGlCQUFpQjs0QkFDakJDLEdBQUcsRUFBRUEsQ0FBQSxLQUFZOzhCQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDM00scUJBQXFCLEVBQUU7Z0NBQ2hDNE0sb0JBQW9CLENBQUMsVUFBVSxDQUFDO2dDQUNoQyxJQUFJLENBQUNwTSxZQUFZLEVBQUVJLFFBQVEsQ0FDMUIwSixHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDLENBQUM5RCxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FDdEMsQ0FBQztnQ0FDRCxJQUFJLENBQUN2QyxjQUFjLENBQUMsQ0FBQzs4QkFDdEI7OEJBQ0EsSUFBSSxDQUFDbkUscUJBQXFCLEdBQUcsS0FBSzs0QkFDbkM7MEJBQUUsQ0FDRjt3QkFFSCxDQUFDO3NCQUFBLENBQ087b0JBQUMsQ0FDSyxDQUFDO2tCQUVuQjtnQkFDRDtjQUFDLENBQ0ksQ0FBQyxFQUNQbUMsSUFBQSxDQUFDMkgsS0FBSztnQkFDTHhFLEVBQUUsRUFBRSxJQUFJLENBQUNxRCxLQUFLLENBQUMsQ0FBQyxHQUFHLDBCQUEyQjtnQkFDOUNvQixVQUFVLEVBQUVDLFVBQVUsQ0FBQ0MsRUFBRztnQkFDMUJ4QyxJQUFJLEVBQUUsSUFBSSxDQUFDdkcsY0FBYyxDQUFDb0MsT0FBTyxDQUFDLGlDQUFpQyxDQUFFO2dCQUNyRTZGLEtBQUssRUFBRSwwQkFBMkI7Z0JBQ2xDQyxPQUFPLEVBQUVDLEtBQUssQ0FBQzdHLFNBQVMsQ0FBQyxJQUFJLENBQUM5QixLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJO2NBQUUsQ0FDaEUsQ0FBQyxFQUNGeUIsSUFBQSxDQUFDd0ksSUFBSTtnQkFDSmQsS0FBSyxFQUFFckgsU0FBUyxDQUFDLElBQUksQ0FBQzlCLEtBQUssRUFBRSwyQkFBMkIsQ0FBRTtnQkFDMUQwSSxPQUFPLEVBQUVDLEtBQUssQ0FBQzdHLFNBQVMsQ0FBQyxJQUFJLENBQUM5QixLQUFLLEVBQUUsa0JBQWtCLENBQUMsRUFBRSxJQUFJLENBQUU7Z0JBQ2hFbU0sSUFBSSxFQUFFQyxRQUFRLENBQUNDLE1BQU87Z0JBQ3RCekIsY0FBYyxFQUFFLENBQUMsSUFBSSxDQUFDM0MsS0FBSyxDQUFDLENBQUMsR0FBRywwQkFBMEIsQ0FBRTtnQkFDNURxRSxNQUFNLEVBQUdsSyxDQUF1QixJQUFXO2tCQUMxQyxNQUFNK0IsSUFBSSxHQUFHL0IsQ0FBQyxDQUFDRyxZQUFZLENBQUMsVUFBVSxDQUFtQjtrQkFDekQ0QixJQUFJLENBQUNFLEtBQUssQ0FBQyxDQUFDO2tCQUVaLElBQUkwQixXQUFXLEdBQUczRCxDQUFDLENBQUNHLFlBQVksQ0FBQyxVQUFVLENBQUMsRUFBRXlDLElBQUksQ0FBQyxNQUFNLENBQUM7a0JBRTFELElBQUksQ0FBQ2UsV0FBVyxFQUFFO2tCQUNsQjtrQkFDQUEsV0FBVyxHQUFHQSxXQUFXLEVBQUVDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDO2tCQUVqRCxJQUFJLENBQUNoRyxLQUFLLENBQUNrRixhQUFhLEdBQUcsSUFBSSxDQUFDbEYsS0FBSyxDQUFDa0YsYUFBYSxDQUFDSCxNQUFNLENBQUV6QyxLQUFLLElBQUtBLEtBQUssS0FBS3lELFdBQVcsQ0FBQztnQkFDN0YsQ0FBRTtnQkFBQTZDLFFBQUEsRUFFRDtrQkFDQXNCLE1BQU0sRUFDTHpJLElBQUEsQ0FBQzBJLGtCQUFrQjtvQkFDbEJ4QyxLQUFLLEVBQUUsSUFBSSxDQUFDbkgsY0FBYyxDQUFDb0MsT0FBTyxDQUFDLDZDQUE2QyxDQUFFO29CQUNsRndILGdCQUFnQixFQUFFQyxzQkFBc0IsQ0FBQ0MsVUFBVztvQkFDcERDLGdCQUFnQixFQUFFQyxzQkFBc0IsQ0FBQ0MsU0FBVTtvQkFDbkRDLFdBQVcsRUFBRSxJQUFJLENBQUNsSyxjQUFjLENBQUNvQyxPQUFPLENBQ3ZDLGdEQUNEO2tCQUFFLENBQ0YsQ0FDRDtrQkFDRHVHLEtBQUssRUFBRUEsQ0FBQ3ZFLEVBQVUsRUFBRWdGLEdBQVksS0FBYztvQkFDN0MsT0FDQ25JLElBQUEsQ0FBQ2tKLGNBQWM7c0JBQ2QvRixFQUFFLEVBQUVBLEVBQUUsR0FBRyx5QkFBMEI7c0JBQ25DbUYsS0FBSyxFQUFFQSxDQUFBLEtBQVk7d0JBQ2xCLElBQUksQ0FBQ2pLLFlBQVksRUFBRUksUUFBUSxDQUFDMEosR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDL0MsSUFBSSxDQUFDO3dCQUNqRCxJQUFJLENBQUN0RCxjQUFjLENBQUMsQ0FBQztzQkFDdEIsQ0FBRTtzQkFDRmdGLEtBQUssRUFBRSx1QkFBd0I7c0JBQy9Cb0MsVUFBVSxFQUFFLENBQUNwSixJQUFBLENBQUNxSixVQUFVO3dCQUFjM0ssS0FBSyxFQUFFeUosR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDL0M7c0JBQUssR0FBcEMsTUFBc0MsQ0FBQyxDQUFFO3NCQUN2RTZELGNBQWMsRUFBRSxDQUFDaEcsRUFBRSxHQUFHLDBCQUEwQixDQUFFO3NCQUFBZ0UsUUFBQSxFQUVsRG1DLEtBQUEsQ0FBQ2pDLE9BQU87d0JBQ1BuSCxLQUFLLEVBQUUsTUFBTzt3QkFDZG9ILFNBQVMsRUFBRUMsYUFBYSxDQUFDZ0MsR0FBSTt3QkFDN0JDLFVBQVUsRUFBRUMsY0FBYyxDQUFDQyxNQUFPO3dCQUNsQ0MsY0FBYyxFQUFFQyxrQkFBa0IsQ0FBQ0MsWUFBYTt3QkFDaERwQyxVQUFVLEVBQUUsTUFBTzt3QkFDbkJ0RSxFQUFFLEVBQUVBLEVBQUc7d0JBQUFnRSxRQUFBLEdBRVBuSCxJQUFBLENBQUM4SixJQUFJOzBCQUNKeEUsSUFBSSxFQUFFNkMsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDL0MsSUFBSzswQkFDM0J5RSxPQUFPLEVBQUU1QixHQUFHLENBQUNFLFNBQVMsQ0FBQyxDQUFDLENBQUMvQyxJQUFLOzBCQUM5QjBFLFFBQVEsRUFBRSxLQUFNOzBCQUNoQmhELEtBQUssRUFBQzt3QkFBc0IsQ0FDdEIsQ0FBQyxFQUNSaEgsSUFBQSxDQUFDb0ksTUFBTTswQkFDTjZCLElBQUksRUFDSDlCLEdBQUcsQ0FBQ0UsU0FBUyxDQUFDLENBQUMsQ0FBQzlDLFVBQVUsR0FDdkIscUJBQXFCLEdBQ3JCLHlCQUNIOzBCQUNEd0UsT0FBTyxFQUNONUIsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDOUMsVUFBVSxHQUN2QixJQUFJLENBQUN4RyxjQUFjLENBQUNvQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsR0FDeEQsSUFBSSxDQUFDcEMsY0FBYyxDQUFDb0MsT0FBTyxDQUFDLDJCQUEyQixDQUMxRDswQkFDRDJKLE9BQU8sRUFBRUMsUUFBUSxDQUNoQjVJLE1BQU0sQ0FDTDlCLFNBQVMsQ0FDUixJQUFJLENBQUM5QixLQUFLLEVBQ1YsaUJBQ0QsQ0FDRCxDQUFDLEVBQ0QsQ0FDRCxDQUFFOzBCQUNGcEMsSUFBSSxFQUFFK04sVUFBVSxDQUFDQyxXQUFZOzBCQUM3QmhCLGNBQWMsRUFBRSxDQUFDaEcsRUFBRSxHQUFHLHlCQUF5QixDQUFFOzBCQUNqRG1GLEtBQUssRUFBRUEsQ0FBQSxLQUFZOzRCQUNsQixJQUFJLENBQUN6SyxxQkFBcUIsR0FBRyxJQUFJOzRCQUNqQzs0QkFDQSxJQUFJLENBQUN3RCxnQkFBZ0IsRUFBRXVCLEtBQUssQ0FBQyxDQUFDOzRCQUM5QixNQUFNMEIsV0FBVyxHQUFHNkQsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDL0MsSUFBSTs0QkFDeEMsTUFBTUMsVUFBVSxHQUFHNEMsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDOUMsVUFBVTs0QkFFN0MsSUFBSUEsVUFBVSxFQUFFOzhCQUNmLElBQUksQ0FBQ3lGLG1CQUFtQixDQUFDMUcsV0FBVyxDQUFDOzRCQUN0QyxDQUFDLE1BQU07OEJBQ04sSUFBSSxDQUFDMkcsY0FBYyxDQUFDM0csV0FBVyxDQUFDOzRCQUNqQzswQkFDRDt3QkFBRSxDQUNGLENBQUMsRUFDRDswQkFDQWdHLFVBQVUsRUFDVHRLLElBQUEsQ0FBQ3VLLGlCQUFpQjs0QkFDakJDLEdBQUcsRUFBRUEsQ0FBQSxLQUFZOzhCQUNoQjs4QkFDQSxJQUFJLENBQUMsSUFBSSxDQUFDM00scUJBQXFCLEVBQUU7Z0NBQ2hDLElBQUksQ0FBQ1EsWUFBWSxFQUFFSSxRQUFRLENBQzFCMEosR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBQyxDQUFDL0MsSUFBSSxDQUFDZixPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FDM0MsQ0FBQztnQ0FDRGtHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQztnQ0FDOUIsSUFBSSxDQUFDekksY0FBYyxDQUFDLENBQUM7OEJBQ3RCOzhCQUNBLElBQUksQ0FBQ25FLHFCQUFxQixHQUFHLEtBQUs7NEJBQ25DOzBCQUFFLENBQ0Y7d0JBRUgsQ0FBQztzQkFBQSxDQUNPO29CQUFDLENBQ0ssQ0FBQztrQkFFbkI7Z0JBQ0Q7Y0FBQyxDQUNJLENBQUM7WUFFVDtVQUFDLENBQ087UUFFWDtNQUFDLENBQ08sQ0FBQztJQUVaLENBQUM7SUFBQUssTUFBQSxDQUVPOE0sbUJBQW1CLEdBQTNCLFNBQVFBLG1CQUFtQkEsQ0FBQ25LLEtBQWEsRUFBUTtNQUNoRCxJQUFJLENBQUN0QyxLQUFLLENBQUM4RSxlQUFlLEdBQUcsSUFBSSxDQUFDOUUsS0FBSyxDQUFDOEUsZUFBZSxDQUFDQyxNQUFNLENBQUVDLElBQUksSUFBS0EsSUFBSSxDQUFDQyxXQUFXLENBQUMsQ0FBQyxLQUFLM0MsS0FBSyxDQUFDMkMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNySCxDQUFDO0lBQUF0RixNQUFBLENBRU8rTSxjQUFjLEdBQXRCLFNBQVFBLGNBQWNBLENBQUNwSyxLQUFhLEVBQVE7TUFDM0MsTUFBTXFLLFdBQVcsR0FBRyxDQUFDckssS0FBSyxDQUFDLENBQUM2RCxNQUFNLENBQUMsSUFBSSxDQUFDbkcsS0FBSyxDQUFDOEUsZUFBZSxDQUFDcUIsTUFBTSxDQUFDLENBQUMsQ0FBQztNQUN2RSxJQUFJd0csV0FBVyxDQUFDL0ksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUMzQitJLFdBQVcsQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFDbEI7TUFDQSxJQUFJLENBQUM1TSxLQUFLLENBQUM4RSxlQUFlLEdBQUc2SCxXQUFXO0lBQ3pDLENBQUM7SUFBQWhOLE1BQUEsQ0FFT3lILHVCQUF1QixHQUEvQixTQUFRQSx1QkFBdUJBLENBQUEsRUFBWTtNQUMxQyxNQUFNeUYsWUFBWSxHQUFHLElBQUksQ0FBQzdNLEtBQUssQ0FBQzJDLG9CQUFvQixDQUFDc0MsV0FBVyxDQUFDLENBQUMsQ0FBQzZILElBQUksQ0FBQyxDQUFDO01BQ3pFLE9BQU8sSUFBSSxDQUFDOU0sS0FBSyxDQUFDOEUsZUFBZSxDQUFDaUksSUFBSSxDQUFFQyxHQUFHLElBQUtBLEdBQUcsQ0FBQy9ILFdBQVcsQ0FBQyxDQUFDLENBQUM2SCxJQUFJLENBQUMsQ0FBQyxLQUFLRCxZQUFZLENBQUM7SUFDM0YsQ0FBQztJQUFBbE4sTUFBQSxDQUVNc04sZUFBZSxHQUF0QixTQUFPQSxlQUFlQSxDQUFDM0ssS0FBYSxFQUFRO01BQzNDLElBQUksQ0FBQ3RDLEtBQUssQ0FBQzJDLG9CQUFvQixHQUFHTCxLQUFLO01BQ3ZDLElBQUksQ0FBQ3RDLEtBQUssQ0FBQzBDLGlCQUFpQixHQUFHLElBQUk7TUFDbkMsSUFBSSxDQUFDd0Usa0JBQWtCLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBQUF2SCxNQUFBLENBRU11TixlQUFlLEdBQXRCLFNBQU9BLGVBQWVBLENBQUEsRUFBUztNQUM5QixJQUFJLENBQUNsTixLQUFLLENBQUMwQyxpQkFBaUIsR0FBRyxLQUFLO01BQ3BDLElBQUksQ0FBQzFDLEtBQUssQ0FBQzJDLG9CQUFvQixHQUFHLEVBQUU7SUFDckMsQ0FBQztJQUFBaEQsTUFBQSxDQUVNd04sZ0JBQWdCLEdBQXZCLFNBQU9BLGdCQUFnQkEsQ0FBQSxFQUFTO01BQy9CLElBQUksQ0FBQ25OLEtBQUssQ0FBQzBDLGlCQUFpQixHQUFHLEtBQUs7TUFDcEMsSUFBSSxDQUFDMUMsS0FBSyxDQUFDMkMsb0JBQW9CLEdBQUcsRUFBRTtJQUNyQyxDQUFDO0lBQUFoRCxNQUFBLENBRU91QyxtQkFBbUIsR0FBM0IsU0FBUUEsbUJBQW1CQSxDQUFBLEVBQVM7TUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQ2xDLEtBQUssQ0FBQ3NILG1CQUFtQixFQUFFO1FBQ3BDO01BQ0Q7TUFDQTtNQUNBLE1BQU1ILFdBQVcsR0FBRyxJQUFJLENBQUNDLHVCQUF1QixDQUFDLENBQUM7TUFDbEQsSUFBSUQsV0FBVyxFQUFFO1FBQ2hCLElBQUksQ0FBQ3NGLG1CQUFtQixDQUFDLElBQUksQ0FBQ3pNLEtBQUssQ0FBQzJDLG9CQUFvQixDQUFDO01BQzFELENBQUMsTUFBTTtRQUNOLElBQUksQ0FBQytKLGNBQWMsQ0FBQyxJQUFJLENBQUMxTSxLQUFLLENBQUMyQyxvQkFBb0IsQ0FBQztNQUNyRDtJQUNELENBQUM7SUFBQXBGLGVBQUEsQ0FFTTZQLE1BQU0sR0FBYixTQUFPQSxNQUFNQSxDQUFDQyxFQUFpQixFQUFFQyxPQUF3QixFQUFRO01BQ2hFLE9BQU9DLEdBQUcsQ0FBQ0Msd0JBQXdCLENBQUNILEVBQUUsRUFBRUMsT0FBTyxFQUFFLE1BQU07UUFDdEQsT0FDQzdMLElBQUE7VUFBTWdNLEdBQUcsRUFBRUgsT0FBUTtVQUFDN0UsS0FBSyxFQUFFLHNCQUF1QjtVQUFBRyxRQUFBLEVBQ2hEMEUsT0FBTyxDQUFDeE47UUFBWSxDQUNoQixDQUFDO01BRVQsQ0FBQyxDQUFDO0lBQ0gsQ0FBQztJQUFBLE9BQUF2QyxlQUFBO0VBQUEsRUF6bEIyQ21RLE9BQU8sR0FBQTFPLFdBQUEsR0FBQTJPLHlCQUFBLENBQUFsUCxPQUFBLENBQUFtQixTQUFBLG1CQUFBbEMsS0FBQTtJQUFBa1EsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE5TyxZQUFBLEdBQUEwTyx5QkFBQSxDQUFBbFAsT0FBQSxDQUFBbUIsU0FBQSxZQUFBN0IsS0FBQTtJQUFBNlAsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE3TyxZQUFBLEdBQUF5Tyx5QkFBQSxDQUFBbFAsT0FBQSxDQUFBbUIsU0FBQSx3QkFBQTNCLEtBQUE7SUFBQTJQLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBNU8sWUFBQSxHQUFBd08seUJBQUEsQ0FBQWxQLE9BQUEsQ0FBQW1CLFNBQUEsbUJBQUExQixLQUFBO0lBQUEwUCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTNPLFlBQUEsR0FBQXVPLHlCQUFBLENBQUFsUCxPQUFBLENBQUFtQixTQUFBLG1CQUFBeEIsS0FBQTtJQUFBd1AsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUExTyxZQUFBLEdBQUFzTyx5QkFBQSxDQUFBbFAsT0FBQSxDQUFBbUIsU0FBQSxpQkFBQXZCLEtBQUE7SUFBQXVQLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBeE8sWUFBQSxHQUFBb08seUJBQUEsQ0FBQWxQLE9BQUEsQ0FBQW1CLFNBQUEsWUFBQXRCLEtBQUE7SUFBQXNQLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUEsV0FBQUEsQ0FBQTtNQUFBLE9BeUM5QztRQUNKdEwsWUFBWSxFQUFFLEtBQUs7UUFDbkIxQyxnQkFBZ0IsRUFBRSxLQUFLO1FBQ3ZCbUYsYUFBYSxFQUFFLEVBQUU7UUFDakIyQix5QkFBeUIsRUFBRSxFQUFFO1FBQzdCL0IsZUFBZSxFQUFFLEVBQWM7UUFDL0J4RSxrQkFBa0IsRUFBRSxFQUFjO1FBQ2xDcUMsb0JBQW9CLEVBQUUsRUFBRTtRQUN4QkQsaUJBQWlCLEVBQUUsS0FBSztRQUN4QjJFLGdCQUFnQixFQUFFLHlCQUF5QjtRQUMzQ0MsbUJBQW1CLEVBQUU7TUFDdEIsQ0FBQztJQUFBO0VBQUEsSUFBQTdJLE9BQUEsTUFBQUQsTUFBQTtFQUFBaUIsUUFBQSxHQUFBbEMsZUFBQTtFQUFBLE9BQUFrQyxRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
@@ -1,7 +1,7 @@
1
1
  import Log from "sap/base/Log";
2
2
  import type ResourceBundle from "sap/base/i18n/ResourceBundle";
3
3
  import type { PathInModelExpression } from "sap/fe/base/BindingToolkit";
4
- import { bindState, equal, length, lessThan } from "sap/fe/base/BindingToolkit";
4
+ import { bindState, equal, length, lessThan, not } from "sap/fe/base/BindingToolkit";
5
5
  import { aggregation, defineState, defineUI5Class, event, property, type PropertiesOf, type StateOf } from "sap/fe/base/ClassSupport";
6
6
  import EventDelegateHook from "sap/fe/base/EventDelegateHook";
7
7
  import jsx from "sap/fe/base/jsx-runtime/jsx";
@@ -77,13 +77,21 @@ export default class EasyFilterInput extends Control {
77
77
  isHistoryEnabled: boolean;
78
78
  favoriteQueries: string[];
79
79
  recommendedQueries: string[];
80
+ currentExecutedQuery: string;
81
+ isQuerySuccessful: boolean;
82
+ favoriteIconName: string;
83
+ favoriteIconEnabled: boolean;
80
84
  }> = {
81
85
  queryChanged: false,
82
86
  isHistoryEnabled: false,
83
87
  recentQueries: [],
84
88
  recentQueriesWitFavorites: [],
85
89
  favoriteQueries: [] as string[],
86
- recommendedQueries: [] as string[]
90
+ recommendedQueries: [] as string[],
91
+ currentExecutedQuery: "",
92
+ isQuerySuccessful: false,
93
+ favoriteIconName: "sap-icon://add-favorite",
94
+ favoriteIconEnabled: true
87
95
  };
88
96
 
89
97
  constructor(properties: string | ($ControlSettings & PropertiesOf<EasyFilterInput>), others?: $ControlSettings) {
@@ -135,25 +143,33 @@ export default class EasyFilterInput extends Control {
135
143
  this.$searchInput = (
136
144
  <Input
137
145
  width="100%"
138
- showClearIcon={true}
146
+ showClearIcon={not(bindState(this.state, "isQuerySuccessful"))}
147
+ showValueHelp={bindState(this.state, "isQuerySuccessful")}
148
+ valueHelpIconSrc={bindState(this.state, "favoriteIconName")}
149
+ valueHelpRequest={(): void => {
150
+ this.onFavoriteIconPress();
151
+ }}
139
152
  change={(e): void => {
140
153
  this.fireEvent("queryChanged", { query: e.getParameter("value") });
141
154
  }}
142
155
  liveChange={(e: Input$LiveChangeEvent): void => {
143
156
  this.state.queryChanged = true;
157
+ // When user starts typing, hide favorite icon and show X
158
+ this.state.isQuerySuccessful = false;
159
+ if (e.getParameter("value") === "") {
160
+ this.state.currentExecutedQuery = "";
161
+ this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
162
+ }
144
163
  this.fireEvent("liveChange");
145
164
  if (!e.getSource().getValue() && !(this.$favoritePopover?.isOpen() ?? false)) {
146
165
  this.openSuggestionPopover();
147
166
  }
148
- if (e.getParameter("value") === "") {
149
- this.setPlaceholder(this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER"));
150
- }
151
167
  if (this.$searchInput.getValueState() === ValueState.Warning) {
152
168
  this.setAsValid();
153
169
  }
154
170
  }}
155
171
  placeholder={this.resourceBundle.getText("M_EASY_FILTER_PLACEHOLDER")}
156
- ></Input>
172
+ />
157
173
  );
158
174
 
159
175
  const favoritePopover = this.createFavoritePopover();
@@ -228,6 +244,9 @@ export default class EasyFilterInput extends Control {
228
244
  private async openSuggestionPopover(): Promise<void> {
229
245
  if (!this.$searchInput?.getValue() && (!this.$favoritePopover || !this.$favoritePopover?.isOpen())) {
230
246
  // Open the easy filter popover
247
+ if (!this.shellHistoryProvider) {
248
+ await this.initShellHistoryProvider();
249
+ }
231
250
  this.state.isHistoryEnabled = this.shellHistoryProvider?.isHistoryEnabled() ?? false;
232
251
  this.state.favoriteQueries = (await this.shellHistoryProvider?.getFavoriteQueries()) ?? [];
233
252
  this.state.recentQueries = (await this.shellHistoryProvider?.getRecentQueries()) ?? [];
@@ -282,6 +301,23 @@ export default class EasyFilterInput extends Control {
282
301
  };
283
302
  });
284
303
  }
304
+ // Update favorite icon when query or favorites change
305
+ if (changedProps.includes("currentExecutedQuery") || changedProps.includes("favoriteQueries")) {
306
+ this.updateFavoriteIcon();
307
+ }
308
+ }
309
+
310
+ private updateFavoriteIcon(): void {
311
+ const isFavorited = this.isCurrentQueryFavorited();
312
+ this.state.favoriteIconName = isFavorited ? "sap-icon://favorite" : "sap-icon://add-favorite";
313
+ this.state.favoriteIconEnabled = isFavorited || this.state.favoriteQueries.length < 5;
314
+ this.$searchInput?.toggleStyleClass("sapFEFavoriteIconDisabled", !this.state.favoriteIconEnabled);
315
+ const valueHelpBtn = this.$searchInput?.getDomRef()?.querySelector('[aria-label="Show Value Help"]') as HTMLElement | null;
316
+ if (valueHelpBtn) {
317
+ valueHelpBtn.title = this.state.favoriteIconEnabled
318
+ ? this.resourceBundle.getText("M_EASY_FILTER_EMPTY_START")
319
+ : this.resourceBundle.getText("M_EASY_FILTER_MAX_FAVORITE_REACHED");
320
+ }
285
321
  }
286
322
 
287
323
  async initShellHistoryProvider(): Promise<void> {
@@ -563,6 +599,40 @@ export default class EasyFilterInput extends Control {
563
599
  this.state.favoriteQueries = newFavorite;
564
600
  }
565
601
 
602
+ private isCurrentQueryFavorited(): boolean {
603
+ const currentQuery = this.state.currentExecutedQuery.toLowerCase().trim();
604
+ return this.state.favoriteQueries.some((fav) => fav.toLowerCase().trim() === currentQuery);
605
+ }
606
+
607
+ public setQuerySuccess(query: string): void {
608
+ this.state.currentExecutedQuery = query;
609
+ this.state.isQuerySuccessful = true;
610
+ this.updateFavoriteIcon();
611
+ }
612
+
613
+ public setQueryFailure(): void {
614
+ this.state.isQuerySuccessful = false;
615
+ this.state.currentExecutedQuery = "";
616
+ }
617
+
618
+ public clearQueryStatus(): void {
619
+ this.state.isQuerySuccessful = false;
620
+ this.state.currentExecutedQuery = "";
621
+ }
622
+
623
+ private onFavoriteIconPress(): void {
624
+ if (!this.state.favoriteIconEnabled) {
625
+ return;
626
+ }
627
+ // Toggle favorite status for the current query
628
+ const isFavorited = this.isCurrentQueryFavorited();
629
+ if (isFavorited) {
630
+ this.removeFromFavorites(this.state.currentExecutedQuery);
631
+ } else {
632
+ this.addToFavorites(this.state.currentExecutedQuery);
633
+ }
634
+ }
635
+
566
636
  static render(rm: RenderManager, control: EasyFilterInput): void {
567
637
  return jsx.renderUsingRenderManager(rm, control, () => {
568
638
  return (