@sapui5/sap.fe.macros 1.138.0 → 1.140.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) 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/CommonHelper.js +2 -2
  6. package/src/sap/fe/macros/CommonHelper.ts +1 -1
  7. package/src/sap/fe/macros/Field.js +85 -58
  8. package/src/sap/fe/macros/Field.ts +104 -60
  9. package/src/sap/fe/macros/FooterContent.js +44 -11
  10. package/src/sap/fe/macros/FooterContent.tsx +48 -9
  11. package/src/sap/fe/macros/FormElement.js +2 -2
  12. package/src/sap/fe/macros/FormElement.ts +1 -2
  13. package/src/sap/fe/macros/MessageButton.js +1 -2
  14. package/src/sap/fe/macros/MessageButton.tsx +0 -1
  15. package/src/sap/fe/macros/MultiValueField.js +17 -6
  16. package/src/sap/fe/macros/MultiValueField.tsx +7 -4
  17. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  18. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  19. package/src/sap/fe/macros/Share.js +85 -40
  20. package/src/sap/fe/macros/Share.tsx +42 -1
  21. package/src/sap/fe/macros/Status.js +226 -0
  22. package/src/sap/fe/macros/Status.tsx +192 -0
  23. package/src/sap/fe/macros/ValueHelp.js +4 -29
  24. package/src/sap/fe/macros/ValueHelp.tsx +2 -43
  25. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  26. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  27. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  28. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  29. package/src/sap/fe/macros/ai/EasyFilterBar.js +123 -114
  30. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +140 -124
  31. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  32. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  33. package/src/sap/fe/macros/ai/SummarizationButton.js +2 -2
  34. package/src/sap/fe/macros/ai/SummarizationButton.tsx +1 -1
  35. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  36. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  37. package/src/sap/fe/macros/chart/ChartHelper.js +1 -2
  38. package/src/sap/fe/macros/chart/ChartHelper.ts +0 -1
  39. package/src/sap/fe/macros/chart/ChartRuntime.js +1 -2
  40. package/src/sap/fe/macros/chart/ChartRuntime.ts +0 -1
  41. package/src/sap/fe/macros/chart/MdcChartTemplate.js +20 -6
  42. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +16 -8
  43. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.js +3 -1
  44. package/src/sap/fe/macros/controls/BuildingBlockWithTemplating.ts +2 -0
  45. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  46. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  47. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  48. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  49. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.js +2 -2
  50. package/src/sap/fe/macros/controls/NumberWithUnitOrCurrency.tsx +2 -2
  51. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  52. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  53. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  54. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  55. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  56. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  57. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  58. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  59. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  60. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  61. package/src/sap/fe/macros/coreUI/OperationParameterDialog.js +43 -4
  62. package/src/sap/fe/macros/coreUI/OperationParameterDialog.tsx +48 -1
  63. package/src/sap/fe/macros/designtime/Designtime.helper.js +39 -2
  64. package/src/sap/fe/macros/designtime/Designtime.helper.ts +39 -0
  65. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  66. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  67. package/src/sap/fe/macros/field/FieldBaseDelegate.js +20 -8
  68. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +34 -9
  69. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  70. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  71. package/src/sap/fe/macros/field/FieldRuntime.js +1 -2
  72. package/src/sap/fe/macros/field/FieldRuntime.ts +0 -1
  73. package/src/sap/fe/macros/filter/FilterUtils.js +3 -5
  74. package/src/sap/fe/macros/filter/FilterUtils.ts +2 -4
  75. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  76. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  77. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  78. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  79. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  80. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  81. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  82. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  83. package/src/sap/fe/macros/form/Form.js +1 -4
  84. package/src/sap/fe/macros/form/Form.tsx +0 -3
  85. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  86. package/src/sap/fe/macros/form/FormContainer.block.js +1 -2
  87. package/src/sap/fe/macros/form/FormContainer.block.ts +0 -1
  88. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  89. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  90. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  91. package/src/sap/fe/macros/form/FormDelegate.js +20 -1
  92. package/src/sap/fe/macros/form/FormDelegate.ts +25 -0
  93. package/src/sap/fe/macros/form/FormHelper.js +1 -2
  94. package/src/sap/fe/macros/form/FormHelper.ts +0 -1
  95. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  96. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  97. package/src/sap/fe/macros/fpm/CustomFragment.block.js +1 -2
  98. package/src/sap/fe/macros/fpm/CustomFragment.block.ts +0 -1
  99. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  100. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  101. package/src/sap/fe/macros/internal/ActionCommand.block.js +1 -2
  102. package/src/sap/fe/macros/internal/ActionCommand.block.ts +0 -1
  103. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  104. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  105. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  106. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  107. package/src/sap/fe/macros/internal/FilterField.block.js +10 -2
  108. package/src/sap/fe/macros/internal/FilterField.block.ts +11 -1
  109. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  110. package/src/sap/fe/macros/internal/field/DisplayStyle.js +51 -13
  111. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +53 -6
  112. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  113. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  114. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  115. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +11 -0
  116. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  117. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  118. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.js +46 -8
  119. package/src/sap/fe/macros/internal/valuehelp/AdditionalValueHelper.ts +60 -6
  120. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.js +38 -2
  121. package/src/sap/fe/macros/internal/valuehelp/TableDelegate.ts +37 -2
  122. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +2 -1
  123. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +16 -5
  124. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +21 -9
  125. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  126. package/src/sap/fe/macros/library.js +1 -1
  127. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  128. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  129. package/src/sap/fe/macros/messagebundle.properties +42 -32
  130. package/src/sap/fe/macros/messagebundle_ar.properties +12 -4
  131. package/src/sap/fe/macros/messagebundle_bg.properties +11 -3
  132. package/src/sap/fe/macros/messagebundle_ca.properties +15 -7
  133. package/src/sap/fe/macros/messagebundle_cnr.properties +12 -4
  134. package/src/sap/fe/macros/messagebundle_cs.properties +10 -2
  135. package/src/sap/fe/macros/messagebundle_cy.properties +12 -4
  136. package/src/sap/fe/macros/messagebundle_da.properties +11 -3
  137. package/src/sap/fe/macros/messagebundle_de.properties +18 -10
  138. package/src/sap/fe/macros/messagebundle_el.properties +13 -5
  139. package/src/sap/fe/macros/messagebundle_en.properties +16 -8
  140. package/src/sap/fe/macros/messagebundle_en_GB.properties +16 -8
  141. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +16 -8
  142. package/src/sap/fe/macros/messagebundle_es.properties +13 -5
  143. package/src/sap/fe/macros/messagebundle_es_MX.properties +14 -6
  144. package/src/sap/fe/macros/messagebundle_et.properties +13 -5
  145. package/src/sap/fe/macros/messagebundle_fi.properties +14 -6
  146. package/src/sap/fe/macros/messagebundle_fr.properties +14 -6
  147. package/src/sap/fe/macros/messagebundle_fr_CA.properties +15 -7
  148. package/src/sap/fe/macros/messagebundle_hi.properties +11 -3
  149. package/src/sap/fe/macros/messagebundle_hr.properties +11 -3
  150. package/src/sap/fe/macros/messagebundle_hu.properties +10 -2
  151. package/src/sap/fe/macros/messagebundle_id.properties +18 -10
  152. package/src/sap/fe/macros/messagebundle_it.properties +10 -2
  153. package/src/sap/fe/macros/messagebundle_iw.properties +10 -2
  154. package/src/sap/fe/macros/messagebundle_ja.properties +13 -5
  155. package/src/sap/fe/macros/messagebundle_kk.properties +15 -7
  156. package/src/sap/fe/macros/messagebundle_ko.properties +10 -2
  157. package/src/sap/fe/macros/messagebundle_lt.properties +11 -3
  158. package/src/sap/fe/macros/messagebundle_lv.properties +12 -4
  159. package/src/sap/fe/macros/messagebundle_mk.properties +12 -4
  160. package/src/sap/fe/macros/messagebundle_ms.properties +14 -6
  161. package/src/sap/fe/macros/messagebundle_nl.properties +13 -5
  162. package/src/sap/fe/macros/messagebundle_no.properties +12 -4
  163. package/src/sap/fe/macros/messagebundle_pl.properties +12 -4
  164. package/src/sap/fe/macros/messagebundle_pt.properties +13 -5
  165. package/src/sap/fe/macros/messagebundle_pt_PT.properties +12 -4
  166. package/src/sap/fe/macros/messagebundle_ro.properties +12 -4
  167. package/src/sap/fe/macros/messagebundle_ru.properties +13 -5
  168. package/src/sap/fe/macros/messagebundle_sh.properties +12 -4
  169. package/src/sap/fe/macros/messagebundle_sk.properties +11 -3
  170. package/src/sap/fe/macros/messagebundle_sl.properties +12 -4
  171. package/src/sap/fe/macros/messagebundle_sr.properties +12 -4
  172. package/src/sap/fe/macros/messagebundle_sv.properties +11 -3
  173. package/src/sap/fe/macros/messagebundle_th.properties +11 -3
  174. package/src/sap/fe/macros/messagebundle_tr.properties +10 -2
  175. package/src/sap/fe/macros/messagebundle_uk.properties +17 -9
  176. package/src/sap/fe/macros/messagebundle_vi.properties +12 -4
  177. package/src/sap/fe/macros/messagebundle_zh_CN.properties +11 -3
  178. package/src/sap/fe/macros/messagebundle_zh_TW.properties +12 -4
  179. package/src/sap/fe/macros/messages/MessageButton.js +55 -36
  180. package/src/sap/fe/macros/messages/MessageButton.ts +64 -39
  181. package/src/sap/fe/macros/messages/MessagePopover.js +2 -2
  182. package/src/sap/fe/macros/messages/MessagePopover.ts +4 -4
  183. package/src/sap/fe/macros/microchart/MicroChartContainer.js +1 -2
  184. package/src/sap/fe/macros/microchart/MicroChartContainer.ts +1 -2
  185. package/src/sap/fe/macros/microchart/MicroChartHelper.js +1 -2
  186. package/src/sap/fe/macros/microchart/MicroChartHelper.tsx +0 -1
  187. package/src/sap/fe/macros/share/ShareAPI.js +4 -29
  188. package/src/sap/fe/macros/share/ShareAPI.ts +1 -32
  189. package/src/sap/fe/macros/situations/SituationsPopover.js +3 -1
  190. package/src/sap/fe/macros/situations/SituationsPopover.ts +2 -0
  191. package/src/sap/fe/macros/table/Action.js +24 -2
  192. package/src/sap/fe/macros/table/Action.ts +13 -0
  193. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  194. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  195. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  196. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  197. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  198. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  199. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  200. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  201. package/src/sap/fe/macros/table/Column.js +3 -3
  202. package/src/sap/fe/macros/table/Column.ts +2 -2
  203. package/src/sap/fe/macros/table/MdcTableTemplate.js +20 -8
  204. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +36 -7
  205. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  206. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  207. package/src/sap/fe/macros/table/Table.block.js +137 -108
  208. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  209. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  210. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  211. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  212. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  213. package/src/sap/fe/macros/table/TableHelper.js +1 -2
  214. package/src/sap/fe/macros/table/TableHelper.ts +0 -1
  215. package/src/sap/fe/macros/table/TableRuntime.js +26 -7
  216. package/src/sap/fe/macros/table/TableRuntime.ts +33 -5
  217. package/src/sap/fe/macros/table/Utils.js +6 -2
  218. package/src/sap/fe/macros/table/Utils.ts +5 -1
  219. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.js +1 -2
  220. package/src/sap/fe/macros/table/delegates/ALPTableDelegate.ts +0 -1
  221. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -20
  222. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -24
  223. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.js +1 -2
  224. package/src/sap/fe/macros/table/delegates/TreeTableDelegate.ts +0 -1
  225. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  226. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  227. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  228. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  229. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  230. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  231. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +8 -1
  232. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +10 -0
  233. package/src/sap/fe/macros/table/mixin/TableSharing.js +3 -2
  234. package/src/sap/fe/macros/table/mixin/TableSharing.ts +9 -1
  235. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +20 -6
  236. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +36 -14
  237. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -7
  238. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -3
  239. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +16 -5
  240. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +18 -4
@@ -48,6 +48,7 @@ import type ODataModel from "sap/ui/model/odata/v4/ODataModel";
48
48
  import type { Value } from "../field/FieldBaseDelegate";
49
49
  import type { AdditionalValueType, BindingInfoParameters } from "../internal/valuehelp/AdditionalValueHelper";
50
50
  import { AdditionalValueGroupKey, additionalValueHelper } from "../internal/valuehelp/AdditionalValueHelper";
51
+ import type ValueHelpDialog from "sap/ui/mdc/valuehelp/base/ValueHelpDialog";
51
52
 
52
53
  const FeCoreControlsFilterBar = "sap.fe.macros.controls.FilterBar";
53
54
  const AnnotationIsDigitSequence = "@com.sap.vocabularies.Common.v1.IsDigitSequence";
@@ -59,7 +60,12 @@ export type ExternalStateType = {
59
60
  filter: ConditionObjectMap;
60
61
  };
61
62
 
62
- export type ConditionPayloadType = Record<string, string | boolean>;
63
+ type SelectionChange = {
64
+ conditions: object[];
65
+ type: string;
66
+ }
67
+
68
+ export type ConditionPayloadType = Record<string, string | boolean | null>;
63
69
 
64
70
  export type ConditionPayloadMap = Record<string, ConditionPayloadType[]>;
65
71
 
@@ -507,21 +513,19 @@ export default Object.assign({}, ValueHelpDelegate, {
507
513
  const outParameterSources: string[] = [];
508
514
  for (const outParameter of outParameters) {
509
515
  /* Updated property via out-parameter if value changed */
510
- if (context.getProperty(outParameter.source) !== outValues[outParameter.helpPath]) {
511
- this._updatePropertyViaOutParameter(
512
- convertedMetadata,
513
- rootPath,
514
- outValues,
515
- outParameter,
516
- context,
517
- contextCanRequestSideEffects
518
- );
519
- }
516
+ this._updatePropertyViaOutParameter(
517
+ convertedMetadata,
518
+ rootPath,
519
+ outValues,
520
+ outParameter,
521
+ context,
522
+ contextCanRequestSideEffects
523
+ );
520
524
  outParameterSources.push(outParameter.source);
521
525
  }
522
526
  const view = CommonUtils.getTargetView(valueHelp);
523
527
  const collaborativeDraft = view.getController().collaborativeDraft;
524
- if (collaborativeDraft.isConnected()) {
528
+ if (collaborativeDraft.isConnected() && outParameterSources.length > 0) {
525
529
  // we determine the binding that sends the request
526
530
  let binding;
527
531
  if (context.getBinding().isA("sap.ui.model.odata.v4.ODataListBinding")) {
@@ -566,7 +570,12 @@ export default Object.assign({}, ValueHelpDelegate, {
566
570
  /* The fast creation row is only used by SD */
567
571
  /* The group ID (third argument of setProperty described api documentation of the Context) is used for the PATCH request, if not specified, the update group ID for the context's binding is used, 'null' to prevent the PATCH request */
568
572
  /* The Transient context cannot request SideEffects and cannot patch via group 'null' */
569
- context.setProperty(outParameter.source, outValues[outParameter.helpPath]);
573
+ const currentVal = context.getProperty(outParameter.source);
574
+ const newVal = outValues[outParameter.helpPath];
575
+ if (currentVal !== newVal) {
576
+ context.setProperty(outParameter.source, null);
577
+ context.setProperty(outParameter.source, outValues[outParameter.helpPath]);
578
+ }
570
579
  }
571
580
  /* If the key gets updated via out-parameter, then the description needs also retrieved with requestSideEffects */
572
581
  const textPath = isPathAnnotationExpression(targetProperty?.annotations?.Common?.Text)
@@ -963,6 +972,8 @@ This cannot happen in case of action parameter dialog, which can be identified b
963
972
  const value = context.getObject(vhKey);
964
973
  if (value != null) {
965
974
  entry[vhKey] = value?.length === 0 ? "" : value;
975
+ } else {
976
+ entry[vhKey] = null; // null value is also valid
966
977
  }
967
978
  });
968
979
  if (Object.keys(entry).length) {
@@ -972,6 +983,17 @@ This cannot happen in case of action parameter dialog, which can be identified b
972
983
  return conditionPayload;
973
984
  },
974
985
 
986
+
987
+ modifySelectionBehaviour: function (valueHelp: ValueHelp, content: MTable, change: SelectionChange): SelectionChange{
988
+ const conditions = change.conditions;
989
+ const oldConditions = content.getConditions();
990
+ // Prevent de-select in dialog scenarios
991
+ if ((content?.getParent() as unknown as ValueHelpDialog)?.isQuickSelectActive?.() && !conditions.length && oldConditions.length) {
992
+ change.conditions = oldConditions;
993
+ }
994
+ return change;
995
+ },
996
+
975
997
  /**
976
998
  * Provides the possibility to customize selections in 'Select from list' scenarios.
977
999
  * By default, only condition keys are considered. This may be extended with payload dependent filters.
@@ -994,7 +1016,7 @@ This cannot happen in case of action parameter dialog, which can be identified b
994
1016
  const vhKeys = payload.qualifiers[payload.valueHelpQualifier]?.vhKeys || [];
995
1017
  const keyPath = content.getKeyPath();
996
1018
  const valueHelpQualifier = payload.valueHelpQualifier || "";
997
- const findCondition = (conditionPayloadMap: ConditionPayloadMap, value: string | boolean): boolean => {
1019
+ const findCondition = (conditionPayloadMap: ConditionPayloadMap, value: string | boolean | null): boolean => {
998
1020
  const conditionSelectedRow = conditionPayloadMap?.[valueHelpQualifier]?.[0] || {};
999
1021
  if (vhKeys.length === 1 || payload?.useMultiValueField || !conditionPayloadMap) {
1000
1022
  return context?.getObject(keyPath) === value;
@@ -5,7 +5,7 @@
5
5
  sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolkit", "sap/fe/base/ClassSupport", "sap/fe/core/buildingBlocks/BuildingBlock", "sap/fe/core/converters/ConverterContext", "sap/fe/core/converters/ManifestWrapper", "sap/fe/core/converters/controls/Common/DataVisualization", "sap/fe/core/converters/helpers/Aggregation", "sap/fe/core/helpers/ModelHelper", "sap/fe/core/helpers/StableIdHelper", "sap/m/Button", "sap/m/Label", "sap/m/OverflowToolbar", "sap/m/OverflowToolbarLayoutData", "sap/m/Title", "sap/m/ToolbarSpacer", "sap/m/VBox", "sap/m/library", "sap/ui/core/CustomData", "../controls/filterbar/VisualFilter", "./InteractiveChartHelper", "./VisualFilterRuntime", "./fragments/InteractiveCharts", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, merge, BindingToolkit, ClassSupport, BuildingBlock, ConverterContext, ManifestWrapper, DataVisualization, Aggregation, ModelHelper, StableIdHelper, Button, Label, OverflowToolbar, OverflowToolbarLayoutData, Title, ToolbarSpacer, VBox, library, CustomData, VisualFilterControl, InteractiveChartHelper, VisualFilterRuntime, InteractiveCharts, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _dec19, _dec20, _dec21, _dec22, _dec23, _dec24, _dec25, _dec26, _dec27, _dec28, _dec29, _dec30, _dec31, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17, _descriptor18, _descriptor19, _descriptor20, _descriptor21, _descriptor22, _descriptor23, _descriptor24, _descriptor25, _descriptor26, _descriptor27, _descriptor28, _descriptor29, _descriptor30;
9
9
  var _exports = {};
10
10
  var getVisualFilterChart = InteractiveCharts.getVisualFilterChart;
11
11
  var OverflowToolbarPriority = library.OverflowToolbarPriority;
@@ -41,7 +41,6 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
41
41
  * /&gt;
42
42
  * </pre>
43
43
  * @private
44
- * @experimental
45
44
  */
46
45
  let VisualFilter = (_dec = defineUI5Class("sap.fe.macros.visualfilters.VisualFilter"), _dec2 = implementInterface("sap.ui.core.IFormContent"), _dec3 = property({
47
46
  type: "boolean"
@@ -100,11 +99,9 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
100
99
  type: "boolean"
101
100
  }), _dec30 = property({
102
101
  type: "boolean"
102
+ }), _dec31 = property({
103
+ type: "boolean"
103
104
  }), _dec(_class = (_class2 = /*#__PURE__*/function (_BuildingBlock) {
104
- /******************************************************
105
- * Internal Properties
106
- * ***************************************************/
107
-
108
105
  function VisualFilter(props, others) {
109
106
  var _this;
110
107
  _this = _BuildingBlock.call(this, props, others) || this;
@@ -137,6 +134,19 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
137
134
  _initializerDefineProperty(_this, "_contentId", _descriptor27, _this);
138
135
  _initializerDefineProperty(_this, "draftSupported", _descriptor28, _this);
139
136
  _initializerDefineProperty(_this, "isValueListWithFixedValues", _descriptor29, _this);
137
+ /**
138
+ * Enable or disable chart binding
139
+ * @public
140
+ */
141
+ _initializerDefineProperty(_this, "enableChartBinding", _descriptor30, _this);
142
+ /**
143
+ * Flag to indicate if the in-parameters and conditions update is pending.
144
+ */
145
+ _this.inParamConditionUpdatePending = false;
146
+ /**
147
+ * Initial rendering is pending.
148
+ */
149
+ _this.renderingUpdatePending = true;
140
150
  return _this;
141
151
  }
142
152
  _exports = VisualFilter;
@@ -499,6 +509,77 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
499
509
  })
500
510
  }
501
511
  });
512
+ }
513
+
514
+ /**
515
+ * Handles inparameters changes during the enablement of the visual filter chart binding based on the changed filter field paths.
516
+ *
517
+ * This method checks if the in-parameters of the visual filter are affected by the changed filter field paths.
518
+ * If any of the in-parameters are affected, we sets th internal condition update pending flag to true.
519
+ * Subsequently, the chart binding will be enabled only after the condition model is updated for the visual filter with the inparameter selections.
520
+ * @param changedFilterFieldPaths Array of changed filter field paths.
521
+ */;
522
+ _proto._handleInParamsChartBindingEnablement = function _handleInParamsChartBindingEnablement(changedFilterFieldPaths) {
523
+ const inParameters = this.getProperty("inParameters").customData;
524
+ const inParameterLocalDataProperties = inParameters.map(inParameter => inParameter.localDataProperty);
525
+ const vfInParameterUpdateExpected = changedFilterFieldPaths.some(path => inParameterLocalDataProperties.includes(path));
526
+ if (vfInParameterUpdateExpected) {
527
+ // If the inParameters of the visual filter are changed(diffState), we need to wait for conditions model to be updated for the visual filter to filter chart binding.
528
+ this._setInternalUpdatePending(true);
529
+ }
530
+ }
531
+
532
+ /**
533
+ * Sets the enablement of the visual filter chart binding.
534
+ * @param enableBinding Boolean indicating whether to enable or disable the chart binding.
535
+ * @param changedFilterFieldPaths Array of changed filter field paths that may affect the in-parameters of the visual filter.
536
+ */;
537
+ _proto.setEnableChartBinding = function setEnableChartBinding(enableBinding) {
538
+ let changedFilterFieldPaths = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
539
+ if (enableBinding && changedFilterFieldPaths.length > 0) {
540
+ // If inparameters are changed, we need to wait till the condition model to be updated before we send resume the binding with the inparameter selections as filters to the chart binding and send the request.
541
+ this._handleInParamsChartBindingEnablement(changedFilterFieldPaths);
542
+ }
543
+
544
+ // The binding is expected to be enabled only when visual filter is ready
545
+ // 1. internally(inparameter conditions are updated and visual filter is rendered)
546
+ // 2. and externally(enableChartBinding). Like, xAppState or iAppState is applied to parent filter bar.
547
+ const internalUpdatePending = this.inParamConditionUpdatePending || this.renderingUpdatePending;
548
+ const overallEnableBinding = enableBinding && !internalUpdatePending;
549
+ const chartBinding = this.content?.getChartBinding();
550
+ if (chartBinding) {
551
+ if (overallEnableBinding && chartBinding.isSuspended()) {
552
+ chartBinding.resume();
553
+ } else if (!overallEnableBinding && !chartBinding.isSuspended()) {
554
+ chartBinding.suspend();
555
+ }
556
+ }
557
+ this.setProperty("enableChartBinding", enableBinding, true);
558
+ }
559
+
560
+ /**
561
+ * Sets the internal update pending flags for the visual filter.
562
+ * This method is used to manage the internal state of the visual filter, specifically when the in-parameters and rendering updates are pending.
563
+ * @param conditionUpdatePending Whether the condition update is pending or not. Defaults to the current inParamConditionUpdatePending state.
564
+ * @param renderingUpdatePending Whether the rendering update is pending or not. Defaults to the current renderingUpdatePending state.
565
+ */;
566
+ _proto._setInternalUpdatePending = function _setInternalUpdatePending() {
567
+ let conditionUpdatePending = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.inParamConditionUpdatePending;
568
+ let renderingUpdatePending = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : this.renderingUpdatePending;
569
+ // This method is used to internally by visual filter to enable and disable bindings.
570
+ const isBindingEnabledForVisualFilterExternally = this.enableChartBinding;
571
+ const chartBinding = this.content?.getChartBinding();
572
+ const updatePending = conditionUpdatePending || renderingUpdatePending;
573
+ if (!updatePending && isBindingEnabledForVisualFilterExternally && chartBinding && chartBinding.isSuspended()) {
574
+ // Internal update is done, binding is enabled externally, so resume the binding.
575
+ chartBinding.resume();
576
+ } else if (updatePending && chartBinding && !chartBinding.isSuspended()) {
577
+ // Internal update is pending/in progress, so we suspend the binding.
578
+ chartBinding.suspend();
579
+ }
580
+ // Update the internal flags for condition and rendering update pending.
581
+ this.inParamConditionUpdatePending = conditionUpdatePending;
582
+ this.renderingUpdatePending = renderingUpdatePending;
502
583
  };
503
584
  _proto.createContent = function createContent() {
504
585
  const id = generate([this.path]);
@@ -684,8 +765,15 @@ sap.ui.define(["sap/base/Log", "sap/base/util/merge", "sap/fe/base/BindingToolki
684
765
  enumerable: true,
685
766
  writable: true,
686
767
  initializer: null
768
+ }), _descriptor30 = _applyDecoratedDescriptor(_class2.prototype, "enableChartBinding", [_dec31], {
769
+ configurable: true,
770
+ enumerable: true,
771
+ writable: true,
772
+ initializer: function () {
773
+ return true;
774
+ }
687
775
  }), _class2)) || _class);
