@sapui5/sap.fe.macros 1.138.0 → 1.139.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.
Files changed (210) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/macros/.library +1 -1
  3. package/src/sap/fe/macros/Breadcrumbs.js +269 -0
  4. package/src/sap/fe/macros/Breadcrumbs.tsx +243 -0
  5. package/src/sap/fe/macros/Chart.js +1 -1
  6. package/src/sap/fe/macros/Chart.tsx +1 -1
  7. package/src/sap/fe/macros/CommonHelper.js +2 -2
  8. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  9. package/src/sap/fe/macros/Field.js +21 -4
  10. package/src/sap/fe/macros/Field.ts +21 -3
  11. package/src/sap/fe/macros/FooterContent.js +40 -10
  12. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  13. package/src/sap/fe/macros/FormElement.js +2 -2
  14. package/src/sap/fe/macros/FormElement.ts +1 -2
  15. package/src/sap/fe/macros/MultiValueField.js +17 -4
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -6
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -7
  19. package/src/sap/fe/macros/Share.js +73 -40
  20. package/src/sap/fe/macros/Share.tsx +29 -1
  21. package/src/sap/fe/macros/ValueHelp.js +4 -29
  22. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  23. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  24. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  25. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  26. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  27. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  28. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  29. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  30. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  31. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  32. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  33. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  34. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  35. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.js +5 -1
  36. package/src/sap/fe/macros/controls/BuildingBlockObjectProperty.ts +4 -0
  37. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  38. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  39. package/src/sap/fe/macros/controls/FilterBar.js +86 -3
  40. package/src/sap/fe/macros/controls/FilterBar.ts +97 -2
  41. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  42. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  43. package/src/sap/fe/macros/controls/Section.js +3 -2
  44. package/src/sap/fe/macros/controls/Section.ts +2 -1
  45. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  46. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  47. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  48. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  49. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  50. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  51. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  52. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  53. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  54. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  55. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +16 -5
  56. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +6 -1
  57. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  58. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  59. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  60. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  61. package/src/sap/fe/macros/field/FieldRuntime.js +38 -8
  62. package/src/sap/fe/macros/field/FieldRuntime.ts +65 -7
  63. package/src/sap/fe/macros/filter/FilterUtils.js +7 -1
  64. package/src/sap/fe/macros/filter/FilterUtils.ts +7 -0
  65. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  66. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  67. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  68. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  69. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  70. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  71. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  72. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  73. package/src/sap/fe/macros/form/Form.block.js +6 -2
  74. package/src/sap/fe/macros/form/Form.block.ts +4 -1
  75. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  76. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  77. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  78. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  79. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  80. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  81. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  82. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  83. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  84. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  85. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  86. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  87. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  88. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  89. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  90. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  91. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  92. package/src/sap/fe/macros/internal/field/DisplayStyle.js +52 -12
  93. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +54 -5
  94. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  95. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  96. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  97. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  98. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  99. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  100. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +4 -4
  101. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +3 -3
  102. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  103. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +11 -3
  104. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +12 -7
  105. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  106. package/src/sap/fe/macros/library.js +1 -1
  107. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +11 -6
  108. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +12 -7
  109. package/src/sap/fe/macros/messagebundle.properties +37 -29
  110. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  111. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  112. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  113. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  114. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  116. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  117. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  118. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  119. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  120. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  121. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  122. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  123. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  124. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  125. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  126. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  128. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  129. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  131. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  132. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  133. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  135. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  137. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  138. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  139. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  140. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  141. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  142. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  143. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  144. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  145. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  146. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  147. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  148. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  149. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  150. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  151. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  152. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  153. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  154. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  155. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  156. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  157. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  158. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  159. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  160. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  161. package/src/sap/fe/macros/table/Action.js +24 -2
  162. package/src/sap/fe/macros/table/Action.ts +13 -0
  163. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  164. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  165. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  166. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  167. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  168. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  169. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  170. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  171. package/src/sap/fe/macros/table/Column.js +3 -3
  172. package/src/sap/fe/macros/table/Column.ts +2 -2
  173. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  174. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +32 -6
  175. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  176. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  177. package/src/sap/fe/macros/table/Table.block.js +137 -108
  178. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  179. package/src/sap/fe/macros/table/Table.js +7 -1
  180. package/src/sap/fe/macros/table/Table.tsx +7 -1
  181. package/src/sap/fe/macros/table/TableAPI.js +150 -133
  182. package/src/sap/fe/macros/table/TableAPI.ts +20 -3
  183. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  184. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  185. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  186. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  187. package/src/sap/fe/macros/table/TableSizeHelper.js +3 -3
  188. package/src/sap/fe/macros/table/TableSizeHelper.ts +5 -2
  189. package/src/sap/fe/macros/table/TreeTable.js +7 -1
  190. package/src/sap/fe/macros/table/TreeTable.tsx +7 -1
  191. package/src/sap/fe/macros/table/delegates/TableDelegate.js +27 -20
  192. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +35 -26
  193. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  194. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  195. package/src/sap/fe/macros/table/massEdit/MassEditDialog.js +10 -10
  196. package/src/sap/fe/macros/table/massEdit/MassEditDialog.tsx +11 -9
  197. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.js +8 -8
  198. package/src/sap/fe/macros/table/massEdit/MassEditDialogHelper.tsx +7 -6
  199. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  200. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  201. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  202. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  203. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  204. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  205. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +37 -8
  206. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +47 -16
  207. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  208. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  209. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  210. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -65,29 +65,29 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
65
65
  const selectOptionsNames = oNavParameters.selectionVariant.getSelectOptionsPropertyNames();
66
66
  this.filterBarMetadata.forEach(field => {
67
67
  if (selectOptionsNames.includes(field.name)) {
68
- field.defaultValue = oNavParameters.selectionVariant.getSelectOption(field.name)?.map(option => {
68
+ field.defaultValue = oNavParameters.selectionVariant.getSelectOption(field.name)?.reduce((acc, option) => {
69
69
  if (option.Sign === "I") {
70
- if (option.Option === "BT") {
71
- return {
72
- operator: FilterOperator.BT,
73
- selectedValues: [{
74
- value1: option.Low,
75
- value2: option.High
76
- }]
77
- };
70
+ if (option.Option === FilterOperator.BT || option.Option === FilterOperator.NB) {
71
+ if (option.High !== null && option.High !== undefined) {
72
+ acc.push({
73
+ operator: option.Option,
74
+ selectedValues: [option.Low, option.High]
75
+ });
76
+ }
78
77
  } else {
79
- return {
78
+ acc.push({
80
79
  operator: option.Option,
81
80
  selectedValues: [option.Low]
82
- };
81
+ });
83
82
  }
84
83
  } else {
85
- return {
84
+ acc.push({
86
85
  operator: FilterOperator.NE,
87
86
  selectedValues: [option.Low]
88
- };
87
+ });
89
88
  }
90
- });
89
+ return acc;
90
+ }, []);
91
91
  }
92
92
  });
93
93
  this.content?.resetState(false);
@@ -132,8 +132,10 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
132
132
  };
133
133
  const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
134
134
  const filterFields = filterBarDef.getFilterFields();
135
- const result = filterFields.map(field => {
136
- // Exclude hidden filter fields. It is not possible to set a value for hidden filters, and users would not understand anyway as they cannot see these values.
135
+ const nonHiddenFilterFields = filterFields.filter(field => {
136
+ return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
137
+ });
138
+ const result = nonHiddenFilterFields.map(field => {
137
139
  const propertyObject = field.getTarget();
138
140
  let codeList;
139
141
  const hasCodeList = hasValueHelpWithFixedValues(propertyObject);
@@ -162,14 +164,13 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
162
164
  }];
163
165
  }
164
166
  return {
165
- name: field.name,
166
- path: field.annotationPath,
167
+ name: field.annotationPath,
168
+ filterFieldName: field.name,
167
169
  label: field.label,
168
170
  dataType: propertyObject.type,
169
171
  required: field.required ?? false,
170
172
  defaultValue: defaultValue,
171
173
  filterable: true,
172
- sortable: !field.isParameter,
173
174
  codeList: codeList,
174
175
  type: getType(propertyObject.type, codeList),
175
176
  unit: unit
@@ -189,12 +190,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
189
190
  }));
190
191
  result.push({
191
192
  name: "$editState",
192
- path: "$editState",
193
+ filterFieldName: "$editState",
193
194
  label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
194
195
  dataType: "Edm.String",
195
196
  required: false,
196
197
  filterable: true,
197
- sortable: false,
198
198
  codeList: editingStatusCodeList,
199
199
  type: "MenuWithCheckBox"
200
200
  });
@@ -228,9 +228,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
228
228
  } = _ref;
229
229
  return name === fieldName;
230
230
  });
231
- if (field?.path) {
232
- const valueList = await this.getValueList(field.path);
233
- if (valueList && ValueListHelper.isValueListSearchable(field.path, valueList)) {
231
+ if (field) {
232
+ const valueList = await this.getValueList(field.name);
233
+ if (valueList && ValueListHelper.isValueListSearchable(field.name, valueList)) {
234
234
  const resolvedTokenValues = await Promise.all(values.map(async value => resolveTokenValue(valueList, value)));
235
235
  return resolvedTokenValues.flat();
236
236
  }
@@ -239,9 +239,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
239
239
  // return original values converted to the expected format
240
240
  return unresolvedResult(values);
241
241
  };
242
- _proto.getValueList = async function getValueList(propertyPath) {
242
+ _proto.getValueList = async function getValueList(fieldName) {
243
243
  const metaModel = this.getMetaModel();
244
- const valueLists = await ValueListHelper.getValueListInfo(undefined, propertyPath, undefined, metaModel);
244
+ const valueLists = await ValueListHelper.getValueListInfo(undefined, fieldName, undefined, metaModel);
245
245
  return valueLists[0];
246
246
  };
247
247
  _proto.onTokensChanged = async function onTokensChanged(e) {
@@ -266,7 +266,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
266
266
  operator,
267
267
  selectedValues
268
268
  } = tokenKeySpecification;
269
- await FilterUtils.addFilterValues(filterBarAPI.content, field.path, operator, selectedValues);
269
+ await FilterUtils.addFilterValues(filterBarAPI.content, field.name, operator, selectedValues);
270
270
  }
271
271
  }
272
272
  }
@@ -308,8 +308,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
308
308
  const field = this.filterBarMetadata.find(f => f.name === key);
309
309
  const filterBar = UI5Element.getElementById(this.filterBar);
310
310
  const filterBarAPI = filterBar.getParent();
311
- await filterBarAPI.showFilterField(field.path);
312
- return filterBarAPI.openValueHelpForFilterField(field.path);
311
+ await filterBarAPI.showFilterField(field.name);
312
+ return filterBarAPI.openValueHelpForFilterField(field.name);
313
313
  };
314
314
  _proto.onBeforeQueryProcessing = function onBeforeQueryProcessing() {
315
315
  const uiModel = this.getModel("ui");
@@ -425,4 +425,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/controls/easy
425
425
  _exports = EasyFilterBar;
426
426
  return _exports;
427
427
  }, false);
