@sapui5/sap.fe.macros 1.138.0 → 1.139.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 (184) 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 +21 -4
  8. package/src/sap/fe/macros/Field.ts +21 -3
  9. package/src/sap/fe/macros/FooterContent.js +40 -10
  10. package/src/sap/fe/macros/FooterContent.tsx +44 -8
  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/MultiValueField.js +17 -4
  14. package/src/sap/fe/macros/MultiValueField.tsx +7 -2
  15. package/src/sap/fe/macros/RichTextEditor.js +30 -5
  16. package/src/sap/fe/macros/RichTextEditor.tsx +34 -6
  17. package/src/sap/fe/macros/Share.js +73 -40
  18. package/src/sap/fe/macros/Share.tsx +29 -1
  19. package/src/sap/fe/macros/ValueHelp.js +3 -4
  20. package/src/sap/fe/macros/ValueHelp.tsx +2 -3
  21. package/src/sap/fe/macros/ai/EasyFillButton.js +10 -4
  22. package/src/sap/fe/macros/ai/EasyFillButton.tsx +8 -1
  23. package/src/sap/fe/macros/ai/EasyFillDialog.js +25 -10
  24. package/src/sap/fe/macros/ai/EasyFillDialog.tsx +32 -23
  25. package/src/sap/fe/macros/ai/EasyFilterBar.js +30 -30
  26. package/src/sap/fe/macros/ai/EasyFilterBar.tsx +40 -43
  27. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.js +11 -5
  28. package/src/sap/fe/macros/ai/EasyFilterDataFetcher.ts +14 -5
  29. package/src/sap/fe/macros/chart/ChartDelegate.js +4 -4
  30. package/src/sap/fe/macros/chart/ChartDelegate.ts +3 -3
  31. package/src/sap/fe/macros/chart/MdcChartTemplate.js +19 -3
  32. package/src/sap/fe/macros/chart/MdcChartTemplate.tsx +15 -4
  33. package/src/sap/fe/macros/controls/FieldWrapper.js +9 -3
  34. package/src/sap/fe/macros/controls/FieldWrapper.ts +11 -2
  35. package/src/sap/fe/macros/controls/FilterBar.js +49 -2
  36. package/src/sap/fe/macros/controls/FilterBar.ts +55 -1
  37. package/src/sap/fe/macros/controls/RequiredFlexBox.js +62 -0
  38. package/src/sap/fe/macros/controls/RequiredFlexBox.tsx +20 -0
  39. package/src/sap/fe/macros/controls/filterbar/VisualFilter.js +21 -11
  40. package/src/sap/fe/macros/controls/filterbar/VisualFilter.ts +25 -11
  41. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.js +11 -2
  42. package/src/sap/fe/macros/controls/filterbar/VisualFilterContainer.ts +12 -1
  43. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.js +18 -1
  44. package/src/sap/fe/macros/controls/filterbar/utils/VisualFilterUtils.ts +20 -0
  45. package/src/sap/fe/macros/coreUI/CreateDialog.js +2 -2
  46. package/src/sap/fe/macros/coreUI/CreateDialog.tsx +1 -1
  47. package/src/sap/fe/macros/designtime/Designtime.helper.js +12 -2
  48. package/src/sap/fe/macros/designtime/Designtime.helper.ts +12 -0
  49. package/src/sap/fe/macros/draftIndicator/DraftIndicator.js +15 -4
  50. package/src/sap/fe/macros/draftIndicator/DraftIndicator.tsx +5 -0
  51. package/src/sap/fe/macros/field/FieldBaseDelegate.js +9 -3
  52. package/src/sap/fe/macros/field/FieldBaseDelegate.ts +22 -1
  53. package/src/sap/fe/macros/field/FieldFormatOptions.js +73 -44
  54. package/src/sap/fe/macros/field/FieldFormatOptions.ts +20 -2
  55. package/src/sap/fe/macros/filterBar/FilterBar.block.js +8 -2
  56. package/src/sap/fe/macros/filterBar/FilterBar.block.tsx +2 -5
  57. package/src/sap/fe/macros/filterBar/FilterBarAPI.js +8 -8
  58. package/src/sap/fe/macros/filterBar/FilterBarAPI.ts +8 -8
  59. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.js +3 -1
  60. package/src/sap/fe/macros/filterBar/designtime/FilterBar.designtime.ts +2 -0
  61. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.js +1 -1
  62. package/src/sap/fe/macros/filterBar/mixin/FilterBarAPIStateHandler.ts +1 -1
  63. package/src/sap/fe/macros/form/FormActionButtons.fragment.xml +13 -2
  64. package/src/sap/fe/macros/form/FormContainer.fragment.xml +40 -0
  65. package/src/sap/fe/macros/form/FormContainerAPI.js +14 -16
  66. package/src/sap/fe/macros/form/FormContainerAPI.ts +13 -15
  67. package/src/sap/fe/macros/formatters/TableFormatter.js +10 -1
  68. package/src/sap/fe/macros/formatters/TableFormatter.ts +14 -5
  69. package/src/sap/fe/macros/inlineEdit/InlineEdit.js +15 -3
  70. package/src/sap/fe/macros/inlineEdit/InlineEdit.ts +14 -2
  71. package/src/sap/fe/macros/internal/DataPoint.js +2 -1
  72. package/src/sap/fe/macros/internal/DataPoint.tsx +1 -0
  73. package/src/sap/fe/macros/internal/DataPointFormatOptions.js +11 -2
  74. package/src/sap/fe/macros/internal/DataPointFormatOptions.ts +3 -0
  75. package/src/sap/fe/macros/internal/FilterField.block.js +4 -2
  76. package/src/sap/fe/macros/internal/FilterField.block.ts +3 -1
  77. package/src/sap/fe/macros/internal/field/CheckBoxGroup.fragment.xml +25 -0
  78. package/src/sap/fe/macros/internal/field/DisplayStyle.js +49 -11
  79. package/src/sap/fe/macros/internal/field/DisplayStyle.tsx +51 -4
  80. package/src/sap/fe/macros/internal/field/EditStyle.js +5 -1
  81. package/src/sap/fe/macros/internal/field/EditStyle.tsx +4 -0
  82. package/src/sap/fe/macros/internal/field/FieldStructureHelper.js +9 -2
  83. package/src/sap/fe/macros/internal/field/FieldStructureHelper.ts +10 -0
  84. package/src/sap/fe/macros/internal/field/FieldStyles.js +1 -1
  85. package/src/sap/fe/macros/internal/field/FieldStyles.tsx +2 -1
  86. package/src/sap/fe/macros/internal/valuehelp/ValueListDialogTable.fragment.xml +1 -0
  87. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.js +7 -3
  88. package/src/sap/fe/macros/internal/valuehelp/ValueListHelper.ts +8 -7
  89. package/src/sap/fe/macros/internal/valuehelp/ValueListTable.fragment.xml +1 -0
  90. package/src/sap/fe/macros/library.js +1 -1
  91. package/src/sap/fe/macros/mdc/adapter/StateHelper.js +7 -2
  92. package/src/sap/fe/macros/mdc/adapter/StateHelper.ts +7 -3
  93. package/src/sap/fe/macros/messagebundle.properties +37 -29
  94. package/src/sap/fe/macros/messagebundle_ar.properties +5 -3
  95. package/src/sap/fe/macros/messagebundle_bg.properties +6 -4
  96. package/src/sap/fe/macros/messagebundle_ca.properties +8 -6
  97. package/src/sap/fe/macros/messagebundle_cnr.properties +5 -3
  98. package/src/sap/fe/macros/messagebundle_cs.properties +4 -2
  99. package/src/sap/fe/macros/messagebundle_cy.properties +7 -5
  100. package/src/sap/fe/macros/messagebundle_da.properties +6 -4
  101. package/src/sap/fe/macros/messagebundle_de.properties +11 -9
  102. package/src/sap/fe/macros/messagebundle_el.properties +7 -5
  103. package/src/sap/fe/macros/messagebundle_en.properties +8 -6
  104. package/src/sap/fe/macros/messagebundle_en_GB.properties +8 -6
  105. package/src/sap/fe/macros/messagebundle_en_US_saprigi.properties +8 -6
  106. package/src/sap/fe/macros/messagebundle_es.properties +6 -4
  107. package/src/sap/fe/macros/messagebundle_es_MX.properties +6 -4
  108. package/src/sap/fe/macros/messagebundle_et.properties +5 -3
  109. package/src/sap/fe/macros/messagebundle_fi.properties +8 -6
  110. package/src/sap/fe/macros/messagebundle_fr.properties +6 -4
  111. package/src/sap/fe/macros/messagebundle_fr_CA.properties +8 -6
  112. package/src/sap/fe/macros/messagebundle_hi.properties +6 -4
  113. package/src/sap/fe/macros/messagebundle_hr.properties +6 -4
  114. package/src/sap/fe/macros/messagebundle_hu.properties +4 -2
  115. package/src/sap/fe/macros/messagebundle_id.properties +8 -6
  116. package/src/sap/fe/macros/messagebundle_it.properties +4 -2
  117. package/src/sap/fe/macros/messagebundle_iw.properties +5 -3
  118. package/src/sap/fe/macros/messagebundle_ja.properties +5 -3
  119. package/src/sap/fe/macros/messagebundle_kk.properties +5 -3
  120. package/src/sap/fe/macros/messagebundle_ko.properties +4 -2
  121. package/src/sap/fe/macros/messagebundle_lt.properties +6 -4
  122. package/src/sap/fe/macros/messagebundle_lv.properties +5 -3
  123. package/src/sap/fe/macros/messagebundle_mk.properties +5 -3
  124. package/src/sap/fe/macros/messagebundle_ms.properties +8 -6
  125. package/src/sap/fe/macros/messagebundle_nl.properties +7 -5
  126. package/src/sap/fe/macros/messagebundle_no.properties +6 -4
  127. package/src/sap/fe/macros/messagebundle_pl.properties +6 -4
  128. package/src/sap/fe/macros/messagebundle_pt.properties +7 -5
  129. package/src/sap/fe/macros/messagebundle_pt_PT.properties +6 -4
  130. package/src/sap/fe/macros/messagebundle_ro.properties +7 -5
  131. package/src/sap/fe/macros/messagebundle_ru.properties +4 -2
  132. package/src/sap/fe/macros/messagebundle_sh.properties +5 -3
  133. package/src/sap/fe/macros/messagebundle_sk.properties +5 -3
  134. package/src/sap/fe/macros/messagebundle_sl.properties +6 -4
  135. package/src/sap/fe/macros/messagebundle_sr.properties +5 -3
  136. package/src/sap/fe/macros/messagebundle_sv.properties +5 -3
  137. package/src/sap/fe/macros/messagebundle_th.properties +4 -2
  138. package/src/sap/fe/macros/messagebundle_tr.properties +4 -2
  139. package/src/sap/fe/macros/messagebundle_uk.properties +10 -8
  140. package/src/sap/fe/macros/messagebundle_vi.properties +6 -4
  141. package/src/sap/fe/macros/messagebundle_zh_CN.properties +5 -3
  142. package/src/sap/fe/macros/messagebundle_zh_TW.properties +5 -3
  143. package/src/sap/fe/macros/messages/MessageButton.js +17 -19
  144. package/src/sap/fe/macros/messages/MessageButton.ts +24 -22
  145. package/src/sap/fe/macros/table/Action.js +24 -2
  146. package/src/sap/fe/macros/table/Action.ts +13 -0
  147. package/src/sap/fe/macros/table/ActionGroup.js +24 -2
  148. package/src/sap/fe/macros/table/ActionGroup.ts +13 -0
  149. package/src/sap/fe/macros/table/ActionGroupOverride.js +24 -2
  150. package/src/sap/fe/macros/table/ActionGroupOverride.ts +13 -0
  151. package/src/sap/fe/macros/table/ActionOverride.js +24 -2
  152. package/src/sap/fe/macros/table/ActionOverride.ts +13 -0
  153. package/src/sap/fe/macros/table/ActionsTemplating.js +73 -12
  154. package/src/sap/fe/macros/table/ActionsTemplating.tsx +69 -13
  155. package/src/sap/fe/macros/table/Column.js +3 -3
  156. package/src/sap/fe/macros/table/Column.ts +2 -2
  157. package/src/sap/fe/macros/table/MdcTableTemplate.js +18 -8
  158. package/src/sap/fe/macros/table/MdcTableTemplate.tsx +30 -5
  159. package/src/sap/fe/macros/table/QuickFilterSelector.js +35 -14
  160. package/src/sap/fe/macros/table/QuickFilterSelector.tsx +22 -3
  161. package/src/sap/fe/macros/table/Table.block.js +137 -108
  162. package/src/sap/fe/macros/table/Table.block.tsx +29 -2
  163. package/src/sap/fe/macros/table/TableAPI.js +143 -133
  164. package/src/sap/fe/macros/table/TableAPI.ts +5 -1
  165. package/src/sap/fe/macros/table/TableDefinition.js +4 -2
  166. package/src/sap/fe/macros/table/TableDefinition.ts +3 -1
  167. package/src/sap/fe/macros/table/TableRuntime.js +3 -3
  168. package/src/sap/fe/macros/table/TableRuntime.ts +2 -2
  169. package/src/sap/fe/macros/table/delegates/TableDelegate.js +25 -19
  170. package/src/sap/fe/macros/table/delegates/TableDelegate.ts +25 -23
  171. package/src/sap/fe/macros/table/designtime/Table.designtime.js +3 -1
  172. package/src/sap/fe/macros/table/designtime/Table.designtime.ts +2 -0
  173. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.js +3 -1
  174. package/src/sap/fe/macros/table/massEdit/designtime/MassEdit.designtime.ts +2 -1
  175. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.js +2 -1
  176. package/src/sap/fe/macros/table/mixin/ContextMenuHandler.ts +1 -0
  177. package/src/sap/fe/macros/table/mixin/TableHierarchy.js +4 -1
  178. package/src/sap/fe/macros/table/mixin/TableHierarchy.ts +3 -0
  179. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.js +11 -6
  180. package/src/sap/fe/macros/valuehelp/ValueHelpDelegate.ts +19 -14
  181. package/src/sap/fe/macros/visualfilters/VisualFilter.js +95 -6
  182. package/src/sap/fe/macros/visualfilters/VisualFilter.tsx +93 -2
  183. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.js +15 -3
  184. package/src/sap/fe/macros/visualfilters/VisualFilterRuntime.ts +17 -2
@@ -2,7 +2,7 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/CriticalityFormatters", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/quickView/QuickView", "sap/m/Avatar", "sap/m/Button", "sap/m/ExpandableText", "sap/m/HBox", "sap/m/ImageCustomData", "sap/m/Label", "sap/m/Link", "sap/m/ObjectIdentifier", "sap/m/ObjectStatus", "sap/m/Text", "sap/m/VBox", "sap/m/library", "sap/ui/core/CustomData", "sap/ui/core/Icon", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../../contact/Contact", "../../contact/Email", "../../controls/ConditionalWrapper", "../../controls/FileWrapper", "../../controls/NumberWithUnitOrCurrency", "../../controls/TextLink", "../../draftIndicator/DraftIndicator", "../../situations/SituationsIndicator", "../DataPoint", "../DataPointFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (uid, BindingToolkit, FormElementWrapper, MetaModelConverter, Action, valueFormatters, BindingHelper, StableIdHelper, CriticalityFormatters, DataModelPathHelper, UIFormatters, FieldHelper, FieldTemplating, QuickView, Avatar, Button, ExpandableText, HBox, ImageCustomData, Label, Link, ObjectIdentifier, ObjectStatus, Text, VBox, library, CustomData, Icon, FieldEditMode, FileUploader, FileUploaderHttpRequestMethod, Contact, Email, ConditionalWrapper, FileWrapper, NumberWithUnitOrCurrency, TextLink, DraftIndicator, SituationsIndicator, DataPoint, DataPointFormatOptions, _jsx, _jsxs) {
5
+ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/controls/FormElementWrapper", "sap/fe/core/converters/MetaModelConverter", "sap/fe/core/converters/controls/Common/Action", "sap/fe/core/formatters/ValueFormatter", "sap/fe/core/helpers/BindingHelper", "sap/fe/core/helpers/StableIdHelper", "sap/fe/core/templating/CriticalityFormatters", "sap/fe/core/templating/DataModelPathHelper", "sap/fe/core/templating/UIFormatters", "sap/fe/macros/field/FieldHelper", "sap/fe/macros/field/FieldTemplating", "sap/fe/macros/quickView/QuickView", "sap/m/Avatar", "sap/m/Button", "sap/m/CheckBox", "sap/m/ExpandableText", "sap/m/HBox", "sap/m/ImageCustomData", "sap/m/Label", "sap/m/Link", "sap/m/ObjectIdentifier", "sap/m/ObjectStatus", "sap/m/Text", "sap/m/VBox", "sap/m/library", "sap/ui/core/CustomData", "sap/ui/core/Icon", "sap/ui/mdc/enums/FieldEditMode", "sap/ui/unified/FileUploader", "sap/ui/unified/FileUploaderHttpRequestMethod", "../../contact/Contact", "../../contact/Email", "../../controls/ConditionalWrapper", "../../controls/FileWrapper", "../../controls/NumberWithUnitOrCurrency", "../../controls/TextLink", "../../draftIndicator/DraftIndicator", "../../situations/SituationsIndicator", "../DataPoint", "../DataPointFormatOptions", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/jsxs"], function (uid, BindingToolkit, FormElementWrapper, MetaModelConverter, Action, valueFormatters, BindingHelper, StableIdHelper, CriticalityFormatters, DataModelPathHelper, UIFormatters, FieldHelper, FieldTemplating, QuickView, Avatar, Button, CheckBox, ExpandableText, HBox, ImageCustomData, Label, Link, ObjectIdentifier, ObjectStatus, Text, VBox, library, CustomData, Icon, FieldEditMode, FileUploader, FileUploaderHttpRequestMethod, Contact, Email, ConditionalWrapper, FileWrapper, NumberWithUnitOrCurrency, TextLink, DraftIndicator, SituationsIndicator, DataPoint, DataPointFormatOptions, _jsx, _jsxs) {
6
6
  "use strict";
7
7
 
8
8
  var ObjectMarkerVisibility = library.ObjectMarkerVisibility;
@@ -43,6 +43,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
43
43
  text: "{sap.fe.i18n>M_TABLE_SHOW_DETAILS}",
44
44
  press: field.eventHandlers.displayAggregationDetails,
45
45
  visible: visibleExpression,
46
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
46
47
  children: {
47
48
  dependents: currencyOrUnit?.clone ? currencyOrUnit.clone() : currencyOrUnit
48
49
  }
@@ -315,7 +316,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
315
316
  target: "_blank",
316
317
  href: fileLinkHref,
317
318
  visible: fileStreamNotEmpty,
318
- wrapping: "true"
319
+ wrapping: "true",
320
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
319
321
  }),
320
322
  text: _jsx(Text, {
321
323
  emptyIndicatorMode: field.emptyIndicatorMode,
@@ -400,7 +402,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
400
402
  ariaLabelledBy: field.ariaLabelledBy,
401
403
  emptyIndicatorMode: field.emptyIndicatorMode,
402
404
  class: "sapMTextRenderWhitespaceWrap",
403
- accessibleRole: LinkAccessibleRole.Button
405
+ accessibleRole: LinkAccessibleRole.Button,
406
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
404
407
  });
405
408
  case "com.sap.vocabularies.UI.v1.DataFieldWithNavigationPath":
406
409
  return _jsx(Link, {
@@ -412,6 +415,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
412
415
  enabled: field.formatOptions.isAnalyticalAggregatedRow ? UI.isNodeLevelNavigable : undefined,
413
416
  ariaLabelledBy: field.ariaLabelledBy,
414
417
  emptyIndicatorMode: field.emptyIndicatorMode,
418
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
415
419
  class: "sapMTextRenderWhitespaceWrap"
416
420
  });
417
421
  case "com.sap.vocabularies.UI.v1.DataFieldWithAction":
@@ -424,7 +428,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
424
428
  ariaLabelledBy: field.ariaLabelledBy,
425
429
  emptyIndicatorMode: field.emptyIndicatorMode,
426
430
  class: "sapMTextRenderWhitespaceWrap",
427
- accessibleRole: LinkAccessibleRole.Button
431
+ accessibleRole: LinkAccessibleRole.Button,
432
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
428
433
  });
429
434
  case "com.sap.vocabularies.UI.v1.DataFieldWithUrl":
430
435
  const html5LinkTarget = field.property.annotations.HTML5?.LinkTarget;
@@ -461,7 +466,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
461
466
  enabled: linkActived,
462
467
  ariaLabelledBy: field.ariaLabelledBy,
463
468
  emptyIndicatorMode: field.emptyIndicatorMode,
464
- class: "sapMTextRenderWhitespaceWrap"
469
+ class: "sapMTextRenderWhitespaceWrap",
470
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
465
471
  });
466
472
  }
467
473
  }
@@ -476,6 +482,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
476
482
  active: linkActived,
477
483
  emptyIndicatorMode: field.emptyIndicatorMode,
478
484
  ariaLabelledBy: field.ariaLabelledBy,
485
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
479
486
  children: {
480
487
  customData: _jsx(CustomData, {
481
488
  value: linkUrl
@@ -492,7 +499,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
492
499
  target: linkTarget === undefined ? "_top" : linkTarget,
493
500
  wrapping: field.wrap === undefined ? true : field.wrap,
494
501
  ariaLabelledBy: field.ariaLabelledBy,
495
- emptyIndicatorMode: field.emptyIndicatorMode
502
+ emptyIndicatorMode: field.emptyIndicatorMode,
503
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
496
504
  });
497
505
  }
498
506
  },
@@ -545,6 +553,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
545
553
  ariaLabelledBy: field.ariaLabelledBy,
546
554
  emptyIndicatorMode: field.emptyIndicatorMode,
547
555
  accessibleRole: LinkAccessibleRole.Button,
