@sapui5/sap.fe.controls 1.144.0 → 1.145.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/package.json +1 -1
  2. package/src/sap/fe/controls/.library +1 -1
  3. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.js +51 -25
  4. package/src/sap/fe/controls/easyFilter/EasyFilterBarContainer.tsx +32 -7
  5. package/src/sap/fe/controls/easyFilter/EasyFilterInput.js +13 -9
  6. package/src/sap/fe/controls/easyFilter/EasyFilterInput.tsx +14 -10
  7. package/src/sap/fe/controls/easyFilter/Token.js +3 -3
  8. package/src/sap/fe/controls/easyFilter/Token.tsx +2 -2
  9. package/src/sap/fe/controls/library.js +1 -1
  10. package/src/sap/fe/controls/messagebundle.properties +6 -10
  11. package/src/sap/fe/controls/messagebundle_ar.properties +15 -0
  12. package/src/sap/fe/controls/messagebundle_bg.properties +15 -0
  13. package/src/sap/fe/controls/messagebundle_ca.properties +15 -0
  14. package/src/sap/fe/controls/messagebundle_cnr.properties +15 -0
  15. package/src/sap/fe/controls/messagebundle_cs.properties +15 -0
  16. package/src/sap/fe/controls/messagebundle_cy.properties +15 -0
  17. package/src/sap/fe/controls/messagebundle_da.properties +15 -0
  18. package/src/sap/fe/controls/messagebundle_de.properties +19 -4
  19. package/src/sap/fe/controls/messagebundle_el.properties +15 -0
  20. package/src/sap/fe/controls/messagebundle_en.properties +15 -0
  21. package/src/sap/fe/controls/messagebundle_en_GB.properties +15 -0
  22. package/src/sap/fe/controls/messagebundle_es.properties +15 -0
  23. package/src/sap/fe/controls/messagebundle_es_MX.properties +16 -1
  24. package/src/sap/fe/controls/messagebundle_et.properties +15 -0
  25. package/src/sap/fe/controls/messagebundle_fi.properties +15 -0
  26. package/src/sap/fe/controls/messagebundle_fr.properties +15 -0
  27. package/src/sap/fe/controls/messagebundle_fr_CA.properties +17 -2
  28. package/src/sap/fe/controls/messagebundle_hi.properties +15 -0
  29. package/src/sap/fe/controls/messagebundle_hr.properties +15 -0
  30. package/src/sap/fe/controls/messagebundle_hu.properties +15 -0
  31. package/src/sap/fe/controls/messagebundle_id.properties +15 -0
  32. package/src/sap/fe/controls/messagebundle_it.properties +15 -0
  33. package/src/sap/fe/controls/messagebundle_iw.properties +15 -0
  34. package/src/sap/fe/controls/messagebundle_ja.properties +15 -0
  35. package/src/sap/fe/controls/messagebundle_kk.properties +15 -0
  36. package/src/sap/fe/controls/messagebundle_ko.properties +15 -0
  37. package/src/sap/fe/controls/messagebundle_lt.properties +15 -0
  38. package/src/sap/fe/controls/messagebundle_lv.properties +15 -0
  39. package/src/sap/fe/controls/messagebundle_mk.properties +15 -0
  40. package/src/sap/fe/controls/messagebundle_ms.properties +15 -0
  41. package/src/sap/fe/controls/messagebundle_nl.properties +15 -0
  42. package/src/sap/fe/controls/messagebundle_no.properties +16 -1
  43. package/src/sap/fe/controls/messagebundle_pl.properties +15 -0
  44. package/src/sap/fe/controls/messagebundle_pt.properties +15 -0
  45. package/src/sap/fe/controls/messagebundle_pt_PT.properties +15 -0
  46. package/src/sap/fe/controls/messagebundle_ro.properties +15 -0
  47. package/src/sap/fe/controls/messagebundle_ru.properties +15 -0
  48. package/src/sap/fe/controls/messagebundle_sh.properties +15 -0
  49. package/src/sap/fe/controls/messagebundle_sk.properties +15 -0
  50. package/src/sap/fe/controls/messagebundle_sl.properties +15 -0
  51. package/src/sap/fe/controls/messagebundle_sr.properties +15 -0
  52. package/src/sap/fe/controls/messagebundle_sv.properties +15 -0
  53. package/src/sap/fe/controls/messagebundle_th.properties +15 -0
  54. package/src/sap/fe/controls/messagebundle_tr.properties +15 -0
  55. package/src/sap/fe/controls/messagebundle_uk.properties +15 -0
  56. package/src/sap/fe/controls/messagebundle_vi.properties +15 -0
  57. package/src/sap/fe/controls/messagebundle_zh_CN.properties +15 -0
  58. package/src/sap/fe/controls/messagebundle_zh_TW.properties +15 -0
  59. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.js +24 -16
  60. package/src/sap/fe/controls/shortcuts/ShortcutExplanationProvider.tsx +38 -17
  61. package/src/sap/fe/controls/easyFilter/AINotice.js +0 -90
  62. package/src/sap/fe/controls/easyFilter/AINotice.tsx +0 -101
@@ -2,10 +2,10 @@
2
2
  * SAP UI development toolkit for HTML5 (SAPUI5)
3
3
  * (c) Copyright 2009-2025 SAP SE. All rights reserved
4
4
  */
5
- sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./AINotice", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, MessageType, FilterOperator, FESRHelper, $AINotice, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
5
+ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runtime/jsx", "sap/fe/controls/easyFilter/Token", "sap/m/Button", "sap/m/FlexBox", "sap/m/Popover", "sap/m/Tokenizer", "sap/m/VBox", "sap/m/library", "sap/ui/core/Control", "sap/ui/core/CustomData", "sap/ui/core/Lib", "sap/ui/core/library", "sap/base/util/deepClone", "sap/fe/base/BindingToolkit", "sap/fe/controls/easyFilter/EasyFilterInput", "sap/m/HBox", "sap/m/MessageStrip", "sap/m/MessageToast", "sap/m/OverflowToolbar", "sap/m/ToggleButton", "sap/m/ToolbarSpacer", "sap/ui/core/InvisibleMessage", "sap/ui/core/message/MessageType", "sap/ui/model/FilterOperator", "sap/ui/performance/trace/FESRHelper", "./PXFeedback", "./utils", "sap/fe/base/jsx-runtime/jsx", "sap/fe/base/jsx-runtime/Fragment", "sap/fe/base/jsx-runtime/jsxs"], function (Log, ClassSupport, jsx, Token, Button, FlexBox, Popover, Tokenizer, VBox, library, Control, CustomData, Lib, coreLibrary, deepClone, BindingToolkit, EasyFilterInput, HBox, MessageStrip, MessageToast, OverflowToolbar, ToggleButton, ToolbarSpacer, InvisibleMessage, MessageType, FilterOperator, FESRHelper, PXFeedback, EasyFilterUtils, _jsx, _Fragment, _jsxs) {
6
6
  "use strict";
7
7
 