428
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsIm1hcCIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJzZWxlY3RlZFZhbHVlcyIsInZhbHVlMSIsIkxvdyIsInZhbHVlMiIsIkhpZ2giLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfZmV0Y2hlZENvZGVMaXN0IiwicHJlcGFyZUZpbHRlckJhck1ldGFkYXRhIiwicmVjb21tZW5kZWRRdWVyaWVzIiwibWFjcm9zIiwiZWFzeUZpbHRlciIsImNyZWF0ZUNvbnRlbnQiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1ldGFNb2RlbCIsIm1vZGVscyIsImdldFR5cGUiLCJlZG1UeXBlIiwiY29kZUxpc3QiLCJzdGFydHVwUGFyYW1ldGVycyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJyZXN1bHQiLCJwcm9wZXJ0eU9iamVjdCIsImdldFRhcmdldCIsImhhc0NvZGVMaXN0IiwiaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzIiwiZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eSIsImFubm90YXRpb25QYXRoIiwidW5pdEFubm90YXRpb24iLCJhbm5vdGF0aW9ucyIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwidW5pdCIsImZpbmQiLCJmIiwiaGFzT3duUHJvcGVydHkiLCJFUSIsImlzUGFyYW1ldGVyIiwic3Vic3RyaW5nIiwicGF0aCIsImxhYmVsIiwiZGF0YVR5cGUiLCJyZXF1aXJlZCIsImZpbHRlcmFibGUiLCJzb3J0YWJsZSIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wcyIsIkpTT05Nb2RlbCIsImlzRHJhZnRDb2xsYWJvcmF0aXZlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImVkaXRpbmdTdGF0dXNDb2RlTGlzdCIsIkRyYWZ0RWRpdFN0YXRlIiwiZ2V0RWRpdFN0YXRlc0NvbnRleHQiLCJnZXRPYmplY3QiLCJzdGF0ZSIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJkaXNwbGF5IiwicHVzaCIsImdldFRyYW5zbGF0ZWRUZXh0Iiwia2V5IiwicHJvcGVydHlQYXRoIiwiZGVmYXVsdFZhbHVlTGlzdCIsImdldFZhbHVlTGlzdCIsInZhbHVlTGlzdEluZm8iLCJsaXN0QmluZGluZyIsIiRtb2RlbCIsImJpbmRMaXN0IiwiQ29sbGVjdGlvblBhdGgiLCIkc2VsZWN0IiwiZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIiLCJkYXRhIiwicmVxdWVzdENvbnRleHRzIiwiZmlsdGVyR3JvdXBWYWx1ZXMiLCJtYXBWYWx1ZUxpc3RUb0NvZGVMaXN0IiwiY29kZUxpc3RQcm9wZXJ0eSIsInJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkIiwiZmllbGROYW1lIiwidmFsdWVzIiwiX3JlZiIsInZhbHVlTGlzdCIsIlZhbHVlTGlzdEhlbHBlciIsImlzVmFsdWVMaXN0U2VhcmNoYWJsZSIsInJlc29sdmVkVG9rZW5WYWx1ZXMiLCJhbGwiLCJyZXNvbHZlVG9rZW5WYWx1ZSIsImZsYXQiLCJ1bnJlc29sdmVkUmVzdWx0IiwiZ2V0TWV0YU1vZGVsIiwidmFsdWVMaXN0cyIsImdldFZhbHVlTGlzdEluZm8iLCJvblRva2Vuc0NoYW5nZWQiLCJlIiwiZmlsdGVyQmFyIiwiVUk1RWxlbWVudCIsImdldEVsZW1lbnRCeUlkIiwiZmlsdGVyQmFyQVBJIiwiZ2V0UGFyZW50IiwidG9rZW5zIiwiZ2V0UGFyYW1ldGVyIiwiY2xlYXJFZGl0RmlsdGVyIiwic29tZSIsInRva2VuRGVmaW5pdGlvbiIsIl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zIiwiZm9ybWF0ZURhdGFUeXBlcyIsInRva2VuIiwidG9rZW5LZXlTcGVjaWZpY2F0aW9uIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsIkZpbHRlclV0aWxzIiwiYWRkRmlsdGVyVmFsdWVzIiwidHJpZ2dlclNlYXJjaCIsImRhdGVUeXBlIiwiRGF0ZTEiLCJkYXRlVGltZU9mZnNldFR5cGUiLCJEYXRlVGltZU9mZnNldCIsIlY0IiwidGltZU9mRGF5VHlwZSIsIlRpbWVPZkRheSIsImtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZSIsInJlcXVpcmVkQ29udmVydGVyIiwiaWR4IiwicGFyc2VWYWx1ZSIsInNob3dWYWx1ZUhlbHBGb3JLZXkiLCJzaG93RmlsdGVyRmllbGQiLCJvcGVuVmFsdWVIZWxwRm9yRmlsdGVyRmllbGQiLCJvbkJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsInVpTW9kZWwiLCJnZXRNb2RlbCIsIkJ1c3lMb2NrZXIiLCJsb2NrIiwib25BZnRlclF1ZXJ5UHJvY2Vzc2luZyIsInVubG9jayIsIm9uQ2xlYXJGaWx0ZXJzIiwib25RdWVyeUNoYW5nZWQiLCJmaXJlRmlsdGVyc0NoYW5nZWQiLCJjb25kaXRpb25zQmFzZWQiLCJoYW5kbGVTaG93VmFsdWVIZWxwIiwiZXZlbnQiLCJyZWplY3QiLCJjb25kaXRpb25zIiwiY29uZGl0aW9uIiwidmFsaWRhdGVkIiwiY29uZGl0aW9uVG9SZXNvbHZlIiwiTkIiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC91aS9tZGMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3RFbnRyeSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblxudHlwZSBFYXN5RmlsdGVyQmFyU3RhdGUgPSB7fTtcbnR5cGUgRmllbGRNZXRhZGF0YSA9IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhICYgeyBwYXRoOiBzdHJpbmcgfTtcblxuLyoqXG4gKiBEZWxpdmVyeSBmb3IgYmV0YSByZWxlYXNlIGZvciB0aGUgZWFzeSBmaWx0ZXIgZmVhdHVyZS5cbiAqIEBleHBlcmltZW50YWxcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy5FYXN5RmlsdGVyQmFyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyIGV4dGVuZHMgQnVpbGRpbmdCbG9jayBpbXBsZW1lbnRzIElWaWV3U3RhdGVDb250cmlidXRvcjxFYXN5RmlsdGVyQmFyU3RhdGU+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC5mZS5jb3JlLmNvbnRyb2xsZXJleHRlbnNpb25zLnZpZXdTdGF0ZS5JVmlld1N0YXRlQ29udHJpYnV0b3JcIilcblx0X19pbXBsZW1lbnRzX19zYXBfZmVfY29yZV9jb250cm9sbGVyZXh0ZW5zaW9uc192aWV3U3RhdGVfSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yITogYm9vbGVhbjtcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuZmlsdGVyQmFyLkZpbHRlckJhckFQSVwiIH0pXG5cdGZpbHRlckJhciE6IHN0cmluZztcblxuXHRAYXNzb2NpYXRpb24oeyB0eXBlOiBcInNhcC5mZS5tYWNyb3MuY29udGVudFN3aXRjaGVyLkNvbnRlbnRTd2l0Y2hlclwiIH0pXG5cdGNvbnRlbnRTd2l0Y2hlciE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRlbnRTd2l0Y2hlcktleT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdEBhZ2dyZWdhdGlvbih7IHR5cGU6IFwic2FwLmZlLmNvbnRyb2xzLmVhc3lGaWx0ZXIuRWFzeUZpbHRlckJhckNvbnRhaW5lclwiIH0pXG5cdGNvbnRlbnQ/OiBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblxuXHRfZmV0Y2hlZENvZGVMaXN0ITogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/Lm1hcCgob3B0aW9uKSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAob3B0aW9uLlNpZ24gPT09IFwiSVwiKSB7XG5cdFx0XHRcdFx0XHRcdGlmIChvcHRpb24uT3B0aW9uID09PSBcIkJUXCIpIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJULFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlMTogb3B0aW9uLkxvdywgdmFsdWUyOiBvcHRpb24uSGlnaCB9XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBvcHRpb24uT3B0aW9uLFxuXHRcdFx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IFtvcHRpb24uTG93XVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLk5FLFxuXHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9KSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdCA/Pz0ge307XG5cdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YSA9IHRoaXMucHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk7XG5cdFx0dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5tYWNyb3M/LmVhc3lGaWx0ZXI/LnJlY29tbWVuZGVkUXVlcmllcyA/PyBbXTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblx0XHR0aGlzLmNvbnRlbnQuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhO1xuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cdFx0bGV0IGZpbHRlckJhckRlZjtcblx0XHRpZiAoZGVmaW5pdGlvbkZvclBhZ2UpIHtcblx0XHRcdGZpbHRlckJhckRlZiA9IGRlZmluaXRpb25Gb3JQYWdlLmdldEZpbHRlckJhckRlZmluaXRpb24oe30pO1xuXG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBvd25lci5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXG5cdFx0XHRjb25zdCBnZXRUeXBlID0gKGVkbVR5cGU6IHN0cmluZywgY29kZUxpc3Q6IHVua25vd24pOiBUb2tlblR5cGUgPT4ge1xuXHRcdFx0XHRpZiAoY29kZUxpc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJNZW51V2l0aENoZWNrQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChlZG1UeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJUaW1lXCI7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhcnR1cFBhcmFtZXRlcnMgPSBvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb21wb25lbnREYXRhKCk/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXJCYXJEZWYuZ2V0RmlsdGVyRmllbGRzKCk7XG5cdFx0XHRjb25zdCByZXN1bHQgPSBmaWx0ZXJGaWVsZHMubWFwKChmaWVsZDogRmlsdGVyRmllbGQpOiBGaWVsZE1ldGFkYXRhID0+IHtcblx0XHRcdFx0Ly8gRXhjbHVkZSBoaWRkZW4gZmlsdGVyIGZpZWxkcy4gSXQgaXMgbm90IHBvc3NpYmxlIHRvIHNldCBhIHZhbHVlIGZvciBoaWRkZW4gZmlsdGVycywgYW5kIHVzZXJzIHdvdWxkIG5vdCB1bmRlcnN0YW5kIGFueXdheSBhcyB0aGV5IGNhbm5vdCBzZWUgdGhlc2UgdmFsdWVzLlxuXHRcdFx0XHRjb25zdCBwcm9wZXJ0eU9iamVjdCA9IGZpZWxkLmdldFRhcmdldCgpO1xuXHRcdFx0XHRsZXQgY29kZUxpc3Q7XG5cdFx0XHRcdGNvbnN0IGhhc0NvZGVMaXN0ID0gaGFzVmFsdWVIZWxwV2l0aEZpeGVkVmFsdWVzKHByb3BlcnR5T2JqZWN0KTtcblx0XHRcdFx0aWYgKGhhc0NvZGVMaXN0KSB7XG5cdFx0XHRcdFx0Y29kZUxpc3QgPSB0aGlzLl9mZXRjaGVkQ29kZUxpc3RbZmllbGQubmFtZV07XG5cdFx0XHRcdFx0aWYgKCFjb2RlTGlzdCkge1xuXHRcdFx0XHRcdFx0Y29kZUxpc3QgPSBhc3luYyAoKTogUHJvbWlzZTxDb2RlTGlzdEVudHJ5W10+ID0+IHRoaXMuZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShmaWVsZC5uYW1lLCBmaWVsZC5hbm5vdGF0aW9uUGF0aCEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENoZWNrIGlmIHRoZSBmaWx0ZXIgZmllbGQncyB0YXJnZXQgcHJvcGVydHkgaGFzIGEgY3VycmVuY3kgb3IgYSB1bml0LiBJZiBzbywgbG9vayBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZmlsdGVyIGZpZWxkICh0aGVcblx0XHRcdFx0Ly8gYW5ub3RhdGlvbiBoYXMgdG8gYmUgYSBwYXRoIGZvciB0aGF0KSBhbmQgc2V0IHRoZSAndW5pdCcgcHJvcGVydHkuXG5cdFx0XHRcdGNvbnN0IHVuaXRBbm5vdGF0aW9uID0gcHJvcGVydHlPYmplY3QuYW5ub3RhdGlvbnMuTWVhc3VyZXM/LklTT0N1cnJlbmN5ID8/IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5Vbml0O1xuXHRcdFx0XHRjb25zdCB1bml0UHJvcGVydHkgPSBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbih1bml0QW5ub3RhdGlvbikgPyB1bml0QW5ub3RhdGlvbi4kdGFyZ2V0IDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCB1bml0ID0gdW5pdFByb3BlcnR5ID8gZmlsdGVyRmllbGRzLmZpbmQoKGYpID0+IGYuZ2V0VGFyZ2V0KCkgPT09IHVuaXRQcm9wZXJ0eSk/Lm5hbWUgOiB1bmRlZmluZWQ7XG5cdFx0XHRcdGxldCBkZWZhdWx0VmFsdWU7XG5cdFx0XHRcdGlmIChzdGFydHVwUGFyYW1ldGVycy5oYXNPd25Qcm9wZXJ0eShmaWVsZC5uYW1lKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZV1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzUGFyYW1ldGVyICYmIHN0YXJ0dXBQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KGZpZWxkLm5hbWUuc3Vic3RyaW5nKDIpKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdG5hbWU6IGZpZWxkLm5hbWUsXG5cdFx0XHRcdFx0cGF0aDogZmllbGQuYW5ub3RhdGlvblBhdGgsXG5cdFx0XHRcdFx0bGFiZWw6IGZpZWxkLmxhYmVsLFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBwcm9wZXJ0eU9iamVjdC50eXBlLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiBmaWVsZC5yZXF1aXJlZCA/PyBmYWxzZSxcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZSxcblx0XHRcdFx0XHRmaWx0ZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNvcnRhYmxlOiAhZmllbGQuaXNQYXJhbWV0ZXIsXG5cdFx0XHRcdFx0Y29kZUxpc3Q6IGNvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IGdldFR5cGUocHJvcGVydHlPYmplY3QudHlwZSwgY29kZUxpc3QpLFxuXHRcdFx0XHRcdHVuaXQ6IHVuaXRcblx0XHRcdFx0fSBhcyBGaWVsZE1ldGFkYXRhO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIFtFZGl0aW5nIFN0YXR1c11cblxuXHRcdFx0aWYgKE1vZGVsSGVscGVyLmlzTWV0YVBhdGhEcmFmdFN1cHBvcnRlZChkZWZpbml0aW9uRm9yUGFnZS5nZXRNZXRhUGF0aCgpIGFzIHVua25vd24gYXMgTWV0YVBhdGg8dW5rbm93bj4pKSB7XG5cdFx0XHRcdC8vIEFzc2VtYmxlIHRoZSBjb2RlIGxpc3QgZm9yIHRoZSBlZGl0aW5nIHN0YXR1cyBmaWx0ZXIgdmFsdWVzOlxuXHRcdFx0XHRjb25zdCBwcm9wcyA9IG5ldyBKU09OTW9kZWwoe1xuXHRcdFx0XHRcdGlzRHJhZnRDb2xsYWJvcmF0aXZlOiBNb2RlbEhlbHBlci5pc0NvbGxhYm9yYXRpb25EcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwpXG5cdFx0XHRcdH0pLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiL1wiKTtcblxuXHRcdFx0XHRjb25zdCBlZGl0aW5nU3RhdHVzQ29kZUxpc3QgPSBEcmFmdEVkaXRTdGF0ZS5nZXRFZGl0U3RhdGVzQ29udGV4dChwcm9wcylcblx0XHRcdFx0XHQuZ2V0T2JqZWN0KFwiL1wiKVxuXHRcdFx0XHRcdC5tYXAoKHN0YXRlOiB7IGlkOiBzdHJpbmc7IGRpc3BsYXk6IHN0cmluZyB9KSA9PiAoeyB2YWx1ZTogc3RhdGUuaWQsIGRlc2NyaXB0aW9uOiBzdGF0ZS5kaXNwbGF5IH0pKTtcblxuXHRcdFx0XHRyZXN1bHQucHVzaCh7XG5cdFx0XHRcdFx0bmFtZTogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRcdFx0cGF0aDogXCIkZWRpdFN0YXRlXCIsXG5cdFx0XHRcdFx0bGFiZWw6IHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJGSUxURVJCQVJfRURJVElOR19TVEFUVVNcIiksXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IFwiRWRtLlN0cmluZ1wiLFxuXHRcdFx0XHRcdHJlcXVpcmVkOiBmYWxzZSxcblx0XHRcdFx0XHRmaWx0ZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHNvcnRhYmxlOiBmYWxzZSxcblx0XHRcdFx0XHRjb2RlTGlzdDogZWRpdGluZ1N0YXR1c0NvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVudVdpdGhDaGVja0JveFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShrZXk6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENvZGVMaXN0RW50cnlbXT4ge1xuXHRcdGNvbnN0IGRlZmF1bHRWYWx1ZUxpc3QgPSBhd2FpdCB0aGlzLmdldFZhbHVlTGlzdChwcm9wZXJ0eVBhdGgpO1xuXG5cdFx0aWYgKCFkZWZhdWx0VmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gW107XG5cdFx0fVxuXG5cdFx0Y29uc3QgdmFsdWVMaXN0SW5mbyA9IGRlZmF1bHRWYWx1ZUxpc3QudmFsdWVMaXN0SW5mbztcblxuXHRcdGNvbnN0IGxpc3RCaW5kaW5nID0gdmFsdWVMaXN0SW5mby4kbW9kZWwuYmluZExpc3QoYC8ke3ZhbHVlTGlzdEluZm8uQ29sbGVjdGlvblBhdGh9YCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwge1xuXHRcdFx0JHNlbGVjdDogZ2VuZXJhdGVTZWxlY3RQYXJhbWV0ZXIoZGVmYXVsdFZhbHVlTGlzdClcblx0XHR9KTtcblx0XHRjb25zdCBkYXRhID0gYXdhaXQgbGlzdEJpbmRpbmcucmVxdWVzdENvbnRleHRzKCk7XG5cblx0XHRjb25zdCBmaWx0ZXJHcm91cFZhbHVlcyA9IGRhdGEubWFwKG1hcFZhbHVlTGlzdFRvQ29kZUxpc3QoZGVmYXVsdFZhbHVlTGlzdCkpO1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdFtrZXldID0gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdFx0Y29uc3QgY29kZUxpc3RQcm9wZXJ0eSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZmllbGQpID0+IGZpZWxkLm5hbWUgPT09IGtleSk7XG5cdFx0aWYgKGNvZGVMaXN0UHJvcGVydHkpIHtcblx0XHRcdGNvZGVMaXN0UHJvcGVydHkuY29kZUxpc3QgPSBmaWx0ZXJHcm91cFZhbHVlcztcblx0XHR9XG5cdFx0cmV0dXJuIGZpbHRlckdyb3VwVmFsdWVzO1xuXHR9XG5cblx0YXN5bmMgcmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQoXG5cdFx0ZmllbGROYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdXG5cdCk6IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+IHtcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGZpZWxkTmFtZSk7XG5cdFx0aWYgKGZpZWxkPy5wYXRoKSB7XG5cdFx0XHRjb25zdCB2YWx1ZUxpc3QgPSBhd2FpdCB0aGlzLmdldFZhbHVlTGlzdChmaWVsZC5wYXRoKTtcblxuXHRcdFx0aWYgKHZhbHVlTGlzdCAmJiBWYWx1ZUxpc3RIZWxwZXIuaXNWYWx1ZUxpc3RTZWFyY2hhYmxlKGZpZWxkLnBhdGgsIHZhbHVlTGlzdCkpIHtcblx0XHRcdFx0Y29uc3QgcmVzb2x2ZWRUb2tlblZhbHVlcyA9IGF3YWl0IFByb21pc2UuYWxsKHZhbHVlcy5tYXAoYXN5bmMgKHZhbHVlKSA9PiByZXNvbHZlVG9rZW5WYWx1ZSh2YWx1ZUxpc3QsIHZhbHVlKSkpO1xuXHRcdFx0XHRyZXR1cm4gcmVzb2x2ZWRUb2tlblZhbHVlcy5mbGF0KCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gcmV0dXJuIG9yaWdpbmFsIHZhbHVlcyBjb252ZXJ0ZWQgdG8gdGhlIGV4cGVjdGVkIGZvcm1hdFxuXHRcdHJldHVybiB1bnJlc29sdmVkUmVzdWx0KHZhbHVlcyk7XG5cdH1cblxuXHRhc3luYyBnZXRWYWx1ZUxpc3QocHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFZhbHVlTGlzdEluZm8gfCB1bmRlZmluZWQ+IHtcblx0XHRjb25zdCBtZXRhTW9kZWwgPSB0aGlzLmdldE1ldGFNb2RlbCgpITtcblx0XHRjb25zdCB2YWx1ZUxpc3RzID0gYXdhaXQgVmFsdWVMaXN0SGVscGVyLmdldFZhbHVlTGlzdEluZm8odW5kZWZpbmVkLCBwcm9wZXJ0eVBhdGgsIHVuZGVmaW5lZCwgbWV0YU1vZGVsKTtcblx0XHRyZXR1cm4gdmFsdWVMaXN0c1swXTtcblx0fVxuXG5cdGFzeW5jIG9uVG9rZW5zQ2hhbmdlZChlOiBVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4pOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRjb25zdCB0b2tlbnMgPSBlLmdldFBhcmFtZXRlcihcInRva2Vuc1wiKTtcblx0XHRjb25zdCBjbGVhckVkaXRGaWx0ZXIgPSB0b2tlbnMuc29tZSgodG9rZW5EZWZpbml0aW9uKSA9PiB0b2tlbkRlZmluaXRpb24ua2V5ID09PSBcIiRlZGl0U3RhdGVcIik7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLl9jbGVhckZpbHRlclZhbHVlc1dpdGhPcHRpb25zKGZpbHRlckJhciwgeyBjbGVhckVkaXRGaWx0ZXIgfSk7XG5cdFx0dGhpcy5mb3JtYXRlRGF0YVR5cGVzKHRva2Vucyk7XG5cblx0XHRmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuXHRcdFx0aWYgKHRva2VuLmtleSA9PT0gXCIkZWRpdFN0YXRlXCIpIHtcblx0XHRcdFx0Ly8gY29udmVydCB0aGUgJGVkaXRTdGF0ZSBmaWx0ZXIgY29uZGl0aW9uXG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRhd2FpdCBGaWx0ZXJVdGlscy5hZGRGaWx0ZXJWYWx1ZXMoXG5cdFx0XHRcdFx0XHRmaWx0ZXJCYXJBUEkuY29udGVudCxcblx0XHRcdFx0XHRcdHRva2VuLmtleSxcblx0XHRcdFx0XHRcdFwiRFJBRlRfRURJVF9TVEFURVwiLFxuXHRcdFx0XHRcdFx0dG9rZW5LZXlTcGVjaWZpY2F0aW9uLnNlbGVjdGVkVmFsdWVzXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0gdG9rZW4ua2V5KSE7XG5cdFx0XHRcdGZvciAoY29uc3QgdG9rZW5LZXlTcGVjaWZpY2F0aW9uIG9mIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMpIHtcblx0XHRcdFx0XHRjb25zdCB7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlcyB9ID0gdG9rZW5LZXlTcGVjaWZpY2F0aW9uO1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhmaWx0ZXJCYXJBUEkuY29udGVudCwgZmllbGQucGF0aCwgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0Ly9XZSBuZWVkIHRoZSBiZWxvdyBmdW5jdGlvbiBzbyB0aGF0IHRoZSBkYXRlIG9iamVjdHMgYW5kIGRhdGVUaW1lT2Zmc2V0cyB3b3VsZCBiZSBjb252ZXJ0ZWQgdG8gc3RyaW5nIHR5cGUgYXMgdGhlIGRhdGUgb2JqZWN0IGlzIG5vdCBhIHZhbGlkIHR5cGUgaW4gVjQgd29ybGRcblx0Zm9ybWF0ZURhdGFUeXBlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogdm9pZCB7XG5cdFx0Y29uc3QgZGF0ZVR5cGUgPSBuZXcgRGF0ZTEoKSxcblx0XHRcdGRhdGVUaW1lT2Zmc2V0VHlwZSA9IG5ldyBEYXRlVGltZU9mZnNldCh1bmRlZmluZWQsIHsgVjQ6IHRydWUgfSksXG5cdFx0XHR0aW1lT2ZEYXlUeXBlID0gbmV3IFRpbWVPZkRheSgpO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgZWRtVHlwZSA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSB0b2tlbi5rZXkpPy5kYXRhVHlwZTtcblx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlKSA9PiB7XG5cdFx0XHRcdGxldCByZXF1aXJlZENvbnZlcnRlcjogT0RhdGFUeXBlO1xuXHRcdFx0XHRzd2l0Y2ggKGVkbVR5cGUpIHtcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVcIjpcblx0XHRcdFx0XHRcdHJlcXVpcmVkQ29udmVydGVyID0gZGF0ZVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLlRpbWVPZkRheVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSB0aW1lT2ZEYXlUeXBlO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlVGltZU9mZnNldFwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVGltZU9mZnNldFR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzW2lkeF0gPSByZXF1aXJlZENvbnZlcnRlci5wYXJzZVZhbHVlKHZhbHVlLCBcIm9iamVjdFwiKTtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdGFzeW5jIHNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENvbmRpdGlvbk9iamVjdFtdPiB7XG5cdFx0Y29uc3QgZmllbGQgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZpbmQoKGYpID0+IGYubmFtZSA9PT0ga2V5KSE7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGNvbnN0IGZpbHRlckJhckFQSSA9IGZpbHRlckJhci5nZXRQYXJlbnQoKSBhcyBGaWx0ZXJCYXJBUEk7XG5cdFx0YXdhaXQgZmlsdGVyQmFyQVBJLnNob3dGaWx0ZXJGaWVsZChmaWVsZC5wYXRoKTtcblx0XHRyZXR1cm4gZmlsdGVyQmFyQVBJLm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZChmaWVsZC5wYXRoKTtcblx0fVxuXG5cdG9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nKCk6IHZvaWQge1xuXHRcdGNvbnN0IHVpTW9kZWwgPSB0aGlzLmdldE1vZGVsKFwidWlcIikgYXMgSlNPTk1vZGVsO1xuXHRcdEJ1c3lMb2NrZXIubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdG9uQWZ0ZXJRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci51bmxvY2sodWlNb2RlbCk7XG5cdH1cblxuXHRhc3luYyBvbkNsZWFyRmlsdGVycygpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHQvLyBFbXB0eSBpbnB1dDogY2xlYXIgdGhlIGZpbHRlcnMgYW5kIHJlZnJlc2ggdGhlIGxpc3Rcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkudHJpZ2dlclNlYXJjaCgpO1xuXHR9XG5cblx0b25RdWVyeUNoYW5nZWQoKTogdm9pZCB7XG5cdFx0Y29uc3QgZmlsdGVyQmFyID0gVUk1RWxlbWVudC5nZXRFbGVtZW50QnlJZCh0aGlzLmZpbHRlckJhcikgYXMgRmlsdGVyQmFyO1xuXHRcdGZpbHRlckJhci5maXJlRmlsdGVyc0NoYW5nZWQoeyBjb25kaXRpb25zQmFzZWQ6IHRydWUgfSk7XG5cdH1cblxuXHRwcml2YXRlIGFzeW5jIGhhbmRsZVNob3dWYWx1ZUhlbHAoZXZlbnQ6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0Y29uc3Qga2V5ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwia2V5XCIpO1xuXHRcdGNvbnN0IHJlc29sdmUgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJyZXNvbHZlXCIpO1xuXHRcdGNvbnN0IHJlamVjdCA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlamVjdFwiKTtcblxuXHRcdHRyeSB7XG5cdFx0XHRjb25zdCBjb25kaXRpb25zID0gYXdhaXQgdGhpcy5zaG93VmFsdWVIZWxwRm9yS2V5KGtleSk7XG5cblx0XHRcdGNvbnN0IHNlbGVjdGVkVmFsdWVzID0gY29uZGl0aW9ucy5tYXAoYXN5bmMgKGNvbmRpdGlvbikgPT4ge1xuXHRcdFx0XHRjb25zdCBvcGVyYXRvciA9IGNvbmRpdGlvbi5vcGVyYXRvciBhcyBGaWx0ZXJPcGVyYXRvcjtcblxuXHRcdFx0XHRpZiAoY29uZGl0aW9uLnZhbGlkYXRlZCA9PT0gXCJOb3RWYWxpZGF0ZWRcIikge1xuXHRcdFx0XHRcdC8vIG5vdCB2YWxpZGF0ZWQ6IHRoZSBjb25kaXRpb24gb25seSBoYXMgdmFsdWVzIHdpdGhvdXQgZGVzY3JpcHRpb24gLSB0cnkgdG8gZ2V0IHRoZSBkZXNjcmlwdGlvbiB1c2luZyB0aGUgZGF0YSBmZXRjaGVyIG1lY2hhbmlzbS5cblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSBzaW5nbGUgdmFsdWUgYFt2YWx1ZV1gIChvciBgW2xvd2VyIGJvdW5kLCB1cHBlciBib3VuZF1gIGZvciBCVC9OQiBvcGVyYXRvcnMpLlxuXHRcdFx0XHRcdGNvbnN0IGNvbmRpdGlvblRvUmVzb2x2ZTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHRcdFx0XHRcdFx0b3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQlxuXHRcdFx0XHRcdFx0XHQ/IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXSwgY29uZGl0aW9uLnZhbHVlc1sxXV0gfVxuXHRcdFx0XHRcdFx0XHQ6IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzOiBbY29uZGl0aW9uLnZhbHVlc1swXV0gfTtcblxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkKGtleSwgW2NvbmRpdGlvblRvUmVzb2x2ZV0pO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5CVCAmJiBvcGVyYXRvciAhPT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHQvLyB2YWxpZGF0ZWQ6IGJvdGggdmFsdWUgYW5kIGRlc2NyaXB0aW9uIGFyZSBhdmFpbGFibGUgLSBkaXJlY3RseSBtYXAgdGhlbSB0byB0aGUgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gYGNvbmRpdGlvbi52YWx1ZXNgIGlzIGEgdHVwbGUgb2YgYFt2YWx1ZSwgZGVzY3JpcHRpb24/XWBcblx0XHRcdFx0XHRjb25zdCBbdmFsdWUsIGRlc2NyaXB0aW9uXSA9IGNvbmRpdGlvbi52YWx1ZXMgYXMgW3N0cmluZyB8IG51bWJlciB8IGJvb2xlYW4sIHN0cmluZyB8IHVuZGVmaW5lZF07XG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZShbeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFt7IHZhbHVlLCBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb24gPz8gdmFsdWUgfV0gfV0pO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIHNob3VsZCBub3Qgb2NjdXI6IEJUL05CIGFyZSBleHBlY3RlZCB0byBiZSBcIk5vdFZhbGlkYXRlZFwiIGNvbmRpdGlvbnNcblx0XHRcdFx0XHRMb2cud2FybmluZyhgVW5leHBlY3RlZCBjb25kaXRpb24gZm9yIGZpZWxkICR7a2V5fTogb3BlcmF0b3IgJHtvcGVyYXRvcn0gd2l0aCB2YWx1ZXMgJHtjb25kaXRpb24udmFsdWVzfS5gKTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFtdKTtcblx0XHRcdFx0fVxuXHRcdFx0fSk7XG5cblx0XHRcdGNvbnN0IHJlc29sdmVkVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwoc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0cmVzb2x2ZShyZXNvbHZlZFZhbHVlcy5mbGF0KCkpO1xuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0XHRyZWplY3QoZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogbmV3IEVycm9yKFN0cmluZyhlcnJvcikpKTtcblx0XHR9XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8RWFzeUZpbHRlckJhckNvbnRhaW5lclxuXHRcdFx0XHRjb250ZXh0UGF0aD17dGhpcy5nZXRPd25lckNvbnRleHRQYXRoKCl9XG5cdFx0XHRcdGFwcElkPXt0aGlzLmdldEFwcGxpY2F0aW9uSWQoKX1cblx0XHRcdFx0ZmlsdGVyQmFyTWV0YWRhdGE9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGF9XG5cdFx0XHRcdGVhc3lGaWx0ZXJMaWI9e3RoaXMuZWFzeUZpbHRlclBhdGh9XG5cdFx0XHRcdHNob3dWYWx1ZUhlbHA9e3RoaXMuaGFuZGxlU2hvd1ZhbHVlSGVscC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRkYXRhRmV0Y2hlcj17dGhpcy5yZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXN9XG5cdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17dGhpcy5vblF1ZXJ5Q2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHR0b2tlbnNDaGFuZ2VkPXt0aGlzLm9uVG9rZW5zQ2hhbmdlZC5iaW5kKHRoaXMpfVxuXHRcdFx0XHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25CZWZvcmVRdWVyeVByb2Nlc3NpbmcuYmluZCh0aGlzKX1cblx0XHRcdFx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc9e3RoaXMub25BZnRlclF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRjbGVhckZpbHRlcnM9e3RoaXMub25DbGVhckZpbHRlcnMuYmluZCh0aGlzKX1cblx0XHRcdC8+XG5cdFx0KSBhcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpREE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtxQkEs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
428
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJpbXBsZW1lbnRJbnRlcmZhY2UiLCJfZGVjMyIsImFzc29jaWF0aW9uIiwidHlwZSIsIl9kZWM0IiwiX2RlYzUiLCJwcm9wZXJ0eSIsIl9kZWM2IiwiX2RlYzciLCJhZ2dyZWdhdGlvbiIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RW52aXJvbm1lbnRDYXBhYmlsaXRpZXMiLCJwcmVwYXJlRmVhdHVyZSIsInRoZW4iLCJlYXN5RmlsdGVyUGF0aCIsImNvbnRlbnQiLCJzZXRFYXN5RmlsdGVyTGliIiwiY2F0Y2giLCJlcnJvciIsIkxvZyIsImRlYnVnIiwidW5kZWZpbmVkIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsImFwcGx5TGVnYWN5U3RhdGUiLCJnZXRDb250cmlsU3RhdGUiLCJvTmF2UGFyYW1ldGVycyIsIl9zaG91bGRBcHBseURpZmZTdGF0ZSIsIl9za2lwTWVyZ2UiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0T3B0aW9uc05hbWVzIiwiZ2V0U2VsZWN0T3B0aW9uc1Byb3BlcnR5TmFtZXMiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsImZvckVhY2giLCJmaWVsZCIsImluY2x1ZGVzIiwibmFtZSIsImRlZmF1bHRWYWx1ZSIsImdldFNlbGVjdE9wdGlvbiIsInJlZHVjZSIsImFjYyIsIm9wdGlvbiIsIlNpZ24iLCJPcHRpb24iLCJGaWx0ZXJPcGVyYXRvciIsIkJUIiwiTkIiLCJIaWdoIiwicHVzaCIsIm9wZXJhdG9yIiwic2VsZWN0ZWRWYWx1ZXMiLCJMb3ciLCJORSIsInJlc2V0U3RhdGUiLCJQcm9taXNlIiwicmVzb2x2ZSIsImFwcGx5U3RhdGUiLCJfc3RhdGUiLCJfb05hdlBhcmFtZXRlcnMiLCJyZXRyaWV2ZVN0YXRlIiwiZ2V0QXBwbGljYXRpb25JZCIsImdldE1hbmlmZXN0RW50cnkiLCJpZCIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfZmV0Y2hlZENvZGVMaXN0IiwicHJlcGFyZUZpbHRlckJhck1ldGFkYXRhIiwicmVjb21tZW5kZWRRdWVyaWVzIiwibWFjcm9zIiwiZWFzeUZpbHRlciIsImNyZWF0ZUNvbnRlbnQiLCJvd25lciIsIl9nZXRPd25lciIsImRlZmluaXRpb25Gb3JQYWdlIiwicHJlcHJvY2Vzc29yQ29udGV4dCIsImdldERlZmluaXRpb25Gb3JQYWdlIiwiZmlsdGVyQmFyRGVmIiwiZ2V0RmlsdGVyQmFyRGVmaW5pdGlvbiIsIm1ldGFNb2RlbCIsIm1vZGVscyIsImdldFR5cGUiLCJlZG1UeXBlIiwiY29kZUxpc3QiLCJzdGFydHVwUGFyYW1ldGVycyIsImdldENvbXBvbmVudERhdGEiLCJmaWx0ZXJGaWVsZHMiLCJnZXRGaWx0ZXJGaWVsZHMiLCJub25IaWRkZW5GaWx0ZXJGaWVsZHMiLCJmaWx0ZXIiLCJnZXRUYXJnZXQiLCJhbm5vdGF0aW9ucyIsIlVJIiwiSGlkZGVuRmlsdGVyIiwidmFsdWVPZiIsInJlc3VsdCIsIm1hcCIsInByb3BlcnR5T2JqZWN0IiwiaGFzQ29kZUxpc3QiLCJoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMiLCJnZXRDb2RlTGlzdEZvclByb3BlcnR5IiwiYW5ub3RhdGlvblBhdGgiLCJ1bml0QW5ub3RhdGlvbiIsIk1lYXN1cmVzIiwiSVNPQ3VycmVuY3kiLCJVbml0IiwidW5pdFByb3BlcnR5IiwiaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24iLCIkdGFyZ2V0IiwidW5pdCIsImZpbmQiLCJmIiwiaGFzT3duUHJvcGVydHkiLCJFUSIsImlzUGFyYW1ldGVyIiwic3Vic3RyaW5nIiwiZmlsdGVyRmllbGROYW1lIiwibGFiZWwiLCJkYXRhVHlwZSIsInJlcXVpcmVkIiwiZmlsdGVyYWJsZSIsIk1vZGVsSGVscGVyIiwiaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkIiwiZ2V0TWV0YVBhdGgiLCJwcm9wcyIsIkpTT05Nb2RlbCIsImlzRHJhZnRDb2xsYWJvcmF0aXZlIiwiaXNDb2xsYWJvcmF0aW9uRHJhZnRTdXBwb3J0ZWQiLCJjcmVhdGVCaW5kaW5nQ29udGV4dCIsImVkaXRpbmdTdGF0dXNDb2RlTGlzdCIsIkRyYWZ0RWRpdFN0YXRlIiwiZ2V0RWRpdFN0YXRlc0NvbnRleHQiLCJnZXRPYmplY3QiLCJzdGF0ZSIsInZhbHVlIiwiZGVzY3JpcHRpb24iLCJkaXNwbGF5IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJrZXkiLCJwcm9wZXJ0eVBhdGgiLCJkZWZhdWx0VmFsdWVMaXN0IiwiZ2V0VmFsdWVMaXN0IiwidmFsdWVMaXN0SW5mbyIsImxpc3RCaW5kaW5nIiwiJG1vZGVsIiwiYmluZExpc3QiLCJDb2xsZWN0aW9uUGF0aCIsIiRzZWxlY3QiLCJnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlciIsImRhdGEiLCJyZXF1ZXN0Q29udGV4dHMiLCJmaWx0ZXJHcm91cFZhbHVlcyIsIm1hcFZhbHVlTGlzdFRvQ29kZUxpc3QiLCJjb2RlTGlzdFByb3BlcnR5IiwicmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQiLCJmaWVsZE5hbWUiLCJ2YWx1ZXMiLCJfcmVmIiwidmFsdWVMaXN0IiwiVmFsdWVMaXN0SGVscGVyIiwiaXNWYWx1ZUxpc3RTZWFyY2hhYmxlIiwicmVzb2x2ZWRUb2tlblZhbHVlcyIsImFsbCIsInJlc29sdmVUb2tlblZhbHVlIiwiZmxhdCIsInVucmVzb2x2ZWRSZXN1bHQiLCJnZXRNZXRhTW9kZWwiLCJ2YWx1ZUxpc3RzIiwiZ2V0VmFsdWVMaXN0SW5mbyIsIm9uVG9rZW5zQ2hhbmdlZCIsImUiLCJmaWx0ZXJCYXIiLCJVSTVFbGVtZW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJmaWx0ZXJCYXJBUEkiLCJnZXRQYXJlbnQiLCJ0b2tlbnMiLCJnZXRQYXJhbWV0ZXIiLCJjbGVhckVkaXRGaWx0ZXIiLCJzb21lIiwidG9rZW5EZWZpbml0aW9uIiwiX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMiLCJmb3JtYXRlRGF0YVR5cGVzIiwidG9rZW4iLCJ0b2tlbktleVNwZWNpZmljYXRpb24iLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiRmlsdGVyVXRpbHMiLCJhZGRGaWx0ZXJWYWx1ZXMiLCJ0cmlnZ2VyU2VhcmNoIiwiZGF0ZVR5cGUiLCJEYXRlMSIsImRhdGVUaW1lT2Zmc2V0VHlwZSIsIkRhdGVUaW1lT2Zmc2V0IiwiVjQiLCJ0aW1lT2ZEYXlUeXBlIiwiVGltZU9mRGF5Iiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlIiwicmVxdWlyZWRDb252ZXJ0ZXIiLCJpZHgiLCJwYXJzZVZhbHVlIiwic2hvd1ZhbHVlSGVscEZvcktleSIsInNob3dGaWx0ZXJGaWVsZCIsIm9wZW5WYWx1ZUhlbHBGb3JGaWx0ZXJGaWVsZCIsIm9uQmVmb3JlUXVlcnlQcm9jZXNzaW5nIiwidWlNb2RlbCIsImdldE1vZGVsIiwiQnVzeUxvY2tlciIsImxvY2siLCJvbkFmdGVyUXVlcnlQcm9jZXNzaW5nIiwidW5sb2NrIiwib25DbGVhckZpbHRlcnMiLCJvblF1ZXJ5Q2hhbmdlZCIsImZpcmVGaWx0ZXJzQ2hhbmdlZCIsImNvbmRpdGlvbnNCYXNlZCIsImhhbmRsZVNob3dWYWx1ZUhlbHAiLCJldmVudCIsInJlamVjdCIsImNvbmRpdGlvbnMiLCJjb25kaXRpb24iLCJ2YWxpZGF0ZWQiLCJjb25kaXRpb25Ub1Jlc29sdmUiLCJ3YXJuaW5nIiwicmVzb2x2ZWRWYWx1ZXMiLCJFcnJvciIsIlN0cmluZyIsIl9qc3giLCJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiY29udGV4dFBhdGgiLCJnZXRPd25lckNvbnRleHRQYXRoIiwiYXBwSWQiLCJlYXN5RmlsdGVyTGliIiwic2hvd1ZhbHVlSGVscCIsImJpbmQiLCJkYXRhRmV0Y2hlciIsInJlY29tbWVuZGVkVmFsdWVzIiwicXVlcnlDaGFuZ2VkIiwidG9rZW5zQ2hhbmdlZCIsImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZyIsImFmdGVyUXVlcnlQcm9jZXNzaW5nIiwiY2xlYXJGaWx0ZXJzIiwiQnVpbGRpbmdCbG9jayIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJlbnVtZXJhYmxlIiwid3JpdGFibGUiLCJpbml0aWFsaXplciJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRWFzeUZpbHRlckJhci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgdHlwZSB7IEVuaGFuY2VXaXRoVUk1IH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IHsgYWdncmVnYXRpb24sIGFzc29jaWF0aW9uLCBkZWZpbmVVSTVDbGFzcywgaW1wbGVtZW50SW50ZXJmYWNlLCBwcm9wZXJ0eSwgdHlwZSBQcm9wZXJ0aWVzT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7XG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50LFxuXHRFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSxcblx0VG9rZW5EZWZpbml0aW9uLFxuXHRUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbixcblx0VG9rZW5UeXBlLFxuXHRWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25cbn0gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL0Vhc3lGaWx0ZXJCYXJDb250YWluZXJcIjtcbmltcG9ydCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCI7XG5pbXBvcnQgQnVpbGRpbmdCbG9jayBmcm9tIFwic2FwL2ZlL2NvcmUvYnVpbGRpbmdCbG9ja3MvQnVpbGRpbmdCbG9ja1wiO1xuaW1wb3J0IEJ1c3lMb2NrZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL0J1c3lMb2NrZXJcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbFN0YXRlLCBOYXZpZ2F0aW9uUGFyYW1ldGVyIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnRyb2xsZXJleHRlbnNpb25zL1ZpZXdTdGF0ZVwiO1xuaW1wb3J0IHR5cGUgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9sbGVyZXh0ZW5zaW9ucy92aWV3U3RhdGUvSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yXCI7XG5pbXBvcnQgdHlwZSB7IEZpbHRlckZpZWxkIH0gZnJvbSBcInNhcC9mZS9jb3JlL2RlZmluaXRpb24vRkVEZWZpbml0aW9uXCI7XG5pbXBvcnQgdHlwZSBNZXRhUGF0aCBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9NZXRhUGF0aFwiO1xuaW1wb3J0IE1vZGVsSGVscGVyIGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL01vZGVsSGVscGVyXCI7XG5pbXBvcnQgeyBpc1BhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL1R5cGVHdWFyZHNcIjtcbmltcG9ydCB7IGhhc1ZhbHVlSGVscFdpdGhGaXhlZFZhbHVlcyB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1Byb3BlcnR5SGVscGVyXCI7XG5pbXBvcnQge1xuXHRnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcixcblx0bWFwVmFsdWVMaXN0VG9Db2RlTGlzdCxcblx0cmVzb2x2ZVRva2VuVmFsdWUsXG5cdHVucmVzb2x2ZWRSZXN1bHRcbn0gZnJvbSBcInNhcC9mZS9tYWNyb3MvYWkvRWFzeUZpbHRlckRhdGFGZXRjaGVyXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvY29udHJvbHMvRmlsdGVyQmFyXCI7XG5pbXBvcnQgRmlsdGVyVXRpbHMgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyL0ZpbHRlclV0aWxzXCI7XG5pbXBvcnQgRHJhZnRFZGl0U3RhdGUgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0RyYWZ0RWRpdFN0YXRlXCI7XG5pbXBvcnQgdHlwZSBGaWx0ZXJCYXJBUEkgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmlsdGVyQmFyL0ZpbHRlckJhckFQSVwiO1xuaW1wb3J0IFZhbHVlTGlzdEhlbHBlciwgeyB0eXBlIFZhbHVlTGlzdEluZm8gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC92YWx1ZWhlbHAvVmFsdWVMaXN0SGVscGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIE1hbmFnZWRPYmplY3QgZnJvbSBcInNhcC91aS9iYXNlL01hbmFnZWRPYmplY3RcIjtcbmltcG9ydCB0eXBlIHsgJENvbnRyb2xTZXR0aW5ncyB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgVUk1RWxlbWVudCBmcm9tIFwic2FwL3VpL2NvcmUvRWxlbWVudFwiO1xuaW1wb3J0IHR5cGUgeyBDb25kaXRpb25PYmplY3QgfSBmcm9tIFwic2FwL3VpL21kYy9jb25kaXRpb24vQ29uZGl0aW9uXCI7XG5pbXBvcnQgRmlsdGVyT3BlcmF0b3IgZnJvbSBcInNhcC91aS9tb2RlbC9GaWx0ZXJPcGVyYXRvclwiO1xuaW1wb3J0IEpTT05Nb2RlbCBmcm9tIFwic2FwL3VpL21vZGVsL2pzb24vSlNPTk1vZGVsXCI7XG5pbXBvcnQgRGF0ZTEgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS90eXBlL0RhdGVcIjtcbmltcG9ydCBEYXRlVGltZU9mZnNldCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvRGF0ZVRpbWVPZmZzZXRcIjtcbmltcG9ydCB0eXBlIE9EYXRhVHlwZSBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3R5cGUvT0RhdGFUeXBlXCI7XG5pbXBvcnQgVGltZU9mRGF5IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdHlwZS9UaW1lT2ZEYXlcIjtcbmltcG9ydCB0eXBlIE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB0eXBlIHsgQ29kZUxpc3QsIE1heUJlTGF6eSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblxudHlwZSBFYXN5RmlsdGVyQmFyU3RhdGUgPSB7fTtcbnR5cGUgRmllbGRNZXRhZGF0YSA9IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhICYgeyBmaWx0ZXJGaWVsZE5hbWU6IHN0cmluZyB9O1xuXG4vKipcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICogQGV4cGVyaW1lbnRhbFxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLkVhc3lGaWx0ZXJCYXJcIilcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVhc3lGaWx0ZXJCYXIgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrIGltcGxlbWVudHMgSVZpZXdTdGF0ZUNvbnRyaWJ1dG9yPEVhc3lGaWx0ZXJCYXJTdGF0ZT4ge1xuXHRAaW1wbGVtZW50SW50ZXJmYWNlKFwic2FwLmZlLmNvcmUuY29udHJvbGxlcmV4dGVuc2lvbnMudmlld1N0YXRlLklWaWV3U3RhdGVDb250cmlidXRvclwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF9mZV9jb3JlX2NvbnRyb2xsZXJleHRlbnNpb25zX3ZpZXdTdGF0ZV9JVmlld1N0YXRlQ29udHJpYnV0b3IhOiBib29sZWFuO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5maWx0ZXJCYXIuRmlsdGVyQmFyQVBJXCIgfSlcblx0ZmlsdGVyQmFyITogc3RyaW5nO1xuXG5cdEBhc3NvY2lhdGlvbih7IHR5cGU6IFwic2FwLmZlLm1hY3Jvcy5jb250ZW50U3dpdGNoZXIuQ29udGVudFN3aXRjaGVyXCIgfSlcblx0Y29udGVudFN3aXRjaGVyITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGVudFN3aXRjaGVyS2V5Pzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIgfSlcblx0Y29udGVudD86IEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJCYXJDb250YWluZXI+O1xuXG5cdF9mZXRjaGVkQ29kZUxpc3QhOiBSZWNvcmQ8c3RyaW5nLCBDb2RlTGlzdCB8IHVuZGVmaW5lZD47XG5cblx0cHJpdmF0ZSBmaWx0ZXJCYXJNZXRhZGF0YSE6IEZpZWxkTWV0YWRhdGFbXTtcblxuXHRwcml2YXRlIGVhc3lGaWx0ZXJQYXRoPzogc3RyaW5nO1xuXG5cdHByaXZhdGUgcmVjb21tZW5kZWRRdWVyaWVzPzogc3RyaW5nW107XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyPiwgb3RoZXJzPzogJENvbnRyb2xTZXR0aW5ncykge1xuXHRcdHN1cGVyKHByb3BlcnRpZXMsIG90aGVycyk7XG5cdFx0dGhpcy5nZXRBcHBDb21wb25lbnQoKVxuXHRcdFx0Py5nZXRFbnZpcm9ubWVudENhcGFiaWxpdGllcygpXG5cdFx0XHQucHJlcGFyZUZlYXR1cmUoXCJNYWdpY0ZpbHRlcmluZ1wiKVxuXHRcdFx0LnRoZW4oKCkgPT4ge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJQYXRoID0gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcblx0XHRcdFx0dGhpcy5jb250ZW50Py5zZXRFYXN5RmlsdGVyTGliKHRoaXMuZWFzeUZpbHRlclBhdGgpO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9KVxuXHRcdFx0LmNhdGNoKChlcnJvcikgPT4ge1xuXHRcdFx0XHRMb2cuZGVidWcoXCJFcnJvciB3aGlsZSBsb2FkaW5nIEVhc3lGaWx0ZXJcIiwgZXJyb3IpO1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSk7XG5cdH1cblxuXHRhc3luYyBhcHBseUxlZ2FjeVN0YXRlKFxuXHRcdGdldENvbnRyaWxTdGF0ZT86IChjb250cm9sOiBNYW5hZ2VkT2JqZWN0KSA9PiBDb250cm9sU3RhdGUsXG5cdFx0b05hdlBhcmFtZXRlcnM/OiBOYXZpZ2F0aW9uUGFyYW1ldGVyLFxuXHRcdF9zaG91bGRBcHBseURpZmZTdGF0ZT86IGJvb2xlYW4sXG5cdFx0X3NraXBNZXJnZT86IGJvb2xlYW5cblx0KTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKG9OYXZQYXJhbWV0ZXJzPy5zZWxlY3Rpb25WYXJpYW50KSB7XG5cdFx0XHRjb25zdCBzZWxlY3RPcHRpb25zTmFtZXMgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50LmdldFNlbGVjdE9wdGlvbnNQcm9wZXJ0eU5hbWVzKCk7XG5cdFx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhLmZvckVhY2goKGZpZWxkKSA9PiB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb25zTmFtZXMuaW5jbHVkZXMoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRmaWVsZC5kZWZhdWx0VmFsdWUgPSBvTmF2UGFyYW1ldGVycy5zZWxlY3Rpb25WYXJpYW50IS5nZXRTZWxlY3RPcHRpb24oZmllbGQubmFtZSk/LnJlZHVjZSgoYWNjLCBvcHRpb24pID0+IHtcblx0XHRcdFx0XHRcdGlmIChvcHRpb24uU2lnbiA9PT0gXCJJXCIpIHtcblx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLkJUIHx8IG9wdGlvbi5PcHRpb24gPT09IEZpbHRlck9wZXJhdG9yLk5CKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9wdGlvbi5IaWdoICE9PSBudWxsICYmIG9wdGlvbi5IaWdoICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdGFjYy5wdXNoKHsgb3BlcmF0b3I6IG9wdGlvbi5PcHRpb24sIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvdywgb3B0aW9uLkhpZ2hdIH0pO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRhY2MucHVzaCh7XG5cdFx0XHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogb3B0aW9uLk9wdGlvbiBhcyBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPixcblx0XHRcdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd11cblx0XHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0YWNjLnB1c2goeyBvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuTkUsIHNlbGVjdGVkVmFsdWVzOiBbb3B0aW9uLkxvd10gfSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRyZXR1cm4gYWNjO1xuXHRcdFx0XHRcdH0sIFtdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHRcdHRoaXMuY29udGVudD8ucmVzZXRTdGF0ZShmYWxzZSk7XG5cdFx0fVxuXHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKTtcblx0fVxuXG5cdGFwcGx5U3RhdGUoX3N0YXRlOiBFYXN5RmlsdGVyQmFyU3RhdGUsIF9vTmF2UGFyYW1ldGVycz86IE5hdmlnYXRpb25QYXJhbWV0ZXIpOiBQcm9taXNlPHZvaWQ+IHwgdm9pZCB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdHJldHJpZXZlU3RhdGUoKTogRWFzeUZpbHRlckJhclN0YXRlIHwgbnVsbCB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0Z2V0QXBwbGljYXRpb25JZCgpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmFwcFwiKS5pZCA/PyBcIjx1bmtub3duSUQ+XCI7XG5cdH1cblxuXHRvbk1ldGFkYXRhQXZhaWxhYmxlKCk6IHZvaWQge1xuXHRcdHRoaXMuX2ZldGNoZWRDb2RlTGlzdCA/Pz0ge307XG5cdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YSA9IHRoaXMucHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk7XG5cdFx0dGhpcy5yZWNvbW1lbmRlZFF1ZXJpZXMgPSB0aGlzLmdldEFwcENvbXBvbmVudCgpPy5nZXRNYW5pZmVzdEVudHJ5KFwic2FwLmZlXCIpPy5tYWNyb3M/LmVhc3lGaWx0ZXI/LnJlY29tbWVuZGVkUXVlcmllcyA/PyBbXTtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKSBhcyBFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPjtcblx0XHR0aGlzLmNvbnRlbnQuZmlsdGVyQmFyTWV0YWRhdGEgPSB0aGlzLmZpbHRlckJhck1ldGFkYXRhO1xuXHR9XG5cblx0cHJlcGFyZUZpbHRlckJhck1ldGFkYXRhKCk6IEZpZWxkTWV0YWRhdGFbXSB7XG5cdFx0Y29uc3Qgb3duZXIgPSB0aGlzLl9nZXRPd25lcigpITtcblx0XHRjb25zdCBkZWZpbml0aW9uRm9yUGFnZSA9IG93bmVyLnByZXByb2Nlc3NvckNvbnRleHQ/LmdldERlZmluaXRpb25Gb3JQYWdlKCk7XG5cdFx0bGV0IGZpbHRlckJhckRlZjtcblx0XHRpZiAoZGVmaW5pdGlvbkZvclBhZ2UpIHtcblx0XHRcdGZpbHRlckJhckRlZiA9IGRlZmluaXRpb25Gb3JQYWdlLmdldEZpbHRlckJhckRlZmluaXRpb24oe30pO1xuXG5cdFx0XHRjb25zdCBtZXRhTW9kZWwgPSBvd25lci5wcmVwcm9jZXNzb3JDb250ZXh0Py5tb2RlbHMubWV0YU1vZGVsIGFzIE9EYXRhTWV0YU1vZGVsO1xuXG5cdFx0XHRjb25zdCBnZXRUeXBlID0gKGVkbVR5cGU6IHN0cmluZywgY29kZUxpc3Q6IE1heUJlTGF6eTxDb2RlTGlzdD4gfCB1bmRlZmluZWQpOiBUb2tlblR5cGUgPT4ge1xuXHRcdFx0XHRpZiAoY29kZUxpc3QpIHtcblx0XHRcdFx0XHRyZXR1cm4gXCJNZW51V2l0aENoZWNrQm94XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3dpdGNoIChlZG1UeXBlKSB7XG5cdFx0XHRcdFx0Y2FzZSBcIkVkbS5EYXRlXCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJDYWxlbmRhclwiO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXR1cm4gXCJUaW1lXCI7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHJldHVybiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXHRcdFx0Y29uc3Qgc3RhcnR1cFBhcmFtZXRlcnMgPSBvd25lci5nZXRBcHBDb21wb25lbnQoKS5nZXRDb21wb25lbnREYXRhKCk/LnN0YXJ0dXBQYXJhbWV0ZXJzID8/IHt9O1xuXG5cdFx0XHRjb25zdCBmaWx0ZXJGaWVsZHMgPSBmaWx0ZXJCYXJEZWYuZ2V0RmlsdGVyRmllbGRzKCk7XG5cdFx0XHRjb25zdCBub25IaWRkZW5GaWx0ZXJGaWVsZHMgPSBmaWx0ZXJGaWVsZHMuZmlsdGVyKChmaWVsZDogRmlsdGVyRmllbGQpID0+IHtcblx0XHRcdFx0cmV0dXJuICFmaWVsZC5nZXRUYXJnZXQoKT8uYW5ub3RhdGlvbnM/LlVJPy5IaWRkZW5GaWx0ZXI/LnZhbHVlT2YoKTtcblx0XHRcdH0pO1xuXHRcdFx0Y29uc3QgcmVzdWx0ID0gbm9uSGlkZGVuRmlsdGVyRmllbGRzLm1hcCgoZmllbGQ6IEZpbHRlckZpZWxkKTogRmllbGRNZXRhZGF0YSA9PiB7XG5cdFx0XHRcdGNvbnN0IHByb3BlcnR5T2JqZWN0ID0gZmllbGQuZ2V0VGFyZ2V0KCk7XG5cdFx0XHRcdGxldCBjb2RlTGlzdDogTWF5QmVMYXp5PENvZGVMaXN0PiB8IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgaGFzQ29kZUxpc3QgPSBoYXNWYWx1ZUhlbHBXaXRoRml4ZWRWYWx1ZXMocHJvcGVydHlPYmplY3QpO1xuXHRcdFx0XHRpZiAoaGFzQ29kZUxpc3QpIHtcblx0XHRcdFx0XHRjb2RlTGlzdCA9IHRoaXMuX2ZldGNoZWRDb2RlTGlzdFtmaWVsZC5uYW1lXTtcblx0XHRcdFx0XHRpZiAoIWNvZGVMaXN0KSB7XG5cdFx0XHRcdFx0XHRjb2RlTGlzdCA9IGFzeW5jICgpOiBQcm9taXNlPENvZGVMaXN0PiA9PiB0aGlzLmdldENvZGVMaXN0Rm9yUHJvcGVydHkoZmllbGQubmFtZSwgZmllbGQuYW5ub3RhdGlvblBhdGghKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDaGVjayBpZiB0aGUgZmlsdGVyIGZpZWxkJ3MgdGFyZ2V0IHByb3BlcnR5IGhhcyBhIGN1cnJlbmN5IG9yIGEgdW5pdC4gSWYgc28sIGxvb2sgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGZpbHRlciBmaWVsZCAodGhlXG5cdFx0XHRcdC8vIGFubm90YXRpb24gaGFzIHRvIGJlIGEgcGF0aCBmb3IgdGhhdCkgYW5kIHNldCB0aGUgJ3VuaXQnIHByb3BlcnR5LlxuXHRcdFx0XHRjb25zdCB1bml0QW5ub3RhdGlvbiA9IHByb3BlcnR5T2JqZWN0LmFubm90YXRpb25zLk1lYXN1cmVzPy5JU09DdXJyZW5jeSA/PyBwcm9wZXJ0eU9iamVjdC5hbm5vdGF0aW9ucy5NZWFzdXJlcz8uVW5pdDtcblx0XHRcdFx0Y29uc3QgdW5pdFByb3BlcnR5ID0gaXNQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb24odW5pdEFubm90YXRpb24pID8gdW5pdEFubm90YXRpb24uJHRhcmdldCA6IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgdW5pdCA9IHVuaXRQcm9wZXJ0eSA/IGZpbHRlckZpZWxkcy5maW5kKChmKSA9PiBmLmdldFRhcmdldCgpID09PSB1bml0UHJvcGVydHkpPy5uYW1lIDogdW5kZWZpbmVkO1xuXHRcdFx0XHRsZXQgZGVmYXVsdFZhbHVlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgdW5kZWZpbmVkO1xuXHRcdFx0XHRpZiAoc3RhcnR1cFBhcmFtZXRlcnMuaGFzT3duUHJvcGVydHkoZmllbGQubmFtZSkpIHtcblx0XHRcdFx0XHRkZWZhdWx0VmFsdWUgPSBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5FUSxcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0YXJ0dXBQYXJhbWV0ZXJzW2ZpZWxkLm5hbWVdIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGZpZWxkLmlzUGFyYW1ldGVyICYmIHN0YXJ0dXBQYXJhbWV0ZXJzLmhhc093blByb3BlcnR5KGZpZWxkLm5hbWUuc3Vic3RyaW5nKDIpKSkge1xuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZSA9IFtcblx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkVRLFxuXHRcdFx0XHRcdFx0XHRzZWxlY3RlZFZhbHVlczogc3RhcnR1cFBhcmFtZXRlcnNbZmllbGQubmFtZS5zdWJzdHJpbmcoMildIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW1wic2VsZWN0ZWRWYWx1ZXNcIl1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0bmFtZTogZmllbGQuYW5ub3RhdGlvblBhdGghLFxuXHRcdFx0XHRcdGZpbHRlckZpZWxkTmFtZTogZmllbGQubmFtZSxcblx0XHRcdFx0XHRsYWJlbDogZmllbGQubGFiZWwsXG5cdFx0XHRcdFx0ZGF0YVR5cGU6IHByb3BlcnR5T2JqZWN0LnR5cGUsXG5cdFx0XHRcdFx0cmVxdWlyZWQ6IGZpZWxkLnJlcXVpcmVkID8/IGZhbHNlLFxuXHRcdFx0XHRcdGRlZmF1bHRWYWx1ZTogZGVmYXVsdFZhbHVlLFxuXHRcdFx0XHRcdGZpbHRlcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29kZUxpc3Q6IGNvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IGdldFR5cGUocHJvcGVydHlPYmplY3QudHlwZSwgY29kZUxpc3QpIGFzIEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPixcblx0XHRcdFx0XHR1bml0OiB1bml0XG5cdFx0XHRcdH07XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gW0VkaXRpbmcgU3RhdHVzXVxuXG5cdFx0XHRpZiAoTW9kZWxIZWxwZXIuaXNNZXRhUGF0aERyYWZ0U3VwcG9ydGVkKGRlZmluaXRpb25Gb3JQYWdlLmdldE1ldGFQYXRoKCkgYXMgdW5rbm93biBhcyBNZXRhUGF0aDx1bmtub3duPikpIHtcblx0XHRcdFx0Ly8gQXNzZW1ibGUgdGhlIGNvZGUgbGlzdCBmb3IgdGhlIGVkaXRpbmcgc3RhdHVzIGZpbHRlciB2YWx1ZXM6XG5cdFx0XHRcdGNvbnN0IHByb3BzID0gbmV3IEpTT05Nb2RlbCh7XG5cdFx0XHRcdFx0aXNEcmFmdENvbGxhYm9yYXRpdmU6IE1vZGVsSGVscGVyLmlzQ29sbGFib3JhdGlvbkRyYWZ0U3VwcG9ydGVkKG1ldGFNb2RlbClcblx0XHRcdFx0fSkuY3JlYXRlQmluZGluZ0NvbnRleHQoXCIvXCIpO1xuXG5cdFx0XHRcdGNvbnN0IGVkaXRpbmdTdGF0dXNDb2RlTGlzdCA9IERyYWZ0RWRpdFN0YXRlLmdldEVkaXRTdGF0ZXNDb250ZXh0KHByb3BzKVxuXHRcdFx0XHRcdC5nZXRPYmplY3QoXCIvXCIpXG5cdFx0XHRcdFx0Lm1hcCgoc3RhdGU6IHsgaWQ6IHN0cmluZzsgZGlzcGxheTogc3RyaW5nIH0pID0+ICh7IHZhbHVlOiBzdGF0ZS5pZCwgZGVzY3JpcHRpb246IHN0YXRlLmRpc3BsYXkgfSkpO1xuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0XHRuYW1lOiBcIiRlZGl0U3RhdGVcIixcblx0XHRcdFx0XHRmaWx0ZXJGaWVsZE5hbWU6IFwiJGVkaXRTdGF0ZVwiLFxuXHRcdFx0XHRcdGxhYmVsOiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiRklMVEVSQkFSX0VESVRJTkdfU1RBVFVTXCIpLFxuXHRcdFx0XHRcdGRhdGFUeXBlOiBcIkVkbS5TdHJpbmdcIixcblx0XHRcdFx0XHRyZXF1aXJlZDogZmFsc2UsXG5cdFx0XHRcdFx0ZmlsdGVyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHRjb2RlTGlzdDogZWRpdGluZ1N0YXR1c0NvZGVMaXN0LFxuXHRcdFx0XHRcdHR5cGU6IFwiTWVudVdpdGhDaGVja0JveFwiXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cblx0YXN5bmMgZ2V0Q29kZUxpc3RGb3JQcm9wZXJ0eShrZXk6IHN0cmluZywgcHJvcGVydHlQYXRoOiBzdHJpbmcpOiBQcm9taXNlPENvZGVMaXN0PiB7XG5cdFx0Y29uc3QgZGVmYXVsdFZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KHByb3BlcnR5UGF0aCk7XG5cblx0XHRpZiAoIWRlZmF1bHRWYWx1ZUxpc3QpIHtcblx0XHRcdHJldHVybiBbXTtcblx0XHR9XG5cblx0XHRjb25zdCB2YWx1ZUxpc3RJbmZvID0gZGVmYXVsdFZhbHVlTGlzdC52YWx1ZUxpc3RJbmZvO1xuXG5cdFx0Y29uc3QgbGlzdEJpbmRpbmcgPSB2YWx1ZUxpc3RJbmZvLiRtb2RlbC5iaW5kTGlzdChgLyR7dmFsdWVMaXN0SW5mby5Db2xsZWN0aW9uUGF0aH1gLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCB7XG5cdFx0XHQkc2VsZWN0OiBnZW5lcmF0ZVNlbGVjdFBhcmFtZXRlcihkZWZhdWx0VmFsdWVMaXN0KVxuXHRcdH0pO1xuXHRcdGNvbnN0IGRhdGEgPSBhd2FpdCBsaXN0QmluZGluZy5yZXF1ZXN0Q29udGV4dHMoKTtcblxuXHRcdGNvbnN0IGZpbHRlckdyb3VwVmFsdWVzID0gZGF0YS5tYXAobWFwVmFsdWVMaXN0VG9Db2RlTGlzdChkZWZhdWx0VmFsdWVMaXN0KSk7XG5cdFx0dGhpcy5fZmV0Y2hlZENvZGVMaXN0W2tleV0gPSBmaWx0ZXJHcm91cFZhbHVlcztcblx0XHRjb25zdCBjb2RlTGlzdFByb3BlcnR5ID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChmaWVsZCkgPT4gZmllbGQubmFtZSA9PT0ga2V5KTtcblx0XHRpZiAoY29kZUxpc3RQcm9wZXJ0eSkge1xuXHRcdFx0Y29kZUxpc3RQcm9wZXJ0eS5jb2RlTGlzdCA9IGZpbHRlckdyb3VwVmFsdWVzO1xuXHRcdH1cblx0XHRyZXR1cm4gZmlsdGVyR3JvdXBWYWx1ZXM7XG5cdH1cblxuXHRhc3luYyByZXNvbHZlVG9rZW5WYWx1ZXNGb3JGaWVsZChcblx0XHRmaWVsZE5hbWU6IHN0cmluZyxcblx0XHR2YWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW11cblx0KTogUHJvbWlzZTxWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXT4ge1xuXHRcdGNvbnN0IGZpZWxkID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKCh7IG5hbWUgfSkgPT4gbmFtZSA9PT0gZmllbGROYW1lKTtcblx0XHRpZiAoZmllbGQpIHtcblx0XHRcdGNvbnN0IHZhbHVlTGlzdCA9IGF3YWl0IHRoaXMuZ2V0VmFsdWVMaXN0KGZpZWxkLm5hbWUpO1xuXG5cdFx0XHRpZiAodmFsdWVMaXN0ICYmIFZhbHVlTGlzdEhlbHBlci5pc1ZhbHVlTGlzdFNlYXJjaGFibGUoZmllbGQubmFtZSwgdmFsdWVMaXN0KSkge1xuXHRcdFx0XHRjb25zdCByZXNvbHZlZFRva2VuVmFsdWVzID0gYXdhaXQgUHJvbWlzZS5hbGwodmFsdWVzLm1hcChhc3luYyAodmFsdWUpID0+IHJlc29sdmVUb2tlblZhbHVlKHZhbHVlTGlzdCwgdmFsdWUpKSk7XG5cdFx0XHRcdHJldHVybiByZXNvbHZlZFRva2VuVmFsdWVzLmZsYXQoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyByZXR1cm4gb3JpZ2luYWwgdmFsdWVzIGNvbnZlcnRlZCB0byB0aGUgZXhwZWN0ZWQgZm9ybWF0XG5cdFx0cmV0dXJuIHVucmVzb2x2ZWRSZXN1bHQodmFsdWVzKTtcblx0fVxuXG5cdGFzeW5jIGdldFZhbHVlTGlzdChmaWVsZE5hbWU6IHN0cmluZyk6IFByb21pc2U8VmFsdWVMaXN0SW5mbyB8IHVuZGVmaW5lZD4ge1xuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCkhO1xuXHRcdGNvbnN0IHZhbHVlTGlzdHMgPSBhd2FpdCBWYWx1ZUxpc3RIZWxwZXIuZ2V0VmFsdWVMaXN0SW5mbyh1bmRlZmluZWQsIGZpZWxkTmFtZSwgdW5kZWZpbmVkLCBtZXRhTW9kZWwpO1xuXHRcdHJldHVybiB2YWx1ZUxpc3RzWzBdO1xuXHR9XG5cblx0YXN5bmMgb25Ub2tlbnNDaGFuZ2VkKGU6IFVJNUV2ZW50PHsgdG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSB9LCBFYXN5RmlsdGVyQmFyQ29udGFpbmVyPik6IFByb21pc2U8dm9pZD4ge1xuXHRcdGNvbnN0IGZpbHRlckJhciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJCYXIpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGNvbnN0IHRva2VucyA9IGUuZ2V0UGFyYW1ldGVyKFwidG9rZW5zXCIpO1xuXHRcdGNvbnN0IGNsZWFyRWRpdEZpbHRlciA9IHRva2Vucy5zb21lKCh0b2tlbkRlZmluaXRpb24pID0+IHRva2VuRGVmaW5pdGlvbi5rZXkgPT09IFwiJGVkaXRTdGF0ZVwiKTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuX2NsZWFyRmlsdGVyVmFsdWVzV2l0aE9wdGlvbnMoZmlsdGVyQmFyLCB7IGNsZWFyRWRpdEZpbHRlciB9KTtcblx0XHR0aGlzLmZvcm1hdGVEYXRhVHlwZXModG9rZW5zKTtcblxuXHRcdGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG5cdFx0XHRpZiAodG9rZW4ua2V5ID09PSBcIiRlZGl0U3RhdGVcIikge1xuXHRcdFx0XHQvLyBjb252ZXJ0IHRoZSAkZWRpdFN0YXRlIGZpbHRlciBjb25kaXRpb25cblx0XHRcdFx0Zm9yIChjb25zdCB0b2tlbktleVNwZWNpZmljYXRpb24gb2YgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcykge1xuXHRcdFx0XHRcdGF3YWl0IEZpbHRlclV0aWxzLmFkZEZpbHRlclZhbHVlcyhcblx0XHRcdFx0XHRcdGZpbHRlckJhckFQSS5jb250ZW50LFxuXHRcdFx0XHRcdFx0dG9rZW4ua2V5LFxuXHRcdFx0XHRcdFx0XCJEUkFGVF9FRElUX1NUQVRFXCIsXG5cdFx0XHRcdFx0XHR0b2tlbktleVNwZWNpZmljYXRpb24uc2VsZWN0ZWRWYWx1ZXNcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSB0b2tlbi5rZXkpITtcblx0XHRcdFx0Zm9yIChjb25zdCB0b2tlbktleVNwZWNpZmljYXRpb24gb2YgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcykge1xuXHRcdFx0XHRcdGNvbnN0IHsgb3BlcmF0b3IsIHNlbGVjdGVkVmFsdWVzIH0gPSB0b2tlbktleVNwZWNpZmljYXRpb247XG5cdFx0XHRcdFx0YXdhaXQgRmlsdGVyVXRpbHMuYWRkRmlsdGVyVmFsdWVzKGZpbHRlckJhckFQSS5jb250ZW50LCBmaWVsZC5uYW1lLCBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGF3YWl0IGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdH1cblxuXHQvL1dlIG5lZWQgdGhlIGJlbG93IGZ1bmN0aW9uIHNvIHRoYXQgdGhlIGRhdGUgb2JqZWN0cyBhbmQgZGF0ZVRpbWVPZmZzZXRzIHdvdWxkIGJlIGNvbnZlcnRlZCB0byBzdHJpbmcgdHlwZSBhcyB0aGUgZGF0ZSBvYmplY3QgaXMgbm90IGEgdmFsaWQgdHlwZSBpbiBWNCB3b3JsZFxuXHRmb3JtYXRlRGF0YVR5cGVzKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiB2b2lkIHtcblx0XHRjb25zdCBkYXRlVHlwZSA9IG5ldyBEYXRlMSgpLFxuXHRcdFx0ZGF0ZVRpbWVPZmZzZXRUeXBlID0gbmV3IERhdGVUaW1lT2Zmc2V0KHVuZGVmaW5lZCwgeyBWNDogdHJ1ZSB9KSxcblx0XHRcdHRpbWVPZkRheVR5cGUgPSBuZXcgVGltZU9mRGF5KCk7XG5cdFx0dG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRjb25zdCBlZG1UeXBlID0gdGhpcy5maWx0ZXJCYXJNZXRhZGF0YS5maW5kKChkYXRhKSA9PiBkYXRhLm5hbWUgPT09IHRva2VuLmtleSk/LmRhdGFUeXBlO1xuXHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWUpID0+IHtcblx0XHRcdFx0bGV0IHJlcXVpcmVkQ29udmVydGVyOiBPRGF0YVR5cGU7XG5cdFx0XHRcdHN3aXRjaCAoZWRtVHlwZSkge1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uRGF0ZVwiOlxuXHRcdFx0XHRcdFx0cmVxdWlyZWRDb252ZXJ0ZXIgPSBkYXRlVHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJFZG0uVGltZU9mRGF5XCI6XG5cdFx0XHRcdFx0XHRyZXF1aXJlZENvbnZlcnRlciA9IHRpbWVPZkRheVR5cGU7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCI6XG5cdFx0XHRcdFx0XHRyZXF1aXJlZENvbnZlcnRlciA9IGRhdGVUaW1lT2Zmc2V0VHlwZTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlLnNlbGVjdGVkVmFsdWVzLmZvckVhY2goKHZhbHVlLCBpZHgpID0+IHtcblx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbaWR4XSA9IHJlcXVpcmVkQ29udmVydGVyLnBhcnNlVmFsdWUodmFsdWUsIFwib2JqZWN0XCIpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHR9XG5cblx0YXN5bmMgc2hvd1ZhbHVlSGVscEZvcktleShrZXk6IHN0cmluZyk6IFByb21pc2U8Q29uZGl0aW9uT2JqZWN0W10+IHtcblx0XHRjb25zdCBmaWVsZCA9IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEuZmluZCgoZikgPT4gZi5uYW1lID09PSBrZXkpITtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0Y29uc3QgZmlsdGVyQmFyQVBJID0gZmlsdGVyQmFyLmdldFBhcmVudCgpIGFzIEZpbHRlckJhckFQSTtcblx0XHRhd2FpdCBmaWx0ZXJCYXJBUEkuc2hvd0ZpbHRlckZpZWxkKGZpZWxkLm5hbWUpO1xuXHRcdHJldHVybiBmaWx0ZXJCYXJBUEkub3BlblZhbHVlSGVscEZvckZpbHRlckZpZWxkKGZpZWxkLm5hbWUpO1xuXHR9XG5cblx0b25CZWZvcmVRdWVyeVByb2Nlc3NpbmcoKTogdm9pZCB7XG5cdFx0Y29uc3QgdWlNb2RlbCA9IHRoaXMuZ2V0TW9kZWwoXCJ1aVwiKSBhcyBKU09OTW9kZWw7XG5cdFx0QnVzeUxvY2tlci5sb2NrKHVpTW9kZWwpO1xuXHR9XG5cblx0b25BZnRlclF1ZXJ5UHJvY2Vzc2luZygpOiB2b2lkIHtcblx0XHRjb25zdCB1aU1vZGVsID0gdGhpcy5nZXRNb2RlbChcInVpXCIpIGFzIEpTT05Nb2RlbDtcblx0XHRCdXN5TG9ja2VyLnVubG9jayh1aU1vZGVsKTtcblx0fVxuXG5cdGFzeW5jIG9uQ2xlYXJGaWx0ZXJzKCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdC8vIEVtcHR5IGlucHV0OiBjbGVhciB0aGUgZmlsdGVycyBhbmQgcmVmcmVzaCB0aGUgbGlzdFxuXHRcdGNvbnN0IGZpbHRlckJhciA9IFVJNUVsZW1lbnQuZ2V0RWxlbWVudEJ5SWQodGhpcy5maWx0ZXJCYXIpIGFzIEZpbHRlckJhcjtcblx0XHRjb25zdCBmaWx0ZXJCYXJBUEkgPSBmaWx0ZXJCYXIuZ2V0UGFyZW50KCkgYXMgRmlsdGVyQmFyQVBJO1xuXHRcdGF3YWl0IGZpbHRlckJhckFQSS5fY2xlYXJGaWx0ZXJWYWx1ZXNXaXRoT3B0aW9ucyhmaWx0ZXJCYXIpO1xuXHRcdGF3YWl0IGZpbHRlckJhckFQSS50cmlnZ2VyU2VhcmNoKCk7XG5cdH1cblxuXHRvblF1ZXJ5Q2hhbmdlZCgpOiB2b2lkIHtcblx0XHRjb25zdCBmaWx0ZXJCYXIgPSBVSTVFbGVtZW50LmdldEVsZW1lbnRCeUlkKHRoaXMuZmlsdGVyQmFyKSBhcyBGaWx0ZXJCYXI7XG5cdFx0ZmlsdGVyQmFyLmZpcmVGaWx0ZXJzQ2hhbmdlZCh7IGNvbmRpdGlvbnNCYXNlZDogdHJ1ZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgYXN5bmMgaGFuZGxlU2hvd1ZhbHVlSGVscChldmVudDogRWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQpOiBQcm9taXNlPHZvaWQ+IHtcblx0XHRjb25zdCBrZXkgPSBldmVudC5nZXRQYXJhbWV0ZXIoXCJrZXlcIik7XG5cdFx0Y29uc3QgcmVzb2x2ZSA9IGV2ZW50LmdldFBhcmFtZXRlcihcInJlc29sdmVcIik7XG5cdFx0Y29uc3QgcmVqZWN0ID0gZXZlbnQuZ2V0UGFyYW1ldGVyKFwicmVqZWN0XCIpO1xuXG5cdFx0dHJ5IHtcblx0XHRcdGNvbnN0IGNvbmRpdGlvbnMgPSBhd2FpdCB0aGlzLnNob3dWYWx1ZUhlbHBGb3JLZXkoa2V5KTtcblxuXHRcdFx0Y29uc3Qgc2VsZWN0ZWRWYWx1ZXMgPSBjb25kaXRpb25zLm1hcChhc3luYyAoY29uZGl0aW9uKSA9PiB7XG5cdFx0XHRcdGNvbnN0IG9wZXJhdG9yID0gY29uZGl0aW9uLm9wZXJhdG9yIGFzIEZpbHRlck9wZXJhdG9yO1xuXG5cdFx0XHRcdGlmIChjb25kaXRpb24udmFsaWRhdGVkID09PSBcIk5vdFZhbGlkYXRlZFwiKSB7XG5cdFx0XHRcdFx0Ly8gbm90IHZhbGlkYXRlZDogdGhlIGNvbmRpdGlvbiBvbmx5IGhhcyB2YWx1ZXMgd2l0aG91dCBkZXNjcmlwdGlvbiAtIHRyeSB0byBnZXQgdGhlIGRlc2NyaXB0aW9uIHVzaW5nIHRoZSBkYXRhIGZldGNoZXIgbWVjaGFuaXNtLlxuXHRcdFx0XHRcdC8vIGBjb25kaXRpb24udmFsdWVzYCBpcyBhIHNpbmdsZSB2YWx1ZSBgW3ZhbHVlXWAgKG9yIGBbbG93ZXIgYm91bmQsIHVwcGVyIGJvdW5kXWAgZm9yIEJUL05CIG9wZXJhdG9ycykuXG5cdFx0XHRcdFx0Y29uc3QgY29uZGl0aW9uVG9SZXNvbHZlOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdFx0XHRcdFx0XHRvcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwgb3BlcmF0b3IgPT09IEZpbHRlck9wZXJhdG9yLk5CXG5cdFx0XHRcdFx0XHRcdD8geyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFtjb25kaXRpb24udmFsdWVzWzBdLCBjb25kaXRpb24udmFsdWVzWzFdXSB9XG5cdFx0XHRcdFx0XHRcdDogeyBvcGVyYXRvciwgc2VsZWN0ZWRWYWx1ZXM6IFtjb25kaXRpb24udmFsdWVzWzBdXSB9O1xuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMucmVzb2x2ZVRva2VuVmFsdWVzRm9yRmllbGQoa2V5LCBbY29uZGl0aW9uVG9SZXNvbHZlXSk7XG5cdFx0XHRcdH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IEZpbHRlck9wZXJhdG9yLkJUICYmIG9wZXJhdG9yICE9PSBGaWx0ZXJPcGVyYXRvci5OQikge1xuXHRcdFx0XHRcdC8vIHZhbGlkYXRlZDogYm90aCB2YWx1ZSBhbmQgZGVzY3JpcHRpb24gYXJlIGF2YWlsYWJsZSAtIGRpcmVjdGx5IG1hcCB0aGVtIHRvIHRoZSByZXN1bHRcblx0XHRcdFx0XHQvLyBgY29uZGl0aW9uLnZhbHVlc2AgaXMgYSB0dXBsZSBvZiBgW3ZhbHVlLCBkZXNjcmlwdGlvbj9dYFxuXHRcdFx0XHRcdGNvbnN0IFt2YWx1ZSwgZGVzY3JpcHRpb25dID0gY29uZGl0aW9uLnZhbHVlcyBhcyBbc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbiwgc3RyaW5nIHwgdW5kZWZpbmVkXTtcblx0XHRcdFx0XHRyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFt7IG9wZXJhdG9yLCBzZWxlY3RlZFZhbHVlczogW3sgdmFsdWUsIGRlc2NyaXB0aW9uOiBkZXNjcmlwdGlvbiA/PyB2YWx1ZSB9XSB9XSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Ly8gc2hvdWxkIG5vdCBvY2N1cjogQlQvTkIgYXJlIGV4cGVjdGVkIHRvIGJlIFwiTm90VmFsaWRhdGVkXCIgY29uZGl0aW9uc1xuXHRcdFx0XHRcdExvZy53YXJuaW5nKGBVbmV4cGVjdGVkIGNvbmRpdGlvbiBmb3IgZmllbGQgJHtrZXl9OiBvcGVyYXRvciAke29wZXJhdG9yfSB3aXRoIHZhbHVlcyAke2NvbmRpdGlvbi52YWx1ZXN9LmApO1xuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblxuXHRcdFx0Y29uc3QgcmVzb2x2ZWRWYWx1ZXMgPSBhd2FpdCBQcm9taXNlLmFsbChzZWxlY3RlZFZhbHVlcyk7XG5cdFx0XHRyZXNvbHZlKHJlc29sdmVkVmFsdWVzLmZsYXQoKSk7XG5cdFx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRcdHJlamVjdChlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiBuZXcgRXJyb3IoU3RyaW5nKGVycm9yKSkpO1xuXHRcdH1cblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogRWFzeUZpbHRlckJhckNvbnRhaW5lciB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxFYXN5RmlsdGVyQmFyQ29udGFpbmVyXG5cdFx0XHRcdGNvbnRleHRQYXRoPXt0aGlzLmdldE93bmVyQ29udGV4dFBhdGgoKX1cblx0XHRcdFx0YXBwSWQ9e3RoaXMuZ2V0QXBwbGljYXRpb25JZCgpfVxuXHRcdFx0XHRmaWx0ZXJCYXJNZXRhZGF0YT17dGhpcy5maWx0ZXJCYXJNZXRhZGF0YX1cblx0XHRcdFx0ZWFzeUZpbHRlckxpYj17dGhpcy5lYXN5RmlsdGVyUGF0aH1cblx0XHRcdFx0c2hvd1ZhbHVlSGVscD17dGhpcy5oYW5kbGVTaG93VmFsdWVIZWxwLmJpbmQodGhpcyl9XG5cdFx0XHRcdGRhdGFGZXRjaGVyPXt0aGlzLnJlc29sdmVUb2tlblZhbHVlc0ZvckZpZWxkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHJlY29tbWVuZGVkVmFsdWVzPXt0aGlzLnJlY29tbWVuZGVkUXVlcmllc31cblx0XHRcdFx0cXVlcnlDaGFuZ2VkPXt0aGlzLm9uUXVlcnlDaGFuZ2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdHRva2Vuc0NoYW5nZWQ9e3RoaXMub25Ub2tlbnNDaGFuZ2VkLmJpbmQodGhpcyl9XG5cdFx0XHRcdGJlZm9yZVF1ZXJ5UHJvY2Vzc2luZz17dGhpcy5vbkJlZm9yZVF1ZXJ5UHJvY2Vzc2luZy5iaW5kKHRoaXMpfVxuXHRcdFx0XHRhZnRlclF1ZXJ5UHJvY2Vzc2luZz17dGhpcy5vbkFmdGVyUXVlcnlQcm9jZXNzaW5nLmJpbmQodGhpcyl9XG5cdFx0XHRcdGNsZWFyRmlsdGVycz17dGhpcy5vbkNsZWFyRmlsdGVycy5iaW5kKHRoaXMpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFpREE7QUFDQTtBQUNBO0FBQ0E7RUFIQSxJQUtxQkEsYUFBYSxJQUFBQyxJQUFBLEdBRGpDQyxjQUFjLENBQUMsNkJBQTZCLENBQUMsRUFBQUMsS0FBQSxHQUU1Q0Msa0JBQWtCLENBQUMsa0VBQWtFLENBQUMsRUFBQUMsS0FBQSxHQUd0RkMsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUF1QyxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUc3REYsV0FBVyxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFnRCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUd0RUMsUUFBUSxDQUFDO0lBQUVILElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBSSxLQUFBLEdBRzVCRCxRQUFRLENBQUM7SUFBRUgsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFLLEtBQUEsR0FHNUJDLFdBQVcsQ0FBQztJQUFFTixJQUFJLEVBQUU7RUFBb0QsQ0FBQyxDQUFDLEVBQUFOLElBQUEsQ0FBQWEsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxjQUFBO0lBVzNFLFNBQUFoQixjQUFZaUIsVUFBMEQsRUFBRUMsTUFBeUIsRUFBRTtNQUFBLElBQUFDLEtBQUE7TUFDbEdBLEtBQUEsR0FBQUgsY0FBQSxDQUFBSSxJQUFBLE9B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
@@ -25,6 +25,7 @@ import {
25
25
  resolveTokenValue,
26
26
  unresolvedResult
27
27
  } from "sap/fe/macros/ai/EasyFilterDataFetcher";