556
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
548
557
  children: {
549
558
  customData: [_jsx(CustomData, {
550
559
  value: field.valueAsStringBindingExpression
@@ -686,6 +695,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
686
695
  titlePress: field.eventHandlers.linkPressed,
687
696
  ariaLabelledBy: field.ariaLabelledBy,
688
697
  emptyIndicatorMode: field.emptyIndicatorMode,
698
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
689
699
  children: {
690
700
  customData: [_jsx(CustomData, {
691
701
  value: field.valueAsStringBindingExpression
@@ -781,6 +791,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
781
791
  active: isActive ? isActive : active,
782
792
  press: pressAction,
783
793
  ariaLabelledBy: field.ariaLabelledBy,
794
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
784
795
  children: {
785
796
  customData: [_jsx(CustomData, {
786
797
  value: field.valueAsStringBindingExpression
@@ -811,6 +822,7 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
811
822
  ariaLabelledBy: field.ariaLabelledBy,
812
823
  emptyIndicatorMode: field.emptyIndicatorMode,
813
824
  accessibleRole: LinkAccessibleRole.Button,
825
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode,
814
826
  children: {
815
827
  customData: [_jsx(CustomData, {
816
828
  value: field.valueAsStringBindingExpression
@@ -857,7 +869,8 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
857
869
  draftIndicatorType: ObjectMarkerVisibility.IconAndText,
858
870
  contextPath: field.contextPath.getPath(),
859
871
  visible: field.draftIndicatorVisible,
860
- ariaLabelledBy: field.ariaLabelledBy ? field.ariaLabelledBy : []
872
+ ariaLabelledBy: field.ariaLabelledBy ? field.ariaLabelledBy : [],
873
+ reactiveAreaMode: field.formatOptions?.reactiveAreaMode
861
874
  })]
862
875
  })
863
876
  });
@@ -913,6 +926,28 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
913
926
  return "true";
914
927
  }
915
928
  },
929
+ /**
930
+ * Generates the CheckBoxGroup template.
931
+ * @param field Reference to the current field instance
932
+ * @returns An XML-based string with the definition of the field control
933
+ */
934
+ getCheckBoxGroupItemTemplate(field) {
935
+ return _jsx(CheckBox, {
936
+ "core:require": "{Field: 'sap/fe/macros/Field'}",
937
+ id: field.displayStyleId,
938
+ displayOnly: true,
939
+ text: field.label,
940
+ wrapping: true,
941
+ selected: field.valueBindingExpression,
942
+ fieldGroupIds: field.fieldGroupIds,
943
+ ariaLabelledBy: field.ariaLabelledBy,
944
+ children: {
945
+ customData: _jsx(CustomData, {
946
+ value: field.dataSourcePath
947
+ }, "sourcePath")
948
+ }
949
+ });
950
+ },
916
951
  /**
917
952
  * Entry point for further templating processings.
918
953
  * @param field Reference to the current field instance
@@ -921,15 +956,15 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
921
956
  getTemplate: field => {
922
957
  let innerFieldContent;
923
958
  switch (field.displayStyle) {
924
- case "NumberWithUnitOrCurrencyAligned":
925
- innerFieldContent = DisplayStyle.getNumberWithUnitOrCurrencyAlignedTemplate(field);
926
- break;
927
959
  case "Avatar":
928
960
  innerFieldContent = DisplayStyle.getAvatarTemplate(field);
929
961
  break;
930
962
  case "Button":
931
963
  innerFieldContent = DisplayStyle.getButtonTemplate(field);
932
964
  break;
965
+ case "CheckBoxGroupItem":
966
+ innerFieldContent = DisplayStyle.getCheckBoxGroupItemTemplate(field);
967
+ break;
933
968
  case "Contact":
934
969
  innerFieldContent = DisplayStyle.getContactTemplate(field);
935
970
  break;
@@ -948,6 +983,9 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
948
983
  case "LinkWithQuickView":
949
984
  innerFieldContent = DisplayStyle.getLinkWithQuickViewTemplate(field);
950
985
  break;
986
+ case "NumberWithUnitOrCurrencyAligned":
987
+ innerFieldContent = DisplayStyle.getNumberWithUnitOrCurrencyAlignedTemplate(field);
988
+ break;
951
989
  case "ObjectIdentifier":
952
990
  innerFieldContent = DisplayStyle.getObjectIdentifier(field);
953
991
  break;
@@ -976,4 +1014,4 @@ sap.ui.define(["sap/base/util/uid", "sap/fe/base/BindingToolkit", "sap/fe/core/c
976
1014
  };
977
1015
  return DisplayStyle;
978
1016
  }, false);
979
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXNwbGF5U3R5bGUiLCJnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeSIsImZpZWxkIiwic2NhbGUiLCJwcm9wZXJ0eSIsInByZWNpc2lvbiIsIk1hdGgiLCJtaW4iLCJnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2wiLCJjdXJyZW5jeU9yVW5pdCIsInZpc2libGVFeHByZXNzaW9uIiwiX2pzeCIsIkxpbmsiLCJ0ZXh0IiwicHJlc3MiLCJldmVudEhhbmRsZXJzIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsInZpc2libGUiLCJjaGlsZHJlbiIsImRlcGVuZGVudHMiLCJjbG9uZSIsImdldE51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWRUZW1wbGF0ZSIsInJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCIsImRhdGFNb2RlbFBhdGgiLCJvdmVyYWxsVmlzaWJsZSIsIm5vdCIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJ1bmRlZmluZWQiLCJjdXJyZW5jeSIsIk51bWJlcldpdGhVbml0T3JDdXJyZW5jeSIsIm51bWJlciIsInZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbiIsInVuaXRPckN1cnJlbmN5IiwidW5pdEJpbmRpbmdFeHByZXNzaW9uIiwiZm9ybWF0T3B0aW9ucyIsImlzQW5hbHl0aWNzIiwiQ29uZGl0aW9uYWxXcmFwcGVyIiwiZGlzcGxheVZpc2libGUiLCJjb25kaXRpb24iLCJoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCIsImNvbnRlbnRUcnVlIiwiY29udGVudEZhbHNlIiwiZ2V0QXZhdGFyVGVtcGxhdGUiLCJhdmF0YXJJZCIsIl9mbGV4SWQiLCJpZFByZWZpeCIsImdlbmVyYXRlIiwiYXZhdGFyVmlzaWJsZSIsIkZpZWxkVGVtcGxhdGluZyIsImdldFZpc2libGVFeHByZXNzaW9uIiwiYXZhdGFyU3JjIiwiZ2V0VmFsdWVCaW5kaW5nIiwiYXZhdGFyRGlzcGxheVNoYXBlIiwiZ2V0QXZhdGFyU2hhcGUiLCJGb3JtRWxlbWVudFdyYXBwZXIiLCJBdmF0YXIiLCJpZCIsInNyYyIsImRpc3BsYXlTaXplIiwiY2xhc3MiLCJpbWFnZUZpdFR5cGUiLCJkaXNwbGF5U2hhcGUiLCJnZXRCdXR0b25UZW1wbGF0ZSIsImljb24iLCJzaG93SWNvblVybCIsImNvbnZlcnRlZE1ldGFQYXRoIiwiSWNvblVybCIsIkxhYmVsIiwidG9vbHRpcCIsImJ1dHRvblByZXNzIiwiYnV0dG9uSXNCb3VuZCIsImJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSIsImJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCIsIm5hdmlnYXRpb25BdmFpbGFibGUiLCIkVHlwZSIsIm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIiwiQWN0aW9uVGFyZ2V0IiwiaXNCb3VuZCIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsImFjdGlvblRhcmdldCIsImJpbmRpbmdQYXJhbU5hbWUiLCJwYXJhbWV0ZXJzIiwibmFtZSIsImNvbXBpbGVFeHByZXNzaW9uIiwiZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uIiwicGF0aCIsInN0YXJ0c1dpdGgiLCJyZXBsYWNlIiwib25EYXRhRmllbGRXaXRoSUJOIiwiTmF2aWdhdGlvbkF2YWlsYWJsZSIsIlN0cmluZyIsImlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGUiLCJidXR0b24iLCJCdXR0b24iLCJlbmFibGVkIiwiRmllbGRIZWxwZXIiLCJpc0RhdGFGaWVsZEFjdGlvbkJ1dHRvblZpc2libGUiLCJpc0RhdGFGaWVsZEFjdGlvbkJ1dHRvbkVuYWJsZWQiLCJpc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93IiwiYW5kIiwicmVzb2x2ZUJpbmRpbmdTdHJpbmciLCJVSSIsImlzTm9kZUxldmVsTmF2aWdhYmxlIiwidHlwZSIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSIsImlzQWN0aW9uQUlPcGVyYXRpb24iLCJhaUljb24iLCJnZXRDb250YWN0VGVtcGxhdGUiLCJjb250YWN0TWV0YVBhdGgiLCJtZXRhUGF0aCIsImdldE1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJjb250YWN0VmlzaWJsZSIsIkNvbnRhY3QiLCJhcmlhTGFiZWxsZWRCeSIsImdldFBhdGgiLCJjb250ZXh0UGF0aCIsInNob3dFbXB0eUluZGljYXRvciIsImdldERhdGFQb2ludElubmVyUGFydCIsIndpdGhDb25kaXRpb25hbFdyYXBwZXIiLCJjb252ZXJ0ZWREYXRhRmllbGQiLCJNZXRhTW9kZWxDb252ZXJ0ZXIiLCJjb252ZXJ0TWV0YU1vZGVsQ29udGV4dCIsIm1lYXN1cmVEaXNwbGF5TW9kZSIsIkRhdGFQb2ludCIsInZhbHVlIiwiRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyIsImdldERhdGFQb2ludFRlbXBsYXRlIiwiaGFzVW5pdE9yQ3VycmVuY3kiLCJnZXRFeHBhbmRhYmxlVGV4dCIsIkV4cGFuZGFibGVUZXh0IiwiZGlzcGxheVN0eWxlSWQiLCJvdmVyZmxvd01vZGUiLCJ0ZXh0RXhwYW5kQmVoYXZpb3JEaXNwbGF5IiwibWF4Q2hhcmFjdGVycyIsInRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheSIsImVtcHR5SW5kaWNhdG9yTW9kZSIsImdldEZpbGVUZW1wbGF0ZSIsImlubmVyRmlsZVBhcnQiLCJmaWxlU3RyZWFtTm90RW1wdHkiLCJmaWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJmaWxlRmlsZW5hbWVFeHByZXNzaW9uIiwiZmlsZVVwbG9hZFVybCIsImZpbGVGaWxlbmFtZVBhdGgiLCJDb250ZW50RGlzcG9zaXRpb24iLCJGaWxlbmFtZSIsImZpbGVNZWRpYVR5cGUiLCJNZWRpYVR5cGUiLCJmaWxlSXNJbWFnZSIsIklzSW1hZ2VVUkwiLCJJc0ltYWdlIiwidGVzdCIsInRvU3RyaW5nIiwiZmlsZUF2YXRhclNyYyIsImZpbGVBdmF0YXJEaXNwbGF5U2hhcGUiLCJmaWxlSWNvblNyYyIsImdldFBhdGhGb3JJY29uU291cmNlIiwiZmlsZUxpbmtUZXh0IiwiZ2V0RmlsZW5hbWVFeHByIiwiZmlsZUxpbmtIcmVmIiwiZ2V0RG93bmxvYWRVcmwiLCJmaWxlVGV4dFZpc2libGUiLCJmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJBY2NlcHRhYmxlTWVkaWFUeXBlcyIsImFjY2VwdGVkVHlwZXMiLCJBcnJheSIsImZyb20iLCJtYXAiLCJqb2luIiwiZmlsZU1heGltdW1TaXplIiwiY2FsY3VsYXRlTUJmcm9tQnl0ZSIsIm1heExlbmd0aCIsImF2YXRhciIsImN1c3RvbURhdGEiLCJJbWFnZUN1c3RvbURhdGEiLCJwYXJhbU5hbWUiLCJJY29uIiwibGluayIsInRhcmdldCIsImhyZWYiLCJ3cmFwcGluZyIsIlRleHQiLCJlZGl0TW9kZSIsImNvbXB1dGVkRWRpdE1vZGUiLCJGaWVsZEVkaXRNb2RlIiwiRGlzcGxheSIsImJlZm9yZURpYWxvZ09wZW4iLCJjb2xsYWJvcmF0aW9uRW5hYmxlZCIsImhhbmRsZU9wZW5VcGxvYWRlciIsImFmdGVyRGlhbG9nT3BlbiIsImhhbmRsZUNsb3NlVXBsb2FkZXIiLCJmaWxlVXBsb2FkZXIiLCJGaWxlVXBsb2FkZXIiLCJlZGl0YWJsZUV4cHJlc3Npb24iLCJidXR0b25Pbmx5IiwiaWNvbk9ubHkiLCJtdWx0aXBsZSIsInN0eWxlIiwic2VuZFhIUiIsInVzZU11bHRpcGFydCIsInNhbWVGaWxlbmFtZUFsbG93ZWQiLCJtaW1lVHlwZSIsInR5cGVNaXNzbWF0Y2giLCJoYW5kbGVUeXBlTWlzc21hdGNoIiwibWF4aW11bUZpbGVTaXplIiwiZmlsZVNpemVFeGNlZWQiLCJoYW5kbGVGaWxlU2l6ZUV4Y2VlZCIsInVwbG9hZE9uQ2hhbmdlIiwidXBsb2FkQ29tcGxldGUiLCJoYW5kbGVVcGxvYWRDb21wbGV0ZSIsImh0dHBSZXF1ZXN0TWV0aG9kIiwiaXNEeW5hbWljSW5zdGFudGlhdGlvbiIsIkZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kIiwiUHV0IiwiY2hhbmdlIiwidXBsb2FkU3RyZWFtIiwiYWZ0ZXJEaWFsb2dDbG9zZSIsInVwbG9hZFN0YXJ0IiwiZGVsZXRlQnV0dG9uIiwicmVtb3ZlU3RyZWFtIiwiRmlsZVdyYXBwZXIiLCJ1cGxvYWRVcmwiLCJwcm9wZXJ0eVBhdGgiLCJmaWxlbmFtZSIsIm1lZGlhVHlwZSIsImZpZWxkR3JvdXBJZHMiLCJ2YWxpZGF0ZUZpZWxkR3JvdXAiLCJDdXN0b21EYXRhIiwiZGF0YVNvdXJjZVBhdGgiLCJnZXRMaW5rVGVtcGxhdGUiLCJsaW5rVXJsIiwiaWNvblVybCIsImxpbmtBY3RpdmVkIiwibGlua1RhcmdldCIsImNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UiLCJhY2Nlc3NpYmxlUm9sZSIsIkxpbmtBY2Nlc3NpYmxlUm9sZSIsIm9uRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoIiwiaHRtbDVMaW5rVGFyZ2V0IiwiSFRNTDUiLCJMaW5rVGFyZ2V0IiwibGlua0JpbmRpbmciLCJVcmwiLCJDb21tdW5pY2F0aW9uIiwiSXNFbWFpbEFkZHJlc3MiLCJJc1Bob25lTnVtYmVyIiwibGlua0lzRW1haWxBZGRyZXNzIiwibGlua0lzUGhvbmVOdW1iZXIiLCJwcm9wZXJ0eVZhbHVlQmluZGluZyIsIm1haWxCbG9ja0lkIiwidWlkIiwiRW1haWwiLCJtYWlsIiwiT2JqZWN0U3RhdHVzIiwib3BlbkV4dGVybmFsTGluayIsImFjdGl2ZSIsIndyYXAiLCJnZXRGb3JlaWduS2V5Rm9yQ3VzdG9tRGF0YSIsInJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5IiwiUXVpY2tWaWV3IiwiZ2V0UmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkiLCJ0YXJnZXROYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldEVudGl0eVR5cGUiLCJuYXZpZ2F0aW9uUHJvcGVydGllcyIsInRhcmdldE5hdlByb3AiLCJmaW5kIiwibmF2UHJvcCIsInJlZkNvbnN0cmFpbnQiLCJyZWZlcmVudGlhbENvbnN0cmFpbnQiLCJrZXkiLCJsZW5ndGgiLCJ0YXJnZXRQcm9wZXJ0eSIsImtleVRvRmV0Y2giLCJnZXRGb3JlaWduS2V5VmFsdWVFeHByZXNzaW9uIiwiZm9yZWlnbktleVJlbGF0aXZlUGF0aCIsImV4cHJlc3Npb24iLCJfdHlwZSIsImlmRWxzZSIsImNvbnN0YW50IiwiZ2V0U3RhbmRhcmRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlIiwibGlua1ByZXNzZWQiLCJnZXRNZGNMaW5rRm9yUXVpY2tWaWV3IiwiZ2V0Q29uZGl0aW9uYWxMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlIiwiVGV4dExpbmsiLCJzaG93QXNMaW5rIiwic2VtYW50aWNPYmplY3QiLCJnZXRDb25kaXRpb25hbFdyYXBwZXJGb3JRdWlja1ZpZXdUZW1wbGF0ZSIsImdldExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUiLCJyZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0IiwidGV4dEZyb21WYWx1ZUxpc3QiLCJnZXRRdWlja1ZpZXdDb25kaXRpb24iLCJnZXRUZXh0VGVtcGxhdGUiLCJyZW5kZXJXaGl0ZXNwYWNlIiwiY3VzdG9tZGF0YSIsImRpc3BsYXlNb2RlIiwiZ2V0UGFzc3dvcmRUZW1wbGF0ZSIsInRleHRCaW5kaW5nIiwiZ2V0VGV4dEJpbmRpbmciLCJ0ZXh0RXhwcmVzc2lvbiIsImlzUGF0aEluTW9kZWxFeHByZXNzaW9uIiwiZm9ybWF0UmVzdWx0IiwidmFsdWVGb3JtYXR0ZXJzIiwiZm9ybWF0UGFzc3dvcmRUZXh0IiwiZ2V0T2JqZWN0SWRlbnRpZmllciIsInRpdGxlQWN0aXZlIiwiaGFzUXVpY2tWaWV3IiwiaWRlbnRpZmllciIsIk9iamVjdElkZW50aWZpZXIiLCJ0aXRsZSIsImlkZW50aWZpZXJUaXRsZSIsImlkZW50aWZpZXJUZXh0IiwidGl0bGVQcmVzcyIsImhhc1NpdHVhdGlvbnNJbmRpY2F0b3IiLCJfanN4cyIsIkhCb3giLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJ3aWR0aCIsIlNpdHVhdGlvbnNJbmRpY2F0b3IiLCJzaXR1YXRpb25zSW5kaWNhdG9yUHJvcGVydHlQYXRoIiwic2hvd0Vycm9ySW5kaWNhdG9yIiwic2hvd0Vycm9yT2JqZWN0U3RhdHVzIiwiVkJveCIsInN0YXRlIiwiZ2V0T2JqZWN0U3RhdHVzIiwib2JqZWN0U3RhdHVzIiwicmVxdWlyZWRIZWxwZXIiLCJkYXRhTW9kZWxPYmplY3RQYXRoIiwiZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzIiwiZW5oYW5jZWRWYWx1ZURhdGFNb2RlbFBhdGgiLCJlbmhhbmNlRGF0YU1vZGVsUGF0aCIsInRhcmdldE9iamVjdCIsIlZhbHVlIiwiY3JpdGljYWxpdHlJY29uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uIiwiYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvciIsImNvbnRlbnQiLCJ0ZXh0QWxpZ24iLCJpc0FjdGl2ZSIsInByZXNzQWN0aW9uIiwiY3JlYXRlQ29udGVudCIsImdldExhYmVsU2VtYW50aWNLZXkiLCJlbXBoYXNpemVkIiwiZGVzaWduIiwiaGFzUXVpY2t2aWV3IiwiYWRkRHJhZnRJbmRpY2F0b3IiLCJzZW1hbnRpY0tleVRlbXBsYXRlIiwiZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoIiwiZ2V0TWFyZ2luQ2xhc3MiLCJjb21wYWN0U2VtYW50aWNLZXkiLCJEcmFmdEluZGljYXRvciIsImRyYWZ0SW5kaWNhdG9yVHlwZSIsIk9iamVjdE1hcmtlclZpc2liaWxpdHkiLCJJY29uQW5kVGV4dCIsImRyYWZ0SW5kaWNhdG9yVmlzaWJsZSIsImRhdGFNb2RlbFBhdGhFeHRlcm5hbElEIiwicmVwbGFjZVdoaXRlc3BhY2UiLCJxdWlja1ZpZXdUeXBlIiwiZHluYW1pY1NlbWFudGljT2JqZWN0cyIsImxpc3RPZkR5bmFtaWNTZW1hbnRpY09iamVjdHMiLCJzZW1hbnRpY09iamVjdEV4cHJlc3Npb24iLCJwdXNoIiwic2VtYW50aWNPYmplY3RzUGF0aCIsImNvbmNhdCIsImhhc1NlbWFudGljT2JqZWN0cyIsImdldFRlbXBsYXRlIiwiaW5uZXJGaWVsZENvbnRlbnQiLCJkaXNwbGF5U3R5bGUiXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkRpc3BsYXlTdHlsZS50c3giXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBBY3Rpb24sIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbiwgUHJvcGVydHksIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgdHlwZSB7XG5cdERhdGFGaWVsZCxcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRUeXBlcyxcblx0RGF0YUZpZWxkV2l0aFVybCxcblx0RGF0YVBvaW50VHlwZVxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5pbXBvcnQgeyBVSUFubm90YXRpb25UeXBlcyB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB1aWQgZnJvbSBcInNhcC9iYXNlL3V0aWwvdWlkXCI7XG5pbXBvcnQgdHlwZSB7IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7XG5cdGFuZCxcblx0Y29tcGlsZUV4cHJlc3Npb24sXG5cdGNvbnN0YW50LFxuXHRlcXVhbCxcblx0Zm9ybWF0UmVzdWx0LFxuXHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24sXG5cdGlmRWxzZSxcblx0aXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24sXG5cdG5vdCxcblx0cGF0aEluTW9kZWwsXG5cdHJlc29sdmVCaW5kaW5nU3RyaW5nXG59IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IEZvcm1FbGVtZW50V3JhcHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udHJvbHMvRm9ybUVsZW1lbnRXcmFwcGVyXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQgeyBhaUljb24sIGlzQWN0aW9uQUlPcGVyYXRpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdmFsdWVGb3JtYXR0ZXJzIGZyb20gXCJzYXAvZmUvY29yZS9mb3JtYXR0ZXJzL1ZhbHVlRm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCB7XG5cdGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZSxcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcixcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlJY29uXG59IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0NyaXRpY2FsaXR5Rm9ybWF0dGVyc1wiO1xuaW1wb3J0IHR5cGUgeyBEYXRhTW9kZWxPYmplY3RQYXRoIH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvRGF0YU1vZGVsUGF0aEhlbHBlclwiO1xuaW1wb3J0IHsgZW5oYW5jZURhdGFNb2RlbFBhdGgsIGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBoYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL1VJRm9ybWF0dGVyc1wiO1xuaW1wb3J0IEZpZWxkSGVscGVyIGZyb20gXCJzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkSGVscGVyXCI7XG5pbXBvcnQgKiBhcyBGaWVsZFRlbXBsYXRpbmcgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRUZW1wbGF0aW5nXCI7XG5pbXBvcnQgdHlwZSB7IEZpZWxkQmxvY2tQcm9wZXJ0aWVzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvaW50ZXJuYWwvZmllbGQvRmllbGRTdHJ1Y3R1cmVIZWxwZXJcIjtcbmltcG9ydCBRdWlja1ZpZXcgZnJvbSBcInNhcC9mZS9tYWNyb3MvcXVpY2tWaWV3L1F1aWNrVmlld1wiO1xuaW1wb3J0IEF2YXRhciBmcm9tIFwic2FwL20vQXZhdGFyXCI7XG5pbXBvcnQgQnV0dG9uIGZyb20gXCJzYXAvbS9CdXR0b25cIjtcbmltcG9ydCBFeHBhbmRhYmxlVGV4dCBmcm9tIFwic2FwL20vRXhwYW5kYWJsZVRleHRcIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgSW1hZ2VDdXN0b21EYXRhIGZyb20gXCJzYXAvbS9JbWFnZUN1c3RvbURhdGFcIjtcbmltcG9ydCBMYWJlbCBmcm9tIFwic2FwL20vTGFiZWxcIjtcbmltcG9ydCB0eXBlIHsgTGluayRQcmVzc0V2ZW50IH0gZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBMaW5rIGZyb20gXCJzYXAvbS9MaW5rXCI7XG5pbXBvcnQgT2JqZWN0SWRlbnRpZmllciBmcm9tIFwic2FwL20vT2JqZWN0SWRlbnRpZmllclwiO1xuaW1wb3J0IE9iamVjdFN0YXR1cyBmcm9tIFwic2FwL20vT2JqZWN0U3RhdHVzXCI7XG5pbXBvcnQgVGV4dCBmcm9tIFwic2FwL20vVGV4dFwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IExpbmtBY2Nlc3NpYmxlUm9sZSwgT2JqZWN0TWFya2VyVmlzaWJpbGl0eSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIEV2ZW50UHJvdmlkZXIgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50UHJvdmlkZXJcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCB0eXBlIHsgQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCB9IGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IEljb24gZnJvbSBcInNhcC91aS9jb3JlL0ljb25cIjtcbmltcG9ydCB0eXBlIE1kY0xpbmsgZnJvbSBcInNhcC91aS9tZGMvTGlua1wiO1xuaW1wb3J0IEZpZWxkRWRpdE1vZGUgZnJvbSBcInNhcC91aS9tZGMvZW51bXMvRmllbGRFZGl0TW9kZVwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL29kYXRhL3Y0L0NvbnRleHRcIjtcbmltcG9ydCB0eXBlIHtcblx0RmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCxcblx0RmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZENvbXBsZXRlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRVcGxvYWRTdGFydEV2ZW50XG59IGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJcIjtcbmltcG9ydCBGaWxlVXBsb2FkZXIgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kIGZyb20gXCJzYXAvdWkvdW5pZmllZC9GaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZFwiO1xuaW1wb3J0IENvbnRhY3QgZnJvbSBcIi4uLy4uL2NvbnRhY3QvQ29udGFjdFwiO1xuaW1wb3J0IEVtYWlsIGZyb20gXCIuLi8uLi9jb250YWN0L0VtYWlsXCI7XG5pbXBvcnQgQ29uZGl0aW9uYWxXcmFwcGVyIGZyb20gXCIuLi8uLi9jb250cm9scy9Db25kaXRpb25hbFdyYXBwZXJcIjtcbmltcG9ydCBGaWxlV3JhcHBlciBmcm9tIFwiLi4vLi4vY29udHJvbHMvRmlsZVdyYXBwZXJcIjtcbmltcG9ydCBOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3kgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL051bWJlcldpdGhVbml0T3JDdXJyZW5jeVwiO1xuaW1wb3J0IFRleHRMaW5rIGZyb20gXCIuLi8uLi9jb250cm9scy9UZXh0TGlua1wiO1xuaW1wb3J0IERyYWZ0SW5kaWNhdG9yIGZyb20gXCIuLi8uLi9kcmFmdEluZGljYXRvci9EcmFmdEluZGljYXRvclwiO1xuaW1wb3J0IFNpdHVhdGlvbnNJbmRpY2F0b3IgZnJvbSBcIi4uLy4uL3NpdHVhdGlvbnMvU2l0dWF0aW9uc0luZGljYXRvclwiO1xuaW1wb3J0IERhdGFQb2ludCBmcm9tIFwiLi4vRGF0YVBvaW50XCI7XG5pbXBvcnQgRGF0YVBvaW50Rm9ybWF0T3B0aW9ucyBmcm9tIFwiLi4vRGF0YVBvaW50Rm9ybWF0T3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBEaXNwbGF5U3R5bGUgYXMgRGlzcGxheVN0eWxlVHlwZSB9IGZyb20gXCIuL0ZpZWxkU3R5bGVzXCI7XG5cbmNvbnN0IERpc3BsYXlTdHlsZSA9IHtcblx0Z2V0UHJlY2lzaW9uRm9yQ3VycmVuY3koZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogbnVtYmVyIHtcblx0XHRsZXQgc2NhbGUgPSBmaWVsZC5wcm9wZXJ0eS5zY2FsZSA/PyA1O1xuXHRcdGlmICh0eXBlb2Ygc2NhbGUgIT09IFwibnVtYmVyXCIpIHtcblx0XHRcdC8vIFNjYWxlIGNhbiBiZSBcInZhcmlhYmxlXCIgYnV0IGl0J3Mgbm90IHR5cGVkIGFzIHN1Y2guIEluIHRoaXMgY2FzZSwgU2NhbGUgZXF1YWxzIHRoZSBwcmVjaXNpb25cblx0XHRcdHNjYWxlID0gZmllbGQucHJvcGVydHkucHJlY2lzaW9uID8/IDU7XG5cdFx0fVxuXHRcdHJldHVybiBNYXRoLm1pbihzY2FsZSwgNSk7XG5cdH0sXG5cblx0Z2V0Q3VycmVuY3lPclVuaXRDb250cm9sKFxuXHRcdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0XHRjdXJyZW5jeU9yVW5pdDogc3RyaW5nIHwgQ29udHJvbCxcblx0XHR2aXNpYmxlRXhwcmVzc2lvbj86IEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxib29sZWFuPlxuXHQpOiBDb250cm9sIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PExpbmtcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZJRUxEUlVOVElNRTogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lJ31cIlxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfU0hPV19ERVRBSUxTfVwiXG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmRpc3BsYXlBZ2dyZWdhdGlvbkRldGFpbHN9XG5cdFx0XHRcdHZpc2libGU9e3Zpc2libGVFeHByZXNzaW9ufVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGRlcGVuZGVudHM6IChjdXJyZW5jeU9yVW5pdCBhcyBDb250cm9sKT8uY2xvbmUgPyAoY3VycmVuY3lPclVuaXQgYXMgQ29udHJvbCkuY2xvbmUoKSA6IGN1cnJlbmN5T3JVbml0XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0xpbms+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Ly8gV2UgZG9uJ3QgZGlzcGxheSBhbnl0aGluZyBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkXG5cdFx0Y29uc3QgcmVsYXRpdmVQcm9wZXJ0eVBhdGggPSBnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXHRcdGNvbnN0IG92ZXJhbGxWaXNpYmxlID0gbm90KGVxdWFsKHBhdGhJbk1vZGVsKHJlbGF0aXZlUHJvcGVydHlQYXRoKSwgdW5kZWZpbmVkKSk7XG5cdFx0Y29uc3QgY3VycmVuY3kgPSAoXG5cdFx0XHQ8TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5IG51bWJlcj17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSB1bml0T3JDdXJyZW5jeT17ZmllbGQudW5pdEJpbmRpbmdFeHByZXNzaW9ufSAvPlxuXHRcdCk7XG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDb25kaXRpb25hbFdyYXBwZXIgdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IGNvbmRpdGlvbj17ZmllbGQuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgYXMgdW5rbm93biBhcyBib29sZWFufT5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudFRydWU6IGN1cnJlbmN5LFxuXHRcdFx0XHRcdFx0Y29udGVudEZhbHNlOiB0aGlzLmdldEN1cnJlbmN5T3JVbml0Q29udHJvbChmaWVsZCwgY3VycmVuY3ksIG92ZXJhbGxWaXNpYmxlKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIGN1cnJlbmN5O1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBBdmF0YXIgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRBdmF0YXJUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBhdmF0YXJJZDtcblx0XHRpZiAoZmllbGQuX2ZsZXhJZCkge1xuXHRcdFx0YXZhdGFySWQgPSBmaWVsZC5fZmxleElkO1xuXHRcdH0gZWxzZSBpZiAoZmllbGQuaWRQcmVmaXgpIHtcblx0XHRcdGF2YXRhcklkID0gZ2VuZXJhdGUoW2ZpZWxkLmlkUHJlZml4LCBcIkZpZWxkLWNvbnRlbnRcIl0pO1xuXHRcdH1cblxuXHRcdGNvbnN0IGF2YXRhclZpc2libGUgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGQuZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTtcblxuXHRcdGNvbnN0IGF2YXRhclNyYyA9IEZpZWxkVGVtcGxhdGluZy5nZXRWYWx1ZUJpbmRpbmcoZmllbGQuZGF0YU1vZGVsUGF0aCwge30pO1xuXHRcdGNvbnN0IGF2YXRhckRpc3BsYXlTaGFwZSA9IEZpZWxkVGVtcGxhdGluZy5nZXRBdmF0YXJTaGFwZShmaWVsZC5kYXRhTW9kZWxQYXRoKTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8Rm9ybUVsZW1lbnRXcmFwcGVyIHZpc2libGU9e2F2YXRhclZpc2libGV9PlxuXHRcdFx0XHQ8QXZhdGFyXG5cdFx0XHRcdFx0aWQ9e2F2YXRhcklkfVxuXHRcdFx0XHRcdHNyYz17YXZhdGFyU3JjfVxuXHRcdFx0XHRcdGRpc3BsYXlTaXplPVwiU1wiXG5cdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luRW5kXCJcblx0XHRcdFx0XHRpbWFnZUZpdFR5cGU9XCJDb3ZlclwiXG5cdFx0XHRcdFx0ZGlzcGxheVNoYXBlPXthdmF0YXJEaXNwbGF5U2hhcGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGJ1dHRvbiB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldEJ1dHRvblRlbXBsYXRlOiAoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nID0+IHtcblx0XHRsZXQgaWNvbiA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNob3dJY29uVXJsID8/IGZhbHNlID8gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5JY29uVXJsIDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IHRleHQgPSAhKGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNob3dJY29uVXJsID8/IGZhbHNlKSA/IChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRUeXBlcykuTGFiZWwgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdG9vbHRpcCA9IGZpZWxkLmZvcm1hdE9wdGlvbnM/LnNob3dJY29uVXJsID8/IGZhbHNlID8gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5MYWJlbCA6IHVuZGVmaW5lZDtcblxuXHRcdGxldCBidXR0b25QcmVzcztcblx0XHRsZXQgYnV0dG9uSXNCb3VuZDtcblx0XHRsZXQgYnV0dG9uT3BlcmF0aW9uQXZhaWxhYmxlO1xuXHRcdGxldCBidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQ7XG5cdFx0bGV0IG5hdmlnYXRpb25BdmFpbGFibGU7XG5cblx0XHRpZiAoZmllbGQuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFjdGlvbikge1xuXHRcdFx0YnV0dG9uUHJlc3MgPSBmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uO1xuXG5cdFx0XHRidXR0b25Jc0JvdW5kID0gZmllbGQuY29udmVydGVkTWV0YVBhdGguQWN0aW9uVGFyZ2V0ID8gZmllbGQuY29udmVydGVkTWV0YVBhdGguQWN0aW9uVGFyZ2V0LmlzQm91bmQgOiB0cnVlO1xuXHRcdFx0YnV0dG9uT3BlcmF0aW9uQXZhaWxhYmxlID0gZmllbGQuY29udmVydGVkTWV0YVBhdGguQWN0aW9uVGFyZ2V0XG5cdFx0XHRcdD8gZmllbGQuY29udmVydGVkTWV0YVBhdGguQWN0aW9uVGFyZ2V0LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGVcblx0XHRcdFx0OiBcImZhbHNlXCI7XG5cdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgPyB1bmRlZmluZWQgOiBcImZhbHNlXCI7XG5cblx0XHRcdGlmIChidXR0b25PcGVyYXRpb25BdmFpbGFibGUgJiYgYnV0dG9uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSBcImZhbHNlXCIpIHtcblx0XHRcdFx0Y29uc3QgYWN0aW9uVGFyZ2V0ID0gZmllbGQuY29udmVydGVkTWV0YVBhdGguQWN0aW9uVGFyZ2V0IGFzIEFjdGlvbjtcblx0XHRcdFx0Y29uc3QgYmluZGluZ1BhcmFtTmFtZSA9IGFjdGlvblRhcmdldC5wYXJhbWV0ZXJzWzBdLm5hbWU7XG5cdFx0XHRcdC8vUVVBTE1TLCBuZWVkcyB0byBiZSBjaGVja2VkIHdoZXRoZXIgdGhpcyBtYWtlcyBzZW5zZSBhdCB0aGF0IHBsYWNlLCBtaWdodCBiZSBnb29kIGluIGEgZGVkaWNhdGVkIGhlbHBlciBmdW5jdGlvblxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8Ym9vbGVhbj4sXG5cdFx0XHRcdFx0XHRbXSxcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdChwYXRoOiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRcdFx0aWYgKHBhdGguc3RhcnRzV2l0aChiaW5kaW5nUGFyYW1OYW1lKSkge1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBwYXRoLnJlcGxhY2UoYmluZGluZ1BhcmFtTmFtZSArIFwiL1wiLCBcIlwiKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHQpXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdGJ1dHRvblByZXNzID0gZmllbGQuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhJQk47XG5cdFx0XHRuYXZpZ2F0aW9uQXZhaWxhYmxlID0gdHJ1ZTtcblx0XHRcdGlmIChcblx0XHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGg/LiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gJiZcblx0XHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGguTmF2aWdhdGlvbkF2YWlsYWJsZSAhPT0gdW5kZWZpbmVkICYmXG5cdFx0XHRcdFN0cmluZyhmaWVsZC5mb3JtYXRPcHRpb25zLmlnbm9yZU5hdmlnYXRpb25BdmFpbGFibGUpICE9PSBcInRydWVcIlxuXHRcdFx0KSB7XG5cdFx0XHRcdG5hdmlnYXRpb25BdmFpbGFibGUgPSBjb21waWxlRXhwcmVzc2lvbihnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oZmllbGQuY29udmVydGVkTWV0YVBhdGguTmF2aWdhdGlvbkF2YWlsYWJsZSkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGxldCBidXR0b24gPSBcIlwiO1xuXHRcdGlmIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKSB7XG5cdFx0XHRidXR0b24gPSAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC52aXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e3RleHR9XG5cdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRlbmFibGVkPXtuYXZpZ2F0aW9uQXZhaWxhYmxlfVxuXHRcdFx0XHRcdHRvb2x0aXA9e3Rvb2x0aXB9XG5cdFx0XHRcdFx0cHJlc3M9e2J1dHRvblByZXNzIGFzIHVua25vd24gYXMgKChvRXZlbnQ6IEV2ZW50PG9iamVjdCwgRXZlbnRQcm92aWRlcj4pID0+IHZvaWQpIHwgdW5kZWZpbmVkfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2UgaWYgKFxuXHRcdFx0RmllbGRIZWxwZXIuaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCxcblx0XHRcdFx0YnV0dG9uSXNCb3VuZCxcblx0XHRcdFx0YnV0dG9uT3BlcmF0aW9uQXZhaWxhYmxlIGFzIGJvb2xlYW4gfCB1bmRlZmluZWRcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdGxldCBlbmFibGVkOiBzdHJpbmcgfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IEZpZWxkSGVscGVyLmlzRGF0YUZpZWxkQWN0aW9uQnV0dG9uRW5hYmxlZChcblx0XHRcdFx0ZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRidXR0b25Jc0JvdW5kIGFzIHVua25vd24gYXMgYm9vbGVhbixcblx0XHRcdFx0YnV0dG9uT3BlcmF0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQgYXMgc3RyaW5nXG5cdFx0XHQpO1xuXG5cdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93KSB7XG5cdFx0XHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHR5cGUgPSBidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUJ1dHRvblR5cGUoZmllbGQuZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTtcblx0XHRcdGljb24gPSBpY29uID8/IChpc0FjdGlvbkFJT3BlcmF0aW9uKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZEZvckFjdGlvbikgPyBhaUljb24gOiB1bmRlZmluZWQpO1xuXG5cdFx0XHRidXR0b24gPSAoXG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRjbGFzcz17ZmllbGQuY2xhc3N9XG5cdFx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRcdHRvb2x0aXA9e3Rvb2x0aXB9XG5cdFx0XHRcdFx0cHJlc3M9e2J1dHRvblByZXNzIGFzIHVua25vd24gYXMgKChvRXZlbnQ6IEV2ZW50PG9iamVjdCwgRXZlbnRQcm92aWRlcj4pID0+IHZvaWQpIHwgdW5kZWZpbmVkfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQudmlzaWJsZX1cblx0XHRcdFx0XHR0eXBlPXt0eXBlfVxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIGJ1dHRvbjtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDb250YWN0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0Q29udGFjdFRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29udGFjdE1ldGFQYXRoID0gZmllbGQubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIiwgZmllbGQubWV0YVBhdGgpO1xuXHRcdGNvbnN0IGNvbnRhY3RWaXNpYmxlID0gRmllbGRUZW1wbGF0aW5nLmdldFZpc2libGVFeHByZXNzaW9uKGZpZWxkLmRhdGFNb2RlbFBhdGggYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxEYXRhUG9pbnRUeXBlPik7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PENvbnRhY3Rcblx0XHRcdFx0aWRQcmVmaXg9e2ZpZWxkLmlkUHJlZml4fVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnl9XG5cdFx0XHRcdG1ldGFQYXRoPXtjb250YWN0TWV0YVBhdGguZ2V0UGF0aCgpfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGguZ2V0UGF0aCgpfVxuXHRcdFx0XHRfZmxleElkPXtmaWVsZC5fZmxleElkfVxuXHRcdFx0XHR2aXNpYmxlPXtjb250YWN0VmlzaWJsZX1cblx0XHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yPXtmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvcn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBpbm5lcnBhcnQgb2YgdGhlIGRhdGEgcG9pbnQgdG8gYmUgdXNlZCBpbiBnZXREYXRhUG9pbnRUZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gd2l0aENvbmRpdGlvbmFsV3JhcHBlciBCb29sZWFuIHZhbHVlIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBEYXRhUG9pbnRcblx0ICogXHRcdFx0XHRcdCAgXHRcdFx0c2hhbGwgYmUgZ2VuZXJhdGVkIGZvciB0aGUgY29uZGl0aW9uYWwgd3JhcHBlciBjYXNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcywgd2l0aENvbmRpdGlvbmFsV3JhcHBlcjogYm9vbGVhbik6IHN0cmluZyB7XG5cdFx0Y29uc3QgY29udmVydGVkRGF0YUZpZWxkID0gTWV0YU1vZGVsQ29udmVydGVyLmNvbnZlcnRNZXRhTW9kZWxDb250ZXh0KGZpZWxkLm1ldGFQYXRoKSBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzO1xuXG5cdFx0Y29uc3QgbWV0YVBhdGggPVxuXHRcdFx0Y29udmVydGVkRGF0YUZpZWxkLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JBbm5vdGF0aW9uXG5cdFx0XHRcdD8gZmllbGQubWV0YVBhdGguZ2V0TW9kZWwoKS5jcmVhdGVCaW5kaW5nQ29udGV4dChcIlRhcmdldC8kQW5ub3RhdGlvblBhdGhcIiwgZmllbGQubWV0YVBhdGgpXG5cdFx0XHRcdDogZmllbGQubWV0YVBhdGg7XG5cblx0XHRjb25zdCBmb3JtYXRPcHRpb25zID0ge1xuXHRcdFx0bWVhc3VyZURpc3BsYXlNb2RlOiBmaWVsZC5mb3JtYXRPcHRpb25zLm1lYXN1cmVEaXNwbGF5TW9kZSxcblx0XHRcdHNob3dFbXB0eUluZGljYXRvcjogZmllbGQuZm9ybWF0T3B0aW9ucy5zaG93RW1wdHlJbmRpY2F0b3Jcblx0XHR9O1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxEYXRhUG9pbnRcblx0XHRcdFx0aWRQcmVmaXg9e3dpdGhDb25kaXRpb25hbFdyYXBwZXIgPyB1bmRlZmluZWQgOiBmaWVsZC5pZFByZWZpeH1cblx0XHRcdFx0dmlzaWJsZT17KCF3aXRoQ29uZGl0aW9uYWxXcmFwcGVyID8gZmllbGQuZGlzcGxheVZpc2libGUgOiB1bmRlZmluZWQpIGFzIHVua25vd24gYXMgc3RyaW5nIHwgdW5kZWZpbmVkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgPyBmaWVsZC5hcmlhTGFiZWxsZWRCeSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0bWV0YVBhdGg9e21ldGFQYXRoLmdldFBhdGgoKX1cblx0XHRcdFx0Y29udGV4dFBhdGg9e2ZpZWxkLmNvbnRleHRQYXRoPy5nZXRQYXRoKCl9XG5cdFx0XHRcdHZhbHVlPXtmaWVsZC52YWx1ZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRmb3JtYXRPcHRpb25zOiA8RGF0YVBvaW50Rm9ybWF0T3B0aW9ucyB7Li4uZm9ybWF0T3B0aW9uc30gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvRGF0YVBvaW50PlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgRGF0YVBvaW50IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RGF0YVBvaW50VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRpZiAoKGZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgPz8gZmFsc2UpICYmIChmaWVsZC5oYXNVbml0T3JDdXJyZW5jeSA/PyBmYWxzZSkpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxDb25kaXRpb25hbFdyYXBwZXIgdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IGNvbmRpdGlvbj17ZmllbGQuaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQgYXMgdW5rbm93biBhcyBib29sZWFufT5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudFRydWU6IHRoaXMuZ2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkLCB0cnVlKSxcblx0XHRcdFx0XHRcdGNvbnRlbnRGYWxzZTogdGhpcy5nZXRDdXJyZW5jeU9yVW5pdENvbnRyb2woZmllbGQsIHRoaXMuZ2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkLCB0cnVlKSlcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB0aGlzLmdldERhdGFQb2ludElubmVyUGFydChmaWVsZCwgZmFsc2UpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBFeHBhbmRhYmxlVGV4dCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldEV4cGFuZGFibGVUZXh0KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxFeHBhbmRhYmxlVGV4dFxuXHRcdFx0XHRpZD17ZmllbGQ/LmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZD8uZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdG92ZXJmbG93TW9kZT17ZmllbGQ/LmZvcm1hdE9wdGlvbnM/LnRleHRFeHBhbmRCZWhhdmlvckRpc3BsYXl9XG5cdFx0XHRcdG1heENoYXJhY3RlcnM9e2ZpZWxkPy5mb3JtYXRPcHRpb25zPy50ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXl9XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQ/LmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdC8+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBGaWxlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RmlsZVRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGlubmVyRmlsZVBhcnQ7XG5cblx0XHRjb25zdCBmaWxlU3RyZWFtTm90RW1wdHkgPSBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdG5vdChlcXVhbChwYXRoSW5Nb2RlbChgJHtmaWVsZC5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGh9QG9kYXRhLm1lZGlhQ29udGVudFR5cGVgKSwgbnVsbCkpXG5cdFx0KTtcblxuXHRcdGNvbnN0IGZpbGVGaWxlbmFtZUV4cHJlc3Npb24gPSBmaWVsZC5maWxlRmlsZW5hbWVFeHByZXNzaW9uID8gXCJ7IHBhdGg6ICdcIiArIGZpZWxkLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gKyBcIicgfVwiIDogXCJcIjtcblxuXHRcdC8vIEZpbGVXcmFwcGVyXG5cdFx0Y29uc3QgZmlsZVVwbG9hZFVybCA9IEZpZWxkVGVtcGxhdGluZy5nZXRWYWx1ZUJpbmRpbmcoZmllbGQuZGF0YU1vZGVsUGF0aCwge30pO1xuXHRcdGNvbnN0IGZpbGVGaWxlbmFtZVBhdGggPSAoZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQ29udGVudERpc3Bvc2l0aW9uPy5GaWxlbmFtZSBhcyBQYXRoQW5ub3RhdGlvbkV4cHJlc3Npb248c3RyaW5nPik/LnBhdGg7XG5cdFx0Y29uc3QgZmlsZU1lZGlhVHlwZSA9XG5cdFx0XHRmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGUgJiZcblx0XHRcdGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGUpKTtcblxuXHRcdC8vIHRlbXBsYXRlOmlmXG5cdFx0Y29uc3QgZmlsZUlzSW1hZ2UgPVxuXHRcdFx0ISFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5VST8uSXNJbWFnZVVSTCB8fFxuXHRcdFx0ISFmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5VST8uSXNJbWFnZSB8fFxuXHRcdFx0L2ltYWdlXFwvL2kudGVzdChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5NZWRpYVR5cGU/LnRvU3RyaW5nKCkgPz8gXCJcIik7XG5cblx0XHQvLyBBdmF0YXJcblx0XHRjb25zdCBmaWxlQXZhdGFyU3JjID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgZmlsZUF2YXRhckRpc3BsYXlTaGFwZSA9IEZpZWxkVGVtcGxhdGluZy5nZXRBdmF0YXJTaGFwZShmaWVsZC5kYXRhTW9kZWxQYXRoKTtcblxuXHRcdC8vIEljb25cblx0XHRjb25zdCBmaWxlSWNvblNyYyA9IEZpZWxkSGVscGVyLmdldFBhdGhGb3JJY29uU291cmNlKGZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aCk7XG5cblx0XHQvLyBMaW5rXG5cdFx0Y29uc3QgZmlsZUxpbmtUZXh0ID0gRmllbGRIZWxwZXIuZ2V0RmlsZW5hbWVFeHByKGZpbGVGaWxlbmFtZUV4cHJlc3Npb24sIFwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX05PRklMRU5BTUVfVEVYVH1cIik7XG5cdFx0Y29uc3QgZmlsZUxpbmtIcmVmID0gRmllbGRIZWxwZXIuZ2V0RG93bmxvYWRVcmwoZmlsZVVwbG9hZFVybCA/PyBcIlwiKTtcblxuXHRcdC8vIFRleHRcblx0XHRjb25zdCBmaWxlVGV4dFZpc2libGUgPSBjb21waWxlRXhwcmVzc2lvbihlcXVhbChwYXRoSW5Nb2RlbChgJHtmaWVsZC5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGh9QG9kYXRhLm1lZGlhQ29udGVudFR5cGVgKSwgbnVsbCkpO1xuXG5cdFx0bGV0IGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcztcblx0XHQvLyBGaWxlVXBsb2FkZXJcblx0XHRpZiAoZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZT8uQWNjZXB0YWJsZU1lZGlhVHlwZXMpIHtcblx0XHRcdGNvbnN0IGFjY2VwdGVkVHlwZXMgPSBBcnJheS5mcm9tKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmUuQWNjZXB0YWJsZU1lZGlhVHlwZXMgYXMgdW5rbm93biBhcyBzdHJpbmdbXSkubWFwKFxuXHRcdFx0XHQodHlwZSkgPT4gYCcke3R5cGV9J2Bcblx0XHRcdCk7XG5cdFx0XHRmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXMgPSBgez1vZGF0YS5jb2xsZWN0aW9uKFske2FjY2VwdGVkVHlwZXMuam9pbihcIixcIil9XSl9YDsgLy8gVGhpcyBkb2VzIG5vdCBmZWVsIHJpZ2h0LCBidXQgZm9sbG93cyB0aGUgbG9naWMgb2YgQW5ub3RhdGlvbkhlbHBlciN2YWx1ZVxuXHRcdH1cblx0XHRjb25zdCBmaWxlTWF4aW11bVNpemUgPSBGaWVsZEhlbHBlci5jYWxjdWxhdGVNQmZyb21CeXRlKGZpZWxkLnByb3BlcnR5Lm1heExlbmd0aCk7XG5cblx0XHRpZiAoZmlsZUlzSW1hZ2UpIHtcblx0XHRcdGlubmVyRmlsZVBhcnQgPSB7XG5cdFx0XHRcdGF2YXRhcjogKFxuXHRcdFx0XHRcdDxBdmF0YXJcblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0c3JjPXtmaWxlQXZhdGFyU3JjfVxuXHRcdFx0XHRcdFx0ZGlzcGxheVNpemU9XCJTXCJcblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwVWlTbWFsbE1hcmdpbkVuZFwiXG5cdFx0XHRcdFx0XHRpbWFnZUZpdFR5cGU9XCJDb3ZlclwiXG5cdFx0XHRcdFx0XHRkaXNwbGF5U2hhcGU9e2ZpbGVBdmF0YXJEaXNwbGF5U2hhcGV9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEltYWdlQ3VzdG9tRGF0YSBwYXJhbU5hbWU9XCJ4Y2FjaGVcIiAvPlxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L0F2YXRhcj5cblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aW5uZXJGaWxlUGFydCA9IHtcblx0XHRcdFx0aWNvbjogPEljb24gc3JjPXtmaWxlSWNvblNyY30gY2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luRW5kXCIgdmlzaWJsZT17ZmlsZVN0cmVhbU5vdEVtcHR5fSAvPixcblx0XHRcdFx0bGluazogPExpbmsgdGV4dD17ZmlsZUxpbmtUZXh0fSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPXtmaWxlTGlua0hyZWZ9IHZpc2libGU9e2ZpbGVTdHJlYW1Ob3RFbXB0eX0gd3JhcHBpbmc9XCJ0cnVlXCIgLz4sXG5cdFx0XHRcdHRleHQ6IDxUZXh0IGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfSB0ZXh0PVwiXCIgdmlzaWJsZT17ZmlsZVRleHRWaXNpYmxlfSAvPlxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRpZiAoKGZpZWxkLmVkaXRNb2RlID8/IGZpZWxkLmNvbXB1dGVkRWRpdE1vZGUpICE9PSBGaWVsZEVkaXRNb2RlLkRpc3BsYXkpIHtcblx0XHRcdGNvbnN0IGJlZm9yZURpYWxvZ09wZW4gPSBmaWVsZC5jb2xsYWJvcmF0aW9uRW5hYmxlZCA/IGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyIDogdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgYWZ0ZXJEaWFsb2dPcGVuID0gZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgPyBmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZUNsb3NlVXBsb2FkZXIgOiB1bmRlZmluZWQ7XG5cblx0XHRcdGlubmVyRmlsZVBhcnQgPSB7XG5cdFx0XHRcdC4uLmlubmVyRmlsZVBhcnQsXG5cdFx0XHRcdGZpbGVVcGxvYWRlcjogKFxuXHRcdFx0XHRcdDxGaWxlVXBsb2FkZXJcblx0XHRcdFx0XHRcdG5hbWU9XCJGRVY0RmlsZVVwbG9hZFwiXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdFx0XHRidXR0b25Pbmx5PVwidHJ1ZVwiXG5cdFx0XHRcdFx0XHRpY29uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdFx0bXVsdGlwbGU9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX1VQTE9BRF9CVVRUT05fVE9PTFRJUH1cIlxuXHRcdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vdXBsb2FkXCJcblx0XHRcdFx0XHRcdHN0eWxlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdFx0c2VuZFhIUj1cInRydWVcIlxuXHRcdFx0XHRcdFx0dXNlTXVsdGlwYXJ0PVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0c2FtZUZpbGVuYW1lQWxsb3dlZD1cInRydWVcIlxuXHRcdFx0XHRcdFx0bWltZVR5cGU9e2ZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlc31cblx0XHRcdFx0XHRcdHR5cGVNaXNzbWF0Y2g9e1xuXHRcdFx0XHRcdFx0XHRmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZVR5cGVNaXNzbWF0Y2ggYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50KSA9PiB2b2lkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRtYXhpbXVtRmlsZVNpemU9e2ZpbGVNYXhpbXVtU2l6ZX1cblx0XHRcdFx0XHRcdGZpbGVTaXplRXhjZWVkPXtcblx0XHRcdFx0XHRcdFx0ZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVGaWxlU2l6ZUV4Y2VlZCBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50KSA9PiB2b2lkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR1cGxvYWRPbkNoYW5nZT1cImZhbHNlXCJcblx0XHRcdFx0XHRcdHVwbG9hZENvbXBsZXRlPXtcblx0XHRcdFx0XHRcdFx0ZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVVcGxvYWRDb21wbGV0ZSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRVcGxvYWRDb21wbGV0ZUV2ZW50KSA9PiB2b2lkXG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRodHRwUmVxdWVzdE1ldGhvZD17ZmllbGQuaXNEeW5hbWljSW5zdGFudGlhdGlvbiA/IEZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kLlB1dCA6IFwiUHV0XCJ9XG5cdFx0XHRcdFx0XHRjaGFuZ2U9e2ZpZWxkLmV2ZW50SGFuZGxlcnMudXBsb2FkU3RyZWFtIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJENoYW5nZUV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0YmVmb3JlRGlhbG9nT3Blbj17YmVmb3JlRGlhbG9nT3BlbiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0YWZ0ZXJEaWFsb2dDbG9zZT17YWZ0ZXJEaWFsb2dPcGVuIGFzIHVua25vd24gYXMgKG9FdmVudDogRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHR1cGxvYWRTdGFydD17ZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVPcGVuVXBsb2FkZXIgYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkU3RhcnRFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0XHRkZWxldGVCdXR0b246IChcblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpY29uPVwic2FwLWljb246Ly9zeXMtY2FuY2VsXCJcblx0XHRcdFx0XHRcdHR5cGU9XCJUcmFuc3BhcmVudFwiXG5cdFx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5yZW1vdmVTdHJlYW0gYXMgdW5rbm93biBhcyAob0V2ZW50OiBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdHRvb2x0aXA9XCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfREVMRVRFX0JVVFRPTl9UT09MVElQfVwiXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5lZGl0YWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtmaWxlU3RyZWFtTm90RW1wdHl9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KVxuXHRcdFx0fTtcblx0XHR9XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PEZpbGVXcmFwcGVyXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0dmlzaWJsZT17ZmllbGQudmlzaWJsZX1cblx0XHRcdFx0dXBsb2FkVXJsPXtmaWxlVXBsb2FkVXJsfVxuXHRcdFx0XHRwcm9wZXJ0eVBhdGg9e2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1cblx0XHRcdFx0ZmlsZW5hbWU9e2ZpbGVGaWxlbmFtZVBhdGh9XG5cdFx0XHRcdG1lZGlhVHlwZT17ZmlsZU1lZGlhVHlwZX1cblx0XHRcdFx0ZmllbGRHcm91cElkcz17ZmllbGQuZmllbGRHcm91cElkc31cblx0XHRcdFx0dmFsaWRhdGVGaWVsZEdyb3VwPXtmaWVsZC5ldmVudEhhbmRsZXJzLnZhbGlkYXRlRmllbGRHcm91cCBhcyAob0V2ZW50OiBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT1cInNvdXJjZVBhdGhcIiB2YWx1ZT17ZmllbGQuZGF0YVNvdXJjZVBhdGh9IC8+LFxuXHRcdFx0XHRcdGlubmVyRmlsZVBhcnRcblx0XHRcdFx0fX1cblx0XHRcdDwvRmlsZVdyYXBwZXI+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBMaW5rIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGlua1RlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGxpbmtVcmw7XG5cdFx0bGV0IGljb25Vcmw7XG5cdFx0bGV0IGxpbmtBY3RpdmVkO1xuXHRcdHR5cGUgTGlua1RhcmdldCA9IFwiX2JsYW5rXCIgfCBcIl9zZWxmXCIgfCBcIl90b3BcIiB8IFwiX3BhcmVudFwiO1xuXHRcdGxldCBsaW5rVGFyZ2V0OiBMaW5rVGFyZ2V0IHwgdW5kZWZpbmVkO1xuXG5cdFx0c3dpdGNoIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSBhcyBzdHJpbmcpIHtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aEludGVudEJhc2VkTmF2aWdhdGlvbjpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCl9XG5cdFx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhJQk4gYXMgdW5rbm93biBhcyAob0V2ZW50OiBMaW5rJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aDpcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoTmF2aWdhdGlvblBhdGggYXMgdW5rbm93biBhcyAob0V2ZW50OiBMaW5rJFByZXNzRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXtmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cgPyBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIGFzIHVua25vd24gYXMgKG9FdmVudDogTGluayRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93ID8gVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhVcmw6XG5cdFx0XHRcdGNvbnN0IGh0bWw1TGlua1RhcmdldCA9IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkhUTUw1Py5MaW5rVGFyZ2V0O1xuXHRcdFx0XHRmaWVsZC50ZXh0ID0gRGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpO1xuXHRcdFx0XHRpY29uVXJsID0gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5JY29uVXJsXG5cdFx0XHRcdFx0PyBjb21waWxlRXhwcmVzc2lvbihcblx0XHRcdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0XHRcdChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRUeXBlcykuSWNvblVybCBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdCAgKVxuXHRcdFx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdFx0XHRjb25zdCBsaW5rQmluZGluZyA9IGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHQoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkV2l0aFVybCkuVXJsIGFzIHVua25vd24gYXMgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWU8U3RyaW5nPlxuXHRcdFx0XHQpO1xuXHRcdFx0XHRsaW5rVXJsID0gY29tcGlsZUV4cHJlc3Npb24obGlua0JpbmRpbmcpO1xuXHRcdFx0XHRsaW5rQWN0aXZlZCA9IGNvbXBpbGVFeHByZXNzaW9uKG5vdChlcXVhbChsaW5rQmluZGluZywgXCJcIikpKTtcblx0XHRcdFx0bGlua1RhcmdldCA9IGh0bWw1TGlua1RhcmdldCAmJiAoaHRtbDVMaW5rVGFyZ2V0LnRvU3RyaW5nKCkgYXMgTGlua1RhcmdldCk7XG5cdFx0fVxuXG5cdFx0aWYgKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zPy5Db21tdW5pY2F0aW9uPy5Jc0VtYWlsQWRkcmVzcyB8fCBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlcikge1xuXHRcdFx0Y29uc3QgbGlua0lzRW1haWxBZGRyZXNzID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGxpbmtJc1Bob25lTnVtYmVyID0gZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29tbXVuaWNhdGlvbj8uSXNQaG9uZU51bWJlciAhPT0gdW5kZWZpbmVkO1xuXHRcdFx0Y29uc3QgcHJvcGVydHlWYWx1ZUJpbmRpbmcgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmFsdWVCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIHt9KTtcblx0XHRcdGNvbnN0IG1haWxCbG9ja0lkID0gZmllbGQuZGlzcGxheVN0eWxlSWQgPyBmaWVsZC5kaXNwbGF5U3R5bGVJZCA6IGBtYWlsQmxvY2ske3VpZCgpfWA7XG5cdFx0XHRpZiAobGlua0lzRW1haWxBZGRyZXNzKSB7XG5cdFx0XHRcdGxpbmtVcmwgPSBgbWFpbHRvOiR7cHJvcGVydHlWYWx1ZUJpbmRpbmd9YDtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8RW1haWxcblx0XHRcdFx0XHRcdGlkPXttYWlsQmxvY2tJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdG1haWw9e3Byb3BlcnR5VmFsdWVCaW5kaW5nfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5ID8gZmllbGQuYXJpYUxhYmVsbGVkQnkgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmtJc1Bob25lTnVtYmVyKSB7XG5cdFx0XHRcdGxpbmtVcmwgPSBgdGVsOiR7cHJvcGVydHlWYWx1ZUJpbmRpbmd9YDtcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHR0ZXh0PXtEaXNwbGF5U3R5bGUuY29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZCl9XG5cdFx0XHRcdFx0XHRocmVmPXtsaW5rVXJsfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17bGlua0FjdGl2ZWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChpY29uVXJsKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRpY29uPXtpY29uVXJsfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub3BlbkV4dGVybmFsTGluayBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdGFjdGl2ZT17bGlua0FjdGl2ZWR9XG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogPEN1c3RvbURhdGEga2V5PXtcInVybFwifSB2YWx1ZT17bGlua1VybH0gLz5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0aHJlZj17bGlua1VybH1cblx0XHRcdFx0XHRlbmFibGVkPXtsaW5rQWN0aXZlZH1cblx0XHRcdFx0XHR0YXJnZXQ9e2xpbmtUYXJnZXQgPT09IHVuZGVmaW5lZCA/IFwiX3RvcFwiIDogbGlua1RhcmdldH1cblx0XHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcCA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZpZWxkLndyYXB9XG5cdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRmluZCB0aGUgZm9yZWlnbiBrZXkgb2YgdGFyZ2V0IGVudGl0eSB3aGljaCBxdWljayB2aWV3IEZhY2V0cyB3ZSB3YW50IHRvIGRpc3BsYXkuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgdGFyZ2V0IGVudGl0eVxuXHQgKi9cblx0Z2V0Rm9yZWlnbktleUZvckN1c3RvbURhdGEoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSA9IFF1aWNrVmlldy5nZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eShmaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0XHRpZiAocmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkpIHtcblx0XHRcdGNvbnN0IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gcmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkpO1xuXHRcdFx0Y29uc3QgcmVmQ29uc3RyYWludCA9IHRhcmdldE5hdlByb3A/LnJlZmVyZW50aWFsQ29uc3RyYWludDtcblx0XHRcdGNvbnN0IGtleSA9IHJlZkNvbnN0cmFpbnQ/Lmxlbmd0aCAmJiB0eXBlb2YgcmVmQ29uc3RyYWludFswXSA9PT0gXCJvYmplY3RcIiAmJiByZWZDb25zdHJhaW50WzBdLnRhcmdldFByb3BlcnR5O1xuXHRcdFx0Y29uc3Qga2V5VG9GZXRjaCA9IGtleSA/IGAke3JlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5fS8ke2tleX1gIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGtleVRvRmV0Y2ggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4ga2V5VG9GZXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBjaGVjayBleHByZXNzaW9uIGZvciBkaXNwbGF5aW5nIG9yIG5vdCBhIHF1aWNrdmlldy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSB0YXJnZXQgZW50aXR5XG5cdCAqL1xuXHRnZXRGb3JlaWduS2V5VmFsdWVFeHByZXNzaW9uKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZm9yZWlnbktleVJlbGF0aXZlUGF0aCA9IFF1aWNrVmlldy5nZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eShmaWVsZC5kYXRhTW9kZWxQYXRoKVxuXHRcdFx0PyB0aGlzLmdldEZvcmVpZ25LZXlGb3JDdXN0b21EYXRhKGZpZWxkKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB7XG5cdFx0XHRwYXRoOiBgJHtmb3JlaWduS2V5UmVsYXRpdmVQYXRofWAsXG5cdFx0XHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiXG5cdFx0fTtcblx0XHRyZXR1cm4gYCR7Y29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKGZvcmVpZ25LZXlSZWxhdGl2ZVBhdGgsIHVuZGVmaW5lZCksIGNvbnN0YW50KHRydWUpLCBub3QoZXF1YWwobnVsbCwgZXhwcmVzc2lvbikpKSl9YDtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGRpc3BsYXlcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB0ZXh0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxMaW5rXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXAgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBmaWVsZC53cmFwfVxuXHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0xpbms+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDb25kaXRpb25hbExpbmtUZW1wbGF0ZSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uIENvbmRpdGlvbiB0byBkaXNwbGF5IGEgTGluayBvciBhIFRleHRcblx0ICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gZGlzcGxheVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENvbmRpdGlvbmFsTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShcblx0XHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdFx0Y29uZGl0aW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHR0ZXh0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGV4dExpbmtcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHNob3dBc0xpbms9e2NvbmRpdGlvbiBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0PXtmaWVsZC5zZW1hbnRpY09iamVjdH1cblx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwID09PSB1bmRlZmluZWQgPyB0cnVlIDogZmllbGQud3JhcH1cblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogWzxDdXN0b21EYXRhIGtleT17XCJsb2FkVmFsdWVcIn0gdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz5dLFxuXHRcdFx0XHRcdGRlcGVuZGVudHM6IERpc3BsYXlTdHlsZS5nZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9UZXh0TGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbmRpdGlvbmFsTGlua1RlbXBsYXRlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBjb25kaXRpb24gQ29uZGl0aW9uIHRvIGRpc3BsYXkgYSBMaW5rIG9yIGEgVGV4dFxuXHQgKiBAcGFyYW0gY29udGVudFRydWUgVGhlIENvbnRyb2wgdG8gZGlzcGxheSBpbiBjYXNlIGNvbmRpdGlvbiBpcyB0cnVlXG5cdCAqIEBwYXJhbSBjb250ZW50RmFsc2UgVGhlIENvbnRyb2wgdG8gZGlzcGxheSBpbiBjYXNlIGNvbmRpdGlvbiBpcyBmYWxzZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENvbmRpdGlvbmFsV3JhcHBlckZvclF1aWNrVmlld1RlbXBsYXRlKFxuXHRcdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0XHRjb25kaXRpb246IHN0cmluZyxcblx0XHRjb250ZW50VHJ1ZTogc3RyaW5nLFxuXHRcdGNvbnRlbnRGYWxzZTogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb25kaXRpb25hbFdyYXBwZXIgdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IGNvbmRpdGlvbj17Y29uZGl0aW9uIGFzIHVua25vd24gYXMgYm9vbGVhbn0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29udGVudFRydWU6IGNvbnRlbnRUcnVlLFxuXHRcdFx0XHRcdGNvbnRlbnRGYWxzZTogY29udGVudEZhbHNlXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIExpbmtXaXRoUXVpY2tWaWV3IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHRleHQgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdD8gZmllbGQudGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdDogRGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpO1xuXHRcdGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRpZiAoY29uZGl0aW9uID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U3RhbmRhcmRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkLCB0ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uYWxMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkLCBjb25kaXRpb24sIHRleHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFRleHQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRUZXh0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0RnJvbVZhbHVlTGlzdH1cblx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWUnfVwiXG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2hlbiBoYXZpbmcgYSBUZXh0QXJyYW5nZW1lbnQgd2l0aCBUZXh0T25seSwgUlRBIGNhbiBvbmx5IGZpbmQgdGhlIGJpbmRpbmcgZm9yIHRoZSB0ZXh0LCBidXQgbm90IGZvciB0aGUgZmllbGQuXG5cdFx0XHQvLyBUbyBwcmV2ZW50IHRoYXQgc3VjaCBhIGZpZWxkIGNhbiBiZSBhZGRlZCB0d2ljZSB2aWEgUlRBLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGZpZWxkIGJpbmRpbmcgYXMgYSBkdW1teSBjdXN0b20gYmluZGluZy5cblx0XHRcdGxldCBjdXN0b21kYXRhO1xuXHRcdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdFx0Y3VzdG9tZGF0YSA9IDxDdXN0b21EYXRhIGtleT1cImZpZWxkQmluZGluZ1wiIHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcH1cblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRyZW5kZXJXaGl0ZXNwYWNlPVwidHJ1ZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y3VzdG9tZGF0YX1cblx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGVtcGxhdGUgZm9yIHRoZSBwYXNzd29yZCBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFBhc3N3b3JkVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCB0ZXh0QmluZGluZyA9IEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zLCB0cnVlKTtcblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9XG5cdFx0XHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbih0ZXh0QmluZGluZykgfHwgdHlwZW9mIHRleHRCaW5kaW5nID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFt0ZXh0QmluZGluZ10sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRQYXNzd29yZFRleHQpKVxuXHRcdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHRleHRCaW5kaW5nKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie3ZhbHVlRm9ybWF0dGVyczogJ3NhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXInfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHRleHQ9e3RleHRFeHByZXNzaW9ufVxuXHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcH1cblx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0PjwvVGV4dD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE9iamVjdElkZW50aWZpZXIgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRPYmplY3RJZGVudGlmaWVyKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGRlcGVuZGVudHM6IE1kY0xpbmsgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IHRpdGxlQWN0aXZlO1xuXHRcdGlmIChmaWVsZC5oYXNRdWlja1ZpZXcpIHtcblx0XHRcdHRpdGxlQWN0aXZlID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdFx0ZGVwZW5kZW50cyA9IERpc3BsYXlTdHlsZS5nZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGl0bGVBY3RpdmUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgaWRlbnRpZmllciA9IChcblx0XHRcdDxPYmplY3RJZGVudGlmaWVyXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHR0aXRsZT17ZmllbGQuaWRlbnRpZmllclRpdGxlfVxuXHRcdFx0XHR0ZXh0PXtmaWVsZC5pZGVudGlmaWVyVGV4dH1cblx0XHRcdFx0dGl0bGVBY3RpdmU9e3RpdGxlQWN0aXZlfVxuXHRcdFx0XHR0aXRsZVByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogWzxDdXN0b21EYXRhIGtleT17XCJsb2FkVmFsdWVcIn0gdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz5dLFxuXHRcdFx0XHRcdGRlcGVuZGVudHM6IGRlcGVuZGVudHNcblx0XHRcdFx0fX1cblx0XHRcdDwvT2JqZWN0SWRlbnRpZmllcj5cblx0XHQpO1xuXHRcdGlmIChmaWVsZC5oYXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0XHRpZGVudGlmaWVyID0gKFxuXHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPVwiQ2VudGVyXCIganVzdGlmeUNvbnRlbnQ9XCJTcGFjZUJldHdlZW5cIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHR7aWRlbnRpZmllcn1cblx0XHRcdFx0XHQ8U2l0dWF0aW9uc0luZGljYXRvciBjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGguZ2V0UGF0aCgpfSBwcm9wZXJ0eVBhdGg9e2ZpZWxkLnNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGh9IC8+XG5cdFx0XHRcdDwvSEJveD5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZC5zaG93RXJyb3JJbmRpY2F0b3IgJiYgZmllbGQuc2hvd0Vycm9yT2JqZWN0U3RhdHVzKSB7XG5cdFx0XHRpZGVudGlmaWVyID0gKFxuXHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHR7aWRlbnRpZmllcn1cblx0XHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5zaG93RXJyb3JPYmplY3RTdGF0dXN9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5Db250YWluc19FcnJvcnN9XCJcblx0XHRcdFx0XHRcdHN0YXRlPVwiRXJyb3JcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvVkJveD5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkZW50aWZpZXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgT2JqZWN0U3RhdHVzIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0T2JqZWN0U3RhdHVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IG9iamVjdFN0YXR1cztcblx0XHRsZXQgcmVxdWlyZWRIZWxwZXIgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHR9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZD4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUucGF0aFxuXHRcdCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uID0gaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQoZW5oYW5jZWRWYWx1ZURhdGFNb2RlbFBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRlZERhdGFGaWVsZCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YVBvaW50VHlwZT4oZmllbGQubWV0YVBhdGgpO1xuXHRcdGNvbnN0IGNyaXRpY2FsaXR5SWNvbiA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5SWNvbihjb252ZXJ0ZWREYXRhRmllbGQpO1xuXHRcdGNvbnN0IHN0YXRlID0gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcihjb252ZXJ0ZWREYXRhRmllbGQpO1xuXG5cdFx0Y29uc3QgbGlua1VybCA9IChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoVXJsKS5Vcmxcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0KGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhVcmwpLlVybCBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz5cblx0XHRcdFx0XHQpXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgJiYgZmllbGQuaGFzVW5pdE9yQ3VycmVuY3kpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q3VycmVuY3lPclVuaXRDb250cm9sKGZpZWxkLCA8VGV4dCB0ZXh0PXtmaWVsZC50ZXh0fSB0ZXh0QWxpZ249XCJFbmRcIj48L1RleHQ+KTtcblx0XHRcdG9iamVjdFN0YXR1cyA9IChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciBpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9IGNvbmRpdGlvbj17Y29uZGl0aW9uIGFzIHVua25vd24gYXMgYm9vbGVhbn0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGNvbnRlbnRUcnVlOiAoXG5cdFx0XHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdFx0XHRpY29uPXtjcml0aWNhbGl0eUljb259XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU9e3N0YXRlfVxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IGNvbnRlbnRcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBkZXBlbmRlbnRzOiBNZGNMaW5rIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0bGV0IGlzQWN0aXZlO1xuXHRcdFx0bGV0IHByZXNzQWN0aW9uO1xuXHRcdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0XHRkZXBlbmRlbnRzID0gRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpO1xuXHRcdFx0XHRpc0FjdGl2ZSA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRcdFx0cHJlc3NBY3Rpb24gPSBmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmtVcmwpIHtcblx0XHRcdFx0YWN0aXZlID0gdHJ1ZTtcblx0XHRcdFx0cmVxdWlyZWRIZWxwZXIgPSB7XG5cdFx0XHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdHByZXNzQWN0aW9uID0gZmllbGQuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rO1xuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3RTdGF0dXMgPSAoXG5cdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0aWNvbj17Y3JpdGljYWxpdHlJY29ufVxuXHRcdFx0XHRcdHN0YXRlPXtzdGF0ZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHsuLi5yZXF1aXJlZEhlbHBlcn1cblx0XHRcdFx0XHRhY3RpdmU9e2lzQWN0aXZlID8gaXNBY3RpdmUgOiBhY3RpdmV9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzQWN0aW9ufVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPixcblx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PXtcInVybFwifSB2YWx1ZT17bGlua1VybH0gLz5cblx0XHRcdFx0XHRcdF0sXG5cdFx0XHRcdFx0XHRkZXBlbmRlbnRzOiBkZXBlbmRlbnRzXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PYmplY3RTdGF0dXM+XG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHJldHVybiBvYmplY3RTdGF0dXM7XG5cdH0sXG5cblx0Z2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBNZGNMaW5rIHtcblx0XHRyZXR1cm4gbmV3IFF1aWNrVmlldyhcblx0XHRcdGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRmaWVsZC5tZXRhUGF0aC5nZXRQYXRoKCksXG5cdFx0XHRmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCksXG5cdFx0XHRmaWVsZC5zZW1hbnRpY09iamVjdFxuXHRcdCkuY3JlYXRlQ29udGVudCgpIGFzIE1kY0xpbms7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgTGFiZWxTZW1hbnRpY0tleSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExhYmVsU2VtYW50aWNLZXkoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250ZW50VHJ1ZSA9IChcblx0XHRcdDxMaW5rXG5cdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdHdyYXBwaW5nPVwidHJ1ZVwiXG5cdFx0XHRcdGVtcGhhc2l6ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0xpbms+XG5cdFx0KTtcblx0XHRjb25zdCBjb250ZW50RmFsc2UgPSA8TGFiZWwgaWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfSB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gdGV4dD17ZmllbGQuaWRlbnRpZmllclRpdGxlfSBkZXNpZ249XCJCb2xkXCIgLz47XG5cdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0Y29uc3QgaGFzUXVpY2t2aWV3ID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdFx0aWYgKGhhc1F1aWNrdmlldyA9PT0gXCJ0cnVlXCIpIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRlbnRUcnVlO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uYWxXcmFwcGVyRm9yUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQsIGhhc1F1aWNrdmlldyBhcyBzdHJpbmcsIGNvbnRlbnRUcnVlLCBjb250ZW50RmFsc2UpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gPExhYmVsIGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH0gdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IHRleHQ9e2ZpZWxkLmlkZW50aWZpZXJUaXRsZX0gZGVzaWduPVwiQm9sZFwiIC8+O1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgdGVtcGxhdGUgZm9yIHRoZSBzZW1hbnRpYyBrZXkgd2l0aCBkcmFmdCBpbmRpY2F0b3IuXG5cdCAqIEBwYXJhbSBzZW1hbnRpY0tleVRlbXBsYXRlIFRoZSB0ZW1wbGF0ZSByZXN1bHQgd2l0aG91dCBkcmFmdCBpbmRpY2F0b3Jcblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGFkZERyYWZ0SW5kaWNhdG9yKHNlbWFudGljS2V5VGVtcGxhdGU6IHN0cmluZywgZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRpZiAoIWZpZWxkLmZvcm1hdE9wdGlvbnMuZmllbGRHcm91cERyYWZ0SW5kaWNhdG9yUHJvcGVydHlQYXRoKSB7XG5cdFx0XHQvLyBpZiB0aGUgZHJhZnRJbmRpY2F0b3IgaXMgbm90IGhhbmRsZWQgYXQgdGhlIGZpZWxkR3JvdXAgbGV2ZWxcblx0XHRcdC8vVE9ETyBjb3VsZCB0aGlzIGJlIGEgYm9vbGVhbiBubyBkcmFmdEluZGljYXRvclxuXHRcdFx0c2VtYW50aWNLZXlUZW1wbGF0ZSA9IChcblx0XHRcdFx0PEZvcm1FbGVtZW50V3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0+XG5cdFx0XHRcdFx0PFZCb3ggY2xhc3M9e0ZpZWxkSGVscGVyLmdldE1hcmdpbkNsYXNzKGZpZWxkLmZvcm1hdE9wdGlvbnMuY29tcGFjdFNlbWFudGljS2V5KX0+XG5cdFx0XHRcdFx0XHR7c2VtYW50aWNLZXlUZW1wbGF0ZX1cblx0XHRcdFx0XHRcdDxEcmFmdEluZGljYXRvclxuXHRcdFx0XHRcdFx0XHRkcmFmdEluZGljYXRvclR5cGU9e09iamVjdE1hcmtlclZpc2liaWxpdHkuSWNvbkFuZFRleHR9XG5cdFx0XHRcdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRyYWZ0SW5kaWNhdG9yVmlzaWJsZX1cblx0XHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5ID8gZmllbGQuYXJpYUxhYmVsbGVkQnkgOiBbXX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9WQm94PlxuXHRcdFx0XHQ8L0Zvcm1FbGVtZW50V3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiBzZW1hbnRpY0tleVRlbXBsYXRlO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBDb21wdXRlcyB0aGUgdGV4dCBwcm9wZXJ0eSB3aXRoIHRoZSBhcHByb3ByaWF0ZSB3aGl0ZSBzcGFjZSBoYW5kbGluZy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdGNvbnN0IHRleHQgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VGV4dEJpbmRpbmcoXG5cdFx0XHQoZmllbGQuZGF0YU1vZGVsUGF0aEV4dGVybmFsSUQgYXMgRGF0YU1vZGVsT2JqZWN0UGF0aDxQcm9wZXJ0eT4pID8/IGZpZWxkLmRhdGFNb2RlbFBhdGgsXG5cdFx0XHRmaWVsZC5mb3JtYXRPcHRpb25zLFxuXHRcdFx0dHJ1ZVxuXHRcdCk7XG5cdFx0cmV0dXJuIGlzUGF0aEluTW9kZWxFeHByZXNzaW9uKHRleHQpIHx8IHR5cGVvZiB0ZXh0ID09PSBcInN0cmluZ1wiXG5cdFx0XHQ/IGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChbdGV4dF0sIHZhbHVlRm9ybWF0dGVycy5yZXBsYWNlV2hpdGVzcGFjZSkpXG5cdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHRleHQpO1xuXHR9LFxuXHQvKipcblx0ICogR2V0cyB0aGUgY29uZGl0aW9uIGZvciBoYXZpbmcgYW4gYWN0aXZlIGxpbmsgdGhhdCBvcGVucyB0aGUgcXVpY2sgdmlldy5cblx0ICogQHBhcmFtIGZpZWxkXG5cdCAqIEByZXR1cm5zIEEgY29tcGlsZSBiaW5kaW5nIGV4cHJlc3Npb24gZm9yIHRoZSBjb25kaXRpb24uXG5cdCAqL1xuXHRnZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24ge1xuXHRcdHN3aXRjaCAoZmllbGQucXVpY2tWaWV3VHlwZSkge1xuXHRcdFx0Y2FzZSBcIkZhY2V0c1wiOlxuXHRcdFx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyAhPT0gdHJ1ZSkge1xuXHRcdFx0XHRcdC8vIFdlIG9ubHkgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlIGlmIHRoZSB0YWJsZSBpcyBub3QgYW5hbHl0aWNhbC5cblx0XHRcdFx0XHQvLyBJZiB0aGUgdGFibGUgaXMgYW5hbHl0aWNhbCwgd2UgY2Fubm90IHJlbHkgb24gdGhlIG5hdmlnYXRpb24gYmVpbmcgcmVhY2hhYmxlLCBhcyB3ZSBjYW5ub3QgbG9hZCBuYXZpZ2F0aW9uIHByb3BlcnRpZXMgaW4gdGhlIGFuYWx5dGljYWwgcXVlcmllcy5cblx0XHRcdFx0XHQvL3RoZXJlIGlzIHF1aWNrIHZpZXdGYWNldHMgYW5ub3RhdGlvbiBvbmx5IHRoZW4gd2UgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuZ2V0Rm9yZWlnbktleVZhbHVlRXhwcmVzc2lvbihmaWVsZCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cblx0XHRcdGNhc2UgXCJTZW1hbnRpY0xpbmtzXCI6XG5cdFx0XHRcdGlmIChmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRcdFx0Y29uc3QgbGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0czogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz5bXSA9IFtdO1xuXHRcdFx0XHRcdGlmIChmaWVsZC5zZW1hbnRpY09iamVjdCkge1xuXHRcdFx0XHRcdFx0Ly8gSWYgd2Ugc2VlIGEgZHluYW1pYyBleHByZXNzaW9uIHdpdGggYSBmb3JtYXR0ZXIsIHdlIHJldHVybiBmYWxzZS4gVGhlIGNvbmRpdGlvbiB3aWxsIGJlIHJlc29sdmVkIGxhdGVyIGluIFRleHRMaW5rIGNvbnRyb2wuXG5cdFx0XHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQoZmFsc2UpKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBzZW1hbnRpY09iamVjdEV4cHJlc3Npb24gb2YgZmllbGQuZHluYW1pY1NlbWFudGljT2JqZWN0cykge1xuXHRcdFx0XHRcdFx0aWYgKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJQYXRoSW5Nb2RlbFwiIHx8IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbi5fdHlwZSA9PT0gXCJDb25zdGFudFwiKSB7XG5cdFx0XHRcdFx0XHRcdGxpc3RPZkR5bmFtaWNTZW1hbnRpY09iamVjdHMucHVzaChzZW1hbnRpY09iamVjdEV4cHJlc3Npb24pO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0Ly8gSWYgd2Ugc2VlIGEgZHluYW1pYyBleHByZXNzaW9uICgkZWRtSnNvbiksIHdlIHJldHVybiB0cnVlLlxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gY29tcGlsZUV4cHJlc3Npb24oY29uc3RhbnQodHJ1ZSkpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBzZW1hbnRpY09iamVjdHNQYXRoID0gW1xuXHRcdFx0XHRcdFx0cGF0aEluTW9kZWw8Q29udGV4dFtdPihcIi9zZW1hbnRpY09iamVjdHNcIiwgXCJpbnRlcm5hbFwiKSBhcyBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPlxuXHRcdFx0XHRcdF0uY29uY2F0KGxpc3RPZkR5bmFtaWNTZW1hbnRpY09iamVjdHMpO1xuXHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihmb3JtYXRSZXN1bHQoc2VtYW50aWNPYmplY3RzUGF0aCwgdmFsdWVGb3JtYXR0ZXJzLmhhc1NlbWFudGljT2JqZWN0cykpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdC8vIFwiZmFjZXRzQW5kU2VtYW50aWNMaW5rc1wiXG5cdFx0XHRcdC8vIGlmIHRoZXJlIGlzIGJvdGggZmFjZXRzIGFuZCBzZW1hbnRpYyBsaW5rcywgd2UgZG8gbm90IGNoZWNrIGlmIHRoZSBuYXZpZ2F0aW9uIGlzIHJlYWNoYWJsZVxuXHRcdFx0XHRyZXR1cm4gXCJ0cnVlXCI7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnRyeSBwb2ludCBmb3IgZnVydGhlciB0ZW1wbGF0aW5nIHByb2Nlc3NpbmdzLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpbm5lckZpZWxkQ29udGVudDtcblx0XHRzd2l0Y2ggKGZpZWxkLmRpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlKSB7XG5cdFx0XHRjYXNlIFwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXROdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJBdmF0YXJcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0QXZhdGFyVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJCdXR0b25cIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0QnV0dG9uVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJDb250YWN0XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldENvbnRhY3RUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkRhdGFQb2ludFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXREYXRhUG9pbnRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkV4cGFuZGFibGVUZXh0XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEV4cGFuZGFibGVUZXh0KGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRmlsZVwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRGaWxlVGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJMaW5rXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldExpbmtUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkxpbmtXaXRoUXVpY2tWaWV3XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJPYmplY3RJZGVudGlmaWVyXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldE9iamVjdElkZW50aWZpZXIoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJPYmplY3RTdGF0dXNcIjoge1xuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRPYmplY3RTdGF0dXMoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdGNhc2UgXCJMYWJlbFNlbWFudGljS2V5XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldExhYmVsU2VtYW50aWNLZXkoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJUZXh0XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldFRleHRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk1hc2tlZFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRQYXNzd29yZFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IFwiXCI7XG5cdFx0fVxuXHRcdGlmIChmaWVsZC5hZGREcmFmdEluZGljYXRvciAmJiBpbm5lckZpZWxkQ29udGVudCkge1xuXHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuYWRkRHJhZnRJbmRpY2F0b3IoaW5uZXJGaWVsZENvbnRlbnQsIGZpZWxkKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaW5uZXJGaWVsZENvbnRlbnQ7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IERpc3BsYXlTdHlsZTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7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WUFBWSxDQUFDK0csa0JBQWtCLENBQUM3RyxLQUFLLENBQUM7VUFDMUQ7UUFDRCxLQUFLLFdBQVc7VUFDZmdYLGlCQUFpQixHQUFHbFgsWUFBWSxDQUFDbUksb0JBQW9CLENBQUNqSSxLQUFLLENBQUM7VUFDNUQ7UUFDRCxLQUFLLGdCQUFnQjtVQUNwQmdYLGlCQUFpQixHQUFHbFgsWUFBWSxDQUFDcUksaUJBQWlCLENBQUNuSSxLQUFLLENBQUM7VUFDekQ7UUFDRCxLQUFLLE1BQU07VUFDVmdYLGlCQUFpQixHQUFHbFgsWUFBWSxDQUFDNkksZUFBZSxDQUFDM0ksS0FBSyxDQUFDO1VBQ3ZEO1FBQ0QsS0FBSyxNQUFNO1VBQ1ZnWCxpQkFBaUIsR0FBR2xYLFlBQVksQ0FBQ3lPLGVBQWUsQ0FBQ3ZPLEtBQUssQ0FBQztVQUN2RDtRQUNELEtBQUssbUJBQW1CO1VBQ3ZCZ1gsaUJBQWlCLEdBQUdsWCxZQUFZLENBQUNtUyw0QkFBNEIsQ0FBQ2pTLEtBQUssQ0FBQztVQUNwRTtRQUNELEtBQUssa0JBQWtCO1VBQ3RCZ1gsaUJBQWlCLEdBQUdsWCxZQUFZLENBQUNtVCxtQkFBbUIsQ0FBQ2pULEtBQUssQ0FBQztVQUMzRDtRQUNELEtBQUssY0FBYztVQUFFO1lBQ3BCZ1gsaUJBQWlCLEdBQUdsWCxZQUFZLENBQUN3VSxlQUFlLENBQUN0VSxLQUFLLENBQUM7WUFDdkQ7VUFDRDtRQUNBLEtBQUssa0JBQWtCO1VBQ3RCZ1gsaUJBQWlCLEdBQUdsWCxZQUFZLENBQUN5VixtQkFBbUIsQ0FBQ3ZWLEtBQUssQ0FBQztVQUMzRDtRQUNELEtBQUssTUFBTTtVQUNWZ1gsaUJBQWlCLEdBQUdsWCxZQUFZLENBQUN1UyxlQUFlLENBQUNyUyxLQUFLLENBQUM7VUFDdkQ7UUFDRCxLQUFLLFFBQVE7VUFDWmdYLGlCQUFpQixHQUFHbFgsWUFBWSxDQUFDMlMsbUJBQW1CLENBQUN6UyxLQUFLLENBQUM7VUFDM0Q7UUFDRDtVQUNDZ1gsaUJBQWlCLEdBQUcsRUFBRTtNQUN4QjtNQUNBLElBQUloWCxLQUFLLENBQUMyVixpQkFBaUIsSUFBSXFCLGlCQUFpQixFQUFFO1FBQ2pEQSxpQkFBaUIsR0FBR2xYLFlBQVksQ0FBQzZWLGlCQUFpQixDQUFDcUIsaUJBQWlCLEVBQUVoWCxLQUFLLENBQUM7TUFDN0U7TUFFQSxPQUFPZ1gsaUJBQWlCO0lBQ3pCO0VBQ0QsQ0FBQztFQUFDLE9BRWFsWCxZQUFZO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=
1017
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJEaXNwbGF5U3R5bGUiLCJnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeSIsImZpZWxkIiwic2NhbGUiLCJwcm9wZXJ0eSIsInByZWNpc2lvbiIsIk1hdGgiLCJtaW4iLCJnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2wiLCJjdXJyZW5jeU9yVW5pdCIsInZpc2libGVFeHByZXNzaW9uIiwiX2pzeCIsIkxpbmsiLCJ0ZXh0IiwicHJlc3MiLCJldmVudEhhbmRsZXJzIiwiZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlscyIsInZpc2libGUiLCJyZWFjdGl2ZUFyZWFNb2RlIiwiZm9ybWF0T3B0aW9ucyIsImNoaWxkcmVuIiwiZGVwZW5kZW50cyIsImNsb25lIiwiZ2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlIiwicmVsYXRpdmVQcm9wZXJ0eVBhdGgiLCJnZXRDb250ZXh0UmVsYXRpdmVUYXJnZXRPYmplY3RQYXRoIiwiZGF0YU1vZGVsUGF0aCIsIm92ZXJhbGxWaXNpYmxlIiwibm90IiwiZXF1YWwiLCJwYXRoSW5Nb2RlbCIsInVuZGVmaW5lZCIsImN1cnJlbmN5IiwiTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5IiwibnVtYmVyIiwidmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9uIiwidW5pdE9yQ3VycmVuY3kiLCJ1bml0QmluZGluZ0V4cHJlc3Npb24iLCJpc0FuYWx5dGljcyIsIkNvbmRpdGlvbmFsV3JhcHBlciIsImRpc3BsYXlWaXNpYmxlIiwiY29uZGl0aW9uIiwiaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQiLCJjb250ZW50VHJ1ZSIsImNvbnRlbnRGYWxzZSIsImdldEF2YXRhclRlbXBsYXRlIiwiYXZhdGFySWQiLCJfZmxleElkIiwiaWRQcmVmaXgiLCJnZW5lcmF0ZSIsImF2YXRhclZpc2libGUiLCJGaWVsZFRlbXBsYXRpbmciLCJnZXRWaXNpYmxlRXhwcmVzc2lvbiIsImF2YXRhclNyYyIsImdldFZhbHVlQmluZGluZyIsImF2YXRhckRpc3BsYXlTaGFwZSIsImdldEF2YXRhclNoYXBlIiwiRm9ybUVsZW1lbnRXcmFwcGVyIiwiQXZhdGFyIiwiaWQiLCJzcmMiLCJkaXNwbGF5U2l6ZSIsImNsYXNzIiwiaW1hZ2VGaXRUeXBlIiwiZGlzcGxheVNoYXBlIiwiZ2V0QnV0dG9uVGVtcGxhdGUiLCJpY29uIiwic2hvd0ljb25VcmwiLCJjb252ZXJ0ZWRNZXRhUGF0aCIsIkljb25VcmwiLCJMYWJlbCIsInRvb2x0aXAiLCJidXR0b25QcmVzcyIsImJ1dHRvbklzQm91bmQiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGUiLCJidXR0b25PcGVyYXRpb25BdmFpbGFibGVGb3JtYXR0ZWQiLCJuYXZpZ2F0aW9uQXZhaWxhYmxlIiwiJFR5cGUiLCJvbkRhdGFGaWVsZEFjdGlvbkJ1dHRvbiIsIkFjdGlvblRhcmdldCIsImlzQm91bmQiLCJhbm5vdGF0aW9ucyIsIkNvcmUiLCJPcGVyYXRpb25BdmFpbGFibGUiLCJhY3Rpb25UYXJnZXQiLCJiaW5kaW5nUGFyYW1OYW1lIiwicGFyYW1ldGVycyIsIm5hbWUiLCJjb21waWxlRXhwcmVzc2lvbiIsImdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbiIsInBhdGgiLCJzdGFydHNXaXRoIiwicmVwbGFjZSIsIm9uRGF0YUZpZWxkV2l0aElCTiIsIk5hdmlnYXRpb25BdmFpbGFibGUiLCJTdHJpbmciLCJpZ25vcmVOYXZpZ2F0aW9uQXZhaWxhYmxlIiwiYnV0dG9uIiwiQnV0dG9uIiwiZW5hYmxlZCIsIkZpZWxkSGVscGVyIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25WaXNpYmxlIiwiaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkIiwiaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyIsImFuZCIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInR5cGUiLCJidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUJ1dHRvblR5cGUiLCJpc0FjdGlvbkFJT3BlcmF0aW9uIiwiYWlJY29uIiwiZ2V0Q29udGFjdFRlbXBsYXRlIiwiY29udGFjdE1ldGFQYXRoIiwibWV0YVBhdGgiLCJnZXRNb2RlbCIsImNyZWF0ZUJpbmRpbmdDb250ZXh0IiwiY29udGFjdFZpc2libGUiLCJDb250YWN0IiwiYXJpYUxhYmVsbGVkQnkiLCJnZXRQYXRoIiwiY29udGV4dFBhdGgiLCJzaG93RW1wdHlJbmRpY2F0b3IiLCJnZXREYXRhUG9pbnRJbm5lclBhcnQiLCJ3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIiwiY29udmVydGVkRGF0YUZpZWxkIiwiTWV0YU1vZGVsQ29udmVydGVyIiwiY29udmVydE1ldGFNb2RlbENvbnRleHQiLCJtZWFzdXJlRGlzcGxheU1vZGUiLCJEYXRhUG9pbnQiLCJ2YWx1ZSIsIkRhdGFQb2ludEZvcm1hdE9wdGlvbnMiLCJnZXREYXRhUG9pbnRUZW1wbGF0ZSIsImhhc1VuaXRPckN1cnJlbmN5IiwiZ2V0RXhwYW5kYWJsZVRleHQiLCJFeHBhbmRhYmxlVGV4dCIsImRpc3BsYXlTdHlsZUlkIiwib3ZlcmZsb3dNb2RlIiwidGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheSIsIm1heENoYXJhY3RlcnMiLCJ0ZXh0TWF4Q2hhcmFjdGVyc0Rpc3BsYXkiLCJlbXB0eUluZGljYXRvck1vZGUiLCJnZXRGaWxlVGVtcGxhdGUiLCJpbm5lckZpbGVQYXJ0IiwiZmlsZVN0cmVhbU5vdEVtcHR5IiwiZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoIiwiZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiIsImZpbGVVcGxvYWRVcmwiLCJmaWxlRmlsZW5hbWVQYXRoIiwiQ29udGVudERpc3Bvc2l0aW9uIiwiRmlsZW5hbWUiLCJmaWxlTWVkaWFUeXBlIiwiTWVkaWFUeXBlIiwiZmlsZUlzSW1hZ2UiLCJJc0ltYWdlVVJMIiwiSXNJbWFnZSIsInRlc3QiLCJ0b1N0cmluZyIsImZpbGVBdmF0YXJTcmMiLCJmaWxlQXZhdGFyRGlzcGxheVNoYXBlIiwiZmlsZUljb25TcmMiLCJnZXRQYXRoRm9ySWNvblNvdXJjZSIsImZpbGVMaW5rVGV4dCIsImdldEZpbGVuYW1lRXhwciIsImZpbGVMaW5rSHJlZiIsImdldERvd25sb2FkVXJsIiwiZmlsZVRleHRWaXNpYmxlIiwiZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzIiwiQWNjZXB0YWJsZU1lZGlhVHlwZXMiLCJhY2NlcHRlZFR5cGVzIiwiQXJyYXkiLCJmcm9tIiwibWFwIiwiam9pbiIsImZpbGVNYXhpbXVtU2l6ZSIsImNhbGN1bGF0ZU1CZnJvbUJ5dGUiLCJtYXhMZW5ndGgiLCJhdmF0YXIiLCJjdXN0b21EYXRhIiwiSW1hZ2VDdXN0b21EYXRhIiwicGFyYW1OYW1lIiwiSWNvbiIsImxpbmsiLCJ0YXJnZXQiLCJocmVmIiwid3JhcHBpbmciLCJUZXh0IiwiZWRpdE1vZGUiLCJjb21wdXRlZEVkaXRNb2RlIiwiRmllbGRFZGl0TW9kZSIsIkRpc3BsYXkiLCJiZWZvcmVEaWFsb2dPcGVuIiwiY29sbGFib3JhdGlvbkVuYWJsZWQiLCJoYW5kbGVPcGVuVXBsb2FkZXIiLCJhZnRlckRpYWxvZ09wZW4iLCJoYW5kbGVDbG9zZVVwbG9hZGVyIiwiZmlsZVVwbG9hZGVyIiwiRmlsZVVwbG9hZGVyIiwiZWRpdGFibGVFeHByZXNzaW9uIiwiYnV0dG9uT25seSIsImljb25Pbmx5IiwibXVsdGlwbGUiLCJzdHlsZSIsInNlbmRYSFIiLCJ1c2VNdWx0aXBhcnQiLCJzYW1lRmlsZW5hbWVBbGxvd2VkIiwibWltZVR5cGUiLCJ0eXBlTWlzc21hdGNoIiwiaGFuZGxlVHlwZU1pc3NtYXRjaCIsIm1heGltdW1GaWxlU2l6ZSIsImZpbGVTaXplRXhjZWVkIiwiaGFuZGxlRmlsZVNpemVFeGNlZWQiLCJ1cGxvYWRPbkNoYW5nZSIsInVwbG9hZENvbXBsZXRlIiwiaGFuZGxlVXBsb2FkQ29tcGxldGUiLCJodHRwUmVxdWVzdE1ldGhvZCIsImlzRHluYW1pY0luc3RhbnRpYXRpb24iLCJGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZCIsIlB1dCIsImNoYW5nZSIsInVwbG9hZFN0cmVhbSIsImFmdGVyRGlhbG9nQ2xvc2UiLCJ1cGxvYWRTdGFydCIsImRlbGV0ZUJ1dHRvbiIsInJlbW92ZVN0cmVhbSIsIkZpbGVXcmFwcGVyIiwidXBsb2FkVXJsIiwicHJvcGVydHlQYXRoIiwiZmlsZW5hbWUiLCJtZWRpYVR5cGUiLCJmaWVsZEdyb3VwSWRzIiwidmFsaWRhdGVGaWVsZEdyb3VwIiwiQ3VzdG9tRGF0YSIsImRhdGFTb3VyY2VQYXRoIiwiZ2V0TGlua1RlbXBsYXRlIiwibGlua1VybCIsImljb25VcmwiLCJsaW5rQWN0aXZlZCIsImxpbmtUYXJnZXQiLCJjb21wdXRlVGV4dFdpdGhXaGl0ZVNwYWNlIiwiYWNjZXNzaWJsZVJvbGUiLCJMaW5rQWNjZXNzaWJsZVJvbGUiLCJvbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCIsImh0bWw1TGlua1RhcmdldCIsIkhUTUw1IiwiTGlua1RhcmdldCIsImxpbmtCaW5kaW5nIiwiVXJsIiwiQ29tbXVuaWNhdGlvbiIsIklzRW1haWxBZGRyZXNzIiwiSXNQaG9uZU51bWJlciIsImxpbmtJc0VtYWlsQWRkcmVzcyIsImxpbmtJc1Bob25lTnVtYmVyIiwicHJvcGVydHlWYWx1ZUJpbmRpbmciLCJtYWlsQmxvY2tJZCIsInVpZCIsIkVtYWlsIiwibWFpbCIsIk9iamVjdFN0YXR1cyIsIm9wZW5FeHRlcm5hbExpbmsiLCJhY3RpdmUiLCJ3cmFwIiwiZ2V0Rm9yZWlnbktleUZvckN1c3RvbURhdGEiLCJyZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSIsIlF1aWNrVmlldyIsImdldFJlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5IiwidGFyZ2V0TmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXRFbnRpdHlUeXBlIiwibmF2aWdhdGlvblByb3BlcnRpZXMiLCJ0YXJnZXROYXZQcm9wIiwiZmluZCIsIm5hdlByb3AiLCJyZWZDb25zdHJhaW50IiwicmVmZXJlbnRpYWxDb25zdHJhaW50Iiwia2V5IiwibGVuZ3RoIiwidGFyZ2V0UHJvcGVydHkiLCJrZXlUb0ZldGNoIiwiZ2V0Rm9yZWlnbktleVZhbHVlRXhwcmVzc2lvbiIsImZvcmVpZ25LZXlSZWxhdGl2ZVBhdGgiLCJleHByZXNzaW9uIiwiX3R5cGUiLCJpZkVsc2UiLCJjb25zdGFudCIsImdldFN0YW5kYXJkTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZSIsImxpbmtQcmVzc2VkIiwiZ2V0TWRjTGlua0ZvclF1aWNrVmlldyIsImdldENvbmRpdGlvbmFsTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZSIsIlRleHRMaW5rIiwic2hvd0FzTGluayIsInNlbWFudGljT2JqZWN0IiwiZ2V0Q29uZGl0aW9uYWxXcmFwcGVyRm9yUXVpY2tWaWV3VGVtcGxhdGUiLCJnZXRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlIiwicmV0cmlldmVUZXh0RnJvbVZhbHVlTGlzdCIsInRleHRGcm9tVmFsdWVMaXN0IiwiZ2V0UXVpY2tWaWV3Q29uZGl0aW9uIiwiZ2V0VGV4dFRlbXBsYXRlIiwicmVuZGVyV2hpdGVzcGFjZSIsImN1c3RvbWRhdGEiLCJkaXNwbGF5TW9kZSIsImdldFBhc3N3b3JkVGVtcGxhdGUiLCJ0ZXh0QmluZGluZyIsImdldFRleHRCaW5kaW5nIiwidGV4dEV4cHJlc3Npb24iLCJpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbiIsImZvcm1hdFJlc3VsdCIsInZhbHVlRm9ybWF0dGVycyIsImZvcm1hdFBhc3N3b3JkVGV4dCIsImdldE9iamVjdElkZW50aWZpZXIiLCJ0aXRsZUFjdGl2ZSIsImhhc1F1aWNrVmlldyIsImlkZW50aWZpZXIiLCJPYmplY3RJZGVudGlmaWVyIiwidGl0bGUiLCJpZGVudGlmaWVyVGl0bGUiLCJpZGVudGlmaWVyVGV4dCIsInRpdGxlUHJlc3MiLCJoYXNTaXR1YXRpb25zSW5kaWNhdG9yIiwiX2pzeHMiLCJIQm94IiwiYWxpZ25JdGVtcyIsImp1c3RpZnlDb250ZW50Iiwid2lkdGgiLCJTaXR1YXRpb25zSW5kaWNhdG9yIiwic2l0dWF0aW9uc0luZGljYXRvclByb3BlcnR5UGF0aCIsInNob3dFcnJvckluZGljYXRvciIsInNob3dFcnJvck9iamVjdFN0YXR1cyIsIlZCb3giLCJzdGF0ZSIsImdldE9iamVjdFN0YXR1cyIsIm9iamVjdFN0YXR1cyIsInJlcXVpcmVkSGVscGVyIiwiZGF0YU1vZGVsT2JqZWN0UGF0aCIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImVuaGFuY2VkVmFsdWVEYXRhTW9kZWxQYXRoIiwiZW5oYW5jZURhdGFNb2RlbFBhdGgiLCJ0YXJnZXRPYmplY3QiLCJWYWx1ZSIsImNyaXRpY2FsaXR5SWNvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5SWNvbiIsImJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5Q29sb3IiLCJjb250ZW50IiwidGV4dEFsaWduIiwiaXNBY3RpdmUiLCJwcmVzc0FjdGlvbiIsImNyZWF0ZUNvbnRlbnQiLCJnZXRMYWJlbFNlbWFudGljS2V5IiwiZW1waGFzaXplZCIsImRlc2lnbiIsImhhc1F1aWNrdmlldyIsImFkZERyYWZ0SW5kaWNhdG9yIiwic2VtYW50aWNLZXlUZW1wbGF0ZSIsImZpZWxkR3JvdXBEcmFmdEluZGljYXRvclByb3BlcnR5UGF0aCIsImdldE1hcmdpbkNsYXNzIiwiY29tcGFjdFNlbWFudGljS2V5IiwiRHJhZnRJbmRpY2F0b3IiLCJkcmFmdEluZGljYXRvclR5cGUiLCJPYmplY3RNYXJrZXJWaXNpYmlsaXR5IiwiSWNvbkFuZFRleHQiLCJkcmFmdEluZGljYXRvclZpc2libGUiLCJkYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCIsInJlcGxhY2VXaGl0ZXNwYWNlIiwicXVpY2tWaWV3VHlwZSIsImR5bmFtaWNTZW1hbnRpY09iamVjdHMiLCJsaXN0T2ZEeW5hbWljU2VtYW50aWNPYmplY3RzIiwic2VtYW50aWNPYmplY3RFeHByZXNzaW9uIiwicHVzaCIsInNlbWFudGljT2JqZWN0c1BhdGgiLCJjb25jYXQiLCJoYXNTZW1hbnRpY09iamVjdHMiLCJnZXRDaGVja0JveEdyb3VwSXRlbVRlbXBsYXRlIiwiQ2hlY2tCb3giLCJkaXNwbGF5T25seSIsImxhYmVsIiwic2VsZWN0ZWQiLCJ2YWx1ZUJpbmRpbmdFeHByZXNzaW9uIiwiZ2V0VGVtcGxhdGUiLCJpbm5lckZpZWxkQ29udGVudCIsImRpc3BsYXlTdHlsZSJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiRGlzcGxheVN0eWxlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiwgUGF0aEFubm90YXRpb25FeHByZXNzaW9uLCBQcm9wZXJ0eSwgUHJvcGVydHlBbm5vdGF0aW9uVmFsdWUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkLFxuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZFR5cGVzLFxuXHREYXRhRmllbGRXaXRoVXJsLFxuXHREYXRhUG9pbnRUeXBlXG59IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy92b2NhYnVsYXJpZXMvVUlcIjtcbmltcG9ydCB7IFVJQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuaW1wb3J0IHVpZCBmcm9tIFwic2FwL2Jhc2UvdXRpbC91aWRcIjtcbmltcG9ydCB0eXBlIHsgQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uLCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHtcblx0YW5kLFxuXHRjb21waWxlRXhwcmVzc2lvbixcblx0Y29uc3RhbnQsXG5cdGVxdWFsLFxuXHRmb3JtYXRSZXN1bHQsXG5cdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbixcblx0aWZFbHNlLFxuXHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbixcblx0bm90LFxuXHRwYXRoSW5Nb2RlbCxcblx0cmVzb2x2ZUJpbmRpbmdTdHJpbmdcbn0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRm9ybUVsZW1lbnRXcmFwcGVyIGZyb20gXCJzYXAvZmUvY29yZS9jb250cm9scy9Gb3JtRWxlbWVudFdyYXBwZXJcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7IGFpSWNvbiwgaXNBY3Rpb25BSU9wZXJhdGlvbiB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2NvbnRyb2xzL0NvbW1vbi9BY3Rpb25cIjtcbmltcG9ydCB2YWx1ZUZvcm1hdHRlcnMgZnJvbSBcInNhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXJcIjtcbmltcG9ydCB7IFVJIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvQmluZGluZ0hlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IHtcblx0YnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlCdXR0b25UeXBlLFxuXHRidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUNvbG9yLFxuXHRidWlsZEV4cHJlc3Npb25Gb3JDcml0aWNhbGl0eUljb25cbn0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvQ3JpdGljYWxpdHlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgdHlwZSB7IERhdGFNb2RlbE9iamVjdFBhdGggfSBmcm9tIFwic2FwL2ZlL2NvcmUvdGVtcGxhdGluZy9EYXRhTW9kZWxQYXRoSGVscGVyXCI7XG5pbXBvcnQgeyBlbmhhbmNlRGF0YU1vZGVsUGF0aCwgZ2V0Q29udGV4dFJlbGF0aXZlVGFyZ2V0T2JqZWN0UGF0aCB9IGZyb20gXCJzYXAvZmUvY29yZS90ZW1wbGF0aW5nL0RhdGFNb2RlbFBhdGhIZWxwZXJcIjtcbmltcG9ydCB7IGhhc1ZhbGlkQW5hbHl0aWNhbEN1cnJlbmN5T3JVbml0IH0gZnJvbSBcInNhcC9mZS9jb3JlL3RlbXBsYXRpbmcvVUlGb3JtYXR0ZXJzXCI7XG5pbXBvcnQgRmllbGRIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRIZWxwZXJcIjtcbmltcG9ydCAqIGFzIEZpZWxkVGVtcGxhdGluZyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFRlbXBsYXRpbmdcIjtcbmltcG9ydCB0eXBlIHsgRmllbGRCbG9ja1Byb3BlcnRpZXMgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9pbnRlcm5hbC9maWVsZC9GaWVsZFN0cnVjdHVyZUhlbHBlclwiO1xuaW1wb3J0IFF1aWNrVmlldyBmcm9tIFwic2FwL2ZlL21hY3Jvcy9xdWlja1ZpZXcvUXVpY2tWaWV3XCI7XG5pbXBvcnQgQXZhdGFyIGZyb20gXCJzYXAvbS9BdmF0YXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IENoZWNrQm94IGZyb20gXCJzYXAvbS9DaGVja0JveFwiO1xuaW1wb3J0IEV4cGFuZGFibGVUZXh0IGZyb20gXCJzYXAvbS9FeHBhbmRhYmxlVGV4dFwiO1xuaW1wb3J0IEhCb3ggZnJvbSBcInNhcC9tL0hCb3hcIjtcbmltcG9ydCBJbWFnZUN1c3RvbURhdGEgZnJvbSBcInNhcC9tL0ltYWdlQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExhYmVsIGZyb20gXCJzYXAvbS9MYWJlbFwiO1xuaW1wb3J0IHR5cGUgeyBMaW5rJFByZXNzRXZlbnQgfSBmcm9tIFwic2FwL20vTGlua1wiO1xuaW1wb3J0IExpbmsgZnJvbSBcInNhcC9tL0xpbmtcIjtcbmltcG9ydCBPYmplY3RJZGVudGlmaWVyIGZyb20gXCJzYXAvbS9PYmplY3RJZGVudGlmaWVyXCI7XG5pbXBvcnQgT2JqZWN0U3RhdHVzIGZyb20gXCJzYXAvbS9PYmplY3RTdGF0dXNcIjtcbmltcG9ydCBUZXh0IGZyb20gXCJzYXAvbS9UZXh0XCI7XG5pbXBvcnQgVkJveCBmcm9tIFwic2FwL20vVkJveFwiO1xuaW1wb3J0IHsgTGlua0FjY2Vzc2libGVSb2xlLCBPYmplY3RNYXJrZXJWaXNpYmlsaXR5IH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIEV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgRXZlbnRQcm92aWRlciBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRQcm92aWRlclwiO1xuaW1wb3J0IHR5cGUgQ29udHJvbCBmcm9tIFwic2FwL3VpL2NvcmUvQ29udHJvbFwiO1xuaW1wb3J0IHR5cGUgeyBDb250cm9sJFZhbGlkYXRlRmllbGRHcm91cEV2ZW50IH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDdXN0b21EYXRhIGZyb20gXCJzYXAvdWkvY29yZS9DdXN0b21EYXRhXCI7XG5pbXBvcnQgSWNvbiBmcm9tIFwic2FwL3VpL2NvcmUvSWNvblwiO1xuaW1wb3J0IHR5cGUgTWRjTGluayBmcm9tIFwic2FwL3VpL21kYy9MaW5rXCI7XG5pbXBvcnQgRmllbGRFZGl0TW9kZSBmcm9tIFwic2FwL3VpL21kYy9lbnVtcy9GaWVsZEVkaXRNb2RlXCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvb2RhdGEvdjQvQ29udGV4dFwiO1xuaW1wb3J0IHR5cGUge1xuXHRGaWxlVXBsb2FkZXIkQ2hhbmdlRXZlbnQsXG5cdEZpbGVVcGxvYWRlciRGaWxlU2l6ZUV4Y2VlZEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVHlwZU1pc3NtYXRjaEV2ZW50LFxuXHRGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCxcblx0RmlsZVVwbG9hZGVyJFVwbG9hZFN0YXJ0RXZlbnRcbn0gZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlclwiO1xuaW1wb3J0IEZpbGVVcGxvYWRlciBmcm9tIFwic2FwL3VpL3VuaWZpZWQvRmlsZVVwbG9hZGVyXCI7XG5pbXBvcnQgRmlsZVVwbG9hZGVySHR0cFJlcXVlc3RNZXRob2QgZnJvbSBcInNhcC91aS91bmlmaWVkL0ZpbGVVcGxvYWRlckh0dHBSZXF1ZXN0TWV0aG9kXCI7XG5pbXBvcnQgQ29udGFjdCBmcm9tIFwiLi4vLi4vY29udGFjdC9Db250YWN0XCI7XG5pbXBvcnQgRW1haWwgZnJvbSBcIi4uLy4uL2NvbnRhY3QvRW1haWxcIjtcbmltcG9ydCBDb25kaXRpb25hbFdyYXBwZXIgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL0NvbmRpdGlvbmFsV3JhcHBlclwiO1xuaW1wb3J0IEZpbGVXcmFwcGVyIGZyb20gXCIuLi8uLi9jb250cm9scy9GaWxlV3JhcHBlclwiO1xuaW1wb3J0IE51bWJlcldpdGhVbml0T3JDdXJyZW5jeSBmcm9tIFwiLi4vLi4vY29udHJvbHMvTnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5XCI7XG5pbXBvcnQgVGV4dExpbmsgZnJvbSBcIi4uLy4uL2NvbnRyb2xzL1RleHRMaW5rXCI7XG5pbXBvcnQgRHJhZnRJbmRpY2F0b3IgZnJvbSBcIi4uLy4uL2RyYWZ0SW5kaWNhdG9yL0RyYWZ0SW5kaWNhdG9yXCI7XG5pbXBvcnQgU2l0dWF0aW9uc0luZGljYXRvciBmcm9tIFwiLi4vLi4vc2l0dWF0aW9ucy9TaXR1YXRpb25zSW5kaWNhdG9yXCI7XG5pbXBvcnQgRGF0YVBvaW50IGZyb20gXCIuLi9EYXRhUG9pbnRcIjtcbmltcG9ydCBEYXRhUG9pbnRGb3JtYXRPcHRpb25zIGZyb20gXCIuLi9EYXRhUG9pbnRGb3JtYXRPcHRpb25zXCI7XG5pbXBvcnQgdHlwZSB7IERpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlIH0gZnJvbSBcIi4vRmllbGRTdHlsZXNcIjtcblxuY29uc3QgRGlzcGxheVN0eWxlID0ge1xuXHRnZXRQcmVjaXNpb25Gb3JDdXJyZW5jeShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBudW1iZXIge1xuXHRcdGxldCBzY2FsZSA9IGZpZWxkLnByb3BlcnR5LnNjYWxlID8/IDU7XG5cdFx0aWYgKHR5cGVvZiBzY2FsZSAhPT0gXCJudW1iZXJcIikge1xuXHRcdFx0Ly8gU2NhbGUgY2FuIGJlIFwidmFyaWFibGVcIiBidXQgaXQncyBub3QgdHlwZWQgYXMgc3VjaC4gSW4gdGhpcyBjYXNlLCBTY2FsZSBlcXVhbHMgdGhlIHByZWNpc2lvblxuXHRcdFx0c2NhbGUgPSBmaWVsZC5wcm9wZXJ0eS5wcmVjaXNpb24gPz8gNTtcblx0XHR9XG5cdFx0cmV0dXJuIE1hdGgubWluKHNjYWxlLCA1KTtcblx0fSxcblxuXHRnZXRDdXJyZW5jeU9yVW5pdENvbnRyb2woXG5cdFx0ZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLFxuXHRcdGN1cnJlbmN5T3JVbml0OiBzdHJpbmcgfCBDb250cm9sLFxuXHRcdHZpc2libGVFeHByZXNzaW9uPzogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPGJvb2xlYW4+XG5cdCk6IENvbnRyb2wge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TGlua1xuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RklFTERSVU5USU1FOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWUnfVwiXG5cdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9TSE9XX0RFVEFJTFN9XCJcblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuZGlzcGxheUFnZ3JlZ2F0aW9uRGV0YWlsc31cblx0XHRcdFx0dmlzaWJsZT17dmlzaWJsZUV4cHJlc3Npb259XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0ZGVwZW5kZW50czogKGN1cnJlbmN5T3JVbml0IGFzIENvbnRyb2wpPy5jbG9uZSA/IChjdXJyZW5jeU9yVW5pdCBhcyBDb250cm9sKS5jbG9uZSgpIDogY3VycmVuY3lPclVuaXRcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXROdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3lBbGlnbmVkVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHQvLyBXZSBkb24ndCBkaXNwbGF5IGFueXRoaW5nIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWRcblx0XHRjb25zdCByZWxhdGl2ZVByb3BlcnR5UGF0aCA9IGdldENvbnRleHRSZWxhdGl2ZVRhcmdldE9iamVjdFBhdGgoZmllbGQuZGF0YU1vZGVsUGF0aCk7XG5cdFx0Y29uc3Qgb3ZlcmFsbFZpc2libGUgPSBub3QoZXF1YWwocGF0aEluTW9kZWwocmVsYXRpdmVQcm9wZXJ0eVBhdGgpLCB1bmRlZmluZWQpKTtcblx0XHRjb25zdCBjdXJyZW5jeSA9IChcblx0XHRcdDxOdW1iZXJXaXRoVW5pdE9yQ3VycmVuY3kgbnVtYmVyPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IHVuaXRPckN1cnJlbmN5PXtmaWVsZC51bml0QmluZGluZ0V4cHJlc3Npb259IC8+XG5cdFx0KTtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcykge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogY3VycmVuY3ksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IHRoaXMuZ2V0Q3VycmVuY3lPclVuaXRDb250cm9sKGZpZWxkLCBjdXJyZW5jeSwgb3ZlcmFsbFZpc2libGUpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Db25kaXRpb25hbFdyYXBwZXI+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gY3VycmVuY3k7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEF2YXRhciB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldEF2YXRhclRlbXBsYXRlKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGF2YXRhcklkO1xuXHRcdGlmIChmaWVsZC5fZmxleElkKSB7XG5cdFx0XHRhdmF0YXJJZCA9IGZpZWxkLl9mbGV4SWQ7XG5cdFx0fSBlbHNlIGlmIChmaWVsZC5pZFByZWZpeCkge1xuXHRcdFx0YXZhdGFySWQgPSBnZW5lcmF0ZShbZmllbGQuaWRQcmVmaXgsIFwiRmllbGQtY29udGVudFwiXSk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXZhdGFyVmlzaWJsZSA9IEZpZWxkVGVtcGxhdGluZy5nZXRWaXNpYmxlRXhwcmVzc2lvbihmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXG5cdFx0Y29uc3QgYXZhdGFyU3JjID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgYXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGb3JtRWxlbWVudFdyYXBwZXIgdmlzaWJsZT17YXZhdGFyVmlzaWJsZX0+XG5cdFx0XHRcdDxBdmF0YXJcblx0XHRcdFx0XHRpZD17YXZhdGFySWR9XG5cdFx0XHRcdFx0c3JjPXthdmF0YXJTcmN9XG5cdFx0XHRcdFx0ZGlzcGxheVNpemU9XCJTXCJcblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIlxuXHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRkaXNwbGF5U2hhcGU9e2F2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0Lz5cblx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgYnV0dG9uIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0QnV0dG9uVGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpY29uID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkljb25VcmwgOiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgdGV4dCA9ICEoZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UpID8gKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFR5cGVzKS5MYWJlbCA6IHVuZGVmaW5lZDtcblx0XHRjb25zdCB0b29sdGlwID0gZmllbGQuZm9ybWF0T3B0aW9ucz8uc2hvd0ljb25VcmwgPz8gZmFsc2UgPyAoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkxhYmVsIDogdW5kZWZpbmVkO1xuXG5cdFx0bGV0IGJ1dHRvblByZXNzO1xuXHRcdGxldCBidXR0b25Jc0JvdW5kO1xuXHRcdGxldCBidXR0b25PcGVyYXRpb25BdmFpbGFibGU7XG5cdFx0bGV0IGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZDtcblx0XHRsZXQgbmF2aWdhdGlvbkF2YWlsYWJsZTtcblxuXHRcdGlmIChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC4kVHlwZSA9PT0gVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkRm9yQWN0aW9uKSB7XG5cdFx0XHRidXR0b25QcmVzcyA9IGZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRBY3Rpb25CdXR0b247XG5cblx0XHRcdGJ1dHRvbklzQm91bmQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgPyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuaXNCb3VuZCA6IHRydWU7XG5cdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXRcblx0XHRcdFx0PyBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQuYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdFx0XHQ6IFwiZmFsc2VcIjtcblx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLkFjdGlvblRhcmdldCA/IHVuZGVmaW5lZCA6IFwiZmFsc2VcIjtcblxuXHRcdFx0aWYgKGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSAmJiBidXR0b25PcGVyYXRpb25BdmFpbGFibGUgIT09IFwiZmFsc2VcIikge1xuXHRcdFx0XHRjb25zdCBhY3Rpb25UYXJnZXQgPSBmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5BY3Rpb25UYXJnZXQgYXMgQWN0aW9uO1xuXHRcdFx0XHRjb25zdCBiaW5kaW5nUGFyYW1OYW1lID0gYWN0aW9uVGFyZ2V0LnBhcmFtZXRlcnNbMF0ubmFtZTtcblx0XHRcdFx0Ly9RVUFMTVMsIG5lZWRzIHRvIGJlIGNoZWNrZWQgd2hldGhlciB0aGlzIG1ha2VzIHNlbnNlIGF0IHRoYXQgcGxhY2UsIG1pZ2h0IGJlIGdvb2QgaW4gYSBkZWRpY2F0ZWQgaGVscGVyIGZ1bmN0aW9uXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZSBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxib29sZWFuPixcblx0XHRcdFx0XHRcdFtdLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0KHBhdGg6IHN0cmluZykgPT4ge1xuXHRcdFx0XHRcdFx0XHRpZiAocGF0aC5zdGFydHNXaXRoKGJpbmRpbmdQYXJhbU5hbWUpKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHBhdGgucmVwbGFjZShiaW5kaW5nUGFyYW1OYW1lICsgXCIvXCIsIFwiXCIpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXRoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZmllbGQuY29udmVydGVkTWV0YVBhdGguJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbikge1xuXHRcdFx0YnV0dG9uUHJlc3MgPSBmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkV2l0aElCTjtcblx0XHRcdG5hdmlnYXRpb25BdmFpbGFibGUgPSB0cnVlO1xuXHRcdFx0aWYgKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aD8uJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiAmJlxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQgJiZcblx0XHRcdFx0U3RyaW5nKGZpZWxkLmZvcm1hdE9wdGlvbnMuaWdub3JlTmF2aWdhdGlvbkF2YWlsYWJsZSkgIT09IFwidHJ1ZVwiXG5cdFx0XHQpIHtcblx0XHRcdFx0bmF2aWdhdGlvbkF2YWlsYWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aC5OYXZpZ2F0aW9uQXZhaWxhYmxlKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0bGV0IGJ1dHRvbiA9IFwiXCI7XG5cdFx0aWYgKGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLiRUeXBlID09PSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24pIHtcblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLnZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e25hdmlnYXRpb25BdmFpbGFibGV9XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSBpZiAoXG5cdFx0XHRGaWVsZEhlbHBlci5pc0RhdGFGaWVsZEFjdGlvbkJ1dHRvblZpc2libGUoXG5cdFx0XHRcdGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoLFxuXHRcdFx0XHRidXR0b25Jc0JvdW5kLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUgYXMgYm9vbGVhbiB8IHVuZGVmaW5lZFxuXHRcdFx0KVxuXHRcdCkge1xuXHRcdFx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID0gRmllbGRIZWxwZXIuaXNEYXRhRmllbGRBY3Rpb25CdXR0b25FbmFibGVkKFxuXHRcdFx0XHRmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdGJ1dHRvbklzQm91bmQgYXMgdW5rbm93biBhcyBib29sZWFuLFxuXHRcdFx0XHRidXR0b25PcGVyYXRpb25BdmFpbGFibGUsXG5cdFx0XHRcdGJ1dHRvbk9wZXJhdGlvbkF2YWlsYWJsZUZvcm1hdHRlZCBhcyBzdHJpbmdcblx0XHRcdCk7XG5cblx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNhbEFnZ3JlZ2F0ZWRSb3cpIHtcblx0XHRcdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdHlwZSA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5QnV0dG9uVHlwZShmaWVsZC5kYXRhTW9kZWxQYXRoIGFzIERhdGFNb2RlbE9iamVjdFBhdGg8RGF0YVBvaW50VHlwZT4pO1xuXHRcdFx0aWNvbiA9IGljb24gPz8gKGlzQWN0aW9uQUlPcGVyYXRpb24oZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkRm9yQWN0aW9uKSA/IGFpSWNvbiA6IHVuZGVmaW5lZCk7XG5cblx0XHRcdGJ1dHRvbiA9IChcblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNsYXNzPXtmaWVsZC5jbGFzc31cblx0XHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdFx0dG9vbHRpcD17dG9vbHRpcH1cblx0XHRcdFx0XHRwcmVzcz17YnV0dG9uUHJlc3MgYXMgdW5rbm93biBhcyAoKG9FdmVudDogRXZlbnQ8b2JqZWN0LCBFdmVudFByb3ZpZGVyPikgPT4gdm9pZCkgfCB1bmRlZmluZWR9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC52aXNpYmxlfVxuXHRcdFx0XHRcdHR5cGU9e3R5cGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gYnV0dG9uO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbnRhY3QgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRDb250YWN0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb250YWN0TWV0YVBhdGggPSBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aCk7XG5cdFx0Y29uc3QgY29udGFjdFZpc2libGUgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmlzaWJsZUV4cHJlc3Npb24oZmllbGQuZGF0YU1vZGVsUGF0aCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPERhdGFQb2ludFR5cGU+KTtcblxuXHRcdHJldHVybiAoXG5cdFx0XHQ8Q29udGFjdFxuXHRcdFx0XHRpZFByZWZpeD17ZmllbGQuaWRQcmVmaXh9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0bWV0YVBhdGg9e2NvbnRhY3RNZXRhUGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdGNvbnRleHRQYXRoPXtmaWVsZC5jb250ZXh0UGF0aC5nZXRQYXRoKCl9XG5cdFx0XHRcdF9mbGV4SWQ9e2ZpZWxkLl9mbGV4SWR9XG5cdFx0XHRcdHZpc2libGU9e2NvbnRhY3RWaXNpYmxlfVxuXHRcdFx0XHRzaG93RW1wdHlJbmRpY2F0b3I9e2ZpZWxkLmZvcm1hdE9wdGlvbnMuc2hvd0VtcHR5SW5kaWNhdG9yfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIGlubmVycGFydCBvZiB0aGUgZGF0YSBwb2ludCB0byBiZSB1c2VkIGluIGdldERhdGFQb2ludFRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyIEJvb2xlYW4gdmFsdWUgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIERhdGFQb2ludFxuXHQgKiBcdFx0XHRcdFx0ICBcdFx0XHRzaGFsbCBiZSBnZW5lcmF0ZWQgZm9yIHRoZSBjb25kaXRpb25hbCB3cmFwcGVyIGNhc2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB3aXRoQ29uZGl0aW9uYWxXcmFwcGVyOiBib29sZWFuKTogc3RyaW5nIHtcblx0XHRjb25zdCBjb252ZXJ0ZWREYXRhRmllbGQgPSBNZXRhTW9kZWxDb252ZXJ0ZXIuY29udmVydE1ldGFNb2RlbENvbnRleHQoZmllbGQubWV0YVBhdGgpIGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXM7XG5cblx0XHRjb25zdCBtZXRhUGF0aCA9XG5cdFx0XHRjb252ZXJ0ZWREYXRhRmllbGQuJFR5cGUgPT09IFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZEZvckFubm90YXRpb25cblx0XHRcdFx0PyBmaWVsZC5tZXRhUGF0aC5nZXRNb2RlbCgpLmNyZWF0ZUJpbmRpbmdDb250ZXh0KFwiVGFyZ2V0LyRBbm5vdGF0aW9uUGF0aFwiLCBmaWVsZC5tZXRhUGF0aClcblx0XHRcdFx0OiBmaWVsZC5tZXRhUGF0aDtcblxuXHRcdGNvbnN0IGZvcm1hdE9wdGlvbnMgPSB7XG5cdFx0XHRtZWFzdXJlRGlzcGxheU1vZGU6IGZpZWxkLmZvcm1hdE9wdGlvbnMubWVhc3VyZURpc3BsYXlNb2RlLFxuXHRcdFx0c2hvd0VtcHR5SW5kaWNhdG9yOiBmaWVsZC5mb3JtYXRPcHRpb25zLnNob3dFbXB0eUluZGljYXRvclxuXHRcdH07XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0PERhdGFQb2ludFxuXHRcdFx0XHRpZFByZWZpeD17d2l0aENvbmRpdGlvbmFsV3JhcHBlciA/IHVuZGVmaW5lZCA6IGZpZWxkLmlkUHJlZml4fVxuXHRcdFx0XHR2aXNpYmxlPXsoIXdpdGhDb25kaXRpb25hbFdyYXBwZXIgPyBmaWVsZC5kaXNwbGF5VmlzaWJsZSA6IHVuZGVmaW5lZCkgYXMgdW5rbm93biBhcyBzdHJpbmcgfCB1bmRlZmluZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSA/IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IDogdW5kZWZpbmVkfVxuXHRcdFx0XHRtZXRhUGF0aD17bWV0YVBhdGguZ2V0UGF0aCgpfVxuXHRcdFx0XHRjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGg/LmdldFBhdGgoKX1cblx0XHRcdFx0dmFsdWU9e2ZpZWxkLnZhbHVlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGZvcm1hdE9wdGlvbnM6IDxEYXRhUG9pbnRGb3JtYXRPcHRpb25zIHsuLi5mb3JtYXRPcHRpb25zfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9EYXRhUG9pbnQ+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBEYXRhUG9pbnQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXREYXRhUG9pbnRUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmICgoZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljcyA/PyBmYWxzZSkgJiYgKGZpZWxkLmhhc1VuaXRPckN1cnJlbmN5ID8/IGZhbHNlKSkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gY29uZGl0aW9uPXtmaWVsZC5oYXNWYWxpZEFuYWx5dGljYWxDdXJyZW5jeU9yVW5pdCBhcyB1bmtub3duIGFzIGJvb2xlYW59PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50VHJ1ZTogdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpLFxuXHRcdFx0XHRcdFx0Y29udGVudEZhbHNlOiB0aGlzLmdldEN1cnJlbmN5T3JVbml0Q29udHJvbChmaWVsZCwgdGhpcy5nZXREYXRhUG9pbnRJbm5lclBhcnQoZmllbGQsIHRydWUpKVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQ29uZGl0aW9uYWxXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YVBvaW50SW5uZXJQYXJ0KGZpZWxkLCBmYWxzZSk7XG5cdFx0fVxuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEV4cGFuZGFibGVUZXh0IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0RXhwYW5kYWJsZVRleHQoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEV4cGFuZGFibGVUZXh0XG5cdFx0XHRcdGlkPXtmaWVsZD8uZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkPy5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0b3ZlcmZsb3dNb2RlPXtmaWVsZD8uZm9ybWF0T3B0aW9ucz8udGV4dEV4cGFuZEJlaGF2aW9yRGlzcGxheX1cblx0XHRcdFx0bWF4Q2hhcmFjdGVycz17ZmllbGQ/LmZvcm1hdE9wdGlvbnM/LnRleHRNYXhDaGFyYWN0ZXJzRGlzcGxheX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZD8uZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIEZpbGUgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRGaWxlVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRsZXQgaW5uZXJGaWxlUGFydDtcblxuXHRcdGNvbnN0IGZpbGVTdHJlYW1Ob3RFbXB0eSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0bm90KGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSlcblx0XHQpO1xuXG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiA9IGZpZWxkLmZpbGVGaWxlbmFtZUV4cHJlc3Npb24gPyBcInsgcGF0aDogJ1wiICsgZmllbGQuZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiArIFwiJyB9XCIgOiBcIlwiO1xuXG5cdFx0Ly8gRmlsZVdyYXBwZXJcblx0XHRjb25zdCBmaWxlVXBsb2FkVXJsID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0Y29uc3QgZmlsZUZpbGVuYW1lUGF0aCA9IChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5Db250ZW50RGlzcG9zaXRpb24/LkZpbGVuYW1lIGFzIFBhdGhBbm5vdGF0aW9uRXhwcmVzc2lvbjxzdHJpbmc+KT8ucGF0aDtcblx0XHRjb25zdCBmaWxlTWVkaWFUeXBlID1cblx0XHRcdGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSAmJlxuXHRcdFx0Y29tcGlsZUV4cHJlc3Npb24oZ2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZSkpO1xuXG5cdFx0Ly8gdGVtcGxhdGU6aWZcblx0XHRjb25zdCBmaWxlSXNJbWFnZSA9XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlVVJMIHx8XG5cdFx0XHQhIWZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLlVJPy5Jc0ltYWdlIHx8XG5cdFx0XHQvaW1hZ2VcXC8vaS50ZXN0KGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvcmU/Lk1lZGlhVHlwZT8udG9TdHJpbmcoKSA/PyBcIlwiKTtcblxuXHRcdC8vIEF2YXRhclxuXHRcdGNvbnN0IGZpbGVBdmF0YXJTcmMgPSBGaWVsZFRlbXBsYXRpbmcuZ2V0VmFsdWVCaW5kaW5nKGZpZWxkLmRhdGFNb2RlbFBhdGgsIHt9KTtcblx0XHRjb25zdCBmaWxlQXZhdGFyRGlzcGxheVNoYXBlID0gRmllbGRUZW1wbGF0aW5nLmdldEF2YXRhclNoYXBlKGZpZWxkLmRhdGFNb2RlbFBhdGgpO1xuXG5cdFx0Ly8gSWNvblxuXHRcdGNvbnN0IGZpbGVJY29uU3JjID0gRmllbGRIZWxwZXIuZ2V0UGF0aEZvckljb25Tb3VyY2UoZmllbGQuZmlsZVJlbGF0aXZlUHJvcGVydHlQYXRoKTtcblxuXHRcdC8vIExpbmtcblx0XHRjb25zdCBmaWxlTGlua1RleHQgPSBGaWVsZEhlbHBlci5nZXRGaWxlbmFtZUV4cHIoZmlsZUZpbGVuYW1lRXhwcmVzc2lvbiwgXCJ7c2FwLmZlLmkxOG4+TV9GSUVMRF9GSUxFVVBMT0FERVJfTk9GSUxFTkFNRV9URVhUfVwiKTtcblx0XHRjb25zdCBmaWxlTGlua0hyZWYgPSBGaWVsZEhlbHBlci5nZXREb3dubG9hZFVybChmaWxlVXBsb2FkVXJsID8/IFwiXCIpO1xuXG5cdFx0Ly8gVGV4dFxuXHRcdGNvbnN0IGZpbGVUZXh0VmlzaWJsZSA9IGNvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKGAke2ZpZWxkLmZpbGVSZWxhdGl2ZVByb3BlcnR5UGF0aH1Ab2RhdGEubWVkaWFDb250ZW50VHlwZWApLCBudWxsKSk7XG5cblx0XHRsZXQgZmlsZUFjY2VwdGFibGVNZWRpYVR5cGVzO1xuXHRcdC8vIEZpbGVVcGxvYWRlclxuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5Db3JlPy5BY2NlcHRhYmxlTWVkaWFUeXBlcykge1xuXHRcdFx0Y29uc3QgYWNjZXB0ZWRUeXBlcyA9IEFycmF5LmZyb20oZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnMuQ29yZS5BY2NlcHRhYmxlTWVkaWFUeXBlcyBhcyB1bmtub3duIGFzIHN0cmluZ1tdKS5tYXAoXG5cdFx0XHRcdCh0eXBlKSA9PiBgJyR7dHlwZX0nYFxuXHRcdFx0KTtcblx0XHRcdGZpbGVBY2NlcHRhYmxlTWVkaWFUeXBlcyA9IGB7PW9kYXRhLmNvbGxlY3Rpb24oWyR7YWNjZXB0ZWRUeXBlcy5qb2luKFwiLFwiKX1dKX1gOyAvLyBUaGlzIGRvZXMgbm90IGZlZWwgcmlnaHQsIGJ1dCBmb2xsb3dzIHRoZSBsb2dpYyBvZiBBbm5vdGF0aW9uSGVscGVyI3ZhbHVlXG5cdFx0fVxuXHRcdGNvbnN0IGZpbGVNYXhpbXVtU2l6ZSA9IEZpZWxkSGVscGVyLmNhbGN1bGF0ZU1CZnJvbUJ5dGUoZmllbGQucHJvcGVydHkubWF4TGVuZ3RoKTtcblxuXHRcdGlmIChmaWxlSXNJbWFnZSkge1xuXHRcdFx0aW5uZXJGaWxlUGFydCA9IHtcblx0XHRcdFx0YXZhdGFyOiAoXG5cdFx0XHRcdFx0PEF2YXRhclxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0XHRzcmM9e2ZpbGVBdmF0YXJTcmN9XG5cdFx0XHRcdFx0XHRkaXNwbGF5U2l6ZT1cIlNcIlxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBVaVNtYWxsTWFyZ2luRW5kXCJcblx0XHRcdFx0XHRcdGltYWdlRml0VHlwZT1cIkNvdmVyXCJcblx0XHRcdFx0XHRcdGRpc3BsYXlTaGFwZT17ZmlsZUF2YXRhckRpc3BsYXlTaGFwZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRjdXN0b21EYXRhOiA8SW1hZ2VDdXN0b21EYXRhIHBhcmFtTmFtZT1cInhjYWNoZVwiIC8+XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQXZhdGFyPlxuXHRcdFx0XHQpXG5cdFx0XHR9O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpbm5lckZpbGVQYXJ0ID0ge1xuXHRcdFx0XHRpY29uOiA8SWNvbiBzcmM9e2ZpbGVJY29uU3JjfSBjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5FbmRcIiB2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9IC8+LFxuXHRcdFx0XHRsaW5rOiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdHRleHQ9e2ZpbGVMaW5rVGV4dH1cblx0XHRcdFx0XHRcdHRhcmdldD1cIl9ibGFua1wiXG5cdFx0XHRcdFx0XHRocmVmPXtmaWxlTGlua0hyZWZ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWxlU3RyZWFtTm90RW1wdHl9XG5cdFx0XHRcdFx0XHR3cmFwcGluZz1cInRydWVcIlxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpLFxuXHRcdFx0XHR0ZXh0OiA8VGV4dCBlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX0gdGV4dD1cIlwiIHZpc2libGU9e2ZpbGVUZXh0VmlzaWJsZX0gLz5cblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0aWYgKChmaWVsZC5lZGl0TW9kZSA/PyBmaWVsZC5jb21wdXRlZEVkaXRNb2RlKSAhPT0gRmllbGRFZGl0TW9kZS5EaXNwbGF5KSB7XG5cdFx0XHRjb25zdCBiZWZvcmVEaWFsb2dPcGVuID0gZmllbGQuY29sbGFib3JhdGlvbkVuYWJsZWQgPyBmaWVsZC5ldmVudEhhbmRsZXJzLmhhbmRsZU9wZW5VcGxvYWRlciA6IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IGFmdGVyRGlhbG9nT3BlbiA9IGZpZWxkLmNvbGxhYm9yYXRpb25FbmFibGVkID8gZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVDbG9zZVVwbG9hZGVyIDogdW5kZWZpbmVkO1xuXG5cdFx0XHRpbm5lckZpbGVQYXJ0ID0ge1xuXHRcdFx0XHQuLi5pbm5lckZpbGVQYXJ0LFxuXHRcdFx0XHRmaWxlVXBsb2FkZXI6IChcblx0XHRcdFx0XHQ8RmlsZVVwbG9hZGVyXG5cdFx0XHRcdFx0XHRuYW1lPVwiRkVWNEZpbGVVcGxvYWRcIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZWRpdGFibGVFeHByZXNzaW9ufVxuXHRcdFx0XHRcdFx0YnV0dG9uT25seT1cInRydWVcIlxuXHRcdFx0XHRcdFx0aWNvbk9ubHk9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdG11bHRpcGxlPVwiZmFsc2VcIlxuXHRcdFx0XHRcdFx0dG9vbHRpcD1cIntzYXAuZmUuaTE4bj5NX0ZJRUxEX0ZJTEVVUExPQURFUl9VUExPQURfQlVUVE9OX1RPT0xUSVB9XCJcblx0XHRcdFx0XHRcdGljb249XCJzYXAtaWNvbjovL3VwbG9hZFwiXG5cdFx0XHRcdFx0XHRzdHlsZT1cIlRyYW5zcGFyZW50XCJcblx0XHRcdFx0XHRcdHNlbmRYSFI9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdHVzZU11bHRpcGFydD1cImZhbHNlXCJcblx0XHRcdFx0XHRcdHNhbWVGaWxlbmFtZUFsbG93ZWQ9XCJ0cnVlXCJcblx0XHRcdFx0XHRcdG1pbWVUeXBlPXtmaWxlQWNjZXB0YWJsZU1lZGlhVHlwZXN9XG5cdFx0XHRcdFx0XHR0eXBlTWlzc21hdGNoPXtcblx0XHRcdFx0XHRcdFx0ZmllbGQuZXZlbnRIYW5kbGVycy5oYW5kbGVUeXBlTWlzc21hdGNoIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJFR5cGVNaXNzbWF0Y2hFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF4aW11bUZpbGVTaXplPXtmaWxlTWF4aW11bVNpemV9XG5cdFx0XHRcdFx0XHRmaWxlU2l6ZUV4Y2VlZD17XG5cdFx0XHRcdFx0XHRcdGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlRmlsZVNpemVFeGNlZWQgYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkRmlsZVNpemVFeGNlZWRFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0dXBsb2FkT25DaGFuZ2U9XCJmYWxzZVwiXG5cdFx0XHRcdFx0XHR1cGxvYWRDb21wbGV0ZT17XG5cdFx0XHRcdFx0XHRcdGZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlVXBsb2FkQ29tcGxldGUgYXMgdW5rbm93biBhcyAob0V2ZW50OiBGaWxlVXBsb2FkZXIkVXBsb2FkQ29tcGxldGVFdmVudCkgPT4gdm9pZFxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aHR0cFJlcXVlc3RNZXRob2Q9e2ZpZWxkLmlzRHluYW1pY0luc3RhbnRpYXRpb24gPyBGaWxlVXBsb2FkZXJIdHRwUmVxdWVzdE1ldGhvZC5QdXQgOiBcIlB1dFwifVxuXHRcdFx0XHRcdFx0Y2hhbmdlPXtmaWVsZC5ldmVudEhhbmRsZXJzLnVwbG9hZFN0cmVhbSBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEZpbGVVcGxvYWRlciRDaGFuZ2VFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGJlZm9yZURpYWxvZ09wZW49e2JlZm9yZURpYWxvZ09wZW4gYXMgdW5rbm93biBhcyAob0V2ZW50OiBFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGFmdGVyRGlhbG9nQ2xvc2U9e2FmdGVyRGlhbG9nT3BlbiBhcyB1bmtub3duIGFzIChvRXZlbnQ6IEV2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0dXBsb2FkU3RhcnQ9e2ZpZWxkLmV2ZW50SGFuZGxlcnMuaGFuZGxlT3BlblVwbG9hZGVyIGFzIHVua25vd24gYXMgKG9FdmVudDogRmlsZVVwbG9hZGVyJFVwbG9hZFN0YXJ0RXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KSxcblx0XHRcdFx0ZGVsZXRlQnV0dG9uOiAoXG5cdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0aWNvbj1cInNhcC1pY29uOi8vc3lzLWNhbmNlbFwiXG5cdFx0XHRcdFx0XHR0eXBlPVwiVHJhbnNwYXJlbnRcIlxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMucmVtb3ZlU3RyZWFtIGFzIHVua25vd24gYXMgKG9FdmVudDogRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0XHR0b29sdGlwPVwie3NhcC5mZS5pMThuPk1fRklFTERfRklMRVVQTE9BREVSX0RFTEVURV9CVVRUT05fVE9PTFRJUH1cIlxuXHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZWRpdGFibGVFeHByZXNzaW9ufVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17ZmlsZVN0cmVhbU5vdEVtcHR5fVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdClcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIChcblx0XHRcdDxGaWxlV3JhcHBlclxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHZpc2libGU9e2ZpZWxkLnZpc2libGV9XG5cdFx0XHRcdHVwbG9hZFVybD17ZmlsZVVwbG9hZFVybH1cblx0XHRcdFx0cHJvcGVydHlQYXRoPXtmaWVsZC5maWxlUmVsYXRpdmVQcm9wZXJ0eVBhdGh9XG5cdFx0XHRcdGZpbGVuYW1lPXtmaWxlRmlsZW5hbWVQYXRofVxuXHRcdFx0XHRtZWRpYVR5cGU9e2ZpbGVNZWRpYVR5cGV9XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdHZhbGlkYXRlRmllbGRHcm91cD17ZmllbGQuZXZlbnRIYW5kbGVycy52YWxpZGF0ZUZpZWxkR3JvdXAgYXMgKG9FdmVudDogQ29udHJvbCRWYWxpZGF0ZUZpZWxkR3JvdXBFdmVudCkgPT4gdm9pZH1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPixcblx0XHRcdFx0XHRpbm5lckZpbGVQYXJ0XG5cdFx0XHRcdH19XG5cdFx0XHQ8L0ZpbGVXcmFwcGVyPlxuXHRcdCk7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgTGluayB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldExpbmtUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGxldCBsaW5rVXJsO1xuXHRcdGxldCBpY29uVXJsO1xuXHRcdGxldCBsaW5rQWN0aXZlZDtcblx0XHR0eXBlIExpbmtUYXJnZXQgPSBcIl9ibGFua1wiIHwgXCJfc2VsZlwiIHwgXCJfdG9wXCIgfCBcIl9wYXJlbnRcIjtcblx0XHRsZXQgbGlua1RhcmdldDogTGlua1RhcmdldCB8IHVuZGVmaW5lZDtcblxuXHRcdHN3aXRjaCAoZmllbGQuY29udmVydGVkTWV0YVBhdGguJFR5cGUgYXMgc3RyaW5nKSB7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhJbnRlbnRCYXNlZE5hdmlnYXRpb246XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17RGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpfVxuXHRcdFx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMub25EYXRhRmllbGRXaXRoSUJOIGFzIHVua25vd24gYXMgKG9FdmVudDogTGluayRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwTVRleHRSZW5kZXJXaGl0ZXNwYWNlV3JhcFwiXG5cdFx0XHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdGNhc2UgVUlBbm5vdGF0aW9uVHlwZXMuRGF0YUZpZWxkV2l0aE5hdmlnYXRpb25QYXRoOlxuXHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdDxMaW5rXG5cdFx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5vbkRhdGFGaWVsZFdpdGhOYXZpZ2F0aW9uUGF0aCBhcyB1bmtub3duIGFzIChvRXZlbnQ6IExpbmskUHJlc3NFdmVudCkgPT4gdm9pZH1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2ZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY2FsQWdncmVnYXRlZFJvdyA/IFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlIDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcE1UZXh0UmVuZGVyV2hpdGVzcGFjZVdyYXBcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHRjYXNlIFVJQW5ub3RhdGlvblR5cGVzLkRhdGFGaWVsZFdpdGhBY3Rpb246XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLm9uRGF0YUZpZWxkQWN0aW9uQnV0dG9uIGFzIHVua25vd24gYXMgKG9FdmVudDogTGluayRQcmVzc0V2ZW50KSA9PiB2b2lkfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17ZmllbGQuZm9ybWF0T3B0aW9ucy5pc0FuYWx5dGljYWxBZ2dyZWdhdGVkUm93ID8gVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUgOiB1bmRlZmluZWR9XG5cdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQpO1xuXHRcdFx0Y2FzZSBVSUFubm90YXRpb25UeXBlcy5EYXRhRmllbGRXaXRoVXJsOlxuXHRcdFx0XHRjb25zdCBodG1sNUxpbmtUYXJnZXQgPSBmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucy5IVE1MNT8uTGlua1RhcmdldDtcblx0XHRcdFx0ZmllbGQudGV4dCA9IERpc3BsYXlTdHlsZS5jb21wdXRlVGV4dFdpdGhXaGl0ZVNwYWNlKGZpZWxkKTtcblx0XHRcdFx0aWNvblVybCA9IChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRUeXBlcykuSWNvblVybFxuXHRcdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0XHRcdGdldEV4cHJlc3Npb25Gcm9tQW5ub3RhdGlvbihcblx0XHRcdFx0XHRcdFx0XHQoZmllbGQuY29udmVydGVkTWV0YVBhdGggYXMgRGF0YUZpZWxkVHlwZXMpLkljb25VcmwgYXMgdW5rbm93biBhcyBQcm9wZXJ0eUFubm90YXRpb25WYWx1ZTxTdHJpbmc+XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHQgIClcblx0XHRcdFx0XHQ6IHVuZGVmaW5lZDtcblx0XHRcdFx0Y29uc3QgbGlua0JpbmRpbmcgPSBnZXRFeHByZXNzaW9uRnJvbUFubm90YXRpb24oXG5cdFx0XHRcdFx0KGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhVcmwpLlVybCBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz5cblx0XHRcdFx0KTtcblx0XHRcdFx0bGlua1VybCA9IGNvbXBpbGVFeHByZXNzaW9uKGxpbmtCaW5kaW5nKTtcblx0XHRcdFx0bGlua0FjdGl2ZWQgPSBjb21waWxlRXhwcmVzc2lvbihub3QoZXF1YWwobGlua0JpbmRpbmcsIFwiXCIpKSk7XG5cdFx0XHRcdGxpbmtUYXJnZXQgPSBodG1sNUxpbmtUYXJnZXQgJiYgKGh0bWw1TGlua1RhcmdldC50b1N0cmluZygpIGFzIExpbmtUYXJnZXQpO1xuXHRcdH1cblxuXHRcdGlmIChmaWVsZC5wcm9wZXJ0eS5hbm5vdGF0aW9ucz8uQ29tbXVuaWNhdGlvbj8uSXNFbWFpbEFkZHJlc3MgfHwgZmllbGQucHJvcGVydHkuYW5ub3RhdGlvbnM/LkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIpIHtcblx0XHRcdGNvbnN0IGxpbmtJc0VtYWlsQWRkcmVzcyA9IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW11bmljYXRpb24/LklzRW1haWxBZGRyZXNzICE9PSB1bmRlZmluZWQ7XG5cdFx0XHRjb25zdCBsaW5rSXNQaG9uZU51bWJlciA9IGZpZWxkLnByb3BlcnR5LmFubm90YXRpb25zLkNvbW11bmljYXRpb24/LklzUGhvbmVOdW1iZXIgIT09IHVuZGVmaW5lZDtcblx0XHRcdGNvbnN0IHByb3BlcnR5VmFsdWVCaW5kaW5nID0gRmllbGRUZW1wbGF0aW5nLmdldFZhbHVlQmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCB7fSk7XG5cdFx0XHRjb25zdCBtYWlsQmxvY2tJZCA9IGZpZWxkLmRpc3BsYXlTdHlsZUlkID8gZmllbGQuZGlzcGxheVN0eWxlSWQgOiBgbWFpbEJsb2NrJHt1aWQoKX1gO1xuXHRcdFx0aWYgKGxpbmtJc0VtYWlsQWRkcmVzcykge1xuXHRcdFx0XHRsaW5rVXJsID0gYG1haWx0bzoke3Byb3BlcnR5VmFsdWVCaW5kaW5nfWA7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEVtYWlsXG5cdFx0XHRcdFx0XHRpZD17bWFpbEJsb2NrSWR9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0XHRtYWlsPXtwcm9wZXJ0eVZhbHVlQmluZGluZ31cblx0XHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSA/IGZpZWxkLmFyaWFMYWJlbGxlZEJ5IDogdW5kZWZpbmVkfVxuXHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGlmIChsaW5rSXNQaG9uZU51bWJlcikge1xuXHRcdFx0XHRsaW5rVXJsID0gYHRlbDoke3Byb3BlcnR5VmFsdWVCaW5kaW5nfWA7XG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PExpbmtcblx0XHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0dGV4dD17RGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpfVxuXHRcdFx0XHRcdFx0aHJlZj17bGlua1VybH1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2xpbmtBY3RpdmVkfVxuXHRcdFx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRcdGNsYXNzPVwic2FwTVRleHRSZW5kZXJXaGl0ZXNwYWNlV3JhcFwiXG5cdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGljb25VcmwpIHtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRcdGljb249e2ljb25Vcmx9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rIGFzIHVua25vd24gYXMgKG9FdmVudDogRXZlbnQpID0+IHZvaWR9XG5cdFx0XHRcdFx0YWN0aXZlPXtsaW5rQWN0aXZlZH1cblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IDxDdXN0b21EYXRhIGtleT17XCJ1cmxcIn0gdmFsdWU9e2xpbmtVcmx9IC8+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9PYmplY3RTdGF0dXM+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TGlua1xuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdGhyZWY9e2xpbmtVcmx9XG5cdFx0XHRcdFx0ZW5hYmxlZD17bGlua0FjdGl2ZWR9XG5cdFx0XHRcdFx0dGFyZ2V0PXtsaW5rVGFyZ2V0ID09PSB1bmRlZmluZWQgPyBcIl90b3BcIiA6IGxpbmtUYXJnZXR9XG5cdFx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXAgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBmaWVsZC53cmFwfVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdC8+XG5cdFx0XHQpO1xuXHRcdH1cblx0fSxcblxuXHQvKipcblx0ICogRmluZCB0aGUgZm9yZWlnbiBrZXkgb2YgdGFyZ2V0IGVudGl0eSB3aGljaCBxdWljayB2aWV3IEZhY2V0cyB3ZSB3YW50IHRvIGRpc3BsYXkuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgVGhlIGtleSBvZiB0aGUgdGFyZ2V0IGVudGl0eVxuXHQgKi9cblx0Z2V0Rm9yZWlnbktleUZvckN1c3RvbURhdGEoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCByZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eSA9IFF1aWNrVmlldy5nZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eShmaWVsZC5kYXRhTW9kZWxQYXRoKTtcblx0XHRpZiAocmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkpIHtcblx0XHRcdGNvbnN0IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzID0gZmllbGQuZGF0YU1vZGVsUGF0aC50YXJnZXRFbnRpdHlUeXBlLm5hdmlnYXRpb25Qcm9wZXJ0aWVzO1xuXHRcdFx0Y29uc3QgdGFyZ2V0TmF2UHJvcCA9IHRhcmdldE5hdmlnYXRpb25Qcm9wZXJ0aWVzLmZpbmQoKG5hdlByb3ApID0+IG5hdlByb3AubmFtZSA9PT0gcmVsYXRpdmVQYXRoVG9RdWlja1ZpZXdFbnRpdHkpO1xuXHRcdFx0Y29uc3QgcmVmQ29uc3RyYWludCA9IHRhcmdldE5hdlByb3A/LnJlZmVyZW50aWFsQ29uc3RyYWludDtcblx0XHRcdGNvbnN0IGtleSA9IHJlZkNvbnN0cmFpbnQ/Lmxlbmd0aCAmJiB0eXBlb2YgcmVmQ29uc3RyYWludFswXSA9PT0gXCJvYmplY3RcIiAmJiByZWZDb25zdHJhaW50WzBdLnRhcmdldFByb3BlcnR5O1xuXHRcdFx0Y29uc3Qga2V5VG9GZXRjaCA9IGtleSA/IGAke3JlbGF0aXZlUGF0aFRvUXVpY2tWaWV3RW50aXR5fS8ke2tleX1gIDogdW5kZWZpbmVkO1xuXHRcdFx0aWYgKGtleVRvRmV0Y2ggIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRyZXR1cm4ga2V5VG9GZXRjaDtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBjaGVjayBleHByZXNzaW9uIGZvciBkaXNwbGF5aW5nIG9yIG5vdCBhIHF1aWNrdmlldy5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBUaGUga2V5IG9mIHRoZSB0YXJnZXQgZW50aXR5XG5cdCAqL1xuXHRnZXRGb3JlaWduS2V5VmFsdWVFeHByZXNzaW9uKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0Y29uc3QgZm9yZWlnbktleVJlbGF0aXZlUGF0aCA9IFF1aWNrVmlldy5nZXRSZWxhdGl2ZVBhdGhUb1F1aWNrVmlld0VudGl0eShmaWVsZC5kYXRhTW9kZWxQYXRoKVxuXHRcdFx0PyB0aGlzLmdldEZvcmVpZ25LZXlGb3JDdXN0b21EYXRhKGZpZWxkKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZXhwcmVzc2lvbjogQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uPHN0cmluZz4gPSB7XG5cdFx0XHRwYXRoOiBgJHtmb3JlaWduS2V5UmVsYXRpdmVQYXRofWAsXG5cdFx0XHRfdHlwZTogXCJQYXRoSW5Nb2RlbFwiXG5cdFx0fTtcblx0XHRyZXR1cm4gYCR7Y29tcGlsZUV4cHJlc3Npb24oaWZFbHNlKGVxdWFsKGZvcmVpZ25LZXlSZWxhdGl2ZVBhdGgsIHVuZGVmaW5lZCksIGNvbnN0YW50KHRydWUpLCBub3QoZXF1YWwobnVsbCwgZXhwcmVzc2lvbikpKSl9YDtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSB0ZXh0IFRoZSB0ZXh0IHRvIGRpc3BsYXlcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRTdGFuZGFyZExpbmtXaXRoUXVpY2tWaWV3VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzLCB0ZXh0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxMaW5rXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZpZWxkUnVudGltZUhlbHBlcjogJ3NhcC9mZS9tYWNyb3MvZmllbGQvRmllbGRSdW50aW1lSGVscGVyJ31cIlxuXHRcdFx0XHR0ZXh0PXt0ZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0d3JhcHBpbmc9e2ZpZWxkLndyYXAgPT09IHVuZGVmaW5lZCA/IHRydWUgOiBmaWVsZC53cmFwfVxuXHRcdFx0XHRwcmVzcz17ZmllbGQuZXZlbnRIYW5kbGVycy5saW5rUHJlc3NlZH1cblx0XHRcdFx0YXJpYUxhYmVsbGVkQnk9e2ZpZWxkLmFyaWFMYWJlbGxlZEJ5IGFzIHVua25vd24gYXMgQXJyYXk8Q29udHJvbCB8IHN0cmluZz59XG5cdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRhY2Nlc3NpYmxlUm9sZT17TGlua0FjY2Vzc2libGVSb2xlLkJ1dHRvbn1cblx0XHRcdFx0cmVhY3RpdmVBcmVhTW9kZT17ZmllbGQuZm9ybWF0T3B0aW9ucz8ucmVhY3RpdmVBcmVhTW9kZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbPEN1c3RvbURhdGEga2V5PXtcImxvYWRWYWx1ZVwifSB2YWx1ZT17ZmllbGQudmFsdWVBc1N0cmluZ0JpbmRpbmdFeHByZXNzaW9ufSAvPl0sXG5cdFx0XHRcdFx0ZGVwZW5kZW50czogRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0xpbms+XG5cdFx0KTtcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBDb25kaXRpb25hbExpbmtUZW1wbGF0ZSB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcGFyYW0gY29uZGl0aW9uIENvbmRpdGlvbiB0byBkaXNwbGF5IGEgTGluayBvciBhIFRleHRcblx0ICogQHBhcmFtIHRleHQgVGhlIHRleHQgdG8gZGlzcGxheVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENvbmRpdGlvbmFsTGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShcblx0XHRmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMsXG5cdFx0Y29uZGl0aW9uOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbixcblx0XHR0ZXh0OiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvblxuXHQpOiBzdHJpbmcge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8VGV4dExpbmtcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHNob3dBc0xpbms9e2NvbmRpdGlvbiBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdHNlbWFudGljT2JqZWN0PXtmaWVsZC5zZW1hbnRpY09iamVjdH1cblx0XHRcdFx0dGV4dD17dGV4dH1cblx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHdyYXBwaW5nPXtmaWVsZC53cmFwID09PSB1bmRlZmluZWQgPyB0cnVlIDogZmllbGQud3JhcH1cblx0XHRcdFx0cHJlc3M9e2ZpZWxkLmV2ZW50SGFuZGxlcnMubGlua1ByZXNzZWR9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeX1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogWzxDdXN0b21EYXRhIGtleT17XCJsb2FkVmFsdWVcIn0gdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz5dLFxuXHRcdFx0XHRcdGRlcGVuZGVudHM6IERpc3BsYXlTdHlsZS5nZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkKVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9UZXh0TGluaz5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIENvbmRpdGlvbmFsTGlua1RlbXBsYXRlIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEBwYXJhbSBjb25kaXRpb24gQ29uZGl0aW9uIHRvIGRpc3BsYXkgYSBMaW5rIG9yIGEgVGV4dFxuXHQgKiBAcGFyYW0gY29udGVudFRydWUgVGhlIENvbnRyb2wgdG8gZGlzcGxheSBpbiBjYXNlIGNvbmRpdGlvbiBpcyB0cnVlXG5cdCAqIEBwYXJhbSBjb250ZW50RmFsc2UgVGhlIENvbnRyb2wgdG8gZGlzcGxheSBpbiBjYXNlIGNvbmRpdGlvbiBpcyBmYWxzZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENvbmRpdGlvbmFsV3JhcHBlckZvclF1aWNrVmlld1RlbXBsYXRlKFxuXHRcdGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyxcblx0XHRjb25kaXRpb246IHN0cmluZyxcblx0XHRjb250ZW50VHJ1ZTogc3RyaW5nLFxuXHRcdGNvbnRlbnRGYWxzZTogc3RyaW5nXG5cdCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxDb25kaXRpb25hbFdyYXBwZXIgdmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9IGNvbmRpdGlvbj17Y29uZGl0aW9uIGFzIHVua25vd24gYXMgYm9vbGVhbn0+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y29udGVudFRydWU6IGNvbnRlbnRUcnVlLFxuXHRcdFx0XHRcdGNvbnRlbnRGYWxzZTogY29udGVudEZhbHNlXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIExpbmtXaXRoUXVpY2tWaWV3IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IHRleHQgPSBmaWVsZC5mb3JtYXRPcHRpb25zLnJldHJpZXZlVGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdD8gZmllbGQudGV4dEZyb21WYWx1ZUxpc3Rcblx0XHRcdDogRGlzcGxheVN0eWxlLmNvbXB1dGVUZXh0V2l0aFdoaXRlU3BhY2UoZmllbGQpO1xuXHRcdGNvbnN0IGNvbmRpdGlvbiA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRpZiAoY29uZGl0aW9uID09PSBcInRydWVcIikge1xuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0U3RhbmRhcmRMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkLCB0ZXh0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uYWxMaW5rV2l0aFF1aWNrVmlld1RlbXBsYXRlKGZpZWxkLCBjb25kaXRpb24sIHRleHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIFRleHQgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRUZXh0VGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRpZiAoZmllbGQuZm9ybWF0T3B0aW9ucy5yZXRyaWV2ZVRleHRGcm9tVmFsdWVMaXN0KSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8VGV4dFxuXHRcdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0RnJvbVZhbHVlTGlzdH1cblx0XHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWUnfVwiXG5cdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0XHQvPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gV2hlbiBoYXZpbmcgYSBUZXh0QXJyYW5nZW1lbnQgd2l0aCBUZXh0T25seSwgUlRBIGNhbiBvbmx5IGZpbmQgdGhlIGJpbmRpbmcgZm9yIHRoZSB0ZXh0LCBidXQgbm90IGZvciB0aGUgZmllbGQuXG5cdFx0XHQvLyBUbyBwcmV2ZW50IHRoYXQgc3VjaCBhIGZpZWxkIGNhbiBiZSBhZGRlZCB0d2ljZSB2aWEgUlRBLCB3ZSBuZWVkIHRvIHByb3ZpZGUgdGhlIGZpZWxkIGJpbmRpbmcgYXMgYSBkdW1teSBjdXN0b20gYmluZGluZy5cblx0XHRcdGxldCBjdXN0b21kYXRhO1xuXHRcdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuZGlzcGxheU1vZGUgPT09IFwiRGVzY3JpcHRpb25cIiAmJiBmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb24pIHtcblx0XHRcdFx0Y3VzdG9tZGF0YSA9IDxDdXN0b21EYXRhIGtleT1cImZpZWxkQmluZGluZ1wiIHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PFRleHRcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcH1cblx0XHRcdFx0XHRlbXB0eUluZGljYXRvck1vZGU9e2ZpZWxkLmVtcHR5SW5kaWNhdG9yTW9kZX1cblx0XHRcdFx0XHRyZW5kZXJXaGl0ZXNwYWNlPVwidHJ1ZVwiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7Y3VzdG9tZGF0YX1cblx0XHRcdFx0PC9UZXh0PlxuXHRcdFx0KTtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdldHMgdGVtcGxhdGUgZm9yIHRoZSBwYXNzd29yZCBmaWVsZC5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldFBhc3N3b3JkVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRjb25zdCB0ZXh0QmluZGluZyA9IEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhmaWVsZC5kYXRhTW9kZWxQYXRoLCBmaWVsZC5mb3JtYXRPcHRpb25zLCB0cnVlKTtcblx0XHRjb25zdCB0ZXh0RXhwcmVzc2lvbiA9XG5cdFx0XHRpc1BhdGhJbk1vZGVsRXhwcmVzc2lvbih0ZXh0QmluZGluZykgfHwgdHlwZW9mIHRleHRCaW5kaW5nID09PSBcInN0cmluZ1wiXG5cdFx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFt0ZXh0QmluZGluZ10sIHZhbHVlRm9ybWF0dGVycy5mb3JtYXRQYXNzd29yZFRleHQpKVxuXHRcdFx0XHQ6IGNvbXBpbGVFeHByZXNzaW9uKHRleHRCaW5kaW5nKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PFRleHRcblx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie3ZhbHVlRm9ybWF0dGVyczogJ3NhcC9mZS9jb3JlL2Zvcm1hdHRlcnMvVmFsdWVGb3JtYXR0ZXInfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZGlzcGxheVZpc2libGV9XG5cdFx0XHRcdHRleHQ9e3RleHRFeHByZXNzaW9ufVxuXHRcdFx0XHR3cmFwcGluZz17ZmllbGQud3JhcH1cblx0XHRcdFx0cmVuZGVyV2hpdGVzcGFjZT1cInRydWVcIlxuXHRcdFx0PjwvVGV4dD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBHZW5lcmF0ZXMgdGhlIE9iamVjdElkZW50aWZpZXIgdGVtcGxhdGUuXG5cdCAqIEBwYXJhbSBmaWVsZCBSZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQgZmllbGQgaW5zdGFuY2Vcblx0ICogQHJldHVybnMgQW4gWE1MLWJhc2VkIHN0cmluZyB3aXRoIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBmaWVsZCBjb250cm9sXG5cdCAqL1xuXHRnZXRPYmplY3RJZGVudGlmaWVyKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IGRlcGVuZGVudHM6IE1kY0xpbmsgfCB1bmRlZmluZWQ7XG5cdFx0bGV0IHRpdGxlQWN0aXZlO1xuXHRcdGlmIChmaWVsZC5oYXNRdWlja1ZpZXcpIHtcblx0XHRcdHRpdGxlQWN0aXZlID0gdGhpcy5nZXRRdWlja1ZpZXdDb25kaXRpb24oZmllbGQpO1xuXHRcdFx0ZGVwZW5kZW50cyA9IERpc3BsYXlTdHlsZS5nZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGl0bGVBY3RpdmUgPSBmYWxzZTtcblx0XHR9XG5cblx0XHRsZXQgaWRlbnRpZmllciA9IChcblx0XHRcdDxPYmplY3RJZGVudGlmaWVyXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfVxuXHRcdFx0XHR0aXRsZT17ZmllbGQuaWRlbnRpZmllclRpdGxlfVxuXHRcdFx0XHR0ZXh0PXtmaWVsZC5pZGVudGlmaWVyVGV4dH1cblx0XHRcdFx0dGl0bGVBY3RpdmU9e3RpdGxlQWN0aXZlfVxuXHRcdFx0XHR0aXRsZVByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogWzxDdXN0b21EYXRhIGtleT17XCJsb2FkVmFsdWVcIn0gdmFsdWU9e2ZpZWxkLnZhbHVlQXNTdHJpbmdCaW5kaW5nRXhwcmVzc2lvbn0gLz5dLFxuXHRcdFx0XHRcdGRlcGVuZGVudHM6IGRlcGVuZGVudHNcblx0XHRcdFx0fX1cblx0XHRcdDwvT2JqZWN0SWRlbnRpZmllcj5cblx0XHQpO1xuXHRcdGlmIChmaWVsZC5oYXNTaXR1YXRpb25zSW5kaWNhdG9yKSB7XG5cdFx0XHRpZGVudGlmaWVyID0gKFxuXHRcdFx0XHQ8SEJveCBhbGlnbkl0ZW1zPVwiQ2VudGVyXCIganVzdGlmeUNvbnRlbnQ9XCJTcGFjZUJldHdlZW5cIiB3aWR0aD1cIjEwMCVcIj5cblx0XHRcdFx0XHR7aWRlbnRpZmllcn1cblx0XHRcdFx0XHQ8U2l0dWF0aW9uc0luZGljYXRvciBjb250ZXh0UGF0aD17ZmllbGQuY29udGV4dFBhdGguZ2V0UGF0aCgpfSBwcm9wZXJ0eVBhdGg9e2ZpZWxkLnNpdHVhdGlvbnNJbmRpY2F0b3JQcm9wZXJ0eVBhdGh9IC8+XG5cdFx0XHRcdDwvSEJveD5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmIChmaWVsZC5zaG93RXJyb3JJbmRpY2F0b3IgJiYgZmllbGQuc2hvd0Vycm9yT2JqZWN0U3RhdHVzKSB7XG5cdFx0XHRpZGVudGlmaWVyID0gKFxuXHRcdFx0XHQ8VkJveD5cblx0XHRcdFx0XHR7aWRlbnRpZmllcn1cblx0XHRcdFx0XHQ8T2JqZWN0U3RhdHVzXG5cdFx0XHRcdFx0XHR2aXNpYmxlPXtmaWVsZC5zaG93RXJyb3JPYmplY3RTdGF0dXN9XG5cdFx0XHRcdFx0XHRjbGFzcz1cInNhcFVpU21hbGxNYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5Db250YWluc19FcnJvcnN9XCJcblx0XHRcdFx0XHRcdHN0YXRlPVwiRXJyb3JcIlxuXHRcdFx0XHRcdC8+XG5cdFx0XHRcdDwvVkJveD5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlkZW50aWZpZXI7XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgT2JqZWN0U3RhdHVzIHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0T2JqZWN0U3RhdHVzKGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IHN0cmluZyB7XG5cdFx0bGV0IG9iamVjdFN0YXR1cztcblx0XHRsZXQgcmVxdWlyZWRIZWxwZXIgPSB7XG5cdFx0XHRcImNvcmU6cmVxdWlyZVwiOiBcIntGaWVsZFJ1bnRpbWVIZWxwZXI6ICdzYXAvZmUvbWFjcm9zL2ZpZWxkL0ZpZWxkUnVudGltZUhlbHBlcid9XCJcblx0XHR9O1xuXHRcdGNvbnN0IGRhdGFNb2RlbE9iamVjdFBhdGggPSBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPERhdGFGaWVsZD4oZmllbGQubWV0YVBhdGgsIGZpZWxkLmNvbnRleHRQYXRoKTtcblx0XHRjb25zdCBlbmhhbmNlZFZhbHVlRGF0YU1vZGVsUGF0aCA9IGVuaGFuY2VEYXRhTW9kZWxQYXRoPFByb3BlcnR5Pihcblx0XHRcdGRhdGFNb2RlbE9iamVjdFBhdGgsXG5cdFx0XHRkYXRhTW9kZWxPYmplY3RQYXRoLnRhcmdldE9iamVjdD8uVmFsdWUucGF0aFxuXHRcdCk7XG5cdFx0Y29uc3QgY29uZGl0aW9uID0gaGFzVmFsaWRBbmFseXRpY2FsQ3VycmVuY3lPclVuaXQoZW5oYW5jZWRWYWx1ZURhdGFNb2RlbFBhdGgpO1xuXHRcdGNvbnN0IGNvbnZlcnRlZERhdGFGaWVsZCA9IE1ldGFNb2RlbENvbnZlcnRlci5nZXRJbnZvbHZlZERhdGFNb2RlbE9iamVjdHM8RGF0YVBvaW50VHlwZT4oZmllbGQubWV0YVBhdGgpO1xuXHRcdGNvbnN0IGNyaXRpY2FsaXR5SWNvbiA9IGJ1aWxkRXhwcmVzc2lvbkZvckNyaXRpY2FsaXR5SWNvbihjb252ZXJ0ZWREYXRhRmllbGQpO1xuXHRcdGNvbnN0IHN0YXRlID0gYnVpbGRFeHByZXNzaW9uRm9yQ3JpdGljYWxpdHlDb2xvcihjb252ZXJ0ZWREYXRhRmllbGQpO1xuXG5cdFx0Y29uc3QgbGlua1VybCA9IChmaWVsZC5jb252ZXJ0ZWRNZXRhUGF0aCBhcyBEYXRhRmllbGRXaXRoVXJsKS5Vcmxcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRcdFx0Z2V0RXhwcmVzc2lvbkZyb21Bbm5vdGF0aW9uKFxuXHRcdFx0XHRcdFx0KGZpZWxkLmNvbnZlcnRlZE1ldGFQYXRoIGFzIERhdGFGaWVsZFdpdGhVcmwpLlVybCBhcyB1bmtub3duIGFzIFByb3BlcnR5QW5ub3RhdGlvblZhbHVlPFN0cmluZz5cblx0XHRcdFx0XHQpXG5cdFx0XHQgIClcblx0XHRcdDogdW5kZWZpbmVkO1xuXG5cdFx0aWYgKGZpZWxkLmZvcm1hdE9wdGlvbnMuaXNBbmFseXRpY3MgJiYgZmllbGQuaGFzVW5pdE9yQ3VycmVuY3kpIHtcblx0XHRcdGNvbnN0IGNvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q3VycmVuY3lPclVuaXRDb250cm9sKGZpZWxkLCA8VGV4dCB0ZXh0PXtmaWVsZC50ZXh0fSB0ZXh0QWxpZ249XCJFbmRcIj48L1RleHQ+KTtcblx0XHRcdG9iamVjdFN0YXR1cyA9IChcblx0XHRcdFx0PENvbmRpdGlvbmFsV3JhcHBlciBpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9IGNvbmRpdGlvbj17Y29uZGl0aW9uIGFzIHVua25vd24gYXMgYm9vbGVhbn0+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGNvbnRlbnRUcnVlOiAoXG5cdFx0XHRcdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRcdFx0XHRpY29uPXtjcml0aWNhbGl0eUljb259XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGU9e3N0YXRlfVxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdFx0XHRcdHRleHQ9e2ZpZWxkLnRleHR9XG5cdFx0XHRcdFx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdFx0XHRcdFx0Y2xhc3M9XCJzYXBNVGV4dFJlbmRlcldoaXRlc3BhY2VXcmFwXCJcblx0XHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHRcdCksXG5cdFx0XHRcdFx0XHRjb250ZW50RmFsc2U6IGNvbnRlbnRcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0NvbmRpdGlvbmFsV3JhcHBlcj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGxldCBkZXBlbmRlbnRzOiBNZGNMaW5rIHwgdW5kZWZpbmVkO1xuXHRcdFx0bGV0IGFjdGl2ZSA9IGZhbHNlO1xuXHRcdFx0bGV0IGlzQWN0aXZlO1xuXHRcdFx0bGV0IHByZXNzQWN0aW9uO1xuXHRcdFx0aWYgKGZpZWxkLmhhc1F1aWNrVmlldykge1xuXHRcdFx0XHRkZXBlbmRlbnRzID0gRGlzcGxheVN0eWxlLmdldE1kY0xpbmtGb3JRdWlja1ZpZXcoZmllbGQpO1xuXHRcdFx0XHRpc0FjdGl2ZSA9IHRoaXMuZ2V0UXVpY2tWaWV3Q29uZGl0aW9uKGZpZWxkKTtcblx0XHRcdFx0cHJlc3NBY3Rpb24gPSBmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGxpbmtVcmwpIHtcblx0XHRcdFx0YWN0aXZlID0gdHJ1ZTtcblx0XHRcdFx0cmVxdWlyZWRIZWxwZXIgPSB7XG5cdFx0XHRcdFx0XCJjb3JlOnJlcXVpcmVcIjogXCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdH07XG5cdFx0XHRcdHByZXNzQWN0aW9uID0gZmllbGQuZXZlbnRIYW5kbGVycy5vcGVuRXh0ZXJuYWxMaW5rO1xuXHRcdFx0fVxuXG5cdFx0XHRvYmplY3RTdGF0dXMgPSAoXG5cdFx0XHRcdDxPYmplY3RTdGF0dXNcblx0XHRcdFx0XHRpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9XG5cdFx0XHRcdFx0aWNvbj17Y3JpdGljYWxpdHlJY29ufVxuXHRcdFx0XHRcdHN0YXRlPXtzdGF0ZX1cblx0XHRcdFx0XHR0ZXh0PXtmaWVsZC50ZXh0fVxuXHRcdFx0XHRcdHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfVxuXHRcdFx0XHRcdGVtcHR5SW5kaWNhdG9yTW9kZT17ZmllbGQuZW1wdHlJbmRpY2F0b3JNb2RlfVxuXHRcdFx0XHRcdHsuLi5yZXF1aXJlZEhlbHBlcn1cblx0XHRcdFx0XHRhY3RpdmU9e2lzQWN0aXZlID8gaXNBY3RpdmUgOiBhY3RpdmV9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzQWN0aW9ufVxuXHRcdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0XHRcdHJlYWN0aXZlQXJlYU1vZGU9e2ZpZWxkLmZvcm1hdE9wdGlvbnM/LnJlYWN0aXZlQXJlYU1vZGV9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+LFxuXHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9e1widXJsXCJ9IHZhbHVlPXtsaW5rVXJsfSAvPlxuXHRcdFx0XHRcdFx0XSxcblx0XHRcdFx0XHRcdGRlcGVuZGVudHM6IGRlcGVuZGVudHNcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L09iamVjdFN0YXR1cz5cblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIG9iamVjdFN0YXR1cztcblx0fSxcblxuXHRnZXRNZGNMaW5rRm9yUXVpY2tWaWV3KGZpZWxkOiBGaWVsZEJsb2NrUHJvcGVydGllcyk6IE1kY0xpbmsge1xuXHRcdHJldHVybiBuZXcgUXVpY2tWaWV3KFxuXHRcdFx0ZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdGZpZWxkLm1ldGFQYXRoLmdldFBhdGgoKSxcblx0XHRcdGZpZWxkLmNvbnRleHRQYXRoLmdldFBhdGgoKSxcblx0XHRcdGZpZWxkLnNlbWFudGljT2JqZWN0XG5cdFx0KS5jcmVhdGVDb250ZW50KCkgYXMgTWRjTGluaztcblx0fSxcblxuXHQvKipcblx0ICogR2VuZXJhdGVzIHRoZSBMYWJlbFNlbWFudGljS2V5IHRlbXBsYXRlLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0TGFiZWxTZW1hbnRpY0tleShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGNvbnN0IGNvbnRlbnRUcnVlID0gKFxuXHRcdFx0PExpbmtcblx0XHRcdFx0dGV4dD17ZmllbGQudGV4dH1cblx0XHRcdFx0d3JhcHBpbmc9XCJ0cnVlXCJcblx0XHRcdFx0ZW1waGFzaXplZD1cInRydWVcIlxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RmllbGRSdW50aW1lSGVscGVyOiAnc2FwL2ZlL21hY3Jvcy9maWVsZC9GaWVsZFJ1bnRpbWVIZWxwZXInfVwiXG5cdFx0XHRcdHByZXNzPXtmaWVsZC5ldmVudEhhbmRsZXJzLmxpbmtQcmVzc2VkfVxuXHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgYXMgdW5rbm93biBhcyBBcnJheTxDb250cm9sIHwgc3RyaW5nPn1cblx0XHRcdFx0ZW1wdHlJbmRpY2F0b3JNb2RlPXtmaWVsZC5lbXB0eUluZGljYXRvck1vZGV9XG5cdFx0XHRcdGFjY2Vzc2libGVSb2xlPXtMaW5rQWNjZXNzaWJsZVJvbGUuQnV0dG9ufVxuXHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFs8Q3VzdG9tRGF0YSBrZXk9e1wibG9hZFZhbHVlXCJ9IHZhbHVlPXtmaWVsZC52YWx1ZUFzU3RyaW5nQmluZGluZ0V4cHJlc3Npb259IC8+XSxcblx0XHRcdFx0XHRkZXBlbmRlbnRzOiBEaXNwbGF5U3R5bGUuZ2V0TWRjTGlua0ZvclF1aWNrVmlldyhmaWVsZClcblx0XHRcdFx0fX1cblx0XHRcdDwvTGluaz5cblx0XHQpO1xuXHRcdGNvbnN0IGNvbnRlbnRGYWxzZSA9IDxMYWJlbCBpZD17ZmllbGQuZGlzcGxheVN0eWxlSWR9IHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfSB0ZXh0PXtmaWVsZC5pZGVudGlmaWVyVGl0bGV9IGRlc2lnbj1cIkJvbGRcIiAvPjtcblx0XHRpZiAoZmllbGQuaGFzUXVpY2tWaWV3KSB7XG5cdFx0XHRjb25zdCBoYXNRdWlja3ZpZXcgPSB0aGlzLmdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZCk7XG5cdFx0XHRpZiAoaGFzUXVpY2t2aWV3ID09PSBcInRydWVcIikge1xuXHRcdFx0XHRyZXR1cm4gY29udGVudFRydWU7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRDb25kaXRpb25hbFdyYXBwZXJGb3JRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCwgaGFzUXVpY2t2aWV3IGFzIHN0cmluZywgY29udGVudFRydWUsIGNvbnRlbnRGYWxzZSk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiA8TGFiZWwgaWQ9e2ZpZWxkLmRpc3BsYXlTdHlsZUlkfSB2aXNpYmxlPXtmaWVsZC5kaXNwbGF5VmlzaWJsZX0gdGV4dD17ZmllbGQuaWRlbnRpZmllclRpdGxlfSBkZXNpZ249XCJCb2xkXCIgLz47XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIHNlbWFudGljIGtleSB3aXRoIGRyYWZ0IGluZGljYXRvci5cblx0ICogQHBhcmFtIHNlbWFudGljS2V5VGVtcGxhdGUgVGhlIHRlbXBsYXRlIHJlc3VsdCB3aXRob3V0IGRyYWZ0IGluZGljYXRvclxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0YWRkRHJhZnRJbmRpY2F0b3Ioc2VtYW50aWNLZXlUZW1wbGF0ZTogc3RyaW5nLCBmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcge1xuXHRcdGlmICghZmllbGQuZm9ybWF0T3B0aW9ucy5maWVsZEdyb3VwRHJhZnRJbmRpY2F0b3JQcm9wZXJ0eVBhdGgpIHtcblx0XHRcdC8vIGlmIHRoZSBkcmFmdEluZGljYXRvciBpcyBub3QgaGFuZGxlZCBhdCB0aGUgZmllbGRHcm91cCBsZXZlbFxuXHRcdFx0Ly9UT0RPIGNvdWxkIHRoaXMgYmUgYSBib29sZWFuIG5vIGRyYWZ0SW5kaWNhdG9yXG5cdFx0XHRzZW1hbnRpY0tleVRlbXBsYXRlID0gKFxuXHRcdFx0XHQ8Rm9ybUVsZW1lbnRXcmFwcGVyIHZpc2libGU9e2ZpZWxkLmRpc3BsYXlWaXNpYmxlfT5cblx0XHRcdFx0XHQ8VkJveCBjbGFzcz17RmllbGRIZWxwZXIuZ2V0TWFyZ2luQ2xhc3MoZmllbGQuZm9ybWF0T3B0aW9ucy5jb21wYWN0U2VtYW50aWNLZXkpfT5cblx0XHRcdFx0XHRcdHtzZW1hbnRpY0tleVRlbXBsYXRlfVxuXHRcdFx0XHRcdFx0PERyYWZ0SW5kaWNhdG9yXG5cdFx0XHRcdFx0XHRcdGRyYWZ0SW5kaWNhdG9yVHlwZT17T2JqZWN0TWFya2VyVmlzaWJpbGl0eS5JY29uQW5kVGV4dH1cblx0XHRcdFx0XHRcdFx0Y29udGV4dFBhdGg9e2ZpZWxkLmNvbnRleHRQYXRoLmdldFBhdGgoKX1cblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17ZmllbGQuZHJhZnRJbmRpY2F0b3JWaXNpYmxlfVxuXHRcdFx0XHRcdFx0XHRhcmlhTGFiZWxsZWRCeT17ZmllbGQuYXJpYUxhYmVsbGVkQnkgPyBmaWVsZC5hcmlhTGFiZWxsZWRCeSA6IFtdfVxuXHRcdFx0XHRcdFx0XHRyZWFjdGl2ZUFyZWFNb2RlPXtmaWVsZC5mb3JtYXRPcHRpb25zPy5yZWFjdGl2ZUFyZWFNb2RlfVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQ8L1ZCb3g+XG5cdFx0XHRcdDwvRm9ybUVsZW1lbnRXcmFwcGVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHNlbWFudGljS2V5VGVtcGxhdGU7XG5cdH0sXG5cblx0LyoqXG5cdCAqIENvbXB1dGVzIHRoZSB0ZXh0IHByb3BlcnR5IHdpdGggdGhlIGFwcHJvcHJpYXRlIHdoaXRlIHNwYWNlIGhhbmRsaW5nLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Y29tcHV0ZVRleHRXaXRoV2hpdGVTcGFjZShmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0Y29uc3QgdGV4dCA9IEZpZWxkVGVtcGxhdGluZy5nZXRUZXh0QmluZGluZyhcblx0XHRcdChmaWVsZC5kYXRhTW9kZWxQYXRoRXh0ZXJuYWxJRCBhcyBEYXRhTW9kZWxPYmplY3RQYXRoPFByb3BlcnR5PikgPz8gZmllbGQuZGF0YU1vZGVsUGF0aCxcblx0XHRcdGZpZWxkLmZvcm1hdE9wdGlvbnMsXG5cdFx0XHR0cnVlXG5cdFx0KTtcblx0XHRyZXR1cm4gaXNQYXRoSW5Nb2RlbEV4cHJlc3Npb24odGV4dCkgfHwgdHlwZW9mIHRleHQgPT09IFwic3RyaW5nXCJcblx0XHRcdD8gY29tcGlsZUV4cHJlc3Npb24oZm9ybWF0UmVzdWx0KFt0ZXh0XSwgdmFsdWVGb3JtYXR0ZXJzLnJlcGxhY2VXaGl0ZXNwYWNlKSlcblx0XHRcdDogY29tcGlsZUV4cHJlc3Npb24odGV4dCk7XG5cdH0sXG5cdC8qKlxuXHQgKiBHZXRzIHRoZSBjb25kaXRpb24gZm9yIGhhdmluZyBhbiBhY3RpdmUgbGluayB0aGF0IG9wZW5zIHRoZSBxdWljayB2aWV3LlxuXHQgKiBAcGFyYW0gZmllbGRcblx0ICogQHJldHVybnMgQSBjb21waWxlIGJpbmRpbmcgZXhwcmVzc2lvbiBmb3IgdGhlIGNvbmRpdGlvbi5cblx0ICovXG5cdGdldFF1aWNrVmlld0NvbmRpdGlvbihmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB7XG5cdFx0c3dpdGNoIChmaWVsZC5xdWlja1ZpZXdUeXBlKSB7XG5cdFx0XHRjYXNlIFwiRmFjZXRzXCI6XG5cdFx0XHRcdGlmIChmaWVsZC5mb3JtYXRPcHRpb25zLmlzQW5hbHl0aWNzICE9PSB0cnVlKSB7XG5cdFx0XHRcdFx0Ly8gV2Ugb25seSBjaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBpcyByZWFjaGFibGUgaWYgdGhlIHRhYmxlIGlzIG5vdCBhbmFseXRpY2FsLlxuXHRcdFx0XHRcdC8vIElmIHRoZSB0YWJsZSBpcyBhbmFseXRpY2FsLCB3ZSBjYW5ub3QgcmVseSBvbiB0aGUgbmF2aWdhdGlvbiBiZWluZyByZWFjaGFibGUsIGFzIHdlIGNhbm5vdCBsb2FkIG5hdmlnYXRpb24gcHJvcGVydGllcyBpbiB0aGUgYW5hbHl0aWNhbCBxdWVyaWVzLlxuXHRcdFx0XHRcdC8vdGhlcmUgaXMgcXVpY2sgdmlld0ZhY2V0cyBhbm5vdGF0aW9uIG9ubHkgdGhlbiB3ZSBjaGVjayBpZiB0aGUgbmF2aWdhdGlvbiBpcyByZWFjaGFibGVcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5nZXRGb3JlaWduS2V5VmFsdWVFeHByZXNzaW9uKGZpZWxkKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRicmVhaztcblxuXHRcdFx0Y2FzZSBcIlNlbWFudGljTGlua3NcIjpcblx0XHRcdFx0aWYgKGZpZWxkLmR5bmFtaWNTZW1hbnRpY09iamVjdHMpIHtcblx0XHRcdFx0XHRjb25zdCBsaXN0T2ZEeW5hbWljU2VtYW50aWNPYmplY3RzOiBCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb248c3RyaW5nPltdID0gW107XG5cdFx0XHRcdFx0aWYgKGZpZWxkLnNlbWFudGljT2JqZWN0KSB7XG5cdFx0XHRcdFx0XHQvLyBJZiB3ZSBzZWUgYSBkeW5hbWljIGV4cHJlc3Npb24gd2l0aCBhIGZvcm1hdHRlciwgd2UgcmV0dXJuIGZhbHNlLiBUaGUgY29uZGl0aW9uIHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIgaW4gVGV4dExpbmsgY29udHJvbC5cblx0XHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudChmYWxzZSkpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRmb3IgKGNvbnN0IHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbiBvZiBmaWVsZC5keW5hbWljU2VtYW50aWNPYmplY3RzKSB7XG5cdFx0XHRcdFx0XHRpZiAoc2VtYW50aWNPYmplY3RFeHByZXNzaW9uLl90eXBlID09PSBcIlBhdGhJbk1vZGVsXCIgfHwgc2VtYW50aWNPYmplY3RFeHByZXNzaW9uLl90eXBlID09PSBcIkNvbnN0YW50XCIpIHtcblx0XHRcdFx0XHRcdFx0bGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cy5wdXNoKHNlbWFudGljT2JqZWN0RXhwcmVzc2lvbik7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHQvLyBJZiB3ZSBzZWUgYSBkeW5hbWljIGV4cHJlc3Npb24gKCRlZG1Kc29uKSwgd2UgcmV0dXJuIHRydWUuXG5cdFx0XHRcdFx0XHRcdHJldHVybiBjb21waWxlRXhwcmVzc2lvbihjb25zdGFudCh0cnVlKSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvbnN0IHNlbWFudGljT2JqZWN0c1BhdGggPSBbXG5cdFx0XHRcdFx0XHRwYXRoSW5Nb2RlbDxDb250ZXh0W10+KFwiL3NlbWFudGljT2JqZWN0c1wiLCBcImludGVybmFsXCIpIGFzIEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbjxzdHJpbmc+XG5cdFx0XHRcdFx0XS5jb25jYXQobGlzdE9mRHluYW1pY1NlbWFudGljT2JqZWN0cyk7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbXBpbGVFeHByZXNzaW9uKGZvcm1hdFJlc3VsdChzZW1hbnRpY09iamVjdHNQYXRoLCB2YWx1ZUZvcm1hdHRlcnMuaGFzU2VtYW50aWNPYmplY3RzKSk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIFwidHJ1ZVwiO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0Ly8gXCJmYWNldHNBbmRTZW1hbnRpY0xpbmtzXCJcblx0XHRcdFx0Ly8gaWYgdGhlcmUgaXMgYm90aCBmYWNldHMgYW5kIHNlbWFudGljIGxpbmtzLCB3ZSBkbyBub3QgY2hlY2sgaWYgdGhlIG5hdmlnYXRpb24gaXMgcmVhY2hhYmxlXG5cdFx0XHRcdHJldHVybiBcInRydWVcIjtcblx0XHR9XG5cdH0sXG5cblx0LyoqXG5cdCAqIEdlbmVyYXRlcyB0aGUgQ2hlY2tCb3hHcm91cCB0ZW1wbGF0ZS5cblx0ICogQHBhcmFtIGZpZWxkIFJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBmaWVsZCBpbnN0YW5jZVxuXHQgKiBAcmV0dXJucyBBbiBYTUwtYmFzZWQgc3RyaW5nIHdpdGggdGhlIGRlZmluaXRpb24gb2YgdGhlIGZpZWxkIGNvbnRyb2xcblx0ICovXG5cdGdldENoZWNrQm94R3JvdXBJdGVtVGVtcGxhdGUoZmllbGQ6IEZpZWxkQmxvY2tQcm9wZXJ0aWVzKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PENoZWNrQm94XG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGaWVsZDogJ3NhcC9mZS9tYWNyb3MvRmllbGQnfVwiXG5cdFx0XHRcdGlkPXtmaWVsZC5kaXNwbGF5U3R5bGVJZH1cblx0XHRcdFx0ZGlzcGxheU9ubHk9e3RydWV9XG5cdFx0XHRcdHRleHQ9e2ZpZWxkLmxhYmVsfVxuXHRcdFx0XHR3cmFwcGluZz17dHJ1ZX1cblx0XHRcdFx0c2VsZWN0ZWQ9e2ZpZWxkLnZhbHVlQmluZGluZ0V4cHJlc3Npb259XG5cdFx0XHRcdGZpZWxkR3JvdXBJZHM9e2ZpZWxkLmZpZWxkR3JvdXBJZHN9XG5cdFx0XHRcdGFyaWFMYWJlbGxlZEJ5PXtmaWVsZC5hcmlhTGFiZWxsZWRCeSBhcyB1bmtub3duIGFzIEFycmF5PENvbnRyb2wgfCBzdHJpbmc+fVxuXHRcdFx0PlxuXHRcdFx0XHR7eyBjdXN0b21EYXRhOiA8Q3VzdG9tRGF0YSBrZXk9XCJzb3VyY2VQYXRoXCIgdmFsdWU9e2ZpZWxkLmRhdGFTb3VyY2VQYXRofSAvPiB9fVxuXHRcdFx0PC9DaGVja0JveD5cblx0XHQpO1xuXHR9LFxuXG5cdC8qKlxuXHQgKiBFbnRyeSBwb2ludCBmb3IgZnVydGhlciB0ZW1wbGF0aW5nIHByb2Nlc3NpbmdzLlxuXHQgKiBAcGFyYW0gZmllbGQgUmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGZpZWxkIGluc3RhbmNlXG5cdCAqIEByZXR1cm5zIEFuIFhNTC1iYXNlZCBzdHJpbmcgd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZmllbGQgY29udHJvbFxuXHQgKi9cblx0Z2V0VGVtcGxhdGU6IChmaWVsZDogRmllbGRCbG9ja1Byb3BlcnRpZXMpOiBzdHJpbmcgPT4ge1xuXHRcdGxldCBpbm5lckZpZWxkQ29udGVudDtcblx0XHRzd2l0Y2ggKGZpZWxkLmRpc3BsYXlTdHlsZSBhcyBEaXNwbGF5U3R5bGVUeXBlKSB7XG5cdFx0XHRjYXNlIFwiQXZhdGFyXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEF2YXRhclRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQnV0dG9uXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEJ1dHRvblRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiQ2hlY2tCb3hHcm91cEl0ZW1cIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q2hlY2tCb3hHcm91cEl0ZW1UZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkNvbnRhY3RcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0Q29udGFjdFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRGF0YVBvaW50XCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldERhdGFQb2ludFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiRXhwYW5kYWJsZVRleHRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0RXhwYW5kYWJsZVRleHQoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJGaWxlXCI6XG5cdFx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmdldEZpbGVUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIkxpbmtcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TGlua1RlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiTGlua1dpdGhRdWlja1ZpZXdcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TGlua1dpdGhRdWlja1ZpZXdUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIk51bWJlcldpdGhVbml0T3JDdXJyZW5jeUFsaWduZWRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0TnVtYmVyV2l0aFVuaXRPckN1cnJlbmN5QWxpZ25lZFRlbXBsYXRlKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiT2JqZWN0SWRlbnRpZmllclwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRPYmplY3RJZGVudGlmaWVyKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiT2JqZWN0U3RhdHVzXCI6IHtcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0T2JqZWN0U3RhdHVzKGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiTGFiZWxTZW1hbnRpY0tleVwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRMYWJlbFNlbWFudGljS2V5KGZpZWxkKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwiVGV4dFwiOlxuXHRcdFx0XHRpbm5lckZpZWxkQ29udGVudCA9IERpc3BsYXlTdHlsZS5nZXRUZXh0VGVtcGxhdGUoZmllbGQpO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJNYXNrZWRcIjpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBEaXNwbGF5U3R5bGUuZ2V0UGFzc3dvcmRUZW1wbGF0ZShmaWVsZCk7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0aW5uZXJGaWVsZENvbnRlbnQgPSBcIlwiO1xuXHRcdH1cblx0XHRpZiAoZmllbGQuYWRkRHJhZnRJbmRpY2F0b3IgJiYgaW5uZXJGaWVsZENvbnRlbnQpIHtcblx0XHRcdGlubmVyRmllbGRDb250ZW50ID0gRGlzcGxheVN0eWxlLmFkZERyYWZ0SW5kaWNhdG9yKGlubmVyRmllbGRDb250ZW50LCBmaWVsZCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGlubmVyRmllbGRDb250ZW50O1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBEaXNwbGF5U3R5bGU7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQXVGQSxNQUFNQSxZQUFZLEdBQUc7SUFDcEJDLHVCQUF1QkEsQ0FBQ0MsS0FBMkIsRUFBVTtNQUM1RCxJQUFJQyxLQUFLLEdBQUdELEtBQUssQ0FBQ0UsUUFBUSxDQUFDRCxLQUFLLElBQUksQ0FBQztNQUNyQyxJQUFJLE9BQU9BLEtBQUssS0FBSyxRQUFRLEVBQUU7UUFDOUI7UUFDQUEsS0FBSyxHQUFHRCxLQUFLLENBQUNFLFFBQVEsQ0FBQ0MsU0FBUyxJQUFJLENBQUM7TUFDdEM7TUFDQSxPQUFPQyxJQUFJLENBQUNDLEdBQUcsQ0FBQ0osS0FBSyxFQUFFLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRURLLHdCQUF3QkEsQ0FDdkJOLEtBQTJCLEVBQzNCTyxjQUFnQyxFQUNoQ0MsaUJBQXFELEVBQzNDO01BQ1YsT0FDQ0MsSUFBQSxDQUFDQyxJQUFJO1FBQ0osZ0JBQWEsb0RBQW9EO1FBQ2pFQyxJQUFJLEVBQUMsb0NBQW9DO1FBQ3pDQyxLQUFLLEVBQUVaLEtBQUssQ0FBQ2EsYUFBYSxDQUFDQyx5QkFBMEI7UUFDckRDLE9BQU8sRUFBRVAsaUJBQWtCO1FBQzNCUSxnQkFBZ0IsRUFBRWhCLEtBQUssQ0FBQ2lCLGFBQWEsRUFBRUQsZ0JBQWlCO1FBQUFFLFFBQUEsRUFFdkQ7VUFDQUMsVUFBVSxFQUFHWixjQUFjLEVBQWNhLEtBQUssR0FBSWIsY0FBYyxDQUFhYSxLQUFLLENBQUMsQ0FB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