8
- var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16;
8
+ var _dec, _dec2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _dec9, _dec10, _dec11, _dec12, _dec13, _dec14, _dec15, _dec16, _dec17, _dec18, _class, _class2, _descriptor, _descriptor2, _descriptor3, _descriptor4, _descriptor5, _descriptor6, _descriptor7, _descriptor8, _descriptor9, _descriptor10, _descriptor11, _descriptor12, _descriptor13, _descriptor14, _descriptor15, _descriptor16, _descriptor17;
9
9
  function __ui5_require_async(path) {
10
10
  return new Promise((resolve, reject) => {
11
11
  sap.ui.require([path], module => {
@@ -25,11 +25,11 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
25
25
  }
26
26
  var _exports = {};
27
27
  var triggerPXIntegration = PXFeedback.triggerPXIntegration;
28
- var AINotice = $AINotice.AINotice;
29
28
  var not = BindingToolkit.not;
30
29
  var bindState = BindingToolkit.bindState;
31
30
  var and = BindingToolkit.and;
32
31
  var ValueState = coreLibrary.ValueState;
32
+ var InvisibleMessageMode = coreLibrary.InvisibleMessageMode;
33
33
  var TokenizerRenderMode = library.TokenizerRenderMode;
34
34
  var PlacementType = library.PlacementType;
35
35
  var FlexWrap = library.FlexWrap;
@@ -69,7 +69,9 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
69
69
  type: "function"
70
70
  }), _dec8 = defineReference(), _dec9 = defineReference(), _dec10 = aggregation({
71
71
  type: "sap.ui.core.Control"
72
- }), _dec11 = event(), _dec12 = event(), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
72
+ }), _dec11 = aggregation({
73
+ type: "sap.ui.core.Control"
74
+ }), _dec12 = event(), _dec13 = event(), _dec14 = event(), _dec15 = event(), _dec16 = event(), _dec17 = event(), _dec18 = defineState(), _dec(_class = (_class2 = /*#__PURE__*/function (_Control) {
73
75
  function EasyFilterBarContainer(properties, others) {
74
76
  var _this;
75
77
  _this = _Control.call(this, properties, others) || this;
@@ -82,19 +84,22 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
82
84
  _initializerDefineProperty(_this, "easyFilterInput", _descriptor7, _this);
83
85
  _initializerDefineProperty(_this, "tokenizer", _descriptor8, _this);
84
86
  _initializerDefineProperty(_this, "content", _descriptor9, _this);
85
- _initializerDefineProperty(_this, "tokensChanged", _descriptor10, _this);
86
- _initializerDefineProperty(_this, "queryChanged", _descriptor11, _this);
87
- _initializerDefineProperty(_this, "showValueHelp", _descriptor12, _this);
88
- _initializerDefineProperty(_this, "clearFilters", _descriptor13, _this);
89
- _initializerDefineProperty(_this, "beforeQueryProcessing", _descriptor14, _this);
90
- _initializerDefineProperty(_this, "afterQueryProcessing", _descriptor15, _this);
91
- _initializerDefineProperty(_this, "state", _descriptor16, _this);
87
+ _initializerDefineProperty(_this, "aiNotice", _descriptor10, _this);
88
+ _initializerDefineProperty(_this, "tokensChanged", _descriptor11, _this);
89
+ _initializerDefineProperty(_this, "queryChanged", _descriptor12, _this);
90
+ _initializerDefineProperty(_this, "showValueHelp", _descriptor13, _this);
91
+ _initializerDefineProperty(_this, "clearFilters", _descriptor14, _this);
92
+ _initializerDefineProperty(_this, "beforeQueryProcessing", _descriptor15, _this);
93
+ _initializerDefineProperty(_this, "afterQueryProcessing", _descriptor16, _this);
94
+ _initializerDefineProperty(_this, "state", _descriptor17, _this);
92
95
  _this.shouldTokenChangeEventFired = true;
96
+ _this.isResettingToDefaultTokens = false;
93
97
  _this.inputFieldReady = new Promise(resolve => {
94
98
  _this.resolveContentReady = resolve;
95
99
  });
96
100
  _this.shouldMessageStripRemove = true;
97
101
  _this.initialize();
102
+ _this.invisibleMessage = InvisibleMessage.getInstance();
98
103
  return _this;
99
104
  }
100
105
  _exports = EasyFilterBarContainer;
@@ -244,6 +249,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
244
249
  // error
245
250
  this.removeNonMandatoryTokens();
246
251
  this.setMessageStrip(easyFilterResult.message);
252
+ this.invisibleMessage.announce(this.resourceBundle.getText(easyFilterResult.message), InvisibleMessageMode.Assertive);
247
253
  this.state.messageStripType = MessageType.Warning;
248
254
  Log.error("Error while generating filter criteria: ", easyFilterResult.message);
249
255
  }
@@ -424,7 +430,8 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
424
430
  if (changedProps.includes("tokens")) {
425
431
  if (this.shouldTokenChangeEventFired) {
426
432
  this.fireEvent("tokensChanged", {
427
- tokens: this.formatTokens(this.state.tokens)
433
+ tokens: this.formatTokens(this.state.tokens),
434
+ reset: this.isResettingToDefaultTokens
428
435
  });
429
436
  }
430
437
  this.state.showResult = this.state.tokens.length > 0;
@@ -446,6 +453,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
446
453
  //Resetting to default values
447
454
  this.isMandatoryCheckRequired = false;
448
455
  this.shouldTokenChangeEventFired = true;
456
+ this.isResettingToDefaultTokens = false;
449
457
 
450
458
  // onsapfocusleave method in sap.m.Tokenizer is automatically converting the rendermode of tokenizer to "Narrow" from "loose"
451
459
  // In this process there are multiple popover issues happening
@@ -549,9 +557,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
549
557
  renderType: "Bare",
550
558
  alignItems: FlexAlignItems.Center,
551
559
  wrap: FlexWrap.Wrap,
552
- children: [_jsx(AINotice, {
553
- resourceBundle: this.resourceBundle
554
- }), _jsx(Tokenizer, {
560
+ children: [this.aiNotice?.clone(), _jsx(Tokenizer, {
555
561
  editable: and(bindState(this.state, "tokenizerEditable"), true),
556
562
  class: "sapFeControlsTokenizer",
557
563
  tokens: bindState(this.state, "tokens"),
@@ -592,7 +598,7 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
592
598
  text: this.resourceBundle.getText("M_EASY_FILTER_RESET"),
593
599
  type: ButtonType.Transparent,
594
600
  press: () => {
595
- this.resetState();
601
+ this.resetState(true, true);
596
602
  //Retaining the focus on popover doesn't make the popover close on every interaction
597
603
  this.easyFilterInput.current?.$searchInput.focus();
598
604
  }
@@ -641,11 +647,26 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
641
647
  currentInputValue = currentInputPlaceholder;
642
648
  }
643
649
  await this.onGoPress(currentInputValue);
644
- };
650
+ }
651
+
652
+ /**
653
+ * Resets the state of the EasyFilterBarContainer to its initial configuration.
654
+ *
655
+ * This method performs the following actions:
656
+ * - Clears all non-mandatory tokens and resets mandatory tokens to their default values
657
+ * - Resets the input field to its default placeholder text
658
+ * - Clears all error value states and messages from tokens
659
+ * - Clears any displayed message strips
660
+ * - Optionally fires the clearFilters event to notify consumers
661
+ * @param clearAllFilters If true, fires the clearFilters event to notify consumers that filters should be cleared else just resets the tokens without firing the event
662
+ * @param isResettingToDefaultTokens If true, indicates that the resetButton is restoring tokens to their default values
663
+ */;
645
664
  _proto.resetState = function resetState() {
646
665
  let clearAllFilters = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
666
+ let isResettingToDefaultTokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
647
667
  if (clearAllFilters) {
648
668
  this.fireEvent("clearFilters");
669
+ this.isResettingToDefaultTokens = isResettingToDefaultTokens;
649
670
  } else {
650
671
  this.shouldTokenChangeEventFired = false;
651
672
  }
@@ -801,37 +822,42 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
801
822
  enumerable: true,
802
823
  writable: true,
803
824
  initializer: null
804
- }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "tokensChanged", [_dec11], {
825
+ }), _descriptor10 = _applyDecoratedDescriptor(_class2.prototype, "aiNotice", [_dec11], {
826
+ configurable: true,
827
+ enumerable: true,
828
+ writable: true,
829
+ initializer: null
830
+ }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "tokensChanged", [_dec12], {
805
831
  configurable: true,
806
832
  enumerable: true,
807
833
  writable: true,
808
834
  initializer: null
809
- }), _descriptor11 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec12], {
835
+ }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "queryChanged", [_dec13], {
810
836
  configurable: true,
811
837
  enumerable: true,
812
838
  writable: true,
813
839
  initializer: null
814
- }), _descriptor12 = _applyDecoratedDescriptor(_class2.prototype, "showValueHelp", [_dec13], {
840
+ }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "showValueHelp", [_dec14], {
815
841
  configurable: true,
816
842
  enumerable: true,
817
843
  writable: true,
818
844
  initializer: null
819
- }), _descriptor13 = _applyDecoratedDescriptor(_class2.prototype, "clearFilters", [_dec14], {
845
+ }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "clearFilters", [_dec15], {
820
846
  configurable: true,
821
847
  enumerable: true,
822
848
  writable: true,
823
849
  initializer: null
824
- }), _descriptor14 = _applyDecoratedDescriptor(_class2.prototype, "beforeQueryProcessing", [_dec15], {
850
+ }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "beforeQueryProcessing", [_dec16], {
825
851
  configurable: true,
826
852
  enumerable: true,
827
853
  writable: true,
828
854
  initializer: null
829
- }), _descriptor15 = _applyDecoratedDescriptor(_class2.prototype, "afterQueryProcessing", [_dec16], {
855
+ }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "afterQueryProcessing", [_dec17], {
830
856
  configurable: true,
831
857
  enumerable: true,
832
858
  writable: true,
833
859
  initializer: null
834
- }), _descriptor16 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec17], {
860
+ }), _descriptor17 = _applyDecoratedDescriptor(_class2.prototype, "state", [_dec18], {
835
861
  configurable: true,
836
862
  enumerable: true,
837
863
  writable: true,
@@ -854,4 +880,4 @@ sap.ui.define(["sap/base/Log", "sap/fe/base/ClassSupport", "sap/fe/base/jsx-runt
854
880
  _exports = EasyFilterBarContainer;
855
881
  return _exports;
856
882
  }, false);
857
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiZXZlbnQiLCJfZGVjMTIiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsInNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCIsImlucHV0RmllbGRSZWFkeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZUNvbnRlbnRSZWFkeSIsInNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSIsImluaXRpYWxpemUiLCJfZXhwb3J0cyIsIl9pbmhlcml0c0xvb3NlIiwiX3Byb3RvIiwicHJvdG90eXBlIiwic2V0RWFzeUZpbHRlckxpYiIsImVhc3lGaWx0ZXJMaWIiLCJzZXRQcm9wZXJ0eSIsImVhc3lmaWx0ZXIiLCJfX3VpNV9yZXF1aXJlX2FzeW5jIiwic2V0QXBwSWQiLCJhcHBJZCIsImVhc3lGaWx0ZXJJbnB1dCIsImN1cnJlbnQiLCJpbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIiLCJzZXRGaWx0ZXJCYXJNZXRhZGF0YSIsImZpbHRlckJhck1ldGFkYXRhIiwidG9rZW5zIiwiZ2V0RGVmYXVsdFRva2VucyIsImlubmVyQ29udHJvbFBvcG92ZXIiLCJjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scyIsImFkZERlcGVuZGVudCIsInN0YXRlIiwic2hvd1Jlc3VsdCIsImxlbmd0aCIsImlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCIsImluaXQiLCJyZXNvdXJjZUJ1bmRsZSIsIkxpYiIsImdldFJlc291cmNlQnVuZGxlRm9yIiwiY29udGVudCIsImNyZWF0ZUNvbnRlbnQiLCJtYW5kYXRvcnlLZXlNYXAiLCJmb3JFYWNoIiwiZGF0YSIsImlzUmVxdWlyZWQiLCJyZXF1aXJlZCIsIm5hbWUiLCJwdXNoIiwia2V5IiwibGFiZWwiLCJrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzIiwiZGVmYXVsdFZhbHVlIiwiYnVzeSIsIm9uRW50ZXJQcmVzc2VkIiwiZSIsIm9uR29QcmVzcyIsImdldFBhcmFtZXRlciIsImNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQiLCJ0b2tlbnNJblN0YXRlIiwiZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSIsImdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSIsInRva2VuIiwiVmFsdWVTdGF0ZSIsIkVycm9yIiwiZ2V0VGV4dCIsIm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSIsImNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzIiwiZWFzeVRva2VucyIsInRva2VuaXplciIsImdldFRva2VucyIsImNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UiLCJtYWdpY1F1ZXJ5IiwicmVzZXRTdGF0ZSIsInRva2VuaXplckVkaXRhYmxlIiwiZmlyZUV2ZW50IiwiZWFzeUZpbHRlck1ldGFkYXRhIiwidmVyc2lvbiIsImVudGl0eVNldCIsImNvbnRleHRQYXRoIiwiZmllbGRzIiwiZWFzeUZpbHRlclJlc3VsdCIsImVhc3lGaWx0ZXIiLCJzdWNjZXNzIiwiaXNIaXN0b3J5RW5hYmxlZCIsImFkZFJlY2VudFF1ZXJ5IiwiaGFuZGxlVjFTdWNjZXNzIiwicmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zIiwic2V0TWVzc2FnZVN0cmlwIiwibWVzc2FnZSIsIm1lc3NhZ2VTdHJpcFR5cGUiLCJNZXNzYWdlVHlwZSIsIldhcm5pbmciLCJMb2ciLCJlcnJvciIsImZpbHRlciIsImRlYnVnIiwiSlNPTiIsInN0cmluZ2lmeSIsImNsZWFyTWVzc2FnZVN0cmlwIiwiRWFzeUZpbHRlclV0aWxzIiwiZm9ybWF0RGF0YSIsImJpbmQiLCJhbGxWYWx1ZUhlbHBUb2tlbnMiLCJyZXN1bHQiLCJyZXF1aXJlZFZhbHVlSGVscFRva2VucyIsInZhbHVlSGVscFRva2VuIiwiZmluZCIsImxsbVJlc3VsdCIsImRhdGFGZXRjaGVyIiwidXBkYXRlZFRva2VucyIsImtleVNwZWNpZmljVmFsdWUiLCJpZHgiLCJvcGVyYXRvciIsIkZpbHRlck9wZXJhdG9yIiwiQlQiLCJOQiIsInNlbGVjdGVkVmFsdWVzIiwidmFsdWUiLCJkZXNjcmlwdGlvbiIsInN1YkluZHgiLCJ2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyIsInRodW1iQnV0dG9uRW5hYmxlZCIsInRodW1iRG93bkJ1dHRvblByZXNzZWQiLCJ0aHVtYlVwQnV0dG9uUHJlc3NlZCIsInNpbmdsZVNlbGVjdFRva2VuTGFiZWxzIiwic3BsaWNlIiwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0Iiwiam9pbiIsInNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCIsInNob3dNZXNzYWdlU3RyaXAiLCJtZXNzYWdlU3RyaXBUZXh0IiwiY2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSIsInRleHQiLCJfanN4IiwiUG9wb3ZlciIsImlkIiwiZ2V0SWQiLCJzaG93QXJyb3ciLCJzaG93SGVhZGVyIiwicGxhY2VtZW50IiwiUGxhY2VtZW50VHlwZSIsIkJvdHRvbSIsImNsYXNzIiwiY2hpbGRyZW4iLCJmb290ZXIiLCJnZXRUb29sYmFyIiwidG9vbGJhciIsIm9rQnV0dG9uIiwiZ2V0T2tCdXR0b24iLCJzaG93QWxsQnV0dG9uIiwiZ2V0U2hvd0FsbEJ1dHRvbiIsIk92ZXJmbG93VG9vbGJhciIsIl9qc3hzIiwiX0ZyYWdtZW50IiwiVG9vbGJhclNwYWNlciIsIkJ1dHRvbiIsIkJ1dHRvblR5cGUiLCJFbXBoYXNpemVkIiwiZm9ybWF0VG9rZW5zIiwibWFwIiwidmFsIiwiZGVlcENsb25lIiwib25TdGF0ZUNoYW5nZSIsImNoYW5nZWRQcm9wcyIsImFyZ3VtZW50cyIsInVuZGVmaW5lZCIsImluY2x1ZGVzIiwib25zYXBmb2N1c2xlYXZlIiwib25UaHVtYlVwUHJlc3NlZCIsInRyaWdnZXJQWEludGVncmF0aW9uIiwib25UaHVtYlByZXNzZWQiLCJvblRodW1iRG93blByZXNzZWQiLCJNZXNzYWdlVG9hc3QiLCJzaG93IiwiJHRvcEdvQnRuIiwiY3JlYXRlUmVmZXJlbmNlIiwidGh1bWJVcEJ1dHRvblRva2VuaXplciIsIlRvZ2dsZUJ1dHRvbiIsImljb24iLCJ0b29sdGlwIiwicHJlc3MiLCJlbmFibGVkIiwiYmluZFN0YXRlIiwicHJlc3NlZCIsIkZFU1JIZWxwZXIiLCJzZXRTZW1hbnRpY1N0ZXBuYW1lIiwidGh1bWJEb3duQnV0dG9uVG9rZW5pemVyIiwidGh1bWJVcEJ1dHRvbk1lc3NhZ2VTdHJpcGUiLCJ0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlIiwib3V0VkJveCIsIlZCb3giLCJGbGV4Qm94IiwicmVuZGVyVHlwZSIsIkVhc3lGaWx0ZXJJbnB1dCIsInJlY29tbWVuZGVkVmFsdWVzIiwicmVmIiwiZW50ZXJQcmVzc2VkIiwicXVlcnlDaGFuZ2VkIiwicXVlcnkiLCJsaXZlQ2hhbmdlIiwib25Hb0J1dHRvblByZXNzIiwidmlzaWJsZSIsImFsaWduSXRlbXMiLCJGbGV4QWxpZ25JdGVtcyIsIkNlbnRlciIsIndyYXAiLCJGbGV4V3JhcCIsIldyYXAiLCJqdXN0aWZ5Q29udGVudCIsIkZsZXhKdXN0aWZ5Q29udGVudCIsIlNwYWNlQmV0d2VlbiIsIkFJTm90aWNlIiwiVG9rZW5pemVyIiwiZWRpdGFibGUiLCJhbmQiLCJyZW5kZXJNb2RlIiwiVG9rZW5pemVyUmVuZGVyTW9kZSIsIkxvb3NlIiwiY3R4Iiwib2JqZWN0IiwiZ2V0T2JqZWN0IiwiVG9rZW4iLCJpdGVtcyIsIm1hbmRhdG9yeSIsImlzS2V5TWFuZGF0b3J5IiwiZGVsZXRlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsIm5ld1Rva2VucyIsImNvbmNhdCIsInVwZGF0ZUZpbHRlcklucHV0IiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJjb2RlTGlzdCIsIkhCb3giLCJUcmFuc3BhcmVudCIsIiRzZWFyY2hJbnB1dCIsImZvY3VzIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJlbmFibGVGb3JtYXR0ZWRUZXh0Iiwic2hvd0Nsb3NlQnV0dG9uIiwiY2xvc2UiLCJub3QiLCJjdXJyZW50SW5wdXRWYWx1ZSIsImdldFZhbHVlIiwiY3VycmVudElucHV0UGxhY2Vob2xkZXIiLCJnZXRQbGFjZWhvbGRlciIsInNldFZhbHVlIiwiY2xlYXJBbGxGaWx0ZXJzIiwiTm9uZSIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwibmV3VG9rZW4iLCJjdXJyVmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFRva2Vuc0luSW5pdGlhbFN0YXRlIiwibWFuZGF0b3J5VG9rZW5zIiwicmVxdWlyZWRLZXlzIiwiZ2V0S2V5IiwicmVuZGVyIiwicm0iLCJjb250cm9sIiwianN4IiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwiZ2V0QWdncmVnYXRpb24iLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0Y3JlYXRlUmVmZXJlbmNlLFxuXHRkZWZpbmVSZWZlcmVuY2UsXG5cdGRlZmluZVN0YXRlLFxuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXZlbnQsXG5cdHByb3BlcnR5LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSBcInNhcC9tL1Rva2VuaXplclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBQbGFjZW1lbnRUeXBlLCBUb2tlbml6ZXJSZW5kZXJNb2RlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBWYWx1ZVN0YXRlIH0gZnJvbSBcInNhcC91aS9jb3JlL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIENvbnRleHQgZnJvbSBcInNhcC91aS9tb2RlbC9Db250ZXh0XCI7XG5cbmltcG9ydCB0eXBlIHsgUHJpbWl0aXZlVHlwZSB9IGZyb20gXCJAc2FwLXV4L3ZvY2FidWxhcmllcy10eXBlc1wiO1xuaW1wb3J0IHR5cGUgUmVzb3VyY2VCdW5kbGUgZnJvbSBcInNhcC9iYXNlL2kxOG4vUmVzb3VyY2VCdW5kbGVcIjtcbmltcG9ydCBkZWVwQ2xvbmUgZnJvbSBcInNhcC9iYXNlL3V0aWwvZGVlcENsb25lXCI7XG5pbXBvcnQgeyBhbmQsIGJpbmRTdGF0ZSwgbm90IH0gZnJvbSBcInNhcC9mZS9iYXNlL0JpbmRpbmdUb29sa2l0XCI7XG5pbXBvcnQgRWFzeUZpbHRlcklucHV0IGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9FYXN5RmlsdGVySW5wdXRcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXJUb2tlbiBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvVG9rZW5cIjtcbmltcG9ydCBIQm94IGZyb20gXCJzYXAvbS9IQm94XCI7XG5pbXBvcnQgTWVzc2FnZVN0cmlwIGZyb20gXCJzYXAvbS9NZXNzYWdlU3RyaXBcIjtcbmltcG9ydCBNZXNzYWdlVG9hc3QgZnJvbSBcInNhcC9tL01lc3NhZ2VUb2FzdFwiO1xuaW1wb3J0IE92ZXJmbG93VG9vbGJhciBmcm9tIFwic2FwL20vT3ZlcmZsb3dUb29sYmFyXCI7XG5pbXBvcnQgVG9nZ2xlQnV0dG9uIGZyb20gXCJzYXAvbS9Ub2dnbGVCdXR0b25cIjtcbmltcG9ydCBUb29sYmFyU3BhY2VyIGZyb20gXCJzYXAvbS9Ub29sYmFyU3BhY2VyXCI7XG5pbXBvcnQgTWVzc2FnZVR5cGUgZnJvbSBcInNhcC91aS9jb3JlL21lc3NhZ2UvTWVzc2FnZVR5cGVcIjtcbmltcG9ydCBGaWx0ZXJPcGVyYXRvciBmcm9tIFwic2FwL3VpL21vZGVsL0ZpbHRlck9wZXJhdG9yXCI7XG5pbXBvcnQgRkVTUkhlbHBlciBmcm9tIFwic2FwL3VpL3BlcmZvcm1hbmNlL3RyYWNlL0ZFU1JIZWxwZXJcIjtcbmltcG9ydCB0eXBlIEVhc3lGaWx0ZXIgZnJvbSBcInV4L2VuZy9maW9yaWFpL3JldXNlL2Vhc3lmaWx0ZXIvRWFzeUZpbHRlclwiO1xuaW1wb3J0IHR5cGUgeyBFYXN5RmlsdGVyTWV0YWRhdGEsIEVhc3lGaWx0ZXJSZXN1bHQsIFByb3BlcnR5TWV0YWRhdGEgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IFN1Y2Nlc3MgfSBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2Uvc2hhcmVkXCI7XG5pbXBvcnQgdHlwZSB7IEV2ZW50SGFuZGxlciB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi8uLi8uLi90eXBlcy9leHRlbnNpb25fdHlwZXNcIjtcbmltcG9ydCB7IEFJTm90aWNlIH0gZnJvbSBcIi4vQUlOb3RpY2VcIjtcbmltcG9ydCB7IHRyaWdnZXJQWEludGVncmF0aW9uIH0gZnJvbSBcIi4vUFhGZWVkYmFja1wiO1xuaW1wb3J0IEVhc3lGaWx0ZXJVdGlscyBmcm9tIFwiLi91dGlsc1wiO1xuXG4vL0ZvciBjdXJyZW50IHJlbGVhc2Ugd2UgYXJlIGlnbm9yaW5nIFwiQWxsXCIgYW5kIFwiQW55XCJcbi8vV2UgY2FuIGluY29ycG9yYXRlIHRoZXNlIHZhbHVlcyBpbiBmdXR1cmVcbmV4cG9ydCB0eXBlIEJldHdlZW5TZWxlY3RlZFZhbHVlcyA9IFtib29sZWFuLCBib29sZWFuXSB8IFtzdHJpbmcsIHN0cmluZ10gfCBbbnVtYmVyLCBudW1iZXJdIHwgW0RhdGUsIERhdGVdO1xuXG50eXBlIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZSA9IHN0cmluZyB8IERhdGUgfCBib29sZWFuIHwgbnVtYmVyO1xuXG5leHBvcnQgdHlwZSBDb2RlTGlzdFR5cGUgPSB7XG5cdHZhbHVlOiBQcmltaXRpdmVUeXBlO1xuXHRkZXNjcmlwdGlvbjogbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlO1xufTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW0NvZGVMaXN0VHlwZSwgQ29kZUxpc3RUeXBlXTtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uID1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRXhjbHVkZTxGaWx0ZXJPcGVyYXRvciwgRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQj47XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogQ29kZUxpc3RUeXBlW107XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI7XG5cdFx0XHRzZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwQmV0d2VlblNlbGVjdGVkVmFsdWVzO1xuXHRcdFx0bm9NYXRjaD86IGJvb2xlYW47XG5cdCAgfTtcblxuLy9XZSB3aWxsIGJlIGhhbmRsaW5nIFwiQUxMXCIgYW5kIFwiQU5ZXCIgYXQgbGF0ZXIgcG9pbnQgb2YgdGltZVxuZXhwb3J0IHR5cGUgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBzdHJpbmdbXSB8IGJvb2xlYW5bXSB8IG51bWJlcltdIHwgRGF0ZVtdO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdCAgfTtcblxuZXhwb3J0IHR5cGUgVG9rZW5UeXBlID0gXCJNZW51V2l0aENoZWNrQm94XCIgfCBcIkNhbGVuZGFyXCIgfCBcIlRpbWVcIiB8IFwiVmFsdWVIZWxwXCIgfCBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCI7XG5cbmV4cG9ydCB0eXBlIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHR0eXBlOiBcIlZhbHVlSGVscFwiO1xuXHRidXN5OiBib29sZWFuO1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiA9IHtcblx0a2V5OiBzdHJpbmc7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IEV4Y2x1ZGU8VG9rZW5UeXBlLCBcIlZhbHVlSGVscFwiPjtcblx0aXNSZXF1aXJlZD86IGJvb2xlYW47XG5cdGJ1c3k6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgdHlwZSBUb2tlbkRlZmluaXRpb24gPSBWYWx1ZUhlbHBUb2tlbkRlZmluaXRpb24gfCBOb25WYWx1ZUhlbHBUb2tlbkRlZmluaXRpb247XG5cbmV4cG9ydCB0eXBlIFRva2VuU2V0dGVycyA9IFwic2V0U2VsZWN0ZWRWYWx1ZXNcIjtcblxuZXhwb3J0IHR5cGUgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGEgPSBQcm9wZXJ0eU1ldGFkYXRhICZcblx0KFxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBcIlZhbHVlSGVscFwiO1xuXHRcdFx0XHRkZWZhdWx0VmFsdWU/OiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0XHQgIH1cblx0XHR8IHtcblx0XHRcdFx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRcdFx0XHRkZWZhdWx0VmFsdWU/OiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHQpO1xuXG4vLyBXZSBuZWVkIHRoZSB0aGlyZCBhcmd1ZW1lbnQgYmVjYXVzZSB0aGVyZSBtaWdodCBiZSBhIGNoYW5jZSBvZiBjb21wb3NpdGUga2V5cyBzY2VuYXJpb1xudHlwZSBEYXRhRmV0Y2hlciA9IChcblx0cHJvcGVydHlOYW1lOiBzdHJpbmcsXG5cdHZhbHVlT2ZDdXJyZW50UHJvcGVydHk6IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdGxsbVJlc3VsdDogU3VjY2VzczxFYXN5RmlsdGVyUmVzdWx0PlxuKSA9PiBQcm9taXNlPFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdPjtcblxuaW50ZXJmYWNlIEZvY3VzSGFuZGxpbmdDb250cm9sIHtcblx0b25zYXBmb2N1c2xlYXZlPzogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgRWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQgPSBVSTVFdmVudDxcblx0e1xuXHRcdGtleTogc3RyaW5nO1xuXHRcdHZhbHVlczogdW5rbm93bltdO1xuXHRcdHJlc29sdmU6ICh2YWx1ZTogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID0+IHZvaWQ7XG5cdFx0cmVqZWN0OiAocmVhc29uPzogRXJyb3IpID0+IHZvaWQ7XG5cdH0sXG5cdEVhc3lGaWx0ZXJCYXJDb250YWluZXJcbj47XG5cbi8qXG4gKiBEZWxpdmVyeSBmb3IgYmV0YSByZWxlYXNlIGZvciB0aGUgZWFzeSBmaWx0ZXIgZmVhdHVyZS5cbiAqL1xuQGRlZmluZVVJNUNsYXNzKFwic2FwLmZlLmNvbnRyb2xzLmVhc3lGaWx0ZXIuRWFzeUZpbHRlckJhckNvbnRhaW5lclwiKVxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWFzeUZpbHRlckJhckNvbnRhaW5lciBleHRlbmRzIENvbnRyb2wge1xuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGNvbnRleHRQYXRoPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0YXBwSWQ/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRlYXN5RmlsdGVyTGliPzogc3RyaW5nO1xuXG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwiYXJyYXlcIiB9KVxuXHRmaWx0ZXJCYXJNZXRhZGF0YT86IEVhc3lGaWx0ZXJQcm9wZXJ0eU1ldGFkYXRhW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdHJlY29tbWVuZGVkVmFsdWVzPzogc3RyaW5nW107XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJmdW5jdGlvblwiIH0pXG5cdGRhdGFGZXRjaGVyPzogRGF0YUZldGNoZXI7XG5cblx0QGRlZmluZVJlZmVyZW5jZSgpXG5cdGVhc3lGaWx0ZXJJbnB1dCE6IFJlZjxFbmhhbmNlV2l0aFVJNTxFYXN5RmlsdGVySW5wdXQ+PjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0dG9rZW5pemVyITogUmVmPFRva2VuaXplcj47XG5cblx0QGFnZ3JlZ2F0aW9uKHsgdHlwZTogXCJzYXAudWkuY29yZS5Db250cm9sXCIgfSlcblx0Y29udGVudD86IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0dG9rZW5zQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHF1ZXJ5Q2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlckJhckNvbnRhaW5lcj4+O1xuXG5cdEBldmVudCgpXG5cdHNob3dWYWx1ZUhlbHA/OiBFdmVudEhhbmRsZXI8RWFzeUZpbHRlckJhckNvbnRhaW5lciRTaG93VmFsdWVIZWxwRXZlbnQ+O1xuXG5cdEBldmVudCgpXG5cdGNsZWFyRmlsdGVycz86IEV2ZW50SGFuZGxlcjtcblxuXHRAZXZlbnQoKVxuXHRiZWZvcmVRdWVyeVByb2Nlc3Npbmc/OiBFdmVudEhhbmRsZXI7XG5cblx0QGV2ZW50KClcblx0YWZ0ZXJRdWVyeVByb2Nlc3Npbmc/OiBFdmVudEhhbmRsZXI7XG5cblx0cHJpdmF0ZSByZXNvdXJjZUJ1bmRsZSE6IFJlc291cmNlQnVuZGxlO1xuXG5cdEBkZWZpbmVTdGF0ZSgpXG5cdHByb3RlY3RlZCBzdGF0ZTogU3RhdGVPZjx7XG5cdFx0c2hvd1Jlc3VsdDogYm9vbGVhbjtcblx0XHR0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdO1xuXHRcdHRva2VuaXplckVkaXRhYmxlOiBib29sZWFuO1xuXHRcdHNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0c2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdG1lc3NhZ2VTdHJpcFRleHQ/OiBzdHJpbmc7XG5cdFx0c2hvd01lc3NhZ2VTdHJpcD86IGJvb2xlYW47XG5cdFx0bWVzc2FnZVN0cmlwVHlwZTogTWVzc2FnZVR5cGU7XG5cdFx0dGh1bWJCdXR0b25FbmFibGVkOiBib29sZWFuO1xuXHRcdHRodW1iVXBCdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGJvb2xlYW47XG5cdH0+ID0ge1xuXHRcdHNob3dSZXN1bHQ6IGZhbHNlLFxuXHRcdHRva2VuczogW10gYXMgVG9rZW5EZWZpbml0aW9uW10sXG5cdFx0dG9rZW5pemVyRWRpdGFibGU6IHRydWUsXG5cdFx0c2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0bWVzc2FnZVN0cmlwVGV4dDogXCJcIixcblx0XHRzaG93TWVzc2FnZVN0cmlwOiBmYWxzZSxcblx0XHRtZXNzYWdlU3RyaXBUeXBlOiBNZXNzYWdlVHlwZS5FcnJvcixcblx0XHR0aHVtYkJ1dHRvbkVuYWJsZWQ6IHRydWUsXG5cdFx0dGh1bWJVcEJ1dHRvblByZXNzZWQ6IGZhbHNlLFxuXHRcdHRodW1iRG93bkJ1dHRvblByZXNzZWQ6IGZhbHNlXG5cdH07XG5cblx0cHJpdmF0ZSBpbm5lckNvbnRyb2xQb3BvdmVyPzogUG9wb3ZlcjtcblxuXHRwcml2YXRlIG9rQnV0dG9uPzogQnV0dG9uO1xuXG5cdHByaXZhdGUgc2hvd0FsbEJ1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHRvb2xiYXI/OiBPdmVyZmxvd1Rvb2xiYXI7XG5cblx0cHJpdmF0ZSBtYW5kYXRvcnlLZXlNYXA/OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPjtcblxuXHQvL0lmIHNldCB0byB0cnVlIHRoZSBlcnJvciBzdGF0ZSBjYW4gYmUgc2VlbiBvbiB0aGUgdG9rZW5zXG5cdHByaXZhdGUgaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkPzogYm9vbGVhbjtcblxuXHRwcml2YXRlIHNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IHRydWU7XG5cblx0ZWFzeWZpbHRlcj86IFByb21pc2U8dHlwZW9mIEVhc3lGaWx0ZXIgfCB1bmRlZmluZWQ+O1xuXG5cdHByaXZhdGUgcmVzb2x2ZUNvbnRlbnRSZWFkeSE6ICgpID0+IHZvaWQ7XG5cblx0cHJpdmF0ZSBpbnB1dEZpZWxkUmVhZHk6IFByb21pc2U8dm9pZD4gPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSA9IHJlc29sdmU7XG5cdH0pO1xuXG5cdHByaXZhdGUgc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm9wZXJ0aWVzOiBzdHJpbmcgfCAoJENvbnRyb2xTZXR0aW5ncyAmIFByb3BlcnRpZXNPZjxFYXN5RmlsdGVyQmFyQ29udGFpbmVyPiksIG90aGVycz86ICRDb250cm9sU2V0dGluZ3MpIHtcblx0XHRzdXBlcihwcm9wZXJ0aWVzIGFzIHN0cmluZywgb3RoZXJzKTtcblx0XHR0aGlzLmluaXRpYWxpemUoKTtcblx0fVxuXG5cdHNldEVhc3lGaWx0ZXJMaWIoZWFzeUZpbHRlckxpYjogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zZXRQcm9wZXJ0eShcImVhc3lGaWx0ZXJMaWJcIiwgZWFzeUZpbHRlckxpYik7XG5cdFx0aWYgKHRoaXMuZWFzeUZpbHRlckxpYikge1xuXHRcdFx0dGhpcy5lYXN5ZmlsdGVyID0gaW1wb3J0KHRoaXMuZWFzeUZpbHRlckxpYik7XG5cdFx0fVxuXHR9XG5cblx0YXN5bmMgc2V0QXBwSWQoYXBwSWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghdGhpcy5hcHBJZCkge1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShcImFwcElkXCIsIGFwcElkLCB0cnVlKTtcblx0XHRcdGF3YWl0IHRoaXMuaW5wdXRGaWVsZFJlYWR5O1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0UHJvcGVydHkoXCJhcHBJZFwiLCBhcHBJZCwgdHJ1ZSk7XG5cdFx0XHRhd2FpdCB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5pbml0U2hlbGxIaXN0b3J5UHJvdmlkZXIoKTtcblx0XHR9XG5cdH1cblxuXHRzZXRGaWx0ZXJCYXJNZXRhZGF0YShmaWx0ZXJCYXJNZXRhZGF0YTogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXSk6IHZvaWQge1xuXHRcdGlmICghdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSkge1xuXHRcdFx0dGhpcy5zZXRQcm9wZXJ0eShcImZpbHRlckJhck1ldGFkYXRhXCIsIGZpbHRlckJhck1ldGFkYXRhLCB0cnVlKTtcblx0XHRcdC8vIHBvcHVsYXRlIHRoZSB0b2tlbnMgd2l0aCBkZWZhdWx0IHZhbHVlXG5cdFx0XHRjb25zdCB0b2tlbnMgPSB0aGlzLmdldERlZmF1bHRUb2tlbnMoKTtcblx0XHRcdGlmICghdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKSB7XG5cdFx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdFx0dGhpcy5hZGREZXBlbmRlbnQodGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdG9rZW5zO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdG9rZW5zLmxlbmd0aCA+IDA7XG5cdFx0XHQvLy9XZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgZXJyb3IgdmFsdWVTdGF0ZU1lc3NhZ2UgYXMgc29vbiB0aGUgY29udHJvbCByZW5kZXJzXG5cdFx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IHRydWU7XG5cdFx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0XHR0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCA9IGZhbHNlO1xuXHRcdH1cblx0fVxuXG5cdGluaXQoKTogdm9pZCB7XG5cdFx0dGhpcy5yZXNvdXJjZUJ1bmRsZSA9IExpYi5nZXRSZXNvdXJjZUJ1bmRsZUZvcihcInNhcC5mZS5jb250cm9sc1wiKSE7XG5cdH1cblxuXHRpbml0aWFsaXplKCk6IHZvaWQge1xuXHRcdHRoaXMuY29udGVudCA9IHRoaXMuY3JlYXRlQ29udGVudCgpO1xuXHRcdHRoaXMucmVzb2x2ZUNvbnRlbnRSZWFkeSgpO1xuXHRcdGlmICghdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSB0aGlzLmNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk7XG5cdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdH1cblx0XHQvL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IHRydWU7XG5cdFx0Ly9vblRva2VuQ2hhbmdlIGV2ZW50IHNob3VsZCBub3QgYmUgZmlyZWQgd2hlbiBpbml0aWFsIHNldCBvZiB0b2tlbnMgYXJlIHNldFxuXHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdH1cblxuXHQvLyBUaGlzIG1ldGhvZCBzaG91bGQgYmUgdXNlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIHN0YXRlLCBvbmNlIHRoZSBzdGF0ZSBpcyB1cGRhdGVkIHRoZSBwcmV2aW91cyBvdmVycmlkZGVuIGRlZmF1bHQgdmFsdWVzIHdvdWxkIGJlIGdvbmUgZm9yZXZlclxuXHRnZXREZWZhdWx0VG9rZW5zKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCB0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdID0gW107XG5cdFx0aWYgKCF0aGlzLm1hbmRhdG9yeUtleU1hcCkge1xuXHRcdFx0dGhpcy5tYW5kYXRvcnlLZXlNYXAgPSB7fTtcblx0XHR9XG5cdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZm9yRWFjaCgoZGF0YSkgPT4ge1xuXHRcdFx0Y29uc3QgaXNSZXF1aXJlZCA9IGRhdGEucmVxdWlyZWQ7XG5cdFx0XHRpZiAoaXNSZXF1aXJlZCkge1xuXHRcdFx0XHQodGhpcy5tYW5kYXRvcnlLZXlNYXAgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pW2RhdGEubmFtZV0gPSB0cnVlO1xuXHRcdFx0XHQvL0NoZWNrIHdoZXRoZXIgdGhlIGtleXMgZXhpc3QgaW4gdGhlIGN1cnJlbnQgc3RhdGUgZWxzZSBwdXNoIGl0IGFjcm9zc1xuXHRcdFx0XHRpZiAoZGF0YS50eXBlID09PSBcIlZhbHVlSGVscFwiKSB7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdFx0a2V5OiBkYXRhLm5hbWUsXG5cdFx0XHRcdFx0XHRsYWJlbDogZGF0YS5sYWJlbCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiAoZGF0YS5kZWZhdWx0VmFsdWUgYXMgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10pID8/IFtdLFxuXHRcdFx0XHRcdFx0dHlwZTogZGF0YS50eXBlLFxuXHRcdFx0XHRcdFx0YnVzeTogZmFsc2UsXG5cdFx0XHRcdFx0XHRpc1JlcXVpcmVkXG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dG9rZW5zLnB1c2goe1xuXHRcdFx0XHRcdFx0a2V5OiBkYXRhLm5hbWUsXG5cdFx0XHRcdFx0XHRsYWJlbDogZGF0YS5sYWJlbCBhcyBzdHJpbmcsXG5cdFx0XHRcdFx0XHRrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiAoZGF0YS5kZWZhdWx0VmFsdWUgYXMgVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB0b2tlbnM7XG5cdH1cblxuXHRvbkVudGVyUHJlc3NlZChlOiBVSTVFdmVudDx7IHF1ZXJ5OiBzdHJpbmcgfSwgRWFzeUZpbHRlcklucHV0Pik6IHZvaWQge1xuXHRcdHRoaXMub25Hb1ByZXNzKGUuZ2V0UGFyYW1ldGVyKFwicXVlcnlcIikpO1xuXHR9XG5cblx0Ly9NYWtpbmcgaXQgcHVibGljIGJlY2F1c2UgaW4gbGl2ZSBtb2RlIHRoZSBhcHAgZGV2ZWxvcGVyIGNhbiBkZWNpZGUgd2hldGhlciB0byBkaXNwbGF5IHRoZSBlcnJvciBWYWx1ZVN0YXRlTWVzc2FnZVxuXHQvL0luIG5vbi1saXZlIG1vZGUgLCB3ZSBhcmUgYWxyZWFkeSBpbnRlcm5hbGx5IGhhbmRsaW5nIGl0IG9uIGV2ZXJ5IHRpbWUgdGltZSBhIHVzZXIgY2xpY2tzIG9uIEdPL0VudGVyIGJ1dHRvbnNcblx0cHVibGljIGNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgdG9rZW5zSW5TdGF0ZSA9IHRoaXMuZ2V0VW5TZXRNYW5kYXRvcnlUb2tlbnNJbkN1cnJlbnRTdGF0ZSgpO1xuXHRcdGlmICh0b2tlbnNJblN0YXRlLmxlbmd0aCAhPT0gMCkge1xuXHRcdFx0Y29uc3QgdG9rZW5zID0gdGhpcy5nZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUodG9rZW5zSW5TdGF0ZSk7XG5cdFx0XHR0b2tlbnM/LmZvckVhY2goKHRva2VuKSA9PiB7XG5cdFx0XHRcdHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLkVycm9yKTtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX01BTkRBVE9SWV9UT0tFTl9FUlJPUlwiKSk7XG5cdFx0XHRcdHRva2VuLm9wZW5WYWx1ZVN0YXRlTWVzc2FnZSgpO1xuXHRcdFx0fSk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0cHVibGljIGNsb3NlQWxsTWFuZGF0b3J5VmFsdWVTdGF0ZU1lc3NhZ2VzKCk6IHZvaWQge1xuXHRcdGNvbnN0IGVhc3lUb2tlbnMgPSB0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKSBhcyBFYXN5RmlsdGVyVG9rZW5bXTtcblx0XHRlYXN5VG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB0b2tlbi5jbG9zZVZhbHVlU3RhdGVNZXNzYWdlKCkpO1xuXHR9XG5cblx0YXN5bmMgb25Hb1ByZXNzKG1hZ2ljUXVlcnk6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8dm9pZD4ge1xuXHRcdGlmICghbWFnaWNRdWVyeSkge1xuXHRcdFx0dGhpcy5yZXNldFN0YXRlKCk7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSB0cnVlO1xuXG5cdFx0Ly8gQ2FsbCBBSSBzZXJ2aWNlIHRvIGdldCB0aGUgZmlsdGVyIGNyaXRlcmlhXG5cdFx0Y29uc3QgZWFzeWZpbHRlciA9IGF3YWl0IHRoaXMuZWFzeWZpbHRlcjtcblx0XHRpZiAoIWVhc3lmaWx0ZXIpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5maXJlRXZlbnQoXCJiZWZvcmVRdWVyeVByb2Nlc3NpbmdcIik7XG5cblx0XHRjb25zdCBlYXN5RmlsdGVyTWV0YWRhdGE6IEVhc3lGaWx0ZXJNZXRhZGF0YSA9IHtcblx0XHRcdHZlcnNpb246IDEsXG5cdFx0XHRlbnRpdHlTZXQ6IHRoaXMuY29udGV4dFBhdGgsXG5cdFx0XHRmaWVsZHM6IHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXVxuXHRcdH07XG5cblx0XHRjb25zdCBlYXN5RmlsdGVyUmVzdWx0ID0gYXdhaXQgZWFzeWZpbHRlci5lYXN5RmlsdGVyKG1hZ2ljUXVlcnksIGVhc3lGaWx0ZXJNZXRhZGF0YSk7XG5cblx0XHQvL1dlIHNob3VsZCBub3QgY2hhbmdlIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB0aGUgZmlyc3QgdGltZSB3aGVuIHRoZSBHTyBidXR0b24gaXMgcHJlc3NlZCwgYmVjYXVzZSBpdCBoYXMgYWxyZWFkeSBiZWVuIGNhbGN1bGF0ZWQgaW4gdGhlIEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhIG1ldGhvZFxuXHRcdHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gZmFsc2U7XG5cdFx0aWYgKGVhc3lGaWx0ZXJSZXN1bHQuc3VjY2Vzcykge1xuXHRcdFx0Ly9Pbmx5IGFkZCB0aGUgcmVjZW50IHF1ZXJ5IHdoZW4gdGhlIGNhbGwgaXMgc3VjY2Vzc1xuXHRcdFx0Ly9EbyBub3QgdHJhY2sgdGhlIHJlY2VudCBxdWVyaWVzIHdoZW4gdGhlIGlzSGlzdG9yeUVuYWJsZWQgaXMgc2V0IHRvIGZhbHNlXG5cdFx0XHQvL0l0IHdvdWxkIGJlIGEgdmlvbGF0aW9uIHRvIHVzZXJzIHByaXZhY3lcblx0XHRcdGlmICh0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5pc0hpc3RvcnlFbmFibGVkKCkgPz8gZmFsc2UpIHtcblx0XHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uYWRkUmVjZW50UXVlcnkobWFnaWNRdWVyeSk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnZlcnNpb24gPT09IDEpIHtcblx0XHRcdFx0dGhpcy5oYW5kbGVWMVN1Y2Nlc3MoZWFzeUZpbHRlclJlc3VsdCk7XG5cdFx0XHR9IGVsc2UgaWYgKGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS52ZXJzaW9uID09PSAyKSB7XG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgc2FwLnVpLm1vZGVsLkZpbHRlciBmcm9tIHRoZSBmaWx0ZXIgYW5kIGFwcGx5IGl0IGRpcmVjdGx5IHRvIHRoZSBsaXN0IGJpbmRpbmdcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly8gZXJyb3Jcblx0XHRcdHRoaXMucmVtb3ZlTm9uTWFuZGF0b3J5VG9rZW5zKCk7XG5cdFx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcChlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpO1xuXHRcdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUeXBlID0gTWVzc2FnZVR5cGUuV2FybmluZztcblx0XHRcdExvZy5lcnJvcihcIkVycm9yIHdoaWxlIGdlbmVyYXRpbmcgZmlsdGVyIGNyaXRlcmlhOiBcIiwgZWFzeUZpbHRlclJlc3VsdC5tZXNzYWdlKTtcblx0XHR9XG5cblx0XHR0aGlzLmZpcmVFdmVudChcImFmdGVyUXVlcnlQcm9jZXNzaW5nXCIpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEhhbmRsZXMgdGhlIHN1Y2Nlc3MgcmVzcG9uc2UgZnJvbSB0aGUgQUkgc2VydmljZSBmb3IgdmVyc2lvbiAxIG9mIHRoZSBlYXN5IGZpbHRlci5cblx0ICogQHBhcmFtIGVhc3lGaWx0ZXJSZXN1bHQgVGhlIHJlc3VsdCBmcm9tIHRoZSBBSSBzZXJ2aWNlXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRwcml2YXRlIGhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXIuRWFzeUZpbHRlclJlc3VsdD4pOiB2b2lkIHtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcikge1xuXHRcdFx0Ly8gV2UgbmVlZCB0byBzaG93IGEgbWVzc2FnZSB0byB0aGUgdXNlciB0aGF0IHRoZSBmaWx0ZXIgY3JpdGVyaWEgaGFzIGJlZW4gZ2VuZXJhdGVkXG5cdFx0XHRMb2cuZGVidWcoXCJGaWx0ZXIgY3JpdGVyaWEgZ2VuZXJhdGVkOiBcIiwgSlNPTi5zdHJpbmdpZnkoZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlciwgbnVsbCwgMikpO1xuXG5cdFx0XHRjb25zdCB0b2tlbnMgPSBbLi4udGhpcy5zdGF0ZS50b2tlbnNdLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmlzUmVxdWlyZWQpO1xuXG5cdFx0XHQvLyBDbGVhciB0aGUgcHJldmlvdXMgbWVzc2FnZSBzdHJpcCBmb3IgdmFsaWRhdGVkIGZpbHRlcnNcblx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXAoKTtcblxuXHRcdFx0Ly8gVmFsaWRhdGUgYW5kIGFwcGx5IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRcdEVhc3lGaWx0ZXJVdGlscy5mb3JtYXREYXRhKFxuXHRcdFx0XHR0b2tlbnMsXG5cdFx0XHRcdGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXIsXG5cdFx0XHRcdHRoaXMuZmlsdGVyQmFyTWV0YWRhdGEgYXMgRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXSxcblx0XHRcdFx0dGhpcy5zZXRNZXNzYWdlU3RyaXAuYmluZCh0aGlzKVxuXHRcdFx0KTtcblxuXHRcdFx0Ly9XZSBvbmx5IGhhdmUgdG8gY2FsbCB0aGUgZGF0YUZldGNoZXIgb24gdGhlIFZIIHRva2VucyB3aGljaCBoYXZlIGJlZW4gYXNrZWQgYnkgdGhlIHVzZXJcblx0XHRcdC8vSW4gTWFkbmF0b3J5IHRva2VucyBjYXNlIHRoZSBkZWZhdWx0VmFsdWVzIGFyZSBhbHJlYWR5IGdpdmVuLCBzbyBubyBuZWVkIHRvIGNhbGwgZGF0YUZldGNoZXIgb24gaXRcblxuXHRcdFx0Y29uc3QgYWxsVmFsdWVIZWxwVG9rZW5zID0gdG9rZW5zLmZpbHRlcigocmVzdWx0KSA9PiByZXN1bHQudHlwZSA9PT0gXCJWYWx1ZUhlbHBcIik7XG5cdFx0XHRjb25zdCByZXF1aXJlZFZhbHVlSGVscFRva2VucyA9IGFsbFZhbHVlSGVscFRva2Vucy5maWx0ZXIoKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdHJldHVybiBlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyPy5maW5kKChsbG1SZXN1bHQpID0+IGxsbVJlc3VsdC5uYW1lID09PSB2YWx1ZUhlbHBUb2tlbi5rZXkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdGlmICh0aGlzLmRhdGFGZXRjaGVyKSB7XG5cdFx0XHRcdChyZXF1aXJlZFZhbHVlSGVscFRva2VucyBhcyB1bmtub3duIGFzIFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbltdKS5mb3JFYWNoKGFzeW5jICh2YWx1ZUhlbHBUb2tlbikgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuZGF0YUZldGNoZXI/Lihcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleSxcblx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgYXMgdW5rbm93biBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdLFxuXHRcdFx0XHRcdFx0ZWFzeUZpbHRlclJlc3VsdFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdGlmIChyZXN1bHQpIHtcblx0XHRcdFx0XHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0XHRcdFx0XHR0aGlzLnNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IHJlc3VsdDtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRydWU7XG5cdFx0XHRcdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IHVwZGF0ZWRUb2tlbnM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vSWYgZGF0YUZldGNoZXIgaXMgbm90IHRoZXJlLCB0aGVuIG1vY2sgdGhlIHZhbHVlIGFuZCBkZXNjcmlwdGlvbiB3aXRoIHRoZSBzYW1lIHJlc3VsdCBjb21pbmcgZnJvbSB0aGUgTExNXG5cdFx0XHRcdHJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zLmZvckVhY2goKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4uYnVzeSA9IGZhbHNlO1xuXHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgoa2V5U3BlY2lmaWNWYWx1ZSwgaWR4KSA9PiB7XG5cdFx0XHRcdFx0XHRpZiAoa2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuQlQgfHwga2V5U3BlY2lmaWNWYWx1ZS5vcGVyYXRvciA9PT0gRmlsdGVyT3BlcmF0b3IuTkIpIHtcblx0XHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1tpZHhdLnNlbGVjdGVkVmFsdWVzID0gW1xuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzBdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMF0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRcdHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlOiBrZXlTcGVjaWZpY1ZhbHVlLnNlbGVjdGVkVmFsdWVzWzFdLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMV0gYXMgdW5rbm93biBhcyBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGVcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdF07XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXMuZm9yRWFjaCgodmFsdWUsIHN1YkluZHgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXNbc3ViSW5keF0gPSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZSxcblx0XHRcdFx0XHRcdFx0XHRcdGRlc2NyaXB0aW9uOiB2YWx1ZSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9KTtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgdXBkYXRlZFRva2VucyA9IHRoaXMudmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zKTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IHRydWU7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IHRydWU7XG5cdFx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdXBkYXRlZFRva2Vucztcblx0XHR9XG5cdH1cblxuXHQvL2V2ZXJ5IHNpbmdsZSBzZWxlY3QgbWVudSB0eXBlIHNob3VsZCBoYXZlIG9ubHkgb25lIHZhbHVlLCBlbHNlIHNwbGljZSB0byBvbmUgdmFsdWUgYW5kIHVwZGF0ZSB0aGUgIG1lc3NhZ2Ugc3RyaXBcblx0dmVyaWZ5U2luZ2xlU2VsZWN0VG9rZW5WYWx1ZXModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBzaW5nbGVTZWxlY3RUb2tlbkxhYmVsczogc3RyaW5nW10gPSBbXTtcblx0XHR0b2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIk1lbnVXaXRoU2luZ2xlU2VsZWN0XCIpIHtcblx0XHRcdFx0aWYgKHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID4gMSkge1xuXHRcdFx0XHRcdHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLnB1c2godG9rZW4ubGFiZWwpO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbMF0uc2VsZWN0ZWRWYWx1ZXMuc3BsaWNlKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0aWYgKHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzLmxlbmd0aCkge1xuXHRcdFx0dGhpcy5zdGF0ZS5zaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQgPSB0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1NJTkdMRV9WQUxVRV9NRVNTQUdFXCIsIFtcblx0XHRcdFx0YDxzdHJvbmc+JHtzaW5nbGVTZWxlY3RUb2tlbkxhYmVscy5qb2luKFwiLCBcIil9PC9zdHJvbmc+YFxuXHRcdFx0XSk7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiB0b2tlbnM7XG5cdH1cblxuXHRjbGVhck1lc3NhZ2VTdHJpcCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5zaG93TWVzc2FnZVN0cmlwID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS5tZXNzYWdlU3RyaXBUZXh0ID0gXCJcIjtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlVHlwZS5FcnJvcjtcblx0fVxuXG5cdGNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS5zaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCA9IFwiXCI7XG5cdH1cblxuXHRzZXRNZXNzYWdlU3RyaXAodGV4dDogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSB0ZXh0O1xuXHRcdHRoaXMuc3RhdGUuc2hvd01lc3NhZ2VTdHJpcCA9IHRydWU7XG5cdH1cblxuXHRjcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpOiBQb3BvdmVyIHtcblx0XHRpZiAoIXRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcikge1xuXHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gKFxuXHRcdFx0XHQ8UG9wb3ZlclxuXHRcdFx0XHRcdGlkPXt0aGlzLmdldElkKCkgKyBcIi1pbm5lclBvcG92ZXJcIn1cblx0XHRcdFx0XHRzaG93QXJyb3c9e2ZhbHNlfVxuXHRcdFx0XHRcdHNob3dIZWFkZXI9e3RydWV9XG5cdFx0XHRcdFx0cGxhY2VtZW50PXtQbGFjZW1lbnRUeXBlLkJvdHRvbX1cblx0XHRcdFx0XHRjbGFzcz1cInNhcFVpTWVkaXVtTWFyZ2luQm90dG9tXCJcblx0XHRcdFx0PlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRmb290ZXI6IHRoaXMuZ2V0VG9vbGJhcigpXG5cdFx0XHRcdFx0fX1cblx0XHRcdFx0PC9Qb3BvdmVyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciBhcyBQb3BvdmVyO1xuXHR9XG5cblx0Z2V0VG9vbGJhcigpOiBPdmVyZmxvd1Rvb2xiYXIgfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy50b29sYmFyKSB7XG5cdFx0XHRjb25zdCBva0J1dHRvbiA9IHRoaXMuZ2V0T2tCdXR0b24oKTtcblx0XHRcdGNvbnN0IHNob3dBbGxCdXR0b24gPSB0aGlzLmdldFNob3dBbGxCdXR0b24oKTtcblx0XHRcdHRoaXMudG9vbGJhciA9IChcblx0XHRcdFx0PE92ZXJmbG93VG9vbGJhcj5cblx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0Y29udGVudDogKFxuXHRcdFx0XHRcdFx0XHQ8PlxuXHRcdFx0XHRcdFx0XHRcdDxUb29sYmFyU3BhY2VyIC8+XG5cdFx0XHRcdFx0XHRcdFx0e29rQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHRcdHtzaG93QWxsQnV0dG9ufVxuXHRcdFx0XHRcdFx0XHQ8Lz5cblx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L092ZXJmbG93VG9vbGJhcj5cblx0XHRcdCk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnRvb2xiYXI7XG5cdH1cblxuXHRnZXRPa0J1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5va0J1dHRvbikge1xuXHRcdFx0dGhpcy5va0J1dHRvbiA9IDxCdXR0b24gdGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9QT1BPVkVSX09LXCIpfSB0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5va0J1dHRvbjtcblx0fVxuXG5cdGdldFNob3dBbGxCdXR0b24oKTogQnV0dG9uIHwgdW5kZWZpbmVkIHtcblx0XHRpZiAoIXRoaXMuc2hvd0FsbEJ1dHRvbikge1xuXHRcdFx0dGhpcy5zaG93QWxsQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfU0hPV19BTExfSVRFTVNcIil9IC8+O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5zaG93QWxsQnV0dG9uO1xuXHR9XG5cblx0Zm9ybWF0VG9rZW5zKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBUb2tlbkRlZmluaXRpb25bXSB7XG5cdFx0cmV0dXJuIHRva2Vucy5tYXAoKHRva2VuKSA9PiB7XG5cdFx0XHRpZiAodG9rZW4udHlwZSA9PT0gXCJWYWx1ZUhlbHBcIikge1xuXHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdC4uLnRva2VuLFxuXHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubWFwKCh2YWx1ZSkgPT4ge1xuXHRcdFx0XHRcdFx0Ly9NYWtpbmcgc3VyZSB0aGF0IG9ubHkgdGhlIGlkIHBhcnQgaXMgcGFzc2VkXG5cdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRvcGVyYXRvcjogdmFsdWUub3BlcmF0b3IsXG5cdFx0XHRcdFx0XHRcdHNlbGVjdGVkVmFsdWVzOiB2YWx1ZS5zZWxlY3RlZFZhbHVlcy5tYXAoKHZhbCkgPT4gdmFsLnZhbHVlKVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9KVxuXHRcdFx0XHR9IGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiBkZWVwQ2xvbmUodG9rZW4pO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0b25TdGF0ZUNoYW5nZShjaGFuZ2VkUHJvcHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcblx0XHRpZiAoY2hhbmdlZFByb3BzLmluY2x1ZGVzKFwidG9rZW5zXCIpKSB7XG5cdFx0XHRpZiAodGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQpIHtcblx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJ0b2tlbnNDaGFuZ2VkXCIsIHtcblx0XHRcdFx0XHR0b2tlbnM6IHRoaXMuZm9ybWF0VG9rZW5zKHRoaXMuc3RhdGUudG9rZW5zIGFzIHVua25vd24gYXMgVG9rZW5EZWZpbml0aW9uW10pXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdGhpcy5zdGF0ZS50b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdGlmICghKHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID8/IGZhbHNlKSkge1xuXHRcdFx0XHR0aGlzLmNoZWNrSWZBbGxNYW5kYXRvcnlUb2tlbnNGaWxsZWQoKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlKSB7XG5cdFx0XHRcdC8qKlxuXHRcdFx0XHQgKiBUaGUgdXNlciBoYXMgYWNrbm93bGVkZ2VkIHRoZSBtZXNzYWdlIHN0cmlwIGFuZCB1bmRlcnN0b29kIHRoZSBpc3N1ZS5cblx0XHRcdFx0ICogV2hlbiB0aGUgdG9rZW5zIGFyZSB1cGRhdGVkIG5leHQgdGltZSwgZGlzcGxheWluZyB0aGUgbWVzc2FnZSBzdHJpcCBhZ2FpbiBzZXJ2ZXMgbm8gcHVycG9zZS5cblx0XHRcdFx0ICogQWRkaXRpb25hbGx5LCBvbmNlIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQsIHRoZSBpbnB1dCBmaWVsZCB0ZXh0IHdpbGwgYmUgcmVtb3ZlZFxuXHRcdFx0XHQgKiByZW5kZXJpbmcgdGhlIG1lc3NhZ2Ugc3RyaXAgaXJyZWxldmFudC4gSG93ZXZlciwgdGhlIG1lc3NhZ2Ugc3RyaXAgd2lsbCBiZSBkaXNwbGF5ZWQgYWdhaW4gdGhlIG5leHQgdGltZSB0aGUgXCJHT1wiIGJ1dHRvbiBpcyBwcmVzc2VkLlxuXHRcdFx0XHQgKi9cblx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpO1xuXHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwRm9yU2luZ2xlVmFsdWUoKTtcblx0XHRcdH1cblx0XHRcdHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gdHJ1ZTtcblx0XHR9XG5cdFx0Ly9SZXNldHRpbmcgdG8gZGVmYXVsdCB2YWx1ZXNcblx0XHR0aGlzLmlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gdHJ1ZTtcblxuXHRcdC8vICBvbnNhcGZvY3VzbGVhdmUgbWV0aG9kIGluIHNhcC5tLlRva2VuaXplciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlIHJlbmRlcm1vZGUgb2YgdG9rZW5pemVyIHRvIFwiTmFycm93XCIgZnJvbSBcImxvb3NlXCJcblx0XHQvLyAgSW4gdGhpcyBwcm9jZXNzIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3BvdmVyIGlzc3VlcyBoYXBwZW5pbmdcblx0XHQvLyAgU28gYXMgYSB0ZW1wb3JhcnkgZml4IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uXG5cdFx0KHRoaXMudG9rZW5pemVyPy5jdXJyZW50IGFzIEZvY3VzSGFuZGxpbmdDb250cm9sKS5vbnNhcGZvY3VzbGVhdmUgPSAoKTogdm9pZCA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlVwUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iVXBcIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iRG93blByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYkRvd25cIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IGZhbHNlO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFZCb3gge1xuXHRcdGNvbnN0ICR0b3BHb0J0biA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iRG93blwiKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdDxBSU5vdGljZSByZXNvdXJjZUJ1bmRsZT17dGhpcy5yZXNvdXJjZUJ1bmRsZX0gLz5cblx0XHRcdFx0XHRcdDxUb2tlbml6ZXJcblx0XHRcdFx0XHRcdFx0ZWRpdGFibGU9e2FuZChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbml6ZXJFZGl0YWJsZVwiKSwgdHJ1ZSl9XG5cdFx0XHRcdFx0XHRcdGNsYXNzPXtcInNhcEZlQ29udHJvbHNUb2tlbml6ZXJcIn1cblx0XHRcdFx0XHRcdFx0dG9rZW5zPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0b2tlbnNcIil9XG5cdFx0XHRcdFx0XHRcdHJlbmRlck1vZGU9e1Rva2VuaXplclJlbmRlck1vZGUuTG9vc2V9XG5cdFx0XHRcdFx0XHRcdHJlZj17dGhpcy50b2tlbml6ZXJ9XG5cdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRcdFx0dG9rZW5zOiAoaWR4OiBudW1iZXIsIGN0eDogQ29udGV4dCk6IFRva2VuID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG9iamVjdCA9IGN0eC5nZXRPYmplY3QoKSBhcyBUb2tlbkRlZmluaXRpb247XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ8VG9rZW5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9e3RoaXMuc3RhdGUudG9rZW5zLmtleX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRsYWJlbD17dGhpcy5zdGF0ZS50b2tlbnMubGFiZWx9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aXRlbXM9e3RoaXMuc3RhdGUudG9rZW5zLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXN9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWFuZGF0b3J5PXt0aGlzLmlzS2V5TWFuZGF0b3J5KG9iamVjdC5rZXkpfVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJ1c3k9e3RoaXMuc3RhdGUudG9rZW5zLmJ1c3l9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVsZXRlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjb25zdCB0b2tlbkluZGV4ID0gdGhpcy5zdGF0ZS50b2tlbnMuZmluZEluZGV4KCh0b2tlbikgPT4gdG9rZW4ua2V5ID09PSBvYmplY3Qua2V5KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IG5ld1Rva2VucyA9IHRoaXMuc3RhdGUudG9rZW5zLmNvbmNhdCgpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bmV3VG9rZW5zLnNwbGljZSh0b2tlbkluZGV4LCAxKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW5zO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQ+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGN1c3RvbURhdGE6IFtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiVG9rZW5JbmZvXCIgdmFsdWU9e29iamVjdH0gLz4sXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdDxDdXN0b21EYXRhIGtleT1cInBvcG92ZXJcIiB2YWx1ZT17dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwiZWFzeUZpbHRlckJhckNvbnRhaW5lclwiIHZhbHVlPXt0aGlzfSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRrZXk9XCJjb2RlTGlzdFwiXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU9e3RoaXMuZmlsdGVyQmFyTWV0YWRhdGE/LmZpbmQoKGRhdGEpID0+IGRhdGEubmFtZSA9PT0gb2JqZWN0LmtleSk/LmNvZGVMaXN0fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvPlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdDwvVG9rZW4+XG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdDwvVG9rZW5pemVyPlxuXHRcdFx0XHRcdFx0PEhCb3g+XG5cdFx0XHRcdFx0XHRcdHt0aHVtYlVwQnV0dG9uVG9rZW5pemVyfSwge3RodW1iRG93bkJ1dHRvblRva2VuaXplcn1cblx0XHRcdFx0XHRcdDwvSEJveD5cblx0XHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdFx0dGV4dD17dGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KFwiTV9FQVNZX0ZJTFRFUl9SRVNFVFwiKX1cblx0XHRcdFx0XHRcdFx0dHlwZT17QnV0dG9uVHlwZS5UcmFuc3BhcmVudH1cblx0XHRcdFx0XHRcdFx0cHJlc3M9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiIGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dHlwZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVHlwZVwiKX1cblx0XHRcdFx0XHRcdHRleHQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0PEhCb3ggdmlzaWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIiksIG5vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpKSl9PlxuXHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlfSwge3RodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGV9XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KSBhcyBWQm94O1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkdG9wR29CdG4uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0cmV0dXJuIG91dFZCb3g7XG5cdH1cblxuXHRhc3luYyBvbkdvQnV0dG9uUHJlc3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0bGV0IGN1cnJlbnRJbnB1dFZhbHVlID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFBsYWNlaG9sZGVyKCk7XG5cblx0XHRpZiAoY3VycmVudElucHV0VmFsdWUgPT09IFwiXCIgJiYgY3VycmVudElucHV0UGxhY2Vob2xkZXIgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyIHx8IFwiXCIpO1xuXHRcdFx0Y3VycmVudElucHV0VmFsdWUgPSBjdXJyZW50SW5wdXRQbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5vbkdvUHJlc3MoY3VycmVudElucHV0VmFsdWUpO1xuXHR9XG5cblx0cmVzZXRTdGF0ZShjbGVhckFsbEZpbHRlcnMgPSB0cnVlKTogdm9pZCB7XG5cdFx0aWYgKGNsZWFyQWxsRmlsdGVycykge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjbGVhckZpbHRlcnNcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuUmVzZXRcIik7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vU2V0IHRoZSBWYWx1ZSBTdGF0ZXMgb2YgYWxsIHRoZSBUb2tlbnMgYmFjayB0byBOb25lXG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLk5vbmUpKTtcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCBudWxsKSk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpOyAvL2NsZWFyIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB2YWxpZGF0ZWQgZmlsdGVyc1xuXHR9XG5cblx0Ly9UaGUgYmVsb3cgY29kZSB1cGRhdGVzIHRoZSBleGlzdGluZyBzdGF0ZSBieSBmZXRjaGluZyB0aGUga2V5IGFuZCBzZWxlY3RlZFZhbHVlc1xuXHR1cGRhdGVUb2tlbkFycmF5KFxuXHRcdGNoYW5nZVR5cGU6IFRva2VuU2V0dGVycyxcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5LZXk6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCB0b2tlbkluZGV4ID0gbmV3VG9rZW5zLmZpbmRJbmRleCgodCkgPT4gdC5rZXkgPT09IHRva2VuS2V5KTtcblx0XHRjb25zdCB0b2tlbiA9IG5ld1Rva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRpZiAodG9rZW5JbmRleCAhPSAtMSkge1xuXHRcdFx0c3dpdGNoIChjaGFuZ2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJzZXRTZWxlY3RlZFZhbHVlc1wiOlxuXHRcdFx0XHRcdHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModG9rZW4gYXMgVG9rZW5EZWZpbml0aW9uLCBuZXdUb2tlblNwZWNpZmljVmFsdWVzLCB0b2tlbkluZGV4LCBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW10pO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdFx0XHRcdC8vUmVtb3ZlIHRoZSB0b2tlbiBlbnRpcmVseVxuXHRcdFx0XHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTcGVjaWZ5aW5nIGEgc2V0dGVyIHRoYXQgaXMgb3V0IG9mIHRoZSBib3VuZGFyeVwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIFVwZGF0ZSB0aGUgc3RhdGUgYnkgYXNzaWduaW5nIHRoZSBuZXcgdG9rZW5zIGFycmF5XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IG5ld1Rva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcj8uY2xvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXMoXG5cdFx0dG9rZW46IFRva2VuRGVmaW5pdGlvbixcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5JbmRleDogbnVtYmVyLFxuXHRcdG5ld1Rva2VuczogVG9rZW5EZWZpbml0aW9uW11cblx0KTogdm9pZCB7XG5cdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0aXNLZXlNYW5kYXRvcnkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5kYXRvcnlLZXlNYXBba2V5XSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdHJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpOiB0aGlzIHtcblx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uW10gPSB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1cGRhdGVGaWx0ZXJJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VyclZhbHVlOiBzdHJpbmcgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpIHx8IFwiXCI7XG5cdFx0aWYgKHZhbHVlID09PSBcInRva2VuVXBkYXRlZFwiICYmIGN1cnJWYWx1ZSAhPT0gXCJcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcihjdXJyVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IFwidG9rZW5SZXNldFwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdH1cblx0fVxuXG5cdGdldFRva2Vuc0luSW5pdGlhbFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCBtYW5kYXRvcnlUb2tlbnMgPSBuZXdUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWFuZGF0b3J5VG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbXSB9KSk7XG5cdH1cblxuXHRnZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgaXNLZXlNYW5kYXRvcnkgPSB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0XHRpZiAoaXNLZXlNYW5kYXRvcnkpIHtcblx0XHRcdFx0cmV0dXJuIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBFYXN5RmlsdGVyVG9rZW5bXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVxdWlyZWRLZXlzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuLmtleSk7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZpbHRlcigodG9rZW4pID0+IHJlcXVpcmVkS2V5cy5pbmNsdWRlcyh0b2tlbi5nZXRLZXkoKSkpIGFzXG5cdFx0XHR8IEVhc3lGaWx0ZXJUb2tlbltdXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIpOiB2b2lkIHtcblx0XHRyZXR1cm4ganN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlcihybSwgY29udHJvbCwgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIDxzcGFuIHJlZj17Y29udHJvbH0+e2NvbnRyb2wuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpfTwvc3Bhbj47XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxREE7RUFDQTtFQXdC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
883
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyIiwiX2RlYyIsImRlZmluZVVJNUNsYXNzIiwiX2RlYzIiLCJwcm9wZXJ0eSIsInR5cGUiLCJfZGVjMyIsIl9kZWM0IiwiX2RlYzUiLCJfZGVjNiIsIl9kZWM3IiwiX2RlYzgiLCJkZWZpbmVSZWZlcmVuY2UiLCJfZGVjOSIsIl9kZWMxMCIsImFnZ3JlZ2F0aW9uIiwiX2RlYzExIiwiX2RlYzEyIiwiZXZlbnQiLCJfZGVjMTMiLCJfZGVjMTQiLCJfZGVjMTUiLCJfZGVjMTYiLCJfZGVjMTciLCJfZGVjMTgiLCJkZWZpbmVTdGF0ZSIsIl9jbGFzcyIsIl9jbGFzczIiLCJfQ29udHJvbCIsInByb3BlcnRpZXMiLCJvdGhlcnMiLCJfdGhpcyIsImNhbGwiLCJfaW5pdGlhbGl6ZXJEZWZpbmVQcm9wZXJ0eSIsIl9kZXNjcmlwdG9yIiwiX2Rlc2NyaXB0b3IyIiwiX2Rlc2NyaXB0b3IzIiwiX2Rlc2NyaXB0b3I0IiwiX2Rlc2NyaXB0b3I1IiwiX2Rlc2NyaXB0b3I2IiwiX2Rlc2NyaXB0b3I3IiwiX2Rlc2NyaXB0b3I4IiwiX2Rlc2NyaXB0b3I5IiwiX2Rlc2NyaXB0b3IxMCIsIl9kZXNjcmlwdG9yMTEiLCJfZGVzY3JpcHRvcjEyIiwiX2Rlc2NyaXB0b3IxMyIsIl9kZXNjcmlwdG9yMTQiLCJfZGVzY3JpcHRvcjE1IiwiX2Rlc2NyaXB0b3IxNiIsIl9kZXNjcmlwdG9yMTciLCJzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQiLCJpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyIsImlucHV0RmllbGRSZWFkeSIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVzb2x2ZUNvbnRlbnRSZWFkeSIsInNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSIsImluaXRpYWxpemUiLCJpbnZpc2libGVNZXNzYWdlIiwiSW52aXNpYmxlTWVzc2FnZSIsImdldEluc3RhbmNlIiwiX2V4cG9ydHMiLCJfaW5oZXJpdHNMb29zZSIsIl9wcm90byIsInByb3RvdHlwZSIsInNldEVhc3lGaWx0ZXJMaWIiLCJlYXN5RmlsdGVyTGliIiwic2V0UHJvcGVydHkiLCJlYXN5ZmlsdGVyIiwiX191aTVfcmVxdWlyZV9hc3luYyIsInNldEFwcElkIiwiYXBwSWQiLCJlYXN5RmlsdGVySW5wdXQiLCJjdXJyZW50IiwiaW5pdFNoZWxsSGlzdG9yeVByb3ZpZGVyIiwic2V0RmlsdGVyQmFyTWV0YWRhdGEiLCJmaWx0ZXJCYXJNZXRhZGF0YSIsInRva2VucyIsImdldERlZmF1bHRUb2tlbnMiLCJpbm5lckNvbnRyb2xQb3BvdmVyIiwiY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMiLCJhZGREZXBlbmRlbnQiLCJzdGF0ZSIsInNob3dSZXN1bHQiLCJsZW5ndGgiLCJpc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQiLCJpbml0IiwicmVzb3VyY2VCdW5kbGUiLCJMaWIiLCJnZXRSZXNvdXJjZUJ1bmRsZUZvciIsImNvbnRlbnQiLCJjcmVhdGVDb250ZW50IiwibWFuZGF0b3J5S2V5TWFwIiwiZm9yRWFjaCIsImRhdGEiLCJpc1JlcXVpcmVkIiwicmVxdWlyZWQiLCJuYW1lIiwicHVzaCIsImtleSIsImxhYmVsIiwia2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyIsImRlZmF1bHRWYWx1ZSIsImJ1c3kiLCJvbkVudGVyUHJlc3NlZCIsImUiLCJvbkdvUHJlc3MiLCJnZXRQYXJhbWV0ZXIiLCJjaGVja0lmQWxsTWFuZGF0b3J5VG9rZW5zRmlsbGVkIiwidG9rZW5zSW5TdGF0ZSIsImdldFVuU2V0TWFuZGF0b3J5VG9rZW5zSW5DdXJyZW50U3RhdGUiLCJnZXRBY3R1YWxUb2tlbnNGcm9tU3RhdGUiLCJ0b2tlbiIsIlZhbHVlU3RhdGUiLCJFcnJvciIsImdldFRleHQiLCJvcGVuVmFsdWVTdGF0ZU1lc3NhZ2UiLCJjbG9zZUFsbE1hbmRhdG9yeVZhbHVlU3RhdGVNZXNzYWdlcyIsImVhc3lUb2tlbnMiLCJ0b2tlbml6ZXIiLCJnZXRUb2tlbnMiLCJjbG9zZVZhbHVlU3RhdGVNZXNzYWdlIiwibWFnaWNRdWVyeSIsInJlc2V0U3RhdGUiLCJ0b2tlbml6ZXJFZGl0YWJsZSIsImZpcmVFdmVudCIsImVhc3lGaWx0ZXJNZXRhZGF0YSIsInZlcnNpb24iLCJlbnRpdHlTZXQiLCJjb250ZXh0UGF0aCIsImZpZWxkcyIsImVhc3lGaWx0ZXJSZXN1bHQiLCJlYXN5RmlsdGVyIiwic3VjY2VzcyIsImlzSGlzdG9yeUVuYWJsZWQiLCJhZGRSZWNlbnRRdWVyeSIsImhhbmRsZVYxU3VjY2VzcyIsInJlbW92ZU5vbk1hbmRhdG9yeVRva2VucyIsInNldE1lc3NhZ2VTdHJpcCIsIm1lc3NhZ2UiLCJhbm5vdW5jZSIsIkludmlzaWJsZU1lc3NhZ2VNb2RlIiwiQXNzZXJ0aXZlIiwibWVzc2FnZVN0cmlwVHlwZSIsIk1lc3NhZ2VUeXBlIiwiV2FybmluZyIsIkxvZyIsImVycm9yIiwiZmlsdGVyIiwiZGVidWciLCJKU09OIiwic3RyaW5naWZ5IiwiY2xlYXJNZXNzYWdlU3RyaXAiLCJFYXN5RmlsdGVyVXRpbHMiLCJmb3JtYXREYXRhIiwiYmluZCIsImFsbFZhbHVlSGVscFRva2VucyIsInJlc3VsdCIsInJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zIiwidmFsdWVIZWxwVG9rZW4iLCJmaW5kIiwibGxtUmVzdWx0IiwiZGF0YUZldGNoZXIiLCJ1cGRhdGVkVG9rZW5zIiwia2V5U3BlY2lmaWNWYWx1ZSIsImlkeCIsIm9wZXJhdG9yIiwiRmlsdGVyT3BlcmF0b3IiLCJCVCIsIk5CIiwic2VsZWN0ZWRWYWx1ZXMiLCJ2YWx1ZSIsImRlc2NyaXB0aW9uIiwic3ViSW5keCIsInZlcmlmeVNpbmdsZVNlbGVjdFRva2VuVmFsdWVzIiwidGh1bWJCdXR0b25FbmFibGVkIiwidGh1bWJEb3duQnV0dG9uUHJlc3NlZCIsInRodW1iVXBCdXR0b25QcmVzc2VkIiwic2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMiLCJzcGxpY2UiLCJzaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcFRleHQiLCJqb2luIiwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwIiwic2hvd01lc3NhZ2VTdHJpcCIsIm1lc3NhZ2VTdHJpcFRleHQiLCJjbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlIiwidGV4dCIsIl9qc3giLCJQb3BvdmVyIiwiaWQiLCJnZXRJZCIsInNob3dBcnJvdyIsInNob3dIZWFkZXIiLCJwbGFjZW1lbnQiLCJQbGFjZW1lbnRUeXBlIiwiQm90dG9tIiwiY2xhc3MiLCJjaGlsZHJlbiIsImZvb3RlciIsImdldFRvb2xiYXIiLCJ0b29sYmFyIiwib2tCdXR0b24iLCJnZXRPa0J1dHRvbiIsInNob3dBbGxCdXR0b24iLCJnZXRTaG93QWxsQnV0dG9uIiwiT3ZlcmZsb3dUb29sYmFyIiwiX2pzeHMiLCJfRnJhZ21lbnQiLCJUb29sYmFyU3BhY2VyIiwiQnV0dG9uIiwiQnV0dG9uVHlwZSIsIkVtcGhhc2l6ZWQiLCJmb3JtYXRUb2tlbnMiLCJtYXAiLCJ2YWwiLCJkZWVwQ2xvbmUiLCJvblN0YXRlQ2hhbmdlIiwiY2hhbmdlZFByb3BzIiwiYXJndW1lbnRzIiwidW5kZWZpbmVkIiwiaW5jbHVkZXMiLCJyZXNldCIsIm9uc2FwZm9jdXNsZWF2ZSIsIm9uVGh1bWJVcFByZXNzZWQiLCJ0cmlnZ2VyUFhJbnRlZ3JhdGlvbiIsIm9uVGh1bWJQcmVzc2VkIiwib25UaHVtYkRvd25QcmVzc2VkIiwiTWVzc2FnZVRvYXN0Iiwic2hvdyIsIiR0b3BHb0J0biIsImNyZWF0ZVJlZmVyZW5jZSIsInRodW1iVXBCdXR0b25Ub2tlbml6ZXIiLCJUb2dnbGVCdXR0b24iLCJpY29uIiwidG9vbHRpcCIsInByZXNzIiwiZW5hYmxlZCIsImJpbmRTdGF0ZSIsInByZXNzZWQiLCJGRVNSSGVscGVyIiwic2V0U2VtYW50aWNTdGVwbmFtZSIsInRodW1iRG93bkJ1dHRvblRva2VuaXplciIsInRodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlIiwidGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSIsIm91dFZCb3giLCJWQm94IiwiRmxleEJveCIsInJlbmRlclR5cGUiLCJFYXN5RmlsdGVySW5wdXQiLCJyZWNvbW1lbmRlZFZhbHVlcyIsInJlZiIsImVudGVyUHJlc3NlZCIsInF1ZXJ5Q2hhbmdlZCIsInF1ZXJ5IiwibGl2ZUNoYW5nZSIsIm9uR29CdXR0b25QcmVzcyIsInZpc2libGUiLCJhbGlnbkl0ZW1zIiwiRmxleEFsaWduSXRlbXMiLCJDZW50ZXIiLCJ3cmFwIiwiRmxleFdyYXAiLCJXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJGbGV4SnVzdGlmeUNvbnRlbnQiLCJTcGFjZUJldHdlZW4iLCJhaU5vdGljZSIsImNsb25lIiwiVG9rZW5pemVyIiwiZWRpdGFibGUiLCJhbmQiLCJyZW5kZXJNb2RlIiwiVG9rZW5pemVyUmVuZGVyTW9kZSIsIkxvb3NlIiwiY3R4Iiwib2JqZWN0IiwiZ2V0T2JqZWN0IiwiVG9rZW4iLCJpdGVtcyIsIm1hbmRhdG9yeSIsImlzS2V5TWFuZGF0b3J5IiwiZGVsZXRlIiwidG9rZW5JbmRleCIsImZpbmRJbmRleCIsIm5ld1Rva2VucyIsImNvbmNhdCIsInVwZGF0ZUZpbHRlcklucHV0IiwiY3VzdG9tRGF0YSIsIkN1c3RvbURhdGEiLCJjb2RlTGlzdCIsIkhCb3giLCJUcmFuc3BhcmVudCIsIiRzZWFyY2hJbnB1dCIsImZvY3VzIiwiTWVzc2FnZVN0cmlwIiwic2hvd0ljb24iLCJlbmFibGVGb3JtYXR0ZWRUZXh0Iiwic2hvd0Nsb3NlQnV0dG9uIiwiY2xvc2UiLCJub3QiLCJjdXJyZW50SW5wdXRWYWx1ZSIsImdldFZhbHVlIiwiY3VycmVudElucHV0UGxhY2Vob2xkZXIiLCJnZXRQbGFjZWhvbGRlciIsInNldFZhbHVlIiwiY2xlYXJBbGxGaWx0ZXJzIiwiTm9uZSIsInVwZGF0ZVRva2VuQXJyYXkiLCJjaGFuZ2VUeXBlIiwibmV3VG9rZW5TcGVjaWZpY1ZhbHVlcyIsInRva2VuS2V5IiwidCIsInNldFNlbGVjdGVkVmFsdWVzIiwiY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyIiwibmV3VG9rZW4iLCJjdXJyVmFsdWUiLCJzZXRQbGFjZWhvbGRlciIsImdldFRva2Vuc0luSW5pdGlhbFN0YXRlIiwibWFuZGF0b3J5VG9rZW5zIiwicmVxdWlyZWRLZXlzIiwiZ2V0S2V5IiwicmVuZGVyIiwicm0iLCJjb250cm9sIiwianN4IiwicmVuZGVyVXNpbmdSZW5kZXJNYW5hZ2VyIiwiZ2V0QWdncmVnYXRpb24iLCJDb250cm9sIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvciIsImNvbmZpZ3VyYWJsZSIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsImluaXRpYWxpemVyIl0sInNvdXJjZVJvb3QiOiIuIiwic291cmNlcyI6WyJFYXN5RmlsdGVyQmFyQ29udGFpbmVyLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTG9nIGZyb20gXCJzYXAvYmFzZS9Mb2dcIjtcbmltcG9ydCB0eXBlIHsgRW5oYW5jZVdpdGhVSTUsIFN0YXRlT2YgfSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQge1xuXHRhZ2dyZWdhdGlvbixcblx0Y3JlYXRlUmVmZXJlbmNlLFxuXHRkZWZpbmVSZWZlcmVuY2UsXG5cdGRlZmluZVN0YXRlLFxuXHRkZWZpbmVVSTVDbGFzcyxcblx0ZXZlbnQsXG5cdHByb3BlcnR5LFxuXHR0eXBlIFByb3BlcnRpZXNPZlxufSBmcm9tIFwic2FwL2ZlL2Jhc2UvQ2xhc3NTdXBwb3J0XCI7XG5pbXBvcnQgdHlwZSB7IFJlZiB9IGZyb20gXCJzYXAvZmUvYmFzZS9qc3gtcnVudGltZS9qc3hcIjtcbmltcG9ydCBqc3ggZnJvbSBcInNhcC9mZS9iYXNlL2pzeC1ydW50aW1lL2pzeFwiO1xuaW1wb3J0IFRva2VuIGZyb20gXCJzYXAvZmUvY29udHJvbHMvZWFzeUZpbHRlci9Ub2tlblwiO1xuaW1wb3J0IEJ1dHRvbiBmcm9tIFwic2FwL20vQnV0dG9uXCI7XG5pbXBvcnQgRmxleEJveCBmcm9tIFwic2FwL20vRmxleEJveFwiO1xuaW1wb3J0IFBvcG92ZXIgZnJvbSBcInNhcC9tL1BvcG92ZXJcIjtcbmltcG9ydCBUb2tlbml6ZXIgZnJvbSBcInNhcC9tL1Rva2VuaXplclwiO1xuaW1wb3J0IFZCb3ggZnJvbSBcInNhcC9tL1ZCb3hcIjtcbmltcG9ydCB7IEJ1dHRvblR5cGUsIEZsZXhBbGlnbkl0ZW1zLCBGbGV4SnVzdGlmeUNvbnRlbnQsIEZsZXhXcmFwLCBQbGFjZW1lbnRUeXBlLCBUb2tlbml6ZXJSZW5kZXJNb2RlIH0gZnJvbSBcInNhcC9tL2xpYnJhcnlcIjtcbmltcG9ydCB0eXBlIFVJNUV2ZW50IGZyb20gXCJzYXAvdWkvYmFzZS9FdmVudFwiO1xuaW1wb3J0IHR5cGUgeyAkQ29udHJvbFNldHRpbmdzIH0gZnJvbSBcInNhcC91aS9jb3JlL0NvbnRyb2xcIjtcbmltcG9ydCBDb250cm9sIGZyb20gXCJzYXAvdWkvY29yZS9Db250cm9sXCI7XG5pbXBvcnQgQ3VzdG9tRGF0YSBmcm9tIFwic2FwL3VpL2NvcmUvQ3VzdG9tRGF0YVwiO1xuaW1wb3J0IExpYiBmcm9tIFwic2FwL3VpL2NvcmUvTGliXCI7XG5pbXBvcnQgdHlwZSBSZW5kZXJNYW5hZ2VyIGZyb20gXCJzYXAvdWkvY29yZS9SZW5kZXJNYW5hZ2VyXCI7XG5pbXBvcnQgeyBJbnZpc2libGVNZXNzYWdlTW9kZSwgVmFsdWVTdGF0ZSB9IGZyb20gXCJzYXAvdWkvY29yZS9saWJyYXJ5XCI7XG5pbXBvcnQgdHlwZSBDb250ZXh0IGZyb20gXCJzYXAvdWkvbW9kZWwvQ29udGV4dFwiO1xuXG5pbXBvcnQgdHlwZSB7IFByaW1pdGl2ZVR5cGUgfSBmcm9tIFwiQHNhcC11eC92b2NhYnVsYXJpZXMtdHlwZXNcIjtcbmltcG9ydCB0eXBlIFJlc291cmNlQnVuZGxlIGZyb20gXCJzYXAvYmFzZS9pMThuL1Jlc291cmNlQnVuZGxlXCI7XG5pbXBvcnQgZGVlcENsb25lIGZyb20gXCJzYXAvYmFzZS91dGlsL2RlZXBDbG9uZVwiO1xuaW1wb3J0IHsgYW5kLCBiaW5kU3RhdGUsIG5vdCB9IGZyb20gXCJzYXAvZmUvYmFzZS9CaW5kaW5nVG9vbGtpdFwiO1xuaW1wb3J0IEVhc3lGaWx0ZXJJbnB1dCBmcm9tIFwic2FwL2ZlL2NvbnRyb2xzL2Vhc3lGaWx0ZXIvRWFzeUZpbHRlcklucHV0XCI7XG5pbXBvcnQgdHlwZSBFYXN5RmlsdGVyVG9rZW4gZnJvbSBcInNhcC9mZS9jb250cm9scy9lYXN5RmlsdGVyL1Rva2VuXCI7XG5pbXBvcnQgSEJveCBmcm9tIFwic2FwL20vSEJveFwiO1xuaW1wb3J0IE1lc3NhZ2VTdHJpcCBmcm9tIFwic2FwL20vTWVzc2FnZVN0cmlwXCI7XG5pbXBvcnQgTWVzc2FnZVRvYXN0IGZyb20gXCJzYXAvbS9NZXNzYWdlVG9hc3RcIjtcbmltcG9ydCBPdmVyZmxvd1Rvb2xiYXIgZnJvbSBcInNhcC9tL092ZXJmbG93VG9vbGJhclwiO1xuaW1wb3J0IFRvZ2dsZUJ1dHRvbiBmcm9tIFwic2FwL20vVG9nZ2xlQnV0dG9uXCI7XG5pbXBvcnQgVG9vbGJhclNwYWNlciBmcm9tIFwic2FwL20vVG9vbGJhclNwYWNlclwiO1xuaW1wb3J0IEludmlzaWJsZU1lc3NhZ2UgZnJvbSBcInNhcC91aS9jb3JlL0ludmlzaWJsZU1lc3NhZ2VcIjtcbmltcG9ydCBNZXNzYWdlVHlwZSBmcm9tIFwic2FwL3VpL2NvcmUvbWVzc2FnZS9NZXNzYWdlVHlwZVwiO1xuaW1wb3J0IEZpbHRlck9wZXJhdG9yIGZyb20gXCJzYXAvdWkvbW9kZWwvRmlsdGVyT3BlcmF0b3JcIjtcbmltcG9ydCBGRVNSSGVscGVyIGZyb20gXCJzYXAvdWkvcGVyZm9ybWFuY2UvdHJhY2UvRkVTUkhlbHBlclwiO1xuaW1wb3J0IHR5cGUgRWFzeUZpbHRlciBmcm9tIFwidXgvZW5nL2Zpb3JpYWkvcmV1c2UvZWFzeWZpbHRlci9FYXN5RmlsdGVyXCI7XG5pbXBvcnQgdHlwZSB7IEVhc3lGaWx0ZXJNZXRhZGF0YSwgRWFzeUZpbHRlclJlc3VsdCwgUHJvcGVydHlNZXRhZGF0YSB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9lYXN5ZmlsdGVyL0Vhc3lGaWx0ZXJcIjtcbmltcG9ydCB0eXBlIHsgU3VjY2VzcyB9IGZyb20gXCJ1eC9lbmcvZmlvcmlhaS9yZXVzZS9zaGFyZWRcIjtcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3R5cGVzL2V4dGVuc2lvbl90eXBlc1wiO1xuaW1wb3J0IHsgdHJpZ2dlclBYSW50ZWdyYXRpb24gfSBmcm9tIFwiLi9QWEZlZWRiYWNrXCI7XG5pbXBvcnQgRWFzeUZpbHRlclV0aWxzIGZyb20gXCIuL3V0aWxzXCI7XG5cbi8vRm9yIGN1cnJlbnQgcmVsZWFzZSB3ZSBhcmUgaWdub3JpbmcgXCJBbGxcIiBhbmQgXCJBbnlcIlxuLy9XZSBjYW4gaW5jb3Jwb3JhdGUgdGhlc2UgdmFsdWVzIGluIGZ1dHVyZVxuZXhwb3J0IHR5cGUgQmV0d2VlblNlbGVjdGVkVmFsdWVzID0gW2Jvb2xlYW4sIGJvb2xlYW5dIHwgW3N0cmluZywgc3RyaW5nXSB8IFtudW1iZXIsIG51bWJlcl0gfCBbRGF0ZSwgRGF0ZV07XG5cbnR5cGUgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlID0gc3RyaW5nIHwgRGF0ZSB8IGJvb2xlYW4gfCBudW1iZXI7XG5cbmV4cG9ydCB0eXBlIENvZGVMaXN0VHlwZSA9IHtcblx0dmFsdWU6IFByaW1pdGl2ZVR5cGU7XG5cdGRlc2NyaXB0aW9uOiBsbG1SZXN1bHRGb3JTZWxlY3RlZFZhbHVlc1R5cGU7XG59O1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXMgPSBbQ29kZUxpc3RUeXBlLCBDb2RlTGlzdFR5cGVdO1xuXG5leHBvcnQgdHlwZSBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb24gPVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBFeGNsdWRlPEZpbHRlck9wZXJhdG9yLCBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CPjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBDb2RlTGlzdFR5cGVbXTtcblx0XHRcdG5vTWF0Y2g/OiBib29sZWFuO1xuXHQgIH1cblx0fCB7XG5cdFx0XHRvcGVyYXRvcjogRmlsdGVyT3BlcmF0b3IuQlQgfCBGaWx0ZXJPcGVyYXRvci5OQjtcblx0XHRcdHNlbGVjdGVkVmFsdWVzOiBWYWx1ZUhlbHBCZXR3ZWVuU2VsZWN0ZWRWYWx1ZXM7XG5cdFx0XHRub01hdGNoPzogYm9vbGVhbjtcblx0ICB9O1xuXG4vL1dlIHdpbGwgYmUgaGFuZGxpbmcgXCJBTExcIiBhbmQgXCJBTllcIiBhdCBsYXRlciBwb2ludCBvZiB0aW1lXG5leHBvcnQgdHlwZSBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbiA9XG5cdHwge1xuXHRcdFx0b3BlcmF0b3I6IEV4Y2x1ZGU8RmlsdGVyT3BlcmF0b3IsIEZpbHRlck9wZXJhdG9yLkJUIHwgRmlsdGVyT3BlcmF0b3IuTkI+O1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdIHwgYm9vbGVhbltdIHwgbnVtYmVyW10gfCBEYXRlW107XG5cdCAgfVxuXHR8IHtcblx0XHRcdG9wZXJhdG9yOiBGaWx0ZXJPcGVyYXRvci5CVCB8IEZpbHRlck9wZXJhdG9yLk5CO1xuXHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IEJldHdlZW5TZWxlY3RlZFZhbHVlcztcblx0ICB9O1xuXG5leHBvcnQgdHlwZSBUb2tlblR5cGUgPSBcIk1lbnVXaXRoQ2hlY2tCb3hcIiB8IFwiQ2FsZW5kYXJcIiB8IFwiVGltZVwiIHwgXCJWYWx1ZUhlbHBcIiB8IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIjtcblxuZXhwb3J0IHR5cGUgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdGJ1c3k6IGJvb2xlYW47XG5cdGlzUmVxdWlyZWQ/OiBib29sZWFuO1xufTtcblxuZXhwb3J0IHR5cGUgTm9uVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uID0ge1xuXHRrZXk6IHN0cmluZztcblx0bGFiZWw6IHN0cmluZztcblx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXTtcblx0dHlwZTogRXhjbHVkZTxUb2tlblR5cGUsIFwiVmFsdWVIZWxwXCI+O1xuXHRpc1JlcXVpcmVkPzogYm9vbGVhbjtcblx0YnVzeTogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFRva2VuRGVmaW5pdGlvbiA9IFZhbHVlSGVscFRva2VuRGVmaW5pdGlvbiB8IE5vblZhbHVlSGVscFRva2VuRGVmaW5pdGlvbjtcblxuZXhwb3J0IHR5cGUgVG9rZW5TZXR0ZXJzID0gXCJzZXRTZWxlY3RlZFZhbHVlc1wiO1xuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YSA9IFByb3BlcnR5TWV0YWRhdGEgJlxuXHQoXG5cdFx0fCB7XG5cdFx0XHRcdHR5cGU6IFwiVmFsdWVIZWxwXCI7XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFZhbHVlSGVscFNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHR0eXBlOiBFeGNsdWRlPFRva2VuVHlwZSwgXCJWYWx1ZUhlbHBcIj47XG5cdFx0XHRcdGRlZmF1bHRWYWx1ZT86IFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW107XG5cdFx0ICB9XG5cdCk7XG5cbi8vIFdlIG5lZWQgdGhlIHRoaXJkIGFyZ3VlbWVudCBiZWNhdXNlIHRoZXJlIG1pZ2h0IGJlIGEgY2hhbmNlIG9mIGNvbXBvc2l0ZSBrZXlzIHNjZW5hcmlvXG50eXBlIERhdGFGZXRjaGVyID0gKFxuXHRwcm9wZXJ0eU5hbWU6IHN0cmluZyxcblx0dmFsdWVPZkN1cnJlbnRQcm9wZXJ0eTogVG9rZW5TZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSxcblx0bGxtUmVzdWx0OiBTdWNjZXNzPEVhc3lGaWx0ZXJSZXN1bHQ+XG4pID0+IFByb21pc2U8VmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10+O1xuXG5pbnRlcmZhY2UgRm9jdXNIYW5kbGluZ0NvbnRyb2wge1xuXHRvbnNhcGZvY3VzbGVhdmU/OiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgdHlwZSBFYXN5RmlsdGVyQmFyQ29udGFpbmVyJFNob3dWYWx1ZUhlbHBFdmVudCA9IFVJNUV2ZW50PFxuXHR7XG5cdFx0a2V5OiBzdHJpbmc7XG5cdFx0dmFsdWVzOiB1bmtub3duW107XG5cdFx0cmVzb2x2ZTogKHZhbHVlOiBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPT4gdm9pZDtcblx0XHRyZWplY3Q6IChyZWFzb24/OiBFcnJvcikgPT4gdm9pZDtcblx0fSxcblx0RWFzeUZpbHRlckJhckNvbnRhaW5lclxuPjtcblxuLypcbiAqIERlbGl2ZXJ5IGZvciBiZXRhIHJlbGVhc2UgZm9yIHRoZSBlYXN5IGZpbHRlciBmZWF0dXJlLlxuICovXG5AZGVmaW5lVUk1Q2xhc3MoXCJzYXAuZmUuY29udHJvbHMuZWFzeUZpbHRlci5FYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIpXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFYXN5RmlsdGVyQmFyQ29udGFpbmVyIGV4dGVuZHMgQ29udHJvbCB7XG5cdEBwcm9wZXJ0eSh7IHR5cGU6IFwic3RyaW5nXCIgfSlcblx0Y29udGV4dFBhdGg/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJzdHJpbmdcIiB9KVxuXHRhcHBJZD86IHN0cmluZztcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcInN0cmluZ1wiIH0pXG5cdGVhc3lGaWx0ZXJMaWI/OiBzdHJpbmc7XG5cblx0QHByb3BlcnR5KHsgdHlwZTogXCJhcnJheVwiIH0pXG5cdGZpbHRlckJhck1ldGFkYXRhPzogRWFzeUZpbHRlclByb3BlcnR5TWV0YWRhdGFbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImFycmF5XCIgfSlcblx0cmVjb21tZW5kZWRWYWx1ZXM/OiBzdHJpbmdbXTtcblxuXHRAcHJvcGVydHkoeyB0eXBlOiBcImZ1bmN0aW9uXCIgfSlcblx0ZGF0YUZldGNoZXI/OiBEYXRhRmV0Y2hlcjtcblxuXHRAZGVmaW5lUmVmZXJlbmNlKClcblx0ZWFzeUZpbHRlcklucHV0ITogUmVmPEVuaGFuY2VXaXRoVUk1PEVhc3lGaWx0ZXJJbnB1dD4+O1xuXG5cdEBkZWZpbmVSZWZlcmVuY2UoKVxuXHR0b2tlbml6ZXIhOiBSZWY8VG9rZW5pemVyPjtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRjb250ZW50PzogQ29udHJvbDtcblxuXHRAYWdncmVnYXRpb24oeyB0eXBlOiBcInNhcC51aS5jb3JlLkNvbnRyb2xcIiB9KVxuXHRhaU5vdGljZT86IENvbnRyb2w7XG5cblx0QGV2ZW50KClcblx0dG9rZW5zQ2hhbmdlZD86IEV2ZW50SGFuZGxlcjxVSTVFdmVudDx7IHRva2VuczogVG9rZW5EZWZpbml0aW9uW107IHJlc2V0OiBib29sZWFuIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRxdWVyeUNoYW5nZWQ/OiBFdmVudEhhbmRsZXI8VUk1RXZlbnQ8eyBxdWVyeTogc3RyaW5nIH0sIEVhc3lGaWx0ZXJCYXJDb250YWluZXI+PjtcblxuXHRAZXZlbnQoKVxuXHRzaG93VmFsdWVIZWxwPzogRXZlbnRIYW5kbGVyPEVhc3lGaWx0ZXJCYXJDb250YWluZXIkU2hvd1ZhbHVlSGVscEV2ZW50PjtcblxuXHRAZXZlbnQoKVxuXHRjbGVhckZpbHRlcnM/OiBFdmVudEhhbmRsZXI7XG5cblx0QGV2ZW50KClcblx0YmVmb3JlUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdEBldmVudCgpXG5cdGFmdGVyUXVlcnlQcm9jZXNzaW5nPzogRXZlbnRIYW5kbGVyO1xuXG5cdHByaXZhdGUgcmVzb3VyY2VCdW5kbGUhOiBSZXNvdXJjZUJ1bmRsZTtcblxuXHRAZGVmaW5lU3RhdGUoKVxuXHRwcm90ZWN0ZWQgc3RhdGU6IFN0YXRlT2Y8e1xuXHRcdHNob3dSZXN1bHQ6IGJvb2xlYW47XG5cdFx0dG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXTtcblx0XHR0b2tlbml6ZXJFZGl0YWJsZTogYm9vbGVhbjtcblx0XHRzaG93U2luZ2xlVmFsdWVNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdHNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dD86IHN0cmluZztcblx0XHRtZXNzYWdlU3RyaXBUZXh0Pzogc3RyaW5nO1xuXHRcdHNob3dNZXNzYWdlU3RyaXA/OiBib29sZWFuO1xuXHRcdG1lc3NhZ2VTdHJpcFR5cGU6IE1lc3NhZ2VUeXBlO1xuXHRcdHRodW1iQnV0dG9uRW5hYmxlZDogYm9vbGVhbjtcblx0XHR0aHVtYlVwQnV0dG9uUHJlc3NlZDogYm9vbGVhbjtcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBib29sZWFuO1xuXHR9PiA9IHtcblx0XHRzaG93UmVzdWx0OiBmYWxzZSxcblx0XHR0b2tlbnM6IFtdIGFzIFRva2VuRGVmaW5pdGlvbltdLFxuXHRcdHRva2VuaXplckVkaXRhYmxlOiB0cnVlLFxuXHRcdHNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcDogZmFsc2UsXG5cdFx0c2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0OiBcIlwiLFxuXHRcdG1lc3NhZ2VTdHJpcFRleHQ6IFwiXCIsXG5cdFx0c2hvd01lc3NhZ2VTdHJpcDogZmFsc2UsXG5cdFx0bWVzc2FnZVN0cmlwVHlwZTogTWVzc2FnZVR5cGUuRXJyb3IsXG5cdFx0dGh1bWJCdXR0b25FbmFibGVkOiB0cnVlLFxuXHRcdHRodW1iVXBCdXR0b25QcmVzc2VkOiBmYWxzZSxcblx0XHR0aHVtYkRvd25CdXR0b25QcmVzc2VkOiBmYWxzZVxuXHR9O1xuXG5cdHByaXZhdGUgaW5uZXJDb250cm9sUG9wb3Zlcj86IFBvcG92ZXI7XG5cblx0cHJpdmF0ZSBva0J1dHRvbj86IEJ1dHRvbjtcblxuXHRwcml2YXRlIHNob3dBbGxCdXR0b24/OiBCdXR0b247XG5cblx0cHJpdmF0ZSB0b29sYmFyPzogT3ZlcmZsb3dUb29sYmFyO1xuXG5cdHByaXZhdGUgbWFuZGF0b3J5S2V5TWFwPzogUmVjb3JkPHN0cmluZywgYm9vbGVhbj47XG5cblx0Ly9JZiBzZXQgdG8gdHJ1ZSB0aGUgZXJyb3Igc3RhdGUgY2FuIGJlIHNlZW4gb24gdGhlIHRva2Vuc1xuXHRwcml2YXRlIGlzTWFuZGF0b3J5Q2hlY2tSZXF1aXJlZD86IGJvb2xlYW47XG5cblx0cHJpdmF0ZSBzaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSB0cnVlO1xuXG5cdHByaXZhdGUgaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZTtcblxuXHRwcml2YXRlIGludmlzaWJsZU1lc3NhZ2UhOiBJbnZpc2libGVNZXNzYWdlO1xuXG5cdGVhc3lmaWx0ZXI/OiBQcm9taXNlPHR5cGVvZiBFYXN5RmlsdGVyIHwgdW5kZWZpbmVkPjtcblxuXHRwcml2YXRlIHJlc29sdmVDb250ZW50UmVhZHkhOiAoKSA9PiB2b2lkO1xuXG5cdHByaXZhdGUgaW5wdXRGaWVsZFJlYWR5OiBQcm9taXNlPHZvaWQ+ID0gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcblx0XHR0aGlzLnJlc29sdmVDb250ZW50UmVhZHkgPSByZXNvbHZlO1xuXHR9KTtcblxuXHRwcml2YXRlIHNob3VsZE1lc3NhZ2VTdHJpcFJlbW92ZSA9IHRydWU7XG5cblx0Y29uc3RydWN0b3IocHJvcGVydGllczogc3RyaW5nIHwgKCRDb250cm9sU2V0dGluZ3MgJiBQcm9wZXJ0aWVzT2Y8RWFzeUZpbHRlckJhckNvbnRhaW5lcj4pLCBvdGhlcnM/OiAkQ29udHJvbFNldHRpbmdzKSB7XG5cdFx0c3VwZXIocHJvcGVydGllcyBhcyBzdHJpbmcsIG90aGVycyk7XG5cdFx0dGhpcy5pbml0aWFsaXplKCk7XG5cdFx0dGhpcy5pbnZpc2libGVNZXNzYWdlID0gSW52aXNpYmxlTWVzc2FnZS5nZXRJbnN0YW5jZSgpO1xuXHR9XG5cblx0c2V0RWFzeUZpbHRlckxpYihlYXN5RmlsdGVyTGliOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnNldFByb3BlcnR5KFwiZWFzeUZpbHRlckxpYlwiLCBlYXN5RmlsdGVyTGliKTtcblx0XHRpZiAodGhpcy5lYXN5RmlsdGVyTGliKSB7XG5cdFx0XHR0aGlzLmVhc3lmaWx0ZXIgPSBpbXBvcnQodGhpcy5lYXN5RmlsdGVyTGliKTtcblx0XHR9XG5cdH1cblxuXHRhc3luYyBzZXRBcHBJZChhcHBJZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCF0aGlzLmFwcElkKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiYXBwSWRcIiwgYXBwSWQsIHRydWUpO1xuXHRcdFx0YXdhaXQgdGhpcy5pbnB1dEZpZWxkUmVhZHk7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQcm9wZXJ0eShcImFwcElkXCIsIGFwcElkLCB0cnVlKTtcblx0XHRcdGF3YWl0IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmluaXRTaGVsbEhpc3RvcnlQcm92aWRlcigpO1xuXHRcdH1cblx0fVxuXG5cdHNldEZpbHRlckJhck1ldGFkYXRhKGZpbHRlckJhck1ldGFkYXRhOiBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmZpbHRlckJhck1ldGFkYXRhKSB7XG5cdFx0XHR0aGlzLnNldFByb3BlcnR5KFwiZmlsdGVyQmFyTWV0YWRhdGFcIiwgZmlsdGVyQmFyTWV0YWRhdGEsIHRydWUpO1xuXHRcdFx0Ly8gcG9wdWxhdGUgdGhlIHRva2VucyB3aXRoIGRlZmF1bHQgdmFsdWVcblx0XHRcdGNvbnN0IHRva2VucyA9IHRoaXMuZ2V0RGVmYXVsdFRva2VucygpO1xuXHRcdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdFx0dGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyID0gdGhpcy5jcmVhdGVQb3BvdmVyRm9ySW5uZXJDb250cm9scygpO1xuXHRcdFx0XHR0aGlzLmFkZERlcGVuZGVudCh0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB0b2tlbnM7XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0b2tlbnMubGVuZ3RoID4gMDtcblx0XHRcdC8vL1dlIGRvbid0IHdhbnQgdG8gZGlzcGxheSBlcnJvciB2YWx1ZVN0YXRlTWVzc2FnZSBhcyBzb29uIHRoZSBjb250cm9sIHJlbmRlcnNcblx0XHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHRcdC8vb25Ub2tlbkNoYW5nZSBldmVudCBzaG91bGQgbm90IGJlIGZpcmVkIHdoZW4gaW5pdGlhbCBzZXQgb2YgdG9rZW5zIGFyZSBzZXRcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHR9XG5cblx0aW5pdCgpOiB2b2lkIHtcblx0XHR0aGlzLnJlc291cmNlQnVuZGxlID0gTGliLmdldFJlc291cmNlQnVuZGxlRm9yKFwic2FwLmZlLmNvbnRyb2xzXCIpITtcblx0fVxuXG5cdGluaXRpYWxpemUoKTogdm9pZCB7XG5cdFx0dGhpcy5jb250ZW50ID0gdGhpcy5jcmVhdGVDb250ZW50KCk7XG5cdFx0dGhpcy5yZXNvbHZlQ29udGVudFJlYWR5KCk7XG5cdFx0aWYgKCF0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIpIHtcblx0XHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3ZlciA9IHRoaXMuY3JlYXRlUG9wb3ZlckZvcklubmVyQ29udHJvbHMoKTtcblx0XHRcdHRoaXMuYWRkRGVwZW5kZW50KHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcik7XG5cdFx0fVxuXHRcdC8vV2UgZG9uJ3Qgd2FudCB0byBkaXNwbGF5IGVycm9yIHZhbHVlU3RhdGVNZXNzYWdlIGFzIHNvb24gdGhlIGNvbnRyb2wgcmVuZGVyc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gdHJ1ZTtcblx0XHQvL29uVG9rZW5DaGFuZ2UgZXZlbnQgc2hvdWxkIG5vdCBiZSBmaXJlZCB3aGVuIGluaXRpYWwgc2V0IG9mIHRva2VucyBhcmUgc2V0XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSBmYWxzZTtcblx0fVxuXG5cdC8vIFRoaXMgbWV0aG9kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSB1cGRhdGluZyB0aGUgc3RhdGUsIG9uY2UgdGhlIHN0YXRlIGlzIHVwZGF0ZWQgdGhlIHByZXZpb3VzIG92ZXJyaWRkZW4gZGVmYXVsdCB2YWx1ZXMgd291bGQgYmUgZ29uZSBmb3JldmVyXG5cdGdldERlZmF1bHRUb2tlbnMoKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHRva2VuczogVG9rZW5EZWZpbml0aW9uW10gPSBbXTtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHR0aGlzLmZpbHRlckJhck1ldGFkYXRhPy5mb3JFYWNoKChkYXRhKSA9PiB7XG5cdFx0XHRjb25zdCBpc1JlcXVpcmVkID0gZGF0YS5yZXF1aXJlZDtcblx0XHRcdGlmIChpc1JlcXVpcmVkKSB7XG5cdFx0XHRcdCh0aGlzLm1hbmRhdG9yeUtleU1hcCBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPilbZGF0YS5uYW1lXSA9IHRydWU7XG5cdFx0XHRcdC8vQ2hlY2sgd2hldGhlciB0aGUga2V5cyBleGlzdCBpbiB0aGUgY3VycmVudCBzdGF0ZSBlbHNlIHB1c2ggaXQgYWNyb3NzXG5cdFx0XHRcdGlmIChkYXRhLnR5cGUgPT09IFwiVmFsdWVIZWxwXCIpIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBWYWx1ZUhlbHBTZWxlY3RlZFZhbHVlc0RlZmluaXRpb25bXSkgPz8gW10sXG5cdFx0XHRcdFx0XHR0eXBlOiBkYXRhLnR5cGUsXG5cdFx0XHRcdFx0XHRidXN5OiBmYWxzZSxcblx0XHRcdFx0XHRcdGlzUmVxdWlyZWRcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR0b2tlbnMucHVzaCh7XG5cdFx0XHRcdFx0XHRrZXk6IGRhdGEubmFtZSxcblx0XHRcdFx0XHRcdGxhYmVsOiBkYXRhLmxhYmVsIGFzIHN0cmluZyxcblx0XHRcdFx0XHRcdGtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXM6IChkYXRhLmRlZmF1bHRWYWx1ZSBhcyBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdKSA/PyBbXSxcblx0XHRcdFx0XHRcdHR5cGU6IGRhdGEudHlwZSxcblx0XHRcdFx0XHRcdGJ1c3k6IGZhbHNlLFxuXHRcdFx0XHRcdFx0aXNSZXF1aXJlZFxuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdG9uRW50ZXJQcmVzc2VkKGU6IFVJNUV2ZW50PHsgcXVlcnk6IHN0cmluZyB9LCBFYXN5RmlsdGVySW5wdXQ+KTogdm9pZCB7XG5cdFx0dGhpcy5vbkdvUHJlc3MoZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSk7XG5cdH1cblxuXHQvL01ha2luZyBpdCBwdWJsaWMgYmVjYXVzZSBpbiBsaXZlIG1vZGUgdGhlIGFwcCBkZXZlbG9wZXIgY2FuIGRlY2lkZSB3aGV0aGVyIHRvIGRpc3BsYXkgdGhlIGVycm9yIFZhbHVlU3RhdGVNZXNzYWdlXG5cdC8vSW4gbm9uLWxpdmUgbW9kZSAsIHdlIGFyZSBhbHJlYWR5IGludGVybmFsbHkgaGFuZGxpbmcgaXQgb24gZXZlcnkgdGltZSB0aW1lIGEgdXNlciBjbGlja3Mgb24gR08vRW50ZXIgYnV0dG9uc1xuXHRwdWJsaWMgY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpOiBib29sZWFuIHtcblx0XHRjb25zdCB0b2tlbnNJblN0YXRlID0gdGhpcy5nZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk7XG5cdFx0aWYgKHRva2Vuc0luU3RhdGUubGVuZ3RoICE9PSAwKSB7XG5cdFx0XHRjb25zdCB0b2tlbnMgPSB0aGlzLmdldEFjdHVhbFRva2Vuc0Zyb21TdGF0ZSh0b2tlbnNJblN0YXRlKTtcblx0XHRcdHRva2Vucz8uZm9yRWFjaCgodG9rZW4pID0+IHtcblx0XHRcdFx0dG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlXCIsIFZhbHVlU3RhdGUuRXJyb3IpO1xuXHRcdFx0XHR0b2tlbi5zZXRQcm9wZXJ0eShcInZhbHVlU3RhdGVUZXh0XCIsIHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfTUFOREFUT1JZX1RPS0VOX0VSUk9SXCIpKTtcblx0XHRcdFx0dG9rZW4ub3BlblZhbHVlU3RhdGVNZXNzYWdlKCk7XG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VBbGxNYW5kYXRvcnlWYWx1ZVN0YXRlTWVzc2FnZXMoKTogdm9pZCB7XG5cdFx0Y29uc3QgZWFzeVRva2VucyA9IHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpIGFzIEVhc3lGaWx0ZXJUb2tlbltdO1xuXHRcdGVhc3lUb2tlbnMuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLmNsb3NlVmFsdWVTdGF0ZU1lc3NhZ2UoKSk7XG5cdH1cblxuXHRhc3luYyBvbkdvUHJlc3MobWFnaWNRdWVyeTogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0aWYgKCFtYWdpY1F1ZXJ5KSB7XG5cdFx0XHR0aGlzLnJlc2V0U3RhdGUoKTtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cblx0XHQvLyBDYWxsIEFJIHNlcnZpY2UgdG8gZ2V0IHRoZSBmaWx0ZXIgY3JpdGVyaWFcblx0XHRjb25zdCBlYXN5ZmlsdGVyID0gYXdhaXQgdGhpcy5lYXN5ZmlsdGVyO1xuXHRcdGlmICghZWFzeWZpbHRlcikge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmZpcmVFdmVudChcImJlZm9yZVF1ZXJ5UHJvY2Vzc2luZ1wiKTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJNZXRhZGF0YTogRWFzeUZpbHRlck1ldGFkYXRhID0ge1xuXHRcdFx0dmVyc2lvbjogMSxcblx0XHRcdGVudGl0eVNldDogdGhpcy5jb250ZXh0UGF0aCxcblx0XHRcdGZpZWxkczogdGhpcy5maWx0ZXJCYXJNZXRhZGF0YSBhcyBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdXG5cdFx0fTtcblxuXHRcdGNvbnN0IGVhc3lGaWx0ZXJSZXN1bHQgPSBhd2FpdCBlYXN5ZmlsdGVyLmVhc3lGaWx0ZXIobWFnaWNRdWVyeSwgZWFzeUZpbHRlck1ldGFkYXRhKTtcblxuXHRcdC8vV2Ugc2hvdWxkIG5vdCBjaGFuZ2UgdGhlIG1lc3NhZ2Ugc3RyaXAgZm9yIHRoZSBmaXJzdCB0aW1lIHdoZW4gdGhlIEdPIGJ1dHRvbiBpcyBwcmVzc2VkLCBiZWNhdXNlIGl0IGhhcyBhbHJlYWR5IGJlZW4gY2FsY3VsYXRlZCBpbiB0aGUgRWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEgbWV0aG9kXG5cdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSBmYWxzZTtcblx0XHRpZiAoZWFzeUZpbHRlclJlc3VsdC5zdWNjZXNzKSB7XG5cdFx0XHQvL09ubHkgYWRkIHRoZSByZWNlbnQgcXVlcnkgd2hlbiB0aGUgY2FsbCBpcyBzdWNjZXNzXG5cdFx0XHQvL0RvIG5vdCB0cmFjayB0aGUgcmVjZW50IHF1ZXJpZXMgd2hlbiB0aGUgaXNIaXN0b3J5RW5hYmxlZCBpcyBzZXQgdG8gZmFsc2Vcblx0XHRcdC8vSXQgd291bGQgYmUgYSB2aW9sYXRpb24gdG8gdXNlcnMgcHJpdmFjeVxuXHRcdFx0aWYgKHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmlzSGlzdG9yeUVuYWJsZWQoKSA/PyBmYWxzZSkge1xuXHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5hZGRSZWNlbnRRdWVyeShtYWdpY1F1ZXJ5KTtcblx0XHRcdH1cblx0XHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEudmVyc2lvbiA9PT0gMSkge1xuXHRcdFx0XHR0aGlzLmhhbmRsZVYxU3VjY2VzcyhlYXN5RmlsdGVyUmVzdWx0KTtcblx0XHRcdH0gZWxzZSBpZiAoZWFzeUZpbHRlclJlc3VsdC5kYXRhLnZlcnNpb24gPT09IDIpIHtcblx0XHRcdFx0Ly8gQ3JlYXRlIHRoZSBzYXAudWkubW9kZWwuRmlsdGVyIGZyb20gdGhlIGZpbHRlciBhbmQgYXBwbHkgaXQgZGlyZWN0bHkgdG8gdGhlIGxpc3QgYmluZGluZ1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBlcnJvclxuXHRcdFx0dGhpcy5yZW1vdmVOb25NYW5kYXRvcnlUb2tlbnMoKTtcblx0XHRcdHRoaXMuc2V0TWVzc2FnZVN0cmlwKGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSk7XG5cdFx0XHR0aGlzLmludmlzaWJsZU1lc3NhZ2UuYW5ub3VuY2UodGhpcy5yZXNvdXJjZUJ1bmRsZS5nZXRUZXh0KGVhc3lGaWx0ZXJSZXN1bHQubWVzc2FnZSksIEludmlzaWJsZU1lc3NhZ2VNb2RlLkFzc2VydGl2ZSk7XG5cdFx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFR5cGUgPSBNZXNzYWdlVHlwZS5XYXJuaW5nO1xuXHRcdFx0TG9nLmVycm9yKFwiRXJyb3Igd2hpbGUgZ2VuZXJhdGluZyBmaWx0ZXIgY3JpdGVyaWE6IFwiLCBlYXN5RmlsdGVyUmVzdWx0Lm1lc3NhZ2UpO1xuXHRcdH1cblxuXHRcdHRoaXMuZmlyZUV2ZW50KFwiYWZ0ZXJRdWVyeVByb2Nlc3NpbmdcIik7XG5cdH1cblxuXHQvKipcblx0ICogSGFuZGxlcyB0aGUgc3VjY2VzcyByZXNwb25zZSBmcm9tIHRoZSBBSSBzZXJ2aWNlIGZvciB2ZXJzaW9uIDEgb2YgdGhlIGVhc3kgZmlsdGVyLlxuXHQgKiBAcGFyYW0gZWFzeUZpbHRlclJlc3VsdCBUaGUgcmVzdWx0IGZyb20gdGhlIEFJIHNlcnZpY2Vcblx0ICogQHByaXZhdGVcblx0ICovXG5cdHByaXZhdGUgaGFuZGxlVjFTdWNjZXNzKGVhc3lGaWx0ZXJSZXN1bHQ6IFN1Y2Nlc3M8RWFzeUZpbHRlci5FYXN5RmlsdGVyUmVzdWx0Pik6IHZvaWQge1xuXHRcdGlmIChlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyKSB7XG5cdFx0XHQvLyBXZSBuZWVkIHRvIHNob3cgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIHRoYXQgdGhlIGZpbHRlciBjcml0ZXJpYSBoYXMgYmVlbiBnZW5lcmF0ZWRcblx0XHRcdExvZy5kZWJ1ZyhcIkZpbHRlciBjcml0ZXJpYSBnZW5lcmF0ZWQ6IFwiLCBKU09OLnN0cmluZ2lmeShlYXN5RmlsdGVyUmVzdWx0LmRhdGEuZmlsdGVyLCBudWxsLCAyKSk7XG5cblx0XHRcdGNvbnN0IHRva2VucyA9IFsuLi50aGlzLnN0YXRlLnRva2Vuc10uZmlsdGVyKCh0b2tlbikgPT4gdG9rZW4uaXNSZXF1aXJlZCk7XG5cblx0XHRcdC8vIENsZWFyIHRoZSBwcmV2aW91cyBtZXNzYWdlIHN0cmlwIGZvciB2YWxpZGF0ZWQgZmlsdGVyc1xuXHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpO1xuXG5cdFx0XHQvLyBWYWxpZGF0ZSBhbmQgYXBwbHkgdGhlIGZpbHRlciBjcml0ZXJpYVxuXHRcdFx0RWFzeUZpbHRlclV0aWxzLmZvcm1hdERhdGEoXG5cdFx0XHRcdHRva2Vucyxcblx0XHRcdFx0ZWFzeUZpbHRlclJlc3VsdC5kYXRhLmZpbHRlcixcblx0XHRcdFx0dGhpcy5maWx0ZXJCYXJNZXRhZGF0YSBhcyBFYXN5RmlsdGVyUHJvcGVydHlNZXRhZGF0YVtdLFxuXHRcdFx0XHR0aGlzLnNldE1lc3NhZ2VTdHJpcC5iaW5kKHRoaXMpXG5cdFx0XHQpO1xuXG5cdFx0XHQvL1dlIG9ubHkgaGF2ZSB0byBjYWxsIHRoZSBkYXRhRmV0Y2hlciBvbiB0aGUgVkggdG9rZW5zIHdoaWNoIGhhdmUgYmVlbiBhc2tlZCBieSB0aGUgdXNlclxuXHRcdFx0Ly9JbiBNYWRuYXRvcnkgdG9rZW5zIGNhc2UgdGhlIGRlZmF1bHRWYWx1ZXMgYXJlIGFscmVhZHkgZ2l2ZW4sIHNvIG5vIG5lZWQgdG8gY2FsbCBkYXRhRmV0Y2hlciBvbiBpdFxuXG5cdFx0XHRjb25zdCBhbGxWYWx1ZUhlbHBUb2tlbnMgPSB0b2tlbnMuZmlsdGVyKChyZXN1bHQpID0+IHJlc3VsdC50eXBlID09PSBcIlZhbHVlSGVscFwiKTtcblx0XHRcdGNvbnN0IHJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zID0gYWxsVmFsdWVIZWxwVG9rZW5zLmZpbHRlcigodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0cmV0dXJuIGVhc3lGaWx0ZXJSZXN1bHQuZGF0YS5maWx0ZXI/LmZpbmQoKGxsbVJlc3VsdCkgPT4gbGxtUmVzdWx0Lm5hbWUgPT09IHZhbHVlSGVscFRva2VuLmtleSk7XG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKHRoaXMuZGF0YUZldGNoZXIpIHtcblx0XHRcdFx0KHJlcXVpcmVkVmFsdWVIZWxwVG9rZW5zIGFzIHVua25vd24gYXMgVmFsdWVIZWxwVG9rZW5EZWZpbml0aW9uW10pLmZvckVhY2goYXN5bmMgKHZhbHVlSGVscFRva2VuKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5kYXRhRmV0Y2hlcj8uKFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5LFxuXHRcdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyBhcyB1bmtub3duIGFzIFRva2VuU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0XHRcdFx0XHRlYXN5RmlsdGVyUmVzdWx0XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5idXN5ID0gZmFsc2U7XG5cdFx0XHRcdFx0aWYgKHJlc3VsdCkge1xuXHRcdFx0XHRcdFx0Ly9XZSBzaG91bGQgbm90IGNoYW5nZSB0aGUgbWVzc2FnZSBzdHJpcCBmb3IgdGhlIGZpcnN0IHRpbWUgd2hlbiB0aGUgR08gYnV0dG9uIGlzIHByZXNzZWQsIGJlY2F1c2UgaXQgaGFzIGFscmVhZHkgYmVlbiBjYWxjdWxhdGVkIGluIHRoZSBFYXN5RmlsdGVyVXRpbHMuZm9ybWF0RGF0YSBtZXRob2Rcblx0XHRcdFx0XHRcdHRoaXMuc2hvdWxkTWVzc2FnZVN0cmlwUmVtb3ZlID0gZmFsc2U7XG5cdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzID0gcmVzdWx0O1xuXHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdXBkYXRlZFRva2Vucztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly9JZiBkYXRhRmV0Y2hlciBpcyBub3QgdGhlcmUsIHRoZW4gbW9jayB0aGUgdmFsdWUgYW5kIGRlc2NyaXB0aW9uIHdpdGggdGhlIHNhbWUgcmVzdWx0IGNvbWluZyBmcm9tIHRoZSBMTE1cblx0XHRcdFx0cmVxdWlyZWRWYWx1ZUhlbHBUb2tlbnMuZm9yRWFjaCgodmFsdWVIZWxwVG9rZW4pID0+IHtcblx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5idXN5ID0gZmFsc2U7XG5cdFx0XHRcdFx0dmFsdWVIZWxwVG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5mb3JFYWNoKChrZXlTcGVjaWZpY1ZhbHVlLCBpZHgpID0+IHtcblx0XHRcdFx0XHRcdGlmIChrZXlTcGVjaWZpY1ZhbHVlLm9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5CVCB8fCBrZXlTcGVjaWZpY1ZhbHVlLm9wZXJhdG9yID09PSBGaWx0ZXJPcGVyYXRvci5OQikge1xuXHRcdFx0XHRcdFx0XHR2YWx1ZUhlbHBUb2tlbi5rZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzW2lkeF0uc2VsZWN0ZWRWYWx1ZXMgPSBbXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMF0sXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjoga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1swXSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFsdWU6IGtleVNwZWNpZmljVmFsdWUuc2VsZWN0ZWRWYWx1ZXNbMV0sXG5cdFx0XHRcdFx0XHRcdFx0XHRkZXNjcmlwdGlvbjoga2V5U3BlY2lmaWNWYWx1ZS5zZWxlY3RlZFZhbHVlc1sxXSBhcyB1bmtub3duIGFzIGxsbVJlc3VsdEZvclNlbGVjdGVkVmFsdWVzVHlwZVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlcy5mb3JFYWNoKCh2YWx1ZSwgc3ViSW5keCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHZhbHVlSGVscFRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNbaWR4XS5zZWxlY3RlZFZhbHVlc1tzdWJJbmR4XSA9IHtcblx0XHRcdFx0XHRcdFx0XHRcdHZhbHVlLFxuXHRcdFx0XHRcdFx0XHRcdFx0ZGVzY3JpcHRpb246IHZhbHVlIGFzIHVua25vd24gYXMgbGxtUmVzdWx0Rm9yU2VsZWN0ZWRWYWx1ZXNUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCB1cGRhdGVkVG9rZW5zID0gdGhpcy52ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyh0b2tlbnMpO1xuXHRcdFx0dGhpcy5zdGF0ZS5zaG93UmVzdWx0ID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJCdXR0b25FbmFibGVkID0gdHJ1ZTtcblx0XHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50aHVtYlVwQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSB1cGRhdGVkVG9rZW5zO1xuXHRcdH1cblx0fVxuXG5cdC8vZXZlcnkgc2luZ2xlIHNlbGVjdCBtZW51IHR5cGUgc2hvdWxkIGhhdmUgb25seSBvbmUgdmFsdWUsIGVsc2Ugc3BsaWNlIHRvIG9uZSB2YWx1ZSBhbmQgdXBkYXRlIHRoZSAgbWVzc2FnZSBzdHJpcFxuXHR2ZXJpZnlTaW5nbGVTZWxlY3RUb2tlblZhbHVlcyh0b2tlbnM6IFRva2VuRGVmaW5pdGlvbltdKTogVG9rZW5EZWZpbml0aW9uW10ge1xuXHRcdGNvbnN0IHNpbmdsZVNlbGVjdFRva2VuTGFiZWxzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRva2VuLnR5cGUgPT09IFwiTWVudVdpdGhTaW5nbGVTZWxlY3RcIikge1xuXHRcdFx0XHRpZiAodG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1swXS5zZWxlY3RlZFZhbHVlcy5sZW5ndGggPiAxKSB7XG5cdFx0XHRcdFx0c2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMucHVzaCh0b2tlbi5sYWJlbCk7XG5cdFx0XHRcdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc1swXS5zZWxlY3RlZFZhbHVlcy5zcGxpY2UoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9KTtcblx0XHRpZiAoc2luZ2xlU2VsZWN0VG9rZW5MYWJlbHMubGVuZ3RoKSB7XG5cdFx0XHR0aGlzLnN0YXRlLnNpbmdsZVZhbHVlTWVzc2FnZVN0cmlwVGV4dCA9IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfU0lOR0xFX1ZBTFVFX01FU1NBR0VcIiwgW1xuXHRcdFx0XHRgPHN0cm9uZz4ke3NpbmdsZVNlbGVjdFRva2VuTGFiZWxzLmpvaW4oXCIsIFwiKX08L3N0cm9uZz5gXG5cdFx0XHRdKTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRva2Vucztcblx0fVxuXG5cdGNsZWFyTWVzc2FnZVN0cmlwKCk6IHZvaWQge1xuXHRcdHRoaXMuc3RhdGUudGh1bWJEb3duQnV0dG9uUHJlc3NlZCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUudGh1bWJVcEJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnNob3dNZXNzYWdlU3RyaXAgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLm1lc3NhZ2VTdHJpcFRleHQgPSBcIlwiO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVHlwZSA9IE1lc3NhZ2VUeXBlLkVycm9yO1xuXHR9XG5cblx0Y2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnNob3dTaW5nbGVWYWx1ZU1lc3NhZ2VTdHJpcCA9IGZhbHNlO1xuXHRcdHRoaXMuc3RhdGUuc2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0ID0gXCJcIjtcblx0fVxuXG5cdHNldE1lc3NhZ2VTdHJpcCh0ZXh0OiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkJ1dHRvbkVuYWJsZWQgPSB0cnVlO1xuXHRcdHRoaXMuc3RhdGUubWVzc2FnZVN0cmlwVGV4dCA9IHRleHQ7XG5cdFx0dGhpcy5zdGF0ZS5zaG93TWVzc2FnZVN0cmlwID0gdHJ1ZTtcblx0fVxuXG5cdGNyZWF0ZVBvcG92ZXJGb3JJbm5lckNvbnRyb2xzKCk6IFBvcG92ZXIge1xuXHRcdGlmICghdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyKSB7XG5cdFx0XHR0aGlzLmlubmVyQ29udHJvbFBvcG92ZXIgPSAoXG5cdFx0XHRcdDxQb3BvdmVyXG5cdFx0XHRcdFx0aWQ9e3RoaXMuZ2V0SWQoKSArIFwiLWlubmVyUG9wb3ZlclwifVxuXHRcdFx0XHRcdHNob3dBcnJvdz17ZmFsc2V9XG5cdFx0XHRcdFx0c2hvd0hlYWRlcj17dHJ1ZX1cblx0XHRcdFx0XHRwbGFjZW1lbnQ9e1BsYWNlbWVudFR5cGUuQm90dG9tfVxuXHRcdFx0XHRcdGNsYXNzPVwic2FwVWlNZWRpdW1NYXJnaW5Cb3R0b21cIlxuXHRcdFx0XHQ+XG5cdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdGZvb3RlcjogdGhpcy5nZXRUb29sYmFyKClcblx0XHRcdFx0XHR9fVxuXHRcdFx0XHQ8L1BvcG92ZXI+XG5cdFx0XHQpO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5pbm5lckNvbnRyb2xQb3BvdmVyIGFzIFBvcG92ZXI7XG5cdH1cblxuXHRnZXRUb29sYmFyKCk6IE92ZXJmbG93VG9vbGJhciB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLnRvb2xiYXIpIHtcblx0XHRcdGNvbnN0IG9rQnV0dG9uID0gdGhpcy5nZXRPa0J1dHRvbigpO1xuXHRcdFx0Y29uc3Qgc2hvd0FsbEJ1dHRvbiA9IHRoaXMuZ2V0U2hvd0FsbEJ1dHRvbigpO1xuXHRcdFx0dGhpcy50b29sYmFyID0gKFxuXHRcdFx0XHQ8T3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0XHRcdHt7XG5cdFx0XHRcdFx0XHRjb250ZW50OiAoXG5cdFx0XHRcdFx0XHRcdDw+XG5cdFx0XHRcdFx0XHRcdFx0PFRvb2xiYXJTcGFjZXIgLz5cblx0XHRcdFx0XHRcdFx0XHR7b2tCdXR0b259XG5cdFx0XHRcdFx0XHRcdFx0e3Nob3dBbGxCdXR0b259XG5cdFx0XHRcdFx0XHRcdDwvPlxuXHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdH19XG5cdFx0XHRcdDwvT3ZlcmZsb3dUb29sYmFyPlxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMudG9vbGJhcjtcblx0fVxuXG5cdGdldE9rQnV0dG9uKCk6IEJ1dHRvbiB8IHVuZGVmaW5lZCB7XG5cdFx0aWYgKCF0aGlzLm9rQnV0dG9uKSB7XG5cdFx0XHR0aGlzLm9rQnV0dG9uID0gPEJ1dHRvbiB0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1BPUE9WRVJfT0tcIil9IHR5cGU9e0J1dHRvblR5cGUuRW1waGFzaXplZH0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLm9rQnV0dG9uO1xuXHR9XG5cblx0Z2V0U2hvd0FsbEJ1dHRvbigpOiBCdXR0b24gfCB1bmRlZmluZWQge1xuXHRcdGlmICghdGhpcy5zaG93QWxsQnV0dG9uKSB7XG5cdFx0XHR0aGlzLnNob3dBbGxCdXR0b24gPSA8QnV0dG9uIHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUE9QT1ZFUl9TSE9XX0FMTF9JVEVNU1wiKX0gLz47XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLnNob3dBbGxCdXR0b247XG5cdH1cblxuXHRmb3JtYXRUb2tlbnModG9rZW5zOiBUb2tlbkRlZmluaXRpb25bXSk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdG9rZW5zLm1hcCgodG9rZW4pID0+IHtcblx0XHRcdGlmICh0b2tlbi50eXBlID09PSBcIlZhbHVlSGVscFwiKSB7XG5cdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0Li4udG9rZW4sXG5cdFx0XHRcdFx0a2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5tYXAoKHZhbHVlKSA9PiB7XG5cdFx0XHRcdFx0XHQvL01ha2luZyBzdXJlIHRoYXQgb25seSB0aGUgaWQgcGFydCBpcyBwYXNzZWRcblx0XHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHRcdG9wZXJhdG9yOiB2YWx1ZS5vcGVyYXRvcixcblx0XHRcdFx0XHRcdFx0c2VsZWN0ZWRWYWx1ZXM6IHZhbHVlLnNlbGVjdGVkVmFsdWVzLm1hcCgodmFsKSA9PiB2YWwudmFsdWUpXG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH0pXG5cdFx0XHRcdH0gYXMgVG9rZW5EZWZpbml0aW9uO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGRlZXBDbG9uZSh0b2tlbik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRvblN0YXRlQ2hhbmdlKGNoYW5nZWRQcm9wczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuXHRcdGlmIChjaGFuZ2VkUHJvcHMuaW5jbHVkZXMoXCJ0b2tlbnNcIikpIHtcblx0XHRcdGlmICh0aGlzLnNob3VsZFRva2VuQ2hhbmdlRXZlbnRGaXJlZCkge1xuXHRcdFx0XHR0aGlzLmZpcmVFdmVudChcInRva2Vuc0NoYW5nZWRcIiwge1xuXHRcdFx0XHRcdHRva2VuczogdGhpcy5mb3JtYXRUb2tlbnModGhpcy5zdGF0ZS50b2tlbnMgYXMgdW5rbm93biBhcyBUb2tlbkRlZmluaXRpb25bXSksXG5cdFx0XHRcdFx0cmVzZXQ6IHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnNcblx0XHRcdFx0fSk7XG5cdFx0XHR9XG5cdFx0XHR0aGlzLnN0YXRlLnNob3dSZXN1bHQgPSB0aGlzLnN0YXRlLnRva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0aWYgKCEodGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPz8gZmFsc2UpKSB7XG5cdFx0XHRcdHRoaXMuY2hlY2tJZkFsbE1hbmRhdG9yeVRva2Vuc0ZpbGxlZCgpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAodGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUpIHtcblx0XHRcdFx0LyoqXG5cdFx0XHRcdCAqIFRoZSB1c2VyIGhhcyBhY2tub3dsZWRnZWQgdGhlIG1lc3NhZ2Ugc3RyaXAgYW5kIHVuZGVyc3Rvb2QgdGhlIGlzc3VlLlxuXHRcdFx0XHQgKiBXaGVuIHRoZSB0b2tlbnMgYXJlIHVwZGF0ZWQgbmV4dCB0aW1lLCBkaXNwbGF5aW5nIHRoZSBtZXNzYWdlIHN0cmlwIGFnYWluIHNlcnZlcyBubyBwdXJwb3NlLlxuXHRcdFx0XHQgKiBBZGRpdGlvbmFsbHksIG9uY2UgdGhlIHRva2VucyBhcmUgdXBkYXRlZCwgdGhlIGlucHV0IGZpZWxkIHRleHQgd2lsbCBiZSByZW1vdmVkXG5cdFx0XHRcdCAqIHJlbmRlcmluZyB0aGUgbWVzc2FnZSBzdHJpcCBpcnJlbGV2YW50LiBIb3dldmVyLCB0aGUgbWVzc2FnZSBzdHJpcCB3aWxsIGJlIGRpc3BsYXllZCBhZ2FpbiB0aGUgbmV4dCB0aW1lIHRoZSBcIkdPXCIgYnV0dG9uIGlzIHByZXNzZWQuXG5cdFx0XHRcdCAqL1xuXHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdHRoaXMuY2xlYXJNZXNzYWdlU3RyaXBGb3JTaW5nbGVWYWx1ZSgpO1xuXHRcdFx0fVxuXHRcdFx0dGhpcy5zaG91bGRNZXNzYWdlU3RyaXBSZW1vdmUgPSB0cnVlO1xuXHRcdH1cblx0XHQvL1Jlc2V0dGluZyB0byBkZWZhdWx0IHZhbHVlc1xuXHRcdHRoaXMuaXNNYW5kYXRvcnlDaGVja1JlcXVpcmVkID0gZmFsc2U7XG5cdFx0dGhpcy5zaG91bGRUb2tlbkNoYW5nZUV2ZW50RmlyZWQgPSB0cnVlO1xuXHRcdHRoaXMuaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgPSBmYWxzZTtcblxuXHRcdC8vICBvbnNhcGZvY3VzbGVhdmUgbWV0aG9kIGluIHNhcC5tLlRva2VuaXplciBpcyBhdXRvbWF0aWNhbGx5IGNvbnZlcnRpbmcgdGhlIHJlbmRlcm1vZGUgb2YgdG9rZW5pemVyIHRvIFwiTmFycm93XCIgZnJvbSBcImxvb3NlXCJcblx0XHQvLyAgSW4gdGhpcyBwcm9jZXNzIHRoZXJlIGFyZSBtdWx0aXBsZSBwb3BvdmVyIGlzc3VlcyBoYXBwZW5pbmdcblx0XHQvLyAgU28gYXMgYSB0ZW1wb3JhcnkgZml4IG92ZXJyaWRpbmcgdGhlIGZ1bmN0aW9uXG5cdFx0KHRoaXMudG9rZW5pemVyPy5jdXJyZW50IGFzIEZvY3VzSGFuZGxpbmdDb250cm9sKS5vbnNhcGZvY3VzbGVhdmUgPSAoKTogdm9pZCA9PiB7fTtcblx0fVxuXG5cdHByaXZhdGUgb25UaHVtYlVwUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iRG93bkJ1dHRvblByZXNzZWQgPSBmYWxzZTtcblx0XHR0cmlnZ2VyUFhJbnRlZ3JhdGlvbihcInRodW1iVXBcIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iRG93blByZXNzZWQoKTogdm9pZCB7XG5cdFx0dGhpcy5zdGF0ZS50aHVtYkRvd25CdXR0b25QcmVzc2VkID0gdHJ1ZTtcblx0XHR0aGlzLnN0YXRlLnRodW1iVXBCdXR0b25QcmVzc2VkID0gZmFsc2U7XG5cdFx0dHJpZ2dlclBYSW50ZWdyYXRpb24oXCJ0aHVtYkRvd25cIik7XG5cdFx0dGhpcy5vblRodW1iUHJlc3NlZCgpO1xuXHR9XG5cblx0cHJpdmF0ZSBvblRodW1iUHJlc3NlZCgpOiB2b2lkIHtcblx0XHR0aGlzLnN0YXRlLnRodW1iQnV0dG9uRW5hYmxlZCA9IGZhbHNlO1xuXHRcdE1lc3NhZ2VUb2FzdC5zaG93KHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfRkVFREJBQ0tfU0VOVFwiKSk7XG5cdH1cblxuXHRjcmVhdGVDb250ZW50KCk6IFZCb3gge1xuXHRcdGNvbnN0ICR0b3BHb0J0biA9IGNyZWF0ZVJlZmVyZW5jZTxCdXR0b24+KCk7XG5cdFx0Y29uc3QgdGh1bWJVcEJ1dHRvblRva2VuaXplciA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iVXBcIik7XG5cdFx0Y29uc3QgdGh1bWJEb3duQnV0dG9uVG9rZW5pemVyID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uVG9rZW5pemVyLCBcInByZXNzXCIsIFwiZmU0OmVmdDp0OnRodW1iRG93blwiKTtcblx0XHRjb25zdCB0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSA9IChcblx0XHRcdDxUb2dnbGVCdXR0b25cblx0XHRcdFx0aWNvbj17XCJzYXAtaWNvbjovL3RodW1iLXVwXCJ9XG5cdFx0XHRcdHRvb2x0aXA9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIkNfRUFTWV9GSUxURVJfVEhVTUJTX1VQXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYlVwUHJlc3NlZCgpO1xuXHRcdFx0XHR9fVxuXHRcdFx0XHRlbmFibGVkPXtiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJ0aHVtYkJ1dHRvbkVuYWJsZWRcIil9XG5cdFx0XHRcdHByZXNzZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iVXBCdXR0b25QcmVzc2VkXCIpfVxuXHRcdFx0Lz5cblx0XHQpO1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSh0aHVtYlVwQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJVcFwiKTtcblx0XHRjb25zdCB0aHVtYkRvd25CdXR0b25NZXNzYWdlU3RyaXBlID0gKFxuXHRcdFx0PFRvZ2dsZUJ1dHRvblxuXHRcdFx0XHRpY29uPXtcInNhcC1pY29uOi8vdGh1bWItZG93blwifVxuXHRcdFx0XHR0b29sdGlwPXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJDX0VBU1lfRklMVEVSX1RIVU1CU19ET1dOXCIpfVxuXHRcdFx0XHR0eXBlPXtcIlRyYW5zcGFyZW50XCJ9XG5cdFx0XHRcdHByZXNzPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMub25UaHVtYkRvd25QcmVzc2VkKCk7XG5cdFx0XHRcdH19XG5cdFx0XHRcdGVuYWJsZWQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRodW1iQnV0dG9uRW5hYmxlZFwiKX1cblx0XHRcdFx0cHJlc3NlZD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwidGh1bWJEb3duQnV0dG9uUHJlc3NlZFwiKX1cblx0XHRcdC8+XG5cdFx0KTtcblx0XHRGRVNSSGVscGVyLnNldFNlbWFudGljU3RlcG5hbWUodGh1bWJEb3duQnV0dG9uTWVzc2FnZVN0cmlwZSwgXCJwcmVzc1wiLCBcImZlNDplZnQ6bXM6dGh1bWJEb3duXCIpO1xuXHRcdGNvbnN0IG91dFZCb3ggPSAoXG5cdFx0XHQ8VkJveD5cblx0XHRcdFx0PEZsZXhCb3ggcmVuZGVyVHlwZT1cIkJhcmVcIj5cblx0XHRcdFx0XHQ8RWFzeUZpbHRlcklucHV0XG5cdFx0XHRcdFx0XHRyZWNvbW1lbmRlZFZhbHVlcz17dGhpcy5yZWNvbW1lbmRlZFZhbHVlc31cblx0XHRcdFx0XHRcdHJlZj17dGhpcy5lYXN5RmlsdGVySW5wdXR9XG5cdFx0XHRcdFx0XHRlbnRlclByZXNzZWQ9e3RoaXMub25FbnRlclByZXNzZWQuYmluZCh0aGlzKX1cblx0XHRcdFx0XHRcdHF1ZXJ5Q2hhbmdlZD17KGUpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5maXJlRXZlbnQoXCJxdWVyeUNoYW5nZWRcIiwgeyBxdWVyeTogZS5nZXRQYXJhbWV0ZXIoXCJxdWVyeVwiKSB9KTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRsaXZlQ2hhbmdlPXsoKTogdm9pZCA9PiB7XG5cdFx0XHRcdFx0XHRcdHRoaXMuc3RhdGUudG9rZW5pemVyRWRpdGFibGUgPSBmYWxzZTtcblx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0Lz5cblxuXHRcdFx0XHRcdDxCdXR0b25cblx0XHRcdFx0XHRcdGljb249e1wic2FwLWljb246Ly9haVwifVxuXHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlTbWFsbE1hcmdpbkJlZ2luXCJ9XG5cdFx0XHRcdFx0XHRyZWY9eyR0b3BHb0J0bn1cblx0XHRcdFx0XHRcdHRleHQ9e3RoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfR09cIil9XG5cdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLkVtcGhhc2l6ZWR9XG5cdFx0XHRcdFx0XHRwcmVzcz17dGhpcy5vbkdvQnV0dG9uUHJlc3MuYmluZCh0aGlzKX1cblx0XHRcdFx0XHQvPlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94XG5cdFx0XHRcdFx0cmVuZGVyVHlwZT1cIkJhcmVcIlxuXHRcdFx0XHRcdHZpc2libGU9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dSZXN1bHRcIil9XG5cdFx0XHRcdFx0YWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfVxuXHRcdFx0XHRcdHdyYXA9e0ZsZXhXcmFwLldyYXB9XG5cdFx0XHRcdFx0anVzdGlmeUNvbnRlbnQ9e0ZsZXhKdXN0aWZ5Q29udGVudC5TcGFjZUJldHdlZW59XG5cdFx0XHRcdFx0Y2xhc3M9e1wic2FwVWlUaW55TWFyZ2luVG9wXCJ9XG5cdFx0XHRcdD5cblx0XHRcdFx0XHQ8RmxleEJveCBjbGFzcz17XCJzYXBGZUNvbnRyb2xzR2FwOHB4XCJ9IHJlbmRlclR5cGU9XCJCYXJlXCIgYWxpZ25JdGVtcz17RmxleEFsaWduSXRlbXMuQ2VudGVyfSB3cmFwPXtGbGV4V3JhcC5XcmFwfT5cblx0XHRcdFx0XHRcdHt0aGlzLmFpTm90aWNlPy5jbG9uZSgpfVxuXHRcdFx0XHRcdFx0PFRva2VuaXplclxuXHRcdFx0XHRcdFx0XHRlZGl0YWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2VuaXplckVkaXRhYmxlXCIpLCB0cnVlKX1cblx0XHRcdFx0XHRcdFx0Y2xhc3M9e1wic2FwRmVDb250cm9sc1Rva2VuaXplclwifVxuXHRcdFx0XHRcdFx0XHR0b2tlbnM9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInRva2Vuc1wiKX1cblx0XHRcdFx0XHRcdFx0cmVuZGVyTW9kZT17VG9rZW5pemVyUmVuZGVyTW9kZS5Mb29zZX1cblx0XHRcdFx0XHRcdFx0cmVmPXt0aGlzLnRva2VuaXplcn1cblx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0e3tcblx0XHRcdFx0XHRcdFx0XHR0b2tlbnM6IChpZHg6IG51bWJlciwgY3R4OiBDb250ZXh0KTogVG9rZW4gPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gY3R4LmdldE9iamVjdCgpIGFzIFRva2VuRGVmaW5pdGlvbjtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiAoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdDxUb2tlblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT17dGhpcy5zdGF0ZS50b2tlbnMua2V5fVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxhYmVsPXt0aGlzLnN0YXRlLnRva2Vucy5sYWJlbH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpdGVtcz17dGhpcy5zdGF0ZS50b2tlbnMua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlc31cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtYW5kYXRvcnk9e3RoaXMuaXNLZXlNYW5kYXRvcnkob2JqZWN0LmtleSl9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YnVzeT17dGhpcy5zdGF0ZS50b2tlbnMuYnVzeX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWxldGU9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGNvbnN0IHRva2VuSW5kZXggPSB0aGlzLnN0YXRlLnRva2Vucy5maW5kSW5kZXgoKHRva2VuKSA9PiB0b2tlbi5rZXkgPT09IG9iamVjdC5rZXkpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y29uc3QgbmV3VG9rZW5zID0gdGhpcy5zdGF0ZS50b2tlbnMuY29uY2F0KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcy5zdGF0ZS50b2tlbnMgPSBuZXdUb2tlbnM7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLnVwZGF0ZUZpbHRlcklucHV0KFwidG9rZW5VcGRhdGVkXCIpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH19XG5cdFx0XHRcdFx0XHRcdFx0XHRcdD5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR7e1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3VzdG9tRGF0YTogW1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJUb2tlbkluZm9cIiB2YWx1ZT17b2JqZWN0fSAvPixcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PEN1c3RvbURhdGEga2V5PVwicG9wb3ZlclwiIHZhbHVlPXt0aGlzLmlubmVyQ29udHJvbFBvcG92ZXJ9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YSBrZXk9XCJlYXN5RmlsdGVyQmFyQ29udGFpbmVyXCIgdmFsdWU9e3RoaXN9IC8+LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQ8Q3VzdG9tRGF0YVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGtleT1cImNvZGVMaXN0XCJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR2YWx1ZT17dGhpcy5maWx0ZXJCYXJNZXRhZGF0YT8uZmluZCgoZGF0YSkgPT4gZGF0YS5uYW1lID09PSBvYmplY3Qua2V5KT8uY29kZUxpc3R9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRdXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdFx0XHRcdFx0PC9Ub2tlbj5cblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0PC9Ub2tlbml6ZXI+XG5cdFx0XHRcdFx0XHQ8SEJveD5cblx0XHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25Ub2tlbml6ZXJ9LCB7dGh1bWJEb3duQnV0dG9uVG9rZW5pemVyfVxuXHRcdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHRcdFx0PEJ1dHRvblxuXHRcdFx0XHRcdFx0XHR0ZXh0PXt0aGlzLnJlc291cmNlQnVuZGxlLmdldFRleHQoXCJNX0VBU1lfRklMVEVSX1JFU0VUXCIpfVxuXHRcdFx0XHRcdFx0XHR0eXBlPXtCdXR0b25UeXBlLlRyYW5zcGFyZW50fVxuXHRcdFx0XHRcdFx0XHRwcmVzcz17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMucmVzZXRTdGF0ZSh0cnVlLCB0cnVlKTtcblx0XHRcdFx0XHRcdFx0XHQvL1JldGFpbmluZyB0aGUgZm9jdXMgb24gcG9wb3ZlciBkb2Vzbid0IG1ha2UgdGhlIHBvcG92ZXIgY2xvc2Ugb24gZXZlcnkgaW50ZXJhY3Rpb25cblx0XHRcdFx0XHRcdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py4kc2VhcmNoSW5wdXQuZm9jdXMoKTtcblx0XHRcdFx0XHRcdFx0fX1cblx0XHRcdFx0XHRcdC8+XG5cdFx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHRcdDxGbGV4Qm94IHJlbmRlclR5cGU9XCJCYXJlXCI+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dGV4dD17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2luZ2xlVmFsdWVNZXNzYWdlU3RyaXBUZXh0XCIpfVxuXHRcdFx0XHRcdFx0c2hvd0ljb249e3RydWV9XG5cdFx0XHRcdFx0XHRlbmFibGVGb3JtYXR0ZWRUZXh0PXt0cnVlfVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd1NpbmdsZVZhbHVlTWVzc2FnZVN0cmlwXCIpfVxuXHRcdFx0XHRcdFx0c2hvd0Nsb3NlQnV0dG9uPXt0cnVlfVxuXHRcdFx0XHRcdFx0Y2xvc2U9eygpOiB2b2lkID0+IHtcblx0XHRcdFx0XHRcdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcEZvclNpbmdsZVZhbHVlKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdD48L01lc3NhZ2VTdHJpcD5cblx0XHRcdFx0PC9GbGV4Qm94PlxuXHRcdFx0XHQ8RmxleEJveCByZW5kZXJUeXBlPVwiQmFyZVwiIGNsYXNzPXtcInNhcEZlQ29udHJvbHNHYXA4cHhcIn0+XG5cdFx0XHRcdFx0PE1lc3NhZ2VTdHJpcFxuXHRcdFx0XHRcdFx0dHlwZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwibWVzc2FnZVN0cmlwVHlwZVwiKX1cblx0XHRcdFx0XHRcdHRleHQ9e2JpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcIm1lc3NhZ2VTdHJpcFRleHRcIil9XG5cdFx0XHRcdFx0XHRzaG93SWNvbj17dHJ1ZX1cblx0XHRcdFx0XHRcdGVuYWJsZUZvcm1hdHRlZFRleHQ9e3RydWV9XG5cdFx0XHRcdFx0XHRzaG93Q2xvc2VCdXR0b249e3RydWV9XG5cdFx0XHRcdFx0XHRjbG9zZT17KCk6IHZvaWQgPT4ge1xuXHRcdFx0XHRcdFx0XHR0aGlzLmNsZWFyTWVzc2FnZVN0cmlwKCk7XG5cdFx0XHRcdFx0XHR9fVxuXHRcdFx0XHRcdFx0dmlzaWJsZT17YmluZFN0YXRlKHRoaXMuc3RhdGUsIFwic2hvd01lc3NhZ2VTdHJpcFwiKX1cblx0XHRcdFx0XHQ+PC9NZXNzYWdlU3RyaXA+XG5cdFx0XHRcdFx0PEhCb3ggdmlzaWJsZT17YW5kKGJpbmRTdGF0ZSh0aGlzLnN0YXRlLCBcInNob3dNZXNzYWdlU3RyaXBcIiksIG5vdChiaW5kU3RhdGUodGhpcy5zdGF0ZSwgXCJzaG93UmVzdWx0XCIpKSl9PlxuXHRcdFx0XHRcdFx0e3RodW1iVXBCdXR0b25NZXNzYWdlU3RyaXBlfSwge3RodW1iRG93bkJ1dHRvbk1lc3NhZ2VTdHJpcGV9XG5cdFx0XHRcdFx0PC9IQm94PlxuXHRcdFx0XHQ8L0ZsZXhCb3g+XG5cdFx0XHQ8L1ZCb3g+XG5cdFx0KSBhcyBWQm94O1xuXHRcdEZFU1JIZWxwZXIuc2V0U2VtYW50aWNTdGVwbmFtZSgkdG9wR29CdG4uY3VycmVudCEsIFwicHJlc3NcIiwgXCJmZTphaTpzZWFyY2hcIik7XG5cdFx0cmV0dXJuIG91dFZCb3g7XG5cdH1cblxuXHRhc3luYyBvbkdvQnV0dG9uUHJlc3MoKTogUHJvbWlzZTx2b2lkPiB7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0bGV0IGN1cnJlbnRJbnB1dFZhbHVlID0gdGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uZ2V0VmFsdWUoKTtcblx0XHRjb25zdCBjdXJyZW50SW5wdXRQbGFjZWhvbGRlciA9IHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LmdldFBsYWNlaG9sZGVyKCk7XG5cblx0XHRpZiAoY3VycmVudElucHV0VmFsdWUgPT09IFwiXCIgJiYgY3VycmVudElucHV0UGxhY2Vob2xkZXIgIT09IHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpIHtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFZhbHVlKGN1cnJlbnRJbnB1dFBsYWNlaG9sZGVyIHx8IFwiXCIpO1xuXHRcdFx0Y3VycmVudElucHV0VmFsdWUgPSBjdXJyZW50SW5wdXRQbGFjZWhvbGRlcjtcblx0XHR9XG5cdFx0YXdhaXQgdGhpcy5vbkdvUHJlc3MoY3VycmVudElucHV0VmFsdWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJlc2V0cyB0aGUgc3RhdGUgb2YgdGhlIEVhc3lGaWx0ZXJCYXJDb250YWluZXIgdG8gaXRzIGluaXRpYWwgY29uZmlndXJhdGlvbi5cblx0ICpcblx0ICogVGhpcyBtZXRob2QgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyBhY3Rpb25zOlxuXHQgKiAtIENsZWFycyBhbGwgbm9uLW1hbmRhdG9yeSB0b2tlbnMgYW5kIHJlc2V0cyBtYW5kYXRvcnkgdG9rZW5zIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzXG5cdCAqIC0gUmVzZXRzIHRoZSBpbnB1dCBmaWVsZCB0byBpdHMgZGVmYXVsdCBwbGFjZWhvbGRlciB0ZXh0XG5cdCAqIC0gQ2xlYXJzIGFsbCBlcnJvciB2YWx1ZSBzdGF0ZXMgYW5kIG1lc3NhZ2VzIGZyb20gdG9rZW5zXG5cdCAqIC0gQ2xlYXJzIGFueSBkaXNwbGF5ZWQgbWVzc2FnZSBzdHJpcHNcblx0ICogLSBPcHRpb25hbGx5IGZpcmVzIHRoZSBjbGVhckZpbHRlcnMgZXZlbnQgdG8gbm90aWZ5IGNvbnN1bWVyc1xuXHQgKiBAcGFyYW0gY2xlYXJBbGxGaWx0ZXJzIElmIHRydWUsIGZpcmVzIHRoZSBjbGVhckZpbHRlcnMgZXZlbnQgdG8gbm90aWZ5IGNvbnN1bWVycyB0aGF0IGZpbHRlcnMgc2hvdWxkIGJlIGNsZWFyZWQgZWxzZSBqdXN0IHJlc2V0cyB0aGUgdG9rZW5zIHdpdGhvdXQgZmlyaW5nIHRoZSBldmVudFxuXHQgKiBAcGFyYW0gaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnMgSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgdGhlIHJlc2V0QnV0dG9uIGlzIHJlc3RvcmluZyB0b2tlbnMgdG8gdGhlaXIgZGVmYXVsdCB2YWx1ZXNcblx0ICovXG5cblx0cmVzZXRTdGF0ZShjbGVhckFsbEZpbHRlcnMgPSB0cnVlLCBpc1Jlc2V0dGluZ1RvRGVmYXVsdFRva2VucyA9IGZhbHNlKTogdm9pZCB7XG5cdFx0aWYgKGNsZWFyQWxsRmlsdGVycykge1xuXHRcdFx0dGhpcy5maXJlRXZlbnQoXCJjbGVhckZpbHRlcnNcIik7XG5cdFx0XHR0aGlzLmlzUmVzZXR0aW5nVG9EZWZhdWx0VG9rZW5zID0gaXNSZXNldHRpbmdUb0RlZmF1bHRUb2tlbnM7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2hvdWxkVG9rZW5DaGFuZ2VFdmVudEZpcmVkID0gZmFsc2U7XG5cdFx0fVxuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gdGhpcy5nZXREZWZhdWx0VG9rZW5zKCk7XG5cdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuUmVzZXRcIik7XG5cdFx0dGhpcy5zdGF0ZS50b2tlbml6ZXJFZGl0YWJsZSA9IHRydWU7XG5cdFx0dGhpcy5pc01hbmRhdG9yeUNoZWNrUmVxdWlyZWQgPSB0cnVlO1xuXHRcdC8vU2V0IHRoZSBWYWx1ZSBTdGF0ZXMgb2YgYWxsIHRoZSBUb2tlbnMgYmFjayB0byBOb25lXG5cdFx0dGhpcy50b2tlbml6ZXIuY3VycmVudD8uZ2V0VG9rZW5zKCkuZm9yRWFjaCgodG9rZW4pID0+IHRva2VuLnNldFByb3BlcnR5KFwidmFsdWVTdGF0ZVwiLCBWYWx1ZVN0YXRlLk5vbmUpKTtcblx0XHR0aGlzLnRva2VuaXplci5jdXJyZW50Py5nZXRUb2tlbnMoKS5mb3JFYWNoKCh0b2tlbikgPT4gdG9rZW4uc2V0UHJvcGVydHkoXCJ2YWx1ZVN0YXRlVGV4dFwiLCBudWxsKSk7XG5cdFx0dGhpcy5jbGVhck1lc3NhZ2VTdHJpcCgpOyAvL2NsZWFyIHRoZSBtZXNzYWdlIHN0cmlwIGZvciB2YWxpZGF0ZWQgZmlsdGVyc1xuXHR9XG5cblx0Ly9UaGUgYmVsb3cgY29kZSB1cGRhdGVzIHRoZSBleGlzdGluZyBzdGF0ZSBieSBmZXRjaGluZyB0aGUga2V5IGFuZCBzZWxlY3RlZFZhbHVlc1xuXHR1cGRhdGVUb2tlbkFycmF5KFxuXHRcdGNoYW5nZVR5cGU6IFRva2VuU2V0dGVycyxcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5LZXk6IHN0cmluZ1xuXHQpOiB2b2lkIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCB0b2tlbkluZGV4ID0gbmV3VG9rZW5zLmZpbmRJbmRleCgodCkgPT4gdC5rZXkgPT09IHRva2VuS2V5KTtcblx0XHRjb25zdCB0b2tlbiA9IG5ld1Rva2Vuc1t0b2tlbkluZGV4XTtcblx0XHRpZiAodG9rZW5JbmRleCAhPSAtMSkge1xuXHRcdFx0c3dpdGNoIChjaGFuZ2VUeXBlKSB7XG5cdFx0XHRcdGNhc2UgXCJzZXRTZWxlY3RlZFZhbHVlc1wiOlxuXHRcdFx0XHRcdHRoaXMuc2V0U2VsZWN0ZWRWYWx1ZXModG9rZW4gYXMgVG9rZW5EZWZpbml0aW9uLCBuZXdUb2tlblNwZWNpZmljVmFsdWVzLCB0b2tlbkluZGV4LCBuZXdUb2tlbnMgYXMgVG9rZW5EZWZpbml0aW9uW10pO1xuXHRcdFx0XHRcdHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMgPSBuZXdUb2tlblNwZWNpZmljVmFsdWVzO1xuXHRcdFx0XHRcdC8vUmVtb3ZlIHRoZSB0b2tlbiBlbnRpcmVseVxuXHRcdFx0XHRcdGlmICghdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpICYmIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRcdFx0XHRuZXdUb2tlbnMuc3BsaWNlKHRva2VuSW5kZXgsIDEpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRMb2cuZXJyb3IoXCJTcGVjaWZ5aW5nIGEgc2V0dGVyIHRoYXQgaXMgb3V0IG9mIHRoZSBib3VuZGFyeVwiKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdC8vIFVwZGF0ZSB0aGUgc3RhdGUgYnkgYXNzaWduaW5nIHRoZSBuZXcgdG9rZW5zIGFycmF5XG5cdFx0XHR0aGlzLnN0YXRlLnRva2VucyA9IG5ld1Rva2VucyBhcyBUb2tlbkRlZmluaXRpb25bXTtcblx0XHRcdHRoaXMuc3RhdGUuc2hvd1Jlc3VsdCA9IG5ld1Rva2Vucy5sZW5ndGggPiAwO1xuXHRcdFx0dGhpcy51cGRhdGVGaWx0ZXJJbnB1dChcInRva2VuVXBkYXRlZFwiKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY2xvc2VJbm5lckNvbnRyb2xQb3BvdmVyKCk6IHZvaWQge1xuXHRcdHRoaXMuaW5uZXJDb250cm9sUG9wb3Zlcj8uY2xvc2UoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0U2VsZWN0ZWRWYWx1ZXMoXG5cdFx0dG9rZW46IFRva2VuRGVmaW5pdGlvbixcblx0XHRuZXdUb2tlblNwZWNpZmljVmFsdWVzOiBUb2tlblNlbGVjdGVkVmFsdWVzRGVmaW5pdGlvbltdIHwgVmFsdWVIZWxwU2VsZWN0ZWRWYWx1ZXNEZWZpbml0aW9uW10sXG5cdFx0dG9rZW5JbmRleDogbnVtYmVyLFxuXHRcdG5ld1Rva2VuczogVG9rZW5EZWZpbml0aW9uW11cblx0KTogdm9pZCB7XG5cdFx0dG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcyA9IG5ld1Rva2VuU3BlY2lmaWNWYWx1ZXM7XG5cdFx0aWYgKCF0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSkgJiYgdG9rZW4ua2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlcy5sZW5ndGggPT09IDApIHtcblx0XHRcdG5ld1Rva2Vucy5zcGxpY2UodG9rZW5JbmRleCwgMSk7XG5cdFx0fVxuXHR9XG5cblx0aXNLZXlNYW5kYXRvcnkoa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0XHRpZiAoIXRoaXMubWFuZGF0b3J5S2V5TWFwKSB7XG5cdFx0XHR0aGlzLm1hbmRhdG9yeUtleU1hcCA9IHt9O1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5tYW5kYXRvcnlLZXlNYXBba2V5XSA/IHRydWUgOiBmYWxzZTtcblx0fVxuXG5cdHJlbW92ZU5vbk1hbmRhdG9yeVRva2VucygpOiB0aGlzIHtcblx0XHRjb25zdCBuZXdUb2tlbjogVG9rZW5EZWZpbml0aW9uW10gPSB0aGlzLnN0YXRlLnRva2Vucy5maWx0ZXIoKHRva2VuKSA9PiB7XG5cdFx0XHRyZXR1cm4gdGhpcy5pc0tleU1hbmRhdG9yeSh0b2tlbi5rZXkpO1xuXHRcdH0pO1xuXHRcdHRoaXMuc3RhdGUudG9rZW5zID0gbmV3VG9rZW47XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHR1cGRhdGVGaWx0ZXJJbnB1dCh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3QgY3VyclZhbHVlOiBzdHJpbmcgPSB0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5nZXRWYWx1ZSgpIHx8IFwiXCI7XG5cdFx0aWYgKHZhbHVlID09PSBcInRva2VuVXBkYXRlZFwiICYmIGN1cnJWYWx1ZSAhPT0gXCJcIikge1xuXHRcdFx0dGhpcy5lYXN5RmlsdGVySW5wdXQuY3VycmVudD8uc2V0VmFsdWUoXCJcIik7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRQbGFjZWhvbGRlcihjdXJyVmFsdWUpO1xuXHRcdH0gZWxzZSBpZiAodmFsdWUgPT09IFwidG9rZW5SZXNldFwiKSB7XG5cdFx0XHR0aGlzLmVhc3lGaWx0ZXJJbnB1dC5jdXJyZW50Py5zZXRWYWx1ZShcIlwiKTtcblx0XHRcdHRoaXMuZWFzeUZpbHRlcklucHV0LmN1cnJlbnQ/LnNldFBsYWNlaG9sZGVyKHRoaXMucmVzb3VyY2VCdW5kbGUuZ2V0VGV4dChcIk1fRUFTWV9GSUxURVJfUExBQ0VIT0xERVJcIikpO1xuXHRcdH1cblx0fVxuXG5cdGdldFRva2Vuc0luSW5pdGlhbFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRjb25zdCBuZXdUb2tlbnMgPSB0aGlzLnN0YXRlLnRva2Vucy5tYXAoKHRva2VuKSA9PiAoeyAuLi50b2tlbiwga2V5U3BlY2lmaWNTZWxlY3RlZFZhbHVlczogWy4uLnRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXNdIH0pKTtcblx0XHRjb25zdCBtYW5kYXRvcnlUb2tlbnMgPSBuZXdUb2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0aWYgKHRoaXMuaXNLZXlNYW5kYXRvcnkodG9rZW4ua2V5KSkge1xuXHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdH1cblx0XHR9KTtcblx0XHRyZXR1cm4gbWFuZGF0b3J5VG9rZW5zLm1hcCgodG9rZW4pID0+ICh7IC4uLnRva2VuLCBrZXlTcGVjaWZpY1NlbGVjdGVkVmFsdWVzOiBbXSB9KSk7XG5cdH1cblxuXHRnZXRVblNldE1hbmRhdG9yeVRva2Vuc0luQ3VycmVudFN0YXRlKCk6IFRva2VuRGVmaW5pdGlvbltdIHtcblx0XHRyZXR1cm4gdGhpcy5zdGF0ZS50b2tlbnMuZmlsdGVyKCh0b2tlbikgPT4ge1xuXHRcdFx0Y29uc3QgaXNLZXlNYW5kYXRvcnkgPSB0aGlzLmlzS2V5TWFuZGF0b3J5KHRva2VuLmtleSk7XG5cdFx0XHRpZiAoaXNLZXlNYW5kYXRvcnkpIHtcblx0XHRcdFx0cmV0dXJuIHRva2VuLmtleVNwZWNpZmljU2VsZWN0ZWRWYWx1ZXMubGVuZ3RoID09PSAwO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cblx0Z2V0QWN0dWFsVG9rZW5zRnJvbVN0YXRlKHRva2VuczogVG9rZW5EZWZpbml0aW9uW10pOiBFYXN5RmlsdGVyVG9rZW5bXSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgcmVxdWlyZWRLZXlzID0gdG9rZW5zLm1hcCgodG9rZW4pID0+IHRva2VuLmtleSk7XG5cdFx0cmV0dXJuIHRoaXMudG9rZW5pemVyLmN1cnJlbnQ/LmdldFRva2VucygpLmZpbHRlcigodG9rZW4pID0+IHJlcXVpcmVkS2V5cy5pbmNsdWRlcyh0b2tlbi5nZXRLZXkoKSkpIGFzXG5cdFx0XHR8IEVhc3lGaWx0ZXJUb2tlbltdXG5cdFx0XHR8IHVuZGVmaW5lZDtcblx0fVxuXG5cdHN0YXRpYyByZW5kZXIocm06IFJlbmRlck1hbmFnZXIsIGNvbnRyb2w6IEVhc3lGaWx0ZXJCYXJDb250YWluZXIpOiB2b2lkIHtcblx0XHRyZXR1cm4ganN4LnJlbmRlclVzaW5nUmVuZGVyTWFuYWdlcihybSwgY29udHJvbCwgKCkgPT4ge1xuXHRcdFx0cmV0dXJuIDxzcGFuIHJlZj17Y29udHJvbH0+e2NvbnRyb2wuZ2V0QWdncmVnYXRpb24oXCJjb250ZW50XCIpfTwvc3Bhbj47XG5cdFx0fSk7XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUFxREE7RUFDQTtFQXdCQTtFQStDQTtFQXFCQTtBQUNBO0FBQ0E7RUFGQSxJQUlxQkEsc0JBQXNCLElBQUFDLElBQUEsR0FEMUNDLGNBQWMsQ0FBQyxtREFBbUQsQ0FBQyxFQUFBQyxLQUFBLEdBRWxFQyxRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVMsQ0FBQyxDQUFDLEVBQUFDLEtBQUEsR0FHNUJGLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUyxDQUFDLENBQUMsRUFBQUUsS0FBQSxHQUc1QkgsUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFTLENBQUMsQ0FBQyxFQUFBRyxLQUFBLEdBRzVCSixRQUFRLENBQUM7SUFBRUMsSUFBSSxFQUFFO0VBQVEsQ0FBQyxDQUFDLEVBQUFJLEtBQUEsR0FHM0JMLFFBQVEsQ0FBQztJQUFFQyxJQUFJLEVBQUU7RUFBUSxDQUFDLENBQUMsRUFBQUssS0FBQSxHQUczQk4sUUFBUSxDQUFDO0lBQUVDLElBQUksRUFBRTtFQUFXLENBQUMsQ0FBQyxFQUFBTSxLQUFBLEdBRzlCQyxlQUFlLENBQUMsQ0FBQyxFQUFBQyxLQUFBLEdBR2pCRCxlQUFlLENBQUMsQ0FBQyxFQUFBRSxNQUFBLEdBR2pCQyxXQUFXLENBQUM7SUFBRVYsSUFBSSxFQUFFO0VBQXNCLENBQUMsQ0FBQyxFQUFBVyxNQUFBLEdBRzVDRCxXQUFXLENBQUM7SUFBRVYsSUFBSSxFQUFFO0VBQXNCLENBQUMsQ0FBQyxFQUFBWSxNQUFBLEdBRzVDQyxLQUFLLENBQUMsQ0FBQyxFQUFBQyxNQUFBLEdBR1BELEtBQUssQ0FBQyxDQUFDLEVBQUFFLE1BQUEsR0FHUEYsS0FBSyxDQUFDLENBQUMsRUFBQUcsTUFBQSxHQUdQSCxLQUFLLENBQUMsQ0FBQyxFQUFBSSxNQUFBLEdBR1BKLEtBQUssQ0FBQyxDQUFDLEVBQUFLLE1BQUEsR0FHUEwsS0FBSyxDQUFDLENBQUMsRUFBQU0sTUFBQSxHQUtQQyxXQUFXLENBQUMsQ0FBQyxFQUFBeEIsSUFBQSxDQUFBeUIsTUFBQSxJQUFBQyxPQUFBLDBCQUFBQyxRQUFBO0lBd0RkLFNBQUE1Qix1QkFBWTZCLFVBQThFLEVBQUVDLE1BQXlCLEVBQUU7TUFBQSxJQUFBQyxLQUFBO01BQ3RIQSxLQUFBLEdBQUFILFFBQUEsQ0FBQUksSUFBQSxPQUFNSCxVQUFVLEVBQVlDLE1BQU0sQ0FBQztNQUFDRywwQkFBQSxDQUFBRixLQUFBLGlCQUFBRyxXQUFBLEVBQUFILEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxXQUFBSSxZQUFBLEVBQUFKLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxtQkFBQUssWUFBQSxFQUFBTCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsdUJBQUFNLFlBQUEsRUFBQU4sS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLHVCQUFBTyxZQUFBLEVBQUFQLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxpQkFBQVEsWUFBQSxFQUFBUixLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEscUJBQUFTLFlBQUEsRUFBQVQsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGVBQUFVLFlBQUEsRUFBQVYsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGFBQUFXLFlBQUEsRUFBQVgsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGNBQUFZLGFBQUEsRUFBQVosS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLG1CQUFBYSxhQUFBLEVBQUFiLEtBQUE7TUFBQUUsMEJBQUEsQ0FBQUYsS0FBQSxrQkFBQWMsYUFBQSxFQUFBZCxLQUFBO01BQUFFLDBCQUFBLENBQUFGLEtBQUEsbUJBQUFlLGFBQUEsRUFBQWYsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLGtCQUFBZ0IsYUFBQSxFQUFBaEIsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLDJCQUFBaUIsYUFBQSxFQUFBakIsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLDBCQUFBa0IsYUFBQSxFQUFBbEIsS0FBQTtNQUFBRSwwQkFBQSxDQUFBRixLQUFBLFdBQUFtQixhQUFBLEVBQUFuQixLQUFBO01BQUFBLEtBQUEsQ0FqQjdCb0IsMkJBQTJCLEdBQUcsSUFBSTtNQUFBcEIsS0FBQSxDQUVsQ3FCLDBCQUEwQixHQUFHLEtBQUs7TUFBQXJCLEtBQUEsQ0FRbENzQixlQUFlLEdBQWtCLElBQUlDLE9BQU8sQ0FBRUMsT0FBTyxJQUFLO1FBQ2pFeEIsS0FBQSxDQUFLeUIsbUJBQW1CLEdBQUdELE9BQU87TUFDbkMsQ0FBQyxDQUFDO01BQUF4QixLQUFBLENBRU0wQix3QkFBd0IsR0FBRyxJQUFJO01BSXRDMUIsS0FBQSxDQUFLMkIsVUFBVSxDQUFDLENBQUM7TUFDakIzQixLQUFBLENBQUs0QixnQkFBZ0IsR0FBR0MsZ0JBQWdCLENBQUNDLFdBQVcsQ0FBQyxDQUFDO01BQUMsT0FBQTlCLEtBQUE7SUFDeEQ7SUFBQytCLFFBQUEsR0FBQTlELHNCQUFBO0lBQUErRCxjQUFBLENBQUEvRCxzQkFBQSxFQUFBNEIsUUFBQTtJQUFBLElBQUFvQyxNQUFBLEdBQUFoRSxzQkFBQSxDQUFBaUUsU0FBQTtJQUFBRCxNQUFBLENBRURFLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQUNDLGFBQXFCLEVBQVE7TUFDN0MsSUFBSSxDQUFDQyxXQUFXLENBQUMsZUFBZSxFQUFFRCxhQUFhLENBQUM7TUFDaEQsSUFBSSxJQUFJLENBQUNBLGFBQWEsRUFBRTtRQUN2QixJQUFJLENBQUNFLFVBQVUsR0FBR0MsbUJBQUEsQ0FBTyxJQUFJLENBQUNILGFBQWEsQ0FBQztNQUM3QztJQUNELENBQUM7SUFBQUgsTUFBQSxDQUVLTyxRQUFRLEdBQWQsZUFBTUEsUUFBUUEsQ0FBQ0MsS0FBYSxFQUFpQjtNQUM1QyxJQUFJLENBQUMsSUFBSSxDQUFDQSxLQUFLLEVBQUU7UUFDaEIsSUFBSSxDQUFDSixXQUFXLENBQUMsT0FBTyxFQUFFSSxLQUFLLEVBQUUsSUFBSSxDQUFDO1FBQ3RDLE1BQU0sSUFBSSxDQUFDbkIsZUFBZTtRQUMxQixJQUFJLENBQUNvQixlQUFlLENBQUNDLE9BQU8sRUFBRU4sV0FBVyxDQUFDLE9BQU8sRUFBRUksS0FBSyxFQUFFLElBQUksQ0FBQztRQUMvRCxNQUFNLElBQUksQ0FBQ0MsZUFBZSxDQUFDQyxPQUFPLEVBQUVDLHdCQUF3QixDQUFDLENBQUM7TUFDL0Q7SUFDRCxDQUFDO0lBQUFYLE1BQUEsQ0FFRFksb0JBQW9CLEdBQXBCLFNBQUFBLG9CQUFvQkEsQ0FBQ0MsaUJBQStDLEVBQVE7TUFDM0UsSUFBSSxDQUFDLElBQUksQ0FBQ0EsaUJBQWlCLEVBQUU7UUFDNUIsSUFBSSxDQUFDVCxXQUFXLENBQUMsbUJBQW1CLEVBQUVTLGlCQUFpQixFQUFFLElBQUksQ0FBQztRQUM5RDtRQUNBLE1BQU1DLE1BQU0sR0FBRyxJQUFJLENBQUNDLGdCQUFnQixDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQ0MsbUJBQW1CLEVBQUU7VUFDOUIsSUFBSSxDQUFDQSxtQkFBbUIsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDLENBQUM7VUFDL0QsSUFBSSxDQUFDQyxZQUFZLENBQUMsSUFBSSxDQUFDRixtQkFBbUIsQ0FBQztRQUM1QztRQUNBLElBQUksQ0FBQ0csS0FBSyxDQUFDTCxNQUFNLEdBQUdBLE1BQU07UUFDMUIsSUFBSSxDQUFDSyxLQUFLLENBQUNDLFVBQVUsR0FBR04sTUFBTSxDQUFDTyxNQUFNLEdBQUcsQ0FBQztRQUN6QztRQUNBLElBQUksQ0FBQ0Msd0JBQXdCLEdBQUcsSUFBSTtRQUNwQztRQUNBLElBQUksQ0FBQ25DLDJCQUEyQixHQUFHLEtBQUs7TUFDekM7SUFDRCxDQUFDO0lBQUFhLE1BQUEsQ0FFRHVCLElBQUksR0FBSixTQUFBQSxJQUFJQSxDQUFBLEVBQVM7TUFDWixJQUFJLENBQUNDLGNBQWMsR0FBR0MsR0FBRyxDQUFDQyxvQkFBb0IsQ0FBQyxpQkFBaUIsQ0FBRTtJQUNuRSxDQUFDO0lBQUExQixNQUFBLENBRUROLFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQVM7TUFDbEIsSUFBSSxDQUFDaUMsT0FBTyxHQUFHLElBQUksQ0FBQ0MsYUFBYSxDQUFDLENBQUM7TUFDbkMsSUFBSSxDQUFDcEMsbUJBQW1CLENBQUMsQ0FBQztNQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDd0IsbUJBQW1CLEVBQUU7UUFDOUIsSUFBSSxDQUFDQSxtQkFBbUIsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDLENBQUM7UUFDL0QsSUFBSSxDQUFDQyxZQUFZLENBQUMsSUFBSSxDQUFDRixtQkFBbUIsQ0FBQztNQUM1QztNQUNBO01BQ0EsSUFBSSxDQUFDTSx3QkFBd0IsR0FBRyxJQUFJO01BQ3BDO01BQ0EsSUFBSSxDQUFDbkMsMkJBQTJCLEdBQUcsS0FBSztJQUN6Qzs7SUFFQTtJQUFBO0lBQUFhLE1BQUEsQ0FDQWUsZ0JBQWdCLEdBQWhCLFNBQUFBLGdCQUFnQkEsQ0FBQSxFQUFzQjtNQUNyQyxNQUFNRCxNQUF5QixHQUFHLEVBQUU7TUFDcEMsSUFBSSxDQUFDLElBQUksQ0FBQ2UsZUFBZSxFQUFFO1FBQzFCLElBQUksQ0FBQ0EsZUFBZSxHQUFHLENBQUMsQ0FBQztNQUMxQjtNQUNBLElBQUksQ0FBQ2hCLGlCQUFpQixFQUFFaUIsT0FBTyxDQUFFQyxJQUFJLElBQUs7UUFDekMsTUFBTUMsVUFBVSxHQUFHRCxJQUFJLENBQUNFLFFBQVE7UUFDaEMsSUFBSUQsVUFBVSxFQUFFO1VBQ2QsSUFBSSxDQUFDSCxlQUFlLENBQTZCRSxJQUFJLENBQUNHLElBQUksQ0FBQyxHQUFHLElBQUk7VUFDbkU7VUFDQSxJQUFJSCxJQUFJLENBQUMxRixJQUFJLEtBQUssV0FBVyxFQUFFO1lBQzlCeUUsTUFBTSxDQUFDcUIsSUFBSSxDQUFDO2NBQ1hDLEdBQUcsRUFBRUwsSUFBSSxDQUFDRyxJQUFJO2NBQ2RHLEtBQUssRUFBRU4sSUFBSSxDQUFDTSxLQUFlO2NBQzNCQyx5QkFBeUIsRUFBR1AsSUFBSSxDQUFDUSxZQUFZLElBQTRDLEVBQUU7Y0FDM0ZsRyxJQUFJLEVBQUUwRixJQUFJLENBQUMxRixJQUFJO2NBQ2ZtRyxJQUFJLEVBQUUsS0FBSztjQUNYUjtZQUNELENBQUMsQ0FBQztVQUNILENBQUMsTUFBTTtZQUNObEIsTUFBTSxDQUFDcUIsSUFBSSxDQUFDO2NBQ1hDLEdBQUcsRUFBRUwsSUFBSSxDQUFDRyxJQUFJO2NBQ2RHLEtBQUssRUFBRU4sSUFBSSxDQUFDTSxLQUFlO2NBQzNCQyx5QkFBeUIsRUFBR1AsSUFBSSxDQUFDUSxZQUFZLElBQXdDLEVBQUU7Y0FDdkZsRyxJQUFJLEVBQUUwRixJQUFJLENBQUMxRixJQUFJO2NBQ2ZtRyxJQUFJLEVBQUUsS0FBSztjQUNYUjtZQUNELENBQUMsQ0FBQztVQUNIO1FBQ0Q7TUFDRCxDQUFDLENBQUM7TUFDRixPQUFPbEIsTUFBTTtJQUNkLENBQUM7SUFBQWQsTUFBQSxDQUVEeUMsY0FBYyxHQUFkLFNBQUFBLGNBQWNBLENBQUNDLENBQStDLEVBQVE7TUFDckUsSUFBSSxDQUFDQyxTQUFTLENBQUNELENBQUMsQ0FBQ0UsWUFBWSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3hDOztJQUVBO0lBQ0E7SUFBQTtJQUFBNUMsTUFBQSxDQUNPNkMsK0JBQStCLEdBQXRDLFNBQU9BLCtCQUErQkEsQ0FBQSxFQUFZO01BQ2pELE1BQU1DLGFBQWEsR0FBRyxJQUFJLENBQUNDLHFDQUFxQyxDQUFDLENBQUM7TUFDbEUsSUFBSUQsYUFBYSxDQUFDekIsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMvQixNQUFNUCxNQUFNLEdBQUcsSUFBSSxDQUFDa0Msd0JBQXdCLENBQUNGLGFBQWEsQ0FBQztRQUMzRGhDLE1BQU0sRUFBRWdCLE9BQU8sQ0FBRW1CLEtBQUssSUFBSztVQUMxQkEsS0FBSyxDQUFDN0MsV0FBVyxDQUFDLFlBQVksRUFBRThDLFVBQVUsQ0FBQ0MsS0FBSyxDQUFDO1VBQ2pERixLQUFLLENBQUM3QyxXQUFXLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDb0IsY0FBYyxDQUFDNEIsT0FBTyxDQUFDLHFDQUFxQyxDQUFDLENBQUM7VUFDdkdILEtBQUssQ0FBQ0kscUJBQXFCLENBQUMsQ0FBQztRQUM5QixDQUFDLENBQUM7UUFDRixPQUFPLEtBQUs7TUFDYjtNQUNBLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFBQXJELE1BQUEsQ0FFTXNELG1DQUFtQyxHQUExQyxTQUFPQSxtQ0FBbUNBLENBQUEsRUFBUztNQUNsRCxNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDQyxTQUFTLENBQUM5QyxPQUFPLEVBQUUrQyxTQUFTLENBQUMsQ0FBc0I7TUFDM0VGLFVBQVUsQ0FBQ3pCLE9BQU8sQ0FBRW1CLEtBQUssSUFBS0EsS0FBSyxDQUFDUyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUFBMUQsTUFBQSxDQUVLMkMsU0FBUyxHQUFmLGVBQU1BLFNBQVNBLENBQUNnQixVQUE4QixFQUFpQjtNQUM5RCxJQUFJLENBQUNBLFVBQVUsRUFBRTtRQUNoQixJQUFJLENBQUNDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pCO01BQ0Q7TUFDQSxJQUFJLENBQUN6QyxLQUFLLENBQUMwQyxpQkFBaUIsR0FBRyxJQUFJOztNQUVuQztNQUNBLE1BQU14RCxVQUFVLEdBQUcsTUFBTSxJQUFJLENBQUNBLFVBQVU7TUFDeEMsSUFBSSxDQUFDQSxVQUFVLEVBQUU7UUFDaEI7TUFDRDtNQUNBLElBQUksQ0FBQ3lELFNBQVMsQ0FBQyx1QkFBdUIsQ0FBQztNQUV2QyxNQUFNQyxrQkFBc0MsR0FBRztRQUM5Q0MsT0FBTyxFQUFFLENBQUM7UUFDVkMsU0FBUyxFQUFFLElBQUksQ0FBQ0MsV0FBVztRQUMzQkMsTUFBTSxFQUFFLElBQUksQ0FBQ3REO01BQ2QsQ0FBQztNQUVELE1BQU11RCxnQkFBZ0IsR0FBRyxNQUFNL0QsVUFBVSxDQUFDZ0UsVUFBVSxDQUFDVixVQUFVLEVBQUVJLGtCQUFrQixDQUFDOztNQUVwRjtNQUNBLElBQUksQ0FBQ3RFLHdCQUF3QixHQUFHLEtBQUs7TUFDckMsSUFBSTJFLGdCQUFnQixDQUFDRSxPQUFPLEVBQUU7UUFDN0I7UUFDQTtRQUNBO1FBQ0EsSUFBSSxJQUFJLENBQUM3RCxlQUFlLENBQUNDLE9BQU8sRUFBRTZELGdCQUFnQixDQUFDLENBQUMsSUFBSSxLQUFLLEVBQUU7VUFDOUQsSUFBSSxDQUFDOUQsZUFBZSxDQUFDQyxPQUFPLEVBQUU4RCxjQUFjLENBQUNiLFVBQVUsQ0FBQztRQUN6RDtRQUNBLElBQUlTLGdCQUFnQixDQUFDckMsSUFBSSxDQUFDaUMsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUN4QyxJQUFJLENBQUNTLGVBQWUsQ0FBQ0wsZ0JBQWdCLENBQUM7UUFDdkMsQ0FBQyxNQUFNLElBQUlBLGdCQUFnQixDQUFDckMsSUFBSSxDQUFDaUMsT0FBTyxLQUFLLENBQUMsRUFBRTtVQUMvQztRQUFBO01BRUYsQ0FBQyxNQUFNO1FBQ047UUFDQSxJQUFJLENBQUNVLHdCQUF3QixDQUFDLENBQUM7UUFDL0IsSUFBSSxDQUFDQyxlQUFlLENBQUNQLGdCQUFnQixDQUFDUSxPQUFPLENBQUM7UUFDOUMsSUFBSSxDQUFDakYsZ0JBQWdCLENBQUNrRixRQUFRLENBQUMsSUFBSSxDQUFDckQsY0FBYyxDQUFDNEIsT0FBTyxDQUFDZ0IsZ0JBQWdCLENBQUNRLE9BQU8sQ0FBQyxFQUFFRSxvQkFBb0IsQ0FBQ0MsU0FBUyxDQUFDO1FBQ3JILElBQUksQ0FBQzVELEtBQUssQ0FBQzZELGdCQUFnQixHQUFHQyxXQUFXLENBQUNDLE9BQU87UUFDakRDLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLDBDQUEwQyxFQUFFaEIsZ0JBQWdCLENBQUNRLE9BQU8sQ0FBQztNQUNoRjtNQUVBLElBQUksQ0FBQ2QsU0FBUyxDQUFDLHNCQUFzQixDQUFDO0lBQ3ZDOztJQUVBO0FBQ0Q7QUFDQTtBQUNBO0FBQ0EsT0FKQztJQUFBOUQsTUFBQSxDQUtReUUsZUFBZSxHQUF2QixTQUFRQSxlQUFlQSxDQUFDTCxnQkFBc0QsRUFBUTtNQUNyRixJQUFJQSxnQkFBZ0IsQ0FBQ3JDLElBQUksQ0FBQ3NELE1BQU0sRUFBRTtRQUNqQztRQUNBRixHQUFHLENBQUNHLEtBQUssQ0FBQyw2QkFBNkIsRUFBRUMsSUFBSSxDQUFDQyxTQUFTLENBQUNwQixnQkFBZ0IsQ0FBQ3JDLElBQUksQ0FBQ3NELE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFL0YsTUFBTXZFLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDSyxLQUFLLENBQUNMLE1BQU0sQ0FBQyxDQUFDdUUsTUFBTSxDQUFFcEMsS0FBSyxJQUFLQSxLQUFLLENBQUNqQixVQUFVLENBQUM7O1FBRXpFO1FBQ0EsSUFBSSxDQUFDeUQsaUJBQWlCLENBQUMsQ0FBQzs7UUFFeEI7UUFDQUMsZUFBZSxDQUFDQyxVQUFVLENBQ3pCN0UsTUFBTSxFQUNOc0QsZ0JBQWdCLENBQUNyQyxJQUFJLENBQUNzRCxNQUFNLEVBQzVCLElBQUksQ0FBQ3hFLGlCQUFpQixFQUN0QixJQUFJLENBQUM4RCxlQUFlLENBQUNpQixJQUFJLENBQUMsSUFBSSxDQUMvQixDQUFDOztRQUVEO1FBQ0E7O1FBRUEsTUFBTUMsa0JBQWtCLEdBQUcvRSxNQUFNLENBQUN1RSxNQUFNLENBQUVTLE1BQU0sSUFBS0EsTUFBTSxDQUFDekosSUFBSSxLQUFLLFdBQVcsQ0FBQztRQUNqRixNQUFNMEosdUJBQXVCLEdBQUdGLGtCQUFrQixDQUFDUixNQUFNLENBQUVXLGNBQWMsSUFBSztVQUM3RSxPQUFPNUIsZ0JBQWdCLENBQUNyQyxJQUFJLENBQUNzRCxNQUFNLEVBQUVZLElBQUksQ0FBRUMsU0FBUyxJQUFLQSxTQUFTLENBQUNoRSxJQUFJLEtBQUs4RCxjQUFjLENBQUM1RCxHQUFHLENBQUM7UUFDaEcsQ0FBQyxDQUFDO1FBRUYsSUFBSSxJQUFJLENBQUMrRCxXQUFXLEVBQUU7VUFDcEJKLHVCQUF1QixDQUEyQ2pFLE9BQU8sQ0FBQyxNQUFPa0UsY0FBYyxJQUFLO1lBQ3BHLE1BQU1GLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQ0ssV0FBVyxHQUNwQ0gsY0FBYyxDQUFDNUQsR0FBRyxFQUNsQjRELGNBQWMsQ0FBQzFELHlCQUF5QixFQUN4QzhCLGdCQUNELENBQUM7WUFDRDRCLGNBQWMsQ0FBQ3hELElBQUksR0FBRyxLQUFLO1lBQzNCLElBQUlzRCxNQUFNLEVBQUU7Y0FDWDtjQUNBLElBQUksQ0FBQ3JHLHdCQUF3QixHQUFHLEtBQUs7Y0FDckN1RyxjQUFjLENBQUMxRCx5QkFBeUIsR0FBR3dELE1BQU07Y0FDakQsSUFBSSxDQUFDM0UsS0FBSyxDQUFDQyxVQUFVLEdBQUcsSUFBSTtjQUM1QixJQUFJLENBQUNELEtBQUssQ0FBQ0wsTUFBTSxHQUFHc0YsYUFBYTtZQUNsQztVQUNELENBQUMsQ0FBQztRQUNILENBQUMsTUFBTTtVQUNOO1VBQ0FMLHVCQUF1QixDQUFDakUsT0FBTyxDQUFFa0UsY0FBYyxJQUFLO1lBQ25EQSxjQUFjLENBQUN4RCxJQUFJLEdBQUcsS0FBSztZQUMzQndELGNBQWMsQ0FBQzFELHlCQUF5QixDQUFDUixPQUFPLENBQUMsQ0FBQ3VFLGdCQUFnQixFQUFFQyxHQUFHLEtBQUs7Y0FDM0UsSUFBSUQsZ0JBQWdCLENBQUNFLFFBQVEsS0FBS0MsY0FBYyxDQUFDQyxFQUFFLElBQUlKLGdCQUFnQixDQUFDRSxRQUFRLEtBQUtDLGNBQWMsQ0FBQ0UsRUFBRSxFQUFFO2dCQUN2R1YsY0FBYyxDQUFDMUQseUJBQXlCLENBQUNnRSxHQUFHLENBQUMsQ0FBQ0ssY0FBYyxHQUFHLENBQzlEO2tCQUNDQyxLQUFLLEVBQUVQLGdCQUFnQixDQUFDTSxjQUFjLENBQUMsQ0FBQyxDQUFDO2tCQUN6Q0UsV0FBVyxFQUFFUixnQkFBZ0IsQ0FBQ00sY0FBYyxDQUFDLENBQUM7Z0JBQy9DLENBQUMsRUFDRDtrQkFDQ0MsS0FBSyxFQUFFUCxnQkFBZ0IsQ0FBQ00sY0FBYyxDQUFDLENBQUMsQ0FBQztrQkFDekNFLFdBQVcsRUFBRVIsZ0JBQWdCLENBQUNNLGNBQWMsQ0FBQyxDQUFDO2dCQUMvQyxDQUFDLENBQ0Q7Y0FDRixDQUFDLE1BQU07Z0JBQ05YLGNBQWMsQ0FBQzFELHlCQUF5QixDQUFDZ0UsR0FBRyxDQUFDLENBQUNLLGNBQWMsQ0FBQzdFLE9BQU8sQ0FBQyxDQUFDOEUsS0FBSyxFQUFFRSxPQUFPLEtBQUs7a0JBQ3hGZCxjQUFjLENBQUMxRCx5QkFBeUIsQ0FBQ2dFLEdBQUcsQ0FBQyxDQUFDSyxjQUFjLENBQUNHLE9BQU8sQ0FBQyxHQUFHO29CQUN2RUYsS0FBSztvQkFDTEMsV0FBVyxFQUFFRDtrQkFDZCxDQUFDO2dCQUNGLENBQUMsQ0FBQztjQUNIO1lBQ0QsQ0FBQyxDQUFDO1VBQ0gsQ0FBQyxDQUFDO1FBQ0g7UUFFQSxNQUFNUixhQUFhLEdBQUcsSUFBSSxDQUFDVyw2QkFBNkIsQ0FBQ2pHLE1BQU0sQ0FBQztRQUNoRSxJQUFJLENBQUNLLEtBQUssQ0FBQ0MsVUFBVSxHQUFHLElBQUk7UUFDNUIsSUFBSSxDQUFDRCxLQUFLLENBQUM2RixrQkFBa0IsR0FBRyxJQUFJO1FBQ3BDLElBQUksQ0FBQzdGLEtBQUssQ0FBQzhGLHNCQUFzQixHQUFHLEtBQUs7UUFDekMsSUFBSSxDQUFDOUYsS0FBSyxDQUFDK0Ysb0JBQW9CLEdBQUcsS0FBSztRQUN2QyxJQUFJLENBQUMvRixLQUFLLENBQUNMLE1BQU0sR0FBR3NGLGFBQWE7TUFDbEM7SUFDRDs7SUFFQTtJQUFBO0lBQUFwRyxNQUFBLENBQ0ErRyw2QkFBNkIsR0FBN0IsU0FBQUEsNkJBQTZCQSxDQUFDakcsTUFBeUIsRUFBcUI7TUFDM0UsTUFBTXFHLHVCQUFpQyxHQUFHLEVBQUU7TUFDNUNyRyxNQUFNLENBQUNnQixPQUFPLENBQUVtQixLQUFLLElBQUs7UUFDekIsSUFBSUEsS0FBSyxDQUFDNUcsSUFBSSxLQUFLLHNCQUFzQixFQUFFO1VBQzFDLElBQUk0RyxLQUFLLENBQUNYLHlCQUF5QixDQUFDLENBQUMsQ0FBQyxDQUFDcUUsY0FBYyxDQUFDdEYsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNqRThGLHVCQUF1QixDQUFDaEYsSUFBSSxDQUFDYyxLQUFLLENBQUNaLEtBQUssQ0FBQztZQUN6Q1ksS0FBSyxDQUFDWCx5QkFBeUIsQ0FBQyxDQUFDLENBQUMsQ0FBQ3FFLGNBQWMsQ0FBQ1MsTUFBTSxDQUFDLENBQUMsQ0FBQztVQUM1RDtRQUNEO01BQ0QsQ0FBQyxDQUFDO01BQ0YsSUFBSUQsdUJBQXVCLENBQUM5RixNQUFNLEVBQUU7UUFDbkMsSUFBSSxDQUFDRixLQUFLLENBQUNrRywyQkFBMkIsR0FBRyxJQUFJLENBQUM3RixjQUFjLENBQUM0QixPQUFPLENBQUMsb0NBQW9DLEVBQUUsQ0FDMUcsV0FBVytELHVCQUF1QixDQUFDRyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FDeEQsQ0FBQztRQUNGLElBQUksQ0FBQ25HLEtBQUssQ0FBQ29HLDJCQUEyQixHQUFHLElBQUk7TUFDOUM7TUFDQSxPQUFPekcsTUFBTTtJQUNkLENBQUM7SUFBQWQsTUFBQSxDQUVEeUYsaUJBQWlCLEdBQWpCLFNBQUFBLGlCQUFpQkEsQ0FBQSxFQUFTO01BQ3pCLElBQUksQ0FBQ3RFLEtBQUssQ0FBQzhGLHNCQUFzQixHQUFHLEtBQUs7TUFDekMsSUFBSSxDQUFDOUYsS0FBSyxDQUFDK0Ysb0JBQW9CLEdBQUcsS0FBSztNQUN2QyxJQUFJLENBQUMvRixLQUFLLENBQUNxRyxnQkFBZ0IsR0FBRyxLQUFLO01BQ25DLElBQUksQ0FBQ3JHLEtBQUssQ0FBQ3NHLGdCQUFnQixHQUFHLEVBQUU7TUFDaEMsSUFBSSxDQUFDdEcsS0FBSyxDQUFDNkQsZ0JBQWdCLEdBQUdDLFdBQVcsQ0FBQzlCLEtBQUs7SUFDaEQsQ0FBQztJQUFBbkQsTUFBQSxDQUVEMEgsK0JBQStCLEdBQS9CLFNBQUFBLCtCQUErQkEsQ0FBQSxFQUFTO01BQ3ZDLElBQUksQ0FBQ3ZHLEtBQUssQ0FBQ29HLDJCQUEyQixHQUFHLEtBQUs7TUFDOUMsSUFBSSxDQUFDcEcsS0FBSyxDQUFDa0csMkJBQTJCLEdBQUcsRUFBRTtJQUM1QyxDQUFDO0lBQUFySCxNQUFBLENBRUQyRSxlQUFlLEdBQWYsU0FBQUEsZUFBZUEsQ0FBQ2dELElBQVksRUFBUTtNQUNuQyxJQUFJLENBQUN4RyxLQUFLLENBQUM4RixzQkFBc0IsR0FBRyxLQUFLO01BQ3pDLElBQUksQ0FBQzlGLEtBQUssQ0FBQytGLG9CQUFvQixHQUFHLEtBQUs7TUFDdkMsSUFBSSxDQUFDL0YsS0FBSyxDQUFDNkYsa0JBQWtCLEdBQUcsSUFBSTtNQUNwQyxJQUFJLENBQUM3RixLQUFLLENBQUNzRyxnQkFBZ0IsR0FBR0UsSUFBSTtNQUNsQyxJQUFJLENBQUN4RyxLQUFLLENBQUNxRyxnQkFBZ0IsR0FBRyxJQUFJO0lBQ25DLENBQUM7SUFBQXhILE1BQUEsQ0FFRGlCLDZCQUE2QixHQUE3QixTQUFBQSw2QkFBNkJBLENBQUEsRUFBWTtNQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDRCxtQkFBbUIsRUFBRTtRQUM5QixJQUFJLENBQUNBLG1CQUFtQixHQUN2QjRHLElBQUEsQ0FBQ0MsT0FBTztVQUNQQyxFQUFFLEVBQUUsSUFBSSxDQUFDQyxLQUFLLENBQUMsQ0FBQyxHQUFHLGVBQWdCO1VBQ25DQyxTQUFTLEVBQUUsS0FBTTtVQUNqQkMsVUFBVSxFQUFFLElBQUs7VUFDakJDLFNBQVMsRUFBRUMsYUFBYSxDQUFDQyxNQUFPO1VBQ2hDQyxLQUFLLEVBQUMseUJBQXlCO1VBQUFDLFFBQUEsRUFFOUI7WUFDQUMsTUFBTSxFQUFFLElBQUksQ0FBQ0MsVUFBVSxDQUFDO1VBQ3pCO1FBQUMsQ0FDTyxDQUNUO01BQ0Y7TUFDQSxPQUFPLElBQUksQ0FBQ3hILG1CQUFtQjtJQUNoQyxDQUFDO0lBQUFoQixNQUFBLENBRUR3SSxVQUFVLEdBQVYsU0FBQUEsVUFBVUEsQ0FBQSxFQUFnQztNQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDQyxPQUFPLEVBQUU7UUFDbEIsTUFBTUMsUUFBUSxHQUFHLElBQUksQ0FBQ0MsV0FBVyxDQUFDLENBQUM7UUFDbkMsTUFBTUMsYUFBYSxHQUFHLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUNKLE9BQU8sR0FDWGIsSUFBQSxDQUFDa0IsZUFBZTtVQUFBUixRQUFBLEVBQ2Q7WUFDQTNHLE9BQU8sRUFDTm9ILEtBQUEsQ0FBQUMsU0FBQTtjQUFBVixRQUFBLEdBQ0NWLElBQUEsQ0FBQ3FCLGFBQWEsSUFBRSxDQUFDLEVBQ2hCUCxRQUFRLEVBQ1JFLGFBQWE7WUFBQSxDQUNiO1VBRUo7UUFBQyxDQUNlLENBQ2pCO01BQ0Y7TUFDQSxPQUFPLElBQUksQ0FBQ0gsT0FBTztJQUNwQixDQUFDO0lBQUF6SSxNQUFBLENBRUQySSxXQUFXLEdBQVgsU0FBQUEsV0FBV0EsQ0FBQSxFQUF1QjtNQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDRCxRQUFRLEVBQUU7UUFDbkIsSUFBSSxDQUFDQSxRQUFRLEdBQUdkLElBQUEsQ0FBQ3NCLE1BQU07VUFBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUNuRyxjQUFjLENBQUM0QixPQUFPLENBQUMsMEJBQTBCLENBQUU7VUFBQy9HLElBQUksRUFBRThNLFVBQVUsQ0FBQ0M7UUFBVyxDQUFFLENBQUM7TUFDdkg7TUFDQSxPQUFPLElBQUksQ0FBQ1YsUUFBUTtJQUNyQixDQUFDO0lBQUExSSxNQUFBLENBRUQ2SSxnQkFBZ0IsR0FBaEIsU0FBQUEsZ0JBQWdCQSxDQUFBLEVBQXVCO01BQ3RDLElBQUksQ0FBQyxJQUFJLENBQUNELGFBQWEsRUFBRTtRQUN4QixJQUFJLENBQUNBLGFBQWEsR0FBR2hCLElBQUEsQ0FBQ3NCLE1BQU07VUFBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUNuRyxjQUFjLENBQUM0QixPQUFPLENBQUMsc0NBQXNDO1FBQUUsQ0FBRSxDQUFDO01BQzNHO01BQ0EsT0FBTyxJQUFJLENBQUN3RixhQUFhO0lBQzFCLENBQUM7SUFBQTVJLE1BQUEsQ0FFRHFKLFlBQVksR0FBWixTQUFBQSxZQUFZQSxDQUFDdkksTUFBeUIsRUFBcUI7TUFDMUQsT0FBT0EsTUFBTSxDQUFDd0ksR0FBRyxDQUFFckcsS0FBSyxJQUFLO1FBQzVCLElBQUlBLEtBQUssQ0FBQzVHLElBQUksS0FBSyxXQUFXLEVBQUU7VUFDL0IsT0FBTztZQUNOLEdBQUc0RyxLQUFLO1lBQ1JYLHlCQUF5QixFQUFFVyxLQUFLLENBQUNYLHlCQUF5QixDQUFDZ0gsR0FBRyxDQUFFMUMsS0FBSyxJQUFLO2NBQ3pFO2NBQ0EsT0FBTztnQkFDTkwsUUFBUSxFQUFFSyxLQUFLLENBQUNMLFFBQVE7Z0JBQ3hCSSxjQUFjLEVBQUVDLEtBQUssQ0FBQ0QsY0FBYyxDQUFDMkMsR0FBRyxDQUFFQyxHQUFHLElBQUtBLEdBQUcsQ0FBQzNDLEtBQUs7Y0FDNUQsQ0FBQztZQUNGLENBQUM7VUFDRixDQUFDO1FBQ0YsQ0FBQyxNQUFNO1VBQ04sT0FBTzRDLFNBQVMsQ0FBQ3ZHLEtBQUssQ0FBQztRQUN4QjtNQUNELENBQUMsQ0FBQztJQUNILENBQUM7SUFBQWpELE1BQUEsQ0FFRHlKLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFBLEVBQW9DO01BQUEsSUFBbkNDLFlBQXNCLEdBQUFDLFNBQUEsQ0FBQXRJLE1BQUEsUUFBQXNJLFNBQUEsUUFBQUMsU0FBQSxHQUFBRCxTQUFBLE1BQUcsRUFBRTtNQUN4QyxJQUFJRCxZQUFZLENBQUNHLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtRQUNwQyxJQUFJLElBQUksQ0FBQzFLLDJCQUEyQixFQUFFO1VBQ3JDLElBQUksQ0FBQzJFLFNBQVMsQ0FBQyxlQUFlLEVBQUU7WUFDL0JoRCxNQUFNLEVBQUUsSUFBSSxDQUFDdUksWUFBWSxDQUFDLElBQUksQ0FBQ2xJLEtBQUssQ0FBQ0wsTUFBc0MsQ0FBQztZQUM1RWdKLEtBQUssRUFBRSxJQUFJLENBQUMxSztVQUNiLENBQUMsQ0FBQztRQUNIO1FBQ0EsSUFBSSxDQUFDK0IsS0FBSyxDQUFDQyxVQUFVLEdBQUcsSUFBSSxDQUFDRCxLQUFLLENBQUNMLE1BQU0sQ0FBQ08sTUFBTSxHQUFHLENBQUM7UUFDcEQsSUFBSSxFQUFFLElBQUksQ0FBQ0Msd0JBQXdCLElBQUksS0FBSyxDQUFDLEVBQUU7VUFDOUMsSUFBSSxDQUFDdUIsK0JBQStCLENBQUMsQ0FBQztRQUN2QztRQUVBLElBQUksSUFBSSxDQUFDcEQsd0JBQXdCLEVBQUU7VUFDbEM7QUFDSjtBQUNBO0FBQ0E7QUFDQTtBQUNBO1VBQ0ksSUFBSSxDQUFDZ0csaUJBQWlCLENBQUMsQ0FBQztVQUN4QixJQUFJLENBQUNpQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ3ZDO1FBQ0EsSUFBSSxDQUFDakksd0JBQXdCLEdBQUcsSUFBSTtNQUNyQztNQUNBO01BQ0EsSUFBSSxDQUFDNkIsd0JBQXdCLEdBQUcsS0FBSztNQUNyQyxJQUFJLENBQUNuQywyQkFBMkIsR0FBRyxJQUFJO01BQ3ZDLElBQUksQ0FBQ0MsMEJBQTBCLEdBQUcsS0FBSzs7TUFFdkM7TUFDQTtNQUNBO01BQ0EsQ0FBQyxJQUFJLENBQUNvRSxTQUFTLEVBQUU5QyxPQUFPLEVBQTBCcUosZUFBZSxHQUFHLE1BQVksQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFBQS9KLE1BQUEsQ0FFT2dLLGdCQUFnQixHQUF4QixTQUFRQSxnQkFBZ0JBLENBQUEsRUFBUztNQUNoQyxJQUFJLENBQUM3SSxLQUFLLENBQUMrRixvQkFBb0IsR0FBRyxJQUFJO01BQ3RDLElBQUksQ0FBQy9GLEtBQUssQ0FBQzhGLHNCQUFzQixHQUFHLEtBQUs7TUFDekNnRCxvQkFBb0IsQ0FBQyxTQUFTLENBQUM7TUFDL0IsSUFBSSxDQUFDQyxjQUFjLENBQUMsQ0FBQztJQUN0QixDQUFDO0lBQUFsSyxNQUFBLENBRU9tSyxrQkFBa0IsR0FBMUIsU0FBUUEsa0JBQWtCQSxDQUFBLEVBQVM7TUFDbEMsSUFBSSxDQUFDaEosS0FBSyxDQUFDOEYsc0JBQXNCLEdBQUcsSUFBSTtNQUN4QyxJQUFJLENBQUM5RixLQUFLLENBQUMrRixvQkFBb0IsR0FBRyxLQUFLO01BQ3ZDK0Msb0JBQW9CLENBQUMsV0FBVyxDQUFDO01BQ2pDLElBQUksQ0FBQ0MsY0FBYyxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUFBbEssTUFBQSxDQUVPa0ssY0FBYyxHQUF0QixTQUFRQSxjQUFjQSxDQUFBLEVBQVM7TUFDOUIsSUFBSSxDQUFDL0ksS0FBSyxDQUFDNkYsa0JBQWtCLEdBQUcsS0FBSztNQUNyQ29ELFlBQVksQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQzdJLGNBQWMsQ0FBQzRCLE9BQU8sQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO0lBQzlFLENBQUM7SUFBQXBELE1BQUEsQ0FFRDRCLGFBQWEsR0FBYixTQUFBQSxhQUFhQSxDQUFBLEVBQVM7TUFDckIsTUFBTTBJLFNBQVMsR0FBR0MsZUFBZSxDQUFTLENBQUM7TUFDM0MsTUFBTUMsc0JBQXNCLEdBQzNCNUMsSUFBQSxDQUFDNkMsWUFBWTtRQUNaQyxJQUFJLEVBQUUscUJBQXNCO1FBQzVCQyxPQUFPLEVBQUUsSUFBSSxDQUFDbkosY0FBYyxDQUFDNEIsT0FBTyxDQUFDLHlCQUF5QixDQUFFO1FBQ2hFL0csSUFBSSxFQUFFLGFBQWM7UUFDcEJ1TyxLQUFLLEVBQUVBLENBQUEsS0FBWTtVQUNsQixPQUFPLElBQUksQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQztRQUMvQixDQUFFO1FBQ0ZhLE9BQU8sRUFBRUMsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBRTtRQUNyRDRKLE9BQU8sRUFBRUQsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxzQkFBc0I7TUFBRSxDQUN2RCxDQUNEO01BQ0Q2SixVQUFVLENBQUNDLG1CQUFtQixDQUFDVCxzQkFBc0IsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUM7TUFDcEYsTUFBTVUsd0JBQXdCLEdBQzdCdEQsSUFBQSxDQUFDNkMsWUFBWTtRQUNaQyxJQUFJLEVBQUUsdUJBQXdCO1FBQzlCQyxPQUFPLEVBQUUsSUFBSSxDQUFDbkosY0FBYyxDQUFDNEIsT0FBTyxDQUFDLDJCQUEyQixDQUFFO1FBQ2xFL0csSUFBSSxFQUFFLGFBQWM7UUFDcEJ1TyxLQUFLLEVBQUVBLENBQUEsS0FBWTtVQUNsQixPQUFPLElBQUksQ0FBQ1Qsa0JBQWtCLENBQUMsQ0FBQztRQUNqQyxDQUFFO1FBQ0ZVLE9BQU8sRUFBRUMsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBRTtRQUNyRDRKLE9BQU8sRUFBRUQsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSx3QkFBd0I7TUFBRSxDQUN6RCxDQUNEO01BQ0Q2SixVQUFVLENBQUNDLG1CQUFtQixDQUFDQyx3QkFBd0IsRUFBRSxPQUFPLEVBQUUscUJBQXFCLENBQUM7TUFDeEYsTUFBTUMsMEJBQTBCLEdBQy9CdkQsSUFBQSxDQUFDNkMsWUFBWTtRQUNaQyxJQUFJLEVBQUUscUJBQXNCO1FBQzVCQyxPQUFPLEVBQUUsSUFBSSxDQUFDbkosY0FBYyxDQUFDNEIsT0FBTyxDQUFDLHlCQUF5QixDQUFFO1FBQ2hFL0csSUFBSSxFQUFFLGFBQWM7UUFDcEJ1TyxLQUFLLEVBQUVBLENBQUEsS0FBWTtVQUNsQixPQUFPLElBQUksQ0FBQ1osZ0JBQWdCLENBQUMsQ0FBQztRQUMvQixDQUFFO1FBQ0ZhLE9BQU8sRUFBRUMsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBRTtRQUNyRDRKLE9BQU8sRUFBRUQsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxzQkFBc0I7TUFBRSxDQUN2RCxDQUNEO01BQ0Q2SixVQUFVLENBQUNDLG1CQUFtQixDQUFDRSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsb0JBQW9CLENBQUM7TUFDekYsTUFBTUMsNEJBQTRCLEdBQ2pDeEQsSUFBQSxDQUFDNkMsWUFBWTtRQUNaQyxJQUFJLEVBQUUsdUJBQXdCO1FBQzlCQyxPQUFPLEVBQUUsSUFBSSxDQUFDbkosY0FBYyxDQUFDNEIsT0FBTyxDQUFDLDJCQUEyQixDQUFFO1FBQ2xFL0csSUFBSSxFQUFFLGFBQWM7UUFDcEJ1TyxLQUFLLEVBQUVBLENBQUEsS0FBWTtVQUNsQixPQUFPLElBQUksQ0FBQ1Qsa0JBQWtCLENBQUMsQ0FBQztRQUNqQyxDQUFFO1FBQ0ZVLE9BQU8sRUFBRUMsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxvQkFBb0IsQ0FBRTtRQUNyRDRKLE9BQU8sRUFBRUQsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSx3QkFBd0I7TUFBRSxDQUN6RCxDQUNEO01BQ0Q2SixVQUFVLENBQUNDLG1CQUFtQixDQUFDRyw0QkFBNEIsRUFBRSxPQUFPLEVBQUUsc0JBQXNCLENBQUM7TUFDN0YsTUFBTUMsT0FBTyxHQUNadEMsS0FBQSxDQUFDdUMsSUFBSTtRQUFBaEQsUUFBQSxHQUNKUyxLQUFBLENBQUN3QyxPQUFPO1VBQUNDLFVBQVUsRUFBQyxNQUFNO1VBQUFsRCxRQUFBLEdBQ3pCVixJQUFBLENBQUM2RCxlQUFlO1lBQ2ZDLGlCQUFpQixFQUFFLElBQUksQ0FBQ0EsaUJBQWtCO1lBQzFDQyxHQUFHLEVBQUUsSUFBSSxDQUFDbEwsZUFBZ0I7WUFDMUJtTCxZQUFZLEVBQUUsSUFBSSxDQUFDbkosY0FBYyxDQUFDbUQsSUFBSSxDQUFDLElBQUksQ0FBRTtZQUM3Q2lHLFlBQVksRUFBR25KLENBQUMsSUFBVztjQUMxQixJQUFJLENBQUNvQixTQUFTLENBQUMsY0FBYyxFQUFFO2dCQUFFZ0ksS0FBSyxFQUFFcEosQ0FBQyxDQUFDRSxZQUFZLENBQUMsT0FBTztjQUFFLENBQUMsQ0FBQztZQUNuRSxDQUFFO1lBQ0ZtSixVQUFVLEVBQUVBLENBQUEsS0FBWTtjQUN2QixJQUFJLENBQUM1SyxLQUFLLENBQUMwQyxpQkFBaUIsR0FBRyxLQUFLO1lBQ3JDO1VBQUUsQ0FDRixDQUFDLEVBRUYrRCxJQUFBLENBQUNzQixNQUFNO1lBQ053QixJQUFJLEVBQUUsZUFBZ0I7WUFDdEJyQyxLQUFLLEVBQUUsdUJBQXdCO1lBQy9Cc0QsR0FBRyxFQUFFckIsU0FBVTtZQUNmM0MsSUFBSSxFQUFFLElBQUksQ0FBQ25HLGNBQWMsQ0FBQzRCLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBRTtZQUN0RC9HLElBQUksRUFBRThNLFVBQVUsQ0FBQ0MsVUFBVztZQUM1QndCLEtBQUssRUFBRSxJQUFJLENBQUNvQixlQUFlLENBQUNwRyxJQUFJLENBQUMsSUFBSTtVQUFFLENBQ3ZDLENBQUM7UUFBQSxDQUNNLENBQUMsRUFDVmdDLElBQUEsQ0FBQzJELE9BQU87VUFDUEMsVUFBVSxFQUFDLE1BQU07VUFDakJTLE9BQU8sRUFBRW5CLFNBQVMsQ0FBQyxJQUFJLENBQUMzSixLQUFLLEVBQUUsWUFBWSxDQUFFO1VBQzdDK0ssVUFBVSxFQUFFQyxjQUFjLENBQUNDLE1BQU87VUFDbENDLElBQUksRUFBRUMsUUFBUSxDQUFDQyxJQUFLO1VBQ3BCQyxjQUFjLEVBQUVDLGtCQUFrQixDQUFDQyxZQUFhO1VBQ2hEckUsS0FBSyxFQUFFLG9CQUFxQjtVQUFBQyxRQUFBLEVBRTVCUyxLQUFBLENBQUN3QyxPQUFPO1lBQUNsRCxLQUFLLEVBQUUscUJBQXNCO1lBQUNtRCxVQUFVLEVBQUMsTUFBTTtZQUFDVSxVQUFVLEVBQUVDLGNBQWMsQ0FBQ0MsTUFBTztZQUFDQyxJQUFJLEVBQUVDLFFBQVEsQ0FBQ0MsSUFBSztZQUFBakUsUUFBQSxHQUM5RyxJQUFJLENBQUNxRSxRQUFRLEVBQUVDLEtBQUssQ0FBQyxDQUFDLEVBQ3ZCaEYsSUFBQSxDQUFDaUYsU0FBUztjQUNUQyxRQUFRLEVBQUVDLEdBQUcsQ0FBQ2pDLFNBQVMsQ0FBQyxJQUFJLENBQUMzSixLQUFLLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxJQUFJLENBQUU7Y0FDaEVrSCxLQUFLLEVBQUUsd0JBQXlCO2NBQ2hDdkgsTUFBTSxFQUFFZ0ssU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxRQUFRLENBQUU7Y0FDeEM2TCxVQUFVLEVBQUVDLG1CQUFtQixDQUFDQyxLQUFNO2NBQ3RDdkIsR0FBRyxFQUFFLElBQUksQ0FBQ25JLFNBQVU7Y0FBQThFLFFBQUEsRUFFbkI7Z0JBQ0F4SCxNQUFNLEVBQUVBLENBQUN3RixHQUFXLEVBQUU2RyxHQUFZLEtBQVk7a0JBQzdDLE1BQU1DLE1BQU0sR0FBR0QsR0FBRyxDQUFDRSxTQUFTLENBQUMsQ0FBb0I7a0JBQ2pELE9BQ0N6RixJQUFBLENBQUMwRixLQUFLO29CQUVMakwsS0FBSyxFQUFFLElBQUksQ0FBQ2xCLEtBQUssQ0FBQ0wsTUFBTSxDQUFDdUIsS0FBTTtvQkFDL0JrTCxLQUFLLEVBQUUsSUFBSSxDQUFDcE0sS0FBSyxDQUFDTCxNQUFNLENBQUN3Qix5QkFBMEI7b0JBQ25Ea0wsU0FBUyxFQUFFLElBQUksQ0FBQ0MsY0FBYyxDQUFDTCxNQUFNLENBQUNoTCxHQUFHLENBQUU7b0JBQzNDSSxJQUFJLEVBQUUsSUFBSSxDQUFDckIsS0FBSyxDQUFDTCxNQUFNLENBQUMwQixJQUFLO29CQUM3QmtMLE1BQU0sRUFBRUEsQ0FBQSxLQUFZO3NCQUNuQixNQUFNQyxVQUFVLEdBQUcsSUFBSSxDQUFDeE0sS0FBSyxDQUFDTCxNQUFNLENBQUM4TSxTQUFTLENBQUUzSyxLQUFLLElBQUtBLEtBQUssQ0FBQ2IsR0FBRyxLQUFLZ0wsTUFBTSxDQUFDaEwsR0FBRyxDQUFDO3NCQUNuRixNQUFNeUwsU0FBUyxHQUFHLElBQUksQ0FBQzFNLEtBQUssQ0FBQ0wsTUFBTSxDQUFDZ04sTUFBTSxDQUFDLENBQUM7c0JBQzVDRCxTQUFTLENBQUN6RyxNQUFNLENBQUN1RyxVQUFVLEVBQUUsQ0FBQyxDQUFDO3NCQUMvQixJQUFJLENBQUN4TSxLQUFLLENBQUNMLE1BQU0sR0FBRytNLFNBQVM7c0JBQzdCLElBQUksQ0FBQ0UsaUJBQWlCLENBQUMsY0FBYyxDQUFDO29CQUN2QyxDQUFFO29CQUFBekYsUUFBQSxFQUVEO3NCQUNBMEYsVUFBVSxFQUFFLENBQ1hwRyxJQUFBLENBQUNxRyxVQUFVO3dCQUFpQnJILEtBQUssRUFBRXdHO3NCQUFPLEdBQTFCLFdBQTRCLENBQUMsRUFDN0N4RixJQUFBLENBQUNxRyxVQUFVO3dCQUFlckgsS0FBSyxFQUFFLElBQUksQ0FBQzVGO3NCQUFvQixHQUExQyxTQUE0QyxDQUFDLEVBQzdENEcsSUFBQSxDQUFDcUcsVUFBVTt3QkFBOEJySCxLQUFLLEVBQUU7c0JBQUssR0FBckMsd0JBQXVDLENBQUMsRUFDeERnQixJQUFBLENBQUNxRyxVQUFVO3dCQUVWckgsS0FBSyxFQUFFLElBQUksQ0FBQy9GLGlCQUFpQixFQUFFb0YsSUFBSSxDQUFFbEUsSUFBSSxJQUFLQSxJQUFJLENBQUNHLElBQUksS0FBS2tMLE1BQU0sQ0FBQ2hMLEdBQUcsQ0FBQyxFQUFFOEw7c0JBQVMsR0FEOUUsVUFFSixDQUFDO29CQUVKO2tCQUFDLEdBdkJJLElBQUksQ0FBQy9NLEtBQUssQ0FBQ0wsTUFBTSxDQUFDc0IsR0F3QmpCLENBQUM7Z0JBRVY7Y0FDRDtZQUFDLENBQ1MsQ0FBQyxFQUNaMkcsS0FBQSxDQUFDb0YsSUFBSTtjQUFBN0YsUUFBQSxHQUNIa0Msc0JBQXNCLEVBQUMsSUFBRSxFQUFDVSx3QkFBd0I7WUFBQSxDQUM5QyxDQUFDLEVBQ1B0RCxJQUFBLENBQUNzQixNQUFNO2NBQ052QixJQUFJLEVBQUUsSUFBSSxDQUFDbkcsY0FBYyxDQUFDNEIsT0FBTyxDQUFDLHFCQUFxQixDQUFFO2NBQ3pEL0csSUFBSSxFQUFFOE0sVUFBVSxDQUFDaUYsV0FBWTtjQUM3QnhELEtBQUssRUFBRUEsQ0FBQSxLQUFZO2dCQUNsQixJQUFJLENBQUNoSCxVQUFVLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQztnQkFDM0I7Z0JBQ0EsSUFBSSxDQUFDbkQsZUFBZSxDQUFDQyxPQUFPLEVBQUUyTixZQUFZLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQ25EO1lBQUUsQ0FDRixDQUFDO1VBQUEsQ0FDTTtRQUFDLENBQ0YsQ0FBQyxFQUNWMUcsSUFBQSxDQUFDMkQsT0FBTztVQUFDQyxVQUFVLEVBQUMsTUFBTTtVQUFBbEQsUUFBQSxFQUN6QlYsSUFBQSxDQUFDMkcsWUFBWTtZQUNaNUcsSUFBSSxFQUFFbUQsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSw2QkFBNkIsQ0FBRTtZQUMzRHFOLFFBQVEsRUFBRSxJQUFLO1lBQ2ZDLG1CQUFtQixFQUFFLElBQUs7WUFDMUJ4QyxPQUFPLEVBQUVuQixTQUFTLENBQUMsSUFBSSxDQUFDM0osS0FBSyxFQUFFLDZCQUE2QixDQUFFO1lBQzlEdU4sZUFBZSxFQUFFLElBQUs7WUFDdEJDLEtBQUssRUFBRUEsQ0FBQSxLQUFZO2NBQ2xCLElBQUksQ0FBQ2pILCtCQUErQixDQUFDLENBQUM7WUFDdkM7VUFBRSxDQUNZO1FBQUMsQ0FDUixDQUFDLEVBQ1ZxQixLQUFBLENBQUN3QyxPQUFPO1VBQUNDLFVBQVUsRUFBQyxNQUFNO1VBQUNuRCxLQUFLLEVBQUUscUJBQXNCO1VBQUFDLFFBQUEsR0FDdkRWLElBQUEsQ0FBQzJHLFlBQVk7WUFDWmxTLElBQUksRUFBRXlPLFNBQVMsQ0FBQyxJQUFJLENBQUMzSixLQUFLLEVBQUUsa0JBQWtCLENBQUU7WUFDaER3RyxJQUFJLEVBQUVtRCxTQUFTLENBQUMsSUFBSSxDQUFDM0osS0FBSyxFQUFFLGtCQUFrQixDQUFFO1lBQ2hEcU4sUUFBUSxFQUFFLElBQUs7WUFDZkMsbUJBQW1CLEVBQUUsSUFBSztZQUMxQkMsZUFBZSxFQUFFLElBQUs7WUFDdEJDLEtBQUssRUFBRUEsQ0FBQSxLQUFZO2NBQ2xCLElBQUksQ0FBQ2xKLGlCQUFpQixDQUFDLENBQUM7WUFDekIsQ0FBRTtZQUNGd0csT0FBTyxFQUFFbkIsU0FBUyxDQUFDLElBQUksQ0FBQzNKLEtBQUssRUFBRSxrQkFBa0I7VUFBRSxDQUNyQyxDQUFDLEVBQ2hCNEgsS0FBQSxDQUFDb0YsSUFBSTtZQUFDbEMsT0FBTyxFQUFFYyxHQUFHLENBQUNqQyxTQUFTLENBQUMsSUFBSSxDQUFDM0osS0FBSyxFQUFFLGtCQUFrQixDQUFDLEVBQUV5TixHQUFHLENBQUM5RCxTQUFTLENBQUMsSUFBSSxDQUFDM0osS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDLENBQUU7WUFBQW1ILFFBQUEsR0FDdEc2QywwQkFBMEIsRUFBQyxJQUFFLEVBQUNDLDRCQUE0QjtVQUFBLENBQ3RELENBQUM7UUFBQSxDQUNDLENBQUM7TUFBQSxDQUNMLENBQ0U7TUFDVEosVUFBVSxDQUFDQyxtQkFBbUIsQ0FBQ1gsU0FBUyxDQUFDNUosT0FBTyxFQUFHLE9BQU8sRUFBRSxjQUFjLENBQUM7TUFDM0UsT0FBTzJLLE9BQU87SUFDZixDQUFDO0lBQUFyTCxNQUFBLENBRUtnTSxlQUFlLEdBQXJCLGVBQU1BLGVBQWVBLENBQUEsRUFBa0I7TUFDdEMsSUFBSSxDQUFDN0ssS0FBSyxDQUFDMEMsaUJBQWlCLEdBQUcsSUFBSTtNQUNuQyxJQUFJZ0wsaUJBQWlCLEdBQUcsSUFBSSxDQUFDcE8sZUFBZSxDQUFDQyxPQUFPLEVBQUVvTyxRQUFRLENBQUMsQ0FBQztNQUNoRSxNQUFNQyx1QkFBdUIsR0FBRyxJQUFJLENBQUN0TyxlQUFlLENBQUNDLE9BQU8sRUFBRXNPLGNBQWMsQ0FBQyxDQUFDO01BRTlFLElBQUlILGlCQUFpQixLQUFLLEVBQUUsSUFBSUUsdUJBQXVCLEtBQUssSUFBSSxDQUFDdk4sY0FBYyxDQUFDNEIsT0FBTyxDQUFDLDJCQUEyQixDQUFDLEVBQUU7UUFDckgsSUFBSSxDQUFDM0MsZUFBZSxDQUFDQyxPQUFPLEVBQUV1TyxRQUFRLENBQUNGLHVCQUF1QixJQUFJLEVBQUUsQ0FBQztRQUNyRUYsaUJBQWlCLEdBQUdFLHVCQUF1QjtNQUM1QztNQUNBLE1BQU0sSUFBSSxDQUFDcE0sU0FBUyxDQUFDa00saUJBQWlCLENBQUM7SUFDeEM7O0lBRUE7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BWEM7SUFBQTdPLE1BQUEsQ0FhQTRELFVBQVUsR0FBVixTQUFBQSxVQUFVQSxDQUFBLEVBQW1FO01BQUEsSUFBbEVzTCxlQUFlLEdBQUF2RixTQUFBLENBQUF0SSxNQUFBLFFBQUFzSSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLElBQUk7TUFBQSxJQUFFdkssMEJBQTBCLEdBQUF1SyxTQUFBLENBQUF0SSxNQUFBLFFBQUFzSSxTQUFBLFFBQUFDLFNBQUEsR0FBQUQsU0FBQSxNQUFHLEtBQUs7TUFDcEUsSUFBSXVGLGVBQWUsRUFBRTtRQUNwQixJQUFJLENBQUNwTCxTQUFTLENBQUMsY0FBYyxDQUFDO1FBQzlCLElBQUksQ0FBQzFFLDBCQUEwQixHQUFHQSwwQkFBMEI7TUFDN0QsQ0FBQyxNQUFNO1FBQ04sSUFBSSxDQUFDRCwyQkFBMkIsR0FBRyxLQUFLO01BQ3pDO01BQ0EsSUFBSSxDQUFDZ0MsS0FBSyxDQUFDTCxNQUFNLEdBQUcsSUFBSSxDQUFDQyxnQkFBZ0IsQ0FBQyxDQUFDO01BQzNDLElBQUksQ0FBQ2dOLGlCQUFpQixDQUFDLFlBQVksQ0FBQztNQUNwQyxJQUFJLENBQUM1TSxLQUFLLENBQUMwQyxpQkFBaUIsR0FBRyxJQUFJO01BQ25DLElBQUksQ0FBQ3ZDLHdCQUF3QixHQUFHLElBQUk7TUFDcEM7TUFDQSxJQUFJLENBQUNrQyxTQUFTLENBQUM5QyxPQUFPLEVBQUUrQyxTQUFTLENBQUMsQ0FBQyxDQUFDM0IsT0FBTyxDQUFFbUIsS0FBSyxJQUFLQSxLQUFLLENBQUM3QyxXQUFXLENBQUMsWUFBWSxFQUFFOEMsVUFBVSxDQUFDaU0sSUFBSSxDQUFDLENBQUM7TUFDeEcsSUFBSSxDQUFDM0wsU0FBUyxDQUFDOUMsT0FBTyxFQUFFK0MsU0FBUyxDQUFDLENBQUMsQ0FBQzNCLE9BQU8sQ0FBRW1CLEtBQUssSUFBS0EsS0FBSyxDQUFDN0MsV0FBVyxDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDO01BQ2pHLElBQUksQ0FBQ3FGLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNCOztJQUVBO0lBQUE7SUFBQXpGLE1BQUEsQ0FDQW9QLGdCQUFnQixHQUFoQixTQUFBQSxnQkFBZ0JBLENBQ2ZDLFVBQXdCLEVBQ3hCQyxzQkFBNkYsRUFDN0ZDLFFBQWdCLEVBQ1Q7TUFDUCxNQUFNMUIsU0FBUyxHQUFHLElBQUksQ0FBQzFNLEtBQUssQ0FBQ0wsTUFBTSxDQUFDd0ksR0FBRyxDQUFFckcsS0FBSyxLQUFNO1FBQUUsR0FBR0EsS0FBSztRQUFFWCx5QkFBeUIsRUFBRSxDQUFDLEdBQUdXLEtBQUssQ0FBQ1gseUJBQXlCO01BQUUsQ0FBQyxDQUFDLENBQUM7TUFDbkksTUFBTXFMLFVBQVUsR0FBR0UsU0FBUyxDQUFDRCxTQUFTLENBQUU0QixDQUFDLElBQUtBLENBQUMsQ0FBQ3BOLEdBQUcsS0FBS21OLFFBQVEsQ0FBQztNQUNqRSxNQUFNdE0sS0FBSyxHQUFHNEssU0FBUyxDQUFDRixVQUFVLENBQUM7TUFDbkMsSUFBSUEsVUFBVSxJQUFJLENBQUMsQ0FBQyxFQUFFO1FBQ3JCLFFBQVEwQixVQUFVO1VBQ2pCLEtBQUssbUJBQW1CO1lBQ3ZCLElBQUksQ0FBQ0ksaUJBQWlCLENBQUN4TSxLQUFLLEVBQXFCcU0sc0JBQXNCLEVBQUUzQixVQUFVLEVBQUVFLFNBQThCLENBQUM7WUFDcEg1SyxLQUFLLENBQUNYLHlCQUF5QixHQUFHZ04sc0JBQXNCO1lBQ3hEO1lBQ0EsSUFBSSxDQUFDLElBQUksQ0FBQzdCLGNBQWMsQ0FBQ3hLLEtBQUssQ0FBQ2IsR0FBRyxDQUFDLElBQUlhLEtBQUssQ0FBQ1gseUJBQXlCLENBQUNqQixNQUFNLEtBQUssQ0FBQyxFQUFFO2NBQ3BGd00sU0FBUyxDQUFDekcsTUFBTSxDQUFDdUcsVUFBVSxFQUFFLENBQUMsQ0FBQztZQUNoQztZQUNBO1VBQ0Q7WUFDQ3hJLEdBQUcsQ0FBQ0MsS0FBSyxDQUFDLGlEQUFpRCxDQUFDO1lBQzVEO1FBQ0Y7UUFDQTtRQUNBLElBQUksQ0FBQ2pFLEtBQUssQ0FBQ0wsTUFBTSxHQUFHK00sU0FBOEI7UUFDbEQsSUFBSSxDQUFDMU0sS0FBSyxDQUFDQyxVQUFVLEdBQUd5TSxTQUFTLENBQUN4TSxNQUFNLEdBQUcsQ0FBQztRQUM1QyxJQUFJLENBQUMwTSxpQkFBaUIsQ0FBQyxjQUFjLENBQUM7TUFDdkM7SUFDRCxDQUFDO0lBQUEvTixNQUFBLENBRU0wUCx3QkFBd0IsR0FBL0IsU0FBT0Esd0JBQXdCQSxDQUFBLEVBQVM7TUFDdkMsSUFBSSxDQUFDMU8sbUJBQW1CLEVBQUUyTixLQUFLLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBQUEzTyxNQUFBLENBRU95UCxpQkFBaUIsR0FBekIsU0FBUUEsaUJBQWlCQSxDQUN4QnhNLEtBQXNCLEVBQ3RCcU0sc0JBQTZGLEVBQzdGM0IsVUFBa0IsRUFDbEJFLFNBQTRCLEVBQ3JCO01BQ1A1SyxLQUFLLENBQUNYLHlCQUF5QixHQUFHZ04sc0JBQXNCO01BQ3hELElBQUksQ0FBQyxJQUFJLENBQUM3QixjQUFjLENBQUN4SyxLQUFLLENBQUNiLEdBQUcsQ0FBQyxJQUFJYSxLQUFLLENBQUNYLHlCQUF5QixDQUFDakIsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUNwRndNLFNBQVMsQ0FBQ3pHLE1BQU0sQ0FBQ3VHLFVBQVUsRUFBRSxDQUFDLENBQUM7TUFDaEM7SUFDRCxDQUFDO0lBQUEzTixNQUFBLENBRUR5TixjQUFjLEdBQWQsU0FBQUEsY0FBY0EsQ0FBQ3JMLEdBQVcsRUFBVztNQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDUCxlQUFlLEVBQUU7UUFDMUIsSUFBSSxDQUFDQSxlQUFlLEdBQUcsQ0FBQyxDQUFDO01BQzFCO01BQ0EsT0FBTyxJQUFJLENBQUNBLGVBQWUsQ0FBQ08sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUs7SUFDaEQsQ0FBQztJQUFBcEMsTUFBQSxDQUVEMEUsd0JBQXdCLEdBQXhCLFNBQUFBLHdCQUF3QkEsQ0FBQSxFQUFTO01BQ2hDLE1BQU1pTCxRQUEyQixHQUFHLElBQUksQ0FBQ3hPLEtBQUssQ0FBQ0wsTUFBTSxDQUFDdUUsTUFBTSxDQUFFcEMsS0FBSyxJQUFLO1FBQ3ZFLE9BQU8sSUFBSSxDQUFDd0ssY0FBYyxDQUFDeEssS0FBSyxDQUFDYixHQUFHLENBQUM7TUFDdEMsQ0FBQyxDQUFDO01BQ0YsSUFBSSxDQUFDakIsS0FBSyxDQUFDTCxNQUFNLEdBQUc2TyxRQUFRO01BQzVCLE9BQU8sSUFBSTtJQUNaLENBQUM7SUFBQTNQLE1BQUEsQ0FFRCtOLGlCQUFpQixHQUFqQixTQUFBQSxpQkFBaUJBLENBQUNuSCxLQUFhLEVBQVE7TUFDdEMsTUFBTWdKLFNBQWlCLEdBQUcsSUFBSSxDQUFDblAsZUFBZSxDQUFDQyxPQUFPLEVBQUVvTyxRQUFRLENBQUMsQ0FBQyxJQUFJLEVBQUU7TUFDeEUsSUFBSWxJLEtBQUssS0FBSyxjQUFjLElBQUlnSixTQUFTLEtBQUssRUFBRSxFQUFFO1FBQ2pELElBQUksQ0FBQ25QLGVBQWUsQ0FBQ0MsT0FBTyxFQUFFdU8sUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUN4TyxlQUFlLENBQUNDLE9BQU8sRUFBRW1QLGNBQWMsQ0FBQ0QsU0FBUyxDQUFDO01BQ3hELENBQUMsTUFBTSxJQUFJaEosS0FBSyxLQUFLLFlBQVksRUFBRTtRQUNsQyxJQUFJLENBQUNuRyxlQUFlLENBQUNDLE9BQU8sRUFBRXVPLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDMUMsSUFBSSxDQUFDeE8sZUFBZSxDQUFDQyxPQUFPLEVBQUVtUCxjQUFjLENBQUMsSUFBSSxDQUFDck8sY0FBYyxDQUFDNEIsT0FBTyxDQUFDLDJCQUEyQixDQUFDLENBQUM7TUFDdkc7SUFDRCxDQUFDO0lBQUFwRCxNQUFBLENBRUQ4UCx1QkFBdUIsR0FBdkIsU0FBQUEsdUJBQXVCQSxDQUFBLEVBQXNCO01BQzVDLE1BQU1qQyxTQUFTLEdBQUcsSUFBSSxDQUFDMU0sS0FBSyxDQUFDTCxNQUFNLENBQUN3SSxHQUFHLENBQUVyRyxLQUFLLEtBQU07UUFBRSxHQUFHQSxLQUFLO1FBQUVYLHlCQUF5QixFQUFFLENBQUMsR0FBR1csS0FBSyxDQUFDWCx5QkFBeUI7TUFBRSxDQUFDLENBQUMsQ0FBQztNQUNuSSxNQUFNeU4sZUFBZSxHQUFHbEMsU0FBUyxDQUFDeEksTUFBTSxDQUFFcEMsS0FBSyxJQUFLO1FBQ25ELElBQUksSUFBSSxDQUFDd0ssY0FBYyxDQUFDeEssS0FBSyxDQUFDYixHQUFHLENBQUMsRUFBRTtVQUNuQyxPQUFPLElBQUk7UUFDWjtNQUNELENBQUMsQ0FBQztNQUNGLE9BQU8yTixlQUFlLENBQUN6RyxHQUFHLENBQUVyRyxLQUFLLEtBQU07UUFBRSxHQUFHQSxLQUFLO1FBQUVYLHlCQUF5QixFQUFFO01BQUcsQ0FBQyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUFBdEMsTUFBQSxDQUVEK0MscUNBQXFDLEdBQXJDLFNBQUFBLHFDQUFxQ0EsQ0FBQSxFQUFzQjtNQUMxRCxPQUFPLElBQUksQ0FBQzVCLEtBQUssQ0FBQ0wsTUFBTSxDQUFDdUUsTUFBTSxDQUFFcEMsS0FBSyxJQUFLO1FBQzFDLE1BQU13SyxjQUFjLEdBQUcsSUFBSSxDQUFDQSxjQUFjLENBQUN4SyxLQUFLLENBQUNiLEdBQUcsQ0FBQztRQUNyRCxJQUFJcUwsY0FBYyxFQUFFO1VBQ25CLE9BQU94SyxLQUFLLENBQUNYLHlCQUF5QixDQUFDakIsTUFBTSxLQUFLLENBQUM7UUFDcEQ7TUFDRCxDQUFDLENBQUM7SUFDSCxDQUFDO0lBQUFyQixNQUFBLENBRURnRCx3QkFBd0IsR0FBeEIsU0FBQUEsd0JBQXdCQSxDQUFDbEMsTUFBeUIsRUFBaUM7TUFDbEYsTUFBTWtQLFlBQVksR0FBR2xQLE1BQU0sQ0FBQ3dJLEdBQUcsQ0FBRXJHLEtBQUssSUFBS0EsS0FBSyxDQUFDYixHQUFHLENBQUM7TUFDckQsT0FBTyxJQUFJLENBQUNvQixTQUFTLENBQUM5QyxPQUFPLEVBQUUrQyxTQUFTLENBQUMsQ0FBQyxDQUFDNEIsTUFBTSxDQUFFcEMsS0FBSyxJQUFLK00sWUFBWSxDQUFDbkcsUUFBUSxDQUFDNUcsS0FBSyxDQUFDZ04sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBR3BHLENBQUM7SUFBQWpVLHNCQUFBLENBRU1rVSxNQUFNLEdBQWIsU0FBT0EsTUFBTUEsQ0FBQ0MsRUFBaUIsRUFBRUMsT0FBK0IsRUFBUTtNQUN2RSxPQUFPQyxHQUFHLENBQUNDLHdCQUF3QixDQUFDSCxFQUFFLEVBQUVDLE9BQU8sRUFBRSxNQUFNO1FBQ3RELE9BQU94SSxJQUFBO1VBQU0rRCxHQUFHLEVBQUV5RSxPQUFRO1VBQUE5SCxRQUFBLEVBQUU4SCxPQUFPLENBQUNHLGNBQWMsQ0FBQyxTQUFTO1FBQUMsQ0FBTyxDQUFDO01BQ3RFLENBQUMsQ0FBQztJQUNILENBQUM7SUFBQSxPQUFBdlUsc0JBQUE7RUFBQSxFQTkwQmtEd1UsT0FBTyxHQUFBdFMsV0FBQSxHQUFBdVMseUJBQUEsQ0FBQTlTLE9BQUEsQ0FBQXNDLFNBQUEsa0JBQUE5RCxLQUFBO0lBQUF1VSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTFTLFlBQUEsR0FBQXNTLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLFlBQUEzRCxLQUFBO0lBQUFvVSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXpTLFlBQUEsR0FBQXFTLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLG9CQUFBMUQsS0FBQTtJQUFBbVUsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUF4UyxZQUFBLEdBQUFvUyx5QkFBQSxDQUFBOVMsT0FBQSxDQUFBc0MsU0FBQSx3QkFBQXpELEtBQUE7SUFBQWtVLFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBdlMsWUFBQSxHQUFBbVMseUJBQUEsQ0FBQTlTLE9BQUEsQ0FBQXNDLFNBQUEsd0JBQUF4RCxLQUFBO0lBQUFpVSxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQXRTLFlBQUEsR0FBQWtTLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLGtCQUFBdkQsS0FBQTtJQUFBZ1UsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFyUyxZQUFBLEdBQUFpUyx5QkFBQSxDQUFBOVMsT0FBQSxDQUFBc0MsU0FBQSxzQkFBQXRELEtBQUE7SUFBQStULFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBcFMsWUFBQSxHQUFBZ1MseUJBQUEsQ0FBQTlTLE9BQUEsQ0FBQXNDLFNBQUEsZ0JBQUFwRCxLQUFBO0lBQUE2VCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQW5TLFlBQUEsR0FBQStSLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLGNBQUFuRCxNQUFBO0lBQUE0VCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWxTLGFBQUEsR0FBQThSLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLGVBQUFqRCxNQUFBO0lBQUEwVCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQWpTLGFBQUEsR0FBQTZSLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLG9CQUFBaEQsTUFBQTtJQUFBeVQsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUFoUyxhQUFBLEdBQUE0Uix5QkFBQSxDQUFBOVMsT0FBQSxDQUFBc0MsU0FBQSxtQkFBQTlDLE1BQUE7SUFBQXVULFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBL1IsYUFBQSxHQUFBMlIseUJBQUEsQ0FBQTlTLE9BQUEsQ0FBQXNDLFNBQUEsb0JBQUE3QyxNQUFBO0lBQUFzVCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTlSLGFBQUEsR0FBQTBSLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLG1CQUFBNUMsTUFBQTtJQUFBcVQsWUFBQTtJQUFBQyxVQUFBO0lBQUFDLFFBQUE7SUFBQUMsV0FBQTtFQUFBLElBQUE3UixhQUFBLEdBQUF5Uix5QkFBQSxDQUFBOVMsT0FBQSxDQUFBc0MsU0FBQSw0QkFBQTNDLE1BQUE7SUFBQW9ULFlBQUE7SUFBQUMsVUFBQTtJQUFBQyxRQUFBO0lBQUFDLFdBQUE7RUFBQSxJQUFBNVIsYUFBQSxHQUFBd1IseUJBQUEsQ0FBQTlTLE9BQUEsQ0FBQXNDLFNBQUEsMkJBQUExQyxNQUFBO0lBQUFtVCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBO0VBQUEsSUFBQTNSLGFBQUEsR0FBQXVSLHlCQUFBLENBQUE5UyxPQUFBLENBQUFzQyxTQUFBLFlBQUF6QyxNQUFBO0lBQUFrVCxZQUFBO0lBQUFDLFVBQUE7SUFBQUMsUUFBQTtJQUFBQyxXQUFBLFdBQUFBLENBQUE7TUFBQSxPQWdFckQ7UUFDSnpQLFVBQVUsRUFBRSxLQUFLO1FBQ2pCTixNQUFNLEVBQUUsRUFBdUI7UUFDL0IrQyxpQkFBaUIsRUFBRSxJQUFJO1FBQ3ZCMEQsMkJBQTJCLEVBQUUsS0FBSztRQUNsQ0YsMkJBQTJCLEVBQUUsRUFBRTtRQUMvQkksZ0JBQWdCLEVBQUUsRUFBRTtRQUNwQkQsZ0JBQWdCLEVBQUUsS0FBSztRQUN2QnhDLGdCQUFnQixFQUFFQyxXQUFXLENBQUM5QixLQUFLO1FBQ25DNkQsa0JBQWtCLEVBQUUsSUFBSTtRQUN4QkUsb0JBQW9CLEVBQUUsS0FBSztRQUMzQkQsc0JBQXNCLEVBQUU7TUFDekIsQ0FBQztJQUFBO0VBQUEsSUFBQXRKLE9BQUEsTUFBQUQsTUFBQTtFQUFBb0MsUUFBQSxHQUFBOUQsc0JBQUE7RUFBQSxPQUFBOEQsUUFBQTtBQUFBIiwiaWdub3JlTGlzdCI6W119