28
+ import type FilterBar from "sap/fe/macros/controls/FilterBar";
28
29
  import FilterUtils from "sap/fe/macros/filter/FilterUtils";
29
30
  import DraftEditState from "sap/fe/macros/filterBar/DraftEditState";
30
31
  import type FilterBarAPI from "sap/fe/macros/filterBar/FilterBarAPI";
@@ -34,7 +35,6 @@ import type ManagedObject from "sap/ui/base/ManagedObject";
34
35
  import type { $ControlSettings } from "sap/ui/core/Control";
35
36
  import UI5Element from "sap/ui/core/Element";
36
37
  import type { ConditionObject } from "sap/ui/mdc/condition/Condition";
37
- import type FilterBar from "sap/ui/mdc/FilterBar";
38
38
  import FilterOperator from "sap/ui/model/FilterOperator";
39
39
  import JSONModel from "sap/ui/model/json/JSONModel";
40
40
  import Date1 from "sap/ui/model/odata/type/Date";
@@ -42,10 +42,10 @@ import DateTimeOffset from "sap/ui/model/odata/type/DateTimeOffset";
42
42
  import type ODataType from "sap/ui/model/odata/type/ODataType";
43
43
  import TimeOfDay from "sap/ui/model/odata/type/TimeOfDay";
