@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
@@ -193,7 +193,11 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
193
193
  enabled: enabled,
194
194
  visible: action.visible,
195
195
  children: {
196
- customData: [createCustomData("actionId", toolbarActionId)]
196
+ customData: [createCustomData("actionId", toolbarActionId)],
197
+ layoutData: _jsx(OverflowToolbarLayoutData, {
198
+ priority: action.priority,
199
+ group: action.group
200
+ })
197
201
  }
198
202
  });
199
203
  } else {
@@ -408,6 +412,10 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
408
412
  customData: [createCustomData("actionId", menuId)],
409
413
  menu: _jsx(Menu, {
410
414
  children: menuItems
415
+ }),
416
+ layoutData: _jsx(OverflowToolbarLayoutData, {
417
+ priority: action.priority,
418
+ group: action.group
411
419
  })
412
420
  }
413
421
  })
@@ -476,7 +484,11 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
476
484
  enabled: action.enabled,
477
485
  icon: action.isAIOperation === true ? aiIcon : undefined,
478
486
  children: {
479
- customData: [createCustomData("actionId", generate([table.contentId, action.id]))]
487
+ customData: [createCustomData("actionId", generate([table.contentId, action.id]))],
488
+ layoutData: _jsx(OverflowToolbarLayoutData, {
489
+ priority: action.priority,
490
+ group: action.group
491
+ })
480
492
  }
481
493
  })
482
494
  });
@@ -557,7 +569,11 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
557
569
  visible: action.visible,
558
570
  enabled: enabled,
559
571
  children: {
560
- customData: [createCustomData("actionId", generate([table.contentId, dataField]))]
572
+ customData: [createCustomData("actionId", generate([table.contentId, dataField]))],
573
+ layoutData: _jsx(OverflowToolbarLayoutData, {
574
+ priority: action.priority,
575
+ group: action.group
576
+ })
561
577
  }
562
578
  })
563
579
  });
@@ -609,7 +625,11 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
609
625
  visible: standardAction.visible,
610
626
  enabled: standardAction.enabled,
611
627
  children: {
612
- customData
628
+ customData,
629
+ layoutData: _jsx(OverflowToolbarLayoutData, {
630
+ priority: standardAction.priority,
631
+ group: standardAction.group
632
+ })
613
633
  }
614
634
  })
615
635
  });
@@ -664,6 +684,10 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
664
684
  customData: [createCustomData("actionId", generate([table.contentId, standardAction.key]))],
665
685
  menu: _jsx(Menu, {
666
686
  children: menuItems
687
+ }),
688
+ layoutData: _jsx(OverflowToolbarLayoutData, {
689
+ priority: standardAction.priority,
690
+ group: standardAction.group
667
691
  })
668
692
  }
669
693
  })
@@ -693,7 +717,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
693
717
  type: ButtonType.Transparent,
694
718
  visible: standardAction.visible,
695
719
  enabled: standardAction.enabled,
696
- ariaHasPopup: "Dialog"
720
+ ariaHasPopup: "Dialog",
721
+ children: {
722
+ layoutData: _jsx(OverflowToolbarLayoutData, {
723
+ priority: standardAction.priority,
724
+ group: standardAction.group
725
+ })
726
+ }
697
727
  })
698
728
  });
699
729
  } else {
@@ -757,7 +787,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
757
787
  text: "{sap.fe.i18n>M_COMMON_TABLE_MASSEDIT}",
758
788
  press: handlerProvider.getMassEditButtonPressHandler(false),
759
789
  visible: action.visible,
760
- enabled: action.enabled
790
+ enabled: action.enabled,
791
+ children: {
792
+ layoutData: _jsx(OverflowToolbarLayoutData, {
793
+ priority: action.priority,
794
+ group: action.group
795
+ })
796
+ }
761
797
  })
762
798
  });
763
799
  } else {
@@ -787,7 +823,8 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
787
823
  enabled: action.enabled,
788
824
  children: {
789
825
  layoutData: _jsx(OverflowToolbarLayoutData, {
790
- priority: "AlwaysOverflow"
826
+ priority: action.priority ?? "AlwaysOverflow",
827
+ group: action.group
791
828
  })
792
829
  }
793
830
  })
@@ -891,7 +928,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
891
928
  text: "{sap.fe.i18n>M_TABLE_CUT}",
892
929
  "jsx:command": "cmd:Cut|press",
893
930
  visible: action.visible,
894
- enabled: action.enabled
931
+ enabled: action.enabled,
932
+ children: {
933
+ layoutData: _jsx(OverflowToolbarLayoutData, {
934
+ priority: action.priority,
935
+ group: action.group
936
+ })
937
+ }
895
938
  })
896
939
  });
897
940
  } else {
@@ -925,7 +968,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
925
968
  text: "{sap.fe.i18n>M_TABLE_COPY}",
926
969
  "jsx:command": "cmd:Copy|press",
927
970
  visible: action.visible,
928
- enabled: action.enabled
971
+ enabled: action.enabled,
972
+ children: {
973
+ layoutData: _jsx(OverflowToolbarLayoutData, {
974
+ priority: action.priority,
975
+ group: action.group
976
+ })
977
+ }
929
978
  })
930
979
  });
931
980
  } else {
@@ -952,7 +1001,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
952
1001
  text: forMoveUp ? "{sap.fe.i18n>M_TABLE_MOVE_UP}" : "{sap.fe.i18n>M_TABLE_MOVE_DOWN}",
953
1002
  "jsx:command": forMoveUp ? "cmd:TableMoveElementUp|press" : "cmd:TableMoveElementDown|press",
954
1003
  visible: action.visible,
955
- enabled: action.enabled
1004
+ enabled: action.enabled,
1005
+ children: {
1006
+ layoutData: _jsx(OverflowToolbarLayoutData, {
1007
+ priority: action.priority,
1008
+ group: action.group
1009
+ })
1010
+ }
956
1011
  })
957
1012
  });
958
1013
  } else {
@@ -987,7 +1042,13 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
987
1042
  text: "{sap.fe.i18n>M_PASTE}",
988
1043
  "jsx:command": "cmd:Paste|press",
989
1044
  visible: action.visible,
990
- enabled: action.enabled
1045
+ enabled: action.enabled,
1046
+ children: {
1047
+ layoutData: _jsx(OverflowToolbarLayoutData, {
1048
+ priority: action.priority,
1049
+ group: action.group
1050
+ })
1051
+ }
991
1052
  })
992
1053
  });
993
1054
  } else {
@@ -1062,4 +1123,4 @@ sap.ui.define(["sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/
1062
1123
  }
1063
1124
  return _exports;
1064
1125
  }, false);