688
776
  _exports = VisualFilter;
689
777
  return _exports;
690
778
  }, false);
691
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzQiLCJfZGVjNSIsImV2ZW50IiwiX2RlYzYiLCJyZXF1aXJlZCIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfZGVzY3JpcHRvcjI5IiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsIm9uTWV0YWRhdGFBdmFpbGFibGUiLCJfb3duZXJDb21wb25lbnQiLCJncm91cElkIiwicGF0aCIsIm1ldGFQYXRoIiwib3duZXIiLCJfZ2V0T3duZXIiLCJjb250ZXh0UGF0aCIsInByZXByb2Nlc3NvckNvbnRleHQiLCJmdWxsQ29udGV4dFBhdGgiLCJjb250ZXh0T2JqZWN0UGF0aCIsImdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoIiwiX3Jlc29sdmVkQ29udGV4dFBhdGgiLCJlbmRzV2l0aCIsIm1ldGFNb2RlbCIsImdldE1ldGFNb2RlbCIsImRpYWdub3N0aWNzIiwiZ2V0QXBwQ29tcG9uZW50IiwiZ2V0RGlhZ25vc3RpY3MiLCJ2aWV3RGF0YSIsImdldFJvb3RDb250cm9sbGVyIiwiZ2V0VmlldyIsImdldFZpZXdEYXRhIiwiY29udmVydGVyQ29udGV4dCIsIkNvbnZlcnRlckNvbnRleHQiLCJjcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8iLCJzdGFydGluZ0VudGl0eVNldCIsIm5hbWUiLCJtZXJnZSIsImNvbnRleHRMb2NhdGlvbiIsIk1hbmlmZXN0V3JhcHBlciIsImFnZ3JlZ2F0aW9uSGVscGVyIiwiQWdncmVnYXRpb25IZWxwZXIiLCJnZXRFbnRpdHlUeXBlIiwiY3VzdG9tQWdncmVnYXRlcyIsImdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zIiwicHZBbm5vdGF0aW9uIiwidGFyZ2V0T2JqZWN0IiwibWVhc3VyZSIsInZpc3VhbGl6YXRpb25zIiwiVmlzdWFsaXphdGlvbnMiLCJnZXRDaGFydEFubm90YXRpb24iLCJhZ2dyZWdhdGlvbnMiLCJjdXN0QWdnTWVhc3VyZSIsImNoYXJ0QW5ub3RhdGlvbiIsIk1lYXN1cmVzIiwibGVuZ3RoIiwiZmlsdGVyIiwiY3VzdEFnZyIsInF1YWxpZmllciIsInZhbHVlIiwiZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMiLCJEeW5hbWljTWVhc3VyZXMiLCJMb2ciLCJ3YXJuaW5nIiwiZ2V0Q29udmVydGVyQ29udGV4dEZvciIsImdldEFic29sdXRlQW5ub3RhdGlvblBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RQYXRoIiwiTmFtZSIsInRvU3RyaW5nIiwiZ2V0QWdncmVnYXRlZFByb3BlcnR5Iiwic29tZSIsImN1c3RvbUFnZ3JlZ2F0ZSIsImRlZmF1bHRTZWxlY3Rpb25WYXJpYW50IiwiZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQiLCJjaGVja1NlbGVjdGlvblZhcmlhbnQiLCJhZ2dyZWdhdGlvbiIsImdldEFnZ3JlZ2F0ZVByb3BlcnRpZXMiLCJhZ2dyZWdhdGVQcm9wZXJ0aWVzIiwicHJvcGVydHlBbm5vdGF0aW9ucyIsIiR0YXJnZXQiLCJhbm5vdGF0aW9ucyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnMiLCJBZ2dyZWdhdGFibGVQcm9wZXJ0eSIsImNoZWNrSWZVT01IYXNDdXN0b21BZ2dyZWdhdGUiLCJwcm9wZXJ0eUhpZGRlbiIsIlVJIiwiSGlkZGVuIiwiaGlkZGVuTWVhc3VyZSIsInZhbHVlT2YiLCJjaGFydFR5cGUiLCJDaGFydFR5cGUiLCJzaG93VmFsdWVIZWxwQnV0dG9uIiwiZ2V0c2hvd1ZhbHVlSGVscEJ1dHRvbiIsImRyYWZ0U3VwcG9ydGVkIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0U3VwcG9ydGVkIiwiZXJyb3JNZXNzYWdlIiwiZ2V0RXJyb3JNZXNzYWdlIiwiY2hhcnRNZWFzdXJlIiwibWVhc3VyZURpbWVuc2lvblRpdGxlIiwiSW50ZXJhY3RpdmVDaGFydEhlbHBlciIsImdldE1lYXN1cmVEaW1lbnNpb25UaXRsZSIsImNvbGxlY3Rpb24iLCJ0b29sVGlwIiwiZ2V0VG9vbFRpcCIsInJlbmRlckxpbmVDaGFydCIsIlVvTVZpc2liaWxpdHkiLCJnZXRVb01WaXNpYmxpdHkiLCJzaG93RXJyb3IiLCJzY2FsZVVvTVRpdGxlIiwiZ2V0U2NhbGVVb01UaXRsZSIsInNvcnRPcmRlciIsIlNvcnRPcmRlciIsImZpbHRlckNvdW50QmluZGluZyIsImdldGZpbHRlckNvdW50QmluZGluZyIsInZpZXdJZCIsImdldFBhZ2VDb250cm9sbGVyIiwiZ2V0SWQiLCJfY29udGVudElkIiwiaWQiLCJzZWxlY3Rpb25WYXJpYW50Iiwic2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24iLCJ1bmRlZmluZWQiLCJjb250ZW50IiwiY3JlYXRlQ29udGVudCIsIm1lYXN1cmVzIiwiYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcyIsIlVPTSIsImdldFVvTSIsIlVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZSIsInZpc3VhbGl6YXRpb24iLCJzQW5ub3RhdGlvblBhdGgiLCJnZXRFbnRpdHlUeXBlQW5ub3RhdGlvbiIsImFubm90YXRpb24iLCJzZXRTaG93VmFsdWVIZWxwIiwiYlNob3dWYWx1ZUhlbHAiLCJpc0EiLCJnZXRJdGVtcyIsIm9WaXN1YWxGaWx0ZXJDb250cm9sIiwiZ2V0VmlzdWFsRmlsdGVyQ29udHJvbCIsImdldENvbnRlbnQiLCJvSW5uZXJDb250cm9sIiwic2V0VmlzaWJsZSIsInNldFByb3BlcnR5Iiwic2V0VmFsdWVIZWxwSWNvblNyYyIsInNJY29uU3JjIiwic2V0SWNvbiIsInZhbGlkQ2hhcnRUeXBlIiwiZXJyb3JNZXNzYWdlVGl0bGUiLCJnZXRUcmFuc2xhdGVkVGV4dCIsInNEaW1lbnNpb25UeXBlIiwiRGltZW5zaW9ucyIsImlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzIiwiU2VsZWN0T3B0aW9ucyIsIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCIsInNlbGVjdE9wdGlvbiIsIlByb3BlcnR5TmFtZSIsIlJhbmdlcyIsImVycm9yIiwibWF0Y2hlZEFnZ3JlZ2F0ZSIsImFnZ3JlZ2F0ZSIsIklTT0N1cnJlbmN5IiwidW5pdCIsIlVuaXQiLCJnZXRSZXF1aXJlZCIsIl9qc3giLCJMYWJlbCIsInRleHQiLCJ3aWR0aCIsImNoaWxkcmVuIiwibGF5b3V0RGF0YSIsIk92ZXJmbG93VG9vbGJhckxheW91dERhdGEiLCJwcmlvcml0eSIsIk92ZXJmbG93VG9vbGJhclByaW9yaXR5IiwiTmV2ZXJPdmVyZmxvdyIsImdldFRpdGxlIiwiVGl0bGUiLCJnZW5lcmF0ZSIsInRvb2x0aXAiLCJ0aXRsZVN0eWxlIiwibGV2ZWwiLCJjbGFzcyIsImdldFVvTVRpdGxlIiwic2hvd0Vycm9yRXhwcmVzc2lvbiIsInZpc2libGUiLCJjb21waWxlRXhwcmVzc2lvbiIsImlmRWxzZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiZ2V0VG9vbEJhclNwYWNlciIsIlRvb2xiYXJTcGFjZXIiLCJnZXRWYWx1ZUhlbHAiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJlbmFibGVkIiwicHJlc3MiLCJWaXN1YWxGaWx0ZXJSdW50aW1lIiwiZmlyZVZhbHVlSGVscCIsImN1c3RvbURhdGEiLCJDdXN0b21EYXRhIiwiZ2V0VG9vbGJhciIsIk92ZXJmbG93VG9vbGJhciIsInN0eWxlIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJjb3p5TW9kZSIsImRvY3VtZW50IiwiYm9keSIsImNsYXNzTGlzdCIsImNvbnRhaW5zIiwib3ZlcmFsbEhlaWdodCIsImNoYXJ0SGVpZ2h0IiwidmZDb250cm9sSWQiLCJWaXN1YWxGaWx0ZXJDb250cm9sIiwiaGVpZ2h0IiwiaXRlbXMiLCJWQm94IiwiZ2V0VmlzdWFsRmlsdGVyQ2hhcnQiLCJCdWlsZGluZ0Jsb2NrIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJWaXN1YWxGaWx0ZXIudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQW5ub3RhdGlvblBhdGgsIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BZ2dyZWdhdGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IEFnZ3JlZ2F0ZWRQcm9wZXJ0eSwgQWdncmVnYXRlZFByb3BlcnR5VHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQW5hbHl0aWNzXCI7XG5pbXBvcnQgeyBTb3J0T3JkZXJUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9Db21tb25cIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9ucyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvRWRtX1R5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL01lYXN1cmVzX0VkbVwiO1xuaW1wb3J0IHR5cGUgeyBDaGFydCwgRGF0YVBvaW50LCBMaW5lSXRlbSwgUHJlc2VudGF0aW9uVmFyaWFudCwgU2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCBMb2cgZnJvbSBcInNhcC9iYXNlL0xvZ1wiO1xuaW1wb3J0IG1lcmdlIGZyb20gXCJzYXAvYmFzZS91dGlsL21lcmdlXCI7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgaWZFbHNlLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgZGVmaW5lVUk1Q2xhc3MsIGV2ZW50LCBpbXBsZW1lbnRJbnRlcmZhY2UsIHByb3BlcnR5LCB0eXBlIFByb3BlcnRpZXNPZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCBUZW1wbGF0ZUNvbXBvbmVudCBmcm9tIFwic2FwL2ZlL2NvcmUvVGVtcGxhdGVDb21wb25lbnRcIjtcbmltcG9ydCBCdWlsZGluZ0Jsb2NrIGZyb20gXCJzYXAvZmUvY29yZS9idWlsZGluZ0Jsb2Nrcy9CdWlsZGluZ0Jsb2NrXCI7XG5pbXBvcnQgQ29udmVydGVyQ29udGV4dCBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9Db252ZXJ0ZXJDb250ZXh0XCI7XG5pbXBvcnQgeyBCYXNlTWFuaWZlc3RTZXR0aW5ncyB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCBNYW5pZmVzdFdyYXBwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RXcmFwcGVyXCI7XG5pbXBvcnQgeyBQYWdlQ29udGV4dFBhdGhUYXJnZXQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9UZW1wbGF0ZUNvbnZlcnRlclwiO1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vRGF0YVZpc3VhbGl6YXRpb25cIjtcbmltcG9ydCB0eXBlIHsgUGFyYW1ldGVyVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0xpc3RSZXBvcnQvVmlzdWFsRmlsdGVyc1wiO1xuaW1wb3J0IHsgQWdncmVnYXRpb25IZWxwZXIgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9oZWxwZXJzL0FnZ3JlZ2F0aW9uXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7IFZpZXdEYXRhIH0gZnJvbSBcInNhcC9mZS9jb3JlL3NlcnZpY2VzL1RlbXBsYXRlZFZpZXdTZXJ2aWNlRmFjdG9yeVwiO1xuaW1wb3J0IERpYWdub3N0aWNzIGZyb20gXCJzYXAvZmUvY29yZS9zdXBwb3J0L0RpYWdub3N0aWNzXCI7XG5pbXBvcnQgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTGFiZWwgZnJvbSBcInNhcC9tL0xhYmVsXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgVGl0bGUgZnJvbSBcInNhcC9tL1RpdGxlXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IE92ZXJmbG93VG9vbGJhclByaW9yaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9tZGMvQ29udHJvbFwiO1xuaW1wb3J0IE9EYXRhTWV0YU1vZGVsIGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvT0RhdGFNZXRhTW9kZWxcIjtcbmltcG9ydCB7IGRlZmF1bHQgYXMgVmlzdWFsRmlsdGVyQ29udHJvbCB9IGZyb20gXCIuLi9jb250cm9scy9maWx0ZXJiYXIvVmlzdWFsRmlsdGVyXCI7XG5pbXBvcnQgSW50ZXJhY3RpdmVDaGFydEhlbHBlciBmcm9tIFwiLi9JbnRlcmFjdGl2ZUNoYXJ0SGVscGVyXCI7XG5pbXBvcnQgVmlzdWFsRmlsdGVyUnVudGltZSBmcm9tIFwiLi9WaXN1YWxGaWx0ZXJSdW50aW1lXCI7XG5pbXBvcnQgeyBnZXRWaXN1YWxGaWx0ZXJDaGFydCB9IGZyb20gXCIuL2ZyYWdtZW50cy9JbnRlcmFjdGl2ZUNoYXJ0c1wiO1xuLyoqXG4gKiBCdWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYSBWaXN1YWxGaWx0ZXIgYmFzZWQgb24gdGhlIG1ldGFkYXRhIHByb3ZpZGVkIGJ5IE9EYXRhIFY0LlxuICogPGJyPlxuICogQSBDaGFydCBhbm5vdGF0aW9uIGlzIHJlcXVpcmVkIHRvIGJyaW5nIHVwIGFuIGludGVyYWN0aXZlIGNoYXJ0XG4gKlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiA8cHJlPlxuICogJmx0O21hY3JvczpWaXN1YWxGaWx0ZXJcbiAqIGNvbGxlY3Rpb249XCJ7ZW50aXR5U2V0Jmd0O31cIlxuICogY2hhcnRBbm5vdGF0aW9uPVwie2NoYXJ0QW5ub3RhdGlvbiZndDt9XCJcbiAqIGlkPVwic29tZUlEXCJcbiAqIGdyb3VwSWQ9XCJzb21lR3JvdXBJRFwiXG4gKiB0aXRsZT1cInNvbWUgVGl0bGVcIlxuICogLyZndDtcbiAqIDwvcHJlPlxuICogQHByaXZhdGVcbiAqIEBleHBlcmltZW50YWxcbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLm1hY3Jvcy52aXN1YWxmaWx0ZXJzLlZpc3VhbEZpbHRlclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVmlzdWFsRmlsdGVyIGV4dGVuZHMgQnVpbGRpbmdCbG9jazxWaXN1YWxGaWx0ZXI+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lGb3JtQ29udGVudCA9IHRydWU7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dmFsdWVIZWxwSWNvblNyYyE6IHN0cmluZztcblxuXHRAZXZlbnQoKVxuXHR2YWx1ZUhlbHBSZXF1ZXN0ITogRnVuY3Rpb247XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHR0aXRsZSA9IFwiXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHZhbHVlbGlzdFByb3BlcnR5Pzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRpblBhcmFtZXRlcnM/OiBQYXJhbWV0ZXJUeXBlW107XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0ZmlsdGVyQmFyRW50aXR5VHlwZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHNob3dFcnJvcj86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGNoYXJ0TWVhc3VyZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdFVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZT86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwQnV0dG9uPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGN1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRncm91cElkID0gXCIkYXV0by52aXN1YWxGaWx0ZXJzXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGVycm9yTWVzc2FnZVRpdGxlPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdF9jb250ZW50SWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cdCAqIEludGVybmFsIFByb3BlcnRpZXNcblx0ICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuXG5cdGFnZ3JlZ2F0ZVByb3BlcnRpZXM6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQ7XG5cblx0Y2hhcnRUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0cGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdG1lYXN1cmVEaW1lbnNpb25UaXRsZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHRvb2xUaXA6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRVb01WaXNpYmlsaXR5OiBib29sZWFuIHwgdW5kZWZpbmVkO1xuXG5cdHNjYWxlVW9NVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRmaWx0ZXJDb3VudEJpbmRpbmc6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRjaGFydEFubm90YXRpb24/OiBDaGFydDtcblx0X3Jlc29sdmVkQ29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0c29ydE9yZGVyPzogU29ydE9yZGVyVHlwZVtdO1xuXHRjb2xsZWN0aW9uPzogRGF0YU1vZGVsT2JqZWN0UGF0aDxQYWdlQ29udGV4dFBhdGhUYXJnZXQ+O1xuXHRzZWxlY3Rpb25WYXJpYW50OiBTZWxlY3Rpb25WYXJpYW50IHwgdW5kZWZpbmVkO1xuXG5cdGNvbnN0cnVjdG9yKHByb3BzOiAkQ29udHJvbFNldHRpbmdzICYgUHJvcGVydGllc09mPFZpc3VhbEZpbHRlckNvbnRyb2w+LCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcHMsIG90aGVycyk7XG5cdH1cblxuXHRwdWJsaWMgb25NZXRhZGF0YUF2YWlsYWJsZShfb3duZXJDb21wb25lbnQ6IFRlbXBsYXRlQ29tcG9uZW50KTogdm9pZCB7XG5cdFx0dGhpcy5ncm91cElkID0gXCIkYXV0by52aXN1YWxGaWx0ZXJzXCI7XG5cdFx0dGhpcy5wYXRoID0gdGhpcy5tZXRhUGF0aDtcblx0XHRjb25zdCBvd25lciA9IHRoaXMuX2dldE93bmVyKCk7XG5cdFx0dGhpcy5jb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGggPz8gb3duZXI/LnByZXByb2Nlc3NvckNvbnRleHQ/LmZ1bGxDb250ZXh0UGF0aDtcblx0XHRjb25zdCBjb250ZXh0T2JqZWN0UGF0aCA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8UHJlc2VudGF0aW9uVmFyaWFudD4odGhpcy5tZXRhUGF0aCwgdGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0aWYgKHRoaXMuY29udGV4dFBhdGgpIHtcblx0XHRcdHRoaXMuX3Jlc29sdmVkQ29udGV4dFBhdGggPSB0aGlzLmNvbnRleHRQYXRoLmVuZHNXaXRoKFwiL1wiKSA/IHRoaXMuY29udGV4dFBhdGggOiB0aGlzLmNvbnRleHRQYXRoICsgXCIvXCI7XG5cdFx0fVxuXHRcdGNvbnN0IG1ldGFNb2RlbCA9IHRoaXMuZ2V0TWV0YU1vZGVsKCkgYXMgT0RhdGFNZXRhTW9kZWw7XG5cblx0XHRjb25zdCBkaWFnbm9zdGljcyA9IHRoaXMuZ2V0QXBwQ29tcG9uZW50KCk/LmdldERpYWdub3N0aWNzKCkgPz8gKHt9IGFzIERpYWdub3N0aWNzKTtcblx0XHRjb25zdCB2aWV3RGF0YSA9XG5cdFx0XHR0aGlzLl9nZXRPd25lcigpPy5nZXRSb290Q29udHJvbGxlcigpPy5nZXRWaWV3KCkuZ2V0Vmlld0RhdGEoKSA/PyAodGhpcy5fZ2V0T3duZXIoKT8uZ2V0Vmlld0RhdGEoKSBhcyB1bmtub3duIGFzIFZpZXdEYXRhKTtcblx0XHRjb25zdCBjb252ZXJ0ZXJDb250ZXh0ID0gQ29udmVydGVyQ29udGV4dC5jcmVhdGVDb252ZXJ0ZXJDb250ZXh0Rm9yTWFjcm8oXG5cdFx0XHRjb250ZXh0T2JqZWN0UGF0aD8uc3RhcnRpbmdFbnRpdHlTZXQ/Lm5hbWUgYXMgc3RyaW5nLFxuXHRcdFx0bWV0YU1vZGVsLFxuXHRcdFx0ZGlhZ25vc3RpY3MsXG5cdFx0XHRtZXJnZSxcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoPy5jb250ZXh0TG9jYXRpb24sXG5cdFx0XHRuZXcgTWFuaWZlc3RXcmFwcGVyKHZpZXdEYXRhIGFzIEJhc2VNYW5pZmVzdFNldHRpbmdzLCB0aGlzLmdldEFwcENvbXBvbmVudCgpKVxuXHRcdCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb25IZWxwZXIgPSBuZXcgQWdncmVnYXRpb25IZWxwZXIoY29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlKCksIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGNvbnN0IGN1c3RvbUFnZ3JlZ2F0ZXMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucygpO1xuXHRcdGNvbnN0IHB2QW5ub3RhdGlvbiA9IGNvbnRleHRPYmplY3RQYXRoPy50YXJnZXRPYmplY3Q7XG5cdFx0bGV0IG1lYXN1cmU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCB2aXN1YWxpemF0aW9ucyA9IHB2QW5ub3RhdGlvbiAmJiBwdkFubm90YXRpb24uVmlzdWFsaXphdGlvbnM7XG5cdFx0dGhpcy5nZXRDaGFydEFubm90YXRpb24odmlzdWFsaXphdGlvbnMsIGNvbnZlcnRlckNvbnRleHQpO1xuXHRcdGxldCBhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVbXSA9IFtdLFxuXHRcdFx0Y3VzdEFnZ01lYXN1cmUgPSBbXTtcblxuXHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXM/Lmxlbmd0aCkge1xuXHRcdFx0Y3VzdEFnZ01lYXN1cmUgPSBjdXN0b21BZ2dyZWdhdGVzLmZpbHRlcigoY3VzdEFnZykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gY3VzdEFnZy5xdWFsaWZpZXIgPT09IHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlc1swXS52YWx1ZTtcblx0XHRcdH0pO1xuXHRcdFx0bWVhc3VyZSA9IGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA+IDAgPyBjdXN0QWdnTWVhc3VyZVswXS5xdWFsaWZpZXIgOiB0aGlzLmNoYXJ0QW5ub3RhdGlvbi5NZWFzdXJlc1swXS52YWx1ZTtcblx0XHRcdGFnZ3JlZ2F0aW9ucyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzKClbMF07XG5cdFx0fVxuXHRcdC8vIGlmIHRoZXJlIGFyZSBBZ2dyZWdhdGVkUHJvcGVydHkgb2JqZWN0cyBidXQgbm8gZHluYW1pYyBtZWFzdXJlcywgcmF0aGVyIHRoZXJlIGFyZSB0cmFuc2Zvcm1hdGlvbiBhZ2dyZWdhdGVzIGZvdW5kIGluIG1lYXN1cmVzXG5cdFx0aWYgKFxuXHRcdFx0YWdncmVnYXRpb25zICYmXG5cdFx0XHRhZ2dyZWdhdGlvbnMubGVuZ3RoID4gMCAmJlxuXHRcdFx0IXRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMgJiZcblx0XHRcdGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA9PT0gMCAmJlxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMubGVuZ3RoID4gMFxuXHRcdCkge1xuXHRcdFx0TG9nLndhcm5pbmcoXG5cdFx0XHRcdFwiVGhlIHRyYW5zZm9ybWF0aW9uYWwgYWdncmVnYXRlIG1lYXN1cmVzIGFyZSBjb25maWd1cmVkIGFzIENoYXJ0Lk1lYXN1cmVzIGJ1dCBzaG91bGQgYmUgY29uZmlndXJlZCBhcyBDaGFydC5EeW5hbWljTWVhc3VyZXMgaW5zdGVhZC4gUGxlYXNlIGNoZWNrIHRoZSBTQVAgSGVscCBkb2N1bWVudGF0aW9uIGFuZCBjb3JyZWN0IHRoZSBjb25maWd1cmF0aW9uIGFjY29yZGluZ2x5LlwiXG5cdFx0XHQpO1xuXHRcdH1cblx0XHQvL2lmIHRoZSBjaGFydCBoYXMgZHluYW1pYyBtZWFzdXJlcywgYnV0IHdpdGggbm8gb3RoZXIgY3VzdG9tIGFnZ3JlZ2F0ZSBtZWFzdXJlcyB0aGVuIGNvbnNpZGVyIHRoZSBkeW5hbWljIG1lYXN1cmVzXG5cdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EeW5hbWljTWVhc3VyZXMpIHtcblx0XHRcdGlmIChjdXN0QWdnTWVhc3VyZS5sZW5ndGggPT09IDApIHtcblx0XHRcdFx0bWVhc3VyZSA9IGNvbnZlcnRlckNvbnRleHRcblx0XHRcdFx0XHQuZ2V0Q29udmVydGVyQ29udGV4dEZvcjxBZ2dyZWdhdGVkUHJvcGVydHk+KFxuXHRcdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoKHRoaXMuY2hhcnRBbm5vdGF0aW9uLkR5bmFtaWNNZWFzdXJlc1swXS52YWx1ZSlcblx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0LmdldERhdGFNb2RlbE9iamVjdFBhdGgoKVxuXHRcdFx0XHRcdC50YXJnZXRPYmplY3Q/Lk5hbWUudG9TdHJpbmcoKTtcblx0XHRcdFx0YWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRlZFByb3BlcnR5KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XHRcIlRoZSBkeW5hbWljIG1lYXN1cmVzIGhhdmUgYmVlbiBpZ25vcmVkIGFzIHZpc3VhbCBmaWx0ZXJzIGNhbiBkZWFsIHdpdGggb25seSAxIG1lYXN1cmUgYW5kIHRoZSBmaXJzdCAoY3VzdG9tIGFnZ3JlZ2F0ZSkgbWVhc3VyZSBkZWZpbmVkIHVuZGVyIENoYXJ0Lk1lYXN1cmVzIGlzIGNvbnNpZGVyZWQuXCJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKFxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gbWVhc3VyZTtcblx0XHRcdH0pXG5cdFx0KSB7XG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSA9IHRydWU7XG5cdFx0fVxuXG5cdFx0Y29uc3QgZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgPSBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudChjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSk7XG5cdFx0dGhpcy5jaGVja1NlbGVjdGlvblZhcmlhbnQoZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQpO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0aW9uID0gdGhpcy5nZXRBZ2dyZWdhdGVQcm9wZXJ0aWVzKGFnZ3JlZ2F0aW9ucywgbWVhc3VyZSk7XG5cdFx0aWYgKGFnZ3JlZ2F0aW9uKSB7XG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXMgPSBhZ2dyZWdhdGlvbjtcblx0XHR9XG5cdFx0Y29uc3QgcHJvcGVydHlBbm5vdGF0aW9ucyA9XG5cdFx0XHR2aXN1YWxpemF0aW9ucyAmJiB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMgJiYgdGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdPy4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zID0gYWdncmVnYXRpb24/LkFnZ3JlZ2F0YWJsZVByb3BlcnR5Py4kdGFyZ2V0Py5hbm5vdGF0aW9ucztcblx0XHR0aGlzLmNoZWNrSWZVT01IYXNDdXN0b21BZ2dyZWdhdGUoY3VzdG9tQWdncmVnYXRlcywgcHJvcGVydHlBbm5vdGF0aW9ucywgYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucyk7XG5cdFx0Y29uc3QgcHJvcGVydHlIaWRkZW4gPSBwcm9wZXJ0eUFubm90YXRpb25zPy5VST8uSGlkZGVuO1xuXHRcdGNvbnN0IGhpZGRlbk1lYXN1cmUgPSBwcm9wZXJ0eUhpZGRlbj8udmFsdWVPZigpO1xuXHRcdGNvbnN0IGNoYXJ0VHlwZSA9IHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5DaGFydFR5cGU7XG5cdFx0dGhpcy5jaGFydFR5cGUgPSBjaGFydFR5cGU7XG5cdFx0dGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uID0gdGhpcy5nZXRzaG93VmFsdWVIZWxwQnV0dG9uKGNoYXJ0VHlwZSwgaGlkZGVuTWVhc3VyZSk7XG5cdFx0dGhpcy5kcmFmdFN1cHBvcnRlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnRTdXBwb3J0ZWQobWV0YU1vZGVsLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHQvKipcblx0XHQgKiBJZiB0aGUgbWVhc3VyZSBvZiB0aGUgY2hhcnQgaXMgbWFya2VkIGFzICdoaWRkZW4nLCBvciBpZiB0aGUgY2hhcnQgdHlwZSBpcyBpbnZhbGlkLCBvciBpZiB0aGUgZGF0YSB0eXBlIGZvciB0aGUgbGluZSBjaGFydCBpcyBpbnZhbGlkLFxuXHRcdCAqIHRoZSBjYWxsIGlzIG1hZGUgdG8gdGhlIEludGVyYWN0aXZlQ2hhcnRXaXRoRXJyb3IgZnJhZ21lbnQgKHVzaW5nIGVycm9yLW1lc3NhZ2UgcmVsYXRlZCBBUElzLCBidXQgYXZvaWRpbmcgYmF0Y2ggY2FsbHMpXG5cdFx0ICovXG5cdFx0dGhpcy5lcnJvck1lc3NhZ2UgPSB0aGlzLmdldEVycm9yTWVzc2FnZShoaWRkZW5NZWFzdXJlLCBtZWFzdXJlKTtcblx0XHR0aGlzLmNoYXJ0TWVhc3VyZSA9IG1lYXN1cmU7XG5cdFx0dGhpcy5tZWFzdXJlRGltZW5zaW9uVGl0bGUgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldE1lYXN1cmVEaW1lbnNpb25UaXRsZShcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0dGhpcy5jdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXNcblx0XHQpO1xuXHRcdGNvbnN0IGNvbGxlY3Rpb24gPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFBhZ2VDb250ZXh0UGF0aFRhcmdldD4odGhpcy5jb250ZXh0UGF0aCk7XG5cdFx0dGhpcy50b29sVGlwID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRUb29sVGlwKFxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24sXG5cdFx0XHRjb2xsZWN0aW9uLFxuXHRcdFx0dGhpcy5wYXRoLFxuXHRcdFx0dGhpcy5jdXN0b21BZ2dyZWdhdGUsXG5cdFx0XHR0aGlzLmFnZ3JlZ2F0ZVByb3BlcnRpZXMsXG5cdFx0XHR0aGlzLnJlbmRlckxpbmVDaGFydFxuXHRcdCk7XG5cdFx0dGhpcy5Vb01WaXNpYmlsaXR5ID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRVb01WaXNpYmxpdHkodGhpcy5jaGFydEFubm90YXRpb24sIHRoaXMuc2hvd0Vycm9yKTtcblx0XHR0aGlzLnNjYWxlVW9NVGl0bGUgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFNjYWxlVW9NVGl0bGUoXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0aGlzLnBhdGgsXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllc1xuXHRcdCk7XG5cdFx0dGhpcy5jb2xsZWN0aW9uID0gY29sbGVjdGlvbjtcblx0XHR0aGlzLnNvcnRPcmRlciA9IHB2QW5ub3RhdGlvbj8uU29ydE9yZGVyO1xuXHRcdHRoaXMuZmlsdGVyQ291bnRCaW5kaW5nID0gSW50ZXJhY3RpdmVDaGFydEhlbHBlci5nZXRmaWx0ZXJDb3VudEJpbmRpbmcodGhpcy5jaGFydEFubm90YXRpb24pO1xuXHRcdGNvbnN0IHZpZXdJZCA9IHRoaXMuZ2V0UGFnZUNvbnRyb2xsZXIoKT8uZ2V0VmlldygpLmdldElkKCk7XG5cdFx0aWYgKHRoaXMuX2NvbnRlbnRJZCkge1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gYCR7dmlld0lkfS0tJHt0aGlzLl9jb250ZW50SWR9YDtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaWQpIHtcblx0XHRcdHRoaXMuX2NvbnRlbnRJZCA9IGAke3RoaXMuaWR9LWNvbnRlbnRgO1xuXHRcdH1cblx0XHR0aGlzLnNlbGVjdGlvblZhcmlhbnQgPSB0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uXG5cdFx0XHQ/IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8U2VsZWN0aW9uVmFyaWFudD4odGhpcy5zZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbik/LnRhcmdldE9iamVjdFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2sgaWYgdGhlIFVvTSBoYXMgY3VzdG9tIGFnZ3JlZ2F0ZVxuXHQgKiBAcGFyYW0gY3VzdG9tQWdncmVnYXRlcyAtIEN1c3RvbSBhZ2dyZWdhdGVzXG5cdCAqIEBwYXJhbSBwcm9wZXJ0eUFubm90YXRpb25zIC0gUHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICogQHBhcmFtIGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnMgLSBBZ2dyZWdhdGFibGUgcHJvcGVydHkgYW5ub3RhdGlvbnNcblx0ICovXG5cdGNoZWNrSWZVT01IYXNDdXN0b21BZ2dyZWdhdGUoXG5cdFx0Y3VzdG9tQWdncmVnYXRlczogQXJyYXk8Q3VzdG9tQWdncmVnYXRlPixcblx0XHRwcm9wZXJ0eUFubm90YXRpb25zOiBQcm9wZXJ0eUFubm90YXRpb25zIHwgdW5kZWZpbmVkLFxuXHRcdGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnM/OiBQcm9wZXJ0eUFubm90YXRpb25zXG5cdCk6IHZvaWQge1xuXHRcdGNvbnN0IG1lYXN1cmVzID0gcHJvcGVydHlBbm5vdGF0aW9ucz8uTWVhc3VyZXM7XG5cdFx0Y29uc3QgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcyA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnM/Lk1lYXN1cmVzO1xuXHRcdGNvbnN0IFVPTSA9IHRoaXMuZ2V0VW9NKG1lYXN1cmVzLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzKTtcblx0XHRpZiAoXG5cdFx0XHRVT00gJiZcblx0XHRcdGN1c3RvbUFnZ3JlZ2F0ZXMuc29tZShmdW5jdGlvbiAoY3VzdEFnZzogQ3VzdG9tQWdncmVnYXRlKSB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gVU9NO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdHRoaXMuVW9NSGFzQ3VzdG9tQWdncmVnYXRlID0gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5Vb01IYXNDdXN0b21BZ2dyZWdhdGUgPSBmYWxzZTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogR2V0IHRoZSBjaGFydCBhbm5vdGF0aW9uLlxuXHQgKiBAcGFyYW0gdmlzdWFsaXphdGlvbnMgVmlzdWFsaXphdGlvbnNcblx0ICogQHBhcmFtIGNvbnZlcnRlckNvbnRleHQgQ29udmVydGVyIGNvbnRleHRcblx0ICovXG5cdGdldENoYXJ0QW5ub3RhdGlvbihcblx0XHR2aXN1YWxpemF0aW9uczogQXJyYXk8QW5ub3RhdGlvblBhdGg8Q2hhcnQgfCBEYXRhUG9pbnQgfCBMaW5lSXRlbT4+IHwgdW5kZWZpbmVkLFxuXHRcdGNvbnZlcnRlckNvbnRleHQ6IENvbnZlcnRlckNvbnRleHRcblx0KTogdm9pZCB7XG5cdFx0aWYgKHZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRmb3IgKGxldCB2aXN1YWxpemF0aW9uIG9mIHZpc3VhbGl6YXRpb25zKSB7XG5cdFx0XHRcdGNvbnN0IHNBbm5vdGF0aW9uUGF0aCA9IHZpc3VhbGl6YXRpb24gJiYgdmlzdWFsaXphdGlvbi52YWx1ZTtcblx0XHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24gPVxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248Q2hhcnQ+KHNBbm5vdGF0aW9uUGF0aCkgJiZcblx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGVBbm5vdGF0aW9uPENoYXJ0PihzQW5ub3RhdGlvblBhdGgpLmFubm90YXRpb247XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIGZsYWcgdG8gc2hvdyBvciBoaWRlIHRoZSB2YWx1ZSBoZWxwIGZvciB0aGUgdmlzdWFsIGZpbHRlci5cblx0ICogQHBhcmFtIGJTaG93VmFsdWVIZWxwIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgb3IgaGlkZSB0aGUgdmFsdWUgaGVscC5cblx0ICovXG5cdHNldFNob3dWYWx1ZUhlbHAoYlNob3dWYWx1ZUhlbHA6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8VmlzdWFsRmlsdGVyQ29udHJvbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvVmlzdWFsRmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpO1xuXHRcdFx0XHRvVmlzdWFsRmlsdGVyQ29udHJvbD8uZ2V0Q29udGVudCgpLnNvbWUoZnVuY3Rpb24gKG9Jbm5lckNvbnRyb2w6IENvbnRyb2wpIHtcblx0XHRcdFx0XHRpZiAob0lubmVyQ29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdFx0b0lubmVyQ29udHJvbC5zZXRWaXNpYmxlKGJTaG93VmFsdWVIZWxwKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnNldFByb3BlcnR5KFwic2hvd1ZhbHVlSGVscFwiLCBiU2hvd1ZhbHVlSGVscCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFNldHMgdGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaGVscCBpY29uLlxuXHQgKiBAcGFyYW0gc0ljb25TcmMgVGhlIHNvdXJjZSBvZiB0aGUgdmFsdWUgaGVscCBpY29uXG5cdCAqL1xuXHRzZXRWYWx1ZUhlbHBJY29uU3JjKHNJY29uU3JjOiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodGhpcy5jb250ZW50Py5pc0E8VmlzdWFsRmlsdGVyQ29udHJvbD4oXCJzYXAuZmUubWFjcm9zLmNvbnRyb2xzLmZpbHRlcmJhci5WaXN1YWxGaWx0ZXJcIikpIHtcblx0XHRcdGlmICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKCkubGVuZ3RoID4gMCkge1xuXHRcdFx0XHRjb25zdCBvVmlzdWFsRmlsdGVyQ29udHJvbCA9IHRoaXMuZ2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpO1xuXHRcdFx0XHRvVmlzdWFsRmlsdGVyQ29udHJvbD8uZ2V0Q29udGVudCgpLnNvbWUoZnVuY3Rpb24gKG9Jbm5lckNvbnRyb2w6IENvbnRyb2wpIHtcblx0XHRcdFx0XHRpZiAob0lubmVyQ29udHJvbC5pc0E8QnV0dG9uPihcInNhcC5tLkJ1dHRvblwiKSkge1xuXHRcdFx0XHRcdFx0b0lubmVyQ29udHJvbC5zZXRJY29uKHNJY29uU3JjKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHR0aGlzLnNldFByb3BlcnR5KFwidmFsdWVIZWxwSWNvblNyY1wiLCBzSWNvblNyYyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgdmlzdWFsIGZpbHRlciBjb250cm9sIGZyb20gdGhlIGNvbnRlbnQuXG5cdCAqIEByZXR1cm5zIFRoZSB2aXN1YWwgZmlsdGVyIGNvbnRyb2wgb3IgdW5kZWZpbmVkIGlmIG5vdCBmb3VuZFxuXHQgKi9cblx0Z2V0VmlzdWFsRmlsdGVyQ29udHJvbCgpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0cmV0dXJuICh0aGlzLmNvbnRlbnQ/LmdldEl0ZW1zKClbMF0gYXMgVkJveCkuZ2V0SXRlbXMoKVswXSBhcyBPdmVyZmxvd1Rvb2xiYXI7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgZXJyb3IgbWVzc2FnZSBmb3IgYSBoaWRkZW4gbWVhc3VyZS5cblx0ICogQHBhcmFtIGhpZGRlbk1lYXN1cmUgVGhlIGhpZGRlbiBtZWFzdXJlIG9iamVjdFxuXHQgKiBAcGFyYW0gbWVhc3VyZSBUaGUgbWVhc3VyZSBuYW1lXG5cdCAqIEByZXR1cm5zIFRoZSBlcnJvciBtZXNzYWdlLCBpZiBhbnlcblx0ICovXG5cdGdldEVycm9yTWVzc2FnZShoaWRkZW5NZWFzdXJlOiBPYmplY3QgfCB1bmRlZmluZWQsIG1lYXN1cmU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuXHRcdGxldCB2YWxpZENoYXJ0VHlwZTtcblx0XHRpZiAodGhpcy5jaGFydEFubm90YXRpb24pIHtcblx0XHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbi5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0xpbmVcIiB8fCB0aGlzLmNoYXJ0QW5ub3RhdGlvbi5DaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0JhclwiKSB7XG5cdFx0XHRcdHZhbGlkQ2hhcnRUeXBlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbGlkQ2hhcnRUeXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGlmICgodHlwZW9mIGhpZGRlbk1lYXN1cmUgPT09IFwiYm9vbGVhblwiICYmIGhpZGRlbk1lYXN1cmUpIHx8ICF2YWxpZENoYXJ0VHlwZSB8fCB0aGlzLnJlbmRlckxpbmVDaGFydCA9PT0gZmFsc2UpIHtcblx0XHRcdHRoaXMuc2hvd0Vycm9yID0gdHJ1ZTtcblx0XHRcdHRoaXMuZXJyb3JNZXNzYWdlVGl0bGUgPVxuXHRcdFx0XHRoaWRkZW5NZWFzdXJlIHx8ICF2YWxpZENoYXJ0VHlwZVxuXHRcdFx0XHRcdD8gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUlNfRVJST1JfTUVTU0FHRV9USVRMRVwiKVxuXHRcdFx0XHRcdDogdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9MSU5FX0NIQVJUX0lOVkFMSURfREFUQVRZUEVcIik7XG5cdFx0XHRpZiAoaGlkZGVuTWVhc3VyZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9ISURERU5fTUVBU1VSRVwiLCBbbWVhc3VyZV0pO1xuXHRcdFx0fSBlbHNlIGlmICghdmFsaWRDaGFydFR5cGUpIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1ZJU1VBTF9GSUxURVJfVU5TVVBQT1JURURfQ0hBUlRfVFlQRVwiKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0xJTkVfQ0hBUlRfVU5TVVBQT1JURURfRElNRU5TSU9OXCIpO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsdWUgaGVscCBidXR0b24gZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gY2hhcnRUeXBlIFRoZSB0eXBlIG9mIGNoYXJ0IHVzZWQgaW4gdGhlIHZpc3VhbCBmaWx0ZXJcblx0ICogQHBhcmFtIGhpZGRlbk1lYXN1cmUgVGhlIGhpZGRlbiBtZWFzdXJlIG9iamVjdFxuXHQgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIHNob3cgdGhlIHZhbHVlIGhlbHAgYnV0dG9uXG5cdCAqL1xuXHRnZXRzaG93VmFsdWVIZWxwQnV0dG9uKGNoYXJ0VHlwZT86IHN0cmluZywgaGlkZGVuTWVhc3VyZT86IE9iamVjdCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHNEaW1lbnNpb25UeXBlID1cblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXS4kdGFyZ2V0ICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbi5EaW1lbnNpb25zWzBdLiR0YXJnZXQudHlwZTtcblx0XHRpZiAoc0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVcIiB8fCBzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uVGltZVwiIHx8IHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5EYXRlVGltZU9mZnNldFwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0eXBlb2YgaGlkZGVuTWVhc3VyZSA9PT0gXCJib29sZWFuXCIgJiYgaGlkZGVuTWVhc3VyZSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAoIShjaGFydFR5cGUgPT09IFwiVUkuQ2hhcnRUeXBlL0JhclwiIHx8IGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5yZW5kZXJMaW5lQ2hhcnQgPT09IGZhbHNlICYmIGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aGlzLmlzVmFsdWVMaXN0V2l0aEZpeGVkVmFsdWVzID09PSB0cnVlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVja3MgdGhlIHNlbGVjdGlvbiB2YXJpYW50IGZvciB0aGUgdmlzdWFsIGZpbHRlci5cblx0ICpcblx0ICogQHBhcmFtIGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50IFRoZSBkZWZhdWx0IHNlbGVjdGlvbiB2YXJpYW50IHRvIGJlIGNoZWNrZWRcblx0ICogQHJldHVybnMgdm9pZFxuXHQgKi9cblx0Y2hlY2tTZWxlY3Rpb25WYXJpYW50KGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50PzogU2VsZWN0aW9uVmFyaWFudCk6IHZvaWQge1xuXHRcdGxldCBzZWxlY3Rpb25WYXJpYW50O1xuXHRcdGlmICh0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKSB7XG5cdFx0XHRzZWxlY3Rpb25WYXJpYW50ID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxTZWxlY3Rpb25WYXJpYW50Pih0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKT8udGFyZ2V0T2JqZWN0O1xuXHRcdH1cblx0XHRpZiAoIXNlbGVjdGlvblZhcmlhbnQgJiYgZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQpIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQgPSBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudDtcblx0XHR9XG5cdFx0aWYgKHNlbGVjdGlvblZhcmlhbnQgJiYgc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zICYmICF0aGlzLm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZCkge1xuXHRcdFx0Zm9yIChjb25zdCBzZWxlY3RPcHRpb24gb2Ygc2VsZWN0aW9uVmFyaWFudC5TZWxlY3RPcHRpb25zKSB7XG5cdFx0XHRcdGlmIChzZWxlY3RPcHRpb24uUHJvcGVydHlOYW1lPy52YWx1ZSA9PT0gdGhpcy5jaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF0udmFsdWUpIHtcblx0XHRcdFx0XHRpZiAoc2VsZWN0T3B0aW9uLlJhbmdlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0XHRMb2cuZXJyb3IoXCJNdWx0aXBsZSBTZWxlY3RPcHRpb25zIGZvciBGaWx0ZXJGaWVsZCBoYXZpbmcgU2luZ2xlVmFsdWUgQWxsb3dlZCBFeHByZXNzaW9uXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIGFnZ3JlZ2F0ZSBwcm9wZXJ0aWVzIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBhZ2dyZWdhdGlvbnMgYW5kIG1lYXN1cmUuXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGlvbnMgVGhlIGxpc3Qgb2YgYWdncmVnYXRlZCBwcm9wZXJ0aWVzXG5cdCAqIEBwYXJhbSBtZWFzdXJlIFRoZSBvcHRpb25hbCBtZWFzdXJlIHRvIGZpbHRlciB0aGUgYWdncmVnYXRlZCBwcm9wZXJ0aWVzXG5cdCAqIEByZXR1cm5zIFRoZSBtYXRjaGluZyBhZ2dyZWdhdGVkIHByb3BlcnR5LCBpZiBmb3VuZDsgb3RoZXJ3aXNlLCB1bmRlZmluZWRcblx0ICovXG5cdGdldEFnZ3JlZ2F0ZVByb3BlcnRpZXMoYWdncmVnYXRpb25zOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlW10sIG1lYXN1cmU/OiBzdHJpbmcpOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkIHtcblx0XHRsZXQgbWF0Y2hlZEFnZ3JlZ2F0ZTogQWdncmVnYXRlZFByb3BlcnR5VHlwZSB8IHVuZGVmaW5lZDtcblx0XHRpZiAoIWFnZ3JlZ2F0aW9ucykge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHRhZ2dyZWdhdGlvbnMuc29tZShmdW5jdGlvbiAoYWdncmVnYXRlKSB7XG5cdFx0XHRpZiAoYWdncmVnYXRlLk5hbWUgPT09IG1lYXN1cmUpIHtcblx0XHRcdFx0bWF0Y2hlZEFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZTtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIG1hdGNoZWRBZ2dyZWdhdGU7XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB1bml0IG9mIG1lYXN1cmUgKFVvTSkgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gbWVhc3VyZXMgVGhlIG1lYXN1cmVzIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcGFyYW0gYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcyBUaGUgYWdncmVnYXRhYmxlIHByb3BlcnR5IG1lYXN1cmVzIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcmV0dXJucyBUaGUgdW5pdCBvZiBtZWFzdXJlIGZvciB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKi9cblx0Z2V0VW9NKG1lYXN1cmVzPzogUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcywgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcz86IFByb3BlcnR5QW5ub3RhdGlvbnNfTWVhc3VyZXMpOiBzdHJpbmcge1xuXHRcdGxldCBJU09DdXJyZW5jeSA9IG1lYXN1cmVzPy5JU09DdXJyZW5jeTtcblx0XHRsZXQgdW5pdCA9IG1lYXN1cmVzPy5Vbml0O1xuXHRcdGlmICghSVNPQ3VycmVuY3kgJiYgIXVuaXQgJiYgYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcykge1xuXHRcdFx0SVNPQ3VycmVuY3kgPSBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzLklTT0N1cnJlbmN5O1xuXHRcdFx0dW5pdCA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMuVW5pdDtcblx0XHR9XG5cdFx0cmV0dXJuIChcblx0XHRcdChJU09DdXJyZW5jeSBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aCB8fFxuXHRcdFx0KHVuaXQgYXMgdW5rbm93biBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGhcblx0XHQpO1xuXHR9XG5cblx0Z2V0UmVxdWlyZWQoKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5yZXF1aXJlZCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PExhYmVsIHRleHQ9XCJcIiB3aWR0aD1cIjAuNXJlbVwiIHJlcXVpcmVkPVwidHJ1ZVwiPlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17T3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkuTmV2ZXJPdmVyZmxvd30gLz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0xhYmVsPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VGl0bGUoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRpdGxlXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5fY29udGVudElkLCBcIk1lYXN1cmVEaW1lbnNpb25UaXRsZVwiXSl9XG5cdFx0XHRcdHRleHQ9e3RoaXMubWVhc3VyZURpbWVuc2lvblRpdGxlfVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnRvb2xUaXB9XG5cdFx0XHRcdHRpdGxlU3R5bGU9XCJINlwiXG5cdFx0XHRcdGxldmVsPVwiSDNcIlxuXHRcdFx0XHRjbGFzcz1cInNhcFVpVGlueU1hcmdpbkVuZCBzYXBVaU5vTWFyZ2luQmVnaW5cIlxuXHRcdFx0PjwvVGl0bGU+XG5cdFx0KTtcblx0fVxuXG5cdGdldFVvTVRpdGxlKHNob3dFcnJvckV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMuVW9NVmlzaWJpbGl0eSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRpdGxlXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiU2NhbGVVb01UaXRsZVwiXSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17c2hvd0Vycm9yRXhwcmVzc2lvbn1cblx0XHRcdFx0XHR0ZXh0PXt0aGlzLnNjYWxlVW9NVGl0bGV9XG5cdFx0XHRcdFx0dGl0bGVTdHlsZT1cIkg2XCJcblx0XHRcdFx0XHRsZXZlbD1cIkgzXCJcblx0XHRcdFx0XHR3aWR0aD17XG5cdFx0XHRcdFx0XHR0aGlzLnNjYWxlVW9NVGl0bGVcblx0XHRcdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihpZkVsc2UocmVzb2x2ZUJpbmRpbmdTdHJpbmcodGhpcy5zY2FsZVVvTVRpdGxlKSwgXCI0LjE1cmVtXCIsIHVuZGVmaW5lZCkpXG5cdFx0XHRcdFx0XHRcdDogdW5kZWZpbmVkXG5cdFx0XHRcdFx0fVxuXHRcdFx0XHQ+PC9UaXRsZT5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBcIlwiO1xuXHRcdH1cblx0fVxuXG5cdGdldFRvb2xCYXJTcGFjZXIoKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uKSB7XG5cdFx0XHRyZXR1cm4gPFRvb2xiYXJTcGFjZXI+PC9Ub29sYmFyU3BhY2VyPjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VmFsdWVIZWxwKHNob3dFcnJvckV4cHJlc3Npb246IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0aWYgKHRoaXMuc2hvd1ZhbHVlSGVscEJ1dHRvbikge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGhpcy5fY29udGVudElkLCBcIlZpc3VhbEZpbHRlclZhbHVlSGVscEJ1dHRvblwiXSl9XG5cdFx0XHRcdFx0dHlwZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRhcmlhSGFzUG9wdXA9XCJEaWFsb2dcIlxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuZmlsdGVyQ291bnRCaW5kaW5nfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3Nob3dFcnJvckV4cHJlc3Npb259XG5cdFx0XHRcdFx0cHJlc3M9eyhldmVudCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0VmlzdWFsRmlsdGVyUnVudGltZS5maXJlVmFsdWVIZWxwKGV2ZW50KTtcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eS5OZXZlck92ZXJmbG93fSAvPixcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT17XCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWRcIn0gdmFsdWU9e3RoaXMubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkfSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9vbGJhcihzaG93RXJyb3JFeHByZXNzaW9uOiBzdHJpbmcpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8T3ZlcmZsb3dUb29sYmFyIHN0eWxlPVwiQ2xlYXJcIj5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRSZXF1aXJlZCgpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUaXRsZSgpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRVb01UaXRsZShzaG93RXJyb3JFeHByZXNzaW9uKX1cblx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0VG9vbEJhclNwYWNlcigpfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRWYWx1ZUhlbHAoc2hvd0Vycm9yRXhwcmVzc2lvbil9XG5cdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHQpO1xuXHR9XG5cblx0Y3JlYXRlQ29udGVudCgpOiBWaXN1YWxGaWx0ZXIge1xuXHRcdGNvbnN0IGlkID0gZ2VuZXJhdGUoW3RoaXMucGF0aF0pO1xuXHRcdGNvbnN0IHNob3dFcnJvckV4cHJlc3Npb24gPSBcIns9ICEke2ludGVybmFsPlwiICsgaWQgKyBcIi9zaG93RXJyb3J9fVwiO1xuXHRcdGNvbnN0IGNvenlNb2RlID0gZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuY29udGFpbnMoXCJzYXBVaVNpemVDb3p5XCIpO1xuXHRcdGNvbnN0IG92ZXJhbGxIZWlnaHQgPSBjb3p5TW9kZSA/IFwiMTNyZW1cIiA6IFwiMTAwJVwiO1xuXHRcdGNvbnN0IGNoYXJ0SGVpZ2h0ID0gY296eU1vZGUgPyBcIjEwMCVcIiA6IFwiNy41cmVtXCI7XG5cdFx0Y29uc3QgdmZDb250cm9sSWQgPSB0aGlzLl9jb250ZW50SWQgPyBnZW5lcmF0ZShbdGhpcy5fY29udGVudElkXSkgOiB1bmRlZmluZWQ7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxWaXN1YWxGaWx0ZXJDb250cm9sIGlkPXt2ZkNvbnRyb2xJZH0gaGVpZ2h0PXtvdmVyYWxsSGVpZ2h0fSB3aWR0aD1cIjIwLjVyZW1cIiBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5CZWdpbkVuZFwiPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT17XCJpbmZvUGF0aFwifSB2YWx1ZT17Z2VuZXJhdGUoW3RoaXMucGF0aF0pfSAvPixcblx0XHRcdFx0XHRpdGVtczogKFxuXHRcdFx0XHRcdFx0PD5cblx0XHRcdFx0XHRcdFx0PFZCb3ggaGVpZ2h0PVwiMnJlbVwiIGNsYXNzPVwic2FwVWlUaW55TWFyZ2luVG9wQm90dG9tXCI+XG5cdFx0XHRcdFx0XHRcdFx0e3RoaXMuZ2V0VG9vbGJhcihzaG93RXJyb3JFeHByZXNzaW9uKX1cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0XHQ8VkJveCBoZWlnaHQ9e2NoYXJ0SGVpZ2h0fSB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHRcdFx0XHR7Z2V0VmlzdWFsRmlsdGVyQ2hhcnQodGhpcyl9XG5cdFx0XHRcdFx0XHRcdDwvVkJveD5cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvVmlzdWFsRmlsdGVyQ29udHJvbD5cblx0XHQpO1xuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBeUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBbEJBLElBb0JxQkEsWUFBWSxJQUFBQyxJQUFBLEdBRGhDQyxjQUFjLENBQUMsMENBQTBDLENBQUMsRUFBQUMsS0FBQSxHQUV6REMsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBQUMsS0FBQSxHQUc5Q0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdEQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR1BMLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNkSyxRQUFRLEVBQUU7RUFDWCxDQUFDLENBQUMsRUFBQUMsS0FBQSxHQUdEUCxRQUFRLENBQUM7SUFDVEMsSUFBSSxFQUFF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
779
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJWaXN1YWxGaWx0ZXIiLCJfZGVjIiwiZGVmaW5lVUk1Q2xhc3MiLCJfZGVjMiIsImltcGxlbWVudEludGVyZmFjZSIsIl9kZWMzIiwicHJvcGVydHkiLCJ0eXBlIiwiX2RlYzQiLCJfZGVjNSIsImV2ZW50IiwiX2RlYzYiLCJyZXF1aXJlZCIsIl9kZWM3IiwiX2RlYzgiLCJfZGVjOSIsIl9kZWMxMCIsIl9kZWMxMSIsIl9kZWMxMiIsIl9kZWMxMyIsIl9kZWMxNCIsIl9kZWMxNSIsIl9kZWMxNiIsIl9kZWMxNyIsIl9kZWMxOCIsIl9kZWMxOSIsIl9kZWMyMCIsIl9kZWMyMSIsIl9kZWMyMiIsIl9kZWMyMyIsIl9kZWMyNCIsIl9kZWMyNSIsIl9kZWMyNiIsIl9kZWMyNyIsIl9kZWMyOCIsIl9kZWMyOSIsIl9kZWMzMCIsIl9kZWMzMSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQnVpbGRpbmdCbG9jayIsInByb3BzIiwib3RoZXJzIiwiX3RoaXMiLCJjYWxsIiwiX2luaXRpYWxpemVyRGVmaW5lUHJvcGVydHkiLCJfZGVzY3JpcHRvciIsIl9kZXNjcmlwdG9yMiIsIl9kZXNjcmlwdG9yMyIsIl9kZXNjcmlwdG9yNCIsIl9kZXNjcmlwdG9yNSIsIl9kZXNjcmlwdG9yNiIsIl9kZXNjcmlwdG9yNyIsIl9kZXNjcmlwdG9yOCIsIl9kZXNjcmlwdG9yOSIsIl9kZXNjcmlwdG9yMTAiLCJfZGVzY3JpcHRvcjExIiwiX2Rlc2NyaXB0b3IxMiIsIl9kZXNjcmlwdG9yMTMiLCJfZGVzY3JpcHRvcjE0IiwiX2Rlc2NyaXB0b3IxNSIsIl9kZXNjcmlwdG9yMTYiLCJfZGVzY3JpcHRvcjE3IiwiX2Rlc2NyaXB0b3IxOCIsIl9kZXNjcmlwdG9yMTkiLCJfZGVzY3JpcHRvcjIwIiwiX2Rlc2NyaXB0b3IyMSIsIl9kZXNjcmlwdG9yMjIiLCJfZGVzY3JpcHRvcjIzIiwiX2Rlc2NyaXB0b3IyNCIsIl9kZXNjcmlwdG9yMjUiLCJfZGVzY3JpcHRvcjI2IiwiX2Rlc2NyaXB0b3IyNyIsIl9kZXNjcmlwdG9yMjgiLCJfZGVzY3JpcHRvcjI5IiwiX2Rlc2NyaXB0b3IzMCIsImluUGFyYW1Db25kaXRpb25VcGRhdGVQZW5kaW5nIiwicmVuZGVyaW5nVXBkYXRlUGVuZGluZyIsIl9leHBvcnRzIiwiX2luaGVyaXRzTG9vc2UiLCJfcHJvdG8iLCJwcm90b3R5cGUiLCJvbk1ldGFkYXRhQXZhaWxhYmxlIiwiX293bmVyQ29tcG9uZW50IiwiZ3JvdXBJZCIsInBhdGgiLCJtZXRhUGF0aCIsIm93bmVyIiwiX2dldE93bmVyIiwiY29udGV4dFBhdGgiLCJwcmVwcm9jZXNzb3JDb250ZXh0IiwiZnVsbENvbnRleHRQYXRoIiwiY29udGV4dE9iamVjdFBhdGgiLCJnZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aCIsIl9yZXNvbHZlZENvbnRleHRQYXRoIiwiZW5kc1dpdGgiLCJtZXRhTW9kZWwiLCJnZXRNZXRhTW9kZWwiLCJkaWFnbm9zdGljcyIsImdldEFwcENvbXBvbmVudCIsImdldERpYWdub3N0aWNzIiwidmlld0RhdGEiLCJnZXRSb290Q29udHJvbGxlciIsImdldFZpZXciLCJnZXRWaWV3RGF0YSIsImNvbnZlcnRlckNvbnRleHQiLCJDb252ZXJ0ZXJDb250ZXh0IiwiY3JlYXRlQ29udmVydGVyQ29udGV4dEZvck1hY3JvIiwic3RhcnRpbmdFbnRpdHlTZXQiLCJuYW1lIiwibWVyZ2UiLCJjb250ZXh0TG9jYXRpb24iLCJNYW5pZmVzdFdyYXBwZXIiLCJhZ2dyZWdhdGlvbkhlbHBlciIsIkFnZ3JlZ2F0aW9uSGVscGVyIiwiZ2V0RW50aXR5VHlwZSIsImN1c3RvbUFnZ3JlZ2F0ZXMiLCJnZXRDdXN0b21BZ2dyZWdhdGVEZWZpbml0aW9ucyIsInB2QW5ub3RhdGlvbiIsInRhcmdldE9iamVjdCIsIm1lYXN1cmUiLCJ2aXN1YWxpemF0aW9ucyIsIlZpc3VhbGl6YXRpb25zIiwiZ2V0Q2hhcnRBbm5vdGF0aW9uIiwiYWdncmVnYXRpb25zIiwiY3VzdEFnZ01lYXN1cmUiLCJjaGFydEFubm90YXRpb24iLCJNZWFzdXJlcyIsImxlbmd0aCIsImZpbHRlciIsImN1c3RBZ2ciLCJxdWFsaWZpZXIiLCJ2YWx1ZSIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0aWVzIiwiRHluYW1pY01lYXN1cmVzIiwiTG9nIiwid2FybmluZyIsImdldENvbnZlcnRlckNvbnRleHRGb3IiLCJnZXRBYnNvbHV0ZUFubm90YXRpb25QYXRoIiwiZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCIsIk5hbWUiLCJ0b1N0cmluZyIsImdldEFnZ3JlZ2F0ZWRQcm9wZXJ0eSIsInNvbWUiLCJjdXN0b21BZ2dyZWdhdGUiLCJkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCIsImdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50IiwiY2hlY2tTZWxlY3Rpb25WYXJpYW50IiwiYWdncmVnYXRpb24iLCJnZXRBZ2dyZWdhdGVQcm9wZXJ0aWVzIiwiYWdncmVnYXRlUHJvcGVydGllcyIsInByb3BlcnR5QW5ub3RhdGlvbnMiLCIkdGFyZ2V0IiwiYW5ub3RhdGlvbnMiLCJhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zIiwiQWdncmVnYXRhYmxlUHJvcGVydHkiLCJjaGVja0lmVU9NSGFzQ3VzdG9tQWdncmVnYXRlIiwicHJvcGVydHlIaWRkZW4iLCJVSSIsIkhpZGRlbiIsImhpZGRlbk1lYXN1cmUiLCJ2YWx1ZU9mIiwiY2hhcnRUeXBlIiwiQ2hhcnRUeXBlIiwic2hvd1ZhbHVlSGVscEJ1dHRvbiIsImdldHNob3dWYWx1ZUhlbHBCdXR0b24iLCJkcmFmdFN1cHBvcnRlZCIsIk1vZGVsSGVscGVyIiwiaXNEcmFmdFN1cHBvcnRlZCIsImVycm9yTWVzc2FnZSIsImdldEVycm9yTWVzc2FnZSIsImNoYXJ0TWVhc3VyZSIsIm1lYXN1cmVEaW1lbnNpb25UaXRsZSIsIkludGVyYWN0aXZlQ2hhcnRIZWxwZXIiLCJnZXRNZWFzdXJlRGltZW5zaW9uVGl0bGUiLCJjb2xsZWN0aW9uIiwidG9vbFRpcCIsImdldFRvb2xUaXAiLCJyZW5kZXJMaW5lQ2hhcnQiLCJVb01WaXNpYmlsaXR5IiwiZ2V0VW9NVmlzaWJsaXR5Iiwic2hvd0Vycm9yIiwic2NhbGVVb01UaXRsZSIsImdldFNjYWxlVW9NVGl0bGUiLCJzb3J0T3JkZXIiLCJTb3J0T3JkZXIiLCJmaWx0ZXJDb3VudEJpbmRpbmciLCJnZXRmaWx0ZXJDb3VudEJpbmRpbmciLCJ2aWV3SWQiLCJnZXRQYWdlQ29udHJvbGxlciIsImdldElkIiwiX2NvbnRlbnRJZCIsImlkIiwic2VsZWN0aW9uVmFyaWFudCIsInNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uIiwidW5kZWZpbmVkIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtZWFzdXJlcyIsImFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMiLCJVT00iLCJnZXRVb00iLCJVb01IYXNDdXN0b21BZ2dyZWdhdGUiLCJ2aXN1YWxpemF0aW9uIiwic0Fubm90YXRpb25QYXRoIiwiZ2V0RW50aXR5VHlwZUFubm90YXRpb24iLCJhbm5vdGF0aW9uIiwic2V0U2hvd1ZhbHVlSGVscCIsImJTaG93VmFsdWVIZWxwIiwiaXNBIiwiZ2V0SXRlbXMiLCJvVmlzdWFsRmlsdGVyQ29udHJvbCIsImdldFZpc3VhbEZpbHRlckNvbnRyb2wiLCJnZXRDb250ZW50Iiwib0lubmVyQ29udHJvbCIsInNldFZpc2libGUiLCJzZXRQcm9wZXJ0eSIsInNldFZhbHVlSGVscEljb25TcmMiLCJzSWNvblNyYyIsInNldEljb24iLCJ2YWxpZENoYXJ0VHlwZSIsImVycm9yTWVzc2FnZVRpdGxlIiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJzRGltZW5zaW9uVHlwZSIsIkRpbWVuc2lvbnMiLCJpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlcyIsIlNlbGVjdE9wdGlvbnMiLCJtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQiLCJzZWxlY3RPcHRpb24iLCJQcm9wZXJ0eU5hbWUiLCJSYW5nZXMiLCJlcnJvciIsIm1hdGNoZWRBZ2dyZWdhdGUiLCJhZ2dyZWdhdGUiLCJJU09DdXJyZW5jeSIsInVuaXQiLCJVbml0IiwiZ2V0UmVxdWlyZWQiLCJfanN4IiwiTGFiZWwiLCJ0ZXh0Iiwid2lkdGgiLCJjaGlsZHJlbiIsImxheW91dERhdGEiLCJPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIiwicHJpb3JpdHkiLCJPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eSIsIk5ldmVyT3ZlcmZsb3ciLCJnZXRUaXRsZSIsIlRpdGxlIiwiZ2VuZXJhdGUiLCJ0b29sdGlwIiwidGl0bGVTdHlsZSIsImxldmVsIiwiY2xhc3MiLCJnZXRVb01UaXRsZSIsInNob3dFcnJvckV4cHJlc3Npb24iLCJ2aXNpYmxlIiwiY29tcGlsZUV4cHJlc3Npb24iLCJpZkVsc2UiLCJyZXNvbHZlQmluZGluZ1N0cmluZyIsImdldFRvb2xCYXJTcGFjZXIiLCJUb29sYmFyU3BhY2VyIiwiZ2V0VmFsdWVIZWxwIiwiQnV0dG9uIiwiYXJpYUhhc1BvcHVwIiwiZW5hYmxlZCIsInByZXNzIiwiVmlzdWFsRmlsdGVyUnVudGltZSIsImZpcmVWYWx1ZUhlbHAiLCJjdXN0b21EYXRhIiwiQ3VzdG9tRGF0YSIsImdldFRvb2xiYXIiLCJPdmVyZmxvd1Rvb2xiYXIiLCJzdHlsZSIsIl9qc3hzIiwiX0ZyYWdtZW50IiwiX2hhbmRsZUluUGFyYW1zQ2hhcnRCaW5kaW5nRW5hYmxlbWVudCIsImNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzIiwiaW5QYXJhbWV0ZXJzIiwiZ2V0UHJvcGVydHkiLCJpblBhcmFtZXRlckxvY2FsRGF0YVByb3BlcnRpZXMiLCJtYXAiLCJpblBhcmFtZXRlciIsImxvY2FsRGF0YVByb3BlcnR5IiwidmZJblBhcmFtZXRlclVwZGF0ZUV4cGVjdGVkIiwiaW5jbHVkZXMiLCJfc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nIiwic2V0RW5hYmxlQ2hhcnRCaW5kaW5nIiwiZW5hYmxlQmluZGluZyIsImFyZ3VtZW50cyIsImludGVybmFsVXBkYXRlUGVuZGluZyIsIm92ZXJhbGxFbmFibGVCaW5kaW5nIiwiY2hhcnRCaW5kaW5nIiwiZ2V0Q2hhcnRCaW5kaW5nIiwiaXNTdXNwZW5kZWQiLCJyZXN1bWUiLCJzdXNwZW5kIiwiY29uZGl0aW9uVXBkYXRlUGVuZGluZyIsImlzQmluZGluZ0VuYWJsZWRGb3JWaXN1YWxGaWx0ZXJFeHRlcm5hbGx5IiwiZW5hYmxlQ2hhcnRCaW5kaW5nIiwidXBkYXRlUGVuZGluZyIsImNvenlNb2RlIiwiZG9jdW1lbnQiLCJib2R5IiwiY2xhc3NMaXN0IiwiY29udGFpbnMiLCJvdmVyYWxsSGVpZ2h0IiwiY2hhcnRIZWlnaHQiLCJ2ZkNvbnRyb2xJZCIsIlZpc3VhbEZpbHRlckNvbnRyb2wiLCJoZWlnaHQiLCJpdGVtcyIsIlZCb3giLCJnZXRWaXN1YWxGaWx0ZXJDaGFydCIsIkJ1aWxkaW5nQmxvY2siLCJfYXBwbHlEZWNvcmF0ZWREZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwiZW51bWVyYWJsZSIsIndyaXRhYmxlIiwiaW5pdGlhbGl6ZXIiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIlZpc3VhbEZpbHRlci50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uUGF0aCwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7IEN1c3RvbUFnZ3JlZ2F0ZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvQWdncmVnYXRpb25cIjtcbmltcG9ydCB0eXBlIHsgQWdncmVnYXRlZFByb3BlcnR5LCBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9BbmFseXRpY3NcIjtcbmltcG9ydCB7IFNvcnRPcmRlclR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL0NvbW1vblwiO1xuaW1wb3J0IHR5cGUgeyBQcm9wZXJ0eUFubm90YXRpb25zIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9FZG1fVHlwZXNcIjtcbmltcG9ydCB0eXBlIHsgUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvTWVhc3VyZXNfRWRtXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0LCBEYXRhUG9pbnQsIExpbmVJdGVtLCBQcmVzZW50YXRpb25WYXJpYW50LCBTZWxlY3Rpb25WYXJpYW50IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IExvZyBmcm9tIFwic2FwL2Jhc2UvTG9nXCI7XG5pbXBvcnQgbWVyZ2UgZnJvbSBcInNhcC9iYXNlL3V0aWwvbWVyZ2VcIjtcbmltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBpZkVsc2UsIHJlc29sdmVCaW5kaW5nU3RyaW5nIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBkZWZpbmVVSTVDbGFzcywgZXZlbnQsIGltcGxlbWVudEludGVyZmFjZSwgcHJvcGVydHksIHR5cGUgUHJvcGVydGllc09mIH0gZnJvbSBcInNhcC9mZS9iYXNlL0NsYXNzU3VwcG9ydFwiO1xuaW1wb3J0IFRlbXBsYXRlQ29tcG9uZW50IGZyb20gXCJzYXAvZmUvY29yZS9UZW1wbGF0ZUNvbXBvbmVudFwiO1xuaW1wb3J0IEJ1aWxkaW5nQmxvY2sgZnJvbSBcInNhcC9mZS9jb3JlL2J1aWxkaW5nQmxvY2tzL0J1aWxkaW5nQmxvY2tcIjtcbmltcG9ydCBDb252ZXJ0ZXJDb250ZXh0IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL0NvbnZlcnRlckNvbnRleHRcIjtcbmltcG9ydCB7IEJhc2VNYW5pZmVzdFNldHRpbmdzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWFuaWZlc3RTZXR0aW5nc1wiO1xuaW1wb3J0IE1hbmlmZXN0V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFdyYXBwZXJcIjtcbmltcG9ydCB7IFBhZ2VDb250ZXh0UGF0aFRhcmdldCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL1RlbXBsYXRlQ29udmVydGVyXCI7XG5pbXBvcnQgeyBnZXREZWZhdWx0U2VsZWN0aW9uVmFyaWFudCB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9EYXRhVmlzdWFsaXphdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBQYXJhbWV0ZXJUeXBlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvTGlzdFJlcG9ydC9WaXN1YWxGaWx0ZXJzXCI7XG5pbXBvcnQgeyBBZ2dyZWdhdGlvbkhlbHBlciB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2hlbHBlcnMvQWdncmVnYXRpb25cIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHsgVmlld0RhdGEgfSBmcm9tIFwic2FwL2ZlL2NvcmUvc2VydmljZXMvVGVtcGxhdGVkVmlld1NlcnZpY2VGYWN0b3J5XCI7XG5pbXBvcnQgRGlhZ25vc3RpY3MgZnJvbSBcInNhcC9mZS9jb3JlL3N1cHBvcnQvRGlhZ25vc3RpY3NcIjtcbmltcG9ydCB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhckxheW91dERhdGFcIjtcbmltcG9ydCBUaXRsZSBmcm9tIFwic2FwL20vVGl0bGVcIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgT3ZlcmZsb3dUb29sYmFyUHJpb3JpdHkgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IEN1c3RvbURhdGEgZnJvbSBcInNhcC91aS9jb3JlL0N1c3RvbURhdGFcIjtcbmltcG9ydCB7ICRDb250cm9sU2V0dGluZ3MgfSBmcm9tIFwic2FwL3VpL21kYy9Db250cm9sXCI7XG5pbXBvcnQgT0RhdGFNZXRhTW9kZWwgZnJvbSBcInNhcC91aS9tb2RlbC9vZGF0YS92NC9PRGF0YU1ldGFNb2RlbFwiO1xuaW1wb3J0IHsgZGVmYXVsdCBhcyBWaXN1YWxGaWx0ZXJDb250cm9sIH0gZnJvbSBcIi4uL2NvbnRyb2xzL2ZpbHRlcmJhci9WaXN1YWxGaWx0ZXJcIjtcbmltcG9ydCBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyIGZyb20gXCIuL0ludGVyYWN0aXZlQ2hhcnRIZWxwZXJcIjtcbmltcG9ydCBWaXN1YWxGaWx0ZXJSdW50aW1lIGZyb20gXCIuL1Zpc3VhbEZpbHRlclJ1bnRpbWVcIjtcbmltcG9ydCB7IGdldFZpc3VhbEZpbHRlckNoYXJ0IH0gZnJvbSBcIi4vZnJhZ21lbnRzL0ludGVyYWN0aXZlQ2hhcnRzXCI7XG4vKipcbiAqIEJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIFZpc3VhbEZpbHRlciBiYXNlZCBvbiB0aGUgbWV0YWRhdGEgcHJvdmlkZWQgYnkgT0RhdGEgVjQuXG4gKiA8YnI+XG4gKiBBIENoYXJ0IGFubm90YXRpb24gaXMgcmVxdWlyZWQgdG8gYnJpbmcgdXAgYW4gaW50ZXJhY3RpdmUgY2hhcnRcbiAqXG4gKlxuICogVXNhZ2UgZXhhbXBsZTpcbiAqIDxwcmU+XG4gKiAmbHQ7bWFjcm9zOlZpc3VhbEZpbHRlclxuICogY29sbGVjdGlvbj1cIntlbnRpdHlTZXQmZ3Q7fVwiXG4gKiBjaGFydEFubm90YXRpb249XCJ7Y2hhcnRBbm5vdGF0aW9uJmd0O31cIlxuICogaWQ9XCJzb21lSURcIlxuICogZ3JvdXBJZD1cInNvbWVHcm91cElEXCJcbiAqIHRpdGxlPVwic29tZSBUaXRsZVwiXG4gKiAvJmd0O1xuICogPC9wcmU+XG4gKiBAcHJpdmF0ZVxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUubWFjcm9zLnZpc3VhbGZpbHRlcnMuVmlzdWFsRmlsdGVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaXN1YWxGaWx0ZXIgZXh0ZW5kcyBCdWlsZGluZ0Jsb2NrPFZpc3VhbEZpbHRlckNvbnRyb2w+IHtcblx0QGltcGxlbWVudEludGVyZmFjZShcInNhcC51aS5jb3JlLklGb3JtQ29udGVudFwiKVxuXHRfX2ltcGxlbWVudHNfX3NhcF91aV9jb3JlX0lGb3JtQ29udGVudCA9IHRydWU7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwITogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0dmFsdWVIZWxwSWNvblNyYyE6IHN0cmluZztcblxuXHRAZXZlbnQoKVxuXHR2YWx1ZUhlbHBSZXF1ZXN0ITogRnVuY3Rpb247XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdGlkITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHR0aXRsZSA9IFwiXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiLFxuXHRcdHJlcXVpcmVkOiB0cnVlXG5cdH0pXG5cdHB1YmxpYyBjb250ZXh0UGF0aCE6IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCIsXG5cdFx0cmVxdWlyZWQ6IHRydWVcblx0fSlcblx0cHVibGljIG1ldGFQYXRoITogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRvdXRQYXJhbWV0ZXI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdHZhbHVlbGlzdFByb3BlcnR5Pzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRzZWxlY3Rpb25WYXJpYW50QW5ub3RhdGlvbj86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRpblBhcmFtZXRlcnM/OiBQYXJhbWV0ZXJUeXBlW107XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRtdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVxdWlyZWQ/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0c2hvd092ZXJsYXlJbml0aWFsbHk/OiBib29sZWFuO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJib29sZWFuXCJcblx0fSlcblx0cmVuZGVyTGluZUNoYXJ0PzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYXJyYXlcIlxuXHR9KVxuXHRyZXF1aXJlZFByb3BlcnRpZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwic3RyaW5nXCJcblx0fSlcblx0ZmlsdGVyQmFyRW50aXR5VHlwZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdHNob3dFcnJvcj86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGNoYXJ0TWVhc3VyZT86IHN0cmluZztcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdFVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZT86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRzaG93VmFsdWVIZWxwQnV0dG9uPzogYm9vbGVhbjtcblxuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGN1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRncm91cElkID0gXCIkYXV0by52aXN1YWxGaWx0ZXJzXCI7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdGVycm9yTWVzc2FnZVRpdGxlPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7XG5cdFx0dHlwZTogXCJzdHJpbmdcIlxuXHR9KVxuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcInN0cmluZ1wiXG5cdH0pXG5cdF9jb250ZW50SWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRkcmFmdFN1cHBvcnRlZD86IGJvb2xlYW47XG5cblx0QHByb3BlcnR5KHtcblx0XHR0eXBlOiBcImJvb2xlYW5cIlxuXHR9KVxuXHRpc1ZhbHVlTGlzdFdpdGhGaXhlZFZhbHVlczogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRW5hYmxlIG9yIGRpc2FibGUgY2hhcnQgYmluZGluZ1xuXHQgKiBAcHVibGljXG5cdCAqL1xuXHRAcHJvcGVydHkoe1xuXHRcdHR5cGU6IFwiYm9vbGVhblwiXG5cdH0pXG5cdGVuYWJsZUNoYXJ0QmluZGluZyA9IHRydWU7XG5cblx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuXHQgKiBJbnRlcm5hbCBQcm9wZXJ0aWVzXG5cdCAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cblxuXHRhZ2dyZWdhdGVQcm9wZXJ0aWVzOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuXG5cdGNoYXJ0VHlwZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG5cdHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHRtZWFzdXJlRGltZW5zaW9uVGl0bGU6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuXHR0b29sVGlwOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0VW9NVmlzaWJpbGl0eTogYm9vbGVhbiB8IHVuZGVmaW5lZDtcblxuXHRzY2FsZVVvTVRpdGxlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0ZmlsdGVyQ291bnRCaW5kaW5nOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cblx0Y2hhcnRBbm5vdGF0aW9uPzogQ2hhcnQ7XG5cdF9yZXNvbHZlZENvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdHNvcnRPcmRlcj86IFNvcnRPcmRlclR5cGVbXTtcblx0Y29sbGVjdGlvbj86IERhdGFNb2RlbE9iamVjdFBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pjtcblx0c2VsZWN0aW9uVmFyaWFudDogU2VsZWN0aW9uVmFyaWFudCB8IHVuZGVmaW5lZDtcblxuXHQvKipcblx0ICogRmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgaW4tcGFyYW1ldGVycyBhbmQgY29uZGl0aW9ucyB1cGRhdGUgaXMgcGVuZGluZy5cblx0ICovXG5cdHByaXZhdGUgaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcgPSBmYWxzZTtcblxuXHQvKipcblx0ICogSW5pdGlhbCByZW5kZXJpbmcgaXMgcGVuZGluZy5cblx0ICovXG5cdHByaXZhdGUgcmVuZGVyaW5nVXBkYXRlUGVuZGluZyA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IocHJvcHM6ICRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8VmlzdWFsRmlsdGVyQ29udHJvbD4sIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wcywgb3RoZXJzKTtcblx0fVxuXG5cdHB1YmxpYyBvbk1ldGFkYXRhQXZhaWxhYmxlKF9vd25lckNvbXBvbmVudDogVGVtcGxhdGVDb21wb25lbnQpOiB2b2lkIHtcblx0XHR0aGlzLmdyb3VwSWQgPSBcIiRhdXRvLnZpc3VhbEZpbHRlcnNcIjtcblx0XHR0aGlzLnBhdGggPSB0aGlzLm1ldGFQYXRoO1xuXHRcdGNvbnN0IG93bmVyID0gdGhpcy5fZ2V0T3duZXIoKTtcblx0XHR0aGlzLmNvbnRleHRQYXRoID0gdGhpcy5jb250ZXh0UGF0aCA/PyBvd25lcj8ucHJlcHJvY2Vzc29yQ29udGV4dD8uZnVsbENvbnRleHRQYXRoO1xuXHRcdGNvbnN0IGNvbnRleHRPYmplY3RQYXRoID0gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxQcmVzZW50YXRpb25WYXJpYW50Pih0aGlzLm1ldGFQYXRoLCB0aGlzLmNvbnRleHRQYXRoKTtcblx0XHRpZiAodGhpcy5jb250ZXh0UGF0aCkge1xuXHRcdFx0dGhpcy5fcmVzb2x2ZWRDb250ZXh0UGF0aCA9IHRoaXMuY29udGV4dFBhdGguZW5kc1dpdGgoXCIvXCIpID8gdGhpcy5jb250ZXh0UGF0aCA6IHRoaXMuY29udGV4dFBhdGggKyBcIi9cIjtcblx0XHR9XG5cdFx0Y29uc3QgbWV0YU1vZGVsID0gdGhpcy5nZXRNZXRhTW9kZWwoKSBhcyBPRGF0YU1ldGFNb2RlbDtcblxuXHRcdGNvbnN0IGRpYWdub3N0aWNzID0gdGhpcy5nZXRBcHBDb21wb25lbnQoKT8uZ2V0RGlhZ25vc3RpY3MoKSA/PyAoe30gYXMgRGlhZ25vc3RpY3MpO1xuXHRcdGNvbnN0IHZpZXdEYXRhID1cblx0XHRcdHRoaXMuX2dldE93bmVyKCk/LmdldFJvb3RDb250cm9sbGVyKCk/LmdldFZpZXcoKS5nZXRWaWV3RGF0YSgpID8/ICh0aGlzLl9nZXRPd25lcigpPy5nZXRWaWV3RGF0YSgpIGFzIHVua25vd24gYXMgVmlld0RhdGEpO1xuXHRcdGNvbnN0IGNvbnZlcnRlckNvbnRleHQgPSBDb252ZXJ0ZXJDb250ZXh0LmNyZWF0ZUNvbnZlcnRlckNvbnRleHRGb3JNYWNybyhcblx0XHRcdGNvbnRleHRPYmplY3RQYXRoPy5zdGFydGluZ0VudGl0eVNldD8ubmFtZSBhcyBzdHJpbmcsXG5cdFx0XHRtZXRhTW9kZWwsXG5cdFx0XHRkaWFnbm9zdGljcyxcblx0XHRcdG1lcmdlLFxuXHRcdFx0Y29udGV4dE9iamVjdFBhdGg/LmNvbnRleHRMb2NhdGlvbixcblx0XHRcdG5ldyBNYW5pZmVzdFdyYXBwZXIodmlld0RhdGEgYXMgQmFzZU1hbmlmZXN0U2V0dGluZ3MsIHRoaXMuZ2V0QXBwQ29tcG9uZW50KCkpXG5cdFx0KTtcblx0XHRjb25zdCBhZ2dyZWdhdGlvbkhlbHBlciA9IG5ldyBBZ2dyZWdhdGlvbkhlbHBlcihjb252ZXJ0ZXJDb250ZXh0LmdldEVudGl0eVR5cGUoKSwgY29udmVydGVyQ29udGV4dCk7XG5cdFx0Y29uc3QgY3VzdG9tQWdncmVnYXRlcyA9IGFnZ3JlZ2F0aW9uSGVscGVyLmdldEN1c3RvbUFnZ3JlZ2F0ZURlZmluaXRpb25zKCk7XG5cdFx0Y29uc3QgcHZBbm5vdGF0aW9uID0gY29udGV4dE9iamVjdFBhdGg/LnRhcmdldE9iamVjdDtcblx0XHRsZXQgbWVhc3VyZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHZpc3VhbGl6YXRpb25zID0gcHZBbm5vdGF0aW9uICYmIHB2QW5ub3RhdGlvbi5WaXN1YWxpemF0aW9ucztcblx0XHR0aGlzLmdldENoYXJ0QW5ub3RhdGlvbih2aXN1YWxpemF0aW9ucywgY29udmVydGVyQ29udGV4dCk7XG5cdFx0bGV0IGFnZ3JlZ2F0aW9uczogQWdncmVnYXRlZFByb3BlcnR5VHlwZVtdID0gW10sXG5cdFx0XHRjdXN0QWdnTWVhc3VyZSA9IFtdO1xuXG5cdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcz8ubGVuZ3RoKSB7XG5cdFx0XHRjdXN0QWdnTWVhc3VyZSA9IGN1c3RvbUFnZ3JlZ2F0ZXMuZmlsdGVyKChjdXN0QWdnKSA9PiB7XG5cdFx0XHRcdHJldHVybiBjdXN0QWdnLnF1YWxpZmllciA9PT0gdGhpcy5jaGFydEFubm90YXRpb24/Lk1lYXN1cmVzWzBdLnZhbHVlO1xuXHRcdFx0fSk7XG5cdFx0XHRtZWFzdXJlID0gY3VzdEFnZ01lYXN1cmUubGVuZ3RoID4gMCA/IGN1c3RBZ2dNZWFzdXJlWzBdLnF1YWxpZmllciA6IHRoaXMuY2hhcnRBbm5vdGF0aW9uLk1lYXN1cmVzWzBdLnZhbHVlO1xuXHRcdFx0YWdncmVnYXRpb25zID0gYWdncmVnYXRpb25IZWxwZXIuZ2V0QWdncmVnYXRlZFByb3BlcnRpZXMoKVswXTtcblx0XHR9XG5cdFx0Ly8gaWYgdGhlcmUgYXJlIEFnZ3JlZ2F0ZWRQcm9wZXJ0eSBvYmplY3RzIGJ1dCBubyBkeW5hbWljIG1lYXN1cmVzLCByYXRoZXIgdGhlcmUgYXJlIHRyYW5zZm9ybWF0aW9uIGFnZ3JlZ2F0ZXMgZm91bmQgaW4gbWVhc3VyZXNcblx0XHRpZiAoXG5cdFx0XHRhZ2dyZWdhdGlvbnMgJiZcblx0XHRcdGFnZ3JlZ2F0aW9ucy5sZW5ndGggPiAwICYmXG5cdFx0XHQhdGhpcy5jaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcyAmJlxuXHRcdFx0Y3VzdEFnZ01lYXN1cmUubGVuZ3RoID09PSAwICYmXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXMgJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcy5sZW5ndGggPiAwXG5cdFx0KSB7XG5cdFx0XHRMb2cud2FybmluZyhcblx0XHRcdFx0XCJUaGUgdHJhbnNmb3JtYXRpb25hbCBhZ2dyZWdhdGUgbWVhc3VyZXMgYXJlIGNvbmZpZ3VyZWQgYXMgQ2hhcnQuTWVhc3VyZXMgYnV0IHNob3VsZCBiZSBjb25maWd1cmVkIGFzIENoYXJ0LkR5bmFtaWNNZWFzdXJlcyBpbnN0ZWFkLiBQbGVhc2UgY2hlY2sgdGhlIFNBUCBIZWxwIGRvY3VtZW50YXRpb24gYW5kIGNvcnJlY3QgdGhlIGNvbmZpZ3VyYXRpb24gYWNjb3JkaW5nbHkuXCJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdC8vaWYgdGhlIGNoYXJ0IGhhcyBkeW5hbWljIG1lYXN1cmVzLCBidXQgd2l0aCBubyBvdGhlciBjdXN0b20gYWdncmVnYXRlIG1lYXN1cmVzIHRoZW4gY29uc2lkZXIgdGhlIGR5bmFtaWMgbWVhc3VyZXNcblx0XHRpZiAodGhpcy5jaGFydEFubm90YXRpb24/LkR5bmFtaWNNZWFzdXJlcykge1xuXHRcdFx0aWYgKGN1c3RBZ2dNZWFzdXJlLmxlbmd0aCA9PT0gMCkge1xuXHRcdFx0XHRtZWFzdXJlID0gY29udmVydGVyQ29udGV4dFxuXHRcdFx0XHRcdC5nZXRDb252ZXJ0ZXJDb250ZXh0Rm9yPEFnZ3JlZ2F0ZWRQcm9wZXJ0eT4oXG5cdFx0XHRcdFx0XHRjb252ZXJ0ZXJDb250ZXh0LmdldEFic29sdXRlQW5ub3RhdGlvblBhdGgodGhpcy5jaGFydEFubm90YXRpb24uRHluYW1pY01lYXN1cmVzWzBdLnZhbHVlKVxuXHRcdFx0XHRcdClcblx0XHRcdFx0XHQuZ2V0RGF0YU1vZGVsT2JqZWN0UGF0aCgpXG5cdFx0XHRcdFx0LnRhcmdldE9iamVjdD8uTmFtZS50b1N0cmluZygpO1xuXHRcdFx0XHRhZ2dyZWdhdGlvbnMgPSBhZ2dyZWdhdGlvbkhlbHBlci5nZXRBZ2dyZWdhdGVkUHJvcGVydHkoKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdExvZy53YXJuaW5nKFxuXHRcdFx0XHRcdFwiVGhlIGR5bmFtaWMgbWVhc3VyZXMgaGF2ZSBiZWVuIGlnbm9yZWQgYXMgdmlzdWFsIGZpbHRlcnMgY2FuIGRlYWwgd2l0aCBvbmx5IDEgbWVhc3VyZSBhbmQgdGhlIGZpcnN0IChjdXN0b20gYWdncmVnYXRlKSBtZWFzdXJlIGRlZmluZWQgdW5kZXIgQ2hhcnQuTWVhc3VyZXMgaXMgY29uc2lkZXJlZC5cIlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoXG5cdFx0XHRjdXN0b21BZ2dyZWdhdGVzLnNvbWUoZnVuY3Rpb24gKGN1c3RBZ2cpIHtcblx0XHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBtZWFzdXJlO1xuXHRcdFx0fSlcblx0XHQpIHtcblx0XHRcdHRoaXMuY3VzdG9tQWdncmVnYXRlID0gdHJ1ZTtcblx0XHR9XG5cblx0XHRjb25zdCBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCA9IGdldERlZmF1bHRTZWxlY3Rpb25WYXJpYW50KGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZSgpKTtcblx0XHR0aGlzLmNoZWNrU2VsZWN0aW9uVmFyaWFudChkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCk7XG5cdFx0Y29uc3QgYWdncmVnYXRpb24gPSB0aGlzLmdldEFnZ3JlZ2F0ZVByb3BlcnRpZXMoYWdncmVnYXRpb25zLCBtZWFzdXJlKTtcblx0XHRpZiAoYWdncmVnYXRpb24pIHtcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllcyA9IGFnZ3JlZ2F0aW9uO1xuXHRcdH1cblx0XHRjb25zdCBwcm9wZXJ0eUFubm90YXRpb25zID1cblx0XHRcdHZpc3VhbGl6YXRpb25zICYmIHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5NZWFzdXJlcyAmJiB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uTWVhc3VyZXNbMF0/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdGNvbnN0IGFnZ3JlZ2F0YWJsZVByb3BlcnR5QW5ub3RhdGlvbnMgPSBhZ2dyZWdhdGlvbj8uQWdncmVnYXRhYmxlUHJvcGVydHk/LiR0YXJnZXQ/LmFubm90YXRpb25zO1xuXHRcdHRoaXMuY2hlY2tJZlVPTUhhc0N1c3RvbUFnZ3JlZ2F0ZShjdXN0b21BZ2dyZWdhdGVzLCBwcm9wZXJ0eUFubm90YXRpb25zLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eUFubm90YXRpb25zKTtcblx0XHRjb25zdCBwcm9wZXJ0eUhpZGRlbiA9IHByb3BlcnR5QW5ub3RhdGlvbnM/LlVJPy5IaWRkZW47XG5cdFx0Y29uc3QgaGlkZGVuTWVhc3VyZSA9IHByb3BlcnR5SGlkZGVuPy52YWx1ZU9mKCk7XG5cdFx0Y29uc3QgY2hhcnRUeXBlID0gdGhpcy5jaGFydEFubm90YXRpb24/LkNoYXJ0VHlwZTtcblx0XHR0aGlzLmNoYXJ0VHlwZSA9IGNoYXJ0VHlwZTtcblx0XHR0aGlzLnNob3dWYWx1ZUhlbHBCdXR0b24gPSB0aGlzLmdldHNob3dWYWx1ZUhlbHBCdXR0b24oY2hhcnRUeXBlLCBoaWRkZW5NZWFzdXJlKTtcblx0XHR0aGlzLmRyYWZ0U3VwcG9ydGVkID0gTW9kZWxIZWxwZXIuaXNEcmFmdFN1cHBvcnRlZChtZXRhTW9kZWwsIHRoaXMuY29udGV4dFBhdGgpO1xuXHRcdC8qKlxuXHRcdCAqIElmIHRoZSBtZWFzdXJlIG9mIHRoZSBjaGFydCBpcyBtYXJrZWQgYXMgJ2hpZGRlbicsIG9yIGlmIHRoZSBjaGFydCB0eXBlIGlzIGludmFsaWQsIG9yIGlmIHRoZSBkYXRhIHR5cGUgZm9yIHRoZSBsaW5lIGNoYXJ0IGlzIGludmFsaWQsXG5cdFx0ICogdGhlIGNhbGwgaXMgbWFkZSB0byB0aGUgSW50ZXJhY3RpdmVDaGFydFdpdGhFcnJvciBmcmFnbWVudCAodXNpbmcgZXJyb3ItbWVzc2FnZSByZWxhdGVkIEFQSXMsIGJ1dCBhdm9pZGluZyBiYXRjaCBjYWxscylcblx0XHQgKi9cblx0XHR0aGlzLmVycm9yTWVzc2FnZSA9IHRoaXMuZ2V0RXJyb3JNZXNzYWdlKGhpZGRlbk1lYXN1cmUsIG1lYXN1cmUpO1xuXHRcdHRoaXMuY2hhcnRNZWFzdXJlID0gbWVhc3VyZTtcblx0XHR0aGlzLm1lYXN1cmVEaW1lbnNpb25UaXRsZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0TWVhc3VyZURpbWVuc2lvblRpdGxlKFxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24sXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllc1xuXHRcdCk7XG5cdFx0Y29uc3QgY29sbGVjdGlvbiA9IHRoaXMuZ2V0RGF0YU1vZGVsT2JqZWN0Rm9yTWV0YVBhdGg8UGFnZUNvbnRleHRQYXRoVGFyZ2V0Pih0aGlzLmNvbnRleHRQYXRoKTtcblx0XHR0aGlzLnRvb2xUaXAgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFRvb2xUaXAoXG5cdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbixcblx0XHRcdGNvbGxlY3Rpb24sXG5cdFx0XHR0aGlzLnBhdGgsXG5cdFx0XHR0aGlzLmN1c3RvbUFnZ3JlZ2F0ZSxcblx0XHRcdHRoaXMuYWdncmVnYXRlUHJvcGVydGllcyxcblx0XHRcdHRoaXMucmVuZGVyTGluZUNoYXJ0XG5cdFx0KTtcblx0XHR0aGlzLlVvTVZpc2liaWxpdHkgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldFVvTVZpc2libGl0eSh0aGlzLmNoYXJ0QW5ub3RhdGlvbiwgdGhpcy5zaG93RXJyb3IpO1xuXHRcdHRoaXMuc2NhbGVVb01UaXRsZSA9IEludGVyYWN0aXZlQ2hhcnRIZWxwZXIuZ2V0U2NhbGVVb01UaXRsZShcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLFxuXHRcdFx0Y29sbGVjdGlvbixcblx0XHRcdHRoaXMucGF0aCxcblx0XHRcdHRoaXMuY3VzdG9tQWdncmVnYXRlLFxuXHRcdFx0dGhpcy5hZ2dyZWdhdGVQcm9wZXJ0aWVzXG5cdFx0KTtcblx0XHR0aGlzLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uO1xuXHRcdHRoaXMuc29ydE9yZGVyID0gcHZBbm5vdGF0aW9uPy5Tb3J0T3JkZXI7XG5cdFx0dGhpcy5maWx0ZXJDb3VudEJpbmRpbmcgPSBJbnRlcmFjdGl2ZUNoYXJ0SGVscGVyLmdldGZpbHRlckNvdW50QmluZGluZyh0aGlzLmNoYXJ0QW5ub3RhdGlvbik7XG5cdFx0Y29uc3Qgdmlld0lkID0gdGhpcy5nZXRQYWdlQ29udHJvbGxlcigpPy5nZXRWaWV3KCkuZ2V0SWQoKTtcblx0XHRpZiAodGhpcy5fY29udGVudElkKSB7XG5cdFx0XHR0aGlzLl9jb250ZW50SWQgPSBgJHt2aWV3SWR9LS0ke3RoaXMuX2NvbnRlbnRJZH1gO1xuXHRcdH0gZWxzZSBpZiAodGhpcy5pZCkge1xuXHRcdFx0dGhpcy5fY29udGVudElkID0gYCR7dGhpcy5pZH0tY29udGVudGA7XG5cdFx0fVxuXHRcdHRoaXMuc2VsZWN0aW9uVmFyaWFudCA9IHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb25cblx0XHRcdD8gdGhpcy5nZXREYXRhTW9kZWxPYmplY3RGb3JNZXRhUGF0aDxTZWxlY3Rpb25WYXJpYW50Pih0aGlzLnNlbGVjdGlvblZhcmlhbnRBbm5vdGF0aW9uKT8udGFyZ2V0T2JqZWN0XG5cdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbnRlbnQgPSB0aGlzLmNyZWF0ZUNvbnRlbnQoKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDaGVjayBpZiB0aGUgVW9NIGhhcyBjdXN0b20gYWdncmVnYXRlXG5cdCAqIEBwYXJhbSBjdXN0b21BZ2dyZWdhdGVzIC0gQ3VzdG9tIGFnZ3JlZ2F0ZXNcblx0ICogQHBhcmFtIHByb3BlcnR5QW5ub3RhdGlvbnMgLSBQcm9wZXJ0eSBhbm5vdGF0aW9uc1xuXHQgKiBAcGFyYW0gYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucyAtIEFnZ3JlZ2F0YWJsZSBwcm9wZXJ0eSBhbm5vdGF0aW9uc1xuXHQgKi9cblx0Y2hlY2tJZlVPTUhhc0N1c3RvbUFnZ3JlZ2F0ZShcblx0XHRjdXN0b21BZ2dyZWdhdGVzOiBBcnJheTxDdXN0b21BZ2dyZWdhdGU+LFxuXHRcdHByb3BlcnR5QW5ub3RhdGlvbnM6IFByb3BlcnR5QW5ub3RhdGlvbnMgfCB1bmRlZmluZWQsXG5cdFx0YWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucz86IFByb3BlcnR5QW5ub3RhdGlvbnNcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgbWVhc3VyZXMgPSBwcm9wZXJ0eUFubm90YXRpb25zPy5NZWFzdXJlcztcblx0XHRjb25zdCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzID0gYWdncmVnYXRhYmxlUHJvcGVydHlBbm5vdGF0aW9ucz8uTWVhc3VyZXM7XG5cdFx0Y29uc3QgVU9NID0gdGhpcy5nZXRVb00obWVhc3VyZXMsIGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMpO1xuXHRcdGlmIChcblx0XHRcdFVPTSAmJlxuXHRcdFx0Y3VzdG9tQWdncmVnYXRlcy5zb21lKGZ1bmN0aW9uIChjdXN0QWdnOiBDdXN0b21BZ2dyZWdhdGUpIHtcblx0XHRcdFx0cmV0dXJuIGN1c3RBZ2cucXVhbGlmaWVyID09PSBVT007XG5cdFx0XHR9KVxuXHRcdCkge1xuXHRcdFx0dGhpcy5Vb01IYXNDdXN0b21BZ2dyZWdhdGUgPSB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLlVvTUhhc0N1c3RvbUFnZ3JlZ2F0ZSA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBHZXQgdGhlIGNoYXJ0IGFubm90YXRpb24uXG5cdCAqIEBwYXJhbSB2aXN1YWxpemF0aW9ucyBWaXN1YWxpemF0aW9uc1xuXHQgKiBAcGFyYW0gY29udmVydGVyQ29udGV4dCBDb252ZXJ0ZXIgY29udGV4dFxuXHQgKi9cblx0Z2V0Q2hhcnRBbm5vdGF0aW9uKFxuXHRcdHZpc3VhbGl6YXRpb25zOiBBcnJheTxBbm5vdGF0aW9uUGF0aDxDaGFydCB8IERhdGFQb2ludCB8IExpbmVJdGVtPj4gfCB1bmRlZmluZWQsXG5cdFx0Y29udmVydGVyQ29udGV4dDogQ29udmVydGVyQ29udGV4dFxuXHQpOiB2b2lkIHtcblx0XHRpZiAodmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdGZvciAobGV0IHZpc3VhbGl6YXRpb24gb2YgdmlzdWFsaXphdGlvbnMpIHtcblx0XHRcdFx0Y29uc3Qgc0Fubm90YXRpb25QYXRoID0gdmlzdWFsaXphdGlvbiAmJiB2aXN1YWxpemF0aW9uLnZhbHVlO1xuXHRcdFx0XHR0aGlzLmNoYXJ0QW5ub3RhdGlvbiA9XG5cdFx0XHRcdFx0Y29udmVydGVyQ29udGV4dC5nZXRFbnRpdHlUeXBlQW5ub3RhdGlvbjxDaGFydD4oc0Fubm90YXRpb25QYXRoKSAmJlxuXHRcdFx0XHRcdGNvbnZlcnRlckNvbnRleHQuZ2V0RW50aXR5VHlwZUFubm90YXRpb248Q2hhcnQ+KHNBbm5vdGF0aW9uUGF0aCkuYW5ub3RhdGlvbjtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgZmxhZyB0byBzaG93IG9yIGhpZGUgdGhlIHZhbHVlIGhlbHAgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKiBAcGFyYW0gYlNob3dWYWx1ZUhlbHAgRmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyBvciBoaWRlIHRoZSB2YWx1ZSBoZWxwLlxuXHQgKi9cblx0c2V0U2hvd1ZhbHVlSGVscChiU2hvd1ZhbHVlSGVscDogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9WaXN1YWxGaWx0ZXJDb250cm9sID0gdGhpcy5nZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRcdG9WaXN1YWxGaWx0ZXJDb250cm9sPy5nZXRDb250ZW50KCkuc29tZShmdW5jdGlvbiAob0lubmVyQ29udHJvbDogQ29udHJvbCkge1xuXHRcdFx0XHRcdGlmIChvSW5uZXJDb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0XHRvSW5uZXJDb250cm9sLnNldFZpc2libGUoYlNob3dWYWx1ZUhlbHApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJzaG93VmFsdWVIZWxwXCIsIGJTaG93VmFsdWVIZWxwKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogU2V0cyB0aGUgc291cmNlIG9mIHRoZSB2YWx1ZSBoZWxwIGljb24uXG5cdCAqIEBwYXJhbSBzSWNvblNyYyBUaGUgc291cmNlIG9mIHRoZSB2YWx1ZSBoZWxwIGljb25cblx0ICovXG5cdHNldFZhbHVlSGVscEljb25TcmMoc0ljb25TcmM6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh0aGlzLmNvbnRlbnQ/LmlzQTxWaXN1YWxGaWx0ZXJDb250cm9sPihcInNhcC5mZS5tYWNyb3MuY29udHJvbHMuZmlsdGVyYmFyLlZpc3VhbEZpbHRlclwiKSkge1xuXHRcdFx0aWYgKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKS5sZW5ndGggPiAwKSB7XG5cdFx0XHRcdGNvbnN0IG9WaXN1YWxGaWx0ZXJDb250cm9sID0gdGhpcy5nZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk7XG5cdFx0XHRcdG9WaXN1YWxGaWx0ZXJDb250cm9sPy5nZXRDb250ZW50KCkuc29tZShmdW5jdGlvbiAob0lubmVyQ29udHJvbDogQ29udHJvbCkge1xuXHRcdFx0XHRcdGlmIChvSW5uZXJDb250cm9sLmlzQTxCdXR0b24+KFwic2FwLm0uQnV0dG9uXCIpKSB7XG5cdFx0XHRcdFx0XHRvSW5uZXJDb250cm9sLnNldEljb24oc0ljb25TcmMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSk7XG5cdFx0XHRcdHRoaXMuc2V0UHJvcGVydHkoXCJ2YWx1ZUhlbHBJY29uU3JjXCIsIHNJY29uU3JjKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSB2aXN1YWwgZmlsdGVyIGNvbnRyb2wgZnJvbSB0aGUgY29udGVudC5cblx0ICogQHJldHVybnMgVGhlIHZpc3VhbCBmaWx0ZXIgY29udHJvbCBvciB1bmRlZmluZWQgaWYgbm90IGZvdW5kXG5cdCAqL1xuXHRnZXRWaXN1YWxGaWx0ZXJDb250cm9sKCk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKHRoaXMuY29udGVudD8uaXNBPFZpc3VhbEZpbHRlckNvbnRyb2w+KFwic2FwLmZlLm1hY3Jvcy5jb250cm9scy5maWx0ZXJiYXIuVmlzdWFsRmlsdGVyXCIpKSB7XG5cdFx0XHRyZXR1cm4gKHRoaXMuY29udGVudD8uZ2V0SXRlbXMoKVswXSBhcyBWQm94KS5nZXRJdGVtcygpWzBdIGFzIE92ZXJmbG93VG9vbGJhcjtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogUmV0cmlldmVzIHRoZSBlcnJvciBtZXNzYWdlIGZvciBhIGhpZGRlbiBtZWFzdXJlLlxuXHQgKiBAcGFyYW0gaGlkZGVuTWVhc3VyZSBUaGUgaGlkZGVuIG1lYXN1cmUgb2JqZWN0XG5cdCAqIEBwYXJhbSBtZWFzdXJlIFRoZSBtZWFzdXJlIG5hbWVcblx0ICogQHJldHVybnMgVGhlIGVycm9yIG1lc3NhZ2UsIGlmIGFueVxuXHQgKi9cblx0Z2V0RXJyb3JNZXNzYWdlKGhpZGRlbk1lYXN1cmU6IE9iamVjdCB8IHVuZGVmaW5lZCwgbWVhc3VyZT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG5cdFx0bGV0IHZhbGlkQ2hhcnRUeXBlO1xuXHRcdGlmICh0aGlzLmNoYXJ0QW5ub3RhdGlvbikge1xuXHRcdFx0aWYgKHRoaXMuY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvTGluZVwiIHx8IHRoaXMuY2hhcnRBbm5vdGF0aW9uLkNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIpIHtcblx0XHRcdFx0dmFsaWRDaGFydFR5cGUgPSB0cnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dmFsaWRDaGFydFR5cGUgPSBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKCh0eXBlb2YgaGlkZGVuTWVhc3VyZSA9PT0gXCJib29sZWFuXCIgJiYgaGlkZGVuTWVhc3VyZSkgfHwgIXZhbGlkQ2hhcnRUeXBlIHx8IHRoaXMucmVuZGVyTGluZUNoYXJ0ID09PSBmYWxzZSkge1xuXHRcdFx0dGhpcy5zaG93RXJyb3IgPSB0cnVlO1xuXHRcdFx0dGhpcy5lcnJvck1lc3NhZ2VUaXRsZSA9XG5cdFx0XHRcdGhpZGRlbk1lYXN1cmUgfHwgIXZhbGlkQ2hhcnRUeXBlXG5cdFx0XHRcdFx0PyB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSU19FUlJPUl9NRVNTQUdFX1RJVExFXCIpXG5cdFx0XHRcdFx0OiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0xJTkVfQ0hBUlRfSU5WQUxJRF9EQVRBVFlQRVwiKTtcblx0XHRcdGlmIChoaWRkZW5NZWFzdXJlKSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmdldFRyYW5zbGF0ZWRUZXh0KFwiTV9WSVNVQUxfRklMVEVSX0hJRERFTl9NRUFTVVJFXCIsIFttZWFzdXJlXSk7XG5cdFx0XHR9IGVsc2UgaWYgKCF2YWxpZENoYXJ0VHlwZSkge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRUcmFuc2xhdGVkVGV4dChcIk1fVklTVUFMX0ZJTFRFUl9VTlNVUFBPUlRFRF9DSEFSVF9UWVBFXCIpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX1ZJU1VBTF9GSUxURVJfTElORV9DSEFSVF9VTlNVUFBPUlRFRF9ESU1FTlNJT05cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIERldGVybWluZXMgd2hldGhlciB0byBzaG93IHRoZSB2YWx1ZSBoZWxwIGJ1dHRvbiBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBjaGFydFR5cGUgVGhlIHR5cGUgb2YgY2hhcnQgdXNlZCBpbiB0aGUgdmlzdWFsIGZpbHRlclxuXHQgKiBAcGFyYW0gaGlkZGVuTWVhc3VyZSBUaGUgaGlkZGVuIG1lYXN1cmUgb2JqZWN0XG5cdCAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gc2hvdyB0aGUgdmFsdWUgaGVscCBidXR0b25cblx0ICovXG5cdGdldHNob3dWYWx1ZUhlbHBCdXR0b24oY2hhcnRUeXBlPzogc3RyaW5nLCBoaWRkZW5NZWFzdXJlPzogT2JqZWN0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3Qgc0RpbWVuc2lvblR5cGUgPVxuXHRcdFx0dGhpcy5jaGFydEFubm90YXRpb24/LkRpbWVuc2lvbnNbMF0gJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uPy5EaW1lbnNpb25zWzBdLiR0YXJnZXQgJiZcblx0XHRcdHRoaXMuY2hhcnRBbm5vdGF0aW9uLkRpbWVuc2lvbnNbMF0uJHRhcmdldC50eXBlO1xuXHRcdGlmIChzRGltZW5zaW9uVHlwZSA9PT0gXCJFZG0uRGF0ZVwiIHx8IHNEaW1lbnNpb25UeXBlID09PSBcIkVkbS5UaW1lXCIgfHwgc0RpbWVuc2lvblR5cGUgPT09IFwiRWRtLkRhdGVUaW1lT2Zmc2V0XCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKHR5cGVvZiBoaWRkZW5NZWFzdXJlID09PSBcImJvb2xlYW5cIiAmJiBoaWRkZW5NZWFzdXJlKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICghKGNoYXJ0VHlwZSA9PT0gXCJVSS5DaGFydFR5cGUvQmFyXCIgfHwgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSBlbHNlIGlmICh0aGlzLnJlbmRlckxpbmVDaGFydCA9PT0gZmFsc2UgJiYgY2hhcnRUeXBlID09PSBcIlVJLkNoYXJ0VHlwZS9MaW5lXCIpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2UgaWYgKHRoaXMuaXNWYWx1ZUxpc3RXaXRoRml4ZWRWYWx1ZXMgPT09IHRydWUpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyB0aGUgc2VsZWN0aW9uIHZhcmlhbnQgZm9yIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKlxuXHQgKiBAcGFyYW0gZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQgVGhlIGRlZmF1bHQgc2VsZWN0aW9uIHZhcmlhbnQgdG8gYmUgY2hlY2tlZFxuXHQgKiBAcmV0dXJucyB2b2lkXG5cdCAqL1xuXHRjaGVja1NlbGVjdGlvblZhcmlhbnQoZGVmYXVsdFNlbGVjdGlvblZhcmlhbnQ/OiBTZWxlY3Rpb25WYXJpYW50KTogdm9pZCB7XG5cdFx0bGV0IHNlbGVjdGlvblZhcmlhbnQ7XG5cdFx0aWYgKHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pIHtcblx0XHRcdHNlbGVjdGlvblZhcmlhbnQgPSB0aGlzLmdldERhdGFNb2RlbE9iamVjdEZvck1ldGFQYXRoPFNlbGVjdGlvblZhcmlhbnQ+KHRoaXMuc2VsZWN0aW9uVmFyaWFudEFubm90YXRpb24pPy50YXJnZXRPYmplY3Q7XG5cdFx0fVxuXHRcdGlmICghc2VsZWN0aW9uVmFyaWFudCAmJiBkZWZhdWx0U2VsZWN0aW9uVmFyaWFudCkge1xuXHRcdFx0c2VsZWN0aW9uVmFyaWFudCA9IGRlZmF1bHRTZWxlY3Rpb25WYXJpYW50O1xuXHRcdH1cblx0XHRpZiAoc2VsZWN0aW9uVmFyaWFudCAmJiBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMgJiYgIXRoaXMubXVsdGlwbGVTZWxlY3Rpb25BbGxvd2VkKSB7XG5cdFx0XHRmb3IgKGNvbnN0IHNlbGVjdE9wdGlvbiBvZiBzZWxlY3Rpb25WYXJpYW50LlNlbGVjdE9wdGlvbnMpIHtcblx0XHRcdFx0aWYgKHNlbGVjdE9wdGlvbi5Qcm9wZXJ0eU5hbWU/LnZhbHVlID09PSB0aGlzLmNoYXJ0QW5ub3RhdGlvbj8uRGltZW5zaW9uc1swXS52YWx1ZSkge1xuXHRcdFx0XHRcdGlmIChzZWxlY3RPcHRpb24uUmFuZ2VzLmxlbmd0aCA+IDEpIHtcblx0XHRcdFx0XHRcdExvZy5lcnJvcihcIk11bHRpcGxlIFNlbGVjdE9wdGlvbnMgZm9yIEZpbHRlckZpZWxkIGhhdmluZyBTaW5nbGVWYWx1ZSBBbGxvd2VkIEV4cHJlc3Npb25cIik7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIFJldHJpZXZlcyB0aGUgYWdncmVnYXRlIHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGFnZ3JlZ2F0aW9ucyBhbmQgbWVhc3VyZS5cblx0ICogQHBhcmFtIGFnZ3JlZ2F0aW9ucyBUaGUgbGlzdCBvZiBhZ2dyZWdhdGVkIHByb3BlcnRpZXNcblx0ICogQHBhcmFtIG1lYXN1cmUgVGhlIG9wdGlvbmFsIG1lYXN1cmUgdG8gZmlsdGVyIHRoZSBhZ2dyZWdhdGVkIHByb3BlcnRpZXNcblx0ICogQHJldHVybnMgVGhlIG1hdGNoaW5nIGFnZ3JlZ2F0ZWQgcHJvcGVydHksIGlmIGZvdW5kOyBvdGhlcndpc2UsIHVuZGVmaW5lZFxuXHQgKi9cblx0Z2V0QWdncmVnYXRlUHJvcGVydGllcyhhZ2dyZWdhdGlvbnM6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGVbXSwgbWVhc3VyZT86IHN0cmluZyk6IEFnZ3JlZ2F0ZWRQcm9wZXJ0eVR5cGUgfCB1bmRlZmluZWQge1xuXHRcdGxldCBtYXRjaGVkQWdncmVnYXRlOiBBZ2dyZWdhdGVkUHJvcGVydHlUeXBlIHwgdW5kZWZpbmVkO1xuXHRcdGlmICghYWdncmVnYXRpb25zKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGFnZ3JlZ2F0aW9ucy5zb21lKGZ1bmN0aW9uIChhZ2dyZWdhdGUpIHtcblx0XHRcdGlmIChhZ2dyZWdhdGUuTmFtZSA9PT0gbWVhc3VyZSkge1xuXHRcdFx0XHRtYXRjaGVkQWdncmVnYXRlID0gYWdncmVnYXRlO1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWF0Y2hlZEFnZ3JlZ2F0ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXRyaWV2ZXMgdGhlIHVuaXQgb2YgbWVhc3VyZSAoVW9NKSBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqXG5cdCAqIEBwYXJhbSBtZWFzdXJlcyBUaGUgbWVhc3VyZXMgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqIEBwYXJhbSBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzIFRoZSBhZ2dyZWdhdGFibGUgcHJvcGVydHkgbWVhc3VyZXMgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqIEByZXR1cm5zIFRoZSB1bml0IG9mIG1lYXN1cmUgZm9yIHRoZSB2aXN1YWwgZmlsdGVyXG5cdCAqL1xuXHRnZXRVb00obWVhc3VyZXM/OiBQcm9wZXJ0eUFubm90YXRpb25zX01lYXN1cmVzLCBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzPzogUHJvcGVydHlBbm5vdGF0aW9uc19NZWFzdXJlcyk6IHN0cmluZyB7XG5cdFx0bGV0IElTT0N1cnJlbmN5ID0gbWVhc3VyZXM/LklTT0N1cnJlbmN5O1xuXHRcdGxldCB1bml0ID0gbWVhc3VyZXM/LlVuaXQ7XG5cdFx0aWYgKCFJU09DdXJyZW5jeSAmJiAhdW5pdCAmJiBhZ2dyZWdhdGFibGVQcm9wZXJ0eU1lYXN1cmVzKSB7XG5cdFx0XHRJU09DdXJyZW5jeSA9IGFnZ3JlZ2F0YWJsZVByb3BlcnR5TWVhc3VyZXMuSVNPQ3VycmVuY3k7XG5cdFx0XHR1bml0ID0gYWdncmVnYXRhYmxlUHJvcGVydHlNZWFzdXJlcy5Vbml0O1xuXHRcdH1cblx0XHRyZXR1cm4gKFxuXHRcdFx0KElTT0N1cnJlbmN5IGFzIHVua25vd24gYXMgUGF0aEFubm90YXRpb25FeHByZXNzaW9uPHN0cmluZz4pPy5wYXRoIHx8XG5cdFx0XHQodW5pdCBhcyB1bmtub3duIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aFxuXHRcdCk7XG5cdH1cblxuXHRnZXRSZXF1aXJlZCgpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnJlcXVpcmVkKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TGFiZWwgdGV4dD1cIlwiIHdpZHRoPVwiMC41cmVtXCIgcmVxdWlyZWQ9XCJ0cnVlXCI+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXtPdmVyZmxvd1Rvb2xiYXJQcmlvcml0eS5OZXZlck92ZXJmbG93fSAvPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTGFiZWw+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRUaXRsZSgpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGl0bGVcblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiTWVhc3VyZURpbWVuc2lvblRpdGxlXCJdKX1cblx0XHRcdFx0dGV4dD17dGhpcy5tZWFzdXJlRGltZW5zaW9uVGl0bGV9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMudG9vbFRpcH1cblx0XHRcdFx0dGl0bGVTdHlsZT1cIkg2XCJcblx0XHRcdFx0bGV2ZWw9XCJIM1wiXG5cdFx0XHRcdGNsYXNzPVwic2FwVWlUaW55TWFyZ2luRW5kIHNhcFVpTm9NYXJnaW5CZWdpblwiXG5cdFx0XHQ+PC9UaXRsZT5cblx0XHQpO1xuXHR9XG5cblx0Z2V0VW9NVGl0bGUoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5Vb01WaXNpYmlsaXR5KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGl0bGVcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RoaXMuX2NvbnRlbnRJZCwgXCJTY2FsZVVvTVRpdGxlXCJdKX1cblx0XHRcdFx0XHR2aXNpYmxlPXtzaG93RXJyb3JFeHByZXNzaW9ufVxuXHRcdFx0XHRcdHRleHQ9e3RoaXMuc2NhbGVVb01UaXRsZX1cblx0XHRcdFx0XHR0aXRsZVN0eWxlPVwiSDZcIlxuXHRcdFx0XHRcdGxldmVsPVwiSDNcIlxuXHRcdFx0XHRcdHdpZHRoPXtcblx0XHRcdFx0XHRcdHRoaXMuc2NhbGVVb01UaXRsZVxuXHRcdFx0XHRcdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGlmRWxzZShyZXNvbHZlQmluZGluZ1N0cmluZyh0aGlzLnNjYWxlVW9NVGl0bGUpLCBcIjQuMTVyZW1cIiwgdW5kZWZpbmVkKSlcblx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWRcblx0XHRcdFx0XHR9XG5cdFx0XHRcdD48L1RpdGxlPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIFwiXCI7XG5cdFx0fVxuXHR9XG5cblx0Z2V0VG9vbEJhclNwYWNlcigpOiBzdHJpbmcge1xuXHRcdGlmICh0aGlzLnNob3dWYWx1ZUhlbHBCdXR0b24pIHtcblx0XHRcdHJldHVybiA8VG9vbGJhclNwYWNlcj48L1Rvb2xiYXJTcGFjZXI+O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRWYWx1ZUhlbHAoc2hvd0Vycm9yRXhwcmVzc2lvbjogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRpZiAodGhpcy5zaG93VmFsdWVIZWxwQnV0dG9uKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0aGlzLl9jb250ZW50SWQsIFwiVmlzdWFsRmlsdGVyVmFsdWVIZWxwQnV0dG9uXCJdKX1cblx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdFx0dGV4dD17dGhpcy5maWx0ZXJDb3VudEJpbmRpbmd9XG5cdFx0XHRcdFx0ZW5hYmxlZD17c2hvd0Vycm9yRXhwcmVzc2lvbn1cblx0XHRcdFx0XHRwcmVzcz17KGV2ZW50KTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRWaXN1YWxGaWx0ZXJSdW50aW1lLmZpcmVWYWx1ZUhlbHAoZXZlbnQpO1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e092ZXJmbG93VG9vbGJhclByaW9yaXR5Lk5ldmVyT3ZlcmZsb3d9IC8+LFxuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcIm11bHRpcGxlU2VsZWN0aW9uQWxsb3dlZFwifSB2YWx1ZT17dGhpcy5tdWx0aXBsZVNlbGVjdGlvbkFsbG93ZWR9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gXCJcIjtcblx0XHR9XG5cdH1cblxuXHRnZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb246IHN0cmluZyk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxPdmVyZmxvd1Rvb2xiYXIgc3R5bGU9XCJDbGVhclwiPlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGNvbnRlbnQ6IChcblx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFJlcXVpcmVkKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFRpdGxlKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFVvTVRpdGxlKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sQmFyU3BhY2VyKCl9XG5cdFx0XHRcdFx0XHRcdHt0aGlzLmdldFZhbHVlSGVscChzaG93RXJyb3JFeHByZXNzaW9uKX1cblx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdClcblx0XHRcdFx0fX1cblx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdCk7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyBpbnBhcmFtZXRlcnMgY2hhbmdlcyBkdXJpbmcgdGhlIGVuYWJsZW1lbnQgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgY2hhcnQgYmluZGluZyBiYXNlZCBvbiB0aGUgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqXG5cdCAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgaW4tcGFyYW1ldGVycyBvZiB0aGUgdmlzdWFsIGZpbHRlciBhcmUgYWZmZWN0ZWQgYnkgdGhlIGNoYW5nZWQgZmlsdGVyIGZpZWxkIHBhdGhzLlxuXHQgKiBJZiBhbnkgb2YgdGhlIGluLXBhcmFtZXRlcnMgYXJlIGFmZmVjdGVkLCB3ZSBzZXRzIHRoIGludGVybmFsIGNvbmRpdGlvbiB1cGRhdGUgcGVuZGluZyBmbGFnIHRvIHRydWUuXG5cdCAqIFN1YnNlcXVlbnRseSwgdGhlIGNoYXJ0IGJpbmRpbmcgd2lsbCBiZSBlbmFibGVkIG9ubHkgYWZ0ZXIgdGhlIGNvbmRpdGlvbiBtb2RlbCBpcyB1cGRhdGVkIGZvciB0aGUgdmlzdWFsIGZpbHRlciB3aXRoIHRoZSBpbnBhcmFtZXRlciBzZWxlY3Rpb25zLlxuXHQgKiBAcGFyYW0gY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMgQXJyYXkgb2YgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMuXG5cdCAqL1xuXHRfaGFuZGxlSW5QYXJhbXNDaGFydEJpbmRpbmdFbmFibGVtZW50KGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzOiBzdHJpbmdbXSk6IHZvaWQge1xuXHRcdGNvbnN0IGluUGFyYW1ldGVycyA9IHRoaXMuZ2V0UHJvcGVydHkoXCJpblBhcmFtZXRlcnNcIikuY3VzdG9tRGF0YSBhcyBQYXJhbWV0ZXJUeXBlW107XG5cdFx0Y29uc3QgaW5QYXJhbWV0ZXJMb2NhbERhdGFQcm9wZXJ0aWVzID0gaW5QYXJhbWV0ZXJzLm1hcCgoaW5QYXJhbWV0ZXIpID0+IGluUGFyYW1ldGVyLmxvY2FsRGF0YVByb3BlcnR5KTtcblx0XHRjb25zdCB2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQgPSBjaGFuZ2VkRmlsdGVyRmllbGRQYXRocy5zb21lKChwYXRoKSA9PiBpblBhcmFtZXRlckxvY2FsRGF0YVByb3BlcnRpZXMuaW5jbHVkZXMocGF0aCkpO1xuXHRcdGlmICh2ZkluUGFyYW1ldGVyVXBkYXRlRXhwZWN0ZWQpIHtcblx0XHRcdC8vIElmIHRoZSBpblBhcmFtZXRlcnMgb2YgdGhlIHZpc3VhbCBmaWx0ZXIgYXJlIGNoYW5nZWQoZGlmZlN0YXRlKSwgd2UgbmVlZCB0byB3YWl0IGZvciBjb25kaXRpb25zIG1vZGVsIHRvIGJlIHVwZGF0ZWQgZm9yIHRoZSB2aXN1YWwgZmlsdGVyIHRvIGZpbHRlciBjaGFydCBiaW5kaW5nLlxuXHRcdFx0dGhpcy5fc2V0SW50ZXJuYWxVcGRhdGVQZW5kaW5nKHRydWUpO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBlbmFibGVtZW50IG9mIHRoZSB2aXN1YWwgZmlsdGVyIGNoYXJ0IGJpbmRpbmcuXG5cdCAqIEBwYXJhbSBlbmFibGVCaW5kaW5nIEJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBjaGFydCBiaW5kaW5nLlxuXHQgKiBAcGFyYW0gY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMgQXJyYXkgb2YgY2hhbmdlZCBmaWx0ZXIgZmllbGQgcGF0aHMgdGhhdCBtYXkgYWZmZWN0IHRoZSBpbi1wYXJhbWV0ZXJzIG9mIHRoZSB2aXN1YWwgZmlsdGVyLlxuXHQgKi9cblx0c2V0RW5hYmxlQ2hhcnRCaW5kaW5nKGVuYWJsZUJpbmRpbmc6IGJvb2xlYW4sIGNoYW5nZWRGaWx0ZXJGaWVsZFBhdGhzOiBzdHJpbmdbXSA9IFtdKTogdm9pZCB7XG5cdFx0aWYgKGVuYWJsZUJpbmRpbmcgJiYgY2hhbmdlZEZpbHRlckZpZWxkUGF0aHMubGVuZ3RoID4gMCkge1xuXHRcdFx0Ly8gSWYgaW5wYXJhbWV0ZXJzIGFyZSBjaGFuZ2VkLCB3ZSBuZWVkIHRvIHdhaXQgdGlsbCB0aGUgY29uZGl0aW9uIG1vZGVsIHRvIGJlIHVwZGF0ZWQgYmVmb3JlIHdlIHNlbmQgcmVzdW1lIHRoZSBiaW5kaW5nIHdpdGggdGhlIGlucGFyYW1ldGVyIHNlbGVjdGlvbnMgYXMgZmlsdGVycyB0byB0aGUgY2hhcnQgYmluZGluZyBhbmQgc2VuZCB0aGUgcmVxdWVzdC5cblx0XHRcdHRoaXMuX2hhbmRsZUluUGFyYW1zQ2hhcnRCaW5kaW5nRW5hYmxlbWVudChjaGFuZ2VkRmlsdGVyRmllbGRQYXRocyk7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIGJpbmRpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgZW5hYmxlZCBvbmx5IHdoZW4gdmlzdWFsIGZpbHRlciBpcyByZWFkeVxuXHRcdC8vIDEuIGludGVybmFsbHkoaW5wYXJhbWV0ZXIgY29uZGl0aW9ucyBhcmUgdXBkYXRlZCBhbmQgdmlzdWFsIGZpbHRlciBpcyByZW5kZXJlZClcblx0XHQvLyAyLiBhbmQgZXh0ZXJuYWxseShlbmFibGVDaGFydEJpbmRpbmcpLiBMaWtlLCB4QXBwU3RhdGUgb3IgaUFwcFN0YXRlIGlzIGFwcGxpZWQgdG8gcGFyZW50IGZpbHRlciBiYXIuXG5cdFx0Y29uc3QgaW50ZXJuYWxVcGRhdGVQZW5kaW5nID0gdGhpcy5pblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyB8fCB0aGlzLnJlbmRlcmluZ1VwZGF0ZVBlbmRpbmc7XG5cblx0XHRjb25zdCBvdmVyYWxsRW5hYmxlQmluZGluZyA9IGVuYWJsZUJpbmRpbmcgJiYgIWludGVybmFsVXBkYXRlUGVuZGluZztcblx0XHRjb25zdCBjaGFydEJpbmRpbmcgPSB0aGlzLmNvbnRlbnQ/LmdldENoYXJ0QmluZGluZygpO1xuXHRcdGlmIChjaGFydEJpbmRpbmcpIHtcblx0XHRcdGlmIChvdmVyYWxsRW5hYmxlQmluZGluZyAmJiBjaGFydEJpbmRpbmcuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0XHRjaGFydEJpbmRpbmcucmVzdW1lKCk7XG5cdFx0XHR9IGVsc2UgaWYgKCFvdmVyYWxsRW5hYmxlQmluZGluZyAmJiAhY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdFx0Y2hhcnRCaW5kaW5nLnN1c3BlbmQoKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVuYWJsZUNoYXJ0QmluZGluZ1wiLCBlbmFibGVCaW5kaW5nLCB0cnVlKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBTZXRzIHRoZSBpbnRlcm5hbCB1cGRhdGUgcGVuZGluZyBmbGFncyBmb3IgdGhlIHZpc3VhbCBmaWx0ZXIuXG5cdCAqIFRoaXMgbWV0aG9kIGlzIHVzZWQgdG8gbWFuYWdlIHRoZSBpbnRlcm5hbCBzdGF0ZSBvZiB0aGUgdmlzdWFsIGZpbHRlciwgc3BlY2lmaWNhbGx5IHdoZW4gdGhlIGluLXBhcmFtZXRlcnMgYW5kIHJlbmRlcmluZyB1cGRhdGVzIGFyZSBwZW5kaW5nLlxuXHQgKiBAcGFyYW0gY29uZGl0aW9uVXBkYXRlUGVuZGluZyBXaGV0aGVyIHRoZSBjb25kaXRpb24gdXBkYXRlIGlzIHBlbmRpbmcgb3Igbm90LiBEZWZhdWx0cyB0byB0aGUgY3VycmVudCBpblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyBzdGF0ZS5cblx0ICogQHBhcmFtIHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmcgV2hldGhlciB0aGUgcmVuZGVyaW5nIHVwZGF0ZSBpcyBwZW5kaW5nIG9yIG5vdC4gRGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgcmVuZGVyaW5nVXBkYXRlUGVuZGluZyBzdGF0ZS5cblx0ICovXG5cdF9zZXRJbnRlcm5hbFVwZGF0ZVBlbmRpbmcoXG5cdFx0Y29uZGl0aW9uVXBkYXRlUGVuZGluZyA9IHRoaXMuaW5QYXJhbUNvbmRpdGlvblVwZGF0ZVBlbmRpbmcsXG5cdFx0cmVuZGVyaW5nVXBkYXRlUGVuZGluZyA9IHRoaXMucmVuZGVyaW5nVXBkYXRlUGVuZGluZ1xuXHQpOiB2b2lkIHtcblx0XHQvLyBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIGludGVybmFsbHkgYnkgdmlzdWFsIGZpbHRlciB0byBlbmFibGUgYW5kIGRpc2FibGUgYmluZGluZ3MuXG5cdFx0Y29uc3QgaXNCaW5kaW5nRW5hYmxlZEZvclZpc3VhbEZpbHRlckV4dGVybmFsbHkgPSB0aGlzLmVuYWJsZUNoYXJ0QmluZGluZztcblx0XHRjb25zdCBjaGFydEJpbmRpbmcgPSB0aGlzLmNvbnRlbnQ/LmdldENoYXJ0QmluZGluZygpO1xuXHRcdGNvbnN0IHVwZGF0ZVBlbmRpbmcgPSBjb25kaXRpb25VcGRhdGVQZW5kaW5nIHx8IHJlbmRlcmluZ1VwZGF0ZVBlbmRpbmc7XG5cdFx0aWYgKCF1cGRhdGVQZW5kaW5nICYmIGlzQmluZGluZ0VuYWJsZWRGb3JWaXN1YWxGaWx0ZXJFeHRlcm5hbGx5ICYmIGNoYXJ0QmluZGluZyAmJiBjaGFydEJpbmRpbmcuaXNTdXNwZW5kZWQoKSkge1xuXHRcdFx0Ly8gSW50ZXJuYWwgdXBkYXRlIGlzIGRvbmUsIGJpbmRpbmcgaXMgZW5hYmxlZCBleHRlcm5hbGx5LCBzbyByZXN1bWUgdGhlIGJpbmRpbmcuXG5cdFx0XHRjaGFydEJpbmRpbmcucmVzdW1lKCk7XG5cdFx0fSBlbHNlIGlmICh1cGRhdGVQZW5kaW5nICYmIGNoYXJ0QmluZGluZyAmJiAhY2hhcnRCaW5kaW5nLmlzU3VzcGVuZGVkKCkpIHtcblx0XHRcdC8vIEludGVybmFsIHVwZGF0ZSBpcyBwZW5kaW5nL2luIHByb2dyZXNzLCBzbyB3ZSBzdXNwZW5kIHRoZSBiaW5kaW5nLlxuXHRcdFx0Y2hhcnRCaW5kaW5nLnN1c3BlbmQoKTtcblx0XHR9XG5cdFx0Ly8gVXBkYXRlIHRoZSBpbnRlcm5hbCBmbGFncyBmb3IgY29uZGl0aW9uIGFuZCByZW5kZXJpbmcgdXBkYXRlIHBlbmRpbmcuXG5cdFx0dGhpcy5pblBhcmFtQ29uZGl0aW9uVXBkYXRlUGVuZGluZyA9IGNvbmRpdGlvblVwZGF0ZVBlbmRpbmc7XG5cdFx0dGhpcy5yZW5kZXJpbmdVcGRhdGVQZW5kaW5nID0gcmVuZGVyaW5nVXBkYXRlUGVuZGluZztcblx0fVxuXG5cdGNyZWF0ZUNvbnRlbnQoKTogVmlzdWFsRmlsdGVyQ29udHJvbCB7XG5cdFx0Y29uc3QgaWQgPSBnZW5lcmF0ZShbdGhpcy5wYXRoXSk7XG5cdFx0Y29uc3Qgc2hvd0Vycm9yRXhwcmVzc2lvbiA9IFwiez0gISR7aW50ZXJuYWw+XCIgKyBpZCArIFwiL3Nob3dFcnJvcn19XCI7XG5cdFx0Y29uc3QgY296eU1vZGUgPSBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5jb250YWlucyhcInNhcFVpU2l6ZUNvenlcIik7XG5cdFx0Y29uc3Qgb3ZlcmFsbEhlaWdodCA9IGNvenlNb2RlID8gXCIxM3JlbVwiIDogXCIxMDAlXCI7XG5cdFx0Y29uc3QgY2hhcnRIZWlnaHQgPSBjb3p5TW9kZSA/IFwiMTAwJVwiIDogXCI3LjVyZW1cIjtcblx0XHRjb25zdCB2ZkNvbnRyb2xJZCA9IHRoaXMuX2NvbnRlbnRJZCA/IGdlbmVyYXRlKFt0aGlzLl9jb250ZW50SWRdKSA6IHVuZGVmaW5lZDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFZpc3VhbEZpbHRlckNvbnRyb2wgaWQ9e3ZmQ29udHJvbElkfSBoZWlnaHQ9e292ZXJhbGxIZWlnaHR9IHdpZHRoPVwiMjAuNXJlbVwiIGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkJlZ2luRW5kXCI+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcImluZm9QYXRoXCJ9IHZhbHVlPXtnZW5lcmF0ZShbdGhpcy5wYXRoXSl9IC8+LFxuXHRcdFx0XHRcdGl0ZW1zOiAoXG5cdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHQ8VkJveCBoZWlnaHQ9XCIycmVtXCIgY2xhc3M9XCJzYXBVaVRpbnlNYXJnaW5Ub3BCb3R0b21cIj5cblx0XHRcdFx0XHRcdFx0XHR7dGhpcy5nZXRUb29sYmFyKHNob3dFcnJvckV4cHJlc3Npb24pfVxuXHRcdFx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdFx0XHRcdDxWQm94IGhlaWdodD17Y2hhcnRIZWlnaHR9IHdpZHRoPVwiMTAwJVwiPlxuXHRcdFx0XHRcdFx0XHRcdHtnZXRWaXN1YWxGaWx0ZXJDaGFydCh0aGlzKX1cblx0XHRcdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHRcdFx0PC8+XG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9WaXN1YWxGaWx0ZXJDb250cm9sPlxuXHRcdCk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF5Q0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBakJBLElBbUJxQkEsWUFBWSxJQUFBQyxJQUFBLEdBRGhDQyxjQUFjLENBQUMsMENBQTBDLENBQUMsRUFBQUMsS0FBQSxHQUV6REMsa0JBQWtCLENBQUMsMEJBQTBCLENBQUMsRUFBQUMsS0FBQSxHQUc5Q0MsUUFBUSxDQUFDO0lBQ1RDLElBQUksRUFBRTtFQUNQLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR0RGLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUU7RUFDUCxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUdEQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR1BMLFFBQVEsQ0FBQztJQUNUQyxJQUFJLEVBQUUsUUFBUTtJQUNk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W119