44
44
  import type ODataMetaModel from "sap/ui/model/odata/v4/ODataMetaModel";
45
- import type { CodeListEntry } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
45
+ import type { CodeList, MayBeLazy } from "ux/eng/fioriai/reuse/easyfilter/EasyFilter";
46
46
 
47
47
  type EasyFilterBarState = {};
48
- type FieldMetadata = EasyFilterPropertyMetadata & { path: string };
48
+ type FieldMetadata = EasyFilterPropertyMetadata & { filterFieldName: string };
49
49
 
50
50
  /**
51
51
  * Delivery for beta release for the easy filter feature.
@@ -71,7 +71,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
71
71
  @aggregation({ type: "sap.fe.controls.easyFilter.EasyFilterBarContainer" })
72
72
  content?: EnhanceWithUI5<EasyFilterBarContainer>;
73
73
 
74
- _fetchedCodeList!: Record<string, unknown>;
74
+ _fetchedCodeList!: Record<string, CodeList | undefined>;
75
75
 
76
76
  private filterBarMetadata!: FieldMetadata[];
77
77
 
@@ -105,26 +105,23 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
105
105
  const selectOptionsNames = oNavParameters.selectionVariant.getSelectOptionsPropertyNames();
106
106
  this.filterBarMetadata.forEach((field) => {
107
107
  if (selectOptionsNames.includes(field.name)) {
108
- field.defaultValue = oNavParameters.selectionVariant!.getSelectOption(field.name)?.map((option) => {
108
+ field.defaultValue = oNavParameters.selectionVariant!.getSelectOption(field.name)?.reduce((acc, option) => {
109
109
  if (option.Sign === "I") {
110
- if (option.Option === "BT") {
111
- return {
112
- operator: FilterOperator.BT,
113
- selectedValues: [{ value1: option.Low, value2: option.High }]
114
- };
110
+ if (option.Option === FilterOperator.BT || option.Option === FilterOperator.NB) {
111
+ if (option.High !== null && option.High !== undefined) {
112
+ acc.push({ operator: option.Option, selectedValues: [option.Low, option.High] });
113
+ }
115
114
  } else {
116
- return {
117
- operator: option.Option,
115
+ acc.push({
116
+ operator: option.Option as Exclude<FilterOperator, FilterOperator.BT | FilterOperator.NB>,
118
117
  selectedValues: [option.Low]
119
- };
118
+ });
120
119
  }
121
120
  } else {
122
- return {
123
- operator: FilterOperator.NE,
124
- selectedValues: [option.Low]
125
- };
121
+ acc.push({ operator: FilterOperator.NE, selectedValues: [option.Low] });
126
122
  }
127
- }) as TokenSelectedValuesDefinition[];
123
+ return acc;
124
+ }, [] as TokenSelectedValuesDefinition[]);
128
125
  }
129
126
  });
130
127
  this.content?.resetState(false);
@@ -161,7 +158,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
161
158
 
162
159
  const metaModel = owner.preprocessorContext?.models.metaModel as ODataMetaModel;
163
160
 
164
- const getType = (edmType: string, codeList: unknown): TokenType => {
161
+ const getType = (edmType: string, codeList: MayBeLazy<CodeList> | undefined): TokenType => {
165
162
  if (codeList) {
166
163
  return "MenuWithCheckBox";
167
164
  }
@@ -177,15 +174,17 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
177
174
  const startupParameters = owner.getAppComponent().getComponentData()?.startupParameters ?? {};
178
175
 
179
176
  const filterFields = filterBarDef.getFilterFields();
180
- const result = filterFields.map((field: FilterField): FieldMetadata => {
181
- // Exclude hidden filter fields. It is not possible to set a value for hidden filters, and users would not understand anyway as they cannot see these values.
177
+ const nonHiddenFilterFields = filterFields.filter((field: FilterField) => {
178
+ return !field.getTarget()?.annotations?.UI?.HiddenFilter?.valueOf();
179
+ });
180
+ const result = nonHiddenFilterFields.map((field: FilterField): FieldMetadata => {
182
181
  const propertyObject = field.getTarget();
183
- let codeList;
182
+ let codeList: MayBeLazy<CodeList> | undefined;
184
183
  const hasCodeList = hasValueHelpWithFixedValues(propertyObject);
185
184
  if (hasCodeList) {
186
185
  codeList = this._fetchedCodeList[field.name];
187
186
  if (!codeList) {
188
- codeList = async (): Promise<CodeListEntry[]> => this.getCodeListForProperty(field.name, field.annotationPath!);
187
+ codeList = async (): Promise<CodeList> => this.getCodeListForProperty(field.name, field.annotationPath!);
189
188
  }
190
189
  }
191
190
 
@@ -194,35 +193,34 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
194
193
  const unitAnnotation = propertyObject.annotations.Measures?.ISOCurrency ?? propertyObject.annotations.Measures?.Unit;
195
194
  const unitProperty = isPathAnnotationExpression(unitAnnotation) ? unitAnnotation.$target : undefined;
196
195
  const unit = unitProperty ? filterFields.find((f) => f.getTarget() === unitProperty)?.name : undefined;
197
- let defaultValue;
196
+ let defaultValue: TokenSelectedValuesDefinition[] | undefined;
198
197
  if (startupParameters.hasOwnProperty(field.name)) {
199
198
  defaultValue = [
200
199
  {
201
200
  operator: FilterOperator.EQ,
202
- selectedValues: startupParameters[field.name]
201
+ selectedValues: startupParameters[field.name] as TokenSelectedValuesDefinition["selectedValues"]
203
202
  }
204
203
  ];
205
204
  } else if (field.isParameter && startupParameters.hasOwnProperty(field.name.substring(2))) {
206
205
  defaultValue = [
207
206
  {
208
207
  operator: FilterOperator.EQ,
209
- selectedValues: startupParameters[field.name.substring(2)]
208
+ selectedValues: startupParameters[field.name.substring(2)] as TokenSelectedValuesDefinition["selectedValues"]
210
209
  }
211
210
  ];
212
211
  }
213
212
  return {
214
- name: field.name,
215
- path: field.annotationPath,
213
+ name: field.annotationPath!,
214
+ filterFieldName: field.name,
216
215
  label: field.label,
217
216
  dataType: propertyObject.type,
218
217
  required: field.required ?? false,
219
218
  defaultValue: defaultValue,
220
219
  filterable: true,
221
- sortable: !field.isParameter,
222
220
  codeList: codeList,
223
- type: getType(propertyObject.type, codeList),
221
+ type: getType(propertyObject.type, codeList) as Exclude<TokenType, "ValueHelp">,
224
222
  unit: unit
225
- } as FieldMetadata;
223
+ };
226
224
  });
227
225
 
228
226
  // [Editing Status]
@@ -239,12 +237,11 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
239
237
 
240
238
  result.push({
241
239
  name: "$editState",
242
- path: "$editState",
240
+ filterFieldName: "$editState",
243
241
  label: this.getTranslatedText("FILTERBAR_EDITING_STATUS"),
244
242
  dataType: "Edm.String",
245
243
  required: false,
246
244
  filterable: true,
247
- sortable: false,
248
245
  codeList: editingStatusCodeList,
249
246
  type: "MenuWithCheckBox"
250
247
  });
@@ -254,7 +251,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
254
251
  return [];
255
252
  }
256
253
 
257
- async getCodeListForProperty(key: string, propertyPath: string): Promise<CodeListEntry[]> {
254
+ async getCodeListForProperty(key: string, propertyPath: string): Promise<CodeList> {
258
255
  const defaultValueList = await this.getValueList(propertyPath);
259
256
 
260
257
  if (!defaultValueList) {
@@ -282,10 +279,10 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
282
279
  values: TokenSelectedValuesDefinition[]
283
280
  ): Promise<ValueHelpSelectedValuesDefinition[]> {
284
281
  const field = this.filterBarMetadata.find(({ name }) => name === fieldName);
285
- if (field?.path) {
286
- const valueList = await this.getValueList(field.path);
282
+ if (field) {
283
+ const valueList = await this.getValueList(field.name);
287
284
 
288
- if (valueList && ValueListHelper.isValueListSearchable(field.path, valueList)) {
285
+ if (valueList && ValueListHelper.isValueListSearchable(field.name, valueList)) {
289
286
  const resolvedTokenValues = await Promise.all(values.map(async (value) => resolveTokenValue(valueList, value)));
290
287
  return resolvedTokenValues.flat();
291
288
  }
@@ -295,9 +292,9 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
295
292
  return unresolvedResult(values);
296
293
  }
297
294
 
298
- async getValueList(propertyPath: string): Promise<ValueListInfo | undefined> {
295
+ async getValueList(fieldName: string): Promise<ValueListInfo | undefined> {
299
296
  const metaModel = this.getMetaModel()!;
300
- const valueLists = await ValueListHelper.getValueListInfo(undefined, propertyPath, undefined, metaModel);
297
+ const valueLists = await ValueListHelper.getValueListInfo(undefined, fieldName, undefined, metaModel);
301
298
  return valueLists[0];
302
299
  }
303
300
 
@@ -324,7 +321,7 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
324
321
  const field = this.filterBarMetadata.find((f) => f.name === token.key)!;
325
322
  for (const tokenKeySpecification of token.keySpecificSelectedValues) {
326
323
  const { operator, selectedValues } = tokenKeySpecification;
327
- await FilterUtils.addFilterValues(filterBarAPI.content, field.path, operator, selectedValues);
324
+ await FilterUtils.addFilterValues(filterBarAPI.content, field.name, operator, selectedValues);
328
325
  }
329
326
  }
330
327
  }
@@ -364,8 +361,8 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
364
361
  const field = this.filterBarMetadata.find((f) => f.name === key)!;
365
362
  const filterBar = UI5Element.getElementById(this.filterBar) as FilterBar;
366
363
  const filterBarAPI = filterBar.getParent() as FilterBarAPI;
367
- await filterBarAPI.showFilterField(field.path);
368
- return filterBarAPI.openValueHelpForFilterField(field.path);
364
+ await filterBarAPI.showFilterField(field.name);
365
+ return filterBarAPI.openValueHelpForFilterField(field.name);
369
366
  }
370
367
 
371
368
  onBeforeQueryProcessing(): void {
@@ -446,6 +443,6 @@ export default class EasyFilterBar extends BuildingBlock implements IViewStateCo
446
443
  afterQueryProcessing={this.onAfterQueryProcessing.bind(this)}
447
444
  clearFilters={this.onClearFilters.bind(this)}
448
445
  />
449
- ) as EasyFilterBarContainer;
446
+ );
450
447
  }
451
448
  }