1065
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnUiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwibGF5b3V0RGF0YSIsIk92ZXJmbG93VG9vbGJhckxheW91dERhdGEiLCJwcmlvcml0eSIsIk1vdmVVcCIsIk1vdmVEb3duIiwiZ2V0TW92ZVVwRG93bkJ1dHRvbiIsImdldEFjdGlvbnMiLCJhY3Rpb25zIiwiQWN0aW9uVHlwZSIsIlN0YW5kYXJkIiwiX2V4cG9ydHMiLCJnZXRCYXNpY1NlYXJjaCIsInVzZUJhc2ljU2VhcmNoIiwiZmlsdGVyQmFySWQiLCJfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkIiwiaXNTZWFyY2hhYmxlIiwibGFiZWwiLCJCYXNpY1NlYXJjaE1hY3JvIiwidXNlRHJhZnRFZGl0U3RhdGUiLCJnZXRGdWxsU2NyZWVuIiwiZW5hYmxlRnVsbFNjcmVlbiIsIlRhYmxlRnVsbFNjcmVlbkJ1dHRvbiIsImZvck1vdmVVcCIsInRhYmxlVHlwZSIsImdldFRhYmxlQWN0aW9uc1RlbXBsYXRlIiwiTW9kZWxIZWxwZXIiLCJpc0RyYWZ0Tm9kZSIsImlzRHJhZnRSb290Iiwic2VhcmNoYWJsZSIsImJhc2ljU2VhcmNoIiwiZmlsdGVyQmFyIiwiZnVsbFNjcmVlbiIsImdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZSIsImdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zIiwiZXhwYW5kTm9kZSIsImNvbGxhcHNlTm9kZSIsImV4cGFuZCIsImVuYWJsZUV4cHJlc3Npb24iXSwic291cmNlUm9vdCI6Ii4iLCJzb3VyY2VzIjpbIkFjdGlvbnNUZW1wbGF0aW5nLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IEFjdGlvbiB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlcy9FZG1cIjtcbmltcG9ydCB0eXBlIHtcblx0RGF0YUZpZWxkQWJzdHJhY3RUeXBlcyxcblx0RGF0YUZpZWxkRm9yQWN0aW9uLFxuXHREYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb25cbn0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL3ZvY2FidWxhcmllcy9VSVwiO1xuXG5pbXBvcnQgdHlwZSB7IEVudGl0eVNldCwgTmF2aWdhdGlvblByb3BlcnR5IH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHR5cGUgeyBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgYW5kLCBjb21waWxlRXhwcmVzc2lvbiwgZXF1YWwsIG5vdEVxdWFsLCBwYXRoSW5Nb2RlbCwgcmVzb2x2ZUJpbmRpbmdTdHJpbmcgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQmluZGluZ1Rvb2xraXRcIjtcbmltcG9ydCB7IEFjdGlvblR5cGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NYW5pZmVzdFNldHRpbmdzXCI7XG5pbXBvcnQgKiBhcyBNZXRhTW9kZWxDb252ZXJ0ZXIgZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvTWV0YU1vZGVsQ29udmVydGVyXCI7XG5pbXBvcnQge1xuXHRpc0FjdGlvbldpdGhEaWFsb2csXG5cdGlzRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9hbm5vdGF0aW9ucy9EYXRhRmllbGRcIjtcbmltcG9ydCB0eXBlIHsgQW5ub3RhdGlvbkFjdGlvbiwgQmFzZUFjdGlvbiwgQ3VzdG9tQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHsgQnV0dG9uVHlwZSwgYWlJY29uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL0FjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBDcmVhdGVCZWhhdmlvckV4dGVybmFsIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL1RhYmxlXCI7XG5pbXBvcnQgdHlwZSB7IFN0YW5kYXJkQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHsgU3RhbmRhcmRBY3Rpb25LZXlzIH0gZnJvbSBcInNhcC9mZS9jb3JlL2NvbnZlcnRlcnMvY29udHJvbHMvQ29tbW9uL3RhYmxlL1N0YW5kYXJkQWN0aW9uc1wiO1xuaW1wb3J0IHsgVUkgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9CaW5kaW5nSGVscGVyXCI7XG5pbXBvcnQgTW9kZWxIZWxwZXIgZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvTW9kZWxIZWxwZXJcIjtcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSBcInNhcC9mZS9jb3JlL2hlbHBlcnMvU3RhYmxlSWRIZWxwZXJcIjtcbmltcG9ydCBDb21tb25IZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvQ29tbW9uSGVscGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVDdXN0b21EYXRhIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvVFNYVXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ3VzdG9tQW5kQWN0aW9uIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvY2hhcnQvTWRjQ2hhcnRUZW1wbGF0ZVwiO1xuaW1wb3J0IHR5cGUgeyBUYWJsZUJsb2NrUHJvcGVydGllcywgVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyB9IGZyb20gXCJzYXAvZmUvbWFjcm9zL3RhYmxlL01kY1RhYmxlVGVtcGxhdGVcIjtcbmltcG9ydCBUYWJsZUZ1bGxTY3JlZW5CdXR0b24gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVGdWxsU2NyZWVuQnV0dG9uXCI7XG5pbXBvcnQgVGFibGVIZWxwZXIgZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvVGFibGVIZWxwZXJcIjtcbmltcG9ydCBCdXR0b24gZnJvbSBcInNhcC9tL0J1dHRvblwiO1xuaW1wb3J0IE1lbnUgZnJvbSBcInNhcC9tL01lbnVcIjtcbmltcG9ydCBNZW51QnV0dG9uIGZyb20gXCJzYXAvbS9NZW51QnV0dG9uXCI7XG5pbXBvcnQgTWVudUl0ZW0gZnJvbSBcInNhcC9tL01lbnVJdGVtXCI7XG5pbXBvcnQgT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVwiO1xuaW1wb3J0IHsgTWVudUJ1dHRvbk1vZGUgfSBmcm9tIFwic2FwL20vbGlicmFyeVwiO1xuaW1wb3J0IEFjdGlvbnNQbGFjZWhvbGRlciBmcm9tIFwic2FwL20vdXBsb2FkL0FjdGlvbnNQbGFjZWhvbGRlclwiO1xuaW1wb3J0IHR5cGUgVUk1RXZlbnQgZnJvbSBcInNhcC91aS9iYXNlL0V2ZW50XCI7XG5pbXBvcnQgdHlwZSBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgUG9wdXAgZnJvbSBcInNhcC91aS9jb3JlL1BvcHVwXCI7XG5pbXBvcnQgQWN0aW9uVG9vbGJhckFjdGlvbiBmcm9tIFwic2FwL3VpL21kYy9hY3Rpb250b29sYmFyL0FjdGlvblRvb2xiYXJBY3Rpb25cIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5pbXBvcnQgQWN0aW9uSGVscGVyIGZyb20gXCIuLi9pbnRlcm5hbC9oZWxwZXJzL0FjdGlvbkhlbHBlclwiO1xuaW1wb3J0IEJhc2ljU2VhcmNoTWFjcm8gZnJvbSBcIi4vQmFzaWNTZWFyY2hcIjtcbmltcG9ydCB0eXBlIFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXIgZnJvbSBcIi4vVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclwiO1xuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSBtZW51SXRlbUFjdGlvbiBUaGUgbWVudUl0ZW1BY3Rpb24gdG8gYmUgZXZhbHVhdGVkXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICghbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoXG5cdFx0cGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhXG5cdCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgOiBtZW51SXRlbUFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgbWVudUl0ZW1BY3Rpb24sIGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRsZXQgZW5hYmxlZDogc3RyaW5nIHwgYm9vbGVhbiB8IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uID1cblx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZFxuXHRcdFx0OiBUYWJsZUhlbHBlci5pc0RhdGFGaWVsZEZvckFjdGlvbkVuYWJsZWQoXG5cdFx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdFx0ISFpc0JvdW5kLFxuXHRcdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiAhIWlzQm91bmQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlLCByZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSkpO1xuXHR9XG5cdGlmIChpc0JvdW5kICE9PSB0cnVlIHx8IGlzT3BlcmF0aW9uQXZhaWxhYmxlKSB7XG5cdFx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGRhdGFGaWVsZCwgXCJNZW51SXRlbUZvckFjdGlvblwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpdGVtSWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIE1lbnVJdGVtIGZvciB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb25cbiAqIEBwYXJhbSBoYW5kbGVyUHJvdmlkZXJcbiAqIEByZXR1cm5zIFRoZSBNZW51SXRlbVxuICovXG5mdW5jdGlvbiBnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51ID0gZmFsc2UsXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IE1lbnVJdGVtIHtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7bWVudUl0ZW1BY3Rpb24uY29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbjogdGFibGUudGFibGVEZWZpbml0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpZCA9IGZvckNvbnRleHRNZW51XG5cdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiLCBcIkNvbnRleHRNZW51XCJdKVxuXHRcdDogZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1JbnRlbnRCYXNlZE5hdmlnYXRpb25cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0aWQ9e2lkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbXG5cdFx0XHRcdFx0IWRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHRcblx0XHRcdFx0XHRcdD8gY3JlYXRlQ3VzdG9tRGF0YShcIklCTkRhdGFcIiwgeyBzZW1hbnRpY09iamVjdDogZGF0YUZpZWxkLlNlbWFudGljT2JqZWN0LCBhY3Rpb246IGRhdGFGaWVsZC5BY3Rpb24gfSlcblx0XHRcdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0XHRcdGNyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBpZClcblx0XHRcdFx0XVxuXHRcdFx0fX1cblx0XHQ8L01lbnVJdGVtPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBtZW51SXRlbUFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gbWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKG1lbnVJdGVtQWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRzd2l0Y2ggKGRhdGFGaWVsZCAmJiBtZW51SXRlbUFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFmb3JDb250ZXh0TWVudSB8fFxuXHRcdFx0XHRcdChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0XHQpIHtcblx0XHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkISkgJiZcblx0XHRcdFx0KCFmb3JDb250ZXh0TWVudSB8fCAoZm9yQ29udGV4dE1lbnUgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkpXG5cdFx0XHQpIHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbixcblx0XHRcdFx0XHR0YWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0XHRjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA6IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGxldCBlbmFibGVkID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uZW5hYmxlZCA6IChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLmVuYWJsZWRGb3JDb250ZXh0TWVudTtcblx0aWYgKFxuXHRcdChtZW51SXRlbUFjdGlvbiBhcyBDdXN0b21BY3Rpb24pLnJlcXVpcmVzU2VsZWN0aW9uICYmXG5cdFx0dGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWxcblx0KSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGNvbnRleHRNZW51VGV4dCA9IGZvckNvbnRleHRNZW51ID8gXCJDb250ZXh0TWVudVwiIDogXCJBY3Rpb25NZW51XCI7XG5cdGNvbnN0IGl0ZW1JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgY29udGV4dE1lbnVUZXh0LCBhY3Rpb24ua2V5LCBkYXRhRmllbGQsIFwiTWVudUl0ZW1cIl0pO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0dGV4dD17bWVudUl0ZW1BY3Rpb24/LnRleHR9XG5cdFx0XHRpZD17aXRlbUlkfVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHQ+XG5cdFx0XHR7e1xuXHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIGFjdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0RGF0YUZpZWxkQnV0dG9uRm9yQWN0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckFjdGlvbixcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZGF0YUZpZWxkQWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSE7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQoZGF0YUZpZWxkQWN0aW9uQ29udGV4dCk7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0czxBY3Rpb24+KGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmRcblx0XHQ/IHVuZGVmaW5lZFxuXHRcdDogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgYWN0aW9uLCB1bmRlZmluZWQsIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlT25TZWxlY3QsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0YXJpYUhhc1BvcHVwPXtpc0FjdGlvbldpdGhEaWFsb2coZGF0YUZpZWxkKX1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0b29sYmFyQWN0aW9uSWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9CdXR0b24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gQnV0dG9uLlxuICogQHBhcmFtIGRhdGFGaWVsZCBEYXRhRmllbGQgZm9yIEludGVudEJhc2VkTmF2aWdhdGlvblxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0ZGF0YUZpZWxkOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24sXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRoYW5kbGVyUHJvdmlkZXI6IFRhYmxlRXZlbnRIYW5kbGVyUHJvdmlkZXJcbik6IEJ1dHRvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IElCTkRhdGEgPSAhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCA/IHsgc2VtYW50aWNPYmplY3Q6IGRhdGFGaWVsZC5TZW1hbnRpY09iamVjdCwgYWN0aW9uOiBkYXRhRmllbGQuQWN0aW9uIH0gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IHRvb2xiYXJBY3Rpb25JZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdGlkPXt0b29sYmFyQWN0aW9uSWR9XG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdG9vbGJhckFjdGlvbklkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJJQk5EYXRhXCIsIElCTkRhdGEpLCBjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIGJ1dHRvbiBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24vbWVudSBpdGVtXG4gKi9cbmZ1bmN0aW9uIGdldERhdGFGaWVsZEJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGNvbnN0IGRhdGFGaWVsZCA9IGFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgoYWN0aW9uLmFubm90YXRpb25QYXRoKS50YXJnZXQgYXMgRGF0YUZpZWxkQWJzdHJhY3RUeXBlcylcblx0XHQ6IHVuZGVmaW5lZDtcblx0bGV0IHRlbXBsYXRlOiBNZW51SXRlbSB8IEJ1dHRvbiB8IHVuZGVmaW5lZDtcblx0aWYgKCFkYXRhRmllbGQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0XHRcdFx0aWYgKCEhaXNCb3VuZCAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdFx0XHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnN0IGlzT3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uYW5ub3RhdGlvbnM/LkNvcmU/Lk9wZXJhdGlvbkF2YWlsYWJsZT8udmFsdWVPZigpICE9PSBmYWxzZTtcblx0XHRcdFx0Ly8gc2hvdyBvbmx5IGJvdW5kIGFjdGlvbnMgaW4gY29udGV4dCBtZW51XG5cdFx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUgfHwgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0XHRpZiAoaXNCb3VuZCAhPT0gdHJ1ZSB8fCBpc09wZXJhdGlvbkF2YWlsYWJsZSkge1xuXHRcdFx0XHRcdFx0dGVtcGxhdGUgPSBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oZGF0YUZpZWxkLCBhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIkZvck5hdmlnYXRpb25cIjpcblx0XHRcdGlmIChcblx0XHRcdFx0aXNEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oZGF0YUZpZWxkKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKVxuXHRcdFx0KSB7XG5cdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRhY3Rpb24sXG5cdFx0XHRcdFx0dGFibGUsXG5cdFx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdFx0Y29sbGVjdGlvbkNvbnRleHQsXG5cdFx0XHRcdFx0cGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXJcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblxuXHRpZiAodGVtcGxhdGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0YWN0aW9uOiB0ZW1wbGF0ZVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiB0ZW1wbGF0ZSBhcyBNZW51SXRlbTtcblx0fVxufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgYWN0aW9uIGhhbmRsZXIgdGhhdCBpcyBpbnZva2VkIHdoZW4gYWRkaW5nIHRoZSBtZW51IGJ1dHRvbi5cbiAqIEBwYXJhbSBkZWZhdWx0QWN0aW9uIFRoZSBkZWZhdWx0IGFjdGlvbiBvZiB0aGUgbWVudVxuICogQHBhcmFtIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gVGhlIGRhdGFGaWVsZCBmb3IgdGhlIGRlZmF1bHQgYWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvcnJlc3BvbmRpbmcgZXZlbnQgaGFuZGxlciBvciBjb21tYW5kXG4gKi9cbmZ1bmN0aW9uIGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKFxuXHRkZWZhdWx0QWN0aW9uOiBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQsXG5cdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb246IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiB8IERhdGFGaWVsZEZvckFjdGlvbiB8IHVuZGVmaW5lZCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogeyBoYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkOyBjb21tYW5kPzogc3RyaW5nIH0ge1xuXHRpZiAoIWRlZmF1bHRBY3Rpb24pIHtcblx0XHRyZXR1cm4ge307XG5cdH1cblxuXHR0cnkge1xuXHRcdHN3aXRjaCAoZGVmYXVsdEFjdGlvbi50eXBlKSB7XG5cdFx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKFxuXHRcdFx0XHRcdFx0ZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiBhcyBEYXRhRmllbGRGb3JBY3Rpb24sXG5cdFx0XHRcdFx0XHRkZWZhdWx0QWN0aW9uLFxuXHRcdFx0XHRcdFx0dW5kZWZpbmVkLFxuXHRcdFx0XHRcdFx0ZmFsc2Vcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH07XG5cblx0XHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9ySUJOUHJlc3NIYW5kbGVyKGRlZmF1bHRBY3Rpb24sIGZhbHNlKVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRkZWZhdWx0OiB7XG5cdFx0XHRcdGlmIChkZWZhdWx0QWN0aW9uLmNvbW1hbmQpIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0Y29tbWFuZDogYGNtZDoke2RlZmF1bHRBY3Rpb24uY29tbWFuZH18ZGVmYXVsdEFjdGlvbmBcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyOiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0XHR9O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGNhdGNoIChlKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgTWVudUJ1dHRvbiBjb250cm9sIHdoaWNoIGVuYWJsZXMgdGhlIHVzZXIgdG8gc2hvdyBhIGhpZXJhcmNoaWNhbCBtZW51LlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIE1lbnVCdXR0b24gY29udHJvbFxuICovXG5mdW5jdGlvbiBnZXRNZW51QnV0dG9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5yZXF1aXJlc1NlbGVjdGlvbiAmJiB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGFjdGlvbiA9IGRlZXBDbG9uZShhY3Rpb24pO1xuXHRcdGFjdGlvbi5lbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkID8/IFwiXCIpLCBVSS5pc05vZGVMZXZlbE5hdmlnYWJsZSkpO1xuXHR9XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbiA9IChhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uKS5kZWZhdWx0QWN0aW9uIGFzIEN1c3RvbUFjdGlvbiB8IHVuZGVmaW5lZDtcblx0XHRjb25zdCBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uID0gZGVmYXVsdEFjdGlvbj8uYW5ub3RhdGlvblBhdGhcblx0XHRcdD8gcGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aDxEYXRhRmllbGRGb3JBY3Rpb24gfCBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24+KGRlZmF1bHRBY3Rpb24uYW5ub3RhdGlvblBhdGgpXG5cdFx0XHRcdFx0LnRhcmdldFxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGVmYXVsdEFjdGlvbkhhbmRsZXJzID0gZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24oZGVmYXVsdEFjdGlvbiwgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiwgcGFyYW1ldGVycyk7XG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gYWN0aW9uLm1lbnVcblx0XHRcdD8uZmlsdGVyKChtZW51SXRlbUFjdGlvbikgPT4gdHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiKVxuXHRcdFx0Lm1hcCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdFx0cmV0dXJuIGdldE1lbnVJdGVtKGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0fSlcblx0XHRcdC5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0gIT09IHVuZGVmaW5lZCk7XG5cblx0XHRpZiAobWVudUl0ZW1zPy5sZW5ndGgpIHtcblx0XHRcdGNvbnN0IG1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pO1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdDxNZW51QnV0dG9uXG5cdFx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0XHRtZW51UG9zaXRpb249e1BvcHVwLkRvY2suQmVnaW5Cb3R0b219XG5cdFx0XHRcdFx0XHRpZD17bWVudUlkfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRcdHVzZURlZmF1bHRBY3Rpb25Pbmx5PXshIShhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9ufVxuXHRcdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0XHRcdGJ1dHRvbk1vZGU9eyhhY3Rpb24gYXMgQ3VzdG9tQW5kQWN0aW9uKS5kZWZhdWx0QWN0aW9uID8gTWVudUJ1dHRvbk1vZGUuU3BsaXQgOiBNZW51QnV0dG9uTW9kZS5SZWd1bGFyfVxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbj17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmhhbmRsZXJ9XG5cdFx0XHRcdFx0XHRqc3g6Y29tbWFuZD17ZGVmYXVsdEFjdGlvbkhhbmRsZXJzLmNvbW1hbmR9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBtZW51SWQpXSxcblx0XHRcdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvTWVudUJ1dHRvbj5cblx0XHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0XHR9XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IG1lbnVJdGVtc0ZvckNvbnRleHRNZW51OiBCYXNlQWN0aW9uW10gPSBbXTtcblx0XHRhY3Rpb24ubWVudT8uZm9yRWFjaCgobWVudUl0ZW1BY3Rpb24pID0+IHtcblx0XHRcdGlmICh0eXBlb2YgbWVudUl0ZW1BY3Rpb24gIT09IFwic3RyaW5nXCIgJiYgVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUobWVudUl0ZW1BY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSkge1xuXHRcdFx0XHRtZW51SXRlbXNGb3JDb250ZXh0TWVudT8ucHVzaChtZW51SXRlbUFjdGlvbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCBtZW51SXRlbXMgPSBtZW51SXRlbXNGb3JDb250ZXh0TWVudVxuXHRcdFx0LmZpbHRlcigobWVudUl0ZW1BY3Rpb24pID0+IHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIilcblx0XHRcdC5tYXAoKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbShhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKG1lbnVJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdFx0aWNvbj17aWNvbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9NZW51SXRlbT5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgZGVmYXVsdCBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gaGFuZGxlclByb3ZpZGVyXG4gKiBAcmV0dXJucyBUaGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0QnV0dG9uKFxuXHRhY3Rpb246IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZCA/IHVuZGVmaW5lZCA6IGhhbmRsZXJQcm92aWRlci5nZXRNYW5pZmVzdEFjdGlvblByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGlmIChhY3Rpb24ucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRhY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51ID0gY29tcGlsZUV4cHJlc3Npb24oXG5cdFx0XHRhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpXG5cdFx0KTtcblx0fVxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0Y29yZTpyZXF1aXJlPVwie0ZQTTogJ3NhcC9mZS9jb3JlL2hlbHBlcnMvRlBNSGVscGVyJ31cIlxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKX1cblx0XHRcdFx0XHR0ZXh0PXthY3Rpb24udGV4dH1cblx0XHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZH1cblx0XHRcdFx0XHRpY29uPXthY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZF0pKV1cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2UgaWYgKFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0Y29uc3QgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkLCBcIkNvbnRleHRNZW51XCJdKTtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RlBNOiAnc2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXInfVwiXG5cdFx0XHRcdGlkPXt0YWJsZUFjdGlvbkNvbnRleHRNZW51SWR9XG5cdFx0XHRcdHRleHQ9e2FjdGlvbi50ZXh0fVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgdGFibGVBY3Rpb25Db250ZXh0TWVudUlkKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciBhbiBhY3Rpb24gYnV0dG9uL21lbnUgaXRlbSBiYXNlZCBvbiB0aGUgdHlwZSBvZiB0aGUgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIGdldFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBhY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0QWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkRlZmF1bHRcIjpcblx0XHRcdGlmIChcIm5vV3JhcFwiIGluIGFjdGlvbikge1xuXHRcdFx0XHRyZXR1cm4gZ2V0RGVmYXVsdEJ1dHRvbihhY3Rpb24gYXMgQ3VzdG9tQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJNZW51XCI6XG5cdFx0XHRyZXR1cm4gZ2V0TWVudUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdGRlZmF1bHQ6XG5cdH1cblx0cmV0dXJuIGdldERhdGFGaWVsZEJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29weSBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBjb3B5IGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgYWN0aW9uIGlzIGZvciBBY3Rpb24gVG9vbGJhciBvZiBDb250ZXh0IE1lbnVcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBhY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0Q29weUFjdGlvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZGF0YUZpZWxkID0gYWN0aW9uLmFubm90YXRpb25QYXRoXG5cdFx0PyAocGFyYW1ldGVycy5jb252ZXJ0ZWRNZXRhZGF0YS5yZXNvbHZlUGF0aChhY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRGb3JBY3Rpb24pXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHRQYXRoID0gQ29tbW9uSGVscGVyLmdldEFjdGlvbkNvbnRleHQocGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpISk7XG5cdGNvbnN0IG9wZXJhdGlvbkF2YWlsYWJsZSA9IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlICE9PSB1bmRlZmluZWQ7XG5cdGNvbnN0IGFjdGlvbkNvbnRleHQgPSBwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb25Db250ZXh0UGF0aCkhO1xuXHRjb25zdCBkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoID0gYWN0aW9uQ29udGV4dFxuXHRcdD8gTWV0YU1vZGVsQ29udmVydGVyLmdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyhhY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uQ29udGV4dClcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZD8uQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBwcmVzcyA9IGRhdGFGaWVsZFxuXHRcdD8gcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyKGRhdGFGaWVsZCwgYWN0aW9uLCB1bmRlZmluZWQsIGZvckNvbnRleHRNZW51KVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdGxldCBlbmFibGVkOiBzdHJpbmcgfCBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPSBvcGVyYXRpb25BdmFpbGFibGVcblx0XHQ/IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0dGFibGUudGFibGVEZWZpbml0aW9uLFxuXHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdGFjdGlvbkNvbnRleHQuZ2V0T2JqZWN0KCksXG5cdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0ZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aD8udGFyZ2V0RW50aXR5VHlwZSxcblx0XHRcdFx0Zm9yQ29udGV4dE1lbnUsXG5cdFx0XHRcdHRydWVcblx0XHQgIClcblx0XHQ6IGB7PSAke0FjdGlvbkhlbHBlci5nZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbihcInNpbmdsZVwiLCBmb3JDb250ZXh0TWVudSl9fWA7XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoZW5hYmxlZCksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdH1cblxuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pfVxuXHRcdFx0XHRcdHRleHQ9e2FjdGlvbi50ZXh0fVxuXHRcdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKSldXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIHNldCB0byBgZmFsc2VgLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBjcmVhdGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvbnNQbGFjZWhvbGRlciB8IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9DUkVBVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGNvbnN0IGNyZWF0ZU91dGJvdW5kRGV0YWlsID0gKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZSBhcyBDcmVhdGVCZWhhdmlvckV4dGVybmFsKS5vdXRib3VuZERldGFpbDtcblx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZU91dGJvdW5kRGV0YWlsXG5cdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBjcmVhdGVPdXRib3VuZERldGFpbC5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBjcmVhdGVPdXRib3VuZERldGFpbC5hY3Rpb24gfSlcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0cmV0dXJuIDxBY3Rpb25zUGxhY2Vob2xkZXIgaWQ9e2Ake3RhYmxlLmNvbnRlbnRJZH0tdXBsb2FkQnV0dG9uYH0gcGxhY2Vob2xkZXJGb3I9XCJVcGxvYWRCdXR0b25QbGFjZWhvbGRlclwiIC8+O1xuXHR9IGVsc2UgaWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZXxwcmVzc1wiXG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDcmVhdGU6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3JlYXRlTWVudShcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgdmFsdWVzID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUhLnZhbHVlcztcblx0Y29uc3QgaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgIT09IHVuZGVmaW5lZDtcblxuXHRjb25zdCBtZW51SXRlbXMgPSB2YWx1ZXMubWFwKChhbGxvd2VkVmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgbW9kZWxOYW1lID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRjb25zdCBpc0VuYWJsZWQgPSBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50XG5cdFx0XHQ/IG5vdEVxdWFsKHBhdGhJbk1vZGVsKGAke21vZGVsTmFtZX1jcmVhdGVFbmFibGVtZW50L0NyZWF0ZV8ke2luZGV4fWAsIFwiaW50ZXJuYWxcIiksIGZhbHNlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaWQgPSBmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhbGxvd2VkVmFsdWUudmFsdWUsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0XHQ6IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZV0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHR0ZXh0PXthbGxvd2VkVmFsdWUudGV4dH1cblx0XHRcdFx0ZW5hYmxlZD17aXNFbmFibGVkID8gY29tcGlsZUV4cHJlc3Npb24oaXNFbmFibGVkKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlcihpbmRleCwgZm9yQ29udGV4dE1lbnUpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9KTtcblxuXHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zICE9PSB1bmRlZmluZWQgJiYgbWVudUl0ZW1zLmxlbmd0aCA+IDAgPyBtZW51SXRlbXMgOiB1bmRlZmluZWRcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0PE1lbnVCdXR0b25cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0bWVudVBvc2l0aW9uPVwiQmVnaW5Cb3R0b21cIlxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pKV0sXG5cdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+XG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWxldGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9ERUxFVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkRlbGV0ZUVudHJ5fHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkIGFjdGlvbnMgYmFzZWQgb24gdGhlIGtleSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIHRlbXBsYXRlXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFuZGFyZCBhY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb24oXG5cdGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoYWN0aW9uLmlzVGVtcGxhdGVkID09PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiBhY3Rpb24ua2V5ICE9PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblxuXHRzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGU6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgfHxcblx0XHRcdFx0Ly8gV2Ugb25seSBoYXZlIENyZWF0ZSBvbiB0aGUgQ29udGV4dE1lbnUgb24gdGhlIFRyZWVUYWJsZVxuXHRcdFx0XHQodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiAmJiBmb3JDb250ZXh0TWVudSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q3JlYXRlTWVudShhY3Rpb24sIHRhYmxlLCBjb2xsZWN0aW9uRW50aXR5LCBmb3JDb250ZXh0TWVudSwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlOlxuXHRcdFx0cmV0dXJuIGdldERlbGV0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0OlxuXHRcdFx0cmV0dXJuIGdldEN1dEJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ29weTpcblx0XHRcdHJldHVybiBnZXRDb3B5QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZTpcblx0XHRcdHJldHVybiBnZXRQYXN0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdDpcblx0XHRcdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQpIHtcblx0XHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9NQVNTRURJVH1cIlxuXHRcdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fVEFCTEVfTUFTU0VESVR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRNYXNzRWRpdEJ1dHRvblByZXNzSGFuZGxlcih0cnVlKX1cblx0XHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0Lz5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuSW5zaWdodHM6XG5cdFx0XHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0PEFjdGlvblRvb2xiYXJBY3Rpb25cblx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fQ09NTU9OX0lOU0lHSFRTX0NBUkR9XCJcblx0XHRcdFx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5hZGRDYXJkVG9JbnNpZ2h0c1ByZXNzfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT1cIkFsd2F5c092ZXJmbG93XCIgLz5cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA6XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd246XG5cdFx0XHRyZXR1cm4gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdIHtcblx0cmV0dXJuIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zXG5cdFx0Lm1hcCgoYWN0aW9uKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TdGFuZGFyZDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0U3RhbmRhcmRBY3Rpb24oYWN0aW9uIGFzIFN0YW5kYXJkQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLkNvcHk6XG5cdFx0XHRcdFx0cmV0dXJuIGdldENvcHlBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKSBhcyAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgQmFzaWNTZWFyY2guXG4gKiBAcGFyYW0gdXNlQmFzaWNTZWFyY2hcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICogQHBhcmFtIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWRcbiAqIEBwYXJhbSBpc1NlYXJjaGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBCYXNpY1NlYXJjaFxuICovXG5mdW5jdGlvbiBnZXRCYXNpY1NlYXJjaChcblx0dXNlQmFzaWNTZWFyY2g6IGJvb2xlYW4sXG5cdGZpbHRlckJhcklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGlzU2VhcmNoYWJsZTogYm9vbGVhblxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh1c2VCYXNpY1NlYXJjaCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2ZpbHRlckJhcklkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0JBU0lDX1NFQVJDSH1cIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IDxCYXNpY1NlYXJjaE1hY3JvIGlkPXtmaWx0ZXJCYXJJZH0gdXNlRHJhZnRFZGl0U3RhdGU9e19jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWR9IHZpc2libGU9e2lzU2VhcmNoYWJsZX0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0YWJsZSBmdWxsc2NyZWVuIGJ1dHRvbi5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bGxTY3JlZW4odGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVGdWxsU2NyZWVuKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0ZVTExfU0NSRUVOfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTdGFuZGFyZEFjdGlvblwiLCBcIkZ1bGxTY3JlZW5cIl0pfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBDdXQgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBCdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3V0QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3V0fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkN1dDo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgQ29weSBidXR0b24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBpbnN0YW5jZSBvZiB0aGUgc3RhbmRhcmRBY3Rpb24uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSBUYWJsZSBidWlsZGluZyBibG9jay5cbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBidXR0b24uXG4gKi9cbmZ1bmN0aW9uIGdldENvcHlCdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudSA9IGZhbHNlKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiXSl9XG5cdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQvPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ29weVwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPUFl9XCJcblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q29weTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldE1vdmVVcERvd25CdXR0b24oYWN0aW9uOiBTdGFuZGFyZEFjdGlvbiwgdGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBmb3JDb250ZXh0TWVudTogYm9vbGVhbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGZvck1vdmVVcCA9IGFjdGlvbi5rZXkgPT09IFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtmb3JNb3ZlVXAgPyBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX01PVkVfVVB9XCIgOiBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX01PVkVfRE9XTn1cIn1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD17Zm9yTW92ZVVwID8gXCJjbWQ6VGFibGVNb3ZlRWxlbWVudFVwfHByZXNzXCIgOiBcImNtZDpUYWJsZU1vdmVFbGVtZW50RG93bnxwcmVzc1wifVxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdC8+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17Zm9yTW92ZVVwID8gXCJjbWQ6VGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudXxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51fHByZXNzXCJ9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgUGFzdGUgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgUGFzdGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFBhc3RlIEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRQYXN0ZUJ1dHRvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiXSl9XG5cdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlfHByZXNzXCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmb3IgQ29udGV4dCBNZW51XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpQYXN0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHtcblx0Y29uc3QgX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnROb2RlKGNvbGxlY3Rpb25FbnRpdHkpIHx8IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRsZXQgc2VhcmNoYWJsZTogYm9vbGVhbjtcblx0aWYgKHRhYmxlLmlzU2VhcmNoYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRzZWFyY2hhYmxlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0c2VhcmNoYWJsZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlYXJjaGFibGU7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25zOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdID0gW107XG5cdGNvbnN0IGJhc2ljU2VhcmNoID0gZ2V0QmFzaWNTZWFyY2goISF0YWJsZS51c2VCYXNpY1NlYXJjaCwgdGFibGUuZmlsdGVyQmFyLCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkLCBzZWFyY2hhYmxlKTtcblx0aWYgKGJhc2ljU2VhcmNoKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGJhc2ljU2VhcmNoKTtcblx0fVxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0QWN0aW9ucyh0YWJsZSwgZmFsc2UsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cdGNvbnN0IGZ1bGxTY3JlZW4gPSBnZXRGdWxsU2NyZWVuKHRhYmxlKTtcblx0aWYgKGZ1bGxTY3JlZW4pIHtcblx0XHRhY3Rpb25zLnB1c2goZnVsbFNjcmVlbik7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9ucyBhcyBDb250cm9sW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBjb250ZXh0IG1lbnUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBNZW51SXRlbVtdIHtcblx0Y29uc3QgdGVtcGxhdGU6IE1lbnVJdGVtW10gPSBnZXRBY3Rpb25zKHRhYmxlLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkgYXMgdW5rbm93biBhcyBNZW51SXRlbVtdO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmV4cGFuZE5vZGUpKTtcblx0XHR0ZW1wbGF0ZS5wdXNoKGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuY29sbGFwc2VOb2RlKSk7XG5cdH1cblx0cmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGV4cGFuZDogYm9vbGVhbiwgcHJlc3NIYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkKTogTWVudUl0ZW0ge1xuXHRjb25zdCBlbmFibGVFeHByZXNzaW9uID0gZXhwYW5kXG5cdFx0PyBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKVxuXHRcdCAgKVxuXHRcdDogYW5kKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGV4cGFuZCA/IFwiRXhwYW5kXCIgOiBcIkNvbGxhcHNlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0dGV4dD17ZXhwYW5kID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT05URVhUTUVOVV9FWFBBTkR9XCIgOiBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0NPTExBUFNFfVwifVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZUV4cHJlc3Npb259XG5cdFx0Lz5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Esb0JBQW9CQSxDQUM1QkMsU0FBNkIsRUFDN0JDLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJDLFVBQXFDLEVBQ2Q7SUFDdkIsSUFBSSxDQUFDSixjQUFjLENBQUNLLGNBQWMsRUFBRTtNQUNuQyxPQUFPQyxTQUFTO0lBQ2pCO0lBQ0EsTUFBTUMsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ3RETCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNYLGNBQWMsQ0FBQ0ssY0FBYyxHQUFHLFNBQVMsQ0FDcEYsQ0FBQztJQUNELE1BQU1PLGFBQWEsR0FBR1IsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDSixpQkFBaUIsQ0FBRTtJQUNuRixNQUFNTSw0QkFBNEIsR0FBR0QsYUFBYSxHQUMvQ0Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSCxhQUFhLEVBQUVULGlCQUFpQixDQUFDLEdB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
1126
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJnZXRNZW51SXRlbUZvckFjdGlvbiIsImRhdGFGaWVsZCIsImFjdGlvbiIsIm1lbnVJdGVtQWN0aW9uIiwidGFibGUiLCJmb3JDb250ZXh0TWVudSIsImNvbGxlY3Rpb25Db250ZXh0IiwicGFyYW1ldGVycyIsImFubm90YXRpb25QYXRoIiwidW5kZWZpbmVkIiwiYWN0aW9uQ29udGV4dFBhdGgiLCJDb21tb25IZWxwZXIiLCJnZXRBY3Rpb25Db250ZXh0IiwibWV0YU1vZGVsIiwiY3JlYXRlQmluZGluZ0NvbnRleHQiLCJhY3Rpb25Db250ZXh0IiwiZGF0YUZpZWxkRGF0YU1vZGVsT2JqZWN0UGF0aCIsIk1ldGFNb2RlbENvbnZlcnRlciIsImdldEludm9sdmVkRGF0YU1vZGVsT2JqZWN0cyIsImlzQm91bmQiLCJBY3Rpb25UYXJnZXQiLCJpc09wZXJhdGlvbkF2YWlsYWJsZSIsImFubm90YXRpb25zIiwiQ29yZSIsIk9wZXJhdGlvbkF2YWlsYWJsZSIsInZhbHVlT2YiLCJjb21tYW5kIiwiY29udGV4dE1lbnVUZXh0IiwicHJlc3NIYW5kbGVyIiwiaGFuZGxlclByb3ZpZGVyIiwiZ2V0RGF0YUZpZWxkRm9yQWN0aW9uQnV0dG9uUHJlc3NIYW5kbGVyIiwicHJlc3NDb21tYW5kIiwiZW5hYmxlZCIsIlRhYmxlSGVscGVyIiwiaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkIiwidGFibGVEZWZpbml0aW9uIiwiQWN0aW9uIiwiZ2V0T2JqZWN0IiwiZW5hYmxlT25TZWxlY3QiLCJ0YXJnZXRFbnRpdHlUeXBlIiwiY29udHJvbCIsImFuYWx5dGljYWxDb25maWd1cmF0aW9uIiwiYWdncmVnYXRpb25PbkxlYWZMZXZlbCIsImNvbXBpbGVFeHByZXNzaW9uIiwiYW5kIiwiVUkiLCJpc05vZGVMZXZlbE5hdmlnYWJsZSIsInJlc29sdmVCaW5kaW5nU3RyaW5nIiwiaXRlbUlkIiwiZ2VuZXJhdGUiLCJjb250ZW50SWQiLCJrZXkiLCJfanN4IiwiTWVudUl0ZW0iLCJ0ZXh0IiwiTGFiZWwiLCJpZCIsInByZXNzIiwidmlzaWJsZSIsImNoaWxkcmVuIiwiY3VzdG9tRGF0YSIsImNyZWF0ZUN1c3RvbURhdGEiLCJnZXRNZW51SXRlbUZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImFyZ3VtZW50cyIsImxlbmd0aCIsImdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlciIsImlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZCIsImNvbGxlY3Rpb24iLCJSZXF1aXJlc0NvbnRleHQiLCJOYXZpZ2F0aW9uQXZhaWxhYmxlIiwic2VtYW50aWNPYmplY3QiLCJTZW1hbnRpY09iamVjdCIsImdldE1lbnVJdGVtIiwiY29udmVydGVkTWV0YWRhdGEiLCJyZXNvbHZlUGF0aCIsInRhcmdldCIsInR5cGUiLCJpc0RhdGFGaWVsZEZvckFjdGlvbiIsImlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51IiwiY29udGV4dE9iamVjdFBhdGgiLCJpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbiIsImdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyIiwiZW5hYmxlZEZvckNvbnRleHRNZW51IiwicmVxdWlyZXNTZWxlY3Rpb24iLCJnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24iLCJkYXRhRmllbGRBY3Rpb25Db250ZXh0IiwiaWNvbiIsImlzQUlPcGVyYXRpb24iLCJhaUljb24iLCJ0b29sYmFyQWN0aW9uSWQiLCJCdXR0b24iLCJhcmlhSGFzUG9wdXAiLCJpc0FjdGlvbldpdGhEaWFsb2ciLCJCdXR0b25UeXBlIiwiVHJhbnNwYXJlbnQiLCJsYXlvdXREYXRhIiwiT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSIsInByaW9yaXR5IiwiZ3JvdXAiLCJ0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQiLCJ2aXNpYmxlRm9yQ29udGV4dE1lbnUiLCJnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24iLCJJQk5EYXRhIiwiZ2V0RGF0YUZpZWxkQnV0dG9uIiwidGVtcGxhdGUiLCJkZWVwQ2xvbmUiLCJBY3Rpb25Ub29sYmFyQWN0aW9uIiwiZ2V0RGVmYXVsdE1lbnVCdXR0b25BY3Rpb24iLCJkZWZhdWx0QWN0aW9uIiwiZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiIsImhhbmRsZXIiLCJlIiwiZ2V0TWVudUJ1dHRvbiIsImRlZmF1bHRBY3Rpb25IYW5kbGVycyIsIm1lbnVJdGVtcyIsIm1lbnUiLCJmaWx0ZXIiLCJtYXAiLCJpdGVtIiwibWVudUlkIiwiTWVudUJ1dHRvbiIsIm1lbnVQb3NpdGlvbiIsIlBvcHVwIiwiRG9jayIsIkJlZ2luQm90dG9tIiwidXNlRGVmYXVsdEFjdGlvbk9ubHkiLCJidXR0b25Nb2RlIiwiTWVudUJ1dHRvbk1vZGUiLCJTcGxpdCIsIlJlZ3VsYXIiLCJNZW51IiwibWVudUl0ZW1zRm9yQ29udGV4dE1lbnUiLCJmb3JFYWNoIiwicHVzaCIsIml0ZW1zIiwiZ2V0RGVmYXVsdEJ1dHRvbiIsImdldEFjdGlvbiIsImdldENvcHlBY3Rpb24iLCJvcGVyYXRpb25BdmFpbGFibGUiLCJBY3Rpb25IZWxwZXIiLCJnZXROdW1iZXJPZkNvbnRleHRzRXhwcmVzc2lvbiIsImVxdWFsIiwicGF0aEluTW9kZWwiLCJnZXRDcmVhdGVCdXR0b24iLCJzdGFuZGFyZEFjdGlvbiIsImNvbGxlY3Rpb25FbnRpdHkiLCJzdWZmaXhSZXNvdXJjZUtleSIsIm5hbWUiLCJidXR0b25UZXh0IiwiZ2V0VHJhbnNsYXRlZFRleHQiLCJjcmVhdGVPdXRib3VuZERldGFpbCIsImFubm90YXRpb24iLCJjcmVhdGUiLCJvdXRib3VuZERldGFpbCIsImVuYWJsZVVwbG9hZFBsdWdpbiIsIkFjdGlvbnNQbGFjZWhvbGRlciIsInBsYWNlaG9sZGVyRm9yIiwiZ2V0Q3JlYXRlTWVudSIsInZhbHVlcyIsIm5vZGVUeXBlIiwiaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCIsImNyZWF0ZUVuYWJsZW1lbnQiLCJhbGxvd2VkVmFsdWUiLCJpbmRleCIsIm1vZGVsTmFtZSIsImlzRW5hYmxlZCIsIm5vdEVxdWFsIiwidmFsdWUiLCJnZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlciIsImdldERlbGV0ZUJ1dHRvbiIsImdldFN0YW5kYXJkQWN0aW9uIiwiaXNUZW1wbGF0ZWQiLCJTdGFuZGFyZEFjdGlvbktleXMiLCJDcmVhdGUiLCJpc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQiLCJEZWxldGUiLCJDdXQiLCJnZXRDdXRCdXR0b24iLCJDb3B5IiwiZ2V0Q29weUJ1dHRvbiIsIlBhc3RlIiwiZ2V0UGFzdGVCdXR0b24iLCJNYXNzRWRpdCIsImdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyIiwiSW5zaWdodHMiLCJhZGRDYXJkVG9JbnNpZ2h0c1ByZXNzIiwiTW92ZVVwIiwiTW92ZURvd24iLCJnZXRNb3ZlVXBEb3duQnV0dG9uIiwiZ2V0QWN0aW9ucyIsImFjdGlvbnMiLCJBY3Rpb25UeXBlIiwiU3RhbmRhcmQiLCJfZXhwb3J0cyIsImdldEJhc2ljU2VhcmNoIiwidXNlQmFzaWNTZWFyY2giLCJmaWx0ZXJCYXJJZCIsIl9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQiLCJpc1NlYXJjaGFibGUiLCJsYWJlbCIsIkJhc2ljU2VhcmNoTWFjcm8iLCJ1c2VEcmFmdEVkaXRTdGF0ZSIsImdldEZ1bGxTY3JlZW4iLCJlbmFibGVGdWxsU2NyZWVuIiwiVGFibGVGdWxsU2NyZWVuQnV0dG9uIiwiZm9yTW92ZVVwIiwidGFibGVUeXBlIiwiZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUiLCJNb2RlbEhlbHBlciIsImlzRHJhZnROb2RlIiwiaXNEcmFmdFJvb3QiLCJzZWFyY2hhYmxlIiwiYmFzaWNTZWFyY2giLCJmaWx0ZXJCYXIiLCJmdWxsU2NyZWVuIiwiZ2V0VGFibGVDb250ZXh0TWVudVRlbXBsYXRlIiwiZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnMiLCJleHBhbmROb2RlIiwiY29sbGFwc2VOb2RlIiwiZXhwYW5kIiwiZW5hYmxlRXhwcmVzc2lvbiJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiQWN0aW9uc1RlbXBsYXRpbmcudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQWN0aW9uIH0gZnJvbSBcIkBzYXAtdXgvdm9jYWJ1bGFyaWVzLXR5cGVzL0VkbVwiO1xuaW1wb3J0IHR5cGUge1xuXHREYXRhRmllbGRBYnN0cmFjdFR5cGVzLFxuXHREYXRhRmllbGRGb3JBY3Rpb24sXG5cdERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvblxufSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXMvdm9jYWJ1bGFyaWVzL1VJXCI7XG5cbmltcG9ydCB0eXBlIHsgRW50aXR5U2V0LCBOYXZpZ2F0aW9uUHJvcGVydHkgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgdHlwZSB7IENvbXBpbGVkQmluZGluZ1Rvb2xraXRFeHByZXNzaW9uIH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgeyBhbmQsIGNvbXBpbGVFeHByZXNzaW9uLCBlcXVhbCwgbm90RXF1YWwsIHBhdGhJbk1vZGVsLCByZXNvbHZlQmluZGluZ1N0cmluZyB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IHsgQWN0aW9uVHlwZSB9IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL01hbmlmZXN0U2V0dGluZ3NcIjtcbmltcG9ydCAqIGFzIE1ldGFNb2RlbENvbnZlcnRlciBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9NZXRhTW9kZWxDb252ZXJ0ZXJcIjtcbmltcG9ydCB7XG5cdGlzQWN0aW9uV2l0aERpYWxvZyxcblx0aXNEYXRhRmllbGRGb3JBY3Rpb24sXG5cdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uXG59IGZyb20gXCJzYXAvZmUvY29yZS9jb252ZXJ0ZXJzL2Fubm90YXRpb25zL0RhdGFGaWVsZFwiO1xuaW1wb3J0IHR5cGUgeyBBbm5vdGF0aW9uQWN0aW9uLCBCYXNlQWN0aW9uLCBDdXN0b21BY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgeyBCdXR0b25UeXBlLCBhaUljb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vQWN0aW9uXCI7XG5pbXBvcnQgdHlwZSB7IENyZWF0ZUJlaGF2aW9yRXh0ZXJuYWwgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vVGFibGVcIjtcbmltcG9ydCB0eXBlIHsgU3RhbmRhcmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBTdGFuZGFyZEFjdGlvbktleXMgfSBmcm9tIFwic2FwL2ZlL2NvcmUvY29udmVydGVycy9jb250cm9scy9Db21tb24vdGFibGUvU3RhbmRhcmRBY3Rpb25zXCI7XG5pbXBvcnQgeyBVSSB9IGZyb20gXCJzYXAvZmUvY29yZS9oZWxwZXJzL0JpbmRpbmdIZWxwZXJcIjtcbmltcG9ydCBNb2RlbEhlbHBlciBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9Nb2RlbEhlbHBlclwiO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tIFwic2FwL2ZlL2NvcmUvaGVscGVycy9TdGFibGVJZEhlbHBlclwiO1xuaW1wb3J0IENvbW1vbkhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy9Db21tb25IZWxwZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUN1c3RvbURhdGEgfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9UU1hVdGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDdXN0b21BbmRBY3Rpb24gfSBmcm9tIFwic2FwL2ZlL21hY3Jvcy9jaGFydC9NZGNDaGFydFRlbXBsYXRlXCI7XG5pbXBvcnQgdHlwZSB7IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLCBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzIH0gZnJvbSBcInNhcC9mZS9tYWNyb3MvdGFibGUvTWRjVGFibGVUZW1wbGF0ZVwiO1xuaW1wb3J0IFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUZ1bGxTY3JlZW5CdXR0b25cIjtcbmltcG9ydCBUYWJsZUhlbHBlciBmcm9tIFwic2FwL2ZlL21hY3Jvcy90YWJsZS9UYWJsZUhlbHBlclwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgTWVudSBmcm9tIFwic2FwL20vTWVudVwiO1xuaW1wb3J0IE1lbnVCdXR0b24gZnJvbSBcInNhcC9tL01lbnVCdXR0b25cIjtcbmltcG9ydCBNZW51SXRlbSBmcm9tIFwic2FwL20vTWVudUl0ZW1cIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIGZyb20gXCJzYXAvbS9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXCI7XG5pbXBvcnQgeyBNZW51QnV0dG9uTW9kZSB9IGZyb20gXCJzYXAvbS9saWJyYXJ5XCI7XG5pbXBvcnQgQWN0aW9uc1BsYWNlaG9sZGVyIGZyb20gXCJzYXAvbS91cGxvYWQvQWN0aW9uc1BsYWNlaG9sZGVyXCI7XG5pbXBvcnQgdHlwZSBVSTVFdmVudCBmcm9tIFwic2FwL3VpL2Jhc2UvRXZlbnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2wgZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBQb3B1cCBmcm9tIFwic2FwL3VpL2NvcmUvUG9wdXBcIjtcbmltcG9ydCBBY3Rpb25Ub29sYmFyQWN0aW9uIGZyb20gXCJzYXAvdWkvbWRjL2FjdGlvbnRvb2xiYXIvQWN0aW9uVG9vbGJhckFjdGlvblwiO1xuaW1wb3J0IHR5cGUgQ29udGV4dCBmcm9tIFwic2FwL3VpL21vZGVsL0NvbnRleHRcIjtcbmltcG9ydCBBY3Rpb25IZWxwZXIgZnJvbSBcIi4uL2ludGVybmFsL2hlbHBlcnMvQWN0aW9uSGVscGVyXCI7XG5pbXBvcnQgQmFzaWNTZWFyY2hNYWNybyBmcm9tIFwiLi9CYXNpY1NlYXJjaFwiO1xuaW1wb3J0IHR5cGUgVGFibGVFdmVudEhhbmRsZXJQcm92aWRlciBmcm9tIFwiLi9UYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXCI7XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBNZW51SXRlbSBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBhY3Rpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIG1lbnVJdGVtQWN0aW9uIFRoZSBtZW51SXRlbUFjdGlvbiB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW1Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHRtZW51SXRlbUFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0aWYgKCFtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCkge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChcblx0XHRwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aCArIFwiL0FjdGlvblwiKSFcblx0KTtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkLkFjdGlvblRhcmdldD8uaXNCb3VuZDtcblx0Y29uc3QgaXNPcGVyYXRpb25BdmFpbGFibGUgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5hbm5vdGF0aW9ucz8uQ29yZT8uT3BlcmF0aW9uQXZhaWxhYmxlPy52YWx1ZU9mKCkgIT09IGZhbHNlO1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA6IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgY29udGV4dE1lbnVUZXh0ID0gZm9yQ29udGV4dE1lbnUgPyBcIkNvbnRleHRNZW51XCIgOiBcIkFjdGlvbk1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBtZW51SXRlbUFjdGlvbiwgYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IG1lbnVJdGVtQWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXG5cdGxldCBlbmFibGVkOiBzdHJpbmcgfCBib29sZWFuIHwgQ29tcGlsZWRCaW5kaW5nVG9vbGtpdEV4cHJlc3Npb24gPVxuXHRcdG1lbnVJdGVtQWN0aW9uLmVuYWJsZWQgIT09IHVuZGVmaW5lZFxuXHRcdFx0PyBtZW51SXRlbUFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9yQWN0aW9uRW5hYmxlZChcblx0XHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLkFjdGlvbixcblx0XHRcdFx0XHQhIWlzQm91bmQsXG5cdFx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0XHRtZW51SXRlbUFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsICYmICEhaXNCb3VuZCkge1xuXHRcdGVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQoVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUsIHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQpKSk7XG5cdH1cblx0aWYgKGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRjb25zdCBpdGVtSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGNvbnRleHRNZW51VGV4dCwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtRm9yQWN0aW9uXCJdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdHRleHQ9e2RhdGFGaWVsZC5MYWJlbH1cblx0XHRcdFx0aWQ9e2l0ZW1JZH1cblx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0dmlzaWJsZT17bWVudUl0ZW1BY3Rpb24udmlzaWJsZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGl0ZW1JZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgTWVudUl0ZW0gZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgSW50ZW50QmFzZWROYXZpZ2F0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGFjdGlvblxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIE1lbnVJdGVtXG4gKi9cbmZ1bmN0aW9uIGdldE1lbnVJdGVtRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKFxuXHRkYXRhRmllbGQ6IERhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbixcblx0bWVudUl0ZW1BY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnUgPSBmYWxzZSxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogTWVudUl0ZW0ge1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IGhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JJQk5QcmVzc0hhbmRsZXIobWVudUl0ZW1BY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gbWVudUl0ZW1BY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHttZW51SXRlbUFjdGlvbi5jb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cblx0Y29uc3QgZW5hYmxlZCA9XG5cdFx0bWVudUl0ZW1BY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IG1lbnVJdGVtQWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JJQk5FbmFibGVkKFxuXHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdGNvbGxlY3Rpb246IGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdFx0dGFibGVEZWZpbml0aW9uOiB0YWJsZS50YWJsZURlZmluaXRpb25cblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdGRhdGFGaWVsZCxcblx0XHRcdFx0XHRkYXRhRmllbGQuUmVxdWlyZXNDb250ZXh0LFxuXHRcdFx0XHRcdGRhdGFGaWVsZC5OYXZpZ2F0aW9uQXZhaWxhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IGlkID0gZm9yQ29udGV4dE1lbnVcblx0XHQ/IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIG1lbnVJdGVtQWN0aW9uLmtleSwgYWN0aW9uLmtleSwgZGF0YUZpZWxkLCBcIk1lbnVJdGVtSW50ZW50QmFzZWROYXZpZ2F0aW9uXCIsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0OiBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBtZW51SXRlbUFjdGlvbi5rZXksIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbUludGVudEJhc2VkTmF2aWdhdGlvblwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRpZD17aWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHR2aXNpYmxlPXttZW51SXRlbUFjdGlvbi52aXNpYmxlfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHQhZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dFxuXHRcdFx0XHRcdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBkYXRhRmllbGQuU2VtYW50aWNPYmplY3QsIGFjdGlvbjogZGF0YUZpZWxkLkFjdGlvbiB9KVxuXHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0Y3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGlkKVxuXHRcdFx0XHRdXG5cdFx0XHR9fVxuXHRcdDwvTWVudUl0ZW0+XG5cdCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW0gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIG1lbnVJdGVtQWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gbWVudUl0ZW1BY3Rpb24gVGhlIG1lbnVJdGVtQWN0aW9uIHRvIGJlIGV2YWx1YXRlZFxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIGZvciB0aGUgTWVudUl0ZW1cbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUl0ZW0oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdG1lbnVJdGVtQWN0aW9uOiBCYXNlQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBtZW51SXRlbUFjdGlvbi5hbm5vdGF0aW9uUGF0aFxuXHRcdD8gKHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGgobWVudUl0ZW1BY3Rpb24uYW5ub3RhdGlvblBhdGgpLnRhcmdldCBhcyBEYXRhRmllbGRBYnN0cmFjdFR5cGVzKVxuXHRcdDogdW5kZWZpbmVkO1xuXG5cdHN3aXRjaCAoZGF0YUZpZWxkICYmIG1lbnVJdGVtQWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRm9yQWN0aW9uXCI6XG5cdFx0XHRpZiAoaXNEYXRhRmllbGRGb3JBY3Rpb24oZGF0YUZpZWxkKSkge1xuXHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0IWZvckNvbnRleHRNZW51IHx8XG5cdFx0XHRcdFx0KGZvckNvbnRleHRNZW51ICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbUZvckFjdGlvbihkYXRhRmllbGQsIGFjdGlvbiwgbWVudUl0ZW1BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkNvbnRleHQsIHBhcmFtZXRlcnMpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0aWYgKFxuXHRcdFx0XHRpc0RhdGFGaWVsZEZvckludGVudEJhc2VkTmF2aWdhdGlvbihkYXRhRmllbGQhKSAmJlxuXHRcdFx0XHQoIWZvckNvbnRleHRNZW51IHx8IChmb3JDb250ZXh0TWVudSAmJiBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShtZW51SXRlbUFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW1Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLFxuXHRcdFx0XHRcdG1lbnVJdGVtQWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdGFjdGlvbixcblx0XHRcdFx0XHRwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlclxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5jb21tYW5kIDogbWVudUl0ZW1BY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kXG5cdFx0PyB1bmRlZmluZWRcblx0XHQ6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldE1hbmlmZXN0QWN0aW9uUHJlc3NIYW5kbGVyKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbiwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBtZW51SXRlbUFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblx0bGV0IGVuYWJsZWQgPSAhZm9yQ29udGV4dE1lbnUgPyBtZW51SXRlbUFjdGlvbi5lbmFibGVkIDogKG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikuZW5hYmxlZEZvckNvbnRleHRNZW51O1xuXHRpZiAoXG5cdFx0KG1lbnVJdGVtQWN0aW9uIGFzIEN1c3RvbUFjdGlvbikucmVxdWlyZXNTZWxlY3Rpb24gJiZcblx0XHR0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbFxuXHQpIHtcblx0XHRlbmFibGVkID0gY29tcGlsZUV4cHJlc3Npb24oYW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdH1cblx0Y29uc3QgY29udGV4dE1lbnVUZXh0ID0gZm9yQ29udGV4dE1lbnUgPyBcIkNvbnRleHRNZW51XCIgOiBcIkFjdGlvbk1lbnVcIjtcblx0Y29uc3QgaXRlbUlkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgbWVudUl0ZW1BY3Rpb24ua2V5LCBjb250ZXh0TWVudVRleHQsIGFjdGlvbi5rZXksIGRhdGFGaWVsZCwgXCJNZW51SXRlbVwiXSk7XG5cdHJldHVybiAoXG5cdFx0PE1lbnVJdGVtXG5cdFx0XHRjb3JlOnJlcXVpcmU9XCJ7RlBNOiAnc2FwL2ZlL2NvcmUvaGVscGVycy9GUE1IZWxwZXInfVwiXG5cdFx0XHR0ZXh0PXttZW51SXRlbUFjdGlvbj8udGV4dH1cblx0XHRcdGlkPXtpdGVtSWR9XG5cdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0anN4OmNvbW1hbmQ9e3ByZXNzQ29tbWFuZH1cblx0XHRcdHZpc2libGU9e21lbnVJdGVtQWN0aW9uLnZpc2libGV9XG5cdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdD5cblx0XHRcdHt7XG5cdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgaXRlbUlkKV1cblx0XHRcdH19XG5cdFx0PC9NZW51SXRlbT5cblx0KTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JBY3Rpb25CdXR0b24uXG4gKiBAcGFyYW0gZGF0YUZpZWxkIERhdGFGaWVsZCBmb3IgYWN0aW9uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBuYW1lIG9mIHRoZSBhY3Rpb25cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBmb3IgdGhlIERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b25Gb3JBY3Rpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVyc1xuKTogQnV0dG9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGRBY3Rpb25Db250ZXh0ID0gcGFyYW1ldGVycy5tZXRhTW9kZWwuY3JlYXRlQmluZGluZ0NvbnRleHQoYWN0aW9uLmFubm90YXRpb25QYXRoICsgXCIvQWN0aW9uXCIpITtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChkYXRhRmllbGRBY3Rpb25Db250ZXh0KTtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzPEFjdGlvbj4oYWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkNvbnRleHQpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGNvbnN0IGlzQm91bmQgPSBkYXRhRmllbGQuQWN0aW9uVGFyZ2V0Py5pc0JvdW5kO1xuXHRjb25zdCBjb21tYW5kID0gIWZvckNvbnRleHRNZW51ID8gYWN0aW9uLmNvbW1hbmQgOiBhY3Rpb24uY29tbWFuZCArIFwiOjpDb250ZXh0TWVudVwiO1xuXHRjb25zdCBwcmVzc0hhbmRsZXIgPSBhY3Rpb24uY29tbWFuZFxuXHRcdD8gdW5kZWZpbmVkXG5cdFx0OiBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpO1xuXHRjb25zdCBwcmVzc0NvbW1hbmQgPSBhY3Rpb24uY29tbWFuZCA/IGBjbWQ6JHtjb21tYW5kfXxwcmVzc2AgOiB1bmRlZmluZWQ7XG5cdGNvbnN0IGVuYWJsZWQgPVxuXHRcdGFjdGlvbi5lbmFibGVkICE9PSB1bmRlZmluZWRcblx0XHRcdD8gYWN0aW9uLmVuYWJsZWRcblx0XHRcdDogVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHRcdHRhYmxlLnRhYmxlRGVmaW5pdGlvbixcblx0XHRcdFx0XHRkYXRhRmllbGQuQWN0aW9uLFxuXHRcdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0XHRhY3Rpb25Db250ZXh0LmdldE9iamVjdCgpLFxuXHRcdFx0XHRcdGFjdGlvbi5lbmFibGVPblNlbGVjdCxcblx0XHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51XG5cdFx0XHQgICk7XG5cdGNvbnN0IGljb24gPSBhY3Rpb24uaXNBSU9wZXJhdGlvbiA9PT0gdHJ1ZSA/IGFpSWNvbiA6IHVuZGVmaW5lZDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0Y29uc3QgdG9vbGJhckFjdGlvbklkID0gZ2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxCdXR0b25cblx0XHRcdFx0aWQ9e3Rvb2xiYXJBY3Rpb25JZH1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRpY29uPXtpY29ufVxuXHRcdFx0XHRhcmlhSGFzUG9wdXA9e2lzQWN0aW9uV2l0aERpYWxvZyhkYXRhRmllbGQpfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRvb2xiYXJBY3Rpb25JZCldLFxuXHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0fX1cblx0XHRcdDwvQnV0dG9uPlxuXHRcdCk7XG5cdH0gZWxzZSB7XG5cdFx0Ly8gZm9yIGNvbnRleHQgbWVudVxuXHRcdGNvbnN0IHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCA9IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZCwgXCJDb250ZXh0TWVudVwiXSk7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17dGFibGVBY3Rpb25Db250ZXh0TWVudUlkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0aGUgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uIEJ1dHRvbi5cbiAqIEBwYXJhbSBkYXRhRmllbGQgRGF0YUZpZWxkIGZvciBJbnRlbnRCYXNlZE5hdmlnYXRpb25cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIGNvbnRyb2wgZm9yIHRoZSBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gYnV0dG9uL21lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b25Gb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24oXG5cdGRhdGFGaWVsZDogRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uLFxuXHRhY3Rpb246IEJhc2VBY3Rpb24gfCBBbm5vdGF0aW9uQWN0aW9uIHwgQ3VzdG9tQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0aGFuZGxlclByb3ZpZGVyOiBUYWJsZUV2ZW50SGFuZGxlclByb3ZpZGVyXG4pOiBCdXR0b24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IGNvbW1hbmQgPSAhZm9yQ29udGV4dE1lbnUgPyBhY3Rpb24uY29tbWFuZCA6IGFjdGlvbi5jb21tYW5kICsgXCI6OkNvbnRleHRNZW51XCI7XG5cdGNvbnN0IHByZXNzSGFuZGxlciA9IGFjdGlvbi5jb21tYW5kID8gdW5kZWZpbmVkIDogaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihhY3Rpb24sIGZvckNvbnRleHRNZW51KTtcblx0Y29uc3QgcHJlc3NDb21tYW5kID0gYWN0aW9uLmNvbW1hbmQgPyBgY21kOiR7Y29tbWFuZH18cHJlc3NgIDogdW5kZWZpbmVkO1xuXHRjb25zdCBlbmFibGVkID1cblx0XHRhY3Rpb24uZW5hYmxlZCAhPT0gdW5kZWZpbmVkXG5cdFx0XHQ/IGFjdGlvbi5lbmFibGVkXG5cdFx0XHQ6IFRhYmxlSGVscGVyLmlzRGF0YUZpZWxkRm9ySUJORW5hYmxlZChcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRjb2xsZWN0aW9uOiBjb2xsZWN0aW9uQ29udGV4dCxcblx0XHRcdFx0XHRcdHRhYmxlRGVmaW5pdGlvbjogdGFibGUudGFibGVEZWZpbml0aW9uXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0ZGF0YUZpZWxkLlJlcXVpcmVzQ29udGV4dCxcblx0XHRcdFx0XHRkYXRhRmllbGQuTmF2aWdhdGlvbkF2YWlsYWJsZSxcblx0XHRcdFx0XHRmb3JDb250ZXh0TWVudVxuXHRcdFx0ICApO1xuXHRjb25zdCBJQk5EYXRhID0gIWRhdGFGaWVsZC5SZXF1aXJlc0NvbnRleHQgPyB7IHNlbWFudGljT2JqZWN0OiBkYXRhRmllbGQuU2VtYW50aWNPYmplY3QsIGFjdGlvbjogZGF0YUZpZWxkLkFjdGlvbiB9IDogdW5kZWZpbmVkO1xuXHRpZiAoIWZvckNvbnRleHRNZW51KSB7XG5cdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRjb25zdCB0b29sYmFyQWN0aW9uSWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGRdKTtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRpZD17dG9vbGJhckFjdGlvbklkfVxuXHRcdFx0XHR0ZXh0PXtkYXRhRmllbGQuTGFiZWx9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdGVuYWJsZWQ9e2VuYWJsZWR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCBJQk5EYXRhKSwgY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRvb2xiYXJBY3Rpb25JZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L0J1dHRvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17ZGF0YUZpZWxkLkxhYmVsfVxuXHRcdFx0XHRwcmVzcz17cHJlc3NIYW5kbGVyfVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRlbmFibGVkPXtlbmFibGVkfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51fVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCBJQk5EYXRhKSwgY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIHRhYmxlQWN0aW9uQ29udGV4dE1lbnVJZCldXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVJdGVtPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIHRoZSBidXR0b24gYmFzZWQgb24gdGhlIHR5cGUgb2YgdGhlIGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIGZvciB0aGUgYnV0dG9uL21lbnUgaXRlbVxuICovXG5mdW5jdGlvbiBnZXREYXRhRmllbGRCdXR0b24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbiB8IEFubm90YXRpb25BY3Rpb24gfCBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEFic3RyYWN0VHlwZXMpXG5cdFx0OiB1bmRlZmluZWQ7XG5cdGxldCB0ZW1wbGF0ZTogTWVudUl0ZW0gfCBCdXR0b24gfCB1bmRlZmluZWQ7XG5cdGlmICghZGF0YUZpZWxkKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0aWYgKGlzRGF0YUZpZWxkRm9yQWN0aW9uKGRhdGFGaWVsZCkpIHtcblx0XHRcdFx0Y29uc3QgaXNCb3VuZCA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdFx0XHRcdGlmICghIWlzQm91bmQgJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRcdFx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRcdFx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb25zdCBpc09wZXJhdGlvbkF2YWlsYWJsZSA9IGRhdGFGaWVsZC5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGU/LnZhbHVlT2YoKSAhPT0gZmFsc2U7XG5cdFx0XHRcdC8vIHNob3cgb25seSBib3VuZCBhY3Rpb25zIGluIGNvbnRleHQgbWVudVxuXHRcdFx0XHRpZiAoIWZvckNvbnRleHRNZW51IHx8IFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KGFjdGlvbiwgdGFibGUuY29udGV4dE9iamVjdFBhdGgpKSB7XG5cdFx0XHRcdFx0aWYgKGlzQm91bmQgIT09IHRydWUgfHwgaXNPcGVyYXRpb25BdmFpbGFibGUpIHtcblx0XHRcdFx0XHRcdHRlbXBsYXRlID0gZ2V0RGF0YUZpZWxkQnV0dG9uRm9yQWN0aW9uKGRhdGFGaWVsZCwgYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJGb3JOYXZpZ2F0aW9uXCI6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdGlzRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uKGRhdGFGaWVsZCkgJiZcblx0XHRcdFx0KCFmb3JDb250ZXh0TWVudSB8fCBUYWJsZUhlbHBlci5pc0FjdGlvblNob3duSW5Db250ZXh0TWVudShhY3Rpb24sIHRhYmxlLmNvbnRleHRPYmplY3RQYXRoKSlcblx0XHRcdCkge1xuXHRcdFx0XHR0ZW1wbGF0ZSA9IGdldERhdGFGaWVsZEJ1dHRvbkZvckludGVudEJhc2VkTmF2aWdhdGlvbihcblx0XHRcdFx0XHRkYXRhRmllbGQsXG5cdFx0XHRcdFx0YWN0aW9uLFxuXHRcdFx0XHRcdHRhYmxlLFxuXHRcdFx0XHRcdGZvckNvbnRleHRNZW51LFxuXHRcdFx0XHRcdGNvbGxlY3Rpb25Db250ZXh0LFxuXHRcdFx0XHRcdHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRicmVhaztcblx0XHRkZWZhdWx0OlxuXHR9XG5cblx0aWYgKHRlbXBsYXRlID09PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIGRhdGFGaWVsZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT17YWN0aW9uLnZpc2libGUgPT09IFwidHJ1ZVwiIHx8IGFjdGlvbi52aXNpYmxlID09PSBcImZhbHNlXCIgPyB1bmRlZmluZWQgOiBcIm5vdC1hZGFwdGFibGUtdmlzaWJpbGl0eVwifVxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogdGVtcGxhdGVcblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gdGVtcGxhdGUgYXMgTWVudUl0ZW07XG5cdH1cbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBkZWZhdWx0IGFjdGlvbiBoYW5kbGVyIHRoYXQgaXMgaW52b2tlZCB3aGVuIGFkZGluZyB0aGUgbWVudSBidXR0b24uXG4gKiBAcGFyYW0gZGVmYXVsdEFjdGlvbiBUaGUgZGVmYXVsdCBhY3Rpb24gb2YgdGhlIG1lbnVcbiAqIEBwYXJhbSBkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uIFRoZSBkYXRhRmllbGQgZm9yIHRoZSBkZWZhdWx0IGFjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBjb3JyZXNwb25kaW5nIGV2ZW50IGhhbmRsZXIgb3IgY29tbWFuZFxuICovXG5mdW5jdGlvbiBnZXREZWZhdWx0TWVudUJ1dHRvbkFjdGlvbihcblx0ZGVmYXVsdEFjdGlvbjogQ3VzdG9tQWN0aW9uIHwgdW5kZWZpbmVkLFxuXHRkYXRhRmllbGRGb3JEZWZhdWx0QWN0aW9uOiBEYXRhRmllbGRGb3JJbnRlbnRCYXNlZE5hdmlnYXRpb24gfCBEYXRhRmllbGRGb3JBY3Rpb24gfCB1bmRlZmluZWQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IHsgaGFuZGxlcj86IChlOiBVSTVFdmVudCkgPT4gdm9pZDsgY29tbWFuZD86IHN0cmluZyB9IHtcblx0aWYgKCFkZWZhdWx0QWN0aW9uKSB7XG5cdFx0cmV0dXJuIHt9O1xuXHR9XG5cblx0dHJ5IHtcblx0XHRzd2l0Y2ggKGRlZmF1bHRBY3Rpb24udHlwZSkge1xuXHRcdFx0Y2FzZSBcIkZvckFjdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGhhbmRsZXI6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvckFjdGlvbkJ1dHRvblByZXNzSGFuZGxlcihcblx0XHRcdFx0XHRcdGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24gYXMgRGF0YUZpZWxkRm9yQWN0aW9uLFxuXHRcdFx0XHRcdFx0ZGVmYXVsdEFjdGlvbixcblx0XHRcdFx0XHRcdHVuZGVmaW5lZCxcblx0XHRcdFx0XHRcdGZhbHNlXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9O1xuXG5cdFx0XHRjYXNlIFwiRm9yTmF2aWdhdGlvblwiOlxuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdGhhbmRsZXI6IHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmdldERhdGFGaWVsZEZvcklCTlByZXNzSGFuZGxlcihkZWZhdWx0QWN0aW9uLCBmYWxzZSlcblx0XHRcdFx0fTtcblxuXHRcdFx0ZGVmYXVsdDoge1xuXHRcdFx0XHRpZiAoZGVmYXVsdEFjdGlvbi5jb21tYW5kKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdGNvbW1hbmQ6IGBjbWQ6JHtkZWZhdWx0QWN0aW9uLmNvbW1hbmR9fGRlZmF1bHRBY3Rpb25gXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0aGFuZGxlcjogcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoZGVmYXVsdEFjdGlvbiwgZmFsc2UpXG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSBjYXRjaCAoZSkge1xuXHRcdHJldHVybiB7fTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgdGhlIE1lbnVCdXR0b24gY29udHJvbCB3aGljaCBlbmFibGVzIHRoZSB1c2VyIHRvIHNob3cgYSBoaWVyYXJjaGljYWwgbWVudS5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIG5hbWUgb2YgdGhlIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudSBJbmRpY2F0ZXMgaWYgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIGZhbHNlLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXJcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEByZXR1cm5zIFRoZSBNZW51QnV0dG9uIGNvbnRyb2xcbiAqL1xuZnVuY3Rpb24gZ2V0TWVudUJ1dHRvbihcblx0YWN0aW9uOiBCYXNlQWN0aW9uIHwgQW5ub3RhdGlvbkFjdGlvbiB8IEN1c3RvbUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdGlmICgoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikucmVxdWlyZXNTZWxlY3Rpb24gJiYgdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuYW5hbHl0aWNhbENvbmZpZ3VyYXRpb24/LmFnZ3JlZ2F0aW9uT25MZWFmTGV2ZWwpIHtcblx0XHRhY3Rpb24gPSBkZWVwQ2xvbmUoYWN0aW9uKTtcblx0XHRhY3Rpb24uZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhhY3Rpb24uZW5hYmxlZCA/PyBcIlwiKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXHRjb25zdCBpY29uID0gYWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWQ7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdGNvbnN0IGRlZmF1bHRBY3Rpb24gPSAoYWN0aW9uIGFzIEN1c3RvbUFjdGlvbikuZGVmYXVsdEFjdGlvbiBhcyBDdXN0b21BY3Rpb24gfCB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgZGF0YUZpZWxkRm9yRGVmYXVsdEFjdGlvbiA9IGRlZmF1bHRBY3Rpb24/LmFubm90YXRpb25QYXRoXG5cdFx0XHQ/IHBhcmFtZXRlcnMuY29udmVydGVkTWV0YWRhdGEucmVzb2x2ZVBhdGg8RGF0YUZpZWxkRm9yQWN0aW9uIHwgRGF0YUZpZWxkRm9ySW50ZW50QmFzZWROYXZpZ2F0aW9uPihkZWZhdWx0QWN0aW9uLmFubm90YXRpb25QYXRoKVxuXHRcdFx0XHRcdC50YXJnZXRcblx0XHRcdDogdW5kZWZpbmVkO1xuXHRcdGNvbnN0IGRlZmF1bHRBY3Rpb25IYW5kbGVycyA9IGdldERlZmF1bHRNZW51QnV0dG9uQWN0aW9uKGRlZmF1bHRBY3Rpb24sIGRhdGFGaWVsZEZvckRlZmF1bHRBY3Rpb24sIHBhcmFtZXRlcnMpO1xuXHRcdGNvbnN0IG1lbnVJdGVtcyA9IGFjdGlvbi5tZW51XG5cdFx0XHQ/LmZpbHRlcigobWVudUl0ZW1BY3Rpb24pID0+IHR5cGVvZiBtZW51SXRlbUFjdGlvbiAhPT0gXCJzdHJpbmdcIilcblx0XHRcdC5tYXAoKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRcdHJldHVybiBnZXRNZW51SXRlbShhY3Rpb24sIG1lbnVJdGVtQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdH0pXG5cdFx0XHQuZmlsdGVyKChpdGVtKSA9PiBpdGVtICE9PSB1bmRlZmluZWQpO1xuXG5cdFx0aWYgKG1lbnVJdGVtcz8ubGVuZ3RoKSB7XG5cdFx0XHRjb25zdCBtZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKTtcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX1cblx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8TWVudUJ1dHRvblxuXHRcdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0bWVudVBvc2l0aW9uPXtQb3B1cC5Eb2NrLkJlZ2luQm90dG9tfVxuXHRcdFx0XHRcdFx0aWQ9e21lbnVJZH1cblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlfVxuXHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0XHR1c2VEZWZhdWx0QWN0aW9uT25seT17ISEoYWN0aW9uIGFzIEN1c3RvbUFuZEFjdGlvbikuZGVmYXVsdEFjdGlvbn1cblx0XHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdFx0XHRidXR0b25Nb2RlPXsoYWN0aW9uIGFzIEN1c3RvbUFuZEFjdGlvbikuZGVmYXVsdEFjdGlvbiA/IE1lbnVCdXR0b25Nb2RlLlNwbGl0IDogTWVudUJ1dHRvbk1vZGUuUmVndWxhcn1cblx0XHRcdFx0XHRcdGRlZmF1bHRBY3Rpb249e2RlZmF1bHRBY3Rpb25IYW5kbGVycy5oYW5kbGVyfVxuXHRcdFx0XHRcdFx0anN4OmNvbW1hbmQ9e2RlZmF1bHRBY3Rpb25IYW5kbGVycy5jb21tYW5kfVxuXHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtjcmVhdGVDdXN0b21EYXRhKFwiYWN0aW9uSWRcIiwgbWVudUlkKV0sXG5cdFx0XHRcdFx0XHRcdG1lbnU6IDxNZW51PnttZW51SXRlbXN9PC9NZW51Pixcblx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRjb25zdCBtZW51SXRlbXNGb3JDb250ZXh0TWVudTogQmFzZUFjdGlvbltdID0gW107XG5cdFx0YWN0aW9uLm1lbnU/LmZvckVhY2goKG1lbnVJdGVtQWN0aW9uKSA9PiB7XG5cdFx0XHRpZiAodHlwZW9mIG1lbnVJdGVtQWN0aW9uICE9PSBcInN0cmluZ1wiICYmIFRhYmxlSGVscGVyLmlzQWN0aW9uU2hvd25JbkNvbnRleHRNZW51KG1lbnVJdGVtQWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRcdFx0bWVudUl0ZW1zRm9yQ29udGV4dE1lbnU/LnB1c2gobWVudUl0ZW1BY3Rpb24pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Y29uc3QgbWVudUl0ZW1zID0gbWVudUl0ZW1zRm9yQ29udGV4dE1lbnVcblx0XHRcdC5maWx0ZXIoKG1lbnVJdGVtQWN0aW9uKSA9PiB0eXBlb2YgbWVudUl0ZW1BY3Rpb24gIT09IFwic3RyaW5nXCIpXG5cdFx0XHQubWFwKChtZW51SXRlbUFjdGlvbikgPT4ge1xuXHRcdFx0XHRyZXR1cm4gZ2V0TWVudUl0ZW0oYWN0aW9uLCBtZW51SXRlbUFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9KVxuXHRcdFx0LmZpbHRlcigoaXRlbSkgPT4gaXRlbSAhPT0gdW5kZWZpbmVkKTtcblxuXHRcdGlmIChtZW51SXRlbXM/Lmxlbmd0aCkge1xuXHRcdFx0cmV0dXJuIChcblx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5pZCwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudX1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51fVxuXHRcdFx0XHRcdGljb249e2ljb259XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0aXRlbXM6IG1lbnVJdGVtc1xuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlZmF1bHQgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgbmFtZSBvZiB0aGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWZhdWx0IGJ1dHRvbi5cbiAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEJ1dHRvbihcblx0YWN0aW9uOiBDdXN0b21BY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgdW5kZWZpbmVkIHtcblx0Y29uc3QgY29tbWFuZCA9ICFmb3JDb250ZXh0TWVudSA/IGFjdGlvbi5jb21tYW5kIDogYWN0aW9uLmNvbW1hbmQgKyBcIjo6Q29udGV4dE1lbnVcIjtcblx0Y29uc3QgcHJlc3NIYW5kbGVyID0gYWN0aW9uLmNvbW1hbmQgPyB1bmRlZmluZWQgOiBoYW5kbGVyUHJvdmlkZXIuZ2V0TWFuaWZlc3RBY3Rpb25QcmVzc0hhbmRsZXIoYWN0aW9uLCBmb3JDb250ZXh0TWVudSk7XG5cdGNvbnN0IHByZXNzQ29tbWFuZCA9IGFjdGlvbi5jb21tYW5kID8gYGNtZDoke2NvbW1hbmR9fHByZXNzYCA6IHVuZGVmaW5lZDtcblxuXHRpZiAoYWN0aW9uLnJlcXVpcmVzU2VsZWN0aW9uICYmIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9e2FjdGlvbi52aXNpYmxlID09PSBcInRydWVcIiB8fCBhY3Rpb24udmlzaWJsZSA9PT0gXCJmYWxzZVwiID8gdW5kZWZpbmVkIDogXCJub3QtYWRhcHRhYmxlLXZpc2liaWxpdHlcIn1cblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmlkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdFx0XHRqc3g6Y29tbWFuZD17cHJlc3NDb21tYW5kfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWR9XG5cdFx0XHRcdFx0aWNvbj17YWN0aW9uLmlzQUlPcGVyYXRpb24gPT09IHRydWUgPyBhaUljb24gOiB1bmRlZmluZWR9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWRdKSldLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogPE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH0gZWxzZSBpZiAoVGFibGVIZWxwZXIuaXNBY3Rpb25TaG93bkluQ29udGV4dE1lbnUoYWN0aW9uLCB0YWJsZS5jb250ZXh0T2JqZWN0UGF0aCkpIHtcblx0XHRjb25zdCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQgPSBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24uaWQsIFwiQ29udGV4dE1lbnVcIl0pO1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGNvcmU6cmVxdWlyZT1cIntGUE06ICdzYXAvZmUvY29yZS9oZWxwZXJzL0ZQTUhlbHBlcid9XCJcblx0XHRcdFx0aWQ9e3RhYmxlQWN0aW9uQ29udGV4dE1lbnVJZH1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc0hhbmRsZXJ9XG5cdFx0XHRcdGpzeDpjb21tYW5kPXtwcmVzc0NvbW1hbmR9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlRm9yQ29udGV4dE1lbnV9XG5cdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnV9XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCB0YWJsZUFjdGlvbkNvbnRleHRNZW51SWQpXVxuXHRcdFx0XHR9fVxuXHRcdFx0PC9NZW51SXRlbT5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIGNvbnRyb2wgZm9yIGFuIGFjdGlvbiBidXR0b24vbWVudSBpdGVtIGJhc2VkIG9uIHRoZSB0eXBlIG9mIHRoZSBhY3Rpb24uXG4gKiBAcGFyYW0gYWN0aW9uIFRoZSBhY3Rpb24gdG8gZ2V0XG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGNvbnRyb2wgb2YgdGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRBY3Rpb24oXG5cdGFjdGlvbjogQmFzZUFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudTogYm9vbGVhbixcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdHBhcmFtZXRlcnM6IFRhYmxlVGVtcGxhdGluZ1BhcmFtZXRlcnNcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB8IHVuZGVmaW5lZCB7XG5cdHN3aXRjaCAoYWN0aW9uLnR5cGUpIHtcblx0XHRjYXNlIFwiRGVmYXVsdFwiOlxuXHRcdFx0aWYgKFwibm9XcmFwXCIgaW4gYWN0aW9uKSB7XG5cdFx0XHRcdHJldHVybiBnZXREZWZhdWx0QnV0dG9uKGFjdGlvbiBhcyBDdXN0b21BY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIpO1xuXHRcdFx0fVxuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIk1lbnVcIjpcblx0XHRcdHJldHVybiBnZXRNZW51QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0ZGVmYXVsdDpcblx0fVxuXHRyZXR1cm4gZ2V0RGF0YUZpZWxkQnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb3B5IGFjdGlvbi5cbiAqIEBwYXJhbSBhY3Rpb24gVGhlIGNvcHkgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiBhY3Rpb24gaXMgZm9yIEFjdGlvbiBUb29sYmFyIG9mIENvbnRleHQgTWVudVxuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHJldHVybnMgVGhlIGFjdGlvblxuICovXG5mdW5jdGlvbiBnZXRDb3B5QWN0aW9uKFxuXHRhY3Rpb246IEJhc2VBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGNvbGxlY3Rpb25Db250ZXh0OiBDb250ZXh0LFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0ge1xuXHRjb25zdCBkYXRhRmllbGQgPSBhY3Rpb24uYW5ub3RhdGlvblBhdGhcblx0XHQ/IChwYXJhbWV0ZXJzLmNvbnZlcnRlZE1ldGFkYXRhLnJlc29sdmVQYXRoKGFjdGlvbi5hbm5vdGF0aW9uUGF0aCkudGFyZ2V0IGFzIERhdGFGaWVsZEZvckFjdGlvbilcblx0XHQ6IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dFBhdGggPSBDb21tb25IZWxwZXIuZ2V0QWN0aW9uQ29udGV4dChwYXJhbWV0ZXJzLm1ldGFNb2RlbC5jcmVhdGVCaW5kaW5nQ29udGV4dChhY3Rpb24uYW5ub3RhdGlvblBhdGggKyBcIi9BY3Rpb25cIikhKTtcblx0Y29uc3Qgb3BlcmF0aW9uQXZhaWxhYmxlID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmFubm90YXRpb25zPy5Db3JlPy5PcGVyYXRpb25BdmFpbGFibGUgIT09IHVuZGVmaW5lZDtcblx0Y29uc3QgYWN0aW9uQ29udGV4dCA9IHBhcmFtZXRlcnMubWV0YU1vZGVsLmNyZWF0ZUJpbmRpbmdDb250ZXh0KGFjdGlvbkNvbnRleHRQYXRoKSE7XG5cdGNvbnN0IGRhdGFGaWVsZERhdGFNb2RlbE9iamVjdFBhdGggPSBhY3Rpb25Db250ZXh0XG5cdFx0PyBNZXRhTW9kZWxDb252ZXJ0ZXIuZ2V0SW52b2x2ZWREYXRhTW9kZWxPYmplY3RzKGFjdGlvbkNvbnRleHQsIGNvbGxlY3Rpb25Db250ZXh0KVxuXHRcdDogdW5kZWZpbmVkO1xuXHRjb25zdCBpc0JvdW5kID0gZGF0YUZpZWxkPy5BY3Rpb25UYXJnZXQ/LmlzQm91bmQ7XG5cdGNvbnN0IHByZXNzID0gZGF0YUZpZWxkXG5cdFx0PyBwYXJhbWV0ZXJzLmhhbmRsZXJQcm92aWRlci5nZXREYXRhRmllbGRGb3JBY3Rpb25CdXR0b25QcmVzc0hhbmRsZXIoZGF0YUZpZWxkLCBhY3Rpb24sIHVuZGVmaW5lZCwgZm9yQ29udGV4dE1lbnUpXG5cdFx0OiB1bmRlZmluZWQ7XG5cblx0bGV0IGVuYWJsZWQ6IHN0cmluZyB8IGJvb2xlYW4gfCBDb21waWxlZEJpbmRpbmdUb29sa2l0RXhwcmVzc2lvbiA9IG9wZXJhdGlvbkF2YWlsYWJsZVxuXHRcdD8gVGFibGVIZWxwZXIuaXNEYXRhRmllbGRGb3JBY3Rpb25FbmFibGVkKFxuXHRcdFx0XHR0YWJsZS50YWJsZURlZmluaXRpb24sXG5cdFx0XHRcdGRhdGFGaWVsZC5BY3Rpb24sXG5cdFx0XHRcdCEhaXNCb3VuZCxcblx0XHRcdFx0YWN0aW9uQ29udGV4dC5nZXRPYmplY3QoKSxcblx0XHRcdFx0YWN0aW9uLmVuYWJsZU9uU2VsZWN0LFxuXHRcdFx0XHRkYXRhRmllbGREYXRhTW9kZWxPYmplY3RQYXRoPy50YXJnZXRFbnRpdHlUeXBlLFxuXHRcdFx0XHRmb3JDb250ZXh0TWVudSxcblx0XHRcdFx0dHJ1ZVxuXHRcdCAgKVxuXHRcdDogYHs9ICR7QWN0aW9uSGVscGVyLmdldE51bWJlck9mQ29udGV4dHNFeHByZXNzaW9uKFwic2luZ2xlXCIsIGZvckNvbnRleHRNZW51KX19YDtcblx0aWYgKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmFuYWx5dGljYWxDb25maWd1cmF0aW9uPy5hZ2dyZWdhdGlvbk9uTGVhZkxldmVsKSB7XG5cdFx0ZW5hYmxlZCA9IGNvbXBpbGVFeHByZXNzaW9uKGFuZChyZXNvbHZlQmluZGluZ1N0cmluZyhlbmFibGVkKSwgVUkuaXNOb2RlTGV2ZWxOYXZpZ2FibGUpKTtcblx0fVxuXG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkXSl9XG5cdFx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdFx0cHJlc3M9e3ByZXNzfVxuXHRcdFx0XHRcdHR5cGU9e0J1dHRvblR5cGUuVHJhbnNwYXJlbnR9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGV9XG5cdFx0XHRcdFx0ZW5hYmxlZD17ZW5hYmxlZH1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGRhdGFGaWVsZF0pKV0sXG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgZGF0YUZpZWxkLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YWN0aW9uLnRleHR9XG5cdFx0XHRcdHByZXNzPXtwcmVzc31cblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGVGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e2NvbXBpbGVFeHByZXNzaW9uKGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpKSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQ+XG5cdFx0XHRcdHt7XG5cdFx0XHRcdFx0Y3VzdG9tRGF0YTogW2NyZWF0ZUN1c3RvbURhdGEoXCJhY3Rpb25JZFwiLCBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBkYXRhRmllbGQsIFwiQ29udGV4dE1lbnVcIl0pKV1cblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGNyZWF0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIHdoZXRoZXIgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSBjb250ZXh0IG1lbnUuIElmIHNldCB0byBgZmFsc2VgLCB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIHRhYmxlIHRvb2xiYXIuXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBjcmVhdGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldENyZWF0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvbnNQbGFjZWhvbGRlciB8IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9DUkVBVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGNvbnN0IGNyZWF0ZU91dGJvdW5kRGV0YWlsID0gKHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLmNyZWF0ZSBhcyBDcmVhdGVCZWhhdmlvckV4dGVybmFsKS5vdXRib3VuZERldGFpbDtcblx0Y29uc3QgY3VzdG9tRGF0YSA9IGNyZWF0ZU91dGJvdW5kRGV0YWlsXG5cdFx0PyBjcmVhdGVDdXN0b21EYXRhKFwiSUJORGF0YVwiLCB7IHNlbWFudGljT2JqZWN0OiBjcmVhdGVPdXRib3VuZERldGFpbC5zZW1hbnRpY09iamVjdCwgYWN0aW9uOiBjcmVhdGVPdXRib3VuZERldGFpbC5hY3Rpb24gfSlcblx0XHQ6IHVuZGVmaW5lZDtcblxuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wuZW5hYmxlVXBsb2FkUGx1Z2luKSB7XG5cdFx0cmV0dXJuIDxBY3Rpb25zUGxhY2Vob2xkZXIgaWQ9e2Ake3RhYmxlLmNvbnRlbnRJZH0tdXBsb2FkQnV0dG9uYH0gcGxhY2Vob2xkZXJGb3I9XCJVcGxvYWRCdXR0b25QbGFjZWhvbGRlclwiIC8+O1xuXHR9IGVsc2UgaWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkNyZWF0ZXxwcmVzc1wiXG5cdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjdXN0b21EYXRhLFxuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDcmVhdGU6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0Q3JlYXRlTWVudShcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eSxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlclxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3Qgc3VmZml4UmVzb3VyY2VLZXkgPSBjb2xsZWN0aW9uRW50aXR5Lm5hbWU7XG5cdGNvbnN0IGJ1dHRvblRleHQgPSB0YWJsZS5nZXRUcmFuc2xhdGVkVGV4dChcIk1fQ09NTU9OX1RBQkxFX0NSRUFURVwiLCB1bmRlZmluZWQsIHN1ZmZpeFJlc291cmNlS2V5KTtcblx0Y29uc3QgdmFsdWVzID0gdGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wubm9kZVR5cGUhLnZhbHVlcztcblx0Y29uc3QgaGFzQ3VzdG9tQ3JlYXRlRW5hYmxlbWVudCA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5jb250cm9sLmNyZWF0ZUVuYWJsZW1lbnQgIT09IHVuZGVmaW5lZDtcblxuXHRjb25zdCBtZW51SXRlbXMgPSB2YWx1ZXMubWFwKChhbGxvd2VkVmFsdWUsIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgbW9kZWxOYW1lID0gIWZvckNvbnRleHRNZW51ID8gXCJcIiA6IFwiY29udGV4dG1lbnUvXCI7XG5cblx0XHRjb25zdCBpc0VuYWJsZWQgPSBoYXNDdXN0b21DcmVhdGVFbmFibGVtZW50XG5cdFx0XHQ/IG5vdEVxdWFsKHBhdGhJbk1vZGVsKGAke21vZGVsTmFtZX1jcmVhdGVFbmFibGVtZW50L0NyZWF0ZV8ke2luZGV4fWAsIFwiaW50ZXJuYWxcIiksIGZhbHNlKVxuXHRcdFx0OiB1bmRlZmluZWQ7XG5cdFx0Y29uc3QgaWQgPSBmb3JDb250ZXh0TWVudVxuXHRcdFx0PyBnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhbGxvd2VkVmFsdWUudmFsdWUsIFwiQ29udGV4dE1lbnVcIl0pXG5cdFx0XHQ6IGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFsbG93ZWRWYWx1ZS52YWx1ZV0pO1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0aWQ9e2lkfVxuXHRcdFx0XHR0ZXh0PXthbGxvd2VkVmFsdWUudGV4dH1cblx0XHRcdFx0ZW5hYmxlZD17aXNFbmFibGVkID8gY29tcGlsZUV4cHJlc3Npb24oaXNFbmFibGVkKSA6IHVuZGVmaW5lZH1cblx0XHRcdFx0cHJlc3M9e2hhbmRsZXJQcm92aWRlci5nZXRDcmVhdGVNZW51SXRlbVByZXNzSGFuZGxlcihpbmRleCwgZm9yQ29udGV4dE1lbnUpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHR9KTtcblxuXHRpZiAoZm9yQ29udGV4dE1lbnUpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXksIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHR2aXNpYmxlPXtzdGFuZGFyZEFjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17c3RhbmRhcmRBY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRpdGVtczogbWVudUl0ZW1zICE9PSB1bmRlZmluZWQgJiYgbWVudUl0ZW1zLmxlbmd0aCA+IDAgPyBtZW51SXRlbXMgOiB1bmRlZmluZWRcblx0XHRcdFx0fX1cblx0XHRcdDwvTWVudUl0ZW0+XG5cdFx0KTtcblx0fVxuXG5cdHJldHVybiAoXG5cdFx0PEFjdGlvblRvb2xiYXJBY3Rpb24gaWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleSwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0PE1lbnVCdXR0b25cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0bWVudVBvc2l0aW9uPVwiQmVnaW5Cb3R0b21cIlxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5XSl9XG5cdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXtzdGFuZGFyZEFjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRjdXN0b21EYXRhOiBbY3JlYXRlQ3VzdG9tRGF0YShcImFjdGlvbklkXCIsIGdlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIHN0YW5kYXJkQWN0aW9uLmtleV0pKV0sXG5cdFx0XHRcdFx0bWVudTogPE1lbnU+e21lbnVJdGVtc308L01lbnU+LFxuXHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhXG5cdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0Z3JvdXA9e3N0YW5kYXJkQWN0aW9uLmdyb3VwfVxuXHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHQpXG5cdFx0XHRcdH19XG5cdFx0XHQ8L01lbnVCdXR0b24+XG5cdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHQpO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3IgdGhlIGRlbGV0ZSBidXR0b24uXG4gKiBAcGFyYW0gc3RhbmRhcmRBY3Rpb24gU3RhbmRhcmQgYWN0aW9ucyB0byBiZSBldmFsdWF0ZWRcbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnUgSW5kaWNhdGVzIGlmIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgY29udGV4dCBtZW51LiBJZiBmYWxzZSwgdGhlIGFjdGlvbiBhcHBlYXJzIGluIHRoZSB0YWJsZSB0b29sYmFyXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgZm9yIHRoZSBkZWxldGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldERlbGV0ZUJ1dHRvbihcblx0c3RhbmRhcmRBY3Rpb246IFN0YW5kYXJkQWN0aW9uLFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRjb2xsZWN0aW9uRW50aXR5OiBFbnRpdHlTZXQgfCBOYXZpZ2F0aW9uUHJvcGVydHlcbik6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGNvbnN0IHN1ZmZpeFJlc291cmNlS2V5ID0gY29sbGVjdGlvbkVudGl0eS5uYW1lO1xuXHRjb25zdCBidXR0b25UZXh0ID0gdGFibGUuZ2V0VHJhbnNsYXRlZFRleHQoXCJNX0NPTU1PTl9UQUJMRV9ERUxFVEVcIiwgdW5kZWZpbmVkLCBzdWZmaXhSZXNvdXJjZUtleSk7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBzdGFuZGFyZEFjdGlvbi5rZXldKX1cblx0XHRcdFx0XHR0ZXh0PXtidXR0b25UZXh0fVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOkRlbGV0ZUVudHJ5fHByZXNzXCJcblx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdHZpc2libGU9e3N0YW5kYXJkQWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGFyaWFIYXNQb3B1cD1cIkRpYWxvZ1wiXG5cdFx0XHRcdD5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXtzdGFuZGFyZEFjdGlvbi5wcmlvcml0eX1cblx0XHRcdFx0XHRcdFx0XHRncm91cD17c3RhbmRhcmRBY3Rpb24uZ3JvdXB9XG5cdFx0XHRcdFx0XHRcdD48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgc3RhbmRhcmRBY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD17YnV0dG9uVGV4dH1cblx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6RGVsZXRlRW50cnk6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17c3RhbmRhcmRBY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdGVuYWJsZWQ9e3N0YW5kYXJkQWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIHhtbCBzdHJpbmcgZm9yIHN0YW5kYXJkIGFjdGlvbnMgYmFzZWQgb24gdGhlIGtleSBvZiB0aGUgc3RhbmRhcmQgYWN0aW9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgYWN0aW9uIHRvIHRlbXBsYXRlXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIGhhbmRsZXJQcm92aWRlclxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzdGFuZGFyZCBhY3Rpb25cbiAqL1xuZnVuY3Rpb24gZ2V0U3RhbmRhcmRBY3Rpb24oXG5cdGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0Zm9yQ29udGV4dE1lbnU6IGJvb2xlYW4sXG5cdGhhbmRsZXJQcm92aWRlcjogVGFibGVFdmVudEhhbmRsZXJQcm92aWRlcixcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCBBY3Rpb25zUGxhY2Vob2xkZXIgfCB1bmRlZmluZWQge1xuXHRpZiAoYWN0aW9uLmlzVGVtcGxhdGVkID09PSBcImZhbHNlXCIpIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5hbmFseXRpY2FsQ29uZmlndXJhdGlvbj8uYWdncmVnYXRpb25PbkxlYWZMZXZlbCAmJiBhY3Rpb24ua2V5ICE9PSBTdGFuZGFyZEFjdGlvbktleXMuQ3JlYXRlKSB7XG5cdFx0YWN0aW9uID0gZGVlcENsb25lKGFjdGlvbik7XG5cdFx0YWN0aW9uLmVuYWJsZWQgPSBjb21waWxlRXhwcmVzc2lvbihhbmQocmVzb2x2ZUJpbmRpbmdTdHJpbmcoYWN0aW9uLmVuYWJsZWQgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKSk7XG5cdFx0YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSA9IGNvbXBpbGVFeHByZXNzaW9uKFxuXHRcdFx0YW5kKHJlc29sdmVCaW5kaW5nU3RyaW5nKGFjdGlvbi5lbmFibGVkRm9yQ29udGV4dE1lbnUgPz8gXCJcIiksIFVJLmlzTm9kZUxldmVsTmF2aWdhYmxlKVxuXHRcdCk7XG5cdH1cblxuXHRzd2l0Y2ggKGFjdGlvbi5rZXkpIHtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5DcmVhdGU6XG5cdFx0XHRpZiAoXG5cdFx0XHRcdCF0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQgfHxcblx0XHRcdFx0Ly8gV2Ugb25seSBoYXZlIENyZWF0ZSBvbiB0aGUgQ29udGV4dE1lbnUgb24gdGhlIFRyZWVUYWJsZVxuXHRcdFx0XHQodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSAhPT0gXCJUcmVlVGFibGVcIiAmJiBmb3JDb250ZXh0TWVudSlcblx0XHRcdCkge1xuXHRcdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdFx0fSBlbHNlIGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5ub2RlVHlwZSkge1xuXHRcdFx0XHRyZXR1cm4gZ2V0Q3JlYXRlTWVudShhY3Rpb24sIHRhYmxlLCBjb2xsZWN0aW9uRW50aXR5LCBmb3JDb250ZXh0TWVudSwgaGFuZGxlclByb3ZpZGVyKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBnZXRDcmVhdGVCdXR0b24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRcdFx0fVxuXG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuRGVsZXRlOlxuXHRcdFx0cmV0dXJuIGdldERlbGV0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSwgY29sbGVjdGlvbkVudGl0eSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ3V0OlxuXHRcdFx0cmV0dXJuIGdldEN1dEJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuQ29weTpcblx0XHRcdHJldHVybiBnZXRDb3B5QnV0dG9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51KTtcblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5QYXN0ZTpcblx0XHRcdHJldHVybiBnZXRQYXN0ZUJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5NYXNzRWRpdDpcblx0XHRcdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uYW5ub3RhdGlvbi5pc0luc2VydFVwZGF0ZUFjdGlvbnNUZW1wbGF0ZWQpIHtcblx0XHRcdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0XHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9NQVNTRURJVH1cIlxuXHRcdFx0XHRcdFx0XHRcdHByZXNzPXtoYW5kbGVyUHJvdmlkZXIuZ2V0TWFzc0VkaXRCdXR0b25QcmVzc0hhbmRsZXIoZmFsc2UpfVxuXHRcdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZCBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0bGF5b3V0RGF0YTogKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Z3JvdXA9e2FjdGlvbi5ncm91cH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX0NPTU1PTl9UQUJMRV9NQVNTRURJVH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmdldE1hc3NFZGl0QnV0dG9uUHJlc3NIYW5kbGVyKHRydWUpfVxuXHRcdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZUZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5JbnNpZ2h0czpcblx0XHRcdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdFx0cmV0dXJuIChcblx0XHRcdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGFjdGlvbi5rZXksIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9XG5cdFx0XHRcdFx0XHRkdDpkZXNpZ250aW1lPXthY3Rpb24udmlzaWJsZSA9PT0gXCJ0cnVlXCIgfHwgYWN0aW9uLnZpc2libGUgPT09IFwiZmFsc2VcIiA/IHVuZGVmaW5lZCA6IFwibm90LWFkYXB0YWJsZS12aXNpYmlsaXR5XCJ9XG5cdFx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5XSl9XG5cdFx0XHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9DT01NT05fSU5TSUdIVFNfQ0FSRH1cIlxuXHRcdFx0XHRcdFx0XHRwcmVzcz17aGFuZGxlclByb3ZpZGVyLmFkZENhcmRUb0luc2lnaHRzUHJlc3N9XG5cdFx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdFx0PlxuXHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdGxheW91dERhdGE6IChcblx0XHRcdFx0XHRcdFx0XHRcdDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHkgPz8gXCJBbHdheXNPdmVyZmxvd1wifSBncm91cD17YWN0aW9uLmdyb3VwfSAvPlxuXHRcdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjYXNlIFN0YW5kYXJkQWN0aW9uS2V5cy5Nb3ZlVXA6XG5cdFx0Y2FzZSBTdGFuZGFyZEFjdGlvbktleXMuTW92ZURvd246XG5cdFx0XHRyZXR1cm4gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb24sIHRhYmxlLCBmb3JDb250ZXh0TWVudSk7XG5cblx0XHRkZWZhdWx0OlxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgeG1sIHN0cmluZyBmb3Igc3RhbmRhcmQsIGFubm90YXRpb24sIGFuZCBjdXN0b20gYWN0aW9ucyBvZiB0aGUgdGFibGUuXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHBhcmFtIHBhcmFtZXRlcnNcbiAqIEBwYXJhbSBjb2xsZWN0aW9uQ29udGV4dCBUaGUgY29udGV4dCBvZiB0aGUgY29sbGVjdGlvblxuICogQHBhcmFtIGNvbGxlY3Rpb25FbnRpdHkgVGhlIGVudGl0eSBzZXQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEByZXR1cm5zIFRoZSB4bWwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBhY3Rpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3Rpb25zKFxuXHR0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsXG5cdGZvckNvbnRleHRNZW51OiBib29sZWFuLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdIHtcblx0cmV0dXJuIHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hY3Rpb25zXG5cdFx0Lm1hcCgoYWN0aW9uKSA9PiB7XG5cdFx0XHRzd2l0Y2ggKGFjdGlvbi50eXBlKSB7XG5cdFx0XHRcdGNhc2UgQWN0aW9uVHlwZS5TdGFuZGFyZDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0U3RhbmRhcmRBY3Rpb24oYWN0aW9uIGFzIFN0YW5kYXJkQWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLCBjb2xsZWN0aW9uRW50aXR5KTtcblx0XHRcdFx0Y2FzZSBBY3Rpb25UeXBlLkNvcHk6XG5cdFx0XHRcdFx0cmV0dXJuIGdldENvcHlBY3Rpb24oYWN0aW9uLCB0YWJsZSwgZm9yQ29udGV4dE1lbnUsIGNvbGxlY3Rpb25Db250ZXh0LCBwYXJhbWV0ZXJzKTtcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRyZXR1cm4gZ2V0QWN0aW9uKGFjdGlvbiwgdGFibGUsIGZvckNvbnRleHRNZW51LCBjb2xsZWN0aW9uQ29udGV4dCwgcGFyYW1ldGVycyk7XG5cdFx0XHR9XG5cdFx0fSlcblx0XHQuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbiAhPT0gdW5kZWZpbmVkKSBhcyAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdO1xufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgY29udHJvbCBmb3IgQmFzaWNTZWFyY2guXG4gKiBAcGFyYW0gdXNlQmFzaWNTZWFyY2hcbiAqIEBwYXJhbSBmaWx0ZXJCYXJJZFxuICogQHBhcmFtIF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWRcbiAqIEBwYXJhbSBpc1NlYXJjaGFibGVcbiAqIEByZXR1cm5zIFRoZSBjb250cm9sIG9mIHRoZSBCYXNpY1NlYXJjaFxuICovXG5mdW5jdGlvbiBnZXRCYXNpY1NlYXJjaChcblx0dXNlQmFzaWNTZWFyY2g6IGJvb2xlYW4sXG5cdGZpbHRlckJhcklkOiBzdHJpbmcgfCB1bmRlZmluZWQsXG5cdF9jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWQ6IGJvb2xlYW4sXG5cdGlzU2VhcmNoYWJsZTogYm9vbGVhblxuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh1c2VCYXNpY1NlYXJjaCkge1xuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvblxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW2ZpbHRlckJhcklkLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0JBU0lDX1NFQVJDSH1cIlxuXHRcdFx0XHRkdDpkZXNpZ250aW1lPVwibm90LWFkYXB0YWJsZS10cmVlXCJcblx0XHRcdD5cblx0XHRcdFx0e3tcblx0XHRcdFx0XHRhY3Rpb246IDxCYXNpY1NlYXJjaE1hY3JvIGlkPXtmaWx0ZXJCYXJJZH0gdXNlRHJhZnRFZGl0U3RhdGU9e19jb2xsZWN0aW9uSXNEcmFmdEVuYWJsZWR9IHZpc2libGU9e2lzU2VhcmNoYWJsZX0gLz5cblx0XHRcdFx0fX1cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBjb250cm9sIGZvciB0YWJsZSBmdWxsc2NyZWVuIGJ1dHRvbi5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcmV0dXJucyBUaGUgY29udHJvbCBvZiB0aGUgYnV0dG9uXG4gKi9cbmZ1bmN0aW9uIGdldEZ1bGxTY3JlZW4odGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IHVuZGVmaW5lZCB7XG5cdGlmICh0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC5lbmFibGVGdWxsU2NyZWVuKSB7XG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlN0YW5kYXJkQWN0aW9uXCIsIFwiRnVsbFNjcmVlblwiLCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHRsYWJlbD1cIntzYXAuZmUuaTE4bj5NX0ZVTExfU0NSRUVOfVwiXG5cdFx0XHRcdGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIlxuXHRcdFx0PlxuXHRcdFx0XHR7e1xuXHRcdFx0XHRcdGFjdGlvbjogPFRhYmxlRnVsbFNjcmVlbkJ1dHRvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJTdGFuZGFyZEFjdGlvblwiLCBcIkZ1bGxTY3JlZW5cIl0pfSAvPlxuXHRcdFx0XHR9fVxuXHRcdFx0PC9BY3Rpb25Ub29sYmFyQWN0aW9uPlxuXHRcdCk7XG5cdH1cblx0cmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGhlIFhNTCBzdHJpbmcgZm9yIHRoZSBDdXQgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkIGFjdGlvblxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBmb3JDb250ZXh0TWVudVxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIEN1dCBCdXR0b25cbiAqL1xuZnVuY3Rpb24gZ2V0Q3V0QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDdXRcIiwgXCJBY3Rpb25Ub29sYmFyQWN0aW9uXCJdKX0gZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiPlxuXHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIFwiQ3V0XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ1VUfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q3V0fHByZXNzXCJcblx0XHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWQgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGxheW91dERhdGE6IDxPdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhIHByaW9yaXR5PXthY3Rpb24ucHJpb3JpdHl9IGdyb3VwPXthY3Rpb24uZ3JvdXB9PjwvT3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YT5cblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L0J1dHRvbj5cblx0XHRcdDwvQWN0aW9uVG9vbGJhckFjdGlvbj5cblx0XHQpO1xuXHR9IGVsc2Uge1xuXHRcdC8vIGZvciBjb250ZXh0IG1lbnVcblx0XHRyZXR1cm4gKFxuXHRcdFx0PE1lbnVJdGVtXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkN1dFwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0dGV4dD1cIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NVVH1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDdXQ6OkNvbnRleHRNZW51fHByZXNzXCJcblx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdC8+XG5cdFx0KTtcblx0fVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyB0aGUgWE1MIHN0cmluZyBmb3IgdGhlIENvcHkgYnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgaW5zdGFuY2Ugb2YgdGhlIHN0YW5kYXJkQWN0aW9uLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgVGFibGUgYnVpbGRpbmcgYmxvY2suXG4gKiBAcGFyYW0gZm9yQ29udGV4dE1lbnVcbiAqIEByZXR1cm5zIFRoZSBYTUwgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBDdXQgYnV0dG9uLlxuICovXG5mdW5jdGlvbiBnZXRDb3B5QnV0dG9uKGFjdGlvbjogU3RhbmRhcmRBY3Rpb24sIHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcywgZm9yQ29udGV4dE1lbnUgPSBmYWxzZSk6IEFjdGlvblRvb2xiYXJBY3Rpb24gfCBNZW51SXRlbSB7XG5cdGlmICghZm9yQ29udGV4dE1lbnUpIHtcblx0XHQvLyBmb3IgdGFibGUgdG9vbGJhclxuXHRcdHJldHVybiAoXG5cdFx0XHQ8QWN0aW9uVG9vbGJhckFjdGlvbiBpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIkNvcHlcIl0pfVxuXHRcdFx0XHRcdHRleHQ9XCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT1BZfVwiXG5cdFx0XHRcdFx0anN4OmNvbW1hbmQ9XCJjbWQ6Q29weXxwcmVzc1wiXG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJDb3B5XCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fVEFCTEVfQ09QWX1cIlxuXHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpDb3B5OjpDb250ZXh0TWVudXxwcmVzc1wiXG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0TW92ZVVwRG93bkJ1dHRvbihhY3Rpb246IFN0YW5kYXJkQWN0aW9uLCB0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGZvckNvbnRleHRNZW51OiBib29sZWFuKTogQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHtcblx0Y29uc3QgZm9yTW92ZVVwID0gYWN0aW9uLmtleSA9PT0gU3RhbmRhcmRBY3Rpb25LZXlzLk1vdmVVcDtcblx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdC8vIGZvciB0YWJsZSB0b29sYmFyXG5cdFx0cmV0dXJuIChcblx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uXG5cdFx0XHRcdGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBhY3Rpb24ua2V5LCBcIkFjdGlvblRvb2xiYXJBY3Rpb25cIl0pfVxuXHRcdFx0XHR2aXNpYmxlPXthY3Rpb24udmlzaWJsZX1cblx0XHRcdFx0ZHQ6ZGVzaWdudGltZT1cIm5vdC1hZGFwdGFibGUtdHJlZVwiXG5cdFx0XHQ+XG5cdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleV0pfVxuXHRcdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRcdGpzeDpjb21tYW5kPXtmb3JNb3ZlVXAgPyBcImNtZDpUYWJsZU1vdmVFbGVtZW50VXB8cHJlc3NcIiA6IFwiY21kOlRhYmxlTW92ZUVsZW1lbnREb3dufHByZXNzXCJ9XG5cdFx0XHRcdFx0dmlzaWJsZT17YWN0aW9uLnZpc2libGUgYXMgdW5rbm93biBhcyBib29sZWFufVxuXHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRsYXlvdXREYXRhOiA8T3ZlcmZsb3dUb29sYmFyTGF5b3V0RGF0YSBwcmlvcml0eT17YWN0aW9uLnByaW9yaXR5fSBncm91cD17YWN0aW9uLmdyb3VwfT48L092ZXJmbG93VG9vbGJhckxheW91dERhdGE+XG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9CdXR0b24+XG5cdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0KTtcblx0fSBlbHNlIHtcblx0XHQvLyBmb3IgY29udGV4dCBtZW51XG5cdFx0cmV0dXJuIChcblx0XHRcdDxNZW51SXRlbVxuXHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgYWN0aW9uLmtleSwgXCJDb250ZXh0TWVudVwiXSl9XG5cdFx0XHRcdHRleHQ9e2Zvck1vdmVVcCA/IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9VUH1cIiA6IFwie3NhcC5mZS5pMThuPk1fVEFCTEVfTU9WRV9ET1dOfVwifVxuXHRcdFx0XHRqc3g6Y29tbWFuZD17Zm9yTW92ZVVwID8gXCJjbWQ6VGFibGVNb3ZlRWxlbWVudFVwOjpDb250ZXh0TWVudXxwcmVzc1wiIDogXCJjbWQ6VGFibGVNb3ZlRWxlbWVudERvd246OkNvbnRleHRNZW51fHByZXNzXCJ9XG5cdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0ZW5hYmxlZD17YWN0aW9uLmVuYWJsZWRGb3JDb250ZXh0TWVudSBhcyB1bmtub3duIGFzIGJvb2xlYW59XG5cdFx0XHQvPlxuXHRcdCk7XG5cdH1cbn1cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciB0aGUgUGFzdGUgQnV0dG9uLlxuICogQHBhcmFtIGFjdGlvbiBUaGUgUGFzdGUgYWN0aW9uXG4gKiBAcGFyYW0gdGFibGUgVGhlIGluc3RhbmNlIG9mIHRoZSB0YWJsZSBidWlsZGluZyBibG9ja1xuICogQHBhcmFtIGZvckNvbnRleHRNZW51IEluZGljYXRlcyBpZiB0aGUgYWN0aW9uIGFwcGVhcnMgaW4gdGhlIGNvbnRleHQgbWVudS4gSWYgZmFsc2UsIHRoZSBhY3Rpb24gYXBwZWFycyBpbiB0aGUgdGFibGUgdG9vbGJhclxuICogQHJldHVybnMgVGhlIFhNTCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIFBhc3RlIEJ1dHRvblxuICovXG5mdW5jdGlvbiBnZXRQYXN0ZUJ1dHRvbihcblx0YWN0aW9uOiBTdGFuZGFyZEFjdGlvbixcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRmb3JDb250ZXh0TWVudSA9IGZhbHNlXG4pOiBBY3Rpb25Ub29sYmFyQWN0aW9uIHwgTWVudUl0ZW0gfCB1bmRlZmluZWQge1xuXHRjb25zdCB0YWJsZVR5cGUgPSB0YWJsZS50YWJsZURlZmluaXRpb24uY29udHJvbC50eXBlO1xuXHRpZiAodGFibGVUeXBlID09PSBcIlRyZWVUYWJsZVwiKSB7XG5cdFx0aWYgKCFmb3JDb250ZXh0TWVudSkge1xuXHRcdFx0Ly8gZm9yIHRhYmxlIHRvb2xiYXJcblx0XHRcdHJldHVybiAoXG5cdFx0XHRcdDxBY3Rpb25Ub29sYmFyQWN0aW9uIGlkPXtnZW5lcmF0ZShbdGFibGUuY29udGVudElkLCBcIlBhc3RlXCIsIFwiQWN0aW9uVG9vbGJhckFjdGlvblwiXSl9IGR0OmRlc2lnbnRpbWU9XCJub3QtYWRhcHRhYmxlLXRyZWVcIj5cblx0XHRcdFx0XHQ8QnV0dG9uXG5cdFx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiXSl9XG5cdFx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRcdGpzeDpjb21tYW5kPVwiY21kOlBhc3RlfHByZXNzXCJcblx0XHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRcdGVuYWJsZWQ9e2FjdGlvbi5lbmFibGVkIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRsYXlvdXREYXRhOiAoXG5cdFx0XHRcdFx0XHRcdFx0PE92ZXJmbG93VG9vbGJhckxheW91dERhdGEgcHJpb3JpdHk9e2FjdGlvbi5wcmlvcml0eX0gZ3JvdXA9e2FjdGlvbi5ncm91cH0+PC9PdmVyZmxvd1Rvb2xiYXJMYXlvdXREYXRhPlxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdDwvQnV0dG9uPlxuXHRcdFx0XHQ8L0FjdGlvblRvb2xiYXJBY3Rpb24+XG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBmb3IgQ29udGV4dCBNZW51XG5cdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHQ8TWVudUl0ZW1cblx0XHRcdFx0XHRpZD17Z2VuZXJhdGUoW3RhYmxlLmNvbnRlbnRJZCwgXCJQYXN0ZVwiLCBcIkNvbnRleHRNZW51XCJdKX1cblx0XHRcdFx0XHR0ZXh0PVwie3NhcC5mZS5pMThuPk1fUEFTVEV9XCJcblx0XHRcdFx0XHRqc3g6Y29tbWFuZD1cImNtZDpQYXN0ZTo6Q29udGV4dE1lbnV8cHJlc3NcIlxuXHRcdFx0XHRcdHZpc2libGU9e2FjdGlvbi52aXNpYmxlIGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0XHRlbmFibGVkPXthY3Rpb24uZW5hYmxlZEZvckNvbnRleHRNZW51IGFzIHVua25vd24gYXMgYm9vbGVhbn1cblx0XHRcdFx0Lz5cblx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSBYTUwgc3RyaW5nIGZvciBhY3Rpb25zLlxuICogQHBhcmFtIHRhYmxlIFRoZSBpbnN0YW5jZSBvZiB0aGUgdGFibGUgYnVpbGRpbmcgYmxvY2tcbiAqIEBwYXJhbSBwYXJhbWV0ZXJzXG4gKiBAcGFyYW0gY29sbGVjdGlvbkNvbnRleHQgVGhlIGNvbnRleHQgb2YgdGhlIGNvbGxlY3Rpb25cbiAqIEBwYXJhbSBjb2xsZWN0aW9uRW50aXR5IFRoZSBlbnRpdHkgc2V0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcmV0dXJucyBUaGUgWE1MIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGUgYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFibGVBY3Rpb25zVGVtcGxhdGUoXG5cdHRhYmxlOiBUYWJsZUJsb2NrUHJvcGVydGllcyxcblx0cGFyYW1ldGVyczogVGFibGVUZW1wbGF0aW5nUGFyYW1ldGVycyxcblx0Y29sbGVjdGlvbkNvbnRleHQ6IENvbnRleHQsXG5cdGNvbGxlY3Rpb25FbnRpdHk6IEVudGl0eVNldCB8IE5hdmlnYXRpb25Qcm9wZXJ0eVxuKTogQ29udHJvbFtdIHtcblx0Y29uc3QgX2NvbGxlY3Rpb25Jc0RyYWZ0RW5hYmxlZCA9IE1vZGVsSGVscGVyLmlzRHJhZnROb2RlKGNvbGxlY3Rpb25FbnRpdHkpIHx8IE1vZGVsSGVscGVyLmlzRHJhZnRSb290KGNvbGxlY3Rpb25FbnRpdHkpO1xuXHRsZXQgc2VhcmNoYWJsZTogYm9vbGVhbjtcblx0aWYgKHRhYmxlLmlzU2VhcmNoYWJsZSA9PT0gZmFsc2UpIHtcblx0XHRzZWFyY2hhYmxlID0gZmFsc2U7XG5cdH0gZWxzZSB7XG5cdFx0c2VhcmNoYWJsZSA9IHRhYmxlLnRhYmxlRGVmaW5pdGlvbi5hbm5vdGF0aW9uLnNlYXJjaGFibGU7XG5cdH1cblxuXHRjb25zdCBhY3Rpb25zOiAoQWN0aW9uVG9vbGJhckFjdGlvbiB8IE1lbnVJdGVtIHwgQWN0aW9uc1BsYWNlaG9sZGVyKVtdID0gW107XG5cdGNvbnN0IGJhc2ljU2VhcmNoID0gZ2V0QmFzaWNTZWFyY2goISF0YWJsZS51c2VCYXNpY1NlYXJjaCwgdGFibGUuZmlsdGVyQmFyLCBfY29sbGVjdGlvbklzRHJhZnRFbmFibGVkLCBzZWFyY2hhYmxlKTtcblx0aWYgKGJhc2ljU2VhcmNoKSB7XG5cdFx0YWN0aW9ucy5wdXNoKGJhc2ljU2VhcmNoKTtcblx0fVxuXHRhY3Rpb25zLnB1c2goLi4uZ2V0QWN0aW9ucyh0YWJsZSwgZmFsc2UsIHBhcmFtZXRlcnMsIGNvbGxlY3Rpb25Db250ZXh0LCBjb2xsZWN0aW9uRW50aXR5KSk7XG5cdGNvbnN0IGZ1bGxTY3JlZW4gPSBnZXRGdWxsU2NyZWVuKHRhYmxlKTtcblx0aWYgKGZ1bGxTY3JlZW4pIHtcblx0XHRhY3Rpb25zLnB1c2goZnVsbFNjcmVlbik7XG5cdH1cblxuXHRyZXR1cm4gYWN0aW9ucyBhcyBDb250cm9sW107XG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRoZSB4bWwgc3RyaW5nIGZvciBjb250ZXh0IG1lbnUgYWN0aW9ucy5cbiAqIEBwYXJhbSB0YWJsZSBUaGUgaW5zdGFuY2Ugb2YgdGhlIHRhYmxlIGJ1aWxkaW5nIGJsb2NrXG4gKiBAcGFyYW0gcGFyYW1ldGVyc1xuICogQHBhcmFtIGNvbGxlY3Rpb25Db250ZXh0IFRoZSBjb250ZXh0IG9mIHRoZSBjb2xsZWN0aW9uXG4gKiBAcGFyYW0gY29sbGVjdGlvbkVudGl0eSBUaGUgZW50aXR5IHNldCBvZiB0aGUgY29sbGVjdGlvblxuICogQHJldHVybnMgVGhlIHhtbCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGFjdGlvbnNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRhYmxlQ29udGV4dE1lbnVUZW1wbGF0ZShcblx0dGFibGU6IFRhYmxlQmxvY2tQcm9wZXJ0aWVzLFxuXHRwYXJhbWV0ZXJzOiBUYWJsZVRlbXBsYXRpbmdQYXJhbWV0ZXJzLFxuXHRjb2xsZWN0aW9uQ29udGV4dDogQ29udGV4dCxcblx0Y29sbGVjdGlvbkVudGl0eTogRW50aXR5U2V0IHwgTmF2aWdhdGlvblByb3BlcnR5XG4pOiBNZW51SXRlbVtdIHtcblx0Y29uc3QgdGVtcGxhdGU6IE1lbnVJdGVtW10gPSBnZXRBY3Rpb25zKHRhYmxlLCB0cnVlLCBwYXJhbWV0ZXJzLCBjb2xsZWN0aW9uQ29udGV4dCwgY29sbGVjdGlvbkVudGl0eSkgYXMgdW5rbm93biBhcyBNZW51SXRlbVtdO1xuXHRpZiAodGFibGUudGFibGVEZWZpbml0aW9uLmNvbnRyb2wudHlwZSA9PT0gXCJUcmVlVGFibGVcIikge1xuXHRcdHRlbXBsYXRlLnB1c2goZ2V0RXhwYW5kZWRDb2xsYXBzZUFjdGlvbnModGFibGUsIHRydWUsIHBhcmFtZXRlcnMuaGFuZGxlclByb3ZpZGVyLmV4cGFuZE5vZGUpKTtcblx0XHR0ZW1wbGF0ZS5wdXNoKGdldEV4cGFuZGVkQ29sbGFwc2VBY3Rpb25zKHRhYmxlLCBmYWxzZSwgcGFyYW1ldGVycy5oYW5kbGVyUHJvdmlkZXIuY29sbGFwc2VOb2RlKSk7XG5cdH1cblx0cmV0dXJuIHRlbXBsYXRlO1xufVxuXG5mdW5jdGlvbiBnZXRFeHBhbmRlZENvbGxhcHNlQWN0aW9ucyh0YWJsZTogVGFibGVCbG9ja1Byb3BlcnRpZXMsIGV4cGFuZDogYm9vbGVhbiwgcHJlc3NIYW5kbGVyPzogKGU6IFVJNUV2ZW50KSA9PiB2b2lkKTogTWVudUl0ZW0ge1xuXHRjb25zdCBlbmFibGVFeHByZXNzaW9uID0gZXhwYW5kXG5cdFx0PyBhbmQoXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvaXNFeHBhbmRhYmxlXCIsIFwiaW50ZXJuYWxcIiksIHRydWUpLFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L251bWJlck9mU2VsZWN0ZWRDb250ZXh0c1wiLCBcImludGVybmFsXCIpLCAxKVxuXHRcdCAgKVxuXHRcdDogYW5kKFxuXHRcdFx0XHRlcXVhbChwYXRoSW5Nb2RlbChcImNvbnRleHRtZW51L2lzQ29sbGFwc2FibGVcIiwgXCJpbnRlcm5hbFwiKSwgdHJ1ZSksXG5cdFx0XHRcdGVxdWFsKHBhdGhJbk1vZGVsKFwiY29udGV4dG1lbnUvbnVtYmVyT2ZTZWxlY3RlZENvbnRleHRzXCIsIFwiaW50ZXJuYWxcIiksIDEpXG5cdFx0ICApO1xuXHRyZXR1cm4gKFxuXHRcdDxNZW51SXRlbVxuXHRcdFx0aWQ9e2dlbmVyYXRlKFt0YWJsZS5jb250ZW50SWQsIGV4cGFuZCA/IFwiRXhwYW5kXCIgOiBcIkNvbGxhcHNlXCIsIFwiQ29udGV4dE1lbnVcIl0pfVxuXHRcdFx0dGV4dD17ZXhwYW5kID8gXCJ7c2FwLmZlLmkxOG4+TV9UQUJMRV9DT05URVhUTUVOVV9FWFBBTkR9XCIgOiBcIntzYXAuZmUuaTE4bj5NX1RBQkxFX0NPTlRFWFRNRU5VX0NPTExBUFNFfVwifVxuXHRcdFx0cHJlc3M9e3ByZXNzSGFuZGxlcn1cblx0XHRcdGVuYWJsZWQ9e2VuYWJsZUV4cHJlc3Npb259XG5cdFx0Lz5cblx0KTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQWdEQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0Esb0JBQW9CQSxDQUM1QkMsU0FBNkIsRUFDN0JDLE1BQW9ELEVBQ3BEQyxjQUEwQixFQUMxQkMsS0FBMkIsRUFDM0JDLGNBQXVCLEVBQ3ZCQyxpQkFBMEIsRUFDMUJDLFVBQXFDLEVBQ2Q7SUFDdkIsSUFBSSxDQUFDSixjQUFjLENBQUNLLGNBQWMsRUFBRTtNQUNuQyxPQUFPQyxTQUFTO0lBQ2pCO0lBQ0EsTUFBTUMsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQ3RETCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNYLGNBQWMsQ0FBQ0ssY0FBYyxHQUFHLFNBQVMsQ0FDcEYsQ0FBQztJQUNELE1BQU1PLGFBQWEsR0FBR1IsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDSixpQkFBaUIsQ0FBRTtJQUNuRixNQUFNTSw0QkFBNEIsR0FBR0QsYUFBYSxHQUMvQ0Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSCxhQUFhLEVBQUVULGlCQUFpQixDQUFDLEdBQ2hGRyxTQUFTO0lBQ1osTUFBTVUsT0FBTyxHQUFHbEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRCxPQUFPO0lBQy9DLE1BQU1FLG9CQUFvQixHQUFHcEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRSxXQUFXLEVBQUVDLElBQUksRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSztJQUMvRyxNQUFNQyxPQUFPLEdBQUcsQ0FBQ3JCLGNBQWMsR0FBR0YsY0FBYyxDQUFDdUIsT0FBTyxHQUFHdkIsY0FBYyxDQUFDdUIsT0FBTyxHQUFHLGVBQWU7SUFDbkcsTUFBTUMsZUFBZSxHQUFHdEIsY0FBYyxHQUFHLGFBQWEsR0FBRyxZQUFZO0lBQ3JFLE1BQU11QixZQUFZLEdBQUd6QixjQUFjLENBQUN1QixPQUFPLEdBQ3hDakIsU0FBUyxHQUNURixVQUFVLENBQUNzQixlQUFlLENBQUNDLHVDQUF1QyxDQUFDN0IsU0FBUyxFQUFFRSxjQUFjLEVBQUVELE1BQU0sRUFBRUcsY0FBYyxDQUFDO0lBQ3hILE1BQU0wQixZQUFZLEdBQUc1QixjQUFjLENBQUN1QixPQUFPLEdBQUcsT0FBT0EsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBRWhGLElBQUl1QixPQUE0RCxHQUMvRDdCLGNBQWMsQ0FBQzZCLE9BQU8sS0FBS3ZCLFNBQVMsR0FDakNOLGNBQWMsQ0FBQzZCLE9BQU8sR0FDdEJDLFdBQVcsQ0FBQ0MsMkJBQTJCLENBQ3ZDOUIsS0FBSyxDQUFDK0IsZUFBZSxFQUNyQmxDLFNBQVMsQ0FBQ21DLE1BQU0sRUFDaEIsQ0FBQyxDQUFDakIsT0FBTyxFQUNUSixhQUFhLENBQUNzQixTQUFTLENBQUMsQ0FBQyxFQUN6QmxDLGNBQWMsQ0FBQ21DLGNBQWMsRUFDN0J0Qiw0QkFBNEIsRUFBRXVCLGdCQUFnQixFQUM5Q2xDLGNBQ0EsQ0FBQztJQUVMLElBQUlELEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLElBQUksQ0FBQyxDQUFDdkIsT0FBTyxFQUFFO01BQy9GYSxPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNDLEVBQUUsQ0FBQ0Msb0JBQW9CLEVBQUVDLG9CQUFvQixDQUFDZixPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pGO0lBQ0EsSUFBSWIsT0FBTyxLQUFLLElBQUksSUFBSUUsb0JBQW9CLEVBQUU7TUFDN0MsTUFBTTJCLE1BQU0sR0FBR0MsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUvQyxjQUFjLENBQUNnRCxHQUFHLEVBQUVqRCxNQUFNLENBQUNpRCxHQUFHLEVBQUV4QixlQUFlLEVBQUUxQixTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztNQUMzSCxPQUNDbUQsSUFBQSxDQUFDQyxRQUFRO1FBQ1JDLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEJDLEVBQUUsRUFBRVIsTUFBTztRQUNYUyxLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUJDLE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXZELGNBQWMsQ0FBQ3VELE9BQVE7UUFBQUMsUUFBQSxFQUUvQjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFYixNQUFNLENBQUM7UUFDbEQ7TUFBQyxDQUNRLENBQUM7SUFFYixDQUFDLE1BQU07TUFDTixPQUFPdkMsU0FBUztJQUNqQjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTcUQsbUNBQW1DQSxDQUMzQzdELFNBQTRDLEVBQzVDRSxjQUEwQixFQUMxQkMsS0FBMkIsRUFLaEI7SUFBQSxJQUpYQyxjQUFjLEdBQUEwRCxTQUFBLENBQUFDLE1BQUEsUUFBQUQsU0FBQSxRQUFBdEQsU0FBQSxHQUFBc0QsU0FBQSxNQUFHLEtBQUs7SUFBQSxJQUN0QnpELGlCQUEwQixHQUFBeUQsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQXRELFNBQUE7SUFBQSxJQUMxQlAsTUFBb0QsR0FBQTZELFNBQUEsQ0FBQUMsTUFBQSxPQUFBRCxTQUFBLE1BQUF0RCxTQUFBO0lBQUEsSUFDcERvQixlQUEwQyxHQUFBa0MsU0FBQSxDQUFBQyxNQUFBLE9BQUFELFNBQUEsTUFBQXRELFNBQUE7SUFFMUMsTUFBTW1CLFlBQVksR0FBR3pCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FDeENqQixTQUFTLEdBQ1RvQixlQUFlLENBQUNvQyw4QkFBOEIsQ0FBQzlELGNBQWMsRUFBRUUsY0FBYyxDQUFDO0lBQ2pGLE1BQU0wQixZQUFZLEdBQUc1QixjQUFjLENBQUN1QixPQUFPLEdBQUcsT0FBT3ZCLGNBQWMsQ0FBQ3VCLE9BQU8sUUFBUSxHQUFHakIsU0FBUztJQUUvRixNQUFNdUIsT0FBTyxHQUNaN0IsY0FBYyxDQUFDNkIsT0FBTyxLQUFLdkIsU0FBUyxHQUNqQ04sY0FBYyxDQUFDNkIsT0FBTyxHQUN0QkMsV0FBVyxDQUFDaUMsd0JBQXdCLENBQ3BDO01BQ0NDLFVBQVUsRUFBRTdELGlCQUFpQjtNQUM3QjZCLGVBQWUsRUFBRS9CLEtBQUssQ0FBQytCO0lBQ3hCLENBQUMsRUFDRGxDLFNBQVMsRUFDVEEsU0FBUyxDQUFDbUUsZUFBZSxFQUN6Qm5FLFNBQVMsQ0FBQ29FLG1CQUFtQixFQUM3QmhFLGNBQ0EsQ0FBQztJQUNMLE1BQU1tRCxFQUFFLEdBQUduRCxjQUFjLEdBQ3RCNEMsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUvQyxjQUFjLENBQUNnRCxHQUFHLEVBQUVqRCxNQUFNLENBQUNpRCxHQUFHLEVBQUVsRCxTQUFTLEVBQUUsK0JBQStCLEVBQUUsYUFBYSxDQUFDLENBQUMsR0FDdEhnRCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRWpELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRWxELFNBQVMsRUFBRSwrQkFBK0IsQ0FBQyxDQUFDO0lBQzFHLE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7TUFDUkMsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtNQUN0QkMsRUFBRSxFQUFFQSxFQUFHO01BQ1BDLEtBQUssRUFBRTdCLFlBQWE7TUFDcEIsZUFBYUcsWUFBYTtNQUMxQkMsT0FBTyxFQUFFQSxPQUFRO01BQ2pCMEIsT0FBTyxFQUFFdkQsY0FBYyxDQUFDdUQsT0FBUTtNQUFBQyxRQUFBLEVBRS9CO1FBQ0FDLFVBQVUsRUFBRSxDQUNYLENBQUMzRCxTQUFTLENBQUNtRSxlQUFlLEdBQ3ZCUCxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7VUFBRVMsY0FBYyxFQUFFckUsU0FBUyxDQUFDc0UsY0FBYztVQUFFckUsTUFBTSxFQUFFRCxTQUFTLENBQUNtQztRQUFPLENBQUMsQ0FBQyxHQUNuRzNCLFNBQVMsRUFDWm9ELGdCQUFnQixDQUFDLFVBQVUsRUFBRUwsRUFBRSxDQUFDO01BRWxDO0lBQUMsQ0FDUSxDQUFDO0VBRWI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTZ0IsV0FBV0EsQ0FDbkJ0RSxNQUFvRCxFQUNwREMsY0FBMEIsRUFDMUJDLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCQyxVQUFxQyxFQUNkO0lBQ3ZCLE1BQU1OLFNBQVMsR0FBR0UsY0FBYyxDQUFDSyxjQUFjLEdBQzNDRCxVQUFVLENBQUNrRSxpQkFBaUIsQ0FBQ0MsV0FBVyxDQUFDdkUsY0FBYyxDQUFDSyxjQUFjLENBQUMsQ0FBQ21FLE1BQU0sR0FDL0VsRSxTQUFTO0lBRVosUUFBUVIsU0FBUyxJQUFJRSxjQUFjLENBQUN5RSxJQUFJO01BQ3ZDLEtBQUssV0FBVztRQUNmLElBQUlDLG9CQUFvQixDQUFDNUUsU0FBUyxDQUFDLEVBQUU7VUFDcEMsSUFDQyxDQUFDSSxjQUFjLElBQ2RBLGNBQWMsSUFBSTRCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDM0UsY0FBYyxFQUFFQyxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBRSxFQUNsRztZQUNELE9BQU8vRSxvQkFBb0IsQ0FBQ0MsU0FBUyxFQUFFQyxNQUFNLEVBQUVDLGNBQWMsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7VUFDckg7UUFDRDtRQUNBO01BQ0QsS0FBSyxlQUFlO1FBQ25CLElBQ0N5RSxtQ0FBbUMsQ0FBQy9FLFNBQVUsQ0FBQyxLQUM5QyxDQUFDSSxjQUFjLElBQUtBLGNBQWMsSUFBSTRCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDM0UsY0FBYyxFQUFFQyxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBRSxDQUFDLEVBQ3ZIO1VBQ0QsT0FBT2pCLG1DQUFtQyxDQUN6QzdELFNBQVMsRUFDVEUsY0FBYyxFQUNkQyxLQUFLLEVBQ0xDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCSixNQUFNLEVBQ05LLFVBQVUsQ0FBQ3NCLGVBQ1osQ0FBQztRQUNGO1FBQ0E7TUFDRDtJQUNEO0lBRUEsTUFBTUgsT0FBTyxHQUFHLENBQUNyQixjQUFjLEdBQUdGLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBR3ZCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FBRyxlQUFlO0lBQ25HLE1BQU1FLFlBQVksR0FBR3pCLGNBQWMsQ0FBQ3VCLE9BQU8sR0FDeENqQixTQUFTLEdBQ1RGLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ29ELDZCQUE2QixDQUFDOUUsY0FBYyxFQUFrQkUsY0FBYyxDQUFDO0lBQzNHLE1BQU0wQixZQUFZLEdBQUc1QixjQUFjLENBQUN1QixPQUFPLEdBQUcsT0FBT0EsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBQ2hGLElBQUl1QixPQUFPLEdBQUcsQ0FBQzNCLGNBQWMsR0FBR0YsY0FBYyxDQUFDNkIsT0FBTyxHQUFJN0IsY0FBYyxDQUFrQitFLHFCQUFxQjtJQUMvRyxJQUNFL0UsY0FBYyxDQUFrQmdGLGlCQUFpQixJQUNsRC9FLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLEVBQzVFO01BQ0RWLE9BQU8sR0FBR1csaUJBQWlCLENBQUNDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUNmLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO0lBQy9GO0lBQ0EsTUFBTW5CLGVBQWUsR0FBR3RCLGNBQWMsR0FBRyxhQUFhLEdBQUcsWUFBWTtJQUNyRSxNQUFNMkMsTUFBTSxHQUFHQyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRS9DLGNBQWMsQ0FBQ2dELEdBQUcsRUFBRXhCLGVBQWUsRUFBRXpCLE1BQU0sQ0FBQ2lELEdBQUcsRUFBRWxELFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztJQUNsSCxPQUNDbUQsSUFBQSxDQUFDQyxRQUFRO01BQ1IsZ0JBQWEsd0NBQXdDO01BQ3JEQyxJQUFJLEVBQUVuRCxjQUFjLEVBQUVtRCxJQUFLO01BQzNCRSxFQUFFLEVBQUVSLE1BQU87TUFDWFMsS0FBSyxFQUFFN0IsWUFBYTtNQUNwQixlQUFhRyxZQUFhO01BQzFCMkIsT0FBTyxFQUFFdkQsY0FBYyxDQUFDdUQsT0FBUTtNQUNoQzFCLE9BQU8sRUFBRUEsT0FBUTtNQUFBMkIsUUFBQSxFQUVoQjtRQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFYixNQUFNLENBQUM7TUFDbEQ7SUFBQyxDQUNRLENBQUM7RUFFYjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNvQywyQkFBMkJBLENBQ25DbkYsU0FBNkIsRUFDN0JDLE1BQW9ELEVBQ3BERSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDakI7SUFDcEIsTUFBTThFLHNCQUFzQixHQUFHOUUsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDWixNQUFNLENBQUNNLGNBQWMsR0FBRyxTQUFTLENBQUU7SUFDNUcsTUFBTUUsaUJBQWlCLEdBQUdDLFlBQVksQ0FBQ0MsZ0JBQWdCLENBQUN5RSxzQkFBc0IsQ0FBQztJQUMvRSxNQUFNdEUsYUFBYSxHQUFHUixVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNKLGlCQUFpQixDQUFFO0lBQ25GLE1BQU1NLDRCQUE0QixHQUFHRCxhQUFhLEdBQy9DRSxrQkFBa0IsQ0FBQ0MsMkJBQTJCLENBQVNILGFBQWEsRUFBRVQsaUJBQWlCLENBQUMsR0FDeEZHLFNBQVM7SUFDWixNQUFNVSxPQUFPLEdBQUdsQixTQUFTLENBQUNtQixZQUFZLEVBQUVELE9BQU87SUFDL0MsTUFBTU8sT0FBTyxHQUFHLENBQUNyQixjQUFjLEdBQUdILE1BQU0sQ0FBQ3dCLE9BQU8sR0FBR3hCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxlQUFlO0lBQ25GLE1BQU1FLFlBQVksR0FBRzFCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FDaENqQixTQUFTLEdBQ1RGLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ0MsdUNBQXVDLENBQUM3QixTQUFTLEVBQUVDLE1BQU0sRUFBRU8sU0FBUyxFQUFFSixjQUFjLENBQUM7SUFDbkgsTUFBTTBCLFlBQVksR0FBRzdCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFDeEUsTUFBTXVCLE9BQU8sR0FDWjlCLE1BQU0sQ0FBQzhCLE9BQU8sS0FBS3ZCLFNBQVMsR0FDekJQLE1BQU0sQ0FBQzhCLE9BQU8sR0FDZEMsV0FBVyxDQUFDQywyQkFBMkIsQ0FDdkM5QixLQUFLLENBQUMrQixlQUFlLEVBQ3JCbEMsU0FBUyxDQUFDbUMsTUFBTSxFQUNoQixDQUFDLENBQUNqQixPQUFPLEVBQ1RKLGFBQWEsQ0FBQ3NCLFNBQVMsQ0FBQyxDQUFDLEVBQ3pCbkMsTUFBTSxDQUFDb0MsY0FBYyxFQUNyQnRCLDRCQUE0QixFQUFFdUIsZ0JBQWdCLEVBQzlDbEMsY0FDQSxDQUFDO0lBQ0wsTUFBTWlGLElBQUksR0FBR3BGLE1BQU0sQ0FBQ3FGLGFBQWEsS0FBSyxJQUFJLEdBQUdDLE1BQU0sR0FBRy9FLFNBQVM7SUFDL0QsSUFBSSxDQUFDSixjQUFjLEVBQUU7TUFDcEI7TUFDQSxNQUFNb0YsZUFBZSxHQUFHeEMsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLENBQUMsQ0FBQztNQUM5RCxPQUNDbUQsSUFBQSxDQUFDc0MsTUFBTTtRQUNObEMsRUFBRSxFQUFFaUMsZUFBZ0I7UUFDcEJuQyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO1FBQ3RCK0IsSUFBSSxFQUFFQSxJQUFLO1FBQ1hLLFlBQVksRUFBRUMsa0JBQWtCLENBQUMzRixTQUFTLENBQUU7UUFDNUN3RCxLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUI2QyxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7UUFDN0I5RCxPQUFPLEVBQUVBLE9BQVE7UUFDakIwQixPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUFRO1FBQUFDLFFBQUEsRUFFdkI7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTRCLGVBQWUsQ0FBQyxDQUFDO1VBQzNETSxVQUFVLEVBQUUzQyxJQUFBLENBQUM0Qyx5QkFBeUI7WUFBQ0MsUUFBUSxFQUFFL0YsTUFBTSxDQUFDK0YsUUFBUztZQUFDQyxLQUFLLEVBQUVoRyxNQUFNLENBQUNnRztVQUFNLENBQTRCO1FBQ25IO01BQUMsQ0FDTSxDQUFDO0lBRVgsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNQyx3QkFBd0IsR0FBR2xELFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO01BQ3RGLE9BQ0NtRCxJQUFBLENBQUNDLFFBQVE7UUFDUkcsRUFBRSxFQUFFMkMsd0JBQXlCO1FBQzdCN0MsSUFBSSxFQUFFckQsU0FBUyxDQUFDc0QsS0FBTTtRQUN0QitCLElBQUksRUFBRUEsSUFBSztRQUNYN0IsS0FBSyxFQUFFN0IsWUFBYTtRQUNwQixlQUFhRyxZQUFhO1FBQzFCQyxPQUFPLEVBQUVBLE9BQVE7UUFDakIwQixPQUFPLEVBQUV4RCxNQUFNLENBQUNrRyxxQkFBc0I7UUFBQXpDLFFBQUEsRUFFckM7VUFDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRXNDLHdCQUF3QixDQUFDO1FBQ3BFO01BQUMsQ0FDUSxDQUFDO0lBRWI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNFLDBDQUEwQ0EsQ0FDbERwRyxTQUE0QyxFQUM1Q0MsTUFBb0QsRUFDcERFLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QkMsaUJBQTBCLEVBQzFCdUIsZUFBMEMsRUFDdEI7SUFDcEIsTUFBTUgsT0FBTyxHQUFHLENBQUNyQixjQUFjLEdBQUdILE1BQU0sQ0FBQ3dCLE9BQU8sR0FBR3hCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxlQUFlO0lBQ25GLE1BQU1FLFlBQVksR0FBRzFCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBR2pCLFNBQVMsR0FBR29CLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDL0QsTUFBTSxFQUFFRyxjQUFjLENBQUM7SUFDeEgsTUFBTTBCLFlBQVksR0FBRzdCLE1BQU0sQ0FBQ3dCLE9BQU8sR0FBRyxPQUFPQSxPQUFPLFFBQVEsR0FBR2pCLFNBQVM7SUFDeEUsTUFBTXVCLE9BQU8sR0FDWjlCLE1BQU0sQ0FBQzhCLE9BQU8sS0FBS3ZCLFNBQVMsR0FDekJQLE1BQU0sQ0FBQzhCLE9BQU8sR0FDZEMsV0FBVyxDQUFDaUMsd0JBQXdCLENBQ3BDO01BQ0NDLFVBQVUsRUFBRTdELGlCQUFpQjtNQUM3QjZCLGVBQWUsRUFBRS9CLEtBQUssQ0FBQytCO0lBQ3hCLENBQUMsRUFDRGxDLFNBQVMsRUFDVEEsU0FBUyxDQUFDbUUsZUFBZSxFQUN6Qm5FLFNBQVMsQ0FBQ29FLG1CQUFtQixFQUM3QmhFLGNBQ0EsQ0FBQztJQUNMLE1BQU1pRyxPQUFPLEdBQUcsQ0FBQ3JHLFNBQVMsQ0FBQ21FLGVBQWUsR0FBRztNQUFFRSxjQUFjLEVBQUVyRSxTQUFTLENBQUNzRSxjQUFjO01BQUVyRSxNQUFNLEVBQUVELFNBQVMsQ0FBQ21DO0lBQU8sQ0FBQyxHQUFHM0IsU0FBUztJQUMvSCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU1vRixlQUFlLEdBQUd4QyxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFDO01BQzlELE9BQ0NtRCxJQUFBLENBQUNzQyxNQUFNO1FBQ05sQyxFQUFFLEVBQUVpQyxlQUFnQjtRQUNwQm5DLElBQUksRUFBRXJELFNBQVMsQ0FBQ3NELEtBQU07UUFDdEJFLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtRQUM3QjlELE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7UUFBQUMsUUFBQSxFQUV2QjtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsU0FBUyxFQUFFeUMsT0FBTyxDQUFDLEVBQUV6QyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUU0QixlQUFlLENBQUM7UUFDakc7TUFBQyxDQUNNLENBQUM7SUFFWCxDQUFDLE1BQU07TUFDTjtNQUNBLE1BQU1VLHdCQUF3QixHQUFHbEQsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEYsT0FDQ21ELElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUUyQyx3QkFBeUI7UUFDN0I3QyxJQUFJLEVBQUVyRCxTQUFTLENBQUNzRCxLQUFNO1FBQ3RCRSxLQUFLLEVBQUU3QixZQUFhO1FBQ3BCLGVBQWFHLFlBQWE7UUFDMUJDLE9BQU8sRUFBRUEsT0FBUTtRQUNqQjBCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ2tHLHFCQUFzQjtRQUFBekMsUUFBQSxFQUVyQztVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsU0FBUyxFQUFFeUMsT0FBTyxDQUFDLEVBQUV6QyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVzQyx3QkFBd0IsQ0FBQztRQUMxRztNQUFDLENBQ1EsQ0FBQztJQUViO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBU0ksa0JBQWtCQSxDQUMxQnJHLE1BQW9ELEVBQ3BERSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxNQUFNTixTQUFTLEdBQUdDLE1BQU0sQ0FBQ00sY0FBYyxHQUNuQ0QsVUFBVSxDQUFDa0UsaUJBQWlCLENBQUNDLFdBQVcsQ0FBQ3hFLE1BQU0sQ0FBQ00sY0FBYyxDQUFDLENBQUNtRSxNQUFNLEdBQ3ZFbEUsU0FBUztJQUNaLElBQUkrRixRQUF1QztJQUMzQyxJQUFJLENBQUN2RyxTQUFTLEVBQUU7TUFDZixPQUFPUSxTQUFTO0lBQ2pCO0lBQ0EsUUFBUVAsTUFBTSxDQUFDMEUsSUFBSTtNQUNsQixLQUFLLFdBQVc7UUFDZixJQUFJQyxvQkFBb0IsQ0FBQzVFLFNBQVMsQ0FBQyxFQUFFO1VBQ3BDLE1BQU1rQixPQUFPLEdBQUdsQixTQUFTLENBQUNtQixZQUFZLEVBQUVELE9BQU87VUFDL0MsSUFBSSxDQUFDLENBQUNBLE9BQU8sSUFBSWYsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtZQUMvRnhDLE1BQU0sR0FBR3VHLFNBQVMsQ0FBQ3ZHLE1BQU0sQ0FBQztZQUMxQkEsTUFBTSxDQUFDOEIsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQzhCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO1VBQzdHO1VBQ0EsTUFBTXpCLG9CQUFvQixHQUFHcEIsU0FBUyxDQUFDbUIsWUFBWSxFQUFFRSxXQUFXLEVBQUVDLElBQUksRUFBRUMsa0JBQWtCLEVBQUVDLE9BQU8sQ0FBQyxDQUFDLEtBQUssS0FBSztVQUMvRztVQUNBLElBQUksQ0FBQ3BCLGNBQWMsSUFBSTRCLFdBQVcsQ0FBQzZDLDBCQUEwQixDQUFDNUUsTUFBTSxFQUFFRSxLQUFLLENBQUMyRSxpQkFBaUIsQ0FBQyxFQUFFO1lBQy9GLElBQUk1RCxPQUFPLEtBQUssSUFBSSxJQUFJRSxvQkFBb0IsRUFBRTtjQUM3Q21GLFFBQVEsR0FBR3BCLDJCQUEyQixDQUFDbkYsU0FBUyxFQUFFQyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO1lBQ2hIO1VBQ0Q7UUFDRDtRQUNBO01BQ0QsS0FBSyxlQUFlO1FBQ25CLElBQ0N5RSxtQ0FBbUMsQ0FBQy9FLFNBQVMsQ0FBQyxLQUM3QyxDQUFDSSxjQUFjLElBQUk0QixXQUFXLENBQUM2QywwQkFBMEIsQ0FBQzVFLE1BQU0sRUFBRUUsS0FBSyxDQUFDMkUsaUJBQWlCLENBQUMsQ0FBQyxFQUMzRjtVQUNEeUIsUUFBUSxHQUFHSCwwQ0FBMEMsQ0FDcERwRyxTQUFTLEVBQ1RDLE1BQU0sRUFDTkUsS0FBSyxFQUNMQyxjQUFjLEVBQ2RDLGlCQUFpQixFQUNqQkMsVUFBVSxDQUFDc0IsZUFDWixDQUFDO1FBQ0Y7UUFDQTtNQUNEO0lBQ0Q7SUFFQSxJQUFJMkUsUUFBUSxLQUFLL0YsU0FBUyxFQUFFO01BQzNCLE9BQU9BLFNBQVM7SUFDakI7SUFFQSxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFdkQsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDN0UsaUJBQWVDLE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxNQUFNLElBQUl4RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssT0FBTyxHQUFHakQsU0FBUyxHQUFHLDBCQUEyQjtRQUFBa0QsUUFBQSxFQUUvRztVQUNBekQsTUFBTSxFQUFFc0c7UUFDVDtNQUFDLENBQ21CLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUFPQSxRQUFRO0lBQ2hCO0VBQ0Q7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTRywwQkFBMEJBLENBQ2xDQyxhQUF1QyxFQUN2Q0MseUJBQTZGLEVBQzdGdEcsVUFBcUMsRUFDbUI7SUFDeEQsSUFBSSxDQUFDcUcsYUFBYSxFQUFFO01BQ25CLE9BQU8sQ0FBQyxDQUFDO0lBQ1Y7SUFFQSxJQUFJO01BQ0gsUUFBUUEsYUFBYSxDQUFDaEMsSUFBSTtRQUN6QixLQUFLLFdBQVc7VUFDZixPQUFPO1lBQ05rQyxPQUFPLEVBQUV2RyxVQUFVLENBQUNzQixlQUFlLENBQUNDLHVDQUF1QyxDQUMxRStFLHlCQUF5QixFQUN6QkQsYUFBYSxFQUNibkcsU0FBUyxFQUNULEtBQ0Q7VUFDRCxDQUFDO1FBRUYsS0FBSyxlQUFlO1VBQ25CLE9BQU87WUFDTnFHLE9BQU8sRUFBRXZHLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQ29DLDhCQUE4QixDQUFDMkMsYUFBYSxFQUFFLEtBQUs7VUFDeEYsQ0FBQztRQUVGO1VBQVM7WUFDUixJQUFJQSxhQUFhLENBQUNsRixPQUFPLEVBQUU7Y0FDMUIsT0FBTztnQkFDTkEsT0FBTyxFQUFFLE9BQU9rRixhQUFhLENBQUNsRixPQUFPO2NBQ3RDLENBQUM7WUFDRixDQUFDLE1BQU07Y0FDTixPQUFPO2dCQUNOb0YsT0FBTyxFQUFFdkcsVUFBVSxDQUFDc0IsZUFBZSxDQUFDb0QsNkJBQTZCLENBQUMyQixhQUFhLEVBQUUsS0FBSztjQUN2RixDQUFDO1lBQ0Y7VUFDRDtNQUNEO0lBQ0QsQ0FBQyxDQUFDLE9BQU9HLENBQUMsRUFBRTtNQUNYLE9BQU8sQ0FBQyxDQUFDO0lBQ1Y7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTQyxhQUFhQSxDQUNyQjlHLE1BQW9ELEVBQ3BERSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxJQUFLTCxNQUFNLENBQWtCaUYsaUJBQWlCLElBQUkvRSxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ0MsdUJBQXVCLEVBQUVDLHNCQUFzQixFQUFFO01BQ2hJeEMsTUFBTSxHQUFHdUcsU0FBUyxDQUFDdkcsTUFBTSxDQUFDO01BQzFCQSxNQUFNLENBQUM4QixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDOEIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7SUFDN0c7SUFDQSxNQUFNd0MsSUFBSSxHQUFHcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBUztJQUMvRCxJQUFJLENBQUNKLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE1BQU11RyxhQUFhLEdBQUkxRyxNQUFNLENBQWtCMEcsYUFBeUM7TUFDeEYsTUFBTUMseUJBQXlCLEdBQUdELGFBQWEsRUFBRXBHLGNBQWMsR0FDNURELFVBQVUsQ0FBQ2tFLGlCQUFpQixDQUFDQyxXQUFXLENBQXlEa0MsYUFBYSxDQUFDcEcsY0FBYyxDQUFDLENBQzdIbUUsTUFBTSxHQUNQbEUsU0FBUztNQUNaLE1BQU13RyxxQkFBcUIsR0FBR04sMEJBQTBCLENBQUNDLGFBQWEsRUFBRUMseUJBQXlCLEVBQUV0RyxVQUFVLENBQUM7TUFDOUcsTUFBTTJHLFNBQVMsR0FBR2hILE1BQU0sQ0FBQ2lILElBQUksRUFDMUJDLE1BQU0sQ0FBRWpILGNBQWMsSUFBSyxPQUFPQSxjQUFjLEtBQUssUUFBUSxDQUFDLENBQy9Ea0gsR0FBRyxDQUFFbEgsY0FBYyxJQUFLO1FBQ3hCLE9BQU9xRSxXQUFXLENBQUN0RSxNQUFNLEVBQUVDLGNBQWMsRUFBRUMsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7TUFDakcsQ0FBQyxDQUFDLENBQ0Q2RyxNQUFNLENBQUVFLElBQUksSUFBS0EsSUFBSSxLQUFLN0csU0FBUyxDQUFDO01BRXRDLElBQUl5RyxTQUFTLEVBQUVsRCxNQUFNLEVBQUU7UUFDdEIsTUFBTXVELE1BQU0sR0FBR3RFLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxDQUFDLENBQUM7UUFDckQsT0FDQ0osSUFBQSxDQUFDc0QsbUJBQW1CO1VBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1VBQ2xFLGlCQUFldEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1VBQUFrRCxRQUFBLEVBRWhIUCxJQUFBLENBQUNvRSxVQUFVO1lBQ1ZsRSxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1lBQ2xCc0IsSUFBSSxFQUFFaUIsVUFBVSxDQUFDQyxXQUFZO1lBQzdCMkIsWUFBWSxFQUFFQyxLQUFLLENBQUNDLElBQUksQ0FBQ0MsV0FBWTtZQUNyQ3BFLEVBQUUsRUFBRStELE1BQU87WUFDWDdELE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7WUFDeEIxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUFRO1lBQ3hCNkYsb0JBQW9CLEVBQUUsQ0FBQyxDQUFFM0gsTUFBTSxDQUFxQjBHLGFBQWM7WUFDbEV0QixJQUFJLEVBQUVBLElBQUs7WUFDWHdDLFVBQVUsRUFBRzVILE1BQU0sQ0FBcUIwRyxhQUFhLEdBQUdtQixjQUFjLENBQUNDLEtBQUssR0FBR0QsY0FBYyxDQUFDRSxPQUFRO1lBQ3RHckIsYUFBYSxFQUFFSyxxQkFBcUIsQ0FBQ0gsT0FBUTtZQUM3QyxlQUFhRyxxQkFBcUIsQ0FBQ3ZGLE9BQVE7WUFBQWlDLFFBQUEsRUFFMUM7Y0FDQUMsVUFBVSxFQUFFLENBQUNDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTBELE1BQU0sQ0FBQyxDQUFDO2NBQ2xESixJQUFJLEVBQUUvRCxJQUFBLENBQUM4RSxJQUFJO2dCQUFBdkUsUUFBQSxFQUFFdUQ7Y0FBUyxDQUFPLENBQUM7Y0FDOUJuQixVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Z0JBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVM7Z0JBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO2NBQU0sQ0FBNEI7WUFFeEc7VUFBQyxDQUNVO1FBQUMsQ0FDTyxDQUFDO01BRXhCLENBQUMsTUFBTTtRQUNOLE9BQU96RixTQUFTO01BQ2pCO0lBQ0QsQ0FBQyxNQUFNO01BQ047TUFDQSxNQUFNMEgsdUJBQXFDLEdBQUcsRUFBRTtNQUNoRGpJLE1BQU0sQ0FBQ2lILElBQUksRUFBRWlCLE9BQU8sQ0FBRWpJLGNBQWMsSUFBSztRQUN4QyxJQUFJLE9BQU9BLGNBQWMsS0FBSyxRQUFRLElBQUk4QixXQUFXLENBQUM2QywwQkFBMEIsQ0FBQzNFLGNBQWMsRUFBRUMsS0FBSyxDQUFDMkUsaUJBQWlCLENBQUMsRUFBRTtVQUMxSG9ELHVCQUF1QixFQUFFRSxJQUFJLENBQUNsSSxjQUFjLENBQUM7UUFDOUM7TUFDRCxDQUFDLENBQUM7TUFFRixNQUFNK0csU0FBUyxHQUFHaUIsdUJBQXVCLENBQ3ZDZixNQUFNLENBQUVqSCxjQUFjLElBQUssT0FBT0EsY0FBYyxLQUFLLFFBQVEsQ0FBQyxDQUM5RGtILEdBQUcsQ0FBRWxILGNBQWMsSUFBSztRQUN4QixPQUFPcUUsV0FBVyxDQUFDdEUsTUFBTSxFQUFFQyxjQUFjLEVBQUVDLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO01BQ2pHLENBQUMsQ0FBQyxDQUNENkcsTUFBTSxDQUFFRSxJQUFJLElBQUtBLElBQUksS0FBSzdHLFNBQVMsQ0FBQztNQUV0QyxJQUFJeUcsU0FBUyxFQUFFbEQsTUFBTSxFQUFFO1FBQ3RCLE9BQ0NaLElBQUEsQ0FBQ0MsUUFBUTtVQUNSQyxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1VBQ2xCRSxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLGFBQWEsQ0FBQyxDQUFFO1VBQzFERSxPQUFPLEVBQUV4RCxNQUFNLENBQUNrRyxxQkFBc0I7VUFDdENwRSxPQUFPLEVBQUU5QixNQUFNLENBQUNnRixxQkFBc0I7VUFDdENJLElBQUksRUFBRUEsSUFBSztVQUFBM0IsUUFBQSxFQUVWO1lBQ0EyRSxLQUFLLEVBQUVwQjtVQUNSO1FBQUMsQ0FDUSxDQUFDO01BRWIsQ0FBQyxNQUFNO1FBQ04sT0FBT3pHLFNBQVM7TUFDakI7SUFDRDtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTOEgsZ0JBQWdCQSxDQUN4QnJJLE1BQW9CLEVBQ3BCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUNHO0lBQzdDLE1BQU1ILE9BQU8sR0FBRyxDQUFDckIsY0FBYyxHQUFHSCxNQUFNLENBQUN3QixPQUFPLEdBQUd4QixNQUFNLENBQUN3QixPQUFPLEdBQUcsZUFBZTtJQUNuRixNQUFNRSxZQUFZLEdBQUcxQixNQUFNLENBQUN3QixPQUFPLEdBQUdqQixTQUFTLEdBQUdvQixlQUFlLENBQUNvRCw2QkFBNkIsQ0FBQy9FLE1BQU0sRUFBRUcsY0FBYyxDQUFDO0lBQ3ZILE1BQU0wQixZQUFZLEdBQUc3QixNQUFNLENBQUN3QixPQUFPLEdBQUcsT0FBT0EsT0FBTyxRQUFRLEdBQUdqQixTQUFTO0lBRXhFLElBQUlQLE1BQU0sQ0FBQ2lGLGlCQUFpQixJQUFJL0UsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtNQUM5R3hDLE1BQU0sR0FBR3VHLFNBQVMsQ0FBQ3ZHLE1BQU0sQ0FBQztNQUMxQkEsTUFBTSxDQUFDOEIsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQzhCLE9BQU8sSUFBSSxFQUFFLENBQUMsRUFBRWEsRUFBRSxDQUFDQyxvQkFBb0IsQ0FBQyxDQUFDO01BQzVHNUMsTUFBTSxDQUFDZ0YscUJBQXFCLEdBQUd2QyxpQkFBaUIsQ0FDL0NDLEdBQUcsQ0FBQ0csb0JBQW9CLENBQUM3QyxNQUFNLENBQUNnRixxQkFBcUIsSUFBSSxFQUFFLENBQUMsRUFBRXJDLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQ3RGLENBQUM7SUFDRjtJQUNBLElBQUksQ0FBQ3pDLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbEUsaUJBQWV0RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssTUFBTSxJQUFJeEQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE9BQU8sR0FBR2pELFNBQVMsR0FBRywwQkFBMkI7UUFBQWtELFFBQUEsRUFFaEhQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTixnQkFBYSx3Q0FBd0M7VUFDckRsQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDc0QsRUFBRSxDQUFDLENBQUU7VUFDM0NGLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7VUFDbEJHLEtBQUssRUFBRTdCLFlBQWE7VUFDcEIsZUFBYUcsWUFBYTtVQUMxQjZDLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtVQUM3QnBDLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQVE7VUFDeEIxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUFRO1VBQ3hCc0QsSUFBSSxFQUFFcEYsTUFBTSxDQUFDcUYsYUFBYSxLQUFLLElBQUksR0FBR0MsTUFBTSxHQUFHL0UsU0FBVTtVQUFBa0QsUUFBQSxFQUV4RDtZQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ3NELEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsRnVDLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2NBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTSxJQUFJakUsV0FBVyxDQUFDNkMsMEJBQTBCLENBQUM1RSxNQUFNLEVBQUVFLEtBQUssQ0FBQzJFLGlCQUFpQixDQUFDLEVBQUU7TUFDbkYsTUFBTW9CLHdCQUF3QixHQUFHbEQsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVoRCxNQUFNLENBQUNzRCxFQUFFLEVBQUUsYUFBYSxDQUFDLENBQUM7TUFDdEY7TUFDQSxPQUNDSixJQUFBLENBQUNDLFFBQVE7UUFDUixnQkFBYSx3Q0FBd0M7UUFDckRHLEVBQUUsRUFBRTJDLHdCQUF5QjtRQUM3QjdDLElBQUksRUFBRXBELE1BQU0sQ0FBQ29ELElBQUs7UUFDbEJHLEtBQUssRUFBRTdCLFlBQWE7UUFDcEIsZUFBYUcsWUFBYTtRQUMxQjJCLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ2tHLHFCQUFzQjtRQUN0Q3BFLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQ2dGLHFCQUFzQjtRQUFBdkIsUUFBQSxFQUVyQztVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFc0Msd0JBQXdCLENBQUM7UUFDcEU7TUFBQyxDQUNRLENBQUM7SUFFYixDQUFDLE1BQU07TUFDTixPQUFPMUYsU0FBUztJQUNqQjtFQUNEOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVMrSCxTQUFTQSxDQUNqQnRJLE1BQWtCLEVBQ2xCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDUTtJQUM3QyxRQUFRTCxNQUFNLENBQUMwRSxJQUFJO01BQ2xCLEtBQUssU0FBUztRQUNiLElBQUksUUFBUSxJQUFJMUUsTUFBTSxFQUFFO1VBQ3ZCLE9BQU9xSSxnQkFBZ0IsQ0FBQ3JJLE1BQU0sRUFBa0JFLEtBQUssRUFBRUMsY0FBYyxFQUFFRSxVQUFVLENBQUNzQixlQUFlLENBQUM7UUFDbkc7UUFDQTtNQUNELEtBQUssTUFBTTtRQUNWLE9BQU9tRixhQUFhLENBQUM5RyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO01BQ25GO0lBQ0Q7SUFDQSxPQUFPZ0csa0JBQWtCLENBQUNyRyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFQyxpQkFBaUIsRUFBRUMsVUFBVSxDQUFDO0VBQ3hGOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNrSSxhQUFhQSxDQUNyQnZJLE1BQWtCLEVBQ2xCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJDLGlCQUEwQixFQUMxQkMsVUFBcUMsRUFDSjtJQUNqQyxNQUFNTixTQUFTLEdBQUdDLE1BQU0sQ0FBQ00sY0FBYyxHQUNuQ0QsVUFBVSxDQUFDa0UsaUJBQWlCLENBQUNDLFdBQVcsQ0FBQ3hFLE1BQU0sQ0FBQ00sY0FBYyxDQUFDLENBQUNtRSxNQUFNLEdBQ3ZFbEUsU0FBUztJQUNaLE1BQU1DLGlCQUFpQixHQUFHQyxZQUFZLENBQUNDLGdCQUFnQixDQUFDTCxVQUFVLENBQUNNLFNBQVMsQ0FBQ0Msb0JBQW9CLENBQUNaLE1BQU0sQ0FBQ00sY0FBYyxHQUFHLFNBQVMsQ0FBRSxDQUFDO0lBQ3RJLE1BQU1rSSxrQkFBa0IsR0FBR3pJLFNBQVMsRUFBRW1CLFlBQVksRUFBRUUsV0FBVyxFQUFFQyxJQUFJLEVBQUVDLGtCQUFrQixLQUFLZixTQUFTO0lBQ3ZHLE1BQU1NLGFBQWEsR0FBR1IsVUFBVSxDQUFDTSxTQUFTLENBQUNDLG9CQUFvQixDQUFDSixpQkFBaUIsQ0FBRTtJQUNuRixNQUFNTSw0QkFBNEIsR0FBR0QsYUFBYSxHQUMvQ0Usa0JBQWtCLENBQUNDLDJCQUEyQixDQUFDSCxhQUFhLEVBQUVULGlCQUFpQixDQUFDLEdBQ2hGRyxTQUFTO0lBQ1osTUFBTVUsT0FBTyxHQUFHbEIsU0FBUyxFQUFFbUIsWUFBWSxFQUFFRCxPQUFPO0lBQ2hELE1BQU1zQyxLQUFLLEdBQUd4RCxTQUFTLEdBQ3BCTSxVQUFVLENBQUNzQixlQUFlLENBQUNDLHVDQUF1QyxDQUFDN0IsU0FBUyxFQUFFQyxNQUFNLEVBQUVPLFNBQVMsRUFBRUosY0FBYyxDQUFDLEdBQ2hISSxTQUFTO0lBRVosSUFBSXVCLE9BQTRELEdBQUcwRyxrQkFBa0IsR0FDbEZ6RyxXQUFXLENBQUNDLDJCQUEyQixDQUN2QzlCLEtBQUssQ0FBQytCLGVBQWUsRUFDckJsQyxTQUFTLENBQUNtQyxNQUFNLEVBQ2hCLENBQUMsQ0FBQ2pCLE9BQU8sRUFDVEosYUFBYSxDQUFDc0IsU0FBUyxDQUFDLENBQUMsRUFDekJuQyxNQUFNLENBQUNvQyxjQUFjLEVBQ3JCdEIsNEJBQTRCLEVBQUV1QixnQkFBZ0IsRUFDOUNsQyxjQUFjLEVBQ2QsSUFDQSxDQUFDLEdBQ0QsTUFBTXNJLFlBQVksQ0FBQ0MsNkJBQTZCLENBQUMsUUFBUSxFQUFFdkksY0FBYyxDQUFDLEdBQUc7SUFDaEYsSUFBSUQsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNDLHVCQUF1QixFQUFFQyxzQkFBc0IsRUFBRTtNQUNsRlYsT0FBTyxHQUFHVyxpQkFBaUIsQ0FBQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQ2YsT0FBTyxDQUFDLEVBQUVhLEVBQUUsQ0FBQ0Msb0JBQW9CLENBQUMsQ0FBQztJQUN6RjtJQUVBLElBQUksQ0FBQ3pDLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDbEUsaUJBQWVDLE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxNQUFNLElBQUl4RCxNQUFNLENBQUN3RCxPQUFPLEtBQUssT0FBTyxHQUFHakQsU0FBUyxHQUFHLDBCQUEyQjtRQUFBa0QsUUFBQSxFQUVoSFAsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsQ0FBQyxDQUFFO1VBQzNDcUQsSUFBSSxFQUFFcEQsTUFBTSxDQUFDb0QsSUFBSztVQUNsQkcsS0FBSyxFQUFFQSxLQUFNO1VBQ2JtQixJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUFRO1VBQ3hCMUIsT0FBTyxFQUFFQSxPQUFRO1VBQUEyQixRQUFBLEVBRWhCO1lBQ0FDLFVBQVUsRUFBRSxDQUFDQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUVaLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFakQsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xGOEYsVUFBVSxFQUFFM0MsSUFBQSxDQUFDNEMseUJBQXlCO2NBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVM7Y0FBQ0MsS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0c7WUFBTSxDQUE0QjtVQUNuSDtRQUFDLENBQ007TUFBQyxDQUNXLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUNDOUMsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVqRCxTQUFTLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDMURxRCxJQUFJLEVBQUVwRCxNQUFNLENBQUNvRCxJQUFLO1FBQ2xCRyxLQUFLLEVBQUVBLEtBQU07UUFDYkMsT0FBTyxFQUFFeEQsTUFBTSxDQUFDa0cscUJBQTRDO1FBQzVEcEUsT0FBTyxFQUFFVyxpQkFBaUIsQ0FBQ2tHLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUF3QjtRQUFBbkYsUUFBQSxFQUUzSDtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWpELFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQ2pHO01BQUMsQ0FDUSxDQUFDO0lBRWI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ0EsU0FBUzhJLGVBQWVBLENBQ3ZCQyxjQUE4QixFQUM5QjVJLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QjRJLGdCQUFnRCxFQUNNO0lBQ3RELE1BQU1DLGlCQUFpQixHQUFHRCxnQkFBZ0IsQ0FBQ0UsSUFBSTtJQUMvQyxNQUFNQyxVQUFVLEdBQUdoSixLQUFLLENBQUNpSixpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRTVJLFNBQVMsRUFBRXlJLGlCQUFpQixDQUFDO0lBQ2pHLE1BQU1JLG9CQUFvQixHQUFJbEosS0FBSyxDQUFDK0IsZUFBZSxDQUFDb0gsVUFBVSxDQUFDQyxNQUFNLENBQTRCQyxjQUFjO0lBQy9HLE1BQU03RixVQUFVLEdBQUcwRixvQkFBb0IsR0FDcEN6RixnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7TUFBRVMsY0FBYyxFQUFFZ0Ysb0JBQW9CLENBQUNoRixjQUFjO01BQUVwRSxNQUFNLEVBQUVvSixvQkFBb0IsQ0FBQ3BKO0lBQU8sQ0FBQyxDQUFDLEdBQ3pITyxTQUFTO0lBRVosSUFBSUwsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNrSCxrQkFBa0IsRUFBRTtNQUNyRCxPQUFPdEcsSUFBQSxDQUFDdUcsa0JBQWtCO1FBQUNuRyxFQUFFLEVBQUUsR0FBR3BELEtBQUssQ0FBQzhDLFNBQVMsZUFBZ0I7UUFBQzBHLGNBQWMsRUFBQztNQUF5QixDQUFFLENBQUM7SUFDOUcsQ0FBQyxNQUFNLElBQUksQ0FBQ3ZKLGNBQWMsRUFBRTtNQUMzQixPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQzNFLGlCQUFjLG9CQUFvQjtRQUFBUSxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO1VBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxDQUFDLENBQUU7VUFDcERHLElBQUksRUFBRThGLFVBQVc7VUFDakIsZUFBWSxrQkFBa0I7VUFDOUJ4RSxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7VUFDN0JwQyxPQUFPLEVBQUVzRixjQUFjLENBQUN0RixPQUE4QjtVQUN0RDFCLE9BQU8sRUFBRWdILGNBQWMsQ0FBQ2hILE9BQThCO1VBQUEyQixRQUFBLEVBRXJEO1lBQ0FDLFVBQVU7WUFDVm1DLFVBQVUsRUFDVDNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUN6QkMsUUFBUSxFQUFFK0MsY0FBYyxDQUFDL0MsUUFBUztjQUNsQ0MsS0FBSyxFQUFFOEMsY0FBYyxDQUFDOUM7WUFBTSxDQUNEO1VBRTlCO1FBQUMsQ0FDTTtNQUFDLENBQ1csQ0FBQztJQUV4QixDQUFDLE1BQU07TUFDTixPQUNDOUMsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUU7UUFDbkVHLElBQUksRUFBRThGLFVBQVc7UUFDakIsZUFBWSwrQkFBK0I7UUFDM0MxRixPQUFPLEVBQUVzRixjQUFjLENBQUN0RixPQUE4QjtRQUN0RDFCLE9BQU8sRUFBRWdILGNBQWMsQ0FBQzlEO01BQTRDLENBQ3BFLENBQUM7SUFFSjtFQUNEO0VBRUEsU0FBUzJFLGFBQWFBLENBQ3JCYixjQUE4QixFQUM5QjVJLEtBQTJCLEVBQzNCNkksZ0JBQWdELEVBQ2hENUksY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUNUO0lBQ2pDLE1BQU1xSCxpQkFBaUIsR0FBR0QsZ0JBQWdCLENBQUNFLElBQUk7SUFDL0MsTUFBTUMsVUFBVSxHQUFHaEosS0FBSyxDQUFDaUosaUJBQWlCLENBQUMsdUJBQXVCLEVBQUU1SSxTQUFTLEVBQUV5SSxpQkFBaUIsQ0FBQztJQUNqRyxNQUFNWSxNQUFNLEdBQUcxSixLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ3VILFFBQVEsQ0FBRUQsTUFBTTtJQUM3RCxNQUFNRSx5QkFBeUIsR0FBRzVKLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDeUgsZ0JBQWdCLEtBQUt4SixTQUFTO0lBRTlGLE1BQU15RyxTQUFTLEdBQUc0QyxNQUFNLENBQUN6QyxHQUFHLENBQUMsQ0FBQzZDLFlBQVksRUFBRUMsS0FBSyxLQUFLO01BQ3JELE1BQU1DLFNBQVMsR0FBRyxDQUFDL0osY0FBYyxHQUFHLEVBQUUsR0FBRyxjQUFjO01BRXZELE1BQU1nSyxTQUFTLEdBQUdMLHlCQUF5QixHQUN4Q00sUUFBUSxDQUFDeEIsV0FBVyxDQUFDLEdBQUdzQixTQUFTLDJCQUEyQkQsS0FBSyxFQUFFLEVBQUUsVUFBVSxDQUFDLEVBQUUsS0FBSyxDQUFDLEdBQ3hGMUosU0FBUztNQUNaLE1BQU0rQyxFQUFFLEdBQUduRCxjQUFjLEdBQ3RCNEMsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUVnSCxZQUFZLENBQUNLLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxHQUM5RHRILFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFZ0gsWUFBWSxDQUFDSyxLQUFLLENBQUMsQ0FBQztNQUNsRCxPQUNDbkgsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRUEsRUFBRztRQUNQRixJQUFJLEVBQUU0RyxZQUFZLENBQUM1RyxJQUFLO1FBQ3hCdEIsT0FBTyxFQUFFcUksU0FBUyxHQUFHMUgsaUJBQWlCLENBQUMwSCxTQUFTLENBQUMsR0FBRzVKLFNBQVU7UUFDOURnRCxLQUFLLEVBQUU1QixlQUFlLENBQUMySSw2QkFBNkIsQ0FBQ0wsS0FBSyxFQUFFOUosY0FBYztNQUFFLENBQzVFLENBQUM7SUFFSixDQUFDLENBQUM7SUFFRixJQUFJQSxjQUFjLEVBQUU7TUFDbkIsT0FDQytDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ25FRyxJQUFJLEVBQUU4RixVQUFXO1FBQ2pCMUYsT0FBTyxFQUFFc0YsY0FBYyxDQUFDdEYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUVnSCxjQUFjLENBQUM5RCxxQkFBNEM7UUFBQXZCLFFBQUEsRUFFbkU7VUFDQTJFLEtBQUssRUFBRXBCLFNBQVMsS0FBS3pHLFNBQVMsSUFBSXlHLFNBQVMsQ0FBQ2xELE1BQU0sR0FBRyxDQUFDLEdBQUdrRCxTQUFTLEdBQUd6RztRQUN0RTtNQUFDLENBQ1EsQ0FBQztJQUViO0lBRUEsT0FDQzJDLElBQUEsQ0FBQ3NELG1CQUFtQjtNQUFDbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO01BQUMsaUJBQWMsb0JBQW9CO01BQUFRLFFBQUEsRUFDbElQLElBQUEsQ0FBQ29FLFVBQVU7UUFDVmxFLElBQUksRUFBRThGLFVBQVc7UUFDakJ4RSxJQUFJLEVBQUVpQixVQUFVLENBQUNDLFdBQVk7UUFDN0IyQixZQUFZLEVBQUMsYUFBYTtRQUMxQmpFLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLENBQUMsQ0FBRTtRQUNwRE8sT0FBTyxFQUFFc0YsY0FBYyxDQUFDdEYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUVnSCxjQUFjLENBQUNoSCxPQUE4QjtRQUFBMkIsUUFBQSxFQUVyRDtVQUNBQyxVQUFVLEVBQUUsQ0FBQ0MsZ0JBQWdCLENBQUMsVUFBVSxFQUFFWixRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRThGLGNBQWMsQ0FBQzdGLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztVQUMzRmdFLElBQUksRUFBRS9ELElBQUEsQ0FBQzhFLElBQUk7WUFBQXZFLFFBQUEsRUFBRXVEO1VBQVMsQ0FBTyxDQUFDO1VBQzlCbkIsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO1lBQ3pCQyxRQUFRLEVBQUUrQyxjQUFjLENBQUMvQyxRQUFTO1lBQ2xDQyxLQUFLLEVBQUU4QyxjQUFjLENBQUM5QztVQUFNLENBQ0Q7UUFFOUI7TUFBQyxDQUNVO0lBQUMsQ0FDTyxDQUFDO0VBRXhCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTdUUsZUFBZUEsQ0FDdkJ6QixjQUE4QixFQUM5QjVJLEtBQTJCLEVBQzNCQyxjQUF1QixFQUN2QjRJLGdCQUFnRCxFQUNmO0lBQ2pDLE1BQU1DLGlCQUFpQixHQUFHRCxnQkFBZ0IsQ0FBQ0UsSUFBSTtJQUMvQyxNQUFNQyxVQUFVLEdBQUdoSixLQUFLLENBQUNpSixpQkFBaUIsQ0FBQyx1QkFBdUIsRUFBRTVJLFNBQVMsRUFBRXlJLGlCQUFpQixDQUFDO0lBQ2pHLElBQUksQ0FBQzdJLGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFDbkJsRCxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFDM0UsaUJBQWMsb0JBQW9CO1FBQUFRLFFBQUEsRUFFbENQLElBQUEsQ0FBQ3NDLE1BQU07VUFDTmxDLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUU4RixjQUFjLENBQUM3RixHQUFHLENBQUMsQ0FBRTtVQUNwREcsSUFBSSxFQUFFOEYsVUFBVztVQUNqQixlQUFZLHVCQUF1QjtVQUNuQ3hFLElBQUksRUFBRWlCLFVBQVUsQ0FBQ0MsV0FBWTtVQUM3QnBDLE9BQU8sRUFBRXNGLGNBQWMsQ0FBQ3RGLE9BQThCO1VBQ3REMUIsT0FBTyxFQUFFZ0gsY0FBYyxDQUFDaEgsT0FBOEI7VUFDdEQyRCxZQUFZLEVBQUMsUUFBUTtVQUFBaEMsUUFBQSxFQUVwQjtZQUNBb0MsVUFBVSxFQUNUM0MsSUFBQSxDQUFDNEMseUJBQXlCO2NBQ3pCQyxRQUFRLEVBQUUrQyxjQUFjLENBQUMvQyxRQUFTO2NBQ2xDQyxLQUFLLEVBQUU4QyxjQUFjLENBQUM5QztZQUFNLENBQ0Q7VUFFOUI7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFOEYsY0FBYyxDQUFDN0YsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ25FRyxJQUFJLEVBQUU4RixVQUFXO1FBQ2pCLGVBQVksb0NBQW9DO1FBQ2hEMUYsT0FBTyxFQUFFc0YsY0FBYyxDQUFDdEYsT0FBOEI7UUFDdEQxQixPQUFPLEVBQUVnSCxjQUFjLENBQUM5RDtNQUE0QyxDQUNwRSxDQUFDO0lBRUo7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTd0YsaUJBQWlCQSxDQUN6QnhLLE1BQXNCLEVBQ3RCRSxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJ3QixlQUEwQyxFQUMxQ29ILGdCQUFnRCxFQUNrQjtJQUNsRSxJQUFJL0ksTUFBTSxDQUFDeUssV0FBVyxLQUFLLE9BQU8sRUFBRTtNQUNuQyxPQUFPbEssU0FBUztJQUNqQjtJQUNBLElBQUlMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDQyx1QkFBdUIsRUFBRUMsc0JBQXNCLElBQUl4QyxNQUFNLENBQUNpRCxHQUFHLEtBQUt5SCxrQkFBa0IsQ0FBQ0MsTUFBTSxFQUFFO01BQzlIM0ssTUFBTSxHQUFHdUcsU0FBUyxDQUFDdkcsTUFBTSxDQUFDO01BQzFCQSxNQUFNLENBQUM4QixPQUFPLEdBQUdXLGlCQUFpQixDQUFDQyxHQUFHLENBQUNHLG9CQUFvQixDQUFDN0MsTUFBTSxDQUFDOEIsT0FBTyxJQUFJLEVBQUUsQ0FBQyxFQUFFYSxFQUFFLENBQUNDLG9CQUFvQixDQUFDLENBQUM7TUFDNUc1QyxNQUFNLENBQUNnRixxQkFBcUIsR0FBR3ZDLGlCQUFpQixDQUMvQ0MsR0FBRyxDQUFDRyxvQkFBb0IsQ0FBQzdDLE1BQU0sQ0FBQ2dGLHFCQUFxQixJQUFJLEVBQUUsQ0FBQyxFQUFFckMsRUFBRSxDQUFDQyxvQkFBb0IsQ0FDdEYsQ0FBQztJQUNGO0lBRUEsUUFBUTVDLE1BQU0sQ0FBQ2lELEdBQUc7TUFDakIsS0FBS3lILGtCQUFrQixDQUFDQyxNQUFNO1FBQzdCLElBQ0MsQ0FBQ3pLLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ29ILFVBQVUsQ0FBQ3VCLDhCQUE4QjtRQUNoRTtRQUNDMUssS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNvQyxJQUFJLEtBQUssV0FBVyxJQUFJdkUsY0FBZSxFQUNyRTtVQUNELE9BQU9JLFNBQVM7UUFDakIsQ0FBQyxNQUFNLElBQUlMLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ0ssT0FBTyxDQUFDdUgsUUFBUSxFQUFFO1VBQ2xELE9BQU9GLGFBQWEsQ0FBQzNKLE1BQU0sRUFBRUUsS0FBSyxFQUFFNkksZ0JBQWdCLEVBQUU1SSxjQUFjLEVBQUV3QixlQUFlLENBQUM7UUFDdkYsQ0FBQyxNQUFNO1VBQ04sT0FBT2tILGVBQWUsQ0FBQzdJLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUU0SSxnQkFBZ0IsQ0FBQztRQUN4RTtNQUVELEtBQUsyQixrQkFBa0IsQ0FBQ0csTUFBTTtRQUM3QixPQUFPTixlQUFlLENBQUN2SyxNQUFNLEVBQUVFLEtBQUssRUFBRUMsY0FBYyxFQUFFNEksZ0JBQWdCLENBQUM7TUFDeEUsS0FBSzJCLGtCQUFrQixDQUFDSSxHQUFHO1FBQzFCLE9BQU9DLFlBQVksQ0FBQy9LLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFDbkQsS0FBS3VLLGtCQUFrQixDQUFDTSxJQUFJO1FBQzNCLE9BQU9DLGFBQWEsQ0FBQ2pMLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFDcEQsS0FBS3VLLGtCQUFrQixDQUFDUSxLQUFLO1FBQzVCLE9BQU9DLGNBQWMsQ0FBQ25MLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLENBQUM7TUFFckQsS0FBS3VLLGtCQUFrQixDQUFDVSxRQUFRO1FBQy9CLElBQUlsTCxLQUFLLENBQUMrQixlQUFlLENBQUNvSCxVQUFVLENBQUN1Qiw4QkFBOEIsRUFBRTtVQUNwRSxJQUFJLENBQUN6SyxjQUFjLEVBQUU7WUFDcEI7WUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO2NBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO2NBQ25FLGlCQUFjLG9CQUFvQjtjQUFBUSxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO2dCQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsQ0FBQyxDQUFFO2dCQUM1Q0csSUFBSSxFQUFDLHVDQUF1QztnQkFDNUNHLEtBQUssRUFBRTVCLGVBQWUsQ0FBQzBKLDZCQUE2QixDQUFDLEtBQUssQ0FBRTtnQkFDNUQ3SCxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtnQkFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUE4QjtnQkFBQTJCLFFBQUEsRUFFN0M7a0JBQ0FvQyxVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7b0JBQ3pCQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO29CQUMxQkMsS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0c7a0JBQU0sQ0FDTztnQkFFOUI7Y0FBQyxDQUNNO1lBQUMsQ0FDVyxDQUFDO1VBRXhCLENBQUMsTUFBTTtZQUNOO1lBQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtjQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO2NBQzNERyxJQUFJLEVBQUMsdUNBQXVDO2NBQzVDRyxLQUFLLEVBQUU1QixlQUFlLENBQUMwSiw2QkFBNkIsQ0FBQyxJQUFJLENBQUU7Y0FDM0Q3SCxPQUFPLEVBQUV4RCxNQUFNLENBQUNrRyxxQkFBNEM7Y0FDNURwRSxPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtZQUE0QyxDQUM1RCxDQUFDO1VBRUo7UUFDRDtRQUNBLE9BQU96RSxTQUFTO01BRWpCLEtBQUttSyxrQkFBa0IsQ0FBQ1ksUUFBUTtRQUMvQixJQUFJLENBQUNuTCxjQUFjLEVBQUU7VUFDcEI7VUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1lBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1lBQ25FLGlCQUFlakQsTUFBTSxDQUFDd0QsT0FBTyxLQUFLLE1BQU0sSUFBSXhELE1BQU0sQ0FBQ3dELE9BQU8sS0FBSyxPQUFPLEdBQUdqRCxTQUFTLEdBQUcsMEJBQTJCO1lBQ2hIaUQsT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBUTtZQUFBQyxRQUFBLEVBRXhCUCxJQUFBLENBQUNzQyxNQUFNO2NBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxDQUFDLENBQUU7Y0FDNUNHLElBQUksRUFBQyxzQ0FBc0M7Y0FDM0NHLEtBQUssRUFBRTVCLGVBQWUsQ0FBQzRKLHNCQUF1QjtjQUM5Qy9ILE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO2NBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7Y0FBQTJCLFFBQUEsRUFFN0M7Z0JBQ0FvQyxVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7a0JBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVEsSUFBSSxnQkFBaUI7a0JBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO2dCQUFNLENBQUU7Y0FFbEc7WUFBQyxDQUNNO1VBQUMsQ0FDVyxDQUFDO1FBRXhCO1FBQ0EsT0FBT3pGLFNBQVM7TUFFakIsS0FBS21LLGtCQUFrQixDQUFDYyxNQUFNO01BQzlCLEtBQUtkLGtCQUFrQixDQUFDZSxRQUFRO1FBQy9CLE9BQU9DLG1CQUFtQixDQUFDMUwsTUFBTSxFQUFFRSxLQUFLLEVBQUVDLGNBQWMsQ0FBQztNQUUxRDtRQUNDLE9BQU9JLFNBQVM7SUFDbEI7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTb0wsVUFBVUEsQ0FDekJ6TCxLQUEyQixFQUMzQkMsY0FBdUIsRUFDdkJFLFVBQXFDLEVBQ3JDRCxpQkFBMEIsRUFDMUIySSxnQkFBZ0QsRUFDVTtJQUMxRCxPQUFPN0ksS0FBSyxDQUFDK0IsZUFBZSxDQUFDMkosT0FBTyxDQUNsQ3pFLEdBQUcsQ0FBRW5ILE1BQU0sSUFBSztNQUNoQixRQUFRQSxNQUFNLENBQUMwRSxJQUFJO1FBQ2xCLEtBQUttSCxVQUFVLENBQUNDLFFBQVE7VUFDdkIsT0FBT3RCLGlCQUFpQixDQUFDeEssTUFBTSxFQUFvQkUsS0FBSyxFQUFFQyxjQUFjLEVBQUVFLFVBQVUsQ0FBQ3NCLGVBQWUsRUFBRW9ILGdCQUFnQixDQUFDO1FBQ3hILEtBQUs4QyxVQUFVLENBQUNiLElBQUk7VUFDbkIsT0FBT3pDLGFBQWEsQ0FBQ3ZJLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxjQUFjLEVBQUVDLGlCQUFpQixFQUFFQyxVQUFVLENBQUM7UUFDbkY7VUFDQyxPQUFPaUksU0FBUyxDQUFDdEksTUFBTSxFQUFFRSxLQUFLLEVBQUVDLGNBQWMsRUFBRUMsaUJBQWlCLEVBQUVDLFVBQVUsQ0FBQztNQUNoRjtJQUNELENBQUMsQ0FBQyxDQUNENkcsTUFBTSxDQUFFbEgsTUFBTSxJQUFLQSxNQUFNLEtBQUtPLFNBQVMsQ0FBQztFQUMzQzs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBUEF3TCxRQUFBLENBQUFKLFVBQUEsR0FBQUEsVUFBQTtFQVFBLFNBQVNLLGNBQWNBLENBQ3RCQyxjQUF1QixFQUN2QkMsV0FBK0IsRUFDL0JDLHlCQUFrQyxFQUNsQ0MsWUFBcUIsRUFDYTtJQUNsQyxJQUFJSCxjQUFjLEVBQUU7TUFDbkIsT0FDQy9JLElBQUEsQ0FBQ3NELG1CQUFtQjtRQUNuQmxELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUNtSixXQUFXLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUNuREcsS0FBSyxFQUFDLDhCQUE4QjtRQUNwQyxpQkFBYyxvQkFBb0I7UUFBQTVJLFFBQUEsRUFFakM7VUFDQXpELE1BQU0sRUFBRWtELElBQUEsQ0FBQ29KLGdCQUFnQjtZQUFDaEosRUFBRSxFQUFFNEksV0FBWTtZQUFDSyxpQkFBaUIsRUFBRUoseUJBQTBCO1lBQUMzSSxPQUFPLEVBQUU0STtVQUFhLENBQUU7UUFDbEg7TUFBQyxDQUNtQixDQUFDO0lBRXhCO0lBQ0EsT0FBTzdMLFNBQVM7RUFDakI7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNpTSxhQUFhQSxDQUFDdE0sS0FBMkIsRUFBbUM7SUFDcEYsSUFBSUEsS0FBSyxDQUFDK0IsZUFBZSxDQUFDSyxPQUFPLENBQUNtSyxnQkFBZ0IsRUFBRTtNQUNuRCxPQUNDdkosSUFBQSxDQUFDc0QsbUJBQW1CO1FBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtRQUN2RnFKLEtBQUssRUFBQyw2QkFBNkI7UUFDbkMsaUJBQWMsb0JBQW9CO1FBQUE1SSxRQUFBLEVBRWpDO1VBQ0F6RCxNQUFNLEVBQUVrRCxJQUFBLENBQUN3SixxQkFBcUI7WUFBQ3BKLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsWUFBWSxDQUFDO1VBQUUsQ0FBRTtRQUNsRztNQUFDLENBQ21CLENBQUM7SUFFeEI7SUFDQSxPQUFPekMsU0FBUztFQUNqQjs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVN3SyxZQUFZQSxDQUFDL0ssTUFBc0IsRUFBRUUsS0FBMkIsRUFBMEQ7SUFBQSxJQUF4REMsY0FBYyxHQUFBMEQsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXRELFNBQUEsR0FBQXNELFNBQUEsTUFBRyxLQUFLO0lBQ2hHLElBQUksQ0FBQzFELGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFBQ2xELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFBQyxpQkFBYyxvQkFBb0I7UUFBQVMsUUFBQSxFQUNySFAsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBRTtVQUN2Q0ksSUFBSSxFQUFDLDJCQUEyQjtVQUNoQyxlQUFZLGVBQWU7VUFDM0JJLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7VUFBQTJCLFFBQUEsRUFFN0M7WUFDQW9DLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2NBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBRTtRQUN0REksSUFBSSxFQUFDLDJCQUEyQjtRQUNoQyxlQUFZLDRCQUE0QjtRQUN4Q0ksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7UUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtNQUE0QyxDQUM1RCxDQUFDO0lBRUo7RUFDRDs7RUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQUNBLFNBQVNpRyxhQUFhQSxDQUFDakwsTUFBc0IsRUFBRUUsS0FBMkIsRUFBMEQ7SUFBQSxJQUF4REMsY0FBYyxHQUFBMEQsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXRELFNBQUEsR0FBQXNELFNBQUEsTUFBRyxLQUFLO0lBQ2pHLElBQUksQ0FBQzFELGNBQWMsRUFBRTtNQUNwQjtNQUNBLE9BQ0MrQyxJQUFBLENBQUNzRCxtQkFBbUI7UUFBQ2xELEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixDQUFDLENBQUU7UUFBQyxpQkFBYyxvQkFBb0I7UUFBQVMsUUFBQSxFQUN0SFAsSUFBQSxDQUFDc0MsTUFBTTtVQUNObEMsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxNQUFNLENBQUMsQ0FBRTtVQUN4Q0ksSUFBSSxFQUFDLDRCQUE0QjtVQUNqQyxlQUFZLGdCQUFnQjtVQUM1QkksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7VUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUM4QixPQUE4QjtVQUFBMkIsUUFBQSxFQUU3QztZQUNBb0MsVUFBVSxFQUFFM0MsSUFBQSxDQUFDNEMseUJBQXlCO2NBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVM7Y0FBQ0MsS0FBSyxFQUFFaEcsTUFBTSxDQUFDZ0c7WUFBTSxDQUE0QjtVQUNuSDtRQUFDLENBQ007TUFBQyxDQUNXLENBQUM7SUFFeEIsQ0FBQyxNQUFNO01BQ047TUFDQSxPQUNDOUMsSUFBQSxDQUFDQyxRQUFRO1FBQ1JHLEVBQUUsRUFBRVAsUUFBUSxDQUFDLENBQUM3QyxLQUFLLENBQUM4QyxTQUFTLEVBQUUsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQ3ZESSxJQUFJLEVBQUMsNEJBQTRCO1FBQ2pDLGVBQVksNkJBQTZCO1FBQ3pDSSxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtRQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQ2dGO01BQTRDLENBQzVELENBQUM7SUFFSjtFQUNEO0VBRUEsU0FBUzBHLG1CQUFtQkEsQ0FBQzFMLE1BQXNCLEVBQUVFLEtBQTJCLEVBQUVDLGNBQXVCLEVBQWtDO0lBQzFJLE1BQU13TSxTQUFTLEdBQUczTSxNQUFNLENBQUNpRCxHQUFHLEtBQUt5SCxrQkFBa0IsQ0FBQ2MsTUFBTTtJQUMxRCxJQUFJLENBQUNyTCxjQUFjLEVBQUU7TUFDcEI7TUFDQSxPQUNDK0MsSUFBQSxDQUFDc0QsbUJBQW1CO1FBQ25CbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRWhELE1BQU0sQ0FBQ2lELEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxDQUFFO1FBQ25FTyxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUFRO1FBQ3hCLGlCQUFjLG9CQUFvQjtRQUFBQyxRQUFBLEVBRWxDUCxJQUFBLENBQUNzQyxNQUFNO1VBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxDQUFDLENBQUU7VUFDNUNHLElBQUksRUFBRXVKLFNBQVMsR0FBRywrQkFBK0IsR0FBRyxpQ0FBa0M7VUFDdEYsZUFBYUEsU0FBUyxHQUFHLDhCQUE4QixHQUFHLGdDQUFpQztVQUMzRm5KLE9BQU8sRUFBRXhELE1BQU0sQ0FBQ3dELE9BQThCO1VBQzlDMUIsT0FBTyxFQUFFOUIsTUFBTSxDQUFDOEIsT0FBOEI7VUFBQTJCLFFBQUEsRUFFN0M7WUFDQW9DLFVBQVUsRUFBRTNDLElBQUEsQ0FBQzRDLHlCQUF5QjtjQUFDQyxRQUFRLEVBQUUvRixNQUFNLENBQUMrRixRQUFTO2NBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO1lBQU0sQ0FBNEI7VUFDbkg7UUFBQyxDQUNNO01BQUMsQ0FDVyxDQUFDO0lBRXhCLENBQUMsTUFBTTtNQUNOO01BQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtRQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFaEQsTUFBTSxDQUFDaUQsR0FBRyxFQUFFLGFBQWEsQ0FBQyxDQUFFO1FBQzNERyxJQUFJLEVBQUV1SixTQUFTLEdBQUcsK0JBQStCLEdBQUcsaUNBQWtDO1FBQ3RGLGVBQWFBLFNBQVMsR0FBRywyQ0FBMkMsR0FBRyw2Q0FBOEM7UUFDckhuSixPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtRQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQ2dGO01BQTRDLENBQzVELENBQUM7SUFFSjtFQUNEO0VBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDQSxTQUFTbUcsY0FBY0EsQ0FDdEJuTCxNQUFzQixFQUN0QkUsS0FBMkIsRUFFa0I7SUFBQSxJQUQ3Q0MsY0FBYyxHQUFBMEQsU0FBQSxDQUFBQyxNQUFBLFFBQUFELFNBQUEsUUFBQXRELFNBQUEsR0FBQXNELFNBQUEsTUFBRyxLQUFLO0lBRXRCLE1BQU0rSSxTQUFTLEdBQUcxTSxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ29DLElBQUk7SUFDcEQsSUFBSWtJLFNBQVMsS0FBSyxXQUFXLEVBQUU7TUFDOUIsSUFBSSxDQUFDek0sY0FBYyxFQUFFO1FBQ3BCO1FBQ0EsT0FDQytDLElBQUEsQ0FBQ3NELG1CQUFtQjtVQUFDbEQsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRSxPQUFPLEVBQUUscUJBQXFCLENBQUMsQ0FBRTtVQUFDLGlCQUFjLG9CQUFvQjtVQUFBUyxRQUFBLEVBQ3ZIUCxJQUFBLENBQUNzQyxNQUFNO1lBQ05sQyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFFO1lBQ3pDSSxJQUFJLEVBQUMsdUJBQXVCO1lBQzVCLGVBQVksaUJBQWlCO1lBQzdCSSxPQUFPLEVBQUV4RCxNQUFNLENBQUN3RCxPQUE4QjtZQUM5QzFCLE9BQU8sRUFBRTlCLE1BQU0sQ0FBQzhCLE9BQThCO1lBQUEyQixRQUFBLEVBRTdDO2NBQ0FvQyxVQUFVLEVBQ1QzQyxJQUFBLENBQUM0Qyx5QkFBeUI7Z0JBQUNDLFFBQVEsRUFBRS9GLE1BQU0sQ0FBQytGLFFBQVM7Z0JBQUNDLEtBQUssRUFBRWhHLE1BQU0sQ0FBQ2dHO2NBQU0sQ0FBNEI7WUFFeEc7VUFBQyxDQUNNO1FBQUMsQ0FDVyxDQUFDO01BRXhCLENBQUMsTUFBTTtRQUNOO1FBQ0EsT0FDQzlDLElBQUEsQ0FBQ0MsUUFBUTtVQUNSRyxFQUFFLEVBQUVQLFFBQVEsQ0FBQyxDQUFDN0MsS0FBSyxDQUFDOEMsU0FBUyxFQUFFLE9BQU8sRUFBRSxhQUFhLENBQUMsQ0FBRTtVQUN4REksSUFBSSxFQUFDLHVCQUF1QjtVQUM1QixlQUFZLDhCQUE4QjtVQUMxQ0ksT0FBTyxFQUFFeEQsTUFBTSxDQUFDd0QsT0FBOEI7VUFDOUMxQixPQUFPLEVBQUU5QixNQUFNLENBQUNnRjtRQUE0QyxDQUM1RCxDQUFDO01BRUo7SUFDRDtJQUNBLE9BQU96RSxTQUFTO0VBQ2pCOztFQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7RUFDTyxTQUFTc00sdUJBQXVCQSxDQUN0QzNNLEtBQTJCLEVBQzNCRyxVQUFxQyxFQUNyQ0QsaUJBQTBCLEVBQzFCMkksZ0JBQWdELEVBQ3BDO0lBQ1osTUFBTW9ELHlCQUF5QixHQUFHVyxXQUFXLENBQUNDLFdBQVcsQ0FBQ2hFLGdCQUFnQixDQUFDLElBQUkrRCxXQUFXLENBQUNFLFdBQVcsQ0FBQ2pFLGdCQUFnQixDQUFDO0lBQ3hILElBQUlrRSxVQUFtQjtJQUN2QixJQUFJL00sS0FBSyxDQUFDa00sWUFBWSxLQUFLLEtBQUssRUFBRTtNQUNqQ2EsVUFBVSxHQUFHLEtBQUs7SUFDbkIsQ0FBQyxNQUFNO01BQ05BLFVBQVUsR0FBRy9NLEtBQUssQ0FBQytCLGVBQWUsQ0FBQ29ILFVBQVUsQ0FBQzRELFVBQVU7SUFDekQ7SUFFQSxNQUFNckIsT0FBZ0UsR0FBRyxFQUFFO0lBQzNFLE1BQU1zQixXQUFXLEdBQUdsQixjQUFjLENBQUMsQ0FBQyxDQUFDOUwsS0FBSyxDQUFDK0wsY0FBYyxFQUFFL0wsS0FBSyxDQUFDaU4sU0FBUyxFQUFFaEIseUJBQXlCLEVBQUVjLFVBQVUsQ0FBQztJQUNsSCxJQUFJQyxXQUFXLEVBQUU7TUFDaEJ0QixPQUFPLENBQUN6RCxJQUFJLENBQUMrRSxXQUFXLENBQUM7SUFDMUI7SUFDQXRCLE9BQU8sQ0FBQ3pELElBQUksQ0FBQyxHQUFHd0QsVUFBVSxDQUFDekwsS0FBSyxFQUFFLEtBQUssRUFBRUcsVUFBVSxFQUFFRCxpQkFBaUIsRUFBRTJJLGdCQUFnQixDQUFDLENBQUM7SUFDMUYsTUFBTXFFLFVBQVUsR0FBR1osYUFBYSxDQUFDdE0sS0FBSyxDQUFDO0lBQ3ZDLElBQUlrTixVQUFVLEVBQUU7TUFDZnhCLE9BQU8sQ0FBQ3pELElBQUksQ0FBQ2lGLFVBQVUsQ0FBQztJQUN6QjtJQUVBLE9BQU94QixPQUFPO0VBQ2Y7O0VBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtFQVBBRyxRQUFBLENBQUFjLHVCQUFBLEdBQUFBLHVCQUFBO0VBUU8sU0FBU1EsMkJBQTJCQSxDQUMxQ25OLEtBQTJCLEVBQzNCRyxVQUFxQyxFQUNyQ0QsaUJBQTBCLEVBQzFCMkksZ0JBQWdELEVBQ25DO0lBQ2IsTUFBTXpDLFFBQW9CLEdBQUdxRixVQUFVLENBQUN6TCxLQUFLLEVBQUUsSUFBSSxFQUFFRyxVQUFVLEVBQUVELGlCQUFpQixFQUFFMkksZ0JBQWdCLENBQTBCO0lBQzlILElBQUk3SSxLQUFLLENBQUMrQixlQUFlLENBQUNLLE9BQU8sQ0FBQ29DLElBQUksS0FBSyxXQUFXLEVBQUU7TUFDdkQ0QixRQUFRLENBQUM2QixJQUFJLENBQUNtRiwwQkFBMEIsQ0FBQ3BOLEtBQUssRUFBRSxJQUFJLEVBQUVHLFVBQVUsQ0FBQ3NCLGVBQWUsQ0FBQzRMLFVBQVUsQ0FBQyxDQUFDO01BQzdGakgsUUFBUSxDQUFDNkIsSUFBSSxDQUFDbUYsMEJBQTBCLENBQUNwTixLQUFLLEVBQUUsS0FBSyxFQUFFRyxVQUFVLENBQUNzQixlQUFlLENBQUM2TCxZQUFZLENBQUMsQ0FBQztJQUNqRztJQUNBLE9BQU9sSCxRQUFRO0VBQ2hCO0VBQUN5RixRQUFBLENBQUFzQiwyQkFBQSxHQUFBQSwyQkFBQTtFQUVELFNBQVNDLDBCQUEwQkEsQ0FBQ3BOLEtBQTJCLEVBQUV1TixNQUFlLEVBQUUvTCxZQUFvQyxFQUFZO0lBQ2pJLE1BQU1nTSxnQkFBZ0IsR0FBR0QsTUFBTSxHQUM1Qi9LLEdBQUcsQ0FDSGlHLEtBQUssQ0FBQ0MsV0FBVyxDQUFDLDBCQUEwQixFQUFFLFVBQVUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUNoRUQsS0FBSyxDQUFDQyxXQUFXLENBQUMsc0NBQXNDLEVBQUUsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUN4RSxDQUFDLEdBQ0RsRyxHQUFHLENBQ0hpRyxLQUFLLENBQUNDLFdBQVcsQ0FBQywyQkFBMkIsRUFBRSxVQUFVLENBQUMsRUFBRSxJQUFJLENBQUMsRUFDakVELEtBQUssQ0FBQ0MsV0FBVyxDQUFDLHNDQUFzQyxFQUFFLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FDeEUsQ0FBQztJQUNKLE9BQ0MxRixJQUFBLENBQUNDLFFBQVE7TUFDUkcsRUFBRSxFQUFFUCxRQUFRLENBQUMsQ0FBQzdDLEtBQUssQ0FBQzhDLFNBQVMsRUFBRXlLLE1BQU0sR0FBRyxRQUFRLEdBQUcsVUFBVSxFQUFFLGFBQWEsQ0FBQyxDQUFFO01BQy9FckssSUFBSSxFQUFFcUssTUFBTSxHQUFHLDBDQUEwQyxHQUFHLDRDQUE2QztNQUN6R2xLLEtBQUssRUFBRTdCLFlBQWE7TUFDcEJJLE9BQU8sRUFBRTRMO0lBQWlCLENBQzFCLENBQUM7RUFFSjtFQUFDLE9BQUEzQixRQUFBO0FBQUEiLCJpZ25vcmVMaXN0IjpbXX0=