@phenixrts/sdk 2024.2.6-beta.362 → 2024.2.6-beta.363

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 (37) hide show
  1. package/channels/debug/channels.js +31 -86
  2. package/channels/debug/package.json +1 -1
  3. package/channels/debug.private/channels.js +31 -86
  4. package/channels/debug.private/package.json +1 -1
  5. package/channels/es5.debug.private/channels.js +28 -82
  6. package/channels/es5.debug.private/package.json +1 -1
  7. package/channels/min/channels.js +1 -1
  8. package/channels/min/channels.js.map +1 -1
  9. package/channels/min/package.json +1 -1
  10. package/channels/min.private/channels.js +1 -1
  11. package/channels/min.private/channels.js.map +1 -1
  12. package/channels/min.private/package.json +1 -1
  13. package/channels/package.json +1 -1
  14. package/full/debug/full.js +31 -86
  15. package/full/debug/package.json +1 -1
  16. package/full/debug.private/full.js +31 -86
  17. package/full/debug.private/package.json +1 -1
  18. package/full/min/full.js +1 -1
  19. package/full/min/full.js.map +1 -1
  20. package/full/min/package.json +1 -1
  21. package/full/min.private/full.js +1 -1
  22. package/full/min.private/full.js.map +1 -1
  23. package/full/min.private/package.json +1 -1
  24. package/full/package.json +1 -1
  25. package/package.json +1 -1
  26. package/publish/debug/package.json +1 -1
  27. package/publish/debug/publish.js +31 -86
  28. package/publish/debug.private/package.json +1 -1
  29. package/publish/debug.private/publish.js +31 -86
  30. package/publish/min/package.json +1 -1
  31. package/publish/min/publish.js +1 -1
  32. package/publish/min/publish.js.map +1 -1
  33. package/publish/min.private/package.json +1 -1
  34. package/publish/min.private/publish.js +1 -1
  35. package/publish/min.private/publish.js.map +1 -1
  36. package/publish/package.json +1 -1
  37. package/types/dom/ApplicationActivityMonitor.d.ts +2 -5
@@ -21,20 +21,17 @@ return /******/ (() => { // webpackBootstrap
21
21
  /* harmony export */ __webpack_require__.d(__webpack_exports__, {
22
22
  /* harmony export */ "default": () => (/* binding */ ApplicationActivityMonitor)
23
23
  /* harmony export */ });
24
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/typeof.js */ "./node_modules/@babel/runtime/helpers/typeof.js");
25
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0__);
26
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
27
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1__);
28
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
29
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2__);
30
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
31
- /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3__);
32
- /* harmony import */ var _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../globalScope/GlobalScope */ "./src/globalScope/GlobalScope.ts");
33
- /* harmony import */ var _lang_Disposable__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lang/Disposable */ "./src/lang/Disposable.ts");
34
- /* harmony import */ var _lang_DisposableList__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../lang/DisposableList */ "./src/lang/DisposableList.ts");
35
- /* harmony import */ var _rx_Subject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../rx/Subject */ "./src/rx/Subject.ts");
36
- /* harmony import */ var _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../rx/ReadOnlySubject */ "./src/rx/ReadOnlySubject.ts");
37
-
24
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/classCallCheck.js */ "./node_modules/@babel/runtime/helpers/classCallCheck.js");
25
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0__);
26
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/createClass.js */ "./node_modules/@babel/runtime/helpers/createClass.js");
27
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1__);
28
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./node_modules/@babel/runtime/helpers/defineProperty.js */ "./node_modules/@babel/runtime/helpers/defineProperty.js");
29
+ /* harmony import */ var _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2__);
30
+ /* harmony import */ var _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../globalScope/GlobalScope */ "./src/globalScope/GlobalScope.ts");
31
+ /* harmony import */ var _lang_Disposable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../lang/Disposable */ "./src/lang/Disposable.ts");
32
+ /* harmony import */ var _lang_DisposableList__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../lang/DisposableList */ "./src/lang/DisposableList.ts");
33
+ /* harmony import */ var _rx_Subject__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../rx/Subject */ "./src/rx/Subject.ts");
34
+ /* harmony import */ var _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../rx/ReadOnlySubject */ "./src/rx/ReadOnlySubject.ts");
38
35
 
39
36
 
40
37
 
@@ -46,20 +43,19 @@ return /******/ (() => { // webpackBootstrap
46
43
 
47
44
 
48
45
 
49
- var defaultDocumentFocusIntervalTimeout = 3000;
46
+ var visibilityChangeEvent = 'visibilitychange';
50
47
  var ApplicationActivityMonitor = /*#__PURE__*/function () {
51
48
  function ApplicationActivityMonitor() {
52
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_1___default()(this, ApplicationActivityMonitor);
53
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_disposables", new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_6__["default"]());
54
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_readOnlyIsForeground", void 0);
55
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_isForeground", void 0);
56
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_timeOfLastTabFocusChange", Date.now());
57
- _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_3___default()(this, "_documentFocusInterval", void 0);
58
- this._isForeground = new _rx_Subject__WEBPACK_IMPORTED_MODULE_7__["default"](true);
59
- this._readOnlyIsForeground = new _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_8__["default"](this._isForeground);
60
- this.detectTabFocusChange();
49
+ _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_classCallCheck_js__WEBPACK_IMPORTED_MODULE_0___default()(this, ApplicationActivityMonitor);
50
+ _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "_disposables", new _lang_DisposableList__WEBPACK_IMPORTED_MODULE_5__["default"]());
51
+ _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "_readOnlyIsForeground", void 0);
52
+ _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "_isForeground", void 0);
53
+ _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_defineProperty_js__WEBPACK_IMPORTED_MODULE_2___default()(this, "_timeOfLastTabFocusChange", Date.now());
54
+ this._isForeground = new _rx_Subject__WEBPACK_IMPORTED_MODULE_6__["default"](true);
55
+ this._readOnlyIsForeground = new _rx_ReadOnlySubject__WEBPACK_IMPORTED_MODULE_7__["default"](this._isForeground);
56
+ this.initialize();
61
57
  }
62
- return _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_2___default()(ApplicationActivityMonitor, [{
58
+ return _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_createClass_js__WEBPACK_IMPORTED_MODULE_1___default()(ApplicationActivityMonitor, [{
63
59
  key: "isForeground",
64
60
  get: function get() {
65
61
  return this._readOnlyIsForeground;
@@ -75,69 +71,18 @@ var ApplicationActivityMonitor = /*#__PURE__*/function () {
75
71
  this._disposables.dispose();
76
72
  }
77
73
  }, {
78
- key: "detectTabFocusChange",
79
- value: function detectTabFocusChange() {
74
+ key: "initialize",
75
+ value: function initialize() {
80
76
  var _this = this;
81
- var hidden;
82
- var visibilityChange;
83
- if ((typeof document === "undefined" ? "undefined" : _Users_teamcity_buildAgent_work_54543f04b253d0cc_node_modules_babel_runtime_helpers_typeof_js__WEBPACK_IMPORTED_MODULE_0___default()(document)) !== 'object') {
84
- return;
85
- }
86
-
87
- // Due to typescript not having a definition for 'msHidden' or 'webkitHidden' types
88
- // Required to @ts-ignore to prevent typescript errors
89
- /* eslint-disable @typescript-eslint/ban-ts-comment */
90
- // @ts-ignore
91
- if (typeof document.msHidden !== 'undefined') {
92
- hidden = 'msHidden';
93
- visibilityChange = 'msvisibilitychange';
94
- // @ts-ignore
95
- } else if (typeof document.webkitHidden !== 'undefined') {
96
- hidden = 'webkitHidden';
97
- visibilityChange = 'webkitvisibilitychange';
98
- } else if (typeof document.hidden !== 'undefined') {
99
- // Opera 12.10 and Firefox 18 and later support
100
- hidden = 'hidden';
101
- visibilityChange = 'visibilitychange';
102
- }
103
- /* eslint-enable @typescript-eslint/ban-ts-comment */
104
-
105
77
  var handleVisibilityChange = function handleVisibilityChange() {
106
- var isForeground = !document[hidden];
107
- _this.setFocusState(isForeground);
78
+ return _this._isForeground.value = !_globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_3__["default"].documentIsHidden;
108
79
  };
109
- if (typeof document.addEventListener !== 'undefined' && typeof document[hidden] !== 'undefined') {
110
- document.addEventListener(visibilityChange, handleVisibilityChange, false);
111
- this._disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_5__["default"](function () {
112
- document.removeEventListener(visibilityChange, handleVisibilityChange, false);
113
- }));
114
- } else {
115
- this.listenForDocumentFocus.call(this);
116
- }
117
- }
118
- }, {
119
- key: "listenForDocumentFocus",
120
- value: function listenForDocumentFocus() {
121
- var _this2 = this;
122
- this._documentFocusInterval = _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_4__["default"].setInterval(function () {
123
- var isForeground = document.hasFocus();
124
- _this2.setFocusState(isForeground);
125
- }, defaultDocumentFocusIntervalTimeout);
126
- this._disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_5__["default"](function () {
127
- if (_this2._documentFocusInterval) {
128
- _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_4__["default"].clearInterval(_this2._documentFocusInterval);
129
- }
130
- _this2._documentFocusInterval = null;
80
+ var useEventCapturePhase = false;
81
+ _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_3__["default"].addDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase);
82
+ this._disposables.add(new _lang_Disposable__WEBPACK_IMPORTED_MODULE_4__["default"](function () {
83
+ return _globalScope_GlobalScope__WEBPACK_IMPORTED_MODULE_3__["default"].removeDocumentEventListener(visibilityChangeEvent, handleVisibilityChange, useEventCapturePhase);
131
84
  }));
132
85
  }
133
- }, {
134
- key: "setFocusState",
135
- value: function setFocusState(isForeground) {
136
- if (this._isForeground === isForeground) {
137
- return;
138
- }
139
- this._isForeground.value = isForeground;
140
- }
141
86
  }]);
142
87
  }();
143
88
 
@@ -1120,7 +1065,7 @@ var GlobalScope = /*#__PURE__*/function () {
1120
1065
  }, {
1121
1066
  key: "documentIsHidden",
1122
1067
  get: function get() {
1123
- return this._document.hidden;
1068
+ return !!this._document.hidden;
1124
1069
  }
1125
1070
  }, {
1126
1071
  key: "documentQuerySelector",
@@ -9626,7 +9571,7 @@ var VersionManager = /*#__PURE__*/function () {
9626
9571
  key: "sdkVersion",
9627
9572
  get: function get() {
9628
9573
  try {
9629
- return "2024-12-05T16:44:24.121Z (2024.2.6-beta.362)";
9574
+ return "2024-12-05T20:53:01.143Z (2024.2.6-beta.363)";
9630
9575
  } catch (e) {
9631
9576
  return this._defaultVersion;
9632
9577
  }
@@ -11376,4 +11321,4 @@ __webpack_require__.r(__webpack_exports__);
11376
11321
  /******/ })()
11377
11322
  ;
11378
11323
  });
11379
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUFDLENBQUM7QUFBQTd5Qyw0SUFBQSxDQUx2Umd1Qyx5QkFBeUIsa0NBTVc7RUFDckQwRCxJQUFJLEVBQUUsSUFBSW1CLFVBQVUsQ0FBQyxDQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNwQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDeEssSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQzVEO0VBQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDeExsQixHQUFHLEVBQUUsSUFBSWtCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pTakIsR0FBRyxFQUFFLElBQUlpQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUks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QUNBOzs7OztXQ1BBO1dBQ0E7V0FDQTtXQUNBO1dBQ0EseUNBQXlDLHdDQUF3QztXQUNqRjtXQUNBO1dBQ0E7Ozs7O1dDUEE7V0FDQTtXQUNBO1dBQ0E7V0FDQTs7Ozs7V0NKQTs7Ozs7V0NBQTtXQUNBO1dBQ0E7V0FDQSx1REFBdUQsaUJBQWlCO1dBQ3hFO1dBQ0EsZ0RBQWdELGFBQWE7V0FDN0Q7Ozs7O1dDTkE7Ozs7O1dDQUE7O1dBRUE7V0FDQTtXQUNBO1dBQ0E7V0FDQTtXQUNBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOztXQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JCQTtBQUNBO0FBQ0E7O0FBRXlCO0FBQ1M7QUFDUTtBQUs1QjtBQUdkLCtEQUFlO0VBQ2J0dUMsR0FBRyxFQUFIQSw0Q0FBRztFQUNINndCLFFBQVEsRUFBUkEsaURBQVE7RUFDUnBNLFlBQVksRUFBWkEscURBQVlBO0FBQ2QsQ0FBQyxFIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svdW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbiIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQnJvd3NlckRldGVjdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vTmV0d29ya01vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9TdHJlYW1TZXR1cExpc3RlbmVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZVRva2VuLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvUGFyYW1ldGVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9EaXNwb3NhYmxlTGlzdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9OdW1iZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL1N0cmluZ3MudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9BcHBlbmRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Db25zb2xlQXBwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dlckZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ1RocmVzaG9sZC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL01ldHJpY3NUeXBlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9wcm9taXNlL1Byb21pc2VIYW5kbGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1NkcFBhcnNlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1ZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1JlYWRPbmx5U3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcngvU3ViamVjdC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL0Vudmlyb25tZW50LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvU0RLLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvVGVsZW1ldHJ5VXJsLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY2hhbm5lbHMvQ2hhbm5lbC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWxzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9DaGFubmVsQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdGF0ZUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1Rva2VuQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2RlZmF1bHRzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0JpdHJhdGVNb2RlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlU3RhdGVNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9FbmRQb2ludC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbWluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9IbHNQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvTmV0d29ya1N0YXRlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9SZWFsVGltZVN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TaGFrYVBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9TdHJlYW1GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL1dlYlBsYXllci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vSW5zZXJ0YWJsZVN0cmVhbXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlTZXJ2aWNlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0R1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90aW1lL0V4cG9uZW50aWFsQmFja29mZi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vRGltZW5zaW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9TZXNzaW9uVGVsZW1ldHJ5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy92aWRlby9WaWRlb1RlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheUxpa2VUb0FycmF5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2FycmF5V2l0aG91dEhvbGVzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3luY1RvR2VuZXJhdG9yLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NsYXNzQ2FsbENoZWNrLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2NyZWF0ZUNsYXNzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2RlZmluZVByb3BlcnR5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2dldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2luaGVyaXRzLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2l0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXlMaW1pdC5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9ub25JdGVyYWJsZVJlc3QuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVTcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcG9zc2libGVDb25zdHJ1Y3RvclJldHVybi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9yZWdlbmVyYXRvclJ1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2V0UHJvdG90eXBlT2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvc2xpY2VkVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b0NvbnN1bWFibGVBcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1ByaW1pdGl2ZS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90b1Byb3BlcnR5S2V5LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3R5cGVvZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvcmVnZW5lcmF0b3IvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcInBoZW5peFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG59KShzZWxmLCAoKSA9PiB7XG5yZXR1cm4gIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IFJlYWRPbmx5U3ViamVjdCBmcm9tICcuLi9yeC9SZWFkT25seVN1YmplY3QnO1xuXG5jb25zdCBkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCA9IDMwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5SXNGb3JlZ3JvdW5kOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzRm9yZWdyb3VuZDogU3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSBfdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuICBwcml2YXRlIF9kb2N1bWVudEZvY3VzSW50ZXJ2YWw6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmRldGVjdFRhYkZvY3VzQ2hhbmdlKCk7XG4gIH1cblxuICBnZXQgaXNGb3JlZ3JvdW5kKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5SXNGb3JlZ3JvdW5kO1xuICB9XG5cbiAgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGRldGVjdFRhYkZvY3VzQ2hhbmdlKCk6IHZvaWQge1xuICAgIGxldCBoaWRkZW47XG4gICAgbGV0IHZpc2liaWxpdHlDaGFuZ2U7XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIER1ZSB0byB0eXBlc2NyaXB0IG5vdCBoYXZpbmcgYSBkZWZpbml0aW9uIGZvciAnbXNIaWRkZW4nIG9yICd3ZWJraXRIaWRkZW4nIHR5cGVzXG4gICAgLy8gUmVxdWlyZWQgdG8gQHRzLWlnbm9yZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0eXBlb2YgZG9jdW1lbnQubXNIaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBoaWRkZW4gPSAnbXNIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICdtc3Zpc2liaWxpdHljaGFuZ2UnO1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRvY3VtZW50LndlYmtpdEhpZGRlbiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGhpZGRlbiA9ICd3ZWJraXRIaWRkZW4nO1xuICAgICAgdmlzaWJpbGl0eUNoYW5nZSA9ICd3ZWJraXR2aXNpYmlsaXR5Y2hhbmdlJztcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBkb2N1bWVudC5oaWRkZW4gIT09ICd1bmRlZmluZWQnKSB7IC8vIE9wZXJhIDEyLjEwIGFuZCBGaXJlZm94IDE4IGFuZCBsYXRlciBzdXBwb3J0XG4gICAgICBoaWRkZW4gPSAnaGlkZGVuJztcbiAgICAgIHZpc2liaWxpdHlDaGFuZ2UgPSAndmlzaWJpbGl0eWNoYW5nZSc7XG4gICAgfVxuICAgIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50ICovXG5cbiAgICBjb25zdCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlID0gKCk6IHZvaWQgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gIWRvY3VtZW50W2hpZGRlbl07XG5cbiAgICAgIHRoaXMuc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpO1xuICAgIH07XG5cbiAgICBpZiAodHlwZW9mIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudFtoaWRkZW5dICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlLCBoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlLCBmYWxzZSk7XG5cbiAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodmlzaWJpbGl0eUNoYW5nZSwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgZmFsc2UpO1xuICAgICAgfSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxpc3RlbkZvckRvY3VtZW50Rm9jdXMuY2FsbCh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGxpc3RlbkZvckRvY3VtZW50Rm9jdXMoKTogdm9pZCB7XG4gICAgdGhpcy5fZG9jdW1lbnRGb2N1c0ludGVydmFsID0gR2xvYmFsU2NvcGUuc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgY29uc3QgaXNGb3JlZ3JvdW5kID0gZG9jdW1lbnQuaGFzRm9jdXMoKTtcblxuICAgICAgdGhpcy5zZXRGb2N1c1N0YXRlKGlzRm9yZWdyb3VuZCk7XG4gICAgfSwgZGVmYXVsdERvY3VtZW50Rm9jdXNJbnRlcnZhbFRpbWVvdXQpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpIHtcbiAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJJbnRlcnZhbCh0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9kb2N1bWVudEZvY3VzSW50ZXJ2YWwgPSBudWxsO1xuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Rm9jdXNTdGF0ZShpc0ZvcmVncm91bmQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNGb3JlZ3JvdW5kID09PSBpc0ZvcmVncm91bmQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSBpc0ZvcmVncm91bmQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJyb3dzZXJEZXRlY3RvciB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCA9IC8oTVNJRXwoPyFHZWNrby4rKUZpcmVmb3h8KD8hQXBwbGVXZWJLaXQuK0Nocm9tZS4rKVNhZmFyaXwoPyFBcHBsZVdlYktpdC4rKUNocm9tZXxBcHBsZVdlYktpdCg/IS4rQ2hyb21lfC4rU2FmYXJpKXxHZWNrbyg/IS4rRmlyZWZveCkpKD86IHxcXC8pKFtcXGQuYXByZV0rKS9nO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTmFtZSA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lKCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9icm93c2VyTWFqb3JWZXJzaW9uID0gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbigpO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc01vYmlsZSA9ICgvQW5kcm9pZHxpUGhvbmV8aVBhZHxpUG9kfEJsYWNrQmVycnl8T3BlcmEgTWluaS9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQW5kcm9pZCA9ICgvQW5kcm9pZC9pKS50ZXN0KG5hdmlnYXRvcj8udXNlckFnZW50KTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU2OSA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNjkuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcwID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzEgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcxLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzIuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NC4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzUgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc1LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NiA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzYuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc3ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83Ny4nKTtcblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck5hbWU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fYnJvd3Nlck1ham9yVmVyc2lvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNBbmRyb2lkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQW5kcm9pZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU2OSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTY5O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzEoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcyO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc0KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc2O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzc7XG4gIH1cblxuICBzdGF0aWMgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNNb2JpbGU7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVBbmRWZXJzaW9uID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaChCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4KTtcblxuICAgIGlmIChicm93c2VyTmFtZUFuZFZlcnNpb24gJiYgYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdKSB7XG4gICAgICByZXR1cm4gYnJvd3Nlck5hbWVBbmRWZXJzaW9uWzBdO1xuICAgIH1cblxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZSgpOiBzdHJpbmcge1xuICAgIGlmICghQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyTmFtZUxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyTmFtZUxpc3QgfHwgIWJyb3dzZXJOYW1lTGlzdFswXSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIHJldHVybiBicm93c2VyTmFtZUxpc3RbMF07XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTogbnVtYmVyIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICBjb25zdCBicm93c2VyVmVyc2lvbkxpc3QgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5zcGxpdCgnLycpO1xuXG4gICAgaWYgKCFicm93c2VyVmVyc2lvbkxpc3QgfHwgIWJyb3dzZXJWZXJzaW9uTGlzdFsxXSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbFZlcnNpb24gPSBicm93c2VyVmVyc2lvbkxpc3RbMV07XG5cbiAgICBpZiAoIWZ1bGxWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG5cbiAgICByZXR1cm4gTnVtYmVyKGZ1bGxWZXJzaW9uLnNwbGl0KCcuJylbMF0pIHx8IDA7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFKCk6IHN0cmluZyB7XG4gICAgaWYgKCFuYXZpZ2F0b3IgfHwgIW5hdmlnYXRvci51c2VyQWdlbnQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB1c2VyQWdlbnQgPSBuYXZpZ2F0b3IudXNlckFnZW50O1xuICAgIGNvbnN0IG1zaWUgPSB1c2VyQWdlbnQuaW5kZXhPZignTVNJRSAnKTtcblxuICAgIGlmIChtc2llID4gMCkge1xuICAgICAgLy8gSUUgMTAgb3Igb2xkZXIgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyhtc2llICsgNSwgdXNlckFnZW50LmluZGV4T2YoJy4nLCBtc2llKSksIDEwKX1gO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWRlbnQgPSB1c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudC8nKTtcblxuICAgIGlmICh0cmlkZW50ID4gMCkge1xuICAgICAgLy8gSUUgMTEgPT4gcmV0dXJuIHZlcnNpb24gbnVtYmVyXG4gICAgICBjb25zdCB2ZXJzaW9uID0gdXNlckFnZW50LmluZGV4T2YoJ3J2OicpO1xuXG4gICAgICByZXR1cm4gYElFLyR7cGFyc2VJbnQodXNlckFnZW50LnN1YnN0cmluZyh2ZXJzaW9uICsgMywgdXNlckFnZW50LmluZGV4T2YoJy4nLCB2ZXJzaW9uKSksIDEwKX1gO1xuICAgIH1cblxuICAgIHJldHVybiAnJztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBMb2dnZXJEZWZhdWx0cyBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IExvZ2dpbmdMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dpbmdMZXZlbE1hcHBpbmcnO1xuaW1wb3J0IFRlbGVtZXRyeURlZmF1bHQgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cnlEZWZhdWx0JztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciB7XG4gIGdldFN0cmluZ1ZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKSB8fFxuICAgICAgdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApIHx8XG4gICAgICB0aGlzLmRlZmF1bHRTdHJpbmdWYWx1ZVtuYW1lXTtcbiAgfVxuXG4gIGdldEJvb2xlYW5WYWx1ZShuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZShuYW1lKTtcblxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlID09PSAndHJ1ZScgfHwgdmFsdWUgPT09ICcxJyB8fCB2YWx1ZSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZUZyb21VcmkgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUoYCR7bmFtZX0tdXJpLXBhcmFtZXRlci1uYW1lYCk7XG5cbiAgICBpZiAodmFsdWVGcm9tVXJpKSB7XG4gICAgICByZXR1cm4gdmFsdWVGcm9tVXJpID09PSAndHJ1ZScgfHwgdmFsdWVGcm9tVXJpID09PSAnMScgfHwgdmFsdWVGcm9tVXJpID09PSAnT24nO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlZmF1bHRCb29sZWFuVmFsdWVbbmFtZV0gPT09IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0U3RyaW5nVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtbWV0cmljcy1sZXZlbCc6IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbCksXG4gICAgICAncGhlbml4LWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LWNvbnNvbGUtbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCksXG4gICAgICAncGhlbml4LXRlbGVtZXRyeS1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRUZWxlbWV0cnlMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jaGFubmVsLXRva2VuJzogJycsXG4gICAgICAncGhlbml4LXVyaSc6ICcnLFxuICAgICAgJ3BoZW5peC1iYXNlLXVyaSc6ICcnXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGRlZmF1bHRCb29sZWFuVmFsdWUoKTogeyBbbmFtZTogc3RyaW5nXTogYm9vbGVhbiB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJldHJ5LW9uLWZhaWx1cmUnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nOiB0cnVlLFxuICAgICAgJ3BoZW5peC1mb3JjZS1nYXJiYWdlLWNvbGxlY3Rpb24tb24tcmVzdGFydCc6IHRydWUsXG4gICAgICAncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJzogdHJ1ZVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBtZXRhVmFsdWUgPSBHbG9iYWxTY29wZS5kb2N1bWVudFF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0nJHtuYW1lfSddYCk7XG5cbiAgICBpZiAoIW1ldGFWYWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbWV0YVZhbHVlLmdldEF0dHJpYnV0ZSgndmFsdWUnKTtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICBwcml2YXRlIHJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCB2YWx1ZVVSSVBhcmFtZXRlck5hbWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAoIXZhbHVlVVJJUGFyYW1ldGVyTmFtZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gbmV3IEdsb2JhbFNjb3BlLlVSTFNlYXJjaFBhcmFtcyhHbG9iYWxTY29wZS5sb2NhdGlvblNlYXJjaCkuZ2V0KHZhbHVlVVJJUGFyYW1ldGVyTmFtZSkgfHwgdW5kZWZpbmVkO1xuXG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIHtcbiAgc3RhdGljIGZvcmNlR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5mb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNRdWV1ZU1pY3JvdGFza1N1cHBvcnRlZCkge1xuICAgICAgR2xvYmFsU2NvcGUucXVldWVNaWNyb3Rhc2sodGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24uYmluZCh0aGlzKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQodGhpcy5vdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24uYmluZCh0aGlzKSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgb3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGxldCBpbWc6IEhUTUxJbWFnZUVsZW1lbnQgfCBudWxsID0gR2xvYmFsU2NvcGUuZG9jdW1lbnRDcmVhdGVFbGVtZW50PEhUTUxJbWFnZUVsZW1lbnQ+KCdpbWcnKTtcblxuICAgIGltZy5zcmMgPSBHbG9iYWxTY29wZS5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtuZXcgQXJyYXlCdWZmZXIoMTBlKzcpXSkpOyAvLyAxMDBNYiBvciBsZXNzIG9yIG1vcmUgZGVwZW5kaW5nIG9uIGFzIHlvdSB3aXNoIHRvIGZvcmNlL2ludm9rZSBHQyBjeWNsZSBydW5cbiAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkge1xuICAgICAgR2xvYmFsU2NvcGUuVVJMLnJldm9rZU9iamVjdFVSTCh0aGlzLnNyYyk7XG5cbiAgICAgIGltZyA9IG51bGw7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5ldHdvcmtNb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfaXNTdXBwb3J0ZWQ6IGJvb2xlYW4gPSBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uICE9PSB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3J0dDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZWZmZWN0aXZlVHlwZTogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QodW5kZWZpbmVkKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCF0aGlzLmlzU3VwcG9ydGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcbiAgfVxuXG4gIGdldCBpc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNTdXBwb3J0ZWQ7XG4gIH1cblxuICBnZXQgcnR0KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0dDtcbiAgfVxuXG4gIGdldCBlZmZlY3RpdmVUeXBlKCk6IFN1YmplY3Q8c3RyaW5nPiB7XG4gICAgcmV0dXJuIHRoaXMuX2VmZmVjdGl2ZVR5cGU7XG4gIH1cblxuICBnZXQgZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogU3ViamVjdDxudW1iZXI+IHtcbiAgICByZXR1cm4gdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmsgPz8gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZG93bmxpbmtNYXggPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIGdldEVmZmVjdGl2ZVR5cGUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uZWZmZWN0aXZlVHlwZSA/PyBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy50eXBlID8/ICdVbmtub3duJztcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Um91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5ydHQgPz8gLTE7XG4gIH1cblxuICBwcml2YXRlIHNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBjb25zdCBsaXN0ZW5lciA9ICgpOiB2b2lkID0+IHRoaXMudXBkYXRlU3RhdGlzdGljcygpO1xuXG4gICAgR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgbGlzdGVuZXIpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKSkpO1xuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVTdGF0aXN0aWNzKCk6IHZvaWQge1xuICAgIHRoaXMuX3J0dC52YWx1ZSA9IHRoaXMuZ2V0Um91bmRUcmlwVGltZSgpO1xuICAgIHRoaXMuX2VmZmVjdGl2ZVR5cGUudmFsdWUgPSB0aGlzLmdldEVmZmVjdGl2ZVR5cGUoKTtcbiAgICB0aGlzLl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eS52YWx1ZSA9IHRoaXMuZ2V0RG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkoKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IE1ldHJpY1R5cGUgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcblxuZXhwb3J0IGNsYXNzIFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU3RyZWFtU2V0dXBMaXN0ZW5lcicpO1xuICBwcml2YXRlIHJlYWRvbmx5IG1ldHJpY3NTZXJ2aWNlID0gU0RLLm1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9wYWdlTG9hZFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX21ldHJpY1N1Ym1pdHRlZCA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyKSB7XG4gICAgdGhpcy5fc3RhcnRUaW1lID0gRGF0ZS5ub3coKTtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gIH1cblxuICBzdWNjZXNzKHN0cmVhbUlkKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBDb21wbGV0ZWQsIHN0cmVhbUlkKTtcbiAgfVxuXG4gIGZhaWwoKTogdm9pZCB7XG4gICAgdGhpcy5yZWNvcmRTdHJlYW1NZXRyaWMoTWV0cmljc1R5cGUuU2V0dXBGYWlsZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWNvcmRTdHJlYW1NZXRyaWMobWV0cmljVHlwZTogTWV0cmljc1R5cGUsIHN0cmVhbUlkPzogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX21ldHJpY1N1Ym1pdHRlZCkge1xuICAgICAgcmV0dXJuIDtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNTdWJtaXR0ZWQgPSB0cnVlO1xuXG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXR1cFRpbWUgPSBub3cgLSB0aGlzLl9zdGFydFRpbWU7XG4gICAgY29uc3QgbWV0cmljTmFtZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpY1R5cGUpLmdldE5hbWUoKTtcblxuICAgIHRoaXMubWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlLFxuICAgICAgcnVudGltZTogKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHt1aW50NjQ6IHNldHVwVGltZX0sXG4gICAgICBzdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFN0cmVhbSBtZXRyaWMgWyVzXSBpbiBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgc3RyZWFtSWQsXG4gICAgICBtZXRyaWNOYW1lLFxuICAgICAgbmV3IER1cmF0aW9ucyhzZXR1cFRpbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IEVkZ2VUb2tlbiBmcm9tICcuL0VkZ2VUb2tlbic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4vRW5jb2RlZEVkZ2VUb2tlbic7XG5cbmNvbnN0IGVkZ2VBdXRoVG9rZW5QcmVmaXggPSAnRElHRVNUOic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VBdXRoUGFyc2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdFZGdlQXV0aFBhcnNlcicpO1xuXG4gIHN0YXRpYyBwYXJzZVRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogRWRnZVRva2VuIHtcbiAgICBpZiAoIXRoaXMuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdUb2tlbiBpcyBub3QgdmFsaWQgWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGRlY29kZWRUb2tlbiA9IGF0b2IodG9rZW4uc3Vic3RyKGVkZ2VBdXRoVG9rZW5QcmVmaXgubGVuZ3RoKSk7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBKU09OLnBhcnNlKGRlY29kZWRUb2tlbik7XG5cbiAgICAgIGVkZ2VUb2tlbi50b2tlbiA9IEpTT04ucGFyc2UoZWRnZVRva2VuLnRva2VuKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4oZWRnZVRva2VuKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBFZGdlQXV0aFBhcnNlci5fbG9nZ2VyLmVycm9yKCdDYW5ub3QgcGFyc2UgdG9rZW4gdmFsdWUnLCBlKTtcblxuICAgICAgcmV0dXJuIG5ldyBFZGdlVG9rZW4obnVsbCk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdG9rZW4gJiYgdG9rZW4uc3RhcnRzV2l0aChlZGdlQXV0aFRva2VuUHJlZml4KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuaW50ZXJmYWNlIElUb2tlbiB7XG4gIHVyaTogVVJMIHwgbnVsbDtcbiAgY2FwYWJpbGl0aWVzOiBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIElFZGdlVG9rZW4ge1xuICBhcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHRva2VuOiBJVG9rZW47XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVkZ2VUb2tlbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW46IElUb2tlbjtcblxuICBjb25zdHJ1Y3RvcihlZGdlVG9rZW46IElFZGdlVG9rZW4pIHtcbiAgICB0aGlzLl9hcHBsaWNhdGlvbklkID0gZWRnZVRva2VuPy5hcHBsaWNhdGlvbklkIHx8ICcnO1xuICAgIHRoaXMuX3Rva2VuID0ge1xuICAgICAgdXJpOiBlZGdlVG9rZW4/LnRva2VuPy51cmkgPyBuZXcgR2xvYmFsU2NvcGUuVVJMKGVkZ2VUb2tlbi50b2tlbi51cmkpIDogbnVsbCxcbiAgICAgIGNhcGFiaWxpdGllczogZWRnZVRva2VuPy50b2tlbj8uY2FwYWJpbGl0aWVzIHx8IFtdXG4gICAgfTtcbiAgfVxuXG4gIGdldCB1cmkoKTogVVJMIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3Rva2VuLnVyaTtcbiAgfVxuXG4gIGdldCBjYXBhYmlsaXRpZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi5jYXBhYmlsaXRpZXM7XG4gIH1cblxuICBnZXQgdGVuYW5jeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9hcHBsaWNhdGlvbklkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0xvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IHtUZWxlbWV0cnlMZXZlbFR5cGV9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5kZWNsYXJlIGNvbnN0IF9fRkVBVFVSRVNfXzoge1xuICBzZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBzZW5kTG9nczogTG9nZ2luZ0xldmVsVHlwZTtcbiAgc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRGZWF0dXJlcyB7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTG9jYWxDYW5kaWRhdGVzOiBib29sZWFuO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9zZW5kTWV0cmljczogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfbG9nVG9Db25zb2xlOiBMb2dnaW5nTGV2ZWxUeXBlO1xuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvZ3MoKTogTG9nZ2luZ0xldmVsVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2dzO1xuICB9XG5cbiAgc3RhdGljIGdldCBzZW5kTWV0cmljcygpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTWV0cmljcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nVG9Db25zb2xlKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9sb2dUb0NvbnNvbGU7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGZWF0dXJlcygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZmVhdHVyZXMgPSBfX0ZFQVRVUkVTX187XG5cbiAgICAgIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXMgPSAnc2VuZExvY2FsQ2FuZGlkYXRlcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9jYWxDYW5kaWRhdGVzIDogdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ3NlbmRMb2dzJyBpbiBmZWF0dXJlcyA/IGZlYXR1cmVzLnNlbmRMb2dzIDogJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdzZW5kTWV0cmljcycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTWV0cmljcyA6ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ2xvZ1RvQ29uc29sZScgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5sb2dUb0NvbnNvbGUgOiAnQWxsJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gdHJ1ZTtcbiAgICAgIHRoaXMuX3NlbmRMb2dzID0gJ0FsbCc7XG4gICAgICB0aGlzLl9zZW5kTWV0cmljcyA9ICdBbGwnO1xuICAgICAgdGhpcy5fbG9nVG9Db25zb2xlID0gJ0FsbCc7XG4gICAgfVxuICB9XG59XG5cbkJ1aWxkRmVhdHVyZXMuYXBwbHlGZWF0dXJlcygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBCcm93c2VyRGV0ZWN0b3IgZnJvbSAnLi4vZG9tL0Jyb3dzZXJEZXRlY3Rvcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZlYXR1cmVFbmFibGVtZW50IHtcbiAgc3RhdGljIGdldCBjbGllbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENsaWVudCBvZmZlciB3b3JrZmxvdyBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseSBpbiB0aGUgZm9sbG93aW5nIGJyb3dzZXJzXG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc0IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzYgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGdldCBhZGRUcmFuY2VpdmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgLy8gQ2hyb21lIDY5LCA3MCwgNzEsIDcyIGV4cG9zZXMgYGFkZFRyYW5jZWl2ZXJgIGJ1dCBpdCBkb2VzIG5vdCB3b3JrIGNvcnJlY3RseVxuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzAgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA2NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZ2V0Q3VycmVudE9mZmVyRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU2O1xuICB9XG5cbiAgc3RhdGljIGdldCBvblRyYWNrRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjMgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDUyO1xuICB9XG5cbiAgc3RhdGljIGdldCB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkVXNlTmF0aXZlSGxzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYW1zdW5nQnJvd3Nlcic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUHJlY2FjaGluZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0lFJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIHR5cGVvZiBHbG9iYWxTY29wZS5kb2N1bWVudENyZWF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPj0gNzEgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc01vYmlsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzTW9iaWxlKCk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEodHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tQcm9jZXNzb3IgPT09ICd1bmRlZmluZWQnIHx8XG4gICAgICB0eXBlb2YgTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciA9PT0gJ3VuZGVmaW5lZCcpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIFJUQ1J0cFJlY2VpdmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgUlRDUnRwUmVjZWl2ZXIucHJvdG90eXBlLmNyZWF0ZUVuY29kZWRTdHJlYW1zICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBTY3JpcHRUcmFuc2Zvcm0gIT09ICd1bmRlZmluZWQnO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZS5yZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ0ZpcmVmb3gnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSAhPT0gJ1NhZmFyaSc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmRlY2xhcmUgY29uc3QgX19QQVJBTUVURVJTX186IHtcbiAgZGlzY292ZXJ5OiBJRGlzY292ZXJ5UGFyYW1ldGVyO1xufTtcblxuaW50ZXJmYWNlIElEaXNjb3ZlcnlQYXJhbWV0ZXJ7XG4gIGludGVudGlvbnM6IHN0cmluZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyYW1ldGVycyB7XG4gIHByaXZhdGUgc3RhdGljIF9kaXNjb3ZlcnlQYXJhbWV0ZXJzOiBJRGlzY292ZXJ5UGFyYW1ldGVyIDtcblxuICBzdGF0aWMgZ2V0IGRpc2NvdmVyeVBhcmFtZXRlcnMoKTogSURpc2NvdmVyeVBhcmFtZXRlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnM7XG4gIH1cblxuICBzdGF0aWMgYXBwbHlQYXJhbWV0ZXJzKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJzID0gX19QQVJBTUVURVJTX187XG5cbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSAnZGlzY292ZXJ5JyBpbiBwYXJhbWV0ZXJzID8gcGFyYW1ldGVycy5kaXNjb3ZlcnkgOiB7aW50ZW50aW9uczogJyd9O1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2Rpc2NvdmVyeVBhcmFtZXRlcnMgPSB7aW50ZW50aW9uczogJyd9O1xuICAgIH1cbiAgfVxufVxuXG5QYXJhbWV0ZXJzLmFwcGx5UGFyYW1ldGVycygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IElHbG9iYWxTY29wZSBmcm9tICcuL0lHbG9iYWxTY29wZSc7XG5pbXBvcnQgSURvY3VtZW50IGZyb20gJy4vSURvY3VtZW50JztcbmltcG9ydCBJTG9jYXRpb24gZnJvbSAnLi9JTG9jYXRpb24nO1xuaW1wb3J0IElOZXR3b3JrSW5mb3JtYXRpb24gZnJvbSAnLi9JTmV0d29ya0luZm9ybWF0aW9uJztcbmltcG9ydCBJTmF2aWdhdG9yIGZyb20gJy4vSU5hdmlnYXRvcic7XG5pbXBvcnQgSVdpbmRvdyBmcm9tICcuL0lXaW5kb3cnO1xuXG5leHBvcnQgY2xhc3MgR2xvYmFsU2NvcGUgaW1wbGVtZW50cyBJR2xvYmFsU2NvcGUge1xuICBwcml2YXRlIHN0YXRpYyBfaW5zdGFuY2U6IElHbG9iYWxTY29wZSA9IG5ldyBHbG9iYWxTY29wZSgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kb2N1bWVudDogSURvY3VtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2NhdGlvbjogSUxvY2F0aW9uO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uYXZpZ2F0b3I6IElOYXZpZ2F0b3I7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3dpbmRvdzogSVdpbmRvdztcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9kb2N1bWVudCA9IGRvY3VtZW50O1xuICAgIHRoaXMuX2xvY2F0aW9uID0gbG9jYXRpb247XG4gICAgdGhpcy5fbmF2aWdhdG9yID0gbmF2aWdhdG9yO1xuICAgIHRoaXMuX3dpbmRvdyA9IHdpbmRvdztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogSUdsb2JhbFNjb3BlIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUuX2luc3RhbmNlO1xuICB9XG5cbiAgZ2V0IEZvcm1EYXRhKCk6IHR5cGVvZiBGb3JtRGF0YSB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5Gb3JtRGF0YTtcbiAgfVxuXG4gIGdldCBVUkwoKTogdHlwZW9mIFVSTCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5VUkw7XG4gIH1cblxuICBnZXQgVVJMU2VhcmNoUGFyYW1zKCk6IHR5cGVvZiBVUkxTZWFyY2hQYXJhbXMge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuVVJMU2VhcmNoUGFyYW1zO1xuICB9XG5cbiAgZ2V0IGFkZERvY3VtZW50RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgYWRkV2luZG93RXZlbnRMaXN0ZW5lcigpOiAodHlwZTogc3RyaW5nLCBsaXN0ZW5lcjogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCwgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucykgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhckludGVydmFsKCk6IChpZD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5jbGVhckludGVydmFsLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBjbGVhclRpbWVvdXQoKTogKGlkPzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmNsZWFyVGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRDcmVhdGVFbGVtZW50KCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudEhhc0ZvY3VzKCk6ICgpID0+IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5oYXNGb2N1cy5iaW5kKHRoaXMuX2RvY3VtZW50KTtcbiAgfVxuXG4gIGdldCBkb2N1bWVudElzSGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5oaWRkZW47XG4gIH1cblxuICBnZXQgZG9jdW1lbnRRdWVyeVNlbGVjdG9yKCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZmV0Y2goKTogKGlucHV0OiBzdHJpbmcgfCBVUkwgfCBSZXF1ZXN0LCBpbml0PzogUmVxdWVzdEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmZldGNoLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbkhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhvc3RuYW1lO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uU2VhcmNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaDtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JDb25uZWN0aW9uKCk6IElOZXR3b3JrSW5mb3JtYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JJc09uTGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLm9uTGluZTtcbiAgfVxuXG4gIGdldCBxdWV1ZU1pY3JvdGFzaygpOiAobWljcm90YXNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnF1ZXVlTWljcm90YXNrLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCByZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IHJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgc2V0SW50ZXJ2YWwoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0SW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldFRpbWVvdXQoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0VGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU2NvcGUuZ2V0SW5zdGFuY2UoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8vIEFzIGZsb2F0IGluIEVDTUFTY3JpcHQgdXNlIDY0LWJpdCBmb3JtYXQgaXQgY2Fubm90IGhhdmUvaGFuZGxlIG1vcmUgdGhhbiAxNSBzeW1ib2xzIGFmdGVyIGRvdC5cbmNvbnN0IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCA9IDE1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJzIHtcbiAgc3RhdGljIGNvdW50TnVtYmVyTGVuZ3RoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlID0gMDtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbnVtYmVyICo9IC0xO1xuICAgICAgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSsrO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXJzLmNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbChudW1iZXIpICsgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSArIChudW1iZXIgIT09IE1hdGguZmxvb3IobnVtYmVyKSA/IE51bWJlcnMuY291bnREaWdpdHNBZnRlckRlY2ltYWwobnVtYmVyKSArIDEgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpeFJvdW5kaW5nKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwb3dlcikgLyBwb3dlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGlnaXRzQmVmb3JlRGVjaW1hbCA9IDE7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICBkaWdpdHNCZWZvcmVEZWNpbWFsKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZ2l0c0JlZm9yZURlY2ltYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKG1vZGlmaWVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUgJiYgY291bnQgPCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBtb2RpZmllZFZhbHVlID0gTnVtYmVycy5maXhSb3VuZGluZyhvcmlnaW5hbFZhbHVlLCBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLm1lc3NhZ2UpICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUubG9jYXRpb25Ib3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IEdsb2JhbFNjb3BlLmZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFJlY2VpdmVycygpOiBSVENSdHBSZWNlaXZlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5HbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBHbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgR2xvYmFsU2NvcGUucmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmcpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IEdsb2JhbFNjb3BlLlVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcblxuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgaW5pdGlhbGl6aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgSW5pdGlhbGl6aW5nID0gMCxcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nID0gMixcbiAgUGF1c2VkID0gMyxcbiAgUGxheWluZyA9IDQsXG4gIFJlY292ZXJpbmcgPSA1LFxuICBSZWNvbm5lY3RpbmcgPSA2LFxuICBTdGFuZEJ5ID0gNyxcbiAgU3RvcHBlZCA9IDgsXG4gIFVuYXV0aG9yaXplZCA9IDksXG4gIEdlb1Jlc3RyaWN0ZWQgPSAxMCxcbiAgR2VvQmxvY2tlZCA9IDExLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUgPSAxMixcbiAgQ29uZmlndXJhdGlvbkVycm9yID0gMTMsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciA9IDE0LFxuICBDb25uZWN0aW9uRXJyb3IgPSAxNSxcbiAgQ2xpZW50U3RhcnRFcnJvciA9IDE2LFxuICBFcnJvciA9IDE3XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQgPSBGZWF0dXJlRW5hYmxlbWVudC5pc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWRcbiAgICAmJiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpO1xuXG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPihvcHRpb25zPy50YXJnZXRMYWcgPz8gZGVmYXVsdFRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZm9yYmlkZGVuLXRhZyc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PiBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd0eXBlJywgJ2h0dHAnKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGNodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPSBjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlO1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NodW5rZWRTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gQ2h1bmtlZFN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSA9PT0gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5MaXZlXG4gICAgICAgICAgJiYgbmV3U3RyZWFtU3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPT09IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICAgICAgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmN1cnJlbnRUaW1lID09PSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZHVyYXRpb25cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIGVuZCBvZiBzdHJlYW0nLCBlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgICF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICAgICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCB8fCAhbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNCkge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG5cbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUge1xuICAgIExpdmUgPSAxLFxuICAgIE9uZERlbWFuZCA9IDJcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKHBsYXlsaXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX3BoZW5peFdlYlBsYXllciB8fCBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX2hsc1BsYXllciAmJiAhKHRoaXMuX3BoZW5peFdlYlBsYXllciAmJiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFuaWZlc3RVcmwgfHwgcGxheWxpc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWyR7c3RyZWFtSWR9XSBDYW5ub3QgcGxheSBbJHtwbGF5bGlzdFVybCA/ICdITFMnIDogJ0RBU0gnfV0gc3RyZWFtIHdpdGggaW5jbHVkZWQgcGxheWVyYCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBzdHJlYW0gcGxheWxpc3QgZm91bmQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBiYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHBlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5hcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCksIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgICAgbWVkaWFTdHJlYW0gPSB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yID0gbmV3IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKHBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbSwgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24gPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIFZpZGVvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIUdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5PZmZsaW5lO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgfHwgYXVkaW9UcmFja0ZhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3RpbmcgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5PZmZsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID8gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgOiBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgc3RhdGUgcmVzdG9yZWQgdG8gWyVzXSBhZnRlciByZWNvbm5lY3RpbmcnLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIGxpdmVTeW5jUGFuaWNUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yZWRTdGF0aXN0aWNzOiB7XG4gICAgZXN0aW1hdGVkQmFuZHdpZHRoOiBudW1iZXI7XG4gICAgcGxheVRpbWU6IG51bWJlcjtcbiAgfTtcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcyA9IHtcbiAgICAgIGVzdGltYXRlZEJhbmR3aWR0aDogMCxcbiAgICAgIHBsYXlUaW1lOiAwXG4gICAgfTtcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgbGl2ZVN5bmNQYW5pY1RocmVzaG9sZDogMSxcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiA2MCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPCBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5wbGF5VGltZSA8IHN0YXRpc3RpY3MucGxheVRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPSBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aDtcbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLnBsYXlUaW1lID0gc3RhdGlzdGljcy5wbGF5VGltZTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIGZyb20gJy4vQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuICAgIGNvbnN0IGhhc1N0cmVhbWluZyA9IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcbiAgICBjb25zdCBoYXNPbkRlbWFuZCA9IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdvbi1kZW1hbmQnKTtcblxuICAgIGlmIChoYXNTdHJlYW1pbmcgfHwgaGFzT25EZW1hbmQpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgIWhhc09uRGVtYW5kID8gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5MaXZlIDogQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5PbmREZW1hbmQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5jdXJyZW50VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayhtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSUVuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDIuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVkU3RyZWFtU2luayBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwge1N1cnJvZ2F0ZUZyYW1lVHlwZSwgU2tpcEZyYW1lfSBmcm9tICcuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXInO1xuXG50eXBlIE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gJ3ZpZGVvJyB8ICdhdWRpbyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIGFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHJlY2VpdmVyczogUlRDUnRwUmVjZWl2ZXJbXSwgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiwgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiwgdmlkZW9Db2RlYzogc3RyaW5nLCBhdWRpb0NvZGVjOiBzdHJpbmcpOiB7ZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVycy5maWx0ZXIocmVjZWl2ZSA9PiByZWNlaXZlLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9Xb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHMnLCBpbXBvcnQubWV0YS51cmwpLCB7dHlwZTogJ21vZHVsZSd9KTtcblxuICAgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICAgIGNvZGVjOiB2aWRlb0NvZGVjXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZFZpZGVvRnJhbWUsIFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiA9IGFzeW5jKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1cnJvZ2F0ZTogU3Vycm9nYXRlRnJhbWVUeXBlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSh2aWRlb0NvZGVjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSA9PT0gU2tpcEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IHN1cnJvZ2F0ZSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKHZpZGVvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4vV29ya2VyVHJhbnNmb3JtU3RyZWFtLnRzJywgaW1wb3J0Lm1ldGEudXJsKSwge3R5cGU6ICdtb2R1bGUnfSk7XG5cbiAgICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgICBjb2RlYzogYXVkaW9Db2RlY1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcblxuICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZEF1ZGlvRnJhbWUsIFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiA9IGFzeW5jKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge2Rpc3Bvc2FibGVzfTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KToge3RyYW5zZm9ybWVkU3RyZWFtOiBNZWRpYVN0cmVhbTsgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGlmICh2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8VmlkZW9GcmFtZSwgVmlkZW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtVmlkZW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IHZpZGVvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8QXVkaW9EYXRhLCBBdWRpb0RhdGE+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbUF1ZGlvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IGF1ZGlvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiBhdWRpb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0sXG4gICAgICBkaXNwb3NhYmxlc1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCA9IEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMy4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGNvbnN0IFNraXBGcmFtZSA9IFN5bWJvbCgpO1xuXG5leHBvcnQgdHlwZSBTdXJyb2dhdGVGcmFtZVR5cGUgPSBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB8IHR5cGVvZiBTa2lwRnJhbWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNTYWZhcmkgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGVDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNBbmRyb2lkQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNBbmRyb2lkO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2luZ2xlWmVyb0J5dGUgPSBuZXcgVWludDhBcnJheShbMHgwMF0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjID0ge09QVVM6IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSl9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHhmNCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg5YiwgMHgyYiwgMHhmMSwgMHhmMSwgMHhmOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwNywgMHg4OSwgMHgxMiwgMHhjYiwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCwgLy8gUGljdHVyZSBwYXJhbXRlciBzZXRcbiAgICAgIC8qICovIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODIsIDB4MDAsIDB4M2YsIDB4NzAsIDB4MjMsIDB4ODYsIDB4ZTYsIDB4ZDEsIDB4ODAsIDB4MDksIDB4YWYsIDB4MGEsIDB4NDEsIDB4NjYsIDB4NmIsIDB4NTQsIDB4NDYsIDB4ZmIsIDB4NzEsIDB4ZDksIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZjldKSwgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHhiMCwgMHgwMiwgMHgwMCwgMHg5ZCwgMHgwMSwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg2YiwgMHgwMCwgMHgyNywgMHgxYywgMHgyNCwgMHgwYywgMHgyYywgMHgyYywgMHg0NCwgMHhjYywgMHgyNCwgMHg0MSwgMHhhOCwgMHgwMCwgMHgxMywgMHhhNywgMHhhMywgMHg3YSwgMHg1MCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODIsIDB4NDksIDB4ODMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NzYsIDB4MzgsIDB4MjQsIDB4MWMsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MTEsIDB4YmYsIDB4ZGQsIDB4NzcsIDB4ZmYsIDB4NDAsIDB4N2YsIDB4YjEsIDB4MDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLCAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjQgPSB7XG4gICAgSUZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGNlLCAweDBmLCAweGM4LCAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweDVmLCAuLi5uZXcgVWludDhBcnJheSgxMDI5NSkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDA1LCAuLi5uZXcgVWludDhBcnJheSgzKS5maWxsKDB4ZmYpLCAweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSksIC8vIFNsaWNlIGxheWVyOiBJZHIgZGF0YVxuICAgIFBGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4YTQsIC4uLm5ldyBVaW50OEFycmF5KDEwMzY0KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTRUlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4MjAsIDB4MTUsIDB4ZjAsIDB4NGJdKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXggPSAxMDQxODtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNTYWZhcmk7XG4gIHByaXZhdGUgc3RhdGljIF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdPUFVTJzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTogQXJyYXlCdWZmZXIge1xuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LklGcmFtZS5idWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIGNvbnN0IHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyO1xuICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xuXG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk6IEFycmF5QnVmZmVyIHtcbiAgICBjb25zdCBiaXRNYXNrMSA9IDB4MGU7XG4gICAgY29uc3QgYml0TWFzazIgPSAweDAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0TGVmdEJ5NyA9IDc7XG4gICAgY29uc3QgYnl0ZTEgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMSkgPj4gYml0U2hpZnRSaWdodEJ5MSk7XG4gICAgY29uc3QgYnl0ZTIgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3KTtcbiAgICBjb25zdCBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcbiAgICBjb25zdCBidWZmZXIgPSBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICAgIGNvbnN0IGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xuXG4gICAgYnVmZmVyW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcbiAgICBidWZmZXJbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcbiAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc2V0IHBhZ2VMb2FkVGltZShwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBHbG9iYWxTY29wZS5sb2NhdGlvbkhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRJdGVtU2l6ZSA9IGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gTnVtYmVycy5jb3VudE51bWJlckxlbmd0aChpdGVtKSA6IGl0ZW0ubGVuZ3RoO1xuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBnZXRJdGVtU2l6ZShpdGVtKSA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKG4sIHQsIGUsIHIsIG8sIGEsIGMpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaSA9IG5bYV0oYyksXG4gICAgICB1ID0gaS52YWx1ZTtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiB2b2lkIGUobik7XG4gIH1cbiAgaS5kb25lID8gdCh1KSA6IFByb21pc2UucmVzb2x2ZSh1KS50aGVuKHIsIG8pO1xufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3Iobikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ID0gdGhpcyxcbiAgICAgIGUgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBvKSB7XG4gICAgICB2YXIgYSA9IG4uYXBwbHkodCwgZSk7XG4gICAgICBmdW5jdGlvbiBfbmV4dChuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3cobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBuKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHZvaWQgMCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJjaGFubmVsc1wiOiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyJdLCJuYW1lcyI6WyJHbG9iYWxTY29wZSIsIkRpc3Bvc2FibGUiLCJEaXNwb3NhYmxlTGlzdCIsIlN1YmplY3QiLCJSZWFkT25seVN1YmplY3QiLCJkZWZhdWx0RG9jdW1lbnRGb2N1c0ludGVydmFsVGltZW91dCIsIkFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX2NsYXNzQ2FsbENoZWNrIiwiX2RlZmluZVByb3BlcnR5IiwiRGF0ZSIsIm5vdyIsIl9pc0ZvcmVncm91bmQiLCJfcmVhZE9ubHlJc0ZvcmVncm91bmQiLCJkZXRlY3RUYWJGb2N1c0NoYW5nZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoaWRkZW4iLCJ2aXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnQiLCJfdHlwZW9mIiwibXNIaWRkZW4iLCJ3ZWJraXRIaWRkZW4iLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiaXNGb3JlZ3JvdW5kIiwic2V0Rm9jdXNTdGF0ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJhZGQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwibGlzdGVuRm9yRG9jdW1lbnRGb2N1cyIsImNhbGwiLCJfdGhpczIiLCJfZG9jdW1lbnRGb2N1c0ludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJoYXNGb2N1cyIsImNsZWFySW50ZXJ2YWwiLCJkZWZhdWx0IiwiQnJvd3NlckRldGVjdG9yIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIl9icm93c2VyTmFtZSIsIl9icm93c2VyTWFqb3JWZXJzaW9uIiwiX2lzQW5kcm9pZCIsIl9pc0Nocm9tZTY5IiwiX2lzQ2hyb21lNzAiLCJfaXNDaHJvbWU3MSIsIl9pc0Nocm9tZTcyIiwiX2lzQ2hyb21lNzQiLCJfaXNDaHJvbWU3NSIsIl9pc0Nocm9tZTc2IiwiX2lzQ2hyb21lNzciLCJpc01vYmlsZSIsIl9pc01vYmlsZSIsInBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwiYnJvd3Nlck5hbWVBbmRWZXJzaW9uIiwibWF0Y2giLCJfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXgiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbkZvcklFIiwicGFyc2VCcm93c2VyTmFtZSIsImJyb3dzZXJOYW1lTGlzdCIsInNwbGl0IiwicGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uIiwiYnJvd3NlclZlcnNpb25MaXN0IiwiZnVsbFZlcnNpb24iLCJOdW1iZXIiLCJtc2llIiwiaW5kZXhPZiIsImNvbmNhdCIsInBhcnNlSW50Iiwic3Vic3RyaW5nIiwidHJpZGVudCIsInZlcnNpb24iLCJfQnJvd3NlckRldGVjdG9yIiwidGVzdCIsIl9uYXZpZ2F0b3IiLCJfbmF2aWdhdG9yMiIsImluY2x1ZGVzIiwiTG9nZ2VyRGVmYXVsdHMiLCJMb2dnaW5nTGV2ZWxNYXBwaW5nIiwiVGVsZW1ldHJ5RGVmYXVsdCIsIlRlbGVtZXRyeUxldmVsTWFwcGluZyIsIkNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJnZXRTdHJpbmdWYWx1ZSIsIm5hbWUiLCJyZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZSIsImRlZmF1bHRTdHJpbmdWYWx1ZSIsImdldEJvb2xlYW5WYWx1ZSIsInZhbHVlRnJvbVVyaSIsImRlZmF1bHRCb29sZWFuVmFsdWUiLCJjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSIsImRlZmF1bHRUZWxlbWV0cnlMZXZlbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUiLCJkZWZhdWx0TG9nZ2luZ0xldmVsIiwiZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwiLCJkZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsIiwibWV0YVZhbHVlIiwiZG9jdW1lbnRRdWVyeVNlbGVjdG9yIiwiZ2V0QXR0cmlidXRlIiwidmFsdWVVUklQYXJhbWV0ZXJOYW1lIiwiVVJMU2VhcmNoUGFyYW1zIiwibG9jYXRpb25TZWFyY2giLCJ1bmRlZmluZWQiLCJGZWF0dXJlRW5hYmxlbWVudCIsIkdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIiwiRXJyb3IiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uIiwiaXNGb3JjZUNocm9tZUdhcmJhZ2VDb2xsZWN0aW9uU3VwcG9ydGVkIiwiZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbiIsImlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQiLCJxdWV1ZU1pY3JvdGFzayIsIm92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbiIsImJpbmQiLCJzZXRUaW1lb3V0IiwiaW1nIiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50Iiwic3JjIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiQmxvYiIsIkFycmF5QnVmZmVyIiwib25lcnJvciIsInJldm9rZU9iamVjdFVSTCIsIk5ldHdvcmtNb25pdG9yIiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsImlzU3VwcG9ydGVkIiwic2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzIiwidXBkYXRlU3RhdGlzdGljcyIsIl9pc1N1cHBvcnRlZCIsIl9ydHQiLCJfZWZmZWN0aXZlVHlwZSIsIl9kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsImdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiX3JlZiIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0byIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8zIiwiZG93bmxpbmsiLCJkb3dubGlua01heCIsImdldEVmZmVjdGl2ZVR5cGUiLCJfcmVmMiIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzQiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG81IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvNiIsImVmZmVjdGl2ZVR5cGUiLCJ0eXBlIiwiZ2V0Um91bmRUcmlwVGltZSIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzciLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG84IiwicnR0IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvOSIsImxpc3RlbmVyIiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvMTAiLCJNZXRyaWNzVHlwZSIsIk1ldHJpY1R5cGUiLCJEdXJhdGlvbnMiLCJTREsiLCJMb2dnZXJGYWN0b3J5IiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsImdldExvZ2dlciIsIm1ldHJpY3NTZXJ2aWNlIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJTZXR1cENvbXBsZXRlZCIsImZhaWwiLCJTZXR1cEZhaWxlZCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsImdldE5hbWUiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwidG9Jc29TdHJpbmciLCJFZGdlVG9rZW4iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiaXNDaHJvbWU3NCIsImlzQ2hyb21lNzUiLCJpc0Nocm9tZTc2IiwiaXNDaHJvbWU3NyIsImlzQ2hyb21lNjkiLCJpc0Nocm9tZTcwIiwiaXNDaHJvbWU3MSIsImlzQ2hyb21lNzIiLCJicm93c2VyTmFtZSIsImJyb3dzZXJNYWpvclZlcnNpb24iLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJIVE1MVmlkZW9FbGVtZW50IiwicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJfZG9jdW1lbnQiLCJfbG9jYXRpb24iLCJsb2NhdGlvbiIsIl93aW5kb3ciLCJ3aW5kb3ciLCJGb3JtRGF0YSIsImNsZWFyVGltZW91dCIsImNyZWF0ZUVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwiZmV0Y2giLCJob3N0bmFtZSIsInNlYXJjaCIsImNvbm5lY3Rpb24iLCJvbkxpbmUiLCJnZXRJbnN0YW5jZSIsIl9pbnN0YW5jZSIsIl9HbG9iYWxTY29wZSIsImRpc3Bvc2FibGUiLCJfZGlzcG9zZWQiLCJfZGlzcG9zYWJsZSIsIl9saXN0IiwiZm9yRWFjaCIsInRvU3RyaW5nIiwibWF4RGlnaXRzSW5GbG9hdEFmdGVyRG90IiwiTnVtYmVycyIsImNvdW50TnVtYmVyTGVuZ3RoIiwiaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSIsIm51bWJlciIsImNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCIsIk1hdGgiLCJmbG9vciIsImNvdW50RGlnaXRzQWZ0ZXJEZWNpbWFsIiwiZml4Um91bmRpbmciLCJwcmVjaXNpb24iLCJwb3dlciIsInBvdyIsInJvdW5kIiwiZGlnaXRzQmVmb3JlRGVjaW1hbCIsIm9yaWdpbmFsVmFsdWUiLCJtb2RpZmllZFZhbHVlIiwiY291bnQiLCJTdHJpbmdzIiwicmFuZG9tIiwicmFuZG9tMTNDaGFyYWN0ZXJzIiwibG9vcHMiLCJjZWlsIiwiQXJyYXkiLCJmaWxsIiwicmVkdWNlIiwic3RyaW5nIiwiZnVuYyIsImFzc2VydFVucmVhY2hhYmxlIiwieCIsIkFwcGVuZGVycyIsIl9hcHBlbmRlcnMiLCJhcHBlbmRlciIsInJlbW92ZSIsIml0ZW1zIiwiaXRlbSIsIkxvZ2dpbmdMZXZlbCIsIkNvbnNvbGVBcHBlbmRlciIsInRocmVzaG9sZCIsIl90aHJlc2hvbGQiLCJsb2ciLCJsb2dMZXZlbCIsIm1lc3NhZ2UiLCJjYXRlZ29yeSIsImRhdGUiLCJmdWxsTWVzc2FnZSIsInRvSVNPU3RyaW5nIiwiV2FybiIsImNvbnNvbGUiLCJMb2dnZXIiLCJhcHBlbmRlcnMiLCJfY2F0ZWdvcnkiLCJ0cmFjZSIsIlRyYWNlIiwiX2xlbiIsImFyZ3VtZW50cyIsImFyZ3MiLCJfa2V5IiwiZGVidWciLCJEZWJ1ZyIsIl9sZW4yIiwiX2tleTIiLCJJbmZvIiwiX2xlbjMiLCJfa2V5MyIsIndhcm4iLCJfbGVuNCIsIl9rZXk0IiwiX2xlbjUiLCJfa2V5NSIsImZhdGFsIiwiRmF0YWwiLCJfbGVuNiIsIl9rZXk2IiwibGV2ZWwiLCJyZXBsYWNlUGxhY2Vob2xkZXJzIiwicmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZyIsImluZGV4IiwicmVwbGFjZUFyZ3VtZW50Iiwic3BsaWNlIiwic3RyaW5naWZ5IiwiYWNjdW11bGF0b3IiLCJjdXJyZW50VmFsdWUiLCJhcnJheSIsImVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlIiwic3RhY2siLCJhcmciLCJjYWNoZSIsIk9iamVjdCIsImFyZ3VtZW50IiwiZGF0YSIsInRvU3RyaW5nU3RyIiwiTG9nZ2luZ1RocmVzaG9sZCIsIlRlbGVtZXRyeUFwcGVuZGVyIiwiVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsIl90ZWxlbWV0cnlDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiX2xvZ2dlcnMiLCJhcHBseUxvZ2dlckNvbmZpZ0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlMb2dnaW5nTGV2ZWwiLCJhcHBseUFwcGVuZGVyTG9nZ2luZ0xldmVsIiwiYXBwbHlDb25zb2xlTG9nZ2VyIiwiYXBwbHlUZWxlbWV0cnlMb2dnZXIiLCJwYXJhbWV0ZXJWYWx1ZSIsIl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwic2V0VGhyZXNob2xkIiwiYXBwbHlBcHBlbmRlciIsImxvZ2dpbmdMZXZlbCIsIk9mZiIsIkFsbCIsImNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwiLCJsb2dnaW5nTGV2ZWxUeXBlIiwiVGVsZW1ldHJ5TGV2ZWwiLCJtZXRyaWNzIiwiX21ldHJpY3MiLCJnZXRUZWxlbWV0cnlMZXZlbCIsIlRpbWVUb0ZpcnN0RnJhbWUiLCJFc3NlbnRpYWwiLCJDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiU3RhbGxlZCIsIkJ1ZmZlcmluZyIsIlJvdW5kVHJpcFRpbWUiLCJEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIk5ldHdvcmtUeXBlIiwiUmVzb2x1dGlvbkNoYW5nZWQiLCJBcHBsaWNhdGlvbkZvcmVncm91bmQiLCJBcHBsaWNhdGlvbkJhY2tncm91bmQiLCJNZXRyaWNzQ29uZmlndXJhdGlvbiIsIl91cmwiLCJzZXQiLCJ1cmwiLCJtZXRyaWNzVXJsIiwicGF0aG5hbWUiLCJfZW52aXJvbm1lbnQiLCJlbnZpcm9ubWVudCIsIl90ZW5hbmN5IiwidGVuYW5jeSIsIl9zZXNzaW9uSWQiLCJzZXNzaW9uSWQiLCJNZXRyaWNzU2VydmljZSIsIlRlbGVtZXRyeVVybCIsIkVudmlyb25tZW50IiwiTWV0cmljc0ZhY3RvcnkiLCJnZXRNZXRyaWNzU2VydmljZSIsIm1ldHJpY3NTZXJ2aWNlcyIsIl9tZXRyaWNzU2VydmljZXMiLCJtZXRyaWNzQ29uZmlndXJhdGlvbiIsImNsaWVudFNlc3Npb25JZCIsImdldFRlbGVtZXRyeVVybCIsImdldEVudmlyb25tZW50RnJvbVVybCIsImNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsIiwidGVsZW1ldHJ5TGV2ZWwiLCJzZXRUZWxlbWV0cnlMZXZlbCIsInZhbHVlcyIsIkV4cG9uZW50aWFsQmFja29mZiIsIlZlcnNpb25NYW5hZ2VyIiwicmVxdWVzdFNpemVMaW1pdCIsIm1heEJ1ZmZlcmVkUmVjb3JkcyIsImxvY2F0aW9uSG9zdG5hbWUiLCJfbWV0cmljc0NvbmZpZ3VyYXRpb24iLCJfZXhwb25lbnRpYWxCYWNrb2ZmIiwibWV0cmljIiwicHJldmlvdXNWYWx1ZSIsInJlc291cmNlIiwia2luZCIsIm1ldHJpY1JlY29yZCIsInRpbWVzdGFtcCIsImZ1bGxRdWFsaWZpZWROYW1lIiwiX2RvbWFpbiIsInNka1ZlcnNpb24iLCJpZ25vcmVkIiwic2VuZE1ldHJpY3NJZkFibGUiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJtYXJrIiwiX2NhbGxlZSIsIm1ldHJpY3NNZXNzYWdlcyIsImZvcm1EYXRhIiwid3JhcCIsIl9jYWxsZWUkIiwiX2NvbnRleHQiLCJwcmV2IiwibmV4dCIsImFwcGVuZCIsInJlY29yZHMiLCJtZXRob2QiLCJib2R5IiwiYWJydXB0Iiwic2VudCIsInN0b3AiLCJfeCIsImFwcGx5IiwiX3NlbmRNZXRyaWNzSWZBYmxlIiwiX2NhbGxlZTIiLCJfY2FsbGVlMiQiLCJfY29udGV4dDIiLCJfaXNTZW5kaW5nIiwic2xpY2UiLCJ0aGVuIiwicmVzcG9uc2UiLCJpc1Jlc3BvbnNlU3RhdHVzQ29kZVJldHJ5YWJsZSIsIl9mYWlsdXJlQ291bnQiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50IiwiY2F0Y2giLCJzdGF0dXMiLCJ0ZWxlbWV0cnlMZXZlbFR5cGUiLCJQcm9taXNlSGFuZGxlciIsIlByb21pc2UiLCJjYWxsYmFjayIsIlR5cGVFcnJvciIsIl9zdGF0ZSIsIl9oYW5kbGVkIiwiX3ZhbHVlIiwiX2RlZmVycmVkcyIsImRvUmVzb2x2ZSIsImRvbmUiLCJwcm9taXNlUmVzb2x2ZSIsInJlYXNvbiIsInByb21pc2VSZWplY3QiLCJuZXdWYWx1ZSIsInByb21pc2UiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwiaXNQcmVjYWNoaW5nRW5hYmxlZCIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsImVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImNvbmZpZ3VyYXRpb24iLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiU2RwUGFyc2VyIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCIsInBhcnNlZFNEUCIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImFkZFRyYW5jZWl2ZXJEaXNhYmxlZCIsIl9jcmVhdGVPZmZlciIsInByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwiZ2V0UmVjZWl2ZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsImxpc3RlbmVycyIsIl9jYWxsU3VwZXIiLCJpZHgiLCJfaW5oZXJpdHMiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJiYXNlVVJMIiwib3JpZ2luIiwiRGlzY292ZXJ5VXJpIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsIl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiY2hhbm5lbFRva2VuIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJpbml0IiwiX2luaXRpYWxpemVkIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfU0RLIiwiYWRkV2luZG93RXZlbnRMaXN0ZW5lciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50IiwicmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJJbml0aWFsaXppbmciLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsImVtcHR5IiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJSZXNldCIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0yIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhMiIsIl92YWxpZDMiLCJfdmFsaWRhdGlvblJlc3VsdDMiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3RhcnRpbmciLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsImlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkIiwiUmVjb3ZlcmluZyIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsImNyZWF0ZSIsIkNsaWVudFN0YXJ0RXJyb3IiLCJmaW5hbGx5IiwiYXV0b21hdGljUmV0cnlPbkZhaWx1cmUiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiU3RhbmRCeSIsIk9mZmxpbmUiLCJHZW9SZXN0cmljdGVkIiwiR2VvQmxvY2tlZCIsIlBhdXNlZCIsIlJlY29ubmVjdGluZyIsIlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0Iiwic2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiaW5pdGlhbGl6ZWQiLCJjaGFubmVsT3B0aW9ucyIsIl9pc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQiLCJpc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWQiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkZvcmNlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJFbmRQb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsImJ1aWxkRGlzY292ZXJ5VXJsIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiZGlzY292ZXJ5UGFyYW1ldGVycyIsInNlYXJjaFBhcmFtcyIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJDaHVua2VkU3RyZWFtaW5nIiwiTmV0d29ya1N0YXRlcyIsIkNodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIkxpdmUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrTm9Tb3VyY2UiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJfc3RyZWFtU3RhdGlzdGljcyIsInBhdXNlZCIsImRhdGFCdWZmZXJlZCIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiSGxzUGxheWVyIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJfb2JqZWN0U3ByZWFkIiwicHJlZmVyTmF0aXZlIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiaGxzUGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwiYmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJOZXR3b3JrSWRsZSIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsIk5ldHdvcmtMb2FkaW5nIiwiTmV0d29ya0VtcHR5IiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsIkluc2VydGFibGVTdHJlYW1zIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwibmF2aWdhdG9ySXNPbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsIm9uVHJhY2tEaXNhYmxlZCIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInBhcnNlZFJlbW90ZURlc2NyaXB0aW9uIiwiX0luc2VydGFibGVTdHJlYW1zJGFwIiwiYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJfSW5zZXJ0YWJsZVN0cmVhbXMkYXAyIiwiYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsIl9tb25pdG9yZWRTdGF0aXN0aWNzIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJzaGFrYSIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsImxpdmVTeW5jUGFuaWNUaHJlc2hvbGQiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsInVubG9hZCIsInBsYXllckNvbmZpZyIsImNvbmZpZ3VyZSIsImxvYWQiLCJjb2RlIiwidG9rZW5DYXBhYmlsaXRpZXMiLCJoYXNTdHJlYW1pbmciLCJoYXNPbkRlbWFuZCIsIk9uZERlbWFuZCIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwicGhlbml4V2ViUGxheWVyIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsImVycm9ycyIsIlJFQ09WRVJBQkxFIiwicmVsb2FkSWZBYmxlIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiMiIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJtb2RlIiwiU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsIlNraXBGcmFtZSIsInJlY2VpdmVycyIsInJlY2VpdmVyIiwicmVjZWl2ZSIsIndvcmtlciIsIldvcmtlciIsImltcG9ydCIsIm1ldGEiLCJvbm1lc3NhZ2UiLCJldmVudCIsImNodW5rIiwicG9zdE1lc3NhZ2UiLCJmb3JjZUludmFsaWRGcmFtZSIsInRyYW5zZm9ybSIsInRlcm1pbmF0ZSIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNvbnRyb2xsZXIiLCJzdXJyb2dhdGUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUiLCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjIiwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJNZWRpYVN0cmVhbSIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwidG9VcHBlckNhc2UiLCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjIiwiT1BVUyIsImJ1ZmZlciIsIl9zaW5nbGVaZXJvQnl0ZSIsIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0IiwiX2R1bW15ODJ4ODJIMjY0IiwiSUZyYW1lIiwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyIsIkgyNjQiLCJWUDgiLCJWUDkiLCJfaXNBbmRyb2lkQ2hyb21lIiwiZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlciIsIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMiLCJzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyIiwiYml0TWFzazEiLCJiaXRNYXNrMiIsImJpdFNoaWZ0UmlnaHRCeTEiLCJiaXRTaGlmdExlZnRCeTciLCJieXRlMSIsImJ5dGUyIiwiY29weU9mRHVtbXlQRnJhbWVzIiwiUEZyYW1lIiwiYnVmZmVySW5kZXgiLCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4IiwiX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJpc0FuZHJvaWQiLCJVaW50OEFycmF5IiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfbmV0d29ya01vbml0b3IiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwic291cmNlUm9vdCI6IiJ9
11324
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhbm5lbHMuanMiLCJtYXBwaW5ncyI6IkFBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNELE87Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1ZBO0FBQ0E7QUFDQTtBQUNxRDtBQUNUO0FBQ1E7QUFDaEI7QUFDZ0I7QUFFcEQsSUFBTUsscUJBQXFCLEdBQUcsa0JBQWtCO0FBQUMsSUFFNUJDLDBCQUEwQjtFQU03QyxTQUFBQSwyQkFBQSxFQUFjO0lBQUFDLDRJQUFBLE9BQUFELDBCQUFBO0lBQUFFLDRJQUFBLHVCQUxrQyxJQUFJTiw0REFBYyxDQUFDLENBQUM7SUFBQU0sNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUEsb0NBR2ZDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFHN0QsSUFBSSxDQUFDQyxhQUFhLEdBQUcsSUFBSVIsbURBQU8sQ0FBVSxJQUFJLENBQUM7SUFDL0MsSUFBSSxDQUFDUyxxQkFBcUIsR0FBRyxJQUFJUiwyREFBZSxDQUFDLElBQUksQ0FBQ08sYUFBYSxDQUFDO0lBQ3BFLElBQUksQ0FBQ0UsVUFBVSxDQUFDLENBQUM7RUFDbkI7RUFBQyxPQUFBQyx5SUFBQSxDQUFBUiwwQkFBQTtJQUFBUyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTZDO01BQzNDLE9BQU8sSUFBSSxDQUFDSixxQkFBcUI7SUFDbkM7RUFBQztJQUFBRyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPQyxzQkFBc0JBLENBQUEsRUFBVztNQUN0QyxPQUFPVCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDUyx5QkFBeUI7SUFDcEQ7RUFBQztJQUFBSixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPRyxPQUFPQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUUosVUFBVUEsQ0FBQSxFQUFTO01BQUEsSUFBQVMsS0FBQTtNQUN6QixJQUFNQyxzQkFBc0IsR0FBRyxTQUF6QkEsc0JBQXNCQSxDQUFBO1FBQUEsT0FBU0QsS0FBSSxDQUFDWCxhQUFhLENBQUNNLEtBQUssR0FBRyxDQUFDakIsZ0VBQVcsQ0FBQ3dCLGdCQUFnQjtNQUFBO01BQzdGLElBQU1DLG9CQUFvQixHQUFHLEtBQUs7TUFFbEN6QixnRUFBVyxDQUFDMEIsd0JBQXdCLENBQUNyQixxQkFBcUIsRUFBRWtCLHNCQUFzQixFQUFFRSxvQkFBb0IsQ0FBQztNQUV6RyxJQUFJLENBQUNKLFlBQVksQ0FBQ00sR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDO1FBQUEsT0FBTUQsZ0VBQVcsQ0FBQzRCLDJCQUEyQixDQUFDdkIscUJBQXFCLEVBQUVrQixzQkFBc0IsRUFBRUUsb0JBQW9CLENBQUM7TUFBQSxFQUFDLENBQUM7SUFDM0o7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDMUNIO0FBQ0E7QUFDQTtBQUZBLElBR3FCSyxlQUFlO0VBQUEsU0FBQUEsZ0JBQUE7SUFBQXZCLDRJQUFBLE9BQUF1QixlQUFBO0VBQUE7RUFBQSxPQUFBaEIseUlBQUEsQ0FBQWdCLGVBQUE7SUFBQWYsR0FBQTtJQUFBQyxHQUFBLEVBa0JsQyxTQUFBQSxJQUFBLEVBQTJDO01BQ3pDLE9BQU9jLGVBQWUsQ0FBQ0Msc0JBQXNCO0lBQy9DO0VBQUM7SUFBQWhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBaUM7TUFDL0IsT0FBTyxJQUFJLENBQUNnQixZQUFZO0lBQzFCO0VBQUM7SUFBQWpCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUM7TUFDdkMsT0FBTyxJQUFJLENBQUNpQixvQkFBb0I7SUFDbEM7RUFBQztJQUFBbEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnQztNQUM5QixPQUFPYyxlQUFlLENBQUNJLFVBQVU7SUFDbkM7RUFBQztJQUFBbkIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNLLFdBQVc7SUFDcEM7RUFBQztJQUFBcEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNNLFdBQVc7SUFDcEM7RUFBQztJQUFBckIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNPLFdBQVc7SUFDcEM7RUFBQztJQUFBdEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNRLFdBQVc7SUFDcEM7RUFBQztJQUFBdkIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNTLFdBQVc7SUFDcEM7RUFBQztJQUFBeEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNVLFdBQVc7SUFDcEM7RUFBQztJQUFBekIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNXLFdBQVc7SUFDcEM7RUFBQztJQUFBMUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFpQztNQUMvQixPQUFPYyxlQUFlLENBQUNZLFdBQVc7SUFDcEM7RUFBQztJQUFBM0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzBCLFFBQVFBLENBQUEsRUFBWTtNQUN6QixPQUFPYixlQUFlLENBQUNjLFNBQVM7SUFDbEM7RUFBQztJQUFBN0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZTRCLDBCQUEwQkEsQ0FBQSxFQUFXO01BQ2xELElBQUksQ0FBQ0MsU0FBUyxJQUFJLENBQUNBLFNBQVMsQ0FBQ0MsU0FBUyxFQUFFO1FBQ3RDLE9BQU8sRUFBRTtNQUNYO01BRUEsSUFBTUMscUJBQXFCLEdBQUdGLFNBQVMsQ0FBQ0MsU0FBUyxDQUFDRSxLQUFLLENBQUNuQixlQUFlLENBQUNvQiwyQkFBMkIsQ0FBQztNQUVwRyxJQUFJRixxQkFBcUIsSUFBSUEscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDckQsT0FBT0EscUJBQXFCLENBQUMsQ0FBQyxDQUFDO01BQ2pDO01BRUEsT0FBT2xCLGVBQWUsQ0FBQ3FCLCtCQUErQixDQUFDLENBQUM7SUFDMUQ7RUFBQztJQUFBcEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZW1DLGdCQUFnQkEsQ0FBQSxFQUFXO01BQ3hDLElBQUksQ0FBQ3RCLGVBQWUsQ0FBQ0Msc0JBQXNCLEVBQUU7UUFDM0MsT0FBTyxFQUFFO01BQ1g7TUFFQSxJQUFNc0IsZUFBZSxHQUFHdkIsZUFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VCLEtBQUssQ0FBQyxHQUFHLENBQUM7TUFFekUsSUFBSSxDQUFDRCxlQUFlLElBQUksQ0FBQ0EsZUFBZSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQzNDLE9BQU8sRUFBRTtNQUNYO01BRUEsT0FBT0EsZUFBZSxDQUFDLENBQUMsQ0FBQztJQUMzQjtFQUFDO0lBQUF0QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFlc0Msd0JBQXdCQSxDQUFBLEVBQVc7TUFDaEQsSUFBSSxDQUFDekIsZUFBZSxDQUFDQyxzQkFBc0IsRUFBRTtRQUMzQyxPQUFPLENBQUM7TUFDVjtNQUVBLElBQU15QixrQkFBa0IsR0FBRzFCLGVBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QixLQUFLLENBQUMsR0FBRyxDQUFDO01BRTVFLElBQUksQ0FBQ0Usa0JBQWtCLElBQUksQ0FBQ0Esa0JBQWtCLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDakQsT0FBTyxDQUFDO01BQ1Y7TUFFQSxJQUFNQyxXQUFXLEdBQUdELGtCQUFrQixDQUFDLENBQUMsQ0FBQztNQUV6QyxJQUFJLENBQUNDLFdBQVcsRUFBRTtRQUNoQixPQUFPLENBQUM7TUFDVjtNQUVBLE9BQU9DLE1BQU0sQ0FBQ0QsV0FBVyxDQUFDSCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQy9DO0VBQUM7SUFBQXZDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWVrQywrQkFBK0JBLENBQUEsRUFBVztNQUN2RCxJQUFJLENBQUNMLFNBQVMsSUFBSSxDQUFDQSxTQUFTLENBQUNDLFNBQVMsRUFBRTtRQUN0QyxPQUFPLEVBQUU7TUFDWDtNQUVBLElBQU1BLFNBQVMsR0FBR0QsU0FBUyxDQUFDQyxTQUFTO01BQ3JDLElBQU1ZLElBQUksR0FBR1osU0FBUyxDQUFDYSxPQUFPLENBQUMsT0FBTyxDQUFDO01BRXZDLElBQUlELElBQUksR0FBRyxDQUFDLEVBQUU7UUFDWjtRQUNBLGFBQUFFLE1BQUEsQ0FBYUMsUUFBUSxDQUFDZixTQUFTLENBQUNnQixTQUFTLENBQUNKLElBQUksR0FBRyxDQUFDLEVBQUVaLFNBQVMsQ0FBQ2EsT0FBTyxDQUFDLEdBQUcsRUFBRUQsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDeEY7TUFFQSxJQUFNSyxPQUFPLEdBQUdqQixTQUFTLENBQUNhLE9BQU8sQ0FBQyxVQUFVLENBQUM7TUFFN0MsSUFBSUksT0FBTyxHQUFHLENBQUMsRUFBRTtRQUNmO1FBQ0EsSUFBTUMsT0FBTyxHQUFHbEIsU0FBUyxDQUFDYSxPQUFPLENBQUMsS0FBSyxDQUFDO1FBRXhDLGFBQUFDLE1BQUEsQ0FBYUMsUUFBUSxDQUFDZixTQUFTLENBQUNnQixTQUFTLENBQUNFLE9BQU8sR0FBRyxDQUFDLEVBQUVsQixTQUFTLENBQUNhLE9BQU8sQ0FBQyxHQUFHLEVBQUVLLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDO01BQzlGO01BRUEsT0FBTyxFQUFFO0lBQ1g7RUFBQztBQUFBO0FBQUFDLGdCQUFBLEdBN0lrQnBDLGVBQWU7QUFBQXRCLDRJQUFBLENBQWZzQixlQUFlLGlDQUNvQiw0SkFBNEo7QUFBQXRCLDRJQUFBLENBRC9Mc0IsZUFBZSw0QkFFZUEsZ0JBQWUsQ0FBQ2UsMEJBQTBCLENBQUMsQ0FBQztBQUFBckMsNElBQUEsQ0FGMUVzQixlQUFlLGtCQUdLQSxnQkFBZSxDQUFDc0IsZ0JBQWdCLENBQUMsQ0FBQztBQUFBNUMsNElBQUEsQ0FIdERzQixlQUFlLDBCQUlhQSxnQkFBZSxDQUFDeUIsd0JBQXdCLENBQUMsQ0FBQztBQUFBL0MsNElBQUEsQ0FKdEVzQixlQUFlLGVBTUcsaURBQWlELENBQUVxQyxJQUFJLEVBQUFDLFVBQUEsR0FBQ3RCLFNBQVMsY0FBQXNCLFVBQUEsdUJBQVRBLFVBQUEsQ0FBV3JCLFNBQVMsQ0FBQztBQUFBdkMsNElBQUEsQ0FOL0ZzQixlQUFlLGdCQU9JLFVBQVUsQ0FBRXFDLElBQUksRUFBQUUsV0FBQSxHQUFDdkIsU0FBUyxjQUFBdUIsV0FBQSx1QkFBVEEsV0FBQSxDQUFXdEIsU0FBUyxDQUFDO0FBQUF2Qyw0SUFBQSxDQVB6RHNCLGVBQWUsaUJBU0lBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBOUQsNElBQUEsQ0FUaEZzQixlQUFlLGlCQVVJQSxnQkFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFBQTlELDRJQUFBLENBVmhGc0IsZUFBZSxpQkFXSUEsZ0JBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE5RCw0SUFBQSxDQVhoRnNCLGVBQWUsaUJBWUlBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBOUQsNElBQUEsQ0FaaEZzQixlQUFlLGlCQWFJQSxnQkFBZSxDQUFDQyxzQkFBc0IsQ0FBQ3VDLFFBQVEsQ0FBQyxZQUFZLENBQUM7QUFBQTlELDRJQUFBLENBYmhGc0IsZUFBZSxpQkFjSUEsZ0JBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QyxRQUFRLENBQUMsWUFBWSxDQUFDO0FBQUE5RCw0SUFBQSxDQWRoRnNCLGVBQWUsaUJBZUlBLGdCQUFlLENBQUNDLHNCQUFzQixDQUFDdUMsUUFBUSxDQUFDLFlBQVksQ0FBQztBQUFBOUQsNElBQUEsQ0FmaEZzQixlQUFlLGlCQWdCSUEsZ0JBQWUsQ0FBQ0Msc0JBQXNCLENBQUN1QyxRQUFRLENBQUMsWUFBWSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ25Cckc7QUFDQTtBQUNBO0FBQ3FEO0FBQ0M7QUFDVTtBQUNMO0FBQ1c7QUFBQSxJQUVqREssNEJBQTRCO0VBQUEsU0FBQUEsNkJBQUE7SUFBQXBFLDRJQUFBLE9BQUFvRSw0QkFBQTtFQUFBO0VBQUEsT0FBQTdELHlJQUFBLENBQUE2RCw0QkFBQTtJQUFBNUQsR0FBQTtJQUFBRSxLQUFBLEVBQy9DLFNBQUEyRCxjQUFjQSxDQUFDQyxJQUFZLEVBQVU7TUFDbkMsT0FBTyxJQUFJLENBQUNDLCtCQUErQixDQUFDRCxJQUFJLENBQUMsSUFDL0MsSUFBSSxDQUFDRSxrQ0FBa0MsSUFBQWxCLE1BQUEsQ0FBSWdCLElBQUksd0JBQXFCLENBQUMsSUFDckUsSUFBSSxDQUFDRyxrQkFBa0IsQ0FBQ0gsSUFBSSxDQUFDO0lBQ2pDO0VBQUM7SUFBQTlELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFnRSxlQUFlQSxDQUFDSixJQUFZLEVBQVc7TUFDckMsSUFBTTVELEtBQUssR0FBRyxJQUFJLENBQUM2RCwrQkFBK0IsQ0FBQ0QsSUFBSSxDQUFDO01BRXhELElBQUk1RCxLQUFLLEVBQUU7UUFDVCxPQUFPQSxLQUFLLEtBQUssTUFBTSxJQUFJQSxLQUFLLEtBQUssR0FBRyxJQUFJQSxLQUFLLEtBQUssSUFBSTtNQUM1RDtNQUVBLElBQU1pRSxZQUFZLEdBQUcsSUFBSSxDQUFDSCxrQ0FBa0MsSUFBQWxCLE1BQUEsQ0FBSWdCLElBQUksd0JBQXFCLENBQUM7TUFFMUYsSUFBSUssWUFBWSxFQUFFO1FBQ2hCLE9BQU9BLFlBQVksS0FBSyxNQUFNLElBQUlBLFlBQVksS0FBSyxHQUFHLElBQUlBLFlBQVksS0FBSyxJQUFJO01BQ2pGO01BRUEsT0FBTyxJQUFJLENBQUNDLG1CQUFtQixDQUFDTixJQUFJLENBQUMsS0FBSyxJQUFJO0lBQ2hEO0VBQUM7SUFBQTlELEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEQ7TUFDMUQsT0FBTztRQUNMLHNCQUFzQixFQUFFMEQsdUVBQXFCLENBQUNVLHlDQUF5QyxDQUFDWCxpRUFBZ0IsQ0FBQ1kscUJBQXFCLENBQUM7UUFDL0gsc0JBQXNCLEVBQUViLG1FQUFtQixDQUFDYyxxQ0FBcUMsQ0FBQ2YsOERBQWMsQ0FBQ2dCLG1CQUFtQixDQUFDO1FBQ3JILDhCQUE4QixFQUFFZixtRUFBbUIsQ0FBQ2MscUNBQXFDLENBQUNmLDhEQUFjLENBQUNpQiwwQkFBMEIsQ0FBQztRQUNwSSxnQ0FBZ0MsRUFBRWhCLG1FQUFtQixDQUFDYyxxQ0FBcUMsQ0FBQ2YsOERBQWMsQ0FBQ2tCLDRCQUE0QixDQUFDO1FBQ3hJLHNCQUFzQixFQUFFLEVBQUU7UUFDMUIsWUFBWSxFQUFFLEVBQUU7UUFDaEIsaUJBQWlCLEVBQUU7TUFDckIsQ0FBQztJQUNIO0VBQUM7SUFBQTFFLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0Q7TUFDN0QsT0FBTztRQUNMLHVDQUF1QyxFQUFFLElBQUk7UUFDN0MsZ0RBQWdELEVBQUUsSUFBSTtRQUN0RCw0Q0FBNEMsRUFBRSxJQUFJO1FBQ2xELGtEQUFrRCxFQUFFO01BQ3RELENBQUM7SUFDSDtFQUFDO0lBQUFELEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVE2RCwrQkFBK0JBLENBQUNELElBQVksRUFBc0I7TUFDeEUsSUFBTWEsU0FBUyxHQUFHMUYsZ0VBQVcsQ0FBQzJGLHFCQUFxQixlQUFBOUIsTUFBQSxDQUFlZ0IsSUFBSSxPQUFJLENBQUM7TUFFM0UsSUFBSSxDQUFDYSxTQUFTLEVBQUU7UUFDZDtNQUNGO01BRUEsSUFBTXpFLEtBQUssR0FBR3lFLFNBQVMsQ0FBQ0UsWUFBWSxDQUFDLE9BQU8sQ0FBQztNQUU3QyxJQUFJLENBQUMzRSxLQUFLLEVBQUU7UUFDVjtNQUNGO01BRUEsT0FBT0EsS0FBSztJQUNkO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUThELGtDQUFrQ0EsQ0FBQ0YsSUFBWSxFQUFzQjtNQUMzRSxJQUFNZ0IscUJBQXFCLEdBQUcsSUFBSSxDQUFDZiwrQkFBK0IsQ0FBQ0QsSUFBSSxDQUFDO01BRXhFLElBQUksQ0FBQ2dCLHFCQUFxQixFQUFFO1FBQzFCO01BQ0Y7TUFFQSxJQUFNNUUsS0FBSyxHQUFHLElBQUlqQixnRUFBVyxDQUFDOEYsZUFBZSxDQUFDOUYsZ0VBQVcsQ0FBQytGLGNBQWMsQ0FBQyxDQUFDL0UsR0FBRyxDQUFDNkUscUJBQXFCLENBQUMsSUFBSUcsU0FBUztNQUVqSCxJQUFJLENBQUMvRSxLQUFLLEVBQUU7UUFDVjtNQUNGO01BRUEsT0FBT0EsS0FBSztJQUNkO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNuRkg7QUFDQTtBQUNBO0FBQ3FEO0FBQ1k7QUFBQSxJQUU1Q2lGLHVCQUF1QjtFQTBCMUMsU0FBQUEsd0JBQUEsRUFBc0I7SUFBQTNGLDRJQUFBLE9BQUEyRix1QkFBQTtJQUNwQixNQUFNLElBQUlDLEtBQUssQ0FBQyx3RUFBd0UsQ0FBQztFQUMzRjtFQUFDLE9BQUFyRix5SUFBQSxDQUFBb0YsdUJBQUE7SUFBQW5GLEdBQUE7SUFBQUUsS0FBQSxFQTNCRCxTQUFPbUYsc0JBQXNCQSxDQUFBLEVBQVM7TUFDcEMsSUFBSUgsc0VBQWlCLENBQUNJLHVDQUF1QyxFQUFFO1FBQzdELElBQUksQ0FBQ0MsNEJBQTRCLENBQUMsQ0FBQztNQUNyQztJQUNGO0VBQUM7SUFBQXZGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWVxRiw0QkFBNEJBLENBQUEsRUFBUztNQUNsRCxJQUFJTCxzRUFBaUIsQ0FBQ00seUJBQXlCLEVBQUU7UUFDL0N2RyxnRUFBVyxDQUFDd0csY0FBYyxDQUFDLElBQUksQ0FBQ0MsdUNBQXVDLENBQUNDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztNQUNyRixDQUFDLE1BQU07UUFDTDFHLGdFQUFXLENBQUMyRyxVQUFVLENBQUMsSUFBSSxDQUFDRix1Q0FBdUMsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztNQUNwRjtJQUNGO0VBQUM7SUFBQTNGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWV3Rix1Q0FBdUNBLENBQUEsRUFBUztNQUM3RCxJQUFJRyxHQUE0QixHQUFHNUcsZ0VBQVcsQ0FBQzZHLHFCQUFxQixDQUFtQixLQUFLLENBQUM7TUFFN0ZELEdBQUcsQ0FBQ0UsR0FBRyxHQUFHOUcsZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQ0MsZUFBZSxDQUFDLElBQUlDLElBQUksQ0FBQyxDQUFDLElBQUlDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO01BQy9FTixHQUFHLENBQUNPLE9BQU8sR0FBRyxZQUFXO1FBQ3ZCbkgsZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQ0ssZUFBZSxDQUFDLElBQUksQ0FBQ04sR0FBRyxDQUFDO1FBRXpDRixHQUFHLEdBQUcsSUFBSTtNQUNaLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM5Qkg7QUFDQTtBQUNBO0FBQ3FEO0FBRVQ7QUFDUTtBQUNoQjtBQUFBLElBRWZTLGNBQWM7RUFPakMsU0FBQUEsZUFBQSxFQUFjO0lBQUE5Ryw0SUFBQSxPQUFBOEcsY0FBQTtJQUFBN0csNElBQUEsdUJBTmtDLElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUFBTSw0SUFBQSx1QkFDM0JSLGdFQUFXLENBQUNzSCxtQkFBbUIsS0FBS3RCLFNBQVM7SUFBQXhGLDRJQUFBLGVBQzdDLElBQUlMLG1EQUFPLENBQUM2RixTQUFTLENBQUM7SUFBQXhGLDRJQUFBLHlCQUNaLElBQUlMLG1EQUFPLENBQUM2RixTQUFTLENBQUM7SUFBQXhGLDRJQUFBLHNDQUNULElBQUlMLG1EQUFPLENBQUM2RixTQUFTLENBQUM7SUFHcEYsSUFBSSxDQUFDLElBQUksQ0FBQ3VCLFdBQVcsRUFBRTtNQUNyQjtJQUNGO0lBRUEsSUFBSSxDQUFDQywyQkFBMkIsQ0FBQyxDQUFDO0lBQ2xDLElBQUksQ0FBQ0MsZ0JBQWdCLENBQUMsQ0FBQztFQUN6QjtFQUFDLE9BQUEzRyx5SUFBQSxDQUFBdUcsY0FBQTtJQUFBdEcsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQjtNQUN6QixPQUFPLElBQUksQ0FBQzBHLFlBQVk7SUFDMUI7RUFBQztJQUFBM0csR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQjtNQUN6QixPQUFPLElBQUksQ0FBQzJHLElBQUk7SUFDbEI7RUFBQztJQUFBNUcsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFxQztNQUNuQyxPQUFPLElBQUksQ0FBQzRHLGNBQWM7SUFDNUI7RUFBQztJQUFBN0csR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrRDtNQUNoRCxPQUFPLElBQUksQ0FBQzZHLDJCQUEyQjtJQUN6QztFQUFDO0lBQUE5RyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxPQUFPQSxDQUFBLEVBQVM7TUFDZCxJQUFJLENBQUNDLFlBQVksQ0FBQ0QsT0FBTyxDQUFDLENBQUM7SUFDN0I7RUFBQztJQUFBTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRNkcsNkJBQTZCQSxDQUFBLEVBQVc7TUFBQSxJQUFBQyxJQUFBLEVBQUFDLHFCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQzlDLFFBQUFILElBQUEsSUFBQUMscUJBQUEsSUFBQUMsc0JBQUEsR0FBT2pJLGdFQUFXLENBQUNzSCxtQkFBbUIsY0FBQVcsc0JBQUEsdUJBQS9CQSxzQkFBQSxDQUFpQ0UsUUFBUSxjQUFBSCxxQkFBQSxjQUFBQSxxQkFBQSxJQUFBRSxzQkFBQSxHQUFJbEksZ0VBQVcsQ0FBQ3NILG1CQUFtQixjQUFBWSxzQkFBQSx1QkFBL0JBLHNCQUFBLENBQWlDRSxXQUFXLGNBQUFMLElBQUEsY0FBQUEsSUFBQSxHQUFJLENBQUMsQ0FBQztJQUN4RztFQUFDO0lBQUFoSCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRb0gsZ0JBQWdCQSxDQUFBLEVBQVc7TUFBQSxJQUFBQyxLQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLHNCQUFBO01BQ2pDLFFBQUFILEtBQUEsSUFBQUMsc0JBQUEsSUFBQUMsc0JBQUEsR0FBT3hJLGdFQUFXLENBQUNzSCxtQkFBbUIsY0FBQWtCLHNCQUFBLHVCQUEvQkEsc0JBQUEsQ0FBaUNFLGFBQWEsY0FBQUgsc0JBQUEsY0FBQUEsc0JBQUEsSUFBQUUsc0JBQUEsR0FBSXpJLGdFQUFXLENBQUNzSCxtQkFBbUIsY0FBQW1CLHNCQUFBLHVCQUEvQkEsc0JBQUEsQ0FBaUNFLElBQUksY0FBQUwsS0FBQSxjQUFBQSxLQUFBLEdBQUksU0FBUztJQUM3RztFQUFDO0lBQUF2SCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMkgsZ0JBQWdCQSxDQUFBLEVBQVc7TUFBQSxJQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTtNQUNqQyxRQUFBRCxzQkFBQSxJQUFBQyxzQkFBQSxHQUFPOUksZ0VBQVcsQ0FBQ3NILG1CQUFtQixjQUFBd0Isc0JBQUEsdUJBQS9CQSxzQkFBQSxDQUFpQ0MsR0FBRyxjQUFBRixzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLENBQUMsQ0FBQztJQUNuRDtFQUFDO0lBQUE5SCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRdUcsMkJBQTJCQSxDQUFBLEVBQVM7TUFBQSxJQUFBbEcsS0FBQTtRQUFBMEgsc0JBQUE7TUFDMUMsSUFBTUMsUUFBUSxHQUFHLFNBQVhBLFFBQVFBLENBQUE7UUFBQSxPQUFlM0gsS0FBSSxDQUFDbUcsZ0JBQWdCLENBQUMsQ0FBQztNQUFBO01BRXBELENBQUF1QixzQkFBQSxHQUFBaEosZ0VBQVcsQ0FBQ3NILG1CQUFtQixjQUFBMEIsc0JBQUEsdUJBQS9CQSxzQkFBQSxDQUFpQ0UsZ0JBQWdCLENBQUMsUUFBUSxFQUFFRCxRQUFRLENBQUM7TUFFckUsSUFBSSxDQUFDNUgsWUFBWSxDQUFDTSxHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUM7UUFBQSxJQUFBa0osdUJBQUE7UUFBQSxRQUFBQSx1QkFBQSxHQUFNbkosZ0VBQVcsQ0FBQ3NILG1CQUFtQixjQUFBNkIsdUJBQUEsdUJBQS9CQSx1QkFBQSxDQUFpQ0MsbUJBQW1CLENBQUMsUUFBUSxFQUFFSCxRQUFRLENBQUM7TUFBQSxFQUFDLENBQUM7SUFDdkg7RUFBQztJQUFBbEksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXdHLGdCQUFnQkEsQ0FBQSxFQUFTO01BQy9CLElBQUksQ0FBQ0UsSUFBSSxDQUFDMUcsS0FBSyxHQUFHLElBQUksQ0FBQzJILGdCQUFnQixDQUFDLENBQUM7TUFDekMsSUFBSSxDQUFDaEIsY0FBYyxDQUFDM0csS0FBSyxHQUFHLElBQUksQ0FBQ29ILGdCQUFnQixDQUFDLENBQUM7TUFDbkQsSUFBSSxDQUFDUiwyQkFBMkIsQ0FBQzVHLEtBQUssR0FBRyxJQUFJLENBQUM2Ryw2QkFBNkIsQ0FBQyxDQUFDO0lBQy9FO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNyRUg7QUFDQTtBQUNBO0FBQ2lEO0FBQ0Y7QUFDTjtBQUVaO0FBQ3VCO0FBRTdDLElBQU00QixtQkFBbUI7RUFPOUIsU0FBQUEsb0JBQVlDLFlBQW9CLEVBQUU7SUFBQXBKLDRJQUFBLE9BQUFtSixtQkFBQTtJQUFBbEosNElBQUEsa0JBTkVpSiw2REFBYSxDQUFDRyxTQUFTLENBQUMscUJBQXFCLENBQUM7SUFBQXBKLDRJQUFBLHlCQUNoRGdKLGdEQUFHLENBQUNLLGNBQWM7SUFBQXJKLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBLDJCQUd6QixLQUFLO0lBRzlCLElBQUksQ0FBQ3NKLFVBQVUsR0FBR3JKLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7SUFDNUIsSUFBSSxDQUFDcUosYUFBYSxHQUFHSixZQUFZO0VBQ25DO0VBQUMsT0FBQTdJLHlJQUFBLENBQUE0SSxtQkFBQTtJQUFBM0ksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQStJLE9BQU9BLENBQUNDLFFBQVEsRUFBUTtNQUN0QixJQUFJLENBQUNDLGtCQUFrQixDQUFDYiw0REFBVyxDQUFDYyxjQUFjLEVBQUVGLFFBQVEsQ0FBQztJQUMvRDtFQUFDO0lBQUFsSixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbUosSUFBSUEsQ0FBQSxFQUFTO01BQ1gsSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ2IsNERBQVcsQ0FBQ2dCLFdBQVcsQ0FBQztJQUNsRDtFQUFDO0lBQUF0SixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRaUosa0JBQWtCQSxDQUFDSSxVQUF1QixFQUFFTCxRQUFpQixFQUFRO01BQzNFLElBQUksSUFBSSxDQUFDTSxnQkFBZ0IsRUFBRTtRQUN6QjtNQUNGO01BRUEsSUFBSSxDQUFDQSxnQkFBZ0IsR0FBRyxJQUFJO01BRTVCLElBQU03SixHQUFHLEdBQUdELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7TUFDdEIsSUFBTThKLFNBQVMsR0FBRzlKLEdBQUcsR0FBRyxJQUFJLENBQUNvSixVQUFVO01BQ3ZDLElBQU1XLFVBQVUsR0FBRyxJQUFJbkIsMkRBQVUsQ0FBQ2dCLFVBQVUsQ0FBQyxDQUFDSSxPQUFPLENBQUMsQ0FBQztNQUV2RCxJQUFJLENBQUNiLGNBQWMsQ0FBQ2MsSUFBSSxDQUFDO1FBQ3ZCTCxVQUFVLEVBQVZBLFVBQVU7UUFDVk0sT0FBTyxFQUFFLENBQUNsSyxHQUFHLEdBQUcsSUFBSSxDQUFDcUosYUFBYSxJQUFJLElBQUk7UUFDMUM5SSxLQUFLLEVBQUU7VUFBQzRKLE1BQU0sRUFBRUw7UUFBUyxDQUFDO1FBQzFCUCxRQUFRLEVBQVJBO01BQ0YsQ0FBQyxDQUFDO01BRUYsSUFBSSxDQUFDYSxPQUFPLENBQUNDLElBQUksQ0FDZixzQ0FBc0MsRUFDdEMsSUFBSXhCLHNEQUFTLENBQUM3SSxHQUFHLEdBQUcsSUFBSSxDQUFDcUosYUFBYSxDQUFDLENBQUNpQixXQUFXLENBQUMsQ0FBQyxFQUNyRGYsUUFBUSxFQUNSUSxVQUFVLEVBQ1YsSUFBSWxCLHNEQUFTLENBQUNpQixTQUFTLENBQUMsQ0FBQ1EsV0FBVyxDQUFDLENBQ3ZDLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2REg7QUFDQTtBQUNBO0FBQ29EO0FBRWhCO0FBR3BDLElBQU1FLG1CQUFtQixHQUFHLFNBQVM7QUFBQyxJQUVqQkMsY0FBYztFQUFBLFNBQUFBLGVBQUE7SUFBQTVLLDRJQUFBLE9BQUE0SyxjQUFBO0VBQUE7RUFBQSxPQUFBcksseUlBQUEsQ0FBQXFLLGNBQUE7SUFBQXBLLEdBQUE7SUFBQUUsS0FBQSxFQUdqQyxTQUFPbUssVUFBVUEsQ0FBQ0MsS0FBdUIsRUFBYTtNQUNwRCxJQUFJLENBQUMsSUFBSSxDQUFDQyx1QkFBdUIsQ0FBQ0QsS0FBSyxDQUFDLEVBQUU7UUFDeENGLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVGLEtBQUssQ0FBQztRQUU5RCxPQUFPLElBQUlKLGtEQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO01BRUEsSUFBSTtRQUNGLElBQU1PLFlBQVksR0FBR0MsSUFBSSxDQUFDSixLQUFLLENBQUNLLE1BQU0sQ0FBQ1IsbUJBQW1CLENBQUNTLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLElBQU1DLFNBQVMsR0FBR0MsSUFBSSxDQUFDQyxLQUFLLENBQUNOLFlBQVksQ0FBQztRQUUxQ0ksU0FBUyxDQUFDUCxLQUFLLEdBQUdRLElBQUksQ0FBQ0MsS0FBSyxDQUFDRixTQUFTLENBQUNQLEtBQUssQ0FBQztRQUU3QyxPQUFPLElBQUlKLGtEQUFTLENBQUNXLFNBQVMsQ0FBQztNQUNqQyxDQUFDLENBQUMsT0FBT0csQ0FBQyxFQUFFO1FBQ1ZaLGNBQWMsQ0FBQ0wsT0FBTyxDQUFDUyxLQUFLLENBQUMsMEJBQTBCLEVBQUVRLENBQUMsQ0FBQztRQUUzRCxPQUFPLElBQUlkLGtEQUFTLENBQUMsSUFBSSxDQUFDO01BQzVCO0lBQ0Y7RUFBQztJQUFBbEssR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3FLLHVCQUF1QkEsQ0FBQ0QsS0FBdUIsRUFBVztNQUMvRCxPQUFPLENBQUMsQ0FBQ0EsS0FBSyxJQUFJQSxLQUFLLENBQUNXLFVBQVUsQ0FBQ2QsbUJBQW1CLENBQUM7SUFDekQ7RUFBQztBQUFBO0FBQUExSyw0SUFBQSxDQTFCa0IySyxjQUFjLGFBQ0MxQiw2REFBYSxDQUFDRyxTQUFTLENBQUMsZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNYN0U7QUFDQTtBQUNBO0FBQ3FEO0FBQUEsSUFZaENxQixTQUFTO0VBSTVCLFNBQUFBLFVBQVlXLFNBQXFCLEVBQUU7SUFBQSxJQUFBSyxnQkFBQSxFQUFBQyxpQkFBQTtJQUFBM0wsNElBQUEsT0FBQTBLLFNBQUE7SUFBQXpLLDRJQUFBO0lBQUFBLDRJQUFBO0lBQ2pDLElBQUksQ0FBQzJMLGNBQWMsR0FBRyxDQUFBUCxTQUFTLGFBQVRBLFNBQVMsdUJBQVRBLFNBQVMsQ0FBRVEsYUFBYSxLQUFJLEVBQUU7SUFDcEQsSUFBSSxDQUFDQyxNQUFNLEdBQUc7TUFDWkMsR0FBRyxFQUFFVixTQUFTLGFBQVRBLFNBQVMsZ0JBQUFLLGdCQUFBLEdBQVRMLFNBQVMsQ0FBRVAsS0FBSyxjQUFBWSxnQkFBQSxlQUFoQkEsZ0JBQUEsQ0FBa0JLLEdBQUcsR0FBRyxJQUFJdE0sZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQzZFLFNBQVMsQ0FBQ1AsS0FBSyxDQUFDaUIsR0FBRyxDQUFDLEdBQUcsSUFBSTtNQUM1RUMsWUFBWSxFQUFFLENBQUFYLFNBQVMsYUFBVEEsU0FBUyx3QkFBQU0saUJBQUEsR0FBVE4sU0FBUyxDQUFFUCxLQUFLLGNBQUFhLGlCQUFBLHVCQUFoQkEsaUJBQUEsQ0FBa0JLLFlBQVksS0FBSTtJQUNsRCxDQUFDO0VBQ0g7RUFBQyxPQUFBekwseUlBQUEsQ0FBQW1LLFNBQUE7SUFBQWxLLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0I7TUFDcEIsT0FBTyxJQUFJLENBQUNxTCxNQUFNLENBQUNDLEdBQUc7SUFDeEI7RUFBQztJQUFBdkwsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QjtNQUMzQixPQUFPLElBQUksQ0FBQ3FMLE1BQU0sQ0FBQ0UsWUFBWTtJQUNqQztFQUFDO0lBQUF4TCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sSUFBSSxDQUFDbUwsY0FBYztJQUM1QjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JDSDtBQUNBO0FBQ0E7QUFGQSxJQWFxQkssYUFBYTtFQUFBLFNBQUFBLGNBQUE7SUFBQWpNLDRJQUFBLE9BQUFpTSxhQUFBO0VBQUE7RUFBQSxPQUFBMUwseUlBQUEsQ0FBQTBMLGFBQUE7SUFBQXpMLEdBQUE7SUFBQUMsR0FBQSxFQU1oQyxTQUFBQSxJQUFBLEVBQTBDO01BQ3hDLE9BQU8sSUFBSSxDQUFDeUwsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTFMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUMwTCxTQUFTO0lBQ3ZCO0VBQUM7SUFBQTNMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkM7TUFDM0MsT0FBTyxJQUFJLENBQUMyTCxZQUFZO0lBQzFCO0VBQUM7SUFBQTVMLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUMsT0FBTyxJQUFJLENBQUM0TCxhQUFhO0lBQzNCO0VBQUM7SUFBQTdMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU80TCxhQUFhQSxDQUFBLEVBQVM7TUFDM0IsSUFBSTtRQUNGLElBQU1DLFFBQVEsR0FBR0Msc0ZBQVk7UUFFN0IsSUFBSSxDQUFDTixvQkFBb0IsR0FBRyxxQkFBcUIsSUFBSUssUUFBUSxHQUFHQSxRQUFRLENBQUNFLG1CQUFtQixHQUFHLElBQUk7UUFDbkcsSUFBSSxDQUFDTixTQUFTLEdBQUcsVUFBVSxJQUFJSSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0csUUFBUSxHQUFHLEtBQUs7UUFDbkUsSUFBSSxDQUFDTixZQUFZLEdBQUcsYUFBYSxJQUFJRyxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ksV0FBVyxHQUFHLEtBQUs7UUFDNUUsSUFBSSxDQUFDTixhQUFhLEdBQUcsY0FBYyxJQUFJRSxRQUFRLEdBQUdBLFFBQVEsQ0FBQ0ssWUFBWSxHQUFHLEtBQUs7TUFDakYsQ0FBQyxDQUFDLE9BQU9wQixDQUFDLEVBQUU7UUFDVixJQUFJLENBQUNVLG9CQUFvQixHQUFHLElBQUk7UUFDaEMsSUFBSSxDQUFDQyxTQUFTLEdBQUcsS0FBSztRQUN0QixJQUFJLENBQUNDLFlBQVksR0FBRyxLQUFLO1FBQ3pCLElBQUksQ0FBQ0MsYUFBYSxHQUFHLEtBQUs7TUFDNUI7SUFDRjtFQUFDO0FBQUE7QUFBQXBNLDRJQUFBLENBcENrQmdNLGFBQWE7QUFBQWhNLDRJQUFBLENBQWJnTSxhQUFhO0FBQUFoTSw0SUFBQSxDQUFiZ00sYUFBYTtBQUFBaE0sNElBQUEsQ0FBYmdNLGFBQWE7QUFBQTtBQXVDbENBLGFBQWEsQ0FBQ0ssYUFBYSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNwRDdCO0FBQ0E7QUFDQTtBQUNxRDtBQUNBO0FBQUEsSUFFaEM1RyxpQkFBaUI7RUFBQSxTQUFBQSxrQkFBQTtJQUFBMUYsNElBQUEsT0FBQTBGLGlCQUFBO0VBQUE7RUFBQSxPQUFBbkYseUlBQUEsQ0FBQW1GLGlCQUFBO0lBQUFsRixHQUFBO0lBQUFDLEdBQUEsRUFDcEMsU0FBQUEsSUFBQSxFQUEwQztNQUN4QztNQUNBLE9BQU9jLDREQUFlLENBQUNzTCxVQUFVLElBQy9CdEwsNERBQWUsQ0FBQ3VMLFVBQVUsSUFDMUJ2TCw0REFBZSxDQUFDd0wsVUFBVSxJQUMxQnhMLDREQUFlLENBQUN5TCxVQUFVO0lBQzlCO0VBQUM7SUFBQXhNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNEM7TUFDMUM7TUFDQSxPQUFPYyw0REFBZSxDQUFDMEwsVUFBVSxJQUMvQjFMLDREQUFlLENBQUMyTCxVQUFVLElBQzFCM0wsNERBQWUsQ0FBQzRMLFVBQVUsSUFDMUI1TCw0REFBZSxDQUFDNkwsVUFBVTtJQUM5QjtFQUFDO0lBQUE1TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssUUFBUSxJQUFJOUwsNERBQWUsQ0FBQytMLG1CQUFtQixJQUFJLEVBQUU7SUFDOUY7RUFBQztJQUFBOU0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPYyw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFFBQVEsSUFBSTlMLDREQUFlLENBQUMrTCxtQkFBbUIsSUFBSSxFQUFFLElBQzFGL0wsNERBQWUsQ0FBQzhMLFdBQVcsS0FBSyxTQUFTLElBQUk5TCw0REFBZSxDQUFDK0wsbUJBQW1CLElBQUksRUFBRTtJQUMxRjtFQUFDO0lBQUE5TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssUUFBUSxJQUFJOUwsNERBQWUsQ0FBQytMLG1CQUFtQixJQUFJLEVBQUUsSUFDMUYvTCw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFNBQVMsSUFBSTlMLDREQUFlLENBQUMrTCxtQkFBbUIsSUFBSSxFQUFFO0lBQzFGO0VBQUM7SUFBQTlNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUQ7TUFDbkQsT0FBT2MsNERBQWUsQ0FBQzhMLFdBQVcsS0FBSyxRQUFRLElBQUk5TCw0REFBZSxDQUFDK0wsbUJBQW1CLElBQUksRUFBRTtJQUM5RjtFQUFDO0lBQUE5TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW9EO01BQ2xELE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssU0FBUyxJQUFJOUwsNERBQWUsQ0FBQytMLG1CQUFtQixJQUFJLEVBQUU7SUFDL0Y7RUFBQztJQUFBOU0sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF5QztNQUN2QyxPQUFPYyw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFFBQVEsSUFDN0M5TCw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLGdCQUFnQjtJQUNwRDtFQUFDO0lBQUE3TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBDO01BQ3hDLE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssSUFBSTtJQUM3QztFQUFDO0lBQUE3TSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThEO01BQzVELE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssUUFBUSxJQUFJLE9BQU81TixnRUFBVyxDQUFDNkcscUJBQXFCLEtBQUssVUFBVTtJQUM1RztFQUFDO0lBQUE5RixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU9jLDREQUFlLENBQUM4TCxXQUFXLEtBQUssUUFBUSxJQUFJOUwsNERBQWUsQ0FBQytMLG1CQUFtQixJQUFJLEVBQUUsSUFDMUYvTCw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFNBQVMsSUFBSTlMLDREQUFlLENBQUMrTCxtQkFBbUIsSUFBSSxFQUFFLElBQ3RGL0wsNERBQWUsQ0FBQzhMLFdBQVcsS0FBSyxRQUFRO0lBQzVDO0VBQUM7SUFBQTdNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0I7TUFDN0IsT0FBT2MsNERBQWUsQ0FBQ2EsUUFBUSxDQUFDLENBQUM7SUFDbkM7RUFBQztJQUFBNUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPLEVBQUUsT0FBTzhNLHlCQUF5QixLQUFLLFdBQVcsSUFDdkQsT0FBT0MseUJBQXlCLEtBQUssV0FBVyxDQUFDO0lBQ3JEO0VBQUM7SUFBQWhOLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMEQ7TUFDeEQsT0FBTyxPQUFPZ04sY0FBYyxLQUFLLFdBQVcsSUFBSSxPQUFPQSxjQUFjLENBQUNDLFNBQVMsQ0FBQ0Msb0JBQW9CLEtBQUssV0FBVztJQUN0SDtFQUFDO0lBQUFuTixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXVEO01BQ3JELE9BQU8sT0FBT21OLHFCQUFxQixLQUFLLFdBQVc7SUFDckQ7RUFBQztJQUFBcE4sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyRDtNQUN6RCxPQUFPLE9BQU9vTixnQkFBZ0IsQ0FBQ0gsU0FBUyxDQUFDSSx5QkFBeUIsS0FBSyxXQUFXO0lBQ3BGO0VBQUM7SUFBQXROLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBb0Q7TUFDbEQsT0FBT2MsNERBQWUsQ0FBQzhMLFdBQVcsS0FBSyxTQUFTLElBQUk5TCw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFFBQVE7SUFDOUY7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Rkg7QUFDQTtBQUNBO0FBRkEsSUFXcUJVLFVBQVU7RUFBQSxTQUFBQSxXQUFBO0lBQUEvTiw0SUFBQSxPQUFBK04sVUFBQTtFQUFBO0VBQUEsT0FBQXhOLHlJQUFBLENBQUF3TixVQUFBO0lBQUF2TixHQUFBO0lBQUFDLEdBQUEsRUFHN0IsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ3VOLG9CQUFvQjtJQUNsQztFQUFDO0lBQUF4TixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPdU4sZUFBZUEsQ0FBQSxFQUFTO01BQzdCLElBQUk7UUFDRixJQUFNQyxVQUFVLEdBQUdDLDJDQUFjO1FBRWpDLElBQUksQ0FBQ0gsb0JBQW9CLEdBQUcsV0FBVyxJQUFJRSxVQUFVLEdBQUdBLFVBQVUsQ0FBQ0UsU0FBUyxHQUFHO1VBQUNDLFVBQVUsRUFBRTtRQUFFLENBQUM7TUFDakcsQ0FBQyxDQUFDLE9BQU83QyxDQUFDLEVBQUU7UUFDVixJQUFJLENBQUN3QyxvQkFBb0IsR0FBRztVQUFDSyxVQUFVLEVBQUU7UUFBRSxDQUFDO01BQzlDO0lBQ0Y7RUFBQztBQUFBO0FBQUFwTyw0SUFBQSxDQWZrQjhOLFVBQVU7QUFBQTtBQWtCL0JBLFVBQVUsQ0FBQ0UsZUFBZSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3QjVCO0FBQ0E7QUFDQTs7QUFRTyxJQUFNeE8sV0FBVztFQU90QixTQUFBQSxZQUFBLEVBQWM7SUFBQU8sNElBQUEsT0FBQVAsV0FBQTtJQUFBUSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUNaLElBQUksQ0FBQ3FPLFNBQVMsR0FBR0MsUUFBUTtJQUN6QixJQUFJLENBQUNDLFNBQVMsR0FBR0MsUUFBUTtJQUN6QixJQUFJLENBQUM1SyxVQUFVLEdBQUd0QixTQUFTO0lBQzNCLElBQUksQ0FBQ21NLE9BQU8sR0FBR0MsTUFBTTtFQUN2QjtFQUFDLE9BQUFwTyx5SUFBQSxDQUFBZCxXQUFBO0lBQUFlLEdBQUE7SUFBQUMsR0FBQSxFQU1ELFNBQUFBLElBQUEsRUFBZ0M7TUFDOUIsT0FBTyxJQUFJLENBQUNpTyxPQUFPLENBQUNFLFFBQVE7SUFDOUI7RUFBQztJQUFBcE8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzQjtNQUNwQixPQUFPLElBQUksQ0FBQ2lPLE9BQU8sQ0FBQ2xJLEdBQUc7SUFDekI7RUFBQztJQUFBaEcsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPLElBQUksQ0FBQ2lPLE9BQU8sQ0FBQ25KLGVBQWU7SUFDckM7RUFBQztJQUFBL0UsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzSTtNQUNwSSxPQUFPLElBQUksQ0FBQzZOLFNBQVMsQ0FBQzNGLGdCQUFnQixDQUFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQ21JLFNBQVMsQ0FBQztJQUM3RDtFQUFDO0lBQUE5TixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW9JO01BQ2xJLE9BQU8sSUFBSSxDQUFDaU8sT0FBTyxDQUFDL0YsZ0JBQWdCLENBQUN4QyxJQUFJLENBQUMsSUFBSSxDQUFDdUksT0FBTyxDQUFDO0lBQ3pEO0VBQUM7SUFBQWxPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUQ7TUFDckQsT0FBTyxJQUFJLENBQUNpTyxPQUFPLENBQUNHLGFBQWEsQ0FBQzFJLElBQUksQ0FBQyxJQUFJLENBQUN1SSxPQUFPLENBQUM7SUFDdEQ7RUFBQztJQUFBbE8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFzRDtNQUNwRCxPQUFPLElBQUksQ0FBQ2lPLE9BQU8sQ0FBQ0ksWUFBWSxDQUFDM0ksSUFBSSxDQUFDLElBQUksQ0FBQ3VJLE9BQU8sQ0FBQztJQUNyRDtFQUFDO0lBQUFsTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1GO01BQ2pGLE9BQU8sSUFBSSxDQUFDNk4sU0FBUyxDQUFDUyxhQUFhLENBQUM1SSxJQUFJLENBQUMsSUFBSSxDQUFDbUksU0FBUyxDQUFDO0lBQzFEO0VBQUM7SUFBQTlOLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0M7TUFDcEMsT0FBTyxJQUFJLENBQUM2TixTQUFTLENBQUNVLFFBQVEsQ0FBQzdJLElBQUksQ0FBQyxJQUFJLENBQUNtSSxTQUFTLENBQUM7SUFDckQ7RUFBQztJQUFBOU4sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnQztNQUM5QixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUM2TixTQUFTLENBQUNXLE1BQU07SUFDaEM7RUFBQztJQUFBek8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwRjtNQUN4RixPQUFPLElBQUksQ0FBQzZOLFNBQVMsQ0FBQ1ksYUFBYSxDQUFDL0ksSUFBSSxDQUFDLElBQUksQ0FBQ21JLFNBQVMsQ0FBQztJQUMxRDtFQUFDO0lBQUE5TixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNGO01BQ3BGLE9BQU8sSUFBSSxDQUFDaU8sT0FBTyxDQUFDUyxLQUFLLENBQUNoSixJQUFJLENBQUMsSUFBSSxDQUFDdUksT0FBTyxDQUFDO0lBQzlDO0VBQUM7SUFBQWxPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBK0I7TUFDN0IsT0FBTyxJQUFJLENBQUMrTixTQUFTLENBQUNZLFFBQVE7SUFDaEM7RUFBQztJQUFBNU8sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2QjtNQUMzQixPQUFPLElBQUksQ0FBQytOLFNBQVMsQ0FBQ2EsTUFBTTtJQUM5QjtFQUFDO0lBQUE3TyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDb0QsVUFBVSxDQUFDeUwsVUFBVTtJQUNuQztFQUFDO0lBQUE5TyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlDO01BQy9CLE9BQU8sSUFBSSxDQUFDb0QsVUFBVSxDQUFDMEwsTUFBTTtJQUMvQjtFQUFDO0lBQUEvTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNEO01BQ3BELE9BQU8sSUFBSSxDQUFDaU8sT0FBTyxDQUFDekksY0FBYyxDQUFDRSxJQUFJLENBQUMsSUFBSSxDQUFDdUksT0FBTyxDQUFDO0lBQ3ZEO0VBQUM7SUFBQWxPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBeUk7TUFDdkksT0FBTyxJQUFJLENBQUM2TixTQUFTLENBQUN6RixtQkFBbUIsQ0FBQzFDLElBQUksQ0FBQyxJQUFJLENBQUNtSSxTQUFTLENBQUM7SUFDaEU7RUFBQztJQUFBOU4sR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1STtNQUNySSxPQUFPLElBQUksQ0FBQ2lPLE9BQU8sQ0FBQzdGLG1CQUFtQixDQUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQ3VJLE9BQU8sQ0FBQztJQUM1RDtFQUFDO0lBQUFsTyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdGO01BQ3RGLE9BQU8sSUFBSSxDQUFDaU8sT0FBTyxDQUFDYyxXQUFXLENBQUNySixJQUFJLENBQUMsSUFBSSxDQUFDdUksT0FBTyxDQUFDO0lBQ3BEO0VBQUM7SUFBQWxPLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUY7TUFDckYsT0FBTyxJQUFJLENBQUNpTyxPQUFPLENBQUN0SSxVQUFVLENBQUNELElBQUksQ0FBQyxJQUFJLENBQUN1SSxPQUFPLENBQUM7SUFDbkQ7RUFBQztJQUFBbE8sR0FBQTtJQUFBRSxLQUFBLEVBdEZELFNBQWMrTyxXQUFXQSxDQUFBLEVBQWlCO01BQ3hDLE9BQU9oUSxXQUFXLENBQUNpUSxTQUFTO0lBQzlCO0VBQUM7QUFBQTtBQXFGRkMsWUFBQSxHQXJHWWxRLFdBQVc7QUFBQVEsNElBQUEsQ0FBWFIsV0FBVyxlQUNtQixJQUFJQSxZQUFXLENBQUMsQ0FBQztBQXNHNUQsK0RBQWVBLFdBQVcsQ0FBQ2dRLFdBQVcsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2pIeEM7QUFDQTtBQUNBO0FBRkEsSUFLcUIvUCxVQUFVO0VBSTdCLFNBQUFBLFdBQVlrUSxVQUFzQixFQUFFO0lBQUE1UCw0SUFBQSxPQUFBTixVQUFBO0lBQUFPLDRJQUFBO0lBQUFBLDRJQUFBO0lBQ2xDLElBQUksQ0FBQzRQLFNBQVMsR0FBRyxLQUFLO0lBQ3RCLElBQUksQ0FBQ0MsV0FBVyxHQUFHRixVQUFVO0VBQy9CO0VBQUMsT0FBQXJQLHlJQUFBLENBQUFiLFVBQUE7SUFBQWMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxJQUFJLENBQUNnUCxTQUFTLEVBQUU7UUFDbEI7TUFDRjtNQUVBLElBQUksQ0FBQ0EsU0FBUyxHQUFHLElBQUk7TUFFckIsT0FBTyxJQUFJLENBQUNDLFdBQVcsQ0FBQ0MsSUFBSSxDQUFDLElBQUksQ0FBQztJQUNwQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3RCSDtBQUNBO0FBQ0E7QUFGQSxJQUtxQnBRLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFLLDRJQUFBLE9BQUFMLGNBQUE7SUFBQU0sNElBQUEsZ0JBQ08sRUFBRTtFQUFBO0VBQUEsT0FBQU0seUlBQUEsQ0FBQVosY0FBQTtJQUFBYSxHQUFBO0lBQUFFLEtBQUEsRUFFMUMsU0FBQVUsR0FBR0EsQ0FBQ3dPLFVBQXVCLEVBQVE7TUFDakMsSUFBSSxDQUFDSSxLQUFLLENBQUM1RixJQUFJLENBQUN3RixVQUFVLENBQUM7SUFDN0I7RUFBQztJQUFBcFAsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDbVAsS0FBSyxDQUFDQyxPQUFPLENBQUMsVUFBQUwsVUFBVTtRQUFBLE9BQUlBLFVBQVUsQ0FBQy9PLE9BQU8sQ0FBQyxDQUFDO01BQUEsRUFBQztNQUN0RCxJQUFJLENBQUNtUCxLQUFLLENBQUM1RSxNQUFNLEdBQUcsQ0FBQztJQUN2QjtFQUFDO0lBQUE1SyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBd1AsUUFBUUEsQ0FBQSxFQUFXO01BQ2pCLHFDQUFBNU0sTUFBQSxDQUFxQyxJQUFJLENBQUMwTSxLQUFLLENBQUM1RSxNQUFNO0lBQ3hEO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkJIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsSUFBTStFLHdCQUF3QixHQUFHLEVBQUU7QUFBQyxJQUVmQyxPQUFPO0VBNEMxQixTQUFBQSxRQUFBLEVBQXNCO0lBQUFwUSw0SUFBQSxPQUFBb1EsT0FBQTtJQUNwQixNQUFNLElBQUl4SyxLQUFLLENBQUMsd0RBQXdELENBQUM7RUFDM0U7RUFBQyxPQUFBckYseUlBQUEsQ0FBQTZQLE9BQUE7SUFBQTVQLEdBQUE7SUFBQUUsS0FBQSxFQTdDRCxTQUFPMlAsaUJBQWlCQSxDQUFDM1AsS0FBYSxFQUFVO01BQzlDLElBQUk0UCx5QkFBeUIsR0FBRyxDQUFDO01BQ2pDLElBQUlDLE1BQU0sR0FBRzdQLEtBQUs7TUFFbEIsSUFBSTZQLE1BQU0sR0FBRyxDQUFDLEVBQUU7UUFDZEEsTUFBTSxJQUFJLENBQUMsQ0FBQztRQUNaRCx5QkFBeUIsRUFBRTtNQUM3QjtNQUVBLE9BQU9GLE9BQU8sQ0FBQ0ksd0JBQXdCLENBQUNELE1BQU0sQ0FBQyxHQUFHRCx5QkFBeUIsSUFBSUMsTUFBTSxLQUFLRSxJQUFJLENBQUNDLEtBQUssQ0FBQ0gsTUFBTSxDQUFDLEdBQUdILE9BQU8sQ0FBQ08sdUJBQXVCLENBQUNKLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDaks7RUFBQztJQUFBL1AsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZWtRLFdBQVdBLENBQUNsUSxLQUFhLEVBQUVtUSxTQUFpQixFQUFVO01BQ25FLElBQU1DLEtBQUssR0FBR0wsSUFBSSxDQUFDTSxHQUFHLENBQUMsRUFBRSxFQUFFRixTQUFTLENBQUM7TUFFckMsT0FBT0osSUFBSSxDQUFDTyxLQUFLLENBQUN0USxLQUFLLEdBQUdvUSxLQUFLLENBQUMsR0FBR0EsS0FBSztJQUMxQztFQUFDO0lBQUF0USxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFlOFAsd0JBQXdCQSxDQUFDOVAsS0FBYSxFQUFVO01BQzdELElBQUl1USxtQkFBbUIsR0FBRyxDQUFDO01BQzNCLElBQUlWLE1BQU0sR0FBRzdQLEtBQUs7TUFFbEIsT0FBTzZQLE1BQU0sSUFBSSxFQUFFLEVBQUU7UUFDbkJBLE1BQU0sR0FBR0EsTUFBTSxHQUFHLEVBQUU7UUFDcEJVLG1CQUFtQixFQUFFO01BQ3ZCO01BRUEsT0FBT0EsbUJBQW1CO0lBQzVCO0VBQUM7SUFBQXpRLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWVpUSx1QkFBdUJBLENBQUNqUSxLQUFhLEVBQVU7TUFDNUQsSUFBTXdRLGFBQWEsR0FBR3hRLEtBQUs7TUFDM0IsSUFBSXlRLGFBQWEsR0FBR1YsSUFBSSxDQUFDQyxLQUFLLENBQUNoUSxLQUFLLENBQUM7TUFDckMsSUFBSTBRLEtBQUssR0FBRyxDQUFDO01BRWIsT0FBT0QsYUFBYSxLQUFLRCxhQUFhLElBQUlFLEtBQUssR0FBR2pCLHdCQUF3QixFQUFFO1FBQzFFaUIsS0FBSyxFQUFFO1FBQ1BELGFBQWEsR0FBR2YsT0FBTyxDQUFDUSxXQUFXLENBQUNNLGFBQWEsRUFBRUUsS0FBSyxDQUFDO01BQzNEO01BRUEsT0FBT0EsS0FBSztJQUNkO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDaERIO0FBQ0E7QUFDQTtBQUZBLElBR3FCQyxPQUFPO0VBYTFCLFNBQUFBLFFBQUEsRUFBc0I7SUFBQXJSLDRJQUFBLE9BQUFxUixPQUFBO0lBQ3BCLE1BQU0sSUFBSXpMLEtBQUssQ0FBQyx3REFBd0QsQ0FBQztFQUMzRTtFQUFDLE9BQUFyRix5SUFBQSxDQUFBOFEsT0FBQTtJQUFBN1EsR0FBQTtJQUFBRSxLQUFBLEVBZEQsU0FBTzRRLE1BQU1BLENBQUNsRyxNQUFjLEVBQVU7TUFDcEMsSUFBTW1HLGtCQUFrQixHQUFHLFNBQXJCQSxrQkFBa0JBLENBQUEsRUFBaUI7UUFDdkMsT0FBT2QsSUFBSSxDQUFDYSxNQUFNLENBQUMsQ0FBQyxDQUFDcEIsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDMU0sU0FBUyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7TUFDcEQsQ0FBQztNQUVELElBQU1nTyxLQUFhLEdBQUdmLElBQUksQ0FBQ2dCLElBQUksQ0FBQ3JHLE1BQU0sR0FBRyxFQUFFLENBQUM7TUFFNUMsT0FBTyxJQUFJc0csS0FBSyxDQUFDRixLQUFLLENBQUMsQ0FBQ0csSUFBSSxDQUFDSixrQkFBa0IsQ0FBQyxDQUFDSyxNQUFNLENBQUMsVUFBQ0MsTUFBTSxFQUFFQyxJQUFJLEVBQUs7UUFDeEUsT0FBT0QsTUFBTSxHQUFHQyxJQUFJLENBQUMsQ0FBQztNQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUN0TyxTQUFTLENBQUMsQ0FBQyxFQUFFNEgsTUFBTSxDQUFDO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7OztBQ2RIO0FBQ0E7QUFDQTtBQUNPLFNBQVMyRyxpQkFBaUJBLENBQUNDLENBQVEsRUFBUztFQUNqRCxNQUFNLElBQUlwTSxLQUFLLHNCQUFBdEMsTUFBQSxDQUFzQjBPLENBQUMsb0NBQWlDLENBQUM7QUFDMUU7QUFFQSwrREFBZUQsaUJBQWlCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1BoQztBQUNBO0FBQ0E7QUFGQSxJQUtxQkUsU0FBUztFQUFBLFNBQUFBLFVBQUE7SUFBQWpTLDRJQUFBLE9BQUFpUyxTQUFBO0lBQUFoUyw0SUFBQSxxQkFDVyxFQUFFO0VBQUE7RUFBQSxPQUFBTSx5SUFBQSxDQUFBMFIsU0FBQTtJQUFBelIsR0FBQTtJQUFBQyxHQUFBLEVBRXpDLFNBQUFBLElBQUEsRUFBOEI7TUFDNUIsT0FBTyxJQUFJLENBQUN5UixVQUFVO0lBQ3hCO0VBQUM7SUFBQTFSLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFVLEdBQUdBLENBQUMrUSxRQUFtQixFQUFRO01BQzdCLElBQUksQ0FBQ0QsVUFBVSxDQUFDOUgsSUFBSSxDQUFDK0gsUUFBUSxDQUFDO0lBQ2hDO0VBQUM7SUFBQTNSLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwUixNQUFNQSxDQUFDRCxRQUFRLEVBQVE7TUFDckIsSUFBSSxDQUFDRCxVQUFVLEdBQUcsSUFBSSxDQUFDQSxVQUFVLENBQUNOLE1BQU0sQ0FBQyxVQUFDUyxLQUFLLEVBQUVDLElBQUksRUFBSztRQUN4RCxJQUFJLEVBQUVBLElBQUksS0FBS0gsUUFBUSxDQUFDLEVBQUU7VUFDeEJFLEtBQUssQ0FBQ2pJLElBQUksQ0FBQ2tJLElBQUksQ0FBQztRQUNsQjtRQUVBLE9BQU9ELEtBQUs7TUFDZCxDQUFDLEVBQUUsRUFBc0IsQ0FBQztJQUM1QjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4Qkg7QUFDQTtBQUNBOztBQUVzQztBQUFBLElBRWpCRyxlQUFlO0VBbUJsQyxTQUFBQSxnQkFBWUMsU0FBdUIsRUFBRTtJQUFBelMsNElBQUEsT0FBQXdTLGVBQUE7SUFBQXZTLDRJQUFBO0lBQ25DLElBQUksQ0FBQ3lTLFVBQVUsR0FBR0QsU0FBUztFQUM3QjtFQUFDLE9BQUFsUyx5SUFBQSxDQUFBaVMsZUFBQTtJQUFBaFMsR0FBQTtJQUFBRSxLQUFBLEVBbEJELFNBQUFpUyxHQUFHQSxDQUFDQyxRQUFzQixFQUFFQyxPQUFlLEVBQUVDLFFBQWdCLEVBQUVDLElBQVUsRUFBUTtNQUMvRSxJQUFJSCxRQUFRLEdBQUcsSUFBSSxDQUFDRixVQUFVLEVBQUU7UUFDOUI7TUFDRjtNQUVBLElBQU1NLFdBQVcsTUFBQTFQLE1BQUEsQ0FBTXlQLElBQUksQ0FBQ0UsV0FBVyxDQUFDLENBQUMsUUFBQTNQLE1BQUEsQ0FBS3dQLFFBQVEsU0FBQXhQLE1BQUEsQ0FBTWlQLGlEQUFZLENBQUNLLFFBQVEsQ0FBQyxRQUFBdFAsTUFBQSxDQUFLdVAsT0FBTyxDQUFFO01BRWhHLElBQUlELFFBQVEsR0FBR0wsaURBQVksQ0FBQ1csSUFBSSxFQUFFO1FBQ2hDQyxPQUFPLENBQUNSLEdBQUcsQ0FBQ0ssV0FBVyxDQUFDO1FBRXhCO01BQ0Y7TUFFQUcsT0FBTyxDQUFDbkksS0FBSyxDQUFDZ0ksV0FBVyxDQUFDO0lBQzVCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN2Qkg7QUFDQTtBQUNBO0FBQ0E7O0FBSWlFO0FBRTFELElBQUtULFlBQVksMEJBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFBLE9BQVpBLFlBQVk7QUFBQTtBQVN2QixJQUlvQmEsTUFBTTtFQWtNekIsU0FBQUEsT0FBWU4sUUFBZ0IsRUFBRU8sU0FBb0IsRUFBRVosU0FBMkIsRUFBRTtJQUFBelMsNElBQUEsT0FBQW9ULE1BQUE7SUFBQW5ULDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQy9FLElBQUksQ0FBQ3FULFNBQVMsR0FBR1IsUUFBUTtJQUN6QixJQUFJLENBQUNaLFVBQVUsR0FBR21CLFNBQVM7SUFDM0IsSUFBSSxDQUFDWCxVQUFVLEdBQUdELFNBQVM7RUFDN0I7RUFBQyxPQUFBbFMseUlBQUEsQ0FBQTZTLE1BQUE7SUFBQTVTLEdBQUE7SUFBQUMsR0FBQSxFQWpNRCxTQUFBQSxJQUFBLEVBQXVCO01BQ3JCLE9BQU8sSUFBSSxDQUFDNlMsU0FBUztJQUN2QjtFQUFDO0lBQUE5UyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJCO01BQ3pCLE9BQU8sSUFBSSxDQUFDeVIsVUFBVTtJQUN4QjtFQUFDO0lBQUExUixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWtDO01BQ2hDLE9BQU8sSUFBSSxDQUFDaVMsVUFBVTtJQUN4QjtFQUFDO0lBQUFsUyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNlMsS0FBS0EsQ0FBQSxFQUFxQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDYixVQUFVLENBQUNoUyxLQUFLLElBQUksSUFBSSxDQUFDZ1MsVUFBVSxDQUFDaFMsS0FBSyxHQUFHNlIsWUFBWSxDQUFDaUIsS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBQyxJQUFBLEdBQUFDLFNBQUEsQ0FBQXRJLE1BQUEsRUFITXVJLElBQUksT0FBQWpDLEtBQUEsQ0FBQStCLElBQUEsR0FBQUcsSUFBQSxNQUFBQSxJQUFBLEdBQUFILElBQUEsRUFBQUcsSUFBQTtRQUFKRCxJQUFJLENBQUFDLElBQUEsSUFBQUYsU0FBQSxDQUFBRSxJQUFBO01BQUE7TUFLWCxJQUFJLENBQUNqQixHQUFHLENBQUNKLFlBQVksQ0FBQ2lCLEtBQUssRUFBRUcsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7SUFBQW5ULEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtVCxLQUFLQSxDQUFBLEVBQXFCO01BQ3hCLElBQUksQ0FBQyxJQUFJLENBQUNuQixVQUFVLENBQUNoUyxLQUFLLElBQUksSUFBSSxDQUFDZ1MsVUFBVSxDQUFDaFMsS0FBSyxHQUFHNlIsWUFBWSxDQUFDdUIsS0FBSyxFQUFFO1FBQ3hFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFMLFNBQUEsQ0FBQXRJLE1BQUEsRUFITXVJLElBQUksT0FBQWpDLEtBQUEsQ0FBQXFDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKTCxJQUFJLENBQUFLLEtBQUEsSUFBQU4sU0FBQSxDQUFBTSxLQUFBO01BQUE7TUFLWCxJQUFJLENBQUNyQixHQUFHLENBQUNKLFlBQVksQ0FBQ3VCLEtBQUssRUFBRUgsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7SUFBQW5ULEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4SixJQUFJQSxDQUFBLEVBQXFCO01BQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUNrSSxVQUFVLENBQUNoUyxLQUFLLElBQUksSUFBSSxDQUFDZ1MsVUFBVSxDQUFDaFMsS0FBSyxHQUFHNlIsWUFBWSxDQUFDMEIsSUFBSSxFQUFFO1FBQ3ZFO01BQ0Y7TUFBQyxTQUFBQyxLQUFBLEdBQUFSLFNBQUEsQ0FBQXRJLE1BQUEsRUFIS3VJLElBQUksT0FBQWpDLEtBQUEsQ0FBQXdDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKUixJQUFJLENBQUFRLEtBQUEsSUFBQVQsU0FBQSxDQUFBUyxLQUFBO01BQUE7TUFLVixJQUFJLENBQUN4QixHQUFHLENBQUNKLFlBQVksQ0FBQzBCLElBQUksRUFBRU4sSUFBSSxDQUFDO0lBQ25DO0VBQUM7SUFBQW5ULEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwVCxJQUFJQSxDQUFBLEVBQXFCO01BQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMxQixVQUFVLENBQUNoUyxLQUFLLElBQUksSUFBSSxDQUFDZ1MsVUFBVSxDQUFDaFMsS0FBSyxHQUFHNlIsWUFBWSxDQUFDVyxJQUFJLEVBQUU7UUFDdkU7TUFDRjtNQUFDLFNBQUFtQixLQUFBLEdBQUFYLFNBQUEsQ0FBQXRJLE1BQUEsRUFIS3VJLElBQUksT0FBQWpDLEtBQUEsQ0FBQTJDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKWCxJQUFJLENBQUFXLEtBQUEsSUFBQVosU0FBQSxDQUFBWSxLQUFBO01BQUE7TUFLVixJQUFJLENBQUMzQixHQUFHLENBQUNKLFlBQVksQ0FBQ1csSUFBSSxFQUFFUyxJQUFJLENBQUM7SUFDbkM7RUFBQztJQUFBblQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXNLLEtBQUtBLENBQUEsRUFBcUI7TUFDeEIsSUFBSSxDQUFDLElBQUksQ0FBQzBILFVBQVUsQ0FBQ2hTLEtBQUssSUFBSSxJQUFJLENBQUNnUyxVQUFVLENBQUNoUyxLQUFLLEdBQUc2UixZQUFZLENBQUMzTSxLQUFLLEVBQUU7UUFDeEU7TUFDRjtNQUFDLFNBQUEyTyxLQUFBLEdBQUFiLFNBQUEsQ0FBQXRJLE1BQUEsRUFITXVJLElBQUksT0FBQWpDLEtBQUEsQ0FBQTZDLEtBQUEsR0FBQUMsS0FBQSxNQUFBQSxLQUFBLEdBQUFELEtBQUEsRUFBQUMsS0FBQTtRQUFKYixJQUFJLENBQUFhLEtBQUEsSUFBQWQsU0FBQSxDQUFBYyxLQUFBO01BQUE7TUFLWCxJQUFJLENBQUM3QixHQUFHLENBQUNKLFlBQVksQ0FBQzNNLEtBQUssRUFBRStOLElBQUksQ0FBQztJQUNwQztFQUFDO0lBQUFuVCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK1QsS0FBS0EsQ0FBQSxFQUFxQjtNQUN4QixJQUFJLENBQUMsSUFBSSxDQUFDL0IsVUFBVSxDQUFDaFMsS0FBSyxJQUFJLElBQUksQ0FBQ2dTLFVBQVUsQ0FBQ2hTLEtBQUssR0FBRzZSLFlBQVksQ0FBQ21DLEtBQUssRUFBRTtRQUN4RTtNQUNGO01BQUMsU0FBQUMsS0FBQSxHQUFBakIsU0FBQSxDQUFBdEksTUFBQSxFQUhNdUksSUFBSSxPQUFBakMsS0FBQSxDQUFBaUQsS0FBQSxHQUFBQyxLQUFBLE1BQUFBLEtBQUEsR0FBQUQsS0FBQSxFQUFBQyxLQUFBO1FBQUpqQixJQUFJLENBQUFpQixLQUFBLElBQUFsQixTQUFBLENBQUFrQixLQUFBO01BQUE7TUFLWCxJQUFJLENBQUNqQyxHQUFHLENBQUNKLFlBQVksQ0FBQ21DLEtBQUssRUFBRWYsSUFBSSxDQUFDO0lBQ3BDO0VBQUM7SUFBQW5ULEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFpUyxHQUFHQSxDQUFDa0MsS0FBYSxFQUFFbEIsSUFBUyxFQUFRO01BQUEsSUFBQTVTLEtBQUE7TUFDMUMsSUFBTWdTLElBQUksR0FBRyxJQUFJN1MsSUFBSSxDQUFDLENBQUM7TUFDdkIsSUFBTTJTLE9BQU8sR0FBRyxJQUFJLENBQUNpQyxtQkFBbUIsQ0FBQ25CLElBQUksQ0FBQztNQUU5QyxJQUFJLENBQUN6QixVQUFVLENBQUN4UixLQUFLLENBQUN1UCxPQUFPLENBQUMsVUFBQ2tDLFFBQW1CLEVBQUs7UUFDckRBLFFBQVEsQ0FBQ1EsR0FBRyxDQUFDa0MsS0FBSyxFQUFFaEMsT0FBTyxFQUFFOVIsS0FBSSxDQUFDK1IsUUFBUSxFQUFFQyxJQUFJLENBQUM7TUFDbkQsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBdlMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUW9VLG1CQUFtQkEsQ0FBQ25CLElBQVMsRUFBVTtNQUFBLElBQUFvQixNQUFBO01BQzdDLElBQUlDLHlCQUF5QixHQUFHckIsSUFBSSxDQUFDLENBQUMsQ0FBQztNQUN2QyxJQUFJc0IsS0FBSyxHQUFHLENBQUM7TUFFYixPQUFPRCx5QkFBeUIsQ0FBQzNSLE9BQU8sSUFBSXNRLElBQUksQ0FBQ3ZJLE1BQU0sR0FBRyxDQUFDLElBQUk2SixLQUFLLElBQUksQ0FBQyxFQUFFO1FBQ3pFQSxLQUFLLEdBQUdELHlCQUF5QixDQUFDM1IsT0FBTyxDQUFDLEdBQUcsRUFBRTRSLEtBQUssQ0FBQztRQUVyRCxJQUFJQSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1VBQ2IsSUFBTTdNLElBQUksR0FBRzRNLHlCQUF5QixDQUFDeFIsU0FBUyxDQUFDeVIsS0FBSyxHQUFHLENBQUMsRUFBRUEsS0FBSyxHQUFHLENBQUMsQ0FBQztVQUV0RSxRQUFRN00sSUFBSTtZQUNWLEtBQUssR0FBRztjQUNOO2NBQ0E0TSx5QkFBeUIsR0FBR0EseUJBQXlCLENBQUN4UixTQUFTLENBQUMsQ0FBQyxFQUFFeVIsS0FBSyxDQUFDLEdBQUdELHlCQUF5QixDQUFDeFIsU0FBUyxDQUFDeVIsS0FBSyxHQUFHLENBQUMsQ0FBQztjQUMxSEEsS0FBSyxFQUFFO2NBRVA7WUFDRixLQUFLLEdBQUc7WUFDUixLQUFLLEdBQUc7Y0FDTjtjQUNBdEIsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHcUIseUJBQXlCLEdBQUcsSUFBSSxDQUFDRSxlQUFlLENBQ3hELElBQUksQ0FBQ2hGLFFBQVEsQ0FBQ3lELElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QnFCLHlCQUF5QixFQUN6QkMsS0FDRixDQUFDO2NBQ0R0QixJQUFJLENBQUN3QixNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztjQUVqQjtZQUNGLEtBQUssR0FBRztjQUNOO2NBQ0F4QixJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUdxQix5QkFBeUIsR0FBRyxJQUFJLENBQUNFLGVBQWUsQ0FDeEQsSUFBSSxDQUFDRSxTQUFTLENBQUN6QixJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDdkJxQix5QkFBeUIsRUFDekJDLEtBQ0YsQ0FBQztjQUVEdEIsSUFBSSxDQUFDd0IsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7Y0FFakI7WUFDRjtjQUNFLE9BQU94QixJQUFJLENBQUN6RCxRQUFRLENBQUMsQ0FBQztVQUMxQjtRQUNGO01BQ0Y7TUFFQSxJQUFJeUQsSUFBSSxDQUFDdkksTUFBTSxHQUFHLENBQUMsRUFBRTtRQUNuQnVJLElBQUksR0FBR0EsSUFBSSxDQUFDL0IsTUFBTSxDQUFDLFVBQUN5RCxXQUFXLEVBQUVDLFlBQVksRUFBRUwsS0FBSyxFQUFFTSxLQUFLLEVBQUs7VUFDOUQsSUFBSU4sS0FBSyxHQUFHLENBQUMsS0FBS00sS0FBSyxDQUFDbkssTUFBTSxJQUFJa0ssWUFBWSxZQUFZMVAsS0FBSyxFQUFFO1lBQy9ELElBQUlGLHNFQUFpQixDQUFDOFAsNkJBQTZCLEVBQUU7Y0FDbkQsT0FBT0gsV0FBVyxHQUFHLElBQUksR0FBR04sTUFBSSxDQUFDN0UsUUFBUSxDQUFDb0YsWUFBWSxDQUFDRyxLQUFLLENBQUM7WUFDL0Q7WUFFQSxPQUFPSixXQUFXLEdBQUcsSUFBSSxHQUFHTixNQUFJLENBQUM3RSxRQUFRLENBQUNvRixZQUFZLENBQUN6QyxPQUFPLENBQUMsR0FBRyxJQUFJLEdBQUdrQyxNQUFJLENBQUM3RSxRQUFRLENBQUNvRixZQUFZLENBQUNHLEtBQUssQ0FBQztVQUM1RztVQUVBLE9BQU9KLFdBQVcsT0FBQS9SLE1BQUEsQ0FBT3lSLE1BQUksQ0FBQzdFLFFBQVEsQ0FBQ29GLFlBQVksQ0FBQyxNQUFHO1FBQ3pELENBQUMsQ0FBQztNQUNKO01BRUEsT0FBTzNCLElBQUksQ0FBQ3pELFFBQVEsQ0FBQyxDQUFDO0lBQ3hCO0VBQUM7SUFBQTFQLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVEwVSxTQUFTQSxDQUFDTSxHQUFRLEVBQVU7TUFDbEMsSUFBTUMsS0FBSyxHQUFHLEVBQUU7TUFFaEIsSUFBSTtRQUNGLE9BQU9ySyxJQUFJLENBQUM4SixTQUFTLENBQ25CTSxHQUFHLFlBQVk5UCxLQUFLLEdBQUcsSUFBSSxDQUFDc0ssUUFBUSxDQUFDd0YsR0FBRyxDQUFDLEdBQUdBLEdBQUcsRUFDL0MsVUFBQ2xWLEdBQUcsRUFBRUUsS0FBSyxFQUFLO1VBQ2QsSUFBSSxDQUFDLENBQUNBLEtBQUssSUFBSUEsS0FBSyxZQUFZa1YsTUFBTSxFQUFFO1lBQ3RDLElBQUlELEtBQUssQ0FBQzVSLFFBQVEsQ0FBQ3JELEtBQUssQ0FBQyxFQUFFO2NBQ3pCLE9BQU8sYUFBYTtZQUN0QjtZQUVBaVYsS0FBSyxDQUFDdkwsSUFBSSxDQUFDMUosS0FBSyxDQUFDO1VBQ25CO1VBRUEsT0FBT0EsS0FBSztRQUNkLENBQUMsRUFDRCxDQUNGLENBQUM7TUFDSCxDQUFDLENBQUMsT0FBTzhLLENBQUMsRUFBRTtRQUNWLE9BQU8saUNBQWlDO01BQzFDO0lBQ0Y7RUFBQztJQUFBaEwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXdVLGVBQWVBLENBQUNXLFFBQWEsRUFBRWIseUJBQWlDLEVBQUVDLEtBQWEsRUFBVTtNQUMvRixPQUFPRCx5QkFBeUIsQ0FBQ3hSLFNBQVMsQ0FBQyxDQUFDLEVBQUV5UixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMvRSxRQUFRLENBQUMyRixRQUFRLENBQUMsR0FBR2IseUJBQXlCLENBQUN4UixTQUFTLENBQUN5UixLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2pJO0VBQUM7SUFBQXpVLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVF3UCxRQUFRQSxDQUFDNEYsSUFBUyxFQUFVO01BQ2xDLElBQUksT0FBT0EsSUFBSSxLQUFLLFFBQVEsRUFBRTtRQUM1QixPQUFPQSxJQUFJO01BQ2I7TUFFQSxJQUFJLE9BQU9BLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDN0IsT0FBT0EsSUFBSSxHQUFHLE1BQU0sR0FBRyxPQUFPO01BQ2hDO01BRUEsSUFBSSxPQUFPQSxJQUFJLEtBQUssUUFBUSxFQUFFO1FBQzVCLE9BQU9BLElBQUksQ0FBQzVGLFFBQVEsQ0FBQyxDQUFDO01BQ3hCO01BRUEsSUFBSTZGLFdBQVcsR0FBRyxFQUFFO01BRXBCLElBQUlELElBQUksRUFBRTtRQUNSLElBQUksT0FBT0EsSUFBSSxLQUFLLFVBQVUsRUFBRTtVQUM5QkMsV0FBVyxHQUFHRCxJQUFJLENBQUM1RixRQUFRLENBQUMsQ0FBQztRQUMvQixDQUFDLE1BQU0sSUFBSTRGLElBQUksWUFBWUYsTUFBTSxFQUFFO1VBQ2pDLElBQUk7WUFDRkcsV0FBVyxHQUFHRCxJQUFJLENBQUM1RixRQUFRLENBQUMsQ0FBQztVQUMvQixDQUFDLENBQUMsT0FBTzFFLENBQUMsRUFBRTtZQUNWdUssV0FBVyxHQUFHLDZCQUE2QjtVQUM3QztRQUNGO01BQ0Y7TUFFQSxPQUFPQSxXQUFXO0lBQ3BCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN0Tkg7QUFDQTtBQUNBO0FBQ3lEO0FBQ1g7QUFBQSxJQUV6Qi9SLGNBQWM7RUFBQSxTQUFBQSxlQUFBO0lBQUFoRSw0SUFBQSxPQUFBZ0UsY0FBQTtFQUFBO0VBQUEsT0FBQXpELHlJQUFBLENBQUF5RCxjQUFBO0lBQUF4RCxHQUFBO0lBQUFDLEdBQUEsRUFDakMsU0FBQUEsSUFBQSxFQUErQztNQUM3QyxPQUFPOFIsd0RBQVksQ0FBQ3RHLGtFQUFhLENBQUNTLFFBQVEsQ0FBQztJQUM3QztFQUFDO0lBQUFsTSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNEO01BQ3BELE9BQU84Uix3REFBWSxDQUFDdEcsa0VBQWEsQ0FBQ1csWUFBWSxDQUFDO0lBQ2pEO0VBQUM7SUFBQXBNLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0Q7TUFDdEQsT0FBTzhSLHdEQUFZLENBQUMwQixJQUFJO0lBQzFCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNqQkg7QUFDQTtBQUNBOztBQUU4QztBQUNWO0FBQ2M7QUFDRjtBQUNjO0FBQ1c7QUFDTTtBQUVqQztBQUFBLElBRXpCL0ssYUFBYTtFQTZEaEMsU0FBQUEsY0FBQSxFQUFzQjtJQUFBbEosNElBQUEsT0FBQWtKLGFBQUE7SUFDcEIsTUFBTSxJQUFJdEQsS0FBSyxDQUFDLDhEQUE4RCxDQUFDO0VBQ2pGO0VBQUMsT0FBQXJGLHlJQUFBLENBQUEySSxhQUFBO0lBQUExSSxHQUFBO0lBQUFDLEdBQUEsRUF4REQsU0FBQUEsSUFBQSxFQUE0RDtNQUMxRCxPQUFPeUksYUFBYSxDQUFDaU4sdUJBQXVCO0lBQzlDO0VBQUM7SUFBQTNWLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU8ySSxTQUFTQSxDQUFDeUosUUFBZ0IsRUFBVztNQUMxQyxJQUFJLE9BQU9BLFFBQVEsS0FBSyxRQUFRLEVBQUU7UUFDaENBLFFBQVEsR0FBRyxLQUFLO01BQ2xCO01BRUEsSUFBTXNELE1BQU0sR0FBR2xOLGFBQWEsQ0FBQ21OLFFBQVEsQ0FBQ3ZELFFBQVEsQ0FBQztNQUUvQyxJQUFJc0QsTUFBTSxFQUFFO1FBQ1YsT0FBT0EsTUFBTTtNQUNmO01BRUEsT0FBT2xOLGFBQWEsQ0FBQ21OLFFBQVEsQ0FBQ3ZELFFBQVEsQ0FBQyxHQUFHLElBQUlNLCtDQUFNLENBQUNOLFFBQVEsRUFBRSxJQUFJLENBQUNaLFVBQVUsRUFBRSxJQUFJLENBQUNRLFVBQVUsQ0FBQztJQUNsRztFQUFDO0lBQUFsUyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPNFYsMkNBQTJDQSxDQUFBLEVBQVM7TUFDekRwTixhQUFhLENBQUNxTixpQkFBaUIsQ0FBQyxDQUFDO01BQ2pDck4sYUFBYSxDQUFDc04seUJBQXlCLENBQUMsU0FBUyxFQUFFdE4sYUFBYSxDQUFDdU4sa0JBQWtCLENBQUN0USxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7TUFDL0YrQyxhQUFhLENBQUNzTix5QkFBeUIsQ0FBQyxXQUFXLEVBQUV0TixhQUFhLENBQUN3TixvQkFBb0IsQ0FBQ3ZRLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyRztFQUFDO0lBQUEzRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFlNlYsaUJBQWlCQSxDQUFBLEVBQVM7TUFDdkMsSUFBTUksY0FBYyxHQUFHLElBQUksQ0FBQ0MsNkJBQTZCLENBQUN2UyxjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFaEcsSUFBSWtPLGlEQUFZLENBQUNvRSxjQUFjLENBQUMsRUFBRTtRQUNoQyxJQUFJLENBQUNqRSxVQUFVLENBQUNtRSxZQUFZLENBQUN0RSxpREFBWSxDQUFDb0UsY0FBYyxDQUFDLENBQUM7TUFDNUQ7TUFFQTtJQUNGO0VBQUM7SUFBQW5XLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWU4Vix5QkFBeUJBLENBQUNsUyxJQUFZLEVBQUV3UyxhQUE0QyxFQUFRO01BQ3pHLElBQU1ILGNBQWMsR0FBRyxJQUFJLENBQUNDLDZCQUE2QixDQUFDdlMsY0FBYyxXQUFBZixNQUFBLENBQVdnQixJQUFJLG1CQUFnQixDQUFDO01BRXhHLElBQUlxUyxjQUFjLEtBQUssS0FBSyxFQUFFO1FBQzVCO01BQ0Y7TUFFQUcsYUFBYSxDQUFDdkUsaURBQVksQ0FBQ29FLGNBQWMsQ0FBQyxDQUFDO0lBQzdDO0VBQUM7SUFBQW5XLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWUrVixrQkFBa0JBLENBQUM1QixLQUFtQixFQUFRO01BQzNELElBQUksQ0FBQzNDLFVBQVUsQ0FBQzlRLEdBQUcsQ0FBQyxJQUFJb1Isd0RBQWUsQ0FBQ3FDLEtBQUssSUFBSTdRLHdEQUFjLENBQUNpQiwwQkFBMEIsQ0FBQyxDQUFDO0lBQzlGO0VBQUM7SUFBQXpFLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQWVnVyxvQkFBb0JBLENBQUM3QixLQUFtQixFQUFRO01BQzdELElBQUksQ0FBQ3NCLHVCQUF1QixDQUFDMUQsU0FBUyxHQUFHb0MsS0FBSyxJQUFJN1Esd0RBQWMsQ0FBQ2tCLDRCQUE0QjtNQUU3RixJQUFJLENBQUNnTixVQUFVLENBQUM5USxHQUFHLENBQUMsSUFBSTZVLG1FQUFpQixDQUFDLElBQUksQ0FBQ0UsdUJBQXVCLENBQUMsQ0FBQztJQUMxRTtFQUFDO0FBQUE7QUFBQWxXLDRJQUFBLENBM0RrQmlKLGFBQWEsbUNBQzhDLElBQUk5RSx5RUFBNEIsQ0FBQyxDQUFDO0FBQUFuRSw0SUFBQSxDQUQ3RmlKLGFBQWEsY0FFeUIsQ0FBQyxDQUFDO0FBQUFqSiw0SUFBQSxDQUZ4Q2lKLGFBQWEsZ0JBR08sSUFBSStJLGtEQUFTLENBQUMsQ0FBQztBQUFBaFMsNElBQUEsQ0FIbkNpSixhQUFhLGdCQUljLElBQUk4TSx5REFBZ0IsQ0FBQyxDQUFDO0FBQUEvViw0SUFBQSxDQUpqRGlKLGFBQWEsNkJBS2lDLElBQUlnTix5RUFBc0IsQ0FBQyxDQUFDO0FBTDdEO0FBa0VsQ2hOLGFBQWEsQ0FBQ29OLDJDQUEyQyxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoRjNEO0FBQ0E7QUFDQTtBQUMwRDtBQUNGO0FBQUEsSUFFbkNyUyxtQkFBbUI7RUFBQSxTQUFBQSxvQkFBQTtJQUFBakUsNElBQUEsT0FBQWlFLG1CQUFBO0VBQUE7RUFBQSxPQUFBMUQseUlBQUEsQ0FBQTBELG1CQUFBO0lBQUF6RCxHQUFBO0lBQUFFLEtBQUEsRUFDdEMsU0FBT3FFLHFDQUFxQ0EsQ0FBQ2dTLFlBQTBCLEVBQW9CO01BQ3pGLFFBQVFBLFlBQVk7UUFDbEIsS0FBS3hFLGlEQUFZLENBQUN5RSxHQUFHO1VBQ25CLE9BQU8sS0FBSztRQUNkLEtBQUt6RSxpREFBWSxDQUFDaUIsS0FBSztVQUNyQixPQUFPLE9BQU87UUFDaEIsS0FBS2pCLGlEQUFZLENBQUN1QixLQUFLO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLdkIsaURBQVksQ0FBQzBCLElBQUk7VUFDcEIsT0FBTyxPQUFPO1FBQ2hCLEtBQUsxQixpREFBWSxDQUFDVyxJQUFJO1VBQ3BCLE9BQU8sTUFBTTtRQUNmLEtBQUtYLGlEQUFZLENBQUMzTSxLQUFLO1VBQ3JCLE9BQU8sT0FBTztRQUNoQixLQUFLMk0saURBQVksQ0FBQ21DLEtBQUs7VUFDckIsT0FBTyxPQUFPO1FBQ2hCLEtBQUtuQyxpREFBWSxDQUFDMEUsR0FBRztVQUNuQixPQUFPLEtBQUs7UUFDZDtVQUNFbEYsbUVBQWlCLENBQUNnRixZQUFZLENBQUM7TUFDbkM7SUFDRjtFQUFDO0lBQUF2VyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPd1cscUNBQXFDQSxDQUFDQyxnQkFBa0MsRUFBZ0I7TUFDN0YsUUFBUUEsZ0JBQWdCO1FBQ3RCLEtBQUssS0FBSztVQUNSLE9BQU81RSxpREFBWSxDQUFDeUUsR0FBRztRQUN6QixLQUFLLE9BQU87VUFDVixPQUFPekUsaURBQVksQ0FBQ2lCLEtBQUs7UUFDM0IsS0FBSyxPQUFPO1VBQ1YsT0FBT2pCLGlEQUFZLENBQUN1QixLQUFLO1FBQzNCLEtBQUssTUFBTTtVQUNULE9BQU92QixpREFBWSxDQUFDMEIsSUFBSTtRQUMxQixLQUFLLE1BQU07VUFDVCxPQUFPMUIsaURBQVksQ0FBQ1csSUFBSTtRQUMxQixLQUFLLE9BQU87VUFDVixPQUFPWCxpREFBWSxDQUFDM00sS0FBSztRQUMzQixLQUFLLE9BQU87VUFDVixPQUFPMk0saURBQVksQ0FBQ21DLEtBQUs7UUFDM0IsS0FBSyxLQUFLO1VBQ1IsT0FBT25DLGlEQUFZLENBQUMwRSxHQUFHO1FBQ3pCO1VBQ0VsRixtRUFBaUIsQ0FBQ29GLGdCQUFnQixDQUFDO01BQ3ZDO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbkRIO0FBQ0E7QUFDQTtBQUM4QztBQUFBLElBR3pCbkIsZ0JBQWdCO0VBQUEsU0FBQUEsaUJBQUE7SUFBQWhXLDRJQUFBLE9BQUFnVyxnQkFBQTtJQUFBL1YsNElBQUEscUJBQ0ErRCx1REFBYyxDQUFDZ0IsbUJBQW1CO0VBQUE7RUFBQSxPQUFBekUseUlBQUEsQ0FBQXlWLGdCQUFBO0lBQUF4VixHQUFBO0lBQUFDLEdBQUEsRUFFckUsU0FBQUEsSUFBQSxFQUEwQjtNQUN4QixPQUFPLElBQUksQ0FBQ2lTLFVBQVU7SUFDeEI7RUFBQztJQUFBbFMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1XLFlBQVlBLENBQUNwRSxTQUF1QixFQUFRO01BQzFDLElBQUksQ0FBQ0MsVUFBVSxHQUFHRCxTQUFTO0lBQzdCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDZkg7QUFDQTtBQUNBO0FBQ3NEO0FBQ0k7QUFDbEI7QUFBQSxJQUVuQjFKLFVBQVU7RUFHN0IsU0FBQUEsV0FBWXNPLE9BQW9CLEVBQUU7SUFBQXJYLDRJQUFBLE9BQUErSSxVQUFBO0lBQUE5SSw0SUFBQTtJQUNoQyxJQUFJLENBQUNxWCxRQUFRLEdBQUdELE9BQU87RUFDekI7RUFBQyxPQUFBOVcseUlBQUEsQ0FBQXdJLFVBQUE7SUFBQXZJLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5SixPQUFPQSxDQUFBLEVBQVc7TUFDaEIsT0FBT3JCLG9EQUFXLENBQUMsSUFBSSxDQUFDd08sUUFBUSxDQUFDO0lBQ25DO0VBQUM7SUFBQTlXLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE2VyxpQkFBaUJBLENBQUEsRUFBbUI7TUFDbEMsUUFBUSxJQUFJLENBQUNELFFBQVE7UUFDbkIsS0FBS3hPLG9EQUFXLENBQUMwTyxnQkFBZ0I7VUFDL0IsT0FBT0osaUVBQWMsQ0FBQ0ssU0FBUztRQUNqQyxLQUFLM08sb0RBQVcsQ0FBQzRPLCtCQUErQjtVQUM5QyxPQUFPTixpRUFBYyxDQUFDSyxTQUFTO1FBQ2pDLEtBQUszTyxvREFBVyxDQUFDNk8sT0FBTztVQUN0QixPQUFPUCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtuTyxvREFBVyxDQUFDOE8sU0FBUztVQUN4QixPQUFPUixpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtuTyxvREFBVyxDQUFDYyxjQUFjO1VBQzdCLE9BQU93TixpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtuTyxvREFBVyxDQUFDZ0IsV0FBVztVQUMxQixPQUFPc04saUVBQWMsQ0FBQ0gsR0FBRztRQUMzQixLQUFLbk8sb0RBQVcsQ0FBQytPLGFBQWE7VUFDNUIsT0FBT1QsaUVBQWMsQ0FBQ0gsR0FBRztRQUMzQixLQUFLbk8sb0RBQVcsQ0FBQ2dQLDBCQUEwQjtVQUN6QyxPQUFPVixpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtuTyxvREFBVyxDQUFDaVAsV0FBVztVQUMxQixPQUFPWCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCLEtBQUtuTyxvREFBVyxDQUFDa1AsaUJBQWlCO1VBQ2hDLE9BQU9aLGlFQUFjLENBQUNILEdBQUc7UUFDM0IsS0FBS25PLG9EQUFXLENBQUNtUCxxQkFBcUI7VUFDcEMsT0FBT2IsaUVBQWMsQ0FBQ0gsR0FBRztRQUMzQixLQUFLbk8sb0RBQVcsQ0FBQ29QLHFCQUFxQjtVQUNwQyxPQUFPZCxpRUFBYyxDQUFDSCxHQUFHO1FBQzNCO1VBQ0VsRixtRUFBaUIsQ0FBQyxJQUFJLENBQUN1RixRQUFRLENBQUM7TUFDcEM7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9DSDtBQUNBO0FBQ0E7QUFDcUQ7QUFDSDtBQUUzQyxJQUFLRixjQUFjLDBCQUFkQSxjQUFjO0VBQWRBLGNBQWMsQ0FBZEEsY0FBYztFQUFkQSxjQUFjLENBQWRBLGNBQWM7RUFBZEEsY0FBYyxDQUFkQSxjQUFjO0VBQUEsT0FBZEEsY0FBYztBQUFBO0FBSXpCLElBSW9CZSxvQkFBb0I7RUFBQSxTQUFBQSxxQkFBQTtJQUFBblksNElBQUEsT0FBQW1ZLG9CQUFBO0lBQUFsWSw0SUFBQSxlQUN4QixtREFBbUQ7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUEscUJBSTdCaUUseURBQWdCLENBQUNZLHFCQUFxQjtFQUFBO0VBQUEsT0FBQXZFLHlJQUFBLENBQUE0WCxvQkFBQTtJQUFBM1gsR0FBQTtJQUFBQyxHQUFBLEVBRTNFLFNBQUFBLElBQUEsRUFBa0I7TUFDaEIsT0FBTyxJQUFJLENBQUMyWCxJQUFJO0lBQ2xCLENBQUM7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQVFDLEdBQVcsRUFBRTtNQUNuQixJQUFNQyxVQUFVLEdBQUcsSUFBSTlZLGdFQUFXLENBQUMrRyxHQUFHLENBQUM4UixHQUFHLENBQUM7TUFFM0NDLFVBQVUsQ0FBQ0MsUUFBUSxHQUFHRCxVQUFVLENBQUNDLFFBQVEsR0FBRyxVQUFVO01BRXRELElBQUksQ0FBQ0osSUFBSSxHQUFHRyxVQUFVLENBQUNySSxRQUFRLENBQUMsQ0FBQztJQUNuQztFQUFDO0lBQUExUCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBCO01BQ3hCLE9BQU8sSUFBSSxDQUFDZ1ksWUFBWTtJQUMxQixDQUFDO0lBQUFKLEdBQUEsRUFFRCxTQUFBQSxJQUFnQkssV0FBbUIsRUFBRTtNQUNuQyxJQUFJLENBQUNELFlBQVksR0FBR0MsV0FBVztJQUNqQztFQUFDO0lBQUFsWSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNCO01BQ3BCLE9BQU8sSUFBSSxDQUFDa1ksUUFBUTtJQUN0QixDQUFDO0lBQUFOLEdBQUEsRUFFRCxTQUFBQSxJQUFZTyxPQUFlLEVBQUU7TUFDM0IsSUFBSSxDQUFDRCxRQUFRLEdBQUdDLE9BQU87SUFDekI7RUFBQztJQUFBcFksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QjtNQUN0QixPQUFPLElBQUksQ0FBQ29ZLFVBQVU7SUFDeEIsQ0FBQztJQUFBUixHQUFBLEVBRUQsU0FBQUEsSUFBY1MsU0FBaUIsRUFBRTtNQUMvQixJQUFJLENBQUNELFVBQVUsR0FBR0MsU0FBUztJQUM3QjtFQUFDO0lBQUF0WSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdDO01BQzlCLE9BQU8sSUFBSSxDQUFDaVMsVUFBVTtJQUN4QixDQUFDO0lBQUEyRixHQUFBLEVBRUQsU0FBQUEsSUFBYzVGLFNBQXlCLEVBQUU7TUFDdkMsSUFBSSxDQUFDQyxVQUFVLEdBQUdELFNBQVM7SUFDN0I7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvREg7QUFDQTtBQUNBOztBQUU4QztBQUM4QjtBQUMvQztBQUNrQjtBQUNGO0FBQ2dCO0FBQUEsSUFFeEN5RyxjQUFjO0VBc0NqQyxTQUFBQSxlQUFBLEVBQXNCO0lBQUFsWiw0SUFBQSxPQUFBa1osY0FBQTtJQUNwQixNQUFNLElBQUl0VCxLQUFLLENBQUMsOERBQThELENBQUM7RUFDakY7RUFBQyxPQUFBckYseUlBQUEsQ0FBQTJZLGNBQUE7SUFBQTFZLEdBQUE7SUFBQUUsS0FBQSxFQXJDRCxTQUFPeVksaUJBQWlCQSxDQUFDYixHQUFXLEVBQWtCO01BQ3BELElBQUksT0FBT0EsR0FBRyxLQUFLLFFBQVEsRUFBRTtRQUMzQixNQUFNLElBQUkxUyxLQUFLLENBQUMsSUFBSSxDQUFDO01BQ3ZCO01BRUEsSUFBTXdULGVBQWUsR0FBR0YsY0FBYyxDQUFDRyxnQkFBZ0IsQ0FBQ2YsR0FBRyxDQUFDO01BRTVELElBQUljLGVBQWUsRUFBRTtRQUNuQixPQUFPQSxlQUFlO01BQ3hCO01BRUEsSUFBTUUsb0JBQW9CLEdBQUcsSUFBSW5CLDZEQUFvQixDQUFDLENBQUM7TUFFdkRtQixvQkFBb0IsQ0FBQ1IsU0FBUyxHQUFHN1AsZ0RBQUcsQ0FBQ3NRLGVBQWU7TUFDcERELG9CQUFvQixDQUFDVixPQUFPLEdBQUczUCxnREFBRyxDQUFDMlAsT0FBTyxDQUFDbFksS0FBSztNQUNoRDRZLG9CQUFvQixDQUFDaEIsR0FBRyxHQUFHVSx5REFBWSxDQUFDUSxlQUFlLENBQUNsQixHQUFHLENBQUM7TUFDNURnQixvQkFBb0IsQ0FBQ1osV0FBVyxHQUFHTyx3REFBVyxDQUFDUSxxQkFBcUIsQ0FBQ25CLEdBQUcsQ0FBQztNQUV6RWdCLG9CQUFvQixDQUFDN0csU0FBUyxHQUFHdE8sK0RBQXFCLENBQUN1Vix5Q0FBeUMsQ0FBQ3pRLGdEQUFHLENBQUMwUSxjQUFjLENBQUM7TUFFcEgsT0FBT1QsY0FBYyxDQUFDRyxnQkFBZ0IsQ0FBQ2YsR0FBRyxDQUFDLEdBQUcsSUFBSVMsdURBQWMsQ0FBQ08sb0JBQW9CLENBQUM7SUFDeEY7RUFBQztJQUFBOVksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT2taLGlCQUFpQkEsQ0FBQ0QsY0FBOEIsRUFBUTtNQUM3RCxJQUFNUCxlQUFlLEdBQUd4RCxNQUFNLENBQUNpRSxNQUFNLENBQUNYLGNBQWMsQ0FBQ0csZ0JBQWdCLENBQUM7TUFFdEUsSUFBSUQsZUFBZSxJQUFJQSxlQUFlLENBQUNoTyxNQUFNLEVBQUU7UUFDN0NnTyxlQUFlLENBQUNuSixPQUFPLENBQUMsVUFBQTNHLGNBQWMsRUFBSTtVQUN4QyxJQUFNZ1Esb0JBQW9CLEdBQUdoUSxjQUFjLENBQUNnUSxvQkFBb0I7VUFFaEVBLG9CQUFvQixDQUFDN0csU0FBUyxHQUFHa0gsY0FBYztRQUNqRCxDQUFDLENBQUM7TUFDSjtJQUNGO0VBQUM7QUFBQTtBQUFBMVosNElBQUEsQ0FwQ2tCaVosY0FBYyxzQkFDdUMsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1o1RTtBQUNBO0FBQ0E7QUFDcUQ7QUFFRDtBQUNRO0FBQ0Q7QUFDckI7QUFJdEMsSUFBTWMsZ0JBQWdCLEdBQUcsSUFBSTtBQUM3QixJQUFNQyxrQkFBa0IsR0FBRyxJQUFJO0FBQUMsSUFrQ1hsQixjQUFjO0VBU2pDLFNBQUFBLGVBQVlPLG9CQUEwQyxFQUFFO0lBQUF0Wiw0SUFBQSxPQUFBK1ksY0FBQTtJQUFBOVksNElBQUEsa0JBUnBCaUosNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGdCQUFnQixDQUFDO0lBQUFwSiw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQSxtQkFHcEMsRUFBRTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQSx3QkFFbkIsQ0FBQztJQUFBQSw0SUFBQSxrQkFDUFIsZ0VBQVcsQ0FBQ3lhLGdCQUFnQjtJQUc1QyxJQUFJLENBQUNDLHFCQUFxQixHQUFHYixvQkFBb0I7SUFDakQsSUFBSSxDQUFDYyxtQkFBbUIsR0FBRyxJQUFJTixnRUFBa0IsQ0FBQyxDQUFDO0VBQ3JEO0VBQUMsT0FBQXZaLHlJQUFBLENBQUF3WSxjQUFBO0lBQUF2WSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWlEO01BQy9DLE9BQU8sSUFBSSxDQUFDMFoscUJBQXFCO0lBQ25DO0VBQUM7SUFBQTNaLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUEwSixJQUFJQSxDQUFDaVEsTUFBZSxFQUFRO01BQzFCLElBQU8zUSxRQUFRLEdBQW1EMlEsTUFBTSxDQUFqRTNRLFFBQVE7UUFBRWhKLEtBQUssR0FBNEMyWixNQUFNLENBQXZEM1osS0FBSztRQUFFNFosYUFBYSxHQUE2QkQsTUFBTSxDQUFoREMsYUFBYTtRQUFFalEsT0FBTyxHQUFvQmdRLE1BQU0sQ0FBakNoUSxPQUFPO1FBQUVrUSxRQUFRLEdBQVVGLE1BQU0sQ0FBeEJFLFFBQVE7UUFBRUMsSUFBSSxHQUFJSCxNQUFNLENBQWRHLElBQUk7TUFDOUQsSUFBTXpRLFVBQVUsR0FBRyxJQUFJaEIsb0RBQVUsQ0FBQ3NSLE1BQU0sQ0FBQ3RRLFVBQVUsQ0FBQztNQUVwRCxJQUFJLElBQUksQ0FBQ29RLHFCQUFxQixDQUFDMUgsU0FBUyxHQUFHMUksVUFBVSxDQUFDd04saUJBQWlCLENBQUMsQ0FBQyxFQUFFO1FBQ3pFO01BQ0Y7TUFFQSxJQUFNa0QsWUFBWSxHQUFHO1FBQ25CQyxTQUFTLEVBQUUsSUFBSXhhLElBQUksQ0FBQyxDQUFDLENBQUMrUyxXQUFXLENBQUMsQ0FBQztRQUNuQzJGLE9BQU8sRUFBRSxJQUFJLENBQUN1QixxQkFBcUIsQ0FBQ3ZCLE9BQU87UUFDM0NFLFNBQVMsRUFBRSxJQUFJLENBQUNxQixxQkFBcUIsQ0FBQ3JCLFNBQVM7UUFDL0NwUCxRQUFRLEVBQVJBLFFBQVE7UUFDUjJRLE1BQU0sRUFBRXRRLFVBQVUsQ0FBQ0ksT0FBTyxDQUFDLENBQUM7UUFDNUJ6SixLQUFLLEVBQUxBLEtBQUs7UUFDTDRaLGFBQWEsRUFBYkEsYUFBYTtRQUNiSyxpQkFBaUIsRUFBRSxJQUFJLENBQUNDLE9BQU87UUFDL0JsQyxXQUFXLEVBQUUsSUFBSSxDQUFDeUIscUJBQXFCLENBQUN6QixXQUFXO1FBQ25EaFYsT0FBTyxFQUFFcVcsbUVBQWMsQ0FBQ2MsVUFBVTtRQUNsQ3hRLE9BQU8sRUFBUEEsT0FBTztRQUNQa1EsUUFBUSxFQUFSQSxRQUFRO1FBQ1JDLElBQUksRUFBSkE7TUFDRixDQUFDO01BRUQsSUFBSSxDQUFDbEQsUUFBUSxDQUFDbE4sSUFBSSxDQUFDcVEsWUFBWSxDQUFDO01BRWhDLElBQU1LLE9BQU8sR0FBRyxJQUFJLENBQUNDLGlCQUFpQixDQUFDLENBQUM7SUFDMUM7RUFBQztJQUFBdmEsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTBMLFlBQUEsR0FBQTRPLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQUUsUUFBMEJDLGVBQXFDO1FBQUEsSUFBQUMsUUFBQTtRQUFBLE9BQUFKLDRJQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQ3ZETCxRQUFRLEdBQUcsSUFBSTViLGdFQUFXLENBQUNtUCxRQUFRLENBQUMsQ0FBQztjQUUzQ3lNLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRXJRLElBQUksQ0FBQzhKLFNBQVMsQ0FBQztnQkFBQ3dHLE9BQU8sRUFBRVI7Y0FBZSxDQUFDLENBQUMsQ0FBQztjQUFDSSxRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUUzRGpjLGdFQUFXLENBQUMwUCxLQUFLLENBQUMsSUFBSSxDQUFDZ0wscUJBQXFCLENBQUM3QixHQUFHLEVBQUU7Z0JBQzdEdUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUM7WUFBQTtjQUFBLE9BQUFHLFFBQUEsQ0FBQU8sTUFBQSxXQUFBUCxRQUFBLENBQUFRLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQVIsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBZCxPQUFBO01BQUEsQ0FDSDtNQUFBLFNBVGF4TyxXQUFXQSxDQUFBdVAsRUFBQTtRQUFBLE9BQUE5UCxZQUFBLENBQUErUCxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFYL0csV0FBVztJQUFBO0VBQUE7SUFBQW5NLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUEwYixrQkFBQSxHQUFBcEIsOElBQUEsY0FBQUMsNElBQUEsQ0FXekIsU0FBQW9CLFNBQUE7UUFBQSxJQUFBdGIsS0FBQTtRQUFBLElBQUFxYSxlQUFBO1FBQUEsT0FBQUgsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQUEsTUFDTSxJQUFJLENBQUNwRSxRQUFRLENBQUNsTSxNQUFNLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQ29SLFVBQVU7Z0JBQUFELFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWEsU0FBQSxDQUFBUixNQUFBO1lBQUE7Y0FJaEQsSUFBSSxDQUFDUyxVQUFVLEdBQUcsSUFBSTtjQUVoQnBCLGVBQWUsR0FBRyxJQUFJLENBQUM5RCxRQUFRLENBQUNtRixLQUFLLENBQUMsQ0FBQyxFQUFFekMsZ0JBQWdCLENBQUM7Y0FFaEUsSUFBSSxDQUFDMUMsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUSxDQUFDbUYsS0FBSyxDQUFDekMsZ0JBQWdCLENBQUM7Y0FBQyxPQUFBdUMsU0FBQSxDQUFBUixNQUFBLFdBRS9DLElBQUksQ0FBQ3BQLFdBQVcsQ0FBQ3lPLGVBQWUsQ0FBQyxDQUFDc0IsSUFBSSxDQUFDLFVBQUFDLFFBQVEsRUFBSTtnQkFDeEQsSUFBSTViLEtBQUksQ0FBQzZiLDZCQUE2QixDQUFDRCxRQUFRLENBQUMsRUFBRTtrQkFDaEQsSUFBSTViLEtBQUksQ0FBQ3VXLFFBQVEsQ0FBQ2xNLE1BQU0sSUFBSTZPLGtCQUFrQixFQUFFO29CQUM5Q2xaLEtBQUksQ0FBQzhiLGFBQWEsRUFBRTtvQkFFcEJwZCxnRUFBVyxDQUFDMkcsVUFBVSxDQUFDLFlBQU07c0JBQzNCckYsS0FBSSxDQUFDdVcsUUFBUSxNQUFBaFUsTUFBQSxDQUFBd1osK0lBQUEsQ0FBTzFCLGVBQWUsR0FBQTBCLCtJQUFBLENBQUsvYixLQUFJLENBQUN1VyxRQUFRLEVBQUM7c0JBRXREdlcsS0FBSSxDQUFDeWIsVUFBVSxHQUFHLEtBQUs7c0JBRXZCLElBQU0xQixPQUFPLEdBQUcvWixLQUFJLENBQUNnYSxpQkFBaUIsQ0FBQyxDQUFDO29CQUMxQyxDQUFDLEVBQUVoYSxLQUFJLENBQUNxWixtQkFBbUIsQ0FBQzJDLDJDQUEyQyxDQUFDaGMsS0FBSSxDQUFDOGIsYUFBYSxDQUFDLENBQUM7b0JBRTVGO2tCQUNGO2tCQUVBOWIsS0FBSSxDQUFDd0osT0FBTyxDQUFDUyxLQUFLLENBQUMsNERBQTRELEVBQUVqSyxLQUFJLENBQUN1VyxRQUFRLENBQUNsTSxNQUFNLEVBQUVnUSxlQUFlLENBQUNoUSxNQUFNLENBQUM7Z0JBQ2hJO2dCQUVBckssS0FBSSxDQUFDeWIsVUFBVSxHQUFHLEtBQUs7Z0JBQ3ZCemIsS0FBSSxDQUFDOGIsYUFBYSxHQUFHLENBQUM7Z0JBRXRCLElBQU0vQixPQUFPLEdBQUcvWixLQUFJLENBQUNnYSxpQkFBaUIsQ0FBQyxDQUFDO2dCQUV4QyxPQUFPNEIsUUFBUTtjQUNqQixDQUFDLENBQUMsQ0FBQ0ssS0FBSyxDQUFDLFlBQU07Z0JBQ2JqYyxLQUFJLENBQUN5YixVQUFVLEdBQUcsS0FBSztnQkFFdkIsSUFBTTFCLE9BQU8sR0FBRy9aLEtBQUksQ0FBQ2dhLGlCQUFpQixDQUFDLENBQUM7Y0FDMUMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF3QixTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNIO01BQUEsU0F6Q2F0QixpQkFBaUJBLENBQUE7UUFBQSxPQUFBcUIsa0JBQUEsQ0FBQUQsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBakJxSCxpQkFBaUI7SUFBQTtFQUFBO0lBQUF2YSxHQUFBO0lBQUFFLEtBQUEsRUEyQy9CLFNBQVFrYyw2QkFBNkJBLENBQUFwVixJQUFBLEVBQThCO01BQUEsSUFBNUJ5VixNQUFNLEdBQUF6VixJQUFBLENBQU55VixNQUFNO01BQzNDLE9BQU8sVUFBVSxDQUFDclosSUFBSSxDQUFDcVosTUFBTSxDQUFDL00sUUFBUSxDQUFDLENBQUMsQ0FBQztJQUMzQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7OztBQ3RKSDtBQUNBO0FBQ0E7QUFGQSxJQUdLcEgsV0FBVywwQkFBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFBLE9BQVhBLFdBQVc7QUFBQSxFQUFYQSxXQUFXO0FBZWhCLCtEQUFlQSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDbEIxQjtBQUNBO0FBQ0E7QUFDMEU7QUFDaEI7QUFBQSxJQUVyQzNFLHFCQUFxQjtFQUFBLFNBQUFBLHNCQUFBO0lBQUFuRSw0SUFBQSxPQUFBbUUscUJBQUE7RUFBQTtFQUFBLE9BQUE1RCx5SUFBQSxDQUFBNEQscUJBQUE7SUFBQTNELEdBQUE7SUFBQUUsS0FBQSxFQUN4QyxTQUFPbUUseUNBQXlDQSxDQUFDOFUsY0FBOEIsRUFBc0I7TUFDbkcsUUFBUUEsY0FBYztRQUNwQixLQUFLdkMsaUVBQWMsQ0FBQ0osR0FBRztVQUNyQixPQUFPLEtBQUs7UUFDZCxLQUFLSSxpRUFBYyxDQUFDSyxTQUFTO1VBQzNCLE9BQU8sV0FBVztRQUNwQixLQUFLTCxpRUFBYyxDQUFDSCxHQUFHO1VBQ3JCLE9BQU8sS0FBSztRQUNkO1VBQ0VsRixtRUFBaUIsQ0FBQzRILGNBQWMsQ0FBQztNQUNyQztJQUNGO0VBQUM7SUFBQW5aLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9nWix5Q0FBeUNBLENBQUN3RCxrQkFBc0MsRUFBa0I7TUFDdkcsUUFBUUEsa0JBQWtCO1FBQ3hCLEtBQUssS0FBSztVQUNSLE9BQU85RixpRUFBYyxDQUFDSixHQUFHO1FBQzNCLEtBQUssV0FBVztVQUNkLE9BQU9JLGlFQUFjLENBQUNLLFNBQVM7UUFDakMsS0FBSyxLQUFLO1VBQ1IsT0FBT0wsaUVBQWMsQ0FBQ0gsR0FBRztRQUMzQjtVQUNFbEYsbUVBQWlCLENBQUNtTCxrQkFBa0IsQ0FBQztNQUN6QztJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBO0FBQ3lEO0FBQ007QUFBQSxJQUUxQ2haLGdCQUFnQjtFQUFBLFNBQUFBLGlCQUFBO0lBQUFsRSw0SUFBQSxPQUFBa0UsZ0JBQUE7RUFBQTtFQUFBLE9BQUEzRCx5SUFBQSxDQUFBMkQsZ0JBQUE7SUFBQTFELEdBQUE7SUFBQUMsR0FBQSxFQUNuQyxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU8yVyx5RUFBYyxDQUFDbkwsa0VBQWEsQ0FBQ1UsV0FBVyxDQUFDO0lBQ2xEO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNUSDtBQUNBO0FBQ0E7QUFDcUQ7QUFDUDtBQUFBLElBRXhDeVEsT0FBTztFQVNYLFNBQUFBLFFBQVlDLFFBQVEsRUFBRTtJQUFBcmQsNElBQUEsT0FBQW9kLE9BQUE7SUFBQW5kLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQ3BCLElBQUksRUFBRSxJQUFJLFlBQVltZCxPQUFPLENBQUMsRUFBRTtNQUM5QixNQUFNLElBQUlFLFNBQVMsQ0FBQyxzQ0FBc0MsQ0FBQztJQUM3RDtJQUVBLElBQUksT0FBT0QsUUFBUSxLQUFLLFVBQVUsRUFBRTtNQUNsQyxNQUFNLElBQUlDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUN2QztJQUVBLElBQUksQ0FBQ0MsTUFBTSxHQUFHLENBQUM7SUFDZixJQUFJLENBQUNDLFFBQVEsR0FBRyxLQUFLO0lBQ3JCLElBQUksQ0FBQ0MsTUFBTSxHQUFHaFksU0FBUztJQUN2QixJQUFJLENBQUNpWSxVQUFVLEdBQUcsRUFBRTtJQUVwQixJQUFJLENBQUNDLFNBQVMsQ0FBQ04sUUFBUSxDQUFDO0VBQzFCO0VBQUMsT0FBQTljLHlJQUFBLENBQUE2YyxPQUFBO0lBQUE1YyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaWQsU0FBU0EsQ0FBQ04sUUFBa0IsRUFBUTtNQUFBLElBQUF0YyxLQUFBO01BQ2xDLElBQUk2YyxJQUFJLEdBQUcsS0FBSztNQUVoQixJQUFJO1FBQ0ZQLFFBQVEsQ0FDTixVQUFBM2MsS0FBSyxFQUFJO1VBQ1AsSUFBSWtkLElBQUksRUFBRTtZQUNSO1VBQ0Y7VUFFQUEsSUFBSSxHQUFHLElBQUk7VUFDWDdjLEtBQUksQ0FBQzhjLGNBQWMsQ0FBQ25kLEtBQUssQ0FBQztRQUM1QixDQUFDLEVBQ0QsVUFBQW9kLE1BQU0sRUFBSTtVQUNSLElBQUlGLElBQUksRUFBRTtZQUNSO1VBQ0Y7VUFFQUEsSUFBSSxHQUFHLElBQUk7VUFDWDdjLEtBQUksQ0FBQ2dkLGFBQWEsQ0FBQ0QsTUFBTSxDQUFDO1FBQzVCLENBQ0YsQ0FBQztNQUNILENBQUMsQ0FBQyxPQUFPOVMsS0FBSyxFQUFFO1FBQ2QsSUFBSTRTLElBQUksRUFBRTtVQUNSO1FBQ0Y7UUFFQUEsSUFBSSxHQUFHLElBQUk7UUFDWCxJQUFJLENBQUNHLGFBQWEsQ0FBQy9TLEtBQUssQ0FBQztNQUMzQjtJQUNGO0VBQUM7SUFBQXhLLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtZCxjQUFjQSxDQUFDRyxRQUE2QixFQUFRO01BQ2xELElBQU1DLE9BQU8sR0FBRyxJQUFlO01BRS9CLElBQUk7UUFDRjtRQUNBLElBQUlELFFBQVEsS0FBS0MsT0FBTyxFQUFFO1VBQ3hCLE1BQU0sSUFBSVgsU0FBUyxDQUFDLDRDQUE0QyxDQUFDO1FBQ25FO1FBRUEsSUFBSVUsUUFBUSxLQUFLRSxvSUFBQSxDQUFPRixRQUFRLE1BQUssUUFBUSxJQUFJLE9BQU9BLFFBQVEsS0FBSyxVQUFVLENBQUMsRUFBRTtVQUNoRixJQUFNdEIsS0FBSSxHQUFHc0IsUUFBUSxDQUFDdEIsSUFBSTtVQUUxQixJQUFJc0IsUUFBUSxZQUFZWixPQUFPLEVBQUU7WUFDL0JhLE9BQU8sQ0FBQ1YsTUFBTSxHQUFHLENBQUM7WUFDbEJVLE9BQU8sQ0FBQ1IsTUFBTSxHQUFHTyxRQUFRO1lBQ3pCQyxPQUFPLENBQUNFLE1BQU0sQ0FBQyxDQUFDO1lBRWhCO1VBQ0YsQ0FBQyxNQUFNLElBQUksT0FBT3pCLEtBQUksS0FBSyxVQUFVLEVBQUU7WUFDckN1QixPQUFPLENBQUNOLFNBQVMsQ0FBQyxZQUFpQjtjQUNqQztjQUNBakIsS0FBSSxDQUFDUCxLQUFLLENBQUM2QixRQUFRLEVBQUV0SyxTQUFTLENBQUM7WUFDakMsQ0FBQyxDQUFDO1lBRUY7VUFDRjtRQUNGO1FBRUF1SyxPQUFPLENBQUNWLE1BQU0sR0FBRyxDQUFDO1FBQ2xCVSxPQUFPLENBQUNSLE1BQU0sR0FBR08sUUFBUTtRQUN6QkMsT0FBTyxDQUFDRSxNQUFNLENBQUMsQ0FBQztNQUNsQixDQUFDLENBQUMsT0FBTzNTLENBQUMsRUFBRTtRQUNWeVMsT0FBTyxDQUFDRixhQUFhLENBQUN2UyxDQUFDLENBQUM7TUFDMUI7SUFDRjtFQUFDO0lBQUFoTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBcWQsYUFBYUEsQ0FBQ0MsUUFBNkIsRUFBUTtNQUNqRCxJQUFJLENBQUNULE1BQU0sR0FBRyxDQUFDO01BQ2YsSUFBSSxDQUFDRSxNQUFNLEdBQUdPLFFBQVE7TUFDdEIsSUFBSSxDQUFDRyxNQUFNLENBQUMsQ0FBQztJQUNmO0VBQUM7SUFBQTNkLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF5ZCxNQUFNQSxDQUFBLEVBQVM7TUFBQSxJQUFBcEosTUFBQTtNQUNiLElBQUksSUFBSSxDQUFDd0ksTUFBTSxLQUFLLENBQUMsSUFBSSxJQUFJLENBQUNHLFVBQVUsQ0FBQ3RTLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckRnUyxPQUFPLENBQUNnQixVQUFVLENBQUMsWUFBTTtVQUN2QixJQUFJLENBQUNySixNQUFJLENBQUN5SSxRQUFRLEVBQUU7WUFDbEJKLE9BQU8sQ0FBQ2lCLG1CQUFtQixDQUFDdEosTUFBSSxDQUFDMEksTUFBTSxDQUFDO1VBQzFDO1FBQ0YsQ0FBQyxDQUFDO01BQ0o7TUFFQSxLQUFLLElBQUlhLENBQUMsR0FBRyxDQUFDLEVBQUVDLEdBQUcsR0FBRyxJQUFJLENBQUNiLFVBQVUsQ0FBQ3RTLE1BQU0sRUFBRWtULENBQUMsR0FBR0MsR0FBRyxFQUFFRCxDQUFDLEVBQUUsRUFBRTtRQUMxRCxJQUFJLENBQUNFLE1BQU0sQ0FBQyxJQUFJLENBQUNkLFVBQVUsQ0FBQ1ksQ0FBQyxDQUFDLENBQUM7TUFDakM7TUFFQSxJQUFJLENBQUNaLFVBQVUsR0FBRyxJQUFJO0lBQ3hCO0VBQUM7SUFBQWxkLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4ZCxNQUFNQSxDQUFDQyxRQUF3QixFQUFRO01BQ3JDLElBQUlSLE9BQU8sR0FBRyxJQUFlO01BRTdCLE9BQU9BLE9BQU8sQ0FBQ1YsTUFBTSxLQUFLLENBQUMsRUFBRTtRQUMzQlUsT0FBTyxHQUFHQSxPQUFPLENBQUNSLE1BQU07TUFDMUI7TUFFQSxJQUFJUSxPQUFPLENBQUNWLE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDeEJVLE9BQU8sQ0FBQ1AsVUFBVSxDQUFDdFQsSUFBSSxDQUFDcVUsUUFBUSxDQUFDO1FBRWpDO01BQ0Y7TUFFQVIsT0FBTyxDQUFDVCxRQUFRLEdBQUcsSUFBSTtNQUN2QkosT0FBTyxDQUFDZ0IsVUFBVSxDQUFDLFlBQU07UUFDdkIsSUFBTWYsUUFBUSxHQUFHWSxPQUFPLENBQUNWLE1BQU0sS0FBSyxDQUFDLEdBQUdrQixRQUFRLENBQUNDLFdBQVcsR0FBR0QsUUFBUSxDQUFDRSxVQUFVO1FBRWxGLElBQUl0QixRQUFRLEtBQUssSUFBSSxFQUFFO1VBQ3JCLElBQUlZLE9BQU8sQ0FBQ1YsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN4QmtCLFFBQVEsQ0FBQ1IsT0FBTyxDQUFDSixjQUFjLENBQUNJLE9BQU8sQ0FBQ1IsTUFBTSxDQUFDO1VBQ2pELENBQUMsTUFBTTtZQUNMZ0IsUUFBUSxDQUFDUixPQUFPLENBQUNGLGFBQWEsQ0FBQ0UsT0FBTyxDQUFDUixNQUFNLENBQUM7VUFDaEQ7VUFFQTtRQUNGO1FBRUEsSUFBSW1CLE1BQU07UUFFVixJQUFJO1VBQ0ZBLE1BQU0sR0FBR3ZCLFFBQVEsQ0FBQ1ksT0FBTyxDQUFDUixNQUFNLENBQUM7UUFDbkMsQ0FBQyxDQUFDLE9BQU9qUyxDQUFDLEVBQUU7VUFDVmlULFFBQVEsQ0FBQ1IsT0FBTyxDQUFDRixhQUFhLENBQUN2UyxDQUFDLENBQUM7VUFFakM7UUFDRjtRQUVBaVQsUUFBUSxDQUFDUixPQUFPLENBQUNKLGNBQWMsQ0FBQ2UsTUFBTSxDQUFDO01BQ3pDLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQXBlLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU9tZSxHQUFHQSxDQUFDQyxHQUFtQixFQUFXO01BQ3ZDLE9BQU8sSUFBSTFCLE9BQU8sQ0FBQyxVQUFDMkIsT0FBTyxFQUFFQyxNQUFNLEVBQUs7UUFDdEMsSUFBSSxDQUFDdE4sS0FBSyxDQUFDdU4sT0FBTyxDQUFDSCxHQUFHLENBQUMsRUFBRTtVQUN2QixPQUFPRSxNQUFNLENBQUMsSUFBSTFCLFNBQVMsQ0FBQyw4QkFBOEIsQ0FBQyxDQUFDO1FBQzlEO1FBRUEsSUFBTTNKLElBQUksR0FBR2pDLEtBQUssQ0FBQ2hFLFNBQVMsQ0FBQytPLEtBQUssQ0FBQzFNLElBQUksQ0FBQytPLEdBQUcsQ0FBQztRQUU1QyxJQUFJbkwsSUFBSSxDQUFDdkksTUFBTSxLQUFLLENBQUMsRUFBRTtVQUNyQixPQUFPMlQsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNwQjtRQUVBLElBQUlHLFNBQVMsR0FBR3ZMLElBQUksQ0FBQ3ZJLE1BQU07UUFDM0IsSUFBTStULGVBQWMsR0FBRyxTQUFqQkEsY0FBY0EsQ0FBSWIsQ0FBQyxFQUFFNWQsS0FBSyxFQUFXO1VBQ3pDLElBQUk7WUFDRixJQUFJQSxLQUFLLEtBQUt3ZCxvSUFBQSxDQUFPeGQsS0FBSyxNQUFLLFFBQVEsSUFBSSxPQUFPQSxLQUFLLEtBQUssVUFBVSxDQUFDLEVBQUU7Y0FDdkUsSUFBTWdjLE1BQUksR0FBR2hjLEtBQUssQ0FBQ2djLElBQUk7Y0FFdkIsSUFBSSxPQUFPQSxNQUFJLEtBQUssVUFBVSxFQUFFO2dCQUM5QkEsTUFBSSxDQUFDM00sSUFBSSxDQUNQclAsS0FBSyxFQUNMLFVBQUFBLEtBQUs7a0JBQUEsT0FBSXllLGVBQWMsQ0FBQ2IsQ0FBQyxFQUFFNWQsS0FBSyxDQUFDO2dCQUFBLEdBQ2pDc2UsTUFDRixDQUFDO2dCQUVEO2NBQ0Y7WUFDRjtZQUVBckwsSUFBSSxDQUFDMkssQ0FBQyxDQUFDLEdBQUc1ZCxLQUFLO1lBRWYsSUFBSSxFQUFFd2UsU0FBUyxLQUFLLENBQUMsRUFBRTtjQUNyQkgsT0FBTyxDQUFDcEwsSUFBSSxDQUFDO1lBQ2Y7VUFDRixDQUFDLENBQUMsT0FBTzNJLEtBQUssRUFBRTtZQUNkZ1UsTUFBTSxDQUFDaFUsS0FBSyxDQUFDO1VBQ2Y7UUFDRixDQUFDO1FBRUQsS0FBSyxJQUFJc1QsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHM0ssSUFBSSxDQUFDdkksTUFBTSxFQUFFa1QsQ0FBQyxFQUFFLEVBQUU7VUFDcENhLGVBQWMsQ0FBQ2IsQ0FBQyxFQUFFM0ssSUFBSSxDQUFDMkssQ0FBQyxDQUFDLENBQUM7UUFDNUI7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUE5ZCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPcWUsT0FBT0EsQ0FBQ3JlLEtBQUssRUFBVztNQUM3QixJQUFJQSxLQUFLLElBQUl3ZCxvSUFBQSxDQUFPeGQsS0FBSyxNQUFLLFFBQVEsSUFBSUEsS0FBSyxDQUFDMGUsV0FBVyxLQUFLaEMsT0FBTyxFQUFFO1FBQ3ZFLE9BQU8xYyxLQUFLO01BQ2Q7TUFFQSxPQUFPLElBQUkwYyxPQUFPLENBQUMsVUFBQTJCLE9BQU87UUFBQSxPQUFJQSxPQUFPLENBQUNyZSxLQUFLLENBQUM7TUFBQSxFQUFDO0lBQy9DO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3NlLE1BQU1BLENBQUN0ZSxLQUFLLEVBQVc7TUFDNUIsT0FBTyxJQUFJMGMsT0FBTyxDQUFDLFVBQUNpQyxDQUFDLEVBQUVMLE1BQU07UUFBQSxPQUFLQSxNQUFNLENBQUN0ZSxLQUFLLENBQUM7TUFBQSxFQUFDO0lBQ2xEO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzRlLElBQUlBLENBQUNSLEdBQW1CLEVBQVc7TUFDeEMsT0FBTyxJQUFJMUIsT0FBTyxDQUFDLFVBQUMyQixPQUFPLEVBQUVDLE1BQU0sRUFBSztRQUN0QyxJQUFJLENBQUN0TixLQUFLLENBQUN1TixPQUFPLENBQUNILEdBQUcsQ0FBQyxFQUFFO1VBQ3ZCLE9BQU9FLE1BQU0sQ0FBQyxJQUFJMUIsU0FBUyxDQUFDLCtCQUErQixDQUFDLENBQUM7UUFDL0Q7UUFFQSxLQUFLLElBQUlnQixDQUFDLEdBQUcsQ0FBQyxFQUFFQyxHQUFHLEdBQUdPLEdBQUcsQ0FBQzFULE1BQU0sRUFBRWtULENBQUMsR0FBR0MsR0FBRyxFQUFFRCxDQUFDLEVBQUUsRUFBRTtVQUM5Q2xCLE9BQU8sQ0FBQzJCLE9BQU8sQ0FBQ0QsR0FBRyxDQUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDNUIsSUFBSSxDQUFDcUMsT0FBTyxFQUFFQyxNQUFNLENBQUM7UUFDL0M7TUFDRixDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUF4ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPMGQsVUFBVUEsQ0FBQ2YsUUFBa0IsRUFBUTtNQUMxQyxJQUFNdkMsT0FBTyxHQUFHcmIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQ2lYLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckQ7RUFBQztJQUFBN2MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBTzJkLG1CQUFtQkEsQ0FBQ3JULEtBQUssRUFBUTtNQUN0QyxJQUFJLE9BQU9tSSxPQUFPLEtBQUssV0FBVyxJQUFJQSxPQUFPLEVBQUU7UUFDN0NBLE9BQU8sQ0FBQ2lCLElBQUksQ0FBQyx1Q0FBdUMsRUFBRXBKLEtBQUssQ0FBQyxDQUFDLENBQUM7TUFDaEU7SUFDRjtFQUFDO0FBQUE7QUFHSG9TLE9BQU8sQ0FBQzFQLFNBQVMsQ0FBQyxPQUFPLENBQUMsR0FBRyxVQUFTaVIsVUFBb0IsRUFBa0I7RUFDMUUsT0FBTyxJQUFJLENBQUNqQyxJQUFJLENBQUMsSUFBSSxFQUFFaUMsVUFBVSxDQUFDO0FBQ3BDLENBQUM7QUFFRHZCLE9BQU8sQ0FBQzFQLFNBQVMsQ0FBQyxNQUFNLENBQUMsR0FBRyxVQUFTZ1IsV0FBcUIsRUFBRUMsVUFBb0IsRUFBa0I7RUFDaEcsSUFBTVYsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDbUIsV0FBVyxDQUFDO0lBQUEsT0FBTSxJQUFJO0VBQUEsRUFBQztFQUVoRCxJQUFJLENBQUNaLE1BQU0sQ0FBQyxJQUFJckIsdURBQWMsQ0FBQ3VCLFdBQVcsRUFBRUMsVUFBVSxFQUFFVixPQUFPLENBQUMsQ0FBQztFQUVqRSxPQUFPQSxPQUFPO0FBQ2hCLENBQUM7QUFFRGIsT0FBTyxDQUFDMVAsU0FBUyxDQUFDLFNBQVMsQ0FBQyxHQUFHLFVBQVMyUCxRQUFrQixFQUFrQjtFQUMxRSxJQUFNK0IsV0FBVyxHQUFHLElBQUksQ0FBQ0EsV0FBVztFQUVwQyxPQUFPLElBQUksQ0FBQzFDLElBQUksQ0FDZCxVQUFBaGMsS0FBSztJQUFBLE9BQUkwZSxXQUFXLENBQUNMLE9BQU8sQ0FBQzFCLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQ1gsSUFBSSxDQUFDO01BQUEsT0FBTWhjLEtBQUs7SUFBQSxFQUFDO0VBQUEsR0FDMUQsVUFBQW9kLE1BQU07SUFBQSxPQUFJc0IsV0FBVyxDQUFDTCxPQUFPLENBQUMxQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNYLElBQUksQ0FBQztNQUFBLE9BQU0wQyxXQUFXLENBQUNKLE1BQU0sQ0FBQ2xCLE1BQU0sQ0FBQztJQUFBLEVBQUM7RUFBQSxDQUNsRixDQUFDO0FBQ0gsQ0FBQztBQUVELCtEQUFlVixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hRdEI7QUFDQTtBQUNBO0FBRkEsSUFLcUJELGNBQWMsZ0JBQUE1Yyx5SUFBQSxDQUtqQyxTQUFBNGMsZUFBWXVCLFdBQVcsRUFBRUMsVUFBVSxFQUFFVixPQUFPLEVBQUU7RUFBQWplLDRJQUFBLE9BQUFtZCxjQUFBO0VBQUFsZCw0SUFBQTtFQUFBQSw0SUFBQTtFQUFBQSw0SUFBQTtFQUM1QyxJQUFJLENBQUN5ZSxXQUFXLEdBQUcsT0FBT0EsV0FBVyxLQUFLLFVBQVUsR0FBR0EsV0FBVyxHQUFHLElBQUk7RUFDekUsSUFBSSxDQUFDQyxVQUFVLEdBQUcsT0FBT0EsVUFBVSxLQUFLLFVBQVUsR0FBR0EsVUFBVSxHQUFHLElBQUk7RUFDdEUsSUFBSSxDQUFDVixPQUFPLEdBQUdBLE9BQU87QUFDeEIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2RIO0FBQ0E7QUFDQTtBQUNvRDtBQUVoQjtBQUM2QjtBQUdTO0FBQUEsSUFTckR1QixxQkFBcUI7RUF1RXhDLFNBQUFBLHNCQUFBLEVBQXNCO0lBQUF4Ziw0SUFBQSxPQUFBd2YscUJBQUE7SUFDcEIsTUFBTSxJQUFJNVosS0FBSyxDQUFDLHNFQUFzRSxDQUFDO0VBQ3pGO0VBQUMsT0FBQXJGLHlJQUFBLENBQUFpZixxQkFBQTtJQUFBaGYsR0FBQTtJQUFBQyxHQUFBLEVBakVELFNBQUFBLElBQUEsRUFBb0U7TUFDbEUsT0FBTytlLHFCQUFxQixDQUFDQyxzQkFBc0I7SUFDckQ7RUFBQztJQUFBamYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT2dmLHlCQUF5QkEsQ0FBQSxFQUFTO01BQ3ZDLElBQUloYSxzRUFBaUIsQ0FBQ2lhLG1CQUFtQixFQUFFO1FBQ3pDLElBQU03RSxPQUFPLEdBQUcwRSxxQkFBcUIsQ0FBQ0ksaUNBQWlDLENBQUMsQ0FBQyxDQUN0RTVDLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQztVQUFBLE9BQUlnVSxxQkFBcUIsQ0FBQ2pWLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDJDQUEyQyxFQUFFUSxDQUFDLENBQUM7UUFBQSxFQUFDO01BQ3BHO0lBQ0Y7RUFBQztJQUFBaEwsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQW1mLGtDQUFBLEdBQUE3RSw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUFFLFFBQUE7UUFBQSxPQUFBRiw0SUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNTeUQscUJBQXFCLENBQUNNLE9BQU8sR0FBRztnQkFDckNDLFNBQVMsRUFBRSxVQUFVO2dCQUNyQkMsY0FBYyxFQUFFUixxQkFBcUIsQ0FBQ1MseUJBQXlCLENBQUMsQ0FBQyxDQUM5RGpELEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO2tCQUNWZ1UscUJBQXFCLENBQUNNLE9BQU8sR0FBRyxJQUFJO2tCQUVwQyxNQUFNdFUsQ0FBQztnQkFDVCxDQUFDO2NBQ0wsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBZ1EsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBZCxPQUFBO01BQUEsQ0FDRjtNQUFBLFNBVll5RSxpQ0FBaUNBLENBQUE7UUFBQSxPQUFBQyxrQ0FBQSxDQUFBMUQsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBakNrTSxpQ0FBaUM7SUFBQTtFQUFBO0lBQUFwZixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBd2YsMEJBQUEsR0FBQWxGLDhJQUFBLGNBQUFDLDRJQUFBLENBWTlDLFNBQUFrRixTQUFBO1FBQUEsSUFBQUosU0FBQTtVQUFBSyx3QkFBQTtVQUFBMWYsS0FBQTtVQUFBMmYsYUFBQTtVQUFBQyxNQUFBLEdBQUE1TSxTQUFBO1FBQUEsT0FBQXVILDRJQUFBLFVBQUFzRixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQS9FLElBQUEsR0FBQStFLFNBQUEsQ0FBQTlFLElBQUE7WUFBQTtjQUF1Q3FFLFNBQXFDLEdBQUFPLE1BQUEsQ0FBQWxWLE1BQUEsUUFBQWtWLE1BQUEsUUFBQTdhLFNBQUEsR0FBQTZhLE1BQUEsTUFBRyxVQUFVO2NBQUVGLHdCQUF3QixHQUFBRSxNQUFBLENBQUFsVixNQUFBLFFBQUFrVixNQUFBLFFBQUE3YSxTQUFBLEdBQUE2YSxNQUFBLE1BQUcsS0FBSztjQUFBLE1BQ3JIZCxxQkFBcUIsQ0FBQ00sT0FBTyxJQUFJTixxQkFBcUIsQ0FBQ00sT0FBTyxDQUFDQyxTQUFTLEtBQUtBLFNBQVMsSUFBSSxDQUFDSyx3QkFBd0I7Z0JBQUFJLFNBQUEsQ0FBQTlFLElBQUE7Z0JBQUE7Y0FBQTtjQUMvR2hiLEtBQUssR0FBRzhlLHFCQUFxQixDQUFDTSxPQUFPLENBQUNFLGNBQWM7Y0FFMURSLHFCQUFxQixDQUFDTSxPQUFPLEdBQUcsSUFBSTtjQUFDLE9BQUFVLFNBQUEsQ0FBQXpFLE1BQUEsV0FFOUJyYixLQUFLO1lBQUE7Y0FHUjJmLGFBQStCLEdBQUczYSxzRUFBaUIsQ0FBQythLG1DQUFtQyxHQUFHO2dCQUFDTCx3QkFBd0IsRUFBeEJBO2NBQXdCLENBQUMsR0FBRzNhLFNBQVM7Y0FBQSxPQUFBK2EsU0FBQSxDQUFBekUsTUFBQSxXQUUvSHlELHFCQUFxQixDQUFDQyxzQkFBc0IsQ0FBQy9lLEtBQUssQ0FBQ2dnQixvQkFBb0IsQ0FBQ0wsYUFBYSxDQUFDLENBQzFGM0QsSUFBSTtnQkFBQSxJQUFBbFYsSUFBQSxHQUFBd1QsOElBQUEsY0FBQUMsNElBQUEsQ0FBQyxTQUFBb0IsU0FBTTJELGNBQWM7a0JBQUEsSUFBQVcsc0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsZ0JBQUEsRUFBQUMsT0FBQTtrQkFBQSxPQUFBN0YsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7c0JBQUE7d0JBQ2xCaUYsc0JBQXNCLEdBQUdYLGNBQWMsQ0FBQ1csc0JBQXNCO3dCQUFBLEtBR2hFQSxzQkFBc0I7MEJBQUFwRSxTQUFBLENBQUFiLElBQUE7MEJBQUE7d0JBQUE7d0JBQ3hCbUYsZ0JBQWdCLEdBQUdiLGNBQWMsQ0FBQ2UsY0FBYyxDQUFDLE9BQU8sRUFBRTswQkFBQ2hCLFNBQVMsRUFBVEE7d0JBQVMsQ0FBQyxDQUFDO3dCQUN0RWEsZ0JBQWdCLEdBQUdaLGNBQWMsQ0FBQ2UsY0FBYyxDQUFDLE9BQU8sRUFBRTswQkFBQ2hCLFNBQVMsRUFBVEE7d0JBQVMsQ0FBQyxDQUFDO3dCQUFDeEQsU0FBQSxDQUFBeUUsRUFBQSxHQUdyRUgsZ0JBQWdCO3dCQUFBdEUsU0FBQSxDQUFBMEUsRUFBQSxHQUNoQkwsZ0JBQWdCO3dCQUFBckUsU0FBQSxDQUFBMkUsRUFBQSxHQUNBbEIsY0FBYzt3QkFBQXpELFNBQUEsQ0FBQWIsSUFBQTt3QkFBQSxPQUNac0UsY0FBYyxDQUFDbUIsV0FBVyxDQUFDMWIsU0FBUyxDQUFDO3NCQUFBO3dCQUFBOFcsU0FBQSxDQUFBNkUsRUFBQSxHQUFBN0UsU0FBQSxDQUFBUCxJQUFBO3dCQUFBLE9BQUFPLFNBQUEsQ0FBQVIsTUFBQTswQkFIdkQ4RSxnQkFBZ0IsRUFBQXRFLFNBQUEsQ0FBQXlFLEVBQUE7MEJBQ2hCSixnQkFBZ0IsRUFBQXJFLFNBQUEsQ0FBQTBFLEVBQUE7MEJBQ2hCakIsY0FBYyxFQUFBekQsU0FBQSxDQUFBMkUsRUFBQTswQkFDZEcsVUFBVSxFQUFBOUUsU0FBQSxDQUFBNkU7d0JBQUE7c0JBQUE7d0JBSVJOLE9BQU8sR0FBR2YsU0FBUyxLQUFLLFVBQVUsR0FBRzswQkFDekN1QixtQkFBbUIsRUFBRSxJQUFJOzBCQUN6QkMsbUJBQW1CLEVBQUU7d0JBQ3ZCLENBQUMsR0FBRyxDQUFDLENBQUM7d0JBQUFoRixTQUFBLENBQUFpRixFQUFBLEdBR1l4QixjQUFjO3dCQUFBekQsU0FBQSxDQUFBYixJQUFBO3dCQUFBLE9BQ1pzRSxjQUFjLENBQUNtQixXQUFXLENBQUNMLE9BQU8sQ0FBQztzQkFBQTt3QkFBQXZFLFNBQUEsQ0FBQWtGLEVBQUEsR0FBQWxGLFNBQUEsQ0FBQVAsSUFBQTt3QkFBQSxPQUFBTyxTQUFBLENBQUFSLE1BQUE7MEJBRHJEaUUsY0FBYyxFQUFBekQsU0FBQSxDQUFBaUYsRUFBQTswQkFDZEgsVUFBVSxFQUFBOUUsU0FBQSxDQUFBa0Y7d0JBQUE7c0JBQUE7c0JBQUE7d0JBQUEsT0FBQWxGLFNBQUEsQ0FBQU4sSUFBQTtvQkFBQTtrQkFBQSxHQUFBSSxRQUFBO2dCQUFBLENBRWI7Z0JBQUEsaUJBQUFILEVBQUE7a0JBQUEsT0FBQTFVLElBQUEsQ0FBQTJVLEtBQUEsT0FBQXpJLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUE4TSxTQUFBLENBQUF2RSxJQUFBO1VBQUE7UUFBQSxHQUFBa0UsUUFBQTtNQUFBLENBQ0w7TUFBQSxTQXRDWUYseUJBQXlCQSxDQUFBO1FBQUEsT0FBQUMsMEJBQUEsQ0FBQS9ELEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQXpCdU0seUJBQXlCO0lBQUE7RUFBQTtBQUFBO0FBQUFoZ0IsNElBQUEsQ0EvQm5CdWYscUJBQXFCLGFBQ050Vyw2REFBYSxDQUFDRyxTQUFTLENBQUMsdUJBQXVCLENBQUM7QUFBQXBKLDRJQUFBLENBRC9EdWYscUJBQXFCLDRCQUUwQyxJQUFJNWYsbURBQU8sQ0FBeUIsSUFBSTJmLHFFQUE0QixDQUFDLENBQUMsQ0FBQztBQUFBdGYsNElBQUEsQ0FGdEl1ZixxQkFBcUI7QUFBQTtBQTRFMUNBLHFCQUFxQixDQUFDRSx5QkFBeUIsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzlGakQ7QUFDQTtBQUNBO0FBRkEsSUFHcUJnQyx1QkFBdUI7RUEyQjFDLFNBQUFBLHdCQUFBLEVBQXNCO0lBQUExaEIsNElBQUEsT0FBQTBoQix1QkFBQTtJQUNwQixNQUFNLElBQUk5YixLQUFLLENBQUMsd0VBQXdFLENBQUM7RUFDM0Y7RUFBQyxPQUFBckYseUlBQUEsQ0FBQW1oQix1QkFBQTtJQUFBbGhCLEdBQUE7SUFBQUUsS0FBQSxFQTVCRCxTQUFPaWhCLGtCQUFrQkEsQ0FBQ3RCLGFBQStCLEVBQW9CO01BQzNFLElBQU11QixVQUEwQixHQUFHLEVBQUU7TUFFckMsS0FBSyxJQUFJdEQsQ0FBQyxHQUFHLENBQUMsRUFBRUEsQ0FBQyxHQUFHK0IsYUFBYSxDQUFDdUIsVUFBVSxDQUFDeFcsTUFBTSxFQUFFa1QsQ0FBQyxFQUFFLEVBQUU7UUFDeEQsSUFBTXVELElBQWMsR0FBRyxFQUFFO1FBRXpCLEtBQUssSUFBSTVNLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssR0FBRyxDQUFDLEVBQUVBLEtBQUssRUFBRSxFQUFFO1VBQ3RDLElBQU1xRCxHQUFHLEdBQUcrSCxhQUFhLENBQUN1QixVQUFVLENBQUN0RCxDQUFDLENBQUMsQ0FBQ3VELElBQUksQ0FBQzVNLEtBQUssQ0FBQztVQUVuRCxJQUFJcUQsR0FBRyxFQUFFO1lBQ1B1SixJQUFJLENBQUN6WCxJQUFJLENBQUNpVyxhQUFhLENBQUN1QixVQUFVLENBQUN0RCxDQUFDLENBQUMsQ0FBQ3VELElBQUksQ0FBQzVNLEtBQUssQ0FBQyxDQUFDO1VBQ3BEO1FBQ0Y7UUFFQTJNLFVBQVUsQ0FBQ3hYLElBQUksQ0FBQztVQUNkeVgsSUFBSSxFQUFFQSxJQUFJO1VBQ1ZDLFFBQVEsRUFBRXpCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3RELENBQUMsQ0FBQyxDQUFDd0QsUUFBUTtVQUM5Q0MsVUFBVSxFQUFFMUIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDdEQsQ0FBQyxDQUFDLENBQUN5RDtRQUMxQyxDQUFDLENBQUM7TUFDSjtNQUVBMUIsYUFBYSxDQUFDdUIsVUFBVSxHQUFHQSxVQUFVO01BRXJDLE9BQU92QixhQUFhO0lBQ3RCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQzVCSDtBQUNBO0FBQ0E7QUFDcUQ7QUFDWTtBQUU3QjtBQUVBO0FBK0JwQyxJQUFNNEIsc0JBQXNCLEdBQUcsSUFBSTtBQUFDLElBRWZDLG9CQUFvQjtFQVV2QyxTQUFBQSxxQkFBWWxDLGNBQStCLEVBQUVtQyxXQUF3QixFQUFFQyxzQkFBOEIsRUFBRTtJQUFBcGlCLDRJQUFBLE9BQUFraUIsb0JBQUE7SUFBQWppQiw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQSx3QkFOdkMsSUFBSUwsbURBQU8sQ0FBdUIsQ0FBQyxDQUFDLENBQUM7SUFBQUssNElBQUE7SUFBQUEsNElBQUEsNEJBRXpFLElBQUk7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFLOUIsSUFBSSxDQUFDb2lCLGVBQWUsR0FBR3JDLGNBQWM7SUFDckMsSUFBSSxDQUFDc0MsdUJBQXVCLEdBQUdGLHNCQUFzQjtJQUNyRCxJQUFJLENBQUNHLGdCQUFnQixHQUFHSixXQUFXLENBQUNLLFNBQVMsQ0FBQyxDQUFDLENBQUNDLEdBQUcsQ0FBQyxVQUFBQyxLQUFLO01BQUEsT0FBSUEsS0FBSyxDQUFDbEksSUFBSTtJQUFBLEVBQUMsSUFBSSxFQUFFO0lBRTlFLElBQUksSUFBSSxDQUFDNkgsZUFBZSxFQUFFO01BQ3hCLElBQUksQ0FBQzNjLHNFQUFpQixDQUFDaWQsdUJBQXVCLEVBQUU7UUFDOUMsSUFBTUMsU0FBUyxHQUFHLElBQUlaLGtEQUFTLENBQUMsSUFBSSxDQUFDSyxlQUFlLENBQUNRLHdCQUF3QixDQUFDQyxHQUFHLENBQUM7UUFFbEYsSUFBSSxDQUFDQyxvQkFBb0IsR0FBR0gsU0FBUyxDQUFDSSxVQUFVO1FBQ2hELElBQUksQ0FBQ0Msb0JBQW9CLEdBQUdMLFNBQVMsQ0FBQ00sVUFBVTtNQUNsRDtNQUVBLElBQUksQ0FBQ0MsZUFBZSxDQUFDLENBQUM7SUFDeEI7RUFDRjtFQUFDLE9BQUE1aUIseUlBQUEsQ0FBQTJoQixvQkFBQTtJQUFBMWhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBa0Q7TUFDaEQsT0FBTyxJQUFJLENBQUMyaUIsYUFBYTtJQUMzQjtFQUFDO0lBQUE1aUIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDd2lCLGlCQUFpQixHQUFHLEtBQUs7TUFDOUIsSUFBSSxDQUFDaEIsZUFBZSxHQUFHLElBQUk7TUFFM0IsSUFBSSxJQUFJLENBQUNpQixjQUFjLEVBQUU7UUFDdkI3akIsZ0VBQVcsQ0FBQ3FQLFlBQVksQ0FBQyxJQUFJLENBQUN3VSxjQUFjLENBQUM7UUFDN0MsSUFBSSxDQUFDQSxjQUFjLEdBQUcsSUFBSTtNQUM1QjtJQUNGO0VBQUM7SUFBQTlpQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBNmlCLGdCQUFBLEdBQUF2SSw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUFFLFFBQUE7UUFBQSxJQUFBcGEsS0FBQTtRQUFBLElBQUF5aUIsUUFBQSxFQUFBQyxrQkFBQSxFQUFBM0ksT0FBQTtRQUFBLE9BQUFHLDRJQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsS0FDTWhXLHNFQUFpQixDQUFDZ2UsNEJBQTRCO2dCQUFBbEksUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQUYsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FDMUIsSUFBSSxDQUFDaUkscUJBQXFCLENBQUMsQ0FBQztZQUFBO2NBQTVDN0ksUUFBTyxHQUFBVSxRQUFBLENBQUFRLElBQUE7Y0FBQSxPQUFBUixRQUFBLENBQUFPLE1BQUE7WUFBQTtjQUtmO2NBQ00wSCxrQkFBa0IsR0FBRyxTQUFyQkEsa0JBQWtCQSxDQUFJblIsSUFBSTtnQkFBQSxPQUFhQSxJQUFJLENBQUNzUixFQUFFLENBQUM3ZixRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxHQUFHdU8sSUFBSSxDQUFDc1IsRUFBRSxDQUFDN2YsUUFBUSxDQUFDLE9BQU8sQ0FBQyxHQUFHLE9BQU8sR0FBRyxFQUFFO2NBQUE7Y0FBQXlYLFFBQUEsQ0FBQUUsSUFBQTtjQUFBLE9BQ3JHLElBQUksQ0FBQzJHLGVBQWUsQ0FBQ3dCLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdERuSCxJQUFJLENBQUMsVUFBQW9ILEtBQUssRUFBSTtnQkFDYixJQUFNQyxhQUFtQyxHQUFHLENBQUMsQ0FBQztnQkFFOUMsSUFBSUQsS0FBSyxFQUFFO2tCQUNULElBQUlFLGFBQWEsR0FBR2pqQixLQUFJLENBQUN1aEIsdUJBQXVCO2tCQUNoRCxJQUFJMkIsMkJBQTJCO2tCQUUvQkgsS0FBSyxDQUFDN1QsT0FBTyxDQUFDLFVBQUFpVSxNQUFNLEVBQUk7b0JBQ3RCLElBQUlBLE1BQU0sQ0FBQzliLElBQUksS0FBSyxnQkFBZ0IsSUFBSThiLE1BQU0sQ0FBQ0Msb0JBQW9CLEVBQUU7c0JBQ25FSCxhQUFhLEdBQUdFLE1BQU0sQ0FBQ0Msb0JBQW9CLEdBQUcsSUFBSTtzQkFFbEQsSUFBSUosYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFO3dCQUMxQkEsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDQyxhQUFhLEdBQUdBLGFBQWE7c0JBQ3REO3NCQUVBLElBQUlELGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0MsYUFBYSxHQUFHQSxhQUFhO3NCQUN0RDtvQkFDRjtvQkFFQSxJQUFJRSxNQUFNLENBQUM5YixJQUFJLEtBQUssZ0JBQWdCLElBQUk4YixNQUFNLENBQUNELDJCQUEyQixFQUFFO3NCQUMxRUEsMkJBQTJCLEdBQUdDLE1BQU0sQ0FBQ0QsMkJBQTJCO3NCQUVoRSxJQUFJRixhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUU7d0JBQzFCQSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUNFLDJCQUEyQixHQUFHQSwyQkFBMkI7c0JBQ2xGO3NCQUVBLElBQUlGLGFBQWEsQ0FBQyxPQUFPLENBQUMsRUFBRTt3QkFDMUJBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQ0UsMkJBQTJCLEdBQUdBLDJCQUEyQjtzQkFDbEY7b0JBQ0Y7b0JBRUEsSUFBSUMsTUFBTSxDQUFDOWIsSUFBSSxLQUFLLGFBQWEsRUFBRTtzQkFDakMsSUFBTW9TLEtBQUksR0FBRzBKLE1BQU0sQ0FBQzFKLElBQUksSUFBSTBKLE1BQU0sQ0FBQ0UsU0FBUyxJQUFJWCxrQkFBa0IsQ0FBQ1MsTUFBTSxDQUFDO3NCQUMxRSxJQUFJRyxLQUFLLEdBQUcsRUFBRTtzQkFFZFAsS0FBSyxDQUFDN1QsT0FBTyxDQUFDLFVBQUFxQyxJQUFJLEVBQUk7d0JBQ3BCLElBQUlBLElBQUksQ0FBQ3NSLEVBQUUsS0FBS00sTUFBTSxDQUFDSSxPQUFPLEVBQUU7MEJBQzlCRCxLQUFLLEdBQUcvUixJQUFJLENBQUNpUyxRQUFRO3dCQUN2QjtzQkFDRixDQUFDLENBQUM7c0JBRUYsSUFBSS9KLEtBQUksSUFBSXpaLEtBQUksQ0FBQ3doQixnQkFBZ0IsQ0FBQ3hlLFFBQVEsQ0FBQ3lXLEtBQUksQ0FBQyxFQUFFO3dCQUFBLElBQUFnSyxxQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxzQkFBQTt3QkFDaEQsSUFBTUMsS0FBSyxHQUFHWCxNQUFNLENBQUNZLGFBQWEsSUFBSSxDQUFDO3dCQUN2QyxJQUFNQyxxQkFBcUIsSUFBQVAscUJBQUEsSUFBQUMsc0JBQUEsR0FBRzFqQixLQUFJLENBQUNxaUIsYUFBYSxDQUFDMWlCLEtBQUssY0FBQStqQixzQkFBQSx3QkFBQUMsc0JBQUEsR0FBeEJELHNCQUFBLENBQTJCakssS0FBSSxDQUFDLGNBQUFrSyxzQkFBQSx1QkFBaENBLHNCQUFBLENBQWtDSSxhQUFhLGNBQUFOLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUksQ0FBQzt3QkFDbEYsSUFBTVEsVUFBVSxHQUFHSCxLQUFLLEdBQUdFLHFCQUFxQjt3QkFDaEQsSUFBTUUsU0FBUyxHQUFHZixNQUFNLENBQUN4SixTQUFTLEtBQUFpSyxzQkFBQSxHQUFHNWpCLEtBQUksQ0FBQ3FpQixhQUFhLENBQUMxaUIsS0FBSyxjQUFBaWtCLHNCQUFBLHdCQUFBQyxzQkFBQSxHQUF4QkQsc0JBQUEsQ0FBMkJuSyxLQUFJLENBQUMsY0FBQW9LLHNCQUFBLHVCQUFoQ0Esc0JBQUEsQ0FBa0NsSyxTQUFTO3dCQUNoRixJQUFNd0ssT0FBTyxHQUFHRixVQUFVLElBQUlDLFNBQVMsR0FBR3hVLElBQUksQ0FBQ0MsS0FBSyxDQUFDLENBQUMsR0FBR3NVLFVBQVUsR0FDakVDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDO3dCQUV2QmxCLGFBQWEsQ0FBQ3ZKLEtBQUksQ0FBQyxHQUFHOzBCQUNwQjJLLElBQUksRUFBRWpCLE1BQU0sQ0FBQ2lCLElBQUk7MEJBQ2pCZixTQUFTLEVBQUU1SixLQUFJOzBCQUNmRSxTQUFTLEVBQUV3SixNQUFNLENBQUN4SixTQUFTOzBCQUMzQndLLE9BQU8sRUFBUEEsT0FBTzswQkFDUEosYUFBYSxFQUFFWixNQUFNLENBQUNZLGFBQWE7MEJBQ25DTSxXQUFXLEVBQUVsQixNQUFNLENBQUNrQixXQUFXOzBCQUMvQkMsZUFBZSxFQUFFbkIsTUFBTSxDQUFDbUIsZUFBZTswQkFDdkNoQixLQUFLLEVBQUVBLEtBQUssSUFBSXRqQixLQUFJLENBQUN1a0IsY0FBYyxDQUFDOUssS0FBSSxDQUFDOzBCQUN6Q3dKLGFBQWEsRUFBYkE7d0JBQ0YsQ0FBQzt3QkFFRCxJQUFJRSxNQUFNLENBQUNELDJCQUEyQixJQUFJQSwyQkFBMkIsRUFBRTswQkFDckVGLGFBQWEsQ0FBQ3ZKLEtBQUksQ0FBQyxDQUFDeUosMkJBQTJCLEdBQUdDLE1BQU0sQ0FBQ0QsMkJBQTJCLElBQUlBLDJCQUEyQjt3QkFDckg7d0JBRUEsSUFBSXpKLEtBQUksS0FBSyxPQUFPLElBQUl6WixLQUFJLENBQUNxaUIsYUFBYSxDQUFDMWlCLEtBQUssSUFBSUssS0FBSSxDQUFDcWlCLGFBQWEsQ0FBQzFpQixLQUFLLENBQUM2a0IsS0FBSyxFQUFFOzBCQUNsRnhCLGFBQWEsQ0FBQ3ZKLEtBQUksQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHMEosTUFBTSxDQUFDc0IsYUFBYTswQkFFM0QsSUFBTUMsR0FBRyxHQUFHLENBQUN2QixNQUFNLENBQUNzQixhQUFhLEdBQUd6a0IsS0FBSSxDQUFDcWlCLGFBQWEsQ0FBQzFpQixLQUFLLENBQUM2a0IsS0FBSyxDQUFDQyxhQUFhLEtBQzdFekIsYUFBYSxDQUFDdkosS0FBSSxDQUFDLENBQUNFLFNBQVMsR0FBRzNaLEtBQUksQ0FBQ3FpQixhQUFhLENBQUMxaUIsS0FBSyxDQUFDNmtCLEtBQUssQ0FBQzdLLFNBQVMsQ0FBQyxHQUMxRSxJQUFJOzBCQUVOcUosYUFBYSxDQUFDdkosS0FBSSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUdpTCxHQUFHLEdBQUdoVixJQUFJLENBQUNPLEtBQUssQ0FBQ3lVLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQzt3QkFDcEU7c0JBQ0Y7b0JBQ0Y7a0JBQ0YsQ0FBQyxDQUFDO2dCQUNKO2dCQUVBMWtCLEtBQUksQ0FBQ3FpQixhQUFhLENBQUMxaUIsS0FBSyxHQUFHcWpCLGFBQWE7Y0FDMUMsQ0FBQyxDQUFDLENBQUNySCxJQUFJLENBQUMsWUFBTTtnQkFDWixJQUFJM2IsS0FBSSxDQUFDc2lCLGlCQUFpQixFQUFFO2tCQUMxQnRpQixLQUFJLENBQUN1aUIsY0FBYyxHQUFHN2pCLGdFQUFXLENBQUMyRyxVQUFVLENBQUM7b0JBQUEsT0FBTXJGLEtBQUksQ0FBQ29pQixlQUFlLENBQUMsQ0FBQztrQkFBQSxHQUFFbEIsc0JBQXNCLENBQUM7Z0JBQ3BHO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0F0RkVuSCxPQUFPLEdBQUFVLFFBQUEsQ0FBQVEsSUFBQTtZQUFBO1lBQUE7Y0FBQSxPQUFBUixRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQXVGZDtNQUFBLFNBaEdhZ0ksZUFBZUEsQ0FBQTtRQUFBLE9BQUFJLGdCQUFBLENBQUFwSCxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFmeVAsZUFBZTtJQUFBO0VBQUE7SUFBQTNpQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBZ2xCLHNCQUFBLEdBQUExSyw4SUFBQSxjQUFBQyw0SUFBQSxDQWtHN0IsU0FBQW9CLFNBQUE7UUFBQSxJQUFBdEgsTUFBQTtRQUFBLElBQUErRixPQUFBO1FBQUEsT0FBQUcsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQUFhLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQ3dCLElBQUksQ0FBQzJHLGVBQWUsQ0FBQ3NELGNBQWMsQ0FBQyxDQUFDLENBQUNqSixJQUFJLENBQUMsVUFBQW9ILEtBQUssRUFBSTtnQkFDeEUsSUFBTUMsYUFBbUMsR0FBRyxDQUFDLENBQUM7Z0JBQzlDLElBQUlDLGFBQWEsR0FBR2pQLE1BQUksQ0FBQ3VOLHVCQUF1QjtnQkFFaER3QixLQUFLLENBQUNsRixNQUFNLENBQUMsQ0FBQyxDQUFDM08sT0FBTyxDQUFDLFVBQUFpVSxNQUFNLEVBQUk7a0JBQy9CQSxNQUFNLENBQUMwQixLQUFLLENBQUMsQ0FBQyxDQUFDM1YsT0FBTyxDQUFDLFVBQUEzTCxJQUFJLEVBQUk7b0JBQzdCLElBQUlBLElBQUksS0FBSyxTQUFTLEVBQUU7c0JBQ3RCMGYsYUFBYSxHQUFHRSxNQUFNLENBQUMyQixJQUFJLENBQUN2aEIsSUFBSSxDQUFDO29CQUNuQztrQkFDRixDQUFDLENBQUM7a0JBRUYsSUFBSTRmLE1BQU0sQ0FBQzliLElBQUksS0FBSyxNQUFNLEVBQUU7b0JBQzFCLElBQU1nYyxTQUFTLEdBQUdGLE1BQU0sQ0FBQzJCLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzNWLFFBQVEsQ0FBQyxDQUFDO29CQUVyRDZULGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLEdBQUc7c0JBQUMxSixTQUFTLEVBQUV4YSxJQUFJLENBQUNDLEdBQUcsQ0FBQztvQkFBQyxDQUFDO29CQUNsRDRqQixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHRixNQUFNLENBQUMyQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMzVixRQUFRLENBQUMsQ0FBQztvQkFDakU2VCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHQSxTQUFTO29CQUNqREwsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxlQUFlLENBQUMsR0FBR0YsTUFBTSxDQUFDMkIsSUFBSSxDQUFDLGVBQWUsQ0FBQztvQkFDeEU5QixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxHQUFHRixNQUFNLENBQUMyQixJQUFJLENBQUMsYUFBYSxDQUFDO29CQUNwRTlCLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsaUJBQWlCLENBQUMsR0FBR0YsTUFBTSxDQUFDMkIsSUFBSSxDQUFDLGlCQUFpQixDQUFDO29CQUM1RTlCLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUdGLE1BQU0sQ0FBQzJCLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQzNWLFFBQVEsQ0FBQyxDQUFDLElBQUk2RSxNQUFJLENBQUN1USxjQUFjLENBQUNsQixTQUFTLENBQUM7b0JBQzdHTCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxHQUFHSixhQUFhO29CQUV6RCxJQUFJSSxTQUFTLEtBQUssT0FBTyxJQUFJclAsTUFBSSxDQUFDcU8sYUFBYSxDQUFDMWlCLEtBQUssSUFBSXFVLE1BQUksQ0FBQ3FPLGFBQWEsQ0FBQzFpQixLQUFLLENBQUM2a0IsS0FBSyxFQUFFO3NCQUN2RnhCLGFBQWEsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsZUFBZSxDQUFDLEdBQUdGLE1BQU0sQ0FBQzJCLElBQUksQ0FBQyxlQUFlLENBQUM7c0JBQ3hFOUIsYUFBYSxDQUFDSyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDTCxhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDb0IsYUFBYSxHQUFHelEsTUFBSSxDQUFDcU8sYUFBYSxDQUFDMWlCLEtBQUssQ0FBQzZrQixLQUFLLENBQUNDLGFBQWEsS0FDckh6QixhQUFhLENBQUNLLFNBQVMsQ0FBQyxDQUFDMUosU0FBUyxHQUFHM0YsTUFBSSxDQUFDcU8sYUFBYSxDQUFDMWlCLEtBQUssQ0FBQzZrQixLQUFLLENBQUM3SyxTQUFTLENBQUMsR0FDakYsSUFBSSxJQUFJLENBQUM7b0JBQ1g7a0JBQ0Y7Z0JBQ0YsQ0FBQyxDQUFDO2dCQUNGM0YsTUFBSSxDQUFDcU8sYUFBYSxDQUFDMWlCLEtBQUssR0FBR3FqQixhQUFhO2NBQzFDLENBQUMsQ0FBQyxDQUFDckgsSUFBSSxDQUFDLFlBQU07Z0JBQ1osSUFBSTNILE1BQUksQ0FBQ3NPLGlCQUFpQixFQUFFO2tCQUMxQnRPLE1BQUksQ0FBQ3VPLGNBQWMsR0FBRzdqQixnRUFBVyxDQUFDMkcsVUFBVSxDQUFDO29CQUFBLE9BQU0yTyxNQUFJLENBQUNvTyxlQUFlLENBQUMsQ0FBQztrQkFBQSxHQUFFbEIsc0JBQXNCLENBQUM7Z0JBQ3BHO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FwQ0luSCxPQUFPLEdBQUF5QixTQUFBLENBQUFQLElBQUE7WUFBQTtZQUFBO2NBQUEsT0FBQU8sU0FBQSxDQUFBTixJQUFBO1VBQUE7UUFBQSxHQUFBSSxRQUFBO01BQUEsQ0FxQ2Q7TUFBQSxTQXRDYXNILHFCQUFxQkEsQ0FBQTtRQUFBLE9BQUErQixzQkFBQSxDQUFBdkosS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBckJpUSxxQkFBcUI7SUFBQTtFQUFBO0lBQUFuakIsR0FBQTtJQUFBRSxLQUFBLEVBd0NuQyxTQUFRNGtCLGNBQWNBLENBQUNsZCxJQUFZLEVBQVU7TUFDM0MsUUFBUUEsSUFBSTtRQUNWLEtBQUssT0FBTztVQUNWLE9BQU8sSUFBSSxDQUFDMmEsb0JBQW9CO1FBQ2xDLEtBQUssT0FBTztVQUNWLE9BQU8sSUFBSSxDQUFDRSxvQkFBb0I7UUFDbEM7VUFDRSxPQUFPLFNBQVM7TUFDcEI7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3JPSDtBQUNBO0FBQ0E7QUFGQSxJQUlxQmpCLFNBQVM7RUFPNUIsU0FBQUEsVUFBWWMsR0FBVyxFQUFFO0lBQUE5aUIsNElBQUEsT0FBQWdpQixTQUFBO0lBQUEvaEIsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFDdkIsSUFBSSxDQUFDNmxCLElBQUksR0FBR2hELEdBQUc7SUFFZixJQUFNaUQsZUFBZSxHQUFHLElBQUksQ0FBQ0QsSUFBSSxDQUFDL2lCLEtBQUssQ0FBQyxjQUFjLENBQUM7SUFDdkQsSUFBTWlqQixnQkFBZ0IsR0FBRyxJQUFJLENBQUNGLElBQUksQ0FBQy9pQixLQUFLLENBQUMsZ0JBQWdCLENBQUM7SUFFMUQsSUFBSSxDQUFDa2pCLFdBQVcsR0FBRyxJQUFJLENBQUNDLFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNJLFdBQVcsR0FBRyxJQUFJLENBQUNELFVBQVUsQ0FBQyxPQUFPLEVBQUVILGVBQWUsQ0FBQztJQUM1RCxJQUFJLENBQUNLLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Msb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztJQUNoRixJQUFJLENBQUNNLG9CQUFvQixHQUFHLElBQUksQ0FBQ0Qsb0JBQW9CLENBQUMsT0FBTyxFQUFFTCxnQkFBZ0IsQ0FBQztFQUNsRjtFQUFDLE9BQUF6bEIseUlBQUEsQ0FBQXloQixTQUFBO0lBQUF4aEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF5QjtNQUN2QixPQUFPLElBQUksQ0FBQ3dsQixXQUFXO0lBQ3pCO0VBQUM7SUFBQXpsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXlCO01BQ3ZCLE9BQU8sSUFBSSxDQUFDMGxCLFdBQVc7SUFDekI7RUFBQztJQUFBM2xCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBbUM7TUFDakMsT0FBTyxJQUFJLENBQUMybEIsb0JBQW9CO0lBQ2xDO0VBQUM7SUFBQTVsQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1DO01BQ2pDLE9BQU8sSUFBSSxDQUFDNmxCLG9CQUFvQjtJQUNsQztFQUFDO0lBQUE5bEIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTJsQixvQkFBb0JBLENBQUNqZSxJQUFZLEVBQUU0ZCxnQkFBMEIsRUFBVztNQUM5RSxJQUFNTyxpQkFBaUIsR0FBR1AsZ0JBQWdCLENBQUNRLElBQUksQ0FBQyxVQUFBQyxRQUFRO1FBQUEsT0FBSUEsUUFBUSxDQUFDaGIsVUFBVSxDQUFDckQsSUFBSSxDQUFDO01BQUEsRUFBQztNQUV0RixJQUFJLENBQUNtZSxpQkFBaUIsRUFBRTtRQUN0QixPQUFPLEtBQUs7TUFDZDtNQUVBLE9BQU8sQ0FBQ0EsaUJBQWlCLENBQUN4aUIsUUFBUSxhQUFhLENBQUM7SUFDbEQ7RUFBQztJQUFBdkQsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXdsQixVQUFVQSxDQUFDOWQsSUFBWSxFQUFFMmQsZUFBMEIsRUFBVTtNQUNuRSxJQUFNVyxhQUFhLEdBQUdYLGVBQWUsQ0FBQ1MsSUFBSSxDQUFDLFVBQUFHLE9BQU87UUFBQSxPQUFJQSxPQUFPLENBQUM1aUIsUUFBUSxhQUFBVCxNQUFBLENBQWF5aUIsZUFBZSxDQUFDUyxJQUFJLENBQUMsVUFBQWxJLENBQUM7VUFBQSxPQUFJQSxDQUFDLENBQUN2YSxRQUFRLE1BQUFULE1BQUEsQ0FBTThFLElBQUksQ0FBRSxDQUFDO1FBQUEsRUFBQyxDQUFDckYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFFLENBQUM7TUFBQSxFQUFDO01BQ3ZKLElBQU02akIsU0FBUyxHQUFHRixhQUFhLENBQUMzakIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztNQUM3QyxJQUFNOGpCLFNBQVMsR0FBR0QsU0FBUyxDQUFDN2pCLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7TUFFekMsT0FBTzhqQixTQUFTO0lBQ2xCO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdkRIO0FBQ0E7QUFDQTtBQUNvRDtBQUdhO0FBQUEsSUFHM0RDLHFCQUFxQjtFQUl6QixTQUFBQSxzQkFBWXpHLGFBQWdDLEVBQUU7SUFBQXJnQiw0SUFBQSxPQUFBOG1CLHFCQUFBO0lBQUE3bUIsNElBQUEsa0JBSFZpSiw2REFBYSxDQUFDRyxTQUFTLENBQUMsdUJBQXVCLENBQUM7SUFBQXBKLDRJQUFBO0lBSWxGLElBQUl5RixzRUFBaUIsQ0FBQ3FoQiw4QkFBOEIsRUFBRTtNQUNwRDtNQUNBO01BQ0E7TUFDQTtNQUNBO01BQ0EsSUFBSSxDQUFDMUUsZUFBZSxHQUFHLElBQUkyRSx1QkFBdUIsQ0FBQzNHLGFBQWEsQ0FBQztNQUVqRTtJQUNGO0lBRUEsSUFBSSxDQUFDZ0MsZUFBZSxHQUFHLElBQUk0RSxpQkFBaUIsQ0FBQzVHLGFBQWEsQ0FBQztFQUM3RDtFQUFDLE9BQUE5Zix5SUFBQSxDQUFBdW1CLHFCQUFBO0lBQUF0bUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QztNQUNyQyxPQUFPLElBQUksQ0FBQzRoQixlQUFlO0lBQzdCO0VBQUM7SUFBQTdoQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTREO01BQzFELE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQzZFLHVCQUF1QjtJQUNyRDtFQUFDO0lBQUExbUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE2RDtNQUMzRCxPQUFPLElBQUksQ0FBQzRoQixlQUFlLENBQUNRLHdCQUF3QjtJQUN0RDtFQUFDO0lBQUFyaUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QztNQUM1QyxPQUFPLElBQUksQ0FBQzRoQixlQUFlLENBQUM4RSxlQUFlO0lBQzdDO0VBQUM7SUFBQTNtQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWdEO01BQzlDLE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQytFLGtCQUFrQjtJQUNoRDtFQUFDO0lBQUE1bUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQ2dGLGdCQUFnQixLQUFLLFVBQVU7SUFDcEU7RUFBQztJQUFBN21CLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxPQUFPLElBQUksQ0FBQzRoQixlQUFlLENBQUNpRixnQkFBZ0IsS0FBSyxVQUFVO0lBQ3BFO0VBQUM7SUFBQTltQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU8sQ0FBQ2lGLHNFQUFpQixDQUFDNmhCLHFCQUFxQixJQUFJLE9BQU8sSUFBSSxDQUFDbEYsZUFBZSxDQUFDdEIsY0FBYyxLQUFLLFVBQVU7SUFDOUc7RUFBQztJQUFBdmdCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUE4bUIsWUFBQSxHQUFBeE0sOElBQUEsY0FBQUMsNElBQUEsQ0FFRCxTQUFBRSxRQUFrQjJGLE9BQXlCO1FBQUEsSUFBQS9mLEtBQUE7UUFBQSxPQUFBa2EsNElBQUEsVUFBQU0sU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FBQSxLQUNyQ2hXLHNFQUFpQixDQUFDK2hCLDZCQUE2QjtnQkFBQWpNLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQUYsUUFBQSxDQUFBTyxNQUFBLFdBSzFDLElBQUlxQixPQUFPLENBQUMsVUFBQzJCLE9BQU8sRUFBRUMsTUFBTTtnQkFBQSxPQUFLamUsS0FBSSxDQUFDc2hCLGVBQWUsQ0FBQ2xCLFdBQVcsQ0FBQ3BDLE9BQU8sRUFBRUMsTUFBTSxFQUFFOEIsT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO2NBQUEsT0FBQXRGLFFBQUEsQ0FBQU8sTUFBQSxXQUc5RixJQUFJLENBQUNzRyxlQUFlLENBQUNsQixXQUFXLENBQUNMLE9BQU8sQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBdEYsUUFBQSxDQUFBUyxJQUFBO1VBQUE7UUFBQSxHQUFBZCxPQUFBO01BQUEsQ0FDakQ7TUFBQSxTQVZLZ0csV0FBV0EsQ0FBQWpGLEVBQUE7UUFBQSxPQUFBc0wsWUFBQSxDQUFBckwsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBWHlOLFdBQVc7SUFBQTtFQUFBO0lBQUEzZ0IsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWduQixhQUFBLEdBQUExTSw4SUFBQSxjQUFBQyw0SUFBQSxDQVlqQixTQUFBb0IsU0FBbUJ5RSxPQUEwQjtRQUFBLElBQUEvTCxNQUFBO1FBQUEsT0FBQWtHLDRJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUFBLEtBQ3ZDaFcsc0VBQWlCLENBQUMraEIsNkJBQTZCO2dCQUFBbEwsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBYSxTQUFBLENBQUFSLE1BQUEsV0FLMUMsSUFBSXFCLE9BQU8sQ0FBQyxVQUFDMkIsT0FBTyxFQUFFQyxNQUFNO2dCQUFBLE9BQUtqSyxNQUFJLENBQUNzTixlQUFlLENBQUNzRixZQUFZLENBQUM1SSxPQUFPLEVBQUVDLE1BQU0sRUFBRThCLE9BQU8sQ0FBQztjQUFBLEVBQUM7WUFBQTtjQUFBLE9BQUF2RSxTQUFBLENBQUFSLE1BQUEsV0FHL0YsSUFBSSxDQUFDc0csZUFBZSxDQUFDc0YsWUFBWSxDQUFDN0csT0FBTyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF2RSxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUNsRDtNQUFBLFNBVktzTCxZQUFZQSxDQUFBQyxHQUFBO1FBQUEsT0FBQUYsYUFBQSxDQUFBdkwsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBWmlVLFlBQVk7SUFBQTtFQUFBO0lBQUFubkIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQW1uQixvQkFBQSxHQUFBN00sOElBQUEsY0FBQUMsNElBQUEsQ0FZbEIsU0FBQWtGLFNBQTBCMkgsV0FBc0M7UUFBQSxPQUFBN00sNElBQUEsVUFBQXNGLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL0UsSUFBQSxHQUFBK0UsU0FBQSxDQUFBOUUsSUFBQTtZQUFBO2NBQUEsT0FBQThFLFNBQUEsQ0FBQXpFLE1BQUEsV0FDdkQsSUFBSSxDQUFDc0csZUFBZSxDQUFDMEYsbUJBQW1CLENBQUNyaUIsc0VBQWlCLENBQUMraEIsNkJBQTZCLEdBQzdGLElBQUlPLHFCQUFxQixDQUFDRixXQUFXLENBQUMsR0FBR0EsV0FBVyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUF0SCxTQUFBLENBQUF2RSxJQUFBO1VBQUE7UUFBQSxHQUFBa0UsUUFBQTtNQUFBLENBQ3hEO01BQUEsU0FISzRILG1CQUFtQkEsQ0FBQUUsR0FBQTtRQUFBLE9BQUFKLG9CQUFBLENBQUExTCxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFuQnFVLG1CQUFtQjtJQUFBO0VBQUE7SUFBQXZuQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBd25CLHFCQUFBLEdBQUFsTiw4SUFBQSxjQUFBQyw0SUFBQSxDQUt6QixTQUFBa04sU0FBMkJMLFdBQXNDO1FBQUEsSUFBQU0sZ0JBQUE7UUFBQSxJQUFBQyxTQUFBO1FBQUEsT0FBQXBOLDRJQUFBLFVBQUFxTixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTlNLElBQUEsR0FBQThNLFNBQUEsQ0FBQTdNLElBQUE7WUFBQTtjQUN6RDJNLFNBQVMsSUFBQUQsZ0JBQUEsR0FBR04sV0FBVyxDQUFDaEYsR0FBRyxjQUFBc0YsZ0JBQUEsdUJBQWZBLGdCQUFBLENBQWlCMWxCLEtBQUssQ0FBQyxZQUFZLENBQUM7Y0FFdEQsSUFBSTJsQixTQUFTLEVBQUU7Z0JBQ2IsSUFBSSxDQUFDOWQsT0FBTyxDQUFDNkosSUFBSSxDQUFDLCtCQUErQixDQUFDO2NBQ3BEO2NBQUMsT0FBQW1VLFNBQUEsQ0FBQXhNLE1BQUEsV0FFTSxJQUFJLENBQUNzRyxlQUFlLENBQUNtRyxvQkFBb0IsQ0FBQzlpQixzRUFBaUIsQ0FBQytoQiw2QkFBNkIsR0FDOUYsSUFBSU8scUJBQXFCLENBQUNGLFdBQVcsQ0FBQyxHQUFHQSxXQUFXLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQVMsU0FBQSxDQUFBdE0sSUFBQTtVQUFBO1FBQUEsR0FBQWtNLFFBQUE7TUFBQSxDQUN4RDtNQUFBLFNBVEtLLG9CQUFvQkEsQ0FBQUMsR0FBQTtRQUFBLE9BQUFQLHFCQUFBLENBQUEvTCxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFwQjhVLG9CQUFvQjtJQUFBO0VBQUE7SUFBQWhvQixHQUFBO0lBQUFFLEtBQUEsRUFXMUIsU0FBQWdvQixVQUFVQSxDQUFBLEVBQW1CO01BQzNCLE9BQU8sSUFBSSxDQUFDckcsZUFBZSxDQUFDcUcsVUFBVSxDQUFDLENBQUM7SUFDMUM7RUFBQztJQUFBbG9CLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFpb0IsWUFBWUEsQ0FBQSxFQUFxQjtNQUMvQixPQUFPLElBQUksQ0FBQ3RHLGVBQWUsQ0FBQ3NHLFlBQVksQ0FBQyxDQUFDO0lBQzVDO0VBQUM7SUFBQW5vQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbWpCLFFBQVFBLENBQUMrRSxRQUFrQyxFQUEyQjtNQUNwRSxPQUFPLElBQUksQ0FBQ3ZHLGVBQWUsQ0FBQ3dCLFFBQVEsQ0FBQytFLFFBQVEsQ0FBQztJQUNoRDtFQUFDO0lBQUFwb0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQWlsQixjQUFjQSxDQUFBLEVBQW1DO01BQUEsSUFBQWtELE1BQUE7TUFDL0MsT0FBTyxJQUFJekwsT0FBTyxDQUFDLFVBQUEyQixPQUFPLEVBQUk7UUFDNUI7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsSUFBTWpFLE9BQU8sR0FBRytOLE1BQUksQ0FBQ3hHLGVBQWUsQ0FBQ3dCLFFBQVEsQ0FBQzlFLE9BQU8sQ0FBQztNQUN4RCxDQUFDLENBQUM7SUFDSjtFQUFDO0lBQUF2ZSxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBaUksZ0JBQWdCQSxDQUFDUCxJQUEwQixFQUFFTSxRQUE0QyxFQUFFb1ksT0FBMkMsRUFBUTtNQUM1SSxJQUFJLENBQUN1QixlQUFlLENBQUMxWixnQkFBZ0IsQ0FBQ1AsSUFBSSxFQUFFTSxRQUFRLEVBQUVvWSxPQUFPLENBQUM7SUFDaEU7RUFBQztJQUFBdGdCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtSSxtQkFBbUJBLENBQUNULElBQTBCLEVBQUVNLFFBQTRDLEVBQUVvWSxPQUF3QyxFQUFRO01BQzVJLElBQUksQ0FBQ3VCLGVBQWUsQ0FBQ3haLG1CQUFtQixDQUFDVCxJQUFJLEVBQUVNLFFBQVEsRUFBRW9ZLE9BQU8sQ0FBQztJQUNuRTtFQUFDO0lBQUF0Z0IsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXFnQixjQUFjQSxDQUFDemMsSUFBWSxFQUFFd2MsT0FBOEIsRUFBcUI7TUFDOUUsT0FBTyxJQUFJLENBQUN1QixlQUFlLENBQUN0QixjQUFjLENBQUN6YyxJQUFJLEVBQUV3YyxPQUFPLENBQUM7SUFDM0Q7RUFBQztJQUFBdGdCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvb0IsU0FBU0EsQ0FBQzNHLFdBQXdCLEVBQVE7TUFBQSxJQUFBNEcsTUFBQTtNQUN4QzVHLFdBQVcsQ0FBQ0ssU0FBUyxDQUFDLENBQUMsQ0FBQ3ZTLE9BQU8sQ0FBQyxVQUFBeVMsS0FBSyxFQUFJO1FBQ3ZDcUcsTUFBSSxDQUFDMUcsZUFBZSxDQUFDMkcsUUFBUSxDQUFDdEcsS0FBSyxDQUFDO01BQ3RDLENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQWxpQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBMm1CLGdCQUFnQkEsQ0FBQSxFQUFxQjtNQUNuQyxPQUFPLElBQUksQ0FBQ2hGLGVBQWUsQ0FBQ2dGLGdCQUFnQixDQUFDLENBQUM7SUFDaEQ7RUFBQztJQUFBN21CLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE0bUIsZ0JBQWdCQSxDQUFDakgsYUFBK0IsRUFBUTtNQUN0RCxJQUFJLENBQUNnQyxlQUFlLENBQUNpRixnQkFBZ0IsQ0FBQ2pILGFBQWEsQ0FBQztJQUN0RDtFQUFDO0lBQUE3ZixHQUFBO0lBQUFDLEdBQUEsRUFNRCxTQUFBQSxJQUFBLEVBQWdGO01BQzlFLE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQzRHLE9BQU87SUFDckMsQ0FBQztJQUFBNVEsR0FBQSxFQU5ELFNBQUFBLElBQVk2USxPQUF5RSxFQUFFO01BQ3JGLElBQUksQ0FBQzdHLGVBQWUsQ0FBQzRHLE9BQU8sR0FBR0MsT0FBTztJQUN4QztFQUFDO0lBQUExb0IsR0FBQTtJQUFBQyxHQUFBLEVBVUQsU0FBQUEsSUFBQSxFQUFtRztNQUNqRyxPQUFPLElBQUksQ0FBQzRoQixlQUFlLENBQUM4RyxjQUFjO0lBQzVDLENBQUM7SUFBQTlRLEdBQUEsRUFORCxTQUFBQSxJQUFtQjZRLE9BQXFGLEVBQUU7TUFDeEcsSUFBSSxDQUFDN0csZUFBZSxDQUFDOEcsY0FBYyxHQUFHRCxPQUFPO0lBQy9DO0VBQUM7SUFBQTFvQixHQUFBO0lBQUFDLEdBQUEsRUFVRCxTQUFBQSxJQUFBLEVBQTRHO01BQzFHLE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQytHLHVCQUF1QjtJQUNyRCxDQUFDO0lBQUEvUSxHQUFBLEVBTkQsU0FBQUEsSUFBNEI2USxPQUFxRixFQUFFO01BQ2pILElBQUksQ0FBQzdHLGVBQWUsQ0FBQytHLHVCQUF1QixHQUFHRixPQUFPO0lBQ3hEO0VBQUM7SUFBQTFvQixHQUFBO0lBQUFDLEdBQUEsRUFVRCxTQUFBQSxJQUFBLEVBQTJGO01BQ3pGLE9BQU8sSUFBSSxDQUFDNGhCLGVBQWUsQ0FBQ2dILDBCQUEwQjtJQUN4RCxDQUFDO0lBQUFoUixHQUFBLEVBTkQsU0FBQUEsSUFBK0I2USxPQUFpRSxFQUFFO01BQ2hHLElBQUksQ0FBQzdHLGVBQWUsQ0FBQ2dILDBCQUEwQixHQUFHSCxPQUFPO0lBQzNEO0VBQUM7SUFBQTFvQixHQUFBO0lBQUFFLEtBQUEsRUFNRCxTQUFBNG9CLEtBQUtBLENBQUEsRUFBUztNQUNaLElBQUksQ0FBQ2pILGVBQWUsQ0FBQ2lILEtBQUssQ0FBQyxDQUFDO0lBQzlCO0VBQUM7SUFBQTlvQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxPQUFPQSxDQUFBLEVBQVM7TUFDZCxJQUFJLENBQUN3aEIsZUFBZSxHQUFHLElBQUk7SUFDN0I7RUFBQztBQUFBO0FBR0gsK0RBQWV5RSxxQkFBcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQy9McEM7QUFDQTtBQUNBOztBQUk0RDtBQUFBLElBRXREdkgsNEJBQTRCO0VBQUEsU0FBQUEsNkJBQUE7SUFBQXZmLDRJQUFBLE9BQUF1Ziw0QkFBQTtFQUFBO0VBQUEsT0FBQWhmLHlJQUFBLENBQUFnZiw0QkFBQTtJQUFBL2UsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTZvQixxQkFBQSxHQUFBdk8sOElBQUEsY0FBQUMsNElBQUEsQ0FDaEMsU0FBQUUsUUFBMkJrRixhQUFnQztRQUFBLE9BQUFwRiw0SUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNsRCxJQUFJK0ssOERBQXFCLENBQUN6RyxhQUFhLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTdFLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ2hEO01BQUEsU0FGS3VGLG9CQUFvQkEsQ0FBQXhFLEVBQUE7UUFBQSxPQUFBcU4scUJBQUEsQ0FBQXBOLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQXBCZ04sb0JBQW9CO0lBQUE7RUFBQTtBQUFBO0FBSzVCLCtEQUFlbkIsNEJBQTRCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2QzQztBQUNBO0FBQ0E7QUFGQSxJQU9xQjFmLGVBQWU7RUFHbEMsU0FBQUEsZ0JBQVkycEIsT0FBbUIsRUFBRTtJQUFBeHBCLDRJQUFBLE9BQUFILGVBQUE7SUFBQUksNElBQUE7SUFDL0IsSUFBSSxDQUFDd3BCLFFBQVEsR0FBR0QsT0FBTztFQUN6QjtFQUFDLE9BQUFqcEIseUlBQUEsQ0FBQVYsZUFBQTtJQUFBVyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQWU7TUFDYixPQUFPLElBQUksQ0FBQ2dwQixRQUFRLENBQUMvb0IsS0FBSztJQUM1QjtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFncEIsU0FBU0EsQ0FBQ2hoQixRQUFxQixFQUFlO01BQzVDLE9BQU8sSUFBSSxDQUFDK2dCLFFBQVEsQ0FBQ0MsU0FBUyxDQUFDaGhCLFFBQVEsQ0FBQztJQUMxQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3BCSDtBQUNBO0FBQ0E7O0FBRzRDO0FBQUEsSUFHdENpaEIsa0JBQWtCLDBCQUFBQyxXQUFBO0VBQ3RCLFNBQUFELG1CQUFZRSxTQUFtQixFQUFFbmhCLFFBQVcsRUFBRTtJQUFBMUksNElBQUEsT0FBQTJwQixrQkFBQTtJQUFBLE9BQUFHLFVBQUEsT0FBQUgsa0JBQUEsR0FDdEMsWUFBTTtNQUNWLElBQU1JLEdBQUcsR0FBR0YsU0FBUyxDQUFDeG1CLE9BQU8sQ0FBQ3FGLFFBQVEsQ0FBQztNQUV2QyxJQUFJcWhCLEdBQUcsSUFBSSxDQUFDLEVBQUU7UUFDWkYsU0FBUyxDQUFDMVUsTUFBTSxDQUFDNFUsR0FBRyxFQUFFLENBQUMsQ0FBQztNQUMxQjtJQUNGLENBQUM7RUFDSDtFQUFDQyxzSUFBQSxDQUFBTCxrQkFBQSxFQUFBQyxXQUFBO0VBQUEsT0FBQXJwQix5SUFBQSxDQUFBb3BCLGtCQUFBO0FBQUEsRUFUaUNqcUIsd0RBQVU7QUFBQSxJQVl6QkUsT0FBTztFQUkxQixTQUFBQSxRQUFZYyxLQUFRLEVBQUU7SUFBQVYsNElBQUEsT0FBQUosT0FBQTtJQUFBSyw0SUFBQTtJQUFBQSw0SUFBQTtJQUNwQixJQUFJLENBQUNncUIsVUFBVSxHQUFHLEVBQUU7SUFDcEIsSUFBSSxDQUFDeE0sTUFBTSxHQUFHL2MsS0FBSztFQUNyQjtFQUFDLE9BQUFILHlJQUFBLENBQUFYLE9BQUE7SUFBQVksR0FBQTtJQUFBQyxHQUFBLEVBd0JELFNBQUFBLElBQUEsRUFBZTtNQUNiLE9BQU8sSUFBSSxDQUFDZ2QsTUFBTTtJQUNwQixDQUFDO0lBQUFwRixHQUFBLEVBeEJELFNBQUFBLElBQVUzWCxLQUFRLEVBQUU7TUFDbEIsSUFBSXdwQixPQUFPLEdBQUcsSUFBSSxDQUFDek0sTUFBTSxLQUFLL2MsS0FBSztNQUVuQyxJQUFJd3BCLE9BQU8sSUFBSXhwQixLQUFLLEVBQUU7UUFDcEIsSUFBTXlwQixVQUFVLEdBQUd6cEIsS0FBa0M7UUFFckQsSUFBSSxPQUFPeXBCLFVBQVUsQ0FBQ0MsTUFBTSxLQUFLLFVBQVUsRUFBRTtVQUMzQ0YsT0FBTyxHQUFHLENBQUNDLFVBQVUsQ0FBQ0MsTUFBTSxDQUFDLElBQUksQ0FBQzNNLE1BQU0sQ0FBQztRQUMzQztNQUNGO01BRUEsSUFBSSxDQUFDeU0sT0FBTyxFQUFFO1FBQ1o7TUFDRjtNQUVBLElBQUksQ0FBQ3pNLE1BQU0sR0FBRy9jLEtBQUs7TUFFbkIsSUFBSSxDQUFDdXBCLFVBQVUsQ0FBQ2hhLE9BQU8sQ0FBQyxVQUFBdkgsUUFBUSxFQUFJO1FBQ2xDQSxRQUFRLENBQUNoSSxLQUFLLENBQUM7TUFDakIsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFNRCxTQUFBZ3BCLFNBQVNBLENBQUNoaEIsUUFBcUIsRUFBZTtNQUM1QyxJQUFJLENBQUN1aEIsVUFBVSxDQUFDN2YsSUFBSSxDQUFDMUIsUUFBUSxDQUFDO01BRTlCQSxRQUFRLENBQUMsSUFBSSxDQUFDK1UsTUFBTSxDQUFDO01BRXJCLE9BQU8sSUFBSWtNLGtCQUFrQixDQUFjLElBQUksQ0FBQ00sVUFBVSxFQUFFdmhCLFFBQVEsQ0FBQztJQUN2RTtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUM3REg7QUFDQTtBQUNBO0FBQ3FEO0FBQUEsSUFFaEN1USxXQUFXO0VBQUEsU0FBQUEsWUFBQTtJQUFBalosNElBQUEsT0FBQWlaLFdBQUE7RUFBQTtFQUFBLE9BQUExWSx5SUFBQSxDQUFBMFksV0FBQTtJQUFBelksR0FBQTtJQUFBRSxLQUFBLEVBQzlCLFNBQU8rWSxxQkFBcUJBLENBQUNuQixHQUFXLEVBQVU7TUFDaEQsSUFBSTtRQUNGLElBQU0rUixPQUFPLEdBQUcsSUFBSTVxQixnRUFBVyxDQUFDK0csR0FBRyxDQUFDOFIsR0FBRyxDQUFDO1FBRXhDLE9BQU8rUixPQUFPLENBQUNDLE1BQU07TUFDdkIsQ0FBQyxDQUFDLE9BQU85ZSxDQUFDLEVBQUU7UUFDVixPQUFPLEVBQUU7TUFDWDtJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNkSDtBQUNBO0FBQ0E7QUFDcUQ7QUFDRDtBQUNkO0FBQ0Y7QUFDZ0I7QUFDSTtBQUVRO0FBQ1I7QUFDTTtBQUNpQjtBQUMwQjtBQUVuQztBQUNOO0FBQ1A7QUFDSjtBQUVzQjtBQUVWO0FBQ3ZCO0FBQ0Y7QUFFWTtBQUNHO0FBQ0k7QUFFM0QsSUFBTXBDLFlBQVksR0FBR3VGLE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJQSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsSUFBSXpPLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7QUFBQyxJQWV6RThJLEdBQUc7RUFvVXRCLFNBQUFBLElBQUEsRUFBc0I7SUFBQWpKLDRJQUFBLE9BQUFpSixHQUFBO0lBQ3BCLE1BQU0sSUFBSXJELEtBQUssQ0FBQyxvREFBb0QsQ0FBQztFQUN2RTtFQUFDLE9BQUFyRix5SUFBQSxDQUFBMEksR0FBQTtJQUFBekksR0FBQTtJQUFBQyxHQUFBLEVBMVNELFNBQUFBLElBQUEsRUFBa0M7TUFDaEMsT0FBTzJJLFlBQVk7SUFDckI7RUFBQztJQUFBNUksR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFtRDtNQUNqRCxPQUFPLElBQUksQ0FBQ3lMLG9CQUFvQjtJQUNsQztFQUFDO0lBQUExTCxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNDO01BQ3BDLE9BQU8sSUFBSSxDQUFDa1ksUUFBUTtJQUN0QjtFQUFDO0lBQUFuWSxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXFDO01BQ25DLE9BQU93SSxHQUFHLENBQUN1aEIsZ0JBQWdCO0lBQzdCO0VBQUM7SUFBQWhxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1DO01BQ2pDLE9BQU93SSxHQUFHLENBQUN3aEIsZ0JBQWdCO0lBQzdCO0VBQUM7SUFBQWpxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU93SSxHQUFHLENBQUN5aEIsb0JBQW9CO0lBQ2pDO0VBQUM7SUFBQWxxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU93SSxHQUFHLENBQUMwaEIscUJBQXFCO0lBQ2xDO0VBQUM7SUFBQW5xQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRFO01BQzFFLE9BQU93SSxHQUFHLENBQUMyaEIsOEJBQThCO0lBQzNDO0VBQUM7SUFBQXBxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU93SSxHQUFHLENBQUM0aEIsNEJBQTRCO0lBQ3pDO0VBQUM7SUFBQXJxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU93SSxHQUFHLENBQUM2aEIscUNBQXFDO0lBQ2xEO0VBQUM7SUFBQXRxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW1EO01BQ2pELE9BQU93SSxHQUFHLENBQUM4aEIsNkJBQTZCO0lBQzFDO0VBQUM7SUFBQXZxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTBEO01BQ3hELE9BQU93SSxHQUFHLENBQUMraEIsb0NBQW9DO0lBQ2pEO0VBQUM7SUFBQXhxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXNEO01BQ3BELE9BQU8sSUFBSSxDQUFDd3FCLGdDQUFnQztJQUM5QztFQUFDO0lBQUF6cUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyRDtNQUN6RCxPQUFPLElBQUksQ0FBQ3lxQixxQ0FBcUM7SUFDbkQ7RUFBQztJQUFBMXFCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBc0Q7TUFDcEQsT0FBTyxJQUFJLENBQUMwcUIsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQTNxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQW9EO01BQ2xELE9BQU8sSUFBSSxDQUFDMnFCLGtCQUFrQjtJQUNoQztFQUFDO0lBQUE1cUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFrRDtNQUNoRCxPQUFPLElBQUksQ0FBQzRxQixZQUFZO0lBQzFCO0VBQUM7SUFBQTdxQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU93SSxHQUFHLENBQUNxaUIsZUFBZTtJQUM1QjtFQUFDO0lBQUE5cUIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRTtNQUNsRSxPQUFPLElBQUksQ0FBQzhxQiwyQkFBMkI7SUFDekM7RUFBQztJQUFBL3FCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUMrcUIsYUFBYTtJQUMzQjtFQUFDO0lBQUFockIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFvRTtNQUNsRSxPQUFPLElBQUksQ0FBQ2dyQiwrQ0FBK0M7SUFDN0QsQ0FBQztJQUFBcFQsR0FBQSxFQUVELFNBQUFBLElBQTBEcVQsYUFBcUIsRUFBRTtNQUMvRSxJQUFJLENBQUNELCtDQUErQyxHQUFHQyxhQUFhO0lBQ3RFO0VBQUM7SUFBQWxyQixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU93RCxvRUFBbUIsQ0FBQ2MscUNBQXFDLENBQUMsSUFBSSxDQUFDd0YsT0FBTyxDQUFDa0ksU0FBUyxDQUFDL1IsS0FBSyxDQUFDO0lBQ2hHO0VBQUM7SUFBQUYsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPMEQsd0VBQXFCLENBQUNVLHlDQUF5QyxDQUFDb0UsR0FBRyxDQUFDMGlCLGVBQWUsQ0FBQ2pyQixLQUFLLENBQUM7SUFDbkc7RUFBQztJQUFBRixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU9jLDZEQUFlO0lBQ3hCO0VBQUM7SUFBQWYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT2tyQiwyQkFBMkJBLENBQUEsRUFBUztNQUFBLElBQUE3cUIsS0FBQTtNQUN6QyxJQUFNOHFCLHNCQUFzQixHQUFHM2lCLDZEQUFhLENBQUMyaUIsc0JBQXNCO01BRW5FQSxzQkFBc0IsQ0FBQy9TLFNBQVMsR0FBRzdQLEdBQUcsQ0FBQ3NRLGVBQWU7TUFDdERzUyxzQkFBc0IsQ0FBQ3ppQixZQUFZLEdBQUdILEdBQUcsQ0FBQ0csWUFBWTtNQUV0RCxJQUFNMGlCLGtCQUFrQixHQUFHN2lCLEdBQUcsQ0FBQ3dQLFlBQVksQ0FBQ2lSLFNBQVMsQ0FBQyxVQUFBaFIsV0FBVyxFQUFJO1FBQ25FbVQsc0JBQXNCLENBQUNuVCxXQUFXLEdBQUdBLFdBQVc7TUFDbEQsQ0FBQyxDQUFDO01BQ0YsSUFBTXFULG1CQUFtQixHQUFHOWlCLEdBQUcsQ0FBQytpQixZQUFZLENBQUN0QyxTQUFTLENBQUMsVUFBQWhwQixLQUFLLEVBQUk7UUFDOUQsSUFBTXVyQixpQkFBaUIsR0FBR2xyQixLQUFJLENBQUN3SixPQUFPLENBQUM4SSxTQUFTLENBQUMzUyxLQUFLLENBQUM4bEIsSUFBSSxDQUFDLFVBQUFyVSxRQUFRO1VBQUEsT0FBSUEsUUFBUSxZQUFZOEQsb0VBQWlCO1FBQUEsRUFBQztRQUU5RyxJQUFJZ1csaUJBQWlCLEVBQUU7VUFDckJKLHNCQUFzQixDQUFDdlQsR0FBRyxHQUFHNVgsS0FBSztVQUVsQ0ssS0FBSSxDQUFDd0osT0FBTyxDQUFDOEksU0FBUyxDQUFDakIsTUFBTSxDQUFDNlosaUJBQWlCLENBQUM7VUFDaERsckIsS0FBSSxDQUFDd0osT0FBTyxDQUFDOEksU0FBUyxDQUFDalMsR0FBRyxDQUFDLElBQUk2VSxvRUFBaUIsQ0FBQzRWLHNCQUFzQixDQUFDLENBQUM7VUFDekU5cUIsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsK0JBQStCLEVBQUVxaEIsc0JBQXNCLENBQUN2VCxHQUFHLENBQUM7UUFDaEY7TUFDRixDQUFDLENBQUM7TUFDRixJQUFNNFQsY0FBYyxHQUFHampCLEdBQUcsQ0FBQzBQLFFBQVEsQ0FBQytRLFNBQVMsQ0FBQyxVQUFBOVEsT0FBTyxFQUFJO1FBQ3ZELElBQU1xVCxpQkFBaUIsR0FBR2xyQixLQUFJLENBQUN3SixPQUFPLENBQUM4SSxTQUFTLENBQUMzUyxLQUFLLENBQUM4bEIsSUFBSSxDQUFDLFVBQUFyVSxRQUFRO1VBQUEsT0FBSUEsUUFBUSxZQUFZOEQsb0VBQWlCO1FBQUEsRUFBQztRQUU5RyxJQUFJZ1csaUJBQWlCLElBQUlyVCxPQUFPLEVBQUU7VUFDaENpVCxzQkFBc0IsQ0FBQ2pULE9BQU8sR0FBR0EsT0FBTztVQUV4QzdYLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQzhJLFNBQVMsQ0FBQ2pCLE1BQU0sQ0FBQzZaLGlCQUFpQixDQUFDO1VBQ2hEbHJCLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQzhJLFNBQVMsQ0FBQ2pTLEdBQUcsQ0FBQyxJQUFJNlUsb0VBQWlCLENBQUM0VixzQkFBc0IsQ0FBQyxDQUFDO1VBQ3pFOXFCLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1DQUFtQyxFQUFFcWhCLHNCQUFzQixDQUFDalQsT0FBTyxDQUFDO1FBQ3hGO01BQ0YsQ0FBQyxDQUFDO0lBQ0o7RUFBQztJQUFBcFksR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3lyQix5QkFBeUJBLENBQUEsRUFBUztNQUN2Q2xqQixHQUFHLENBQUNxaUIsZUFBZSxHQUFHcFMsZ0VBQWMsQ0FBQ0MsaUJBQWlCLENBQUNvUixnRUFBWSxDQUFDeGUsR0FBRyxDQUFDckwsS0FBSyxDQUFDO01BQzlFdUksR0FBRyxDQUFDa1IscUJBQXFCLEdBQUdsUixHQUFHLENBQUNxaUIsZUFBZSxDQUFDaFMsb0JBQW9CO01BRXBFclEsR0FBRyxDQUFDa1IscUJBQXFCLENBQUNyQixTQUFTLEdBQUc3UCxHQUFHLENBQUNzUSxlQUFlO01BRXpELElBQU11UyxrQkFBa0IsR0FBRzdpQixHQUFHLENBQUN3UCxZQUFZLENBQUNpUixTQUFTLENBQUMsVUFBQWhSLFdBQVcsRUFBSTtRQUNuRXpQLEdBQUcsQ0FBQ2tSLHFCQUFxQixDQUFDekIsV0FBVyxHQUFHQSxXQUFXO01BQ3JELENBQUMsQ0FBQztNQUNGLElBQU1xVCxtQkFBbUIsR0FBRzlpQixHQUFHLENBQUMraUIsWUFBWSxDQUFDdEMsU0FBUyxDQUFDLFVBQUFocEIsS0FBSyxFQUFJO1FBQzlEdUksR0FBRyxDQUFDa1IscUJBQXFCLENBQUM3QixHQUFHLEdBQUc1WCxLQUFLO01BQ3ZDLENBQUMsQ0FBQztNQUNGLElBQU13ckIsY0FBYyxHQUFHampCLEdBQUcsQ0FBQzBQLFFBQVEsQ0FBQytRLFNBQVMsQ0FBQyxVQUFBOVEsT0FBTyxFQUFJO1FBQ3ZEM1AsR0FBRyxDQUFDa1IscUJBQXFCLENBQUN2QixPQUFPLEdBQUdBLE9BQU87TUFDN0MsQ0FBQyxDQUFDO01BQ0YsSUFBTWxZLEtBQUssR0FBRyxJQUFJLENBQUNrVyw2QkFBNkIsQ0FBQ3ZTLGNBQWMsQ0FBQyxzQkFBc0IsQ0FBQztNQUV2RixJQUFJM0QsS0FBSyxFQUFFO1FBQ1R3WSxnRUFBYyxDQUFDVSxpQkFBaUIsQ0FBQ3hDLDBFQUFjLENBQUMxVyxLQUFLLENBQUMsQ0FBQztNQUN6RDtNQUVBLElBQU0wckIscUJBQXFCLEdBQUduakIsR0FBRyxDQUFDMGlCLGVBQWUsQ0FBQ2pDLFNBQVMsQ0FBQyxVQUFBL1AsY0FBYyxFQUFJO1FBQzVFVCxnRUFBYyxDQUFDVSxpQkFBaUIsQ0FBQ0QsY0FBYyxDQUFDO01BQ2xELENBQUMsQ0FBQztJQUNKO0VBQUM7SUFBQW5aLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU8yckIsMERBQTBEQSxDQUFBLEVBQVM7TUFDeEUsSUFBSSxDQUFDeEIsNEJBQTRCLEdBQUcsSUFBSSxDQUFDalUsNkJBQTZCLENBQUNsUyxlQUFlLENBQUMsdUNBQXVDLENBQUM7TUFDL0gsSUFBSSxDQUFDNkYsT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsSUFBSSxDQUFDcWdCLDRCQUE0QixDQUFDO01BRXRHO0lBQ0Y7RUFBQztJQUFBcnFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU80ckIsbUVBQW1FQSxDQUFBLEVBQVM7TUFDakYsSUFBSSxDQUFDeEIscUNBQXFDLEdBQUcsSUFBSSxDQUFDbFUsNkJBQTZCLENBQUNsUyxlQUFlLENBQUMsZ0RBQWdELENBQUM7TUFDakosSUFBSSxDQUFDNkYsT0FBTyxDQUFDQyxJQUFJLENBQUMseURBQXlELEVBQUUsSUFBSSxDQUFDc2dCLHFDQUFxQyxDQUFDO01BRXhIO0lBQ0Y7RUFBQztJQUFBdHFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU82ckIsOERBQThEQSxDQUFBLEVBQVM7TUFDNUUsSUFBSSxDQUFDdEIsZ0NBQWdDLEdBQUcsSUFBSSxDQUFDclUsNkJBQTZCLENBQUNsUyxlQUFlLENBQUMsNENBQTRDLENBQUM7TUFDeEksSUFBSSxDQUFDNkYsT0FBTyxDQUFDQyxJQUFJLENBQUMscURBQXFELEVBQUUsSUFBSSxDQUFDeWdCLGdDQUFnQyxDQUFDO01BRS9HO0lBQ0Y7RUFBQztJQUFBenFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU84ckIsbUVBQW1FQSxDQUFBLEVBQVM7TUFDakYsSUFBSSxDQUFDdEIscUNBQXFDLEdBQUcsSUFBSSxDQUFDdFUsNkJBQTZCLENBQUNsUyxlQUFlLENBQUMsa0RBQWtELENBQUM7TUFDbkosSUFBSSxDQUFDNkYsT0FBTyxDQUFDQyxJQUFJLENBQUMsc0VBQXNFLEVBQUUsSUFBSSxDQUFDMGdCLHFDQUFxQyxDQUFDO01BRXJJO0lBQ0Y7RUFBQztJQUFBMXFCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU8rckIsa0RBQWtEQSxDQUFBLEVBQVM7TUFDaEV4akIsR0FBRyxDQUFDeWpCLFlBQVksQ0FBQ2hELFNBQVMsQ0FBQyxVQUFBaHBCLEtBQUssRUFBSTtRQUNsQ3VJLEdBQUcsQ0FBQytpQixZQUFZLENBQUN0ckIsS0FBSyxHQUFHdUksR0FBRyxDQUFDdVEsZUFBZSxDQUFDOVksS0FBSyxDQUFDO1FBQ25EdUksR0FBRyxDQUFDd1AsWUFBWSxDQUFDL1gsS0FBSyxHQUFHdVkscURBQVcsQ0FBQ1EscUJBQXFCLENBQUMvWSxLQUFLLENBQUM7TUFDbkUsQ0FBQyxDQUFDO01BRUYsSUFBTWlzQixZQUFZLEdBQUcsSUFBSSxDQUFDL1YsNkJBQTZCLENBQUN2UyxjQUFjLENBQUMsc0JBQXNCLENBQUM7TUFFOUYsSUFBSXNvQixZQUFZLEVBQUU7UUFDaEIsSUFBTXRoQixTQUFTLEdBQUdULGdFQUFjLENBQUNDLFVBQVUsQ0FBQzhoQixZQUFZLENBQUM7UUFFekQxakIsR0FBRyxDQUFDMFAsUUFBUSxDQUFDalksS0FBSyxHQUFHMkssU0FBUyxDQUFDdU4sT0FBTztRQUN0QzJSLGdFQUFZLENBQUN4ZSxHQUFHLENBQUNyTCxLQUFLLEdBQUcsQ0FBQzJLLFNBQVMsQ0FBQ1UsR0FBRyxJQUFJOUMsR0FBRyxDQUFDeWpCLFlBQVksQ0FBQ2hzQixLQUFLLEVBQUV3UCxRQUFRLENBQUMsQ0FBQztRQUU3RSxJQUFJLENBQUMzRixPQUFPLENBQUNDLElBQUksQ0FBQyx3REFBd0QsRUFBRXZCLEdBQUcsQ0FBQ3lqQixZQUFZLENBQUNoc0IsS0FBSyxDQUFDO1FBRW5HO01BQ0Y7TUFFQSxJQUFNa3NCLFFBQVEsR0FBRyxJQUFJLENBQUNoVyw2QkFBNkIsQ0FBQ3ZTLGNBQWMsQ0FBQyxZQUFZLENBQUM7TUFFaEYsSUFBSXVvQixRQUFRLEVBQUU7UUFDWnJDLGdFQUFZLENBQUN4ZSxHQUFHLENBQUNyTCxLQUFLLEdBQUdrc0IsUUFBUTtRQUNqQyxJQUFJLENBQUNyaUIsT0FBTyxDQUFDQyxJQUFJLENBQUMseUVBQXlFLEVBQUV2QixHQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssQ0FBQztRQUVwSDtNQUNGO01BRUEsSUFBTW1zQixZQUFZLEdBQUcsSUFBSSxDQUFDalcsNkJBQTZCLENBQUN2UyxjQUFjLENBQUMsaUJBQWlCLENBQUM7TUFFekYsSUFBSXdvQixZQUFZLEVBQUU7UUFDaEIsSUFBTTlnQixHQUFHLEdBQUcsSUFBSXRNLGdFQUFXLENBQUMrRyxHQUFHLENBQUNxbUIsWUFBWSxDQUFDO1FBRTdDOWdCLEdBQUcsQ0FBQ3lNLFFBQVEsR0FBRyxrQkFBa0I7UUFDakMrUixnRUFBWSxDQUFDeGUsR0FBRyxDQUFDckwsS0FBSyxHQUFHcUwsR0FBRyxDQUFDbUUsUUFBUSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDM0YsT0FBTyxDQUFDQyxJQUFJLENBQUMsOEVBQThFLEVBQUV2QixHQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssQ0FBQztRQUV6SDtNQUNGO0lBQ0Y7RUFBQztJQUFBRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPb3NCLElBQUlBLENBQUNoTSxPQUFzQixFQUFRO01BQ3hDLElBQUksQ0FBQyxJQUFJLENBQUNpTSxZQUFZLENBQUNyc0IsS0FBSyxFQUFFO1FBQzVCLElBQUksQ0FBQzZxQiwyQkFBMkIsR0FBRyxJQUFJeHJCLHdFQUEwQixDQUFDLENBQUM7TUFDckU7TUFFQSxJQUFJK2dCLE9BQU8sRUFBRTtRQUNYLElBQUlBLE9BQU8sQ0FBQzRMLFlBQVksRUFBRTtVQUN4Qm5DLGdFQUFZLENBQUN4ZSxHQUFHLENBQUNyTCxLQUFLLEdBQUdvZ0IsT0FBTyxDQUFDNEwsWUFBWTtRQUMvQztRQUVBLElBQUk1TCxPQUFPLENBQUNrTSxxQkFBcUIsRUFBRTtVQUNqQ3hOLG1FQUFxQixDQUFDd04scUJBQXFCLENBQUN0c0IsS0FBSyxHQUFHb2dCLE9BQU8sQ0FBQ2tNLHFCQUFxQjtRQUNuRjtRQUVBLElBQUlsTSxPQUFPLENBQUNuSCxjQUFjLElBQUl2QywwRUFBYyxDQUFDMEosT0FBTyxDQUFDbkgsY0FBYyxDQUFDLEVBQUU7VUFDcEUxUSxHQUFHLENBQUMwaUIsZUFBZSxDQUFDanJCLEtBQUssR0FBR3lELHdFQUFxQixDQUFDdVYseUNBQXlDLENBQUNvSCxPQUFPLENBQUNuSCxjQUFjLENBQUM7UUFDckg7UUFFQSxJQUFJbUgsT0FBTyxDQUFDL0osWUFBWSxJQUFJeEUsd0RBQVksQ0FBQ3VPLE9BQU8sQ0FBQy9KLFlBQVksQ0FBQyxFQUFFO1VBQzlELElBQUksQ0FBQ3hNLE9BQU8sQ0FBQ2tJLFNBQVMsQ0FBQ29FLFlBQVksQ0FBQzVTLG9FQUFtQixDQUFDaVQscUNBQXFDLENBQUM0SixPQUFPLENBQUMvSixZQUFZLENBQUMsQ0FBQztRQUN0SDtRQUVBLElBQUkrSixPQUFPLENBQUNtTSxtQkFBbUIsSUFBSTFhLHdEQUFZLENBQUN1TyxPQUFPLENBQUNtTSxtQkFBbUIsQ0FBQyxFQUFFO1VBQzVFLElBQU1DLGVBQWUsR0FBRyxJQUFJLENBQUMzaUIsT0FBTyxDQUFDOEksU0FBUyxDQUFDM1MsS0FBSyxDQUFDOGxCLElBQUksQ0FBQyxVQUFBclUsUUFBUTtZQUFBLE9BQUlBLFFBQVEsWUFBWUssZ0VBQWU7VUFBQSxFQUFDO1VBRTFHLElBQUkwYSxlQUFlLEVBQUU7WUFDbkIsSUFBSSxDQUFDM2lCLE9BQU8sQ0FBQzhJLFNBQVMsQ0FBQ2pCLE1BQU0sQ0FBQzhhLGVBQWUsQ0FBQztVQUNoRDtVQUVBLElBQUlwTSxPQUFPLENBQUNtTSxtQkFBbUIsS0FBSyxLQUFLLEVBQUU7WUFDekMsSUFBSSxDQUFDMWlCLE9BQU8sQ0FBQzhJLFNBQVMsQ0FBQ2pTLEdBQUcsQ0FBQyxJQUFJb1IsZ0VBQWUsQ0FBQ3ZPLG9FQUFtQixDQUFDaVQscUNBQXFDLENBQUM0SixPQUFPLENBQUNtTSxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7VUFDekk7UUFDRjtRQUVBLElBQUksT0FBT25NLE9BQU8sQ0FBQ3FNLDRCQUE0QixLQUFLLFNBQVMsRUFBRTtVQUM3RCxJQUFJLENBQUNwQyw2QkFBNkIsR0FBR2pLLE9BQU8sQ0FBQ3FNLDRCQUE0QjtRQUMzRTtRQUVBLElBQUksT0FBT3JNLE9BQU8sQ0FBQ3NNLG1DQUFtQyxLQUFLLFNBQVMsRUFBRTtVQUNwRSxJQUFJLENBQUNwQyxvQ0FBb0MsR0FBR2xLLE9BQU8sQ0FBQ3NNLG1DQUFtQztRQUN6RjtRQUVBLElBQUl0TSxPQUFPLENBQUN1TSxlQUFlLEVBQUU7VUFDM0IsSUFBSSxDQUFDbEMsZ0JBQWdCLEdBQUdySyxPQUFPLENBQUN1TSxlQUFlO1FBQ2pEO1FBRUEsSUFBSXZNLE9BQU8sQ0FBQ3dNLGlCQUFpQixFQUFFO1VBQzdCLElBQUksQ0FBQ2xDLGtCQUFrQixHQUFHdEssT0FBTyxDQUFDd00saUJBQWlCO1FBQ3JEO1FBRUEsSUFBSXhNLE9BQU8sQ0FBQ3lNLFdBQVcsRUFBRTtVQUN2QixJQUFJLENBQUNsQyxZQUFZLEdBQUd2SyxPQUFPLENBQUN5TSxXQUFXO1FBQ3pDO01BQ0Y7TUFFQXRrQixHQUFHLENBQUM4akIsWUFBWSxDQUFDcnNCLEtBQUssR0FBRyxJQUFJO0lBQy9CO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT0csT0FBT0EsQ0FBQSxFQUFTO01BQ3JCb0ksR0FBRyxDQUFDOGpCLFlBQVksQ0FBQ3JzQixLQUFLLEdBQUcsS0FBSztNQUM5QixJQUFJLENBQUM2cUIsMkJBQTJCLENBQUMxcUIsT0FBTyxDQUFDLENBQUM7TUFDMUMsSUFBSSxDQUFDMHFCLDJCQUEyQixHQUFHLElBQUk7SUFDekM7RUFBQztJQUFBL3FCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU84WSxlQUFlQSxDQUFDbEIsR0FBVyxFQUFVO01BQzFDLE9BQU9VLHNEQUFZLENBQUNRLGVBQWUsQ0FBQ2xCLEdBQUcsQ0FBQztJQUMxQztFQUFDO0FBQUE7QUFBQWtWLElBQUEsR0FsVWtCdmtCLEdBQUc7QUFBQWhKLDRJQUFBLENBQUhnSixHQUFHLGtDQUN3QixJQUFJO0FBQUFoSiw0SUFBQSxDQUQvQmdKLEdBQUcsMkNBRWlDLElBQUk7QUFBQWhKLDRJQUFBLENBRnhDZ0osR0FBRyxtQ0FHeUIsSUFBSTtBQUFBaEosNElBQUEsQ0FIaENnSixHQUFHLDBDQUlnQyxJQUFJO0FBQUFoSiw0SUFBQSxDQUp2Q2dKLEdBQUcsc0NBSzRCLElBQUk7QUFBQWhKLDRJQUFBLENBTG5DZ0osR0FBRywyQ0FNaUMsSUFBSTtBQUFBaEosNElBQUEsQ0FOeENnSixHQUFHLHNCQU9ZLElBQUk7QUFBQWhKLDRJQUFBLENBUG5CZ0osR0FBRyx3QkFRYyxJQUFJO0FBQUFoSiw0SUFBQSxDQVJyQmdKLEdBQUcsa0JBU1EsSUFBSTtBQUFBaEosNElBQUEsQ0FUZmdKLEdBQUcsbUNBVXdELElBQUk3RSwwRUFBNEIsQ0FBQyxDQUFDO0FBQUFuRSw0SUFBQSxDQVY3RmdKLEdBQUc7QUFBQWhKLDRJQUFBLENBQUhnSixHQUFHLGtCQVl5QixJQUFJckosbURBQU8sQ0FBUyxFQUFFLENBQUM7QUFBQUssNElBQUEsQ0FabkRnSixHQUFHLG1CQWEwQixJQUFJckosbURBQU8sQ0FBUywyQ0FBMkMsQ0FBQztBQUFBSyw0SUFBQSxDQWI3RmdKLEdBQUcscURBYzJDLENBQUM7QUFBQWhKLDRJQUFBLENBZC9DZ0osR0FBRyxxQkFlb0MsSUFBSXJKLG1EQUFPLENBQWlCc0Usa0VBQWdCLENBQUNZLHFCQUFxQixDQUFDO0FBQUE3RSw0SUFBQSxDQWYxR2dKLEdBQUc7QUFBQWhKLDRJQUFBLENBQUhnSixHQUFHO0FBQUFoSiw0SUFBQSxDQUFIZ0osR0FBRywwQkFrQjJDLElBQUlySixtREFBTyxDQUFDcU0sbUVBQWEsQ0FBQ1EsbUJBQW1CLENBQUM7QUFBQXhNLDRJQUFBLENBbEI1RmdKLEdBQUcsY0FtQjhCLElBQUlySixtREFBTyxDQUFTLEVBQUUsQ0FBQztBQUFBSyw0SUFBQSxDQW5CeERnSixHQUFHLHNCQW9CNkJvSSxxREFBTyxDQUFDQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQUFyUiw0SUFBQSxDQXBCbERnSixHQUFHLHNCQXFCMkIsSUFBSS9JLElBQUksQ0FBQyxDQUFDO0FBQUFELDRJQUFBLENBckJ4Q2dKLEdBQUcsYUFzQnFCQyw2REFBYSxDQUFDRyxTQUFTLENBQUMsS0FBSyxDQUFDO0FBQUFwSiw0SUFBQSxDQXRCdERnSixHQUFHLGtCQXVCbUMsSUFBSXJKLG1EQUFPLENBQVUsS0FBSyxDQUFDO0FBQUFLLDRJQUFBLENBdkJqRWdKLEdBQUcsMEJBd0JtRCxJQUFJcEosMkRBQWUsQ0FBVW9KLElBQUcsQ0FBQzhqQixZQUFZLENBQUM7QUFBQTlzQiw0SUFBQSxDQXhCcEdnSixHQUFHLDJCQXlCbUQsSUFBSXBKLDJEQUFlLENBQVMwcUIsZ0VBQVksQ0FBQ3hlLEdBQUcsQ0FBQztBQUFBOUwsNElBQUEsQ0F6Qm5HZ0osR0FBRyxvQ0EwQjRFLElBQUlwSiwyREFBZSxDQUF5QjJmLG1FQUFxQixDQUFDd04scUJBQXFCLENBQUM7QUExQnBLO0FBeVV4QnZ0QixnRUFBVyxDQUFDZ3VCLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxZQUFNO0VBQ2pEeGtCLEdBQUcsQ0FBQ3BJLE9BQU8sQ0FBQyxDQUFDO0FBQ2YsQ0FBQyxDQUFDO0FBRUZvSSxHQUFHLENBQUN3akIsa0RBQWtELENBQUMsQ0FBQztBQUN4RHhqQixHQUFHLENBQUNrakIseUJBQXlCLENBQUMsQ0FBQztBQUMvQmxqQixHQUFHLENBQUMyaUIsMkJBQTJCLENBQUMsQ0FBQztBQUNqQzNpQixHQUFHLENBQUNvakIsMERBQTBELENBQUMsQ0FBQztBQUNoRXBqQixHQUFHLENBQUNxakIsbUVBQW1FLENBQUMsQ0FBQztBQUN6RXJqQixHQUFHLENBQUNzakIsOERBQThELENBQUMsQ0FBQztBQUNwRXRqQixHQUFHLENBQUN1akIsbUVBQW1FLENBQUMsQ0FBQztBQUN6RXZqQixHQUFHLENBQUM2akIsSUFBSSxDQUFDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2xZVjtBQUNBO0FBQ0E7QUFDcUQ7QUFBQSxJQUVoQzlULFlBQVk7RUFBQSxTQUFBQSxhQUFBO0lBQUFoWiw0SUFBQSxPQUFBZ1osWUFBQTtFQUFBO0VBQUEsT0FBQXpZLHlJQUFBLENBQUF5WSxZQUFBO0lBQUF4WSxHQUFBO0lBQUFFLEtBQUEsRUFDL0IsU0FBTzhZLGVBQWVBLENBQUNsQixHQUFXLEVBQVU7TUFDMUMsSUFBSTtRQUNGLElBQU0rUixPQUFPLEdBQUcsSUFBSTVxQixnRUFBVyxDQUFDK0csR0FBRyxDQUFDOFIsR0FBRyxDQUFDO1FBQ3hDLElBQU1vVixRQUFRLEdBQUdyRCxPQUFPLENBQUNqYixRQUFRLENBQUNyTSxLQUFLLENBQUMsR0FBRyxDQUFDO1FBRTVDLFFBQVFzbkIsT0FBTyxDQUFDc0QsUUFBUTtVQUN0QixLQUFLLEtBQUs7WUFDUnRELE9BQU8sQ0FBQ3NELFFBQVEsR0FBRyxPQUFPO1lBRTFCO1VBQ0YsS0FBSyxNQUFNO1lBQ1R0RCxPQUFPLENBQUNzRCxRQUFRLEdBQUcsUUFBUTtZQUUzQjtVQUVGO1lBQ0U7UUFDSjtRQUVBLElBQUlELFFBQVEsQ0FBQ3RpQixNQUFNLEtBQUssQ0FBQyxJQUNwQnNpQixRQUFRLENBQUN0aUIsTUFBTSxLQUFLLENBQUMsSUFBSXNpQixRQUFRLENBQUNBLFFBQVEsQ0FBQ3RpQixNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUNBLE1BQU0sSUFBSSxDQUFDLElBQUlzaUIsUUFBUSxDQUFDQSxRQUFRLENBQUN0aUIsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDQSxNQUFNLElBQUksQ0FBRSxFQUNuSDtVQUNBc2lCLFFBQVEsQ0FBQ0UsT0FBTyxDQUFDLFdBQVcsQ0FBQztRQUMvQixDQUFDLE1BQU0sSUFBSUYsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDamlCLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSWlpQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNHLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSUgsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDM3BCLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTJwQixRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFO1VBQ25JQSxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsZUFBZTtRQUMvQixDQUFDLE1BQU0sSUFBSUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDamlCLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSWlpQixRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUNHLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtVQUM1RTtRQUFBLENBQ0QsTUFBTTtVQUNMSCxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVztRQUMzQjtRQUVBckQsT0FBTyxDQUFDamIsUUFBUSxHQUFHc2UsUUFBUSxDQUFDSSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBRXJDLFVBQUF4cUIsTUFBQSxDQUFVK21CLE9BQU8sQ0FBQ0MsTUFBTTtNQUMxQixDQUFDLENBQUMsT0FBTzllLENBQUMsRUFBRTtRQUNWLE9BQU84TSxHQUFHO01BQ1o7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQ0g7QUFDQTtBQUNBOztBQUtPLElBQUt5VixZQUFZLDBCQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBQSxPQUFaQSxZQUFZO0FBQUE7QUFLakIsSUFBS0MsV0FBVywwQkFBWEEsV0FBVztFQUFYQSxXQUFXLENBQVhBLFdBQVc7RUFBWEEsV0FBVyxDQUFYQSxXQUFXO0VBQVhBLFdBQVcsQ0FBWEEsV0FBVztFQUFBLE9BQVhBLFdBQVc7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNadkI7QUFDQTtBQUNBO0FBQ3dEO0FBQ0Q7QUFFQTtBQUNUO0FBQ2lCO0FBRXRDO0FBQytDO0FBRTlCO0FBQ21CO0FBQ2Q7QUFFUztBQUNJO0FBRWdCO0FBQ2pCO0FBR1I7QUFDNkI7QUFDVTtBQUNTO0FBQ0s7QUFDbkM7QUFDbEI7QUFDSTtBQUNSO0FBQ007QUFDSztBQUVVO0FBRXBFLElBQU1jLDhCQUE4QixHQUFHLG9CQUFvQjtBQUMzRCxJQUFNQyx5Q0FBeUMsR0FBRyxJQUFJO0FBQ3RELElBQU1DLG9DQUFvQyxHQUFHLEtBQUs7QUFBQyxJQVU5QkMsT0FBTztFQW9DMUIsU0FBQUEsUUFBWUMsWUFBOEIsRUFBRXBrQixLQUF1QixFQUFFZ1csT0FBd0IsRUFBRTtJQUFBLElBQUEvZixLQUFBO0lBQUFmLDRJQUFBLE9BQUFpdkIsT0FBQTtJQUFBaHZCLDRJQUFBLGtCQW5DM0RpSiw2REFBYSxDQUFDRyxTQUFTLENBQUMsU0FBUyxDQUFDO0lBQUFwSiw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQW9DcEUsSUFBTW9MLFNBQVMsR0FBR1QsaUVBQWMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLENBQUM7SUFDbEQsSUFBTXFrQixxQkFBNEMsR0FBRztNQUFDQyxTQUFTLEVBQUV0TyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRXNPO0lBQVMsQ0FBQztJQUNwRixJQUFNQyw2QkFBNEQsR0FBRztNQUNuRUMsb0JBQW9CLEVBQUVqa0IsU0FBUyxDQUFDVyxZQUFZLENBQUNqSSxRQUFRLENBQUMsb0JBQW9CLENBQUM7TUFDM0V3ckIsMkJBQTJCLEVBQUVsa0IsU0FBUyxDQUFDVyxZQUFZLENBQUNqSSxRQUFRLENBQUMsNEJBQTRCLENBQUM7TUFDMUZ5ckIsNEJBQTRCLEVBQUUxTyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTBPLDRCQUE0QjtNQUNuRUMsNEJBQTRCLEVBQUUzTyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTJPLDRCQUE0QjtNQUNuRUMsc0JBQXNCLEVBQUU1TyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTRPLHNCQUFzQjtNQUN2REMsc0JBQXNCLEVBQUU3TyxPQUFPLGFBQVBBLE9BQU8sdUJBQVBBLE9BQU8sQ0FBRTZPO0lBQ25DLENBQUM7SUFFRCxJQUFJLENBQUNDLGFBQWEsR0FBRyxJQUFJdkIsOERBQVksQ0FBQ3ZqQixLQUFLLENBQUM7SUFDNUMsSUFBSSxDQUFDK2tCLGVBQWUsR0FBRyxJQUFJdkIsZ0VBQWMsQ0FBQ2EscUJBQXFCLENBQUM7SUFDaEUsSUFBSSxDQUFDVyxzQkFBc0IsR0FBRyxJQUFJcEIsdUVBQXFCLENBQUMsQ0FBQztJQUN6RCxJQUFJLENBQUNxQix1QkFBdUIsR0FBRyxJQUFJdEIsd0VBQXNCLENBQUNZLDZCQUE2QixDQUFDO0lBQ3hGLElBQUksQ0FBQ1csYUFBYSxHQUFHLElBQUlyQiw4REFBWSxDQUFDLENBQUM7SUFDdkMsSUFBSSxDQUFDdlUsbUJBQW1CLEdBQUcsSUFBSU4sZ0VBQWtCLENBQUMsQ0FBQztJQUNuRCxJQUFJLENBQUNtVyxpQkFBaUIsR0FBRy92QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO0lBQ25DLElBQUksQ0FBQyt2QixxQkFBcUIsR0FBRyxJQUFJcndCLDJEQUFlLENBQW1CLElBQUksQ0FBQ2d3QixlQUFlLENBQUNYLFlBQVksQ0FBQztJQUNyRyxJQUFJLENBQUNpQixjQUFjLEdBQUcsSUFBSXR3QiwyREFBZSxDQUFTLElBQUksQ0FBQyt2QixhQUFhLENBQUM5a0IsS0FBSyxDQUFDO0lBQzNFLElBQUksQ0FBQ3NsQix1QkFBdUIsR0FBRyxJQUFJdndCLDJEQUFlLENBQWtCLElBQUksQ0FBQ2l3QixzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQztJQUMvRyxJQUFJLENBQUNxUSxjQUFjLEdBQUcsSUFBSXh3QiwyREFBZSxDQUFlLElBQUksQ0FBQ2d3QixlQUFlLENBQUNTLEtBQUssQ0FBQztJQUNuRixJQUFJLENBQUNDLGtCQUFrQixHQUFHLElBQUkxd0IsMkRBQWUsQ0FBVSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDVyxTQUFTLENBQUM7SUFDdEYsSUFBSSxDQUFDQyxtQkFBbUIsR0FBRyxJQUFJNXdCLDJEQUFlLENBQVUsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDO0lBQ3hGLElBQUksQ0FBQ0Msc0JBQXNCLEdBQUcsSUFBSTl3QiwyREFBZSxDQUFVLElBQUksQ0FBQyt2QixhQUFhLENBQUNnQixhQUFhLENBQUM7SUFDNUYsSUFBSSxDQUFDQyxtQkFBbUIsR0FBRyxJQUFJaHhCLDJEQUFlLENBQVUsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQztJQUN4RixJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJbHhCLDJEQUFlLENBQVUsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ21CLE1BQU0sQ0FBQztJQUNoRixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUlweEIsMkRBQWUsQ0FBVSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDcUIsT0FBTyxDQUFDO0lBQ2xGLElBQUksQ0FBQ0MsZ0JBQWdCLEdBQUcsSUFBSXR4QiwyREFBZSxDQUFVLElBQUksQ0FBQ2d3QixlQUFlLENBQUN1QixPQUFPLENBQUM7SUFDbEYsSUFBSSxDQUFDQyxnQkFBZ0IsR0FBRyxJQUFJeHhCLDJEQUFlLENBQVUsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQztJQUNsRixJQUFJLENBQUNDLGdCQUFnQixHQUFHLElBQUkxeEIsMkRBQWUsQ0FBVSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDMkIsT0FBTyxDQUFDO0lBQ2xGLElBQUksQ0FBQ0Msa0JBQWtCLEdBQUcsSUFBSTV4QiwyREFBZSxDQUFTLElBQUksQ0FBQ2d3QixlQUFlLENBQUNULFNBQVMsQ0FBQztJQUNyRixJQUFJLENBQUNzQyxZQUFZLEdBQUcsSUFBSTd4QiwyREFBZSxDQUFTLElBQUksQ0FBQ2d3QixlQUFlLENBQUM4QixHQUFHLENBQUM7SUFDekUsSUFBSSxDQUFDQyxxQkFBcUIsR0FBRyxJQUFJL3hCLDJEQUFlLENBQVMsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ2dDLFlBQVksQ0FBQztJQUMzRixJQUFJLENBQUNDLG1CQUFtQixHQUFHLElBQUlqeUIsMkRBQWUsQ0FBWSxJQUFJLENBQUNnd0IsZUFBZSxDQUFDa0MsVUFBVSxDQUFDO0lBQzFGLElBQUksQ0FBQ0MscUJBQXFCLEdBQUcsSUFBSW55QiwyREFBZSxDQUFTLElBQUksQ0FBQ2d3QixlQUFlLENBQUNvQyxZQUFZLENBQUM7SUFDM0YsSUFBSSxDQUFDQyxpQkFBaUIsR0FBRyxJQUFJcnlCLDJEQUFlLENBQVcsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQztJQUNyRixJQUFJLENBQUNDLGVBQWUsR0FBRyxJQUFJdnlCLDJEQUFlLENBQVUsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQ3dDLE1BQU0sQ0FBQztJQUNoRixJQUFJLENBQUNDLHNCQUFzQixHQUFHLElBQUl6eUIsMkRBQWUsQ0FBdUIsSUFBSSxDQUFDZ3dCLGVBQWUsQ0FBQzlMLGFBQWEsQ0FBQztJQUMzRyxJQUFJLENBQUN3TyxvQkFBb0IsR0FBRyxJQUFJMXlCLDJEQUFlLENBQWMsSUFBSSxDQUFDaXdCLHNCQUFzQixDQUFDM04sV0FBVyxDQUFDO0lBRXJHLElBQU11SyxZQUFZLEdBQUcsQ0FBQ3JoQixTQUFTLENBQUNVLEdBQUcsSUFBSTlDLDZDQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssRUFBRXdQLFFBQVEsQ0FBQyxDQUFDO0lBRXpFakgsNkNBQUcsQ0FBQzJQLE9BQU8sQ0FBQ2xZLEtBQUssR0FBRzJLLFNBQVMsQ0FBQ3VOLE9BQU8sSUFBSTNQLDZDQUFHLENBQUMyUCxPQUFPLENBQUNsWSxLQUFLO0lBQzFENnBCLGdFQUFZLENBQUN4ZSxHQUFHLENBQUNyTCxLQUFLLEdBQUdnc0IsWUFBWTtJQUNyQyxJQUFJLENBQUNwQixlQUFlLEdBQUdwUyxnRUFBYyxDQUFDQyxpQkFBaUIsQ0FBQ3VULFlBQVksQ0FBQztJQUNyRSxJQUFJLENBQUM4RixpQkFBaUIsR0FBRyxJQUFJcEUsZ0VBQWdCLENBQUNubEIsNkNBQUcsQ0FBQ0csWUFBWSxFQUFFLElBQUksQ0FBQ2tpQixlQUFlLENBQUM7SUFDckYsSUFBSSxDQUFDdUUsZUFBZSxDQUFDNEMsa0JBQWtCLENBQUNyeEIsR0FBRyxDQUFDLElBQUksQ0FBQ294QixpQkFBaUIsQ0FBQztJQUNuRSxJQUFJLENBQUNFLDRCQUE0QixHQUFHLElBQUksQ0FBQ0MsMEJBQTBCLENBQUN4c0IsSUFBSSxDQUFDLElBQUksQ0FBQztJQUM5RSxJQUFJLENBQUMrb0IsWUFBWSxHQUFHQSxZQUFZO0lBRWhDLElBQUksQ0FBQ1csZUFBZSxDQUFDNEMsa0JBQWtCLENBQUNyeEIsR0FBRyxDQUN6QyxJQUFJLENBQUN5dUIsZUFBZSxDQUFDWCxZQUFZLENBQUN4RixTQUFTLENBQUMsVUFBQXdGLFlBQVksRUFBSTtNQUMxRG51QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDK0MsbUJBQW1CLENBQUMveEIsT0FBTyxDQUFDLENBQUM7TUFFbEQsSUFBSSxDQUFDcXVCLFlBQVksRUFBRTtRQUNqQjtNQUNGO01BRUFudUIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQytDLG1CQUFtQixDQUFDeHhCLEdBQUcsQ0FBQ0wsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3dDLE1BQU0sQ0FBQzNJLFNBQVMsQ0FBQyxVQUFBMkksTUFBTSxFQUFJO1FBQzNGLElBQUl0eEIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2dELGNBQWMsRUFBRTtVQUN2Qzl4QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDZ0QsY0FBYyxDQUFDaHlCLE9BQU8sQ0FBQyxDQUFDO1FBQy9DO1FBRUEsSUFBSSxDQUFDd3hCLE1BQU0sRUFBRTtVQUNYO1FBQ0Y7UUFFQSxJQUFJLENBQUN0eEIsS0FBSSxDQUFDbXVCLFlBQVksRUFBRTtVQUN0QjtRQUNGO1FBRUEsSUFBSW51QixLQUFJLENBQUNtdUIsWUFBWSxDQUFDNEQsT0FBTyxFQUFFO1VBQzdCL3hCLEtBQUksQ0FBQ211QixZQUFZLENBQUM0RCxPQUFPLENBQUNoYSxTQUFTLEdBQUc3UCw2Q0FBRyxDQUFDc1EsZUFBZTtVQUN6RHhZLEtBQUksQ0FBQ211QixZQUFZLENBQUM0RCxPQUFPLENBQUNwcEIsUUFBUSxHQUFHM0ksS0FBSSxDQUFDMkksUUFBUTtRQUNwRDtRQUVBM0ksS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2dELGNBQWMsR0FBRyxJQUFJMUUsOERBQWMsQ0FBQ3B0QixLQUFJLENBQUMySSxRQUFRLEVBQUVULDZDQUFHLENBQUNHLFlBQVksRUFBRXJJLEtBQUksQ0FBQ2t2QixpQkFBaUIsRUFBRWx2QixLQUFJLENBQUN1cUIsZUFBZSxDQUFDO1FBQ3ZJdnFCLEtBQUksQ0FBQzh1QixlQUFlLENBQUNnRCxjQUFjLENBQUNFLCtCQUErQixDQUFDaHlCLEtBQUksQ0FBQ211QixZQUFZLENBQUM7UUFDdEZudUIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2dELGNBQWMsQ0FBQ0csMkJBQTJCLENBQUNqeUIsS0FBSSxDQUFDbXVCLFlBQVksQ0FBQztRQUVsRixJQUFJbnVCLEtBQUksQ0FBQzh1QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEtBQUt3dEIsc0RBQVksQ0FBQytFLE9BQU8sRUFBRTtVQUM3RCxJQUFNblksT0FBTyxHQUFHL1osS0FBSSxDQUFDbXlCLGdCQUFnQixDQUFDLENBQUM7UUFDekM7TUFDRixDQUFDLENBQUMsQ0FBQztNQUVIbnlCLEtBQUksQ0FBQzh1QixlQUFlLENBQUM0QyxrQkFBa0IsQ0FBQ3J4QixHQUFHLENBQUNMLEtBQUksQ0FBQzh1QixlQUFlLENBQUMrQyxtQkFBbUIsQ0FBQztJQUN2RixDQUFDLENBQUMsQ0FBQztJQUNMLElBQUksQ0FBQy9DLGVBQWUsQ0FBQzRDLGtCQUFrQixDQUFDcnhCLEdBQUcsQ0FDekMsSUFBSSxDQUFDeXVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNUcsU0FBUyxDQUFDLFVBQUE0RyxLQUFLLEVBQUk7TUFDNUMsSUFBSXZ2QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDc0Qsd0JBQXdCLEVBQUU7UUFDakQxekIsZ0VBQVcsQ0FBQ3FQLFlBQVksQ0FBQy9OLEtBQUksQ0FBQzh1QixlQUFlLENBQUNzRCx3QkFBd0IsQ0FBQztNQUN6RTtNQUVBLElBQUksQ0FBQ3B5QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDb0MsWUFBWSxDQUFDdnhCLEtBQUssRUFBRTtRQUM1QztNQUNGO01BRUEsSUFBSTR2QixLQUFLLEtBQUtwQyxzREFBWSxDQUFDa0YsT0FBTyxFQUFFO1FBQ2xDO01BQ0Y7TUFFQXJ5QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDc0Qsd0JBQXdCLEdBQUcxekIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO1FBQzNFckYsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ3Z4QixLQUFLLEdBQUcsQ0FBQztNQUM3QyxDQUFDLEVBQUVxdUIseUNBQXlDLENBQUM7SUFDL0MsQ0FBQyxDQUFDLENBQUM7SUFDTCxJQUFJLENBQUNjLGVBQWUsQ0FBQzRDLGtCQUFrQixDQUFDcnhCLEdBQUcsQ0FDekMsSUFBSSxDQUFDeXVCLGVBQWUsQ0FBQ2tDLFVBQVUsQ0FBQ3JJLFNBQVMsQ0FBQyxVQUFBcUksVUFBVSxFQUFJO01BQ3RELElBQUloeEIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2dELGNBQWMsRUFBRTtRQUN2Qzl4QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDZ0QsY0FBYyxDQUFDUSx3QkFBd0IsQ0FBQ3RCLFVBQVUsQ0FBQzdoQixRQUFRLENBQUMsQ0FBQyxDQUFDO01BQ3JGO0lBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDTCxJQUFJLENBQUMyZixlQUFlLENBQUM0QyxrQkFBa0IsQ0FBQ3J4QixHQUFHLENBQ3pDLElBQUksQ0FBQ3l1QixlQUFlLENBQUNnQyxZQUFZLENBQUNuSSxTQUFTLENBQUMsVUFBQW1JLFlBQVksRUFBSTtNQUMxRCxJQUFJQSxZQUFZLElBQUk5d0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLElBQUlLLEtBQUksQ0FBQzh1QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxFQUFFO1FBQzVGLElBQU00eUIscUJBQXFCLEdBQUdwekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHWSxLQUFJLENBQUM4dUIsZUFBZSxDQUFDMEQscUJBQXFCLENBQUNDLE9BQU8sQ0FBQyxDQUFDO1FBQy9GLElBQU0xWSxPQUFPLEdBQUcvWixLQUFJLENBQUM4dUIsZUFBZSxDQUFDc0MsUUFBUSxDQUFDenhCLEtBQUssQ0FBQyt5QixZQUFZLENBQzlEMXlCLEtBQUksQ0FBQzh1QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxFQUNqQzR5QixxQkFBcUIsRUFDckJ6QixZQUFZLEVBQ1o5RCwwRUFBWSxDQUFDMkYsSUFBSSxFQUNqQjFGLHlFQUFXLENBQUMyRixNQUNkLENBQUMsQ0FDRTNXLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO1VBQ1Z6SyxLQUFJLENBQUN3SixPQUFPLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRVEsQ0FBQyxDQUFDO1FBQzVELENBQUMsQ0FBQztNQUNOO0lBQ0YsQ0FBQyxDQUNILENBQUM7SUFFRCxJQUFNb29CLHNCQUFzQixHQUFHLFNBQXpCQSxzQkFBc0JBLENBQUEsRUFBUztNQUNuQyxJQUFJN3lCLEtBQUksQ0FBQzh1QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxJQUFJSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDc0MsUUFBUSxDQUFDenhCLEtBQUssRUFBRTtRQUM1RSxJQUFNb2EsT0FBTyxHQUFHL1osS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLENBQUNrekIsc0JBQXNCLENBQUM3eUIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3dDLE1BQU0sQ0FBQzN4QixLQUFLLEVBQUUscUNBQXFDLENBQUM7TUFDdEo7SUFDRixDQUFDO0lBRURqQixnRUFBVyxDQUFDZ3VCLHNCQUFzQixDQUFDLGNBQWMsRUFBRW1HLHNCQUFzQixDQUFDO0lBRTFFLElBQUksQ0FBQy9ELGVBQWUsQ0FBQzRDLGtCQUFrQixDQUFDcnhCLEdBQUcsQ0FBQyxJQUFJMUIseURBQVUsQ0FBQyxZQUFNO01BQy9ERCxnRUFBVyxDQUFDbzBCLHlCQUF5QixDQUFDLGNBQWMsRUFBRUQsc0JBQXNCLENBQUM7SUFDL0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUNFLEtBQUssQ0FBQyxDQUFDO0VBQ2Q7RUFBQyxPQUFBdnpCLHlJQUFBLENBQUEwdUIsT0FBQTtJQUFBenVCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBcUM7TUFDbkMsT0FBTyxJQUFJLENBQUNvdkIsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSztJQUNoRCxDQUFDO0lBQUEyWCxHQUFBLEVBRUQsU0FBQUEsSUFBaUI2VyxZQUE4QixFQUFFO01BQy9DLElBQUksSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLEVBQUU7UUFDM0MsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ21JLG1CQUFtQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUM2cEIsNEJBQTRCLENBQUM7UUFDNUcsSUFBSSxDQUFDN0MsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxDQUFDbUksbUJBQW1CLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDNnBCLDRCQUE0QixDQUFDO1FBQ2hILElBQUksQ0FBQzdDLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ21JLG1CQUFtQixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUM2cEIsNEJBQTRCLENBQUM7UUFFeEcsSUFBSSxJQUFJLENBQUM3QyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNveUIsT0FBTyxFQUFFO1VBQ25ELElBQUksQ0FBQ2pELGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ295QixPQUFPLENBQUNoYSxTQUFTLEdBQUcsRUFBRTtVQUM5RCxJQUFJLENBQUMrVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNveUIsT0FBTyxDQUFDcHBCLFFBQVEsR0FBRyxFQUFFO1FBQy9EO1FBRUEsSUFBSSxDQUFDbW1CLGVBQWUsQ0FBQytDLG1CQUFtQixDQUFDL3hCLE9BQU8sQ0FBQyxDQUFDO1FBRWxELElBQUksQ0FBQ2d2QixlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNxekIsS0FBSyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDbEUsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxDQUFDc3pCLFNBQVMsR0FBRyxJQUFJO01BQzFEO01BRUEsSUFBSSxDQUFDbkUsZUFBZSxDQUFDVyxTQUFTLENBQUM5dkIsS0FBSyxHQUFHLEtBQUs7TUFDNUMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDaHdCLEtBQUssR0FBRyxLQUFLO01BQzdDLElBQUksQ0FBQ212QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7TUFDMUMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsS0FBSztNQUUxQyxJQUFJLElBQUksQ0FBQ212QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEtBQUt3dEIsc0RBQVksQ0FBQytGLFlBQVksRUFBRTtRQUNsRSxJQUFJLENBQUNwRSxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsc0RBQVksQ0FBQytFLE9BQU87TUFDekQ7TUFFQSxJQUFJLENBQUNwRCxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLEdBQUd3dUIsWUFBWTtNQUV0RCxJQUFJLElBQUksQ0FBQ1csZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxFQUFFO1FBQzNDLElBQUksQ0FBQ212QixlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNpSSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUUsSUFBSSxDQUFDK3BCLDRCQUE0QixDQUFDO1FBQ3pHLElBQUksQ0FBQzdDLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ2lJLGdCQUFnQixDQUFDLGdCQUFnQixFQUFFLElBQUksQ0FBQytwQiw0QkFBNEIsQ0FBQztRQUM3RyxJQUFJLENBQUM3QyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNpSSxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDK3BCLDRCQUE0QixDQUFDO01BQ3ZHO0lBQ0Y7RUFBQztJQUFBbHlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFpeUIsMEJBQTBCQSxDQUFBLEVBQVM7TUFDekMsSUFBTXpELFlBQVksR0FBRyxJQUFJLENBQUNXLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUs7TUFFNUQsSUFBSXd1QixZQUFZLEVBQUU7UUFDaEIsSUFBSSxJQUFJLENBQUM2QyxVQUFVLENBQUNyeEIsS0FBSyxDQUFDd3pCLEtBQUssS0FBS2hGLFlBQVksQ0FBQ2lGLFVBQVUsSUFBSSxJQUFJLENBQUNwQyxVQUFVLENBQUNyeEIsS0FBSyxDQUFDMHpCLE1BQU0sS0FBS2xGLFlBQVksQ0FBQ21GLFdBQVcsRUFBRTtVQUN4SCxJQUFJLENBQUN4RSxlQUFlLENBQUNrQyxVQUFVLENBQUNyeEIsS0FBSyxHQUFHLElBQUl1dEIsd0RBQVMsQ0FBQ2lCLFlBQVksQ0FBQ2lGLFVBQVUsRUFBRWpGLFlBQVksQ0FBQ21GLFdBQVcsQ0FBQztRQUMxRztNQUNGLENBQUMsTUFBTTtRQUNMLElBQUksQ0FBQ3hFLGVBQWUsQ0FBQ2tDLFVBQVUsQ0FBQ3J4QixLQUFLLEdBQUd1dEIsd0RBQVMsQ0FBQ3FHLEtBQUs7TUFDekQ7SUFDRjtFQUFDO0lBQUE5ekIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQ212QixhQUFhLENBQUM5a0IsS0FBSyxDQUFDcEssS0FBSztJQUN2QyxDQUFDO0lBQUEyWCxHQUFBLEVBRUQsU0FBQUEsSUFBVXZOLEtBQXVCLEVBQUU7TUFDakMsSUFBSSxDQUFDK2tCLGVBQWUsQ0FBQzBFLFdBQVcsQ0FBQzF6QixPQUFPLENBQUMsQ0FBQztNQUUxQyxJQUFJLENBQUMrdUIsYUFBYSxDQUFDOWtCLEtBQUssQ0FBQ3BLLEtBQUssR0FBR29LLEtBQUs7TUFDdEMsSUFBSSxDQUFDOGtCLGFBQWEsQ0FBQ2dCLGFBQWEsQ0FBQ2x3QixLQUFLLEdBQUcsS0FBSztNQUU5QyxJQUFNMkssU0FBUyxHQUFHVCxpRUFBYyxDQUFDQyxVQUFVLENBQUMsSUFBSSxDQUFDK2tCLGFBQWEsQ0FBQzlrQixLQUFLLENBQUNwSyxLQUFLLENBQUM7TUFDM0UsSUFBTWdzQixZQUFZLEdBQUcsQ0FBQ3JoQixTQUFTLENBQUNVLEdBQUcsSUFBSTlDLDZDQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssRUFBRXdQLFFBQVEsQ0FBQyxDQUFDO01BRXpFakgsNkNBQUcsQ0FBQzJQLE9BQU8sQ0FBQ2xZLEtBQUssR0FBRzJLLFNBQVMsQ0FBQ3VOLE9BQU8sSUFBSTNQLDZDQUFHLENBQUMyUCxPQUFPLENBQUNsWSxLQUFLO01BQzFENnBCLGdFQUFZLENBQUN4ZSxHQUFHLENBQUNyTCxLQUFLLEdBQUdnc0IsWUFBWTtNQUVyQyxJQUFJLENBQUNwQixlQUFlLEdBQUdwUyxnRUFBYyxDQUFDQyxpQkFBaUIsQ0FBQ3VULFlBQVksQ0FBQztNQUVyRSxJQUFJLENBQUNxRCx1QkFBdUIsQ0FBQ1Qsb0JBQW9CLENBQUM1dUIsS0FBSyxHQUFHMkssU0FBUyxDQUFDVyxZQUFZLENBQUNqSSxRQUFRLENBQUMsb0JBQW9CLENBQUM7TUFDL0csSUFBSSxDQUFDZ3NCLHVCQUF1QixDQUFDUiwyQkFBMkIsQ0FBQzd1QixLQUFLLEdBQUcySyxTQUFTLENBQUNXLFlBQVksQ0FBQ2pJLFFBQVEsQ0FBQyw0QkFBNEIsQ0FBQztNQUU5SCxJQUFJLENBQUMrdkIsS0FBSyxDQUFDLENBQUM7SUFDZDtFQUFDO0lBQUF0ekIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1RDtNQUNyRCxPQUFPLElBQUksQ0FBQzJ2Qix1QkFBdUI7SUFDckM7RUFBQztJQUFBNXZCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUM0dkIsY0FBYztJQUM1QjtFQUFDO0lBQUE3dkIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPLElBQUksQ0FBQzh2QixrQkFBa0I7SUFDaEM7RUFBQztJQUFBL3ZCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkM7TUFDekMsT0FBTyxJQUFJLENBQUNnd0IsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQWp3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQThDO01BQzVDLE9BQU8sSUFBSSxDQUFDa3dCLHNCQUFzQjtJQUNwQztFQUFDO0lBQUFud0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEyQztNQUN6QyxPQUFPLElBQUksQ0FBQ293QixtQkFBbUI7SUFDakM7RUFBQztJQUFBcndCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUNzd0IsZUFBZTtJQUM3QjtFQUFDO0lBQUF2d0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQ3d3QixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBendCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBd0M7TUFDdEMsT0FBTyxJQUFJLENBQUMwd0IsZ0JBQWdCO0lBQzlCO0VBQUM7SUFBQTN3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sSUFBSSxDQUFDNHdCLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUE3d0IsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF3QztNQUN0QyxPQUFPLElBQUksQ0FBQzh3QixnQkFBZ0I7SUFDOUI7RUFBQztJQUFBL3dCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBOEM7TUFDNUMsT0FBTyxJQUFJLENBQUNneEIsa0JBQWtCO0lBQ2hDO0VBQUM7SUFBQWp4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQXdDO01BQ3RDLE9BQU8sSUFBSSxDQUFDaXhCLFlBQVk7SUFDMUI7RUFBQztJQUFBbHhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBMkI7TUFDekIsT0FBTyxJQUFJLENBQUNteEIscUJBQXFCLENBQUNseEIsS0FBSztJQUN6QztFQUFDO0lBQUFGLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBNkM7TUFDM0MsT0FBTyxJQUFJLENBQUNxeEIsbUJBQW1CO0lBQ2pDO0VBQUM7SUFBQXR4QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU8sSUFBSSxDQUFDdXhCLHFCQUFxQjtJQUNuQztFQUFDO0lBQUF4eEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUEwQztNQUN4QyxPQUFPLElBQUksQ0FBQ3l4QixpQkFBaUI7SUFDL0I7RUFBQztJQUFBMXhCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUM7TUFDckMsT0FBTyxJQUFJLENBQUMyeEIsZUFBZTtJQUM3QjtFQUFDO0lBQUE1eEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUF1QjtNQUNyQixPQUFPLElBQUksQ0FBQ292QixlQUFlLENBQUNubUIsUUFBUTtJQUN0QztFQUFDO0lBQUFsSixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTJEO01BQ3pELE9BQU8sSUFBSSxDQUFDNnhCLHNCQUFzQjtJQUNwQztFQUFDO0lBQUE5eEIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUFnRDtNQUM5QyxPQUFPLElBQUksQ0FBQzh4QixvQkFBb0I7SUFDbEM7RUFBQztJQUFBL3hCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUE4ekIsZUFBZUEsQ0FBQzNDLFlBQTJCLEVBQVE7TUFDakQsSUFBSSxDQUFDaEMsZUFBZSxDQUFDZ0MsWUFBWSxDQUFDbnhCLEtBQUssR0FBR214QixZQUFZO0lBQ3hEO0VBQUM7SUFBQXJ4QixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBK3pCLGlCQUFpQkEsQ0FBQSxFQUFTO01BQUEsSUFBQTFmLE1BQUE7TUFDeEIsSUFBSSxJQUFJLENBQUM4YSxlQUFlLENBQUNnQyxZQUFZLENBQUNueEIsS0FBSyxJQUFJLElBQUksQ0FBQ212QixlQUFlLENBQUNzQyxRQUFRLENBQUN6eEIsS0FBSyxJQUFJLElBQUksQ0FBQ212QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxFQUFFO1FBQ3ZILElBQU00eUIscUJBQXFCLEdBQUdwekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQzB2QixlQUFlLENBQUMwRCxxQkFBcUIsQ0FBQ0MsT0FBTyxDQUFDLENBQUM7UUFDL0YsSUFBTWtCLHNCQUFzQixHQUFHLENBQUM7UUFDaEMsSUFBTTVaLE9BQU8sR0FBRyxJQUFJLENBQUMrVSxlQUFlLENBQUNzQyxRQUFRLENBQUN6eEIsS0FBSyxDQUFDK3lCLFlBQVksQ0FDOUQsSUFBSSxDQUFDNUQsZUFBZSxDQUFDd0MsTUFBTSxDQUFDM3hCLEtBQUssRUFDakM0eUIscUJBQXFCLEVBQ3JCb0Isc0JBQXNCLEVBQ3RCM0csMEVBQVksQ0FBQzJGLElBQUksRUFDakIxRix5RUFBVyxDQUFDMkcsS0FDZCxDQUFDLENBQ0VqWSxJQUFJLENBQUMsVUFBQWxWLElBQUEsRUFBYztVQUFBLElBQVp5VixNQUFNLEdBQUF6VixJQUFBLENBQU55VixNQUFNO1VBQ1osSUFBSUEsTUFBTSxLQUFLLElBQUksRUFBRTtZQUNuQmxJLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ2dDLFlBQVksQ0FBQ254QixLQUFLLEdBQUcsQ0FBQztVQUM3QztRQUNGLENBQUMsQ0FBQyxDQUNEc2MsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7VUFDVnVKLE1BQUksQ0FBQ3hLLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFUSxDQUFDLENBQUM7UUFDNUQsQ0FBQyxDQUFDO01BQ047SUFDRjtFQUFDO0lBQUFoTCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBazBCLGVBQWVBLENBQUNqRCxHQUFnQixFQUFRO01BQ3RDLElBQUksQ0FBQzlCLGVBQWUsQ0FBQ1QsU0FBUyxDQUFDMXVCLEtBQUssR0FBR2l4QixHQUFHO0lBQzVDO0VBQUM7SUFBQW54QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBbTBCLEtBQUEsR0FBQTdaLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQUUsUUFBVzJDLE1BQWM7UUFBQSxJQUFBK0ssTUFBQTtRQUFBLE9BQUE1Tiw0SUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLE9BQUFGLFFBQUEsQ0FBQU8sTUFBQSxXQUNoQixJQUFJcUIsT0FBTyxDQUFDLFVBQUEyQixPQUFPLEVBQUk7Z0JBQzVCLElBQUksQ0FBQzhKLE1BQUksQ0FBQ21ILGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEVBQUU7a0JBQ3hDbW9CLE1BQUksQ0FBQ2tNLFdBQVcsQ0FBQ2pYLE1BQU0sQ0FBQztrQkFFeEJpQixPQUFPLENBQUMsQ0FBQztrQkFFVDtnQkFDRjtnQkFFQThKLE1BQUksQ0FBQ2dILGVBQWUsQ0FBQytDLG1CQUFtQixDQUFDeHhCLEdBQUcsQ0FBQ3luQixNQUFJLENBQUNtSCxhQUFhLENBQUM4RSxVQUFVLENBQUNwTCxTQUFTLENBQUMsVUFBQW9MLFVBQVUsRUFBSTtrQkFDakcsSUFBSSxDQUFDQSxVQUFVLEVBQUU7b0JBQ2ZqTSxNQUFJLENBQUNrTSxXQUFXLENBQUNqWCxNQUFNLENBQUM7b0JBQ3hCaUIsT0FBTyxDQUFDLENBQUM7a0JBQ1g7Z0JBQ0YsQ0FBQyxDQUFDLENBQUM7Y0FDTCxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXZELFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ0g7TUFBQSxTQWpCS2MsSUFBSUEsQ0FBQUMsRUFBQTtRQUFBLE9BQUEyWSxLQUFBLENBQUExWSxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFKdUksSUFBSTtJQUFBO0VBQUE7SUFBQXpiLEdBQUE7SUFBQUUsS0FBQSxFQW1CVixTQUFRcTBCLFdBQVdBLENBQUNqWCxNQUFjLEVBQVE7TUFDeEMsSUFBSSxJQUFJLENBQUMrUixlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLEVBQUU7UUFDM0MsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ3F6QixLQUFLLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUNsRSxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNzekIsU0FBUyxHQUFHLElBQUk7TUFDMUQ7TUFFQSxJQUFJLENBQUNuRSxlQUFlLENBQUMrQyxtQkFBbUIsQ0FBQy94QixPQUFPLENBQUMsQ0FBQztNQUVsRCxJQUFJLENBQUNtMEIsZ0JBQWdCLENBQUNsWCxNQUFNLENBQUM7TUFFN0IsSUFBSSxDQUFDK1IsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUMrRSxPQUFPO0lBQ3pEO0VBQUM7SUFBQXp5QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBdTBCLE9BQUEsR0FBQWphLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQW9CLFNBQUE7UUFBQSxPQUFBcEIsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQUEsS0FDTSxJQUFJLENBQUNvVSxzQkFBc0IsQ0FBQzNOLFdBQVcsQ0FBQ3poQixLQUFLO2dCQUFBNmIsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FDL0MsSUFBSSxDQUFDbVUsZUFBZSxDQUFDYSxVQUFVLENBQUNod0IsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBNmIsU0FBQSxDQUFBUixNQUFBLFdBRXZDLElBQUksQ0FBQ21aLDZCQUE2QixDQUFDLElBQUksQ0FBQ3BGLHNCQUFzQixDQUFDM04sV0FBVyxDQUFDemhCLEtBQUssQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNmIsU0FBQSxDQUFBTixJQUFBO1VBQUE7UUFBQSxHQUFBSSxRQUFBO01BQUEsQ0FFM0Y7TUFBQSxTQU5LOFksTUFBTUEsQ0FBQTtRQUFBLE9BQUFGLE9BQUEsQ0FBQTlZLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQU55aEIsTUFBTTtJQUFBO0VBQUE7SUFBQTMwQixHQUFBO0lBQUFFLEtBQUEsRUFRWixTQUFBMDBCLElBQUlBLENBQUEsRUFBUztNQUNYLElBQU1sRyxZQUFZLEdBQUcsSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLO01BRTVELElBQUl3dUIsWUFBWSxFQUFFO1FBQ2hCQSxZQUFZLENBQUNtRyxLQUFLLEdBQUcsSUFBSTtNQUMzQjtJQUNGO0VBQUM7SUFBQTcwQixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBNDBCLE1BQU1BLENBQUEsRUFBUztNQUNiLElBQU1wRyxZQUFZLEdBQUcsSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLO01BRTVELElBQUl3dUIsWUFBWSxFQUFFO1FBQ2hCQSxZQUFZLENBQUNtRyxLQUFLLEdBQUcsS0FBSztRQUMxQixJQUFJLENBQUN4RixlQUFlLENBQUNXLFNBQVMsQ0FBQzl2QixLQUFLLEdBQUcsS0FBSztNQUM5QztJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTYwQixRQUFBLEdBQUF2YSw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUFrRixTQUFBO1FBQUEsSUFBQTRJLE1BQUE7UUFBQSxPQUFBOU4sNElBQUEsVUFBQXNGLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL0UsSUFBQSxHQUFBK0UsU0FBQSxDQUFBOUUsSUFBQTtZQUFBO2NBQUEsT0FBQThFLFNBQUEsQ0FBQXpFLE1BQUEsV0FDUyxJQUFJLENBQUNFLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDUyxJQUFJLENBQUMsWUFBTTtnQkFDcERxTSxNQUFJLENBQUM4RyxlQUFlLENBQUM0QyxrQkFBa0IsQ0FBQzV4QixPQUFPLENBQUMsQ0FBQztnQkFDakRrb0IsTUFBSSxDQUFDaUgsYUFBYSxDQUFDd0YsVUFBVSxHQUFHLElBQUk7Y0FDdEMsQ0FBQyxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFoVixTQUFBLENBQUF2RSxJQUFBO1VBQUE7UUFBQSxHQUFBa0UsUUFBQTtNQUFBLENBQ0g7TUFBQSxTQUxLdGYsT0FBT0EsQ0FBQTtRQUFBLE9BQUEwMEIsUUFBQSxDQUFBcFosS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBUDdTLE9BQU87SUFBQTtFQUFBO0lBQUFMLEdBQUE7SUFBQUUsS0FBQSxFQU9iLFNBQUErMEIsTUFBTUEsQ0FBQzNxQixLQUF1QixFQUFPO01BQ25DLElBQU13TixHQUFHLEdBQUcxTixpRUFBYyxDQUFDQyxVQUFVLENBQUNDLEtBQUssQ0FBQyxDQUFDaUIsR0FBRztNQUVoRCxJQUFJdU0sR0FBRyxFQUFFO1FBQ1AsT0FBT0EsR0FBRztNQUNaO01BRUEsSUFBSSxDQUFDL04sT0FBTyxDQUFDQyxJQUFJLENBQUMsNENBQTRDLEVBQUV2Qiw2Q0FBRyxDQUFDeWpCLFlBQVksQ0FBQ2hzQixLQUFLLENBQUM7TUFFdkYsT0FBTyxJQUFJakIsZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQ3lDLDZDQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssQ0FBQztJQUNwRDtFQUFDO0lBQUFGLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFnMUIsTUFBQSxHQUFBMWEsOElBQUEsY0FBQUMsNElBQUEsQ0FFRCxTQUFBa04sU0FBQTtRQUFBLE9BQUFsTiw0SUFBQSxVQUFBcU4sVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE5TSxJQUFBLEdBQUE4TSxTQUFBLENBQUE3TSxJQUFBO1lBQUE7Y0FBQSxLQUNNLElBQUksQ0FBQ3NVLGFBQWEsQ0FBQ3dGLFVBQVU7Z0JBQUFqTixTQUFBLENBQUE3TSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUN6QixJQUFJOVYsS0FBSyxDQUFDLDhCQUE4QixDQUFDO1lBQUE7Y0FBQSxLQUc3QyxJQUFJLENBQUNvcUIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUs7Z0JBQUE2bkIsU0FBQSxDQUFBN00sSUFBQTtnQkFBQTtjQUFBO2NBQ3JDLElBQUksQ0FBQ25SLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZDQUE2QyxDQUFDO2NBQUMsT0FBQStkLFNBQUEsQ0FBQXhNLE1BQUE7WUFBQTtjQUtuRSxJQUFJLENBQUNpVSxhQUFhLENBQUM4RSxVQUFVLENBQUNwMEIsS0FBSyxHQUFHLElBQUk7Y0FBQyxPQUFBNm5CLFNBQUEsQ0FBQXhNLE1BQUEsV0FFcEMsSUFBSSxDQUFDNFosWUFBWSxDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXBOLFNBQUEsQ0FBQXRNLElBQUE7VUFBQTtRQUFBLEdBQUFrTSxRQUFBO01BQUEsQ0FDM0I7TUFBQSxTQWRLMkwsS0FBS0EsQ0FBQTtRQUFBLE9BQUE0QixNQUFBLENBQUF2WixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFMb2dCLEtBQUs7SUFBQTtFQUFBO0lBQUF0ekIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWsxQixhQUFBLEdBQUE1YSw4SUFBQSxjQUFBQyw0SUFBQSxDQWdCWCxTQUFBNGEsU0FBQTtRQUFBLElBQUFDLE1BQUE7UUFBQSxJQUFBaHJCLEtBQUEsRUFBQWlyQixtQkFBQSxFQUFBQyxxQkFBQSxFQUFBQyxLQUFBLEVBQUFDLGdCQUFBLEVBQUFDLHNCQUFBLEVBQUFDLE1BQUEsRUFBQUMsaUJBQUEsRUFBQUMscUJBQUEsRUFBQUMsT0FBQSxFQUFBQyxrQkFBQSxFQUFBQyxzQkFBQSxFQUFBQyxPQUFBLEVBQUFDLGtCQUFBLEVBQUFDLDBCQUFBLEVBQUFDLG9CQUFBLEVBQUE5cUIsR0FBQSxFQUFBK3FCLDJCQUFBLEVBQUFDLFlBQUE7UUFBQSxPQUFBOWIsNElBQUEsVUFBQStiLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBeGIsSUFBQSxHQUFBd2IsU0FBQSxDQUFBdmIsSUFBQTtZQUFBO2NBQ0UsSUFBSSxDQUFDbVUsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNnSixRQUFRO2NBRWxEcHNCLEtBQXVCLEdBQUcsSUFBSSxDQUFDOGtCLGFBQWEsQ0FBQzlrQixLQUFLLENBQUNwSyxLQUFLO2NBQ3hEcTFCLG1CQUFtQixHQUFHLElBQUksQ0FBQ3ZELGlCQUFpQixDQUFDdUQsbUJBQW1CLENBQUMsQ0FBQztjQUFBLElBRW5FbnJCLGlFQUFjLENBQUNHLHVCQUF1QixDQUFDRCxLQUFLLENBQUM7Z0JBQUFtc0IsU0FBQSxDQUFBdmIsSUFBQTtnQkFBQTtjQUFBO2NBQ2hELElBQUksQ0FBQ25SLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDRCQUE0QixFQUFFRixLQUFLLENBQUM7Y0FDdkQsSUFBSSxDQUFDK2tCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDaUosWUFBWTtjQUM1RCxJQUFJLENBQUN0SCxlQUFlLENBQUNpQixVQUFVLENBQUNwd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDc3ZCLGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUF1MkIsU0FBQSxDQUFBbGIsTUFBQTtZQUFBO2NBQUEsS0FLMUMsSUFBSSxDQUFDZ1UsdUJBQXVCLENBQUNQLDRCQUE0QjtnQkFBQXlILFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBc2EscUJBQUEsR0FDekJ4SCw2RUFBb0IsQ0FBQzRJLGlDQUFpQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUNySCx1QkFBdUIsQ0FBQ1AsNEJBQTRCLENBQUMsRUFBckp5RyxLQUFLLEdBQUFELHFCQUFBLENBQUxDLEtBQUssRUFBRUMsZ0JBQWdCLEdBQUFGLHFCQUFBLENBQWhCRSxnQkFBZ0I7Y0FBQSxJQUV6QkQsS0FBSztnQkFBQWdCLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQ25SLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDa3JCLGdCQUFnQixDQUFDO2NBQ3BDLElBQUksQ0FBQ3JHLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUNnVSx1QkFBdUIsQ0FBQ04sNEJBQTRCO2dCQUFBd0gsU0FBQSxDQUFBdmIsSUFBQTtnQkFBQTtjQUFBO2NBQUF5YSxzQkFBQSxHQUN6QjNILDZFQUFvQixDQUFDNEksaUNBQWlDLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQ3JILHVCQUF1QixDQUFDTiw0QkFBNEIsQ0FBQyxFQUFySndHLE1BQUssR0FBQUUsc0JBQUEsQ0FBTEYsS0FBSyxFQUFFQyxpQkFBZ0IsR0FBQUMsc0JBQUEsQ0FBaEJELGdCQUFnQjtjQUFBLElBRXpCRCxNQUFLO2dCQUFBZ0IsU0FBQSxDQUFBdmIsSUFBQTtnQkFBQTtjQUFBO2NBQ1IsSUFBSSxDQUFDblIsT0FBTyxDQUFDUyxLQUFLLENBQUNrckIsaUJBQWdCLENBQUM7Y0FDcEMsSUFBSSxDQUFDckcsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNtSixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDeEgsZUFBZSxDQUFDaUIsVUFBVSxDQUFDcHdCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ3N2QixhQUFhLENBQUM4RSxVQUFVLENBQUNwMEIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBdTJCLFNBQUEsQ0FBQWxiLE1BQUE7WUFBQTtjQUFBLEtBTTVDLElBQUksQ0FBQ2dVLHVCQUF1QixDQUFDTCxzQkFBc0I7Z0JBQUF1SCxTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FBQTRhLHFCQUFBLEdBQ25CL0gsMEVBQWlCLENBQUMrSSx5QkFBeUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDdkgsdUJBQXVCLENBQUNMLHNCQUFzQixDQUFDLEVBQXBJdUcsT0FBSyxHQUFBSyxxQkFBQSxDQUFMTCxLQUFLLEVBQUVDLGtCQUFnQixHQUFBSSxxQkFBQSxDQUFoQkosZ0JBQWdCO2NBQUEsSUFFekJELE9BQUs7Z0JBQUFnQixTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FDUixJQUFJLENBQUNuUixPQUFPLENBQUNTLEtBQUssQ0FBQ2tyQixrQkFBZ0IsQ0FBQztjQUNwQyxJQUFJLENBQUNyRyxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsc0RBQVksQ0FBQ21KLGtCQUFrQjtjQUNsRSxJQUFJLENBQUN4SCxlQUFlLENBQUNpQixVQUFVLENBQUNwd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDc3ZCLGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUF1MkIsU0FBQSxDQUFBbGIsTUFBQTtZQUFBO2NBQUEsS0FNNUMsSUFBSSxDQUFDZ1UsdUJBQXVCLENBQUNKLHNCQUFzQjtnQkFBQXNILFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBK2Esc0JBQUEsR0FDbkJsSSwwRUFBaUIsQ0FBQytJLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUN2SCx1QkFBdUIsQ0FBQ0osc0JBQXNCLENBQUMsRUFBcElzRyxPQUFLLEdBQUFRLHNCQUFBLENBQUxSLEtBQUssRUFBRUMsa0JBQWdCLEdBQUFPLHNCQUFBLENBQWhCUCxnQkFBZ0I7Y0FBQSxJQUV6QkQsT0FBSztnQkFBQWdCLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUNSLElBQUksQ0FBQ25SLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDa3JCLGtCQUFnQixDQUFDO2NBQ3BDLElBQUksQ0FBQ3JHLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FBQSxNQU01QyxJQUFJLENBQUNnVSx1QkFBdUIsQ0FBQ1Qsb0JBQW9CLENBQUM1dUIsS0FBSyxJQUFJLElBQUksQ0FBQ3F2Qix1QkFBdUIsQ0FBQ1IsMkJBQTJCLENBQUM3dUIsS0FBSztnQkFBQXUyQixTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FDM0gsSUFBSSxDQUFDblIsT0FBTyxDQUFDUyxLQUFLLENBQUMsK0ZBQStGLENBQUM7Y0FDbkgsSUFBSSxDQUFDNmtCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FLeEM2YSwwQkFBMEIsR0FBRyxPQUFPLElBQUksQ0FBQzdHLHVCQUF1QixDQUFDUCw0QkFBNEIsS0FBSyxVQUFVLElBQUksT0FBTyxJQUFJLENBQUNPLHVCQUF1QixDQUFDTiw0QkFBNEIsS0FBSyxVQUFVO2NBQy9Mb0gsb0JBQW9CLEdBQUcsT0FBTyxJQUFJLENBQUM5Ryx1QkFBdUIsQ0FBQ0wsc0JBQXNCLEtBQUssVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDSyx1QkFBdUIsQ0FBQ0osc0JBQXNCLEtBQUssVUFBVTtjQUFBLE1BRS9LaUgsMEJBQTBCLElBQUlDLG9CQUFvQjtnQkFBQUksU0FBQSxDQUFBdmIsSUFBQTtnQkFBQTtjQUFBO2NBQ3BELElBQUksQ0FBQ25SLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDZIQUE2SCxDQUFDO2NBQ2pKLElBQUksQ0FBQzZrQixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsc0RBQVksQ0FBQ21KLGtCQUFrQjtjQUNsRSxJQUFJLENBQUN4SCxlQUFlLENBQUNpQixVQUFVLENBQUNwd0IsS0FBSyxHQUFHLEtBQUs7Y0FDN0MsSUFBSSxDQUFDc3ZCLGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUF1MkIsU0FBQSxDQUFBbGIsTUFBQTtZQUFBO2NBQUEsS0FLMUMsSUFBSSxDQUFDZ1UsdUJBQXVCLENBQUNULG9CQUFvQixDQUFDNXVCLEtBQUs7Z0JBQUF1MkIsU0FBQSxDQUFBdmIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsSUFDcERoVyx1RUFBaUIsQ0FBQzZ4Qiw0QkFBNEI7Z0JBQUFOLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUNqRCxJQUFJLENBQUNuUixPQUFPLENBQUNTLEtBQUssQ0FBQyxpREFBaUQsQ0FBQztjQUNyRSxJQUFJLENBQUM2a0IsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNzSixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDM0gsZUFBZSxDQUFDaUIsVUFBVSxDQUFDcHdCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ3N2QixhQUFhLENBQUM4RSxVQUFVLENBQUNwMEIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBdTJCLFNBQUEsQ0FBQWxiLE1BQUE7WUFBQTtjQUFBLElBS3pDNmEsMEJBQTBCO2dCQUFBSyxTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FDN0IsSUFBSSxDQUFDblIsT0FBTyxDQUFDUyxLQUFLLENBQUMscUdBQXFHLENBQUM7Y0FDekgsSUFBSSxDQUFDNmtCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FBQWtiLFNBQUEsQ0FBQXZiLElBQUE7Y0FBQTtZQUFBO2NBQUEsS0FLMUNrYiwwQkFBMEI7Z0JBQUFLLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUM1QixJQUFJLENBQUNuUixPQUFPLENBQUNTLEtBQUsscUdBQXFHLENBQUM7Y0FDeEgsSUFBSSxDQUFDNmtCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FBQSxLQU01QyxJQUFJLENBQUNnVSx1QkFBdUIsQ0FBQ1IsMkJBQTJCLENBQUM3dUIsS0FBSztnQkFBQXUyQixTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxJQUMxRGhXLHVFQUFpQixDQUFDK2EsbUNBQW1DLElBQUkvYSx1RUFBaUIsQ0FBQyt4QixnQ0FBZ0M7Z0JBQUFSLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUMvRyxJQUFJLENBQUNuUixPQUFPLENBQUNTLEtBQUssQ0FBQyx1REFBdUQsQ0FBQztjQUMzRSxJQUFJLENBQUM2a0IsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNzSixrQkFBa0I7Y0FDbEUsSUFBSSxDQUFDM0gsZUFBZSxDQUFDaUIsVUFBVSxDQUFDcHdCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ3N2QixhQUFhLENBQUM4RSxVQUFVLENBQUNwMEIsS0FBSyxHQUFHLEtBQUs7Y0FBQyxPQUFBdTJCLFNBQUEsQ0FBQWxiLE1BQUE7WUFBQTtjQUFBLElBS3pDOGEsb0JBQW9CO2dCQUFBSSxTQUFBLENBQUF2YixJQUFBO2dCQUFBO2NBQUE7Y0FDdkIsSUFBSSxDQUFDblIsT0FBTyxDQUFDUyxLQUFLLENBQUMseUdBQXlHLENBQUM7Y0FDN0gsSUFBSSxDQUFDNmtCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FBQWtiLFNBQUEsQ0FBQXZiLElBQUE7Y0FBQTtZQUFBO2NBQUEsS0FLMUNtYixvQkFBb0I7Z0JBQUFJLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUN0QixJQUFJLENBQUNuUixPQUFPLENBQUNTLEtBQUsseUdBQXlHLENBQUM7Y0FDNUgsSUFBSSxDQUFDNmtCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDbUosa0JBQWtCO2NBQ2xFLElBQUksQ0FBQ3hILGVBQWUsQ0FBQ2lCLFVBQVUsQ0FBQ3B3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNzdkIsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2NBQUMsT0FBQXUyQixTQUFBLENBQUFsYixNQUFBO1lBQUE7Y0FNaEQsSUFBSSxDQUFDaVosZ0JBQWdCLENBQUMsY0FBYyxDQUFDO2NBQ3JDLElBQUksQ0FBQ25GLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3h3QixLQUFLLEdBQUcsSUFBSTtjQUVuQ3FMLEdBQUcsR0FBRyxJQUFJLENBQUMwcEIsTUFBTSxDQUFDM3FCLEtBQUssQ0FBQztjQUU5QixJQUFJLENBQUMra0IsZUFBZSxDQUFDMEUsV0FBVyxDQUFDbnpCLEdBQUcsQ0FDbEMsSUFBSSxDQUFDeXVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNUcsU0FBUyxDQUFDLFVBQUE0RyxLQUFLLEVBQUk7Z0JBQzVDLElBQUlBLEtBQUssS0FBS3BDLHNEQUFZLENBQUN0b0IsS0FBSyxJQUFJMHFCLEtBQUssS0FBS3BDLHNEQUFZLENBQUN3SixVQUFVLEVBQUU7a0JBQ3JFN0ksNkRBQVMsQ0FBQzhJLDBCQUEwQixDQUFDNXJCLEdBQUcsQ0FBQztnQkFDM0M7Y0FDRixDQUFDLENBQ0gsQ0FBQztjQUVLK3FCLDJCQUFnRCxHQUFHLFNBQW5EQSwyQkFBZ0RBLENBQUE7Z0JBQUEsT0FBUyxJQUFJMVosT0FBTyxDQUFDLFVBQUMyQixPQUFPLEVBQVc7a0JBQzVGO2tCQUNBK1csTUFBSSxDQUFDOUYsYUFBYSxDQUFDOEUsVUFBVSxDQUFDcDBCLEtBQUssR0FBRyxLQUFLO2tCQUUzQyxPQUFPcWUsT0FBTyxDQUFDK1csTUFBSSxDQUFDOEIsbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUM1QyxDQUFDLENBQUM7Y0FBQTtjQUNJYixZQUFZLEdBQUduSSxpRUFBYSxDQUFDaUosTUFBTSxDQUFDL3NCLEtBQUssRUFBRSxJQUFJLENBQUMra0IsZUFBZSxFQUFFLElBQUksQ0FBQ0Msc0JBQXNCLEVBQUUsSUFBSSxDQUFDQyx1QkFBdUIsRUFBRStHLDJCQUEyQixDQUFDO2NBQUEsSUFFekpDLFlBQVk7Z0JBQUFFLFNBQUEsQ0FBQXZiLElBQUE7Z0JBQUE7Y0FBQTtjQUNmLElBQUksQ0FBQ3NVLGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEdBQUcsS0FBSztjQUFDLE9BQUF1MkIsU0FBQSxDQUFBbGIsTUFBQTtZQUFBO2NBQUEsT0FBQWtiLFNBQUEsQ0FBQWxiLE1BQUEsV0FLdkNnYixZQUFZLENBQUNqRCxLQUFLLENBQ3ZCL25CLEdBQUcsRUFDSGpCLEtBQUssRUFDTGlyQixtQkFBbUIsRUFDbkIsSUFBSSxDQUFDYiw2QkFBNkIsQ0FBQy91QixJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FDN0N1VyxJQUFJLENBQUMsWUFBTTtnQkFDVm9aLE1BQUksQ0FBQ2pHLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3h3QixLQUFLLEdBQUcsS0FBSztjQUM1QyxDQUFDLENBQUMsQ0FDRHNjLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO2dCQUNWdXFCLG1CQUFtQixDQUFDbHNCLElBQUksQ0FBQyxDQUFDO2dCQUUxQmlzQixNQUFJLENBQUNqRyxlQUFlLENBQUNvQyxZQUFZLENBQUN2eEIsS0FBSyxFQUFFO2dCQUV6Q28xQixNQUFJLENBQUNqRyxlQUFlLENBQUNtQixNQUFNLENBQUN0d0IsS0FBSyxHQUFHLEtBQUs7Z0JBRXpDbzFCLE1BQUksQ0FBQ2QsZ0JBQWdCLENBQUMsbUNBQW1DLENBQUM7Z0JBRTFEYyxNQUFJLENBQUNqRyxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsc0RBQVksQ0FBQzRKLGdCQUFnQjtnQkFFaEVoQyxNQUFJLENBQUN2ckIsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVRLENBQUMsQ0FBQztjQUNsRCxDQUFDLENBQUMsQ0FDRHVzQixPQUFPLENBQUMsWUFBTTtnQkFDYmpDLE1BQUksQ0FBQzlGLGFBQWEsQ0FBQzhFLFVBQVUsQ0FBQ3AwQixLQUFLLEdBQUcsS0FBSztnQkFFM0MsSUFBSW8xQixNQUFJLENBQUNqRyxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEtBQUt3dEIsc0RBQVksQ0FBQ2tGLE9BQU8sSUFBSSxDQUFDbnFCLDZDQUFHLENBQUMrdUIsdUJBQXVCLEVBQUU7a0JBQzdGO2dCQUNGO2dCQUVBLElBQU1DLFNBQVMsR0FBR3g0QixnRUFBVyxDQUFDMkcsVUFBVSxDQUFDLFlBQU07a0JBQzdDLElBQU0wVSxPQUFPLEdBQUdnYixNQUFJLENBQUM4QixtQkFBbUIsQ0FBQyxDQUFDLENBQ3ZDNWEsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7b0JBQ1ZzcUIsTUFBSSxDQUFDdnJCLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLGdDQUFnQyxFQUFFUSxDQUFDLENBQUM7a0JBQ3pELENBQUMsQ0FBQztnQkFDTixDQUFDLEVBQUVzcUIsTUFBSSxDQUFDb0MsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO2dCQUUzQnBDLE1BQUksQ0FBQ2pHLGVBQWUsQ0FBQzBFLFdBQVcsQ0FBQ256QixHQUFHLENBQUMsSUFBSTFCLHlEQUFVLENBQUMsWUFBTTtrQkFDeERELGdFQUFXLENBQUNxUCxZQUFZLENBQUNtcEIsU0FBUyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztjQUNMLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBaEIsU0FBQSxDQUFBaGIsSUFBQTtVQUFBO1FBQUEsR0FBQTRaLFFBQUE7TUFBQSxDQUNMO01BQUEsU0FwTmFGLFlBQVlBLENBQUE7UUFBQSxPQUFBQyxhQUFBLENBQUF6WixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFaaWlCLFlBQVk7SUFBQTtFQUFBO0lBQUFuMUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQXkzQixpQkFBQSxHQUFBbmQsOElBQUEsY0FBQUMsNElBQUEsQ0FzTjFCLFNBQUFtZCxTQUFBO1FBQUEsSUFBQXRkLE9BQUE7UUFBQSxPQUFBRyw0SUFBQSxVQUFBb2QsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE3YyxJQUFBLEdBQUE2YyxTQUFBLENBQUE1YyxJQUFBO1lBQUE7Y0FBQSxLQUNNLElBQUksQ0FBQ3NVLGFBQWEsQ0FBQ3dGLFVBQVU7Z0JBQUE4QyxTQUFBLENBQUE1YyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUN6QixJQUFJOVYsS0FBSyxDQUFDLDhCQUE4QixDQUFDO1lBQUE7Y0FBQSxLQUc3QyxJQUFJLENBQUNrcUIsc0JBQXNCLENBQUMzTixXQUFXLENBQUN6aEIsS0FBSztnQkFBQTQzQixTQUFBLENBQUE1YyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBNGMsU0FBQSxDQUFBdmMsTUFBQSxXQUN4QyxJQUFJLENBQUNtWiw2QkFBNkIsQ0FBQyxJQUFJLENBQUNwRixzQkFBc0IsQ0FBQzNOLFdBQVcsQ0FBQ3poQixLQUFLLENBQUM7WUFBQTtjQUcxRixJQUFJLElBQUksQ0FBQ2t2QixhQUFhLENBQUM5a0IsS0FBSyxDQUFDcEssS0FBSyxFQUFFO2dCQUM1Qm9hLE9BQU8sR0FBRyxJQUFJLENBQUNnWixLQUFLLENBQUMsQ0FBQztjQUM5QjtZQUFDO1lBQUE7Y0FBQSxPQUFBd0UsU0FBQSxDQUFBcmMsSUFBQTtVQUFBO1FBQUEsR0FBQW1jLFFBQUE7TUFBQSxDQUNGO01BQUEsU0FaYWxGLGdCQUFnQkEsQ0FBQTtRQUFBLE9BQUFpRixpQkFBQSxDQUFBaGMsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBaEJ3ZixnQkFBZ0I7SUFBQTtFQUFBO0lBQUExeUIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTYzQixLQUFBLEdBQUF2ZCw4SUFBQSxjQUFBQyw0SUFBQSxDQWM5QixTQUFBdWQsU0FBQTtRQUFBLElBQUFyVyxXQUFBO1FBQUEsT0FBQWxILDRJQUFBLFVBQUF3ZCxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWpkLElBQUEsR0FBQWlkLFNBQUEsQ0FBQWhkLElBQUE7WUFBQTtjQUNReUcsV0FBVyxHQUFHLElBQUksQ0FBQzJOLHNCQUFzQixDQUFDM04sV0FBVyxDQUFDemhCLEtBQUs7Y0FBQSxJQUU1RHloQixXQUFXO2dCQUFBdVcsU0FBQSxDQUFBaGQsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQWdkLFNBQUEsQ0FBQTNjLE1BQUEsV0FDUCxJQUFJLENBQUMrWCxLQUFLLENBQUMsQ0FBQztZQUFBO2NBQUEsT0FBQTRFLFNBQUEsQ0FBQTNjLE1BQUEsV0FHZCxJQUFJLENBQUNtWiw2QkFBNkIsQ0FBQy9TLFdBQVcsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBdVcsU0FBQSxDQUFBemMsSUFBQTtVQUFBO1FBQUEsR0FBQXVjLFFBQUE7TUFBQSxDQUN2RDtNQUFBLFNBUllHLElBQUlBLENBQUE7UUFBQSxPQUFBSixLQUFBLENBQUFwYyxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFKaWxCLElBQUk7SUFBQTtFQUFBO0lBQUFuNEIsR0FBQTtJQUFBRSxLQUFBLEVBVWpCLFNBQVF3M0IsZ0JBQWdCQSxDQUFBLEVBQVc7TUFDakMsUUFBUSxJQUFJLENBQUNySSxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLO1FBQ3RDLEtBQUt3dEIsc0RBQVksQ0FBQytGLFlBQVk7UUFDOUIsS0FBSy9GLHNEQUFZLENBQUMwSyxPQUFPO1FBQ3pCLEtBQUsxSyxzREFBWSxDQUFDMkssT0FBTztVQUN2QixPQUFPN0osb0NBQW9DO1FBQzdDLEtBQUtkLHNEQUFZLENBQUN0b0IsS0FBSztRQUN2QixLQUFLc29CLHNEQUFZLENBQUN3SixVQUFVO1FBQzVCLEtBQUt4SixzREFBWSxDQUFDaUosWUFBWTtRQUM5QixLQUFLakosc0RBQVksQ0FBQzRLLGFBQWE7UUFDL0IsS0FBSzVLLHNEQUFZLENBQUM2SyxVQUFVO1FBQzVCLEtBQUs3SyxzREFBWSxDQUFDK0UsT0FBTztRQUN6QixLQUFLL0Usc0RBQVksQ0FBQ2dKLFFBQVE7UUFDMUIsS0FBS2hKLHNEQUFZLENBQUNrRixPQUFPO1FBQ3pCLEtBQUtsRixzREFBWSxDQUFDOEssTUFBTTtRQUN4QixLQUFLOUssc0RBQVksQ0FBQytLLFlBQVk7UUFDOUIsS0FBSy9LLHNEQUFZLENBQUNzSixrQkFBa0I7UUFDcEMsS0FBS3RKLHNEQUFZLENBQUNtSixrQkFBa0I7UUFDcEMsS0FBS25KLHNEQUFZLENBQUNnTCwyQkFBMkI7UUFDN0MsS0FBS2hMLHNEQUFZLENBQUNpTCxlQUFlO1FBQ2pDLEtBQUtqTCxzREFBWSxDQUFDNEosZ0JBQWdCO1VBQ2hDO1VBQ0EsT0FBTyxJQUFJLENBQUMxZCxtQkFBbUIsQ0FBQzJDLDJDQUEyQyxDQUFDLElBQUksQ0FBQzhTLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ3Z4QixLQUFLLENBQUM7UUFDdEg7VUFDRXFSLG9FQUFpQixDQUFDLElBQUksQ0FBQzhkLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssQ0FBQztNQUN2RDtJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTA0QixvQkFBQSxHQUFBcGUsOElBQUEsY0FBQUMsNElBQUEsQ0FFRCxTQUFBb2UsU0FBQTtRQUFBLE9BQUFwZSw0SUFBQSxVQUFBcWUsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUE5ZCxJQUFBLEdBQUE4ZCxTQUFBLENBQUE3ZCxJQUFBO1lBQUE7Y0FBQTZkLFNBQUEsQ0FBQXZZLEVBQUEsR0FDVSxJQUFJLENBQUM2TyxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLO2NBQUE2NEIsU0FBQSxDQUFBN2QsSUFBQSxHQUFBNmQsU0FBQSxDQUFBdlksRUFBQSxLQUNqQ2tOLHNEQUFZLENBQUN0b0IsS0FBSyxPQUFBMnpCLFNBQUEsQ0FBQXZZLEVBQUEsS0FDbEJrTixzREFBWSxDQUFDK0ssWUFBWSxPQUFBTSxTQUFBLENBQUF2WSxFQUFBLEtBQ3pCa04sc0RBQVksQ0FBQzBLLE9BQU8sT0FBQVcsU0FBQSxDQUFBdlksRUFBQSxLQUNwQmtOLHNEQUFZLENBQUMySyxPQUFPLE9BQUFVLFNBQUEsQ0FBQXZZLEVBQUEsS0FDcEJrTixzREFBWSxDQUFDd0osVUFBVSxPQUFBNkIsU0FBQSxDQUFBdlksRUFBQSxLQUN2QmtOLHNEQUFZLENBQUNnTCwyQkFBMkIsT0FBQUssU0FBQSxDQUFBdlksRUFBQSxLQUN4Q2tOLHNEQUFZLENBQUNpTCxlQUFlLE9BQUFJLFNBQUEsQ0FBQXZZLEVBQUEsS0FDNUJrTixzREFBWSxDQUFDNEosZ0JBQWdCLE9BQUF5QixTQUFBLENBQUF2WSxFQUFBLEtBSTdCa04sc0RBQVksQ0FBQ2lKLFlBQVksT0FBQW9DLFNBQUEsQ0FBQXZZLEVBQUEsS0FJekJrTixzREFBWSxDQUFDNEssYUFBYSxPQUFBUyxTQUFBLENBQUF2WSxFQUFBLEtBSTFCa04sc0RBQVksQ0FBQzZLLFVBQVUsT0FBQVEsU0FBQSxDQUFBdlksRUFBQSxLQUl2QmtOLHNEQUFZLENBQUMrRSxPQUFPLFFBQUFzRyxTQUFBLENBQUF2WSxFQUFBLEtBSXBCa04sc0RBQVksQ0FBQytGLFlBQVksUUFBQXNGLFNBQUEsQ0FBQXZZLEVBQUEsS0FJekJrTixzREFBWSxDQUFDa0YsT0FBTyxRQUFBbUcsU0FBQSxDQUFBdlksRUFBQSxLQUlwQmtOLHNEQUFZLENBQUM4SyxNQUFNLFFBQUFPLFNBQUEsQ0FBQXZZLEVBQUEsS0FJbkJrTixzREFBWSxDQUFDZ0osUUFBUSxRQUFBcUMsU0FBQSxDQUFBdlksRUFBQSxLQUlyQmtOLHNEQUFZLENBQUNzSixrQkFBa0IsUUFBQStCLFNBQUEsQ0FBQXZZLEVBQUEsS0FJL0JrTixzREFBWSxDQUFDbUosa0JBQWtCO2NBQUE7WUFBQTtjQXZDbEMsSUFBSSxDQUFDOXNCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDBDQUEwQyxFQUFFLElBQUksQ0FBQ3FsQixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEVBQUV3dEIsc0RBQVksQ0FBQyxJQUFJLENBQUMyQixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLENBQUMsQ0FBQztjQUFDLE9BQUE2NEIsU0FBQSxDQUFBeGQsTUFBQTtZQUFBO2NBSWhKLElBQUksQ0FBQ3hSLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGlHQUFpRyxDQUFDO2NBQUMsT0FBQSt1QixTQUFBLENBQUF4ZCxNQUFBO1lBQUE7Y0FJckgsSUFBSSxDQUFDeFIsT0FBTyxDQUFDQyxJQUFJLENBQUMsbUdBQW1HLENBQUM7Y0FBQyxPQUFBK3VCLFNBQUEsQ0FBQXhkLE1BQUE7WUFBQTtjQUl2SCxJQUFJLENBQUN4UixPQUFPLENBQUNDLElBQUksQ0FBQyxnR0FBZ0csQ0FBQztjQUFDLE9BQUErdUIsU0FBQSxDQUFBeGQsTUFBQTtZQUFBO2NBSXBILElBQUksQ0FBQ3hSLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhDQUE4QyxDQUFDO2NBQUMsT0FBQSt1QixTQUFBLENBQUF4ZCxNQUFBO1lBQUE7Y0FJbEUsSUFBSSxDQUFDeFIsT0FBTyxDQUFDQyxJQUFJLENBQUMsMERBQTBELENBQUM7Y0FBQyxPQUFBK3VCLFNBQUEsQ0FBQXhkLE1BQUE7WUFBQTtjQUk5RSxJQUFJLENBQUN4UixPQUFPLENBQUNDLElBQUksQ0FBQyw2Q0FBNkMsQ0FBQztjQUFDLE9BQUErdUIsU0FBQSxDQUFBeGQsTUFBQTtZQUFBO2NBSWpFLElBQUksQ0FBQ3hSLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGtFQUFrRSxDQUFDO2NBQUMsT0FBQSt1QixTQUFBLENBQUF4ZCxNQUFBO1lBQUE7Y0FJdEYsSUFBSSxDQUFDeFIsT0FBTyxDQUFDQyxJQUFJLENBQUMsc0RBQXNELENBQUM7Y0FBQyxPQUFBK3VCLFNBQUEsQ0FBQXhkLE1BQUE7WUFBQTtjQUkxRSxJQUFJLENBQUN4UixPQUFPLENBQUNDLElBQUksQ0FBQyx5RUFBeUUsQ0FBQztjQUFDLE9BQUErdUIsU0FBQSxDQUFBeGQsTUFBQTtZQUFBO2NBSTdGLElBQUksQ0FBQ3hSLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLHlFQUF5RSxDQUFDO2NBQUMsT0FBQSt1QixTQUFBLENBQUF4ZCxNQUFBO1lBQUE7Y0FJN0ZoSyxvRUFBaUIsQ0FBQyxJQUFJLENBQUM4ZCxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLENBQUM7WUFBQztjQUFBLE9BQUE2NEIsU0FBQSxDQUFBeGQsTUFBQSxXQUdqRCxJQUFJLENBQUMrWCxLQUFLLENBQUMsQ0FBQztZQUFBO1lBQUE7Y0FBQSxPQUFBeUYsU0FBQSxDQUFBdGQsSUFBQTtVQUFBO1FBQUEsR0FBQW9kLFFBQUE7TUFBQSxDQUNwQjtNQUFBLFNBMURhekIsbUJBQW1CQSxDQUFBO1FBQUEsT0FBQXdCLG9CQUFBLENBQUFqZCxLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFuQmtrQixtQkFBbUI7SUFBQTtFQUFBO0lBQUFwM0IsR0FBQTtJQUFBRSxLQUFBLEVBNERqQyxTQUFRczBCLGdCQUFnQkEsQ0FBQSxFQUF3RDtNQUFBLElBQUF3RSxNQUFBO01BQUEsSUFBdkQxYixNQUFjLEdBQUFwSyxTQUFBLENBQUF0SSxNQUFBLFFBQUFzSSxTQUFBLFFBQUFqTyxTQUFBLEdBQUFpTyxTQUFBLE1BQUdvYiw4QkFBOEI7TUFDdEUsSUFBSSxDQUFDZSxlQUFlLENBQUMwRSxXQUFXLENBQUMxekIsT0FBTyxDQUFDLENBQUM7TUFFMUMsSUFBTW1mLGNBQWMsR0FBRyxJQUFJLENBQUM4UCxzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQ3RmLEtBQUs7TUFFdkUsSUFBSXNmLGNBQWMsRUFBRTtRQUNsQixJQUFJLENBQUM4UCxzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQ3RmLEtBQUssR0FBRyxJQUFJO1FBQ3ZEc2YsY0FBYyxDQUFDc0osS0FBSyxDQUFDLENBQUM7UUFDdEJ0SixjQUFjLENBQUNuZixPQUFPLENBQUMsQ0FBQztRQUV4QixJQUFJb0ksNkNBQUcsQ0FBQ3d3QiwrQkFBK0IsSUFBSSxFQUFFL3pCLHVFQUFpQixDQUFDdEQsUUFBUSxJQUFJNkcsNkNBQUcsQ0FBQ3l3QixvQ0FBb0MsQ0FBQyxFQUFFO1VBQ3BIL3pCLHFFQUF1QixDQUFDRSxzQkFBc0IsQ0FBQyxDQUFDO1FBQ2xEO01BQ0Y7TUFFQSxJQUFJLElBQUksQ0FBQ2lxQixzQkFBc0IsQ0FBQzNOLFdBQVcsQ0FBQ3poQixLQUFLLEVBQUU7UUFDakQsSUFBSSxDQUFDb3ZCLHNCQUFzQixDQUFDM04sV0FBVyxDQUFDemhCLEtBQUssQ0FBQzhoQixTQUFTLENBQUMsQ0FBQyxDQUFDdlMsT0FBTyxDQUFDLFVBQUF5UyxLQUFLO1VBQUEsT0FBSUEsS0FBSyxDQUFDekcsSUFBSSxDQUFDLENBQUM7UUFBQSxFQUFDO1FBQ3hGLElBQUksQ0FBQzZULHNCQUFzQixDQUFDM04sV0FBVyxDQUFDemhCLEtBQUssR0FBRyxJQUFJO01BQ3REO01BRUEsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDaHdCLEtBQUssR0FBRyxLQUFLO01BQzdDLElBQUksQ0FBQ212QixlQUFlLENBQUNXLFNBQVMsQ0FBQzl2QixLQUFLLEdBQUcsS0FBSztNQUM1QyxJQUFJLENBQUNtdkIsZUFBZSxDQUFDdUIsT0FBTyxDQUFDMXdCLEtBQUssR0FBRyxLQUFLO01BQzFDLElBQUksQ0FBQ212QixlQUFlLENBQUMyQixPQUFPLENBQUM5d0IsS0FBSyxHQUFHLElBQUk7TUFDekMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ3lCLE9BQU8sQ0FBQzV3QixLQUFLLEdBQUcsS0FBSztNQUUxQyxJQUFJLElBQUksQ0FBQ212QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxJQUFJLElBQUksQ0FBQ212QixlQUFlLENBQUNzQyxRQUFRLENBQUN6eEIsS0FBSyxFQUFFO1FBQzVFLElBQU1vYSxPQUFPLEdBQUcsSUFBSSxDQUFDK1UsZUFBZSxDQUFDc0MsUUFBUSxDQUFDenhCLEtBQUssQ0FBQ2k1QixhQUFhLENBQUMsSUFBSSxDQUFDOUosZUFBZSxDQUFDd0MsTUFBTSxDQUFDM3hCLEtBQUssRUFBRW9kLE1BQU0sQ0FBQyxDQUN6R3BCLElBQUksQ0FBQyxVQUFBM1UsS0FBQSxFQUFjO1VBQUEsSUFBWmtWLE1BQU0sR0FBQWxWLEtBQUEsQ0FBTmtWLE1BQU07VUFDWixJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1lBQ25CdWMsTUFBSSxDQUFDanZCLE9BQU8sQ0FBQzZKLElBQUksQ0FBQyxnREFBZ0QsRUFBRW9sQixNQUFJLENBQUM5dkIsUUFBUSxFQUFFdVQsTUFBTSxDQUFDO1lBRTFGO1VBQ0Y7VUFFQXVjLE1BQUksQ0FBQ2p2QixPQUFPLENBQUNDLElBQUksQ0FBQyx3Q0FBd0MsRUFBRWd2QixNQUFJLENBQUM5dkIsUUFBUSxFQUFFdVQsTUFBTSxDQUFDO1FBQ3BGLENBQUMsQ0FBQyxDQUNERCxLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtVQUNWZ3VCLE1BQUksQ0FBQ2p2QixPQUFPLENBQUNTLEtBQUssQ0FBQywrQkFBK0IsRUFBRXd1QixNQUFJLENBQUM5dkIsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztNQUNOO01BRUEsSUFBSSxJQUFJLENBQUMwakIsWUFBWSxJQUFJLElBQUksQ0FBQ0EsWUFBWSxDQUFDNEQsT0FBTyxFQUFFO1FBQ2xELElBQUksQ0FBQzVELFlBQVksQ0FBQzRELE9BQU8sQ0FBQ2hhLFNBQVMsR0FBRyxFQUFFO1FBQ3hDLElBQUksQ0FBQ29XLFlBQVksQ0FBQzRELE9BQU8sQ0FBQ3BwQixRQUFRLEdBQUcsRUFBRTtNQUN6QztNQUVBLElBQUksQ0FBQ21tQixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxHQUFHLElBQUk7TUFDeEMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLEdBQUcsSUFBSTtNQUMxQyxJQUFJLENBQUNvdkIsc0JBQXNCLENBQUM4SiwrQkFBK0IsR0FBRyxDQUFDO0lBQ2pFO0VBQUM7SUFBQXA1QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBbTVCLDhCQUFBLEdBQUE3ZSw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUE2ZSxTQUE0QzNYLFdBQXdCO1FBQUEsSUFBQTRYLE1BQUE7UUFBQSxJQUFBN0ssWUFBQSxFQUFBOEssV0FBQTtRQUFBLE9BQUEvZSw0SUFBQSxVQUFBZ2YsVUFBQUMsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUF6ZSxJQUFBLEdBQUF5ZSxTQUFBLENBQUF4ZSxJQUFBO1lBQUE7Y0FDNUR3VCxZQUFZLEdBQUcsSUFBSSxDQUFDVyxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLO2NBQUEsSUFFdkR3dUIsWUFBWTtnQkFBQWdMLFNBQUEsQ0FBQXhlLElBQUE7Z0JBQUE7Y0FBQTtjQUNmLElBQUksQ0FBQ21VLGVBQWUsQ0FBQ1csU0FBUyxDQUFDOXZCLEtBQUssR0FBRyxLQUFLO2NBQzVDLElBQUksQ0FBQ212QixlQUFlLENBQUNhLFVBQVUsQ0FBQ2h3QixLQUFLLEdBQUcsS0FBSztjQUM3QyxJQUFJLENBQUNtdkIsZUFBZSxDQUFDcUIsT0FBTyxDQUFDeHdCLEtBQUssR0FBRyxLQUFLO2NBQzFDLElBQUksQ0FBQ212QixlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7Y0FDMUMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDK0UsT0FBTztjQUFDLE9BQUFpSCxTQUFBLENBQUFuZSxNQUFBO1lBQUE7Y0FLMUQsSUFBSSxDQUFDLElBQUksQ0FBQ2dVLHVCQUF1QixDQUFDUiwyQkFBMkIsQ0FBQzd1QixLQUFLLEVBQUU7Z0JBQ25Fd3VCLFlBQVksQ0FBQzhFLFNBQVMsR0FBRzdSLFdBQVc7Y0FDdEM7Y0FFTTZYLFdBQVcsR0FBRzlLLFlBQVksQ0FBQ3lKLElBQUksQ0FBQyxDQUFDO2NBQUEsTUFFbkNxQixXQUFXLEtBQUt2MEIsU0FBUztnQkFBQXkwQixTQUFBLENBQUF4ZSxJQUFBO2dCQUFBO2NBQUE7Y0FDM0IsSUFBSSxDQUFDbVUsZUFBZSxDQUFDVyxTQUFTLENBQUM5dkIsS0FBSyxHQUFHLEtBQUs7Y0FDNUMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDaHdCLEtBQUssR0FBRyxLQUFLO2NBQzdDLElBQUksQ0FBQ212QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7Y0FDMUMsSUFBSSxDQUFDbXZCLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsSUFBSTtjQUN6QyxJQUFJLENBQUNtdkIsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNrRixPQUFPO2NBQUMsT0FBQThHLFNBQUEsQ0FBQW5lLE1BQUE7WUFBQTtjQUFBLE9BQUFtZSxTQUFBLENBQUFuZSxNQUFBLFdBS25EaWUsV0FBVyxDQUFDdGQsSUFBSSxDQUFDLFlBQU07Z0JBQzVCcWQsTUFBSSxDQUFDbEssZUFBZSxDQUFDVyxTQUFTLENBQUM5dkIsS0FBSyxHQUFHLEtBQUs7Z0JBQzVDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDaHdCLEtBQUssR0FBRyxLQUFLO2dCQUM3Q3E1QixNQUFJLENBQUNsSyxlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7Z0JBQzFDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsSUFBSTtnQkFDekNxNUIsTUFBSSxDQUFDbEssZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUNrRixPQUFPO2NBQ3pELENBQUMsQ0FBQyxDQUFDcFcsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7Z0JBQ1osSUFBTTJ1QixhQUFhLEdBQUcsQ0FBQyxDQUFDaFksV0FBVyxDQUFDSyxTQUFTLENBQUMsQ0FBQyxDQUFDNFgsTUFBTSxDQUFDLFVBQUExWCxLQUFLLEVBQUk7a0JBQzlELE9BQU9BLEtBQUssQ0FBQ2xJLElBQUksS0FBSyxPQUFPO2dCQUMvQixDQUFDLENBQUMsQ0FBQ3BQLE1BQU07Z0JBQ1QsSUFBTWl2QixzQ0FBc0MsR0FBRyxDQUFDcHhCLDZDQUFHLENBQUNta0IsbUNBQW1DO2dCQUV2RixJQUFJaU4sc0NBQXNDLElBQUluTCxZQUFZLENBQUNtRyxLQUFLLElBQUksQ0FBQzhFLGFBQWEsRUFBRTtrQkFDbEZqTCxZQUFZLENBQUM4RSxTQUFTLEdBQUcsSUFBSTtrQkFDN0IrRixNQUFJLENBQUNsSyxlQUFlLENBQUNXLFNBQVMsQ0FBQzl2QixLQUFLLEdBQUcsS0FBSztrQkFDNUNxNUIsTUFBSSxDQUFDbEssZUFBZSxDQUFDYSxVQUFVLENBQUNod0IsS0FBSyxHQUFHLElBQUk7a0JBQzVDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ3FCLE9BQU8sQ0FBQ3h3QixLQUFLLEdBQUcsS0FBSztrQkFDMUNxNUIsTUFBSSxDQUFDbEssZUFBZSxDQUFDdUIsT0FBTyxDQUFDMXdCLEtBQUssR0FBRyxLQUFLO2tCQUMxQ3E1QixNQUFJLENBQUNsSyxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsc0RBQVksQ0FBQzhLLE1BQU07a0JBRXRELElBQUlxQixzQ0FBc0MsRUFBRTtvQkFDMUNOLE1BQUksQ0FBQ3h2QixPQUFPLENBQUNDLElBQUksQ0FBQyxtRUFBbUUsRUFBRXV2QixNQUFJLENBQUNyd0IsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO29CQUV4RztrQkFDRjtrQkFFQSxJQUFJMnVCLGFBQWEsRUFBRTtvQkFDakJKLE1BQUksQ0FBQ3h2QixPQUFPLENBQUNDLElBQUksQ0FBQyx5REFBeUQsRUFBRXV2QixNQUFJLENBQUNyd0IsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO29CQUU5RjtrQkFDRjtrQkFFQXV1QixNQUFJLENBQUN4dkIsT0FBTyxDQUFDQyxJQUFJLENBQUMsK0RBQStELEVBQUV1dkIsTUFBSSxDQUFDcndCLFFBQVEsRUFBRThCLENBQUMsQ0FBQztrQkFFcEc7Z0JBQ0Y7Z0JBRUEwakIsWUFBWSxDQUFDbUcsS0FBSyxHQUFHLElBQUk7Z0JBRXpCLE9BQU9uRyxZQUFZLENBQUN5SixJQUFJLENBQUMsQ0FBQyxDQUN2QmpjLElBQUksQ0FBQyxZQUFNO2tCQUNWcWQsTUFBSSxDQUFDeHZCLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZFQUE2RSxFQUFFdXZCLE1BQUksQ0FBQ3J3QixRQUFRLENBQUM7a0JBRS9HcXdCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ1csU0FBUyxDQUFDOXZCLEtBQUssR0FBRyxJQUFJO2tCQUMzQ3E1QixNQUFJLENBQUNsSyxlQUFlLENBQUNhLFVBQVUsQ0FBQ2h3QixLQUFLLEdBQUcsS0FBSztrQkFDN0NxNUIsTUFBSSxDQUFDbEssZUFBZSxDQUFDcUIsT0FBTyxDQUFDeHdCLEtBQUssR0FBRyxLQUFLO2tCQUMxQ3E1QixNQUFJLENBQUNsSyxlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLElBQUk7a0JBQ3pDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QixzREFBWSxDQUFDa0YsT0FBTztnQkFDekQsQ0FBQyxDQUFDLENBQUNwVyxLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtrQkFDWjBqQixZQUFZLENBQUNtRyxLQUFLLEdBQUcsS0FBSztrQkFFMUIwRSxNQUFJLENBQUN4dkIsT0FBTyxDQUFDQyxJQUFJLENBQUMseURBQXlELEVBQUV1dkIsTUFBSSxDQUFDcndCLFFBQVEsRUFBRThCLENBQUMsQ0FBQztrQkFFOUYwakIsWUFBWSxDQUFDOEUsU0FBUyxHQUFHLElBQUk7a0JBQzdCK0YsTUFBSSxDQUFDbEssZUFBZSxDQUFDVyxTQUFTLENBQUM5dkIsS0FBSyxHQUFHLEtBQUs7a0JBQzVDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ2EsVUFBVSxDQUFDaHdCLEtBQUssR0FBRyxJQUFJO2tCQUM1Q3E1QixNQUFJLENBQUNsSyxlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7a0JBQzFDcTVCLE1BQUksQ0FBQ2xLLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsS0FBSztrQkFDMUNxNUIsTUFBSSxDQUFDbEssZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLHNEQUFZLENBQUM4SyxNQUFNO2dCQUN4RCxDQUFDLENBQUM7Y0FDTixDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQWtCLFNBQUEsQ0FBQWplLElBQUE7VUFBQTtRQUFBLEdBQUE2ZCxRQUFBO01BQUEsQ0FDSDtNQUFBLFNBMUZhNUUsNkJBQTZCQSxDQUFBdE4sR0FBQTtRQUFBLE9BQUFpUyw4QkFBQSxDQUFBMWQsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBN0J3aEIsNkJBQTZCO0lBQUE7RUFBQTtBQUFBOzs7Ozs7Ozs7Ozs7QUMzM0I3QztBQUNBO0FBQ0E7QUFGQSxJQUdLaEgsWUFBWSwwQkFBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFaQSxZQUFZLENBQVpBLFlBQVk7RUFBWkEsWUFBWSxDQUFaQSxZQUFZO0VBQVpBLFlBQVksQ0FBWkEsWUFBWTtFQUFBLE9BQVpBLFlBQVk7QUFBQSxFQUFaQSxZQUFZO0FBcUJqQiwrREFBZUEsWUFBWTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN4QjNCO0FBQ0E7QUFDQTs7QUFHb0U7QUFDM0M7QUFHeUI7QUFBQSxJQVk3Qm9NLFFBQVE7RUF3QjNCLFNBQUFBLFNBQUEsRUFBc0I7SUFBQXQ2Qiw0SUFBQSxPQUFBczZCLFFBQUE7SUFDcEIsTUFBTSxJQUFJMTBCLEtBQUssQ0FBQyx5REFBeUQsQ0FBQztFQUM1RTtFQUFDLE9BQUFyRix5SUFBQSxDQUFBKzVCLFFBQUE7SUFBQTk1QixHQUFBO0lBQUFFLEtBQUEsRUF0QkQsU0FBTzY1QixhQUFhQSxDQUFDelosT0FBNkIsRUFBVztNQUMzRCxJQUFJLENBQUM3WCw0Q0FBRyxDQUFDdXhCLFdBQVcsQ0FBQzk1QixLQUFLLEVBQUU7UUFDMUIsTUFBTSxJQUFJa0YsS0FBSyxDQUFDLG9CQUFvQixDQUFDO01BQ3ZDO01BRUEsSUFBTTYwQixjQUE4QixHQUFHO1FBQ3JDckwsU0FBUyxFQUFFdE8sT0FBTyxDQUFDc08sU0FBUztRQUM1QkksNEJBQTRCLEVBQUUxTyxPQUFPLENBQUMwTyw0QkFBNEI7UUFDbEVDLDRCQUE0QixFQUFFM08sT0FBTyxDQUFDMk8sNEJBQTRCO1FBQ2xFQyxzQkFBc0IsRUFBRTVPLE9BQU8sQ0FBQzRPLHNCQUFzQjtRQUN0REMsc0JBQXNCLEVBQUU3TyxPQUFPLENBQUM2TztNQUNsQyxDQUFDO01BRUQsT0FBTyxJQUFJVixnREFBTyxDQUFDbk8sT0FBTyxDQUFDb08sWUFBWSxFQUFFcE8sT0FBTyxDQUFDaFcsS0FBSyxFQUFFMnZCLGNBQWMsQ0FBQztJQUN6RTtFQUFDO0lBQUFqNkIsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUErRDtNQUM3RCxPQUFPLElBQUksQ0FBQ2k2QixrQ0FBa0M7SUFDaEQ7RUFBQztBQUFBO0FBQUF6NkIsNElBQUEsQ0F0QmtCcTZCLFFBQVEsd0NBQ2tDNTBCLHNFQUFpQixDQUFDaTFCLG9DQUFvQyxLQUM3R2oxQixzRUFBaUIsQ0FBQythLG1DQUFtQyxJQUFJL2Esc0VBQWlCLENBQUMreEIsZ0NBQWdDLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3ZCcEg7QUFDQTtBQUNBO0FBQ3VDO0FBQ2E7QUFDTjtBQUlyQjtBQUNvQztBQUNOO0FBR3ZELElBQU1tRCxnQkFBZ0IsR0FBRyxDQUFDO0FBQUMsSUFNTnRNLGNBQWM7RUE0QmpDLFNBQUFBLGVBQVl4TixPQUErQixFQUFFO0lBQUEsSUFBQStaLGtCQUFBO0lBQUE3NkIsNElBQUEsT0FBQXN1QixjQUFBO0lBQUFydUIsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFDM0MsSUFBSSxDQUFDczBCLFdBQVcsR0FBRyxJQUFJNTBCLDREQUFjLENBQUMsQ0FBQztJQUN2QyxJQUFJLENBQUM4eUIsa0JBQWtCLEdBQUcsSUFBSTl5Qiw0REFBYyxDQUFDLENBQUM7SUFDOUMsSUFBSSxDQUFDaXpCLG1CQUFtQixHQUFHLElBQUlqekIsNERBQWMsQ0FBQyxDQUFDO0lBQy9DLElBQUksQ0FBQzR6QixxQkFBcUIsR0FBRyxJQUFJcnpCLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLElBQUksQ0FBQ2d2QixZQUFZLEdBQUcsSUFBSXR2QixtREFBTyxDQUFtQixJQUFJLENBQUM7SUFDdkQsSUFBSSxDQUFDMHdCLEtBQUssR0FBRyxJQUFJMXdCLG1EQUFPLENBQWVzdUIsOERBQVksQ0FBQytGLFlBQVksQ0FBQztJQUNqRSxJQUFJLENBQUN6RCxTQUFTLEdBQUcsSUFBSTV3QixtREFBTyxDQUFVLEtBQUssQ0FBQztJQUM1QyxJQUFJLENBQUM4d0IsVUFBVSxHQUFHLElBQUk5d0IsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDN0MsSUFBSSxDQUFDa3hCLFVBQVUsR0FBRyxJQUFJbHhCLG1EQUFPLENBQVUsSUFBSSxDQUFDO0lBQzVDLElBQUksQ0FBQ294QixNQUFNLEdBQUcsSUFBSXB4QixtREFBTyxDQUFVLElBQUksQ0FBQztJQUN4QyxJQUFJLENBQUNzeEIsT0FBTyxHQUFHLElBQUl0eEIsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDd3hCLE9BQU8sR0FBRyxJQUFJeHhCLG1EQUFPLENBQVUsS0FBSyxDQUFDO0lBQzFDLElBQUksQ0FBQzB4QixPQUFPLEdBQUcsSUFBSTF4QixtREFBTyxDQUFVLEtBQUssQ0FBQztJQUMxQyxJQUFJLENBQUM0eEIsT0FBTyxHQUFHLElBQUk1eEIsbURBQU8sQ0FBVSxLQUFLLENBQUM7SUFDMUMsSUFBSSxDQUFDd3ZCLFNBQVMsR0FBRyxJQUFJeHZCLG1EQUFPLEVBQUFpN0Isa0JBQUEsR0FBYy9aLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFc08sU0FBUyxjQUFBeUwsa0JBQUEsY0FBQUEsa0JBQUEsR0FBSUQsZ0JBQWdCLENBQUM7SUFDakYsSUFBSSxDQUFDakosR0FBRyxHQUFHLElBQUkveEIsbURBQU8sQ0FBYyxDQUFDLENBQUM7SUFDdEMsSUFBSSxDQUFDaXlCLFlBQVksR0FBRyxJQUFJanlCLG1EQUFPLENBQWdCLENBQUMsQ0FBQztJQUNqRCxJQUFJLENBQUNteUIsVUFBVSxHQUFHLElBQUlueUIsbURBQU8sQ0FBWXF1Qix3REFBUyxDQUFDcUcsS0FBSyxDQUFDO0lBQ3pELElBQUksQ0FBQ3JDLFlBQVksR0FBRyxJQUFJcnlCLG1EQUFPLENBQVMsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQ3V5QixRQUFRLEdBQUcsSUFBSXZ5QixtREFBTyxDQUFXLElBQUksQ0FBQztJQUMzQyxJQUFJLENBQUN5eUIsTUFBTSxHQUFHLElBQUl6eUIsbURBQU8sQ0FBVSxJQUFJLENBQUM7SUFDeEMsSUFBSSxDQUFDbWtCLGFBQWEsR0FBRyxJQUFJbmtCLG1EQUFPLENBQXVCLElBQUksQ0FBQztFQUM5RDtFQUFDLE9BQUFXLHlJQUFBLENBQUErdEIsY0FBQTtJQUFBOXRCLEdBQUE7SUFBQUMsR0FBQSxFQUVELFNBQUFBLElBQUEsRUFBdUI7TUFDckIsSUFBTTR4QixNQUFNLEdBQUcsSUFBSSxDQUFDQSxNQUFNLENBQUMzeEIsS0FBSztNQUVoQyxJQUFJLENBQUMyeEIsTUFBTSxFQUFFO1FBQ1gsT0FBTyxHQUFHO01BQ1o7TUFFQSxPQUFPQSxNQUFNLENBQUMzb0IsUUFBUTtJQUN4QjtFQUFDO0lBQUFsSixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBbzZCLFdBQVdBLENBQUM3ZCxNQUF1QixFQUFRO01BQ3pDLFFBQVFBLE1BQU07UUFDWixLQUFLLElBQUk7VUFDUDtRQUNGLEtBQUssY0FBYztRQUNuQixLQUFLLGdCQUFnQjtRQUNyQixLQUFLLGFBQWE7VUFDaEIsSUFBSSxDQUFDNlQsVUFBVSxDQUFDcHdCLEtBQUssR0FBRyxLQUFLOztRQUUvQjtRQUNBLEtBQUssV0FBVztRQUNoQixLQUFLLFdBQVc7VUFDZCxJQUFJLENBQUN1eEIsWUFBWSxDQUFDdnhCLEtBQUssR0FBRyxDQUFDO1VBQzNCLElBQUksQ0FBQzB3QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDNHdCLE9BQU8sQ0FBQzV3QixLQUFLLEdBQUcsSUFBSTtVQUN6QixJQUFJLENBQUM4d0IsT0FBTyxDQUFDOXdCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQzJ4QixNQUFNLENBQUMzeEIsS0FBSyxHQUFHLElBQUk7VUFFeEI7UUFDRjtVQUNFLElBQUksQ0FBQ3V4QixZQUFZLENBQUN2eEIsS0FBSyxFQUFFO1VBQ3pCLElBQUksQ0FBQzB3QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7VUFDMUIsSUFBSSxDQUFDNHdCLE9BQU8sQ0FBQzV3QixLQUFLLEdBQUcsSUFBSTtVQUN6QixJQUFJLENBQUM4d0IsT0FBTyxDQUFDOXdCLEtBQUssR0FBRyxLQUFLO1VBQzFCLElBQUksQ0FBQzJ4QixNQUFNLENBQUMzeEIsS0FBSyxHQUFHLElBQUk7VUFFeEI7TUFDSjtJQUNGO0VBQUM7SUFBQUYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQXE2Qiw2Q0FBNkNBLENBQUEsRUFBUztNQUNwRCxJQUFJLElBQUksQ0FBQzdMLFlBQVksQ0FBQ3h1QixLQUFLLElBQUksSUFBSSxDQUFDd3VCLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNveUIsT0FBTyxFQUFFO1FBQzlELElBQUksQ0FBQzVELFlBQVksQ0FBQ3h1QixLQUFLLENBQUNveUIsT0FBTyxDQUFDaGEsU0FBUyxHQUFHN1AsNENBQUcsQ0FBQ3NRLGVBQWU7UUFDL0QsSUFBSSxDQUFDMlYsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ295QixPQUFPLENBQUNwcEIsUUFBUSxHQUFHLElBQUksQ0FBQ0EsUUFBUTtNQUMxRDtJQUNGO0VBQUM7SUFBQWxKLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzNkIsaUNBQWlDQSxDQUFDL2QsTUFBdUIsRUFBZ0I7TUFDdkUsUUFBUUEsTUFBTTtRQUNaLEtBQUssSUFBSTtVQUNQLE9BQU9pUiw4REFBWSxDQUFDZ0osUUFBUTtRQUM5QixLQUFLLFdBQVc7UUFDaEIsS0FBSyxXQUFXO1VBQ2QsT0FBT2hKLDhEQUFZLENBQUMwSyxPQUFPO1FBQzdCLEtBQUssZ0JBQWdCO1VBQ25CLE9BQU8xSyw4REFBWSxDQUFDNEssYUFBYTtRQUNuQyxLQUFLLGFBQWE7VUFDaEIsT0FBTzVLLDhEQUFZLENBQUM2SyxVQUFVO1FBQ2hDLEtBQUssY0FBYztVQUNqQixPQUFPN0ssOERBQVksQ0FBQ2lKLFlBQVk7UUFDbEMsS0FBSyxVQUFVO1FBQ2YsS0FBSyxjQUFjO1FBQ25CLEtBQUssU0FBUztVQUNaLE9BQU9qSiw4REFBWSxDQUFDd0osVUFBVTtRQUNoQyxLQUFLLGVBQWU7VUFDbEIsT0FBT3hKLDhEQUFZLENBQUNtSixrQkFBa0I7UUFDeEMsS0FBSyx5QkFBeUI7VUFDNUIsT0FBT25KLDhEQUFZLENBQUNnTCwyQkFBMkI7UUFDakQsS0FBSyxRQUFRO1VBQ1gsT0FBT2hMLDhEQUFZLENBQUN0b0IsS0FBSztRQUMzQjtVQUNFbU0sbUVBQWlCLENBQUNrTCxNQUFNLENBQUM7TUFDN0I7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsSkg7QUFDQTtBQUNBO0FBQ3VDO0FBQUEsSUFHbEJ5UixxQkFBcUIsZ0JBQUFudUIseUlBQUEsQ0FLeEMsU0FBQW11QixzQkFBQSxFQUFjO0VBQUExdUIsNElBQUEsT0FBQTB1QixxQkFBQTtFQUFBenVCLDRJQUFBO0VBQUFBLDRJQUFBO0VBQUFBLDRJQUFBO0VBQ1osSUFBSSxDQUFDa2lCLFdBQVcsR0FBRyxJQUFJdmlCLG1EQUFPLENBQWMsSUFBSSxDQUFDO0VBQ2pELElBQUksQ0FBQ29nQixjQUFjLEdBQUcsSUFBSXBnQixtREFBTyxDQUFrQixJQUFJLENBQUM7RUFDeEQsSUFBSSxDQUFDZzZCLCtCQUErQixHQUFHLENBQUM7QUFDMUMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ2ZIO0FBQ0E7QUFDQTtBQUN1QztBQUFBLElBRWxCakwsWUFBWSxnQkFBQXB1Qix5SUFBQSxDQUkvQixTQUFBb3VCLGFBQUEsRUFBYztFQUFBM3VCLDRJQUFBLE9BQUEydUIsWUFBQTtFQUFBMXVCLDRJQUFBO0VBQUFBLDRJQUFBO0VBQ1osSUFBSSxDQUFDNjBCLFVBQVUsR0FBRyxJQUFJbDFCLG1EQUFPLENBQVUsS0FBSyxDQUFDO0VBQzdDLElBQUksQ0FBQzQxQixVQUFVLEdBQUcsS0FBSztBQUN6QixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWkg7QUFDQTtBQUNBO0FBQ3VDO0FBQUEsSUFhbEIvRyxzQkFBc0IsZ0JBQUFsdUIseUlBQUEsQ0FRekMsU0FBQWt1Qix1QkFBWTNOLE9BQXNDLEVBQUU7RUFBQTlnQiw0SUFBQSxPQUFBeXVCLHNCQUFBO0VBQUF4dUIsNElBQUE7RUFBQUEsNElBQUE7RUFBQUEsNElBQUE7RUFBQUEsNElBQUE7RUFBQUEsNElBQUE7RUFBQUEsNElBQUE7RUFDbEQsSUFBSSxDQUFDcXZCLG9CQUFvQixHQUFHLElBQUkxdkIsbURBQU8sQ0FBVWtoQixPQUFPLENBQUN3TyxvQkFBb0IsQ0FBQztFQUM5RSxJQUFJLENBQUNDLDJCQUEyQixHQUFHLElBQUkzdkIsbURBQU8sQ0FBVWtoQixPQUFPLENBQUN5TywyQkFBMkIsQ0FBQztFQUM1RixJQUFJLENBQUNDLDRCQUE0QixHQUFHMU8sT0FBTyxDQUFDME8sNEJBQTRCO0VBQ3hFLElBQUksQ0FBQ0MsNEJBQTRCLEdBQUczTyxPQUFPLENBQUMyTyw0QkFBNEI7RUFDeEUsSUFBSSxDQUFDQyxzQkFBc0IsR0FBRzVPLE9BQU8sQ0FBQzRPLHNCQUFzQjtFQUM1RCxJQUFJLENBQUNDLHNCQUFzQixHQUFHN08sT0FBTyxDQUFDNk8sc0JBQXNCO0FBQzlELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMvQkg7QUFDQTtBQUNBO0FBQ3VDO0FBQUEsSUFHbEJ0QixZQUFZLGdCQUFBOXRCLHlJQUFBLENBSS9CLFNBQUE4dEIsYUFBWXZqQixLQUF1QixFQUFFO0VBQUE5Syw0SUFBQSxPQUFBcXVCLFlBQUE7RUFBQXB1Qiw0SUFBQTtFQUFBQSw0SUFBQTtFQUNuQyxJQUFJLENBQUM2SyxLQUFLLEdBQUcsSUFBSWxMLG1EQUFPLENBQW1Ca0wsS0FBSyxDQUFDO0VBQ2pELElBQUksQ0FBQzhsQixhQUFhLEdBQUcsSUFBSWh4QixtREFBTyxDQUFVLEtBQUssQ0FBQztBQUNsRCxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7QUNiSDtBQUNBO0FBQ0E7O0FBRUEsSUFBTXE3QixtQkFBbUIsR0FBRyw2Q0FBNkM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDSnpFO0FBQ0E7QUFDQTtBQUMrRTtBQUNsQjtBQUFBLElBRXhDQyxrQkFBa0I7RUFBQSxTQUFBQSxtQkFBQTtJQUFBbDdCLDRJQUFBLE9BQUFrN0Isa0JBQUE7RUFBQTtFQUFBLE9BQUEzNkIseUlBQUEsQ0FBQTI2QixrQkFBQTtJQUFBMTZCLEdBQUE7SUFBQUUsS0FBQSxFQUNyQyxTQUFPeTZCLG1DQUFtQ0EsQ0FBQ0MsV0FBd0IsRUFBbUI7TUFDcEYsUUFBUUEsV0FBVztRQUNqQixLQUFLcE4sd0VBQVcsQ0FBQzJGLE1BQU07VUFDckIsT0FBTyxRQUFRO1FBQ2pCLEtBQUszRix3RUFBVyxDQUFDcU4sS0FBSztVQUNwQixPQUFPLE9BQU87UUFDaEIsS0FBS3JOLHdFQUFXLENBQUMyRyxLQUFLO1VBQ3BCLE9BQU8sT0FBTztRQUNoQjtVQUNFNWlCLG1FQUFpQixDQUFDcXBCLFdBQVcsQ0FBQztNQUNsQztJQUNGO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNsQkg7QUFDQTtBQUNBO0FBQ2lGO0FBQ3BCO0FBQUEsSUFFeENFLG1CQUFtQjtFQUFBLFNBQUFBLG9CQUFBO0lBQUF0N0IsNElBQUEsT0FBQXM3QixtQkFBQTtFQUFBO0VBQUEsT0FBQS82Qix5SUFBQSxDQUFBKzZCLG1CQUFBO0lBQUE5NkIsR0FBQTtJQUFBRSxLQUFBLEVBQ3RDLFNBQU82NkIscUNBQXFDQSxDQUFDQyxZQUEwQixFQUFvQjtNQUN6RixRQUFRQSxZQUFZO1FBQ2xCLEtBQUt6Tix5RUFBWSxDQUFDMkYsSUFBSTtVQUNwQixPQUFPLE1BQU07UUFDZixLQUFLM0YseUVBQVksQ0FBQzRHLEtBQUs7VUFDckIsT0FBTyxPQUFPO1FBQ2hCO1VBQ0U1aUIsbUVBQWlCLENBQUN5cEIsWUFBWSxDQUFDO01BQ25DO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNoQkg7QUFDQTtBQUNBO0FBQ3dEO0FBQ047QUFFekI7QUFFekIsSUFBTUUsc0JBQXNCLEdBQUcsS0FBSztBQUFDLElBSWhCN00sU0FBUztFQXVDNUIsU0FBQUEsVUFBQSxFQUFzQjtJQUFBN3VCLDRJQUFBLE9BQUE2dUIsU0FBQTtJQUNwQixNQUFNLElBQUlqcEIsS0FBSyxDQUFDLDBEQUEwRCxDQUFDO0VBQzdFO0VBQUMsT0FBQXJGLHlJQUFBLENBQUFzdUIsU0FBQTtJQUFBcnVCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFpN0IsaUNBQUEsR0FBQTNnQiw4SUFBQSxjQUFBQyw0SUFBQSxDQXRDRCxTQUFBRSxRQUFBO1FBQUEsSUFBQXBQLEdBQUE7UUFBQSxPQUFBa1AsNElBQUEsVUFBQU0sU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FDUTNQLEdBQUcsR0FBRyxJQUFJdE0sZ0VBQVcsQ0FBQytHLEdBQUcsQ0FBQ3lDLDRDQUFHLENBQUN5akIsWUFBWSxDQUFDaHNCLEtBQUssQ0FBQztjQUFBLE9BQUE4YSxRQUFBLENBQUFPLE1BQUEsV0FFaEQ4UyxTQUFTLENBQUMrTSxrQ0FBa0MsQ0FBQzd2QixHQUFHLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXlQLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ3pEO01BQUEsU0FKWTBnQixnQ0FBZ0NBLENBQUE7UUFBQSxPQUFBRixpQ0FBQSxDQUFBeGYsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBaENtb0IsZ0NBQWdDO0lBQUE7RUFBQTtJQUFBcjdCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFvN0IsbUNBQUEsR0FBQTlnQiw4SUFBQSxjQUFBQyw0SUFBQSxDQU03QyxTQUFBb0IsU0FBZ0R0USxHQUFRO1FBQUEsSUFBQXVNLEdBQUEsRUFBQXlqQixnQkFBQSxFQUFBQyxXQUFBLEVBQUFsaEIsT0FBQTtRQUFBLE9BQUFHLDRJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUNoRHBELEdBQUcsR0FBR3ZNLEdBQUcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDO2NBQUEsS0FFdEIyZSxTQUFTLENBQUNvTixNQUFNLENBQUMzakIsR0FBRyxDQUFDO2dCQUFBaUUsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBYSxTQUFBLENBQUFSLE1BQUEsV0FDaEI4UyxTQUFTLENBQUNvTixNQUFNLENBQUMzakIsR0FBRyxDQUFDO1lBQUE7Y0FHeEJ5akIsZ0JBQWdCLEdBQUcsSUFBSU4seURBQWdCLENBQUMxdkIsR0FBRyxDQUFDO2NBQzVDaXdCLFdBQVcsR0FBR25OLFNBQVMsQ0FBQ29OLE1BQU0sQ0FBQzNqQixHQUFHLENBQUMsR0FBR3lqQixnQkFBZ0IsQ0FBQ0csdUJBQXVCLENBQUMsQ0FBQztjQUNoRnBoQixPQUFPLEdBQUcrVCxTQUFTLENBQUNvTixNQUFNLENBQUMzakIsR0FBRyxDQUFDLENBQUNvRSxJQUFJLENBQUMsWUFBTTtnQkFDL0MsSUFBTTVCLE9BQU8sR0FBR3JiLGdFQUFXLENBQUMyRyxVQUFVLENBQUMsWUFBTTtrQkFDM0MsSUFBSXlvQixTQUFTLENBQUNvTixNQUFNLENBQUMzakIsR0FBRyxDQUFDLEtBQUswakIsV0FBVyxFQUFFO29CQUN6QyxPQUFPbk4sU0FBUyxDQUFDb04sTUFBTSxDQUFDM2pCLEdBQUcsQ0FBQztrQkFDOUI7Z0JBQ0YsQ0FBQyxFQUFFb2pCLHNCQUFzQixDQUFDO2NBQzVCLENBQUMsQ0FBQyxDQUFDMWUsS0FBSyxDQUFDLFlBQU07Z0JBQ2IsT0FBTzZSLFNBQVMsQ0FBQ29OLE1BQU0sQ0FBQzNqQixHQUFHLENBQUM7Y0FDOUIsQ0FBQyxDQUFDO2NBQUEsT0FBQWlFLFNBQUEsQ0FBQVIsTUFBQSxXQUVLaWdCLFdBQVc7WUFBQTtZQUFBO2NBQUEsT0FBQXpmLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ25CO01BQUEsU0FwQll1ZixrQ0FBa0NBLENBQUExZixFQUFBO1FBQUEsT0FBQTRmLG1DQUFBLENBQUEzZixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFsQ2tvQixrQ0FBa0M7SUFBQTtFQUFBO0lBQUFwN0IsR0FBQTtJQUFBRSxLQUFBLEVBc0IvQyxTQUFPaTNCLDBCQUEwQkEsQ0FBQzVyQixHQUFRLEVBQVE7TUFDaEQsSUFBTXVNLEdBQUcsR0FBR3ZNLEdBQUcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDO01BRTFCLElBQUkyZSxTQUFTLENBQUNvTixNQUFNLENBQUMzakIsR0FBRyxDQUFDLEVBQUU7UUFDekIsT0FBT3VXLFNBQVMsQ0FBQ29OLE1BQU0sQ0FBQzNqQixHQUFHLENBQUM7TUFDOUI7SUFDRjtFQUFDO0FBQUE7QUFBQXJZLDRJQUFBLENBckNrQjR1QixTQUFTLFlBQ2EsQ0FBQyxDQUFDO0FBRGY7QUE0QzlCLElBQU0vVCxPQUFPLEdBQUcrVCxTQUFTLENBQUNnTixnQ0FBZ0MsQ0FBQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDeEQ1RDtBQUNBO0FBQ0E7QUFDd0Q7QUFFRDtBQUVHO0FBQ047QUFDVjtBQUNSO0FBQ1Q7QUFFekIsSUFBTU8sY0FBYyxHQUFHLEtBQUs7QUFBQyxJQUVSWCxnQkFBZ0I7RUFLbkMsU0FBQUEsaUJBQVkxdkIsR0FBUSxFQUFFO0lBQUEvTCw0SUFBQSxPQUFBeTdCLGdCQUFBO0lBQUF4N0IsNElBQUEsa0JBSktpSiw2REFBYSxDQUFDRyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQUFwSiw0SUFBQTtJQUFBQSw0SUFBQTtJQUs3RCxJQUFJLENBQUM4TCxHQUFHLEVBQUU7TUFDUixNQUFNLElBQUluRyxLQUFLLENBQUMsd0JBQXdCLENBQUM7SUFDM0M7SUFFQSxJQUFJLENBQUMwbEIsZUFBZSxHQUFHcFMsK0RBQWMsQ0FBQ0MsaUJBQWlCLENBQUNwTixHQUFHLENBQUNtRSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBQ3ZFLElBQUksQ0FBQ21zQixJQUFJLEdBQUd0d0IsR0FBRztFQUNqQjtFQUFDLE9BQUF4TCx5SUFBQSxDQUFBazdCLGdCQUFBO0lBQUFqN0IsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTQ3Qix3QkFBQSxHQUFBdGhCLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQUUsUUFBOEJwUCxHQUFRLEVBQUV3d0IsT0FBZTtRQUFBLElBQUFqa0IsR0FBQSxFQUFBcUUsUUFBQSxFQUFBNmYsUUFBQSxFQUFBQyxTQUFBO1FBQUEsT0FBQXhoQiw0SUFBQSxVQUFBTSxTQUFBQyxRQUFBO1VBQUEsa0JBQUFBLFFBQUEsQ0FBQUMsSUFBQSxHQUFBRCxRQUFBLENBQUFFLElBQUE7WUFBQTtjQUFBLElBQ2hENmdCLE9BQU87Z0JBQUEvZ0IsUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNKLElBQUk5VixLQUFLLENBQUMsNEJBQTRCLENBQUM7WUFBQTtjQUd6QzBTLEdBQUcsR0FBR3ZNLEdBQUcsQ0FBQ21FLFFBQVEsQ0FBQyxDQUFDO2NBQUFzTCxRQUFBLENBQUFFLElBQUE7Y0FBQSxPQUNIMEIsT0FBTyxDQUFDa0MsSUFBSSxDQUFDLENBQ2xDN2YsZ0VBQVcsQ0FBQzBQLEtBQUssQ0FBQ21KLEdBQUcsRUFBRTtnQkFDckJ1RCxNQUFNLEVBQUUsS0FBSztnQkFDYmxHLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUl5SCxPQUFPLENBQVcsVUFBQ2lDLENBQUMsRUFBRUwsTUFBTTtnQkFBQSxPQUFLdmYsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQztrQkFBQSxPQUFNNFksTUFBTSxDQUFDLElBQUlwWixLQUFLLHlCQUFBdEMsTUFBQSxDQUF5QmdWLEdBQUcsTUFBRyxDQUFDLENBQUM7Z0JBQUEsR0FBRWlrQixPQUFPLENBQUM7Y0FBQSxFQUFDLENBQy9ILENBQUM7WUFBQTtjQU5JNWYsUUFBUSxHQUFBbkIsUUFBQSxDQUFBUSxJQUFBO2NBQUEsSUFRVFcsUUFBUSxDQUFDK2YsRUFBRTtnQkFBQWxoQixRQUFBLENBQUFFLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ1IsSUFBSTlWLEtBQUssc0JBQUF0QyxNQUFBLENBQXNCZ1YsR0FBRyxTQUFBaFYsTUFBQSxDQUFNcVosUUFBUSxDQUFDTSxNQUFNLE1BQUcsQ0FBQztZQUFBO2NBQUEsTUFHL0ROLFFBQVEsQ0FBQ2IsSUFBSSxLQUFLLElBQUk7Z0JBQUFOLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDbEIsSUFBSTlWLEtBQUssbUNBQUF0QyxNQUFBLENBQW1DZ1YsR0FBRyxNQUFHLENBQUM7WUFBQTtjQUFBa0QsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FHcENpQixRQUFRLENBQUNnZ0IsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUFoQ0gsUUFBUSxHQUFBaGhCLFFBQUEsQ0FBQVEsSUFBQTtjQUNSeWdCLFNBQVMsR0FBR0QsUUFBUSxDQUFDejVCLEtBQUssQ0FBQyxHQUFHLENBQUM7Y0FBQSxPQUFBeVksUUFBQSxDQUFBTyxNQUFBLFdBRTlCMGdCLFNBQVMsQ0FBQ2hhLEdBQUcsQ0FBQyxVQUFBMFAsUUFBUTtnQkFBQSxPQUFJLElBQUlnSyxrREFBUSxDQUFDaEssUUFBUSxFQUFFb0ssT0FBTyxDQUFDO2NBQUEsRUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBL2dCLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQ2xFO01BQUEsU0ExQkt5aEIsdUJBQXVCQSxDQUFBMWdCLEVBQUEsRUFBQTBMLEdBQUE7UUFBQSxPQUFBMFUsd0JBQUEsQ0FBQW5nQixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUF2QmtwQix1QkFBdUI7SUFBQTtFQUFBO0lBQUFwOEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQW04Qix3QkFBQSxHQUFBN2hCLDhJQUFBLGNBQUFDLDRJQUFBLENBNEI3QixTQUFBb0IsU0FBQTtRQUFBLElBQUF0YixLQUFBO1FBQUEsSUFBQXc3QixPQUFBO1VBQUFqa0IsR0FBQTtVQUFBbWtCLFNBQUE7VUFBQUssY0FBQTtVQUFBQyxtQ0FBQTtVQUFBNUssUUFBQTtVQUFBNkssTUFBQSxHQUFBdHBCLFNBQUE7UUFBQSxPQUFBdUgsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQThCNmdCLE9BQWUsR0FBQVMsTUFBQSxDQUFBNXhCLE1BQUEsUUFBQTR4QixNQUFBLFFBQUF2M0IsU0FBQSxHQUFBdTNCLE1BQUEsTUFBR1osY0FBYztjQUN0RDlqQixHQUFHLEdBQUdpUyxxREFBWSxDQUFDMFMsaUJBQWlCLENBQUMsSUFBSSxDQUFDWixJQUFJLENBQUM7Y0FBQTlmLFNBQUEsQ0FBQWIsSUFBQTtjQUFBLE9BQzdCLElBQUksQ0FBQ2toQix1QkFBdUIsQ0FBQyxJQUFJbjlCLGdFQUFXLENBQUMrRyxHQUFHLENBQUM4UixHQUFHLENBQUMsRUFBRWlrQixPQUFPLENBQUM7WUFBQTtjQUFqRkUsU0FBUyxHQUFBbGdCLFNBQUEsQ0FBQVAsSUFBQTtjQUNYOGdCLGNBQWMsR0FBRyxDQUFDO2NBQ2hCQyxtQ0FBbUMsR0FBRyxTQUF0Q0EsbUNBQW1DQSxDQUFBO2dCQUFBLE9BQXdCLElBQUkzZixPQUFPLENBQUMsVUFBQ2lDLENBQUMsRUFBRUwsTUFBTSxFQUFLO2tCQUMxRixJQUFJOGQsY0FBYyxJQUFJTCxTQUFTLENBQUNyeEIsTUFBTSxFQUFFO29CQUN0QzRULE1BQU0sa0JBQUExYixNQUFBLENBQWtCbTVCLFNBQVMsQ0FBQ3J4QixNQUFNLHdCQUFBOUgsTUFBQSxDQUFxQmdWLEdBQUcsNENBQXlDLENBQUM7a0JBQzVHO2dCQUNGLENBQUMsQ0FBQztjQUFBO2NBQUFpRSxTQUFBLENBQUFiLElBQUE7Y0FBQSxPQUNxQjBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQ21kLFNBQVMsQ0FBQ2hhLEdBQUcsQ0FBQyxVQUFBMFAsUUFBUTtnQkFBQSxPQUFJQSxRQUFRLENBQ25FK0ssSUFBSSxDQUFDLENBQUMsQ0FDTmxnQixLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtrQkFDVnpLLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQzZKLElBQUksQ0FBQywrQkFBK0IsRUFBRStkLFFBQVEsRUFBRTNtQixDQUFDLENBQUM7a0JBRS9Ec3hCLGNBQWMsRUFBRTtrQkFFaEIsT0FBT0MsbUNBQW1DLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQ0RyZ0IsSUFBSSxDQUFDLFVBQUF5Z0IsSUFBSSxFQUFJO2tCQUNaLElBQU1oOUIsR0FBRyxHQUFHRCxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2tCQUV0QlksS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsMENBQTBDLEVBQUUybkIsUUFBUSxDQUFDamlCLFFBQVEsQ0FBQyxDQUFDLEVBQUVpdEIsSUFBSSxDQUFDO2tCQUN4RnA4QixLQUFJLENBQUN1cUIsZUFBZSxDQUFDbGhCLElBQUksQ0FBQztvQkFDeEJMLFVBQVUsRUFBRWpCLDREQUFXLENBQUMrTyxhQUFhO29CQUNyQ3hOLE9BQU8sRUFBRSxDQUFDbEssR0FBRyxHQUFHOEksNkNBQUcsQ0FBQ0csWUFBWSxJQUFJLElBQUk7b0JBQ3hDMUksS0FBSyxFQUFFO3NCQUFDNEosTUFBTSxFQUFFNnlCLElBQUksSUFBSTtvQkFBQyxDQUFDO29CQUMxQjVpQixRQUFRLEVBQUU0WCxRQUFRLENBQUNqaUIsUUFBUSxDQUFDLENBQUM7b0JBQzdCc0ssSUFBSSxFQUFFO2tCQUNSLENBQUMsQ0FBQztrQkFFRixPQUFPMlgsUUFBUTtnQkFDakIsQ0FBQyxDQUFDO2NBQUEsRUFBQyxDQUFDO1lBQUE7Y0F0QkFBLFFBQVEsR0FBQTVWLFNBQUEsQ0FBQVAsSUFBQTtjQUFBLE9BQUFPLFNBQUEsQ0FBQVIsTUFBQSxXQXdCUG9XLFFBQVE7WUFBQTtZQUFBO2NBQUEsT0FBQTVWLFNBQUEsQ0FBQU4sSUFBQTtVQUFBO1FBQUEsR0FBQUksUUFBQTtNQUFBLENBQ2hCO01BQUEsU0FsQ0s2Zix1QkFBdUJBLENBQUE7UUFBQSxPQUFBVyx3QkFBQSxDQUFBMWdCLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQXZCd29CLHVCQUF1QjtJQUFBO0VBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUN6RC9CO0FBQ0E7QUFDQTtBQUN3RDtBQUNqQjtBQUNnQjtBQUNEO0FBQ047QUFBQSxJQUUzQjNSLFlBQVk7RUF1Qi9CLFNBQUFBLGFBQUEsRUFBc0I7SUFBQXZxQiw0SUFBQSxPQUFBdXFCLFlBQUE7SUFDcEIsTUFBTSxJQUFJM2tCLEtBQUssQ0FBQyw2REFBNkQsQ0FBQztFQUNoRjtFQUFDLE9BQUFyRix5SUFBQSxDQUFBZ3FCLFlBQUE7SUFBQS9wQixHQUFBO0lBQUFDLEdBQUEsRUF0QkQsU0FBQUEsSUFBQSxFQUFrQztNQUNoQyxPQUFPOHBCLFlBQVksQ0FBQzZTLGFBQWE7SUFDbkM7RUFBQztJQUFBNThCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU91OEIsaUJBQWlCQSxDQUFDbHhCLEdBQVEsRUFBVTtNQUN6QyxJQUFNdU0sR0FBRyxHQUFHLElBQUk3WSxnRUFBVyxDQUFDK0csR0FBRyxDQUFDdUYsR0FBRyxDQUFDbUUsUUFBUSxDQUFDLENBQUMsQ0FBQztNQUMvQyxJQUFNMkssVUFBVSxHQUFHZCwrREFBYyxDQUFDYyxVQUFVO01BQzVDLElBQU14TSxVQUFVLEdBQUdOLCtEQUFVLENBQUNzdkIsbUJBQW1CLENBQUNodkIsVUFBVTtNQUU1RGlLLEdBQUcsQ0FBQ2dsQixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLFNBQVMsRUFBRXdDLFVBQVUsQ0FBQztNQUMzQ3ZDLEdBQUcsQ0FBQ2dsQixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLFlBQVksRUFBRWhLLFVBQVUsQ0FBQztNQUM5Q2lLLEdBQUcsQ0FBQ2dsQixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLEdBQUcsS0FBQS9VLE1BQUEsQ0FBS3BELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO01BRTFDLElBQUltWSxHQUFHLENBQUNFLFFBQVEsS0FBSyxHQUFHLEVBQUU7UUFDeEJGLEdBQUcsQ0FBQ0UsUUFBUSxHQUFHLGtCQUFrQjtNQUNuQztNQUVBLE9BQU9GLEdBQUcsQ0FBQ3BJLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZCO0VBQUM7QUFBQTtBQUFBalEsNElBQUEsQ0FyQmtCc3FCLFlBQVksbUJBQzBCLElBQUkzcUIsbURBQU8sQ0FBU3E3QiwwREFBbUIsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNWbkc7QUFDQTtBQUNBO0FBQ3dEO0FBRUQ7QUFDSTtBQVdKO0FBQ0Q7QUFFQTtBQUNFO0FBU3hELElBQU1zQyxVQUFVLEdBQUcsQ0FBQztBQUFDLElBZ0VBcEIsUUFBUTtFQU0zQixTQUFBQSxTQUFZcHdCLEdBQVcsRUFBRXd3QixPQUFlLEVBQUU7SUFBQXY4Qiw0SUFBQSxPQUFBbThCLFFBQUE7SUFBQWw4Qiw0SUFBQSxrQkFMTmlKLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxVQUFVLENBQUM7SUFBQXBKLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBTXJFLElBQUksQ0FBQ284QixJQUFJLEdBQUd0d0IsR0FBRztJQUNmLElBQUksQ0FBQ3l4QixRQUFRLEdBQUdqQixPQUFPO0lBRXZCLElBQUksQ0FBQ0EsT0FBTyxFQUFFO01BQ1osTUFBTSxJQUFJMzJCLEtBQUssK0JBQStCLENBQUM7SUFDakQ7RUFDRjtFQUFDLE9BQUFyRix5SUFBQSxDQUFBNDdCLFFBQUE7SUFBQTM3QixHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRCO01BQzFCLE9BQU8sSUFBSSxDQUFDZzlCLGNBQWM7SUFDNUI7RUFBQztJQUFBajlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUF3UCxRQUFRQSxDQUFBLEVBQVc7TUFDakIsdUJBQUE1TSxNQUFBLENBQXVCLElBQUksQ0FBQys0QixJQUFJO0lBQ2xDO0VBQUM7SUFBQTc3QixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBZzlCLEtBQUEsR0FBQTFpQiw4SUFBQSxjQUFBQyw0SUFBQSxDQUVELFNBQUFFLFFBQUE7UUFBQSxJQUFBcGEsS0FBQTtRQUFBLElBQUF1WCxHQUFBLEVBQUF3YixLQUFBLEVBQUFuWCxRQUFBLEVBQUFnaEIsUUFBQTtRQUFBLE9BQUExaUIsNElBQUEsVUFBQU0sU0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBO1lBQUE7Y0FDUXBELEdBQUcsR0FBRyxJQUFJLENBQUNzbEIsWUFBWSxDQUFDLENBQUM7Y0FDekI5SixLQUFLLEdBQUc1ekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBcWIsUUFBQSxDQUFBRSxJQUFBO2NBQUEsT0FDRDBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQyxDQUNsQzdmLGdFQUFXLENBQUMwUCxLQUFLLENBQUNtSixHQUFHLEVBQUU7Z0JBQ3JCdUQsTUFBTSxFQUFFLEtBQUs7Z0JBQ2JsRyxLQUFLLEVBQUU7Y0FDVCxDQUFDLENBQUMsRUFDRixJQUFJeUgsT0FBTyxDQUFXLFVBQUNpQyxDQUFDLEVBQUVMLE1BQU07Z0JBQUEsT0FDOUJ2ZixnRUFBVyxDQUFDMkcsVUFBVSxDQUFDO2tCQUFBLE9BQU00WSxNQUFNLENBQUMsSUFBSXBaLEtBQUssb0JBQUF0QyxNQUFBLENBQW9CZ1YsR0FBRyxNQUFHLENBQUMsQ0FBQztnQkFBQSxHQUFFdlgsS0FBSSxDQUFDeThCLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDN0YsQ0FBQztZQUFBO2NBUEk3Z0IsUUFBUSxHQUFBbkIsUUFBQSxDQUFBUSxJQUFBO2NBUVIyaEIsUUFBUSxHQUFHejlCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQSxJQUV0QndjLFFBQVEsQ0FBQytmLEVBQUU7Z0JBQUFsaEIsUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNSLElBQUk5VixLQUFLLGlCQUFBdEMsTUFBQSxDQUFpQmdWLEdBQUcsU0FBQWhWLE1BQUEsQ0FBTXFaLFFBQVEsQ0FBQ00sTUFBTSxNQUFHLENBQUM7WUFBQTtjQUc5RCxJQUFJLENBQUN3Z0IsY0FBYyxHQUFHRSxRQUFRLEdBQUc3SixLQUFLO2NBQUMsT0FBQXRZLFFBQUEsQ0FBQU8sTUFBQSxXQUVoQyxJQUFJLENBQUMwaEIsY0FBYztZQUFBO1lBQUE7Y0FBQSxPQUFBamlCLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQzNCO01BQUEsU0FwQksraEIsSUFBSUEsQ0FBQTtRQUFBLE9BQUFRLEtBQUEsQ0FBQXZoQixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFKd3BCLElBQUk7SUFBQTtFQUFBO0lBQUExOEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQW05QixVQUFBLEdBQUE3aUIsOElBQUEsY0FBQUMsNElBQUEsQ0FzQlYsU0FBQW9CLFNBQWdCdlIsS0FBdUIsRUFBRWd6Qix1QkFBa0QsRUFBRTdMLFlBQW9CO1FBQUEsSUFBQWxkLE1BQUE7UUFBQSxJQUFBNkQsT0FBQSxFQUFBTixHQUFBLEVBQUErQyxRQUFBLEVBQUEwaUIsYUFBQSxFQUFBQyxhQUFBLEVBQUFDLGdCQUFBLEVBQUFuSyxLQUFBLEVBQUFvSyxZQUFBLEVBQUEzQixPQUFBLEVBQUF0ZixNQUFBLEVBQUEwZ0IsUUFBQSxFQUFBUSxpQkFBQTtRQUFBLE9BQUFsakIsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBZCxJQUFBLEdBQUFjLFNBQUEsQ0FBQWIsSUFBQTtZQUFBO2NBQ3pHOUMsT0FBTyxHQUFHaE8sZ0VBQWMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLENBQUMsQ0FBQzhOLE9BQU87Y0FBQSxJQUVuREEsT0FBTztnQkFBQTJELFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQ1YsSUFBSSxDQUFDblIsT0FBTyxDQUFDUyxLQUFLLENBQUMsNEJBQTRCLEVBQUVGLEtBQUssQ0FBQztjQUFDLE9BQUF5UixTQUFBLENBQUFSLE1BQUEsV0FFakQ7Z0JBQUNrQixNQUFNLEVBQUU7Y0FBYyxDQUFDO1lBQUE7Y0FHM0IzRSxHQUFHLEdBQUcsSUFBSSxDQUFDOGxCLFFBQVEsQ0FBQyxDQUFDeGxCLE9BQU8sRUFBRSxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUMsQ0FBQzFJLFFBQVEsQ0FBQyxDQUFDO2NBQ2hFbUwsUUFBUSxHQUFHLElBQUk1YixnRUFBVyxDQUFDbVAsUUFBUSxDQUFDLENBQUM7Y0FDckNtdkIsYUFBYSxHQUFHaGtCLCtEQUFjLENBQUNjLFVBQVU7Y0FFL0MsSUFBSW9YLFlBQVksS0FBSyxDQUFDLElBQUk2TCx1QkFBdUIsRUFBRTtnQkFDM0NFLGFBQXlDLEdBQUc7a0JBQ2hEVCxVQUFVLEVBQVZBLFVBQVU7a0JBQ1ZRLGFBQWEsRUFBYkEsYUFBYTtrQkFDYk0sV0FBVyxFQUFFdnpCLEtBQUs7a0JBQ2xCbW5CLFlBQVksRUFBWkEsWUFBWTtrQkFDWnFNLGlCQUFpQixFQUFFLElBQUksQ0FBQ2IsY0FBYztrQkFDdENqVixvQkFBb0IsRUFBRTtvQkFDcEIrVSxVQUFVLEVBQVZBLFVBQVU7b0JBQ1ZnQixrQkFBa0IsRUFBRTtzQkFDbEJuMkIsSUFBSSxFQUFFMDFCLHVCQUF1QixDQUFDMTFCLElBQUk7c0JBQ2xDMGEsR0FBRyxFQUFFZ2IsdUJBQXVCLENBQUNoYjtvQkFDL0I7a0JBQ0YsQ0FBQztrQkFDRDBiLHVCQUF1QixFQUFFO29CQUFDakIsVUFBVSxFQUFWQTtrQkFBVTtnQkFDdEMsQ0FBQztnQkFFRGxpQixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVyUSxJQUFJLENBQUM4SixTQUFTLENBQUM0b0IsYUFBYSxDQUFDLENBQUM7Y0FDNUQsQ0FBQyxNQUFNO2dCQUNDQyxnQkFBK0MsR0FBRztrQkFDdERWLFVBQVUsRUFBVkEsVUFBVTtrQkFDVlEsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUV2ekIsS0FBSztrQkFDbEJtbkIsWUFBWSxFQUFaQSxZQUFZO2tCQUNacU0saUJBQWlCLEVBQUUsSUFBSSxDQUFDYixjQUFjO2tCQUN0Q2dCLHNCQUFzQixFQUFFO29CQUFDbEIsVUFBVSxFQUFWQTtrQkFBVTtnQkFDckMsQ0FBQztnQkFFRGxpQixRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVyUSxJQUFJLENBQUM4SixTQUFTLENBQUM2b0IsZ0JBQWdCLENBQUMsQ0FBQztjQUMvRDtjQUVNbkssS0FBSyxHQUFHNXpCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQW9jLFNBQUEsQ0FBQWQsSUFBQTtjQUlsQjhnQixPQUFzQixHQUFHLElBQUk7Y0FBQWhnQixTQUFBLENBQUFiLElBQUE7Y0FBQSxPQUVaMEIsT0FBTyxDQUFDa0MsSUFBSSxDQUFDLENBQ2hDN2YsZ0VBQVcsQ0FBQzBQLEtBQUssQ0FBQ21KLEdBQUcsRUFBRTtnQkFDckJ1RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUkrQixPQUFPLENBQVcsVUFBQTJCLE9BQU87Z0JBQUEsT0FDM0J3ZCxPQUFPLEdBQUc5OEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO2tCQUNyQzJPLE1BQUksQ0FBQ3hLLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFCQUFxQixFQUFFLElBQUlwRixLQUFLLHlCQUFBdEMsTUFBQSxDQUF5QmdWLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ3BGeUcsT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFbEksTUFBSSxDQUFDeW9CLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDckIsQ0FBQyxDQUNDekYsT0FBTyxDQUFDLFlBQU07Z0JBQ2IsSUFBSXdFLE9BQU8sRUFBRTtrQkFDWDk4QixnRUFBVyxDQUFDcVAsWUFBWSxDQUFDeXRCLE9BQU8sQ0FBQztnQkFDbkM7Y0FDRixDQUFDLENBQUM7WUFBQTtjQWZKMkIsWUFBWSxHQUFBM2hCLFNBQUEsQ0FBQVAsSUFBQTtjQUFBTyxTQUFBLENBQUFiLElBQUE7Y0FBQTtZQUFBO2NBQUFhLFNBQUEsQ0FBQWQsSUFBQTtjQUFBYyxTQUFBLENBQUF5RSxFQUFBLEdBQUF6RSxTQUFBO2NBaUJaLElBQUksQ0FBQ2hTLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLHFCQUFxQixFQUFBdVIsU0FBQSxDQUFBeUUsRUFBRyxDQUFDO2NBQUMsT0FBQXpFLFNBQUEsQ0FBQVIsTUFBQSxXQUV0QztnQkFBQ2tCLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBdUIsR0FBRyxJQUFJLENBQUN5aEIsOEJBQThCLENBQUNSLFlBQVksQ0FBQztjQUFBLE1BRTdFamhCLE1BQU0sS0FBSyxJQUFJO2dCQUFBVixTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFhLFNBQUEsQ0FBQVIsTUFBQSxXQUNWO2dCQUFDa0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMGdCLFFBQVEsR0FBR3o5QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFvYyxTQUFBLENBQUFiLElBQUE7Y0FBQSxPQUNLLElBQUksQ0FBQ2lqQixzQ0FBc0MsQ0FBQy9sQixPQUFPLEVBQUVzbEIsWUFBWSxDQUFDO1lBQUE7Y0FBNUZDLGlCQUFpQixHQUFBNWhCLFNBQUEsQ0FBQVAsSUFBQTtjQUV2QixJQUFJLENBQUN6UixPQUFPLENBQUNzSixLQUFLLENBQUMsd0NBQXdDLEVBQUVzcUIsaUJBQWlCLEVBQUVSLFFBQVEsR0FBRzdKLEtBQUssQ0FBQztjQUFDLE9BQUF2WCxTQUFBLENBQUFSLE1BQUEsV0FFM0ZvaUIsaUJBQWlCO1lBQUE7WUFBQTtjQUFBLE9BQUE1aEIsU0FBQSxDQUFBTixJQUFBO1VBQUE7UUFBQSxHQUFBSSxRQUFBO01BQUEsQ0FDekI7TUFBQSxTQXBGS3FOLFNBQVNBLENBQUF4TixFQUFBLEVBQUEwTCxHQUFBLEVBQUFLLEdBQUE7UUFBQSxPQUFBNFYsVUFBQSxDQUFBMWhCLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQVRnVyxTQUFTO0lBQUE7RUFBQTtJQUFBbHBCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFrK0IsUUFBQSxHQUFBNWpCLDhJQUFBLGNBQUFDLDRJQUFBLENBc0ZmLFNBQUFrRixTQUFjN2IsSUFBWSxFQUFFd0csS0FBdUIsRUFBRWd6Qix1QkFBa0QsRUFBRTdMLFlBQW9CO1FBQUEsSUFBQXBKLE1BQUE7UUFBQSxJQUFBalEsT0FBQSxFQUFBTixHQUFBLEVBQUErQyxRQUFBLEVBQUEwaUIsYUFBQSxFQUFBQyxhQUFBLEVBQUFDLGdCQUFBLEVBQUFuSyxLQUFBLEVBQUFvSyxZQUFBLEVBQUEzQixPQUFBLEVBQUF0ZixNQUFBLEVBQUEwZ0IsUUFBQSxFQUFBUSxpQkFBQTtRQUFBLE9BQUFsakIsNElBQUEsVUFBQXNGLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBL0UsSUFBQSxHQUFBK0UsU0FBQSxDQUFBOUUsSUFBQTtZQUFBO2NBQ3JIOUMsT0FBTyxHQUFHaE8sZ0VBQWMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLENBQUMsQ0FBQzhOLE9BQU87Y0FBQSxJQUVuREEsT0FBTztnQkFBQTRILFNBQUEsQ0FBQTlFLElBQUE7Z0JBQUE7Y0FBQTtjQUNWLElBQUksQ0FBQ25SLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDRCQUE0QixFQUFFRixLQUFLLENBQUM7Y0FBQyxPQUFBMFYsU0FBQSxDQUFBekUsTUFBQSxXQUVqRDtnQkFBQ2tCLE1BQU0sRUFBRTtjQUFjLENBQUM7WUFBQTtjQUczQjNFLEdBQUcsR0FBRyxJQUFJLENBQUM4bEIsUUFBUSxDQUFDLENBQUN4bEIsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDMUksUUFBUSxDQUFDLENBQUM7Y0FDOURtTCxRQUFRLEdBQUcsSUFBSTViLGdFQUFXLENBQUNtUCxRQUFRLENBQUMsQ0FBQztjQUNyQ212QixhQUFhLEdBQUdoa0IsK0RBQWMsQ0FBQ2MsVUFBVTtjQUUvQyxJQUFJb1gsWUFBWSxLQUFLLENBQUMsSUFBSTZMLHVCQUF1QixFQUFFO2dCQUMzQ0UsYUFBdUMsR0FBRztrQkFDOUNULFVBQVUsRUFBVkEsVUFBVTtrQkFDVlEsYUFBYSxFQUFiQSxhQUFhO2tCQUNiTSxXQUFXLEVBQUV2ekIsS0FBSztrQkFDbEJtbkIsWUFBWSxFQUFaQSxZQUFZO2tCQUNacU0saUJBQWlCLEVBQUUsSUFBSSxDQUFDYixjQUFjO2tCQUN0Q241QixJQUFJLEVBQUpBLElBQUk7a0JBQ0pra0Isb0JBQW9CLEVBQUU7b0JBQ3BCK1UsVUFBVSxFQUFWQSxVQUFVO29CQUNWZ0Isa0JBQWtCLEVBQUU7c0JBQ2xCbjJCLElBQUksRUFBRTAxQix1QkFBdUIsQ0FBQzExQixJQUFJO3NCQUNsQzBhLEdBQUcsRUFBRWdiLHVCQUF1QixDQUFDaGI7b0JBQy9CO2tCQUNGLENBQUM7a0JBQ0QwYix1QkFBdUIsRUFBRTtvQkFDdkI5MEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1o2ekIsVUFBVSxFQUFWQTtrQkFDRjtnQkFDRixDQUFDO2dCQUVEbGlCLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRXJRLElBQUksQ0FBQzhKLFNBQVMsQ0FBQzRvQixhQUFhLENBQUMsQ0FBQztjQUM1RCxDQUFDLE1BQU07Z0JBQ0NDLGdCQUE2QyxHQUFHO2tCQUNwRFYsVUFBVSxFQUFWQSxVQUFVO2tCQUNWUSxhQUFhLEVBQWJBLGFBQWE7a0JBQ2JNLFdBQVcsRUFBRXZ6QixLQUFLO2tCQUNsQm1uQixZQUFZLEVBQVpBLFlBQVk7a0JBQ1pxTSxpQkFBaUIsRUFBRSxJQUFJLENBQUNiLGNBQWM7a0JBQ3RDbjVCLElBQUksRUFBSkEsSUFBSTtrQkFDSm02QixzQkFBc0IsRUFBRTtvQkFDdEIvMEIsUUFBUSxFQUFFLEVBQUU7b0JBQ1o2ekIsVUFBVSxFQUFWQTtrQkFDRjtnQkFDRixDQUFDO2dCQUVEbGlCLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRXJRLElBQUksQ0FBQzhKLFNBQVMsQ0FBQzZvQixnQkFBZ0IsQ0FBQyxDQUFDO2NBQy9EO2NBRU1uSyxLQUFLLEdBQUc1ekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBcWdCLFNBQUEsQ0FBQS9FLElBQUE7Y0FJbEI4Z0IsT0FBc0IsR0FBRyxJQUFJO2NBQUEvYixTQUFBLENBQUE5RSxJQUFBO2NBQUEsT0FFWjBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQyxDQUNoQzdmLGdFQUFXLENBQUMwUCxLQUFLLENBQUNtSixHQUFHLEVBQUU7Z0JBQ3JCdUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJK0IsT0FBTyxDQUFXLFVBQUEyQixPQUFPO2dCQUFBLE9BQzNCd2QsT0FBTyxHQUFHOThCLGdFQUFXLENBQUMyRyxVQUFVLENBQUMsWUFBTTtrQkFDckN5aUIsTUFBSSxDQUFDdGUsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUJBQW1CLEVBQUUsSUFBSXBGLEtBQUssdUJBQUF0QyxNQUFBLENBQXVCZ1YsR0FBRyxNQUFHLENBQUMsQ0FBQztrQkFDaEZ5RyxPQUFPLENBQUM7b0JBQUM5QixNQUFNLEVBQUU7a0JBQUcsQ0FBYSxDQUFDO2dCQUNwQyxDQUFDLEVBQUU0TCxNQUFJLENBQUMyVSxRQUFRLENBQUM7Y0FBQSxFQUFDLENBQ3JCLENBQUMsQ0FDQ3pGLE9BQU8sQ0FBQyxZQUFNO2dCQUNiLElBQUl3RSxPQUFPLEVBQUU7a0JBQ1g5OEIsZ0VBQVcsQ0FBQ3FQLFlBQVksQ0FBQ3l0QixPQUFPLENBQUM7Z0JBQ25DO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FmSjJCLFlBQVksR0FBQTFkLFNBQUEsQ0FBQXhFLElBQUE7Y0FBQXdFLFNBQUEsQ0FBQTlFLElBQUE7Y0FBQTtZQUFBO2NBQUE4RSxTQUFBLENBQUEvRSxJQUFBO2NBQUErRSxTQUFBLENBQUFRLEVBQUEsR0FBQVIsU0FBQTtjQWlCWixJQUFJLENBQUNqVyxPQUFPLENBQUNTLEtBQUssQ0FBQyxtQkFBbUIsRUFBQXdWLFNBQUEsQ0FBQVEsRUFBRyxDQUFDO2NBQUMsT0FBQVIsU0FBQSxDQUFBekUsTUFBQSxXQUVwQztnQkFBQ2tCLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBcUIsR0FBRyxJQUFJLENBQUM0aEIsNEJBQTRCLENBQUNYLFlBQVksQ0FBQztjQUFBLE1BRXpFamhCLE1BQU0sS0FBSyxJQUFJO2dCQUFBdUQsU0FBQSxDQUFBOUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQThFLFNBQUEsQ0FBQXpFLE1BQUEsV0FDVjtnQkFBQ2tCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7Y0FHWDBnQixRQUFRLEdBQUd6OUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBcWdCLFNBQUEsQ0FBQTlFLElBQUE7Y0FBQSxPQUNLLElBQUksQ0FBQ29qQixvQ0FBb0MsQ0FBQ2xtQixPQUFPLEVBQUVzbEIsWUFBWSxDQUFDO1lBQUE7Y0FBMUZDLGlCQUFpQixHQUFBM2QsU0FBQSxDQUFBeEUsSUFBQTtjQUV2QixJQUFJLENBQUN6UixPQUFPLENBQUNzSixLQUFLLENBQUMsc0NBQXNDLEVBQUVzcUIsaUJBQWlCLEVBQUVSLFFBQVEsR0FBRzdKLEtBQUssQ0FBQztjQUFDLE9BQUF0VCxTQUFBLENBQUF6RSxNQUFBLFdBRXpGb2lCLGlCQUFpQjtZQUFBO1lBQUE7Y0FBQSxPQUFBM2QsU0FBQSxDQUFBdkUsSUFBQTtVQUFBO1FBQUEsR0FBQWtFLFFBQUE7TUFBQSxDQUN6QjtNQUFBLFNBNUZLNGUsT0FBT0EsQ0FBQXRXLEdBQUEsRUFBQXVXLEdBQUEsRUFBQUMsR0FBQSxFQUFBQyxHQUFBO1FBQUEsT0FBQU4sUUFBQSxDQUFBemlCLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQVBxckIsT0FBTztJQUFBO0VBQUE7SUFBQXYrQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBd25CLHFCQUFBLEdBQUFsTiw4SUFBQSxjQUFBQyw0SUFBQSxDQThGYixTQUFBa04sU0FBMkJrSyxNQUFlLEVBQUVrTSxrQkFBNkM7UUFBQSxJQUFBeFYsTUFBQTtRQUFBLElBQUF6USxHQUFBLEVBQUErQyxRQUFBLEVBQUFTLElBQUEsRUFBQWdZLEtBQUEsRUFBQW9LLFlBQUEsRUFBQTNCLE9BQUEsRUFBQXRmLE1BQUEsRUFBQTBnQixRQUFBLEVBQUF3Qiw0QkFBQTtRQUFBLE9BQUFsa0IsNElBQUEsVUFBQXFOLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBOU0sSUFBQSxHQUFBOE0sU0FBQSxDQUFBN00sSUFBQTtZQUFBO2NBQ2pGcEQsR0FBRyxHQUFHLElBQUksQ0FBQzhsQixRQUFRLENBQUMsQ0FBQy9MLE1BQU0sQ0FBQ3paLE9BQU8sRUFBRSxRQUFRLEVBQUV5WixNQUFNLENBQUMzb0IsUUFBUSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDd0csUUFBUSxDQUFDLENBQUM7Y0FDcEdtTCxRQUFRLEdBQUcsSUFBSTViLGdFQUFXLENBQUNtUCxRQUFRLENBQUMsQ0FBQztjQUNyQ2tOLElBQWtDLEdBQUc7Z0JBQ3pDeWhCLFVBQVUsRUFBVkEsVUFBVTtnQkFDVjZCLFlBQVksRUFBRS9NLE1BQU0sQ0FBQytNLFlBQVk7Z0JBQ2pDYixrQkFBa0IsRUFBRTtrQkFDbEJuMkIsSUFBSSxFQUFFbTJCLGtCQUFrQixDQUFDbjJCLElBQUk7a0JBQzdCMGEsR0FBRyxFQUFFeWIsa0JBQWtCLENBQUN6YjtnQkFDMUI7Y0FDRixDQUFDO2NBRUR6SCxRQUFRLENBQUNNLE1BQU0sQ0FBQyxVQUFVLEVBQUVyUSxJQUFJLENBQUM4SixTQUFTLENBQUMwRyxJQUFJLENBQUMsQ0FBQztjQUUzQ2dZLEtBQUssR0FBRzV6QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFvb0IsU0FBQSxDQUFBOU0sSUFBQTtjQUlsQjhnQixPQUFzQixHQUFHLElBQUk7Y0FBQWhVLFNBQUEsQ0FBQTdNLElBQUE7Y0FBQSxPQUVaMEIsT0FBTyxDQUFDa0MsSUFBSSxDQUFDLENBQ2hDN2YsZ0VBQVcsQ0FBQzBQLEtBQUssQ0FBQ21KLEdBQUcsRUFBRTtnQkFDckJ1RCxNQUFNLEVBQUUsTUFBTTtnQkFDZEMsSUFBSSxFQUFFVDtjQUNSLENBQUMsQ0FBQyxFQUNGLElBQUkrQixPQUFPLENBQVcsVUFBQTJCLE9BQU87Z0JBQUEsT0FDM0J3ZCxPQUFPLEdBQUc5OEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO2tCQUNyQzJpQixNQUFJLENBQUN4ZSxPQUFPLENBQUNTLEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJcEYsS0FBSyxzQ0FBQXRDLE1BQUEsQ0FBc0NnVixHQUFHLE1BQUcsQ0FBQyxDQUFDO2tCQUM5R3lHLE9BQU8sQ0FBQztvQkFBQzlCLE1BQU0sRUFBRTtrQkFBRyxDQUFhLENBQUM7Z0JBQ3BDLENBQUMsRUFBRThMLE1BQUksQ0FBQ3lVLFFBQVEsQ0FBQztjQUFBLEVBQUMsQ0FDckIsQ0FBQyxDQUNDekYsT0FBTyxDQUFDLFlBQU07Z0JBQ2IsSUFBSXdFLE9BQU8sRUFBRTtrQkFDWDk4QixnRUFBVyxDQUFDcVAsWUFBWSxDQUFDeXRCLE9BQU8sQ0FBQztnQkFDbkM7Y0FDRixDQUFDLENBQUM7WUFBQTtjQWZKMkIsWUFBWSxHQUFBM1YsU0FBQSxDQUFBdk0sSUFBQTtjQUFBdU0sU0FBQSxDQUFBN00sSUFBQTtjQUFBO1lBQUE7Y0FBQTZNLFNBQUEsQ0FBQTlNLElBQUE7Y0FBQThNLFNBQUEsQ0FBQXZILEVBQUEsR0FBQXVILFNBQUE7Y0FpQlosSUFBSSxDQUFDaGUsT0FBTyxDQUFDUyxLQUFLLENBQUMsa0NBQWtDLEVBQUF1ZCxTQUFBLENBQUF2SCxFQUFHLENBQUM7Y0FBQyxPQUFBdUgsU0FBQSxDQUFBeE0sTUFBQSxXQUVuRDtnQkFBQ2tCLE1BQU0sRUFBRTtjQUFRLENBQUM7WUFBQTtjQUdyQkEsTUFBa0MsR0FBRyxJQUFJLENBQUNvaUIseUNBQXlDLENBQUNuQixZQUFZLENBQUM7Y0FBQSxNQUVuR2poQixNQUFNLEtBQUssSUFBSTtnQkFBQXNMLFNBQUEsQ0FBQTdNLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUE2TSxTQUFBLENBQUF4TSxNQUFBLFdBQ1Y7Z0JBQUNrQixNQUFNLEVBQU5BO2NBQU0sQ0FBQztZQUFBO2NBR1gwZ0IsUUFBUSxHQUFHejlCLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUM7Y0FBQW9vQixTQUFBLENBQUE3TSxJQUFBO2NBQUEsT0FDZ0IsSUFBSSxDQUFDNGpCLGlEQUFpRCxDQUFDcEIsWUFBWSxDQUFDO1lBQUE7Y0FBekdpQiw0QkFBNEIsR0FBQTVXLFNBQUEsQ0FBQXZNLElBQUE7Y0FFbEMsSUFBSSxDQUFDelIsT0FBTyxDQUFDc0osS0FBSyxDQUFDLHFEQUFxRCxFQUFFc3JCLDRCQUE0QixFQUFFeEIsUUFBUSxHQUFHN0osS0FBSyxDQUFDO2NBQUMsT0FBQXZMLFNBQUEsQ0FBQXhNLE1BQUEsV0FFbkhvakIsNEJBQTRCO1lBQUE7WUFBQTtjQUFBLE9BQUE1VyxTQUFBLENBQUF0TSxJQUFBO1VBQUE7UUFBQSxHQUFBa00sUUFBQTtNQUFBLENBQ3BDO01BQUEsU0F0REtLLG9CQUFvQkEsQ0FBQStXLEdBQUEsRUFBQUMsR0FBQTtRQUFBLE9BQUF0WCxxQkFBQSxDQUFBL0wsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBcEI4VSxvQkFBb0I7SUFBQTtFQUFBO0lBQUFob0IsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQSsrQixhQUFBLEdBQUF6a0IsOElBQUEsY0FBQUMsNElBQUEsQ0F3RDFCLFNBQUE0YSxTQUNFeEQsTUFBZSxFQUNmaUIscUJBQTZCLEVBQzdCb0Isc0JBQXFDLEVBQ3JDOEcsWUFBMEIsRUFDMUJKLFdBQXdCO1FBQUEsSUFBQXRGLE1BQUE7UUFBQSxJQUFBeGQsR0FBQSxFQUFBK0MsUUFBQSxFQUFBUyxJQUFBLEVBQUFnWSxLQUFBLEVBQUFvSyxZQUFBLEVBQUEzQixPQUFBLEVBQUF0ZixNQUFBLEVBQUEwZ0IsUUFBQTtRQUFBLE9BQUExaUIsNElBQUEsVUFBQStiLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBeGIsSUFBQSxHQUFBd2IsU0FBQSxDQUFBdmIsSUFBQTtZQUFBO2NBRWxCcEQsR0FBRyxHQUFHLElBQUksQ0FBQzhsQixRQUFRLENBQUMsQ0FBQy9MLE1BQU0sQ0FBQ3paLE9BQU8sRUFBRSxRQUFRLEVBQUV5WixNQUFNLENBQUMzb0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN3RyxRQUFRLENBQUMsQ0FBQztjQUN0Rm1MLFFBQVEsR0FBRyxJQUFJNWIsZ0VBQVcsQ0FBQ21QLFFBQVEsQ0FBQyxDQUFDO2NBQ3JDa04sSUFBaUMsR0FBRztnQkFDeEN5aEIsVUFBVSxFQUFWQSxVQUFVO2dCQUNWNkIsWUFBWSxFQUFFL00sTUFBTSxDQUFDK00sWUFBWTtnQkFDakM5TCxxQkFBcUIsRUFBckJBLHFCQUFxQjtnQkFDckJvQixzQkFBc0IsRUFBdEJBLHNCQUFzQjtnQkFDdEI4RyxZQUFZLEVBQUVGLDZEQUFtQixDQUFDQyxxQ0FBcUMsQ0FBQ0MsWUFBWSxDQUFDO2dCQUNyRkosV0FBVyxFQUFFRiw0REFBa0IsQ0FBQ0MsbUNBQW1DLENBQUNDLFdBQVc7Y0FDakYsQ0FBQztjQUVEL2YsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFclEsSUFBSSxDQUFDOEosU0FBUyxDQUFDMEcsSUFBSSxDQUFDLENBQUM7Y0FFM0NnWSxLQUFLLEdBQUc1ekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBODJCLFNBQUEsQ0FBQXhiLElBQUE7Y0FJbEI4Z0IsT0FBc0IsR0FBRyxJQUFJO2NBQUF0RixTQUFBLENBQUF2YixJQUFBO2NBQUEsT0FFWjBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQyxDQUNoQzdmLGdFQUFXLENBQUMwUCxLQUFLLENBQUNtSixHQUFHLEVBQUU7Z0JBQ3JCdUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJK0IsT0FBTyxDQUFXLFVBQUEyQixPQUFPO2dCQUFBLE9BQzNCd2QsT0FBTyxHQUFHOThCLGdFQUFXLENBQUMyRyxVQUFVLENBQUMsWUFBTTtrQkFDckMwdkIsTUFBSSxDQUFDdnJCLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLG1DQUFtQyxFQUFFLElBQUlwRixLQUFLLGlDQUFBdEMsTUFBQSxDQUFpQ2dWLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQzFHeUcsT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFNlksTUFBSSxDQUFDMEgsUUFBUSxDQUFDO2NBQUEsRUFBQyxDQUNyQixDQUFDLENBQ0N6RixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0UsT0FBTyxFQUFFO2tCQUNYOThCLGdFQUFXLENBQUNxUCxZQUFZLENBQUN5dEIsT0FBTyxDQUFDO2dCQUNuQztjQUNGLENBQUMsQ0FBQztZQUFBO2NBZkoyQixZQUFZLEdBQUFqSCxTQUFBLENBQUFqYixJQUFBO2NBQUFpYixTQUFBLENBQUF2YixJQUFBO2NBQUE7WUFBQTtjQUFBdWIsU0FBQSxDQUFBeGIsSUFBQTtjQUFBd2IsU0FBQSxDQUFBalcsRUFBQSxHQUFBaVcsU0FBQTtjQWlCWixJQUFJLENBQUMxc0IsT0FBTyxDQUFDUyxLQUFLLENBQUMsbUNBQW1DLEVBQUFpc0IsU0FBQSxDQUFBalcsRUFBRyxDQUFDO2NBQUMsT0FBQWlXLFNBQUEsQ0FBQWxiLE1BQUEsV0FFcEQ7Z0JBQUNrQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQXdDLEdBQUcsSUFBSSxDQUFDeWlCLCtDQUErQyxDQUFDeEIsWUFBWSxDQUFDO2NBQzdHUCxRQUFRLEdBQUd6OUIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUUzQixJQUFJLENBQUNvSyxPQUFPLENBQUNDLElBQUksQ0FBQyxnREFBZ0QsRUFBRXlTLE1BQU0sRUFBRTBnQixRQUFRLEdBQUc3SixLQUFLLENBQUM7Y0FBQyxPQUFBbUQsU0FBQSxDQUFBbGIsTUFBQSxXQUV2RjtnQkFBQ2tCLE1BQU0sRUFBTkE7Y0FBTSxDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFnYSxTQUFBLENBQUFoYixJQUFBO1VBQUE7UUFBQSxHQUFBNFosUUFBQTtNQUFBLENBQ2hCO01BQUEsU0F0REtwQyxZQUFZQSxDQUFBa00sSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQU4sYUFBQSxDQUFBdGpCLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQVorZixZQUFZO0lBQUE7RUFBQTtJQUFBanpCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFzL0IsaUJBQUEsR0FBQWhsQiw4SUFBQSxjQUFBQyw0SUFBQSxDQXdEbEIsU0FBQW1kLFNBQXVCL0YsTUFBZSxFQUFFNE4sVUFBNkIsRUFBRUMsa0JBQTJCO1FBQUEsSUFBQTFHLE1BQUE7UUFBQSxJQUFBMVksT0FBQTtVQUFBeEksR0FBQTtVQUFBK0MsUUFBQTtVQUFBUyxJQUFBO1VBQUFnWSxLQUFBO1VBQUFvSyxZQUFBO1VBQUEzQixPQUFBO1VBQUF0ZixNQUFBO1VBQUEwZ0IsUUFBQTtVQUFBd0Msd0JBQUE7VUFBQUMsTUFBQSxHQUFBMXNCLFNBQUE7UUFBQSxPQUFBdUgsNElBQUEsVUFBQW9kLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBN2MsSUFBQSxHQUFBNmMsU0FBQSxDQUFBNWMsSUFBQTtZQUFBO2NBQUVvRixPQUFpQixHQUFBc2YsTUFBQSxDQUFBaDFCLE1BQUEsUUFBQWcxQixNQUFBLFFBQUEzNkIsU0FBQSxHQUFBMjZCLE1BQUEsTUFBRyxFQUFFO2NBQ2xIOW5CLEdBQUcsR0FBRyxJQUFJLENBQUM4bEIsUUFBUSxDQUFDLENBQUMvTCxNQUFNLENBQUN6WixPQUFPLEVBQUUsUUFBUSxFQUFFeVosTUFBTSxDQUFDM29CLFFBQVEsRUFBRSxLQUFLLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQ3dHLFFBQVEsQ0FBQyxDQUFDO2NBQ2hHbUwsUUFBUSxHQUFHLElBQUk1YixnRUFBVyxDQUFDbVAsUUFBUSxDQUFDLENBQUM7Y0FDckNrTixJQUE4QixHQUFHO2dCQUNyQ3loQixVQUFVLEVBQVZBLFVBQVU7Z0JBQ1Y2QixZQUFZLEVBQUUvTSxNQUFNLENBQUMrTSxZQUFZO2dCQUNqQ2EsVUFBVSxFQUFWQSxVQUFVO2dCQUNWQyxrQkFBa0IsRUFBbEJBLGtCQUFrQjtnQkFDbEJwZixPQUFPLEVBQVBBO2NBQ0YsQ0FBQztjQUVEekYsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFclEsSUFBSSxDQUFDOEosU0FBUyxDQUFDMEcsSUFBSSxDQUFDLENBQUM7Y0FFM0NnWSxLQUFLLEdBQUc1ekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBbTRCLFNBQUEsQ0FBQTdjLElBQUE7Y0FJbEI4Z0IsT0FBc0IsR0FBRyxJQUFJO2NBQUFqRSxTQUFBLENBQUE1YyxJQUFBO2NBQUEsT0FFWjBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQyxDQUNoQzdmLGdFQUFXLENBQUMwUCxLQUFLLENBQUNtSixHQUFHLEVBQUU7Z0JBQ3JCdUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQ7Y0FDUixDQUFDLENBQUMsRUFDRixJQUFJK0IsT0FBTyxDQUFXLFVBQUEyQixPQUFPO2dCQUFBLE9BQzNCd2QsT0FBTyxHQUFHOThCLGdFQUFXLENBQUMyRyxVQUFVLENBQUMsWUFBTTtrQkFDckNvekIsTUFBSSxDQUFDanZCLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLDhCQUE4QixFQUFFLElBQUlwRixLQUFLLGtDQUFBdEMsTUFBQSxDQUFrQ2dWLEdBQUcsTUFBRyxDQUFDLENBQUM7a0JBQ3RHeUcsT0FBTyxDQUFDO29CQUFDOUIsTUFBTSxFQUFFO2tCQUFHLENBQWEsQ0FBQztnQkFDcEMsQ0FBQyxFQUFFdWMsTUFBSSxDQUFDZ0UsUUFBUSxDQUFDO2NBQUEsRUFBQyxDQUNyQixDQUFDLENBQ0N6RixPQUFPLENBQUMsWUFBTTtnQkFDYixJQUFJd0UsT0FBTyxFQUFFO2tCQUNYOThCLGdFQUFXLENBQUNxUCxZQUFZLENBQUN5dEIsT0FBTyxDQUFDO2dCQUNuQztjQUNGLENBQUMsQ0FBQztZQUFBO2NBZkoyQixZQUFZLEdBQUE1RixTQUFBLENBQUF0YyxJQUFBO2NBQUFzYyxTQUFBLENBQUE1YyxJQUFBO2NBQUE7WUFBQTtjQUFBNGMsU0FBQSxDQUFBN2MsSUFBQTtjQUFBNmMsU0FBQSxDQUFBdFgsRUFBQSxHQUFBc1gsU0FBQTtjQWlCWixJQUFJLENBQUMvdEIsT0FBTyxDQUFDUyxLQUFLLENBQUMsOEJBQThCLEVBQUFzdEIsU0FBQSxDQUFBdFgsRUFBRyxDQUFDO2NBQUMsT0FBQXNYLFNBQUEsQ0FBQXZjLE1BQUEsV0FFL0M7Z0JBQUNrQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQThCLEdBQUcsSUFBSSxDQUFDb2pCLHFDQUFxQyxDQUFDbkMsWUFBWSxDQUFDO2NBQUEsTUFFM0ZqaEIsTUFBTSxLQUFLLElBQUk7Z0JBQUFxYixTQUFBLENBQUE1YyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBNGMsU0FBQSxDQUFBdmMsTUFBQSxXQUNWO2dCQUFDa0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMGdCLFFBQVEsR0FBR3o5QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUFtNEIsU0FBQSxDQUFBNWMsSUFBQTtjQUFBLE9BQ1ksSUFBSSxDQUFDNGtCLDZDQUE2QyxDQUFDcEMsWUFBWSxDQUFDO1lBQUE7Y0FBakdpQyx3QkFBd0IsR0FBQTdILFNBQUEsQ0FBQXRjLElBQUE7Y0FFOUIsSUFBSSxDQUFDelIsT0FBTyxDQUFDQyxJQUFJLENBQUMsaURBQWlELEVBQUUyMUIsd0JBQXdCLEVBQUV4QyxRQUFRLEdBQUc3SixLQUFLLENBQUM7Y0FBQyxPQUFBd0UsU0FBQSxDQUFBdmMsTUFBQSxXQUUxR29rQix3QkFBd0I7WUFBQTtZQUFBO2NBQUEsT0FBQTdILFNBQUEsQ0FBQXJjLElBQUE7VUFBQTtRQUFBLEdBQUFtYyxRQUFBO01BQUEsQ0FDaEM7TUFBQSxTQXJES21JLGdCQUFnQkEsQ0FBQUMsSUFBQSxFQUFBQyxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBVixpQkFBQSxDQUFBN2pCLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQWhCNnNCLGdCQUFnQjtJQUFBO0VBQUE7SUFBQS8vQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBaWdDLGNBQUEsR0FBQTNsQiw4SUFBQSxjQUFBQyw0SUFBQSxDQXVEdEIsU0FBQXVkLFNBQW9CbkcsTUFBZSxFQUFFdlUsTUFBYztRQUFBLElBQUFpYyxNQUFBO1FBQUEsSUFBQXpoQixHQUFBLEVBQUErQyxRQUFBLEVBQUFTLElBQUEsRUFBQWdZLEtBQUEsRUFBQW9LLFlBQUEsRUFBQTNCLE9BQUEsRUFBQXRmLE1BQUEsRUFBQTBnQixRQUFBLEVBQUFpRCxxQkFBQTtRQUFBLE9BQUEzbEIsNElBQUEsVUFBQXdkLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBamQsSUFBQSxHQUFBaWQsU0FBQSxDQUFBaGQsSUFBQTtZQUFBO2NBQzNDcEQsR0FBRyxHQUFHLElBQUksQ0FBQzhsQixRQUFRLENBQUMsQ0FBQy9MLE1BQU0sQ0FBQ3paLE9BQU8sRUFBRSxRQUFRLEVBQUV5WixNQUFNLENBQUMzb0IsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDLENBQUN3RyxRQUFRLENBQUMsQ0FBQztjQUN0Rm1MLFFBQVEsR0FBRyxJQUFJNWIsZ0VBQVcsQ0FBQ21QLFFBQVEsQ0FBQyxDQUFDO2NBQ3JDa04sSUFBMkIsR0FBRztnQkFDbEN5aEIsVUFBVSxFQUFWQSxVQUFVO2dCQUNWNkIsWUFBWSxFQUFFL00sTUFBTSxDQUFDK00sWUFBWTtnQkFDakN0aEIsTUFBTSxFQUFOQSxNQUFNO2dCQUNOZ0QsT0FBTyxFQUFFO2NBQ1gsQ0FBQztjQUVEekYsUUFBUSxDQUFDTSxNQUFNLENBQUMsVUFBVSxFQUFFclEsSUFBSSxDQUFDOEosU0FBUyxDQUFDMEcsSUFBSSxDQUFDLENBQUM7Y0FFM0NnWSxLQUFLLEdBQUc1ekIsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztjQUFBdTRCLFNBQUEsQ0FBQWpkLElBQUE7Y0FJbEI4Z0IsT0FBc0IsR0FBRyxJQUFJO2NBQUE3RCxTQUFBLENBQUFoZCxJQUFBO2NBQUEsT0FFWjBCLE9BQU8sQ0FBQ2tDLElBQUksQ0FBQyxDQUNoQzdmLGdFQUFXLENBQUMwUCxLQUFLLENBQUNtSixHQUFHLEVBQUU7Z0JBQ3JCdUQsTUFBTSxFQUFFLE1BQU07Z0JBQ2RDLElBQUksRUFBRVQsUUFBUTtnQkFDZDFGLEtBQUssRUFBRTtjQUNULENBQUMsQ0FBQyxFQUNGLElBQUl5SCxPQUFPLENBQVcsVUFBQTJCLE9BQU87Z0JBQUEsT0FDM0J3ZCxPQUFPLEdBQUc5OEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO2tCQUNyQzJ6QixNQUFJLENBQUN4dkIsT0FBTyxDQUFDUyxLQUFLLENBQUMscUJBQXFCLEVBQUUsSUFBSXBGLEtBQUssNkJBQUF0QyxNQUFBLENBQTZCZ1YsR0FBRyxNQUFHLENBQUMsQ0FBQztrQkFDeEZ5RyxPQUFPLENBQUM7b0JBQUM5QixNQUFNLEVBQUU7a0JBQUcsQ0FBYSxDQUFDO2dCQUNwQyxDQUFDLEVBQUU4YyxNQUFJLENBQUN5RCxRQUFRLENBQUM7Y0FBQSxFQUFDLENBQ3JCLENBQUMsQ0FDQ3pGLE9BQU8sQ0FBQyxZQUFNO2dCQUNiLElBQUl3RSxPQUFPLEVBQUU7a0JBQ1g5OEIsZ0VBQVcsQ0FBQ3FQLFlBQVksQ0FBQ3l0QixPQUFPLENBQUM7Z0JBQ25DO2NBQ0YsQ0FBQyxDQUFDO1lBQUE7Y0FoQkoyQixZQUFZLEdBQUF4RixTQUFBLENBQUExYyxJQUFBO2NBQUEwYyxTQUFBLENBQUFoZCxJQUFBO2NBQUE7WUFBQTtjQUFBZ2QsU0FBQSxDQUFBamQsSUFBQTtjQUFBaWQsU0FBQSxDQUFBMVgsRUFBQSxHQUFBMFgsU0FBQTtjQWtCWixJQUFJLENBQUNudUIsT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUEwdEIsU0FBQSxDQUFBMVgsRUFBRyxDQUFDO2NBQUMsT0FBQTBYLFNBQUEsQ0FBQTNjLE1BQUEsV0FFMUM7Z0JBQUNrQixNQUFNLEVBQUU7Y0FBUSxDQUFDO1lBQUE7Y0FHckJBLE1BQTJCLEdBQUcsSUFBSSxDQUFDNGpCLHFDQUFxQyxDQUFDM0MsWUFBWSxDQUFDO2NBQUEsTUFFeEZqaEIsTUFBTSxLQUFLLElBQUk7Z0JBQUF5YixTQUFBLENBQUFoZCxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBZ2QsU0FBQSxDQUFBM2MsTUFBQSxXQUNWO2dCQUFDa0IsTUFBTSxFQUFOQTtjQUFNLENBQUM7WUFBQTtjQUdYMGdCLFFBQVEsR0FBR3o5QixJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDO2NBQUF1NEIsU0FBQSxDQUFBaGQsSUFBQTtjQUFBLE9BQ1MsSUFBSSxDQUFDb2xCLDBDQUEwQyxDQUFDNUMsWUFBWSxDQUFDO1lBQUE7Y0FBM0YwQyxxQkFBcUIsR0FBQWxJLFNBQUEsQ0FBQTFjLElBQUE7Y0FFM0IsSUFBSSxDQUFDelIsT0FBTyxDQUFDQyxJQUFJLENBQUMsNkNBQTZDLEVBQUVvMkIscUJBQXFCLEVBQUVqRCxRQUFRLEdBQUc3SixLQUFLLENBQUM7Y0FBQyxPQUFBNEUsU0FBQSxDQUFBM2MsTUFBQSxXQUVuRzZrQixxQkFBcUI7WUFBQTtZQUFBO2NBQUEsT0FBQWxJLFNBQUEsQ0FBQXpjLElBQUE7VUFBQTtRQUFBLEdBQUF1YyxRQUFBO01BQUEsQ0FDN0I7TUFBQSxTQXJES21CLGFBQWFBLENBQUFvSCxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBTCxjQUFBLENBQUF4a0IsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBYmltQixhQUFhO0lBQUE7RUFBQTtJQUFBbjVCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUF1Z0MsdUJBQUEsR0FBQWptQiw4SUFBQSxjQUFBQyw0SUFBQSxDQXVEbkIsU0FBQW9lLFNBQTZCaEgsTUFBZSxFQUFFdlUsTUFBYztRQUFBLElBQUFqYSxVQUFBO1FBQUEsSUFBQWlYLE9BQUEsRUFBQXhDLEdBQUEsRUFBQStDLFFBQUEsRUFBQVMsSUFBQTtRQUFBLE9BQUFiLDRJQUFBLFVBQUFxZSxVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQTlkLElBQUEsR0FBQThkLFNBQUEsQ0FBQTdkLElBQUE7WUFBQTtjQUMxRCxJQUFJLEdBQUE3WCxVQUFBLEdBQUN0QixTQUFTLGNBQUFzQixVQUFBLGVBQVRBLFVBQUEsQ0FBV3E5QixVQUFVLEdBQUU7Z0JBQ3BCcG1CLE9BQU8sR0FBRyxJQUFJLENBQUM2ZSxhQUFhLENBQUN0SCxNQUFNLEVBQUV2VSxNQUFNLENBQUM7Y0FDcEQ7Y0FFTXhGLEdBQUcsR0FBRyxJQUFJLENBQUM4bEIsUUFBUSxDQUFDLENBQUMvTCxNQUFNLENBQUN6WixPQUFPLEVBQUUsUUFBUSxFQUFFeVosTUFBTSxDQUFDM29CLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDd0csUUFBUSxDQUFDLENBQUM7Y0FDdEZtTCxRQUFRLEdBQUcsSUFBSTViLGdFQUFXLENBQUNtUCxRQUFRLENBQUMsQ0FBQztjQUNyQ2tOLElBQTJCLEdBQUc7Z0JBQ2xDeWhCLFVBQVUsRUFBVkEsVUFBVTtnQkFDVjZCLFlBQVksRUFBRS9NLE1BQU0sQ0FBQytNLFlBQVk7Z0JBQ2pDdGhCLE1BQU0sRUFBTkEsTUFBTTtnQkFDTmdELE9BQU8sRUFBRTtjQUNYLENBQUM7Y0FFRHpGLFFBQVEsQ0FBQ00sTUFBTSxDQUFDLFVBQVUsRUFBRXJRLElBQUksQ0FBQzhKLFNBQVMsQ0FBQzBHLElBQUksQ0FBQyxDQUFDO2NBRWpEdlosU0FBUyxDQUFDMitCLFVBQVUsQ0FBQzVvQixHQUFHLEVBQUUrQyxRQUFRLENBQUM7WUFBQztZQUFBO2NBQUEsT0FBQWtlLFNBQUEsQ0FBQXRkLElBQUE7VUFBQTtRQUFBLEdBQUFvZCxRQUFBO01BQUEsQ0FDckM7TUFBQSxTQWpCS3pGLHNCQUFzQkEsQ0FBQXVOLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFILHVCQUFBLENBQUE5a0IsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBdEJrZ0Isc0JBQXNCO0lBQUE7RUFBQTtJQUFBcHpCLEdBQUE7SUFBQUUsS0FBQSxFQW1CNUIsU0FBUTA5QixRQUFRQSxDQUFDaUQsSUFBYyxFQUFPO01BQ3BDLElBQU10MUIsR0FBRyxHQUFHLElBQUl0TSxnRUFBVyxDQUFDK0csR0FBRyxDQUFDLElBQUksQ0FBQzYxQixJQUFJLENBQUM7TUFDMUMsSUFBTWlGLFdBQVcsR0FBR3YxQixHQUFHLENBQUN5TSxRQUFRLENBQUN6VixLQUFLLENBQUMsR0FBRyxDQUFDO01BRTNDdStCLFdBQVcsQ0FBQ2wyQixNQUFNLEdBQUdrMkIsV0FBVyxDQUFDbDJCLE1BQU0sR0FBRyxDQUFDO01BRTNDVyxHQUFHLENBQUN5TSxRQUFRLEdBQUc4b0IsV0FBVyxDQUFDaCtCLE1BQU0sQ0FBQTZZLEtBQUEsQ0FBbEJtbEIsV0FBVyxFQUFBeGtCLCtJQUFBLENBQVd1a0IsSUFBSSxFQUFDLENBQUN2VCxJQUFJLENBQUMsR0FBRyxDQUFDO01BRXBELE9BQU8vaEIsR0FBRztJQUNaO0VBQUM7SUFBQXZMLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFrOUIsWUFBWUEsQ0FBQSxFQUFXO01BQzdCLElBQU03eEIsR0FBRyxHQUFHLElBQUl0TSxnRUFBVyxDQUFDK0csR0FBRyxDQUFDLElBQUksQ0FBQzYxQixJQUFJLENBQUM7TUFDMUMsSUFBTXhoQixVQUFVLEdBQUdkLCtEQUFjLENBQUNjLFVBQVU7TUFDNUMsSUFBTXhNLFVBQVUsR0FBR04sZ0VBQVUsQ0FBQ3N2QixtQkFBbUIsQ0FBQ2h2QixVQUFVO01BRTVEdEMsR0FBRyxDQUFDdXhCLFlBQVksQ0FBQ2psQixHQUFHLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQztNQUNwQ3RNLEdBQUcsQ0FBQ3V4QixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLFNBQVMsRUFBRXdDLFVBQVUsQ0FBQztNQUMzQzlPLEdBQUcsQ0FBQ3V4QixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLFlBQVksRUFBRWhLLFVBQVUsQ0FBQztNQUM5Q3RDLEdBQUcsQ0FBQ3V4QixZQUFZLENBQUNqbEIsR0FBRyxDQUFDLEdBQUcsS0FBQS9VLE1BQUEsQ0FBS3BELElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDO01BRTFDLE9BQU80TCxHQUFHLENBQUNtRSxRQUFRLENBQUMsQ0FBQztJQUN2QjtFQUFDO0lBQUExUCxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRbStCLDRCQUE0QkEsQ0FBQ2xpQixRQUFrQixFQUFpQjtNQUN0RSxJQUFJLENBQUNBLFFBQVEsRUFBRTtRQUNiLE9BQU8sUUFBUTtNQUNqQjtNQUVBLFFBQVFBLFFBQVEsQ0FBQ00sTUFBTTtRQUNyQixLQUFLLEdBQUc7VUFDTixPQUFPLElBQUk7UUFDYixLQUFLLEdBQUc7VUFDTixPQUFPLGNBQWM7UUFDdkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxnQkFBZ0I7UUFDekIsS0FBSyxHQUFHO1VBQ04sT0FBTyxhQUFhO1FBQ3RCLEtBQUssR0FBRztVQUNOLE9BQU8sNEJBQTRCO1FBQ3JDLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLHlCQUF5QjtRQUNsQyxLQUFLLEdBQUc7VUFDTixPQUFPLGVBQWU7UUFDeEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxVQUFVO1FBQ25CLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QjtVQUNFLE9BQU8sUUFBUTtNQUNuQjtJQUNGO0VBQUM7SUFBQXpjLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVFnK0IsOEJBQThCQSxDQUFDL2hCLFFBQWtCLEVBQW1CO01BQzFFLElBQUksQ0FBQ0EsUUFBUSxFQUFFO1FBQ2IsT0FBTyxRQUFRO01BQ2pCO01BRUEsUUFBUUEsUUFBUSxDQUFDTSxNQUFNO1FBQ3JCLEtBQUssR0FBRztVQUNOLE9BQU8sSUFBSTtRQUNiLEtBQUssR0FBRztVQUNOLE9BQU8sY0FBYztRQUN2QixLQUFLLEdBQUc7VUFDTixPQUFPLGdCQUFnQjtRQUN6QixLQUFLLEdBQUc7VUFDTixPQUFPLGFBQWE7UUFDdEIsS0FBSyxHQUFHO1VBQ04sT0FBTyxTQUFTO1FBQ2xCLEtBQUssR0FBRztVQUNOLE9BQU8seUJBQXlCO1FBQ2xDLEtBQUssR0FBRztVQUNOLE9BQU8sZUFBZTtRQUN4QixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBemMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTIrQix5Q0FBeUNBLENBQUMxaUIsUUFBa0IsRUFBOEI7TUFDaEcsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNNLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBemMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWcvQiwrQ0FBK0NBLENBQUMvaUIsUUFBa0IsRUFBb0M7TUFDNUcsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNNLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBemMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUTIvQixxQ0FBcUNBLENBQUMxakIsUUFBa0IsRUFBMEI7TUFDeEYsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNNLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBemMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUW1nQyxxQ0FBcUNBLENBQUNsa0IsUUFBa0IsRUFBdUI7TUFDckYsSUFBSSxDQUFDQSxRQUFRLEVBQUU7UUFDYixPQUFPLFFBQVE7TUFDakI7TUFFQSxRQUFRQSxRQUFRLENBQUNNLE1BQU07UUFDckIsS0FBSyxHQUFHO1VBQ04sT0FBTyxJQUFJO1FBQ2IsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCLEtBQUssR0FBRztVQUNOLE9BQU8sU0FBUztRQUNsQixLQUFLLEdBQUc7VUFDTixPQUFPLFVBQVU7UUFDbkIsS0FBSyxHQUFHO1VBQ04sT0FBTyxjQUFjO1FBQ3ZCO1VBQ0UsT0FBTyxRQUFRO01BQ25CO0lBQ0Y7RUFBQztJQUFBemMsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQTZnQyx1Q0FBQSxHQUFBdm1CLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQTZlLFNBQXFEbGhCLE9BQWUsRUFBRStELFFBQWtCO1FBQUEsSUFBQTdHLElBQUEsRUFBQXFvQixpQkFBQTtRQUFBLE9BQUFsakIsNElBQUEsVUFBQWdmLFVBQUFDLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBemUsSUFBQSxHQUFBeWUsU0FBQSxDQUFBeGUsSUFBQTtZQUFBO2NBQUF3ZSxTQUFBLENBQUF4ZSxJQUFBO2NBQUEsT0FDbkVpQixRQUFRLENBQUM2a0IsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjFyQixJQUFJLEdBQUFva0IsU0FBQSxDQUFBbGUsSUFBQTtjQUNKbWlCLGlCQUF5QyxHQUFHO2dCQUFDbGhCLE1BQU0sRUFBRW5ILElBQUksQ0FBQ21IO2NBQU0sQ0FBQztjQUV2RWtoQixpQkFBaUIsQ0FBQzlMLE1BQU0sR0FBRztnQkFDekJ6WixPQUFPLEVBQVBBLE9BQU87Z0JBQ1BsUCxRQUFRLEVBQUVvTSxJQUFJLENBQUNwTSxRQUFRO2dCQUN2QjAxQixZQUFZLEVBQUV0cEIsSUFBSSxDQUFDc3BCO2NBQ3JCLENBQUM7Y0FFRGpCLGlCQUFpQixDQUFDeE0sR0FBRyxHQUFHN2IsSUFBSSxDQUFDNmIsR0FBRztjQUVoQyxJQUFJN2IsSUFBSSxFQUFFO2dCQUNSLElBQUlBLElBQUksQ0FBQzJyQixnQkFBZ0IsRUFBRTtrQkFDekJ0RCxpQkFBaUIsQ0FBQ3NELGdCQUFnQixHQUFHLElBQUksQ0FBQ0MsMENBQTBDLENBQUM1ckIsSUFBSSxDQUFDMnJCLGdCQUFnQixDQUFDO2dCQUM3RztnQkFFQSxJQUFJM3JCLElBQUksQ0FBQ3FwQiw0QkFBNEIsSUFBSXJwQixJQUFJLENBQUNxcEIsNEJBQTRCLENBQUNaLGtCQUFrQixFQUFFO2tCQUM3RkosaUJBQWlCLENBQUNnQiw0QkFBNEIsR0FBRztvQkFBQ1osa0JBQWtCLEVBQUV6b0IsSUFBSSxDQUFDcXBCLDRCQUE0QixDQUFDWjtrQkFBa0IsQ0FBQztnQkFDN0g7Z0JBRUEsSUFBSXpvQixJQUFJLENBQUM2ckIsK0JBQStCLElBQUk3ckIsSUFBSSxDQUFDNnJCLCtCQUErQixDQUFDcEQsa0JBQWtCLEVBQUU7a0JBQ25HSixpQkFBaUIsQ0FBQ3dELCtCQUErQixHQUFHO29CQUFDcEQsa0JBQWtCLEVBQUV6b0IsSUFBSSxDQUFDNnJCLCtCQUErQixDQUFDcEQ7a0JBQWtCLENBQUM7Z0JBQ25JO2dCQUVBLElBQUl6b0IsSUFBSSxDQUFDOHJCLDhCQUE4QixJQUFJOXJCLElBQUksQ0FBQzhyQiw4QkFBOEIsQ0FBQ3JELGtCQUFrQixFQUFFO2tCQUNqR0osaUJBQWlCLENBQUN5RCw4QkFBOEIsR0FBRztvQkFBQ3JELGtCQUFrQixFQUFFem9CLElBQUksQ0FBQzhyQiw4QkFBOEIsQ0FBQ3JEO2tCQUFrQixDQUFDO2dCQUNqSTtjQUNGO2NBQUMsT0FBQXJFLFNBQUEsQ0FBQW5lLE1BQUEsV0FFTW9pQixpQkFBaUI7WUFBQTtZQUFBO2NBQUEsT0FBQWpFLFNBQUEsQ0FBQWplLElBQUE7VUFBQTtRQUFBLEdBQUE2ZCxRQUFBO01BQUEsQ0FDekI7TUFBQSxTQS9CYTZFLHNDQUFzQ0EsQ0FBQWtELElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFQLHVDQUFBLENBQUFwbEIsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBdENpckIsc0NBQXNDO0lBQUE7RUFBQTtJQUFBbitCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFxaEMscUNBQUEsR0FBQS9tQiw4SUFBQSxjQUFBQyw0SUFBQSxDQWlDcEQsU0FBQSttQixVQUFtRHBwQixPQUFlLEVBQUUrRCxRQUFrQjtRQUFBLElBQUE3RyxJQUFBLEVBQUFtc0IsZUFBQTtRQUFBLE9BQUFobkIsNElBQUEsVUFBQWluQixXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTFtQixJQUFBLEdBQUEwbUIsVUFBQSxDQUFBem1CLElBQUE7WUFBQTtjQUFBeW1CLFVBQUEsQ0FBQXptQixJQUFBO2NBQUEsT0FDakVpQixRQUFRLENBQUM2a0IsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjFyQixJQUFJLEdBQUFxc0IsVUFBQSxDQUFBbm1CLElBQUE7Y0FDSmltQixlQUFxQyxHQUFHO2dCQUFDaGxCLE1BQU0sRUFBRW5ILElBQUksQ0FBQ21IO2NBQU0sQ0FBQztjQUVuRWdsQixlQUFlLENBQUM1UCxNQUFNLEdBQUc7Z0JBQ3ZCelosT0FBTyxFQUFQQSxPQUFPO2dCQUNQbFAsUUFBUSxFQUFFb00sSUFBSSxDQUFDcE0sUUFBUTtnQkFDdkIwMUIsWUFBWSxFQUFFdHBCLElBQUksQ0FBQ3NwQjtjQUNyQixDQUFDO2NBRUQsSUFBSXRwQixJQUFJLEVBQUU7Z0JBQ1IsSUFBSUEsSUFBSSxDQUFDMnJCLGdCQUFnQixFQUFFO2tCQUN6QlEsZUFBZSxDQUFDUixnQkFBZ0IsR0FBRyxJQUFJLENBQUNDLDBDQUEwQyxDQUFDNXJCLElBQUksQ0FBQzJyQixnQkFBZ0IsQ0FBQztnQkFDM0c7Z0JBRUEsSUFBSTNyQixJQUFJLENBQUNxcEIsNEJBQTRCLElBQUlycEIsSUFBSSxDQUFDcXBCLDRCQUE0QixDQUFDWixrQkFBa0IsRUFBRTtrQkFDN0YwRCxlQUFlLENBQUM5Qyw0QkFBNEIsR0FBRztvQkFBQ1osa0JBQWtCLEVBQUV6b0IsSUFBSSxDQUFDcXBCLDRCQUE0QixDQUFDWjtrQkFBa0IsQ0FBQztnQkFDM0g7Z0JBRUEsSUFBSXpvQixJQUFJLENBQUM2ckIsK0JBQStCLElBQUk3ckIsSUFBSSxDQUFDNnJCLCtCQUErQixDQUFDcEQsa0JBQWtCLEVBQUU7a0JBQ25HMEQsZUFBZSxDQUFDTiwrQkFBK0IsR0FBRztvQkFBQ3BELGtCQUFrQixFQUFFem9CLElBQUksQ0FBQzZyQiwrQkFBK0IsQ0FBQ3BEO2tCQUFrQixDQUFDO2dCQUNqSTtnQkFFQSxJQUFJem9CLElBQUksQ0FBQzhyQiw4QkFBOEIsSUFBSTlyQixJQUFJLENBQUM4ckIsOEJBQThCLENBQUNyRCxrQkFBa0IsRUFBRTtrQkFDakcwRCxlQUFlLENBQUNMLDhCQUE4QixHQUFHO29CQUFDckQsa0JBQWtCLEVBQUV6b0IsSUFBSSxDQUFDOHJCLDhCQUE4QixDQUFDckQ7a0JBQWtCLENBQUM7Z0JBQy9IO2NBQ0Y7Y0FBQyxPQUFBNEQsVUFBQSxDQUFBcG1CLE1BQUEsV0FFTWttQixlQUFlO1lBQUE7WUFBQTtjQUFBLE9BQUFFLFVBQUEsQ0FBQWxtQixJQUFBO1VBQUE7UUFBQSxHQUFBK2xCLFNBQUE7TUFBQSxDQUN2QjtNQUFBLFNBN0JhbEQsb0NBQW9DQSxDQUFBc0QsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQU4scUNBQUEsQ0FBQTVsQixLQUFBLE9BQUF6SSxTQUFBO01BQUE7TUFBQSxPQUFwQ29yQixvQ0FBb0M7SUFBQTtFQUFBO0lBQUF0K0IsR0FBQTtJQUFBRSxLQUFBLEVBK0JsRCxTQUFRZ2hDLDBDQUEwQ0EsQ0FBQ3JoQixhQUErQixFQUFvQjtNQUNwRyxJQUFNb2hCLGdCQUFrQyxHQUFHO1FBQUM3ZixVQUFVLEVBQUU7TUFBRSxDQUFDO01BRTNELElBQUl2QixhQUFhLENBQUNpaUIsWUFBWSxFQUFFO1FBQzlCYixnQkFBZ0IsQ0FBQ2EsWUFBWSxHQUFHamlCLGFBQWEsQ0FBQ2lpQixZQUFZO01BQzVEO01BRUEsSUFBSSxPQUFPamlCLGFBQWEsQ0FBQ2tpQixvQkFBb0IsS0FBSyxRQUFRLEVBQUU7UUFDMURkLGdCQUFnQixDQUFDYyxvQkFBb0IsR0FBR2xpQixhQUFhLENBQUNraUIsb0JBQW9CO01BQzVFO01BRUEsSUFBSWxpQixhQUFhLENBQUN1QixVQUFVLEVBQUU7UUFDNUIsSUFBTUEsVUFBMEIsR0FBRyxFQUFFO1FBRXJDLEtBQUssSUFBSXRELENBQUMsR0FBRyxDQUFDLEVBQUVBLENBQUMsR0FBRytCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3hXLE1BQU0sRUFBRWtULENBQUMsRUFBRSxFQUFFO1VBQ3hEc0QsVUFBVSxDQUFDeFgsSUFBSSxDQUFDO1lBQ2R5WCxJQUFJLEVBQUV4QixhQUFhLENBQUN1QixVQUFVLENBQUN0RCxDQUFDLENBQUMsQ0FBQ3VELElBQUk7WUFDdENDLFFBQVEsRUFBRXpCLGFBQWEsQ0FBQ3VCLFVBQVUsQ0FBQ3RELENBQUMsQ0FBQyxDQUFDd0QsUUFBUTtZQUM5Q0MsVUFBVSxFQUFFMUIsYUFBYSxDQUFDdUIsVUFBVSxDQUFDdEQsQ0FBQyxDQUFDLENBQUN5RDtVQUMxQyxDQUFDLENBQUM7UUFDSjtRQUVBMGYsZ0JBQWdCLENBQUM3ZixVQUFVLEdBQUdBLFVBQVU7TUFDMUM7TUFFQSxJQUFJdkIsYUFBYSxDQUFDbWlCLGtCQUFrQixFQUFFO1FBQ3BDZixnQkFBZ0IsQ0FBQ2Usa0JBQWtCLEdBQUduaUIsYUFBYSxDQUFDbWlCLGtCQUFrQjtNQUN4RTtNQUVBLElBQUluaUIsYUFBYSxDQUFDb2lCLGFBQWEsRUFBRTtRQUMvQmhCLGdCQUFnQixDQUFDZ0IsYUFBYSxHQUFHcGlCLGFBQWEsQ0FBQ29pQixhQUFhO01BQzlEO01BRUEsT0FBT2hCLGdCQUFnQjtJQUN6QjtFQUFDO0lBQUFqaEMsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWdpQyxrREFBQSxHQUFBMW5CLDhJQUFBLGNBQUFDLDRJQUFBLENBQ0QsU0FBQTBuQixVQUFnRWhtQixRQUFrQjtRQUFBLElBQUE3RyxJQUFBLEVBQUFxcEIsNEJBQUE7UUFBQSxPQUFBbGtCLDRJQUFBLFVBQUEybkIsV0FBQUMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFwbkIsSUFBQSxHQUFBb25CLFVBQUEsQ0FBQW5uQixJQUFBO1lBQUE7Y0FBQW1uQixVQUFBLENBQUFubkIsSUFBQTtjQUFBLE9BQzdEaUIsUUFBUSxDQUFDNmtCLElBQUksQ0FBQyxDQUFDO1lBQUE7Y0FBNUIxckIsSUFBSSxHQUFBK3NCLFVBQUEsQ0FBQTdtQixJQUFBO2NBQ0ptakIsNEJBQStELEdBQUc7Z0JBQUNsaUIsTUFBTSxFQUFFbkgsSUFBSSxDQUFDbUg7Y0FBTSxDQUFDO2NBRTdGLElBQUluSCxJQUFJLElBQUlBLElBQUksQ0FBQ3lvQixrQkFBa0IsRUFBRTtnQkFDbkNZLDRCQUE0QixDQUFDWixrQkFBa0IsR0FBR3pvQixJQUFJLENBQUN5b0Isa0JBQWtCO2NBQzNFO2NBQUMsT0FBQXNFLFVBQUEsQ0FBQTltQixNQUFBLFdBRU1vakIsNEJBQTRCO1lBQUE7WUFBQTtjQUFBLE9BQUEwRCxVQUFBLENBQUE1bUIsSUFBQTtVQUFBO1FBQUEsR0FBQTBtQixTQUFBO01BQUEsQ0FDcEM7TUFBQSxTQVRhckQsaURBQWlEQSxDQUFBd0QsSUFBQTtRQUFBLE9BQUFKLGtEQUFBLENBQUF2bUIsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBakQ0ckIsaURBQWlEO0lBQUE7RUFBQTtJQUFBOStCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUFxaUMsOENBQUEsR0FBQS9uQiw4SUFBQSxjQUFBQyw0SUFBQSxDQVcvRCxTQUFBK25CLFVBQTREcm1CLFFBQWtCO1FBQUEsSUFBQTdHLElBQUEsRUFBQXFxQix3QkFBQTtRQUFBLE9BQUFsbEIsNElBQUEsVUFBQWdvQixXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQXpuQixJQUFBLEdBQUF5bkIsVUFBQSxDQUFBeG5CLElBQUE7WUFBQTtjQUFBd25CLFVBQUEsQ0FBQXhuQixJQUFBO2NBQUEsT0FDekRpQixRQUFRLENBQUM2a0IsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjFyQixJQUFJLEdBQUFvdEIsVUFBQSxDQUFBbG5CLElBQUE7Y0FDSm1rQix3QkFBdUQsR0FBRztnQkFDOURsakIsTUFBTSxFQUFFbkgsSUFBSSxDQUFDbUgsTUFBTTtnQkFDbkI2RCxPQUFPLEVBQUU7Y0FDWCxDQUFDO2NBRUQsSUFBSWhMLElBQUksRUFBRTtnQkFDUixJQUFJQSxJQUFJLENBQUNnTCxPQUFPLEVBQUU7a0JBQ2hCcWYsd0JBQXdCLENBQUNyZixPQUFPLEdBQUdoTCxJQUFJLENBQUNnTCxPQUFPO2dCQUNqRDtjQUNGO2NBQUMsT0FBQW9pQixVQUFBLENBQUFubkIsTUFBQSxXQUVNb2tCLHdCQUF3QjtZQUFBO1lBQUE7Y0FBQSxPQUFBK0MsVUFBQSxDQUFBam5CLElBQUE7VUFBQTtRQUFBLEdBQUErbUIsU0FBQTtNQUFBLENBQ2hDO01BQUEsU0FkYTFDLDZDQUE2Q0EsQ0FBQTZDLElBQUE7UUFBQSxPQUFBSiw4Q0FBQSxDQUFBNW1CLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQTdDNHNCLDZDQUE2QztJQUFBO0VBQUE7SUFBQTkvQixHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBMGlDLDJDQUFBLEdBQUFwb0IsOElBQUEsY0FBQUMsNElBQUEsQ0FnQjNELFNBQUFvb0IsVUFBeUQxbUIsUUFBa0I7UUFBQSxJQUFBN0csSUFBQSxFQUFBNmpCLGFBQUE7UUFBQSxPQUFBMWUsNElBQUEsVUFBQXFvQixXQUFBQyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTluQixJQUFBLEdBQUE4bkIsVUFBQSxDQUFBN25CLElBQUE7WUFBQTtjQUFBNm5CLFVBQUEsQ0FBQTduQixJQUFBO2NBQUEsT0FDdERpQixRQUFRLENBQUM2a0IsSUFBSSxDQUFDLENBQUM7WUFBQTtjQUE1QjFyQixJQUFJLEdBQUF5dEIsVUFBQSxDQUFBdm5CLElBQUE7Y0FDSjJkLGFBQXlDLEdBQUc7Z0JBQUMxYyxNQUFNLEVBQUVuSCxJQUFJLENBQUNtSDtjQUFNLENBQUM7Y0FBQSxPQUFBc21CLFVBQUEsQ0FBQXhuQixNQUFBLFdBRWhFNGQsYUFBYTtZQUFBO1lBQUE7Y0FBQSxPQUFBNEosVUFBQSxDQUFBdG5CLElBQUE7VUFBQTtRQUFBLEdBQUFvbkIsU0FBQTtNQUFBLENBQ3JCO01BQUEsU0FMYXZDLDBDQUEwQ0EsQ0FBQTBDLElBQUE7UUFBQSxPQUFBSiwyQ0FBQSxDQUFBam5CLEtBQUEsT0FBQXpJLFNBQUE7TUFBQTtNQUFBLE9BQTFDb3RCLDBDQUEwQztJQUFBO0VBQUE7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDdDFCMUQ7QUFDQTtBQUNBO0FBQ3dEO0FBRVQ7QUFDQTtBQUNRO0FBQ0E7QUFDSDtBQUNBO0FBS047QUFDc0I7QUFBQSxJQUUvQzhDLGFBQWE7RUFTaEMsU0FBQUEsY0FBWUMsY0FBYyxFQUFFQyx5QkFBb0QsRUFBRWxNLG1CQUF3QyxFQUFFO0lBQUE1M0IsNElBQUEsT0FBQTRqQyxhQUFBO0lBQUEzakMsNElBQUEsa0JBUnhGaUosNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGVBQWUsQ0FBQztJQUFBcEosNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUEsOEJBR3JDLElBQUlOLDREQUFjLENBQUMsQ0FBQztJQUFBTSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQSwrQkFHNUIsQ0FBQztJQUc5QixJQUFJLENBQUM0dkIsZUFBZSxHQUFHZ1UsY0FBYztJQUNyQyxJQUFJLENBQUNFLDBCQUEwQixHQUFHRCx5QkFBeUI7SUFDM0QsSUFBSSxDQUFDMUssb0JBQW9CLEdBQUd4QixtQkFBbUI7SUFDL0MsSUFBSSxDQUFDL0gsZUFBZSxDQUFDMEUsV0FBVyxDQUFDbnpCLEdBQUcsQ0FBQyxJQUFJLENBQUM7RUFDNUM7RUFBQyxPQUFBYix5SUFBQSxDQUFBcWpDLGFBQUE7SUFBQXBqQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb3pCLEtBQUtBLENBQUMvbkIsR0FBUSxFQUFFakIsS0FBYSxFQUErQjtNQUFBLElBQUEvSixLQUFBO01BQzFELE9BQU84dEIsNERBQVMsQ0FBQytNLGtDQUFrQyxDQUFDN3ZCLEdBQUcsQ0FBQyxDQUNyRDJRLElBQUksQ0FBQyxVQUFBeVYsUUFBUSxFQUFJO1FBQ2hCcHhCLEtBQUksQ0FBQzh1QixlQUFlLENBQUNtQixNQUFNLENBQUN0d0IsS0FBSyxHQUFHLElBQUk7UUFDeENLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNzQyxRQUFRLENBQUN6eEIsS0FBSyxHQUFHeXhCLFFBQVE7UUFDOUNweEIsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsb0JBQW9CLEVBQUUybkIsUUFBUSxDQUFDamlCLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFNUQsT0FBT2lpQixRQUFRLENBQUN6SSxTQUFTLENBQUM1ZSxLQUFLLEVBQUUsSUFBSSxFQUFFL0osS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ3Z4QixLQUFLLENBQUM7TUFDakYsQ0FBQyxDQUFDLENBQ0RnYyxJQUFJLENBQUMsVUFBQWxWLElBQUEsRUFBMkQ7UUFBQSxJQUF6RHlWLE1BQU0sR0FBQXpWLElBQUEsQ0FBTnlWLE1BQU07VUFBRW9WLE1BQU0sR0FBQTdxQixJQUFBLENBQU42cUIsTUFBTTtVQUFFdVAsOEJBQThCLEdBQUFwNkIsSUFBQSxDQUE5Qm82Qiw4QkFBOEI7VUFBRWpRLEdBQUcsR0FBQW5xQixJQUFBLENBQUhtcUIsR0FBRztRQUN6RDV3QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDd0MsTUFBTSxDQUFDM3hCLEtBQUssR0FBRzJ4QixNQUFNO1FBQzFDdHhCLEtBQUksQ0FBQzh1QixlQUFlLENBQUM4QixHQUFHLENBQUNqeEIsS0FBSyxHQUFHaXhCLEdBQUc7UUFFcEM1d0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2tMLDZDQUE2QyxDQUFDLENBQUM7UUFFcEVoNkIsS0FBSSxDQUFDd0osT0FBTyxDQUFDc0osS0FBSyxDQUNoQixtREFBbUQsRUFDbkQ5UyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFDN0J1VCxNQUFNLEVBQ04ya0IsOEJBQ0YsQ0FBQztRQUVEN2dDLEtBQUksQ0FBQzh1QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUdLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNtTCxpQ0FBaUMsQ0FBQy9kLE1BQU0sQ0FBQztRQUVqR2xjLEtBQUksQ0FBQzh1QixlQUFlLENBQUNpTCxXQUFXLENBQUM3ZCxNQUFNLENBQUM7UUFFeEMsSUFBSUEsTUFBTSxLQUFLLElBQUksRUFBRTtVQUNuQjtRQUNGO1FBRUEsSUFBTSttQixRQUFRLEdBQUdwQyw4QkFBOEIsQ0FBQ3JELGtCQUFrQixDQUFDemIsR0FBRztRQUN0RSxJQUFNaEMsT0FBTyxHQUFHO1VBQ2RtakIsZUFBZSxFQUFFL2pDLElBQUksQ0FBQ0MsR0FBRyxDQUFDLENBQUMsR0FBR3d4QixHQUFHLEdBQUc1d0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLENBQUNzakIsYUFBYSxHQUFHLENBQUM7VUFDekYyTixHQUFHLEVBQUhBO1FBQ0YsQ0FBQztRQUVELE9BQU84UiwrREFBZ0IsQ0FBQzNQLEtBQUssQ0FBQy95QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxFQUFFSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRXM2QixRQUFRLEVBQUVsakIsT0FBTyxDQUFDLENBQ3JIcEUsSUFBSSxDQUFDLFVBQUF3bkIsTUFBTSxFQUFJO1VBQ2RuakMsS0FBSSxDQUFDb2pDLE9BQU8sQ0FBQ0QsTUFBTSxDQUFDO1VBRXBCLE9BQU9BLE1BQU07UUFDZixDQUFDLENBQUMsQ0FDRGxuQixLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtVQUNWekssS0FBSSxDQUFDd0osT0FBTyxDQUFDUyxLQUFLLENBQUMseUJBQXlCLEVBQUVRLENBQUMsQ0FBQztVQUNoRHpLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7VUFDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7VUFDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsOERBQVksQ0FBQytFLE9BQU87UUFDekQsQ0FBQyxDQUFDO01BQ04sQ0FBQyxDQUFDO0lBQ047RUFBQztJQUFBenlCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQVF5akMsT0FBT0EsQ0FBQ0QsTUFBbUIsRUFBUTtNQUFBLElBQUFudkIsTUFBQTtNQUN6QyxJQUFJLENBQUNxdkIsbUJBQW1CLENBQUN2akMsT0FBTyxDQUFDLENBQUM7TUFFbEMsSUFBTTA3QixPQUFPLEdBQUc5OEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO1FBQzNDLElBQU1pK0IsbUJBQW1CLEdBQUdaLCtEQUFnQixDQUFDNWYsUUFBUSxDQUFDLENBQUM7UUFFdkQsSUFBSTlPLE1BQUksQ0FBQ2d2QiwwQkFBMEIsS0FBS0osbUVBQXlCLENBQUNXLElBQUksSUFDL0RELG1CQUFtQixDQUFDRSxZQUFZLEtBQUtiLDBEQUFhLENBQUNjLGVBQWUsSUFDbEV6dkIsTUFBSSxDQUFDOGEsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxDQUFDK2pDLFdBQVcsS0FBSzF2QixNQUFJLENBQUM4YSxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNna0MsUUFBUSxFQUM3RztVQUNBM3ZCLE1BQUksQ0FBQzR2QixvQkFBb0IsR0FBRyxDQUFDO1VBQzdCNXZCLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0Qiw4REFBWSxDQUFDaUwsZUFBZTtVQUUvRHBrQixNQUFJLENBQUM4YSxlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7VUFDMUNxVSxNQUFJLENBQUM4YSxlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLElBQUk7VUFDekN3akMsTUFBTSxDQUFDcmpDLE9BQU8sQ0FBQyxDQUFDO1VBQ2hCa1UsTUFBSSxDQUFDcXZCLG1CQUFtQixDQUFDdmpDLE9BQU8sQ0FBQyxDQUFDO1VBRWxDLElBQU1pYSxPQUFPLEdBQUcvRixNQUFJLENBQUNxa0Isb0JBQW9CLENBQUMsQ0FBQyxDQUN4Q3BjLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO1lBQ1Z1SixNQUFJLENBQUN4SyxPQUFPLENBQUNTLEtBQUssQ0FBQywrQkFBK0IsRUFBRVEsQ0FBQyxDQUFDO1VBQ3hELENBQUMsQ0FBQztVQUVKO1FBQ0Y7UUFFQSxJQUFJdUosTUFBSSxDQUFDNnZCLGlCQUFpQixJQUN4QixDQUFDN3ZCLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ21rQyxNQUFNLElBQy9DOXZCLE1BQUksQ0FBQzZ2QixpQkFBaUIsQ0FBQ0gsV0FBVyxJQUFJSixtQkFBbUIsQ0FBQ0ksV0FBVyxLQUNsRTF2QixNQUFJLENBQUM2dkIsaUJBQWlCLENBQUNFLFlBQVksSUFBSVQsbUJBQW1CLENBQUNTLFlBQVksSUFBSSxDQUFDVCxtQkFBbUIsQ0FBQ1MsWUFBWSxDQUFDLEVBQ2hIO1VBQ0EvdkIsTUFBSSxDQUFDNHZCLG9CQUFvQixFQUFFO1VBRTNCLElBQUk1dkIsTUFBSSxDQUFDNHZCLG9CQUFvQixHQUFHLENBQUMsRUFBRTtZQUNqQzV2QixNQUFJLENBQUM0dkIsb0JBQW9CLEdBQUcsQ0FBQztZQUM3QjV2QixNQUFJLENBQUM4YSxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsOERBQVksQ0FBQ2lMLGVBQWU7WUFFL0Rwa0IsTUFBSSxDQUFDOGEsZUFBZSxDQUFDdUIsT0FBTyxDQUFDMXdCLEtBQUssR0FBRyxLQUFLO1lBQzFDcVUsTUFBSSxDQUFDOGEsZUFBZSxDQUFDcUIsT0FBTyxDQUFDeHdCLEtBQUssR0FBRyxJQUFJO1lBQ3pDd2pDLE1BQU0sQ0FBQ3JqQyxPQUFPLENBQUMsQ0FBQztZQUNoQmtVLE1BQUksQ0FBQ3F2QixtQkFBbUIsQ0FBQ3ZqQyxPQUFPLENBQUMsQ0FBQztZQUVsQyxJQUFNaWEsUUFBTyxHQUFHL0YsTUFBSSxDQUFDcWtCLG9CQUFvQixDQUFDLENBQUMsQ0FDeENwYyxLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtjQUNWdUosTUFBSSxDQUFDeEssT0FBTyxDQUFDUyxLQUFLLENBQUMsZ0NBQWdDLEVBQUVRLENBQUMsQ0FBQztZQUN6RCxDQUFDLENBQUM7WUFFSjtVQUNGO1FBQ0YsQ0FBQyxNQUFNO1VBQ0x1SixNQUFJLENBQUM0dkIsb0JBQW9CLEdBQUcsQ0FBQztRQUMvQjtRQUVBLElBQUk1dkIsTUFBSSxDQUFDOGEsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxDQUFDbWtDLE1BQU0sSUFBSTl2QixNQUFJLENBQUM4YSxlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEtBQUt3dEIsOERBQVksQ0FBQ2tGLE9BQU8sRUFBRTtVQUMvR3JlLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0Qiw4REFBWSxDQUFDOEssTUFBTTtRQUN4RDtRQUVBLElBQUksQ0FBQ2prQixNQUFJLENBQUM4YSxlQUFlLENBQUNYLFlBQVksQ0FBQ3h1QixLQUFLLENBQUNta0MsTUFBTSxJQUFJOXZCLE1BQUksQ0FBQzhhLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssS0FBS3d0Qiw4REFBWSxDQUFDa0YsT0FBTyxFQUFFO1VBQ2hIcmUsTUFBSSxDQUFDOGEsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHd3RCLDhEQUFZLENBQUNrRixPQUFPO1FBQ3pEO1FBRUFyZSxNQUFJLENBQUM2dkIsaUJBQWlCLEdBQUdQLG1CQUFtQjtRQUU1Q3R2QixNQUFJLENBQUNvdkIsT0FBTyxDQUFDRCxNQUFNLENBQUM7TUFDdEIsQ0FBQyxFQUFFLElBQUksQ0FBQztNQUVSLElBQUksQ0FBQ0UsbUJBQW1CLENBQUNoakMsR0FBRyxDQUFDLElBQUkxQix3REFBVSxDQUFDLFlBQU07UUFDaERELGdFQUFXLENBQUNxUCxZQUFZLENBQUN5dEIsT0FBTyxDQUFDO01BQ25DLENBQUMsQ0FBQyxDQUFDO0lBQ0w7RUFBQztJQUFBLzdCLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLE9BQU9BLENBQUEsRUFBUztNQUNkLElBQUksQ0FBQ3VqQyxtQkFBbUIsQ0FBQ3ZqQyxPQUFPLENBQUMsQ0FBQztJQUNwQztFQUFDO0FBQUE7Ozs7Ozs7Ozs7OztBQzlKSDtBQUNBO0FBQ0E7QUFGQSxJQUdLOGlDLHlCQUF5QiwwQkFBekJBLHlCQUF5QjtFQUF6QkEseUJBQXlCLENBQXpCQSx5QkFBeUI7RUFBekJBLHlCQUF5QixDQUF6QkEseUJBQXlCO0VBQUEsT0FBekJBLHlCQUF5QjtBQUFBLEVBQXpCQSx5QkFBeUI7QUFLOUIsK0RBQWVBLHlCQUF5Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ1J4QztBQUNBO0FBQ0E7QUFDb0U7QUFDaEM7QUFDWDtBQUNlO0FBQ0o7QUFJN0IsSUFBTUYsZ0JBQWdCO0VBQUEsU0FBQUEsaUJBQUE7SUFBQXpqQyw0SUFBQSxPQUFBeWpDLGdCQUFBO0VBQUE7RUFBQSxPQUFBbGpDLHlJQUFBLENBQUFrakMsZ0JBQUE7SUFBQWpqQyxHQUFBO0lBQUFDLEdBQUEsRUFRM0IsU0FBQUEsSUFBQSxFQUFzQztNQUNwQyxPQUFPLElBQUksQ0FBQ3lrQyxVQUFVO0lBQ3hCO0VBQUM7SUFBQTFrQyxHQUFBO0lBQUFDLEdBQUEsRUFFRCxTQUFBQSxJQUFBLEVBQTRDO01BQzFDLE9BQU8sSUFBSSxDQUFDMGtDLGdCQUFnQjtJQUM5QjtFQUFDO0lBQUEza0MsR0FBQTtJQUFBQyxHQUFBLEVBRUQsU0FBQUEsSUFBQSxFQUE4QjtNQUM1QixPQUFPLElBQUksQ0FBQzJrQyxNQUFNO0lBQ3BCO0VBQUM7SUFBQTVrQyxHQUFBO0lBQUFFLEtBQUE7TUFBQSxJQUFBZzFCLE1BQUEsR0FBQTFhLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQUUsUUFBbUIrVCxZQUE4QixFQUFFeGxCLFFBQWdCLEVBQUVzNkIsUUFBZ0IsRUFBRWxqQixPQUFnQztRQUFBLElBQUEvZixLQUFBO1FBQUEsT0FBQWthLDRJQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQ3JILElBQUksQ0FBQzJwQixRQUFRLEdBQUd2a0IsT0FBTztjQUFDLE1BRXBCLElBQUksQ0FBQ29rQixVQUFVLElBQUksSUFBSSxDQUFDRSxNQUFNLElBQUksSUFBSSxDQUFDRCxnQkFBZ0I7Z0JBQUEzcEIsUUFBQSxDQUFBRSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBRixRQUFBLENBQUFPLE1BQUEsV0FDbEQsSUFBSSxDQUFDdXBCLE1BQU0sQ0FBQ3BXLFlBQVksRUFBRXhsQixRQUFRLEVBQUVzNkIsUUFBUSxDQUFDO1lBQUE7Y0FBQSxNQUdsRCxDQUFDLzZCLDRDQUFHLENBQUNva0IsZUFBZSxJQUFJLENBQUNwa0IsNENBQUcsQ0FBQ3FrQixpQkFBaUIsSUFBSSxDQUFDcmtCLDRDQUFHLENBQUNza0IsV0FBVztnQkFBQS9SLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDOUQsSUFBSTlWLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQztZQUFBO2NBQUEsT0FBQTRWLFFBQUEsQ0FBQU8sTUFBQSxXQUdwRCxJQUFJcUIsT0FBTyxDQUFDLFVBQUEyQixPQUFPLEVBQUk7Z0JBQzVCLElBQUk5Viw0Q0FBRyxDQUFDc2tCLFdBQVcsRUFBRTtrQkFDbkJ4c0IsS0FBSSxDQUFDd2tDLFFBQVEsR0FBRyxJQUFJO2tCQUNwQnQ4Qiw0Q0FBRyxDQUFDc2tCLFdBQVcsQ0FBQyxVQUFBMlcsTUFBTSxFQUFJO29CQUN4Qm5qQyxLQUFJLENBQUNta0MsVUFBVSxHQUFHaEIsTUFBTTtvQkFFeEIsSUFBSW5qQyxLQUFJLENBQUN3a0MsUUFBUSxFQUFFO3NCQUNqQnhrQyxLQUFJLENBQUN3a0MsUUFBUSxHQUFHLEtBQUs7c0JBRXJCeG1CLE9BQU8sQ0FBQ2hlLEtBQUksQ0FBQ3VrQyxNQUFNLENBQUNwVyxZQUFZLEVBQUV4bEIsUUFBUSxFQUFFczZCLFFBQVEsQ0FBQyxDQUFDO29CQUN4RDtrQkFDRixDQUFDLENBQUM7Z0JBQ0o7Z0JBRUEsSUFBSS82Qiw0Q0FBRyxDQUFDb2tCLGVBQWUsRUFBRTtrQkFDdkJ0c0IsS0FBSSxDQUFDd2tDLFFBQVEsR0FBRyxJQUFJO2tCQUNwQnQ4Qiw0Q0FBRyxDQUFDb2tCLGVBQWUsQ0FBQyxVQUFBNlcsTUFBTSxFQUFJO29CQUM1Qm5qQyxLQUFJLENBQUNva0MsZ0JBQWdCLEdBQUdqQixNQUFNO29CQUU5QixJQUFJbmpDLEtBQUksQ0FBQ3drQyxRQUFRLEVBQUU7c0JBQ2pCeGtDLEtBQUksQ0FBQ3drQyxRQUFRLEdBQUcsS0FBSztzQkFFckJ4bUIsT0FBTyxDQUFDaGUsS0FBSSxDQUFDdWtDLE1BQU0sQ0FBQ3BXLFlBQVksRUFBRXhsQixRQUFRLEVBQUVzNkIsUUFBUSxDQUFDLENBQUM7b0JBQ3hEO2tCQUNGLENBQUMsQ0FBQztnQkFDSjtnQkFFQSxJQUFJLzZCLDRDQUFHLENBQUNxa0IsaUJBQWlCLEVBQUU7a0JBQ3pCdnNCLEtBQUksQ0FBQ3drQyxRQUFRLEdBQUcsSUFBSTtrQkFDcEJ0OEIsNENBQUcsQ0FBQ3FrQixpQkFBaUIsQ0FBQyxVQUFBNFcsTUFBTSxFQUFJO29CQUM5Qm5qQyxLQUFJLENBQUNxa0MsTUFBTSxHQUFHbEIsTUFBTTtvQkFFcEIsSUFBSW5qQyxLQUFJLENBQUN3a0MsUUFBUSxFQUFFO3NCQUNqQnhrQyxLQUFJLENBQUN3a0MsUUFBUSxHQUFHLEtBQUs7c0JBRXJCeG1CLE9BQU8sQ0FBQ2hlLEtBQUksQ0FBQ3VrQyxNQUFNLENBQUNwVyxZQUFZLEVBQUV4bEIsUUFBUSxFQUFFczZCLFFBQVEsQ0FBQyxDQUFDO29CQUN4RDtrQkFDRixDQUFDLENBQUM7Z0JBQ0o7Y0FDRixDQUFDLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXhvQixRQUFBLENBQUFTLElBQUE7VUFBQTtRQUFBLEdBQUFkLE9BQUE7TUFBQSxDQUNIO01BQUEsU0FuRFkyWSxLQUFLQSxDQUFBNVgsRUFBQSxFQUFBMEwsR0FBQSxFQUFBSyxHQUFBLEVBQUFRLEdBQUE7UUFBQSxPQUFBaU4sTUFBQSxDQUFBdlosS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBTG9nQixLQUFLO0lBQUE7RUFBQTtJQUFBdHpCLEdBQUE7SUFBQUUsS0FBQSxFQXFEbEIsU0FBT21qQixRQUFRQSxDQUFBLEVBQStCO01BQzVDLElBQUksSUFBSSxDQUFDMmhCLE9BQU8sRUFBRTtRQUNoQixPQUFPLElBQUksQ0FBQ0EsT0FBTyxDQUFDM2hCLFFBQVEsQ0FBQyxDQUFDO01BQ2hDO01BRUEsT0FBTyxJQUFJO0lBQ2I7RUFBQztJQUFBcmpCLEdBQUE7SUFBQUUsS0FBQTtNQUFBLElBQUE2M0IsS0FBQSxHQUFBdmQsOElBQUEsY0FBQUMsNElBQUEsQ0FFRCxTQUFBb0IsU0FBMEJvcEIsTUFBZ0UsRUFBRXZXLFlBQThCLEVBQUV4bEIsUUFBZ0IsRUFBRXM2QixRQUFnQixFQUFFbGpCLE9BQWdDO1FBQUEsSUFBQTRrQixvQkFBQSxFQUFBQyxtQkFBQSxFQUFBQyxXQUFBLEVBQUFDLFdBQUE7UUFBQSxPQUFBNXFCLDRJQUFBLFVBQUFxQixVQUFBQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7WUFBQTtjQUN4TGdxQixvQkFBb0IsR0FBRzFCLFFBQVEsQ0FBQ3RoQyxLQUFLLENBQUMsdUNBQXVDLENBQUM7Y0FDOUVpakMsbUJBQW1CLEdBQUczQixRQUFRLENBQUN0aEMsS0FBSyxDQUFDLHdDQUF3QyxDQUFDO2NBQzlFa2pDLFdBQVcsR0FBR0Ysb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxHQUFHQSxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO2NBQzVGRyxXQUFXLEdBQUdGLG1CQUFtQixJQUFJQSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsR0FBR0EsbUJBQW1CLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRTtjQUFBLEtBRTNGRSxXQUFXO2dCQUFBdHBCLFNBQUEsQ0FBQWIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDVCxDQUFDLElBQUksQ0FBQ3lwQixnQkFBZ0IsSUFBSXovQixzRUFBaUIsQ0FBQ29nQyxrQkFBa0I7Z0JBQUF2cEIsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FDaEUsSUFBSSxDQUFDOHBCLE9BQU8sR0FBRyxJQUFJQyxNQUFNLENBQUN2VyxZQUFZLEVBQUUsS0FBSyxFQUFFeGxCLFFBQVEsRUFBRW04QixXQUFXLEVBQUUva0IsT0FBTyxDQUFDO2NBRTlFLElBQUksQ0FBQzBrQixPQUFPLENBQUMxUixLQUFLLENBQUMsQ0FBQztjQUFDLE9BQUF2WCxTQUFBLENBQUFSLE1BQUEsV0FFZCxJQUFJLENBQUN5cEIsT0FBTztZQUFBO2NBQUEsS0FJbkJJLFdBQVc7Z0JBQUFycEIsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNULENBQUMsSUFBSSxDQUFDd3BCLFVBQVUsSUFBSSxFQUFFLElBQUksQ0FBQ0MsZ0JBQWdCLElBQUl6L0Isc0VBQWlCLENBQUNvZ0Msa0JBQWtCLENBQUM7Z0JBQUF2cEIsU0FBQSxDQUFBYixJQUFBO2dCQUFBO2NBQUE7Y0FDdEYsSUFBSSxDQUFDOHBCLE9BQU8sR0FBRyxJQUFJQyxNQUFNLENBQUN2VyxZQUFZLEVBQUUsTUFBTSxFQUFFeGxCLFFBQVEsRUFBRWs4QixXQUFXLEVBQUU5a0IsT0FBTyxDQUFDO2NBRS9FLElBQUksQ0FBQzBrQixPQUFPLENBQUMxUixLQUFLLENBQUMsQ0FBQztjQUFDLE9BQUF2WCxTQUFBLENBQUFSLE1BQUEsV0FFZCxJQUFJLENBQUN5cEIsT0FBTztZQUFBO2NBQUEsTUFJbkJJLFdBQVcsSUFBSUMsV0FBVztnQkFBQXRwQixTQUFBLENBQUFiLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ3RCLElBQUk5VixLQUFLLEtBQUF0QyxNQUFBLENBQUtvRyxRQUFRLHFCQUFBcEcsTUFBQSxDQUFrQnVpQyxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sa0NBQStCLENBQUM7WUFBQTtjQUFBLE1BR3RHLElBQUlqZ0MsS0FBSyxDQUFDLDBCQUEwQixDQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEyVyxTQUFBLENBQUFOLElBQUE7VUFBQTtRQUFBLEdBQUFJLFFBQUE7TUFBQSxDQUM1QztNQUFBLFNBL0JvQnNjLElBQUlBLENBQUFxRyxHQUFBLEVBQUFDLEdBQUEsRUFBQUMsR0FBQSxFQUFBSyxHQUFBLEVBQUFDLEdBQUE7UUFBQSxPQUFBakgsS0FBQSxDQUFBcGMsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBSmlsQixJQUFJO0lBQUE7RUFBQTtJQUFBbjRCLEdBQUE7SUFBQUUsS0FBQSxFQWlDekIsU0FBZTRrQyxNQUFNQSxDQUFDcFcsWUFBOEIsRUFBRXhsQixRQUFnQixFQUFFczZCLFFBQWdCLEVBQXdCO01BQzlHLElBQUksQ0FBQyxJQUFJLENBQUNvQixNQUFNLElBQUksQ0FBQyxJQUFJLENBQUNELGdCQUFnQixJQUFJLENBQUMsSUFBSSxDQUFDRCxVQUFVLEVBQUU7UUFDOUQ7TUFDRjtNQUVBLElBQUksSUFBSSxDQUFDQSxVQUFVLEVBQUU7UUFDbkIsT0FBTyxJQUFJLENBQUN2TSxJQUFJLENBQUNzTSxrREFBUyxFQUFFL1YsWUFBWSxFQUFFeGxCLFFBQVEsRUFBRXM2QixRQUFRLEVBQUErQixhQUFBLENBQUFBLGFBQUEsS0FDdkQsSUFBSSxDQUFDVixRQUFRO1VBQ2hCVyxZQUFZLEVBQUV0Z0Msc0VBQWlCLENBQUNvZ0M7UUFBa0IsRUFDbkQsQ0FBQztNQUNKO01BRUEsSUFBSSxJQUFJLENBQUNYLGdCQUFnQixFQUFFO1FBQ3pCLE9BQU8sSUFBSSxDQUFDeE0sSUFBSSxDQUFDb00sa0RBQVMsRUFBRTdWLFlBQVksRUFBRXhsQixRQUFRLEVBQUVzNkIsUUFBUSxFQUFBK0IsYUFBQSxDQUFBQSxhQUFBLEtBQ3ZELElBQUksQ0FBQ1YsUUFBUTtVQUNoQlcsWUFBWSxFQUFFdGdDLHNFQUFpQixDQUFDb2dDO1FBQWtCLEVBQ25ELENBQUM7TUFDSjtNQUVBLElBQUksSUFBSSxDQUFDVixNQUFNLEVBQUU7UUFDZixPQUFPLElBQUksQ0FBQ3pNLElBQUksQ0FBQ3FNLG9EQUFXLEVBQUU5VixZQUFZLEVBQUV4bEIsUUFBUSxFQUFFczZCLFFBQVEsRUFBQStCLGFBQUEsQ0FBQUEsYUFBQSxLQUN6RCxJQUFJLENBQUNWLFFBQVE7VUFDaEJXLFlBQVksRUFBRXRnQyxzRUFBaUIsQ0FBQ29nQztRQUFrQixFQUNuRCxDQUFDO01BQ0o7SUFDRjtFQUFDO0FBQUE7QUFDRjdsQyw0SUFBQSxDQTVJWXdqQyxnQkFBZ0IsY0FDRCxLQUFLO0FBQUF4akMsNElBQUEsQ0FEcEJ3akMsZ0JBQWdCO0FBQUF4akMsNElBQUEsQ0FBaEJ3akMsZ0JBQWdCO0FBQUF4akMsNElBQUEsQ0FBaEJ3akMsZ0JBQWdCO0FBQUF4akMsNElBQUEsQ0FBaEJ3akMsZ0JBQWdCO0FBQUF4akMsNElBQUEsQ0FBaEJ3akMsZ0JBQWdCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWDdCO0FBQ0E7QUFDQTtBQUNvRDtBQUdOO0FBQUEsSUFFekJ3QixTQUFTO0VBUTVCLFNBQUFBLFVBQVkvVixZQUE4QixFQUFFMVUsSUFBWSxFQUFFOVEsUUFBZ0IsRUFBRXU4QixXQUFtQixFQUFFbmxCLE9BQWdDLEVBQUU7SUFBQTlnQiw0SUFBQSxPQUFBaWxDLFNBQUE7SUFBQWhsQyw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUFBQSw0SUFBQTtJQUNqSSxJQUFJLENBQUNpbUMsYUFBYSxHQUFHaFgsWUFBWTtJQUNqQyxJQUFJLENBQUNpWCxLQUFLLEdBQUczckIsSUFBSTtJQUNqQixJQUFJLENBQUM0ckIsU0FBUyxHQUFHMThCLFFBQVE7SUFDekIsSUFBSSxDQUFDMjhCLFlBQVksR0FBR0MsU0FBUyxDQUFDTCxXQUFXLENBQUMsQ0FBQ00sT0FBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUM7SUFDakUsSUFBSSxDQUFDbEIsUUFBUSxHQUFHdmtCLE9BQU87RUFDekI7RUFBQyxPQUFBdmdCLHlJQUFBLENBQUEwa0MsU0FBQTtJQUFBemtDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvekIsS0FBS0EsQ0FBQSxFQUFTO01BQ1osSUFBSTJQLCtEQUFnQixDQUFDK0MsU0FBUyxFQUFFO1FBQzlCLElBQUkvQywrREFBZ0IsQ0FBQytDLFNBQVMsQ0FBQ3gvQixXQUFXLENBQUMsQ0FBQyxFQUFFO1VBQzVDLElBQUksQ0FBQ3crQixPQUFPLEdBQUcsSUFBSS9CLCtEQUFnQixDQUFDK0MsU0FBUyxDQUFDO1lBQzVDQyxZQUFZLEVBQUUsSUFBSTtZQUNsQkMsZUFBZSxFQUFFLENBQUM7WUFDbEJDLGdCQUFnQixFQUFFLENBQUM7WUFDbkJDLGdCQUFnQixFQUFFLENBQUM7WUFDbkJDLG9CQUFvQixFQUFFLElBQUk7WUFDMUJDLHNCQUFzQixFQUFFQyxRQUFRO1lBQ2hDQyx3QkFBd0IsRUFBRTtVQUM1QixDQUFDLENBQUM7VUFDRixJQUFJLENBQUN4QixPQUFPLENBQUN5QixVQUFVLENBQUMsSUFBSSxDQUFDWixZQUFZLENBQUM7VUFDMUMsSUFBSSxDQUFDYixPQUFPLENBQUMwQixXQUFXLENBQUMsSUFBSSxDQUFDaEIsYUFBYSxDQUFDO1FBQzlDLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ0EsYUFBYSxDQUFDaUIsV0FBVyxDQUFDLCtCQUErQixDQUFDLEVBQUU7VUFDMUUsSUFBSSxDQUFDakIsYUFBYSxDQUFDMy9CLEdBQUcsR0FBRyxJQUFJLENBQUM4L0IsWUFBWTtRQUM1QztNQUNGO0lBQ0Y7RUFBQztJQUFBN2xDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzRyxXQUFXQSxDQUFBLEVBQVk7TUFDckIsT0FBT3k4QiwrREFBZ0IsQ0FBQytDLFNBQVMsSUFBSS9DLCtEQUFnQixDQUFDK0MsU0FBUyxDQUFDeC9CLFdBQVcsQ0FBQyxDQUFDO0lBQy9FO0VBQUM7SUFBQXhHLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFtakIsUUFBUUEsQ0FBQSxFQUErQjtNQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDMmhCLE9BQU8sRUFBRTtRQUNqQixPQUFPO1VBQ0x0UixLQUFLLEVBQUUsQ0FBQztVQUNSRSxNQUFNLEVBQUUsQ0FBQztVQUNUcVEsV0FBVyxFQUFFLEdBQUc7VUFDaEI5UyxHQUFHLEVBQUUsR0FBRztVQUNSNFMsWUFBWSxFQUFFYix5REFBYSxDQUFDYztRQUM5QixDQUFDO01BQ0g7TUFFQSxJQUFNNEMsVUFBVSxHQUFHO1FBQ2pCbFQsS0FBSyxFQUFFLElBQUksQ0FBQ3NSLE9BQU8sQ0FBQzZCLEtBQUssQ0FBQ0MsV0FBVztRQUNyQ2xULE1BQU0sRUFBRSxJQUFJLENBQUNvUixPQUFPLENBQUM2QixLQUFLLENBQUNFLFlBQVk7UUFDdkM5QyxXQUFXLEVBQUUsSUFBSSxDQUFDZSxPQUFPLENBQUM2QixLQUFLLENBQUM1QyxXQUFXO1FBQzNDOVMsR0FBRyxFQUFFLEdBQUc7UUFDUjRTLFlBQVksRUFBRWIseURBQWEsQ0FBQzhELFdBQVc7UUFDdkMxQyxZQUFZLEVBQUU7TUFDaEIsQ0FBQztNQUVELElBQUksSUFBSSxDQUFDb0IsYUFBYSxDQUFDdUIsUUFBUSxJQUFJLElBQUksQ0FBQ3ZCLGFBQWEsQ0FBQ3VCLFFBQVEsQ0FBQ3I4QixNQUFNLEVBQUU7UUFDckVnOEIsVUFBVSxDQUFDdEMsWUFBWSxHQUFHLElBQUksQ0FBQ29CLGFBQWEsQ0FBQ3VCLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUM5RDtNQUVBLElBQUksSUFBSSxDQUFDbEMsT0FBTyxDQUFDbUMsZ0JBQWdCLENBQUNyWCxLQUFLLEtBQUssTUFBTSxFQUFFO1FBQ2xEOFcsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDOEQsV0FBVztNQUNyRCxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUNoQyxPQUFPLENBQUNtQyxnQkFBZ0IsQ0FBQ3JYLEtBQUssS0FBSyxPQUFPLElBQUksSUFBSSxDQUFDa1YsT0FBTyxDQUFDbUMsZ0JBQWdCLENBQUNyWCxLQUFLLEtBQUssT0FBTyxFQUFFO1FBQzdHOFcsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDYyxlQUFlO01BQ3pELENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQ2dCLE9BQU8sQ0FBQ21DLGdCQUFnQixDQUFDclgsS0FBSyxDQUFDdnNCLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUN5aEMsT0FBTyxDQUFDbUMsZ0JBQWdCLENBQUNyWCxLQUFLLENBQUN2c0IsUUFBUSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQzdIcWpDLFVBQVUsQ0FBQzdDLFlBQVksR0FBR2IseURBQWEsQ0FBQ2tFLGNBQWM7TUFDeEQsQ0FBQyxNQUFNO1FBQ0xSLFVBQVUsQ0FBQzdDLFlBQVksR0FBR2IseURBQWEsQ0FBQ21FLFlBQVk7TUFDdEQ7TUFFQSxJQUFNcEQsV0FBVyxHQUFHLElBQUksQ0FBQ3lCLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDO01BQzFELElBQU00QixlQUFlLEdBQUcsQ0FBQzVuQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDa2xDLFFBQVEsQ0FBQ3BCLGVBQWUsSUFBSSxJQUFJO01BRTNFbUQsVUFBVSxDQUFDelYsR0FBRyxHQUFHbGhCLElBQUksQ0FBQ3MzQixHQUFHLENBQUMsR0FBRyxFQUFHdEQsV0FBVyxHQUFJLElBQUksQ0FBQ1ksUUFBUSxDQUFDMVQsR0FBRyxHQUFHLElBQUssR0FBSW1XLGVBQWUsQ0FBQztNQUU1RixPQUFPVixVQUFVO0lBQ25CO0VBQUM7SUFBQTVtQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBRyxPQUFPQSxDQUFBLEVBQVM7TUFDZCxJQUFJLElBQUksQ0FBQzJrQyxPQUFPLElBQUksSUFBSSxDQUFDQSxPQUFPLENBQUN3QyxPQUFPLEVBQUU7UUFDeEMsSUFBSSxDQUFDeEMsT0FBTyxDQUFDd0MsT0FBTyxDQUFDLENBQUM7UUFFdEIsSUFBSSxDQUFDeEMsT0FBTyxHQUFHLElBQUk7TUFDckI7SUFDRjtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7OztBQ2hHSDtBQUNBO0FBQ0E7O0FBRU8sSUFBSzlCLGFBQWEsMEJBQWJBLGFBQWE7RUFBYkEsYUFBYSxDQUFiQSxhQUFhO0VBQWJBLGFBQWEsQ0FBYkEsYUFBYTtFQUFiQSxhQUFhLENBQWJBLGFBQWE7RUFBYkEsYUFBYSxDQUFiQSxhQUFhO0VBQUEsT0FBYkEsYUFBYTtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ0p6QjtBQUNBO0FBQ0E7QUFDd0Q7QUFFRDtBQUNpQjtBQUVKO0FBQ3JCO0FBQ3FCO0FBQ2hCO0FBQ1M7QUFDSztBQUN0QjtBQUVXO0FBRWlCO0FBR0o7QUFDeEI7QUFFbkI7QUFFekIsSUFBTXdFLGdDQUFnQyxHQUFHLEdBQUc7QUFDNUMsSUFBTUMseUJBQXlCLEdBQUcsS0FBSztBQUFDLElBRW5CQyxjQUFjO0VBUWpDLFNBQUFBLGVBQVl2RSxjQUFjLEVBQUV3RSxxQkFBcUIsRUFBRUMsc0JBQXNCLEVBQUUxUSxtQkFBd0MsRUFBRTtJQUFBNTNCLDRJQUFBLE9BQUFvb0MsY0FBQTtJQUFBbm9DLDRJQUFBLGtCQVBqRmlKLDhEQUFhLENBQUNHLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQztJQUFBcEosNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFRM0UsSUFBSSxDQUFDNHZCLGVBQWUsR0FBR2dVLGNBQWM7SUFDckMsSUFBSSxDQUFDL1Qsc0JBQXNCLEdBQUd1WSxxQkFBcUI7SUFDbkQsSUFBSSxDQUFDdFksdUJBQXVCLEdBQUd1WSxzQkFBc0I7SUFDckQsSUFBSSxDQUFDbFAsb0JBQW9CLEdBQUd4QixtQkFBbUI7SUFDL0MsSUFBSSxDQUFDOTJCLFlBQVksR0FBRyxJQUFJbkIsNERBQWMsQ0FBQyxDQUFDO0lBQ3hDLElBQUksQ0FBQ2t3QixlQUFlLENBQUMwRSxXQUFXLENBQUNuekIsR0FBRyxDQUFDLElBQUksQ0FBQztFQUM1QztFQUFDLE9BQUFiLHlJQUFBLENBQUE2bkMsY0FBQTtJQUFBNW5DLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFvekIsS0FBS0EsQ0FBQy9uQixHQUFHLEVBQUVqQixLQUFLLEVBQUVpckIsbUJBQW1CLEVBQUViLDZCQUE2QixFQUFpQjtNQUFBLElBQUFuMEIsS0FBQTtNQUNuRixJQUFNcWYsd0JBQXdCLEdBQUcsT0FBTyxJQUFJLENBQUMyUCx1QkFBdUIsQ0FBQ0wsc0JBQXNCLEtBQUssVUFBVSxJQUFJLE9BQU8sSUFBSSxDQUFDSyx1QkFBdUIsQ0FBQ0osc0JBQXNCLEtBQUssVUFBVTtNQUV2TCxPQUFPdlMsT0FBTyxDQUFDeUIsR0FBRyxDQUFDLENBQ2pCZ1EsNkRBQVMsQ0FBQytNLGtDQUFrQyxDQUFDN3ZCLEdBQUcsQ0FBQyxFQUNqRHlULGtFQUFxQixDQUFDUyx5QkFBeUIsQ0FBQyxVQUFVLEVBQUVHLHdCQUF3QixDQUFDLENBQ2xGMUQsSUFBSSxDQUFDLFVBQUFsVixJQUFBLEVBQWtDO1FBQUEsSUFBaEM2WixVQUFVLEdBQUE3WixJQUFBLENBQVY2WixVQUFVO1VBQUVyQixjQUFjLEdBQUF4WSxJQUFBLENBQWR3WSxjQUFjO1FBQ2hDamYsS0FBSSxDQUFDK3VCLHNCQUFzQixDQUFDOVAsY0FBYyxDQUFDdGYsS0FBSyxHQUFHc2YsY0FBYztRQUVqRSxPQUFPO1VBQ0xxQixVQUFVLEVBQVZBLFVBQVU7VUFDVnJCLGNBQWMsRUFBZEE7UUFDRixDQUFDO01BQ0gsQ0FBQyxDQUFDLENBQ0wsQ0FBQyxDQUNDdEQsSUFBSSxDQUFDLFVBQUEzVSxLQUFBLEVBQThDO1FBQUEsSUFBQXdnQyxLQUFBLEdBQUFDLDJJQUFBLENBQUF6Z0MsS0FBQTtVQUE1Q29xQixRQUFRLEdBQUFvVyxLQUFBO1VBQUFFLE1BQUEsR0FBQUYsS0FBQTtVQUFHbG5CLFVBQVUsR0FBQW9uQixNQUFBLENBQVZwbkIsVUFBVTtVQUFFckIsY0FBYyxHQUFBeW9CLE1BQUEsQ0FBZHpvQixjQUFjO1FBQzNDamYsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ21CLE1BQU0sQ0FBQ3R3QixLQUFLLEdBQUcsSUFBSTtRQUN4Q0ssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLEdBQUd5eEIsUUFBUTtRQUM5Q3B4QixLQUFJLENBQUN3SixPQUFPLENBQUNDLElBQUksQ0FBQyxvQkFBb0IsRUFBRTJuQixRQUFRLENBQUNqaUIsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUM1RG5QLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdCQUFnQixHQUFHNlcsVUFBVSxDQUFDeUIsR0FBRyxDQUFDO1FBRXBELElBQUlwZCx1RUFBaUIsQ0FBQ2dqQyxtQkFBbUIsSUFBSSxDQUFDMW9CLGNBQWMsQ0FBQzJvQix3QkFBd0IsSUFBSSxDQUFDM29CLGNBQWMsQ0FBQzRvQix3QkFBd0IsRUFBRTtVQUNqSTVvQixjQUFjLENBQUNzSixLQUFLLENBQUMsQ0FBQztVQUN0QnRKLGNBQWMsQ0FBQ25mLE9BQU8sQ0FBQyxDQUFDO1VBRXhCLElBQUlvSSw2Q0FBRyxDQUFDd3dCLCtCQUErQixJQUFJLEVBQUUvekIsdUVBQWlCLENBQUN0RCxRQUFRLElBQUk2Ryw2Q0FBRyxDQUFDeXdCLG9DQUFvQyxDQUFDLEVBQUU7WUFDcEgvekIsb0VBQXVCLENBQUNFLHNCQUFzQixDQUFDLENBQUM7VUFDbEQ7VUFFQW1hLGNBQWMsR0FBRyxJQUFJO1VBQ3JCcUIsVUFBVSxHQUFHLElBQUk7VUFDakJ0Z0IsS0FBSSxDQUFDK3VCLHNCQUFzQixDQUFDOVAsY0FBYyxDQUFDdGYsS0FBSyxHQUFHc2YsY0FBYztRQUNuRTtRQUVBLE9BQU9tUyxRQUFRLENBQUN6SSxTQUFTLENBQUM1ZSxLQUFLLEVBQUV1VyxVQUFVLEVBQUV0Z0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ29DLFlBQVksQ0FBQ3Z4QixLQUFLLENBQUM7TUFDdkYsQ0FBQyxDQUFDLENBQ0RnYyxJQUFJLENBQUMsVUFBQW1zQixLQUFBLEVBQTRJO1FBQUEsSUFBMUk1ckIsTUFBTSxHQUFBNHJCLEtBQUEsQ0FBTjVyQixNQUFNO1VBQUVvVixNQUFNLEdBQUF3VyxLQUFBLENBQU54VyxNQUFNO1VBQUVvUCxnQkFBZ0IsR0FBQW9ILEtBQUEsQ0FBaEJwSCxnQkFBZ0I7VUFBRXRDLDRCQUE0QixHQUFBMEosS0FBQSxDQUE1QjFKLDRCQUE0QjtVQUFFeUMsOEJBQThCLEdBQUFpSCxLQUFBLENBQTlCakgsOEJBQThCO1VBQUVELCtCQUErQixHQUFBa0gsS0FBQSxDQUEvQmxILCtCQUErQjtVQUFFaFEsR0FBRyxHQUFBa1gsS0FBQSxDQUFIbFgsR0FBRztRQUMxSTV3QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDd0MsTUFBTSxDQUFDM3hCLEtBQUssR0FBRzJ4QixNQUFNO1FBQzFDdHhCLEtBQUksQ0FBQzh1QixlQUFlLENBQUM4QixHQUFHLENBQUNqeEIsS0FBSyxHQUFHaXhCLEdBQUc7UUFFcEM1d0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2tMLDZDQUE2QyxDQUFDLENBQUM7UUFFcEVoNkIsS0FBSSxDQUFDd0osT0FBTyxDQUFDc0osS0FBSyxDQUNoQixtREFBbUQsRUFDbkQ5UyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFDN0J1VCxNQUFNLEVBQ053a0IsZ0JBQWdCLEVBQ2hCdEMsNEJBQTRCLEVBQzVCeUMsOEJBQThCLEVBQzlCRCwrQkFDRixDQUFDO1FBRUQ1Z0MsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR0ssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ21MLGlDQUFpQyxDQUFDL2QsTUFBTSxDQUFDO1FBRWpHbGMsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ2lMLFdBQVcsQ0FBQzdkLE1BQU0sQ0FBQztRQUV4QyxJQUFJQSxNQUFNLEtBQUssSUFBSSxFQUFFO1VBQ25CO1FBQ0Y7UUFFQSxPQUFPbGMsS0FBSSxDQUFDK25DLHFCQUFxQixDQUFDL25DLEtBQUksQ0FBQyt1QixzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQ3RmLEtBQUssRUFBRStnQyxnQkFBZ0IsQ0FBQyxDQUNsRy9rQixJQUFJLENBQUMsVUFBQXNELGNBQWMsRUFBSTtVQUN0QixJQUFJK29CLHVCQUF1QjtVQUMzQixJQUFJQyxlQUFlLEdBQUcsS0FBSztVQUMzQixJQUFJOUksa0JBQWtCLEdBQUcsS0FBSztVQUM5QixJQUFNRCxVQUE2QixHQUFHLEVBQUU7VUFFeEMsSUFBSSxDQUFDbC9CLEtBQUksQ0FBQyt1QixzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQ3RmLEtBQUssRUFBRTtZQUNyREssS0FBSSxDQUFDK3VCLHNCQUFzQixDQUFDOVAsY0FBYyxDQUFDdGYsS0FBSyxHQUFHc2YsY0FBYztVQUNuRTtVQUVBQSxjQUFjLENBQUNtSixjQUFjLEdBQUcsVUFBQzNkLENBQUMsRUFBVztZQUMzQyxJQUFJekssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3dDLE1BQU0sQ0FBQzN4QixLQUFLLEtBQUsyeEIsTUFBTSxFQUFFO2NBQ2hEO1lBQ0Y7WUFFQSxJQUFJdHhCLEtBQUksQ0FBQyt1QixzQkFBc0IsQ0FBQzlQLGNBQWMsQ0FBQ3RmLEtBQUssS0FBS3NmLGNBQWMsRUFBRTtjQUN2RTtZQUNGO1lBRUEsSUFBSWdwQixlQUFlLEVBQUU7Y0FDbkI7WUFDRjtZQUVBLElBQUksQ0FBQy8vQiw2Q0FBRyxDQUFDd0QsbUJBQW1CLENBQUMvTCxLQUFLLEVBQUU7Y0FDbEM7WUFDRjtZQUVBLElBQUk4SyxDQUFDLENBQUN5OUIsU0FBUyxJQUFJejlCLENBQUMsQ0FBQ3k5QixTQUFTLENBQUNBLFNBQVMsRUFBRTtjQUN4Q2hKLFVBQVUsQ0FBQzcxQixJQUFJLENBQUNvQixDQUFDLENBQUN5OUIsU0FBUyxDQUFDO1lBQzlCLENBQUMsTUFBTTtjQUNML0ksa0JBQWtCLEdBQUcsSUFBSTtZQUMzQjtZQUVBLElBQUksQ0FBQzZJLHVCQUF1QixFQUFFO2NBQzVCQSx1QkFBdUIsR0FBR3RwQyxnRUFBVyxDQUFDMkcsVUFBVSxDQUFDLFlBQU07Z0JBQ3JELElBQUlyRixLQUFJLENBQUM4dUIsZUFBZSxDQUFDd0MsTUFBTSxDQUFDM3hCLEtBQUssS0FBSzJ4QixNQUFNLEVBQUU7a0JBQ2hEO2dCQUNGO2dCQUVBLElBQUkyVyxlQUFlLEVBQUU7a0JBQ25CO2dCQUNGO2dCQUVBLElBQU1sdUIsT0FBTyxHQUFHL1osS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3NDLFFBQVEsQ0FBQ3p4QixLQUFLLENBQUM2L0IsZ0JBQWdCLENBQUNsTyxNQUFNLEVBQUU0TixVQUFVLEVBQUVDLGtCQUFrQixDQUFDLENBQ3pHeGpCLElBQUksQ0FBQyxVQUFBd3NCLEtBQUEsRUFBdUI7a0JBQUEsSUFBckJqc0IsTUFBTSxHQUFBaXNCLEtBQUEsQ0FBTmpzQixNQUFNO29CQUFFNkQsT0FBTyxHQUFBb29CLEtBQUEsQ0FBUHBvQixPQUFPO2tCQUNyQixJQUFJN0QsTUFBTSxLQUFLLElBQUksRUFBRTtvQkFDbkJsYyxLQUFJLENBQUN3SixPQUFPLENBQUM2SixJQUFJLENBQUMsb0RBQW9ELEVBQUVyVCxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRXVULE1BQU0sQ0FBQztvQkFFOUc7a0JBQ0Y7a0JBRUEsSUFBSTZELE9BQU8sQ0FBQy9jLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRTtvQkFDOUJpbEMsZUFBZSxHQUFHLElBQUk7a0JBQ3hCO2tCQUVBam9DLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZEQUE2RCxFQUFFekosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQUV1VCxNQUFNLEVBQUU2RCxPQUFPLENBQUM7Z0JBQ2xJLENBQUMsQ0FBQyxDQUNEOUQsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7a0JBQ1Z6SyxLQUFJLENBQUN3SixPQUFPLENBQUNTLEtBQUssQ0FBQyxtQ0FBbUMsRUFBRWpLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNubUIsUUFBUSxFQUFFOEIsQ0FBQyxDQUFDO2dCQUMzRixDQUFDLENBQUM7Y0FDTixDQUFDLEVBQUUwOEIsZ0NBQWdDLENBQUM7WUFDdEM7VUFDRixDQUFDO1VBRURsb0IsY0FBYyxDQUFDcUosMEJBQTBCLEdBQUcsWUFBWTtZQUN0RCxJQUFJdG9CLEtBQUksQ0FBQzh1QixlQUFlLENBQUN3QyxNQUFNLENBQUMzeEIsS0FBSyxLQUFLMnhCLE1BQU0sRUFBRTtjQUNoRDtZQUNGO1lBRUEsSUFBSXR4QixLQUFJLENBQUMrdUIsc0JBQXNCLENBQUM5UCxjQUFjLENBQUN0ZixLQUFLLEtBQUtzZixjQUFjLEVBQUU7Y0FDdkU7WUFDRjtZQUVBLElBQU1tcEIsYUFBYSxHQUFHLFNBQWhCQSxhQUFhQSxDQUFBLEVBQWU7Y0FDaEM7Y0FDQTtjQUNBcG9DLEtBQUksQ0FBQzh1QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsK0RBQVksQ0FBQ2lMLGVBQWU7Y0FFL0QsSUFBSXA0QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxFQUFFO2dCQUMzQ0ssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ3F6QixLQUFLLENBQUMsQ0FBQztnQkFDL0NoekIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ3N6QixTQUFTLEdBQUcsSUFBSTtjQUMxRDtjQUVBanpCLEtBQUksQ0FBQzh1QixlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7Y0FDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLElBQUk7Y0FFekMsSUFBTW9hLE9BQU8sR0FBRy9aLEtBQUksQ0FBQ3E0QixvQkFBb0IsQ0FBQyxDQUFDLENBQ3hDcGMsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7Z0JBQ1Z6SyxLQUFJLENBQUN3SixPQUFPLENBQUNTLEtBQUssQ0FDaEIsbUZBQW1GLEVBQ25GakssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQzdCc1csY0FBYyxDQUFDb0gsa0JBQWtCLEVBQ2pDNWIsQ0FDRixDQUFDO2NBQ0gsQ0FBQyxDQUFDO1lBQ04sQ0FBQztZQUVELFFBQVF3VSxjQUFjLENBQUNvSCxrQkFBa0I7Y0FDdkMsS0FBSyxVQUFVO2NBQ2YsS0FBSyxXQUFXO2NBQ2hCLEtBQUssV0FBVztjQUNoQixLQUFLLEtBQUs7Z0JBQ1I7Y0FFRixLQUFLLGNBQWM7Y0FDbkIsS0FBSyxRQUFRO2dCQUNYLElBQUkzbkIsZ0VBQVcsQ0FBQzJwQyxpQkFBaUIsRUFBRTtrQkFDakNyb0MsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUV6SixLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRXNXLGNBQWMsQ0FBQ29ILGtCQUFrQixDQUFDO2tCQUNySnJtQixLQUFJLENBQUNzb0MsdUJBQXVCLENBQUNycEIsY0FBYyxFQUFFbXBCLGFBQWEsQ0FBQztnQkFDN0Q7Z0JBRUE7Y0FDRixLQUFLLFFBQVE7Z0JBQ1hwb0MsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0VBQWdFLEVBQUV6SixLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRXNXLGNBQWMsQ0FBQ29ILGtCQUFrQixDQUFDO2dCQUVySitoQixhQUFhLENBQUMsQ0FBQztnQkFFZjtjQUNGO2dCQUNFcDNCLG9FQUFpQixDQUFDaU8sY0FBYyxDQUFDb0gsa0JBQWtCLENBQUM7WUFDeEQ7VUFDRixDQUFDO1VBRUQsSUFBTWtpQixrQkFBa0IsR0FBRyxJQUFJbHNCLE9BQU8sQ0FBYyxVQUFDMkIsT0FBTyxFQUFFQyxNQUFNLEVBQUs7WUFDdkUsSUFBSSxDQUFDdFosdUVBQWlCLENBQUM2akMsZUFBZSxFQUFFO2NBQ3RDLElBQU10UixVQUFTLEdBQUd4NEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQztnQkFBQSxPQUFNNFksTUFBTSxDQUFDLElBQUlwWixLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQztjQUFBLEdBQUV1aUMseUJBQXlCLENBQUM7Y0FFdEhub0IsY0FBYyxDQUFDaUosT0FBTyxHQUFHLFVBQUN6ZCxDQUFDLEVBQVc7Z0JBQ3BDL0wsZ0VBQVcsQ0FBQ3FQLFlBQVksQ0FBQ21wQixVQUFTLENBQUM7Z0JBQ25DbFosT0FBTyxDQUFDdlQsQ0FBQyxDQUFDZytCLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztjQUN2QixDQUFDO2NBRUQ7WUFDRjtZQUVBLElBQU1DLGNBQWEsR0FBRyxTQUFoQkEsYUFBYUEsQ0FBSWorQixDQUFDLEVBQVc7Y0FDakM7Y0FDQS9MLGdFQUFXLENBQUNxUCxZQUFZLENBQUNtcEIsU0FBUyxDQUFDO2NBQ25DalksY0FBYyxDQUFDblgsbUJBQW1CLENBQUMsT0FBTyxFQUFFNGdDLGNBQWEsQ0FBQztjQUMxRHpwQixjQUFjLENBQUNuWCxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU0Z0MsY0FBYSxDQUFDO2NBRTlELElBQUlqK0IsQ0FBQyxDQUFDZytCLE9BQU8sRUFBRTtnQkFDYnpxQixPQUFPLENBQUN2VCxDQUFDLENBQUNnK0IsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ3ZCLENBQUMsTUFBTTtnQkFDTHpxQixPQUFPLENBQUN2VCxDQUFDLENBQUM2bUIsTUFBTSxDQUFDO2NBQ25CO1lBQ0YsQ0FBQztZQUVELElBQU00RixTQUFTLEdBQUd4NEIsZ0VBQVcsQ0FBQzJHLFVBQVUsQ0FBQyxZQUFNO2NBQzdDNFosY0FBYyxDQUFDblgsbUJBQW1CLENBQUMsT0FBTyxFQUFFNGdDLGNBQWEsQ0FBQztjQUMxRHpwQixjQUFjLENBQUNuWCxtQkFBbUIsQ0FBQyxXQUFXLEVBQUU0Z0MsY0FBYSxDQUFDO2NBQzlEenFCLE1BQU0sQ0FBQyxJQUFJcFosS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7WUFDN0MsQ0FBQyxFQUFFdWlDLHlCQUF5QixDQUFDO1lBRTdCbm9CLGNBQWMsQ0FBQ3JYLGdCQUFnQixDQUFDLE9BQU8sRUFBRThnQyxjQUFhLENBQUM7WUFDdkR6cEIsY0FBYyxDQUFDclgsZ0JBQWdCLENBQUMsV0FBVyxFQUFFOGdDLGNBQWEsQ0FBQztZQUUzRDtVQUNGLENBQUMsQ0FBQztVQUVGLE9BQU8sSUFBSXJzQixPQUFPLENBQU8sVUFBQTJCLE9BQU8sRUFBSTtZQUNsQ0EsT0FBTyxDQUFDLENBQUM7VUFDWCxDQUFDLENBQUMsQ0FBQ3JDLElBQUksQ0FBQyxZQUFNO1lBQ1osSUFBSSxDQUFDeWlCLDRCQUE0QixFQUFFO2NBQ2pDO1lBQ0Y7WUFFQXArQixLQUFJLENBQUN3SixPQUFPLENBQUNDLElBQUksQ0FBQywrQkFBK0IsRUFBRXpKLEtBQUksQ0FBQzh1QixlQUFlLENBQUNubUIsUUFBUSxFQUFFeTFCLDRCQUE0QixDQUFDWixrQkFBa0IsQ0FBQ3piLEdBQUcsQ0FBQztZQUV0SSxPQUFPOUMsY0FBYyxDQUFDK0gsbUJBQW1CLENBQUNvWCw0QkFBNEIsQ0FBQ1osa0JBQWtCLENBQUMsQ0FDdkZ2aEIsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7Y0FDVnpLLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDZEQUE2RCxFQUFFekosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQUV5MUIsNEJBQTRCLENBQUNaLGtCQUFrQixFQUFFL3lCLENBQUMsQ0FBQ3FILE9BQU8sQ0FBQztjQUUzSyxNQUFNckgsQ0FBQztZQUNULENBQUMsQ0FBQztVQUNOLENBQUMsQ0FBQyxDQUFDa1IsSUFBSSxDQUFDLFlBQU07WUFDWixJQUFJLENBQUNpbEIsK0JBQStCLEVBQUU7Y0FDcEM7WUFDRjtZQUVBNWdDLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGlDQUFpQyxFQUFFekosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQUVpNEIsK0JBQStCLENBQUNwRCxrQkFBa0IsQ0FBQ3piLEdBQUcsQ0FBQztZQUUzSSxPQUFPOUMsY0FBYyxDQUFDd0ksb0JBQW9CLENBQUNtWiwrQkFBK0IsQ0FBQ3BELGtCQUFrQixDQUFDLENBQzNGdmhCLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO2NBQ1Z6SyxLQUFJLENBQUN3SixPQUFPLENBQUNDLElBQUksQ0FBQyw4REFBOEQsRUFBRXpKLEtBQUksQ0FBQzh1QixlQUFlLENBQUNubUIsUUFBUSxFQUFFaTRCLCtCQUErQixDQUFDcEQsa0JBQWtCLEVBQUUveUIsQ0FBQyxDQUFDcUgsT0FBTyxDQUFDO2NBRS9LLE1BQU1ySCxDQUFDO1lBQ1QsQ0FBQyxDQUFDO1VBQ04sQ0FBQyxDQUFDLENBQUNrUixJQUFJLENBQUMsWUFBTTtZQUNaLElBQUksQ0FBQ2tsQiw4QkFBOEIsRUFBRTtjQUNuQztZQUNGO1lBRUE3Z0MsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUV6SixLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRWs0Qiw4QkFBOEIsQ0FBQ3JELGtCQUFrQixDQUFDemIsR0FBRyxDQUFDO1lBRXpJLE9BQU85QyxjQUFjLENBQUN3SSxvQkFBb0IsQ0FBQ29aLDhCQUE4QixDQUFDckQsa0JBQWtCLENBQUMsQ0FDMUZ2aEIsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7Y0FDVnpLLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLDhEQUE4RCxFQUFFekosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQUVrNEIsOEJBQThCLENBQUNyRCxrQkFBa0IsRUFBRS95QixDQUFDLENBQUNxSCxPQUFPLENBQUM7Y0FFOUssTUFBTXJILENBQUM7WUFDVCxDQUFDLENBQUMsQ0FDRGtSLElBQUksQ0FBQyxZQUFNO2NBQ1YsT0FBT3NELGNBQWMsQ0FBQzJILFlBQVksQ0FBQztnQkFDakNyRyxtQkFBbUIsRUFBRSxJQUFJO2dCQUN6QkMsbUJBQW1CLEVBQUU7Y0FDdkIsQ0FBQyxDQUFDO1lBQ0osQ0FBQyxDQUFDLENBQUM3RSxJQUFJLENBQUMsVUFBQWd0QixNQUFNLEVBQUk7Y0FDaEIzb0MsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsZ0NBQWdDLEVBQUV6SixLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFBRWdnQyxNQUFNLENBQUM7Y0FFMUYsT0FBTzNvQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDc0MsUUFBUSxDQUFDenhCLEtBQUssQ0FBQzhuQixvQkFBb0IsQ0FBQzZKLE1BQU0sRUFBRXFYLE1BQU0sQ0FBQztZQUNqRixDQUFDLENBQUMsQ0FBQ2h0QixJQUFJLENBQUMsVUFBQWl0QixLQUFBLEVBQWtDO2NBQUEsSUFBaEMxc0IsTUFBTSxHQUFBMHNCLEtBQUEsQ0FBTjFzQixNQUFNO2dCQUFFc2hCLGtCQUFrQixHQUFBb0wsS0FBQSxDQUFsQnBMLGtCQUFrQjtjQUNsQ3g5QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHSyxLQUFJLENBQUM2b0MsNENBQTRDLENBQUMzc0IsTUFBTSxDQUFDO2NBRTVGLElBQUlBLE1BQU0sS0FBSyxJQUFJLEVBQUU7Z0JBQ25CbGMsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsS0FBSztnQkFDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUN5QixPQUFPLENBQUM1d0IsS0FBSyxHQUFHLElBQUk7Z0JBQ3pDSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDMkIsT0FBTyxDQUFDOXdCLEtBQUssR0FBRyxLQUFLO2dCQUUxQztjQUNGO2NBRUEsT0FBT3NmLGNBQWMsQ0FBQytILG1CQUFtQixDQUFDd1csa0JBQWtCLENBQUMsQ0FDMUR2aEIsS0FBSyxDQUFDLFVBQUF4UixDQUFDLEVBQUk7Z0JBQ1Z6SyxLQUFJLENBQUN3SixPQUFPLENBQUNDLElBQUksQ0FBQyw2REFBNkQsRUFBRXpKLEtBQUksQ0FBQzh1QixlQUFlLENBQUNubUIsUUFBUSxFQUFFNjBCLGtCQUFrQixFQUFFL3lCLENBQUMsQ0FBQ3FILE9BQU8sQ0FBQztnQkFFOUksTUFBTXJILENBQUM7Y0FDVCxDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7VUFDTixDQUFDLENBQUMsQ0FBQ2tSLElBQUksQ0FBQyxZQUFNO1lBQ1pxWixtQkFBbUIsQ0FBQ3RzQixPQUFPLENBQUMxSSxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsQ0FBQztZQUUxRCxPQUFPNC9CLGtCQUFrQjtVQUMzQixDQUFDLENBQUMsQ0FBQzVzQixJQUFJLENBQUMsVUFBQXlGLFdBQVcsRUFBSTtZQUNyQixJQUFJcGhCLEtBQUksQ0FBQ2d2Qix1QkFBdUIsQ0FBQ1IsMkJBQTJCLENBQUM3dUIsS0FBSyxFQUFFO2NBQ2xFLElBQU1tcEMsdUJBQXVCLEdBQUcsSUFBSTduQix1REFBUyxDQUFDaEMsY0FBYyxDQUFDNkMsd0JBQXdCLENBQUNDLEdBQUcsQ0FBQztjQUMxRixJQUFBZ25CLHFCQUFBLEdBQXNCN0IsMEVBQWlCLENBQUM4QixnQ0FBZ0MsQ0FBQzVuQixXQUFXLEVBQUVuQyxjQUFjLENBQUMySSxZQUFZLENBQUMsQ0FBQyxFQUFFNW5CLEtBQUksQ0FBQ2d2Qix1QkFBdUIsQ0FBQ0wsc0JBQXNCLEVBQUUzdUIsS0FBSSxDQUFDZ3ZCLHVCQUF1QixDQUFDSixzQkFBc0IsRUFBRWthLHVCQUF1QixDQUFDM21CLFVBQVUsRUFBRTJtQix1QkFBdUIsQ0FBQzdtQixVQUFVLENBQUM7Z0JBQS9SdVIsV0FBVyxHQUFBdVYscUJBQUEsQ0FBWHZWLFdBQVc7Y0FFbEJ4ekIsS0FBSSxDQUFDRCxZQUFZLENBQUNNLEdBQUcsQ0FBQ216QixXQUFXLENBQUM7WUFDcEM7WUFFQSxJQUFJeHpCLEtBQUksQ0FBQ2d2Qix1QkFBdUIsQ0FBQ1Qsb0JBQW9CLENBQUM1dUIsS0FBSyxFQUFFO2NBQzNELElBQUFzcEMsc0JBQUEsR0FBeUMvQiwwRUFBaUIsQ0FBQ2dDLG1DQUFtQyxDQUFDOW5CLFdBQVcsRUFBRXBoQixLQUFJLENBQUNndkIsdUJBQXVCLENBQUNQLDRCQUE0QixFQUFFenVCLEtBQUksQ0FBQ2d2Qix1QkFBdUIsQ0FBQ04sNEJBQTRCLENBQUM7Z0JBQTFOeWEsaUJBQWlCLEdBQUFGLHNCQUFBLENBQWpCRSxpQkFBaUI7Z0JBQUUzVixZQUFXLEdBQUF5VixzQkFBQSxDQUFYelYsV0FBVztjQUVyQ3h6QixLQUFJLENBQUNELFlBQVksQ0FBQ00sR0FBRyxDQUFDbXpCLFlBQVcsQ0FBQztjQUNsQ3BTLFdBQVcsR0FBRytuQixpQkFBaUI7WUFDakM7WUFFQW5wQyxLQUFJLENBQUMrdUIsc0JBQXNCLENBQUMzTixXQUFXLENBQUN6aEIsS0FBSyxHQUFHeWhCLFdBQVc7WUFFM0QsSUFBTWdvQixvQkFBb0IsR0FBRyxJQUFJam9CLGtFQUFvQixDQUFDbEMsY0FBYyxFQUFFbUMsV0FBVyxFQUFFcGhCLEtBQUksQ0FBQzh1QixlQUFlLENBQUNzQyxRQUFRLENBQUN6eEIsS0FBSyxDQUFDc2pCLGFBQWEsR0FBRyxDQUFDLENBQUM7WUFFeklqakIsS0FBSSxDQUFDRCxZQUFZLENBQUNNLEdBQUcsQ0FBQytvQyxvQkFBb0IsQ0FBQztZQUUzQyxJQUFNQyx5Q0FBeUMsR0FBR0Qsb0JBQW9CLENBQUNFLFlBQVksQ0FBQzNnQixTQUFTLENBQUMsVUFBQTBkLFVBQVUsRUFBSTtjQUMxR3JtQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDOUwsYUFBYSxDQUFDcmpCLEtBQUssR0FBRzBtQyxVQUFVO2NBRXJELElBQUksQ0FBQ3JtQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDeWEsaUJBQWlCLElBQUksQ0FBQ3ZwQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDMGEsaUJBQWlCLEVBQUU7Z0JBQ3RGeHBDLEtBQUksQ0FBQzh1QixlQUFlLENBQUMwYSxpQkFBaUIsR0FBR25ELFVBQVUsQ0FBQ29ELEtBQUs7Z0JBQ3pEenBDLEtBQUksQ0FBQzh1QixlQUFlLENBQUN5YSxpQkFBaUIsR0FBR2xELFVBQVUsQ0FBQzdoQixLQUFLO2dCQUV6RDtjQUNGO2NBRUEsSUFBSWtsQixnQkFBZ0IsR0FBRyxLQUFLO2NBQzVCLElBQUlDLGdCQUFnQixHQUFHLEtBQUs7Y0FFNUIsSUFBSXRELFVBQVUsQ0FBQ29ELEtBQUssRUFBRTtnQkFDcEIsSUFBSXpwQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDMGEsaUJBQWlCLElBQUl4cEMsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQzBhLGlCQUFpQixDQUFDN3ZCLFNBQVMsS0FBSzBzQixVQUFVLENBQUNvRCxLQUFLLENBQUM5dkIsU0FBUyxFQUFFO2tCQUM3SCt2QixnQkFBZ0IsR0FBRzFwQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDMGEsaUJBQWlCLElBQUl4cEMsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQzBhLGlCQUFpQixDQUFDemxCLGFBQWEsS0FBS3NpQixVQUFVLENBQUNvRCxLQUFLLENBQUMxbEIsYUFBYTtrQkFFcEosSUFBSTJsQixnQkFBZ0IsSUFBSWhyQyxnRUFBVyxDQUFDMnBDLGlCQUFpQixFQUFFO29CQUNyRHJvQyxLQUFJLENBQUN3SixPQUFPLENBQUNDLElBQUksQ0FDZiwwR0FBMEcsRUFDMUd6SixLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFDN0IwOUIsVUFBVSxDQUFDb0QsS0FBSyxDQUFDMWxCLGFBQWEsRUFDOUIvakIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQzBhLGlCQUFpQixDQUFDemxCLGFBQWEsRUFDcEQsSUFBSTliLHVEQUFTLENBQUNvK0IsVUFBVSxDQUFDb0QsS0FBSyxDQUFDOXZCLFNBQVMsR0FBRzNaLEtBQUksQ0FBQzh1QixlQUFlLENBQUMwYSxpQkFBaUIsQ0FBQzd2QixTQUFTLENBQUMsQ0FBQ2pRLFdBQVcsQ0FBQyxDQUMzRyxDQUFDO2tCQUNIO2tCQUVBMUosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQzBhLGlCQUFpQixHQUFHbkQsVUFBVSxDQUFDb0QsS0FBSztnQkFDM0Q7Y0FDRjtjQUVBLElBQUlwRCxVQUFVLENBQUM3aEIsS0FBSyxFQUFFO2dCQUNwQixJQUFJeGtCLEtBQUksQ0FBQzh1QixlQUFlLENBQUN5YSxpQkFBaUIsSUFBSXZwQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDeWEsaUJBQWlCLENBQUM1dkIsU0FBUyxLQUFLMHNCLFVBQVUsQ0FBQzdoQixLQUFLLENBQUM3SyxTQUFTLEVBQUU7a0JBQzdIZ3dCLGdCQUFnQixHQUFHM3BDLEtBQUksQ0FBQzh1QixlQUFlLENBQUN5YSxpQkFBaUIsSUFBSXZwQyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDeWEsaUJBQWlCLENBQUN4bEIsYUFBYSxLQUFLc2lCLFVBQVUsQ0FBQzdoQixLQUFLLENBQUNULGFBQWE7a0JBRXBKLElBQUk0bEIsZ0JBQWdCLElBQUlqckMsZ0VBQVcsQ0FBQzJwQyxpQkFBaUIsRUFBRTtvQkFDckRyb0MsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQ2YsMEdBQTBHLEVBQzFHekosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ25tQixRQUFRLEVBQzdCMDlCLFVBQVUsQ0FBQzdoQixLQUFLLENBQUNULGFBQWEsRUFDOUIvakIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3lhLGlCQUFpQixDQUFDeGxCLGFBQWEsRUFDcEQsSUFBSTliLHVEQUFTLENBQUNvK0IsVUFBVSxDQUFDN2hCLEtBQUssQ0FBQzdLLFNBQVMsR0FBRzNaLEtBQUksQ0FBQzh1QixlQUFlLENBQUN5YSxpQkFBaUIsQ0FBQzV2QixTQUFTLENBQUMsQ0FBQ2pRLFdBQVcsQ0FBQyxDQUMzRyxDQUFDO2tCQUNIO2tCQUVBMUosS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3lhLGlCQUFpQixHQUFHbEQsVUFBVSxDQUFDN2hCLEtBQUs7Z0JBQzNEO2NBQ0Y7Y0FFQSxJQUFJLENBQUM5bEIsZ0VBQVcsQ0FBQzJwQyxpQkFBaUIsRUFBRTtnQkFDbENyb0MsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QiwrREFBWSxDQUFDMkssT0FBTztnQkFFdkQ7Y0FDRjtjQUVBLElBQUk2UixnQkFBZ0IsSUFBSUQsZ0JBQWdCLEVBQUU7Z0JBQ3hDLElBQU10QixhQUFhLEdBQUcsU0FBaEJBLGFBQWFBLENBQUEsRUFBZTtrQkFDaENwb0MsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QiwrREFBWSxDQUFDaUwsZUFBZTtrQkFFL0QsSUFBSXA0QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDWCxZQUFZLENBQUN4dUIsS0FBSyxFQUFFO29CQUMzQ0ssS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ3F6QixLQUFLLENBQUMsQ0FBQztvQkFDL0NoekIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1gsWUFBWSxDQUFDeHVCLEtBQUssQ0FBQ3N6QixTQUFTLEdBQUcsSUFBSTtrQkFDMUQ7a0JBRUFqekIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ3VCLE9BQU8sQ0FBQzF3QixLQUFLLEdBQUcsS0FBSztrQkFDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLElBQUk7a0JBRXpDeXBDLG9CQUFvQixDQUFDdHBDLE9BQU8sQ0FBQyxDQUFDO2tCQUU5QixJQUFNaWEsT0FBTyxHQUFHL1osS0FBSSxDQUFDcTRCLG9CQUFvQixDQUFDLENBQUMsQ0FDeENwYyxLQUFLLENBQUMsVUFBQXhSLENBQUMsRUFBSTtvQkFDVnpLLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ1MsS0FBSyxDQUNoQix5RUFBeUUsRUFDekVqSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDbm1CLFFBQVEsRUFDN0JzVyxjQUFjLENBQUNvSCxrQkFBa0IsRUFDakM1YixDQUNGLENBQUM7a0JBQ0gsQ0FBQyxDQUFDO2dCQUNOLENBQUM7Z0JBRUR6SyxLQUFJLENBQUNzb0MsdUJBQXVCLENBQUNycEIsY0FBYyxFQUFFbXBCLGFBQWEsQ0FBQztjQUM3RCxDQUFDLE1BQU07Z0JBQ0xwb0MsS0FBSSxDQUFDK3VCLHNCQUFzQixDQUFDOEosK0JBQStCLEdBQUcsQ0FBQztnQkFFL0QsSUFBSTc0QixLQUFJLENBQUM4dUIsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxLQUFLd3RCLCtEQUFZLENBQUMrSyxZQUFZLElBQUlsNEIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssS0FBS3d0QiwrREFBWSxDQUFDMkssT0FBTyxFQUFFO2tCQUMvSDtnQkFDRjtnQkFFQTkzQixLQUFJLENBQUM4dUIsZUFBZSxDQUFDUyxLQUFLLENBQUM1dkIsS0FBSyxHQUFHSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDdUIsT0FBTyxDQUFDMXdCLEtBQUssR0FBR3d0QiwrREFBWSxDQUFDa0YsT0FBTyxHQUFHbEYsK0RBQVksQ0FBQzhLLE1BQU07Z0JBQ2xIajRCLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLG1EQUFtRCxFQUFFMGpCLCtEQUFZLENBQUNudEIsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssQ0FBQyxDQUFDO2NBQ3hIO1lBQ0YsQ0FBQyxDQUFDO1lBRUZLLEtBQUksQ0FBQ0QsWUFBWSxDQUFDTSxHQUFHLENBQUNncEMseUNBQXlDLENBQUM7WUFFaEUsSUFBSSxDQUFDbmhDLDZDQUFHLENBQUNra0IsNEJBQTRCLEVBQUU7Y0FDckNwc0IsS0FBSSxDQUFDOHVCLGVBQWUsQ0FBQ1csU0FBUyxDQUFDOXZCLEtBQUssR0FBRyxLQUFLO2NBQzVDSyxLQUFJLENBQUM4dUIsZUFBZSxDQUFDYSxVQUFVLENBQUNod0IsS0FBSyxHQUFHLElBQUk7Y0FDNUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNxQixPQUFPLENBQUN4d0IsS0FBSyxHQUFHLEtBQUs7Y0FDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUN1QixPQUFPLENBQUMxd0IsS0FBSyxHQUFHLEtBQUs7Y0FDMUNLLEtBQUksQ0FBQzh1QixlQUFlLENBQUNTLEtBQUssQ0FBQzV2QixLQUFLLEdBQUd3dEIsK0RBQVksQ0FBQzhLLE1BQU07Y0FFdEQ7WUFDRjtZQUVBLE9BQU85RCw2QkFBNkIsQ0FBQy9TLFdBQVcsQ0FBQztVQUNuRCxDQUFDLENBQUM7UUFDSixDQUFDLENBQUM7TUFDTixDQUFDLENBQUM7SUFDTjtFQUFDO0lBQUEzaEIsR0FBQTtJQUFBRSxLQUFBO01BQUEsSUFBQWlxQyxzQkFBQSxHQUFBM3ZCLDhJQUFBLGNBQUFDLDRJQUFBLENBRUQsU0FBQUUsUUFDRXl2QixzQkFBOEMsRUFDOUNuSixnQkFBa0M7UUFBQSxJQUFBb0osbUJBQUE7UUFBQSxPQUFBNXZCLDRJQUFBLFVBQUFNLFNBQUFDLFFBQUE7VUFBQSxrQkFBQUEsUUFBQSxDQUFBQyxJQUFBLEdBQUFELFFBQUEsQ0FBQUUsSUFBQTtZQUFBO2NBQUEsSUFDN0JrdkIsc0JBQXNCO2dCQUFBcHZCLFFBQUEsQ0FBQUUsSUFBQTtnQkFBQTtjQUFBO2NBQ3pCK2xCLGdCQUFnQixHQUFHL2YscUVBQXVCLENBQUNDLGtCQUFrQixDQUFDOGYsZ0JBQWdCLENBQUM7Y0FBQyxPQUFBam1CLFFBQUEsQ0FBQU8sTUFBQSxXQUV6RTlTLDZDQUFHLENBQUMrakIscUJBQXFCLENBQUN0c0IsS0FBSyxDQUFDZ2dCLG9CQUFvQixDQUFDK2dCLGdCQUFnQixDQUFDO1lBQUE7Y0FHekVvSixtQkFBbUIsR0FBQTlFLGFBQUEsQ0FBQUEsYUFBQSxLQUNwQjZFLHNCQUFzQixDQUFDdmpCLGdCQUFnQixDQUFDLENBQUMsR0FDekNvYSxnQkFBZ0I7Y0FHckJtSixzQkFBc0IsQ0FBQ3RqQixnQkFBZ0IsQ0FBQ3VqQixtQkFBbUIsQ0FBQztjQUFDLE9BQUFydkIsUUFBQSxDQUFBTyxNQUFBLFdBRXRENnVCLHNCQUFzQjtZQUFBO1lBQUE7Y0FBQSxPQUFBcHZCLFFBQUEsQ0FBQVMsSUFBQTtVQUFBO1FBQUEsR0FBQWQsT0FBQTtNQUFBLENBQzlCO01BQUEsU0FqQmEydEIscUJBQXFCQSxDQUFBNXNCLEVBQUEsRUFBQTBMLEdBQUE7UUFBQSxPQUFBK2lCLHNCQUFBLENBQUF4dUIsS0FBQSxPQUFBekksU0FBQTtNQUFBO01BQUEsT0FBckJvMUIscUJBQXFCO0lBQUE7RUFBQTtJQUFBdG9DLEdBQUE7SUFBQUUsS0FBQSxFQW1CbkMsU0FBUTJvQyx1QkFBdUJBLENBQUNycEIsY0FBK0IsRUFBRW1wQixhQUF5QixFQUFRO01BQUEsSUFBQXAwQixNQUFBO01BQ2hHLElBQUlpTCxjQUFjLENBQUNvSCxrQkFBa0IsS0FBSyxRQUFRLEVBQUU7UUFDbEQ7TUFDRjtNQUVBLElBQUksQ0FBQ3lJLGVBQWUsQ0FBQ1MsS0FBSyxDQUFDNXZCLEtBQUssR0FBR3d0QiwrREFBWSxDQUFDK0ssWUFBWTtNQUU1RCxJQUFJLElBQUksQ0FBQ25KLHNCQUFzQixDQUFDOEosK0JBQStCLEdBQUczd0IsNkNBQUcsQ0FBQzZoQyw4Q0FBOEMsSUFBSSxDQUFDN2hDLDZDQUFHLENBQUM4aEMsb0NBQW9DLEVBQUU7UUFBQSxJQUFBQyxxQkFBQTtRQUNqSyxJQUFJLENBQUNsYixzQkFBc0IsQ0FBQzhKLCtCQUErQixFQUFFO1FBRTdELElBQU1xUixpQkFBaUIsR0FBRyxFQUFBRCxxQkFBQSxHQUFBaHJCLGNBQWMsQ0FBQ2tILHVCQUF1QixjQUFBOGpCLHFCQUFBLHVCQUF0Q0EscUJBQUEsQ0FBd0M1aUMsSUFBSSxNQUFLLE9BQU87UUFFbEYsSUFBSTFDLHVFQUFpQixDQUFDZ2pDLG1CQUFtQixJQUN2QyxDQUFDMW9CLGNBQWMsQ0FBQzJvQix3QkFBd0IsSUFDeEMsQ0FBQzNvQixjQUFjLENBQUM0b0Isd0JBQXdCLElBQ3hDLENBQUNxQyxpQkFBaUIsRUFDbEI7VUFDQTtRQUNGO1FBRUEsSUFBSSxDQUFDMWdDLE9BQU8sQ0FBQ0MsSUFBSSxDQUFDLGdEQUFnRCxDQUFDO1FBRW5FLElBQU0wYyx1QkFBdUIsR0FBR2xILGNBQWMsQ0FBQ2tILHVCQUF1QjtRQUN0RSxJQUFNcE0sT0FBTyxHQUFHa0YsY0FBYyxDQUFDbUIsV0FBVyxDQUFDO1VBQUMrcEIsVUFBVSxFQUFFO1FBQUksQ0FBQyxDQUFDLENBQUN4dUIsSUFBSSxDQUFDLFVBQUF5dUIsS0FBSyxFQUFJO1VBQzNFLE9BQU9uckIsY0FBYyxDQUFDK0gsbUJBQW1CLENBQUNvakIsS0FBSyxDQUFDLENBQUN6dUIsSUFBSSxDQUFDLFlBQU07WUFDMUQsT0FBT3NELGNBQWMsQ0FBQytILG1CQUFtQixDQUFDYix1QkFBdUIsQ0FBQztVQUNwRSxDQUFDLENBQUM7UUFDSixDQUFDLENBQUMsQ0FDQ2xLLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO1VBQ1Z1SixNQUFJLENBQUN4SyxPQUFPLENBQUNTLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRVEsQ0FBQyxDQUFDO1VBQzVEdUosTUFBSSxDQUFDK2Esc0JBQXNCLENBQUM4SiwrQkFBK0IsR0FBRyxDQUFDO1VBQy9EdVAsYUFBYSxDQUFDLENBQUM7UUFDakIsQ0FBQyxDQUFDO1FBRUo7TUFDRjtNQUVBLElBQUksQ0FBQzUrQixPQUFPLENBQUNDLElBQUksQ0FBQyxtRkFBbUYsRUFBRSxJQUFJLENBQUNzbEIsc0JBQXNCLENBQUM4SiwrQkFBK0IsQ0FBQztNQUNuSyxJQUFJLENBQUM5SixzQkFBc0IsQ0FBQzhKLCtCQUErQixHQUFHLENBQUM7TUFDL0R1UCxhQUFhLENBQUMsQ0FBQztJQUNqQjtFQUFDO0lBQUEzb0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxDQUFDQyxZQUFZLENBQUNELE9BQU8sQ0FBQyxDQUFDO0lBQzdCO0VBQUM7SUFBQUwsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWtwQyw0Q0FBNENBLENBQUMzc0IsTUFBa0MsRUFBZ0I7TUFDckcsUUFBUUEsTUFBTTtRQUNaLEtBQUssSUFBSTtVQUNQLE9BQU9pUiwrREFBWSxDQUFDZ0osUUFBUTtRQUM5QixLQUFLLGNBQWM7VUFDakIsT0FBT2hKLCtEQUFZLENBQUNpSixZQUFZO1FBQ2xDLEtBQUssV0FBVztRQUNoQixLQUFLLFVBQVU7UUFDZixLQUFLLGNBQWM7UUFDbkIsS0FBSyxTQUFTO1VBQ1osT0FBT2pKLCtEQUFZLENBQUN3SixVQUFVO1FBQ2hDLEtBQUssUUFBUTtVQUNYLE9BQU94SiwrREFBWSxDQUFDdG9CLEtBQUs7UUFDM0I7VUFDRW1NLG9FQUFpQixDQUFDa0wsTUFBTSxDQUFDO01BQzdCO0lBQ0Y7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3hpQkg7QUFDQTtBQUNBOztBQUV1RDtBQUNIO0FBRU47QUFBQSxJQStCekIrbkIsV0FBVztFQWE5QixTQUFBQSxZQUFZOVYsWUFBOEIsRUFBRTFVLElBQVksRUFBRTlRLFFBQWdCLEVBQUV1OEIsV0FBbUIsRUFBRW5sQixPQUFnQyxFQUFFO0lBQUE5Z0IsNElBQUEsT0FBQWdsQyxXQUFBO0lBQUEva0MsNElBQUEsa0JBWi9GaUosNkRBQWEsQ0FBQ0csU0FBUyxDQUFDLGFBQWEsQ0FBQztJQUFBcEosNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFBQUEsNElBQUE7SUFheEUsSUFBSSxDQUFDaW1DLGFBQWEsR0FBR2hYLFlBQVk7SUFDakMsSUFBSSxDQUFDaVgsS0FBSyxHQUFHM3JCLElBQUk7SUFDakIsSUFBSSxDQUFDNHJCLFNBQVMsR0FBRzE4QixRQUFRO0lBQ3pCLElBQUksQ0FBQzI4QixZQUFZLEdBQUdDLFNBQVMsQ0FBQ0wsV0FBVyxDQUFDLENBQUNNLE9BQU8sQ0FBQyxNQUFNLEVBQUUsS0FBSyxDQUFDO0lBQ2pFLElBQUksQ0FBQ2xCLFFBQVEsR0FBR3ZrQixPQUFPO0lBQ3ZCLElBQUksQ0FBQ3NxQixvQkFBb0IsR0FBRztNQUMxQkMsa0JBQWtCLEVBQUUsQ0FBQztNQUNyQkMsUUFBUSxFQUFFO0lBQ1osQ0FBQztFQUNIO0VBQUMsT0FBQS9xQyx5SUFBQSxDQUFBeWtDLFdBQUE7SUFBQXhrQyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFBb3pCLEtBQUtBLENBQUEsRUFBUztNQUNaLElBQUkyUCwrREFBZ0IsQ0FBQzhILEtBQUssRUFBRTtRQUMxQixJQUFNQyxhQUEyQixHQUFHO1VBQ2xDQyxHQUFHLEVBQUU7WUFBQ0Msd0JBQXdCLEVBQUU7VUFBTyxDQUFDO1VBQ3hDQyxRQUFRLEVBQUU7WUFBQ0MsZUFBZSxFQUFFO2NBQUNyUCxPQUFPLEVBQUU7WUFBSztVQUFDLENBQUM7VUFDN0NzUCxTQUFTLEVBQUU7WUFDVEMsc0JBQXNCLEVBQUUsQ0FBQztZQUN6QkMsYUFBYSxFQUFFLEVBQUU7WUFDakJDLFlBQVksRUFBRSxFQUFFO1lBQ2hCSixlQUFlLEVBQUU7Y0FDZnJQLE9BQU8sRUFBRSxLQUFLO2NBQ2QwUCxXQUFXLEVBQUUsRUFBRTtjQUNmQyxhQUFhLEVBQUU7WUFDakI7VUFDRjtRQUNGLENBQUM7UUFFRCxJQUFJLENBQUMxRyxPQUFPLEdBQUcsSUFBSS9CLCtEQUFnQixDQUFDOEgsS0FBSyxDQUFDOUYsTUFBTSxDQUFDLElBQUksQ0FBQ1MsYUFBYSxDQUFDO1FBQ3BFLElBQUksQ0FBQ2lHLFVBQVUsQ0FBQ1gsYUFBYSxDQUFDO1FBRTlCO01BQ0Y7SUFDRjtFQUFDO0lBQUFockMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1qQixRQUFRQSxDQUFBLEVBQStCO01BQ3JDLElBQUksQ0FBQyxJQUFJLENBQUMyaEIsT0FBTyxFQUFFO1FBQ2pCLE9BQU87VUFDTHRSLEtBQUssRUFBRSxDQUFDO1VBQ1JFLE1BQU0sRUFBRSxDQUFDO1VBQ1RxUSxXQUFXLEVBQUUsQ0FBQztVQUNkOVMsR0FBRyxFQUFFLENBQUM7VUFDTjRTLFlBQVksRUFBRWIseURBQWEsQ0FBQ2M7UUFDOUIsQ0FBQztNQUNIO01BRUEsSUFBTTRDLFVBQVUsR0FBQXJCLGFBQUEsQ0FBQUEsYUFBQSxLQUNYLElBQUksQ0FBQ1AsT0FBTyxDQUFDM2hCLFFBQVEsQ0FBQyxDQUFDO1FBQzFCNGdCLFdBQVcsRUFBRSxDQUFDO1FBQ2Q5UyxHQUFHLEVBQUU7TUFBQyxFQUNQO01BQ0QsSUFBTThTLFdBQVcsR0FBRyxJQUFJLENBQUN5QixhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztNQUMxRCxJQUFNNEIsZUFBZSxHQUFHLENBQUM1bkMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQ2tsQyxRQUFRLENBQUNwQixlQUFlLElBQUksSUFBSTtNQUMzRSxJQUFNdFMsR0FBRyxHQUFHbGhCLElBQUksQ0FBQ3MzQixHQUFHLENBQUMsR0FBRyxFQUFFRCxlQUFlLEdBQUdyRCxXQUFXLENBQUM7TUFFeEQsSUFBSSxJQUFJLENBQUN5QixhQUFhLEVBQUU7UUFDdEJrQixVQUFVLENBQUMzQyxXQUFXLEdBQUdBLFdBQVc7UUFDcEMyQyxVQUFVLENBQUN6VixHQUFHLEdBQUdBLEdBQUc7UUFFcEIsSUFBSSxJQUFJLENBQUN1VSxhQUFhLENBQUN1QixRQUFRLElBQUksSUFBSSxDQUFDdkIsYUFBYSxDQUFDdUIsUUFBUSxDQUFDcjhCLE1BQU0sRUFBRTtVQUNyRWc4QixVQUFVLENBQUN0QyxZQUFZLEdBQUcsSUFBSSxDQUFDb0IsYUFBYSxDQUFDdUIsUUFBUSxDQUFDQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzlEO01BQ0Y7TUFFQSxJQUFJTixVQUFVLENBQUNpRSxrQkFBa0IsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDRCxvQkFBb0IsQ0FBQ0Msa0JBQWtCLEdBQUdqRSxVQUFVLENBQUNpRSxrQkFBa0IsRUFBRTtRQUNySGpFLFVBQVUsQ0FBQzdDLFlBQVksR0FBR2IseURBQWEsQ0FBQ2tFLGNBQWM7TUFDeEQsQ0FBQyxNQUFNLElBQUlSLFVBQVUsQ0FBQ2tFLFFBQVEsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDRixvQkFBb0IsQ0FBQ0UsUUFBUSxHQUFHbEUsVUFBVSxDQUFDa0UsUUFBUSxFQUFFO1FBQzlGbEUsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDOEQsV0FBVztNQUNyRCxDQUFDLE1BQU0sSUFBSUosVUFBVSxDQUFDN2hCLEtBQUssRUFBRTtRQUMzQjZoQixVQUFVLENBQUM3QyxZQUFZLEdBQUdiLHlEQUFhLENBQUNtRSxZQUFZO01BQ3RELENBQUMsTUFBTTtRQUNMVCxVQUFVLENBQUM3QyxZQUFZLEdBQUdiLHlEQUFhLENBQUNjLGVBQWU7TUFDekQ7TUFFQSxJQUFJLENBQUM0RyxvQkFBb0IsQ0FBQ0Msa0JBQWtCLEdBQUdqRSxVQUFVLENBQUNpRSxrQkFBa0I7TUFDNUUsSUFBSSxDQUFDRCxvQkFBb0IsQ0FBQ0UsUUFBUSxHQUFHbEUsVUFBVSxDQUFDa0UsUUFBUTtNQUV4RCxPQUFPbEUsVUFBVTtJQUNuQjtFQUFDO0lBQUE1bUMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQUcsT0FBT0EsQ0FBQSxFQUFTO01BQ2QsSUFBSSxJQUFJLENBQUMya0MsT0FBTyxFQUFFO1FBQ2hCLElBQUksQ0FBQ0EsT0FBTyxDQUFDNEcsTUFBTSxDQUFDLENBQUM7UUFDckIsSUFBSSxDQUFDNUcsT0FBTyxDQUFDd0MsT0FBTyxDQUFDLENBQUM7TUFDeEI7TUFFQSxJQUFJLENBQUN4QyxPQUFPLEdBQUcsSUFBSTtJQUNyQjtFQUFDO0lBQUFobEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXlyQyxVQUFVQSxDQUFDRSxZQUEwQixFQUFRO01BQUEsSUFBQXRyQyxLQUFBO01BQ25ELElBQUksQ0FBQ3lrQyxPQUFPLENBQUM4RyxTQUFTLENBQUNELFlBQVksQ0FBQztNQUVwQyxJQUFNdnhCLE9BQU8sR0FBRyxJQUFJLENBQUMwcUIsT0FBTyxDQUFDK0csSUFBSSxDQUFDLElBQUksQ0FBQ2xHLFlBQVksQ0FBQyxDQUFDM3BCLElBQUksQ0FBQyxZQUFNO1FBQzlEM2IsS0FBSSxDQUFDd0osT0FBTyxDQUFDQyxJQUFJLENBQUMsdUNBQXVDLEVBQUV6SixLQUFJLENBQUNxbEMsU0FBUyxDQUFDO1FBRTFFLElBQUlybEMsS0FBSSxDQUFDbWxDLGFBQWEsQ0FBQ3ZOLElBQUksRUFBRTtVQUMzQjUzQixLQUFJLENBQUNtbEMsYUFBYSxDQUFDdk4sSUFBSSxDQUFDLENBQUM7UUFDM0I7TUFDRixDQUFDLENBQUMsQ0FBQzNiLEtBQUssQ0FBQyxVQUFBeFIsQ0FBQyxFQUFJO1FBQ1p6SyxLQUFJLENBQUN3SixPQUFPLENBQUNTLEtBQUssQ0FBQyxnREFBZ0QsRUFBRWpLLEtBQUksQ0FBQ3FsQyxTQUFTLEVBQUU1NkIsQ0FBQyxDQUFDZ2hDLElBQUksRUFBRWhoQyxDQUFDLENBQUM7TUFDakcsQ0FBQyxDQUFDO0lBQ0o7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQ3pKSDtBQUNBO0FBQ0E7O0FBRTJEO0FBQ2Y7QUFDRTtBQUVTO0FBQ2E7QUFBQSxJQUUvQ29qQixhQUFhO0VBZWhDLFNBQUFBLGNBQUEsRUFBYztJQUFBNXVCLDRJQUFBLE9BQUE0dUIsYUFBQTtJQUNaLE1BQU0sSUFBSWhwQixLQUFLLENBQUMsOERBQThELENBQUM7RUFDakY7RUFBQyxPQUFBckYseUlBQUEsQ0FBQXF1QixhQUFBO0lBQUFwdUIsR0FBQTtJQUFBRSxLQUFBLEVBZEQsU0FBT20zQixNQUFNQSxDQUFDL3NCLEtBQWEsRUFBRSs0QixjQUFjLEVBQUV3RSxxQkFBcUIsRUFBRUMsc0JBQXNCLEVBQUUxUSxtQkFBd0MsRUFBVztNQUM3SSxJQUFNNlUsaUJBQWlCLEdBQUc3aEMsZ0VBQWMsQ0FBQ0MsVUFBVSxDQUFDQyxLQUFLLENBQUMsQ0FBQ2tCLFlBQVk7TUFDdkUsSUFBTTBnQyxZQUFZLEdBQUdELGlCQUFpQixDQUFDMW9DLFFBQVEsQ0FBQyxXQUFXLENBQUM7TUFDNUQsSUFBTTRvQyxXQUFXLEdBQUdGLGlCQUFpQixDQUFDMW9DLFFBQVEsQ0FBQyxXQUFXLENBQUM7TUFFM0QsSUFBSTJvQyxZQUFZLElBQUlDLFdBQVcsRUFBRTtRQUMvQixPQUFPLElBQUkvSSxzREFBYSxDQUFDQyxjQUFjLEVBQUUsQ0FBQzhJLFdBQVcsR0FBR2hKLGtFQUF5QixDQUFDVyxJQUFJLEdBQUdYLGtFQUF5QixDQUFDaUosU0FBUyxFQUFFaFYsbUJBQW1CLENBQUM7TUFDcEo7TUFFQSxPQUFPLElBQUl3USx1REFBYyxDQUFDdkUsY0FBYyxFQUFFd0UscUJBQXFCLEVBQUVDLHNCQUFzQixFQUFFMVEsbUJBQW1CLENBQUM7SUFDL0c7RUFBQztBQUFBO0FBQUEzM0IsNElBQUEsQ0Fia0IydUIsYUFBYSxhQUNFMWxCLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxXQUFXLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDWnhFO0FBQ0E7QUFDQTs7QUFFdUQ7QUFDSDtBQUVOO0FBRTlDLElBQU13akMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLENBQUM7QUFDcEMsSUFBTUMsdUJBQXVCLEdBQUcsS0FBSztBQUFDLElBcUJqQi9ILFNBQVM7RUFVNUIsU0FBQUEsVUFBWTdWLFlBQThCLEVBQUUxVSxJQUFZLEVBQUU5USxRQUFnQixFQUFFdThCLFdBQW1CLEVBQUVubEIsT0FBZ0MsRUFBRTtJQUFBOWdCLDRJQUFBLE9BQUEra0MsU0FBQTtJQUFBOWtDLDRJQUFBLGtCQVQvRmlKLDZEQUFhLENBQUNHLFNBQVMsQ0FBQyxXQUFXLENBQUM7SUFBQXBKLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBQUFBLDRJQUFBO0lBVXRFLElBQUksQ0FBQ2ltQyxhQUFhLEdBQUdoWCxZQUFZO0lBQ2pDLElBQUksQ0FBQ2lYLEtBQUssR0FBRzNyQixJQUFJO0lBQ2pCLElBQUksQ0FBQzRyQixTQUFTLEdBQUcxOEIsUUFBUTtJQUN6QixJQUFJLENBQUMyOEIsWUFBWSxHQUFHQyxTQUFTLENBQUNMLFdBQVcsQ0FBQyxDQUFDTSxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztJQUNqRSxJQUFJLENBQUNsQixRQUFRLEdBQUd2a0IsT0FBTztFQUN6QjtFQUFDLE9BQUF2Z0IseUlBQUEsQ0FBQXdrQyxTQUFBO0lBQUF2a0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW96QixLQUFLQSxDQUFBLEVBQVM7TUFBQSxJQUFBL3lCLEtBQUE7TUFDWixJQUFJMGlDLCtEQUFnQixDQUFDc0osZUFBZSxFQUFFO1FBQ3BDLElBQU12QixhQUFhLEdBQUF6RixhQUFBLENBQUFBLGFBQUEsS0FDZCxJQUFJLENBQUNWLFFBQVE7VUFDaEJ3SCxrQkFBa0IsRUFBbEJBO1FBQWtCLEVBQ25CO1FBRUQsSUFBSSxDQUFDckgsT0FBTyxHQUFHLElBQUkvQiwrREFBZ0IsQ0FBQ3NKLGVBQWUsQ0FBQ2hJLFNBQVMsQ0FBQyxJQUFJLENBQUN4NkIsT0FBTyxFQUFFLElBQUksQ0FBQzI3QixhQUFhLEVBQUVzRixhQUFhLENBQUM7UUFDOUcsSUFBSSxDQUFDaEcsT0FBTyxDQUFDMVIsS0FBSyxDQUFDLElBQUksQ0FBQ3VTLFlBQVksQ0FBQztRQUVyQyxJQUFJLENBQUNiLE9BQU8sQ0FBQzc4QixnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsVUFBQXFrQyxXQUFXLEVBQUk7VUFDcEQsSUFBSWpzQyxLQUFJLENBQUNrc0MsU0FBUyxDQUFDLENBQUMsSUFBSUQsV0FBVyxLQUFLQSxXQUFXLENBQUNSLElBQUksS0FBSyxDQUFDLElBQUlRLFdBQVcsQ0FBQ0UsUUFBUSxLQUFLekosK0RBQWdCLENBQUNzSixlQUFlLENBQUNJLE1BQU0sQ0FBQ0QsUUFBUSxDQUFDRSxXQUFXLENBQUMsRUFBRTtZQUN4SnJzQyxLQUFJLENBQUN3SixPQUFPLENBQUM2SixJQUFJLENBQUMsbURBQW1ELEVBQUU0NEIsV0FBVyxDQUFDO1lBQ25GanNDLEtBQUksQ0FBQ3NzQyxZQUFZLENBQUMsQ0FBQztVQUNyQjtVQUVBdHNDLEtBQUksQ0FBQ3dKLE9BQU8sQ0FBQ1MsS0FBSyxDQUFDLCtCQUErQixFQUFFZ2lDLFdBQVcsQ0FBQztRQUNsRSxDQUFDLENBQUM7UUFFRjtNQUNGO0lBQ0Y7RUFBQztJQUFBeHNDLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFzRyxXQUFXQSxDQUFBLEVBQVk7TUFDckIsT0FBT3k4QiwrREFBZ0IsQ0FBQ3NKLGVBQWUsSUFBSXRKLCtEQUFnQixDQUFDc0osZUFBZSxDQUFDL2xDLFdBQVc7SUFDekY7RUFBQztJQUFBeEcsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBQW1qQixRQUFRQSxDQUFBLEVBQStCO01BQUEsSUFBQXlwQixxQkFBQSxFQUFBQyxzQkFBQTtNQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDL0gsT0FBTyxFQUFFO1FBQ2pCLE9BQU87VUFDTHRSLEtBQUssRUFBRSxDQUFDO1VBQ1JFLE1BQU0sRUFBRSxDQUFDO1VBQ1RxUSxXQUFXLEVBQUUsR0FBRztVQUNoQjlTLEdBQUcsRUFBRSxHQUFHO1VBQ1I0UyxZQUFZLEVBQUViLHlEQUFhLENBQUNjLGVBQWU7VUFDM0NNLFlBQVksRUFBRTtRQUNoQixDQUFDO01BQ0g7TUFFQSxJQUFNc0MsVUFBVSxHQUFHLElBQUksQ0FBQzVCLE9BQU8sQ0FBQzNoQixRQUFRLENBQUMsQ0FBQztNQUMxQyxJQUFNNGdCLFdBQVcsR0FBRzJDLFVBQVUsQ0FBQzNDLFdBQVcsSUFBSSxJQUFJLENBQUN5QixhQUFhLENBQUMsYUFBYSxDQUFDO01BQy9FLElBQU00QixlQUFlLEdBQUcsQ0FBQzVuQyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDa2xDLFFBQVEsQ0FBQ3BCLGVBQWUsSUFBSSxJQUFJO01BRTNFLEtBQUFxSixxQkFBQSxHQUFJLElBQUksQ0FBQ3BILGFBQWEsQ0FBQ3VCLFFBQVEsY0FBQTZGLHFCQUFBLGVBQTNCQSxxQkFBQSxDQUE2QmxpQyxNQUFNLEVBQUU7UUFDdkNnOEIsVUFBVSxDQUFDdEMsWUFBWSxHQUFHLElBQUksQ0FBQ29CLGFBQWEsQ0FBQ3VCLFFBQVEsQ0FBQ0MsR0FBRyxDQUFDLENBQUMsQ0FBQztNQUM5RDtNQUVBLElBQUlOLFVBQVUsQ0FBQ29HLFFBQVEsSUFBSXBHLFVBQVUsQ0FBQ3FHLFlBQVksS0FBSyxLQUFLLEVBQUU7UUFDNURyRyxVQUFVLENBQUMzQyxXQUFXLEdBQUdBLFdBQVcsR0FBRzJDLFVBQVUsQ0FBQ3pWLEdBQUc7TUFDdkQ7TUFFQSxJQUFJLENBQUN5VixVQUFVLENBQUMzQyxXQUFXLEVBQUU7UUFDM0IyQyxVQUFVLENBQUMzQyxXQUFXLEdBQUdBLFdBQVc7TUFDdEM7TUFFQSxJQUFJLENBQUMyQyxVQUFVLENBQUNvRyxRQUFRLEVBQUU7UUFDeEJwRyxVQUFVLENBQUN6VixHQUFHLEdBQUdsaEIsSUFBSSxDQUFDczNCLEdBQUcsQ0FBQyxHQUFHLEVBQUVELGVBQWUsR0FBR3JELFdBQVcsQ0FBQztNQUMvRDtNQUVBLEtBQUE4SSxzQkFBQSxHQUFJLElBQUksQ0FBQ3JILGFBQWEsQ0FBQ3VCLFFBQVEsY0FBQThGLHNCQUFBLGVBQTNCQSxzQkFBQSxDQUE2Qm5pQyxNQUFNLEVBQUU7UUFDdkNnOEIsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDa0UsY0FBYztNQUN4RCxDQUFDLE1BQU0sSUFBSVIsVUFBVSxDQUFDM0MsV0FBVyxHQUFHLENBQUMsRUFBRTtRQUNyQzJDLFVBQVUsQ0FBQzdDLFlBQVksR0FBR2IseURBQWEsQ0FBQzhELFdBQVc7TUFDckQsQ0FBQyxNQUFNLElBQUlKLFVBQVUsQ0FBQzdoQixLQUFLLEVBQUU7UUFDM0I2aEIsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDbUUsWUFBWTtNQUN0RCxDQUFDLE1BQU07UUFDTFQsVUFBVSxDQUFDN0MsWUFBWSxHQUFHYix5REFBYSxDQUFDYyxlQUFlO01BQ3pEO01BRUEsT0FBTzRDLFVBQVU7SUFDbkI7RUFBQztJQUFBNW1DLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQUFHLE9BQU9BLENBQUEsRUFBUztNQUNkLElBQUksSUFBSSxDQUFDMmtDLE9BQU8sRUFBRTtRQUNoQixJQUFJLENBQUNBLE9BQU8sQ0FBQzNrQyxPQUFPLENBQUMsQ0FBQztNQUN4QjtNQUVBLElBQUksQ0FBQzJrQyxPQUFPLEdBQUcsSUFBSTtJQUNyQjtFQUFDO0lBQUFobEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUXVzQyxTQUFTQSxDQUFBLEVBQVk7TUFDM0IsSUFBTVMsZ0NBQWdDLEdBQUcsQ0FBQyxJQUFJLENBQUNDLGVBQWUsSUFBSXp0QyxJQUFJLENBQUNDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDd3RDLGVBQWUsR0FBR2IsdUJBQXVCO01BRTdILE9BQU8sSUFBSSxDQUFDNUcsYUFBYSxJQUFJLElBQUksQ0FBQ1YsT0FBTyxJQUFJLElBQUksQ0FBQ1UsYUFBYSxDQUFDdUIsUUFBUSxDQUFDcjhCLE1BQU0sS0FBSyxDQUFDLElBQUlzaUMsZ0NBQWdDO0lBQzNIO0VBQUM7SUFBQWx0QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFRMnNDLFlBQVlBLENBQUEsRUFBUztNQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDSixTQUFTLENBQUMsQ0FBQyxFQUFFO1FBQ3JCO01BQ0Y7TUFFQSxJQUFJLENBQUMxaUMsT0FBTyxDQUFDNkosSUFBSSxDQUFDLDJFQUEyRSxFQUFFLElBQUksQ0FBQ2d5QixTQUFTLEVBQUUwRyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7TUFFOUksSUFBSSxDQUFDYSxlQUFlLEdBQUd6dEMsSUFBSSxDQUFDQyxHQUFHLENBQUMsQ0FBQztNQUVqQyxJQUFJLENBQUN5dEMsTUFBTSxDQUFDLENBQUM7SUFDZjtFQUFDO0lBQUFwdEMsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBUWt0QyxNQUFNQSxDQUFBLEVBQVM7TUFDckIsSUFBSSxDQUFDcEksT0FBTyxDQUFDM2tDLE9BQU8sQ0FBQyxDQUFDO01BRXRCLElBQUksQ0FBQzJrQyxPQUFPLEdBQUcsSUFBSTtNQUVuQixJQUFJLENBQUMxUixLQUFLLENBQUMsQ0FBQztJQUNkO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDekpIO0FBQ0E7QUFDQTtBQUZBLElBT3FCdkYsaUJBQWlCO0VBc0JwQyxTQUFBQSxrQkFBQSxFQUFjO0lBQUF2dUIsNElBQUEsT0FBQXV1QixpQkFBQTtJQUNaLE1BQU0sSUFBSTNvQixLQUFLLENBQUMsa0VBQWtFLENBQUM7RUFDckY7RUFBQyxPQUFBckYseUlBQUEsQ0FBQWd1QixpQkFBQTtJQUFBL3RCLEdBQUE7SUFBQUUsS0FBQSxFQXZCRCxTQUFPNDJCLHlCQUF5QkEsQ0FBQ3VXLElBQXVCLEVBQUV2N0IsSUFBd0IsRUFBRTtNQUNsRixJQUFJLE9BQU9BLElBQUksS0FBSyxVQUFVLEVBQUU7UUFDOUIsT0FBTztVQUNMMmpCLEtBQUssRUFBRSxLQUFLO1VBQ1pDLGdCQUFnQixnQkFBQTV5QixNQUFBLENBQWdCdXFDLElBQUksaURBQUF2cUMsTUFBQSxDQUFBNGEsb0lBQUEsQ0FBcUQ1TCxJQUFJO1FBQy9GLENBQUM7TUFDSDtNQUVBLElBQUlBLElBQUksQ0FBQ2xILE1BQU0sS0FBSyxDQUFDLEVBQUU7UUFDckIsT0FBTztVQUNMNnFCLEtBQUssRUFBRSxLQUFLO1VBQ1pDLGdCQUFnQixnQkFBQTV5QixNQUFBLENBQWdCdXFDLElBQUkseUVBQUF2cUMsTUFBQSxDQUFzRWdQLElBQUksQ0FBQ2xILE1BQU07UUFDdkgsQ0FBQztNQUNIO01BRUEsT0FBTztRQUNMNnFCLEtBQUssRUFBRSxJQUFJO1FBQ1hDLGdCQUFnQixFQUFFO01BQ3BCLENBQUM7SUFDSDtFQUFDO0FBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDM0JIO0FBQ0E7QUFDQTtBQUMrQztBQUNRO0FBQ007QUFHTztBQUNpQztBQUFBLElBSWhGK1IsaUJBQWlCO0VBc05wQyxTQUFBQSxrQkFBQSxFQUFjO0lBQUFqb0MsNElBQUEsT0FBQWlvQyxpQkFBQTtJQUNaLE1BQU0sSUFBSXJpQyxLQUFLLENBQUMsa0VBQWtFLENBQUM7RUFDckY7RUFBQyxPQUFBckYseUlBQUEsQ0FBQTBuQyxpQkFBQTtJQUFBem5DLEdBQUE7SUFBQUUsS0FBQSxFQXZORCxTQUFPcXBDLGdDQUFnQ0EsQ0FBQzFYLE1BQW1CLEVBQUUyYixTQUEyQixFQUFFdGUsc0JBQWdFLEVBQUVDLHNCQUFnRSxFQUFFek0sVUFBa0IsRUFBRUYsVUFBa0IsRUFBaUM7TUFDblMsSUFBTXVSLFdBQTJCLEdBQUcsSUFBSTUwQiw0REFBYyxDQUFDLENBQUM7TUFFeEQweUIsTUFBTSxDQUFDN1AsU0FBUyxDQUFDLENBQUMsQ0FBQ3ZTLE9BQU8sQ0FBQyxVQUFBeVMsS0FBSyxFQUFJO1FBQ2xDLElBQU11ckIsUUFBUSxHQUFHRCxTQUFTLENBQUM1VCxNQUFNLENBQUMsVUFBQThULE9BQU87VUFBQSxPQUFJQSxPQUFPLENBQUN4ckIsS0FBSyxLQUFLQSxLQUFLO1FBQUEsRUFBQyxDQUFDLENBQUMsQ0FBQztRQUN4RSxJQUFNbEksSUFBMEIsR0FBR2tJLEtBQUssQ0FBQ2xJLElBQTRCO1FBRXJFLFFBQVFBLElBQUk7VUFDVixLQUFLLE9BQU87WUFBRTtjQUNaLElBQUlrVixzQkFBc0IsRUFBRTtnQkFDMUIsSUFBSWhxQixzRUFBaUIsQ0FBQyt4QixnQ0FBZ0MsRUFBRTtrQkFDdEQsSUFBTTBXLE1BQU0sR0FBRyxJQUFJQyxNQUFNLENBQUMsSUFBSTVuQyxHQUFHLENBQUMsMkZBQTZDLENBQUMsRUFBRTtvQkFBQzRCLElBQUksRUFBRSxTQUFRO2tCQUFBLENBQUMsQ0FBQztrQkFFbkcrbEMsTUFBTSxDQUFDSSxTQUFTO29CQUFBLElBQUEvbUMsSUFBQSxHQUFBd1QsOElBQUEsY0FBQUMsNElBQUEsQ0FBRyxTQUFBRSxRQUFNcXpCLEtBQUs7c0JBQUEsT0FBQXZ6Qiw0SUFBQSxVQUFBTSxTQUFBQyxRQUFBO3dCQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBRSxJQUFBOzBCQUFBOzRCQUFBRixRQUFBLENBQUFFLElBQUE7NEJBQUEsT0FDakJnVSxzQkFBc0IsQ0FBQ2hOLEtBQUssRUFBRThyQixLQUFLLENBQUMxNEIsSUFBSSxDQUFDMjRCLEtBQUssQ0FBQzswQkFBQTs0QkFBQSxJQUFBanpCLFFBQUEsQ0FBQVEsSUFBQTs4QkFBQVIsUUFBQSxDQUFBRSxJQUFBOzhCQUFBOzRCQUFBOzRCQUN4RHl5QixNQUFNLENBQUNPLFdBQVcsQ0FBQzs4QkFBQ0MsaUJBQWlCLEVBQUU7NEJBQUksQ0FBQyxDQUFDOzBCQUFDOzBCQUFBOzRCQUFBLE9BQUFuekIsUUFBQSxDQUFBUyxJQUFBO3dCQUFBO3NCQUFBLEdBQUFkLE9BQUE7b0JBQUEsQ0FFakQ7b0JBQUEsaUJBQUFlLEVBQUE7c0JBQUEsT0FBQTFVLElBQUEsQ0FBQTJVLEtBQUEsT0FBQXpJLFNBQUE7b0JBQUE7a0JBQUE7a0JBRUR1NkIsUUFBUSxDQUFDVyxTQUFTLEdBQUcsSUFBSWhoQyxxQkFBcUIsQ0FBQ3VnQyxNQUFNLEVBQUU7b0JBQ3JEM3pCLElBQUksRUFBRWtJLEtBQUssQ0FBQ2xJLElBQUk7b0JBQ2hCNkosS0FBSyxFQUFFbkI7a0JBQ1QsQ0FBQyxDQUFDO2tCQUNGcVIsV0FBVyxDQUFDbnpCLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQyxZQUFNO29CQUNuQ3l1QyxNQUFNLENBQUNVLFNBQVMsQ0FBQyxDQUFDO2tCQUNwQixDQUFDLENBQUMsQ0FBQztrQkFFSDtnQkFDRjtnQkFFQSxJQUFNQyw4QkFBd0c7a0JBQUEsSUFBQS9tQyxLQUFBLEdBQUFpVCw4SUFBQSxjQUFBQyw0SUFBQSxDQUFHLFNBQUFvQixTQUFNb3lCLEtBQUssRUFBRU0sVUFBVTtvQkFBQSxJQUFBQyxTQUFBO29CQUFBLE9BQUEvekIsNElBQUEsVUFBQXFCLFVBQUFDLFNBQUE7c0JBQUEsa0JBQUFBLFNBQUEsQ0FBQWQsSUFBQSxHQUFBYyxTQUFBLENBQUFiLElBQUE7d0JBQUE7MEJBQUFhLFNBQUEsQ0FBQWIsSUFBQTswQkFBQSxPQUMzSGdVLHNCQUFzQixDQUFDaE4sS0FBSyxFQUFFK3JCLEtBQUssQ0FBQzt3QkFBQTswQkFBQSxJQUFBbHlCLFNBQUEsQ0FBQVAsSUFBQTs0QkFBQU8sU0FBQSxDQUFBYixJQUFBOzRCQUFBOzBCQUFBOzBCQUc3QyxJQUFJK3lCLEtBQUssQ0FBQ3JtQyxJQUFJLEtBQUssS0FBSyxFQUFFOzRCQUN4QjRtQyxTQUFTLEdBQUdsQixrRUFBeUIsQ0FBQ21CLDhCQUE4QixDQUFDL3JCLFVBQVUsQ0FBQzswQkFDbEYsQ0FBQyxNQUFNOzRCQUNMOHJCLFNBQVMsR0FBR2xCLGtFQUF5QixDQUFDb0IsOEJBQThCLENBQUNoc0IsVUFBVSxDQUFDOzBCQUNsRjswQkFBQyxNQUVHOHJCLFNBQVMsS0FBS2pCLGlFQUFTOzRCQUFBeHhCLFNBQUEsQ0FBQWIsSUFBQTs0QkFBQTswQkFBQTswQkFBQSxPQUFBYSxTQUFBLENBQUFSLE1BQUE7d0JBQUE7MEJBSTNCMHlCLEtBQUssQ0FBQzM0QixJQUFJLEdBQUdrNUIsU0FBUyxJQUFJUCxLQUFLLENBQUMzNEIsSUFBSTswQkFBQ3lHLFNBQUEsQ0FBQWIsSUFBQTswQkFBQTt3QkFBQTswQkFFckMsSUFBSSt5QixLQUFLLENBQUNybUMsSUFBSSxLQUFLLEtBQUssRUFBRTs0QkFDeEJxbUMsS0FBSyxDQUFDMzRCLElBQUksR0FBR2c0QixrRUFBeUIsQ0FBQ3FCLCtCQUErQixDQUFDanNCLFVBQVUsQ0FBQyxJQUFJdXJCLEtBQUssQ0FBQzM0QixJQUFJOzBCQUNsRyxDQUFDLE1BQU07NEJBQ0wyNEIsS0FBSyxDQUFDMzRCLElBQUksR0FBR2c0QixrRUFBeUIsQ0FBQ3NCLCtCQUErQixDQUFDbHNCLFVBQVUsQ0FBQyxJQUFJdXJCLEtBQUssQ0FBQzM0QixJQUFJOzBCQUNsRzt3QkFBQzswQkFHSGk1QixVQUFVLENBQUNNLE9BQU8sQ0FBQ1osS0FBSyxDQUFDO3dCQUFDO3dCQUFBOzBCQUFBLE9BQUFseUIsU0FBQSxDQUFBTixJQUFBO3NCQUFBO29CQUFBLEdBQUFJLFFBQUE7a0JBQUEsQ0FDM0I7a0JBQUEsZ0JBeEJLeXlCLDhCQUF3R0EsQ0FBQWxuQixHQUFBLEVBQUFLLEdBQUE7b0JBQUEsT0FBQWxnQixLQUFBLENBQUFvVSxLQUFBLE9BQUF6SSxTQUFBO2tCQUFBO2dCQUFBLEdBd0I3RztnQkFFRCxJQUFNNDdCLFdBQVcsR0FBRyxJQUFJQyxlQUFlLENBQUM7a0JBQUNYLFNBQVMsRUFBRUU7Z0JBQThCLENBQUMsQ0FBQztnQkFDcEYsSUFBTVUsZUFBZSxHQUFHdkIsUUFBUSxDQUFDdGdDLG9CQUFvQixDQUFDLENBQUM7Z0JBQ3ZELElBQU04aEMsTUFBTSxHQUFHRCxlQUFlLENBQUNFLFFBQVE7Z0JBQ3ZDLElBQU1DLElBQUksR0FBR0gsZUFBZSxDQUFDSSxRQUFRO2dCQUVyQ0gsTUFBTSxDQUNISSxXQUFXLENBQUNQLFdBQVcsQ0FBQyxDQUN4QlEsTUFBTSxDQUFDSCxJQUFJLENBQUM7Y0FDakI7Y0FFQTtZQUNGO1VBRUEsS0FBSyxPQUFPO1lBQUU7Y0FDWixJQUFJaGdCLHNCQUFzQixFQUFFO2dCQUMxQixJQUFJanFCLHNFQUFpQixDQUFDK3hCLGdDQUFnQyxFQUFFO2tCQUN0RCxJQUFNMFcsT0FBTSxHQUFHLElBQUlDLE1BQU0sQ0FBQyxJQUFJNW5DLEdBQUcsQ0FBQywyRkFBNkMsQ0FBQyxFQUFFO29CQUFDNEIsSUFBSSxFQUFFLFNBQVE7a0JBQUEsQ0FBQyxDQUFDO2tCQUVuRytsQyxPQUFNLENBQUNJLFNBQVM7b0JBQUEsSUFBQWhHLEtBQUEsR0FBQXZ0Qiw4SUFBQSxjQUFBQyw0SUFBQSxDQUFHLFNBQUFrRixTQUFNcXVCLEtBQUs7c0JBQUEsT0FBQXZ6Qiw0SUFBQSxVQUFBc0YsVUFBQUMsU0FBQTt3QkFBQSxrQkFBQUEsU0FBQSxDQUFBL0UsSUFBQSxHQUFBK0UsU0FBQSxDQUFBOUUsSUFBQTswQkFBQTs0QkFBQThFLFNBQUEsQ0FBQTlFLElBQUE7NEJBQUEsT0FDakJpVSxzQkFBc0IsQ0FBQ2pOLEtBQUssRUFBRThyQixLQUFLLENBQUMxNEIsSUFBSSxDQUFDMjRCLEtBQUssQ0FBQzswQkFBQTs0QkFBQSxJQUFBanVCLFNBQUEsQ0FBQXhFLElBQUE7OEJBQUF3RSxTQUFBLENBQUE5RSxJQUFBOzhCQUFBOzRCQUFBOzRCQUN4RHl5QixPQUFNLENBQUNPLFdBQVcsQ0FBQzs4QkFBQ0MsaUJBQWlCLEVBQUU7NEJBQUksQ0FBQyxDQUFDOzBCQUFDOzBCQUFBOzRCQUFBLE9BQUFudUIsU0FBQSxDQUFBdkUsSUFBQTt3QkFBQTtzQkFBQSxHQUFBa0UsUUFBQTtvQkFBQSxDQUVqRDtvQkFBQSxpQkFBQXNJLEdBQUE7c0JBQUEsT0FBQThmLEtBQUEsQ0FBQXBzQixLQUFBLE9BQUF6SSxTQUFBO29CQUFBO2tCQUFBO2tCQUVEdTZCLFFBQVEsQ0FBQ1csU0FBUyxHQUFHLElBQUloaEMscUJBQXFCLENBQUN1Z0MsT0FBTSxFQUFFO29CQUNyRDN6QixJQUFJLEVBQUVrSSxLQUFLLENBQUNsSSxJQUFJO29CQUNoQjZKLEtBQUssRUFBRXJCO2tCQUNULENBQUMsQ0FBQztrQkFFRixJQUFNYixXQUFXLEdBQUcsSUFBSTR0QixXQUFXLENBQUMsQ0FBQztrQkFDckMsSUFBTUMsV0FBVyxHQUFHLElBQUlDLEtBQUssQ0FBQyxDQUFDO2tCQUUvQkQsV0FBVyxDQUFDaGMsU0FBUyxHQUFHN1IsV0FBVztrQkFDbkM1VCxRQUFRLENBQUN1TixJQUFJLENBQUNvMEIsV0FBVyxDQUFDRixXQUFXLENBQUM7a0JBRXRDemIsV0FBVyxDQUFDbnpCLEdBQUcsQ0FBQyxJQUFJMUIsd0RBQVUsQ0FBQyxZQUFNO29CQUNuQ3l1QyxPQUFNLENBQUNVLFNBQVMsQ0FBQyxDQUFDO29CQUNsQnRnQyxRQUFRLENBQUN1TixJQUFJLENBQUNxMEIsV0FBVyxDQUFDSCxXQUFXLENBQUM7a0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2tCQUVIO2dCQUNGO2dCQUVBLElBQU1sQiwrQkFBd0c7a0JBQUEsSUFBQWpHLEtBQUEsR0FBQTd0Qiw4SUFBQSxjQUFBQyw0SUFBQSxDQUFHLFNBQUFrTixTQUFNc21CLEtBQUssRUFBRU0sVUFBVTtvQkFBQSxPQUFBOXpCLDRJQUFBLFVBQUFxTixVQUFBQyxTQUFBO3NCQUFBLGtCQUFBQSxTQUFBLENBQUE5TSxJQUFBLEdBQUE4TSxTQUFBLENBQUE3TSxJQUFBO3dCQUFBOzBCQUFBNk0sU0FBQSxDQUFBN00sSUFBQTswQkFBQSxPQUMzSGlVLHNCQUFzQixDQUFDak4sS0FBSyxFQUFFK3JCLEtBQUssQ0FBQzt3QkFBQTswQkFBQSxJQUFBbG1CLFNBQUEsQ0FBQXZNLElBQUE7NEJBQUF1TSxTQUFBLENBQUE3TSxJQUFBOzRCQUFBOzBCQUFBOzBCQUM3Qyt5QixLQUFLLENBQUMzNEIsSUFBSSxHQUFHZzRCLGtFQUF5QixDQUFDc0MsNEJBQTRCLENBQUMsQ0FBQzswQkFBQzduQixTQUFBLENBQUE3TSxJQUFBOzBCQUFBO3dCQUFBOzBCQUV0RSt5QixLQUFLLENBQUMzNEIsSUFBSSxHQUFHZzRCLGtFQUF5QixDQUFDdUMsK0JBQStCLENBQUNydEIsVUFBVSxDQUFDLElBQUl5ckIsS0FBSyxDQUFDMzRCLElBQUk7d0JBQUM7MEJBR25HaTVCLFVBQVUsQ0FBQ00sT0FBTyxDQUFDWixLQUFLLENBQUM7d0JBQUM7d0JBQUE7MEJBQUEsT0FBQWxtQixTQUFBLENBQUF0TSxJQUFBO3NCQUFBO29CQUFBLEdBQUFrTSxRQUFBO2tCQUFBLENBQzNCO2tCQUFBLGdCQVJLMm1CLCtCQUF3R0EsQ0FBQTlQLEdBQUEsRUFBQUMsR0FBQTtvQkFBQSxPQUFBNEosS0FBQSxDQUFBMXNCLEtBQUEsT0FBQXpJLFNBQUE7a0JBQUE7Z0JBQUEsR0FRN0c7Z0JBRUQsSUFBTTQ3QixZQUFXLEdBQUcsSUFBSUMsZUFBZSxDQUFDO2tCQUFDWCxTQUFTLEVBQUVFO2dCQUE4QixDQUFDLENBQUM7Z0JBQ3BGLElBQU1VLGdCQUFlLEdBQUd2QixRQUFRLENBQUN0Z0Msb0JBQW9CLENBQUMsQ0FBQztnQkFDdkQsSUFBTThoQyxPQUFNLEdBQUdELGdCQUFlLENBQUNFLFFBQVE7Z0JBQ3ZDLElBQU1DLEtBQUksR0FBR0gsZ0JBQWUsQ0FBQ0ksUUFBUTtnQkFFckNILE9BQU0sQ0FDSEksV0FBVyxDQUFDUCxZQUFXLENBQUMsQ0FDeEJRLE1BQU0sQ0FBQ0gsS0FBSSxDQUFDO2NBQ2pCO2NBRUE7WUFDRjtVQUVBO1lBQ0U1OUIsbUVBQWlCLENBQUN5SSxJQUFJLENBQUM7UUFDM0I7TUFDRixDQUFDLENBQUM7TUFFRixPQUFPO1FBQUMrWixXQUFXLEVBQVhBO01BQVcsQ0FBQztJQUN0QjtFQUFDO0lBQUEvekIsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3VwQyxtQ0FBbUNBLENBQUM1WCxNQUFtQixFQUFFN0MsNEJBQStELEVBQUVDLDRCQUE4RCxFQUFpRTtNQUM5UCxJQUFNeWEsaUJBQWlCLEdBQUcsSUFBSTZGLFdBQVcsQ0FBQyxDQUFDO01BQzNDLElBQU14YixXQUEyQixHQUFHLElBQUk1MEIsNERBQWMsQ0FBQyxDQUFDO01BRXhEMHlCLE1BQU0sQ0FBQzdQLFNBQVMsQ0FBQyxDQUFDLENBQUN2UyxPQUFPLENBQUMsVUFBQXlTLEtBQUssRUFBSTtRQUNsQyxJQUFNbEksSUFBMEIsR0FBR2tJLEtBQUssQ0FBQ2xJLElBQTRCO1FBRXJFLFFBQVFBLElBQUk7VUFDVixLQUFLLE9BQU87WUFBRTtjQUNaLElBQUlnViw0QkFBNEIsRUFBRTtnQkFDaEMsSUFBTThnQixpQ0FBdUYsR0FBRyxTQUExRkEsaUNBQXVGQSxDQUFJN0IsS0FBSyxFQUFFTSxVQUFVLEVBQUs7a0JBQ3JIdmYsNEJBQTRCLENBQUM5TSxLQUFLLEVBQUUrckIsS0FBSyxFQUFFTSxVQUFVLENBQUM7Z0JBQ3hELENBQUM7Z0JBRUQsSUFBTXdCLFVBQVUsR0FBRzd0QixLQUE4QjtnQkFDakQsSUFBTTRzQixXQUFXLEdBQUcsSUFBSUMsZUFBZSxDQUFDO2tCQUFDWCxTQUFTLEVBQUUwQjtnQkFBaUMsQ0FBQyxDQUFDO2dCQUN2RixJQUFNRSxTQUFTLEdBQUcsSUFBSWpqQyx5QkFBeUIsQ0FBQztrQkFBQ21WLEtBQUssRUFBRTZ0QjtnQkFBVSxDQUFDLENBQUM7Z0JBQ3BFLElBQU1FLFNBQVMsR0FBRyxJQUFJampDLHlCQUF5QixDQUFDO2tCQUFDZ04sSUFBSSxFQUFFKzFCLFVBQVUsQ0FBQy8xQjtnQkFBSSxDQUFDLENBQUM7Z0JBQ3hFLElBQU1pMUIsTUFBTSxHQUFHZSxTQUFTLENBQUNkLFFBQVE7Z0JBQ2pDLElBQU1DLElBQUksR0FBR2MsU0FBUyxDQUFDYixRQUFRO2dCQUUvQkgsTUFBTSxDQUNISSxXQUFXLENBQUNQLFdBQVcsQ0FBQyxDQUN4QlEsTUFBTSxDQUFDSCxJQUFJLENBQUM7Z0JBRWZ6RixpQkFBaUIsQ0FBQ2xoQixRQUFRLENBQUN5bkIsU0FBUyxDQUFDO2dCQUNyQ2xjLFdBQVcsQ0FBQ256QixHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUMsWUFBTTtrQkFDbkN3cUMsaUJBQWlCLENBQUN3RyxXQUFXLENBQUNELFNBQVMsQ0FBQztnQkFDMUMsQ0FBQyxDQUFDLENBQUM7Y0FDTCxDQUFDLE1BQU07Z0JBQ0x2RyxpQkFBaUIsQ0FBQ2xoQixRQUFRLENBQUN0RyxLQUFLLENBQUM7Y0FDbkM7Y0FFQTtZQUNGO1VBRUEsS0FBSyxPQUFPO1lBQUU7Y0FDWixJQUFJK00sNEJBQTRCLEVBQUU7Z0JBQ2hDLElBQU02Z0Isa0NBQXFGLEdBQUcsU0FBeEZBLGtDQUFxRkEsQ0FBSTdCLEtBQUssRUFBRU0sVUFBVSxFQUFLO2tCQUNuSHRmLDRCQUE0QixDQUFDL00sS0FBSyxFQUFFK3JCLEtBQUssRUFBRU0sVUFBVSxDQUFDO2dCQUN4RCxDQUFDO2dCQUVELElBQU00QixVQUFVLEdBQUdqdUIsS0FBOEI7Z0JBQ2pELElBQU00c0IsYUFBVyxHQUFHLElBQUlDLGVBQWUsQ0FBQztrQkFBQ1gsU0FBUyxFQUFFMEI7Z0JBQWlDLENBQUMsQ0FBQztnQkFDdkYsSUFBTUUsVUFBUyxHQUFHLElBQUlqakMseUJBQXlCLENBQUM7a0JBQUNtVixLQUFLLEVBQUVpdUI7Z0JBQVUsQ0FBQyxDQUFDO2dCQUNwRSxJQUFNRixVQUFTLEdBQUcsSUFBSWpqQyx5QkFBeUIsQ0FBQztrQkFBQ2dOLElBQUksRUFBRW0yQixVQUFVLENBQUNuMkI7Z0JBQUksQ0FBQyxDQUFDO2dCQUN4RSxJQUFNaTFCLFFBQU0sR0FBR2UsVUFBUyxDQUFDZCxRQUFRO2dCQUNqQyxJQUFNQyxNQUFJLEdBQUdjLFVBQVMsQ0FBQ2IsUUFBUTtnQkFFL0JILFFBQU0sQ0FDSEksV0FBVyxDQUFDUCxhQUFXLENBQUMsQ0FDeEJRLE1BQU0sQ0FBQ0gsTUFBSSxDQUFDO2dCQUVmekYsaUJBQWlCLENBQUNsaEIsUUFBUSxDQUFDeW5CLFVBQVMsQ0FBQztnQkFFckMsSUFBTXR1QixXQUFXLEdBQUcsSUFBSTR0QixXQUFXLENBQUMsQ0FBQztnQkFDckMsSUFBTUMsV0FBVyxHQUFHLElBQUlDLEtBQUssQ0FBQyxDQUFDO2dCQUUvQjl0QixXQUFXLENBQUM2RyxRQUFRLENBQUN0RyxLQUFLLENBQUM7Z0JBQzNCc3RCLFdBQVcsQ0FBQ2hjLFNBQVMsR0FBRzdSLFdBQVc7Z0JBQ25DNVQsUUFBUSxDQUFDdU4sSUFBSSxDQUFDbzBCLFdBQVcsQ0FBQ0YsV0FBVyxDQUFDO2dCQUN0Q3piLFdBQVcsQ0FBQ256QixHQUFHLENBQUMsSUFBSTFCLHdEQUFVLENBQUMsWUFBTTtrQkFDbkN3cUMsaUJBQWlCLENBQUN3RyxXQUFXLENBQUNELFVBQVMsQ0FBQztrQkFDeENsaUMsUUFBUSxDQUFDdU4sSUFBSSxDQUFDcTBCLFdBQVcsQ0FBQ0gsV0FBVyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsQ0FBQztjQUNMLENBQUMsTUFBTTtnQkFDTDlGLGlCQUFpQixDQUFDbGhCLFFBQVEsQ0FBQ3RHLEtBQUssQ0FBQztjQUNuQztjQUVBO1lBQ0Y7VUFFQTtZQUNFM1EsbUVBQWlCLENBQUN5SSxJQUFJLENBQUM7UUFDM0I7TUFDRixDQUFDLENBQUM7TUFFRixPQUFPO1FBQ0wwdkIsaUJBQWlCLEVBQWpCQSxpQkFBaUI7UUFDakIzVixXQUFXLEVBQVhBO01BQ0YsQ0FBQztJQUNIO0VBQUM7QUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FDak9IO0FBQ0E7QUFDQTtBQUZBLElBT3FCL0Ysb0JBQW9CO0VBQUEsU0FBQUEscUJBQUE7SUFBQXh1Qiw0SUFBQSxPQUFBd3VCLG9CQUFBO0VBQUE7RUFBQSxPQUFBanVCLHlJQUFBLENBQUFpdUIsb0JBQUE7SUFBQWh1QixHQUFBO0lBQUFFLEtBQUEsRUFDdkMsU0FBTzAyQixpQ0FBaUNBLENBQUN5VyxJQUF1QixFQUFFdjdCLElBQTJCLEVBQUU7TUFDN0YsSUFBSSxPQUFPQSxJQUFJLEtBQUssVUFBVSxFQUFFO1FBQzlCLE9BQU87VUFDTDJqQixLQUFLLEVBQUUsS0FBSztVQUNaQyxnQkFBZ0IsZ0JBQUE1eUIsTUFBQSxDQUFnQnVxQyxJQUFJLDBEQUFBdnFDLE1BQUEsQ0FBQTRhLG9JQUFBLENBQThENUwsSUFBSTtRQUN4RyxDQUFDO01BQ0g7TUFFQSxJQUFJQSxJQUFJLENBQUNsSCxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3JCLE9BQU87VUFDTDZxQixLQUFLLEVBQUUsS0FBSztVQUNaQyxnQkFBZ0IsZ0JBQUE1eUIsTUFBQSxDQUFnQnVxQyxJQUFJLGtGQUFBdnFDLE1BQUEsQ0FBK0VnUCxJQUFJLENBQUNsSCxNQUFNO1FBQ2hJLENBQUM7TUFDSDtNQUVBLE9BQU87UUFDTDZxQixLQUFLLEVBQUUsSUFBSTtRQUNYQyxnQkFBZ0IsRUFBRTtNQUNwQixDQUFDO0lBQ0g7RUFBQztBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUMzQkg7QUFDQTtBQUNBOztBQUV3RDtBQUVqRCxJQUFNNlgsU0FBUyxHQUFHNkMsTUFBTSxDQUFDLENBQUM7QUFBQyxJQUliOUMseUJBQXlCO0VBNEo1QyxTQUFBQSwwQkFBQSxFQUFzQjtJQUFBOXRDLDRJQUFBLE9BQUE4dEMseUJBQUE7SUFDcEIsTUFBTSxJQUFJbG9DLEtBQUssQ0FBQywwRUFBMEUsQ0FBQztFQUM3RjtFQUFDLE9BQUFyRix5SUFBQSxDQUFBdXRDLHlCQUFBO0lBQUF0dEMsR0FBQTtJQUFBRSxLQUFBLEVBekhELFNBQU8ydkMsK0JBQStCQSxDQUFDaHNCLEtBQWEsRUFBMkI7TUFDN0UsUUFBUUEsS0FBSyxDQUFDd3NCLFdBQVcsQ0FBQyxDQUFDO1FBQ3pCLEtBQUssTUFBTTtVQUFFO1lBQ1gsT0FBTy9DLHlCQUF5QixDQUFDZ0QseUJBQXlCLENBQUNDLElBQUksQ0FBQ0MsTUFBTTtVQUN4RTtRQUVBO1VBQVM7WUFDUCxPQUFPdnJDLFNBQVM7VUFDbEI7TUFDRjtJQUNGO0VBQUM7SUFBQWpGLEdBQUE7SUFBQUUsS0FBQSxFQUVELFNBQU8wdkMsNEJBQTRCQSxDQUFBLEVBQWdCO01BQ2pELE9BQU90Qyx5QkFBeUIsQ0FBQ21ELGVBQWUsQ0FBQ0QsTUFBTTtJQUN6RDtFQUFDO0lBQUF4d0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3l1QywrQkFBK0JBLENBQUM5cUIsS0FBYSxFQUEyQjtNQUM3RSxRQUFRQSxLQUFLLENBQUN3c0IsV0FBVyxDQUFDLENBQUM7UUFDekIsS0FBSyxNQUFNO1VBQUU7WUFDWCxJQUFJL0MseUJBQXlCLENBQUNvRCx5Q0FBeUMsRUFBRTtjQUN2RXBELHlCQUF5QixDQUFDcUQsZ0NBQWdDLEdBQUdyRCx5QkFBeUIsQ0FBQ3NELHFDQUFxQztjQUU1SCxPQUFPdEQseUJBQXlCLENBQUN1RCxlQUFlLENBQUNDLE1BQU0sQ0FBQ04sTUFBTTtZQUNoRTtZQUVBLE9BQU9sRCx5QkFBeUIsQ0FBQ3lELDRCQUE0QixDQUFDQyxJQUFJLENBQUNSLE1BQU07VUFDM0U7UUFFQSxLQUFLLEtBQUs7VUFBRTtZQUNWLE9BQU9sRCx5QkFBeUIsQ0FBQ3lELDRCQUE0QixDQUFDRSxHQUFHLENBQUNULE1BQU07VUFDMUU7UUFFQSxLQUFLLEtBQUs7VUFBRTtZQUNWLE9BQU9sRCx5QkFBeUIsQ0FBQ3lELDRCQUE0QixDQUFDRyxHQUFHLENBQUNWLE1BQU07VUFDMUU7UUFFQTtVQUFTO1lBQ1AsT0FBT3ZyQyxTQUFTO1VBQ2xCO01BQ0Y7SUFDRjtFQUFDO0lBQUFqRixHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPdXVDLDhCQUE4QkEsQ0FBQzVxQixLQUFhLEVBQXNCO01BQ3ZFLElBQUtBLEtBQUssQ0FBQ3dzQixXQUFXLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSy9DLHlCQUF5QixDQUFDb0QseUNBQXlDLEVBQUU7UUFDM0dwRCx5QkFBeUIsQ0FBQ3FELGdDQUFnQyxHQUFHckQseUJBQXlCLENBQUNzRCxxQ0FBcUM7UUFFNUgsSUFBSXRELHlCQUF5QixDQUFDNkQsZ0JBQWdCLEVBQUU7VUFDOUMsT0FBTzVELFNBQVM7UUFDbEI7TUFDRjtNQUVBLE9BQU9ELHlCQUF5QixDQUFDbUQsZUFBZSxDQUFDRCxNQUFNO0lBQ3pEO0VBQUM7SUFBQXh3QyxHQUFBO0lBQUFFLEtBQUEsRUFFRCxTQUFPMHVDLCtCQUErQkEsQ0FBQy9xQixLQUFhLEVBQTJCO01BQzdFLFFBQVFBLEtBQUssQ0FBQ3dzQixXQUFXLENBQUMsQ0FBQztRQUN6QixLQUFLLE1BQU07VUFBRTtZQUNYLElBQUkvQyx5QkFBeUIsQ0FBQ29ELHlDQUF5QyxFQUFFO2NBQ3ZFLElBQU1GLE1BQU0sR0FBR2xELHlCQUF5QixDQUFDOEQsMkNBQTJDLENBQUMsQ0FBQztjQUV0RixPQUFPWixNQUFNO1lBQ2Y7WUFFQSxPQUFPbEQseUJBQXlCLENBQUMrRCw0QkFBNEIsQ0FBQ0wsSUFBSSxDQUFDUixNQUFNO1VBQzNFO1FBRUEsS0FBSyxLQUFLO1VBQUU7WUFDVixPQUFPbEQseUJBQXlCLENBQUMrRCw0QkFBNEIsQ0FBQ0osR0FBRyxDQUFDVCxNQUFNO1VBQzFFO1FBRUEsS0FBSyxLQUFLO1VBQUU7WUFDVixPQUFPbEQseUJBQXlCLENBQUMrRCw0QkFBNEIsQ0FBQ0gsR0FBRyxDQUFDVixNQUFNO1VBQzFFO1FBRUE7VUFBUztZQUNQLE9BQU92ckMsU0FBUztVQUNsQjtNQUNGO0lBQ0Y7RUFBQztJQUFBakYsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBT3d1Qyw4QkFBOEJBLENBQUM3cUIsS0FBYSxFQUFzQjtNQUN2RSxJQUFLQSxLQUFLLENBQUN3c0IsV0FBVyxDQUFDLENBQUMsS0FBSyxNQUFNLElBQUsvQyx5QkFBeUIsQ0FBQ29ELHlDQUF5QyxFQUFFO1FBQzNHLElBQU1ZLHlCQUF5QixHQUFHaEUseUJBQXlCLENBQUNxRCxnQ0FBZ0M7UUFDNUYsSUFBTUgsTUFBTSxHQUFHbEQseUJBQXlCLENBQUM4RCwyQ0FBMkMsQ0FBQyxDQUFDO1FBRXRGLElBQUlFLHlCQUF5QixHQUFHaEUseUJBQXlCLENBQUNzRCxxQ0FBcUMsRUFBRTtVQUMvRixJQUFJdEQseUJBQXlCLENBQUM2RCxnQkFBZ0IsRUFBRTtZQUM5QyxPQUFPNUQsU0FBUztVQUNsQjtVQUVBLE9BQU9ELHlCQUF5QixDQUFDbUQsZUFBZSxDQUFDRCxNQUFNO1FBQ3pEO1FBRUFsRCx5QkFBeUIsQ0FBQ3FELGdDQUFnQyxFQUFFO1FBRTVELE9BQU9ILE1BQU07TUFDZjtNQUVBLE9BQU9sRCx5QkFBeUIsQ0FBQ21ELGVBQWUsQ0FBQ0QsTUFBTTtJQUN6RDtFQUFDO0lBQUF4d0MsR0FBQTtJQUFBRSxLQUFBLEVBRUQsU0FBZWt4QywyQ0FBMkNBLENBQUEsRUFBZ0I7TUFDeEUsSUFBTUcsUUFBUSxHQUFHLElBQUk7TUFDckIsSUFBTUMsUUFBUSxHQUFHLElBQUk7TUFDckIsSUFBTUMsZ0JBQWdCLEdBQUcsQ0FBQztNQUMxQixJQUFNQyxlQUFlLEdBQUcsQ0FBQztNQUN6QixJQUFNQyxLQUFLLEdBQUksQ0FBQ3JFLHlCQUF5QixDQUFDcUQsZ0NBQWdDLEdBQUdZLFFBQVEsS0FBS0UsZ0JBQWlCO01BQzNHLElBQU1HLEtBQUssR0FBSSxDQUFDdEUseUJBQXlCLENBQUNxRCxnQ0FBZ0MsR0FBR2EsUUFBUSxLQUFLRSxlQUFnQjtNQUMxRyxJQUFNRyxrQkFBa0IsR0FBR3ZFLHlCQUF5QixDQUFDdUQsZUFBZSxDQUFDaUIsTUFBTSxDQUFDNzFCLEtBQUssQ0FBQyxDQUFDO01BQ25GLElBQU11MEIsTUFBTSxHQUFHcUIsa0JBQWtCLENBQUNyQixNQUFNO01BQ3hDLElBQU11QixXQUFXLEdBQUd6RSx5QkFBeUIsQ0FBQzBFLHFDQUFxQztNQUVuRnhCLE1BQU0sQ0FBQ3VCLFdBQVcsQ0FBQyxJQUFJSixLQUFLO01BQzVCbkIsTUFBTSxDQUFDdUIsV0FBVyxHQUFHLENBQUMsQ0FBQyxJQUFJSCxLQUFLO01BQ2hDdEUseUJBQXlCLENBQUNxRCxnQ0FBZ0MsRUFBRTtNQUU1RCxPQUFPSCxNQUFNO0lBQ2Y7RUFBQztBQUFBO0FBQUF5QiwwQkFBQSxHQTFKa0IzRSx5QkFBeUI7QUFBQTd0Qyw0SUFBQSxDQUF6QjZ0Qyx5QkFBeUIsZUFDUnZzQyw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFFBQVE7QUFBQXBOLDRJQUFBLENBRHpENnRDLHlCQUF5QixxQkFFRnZzQyw0REFBZSxDQUFDOEwsV0FBVyxLQUFLLFFBQVEsSUFBSTlMLDREQUFlLENBQUNhLFFBQVEsQ0FBQyxDQUFDO0FBQUFuQyw0SUFBQSxDQUY3RjZ0Qyx5QkFBeUIsc0JBR0R2c0MsNERBQWUsQ0FBQzhMLFdBQVcsS0FBSyxRQUFRLElBQUk5TCw0REFBZSxDQUFDbXhDLFNBQVM7QUFBQXp5Qyw0SUFBQSxDQUg3RjZ0Qyx5QkFBeUIscUJBSUYsSUFBSTZFLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQUExeUMsNElBQUEsQ0FKN0M2dEMseUJBQXlCLCtCQUtRO0VBQUNpRCxJQUFJLEVBQUUsSUFBSTRCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztBQUFDLENBQUM7QUFBQTF5Qyw0SUFBQSxDQUx2UjZ0Qyx5QkFBeUIsa0NBTVc7RUFDckQwRCxJQUFJLEVBQUUsSUFBSW1CLFVBQVUsQ0FBQyxDQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNwQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0VBQUU7RUFDeEssSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSTtFQUFFO0VBQzVEO0VBQU0sSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQUU7RUFDeExsQixHQUFHLEVBQUUsSUFBSWtCLFVBQVUsQ0FBQyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0VBQ3pTakIsR0FBRyxFQUFFLElBQUlpQixVQUFVLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO0FBQ3BNLENBQUM7QUFBQTF5Qyw0SUFBQSxDQWRrQjZ0Qyx5QkFBeUIsa0NBZVc7RUFDckQwRCxJQUFJLEVBQUUsSUFBSW1CLFVBQVUsQ0FBQyxDQUNuQixJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUk7RUFBRTtFQUNwQyxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElB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ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9BcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0Jyb3dzZXJEZXRlY3Rvci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL0NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZG9tL05ldHdvcmtNb25pdG9yLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9kb20vU3RyZWFtU2V0dXBMaXN0ZW5lci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2VkZ2VBdXRoL0VkZ2VUb2tlbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2Vudmlyb25tZW50L1BhcmFtZXRlcnMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL0Rpc3Bvc2FibGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvRGlzcG9zYWJsZUxpc3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xhbmcvTnVtYmVycy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbGFuZy9TdHJpbmdzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sYW5nL2Fzc2VydFVucmVhY2hhYmxlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQXBwZW5kZXJzLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvQ29uc29sZUFwcGVuZGVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2VyRGVmYXVsdHMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL2xvZ2dlci9Mb2dnZXJGYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9sb2dnZXIvTG9nZ2luZ0xldmVsTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbG9nZ2VyL0xvZ2dpbmdUaHJlc2hvbGQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL21ldHJpY3MvTWV0cmljVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzQ29uZmlndXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9NZXRyaWNzVHlwZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Byb21pc2UvUHJvbWlzZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcHJvbWlzZS9Qcm9taXNlSGFuZGxlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvcnRjL1J0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9ydGMvUnRjQ29ubmVjdGlvbk1vbml0b3IudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9TZHBQYXJzZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb24udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J0Yy9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9yeC9SZWFkT25seVN1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3J4L1N1YmplY3QudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9FbnZpcm9ubWVudC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1NESy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL1RlbGVtZXRyeVVybC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2FwaS9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NoYW5uZWxzL0NoYW5uZWwudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVsU3RhdGUudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9DaGFubmVscy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvQ2hhbm5lbENvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dC50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2NvbnRleHQvU3RhdGVDb250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9TdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvY29udGV4dC9Ub2tlbkNvbnRleHQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kZWZhdWx0cy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9CaXRyYXRlTW9kZU1hcHBpbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvQml0cmF0ZVN0YXRlTWFwcGluZy50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRGlzY292ZXJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL2Rpc2NvdmVyeS9EaXNjb3ZlcnlVcmkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9kaXNjb3ZlcnkvRW5kUG9pbnQudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvQ2h1bmtlZFN0cmVhbS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL0NodW5rZWRTdHJlYW1pbmcudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvSGxzUGxheWVyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvc3RyZWFtaW5nL05ldHdvcmtTdGF0ZXMudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvUmVhbFRpbWVTdHJlYW0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU2hha2FQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9zdHJlYW1pbmcvU3RyZWFtRmFjdG9yeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3N0cmVhbWluZy9XZWJQbGF5ZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luay50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvc2RrL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0udHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay90cmFuc2Zvcm1hdGlvbi9TdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy9zZGsvdmVyc2lvbi9WZXJzaW9uTWFuYWdlci50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGVsZW1ldHJ5L1RlbGVtZXRyeUFwZW5kZXIudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3RlbGVtZXRyeS9UZWxlbWV0cnlDb25maWd1cmF0aW9uLnRzIiwid2VicGFjazovL3BoZW5peC8uL3NyYy90ZWxlbWV0cnkvVGVsZW1ldHJ5U2VydmljZS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9EdXJhdGlvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdGltZS9FeHBvbmVudGlhbEJhY2tvZmYudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3ZpZGVvL0RpbWVuc2lvbi50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vU2Vzc2lvblRlbGVtZXRyeS50cyIsIndlYnBhY2s6Ly9waGVuaXgvLi9zcmMvdmlkZW8vVmlkZW9UZWxlbWV0cnkudHMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXJyYXlMaWtlVG9BcnJheS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hcnJheVdpdGhvdXRIb2xlcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvYXN5bmNUb0dlbmVyYXRvci5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jbGFzc0NhbGxDaGVjay5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9jcmVhdGVDbGFzcy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9kZWZpbmVQcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9nZXRQcm90b3R5cGVPZi5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pbmhlcml0cy5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9pdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvaXRlcmFibGVUb0FycmF5TGltaXQuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvbm9uSXRlcmFibGVSZXN0LmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL25vbkl0ZXJhYmxlU3ByZWFkLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3Bvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4uanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvcmVnZW5lcmF0b3JSdW50aW1lLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NldFByb3RvdHlwZU9mLmpzIiwid2VicGFjazovL3BoZW5peC8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL3NsaWNlZFRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Db25zdW1hYmxlQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9QcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdG9Qcm9wZXJ0eUtleS5qcyIsIndlYnBhY2s6Ly9waGVuaXgvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkuanMiLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL3JlZ2VuZXJhdG9yL2luZGV4LmpzIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vcGhlbml4L3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2dldCBqYXZhc2NyaXB0IGNodW5rIGZpbGVuYW1lIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3BoZW5peC93ZWJwYWNrL3J1bnRpbWUvcHVibGljUGF0aCIsIndlYnBhY2s6Ly9waGVuaXgvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vcGhlbml4Ly4vc3JjL3Nkay9jaGFubmVscy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJwaGVuaXhcIl0gPSBmYWN0b3J5KCk7XG5cdGVsc2Vcblx0XHRyb290W1wicGhlbml4XCJdID0gZmFjdG9yeSgpO1xufSkoc2VsZiwgKCkgPT4ge1xucmV0dXJuICIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcblxuY29uc3QgdmlzaWJpbGl0eUNoYW5nZUV2ZW50ID0gJ3Zpc2liaWxpdHljaGFuZ2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUlzRm9yZWdyb3VuZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0ZvcmVncm91bmQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3RpbWVPZkxhc3RUYWJGb2N1c0NoYW5nZTogbnVtYmVyID0gRGF0ZS5ub3coKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9pc0ZvcmVncm91bmQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLl9yZWFkT25seUlzRm9yZWdyb3VuZCA9IG5ldyBSZWFkT25seVN1YmplY3QodGhpcy5faXNGb3JlZ3JvdW5kKTtcbiAgICB0aGlzLmluaXRpYWxpemUoKTtcbiAgfVxuXG4gIGdldCBpc0ZvcmVncm91bmQoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlJc0ZvcmVncm91bmQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpOiBudW1iZXIge1xuICAgIHJldHVybiBEYXRlLm5vdygpIC0gdGhpcy5fdGltZU9mTGFzdFRhYkZvY3VzQ2hhbmdlO1xuICB9XG5cbiAgcHVibGljIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplKCk6IHZvaWQge1xuICAgIGNvbnN0IGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UgPSAoKSA9PiB0aGlzLl9pc0ZvcmVncm91bmQudmFsdWUgPSAhR2xvYmFsU2NvcGUuZG9jdW1lbnRJc0hpZGRlbjtcbiAgICBjb25zdCB1c2VFdmVudENhcHR1cmVQaGFzZSA9IGZhbHNlO1xuXG4gICAgR2xvYmFsU2NvcGUuYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyKHZpc2liaWxpdHlDaGFuZ2VFdmVudCwgaGFuZGxlVmlzaWJpbGl0eUNoYW5nZSwgdXNlRXZlbnRDYXB0dXJlUGhhc2UpO1xuXG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IEdsb2JhbFNjb3BlLnJlbW92ZURvY3VtZW50RXZlbnRMaXN0ZW5lcih2aXNpYmlsaXR5Q2hhbmdlRXZlbnQsIGhhbmRsZVZpc2liaWxpdHlDaGFuZ2UsIHVzZUV2ZW50Q2FwdHVyZVBoYXNlKSkpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCcm93c2VyRGV0ZWN0b3Ige1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWVBbmRWZXJzaW9uUmVnZXggPSAvKE1TSUV8KD8hR2Vja28uKylGaXJlZm94fCg/IUFwcGxlV2ViS2l0LitDaHJvbWUuKylTYWZhcml8KD8hQXBwbGVXZWJLaXQuKylDaHJvbWV8QXBwbGVXZWJLaXQoPyEuK0Nocm9tZXwuK1NhZmFyaSl8R2Vja28oPyEuK0ZpcmVmb3gpKSg/OiB8XFwvKShbXFxkLmFwcmVdKykvZztcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbigpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck5hbWUgPSBCcm93c2VyRGV0ZWN0b3IucGFyc2VCcm93c2VyTmFtZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfYnJvd3Nlck1ham9yVmVyc2lvbiA9IEJyb3dzZXJEZXRlY3Rvci5wYXJzZUJyb3dzZXJNYWpvclZlcnNpb24oKTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGUgPSAoL0FuZHJvaWR8aVBob25lfGlQYWR8aVBvZHxCbGFja0JlcnJ5fE9wZXJhIE1pbmkvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0FuZHJvaWQgPSAoL0FuZHJvaWQvaSkudGVzdChuYXZpZ2F0b3I/LnVzZXJBZ2VudCk7XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNjkgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzY5LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3MCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzAuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTcxID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83MS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzIgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzcyLicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NCA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzQuJyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0Nocm9tZTc1ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uaW5jbHVkZXMoJ0Nocm9tZS83NS4nKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2lzQ2hyb21lNzYgPSBCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbi5pbmNsdWRlcygnQ2hyb21lLzc2LicpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNDaHJvbWU3NyA9IEJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uLmluY2x1ZGVzKCdDaHJvbWUvNzcuJyk7XG5cbiAgc3RhdGljIGdldCBicm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGJyb3dzZXJOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJOYW1lO1xuICB9XG5cbiAgc3RhdGljIGdldCBicm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuX2Jyb3dzZXJNYWpvclZlcnNpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQW5kcm9pZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0FuZHJvaWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNjkoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU2OTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3MCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTcwO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTcxKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzE7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzIoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc0O1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0Nocm9tZTc1KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzQ2hyb21lNzU7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzQ2hyb21lNzYoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5faXNDaHJvbWU3NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNDaHJvbWU3NygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLl9pc0Nocm9tZTc3O1xuICB9XG5cbiAgc3RhdGljIGlzTW9iaWxlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuX2lzTW9iaWxlO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb24oKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hdmlnYXRvciB8fCAhbmF2aWdhdG9yLnVzZXJBZ2VudCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IGJyb3dzZXJOYW1lQW5kVmVyc2lvbiA9IG5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb25SZWdleCk7XG5cbiAgICBpZiAoYnJvd3Nlck5hbWVBbmRWZXJzaW9uICYmIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXSkge1xuICAgICAgcmV0dXJuIGJyb3dzZXJOYW1lQW5kVmVyc2lvblswXTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLnBhcnNlQnJvd3Nlck5hbWVBbmRWZXJzaW9uRm9ySUUoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIHBhcnNlQnJvd3Nlck5hbWUoKTogc3RyaW5nIHtcbiAgICBpZiAoIUJyb3dzZXJEZXRlY3Rvci5fYnJvd3Nlck5hbWVBbmRWZXJzaW9uKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3Nlck5hbWVMaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3Nlck5hbWVMaXN0IHx8ICFicm93c2VyTmFtZUxpc3RbMF0pIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYnJvd3Nlck5hbWVMaXN0WzBdO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTWFqb3JWZXJzaW9uKCk6IG51bWJlciB7XG4gICAgaWYgKCFCcm93c2VyRGV0ZWN0b3IuX2Jyb3dzZXJOYW1lQW5kVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYnJvd3NlclZlcnNpb25MaXN0ID0gQnJvd3NlckRldGVjdG9yLl9icm93c2VyTmFtZUFuZFZlcnNpb24uc3BsaXQoJy8nKTtcblxuICAgIGlmICghYnJvd3NlclZlcnNpb25MaXN0IHx8ICFicm93c2VyVmVyc2lvbkxpc3RbMV0pIHtcbiAgICAgIHJldHVybiAwO1xuICAgIH1cblxuICAgIGNvbnN0IGZ1bGxWZXJzaW9uID0gYnJvd3NlclZlcnNpb25MaXN0WzFdO1xuXG4gICAgaWYgKCFmdWxsVmVyc2lvbikge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE51bWJlcihmdWxsVmVyc2lvbi5zcGxpdCgnLicpWzBdKSB8fCAwO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSgpOiBzdHJpbmcge1xuICAgIGlmICghbmF2aWdhdG9yIHx8ICFuYXZpZ2F0b3IudXNlckFnZW50KSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlckFnZW50ID0gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgICBjb25zdCBtc2llID0gdXNlckFnZW50LmluZGV4T2YoJ01TSUUgJyk7XG5cbiAgICBpZiAobXNpZSA+IDApIHtcbiAgICAgIC8vIElFIDEwIG9yIG9sZGVyID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcobXNpZSArIDUsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgbXNpZSkpLCAxMCl9YDtcbiAgICB9XG5cbiAgICBjb25zdCB0cmlkZW50ID0gdXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQvJyk7XG5cbiAgICBpZiAodHJpZGVudCA+IDApIHtcbiAgICAgIC8vIElFIDExID0+IHJldHVybiB2ZXJzaW9uIG51bWJlclxuICAgICAgY29uc3QgdmVyc2lvbiA9IHVzZXJBZ2VudC5pbmRleE9mKCdydjonKTtcblxuICAgICAgcmV0dXJuIGBJRS8ke3BhcnNlSW50KHVzZXJBZ2VudC5zdWJzdHJpbmcodmVyc2lvbiArIDMsIHVzZXJBZ2VudC5pbmRleE9mKCcuJywgdmVyc2lvbikpLCAxMCl9YDtcbiAgICB9XG5cbiAgICByZXR1cm4gJyc7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRGVmYXVsdHMgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckRlZmF1bHRzJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBUZWxlbWV0cnlEZWZhdWx0IGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJ5RGVmYXVsdCc7XG5pbXBvcnQgVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nIGZyb20gJy4uL21ldHJpY3MvVGVsZW1ldHJpY0xldmVsTWFwcGluZyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIge1xuICBnZXRTdHJpbmdWYWx1ZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSkgfHxcbiAgICAgIHRoaXMucmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJVUklWYWx1ZShgJHtuYW1lfS11cmktcGFyYW1ldGVyLW5hbWVgKSB8fFxuICAgICAgdGhpcy5kZWZhdWx0U3RyaW5nVmFsdWVbbmFtZV07XG4gIH1cblxuICBnZXRCb29sZWFuVmFsdWUobmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLnJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVmFsdWUobmFtZSk7XG5cbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnMScgfHwgdmFsdWUgPT09ICdPbic7XG4gICAgfVxuXG4gICAgY29uc3QgdmFsdWVGcm9tVXJpID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKGAke25hbWV9LXVyaS1wYXJhbWV0ZXItbmFtZWApO1xuXG4gICAgaWYgKHZhbHVlRnJvbVVyaSkge1xuICAgICAgcmV0dXJuIHZhbHVlRnJvbVVyaSA9PT0gJ3RydWUnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJzEnIHx8IHZhbHVlRnJvbVVyaSA9PT0gJ09uJztcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWZhdWx0Qm9vbGVhblZhbHVlW25hbWVdID09PSB0cnVlO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZGVmYXVsdFN0cmluZ1ZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZ30ge1xuICAgIHJldHVybiB7XG4gICAgICAncGhlbml4LW1ldHJpY3MtbGV2ZWwnOiBUZWxlbWV0cnlMZXZlbE1hcHBpbmcuY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUoVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpLFxuICAgICAgJ3BoZW5peC1sb2dnaW5nLWxldmVsJzogTG9nZ2luZ0xldmVsTWFwcGluZy5jb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlKExvZ2dlckRlZmF1bHRzLmRlZmF1bHRMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC1jb25zb2xlLWxvZ2dpbmctbGV2ZWwnOiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUoTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwpLFxuICAgICAgJ3BoZW5peC10ZWxlbWV0cnktbG9nZ2luZy1sZXZlbCc6IExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsKSxcbiAgICAgICdwaGVuaXgtY2hhbm5lbC10b2tlbic6ICcnLFxuICAgICAgJ3BoZW5peC11cmknOiAnJyxcbiAgICAgICdwaGVuaXgtYmFzZS11cmknOiAnJ1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldCBkZWZhdWx0Qm9vbGVhblZhbHVlKCk6IHsgW25hbWU6IHN0cmluZ106IGJvb2xlYW4gfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtYXV0b21hdGljYWxseS1yZWNvbm5lY3QtcGVlci1jb25uZWN0aW9uJzogdHJ1ZSxcbiAgICAgICdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnOiB0cnVlLFxuICAgICAgJ3BoZW5peC1za2lwLWdhcmJhZ2UtY29sbGVjdGlvbi1vbi1tb2JpbGUtZGV2aWNlcyc6IHRydWVcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgbWV0YVZhbHVlID0gR2xvYmFsU2NvcGUuZG9jdW1lbnRRdWVyeVNlbGVjdG9yKGBtZXRhW25hbWU9JyR7bmFtZX0nXWApO1xuXG4gICAgaWYgKCFtZXRhVmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG1ldGFWYWx1ZS5nZXRBdHRyaWJ1dGUoJ3ZhbHVlJyk7XG5cbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclVSSVZhbHVlKG5hbWU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgdmFsdWVVUklQYXJhbWV0ZXJOYW1lID0gdGhpcy5yZWFkQ29uZmlndXJhdGlvblBhcmFtZXRlclZhbHVlKG5hbWUpO1xuXG4gICAgaWYgKCF2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWx1ZSA9IG5ldyBHbG9iYWxTY29wZS5VUkxTZWFyY2hQYXJhbXMoR2xvYmFsU2NvcGUubG9jYXRpb25TZWFyY2gpLmdldCh2YWx1ZVVSSVBhcmFtZXRlck5hbWUpIHx8IHVuZGVmaW5lZDtcblxuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciB7XG4gIHN0YXRpYyBmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk6IHZvaWQge1xuICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc0ZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb25TdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuZm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24oKTogdm9pZCB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUXVldWVNaWNyb3Rhc2tTdXBwb3J0ZWQpIHtcbiAgICAgIEdsb2JhbFNjb3BlLnF1ZXVlTWljcm90YXNrKHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcykpO1xuICAgIH0gZWxzZSB7XG4gICAgICBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KHRoaXMub3ZlcmxvYWRNZW1vcnlUb0ludm9rZUdhcmJhZ2VDb2xsZWN0aW9uLmJpbmQodGhpcyksIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIG92ZXJsb2FkTWVtb3J5VG9JbnZva2VHYXJiYWdlQ29sbGVjdGlvbigpOiB2b2lkIHtcbiAgICBsZXQgaW1nOiBIVE1MSW1hZ2VFbGVtZW50IHwgbnVsbCA9IEdsb2JhbFNjb3BlLmRvY3VtZW50Q3JlYXRlRWxlbWVudDxIVE1MSW1hZ2VFbGVtZW50PignaW1nJyk7XG5cbiAgICBpbWcuc3JjID0gR2xvYmFsU2NvcGUuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbbmV3IEFycmF5QnVmZmVyKDEwZSs3KV0pKTsgLy8gMTAwTWIgb3IgbGVzcyBvciBtb3JlIGRlcGVuZGluZyBvbiBhcyB5b3Ugd2lzaCB0byBmb3JjZS9pbnZva2UgR0MgY3ljbGUgcnVuXG4gICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgIEdsb2JhbFNjb3BlLlVSTC5yZXZva2VPYmplY3RVUkwodGhpcy5zcmMpO1xuXG4gICAgICBpbWcgPSBudWxsO1xuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOZXR3b3JrTW9uaXRvciBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2lzU3VwcG9ydGVkOiBib29sZWFuID0gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbiAhPT0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydHQ6IFN1YmplY3Q8bnVtYmVyPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VmZmVjdGl2ZVR5cGU6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KHVuZGVmaW5lZCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5OiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCh1bmRlZmluZWQpO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIGlmICghdGhpcy5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc2V0dXBOZXR3b3JrQ2hhbmdlTGlzdGVuZXJzKCk7XG4gICAgdGhpcy51cGRhdGVTdGF0aXN0aWNzKCk7XG4gIH1cblxuICBnZXQgaXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU3VwcG9ydGVkO1xuICB9XG5cbiAgZ2V0IHJ0dCgpOiBTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLl9ydHQ7XG4gIH1cblxuICBnZXQgZWZmZWN0aXZlVHlwZSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl9lZmZlY3RpdmVUeXBlO1xuICB9XG5cbiAgZ2V0IGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IFN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5O1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIGdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk6IG51bWJlciB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rID8/IEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmRvd25saW5rTWF4ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRFZmZlY3RpdmVUeXBlKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmVmZmVjdGl2ZVR5cGUgPz8gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8udHlwZSA/PyAnVW5rbm93bic7XG4gIH1cblxuICBwcml2YXRlIGdldFJvdW5kVHJpcFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gR2xvYmFsU2NvcGUubmF2aWdhdG9yQ29ubmVjdGlvbj8ucnR0ID8/IC0xO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cE5ldHdvcmtDaGFuZ2VMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoKTogdm9pZCA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpY3MoKTtcblxuICAgIEdsb2JhbFNjb3BlLm5hdmlnYXRvckNvbm5lY3Rpb24/LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGxpc3RlbmVyKTtcblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiBHbG9iYWxTY29wZS5uYXZpZ2F0b3JDb25uZWN0aW9uPy5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBsaXN0ZW5lcikpKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlU3RhdGlzdGljcygpOiB2b2lkIHtcbiAgICB0aGlzLl9ydHQudmFsdWUgPSB0aGlzLmdldFJvdW5kVHJpcFRpbWUoKTtcbiAgICB0aGlzLl9lZmZlY3RpdmVUeXBlLnZhbHVlID0gdGhpcy5nZXRFZmZlY3RpdmVUeXBlKCk7XG4gICAgdGhpcy5fZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkudmFsdWUgPSB0aGlzLmdldERvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljVHlwZSc7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBTREsgZnJvbSAnLi4vc2RrL1NESyc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5cbmV4cG9ydCBjbGFzcyBTdHJlYW1TZXR1cExpc3RlbmVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVNldHVwTGlzdGVuZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBtZXRyaWNzU2VydmljZSA9IFNESy5tZXRyaWNzU2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIF9tZXRyaWNTdWJtaXR0ZWQgPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3N0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgdGhpcy5fcGFnZUxvYWRUaW1lID0gcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc3VjY2VzcyhzdHJlYW1JZCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkLCBzdHJlYW1JZCk7XG4gIH1cblxuICBmYWlsKCk6IHZvaWQge1xuICAgIHRoaXMucmVjb3JkU3RyZWFtTWV0cmljKE1ldHJpY3NUeXBlLlNldHVwRmFpbGVkKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkU3RyZWFtTWV0cmljKG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLCBzdHJlYW1JZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9tZXRyaWNTdWJtaXR0ZWQpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljU3VibWl0dGVkID0gdHJ1ZTtcblxuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgc2V0dXBUaW1lID0gbm93IC0gdGhpcy5fc3RhcnRUaW1lO1xuICAgIGNvbnN0IG1ldHJpY05hbWUgPSBuZXcgTWV0cmljVHlwZShtZXRyaWNUeXBlKS5nZXROYW1lKCk7XG5cbiAgICB0aGlzLm1ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiBzZXR1cFRpbWV9LFxuICAgICAgc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBTdHJlYW0gbWV0cmljIFslc10gaW4gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljTmFtZSxcbiAgICAgIG5ldyBEdXJhdGlvbnMoc2V0dXBUaW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBFZGdlVG9rZW4gZnJvbSAnLi9FZGdlVG9rZW4nO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuL0VuY29kZWRFZGdlVG9rZW4nO1xuXG5jb25zdCBlZGdlQXV0aFRva2VuUHJlZml4ID0gJ0RJR0VTVDonO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlQXV0aFBhcnNlciB7XG4gIHByaXZhdGUgc3RhdGljIF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignRWRnZUF1dGhQYXJzZXInKTtcblxuICBzdGF0aWMgcGFyc2VUb2tlbih0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IEVkZ2VUb2tlbiB7XG4gICAgaWYgKCF0aGlzLmlzRW5jb2RlZEVkZ2VUb2tlblZhbGlkKHRva2VuKSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignVG9rZW4gaXMgbm90IHZhbGlkIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZWNvZGVkVG9rZW4gPSBhdG9iKHRva2VuLnN1YnN0cihlZGdlQXV0aFRva2VuUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgY29uc3QgZWRnZVRva2VuID0gSlNPTi5wYXJzZShkZWNvZGVkVG9rZW4pO1xuXG4gICAgICBlZGdlVG9rZW4udG9rZW4gPSBKU09OLnBhcnNlKGVkZ2VUb2tlbi50b2tlbik7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKGVkZ2VUb2tlbik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgRWRnZUF1dGhQYXJzZXIuX2xvZ2dlci5lcnJvcignQ2Fubm90IHBhcnNlIHRva2VuIHZhbHVlJywgZSk7XG5cbiAgICAgIHJldHVybiBuZXcgRWRnZVRva2VuKG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRva2VuICYmIHRva2VuLnN0YXJ0c1dpdGgoZWRnZUF1dGhUb2tlblByZWZpeCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5cbmludGVyZmFjZSBJVG9rZW4ge1xuICB1cmk6IFVSTCB8IG51bGw7XG4gIGNhcGFiaWxpdGllczogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJRWRnZVRva2VuIHtcbiAgYXBwbGljYXRpb25JZDogc3RyaW5nO1xuICB0b2tlbjogSVRva2VuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFZGdlVG9rZW4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBsaWNhdGlvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Rva2VuOiBJVG9rZW47XG5cbiAgY29uc3RydWN0b3IoZWRnZVRva2VuOiBJRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fYXBwbGljYXRpb25JZCA9IGVkZ2VUb2tlbj8uYXBwbGljYXRpb25JZCB8fCAnJztcbiAgICB0aGlzLl90b2tlbiA9IHtcbiAgICAgIHVyaTogZWRnZVRva2VuPy50b2tlbj8udXJpID8gbmV3IEdsb2JhbFNjb3BlLlVSTChlZGdlVG9rZW4udG9rZW4udXJpKSA6IG51bGwsXG4gICAgICBjYXBhYmlsaXRpZXM6IGVkZ2VUb2tlbj8udG9rZW4/LmNhcGFiaWxpdGllcyB8fCBbXVxuICAgIH07XG4gIH1cblxuICBnZXQgdXJpKCk6IFVSTCB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl90b2tlbi51cmk7XG4gIH1cblxuICBnZXQgY2FwYWJpbGl0aWVzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW4uY2FwYWJpbGl0aWVzO1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25JZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcblxuZGVjbGFyZSBjb25zdCBfX0ZFQVRVUkVTX186IHtcbiAgc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgc2VuZExvZ3M6IExvZ2dpbmdMZXZlbFR5cGU7XG4gIHNlbmRNZXRyaWNzOiBUZWxlbWV0cnlMZXZlbFR5cGU7XG4gIGxvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkRmVhdHVyZXMge1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZExvY2FsQ2FuZGlkYXRlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NlbmRMb2dzOiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBwcml2YXRlIHN0YXRpYyBfc2VuZE1ldHJpY3M6IFRlbGVtZXRyeUxldmVsVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ1RvQ29uc29sZTogTG9nZ2luZ0xldmVsVHlwZTtcblxuICBzdGF0aWMgZ2V0IHNlbmRMb2NhbENhbmRpZGF0ZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX3NlbmRMb2NhbENhbmRpZGF0ZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNlbmRMb2dzKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiB0aGlzLl9zZW5kTG9ncztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZE1ldHJpY3MoKTogVGVsZW1ldHJ5TGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZE1ldHJpY3M7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvZ1RvQ29uc29sZSgpOiBMb2dnaW5nTGV2ZWxUeXBlIHtcbiAgICByZXR1cm4gdGhpcy5fbG9nVG9Db25zb2xlO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5RmVhdHVyZXMoKTogdm9pZCB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGZlYXR1cmVzID0gX19GRUFUVVJFU19fO1xuXG4gICAgICB0aGlzLl9zZW5kTG9jYWxDYW5kaWRhdGVzID0gJ3NlbmRMb2NhbENhbmRpZGF0ZXMnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyA6IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdzZW5kTG9ncycgaW4gZmVhdHVyZXMgPyBmZWF0dXJlcy5zZW5kTG9ncyA6ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnc2VuZE1ldHJpY3MnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMuc2VuZE1ldHJpY3MgOiAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdsb2dUb0NvbnNvbGUnIGluIGZlYXR1cmVzID8gZmVhdHVyZXMubG9nVG9Db25zb2xlIDogJ0FsbCc7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcyA9IHRydWU7XG4gICAgICB0aGlzLl9zZW5kTG9ncyA9ICdBbGwnO1xuICAgICAgdGhpcy5fc2VuZE1ldHJpY3MgPSAnQWxsJztcbiAgICAgIHRoaXMuX2xvZ1RvQ29uc29sZSA9ICdBbGwnO1xuICAgIH1cbiAgfVxufVxuXG5CdWlsZEZlYXR1cmVzLmFwcGx5RmVhdHVyZXMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgQnJvd3NlckRldGVjdG9yIGZyb20gJy4uL2RvbS9Ccm93c2VyRGV0ZWN0b3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBGZWF0dXJlRW5hYmxlbWVudCB7XG4gIHN0YXRpYyBnZXQgY2xpZW50T2ZmZXJEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAvLyBDbGllbnQgb2ZmZXIgd29ya2Zsb3cgZG9lcyBub3Qgd29yayBjb3JyZWN0bHkgaW4gdGhlIGZvbGxvd2luZyBicm93c2Vyc1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NCB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzUgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTc2IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3NztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYWRkVHJhbmNlaXZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIC8vIENocm9tZSA2OSwgNzAsIDcxLCA3MiBleHBvc2VzIGBhZGRUcmFuY2VpdmVyYCBidXQgaXQgZG9lcyBub3Qgd29yayBjb3JyZWN0bHlcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNjkgfHxcbiAgICAgIEJyb3dzZXJEZXRlY3Rvci5pc0Nocm9tZTcwIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuaXNDaHJvbWU3MSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmlzQ2hyb21lNzI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldFN0YXRzUHJvbWlzZUJhc2VkRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTmFtZSA9PT0gJ0Nocm9tZScgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNjY7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGdldEN1cnJlbnRPZmZlckRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDY5IHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1NjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgb25UcmFja0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDYzIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA8PSA1MjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgd2Via2l0UlRDUGVlckNvbm5lY3Rpb25FbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uIDw9IDU1O1xuICB9XG5cbiAgc3RhdGljIGdldCBwcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnRmlyZWZveCcgJiYgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJNYWpvclZlcnNpb24gPD0gNTI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNob3VsZFVzZU5hdGl2ZUhscygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJyB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2Ftc3VuZ0Jyb3dzZXInO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1ByZWNhY2hpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdJRSc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiB0eXBlb2YgR2xvYmFsU2NvcGUuZG9jdW1lbnRDcmVhdGVFbGVtZW50ID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5icm93c2VyTWFqb3JWZXJzaW9uID49IDcxIHx8XG4gICAgICBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck1ham9yVmVyc2lvbiA+PSA2OSB8fFxuICAgICAgQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnU2FmYXJpJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNNb2JpbGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICB9XG5cbiAgc3RhdGljIGdldCBpc0luc2VydGFibGVTdHJlYW1zU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhKHR5cGVvZiBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3IgPT09ICd1bmRlZmluZWQnKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiBSVENSdHBSZWNlaXZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIFJUQ1J0cFJlY2VpdmVyLnByb3RvdHlwZS5jcmVhdGVFbmNvZGVkU3RyZWFtcyAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgUlRDUnRwU2NyaXB0VHJhbnNmb3JtICE9PSAndW5kZWZpbmVkJztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgaXNSZXF1ZXN0VmlkZW9GcmFtZUNhbGxiYWNrU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0eXBlb2YgSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGUucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayAhPT0gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdGaXJlZm94JyAmJiBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgIT09ICdTYWZhcmknO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fUEFSQU1FVEVSU19fOiB7XG4gIGRpc2NvdmVyeTogSURpc2NvdmVyeVBhcmFtZXRlcjtcbn07XG5cbmludGVyZmFjZSBJRGlzY292ZXJ5UGFyYW1ldGVye1xuICBpbnRlbnRpb25zOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBhcmFtZXRlcnMge1xuICBwcml2YXRlIHN0YXRpYyBfZGlzY292ZXJ5UGFyYW1ldGVyczogSURpc2NvdmVyeVBhcmFtZXRlciA7XG5cbiAgc3RhdGljIGdldCBkaXNjb3ZlcnlQYXJhbWV0ZXJzKCk6IElEaXNjb3ZlcnlQYXJhbWV0ZXIge1xuICAgIHJldHVybiB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5UGFyYW1ldGVycygpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcGFyYW1ldGVycyA9IF9fUEFSQU1FVEVSU19fO1xuXG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0gJ2Rpc2NvdmVyeScgaW4gcGFyYW1ldGVycyA/IHBhcmFtZXRlcnMuZGlzY292ZXJ5IDoge2ludGVudGlvbnM6ICcnfTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9kaXNjb3ZlcnlQYXJhbWV0ZXJzID0ge2ludGVudGlvbnM6ICcnfTtcbiAgICB9XG4gIH1cbn1cblxuUGFyYW1ldGVycy5hcHBseVBhcmFtZXRlcnMoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJR2xvYmFsU2NvcGUgZnJvbSAnLi9JR2xvYmFsU2NvcGUnO1xuaW1wb3J0IElEb2N1bWVudCBmcm9tICcuL0lEb2N1bWVudCc7XG5pbXBvcnQgSUxvY2F0aW9uIGZyb20gJy4vSUxvY2F0aW9uJztcbmltcG9ydCBJTmV0d29ya0luZm9ybWF0aW9uIGZyb20gJy4vSU5ldHdvcmtJbmZvcm1hdGlvbic7XG5pbXBvcnQgSU5hdmlnYXRvciBmcm9tICcuL0lOYXZpZ2F0b3InO1xuaW1wb3J0IElXaW5kb3cgZnJvbSAnLi9JV2luZG93JztcblxuZXhwb3J0IGNsYXNzIEdsb2JhbFNjb3BlIGltcGxlbWVudHMgSUdsb2JhbFNjb3BlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2luc3RhbmNlOiBJR2xvYmFsU2NvcGUgPSBuZXcgR2xvYmFsU2NvcGUoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfZG9jdW1lbnQ6IElEb2N1bWVudDtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9jYXRpb246IElMb2NhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbmF2aWdhdG9yOiBJTmF2aWdhdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF93aW5kb3c6IElXaW5kb3c7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZG9jdW1lbnQgPSBkb2N1bWVudDtcbiAgICB0aGlzLl9sb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIHRoaXMuX25hdmlnYXRvciA9IG5hdmlnYXRvcjtcbiAgICB0aGlzLl93aW5kb3cgPSB3aW5kb3c7XG4gIH1cblxuICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IElHbG9iYWxTY29wZSB7XG4gICAgcmV0dXJuIEdsb2JhbFNjb3BlLl9pbnN0YW5jZTtcbiAgfVxuXG4gIGdldCBGb3JtRGF0YSgpOiB0eXBlb2YgRm9ybURhdGEge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuRm9ybURhdGE7XG4gIH1cblxuICBnZXQgVVJMKCk6IHR5cGVvZiBVUkwge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuVVJMO1xuICB9XG5cbiAgZ2V0IFVSTFNlYXJjaFBhcmFtcygpOiB0eXBlb2YgVVJMU2VhcmNoUGFyYW1zIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LlVSTFNlYXJjaFBhcmFtcztcbiAgfVxuXG4gIGdldCBhZGREb2N1bWVudEV2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IGFkZFdpbmRvd0V2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgY2xlYXJJbnRlcnZhbCgpOiAoaWQ/OiBudW1iZXIgfCB1bmRlZmluZWQpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuY2xlYXJJbnRlcnZhbC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgY2xlYXJUaW1lb3V0KCk6IChpZD86IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dpbmRvdy5jbGVhclRpbWVvdXQuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgpOiA8RWxlbWVudCBleHRlbmRzIEhUTUxFbGVtZW50Pih0YWc6IHN0cmluZykgPT4gRWxlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LmNyZWF0ZUVsZW1lbnQuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRIYXNGb2N1cygpOiAoKSA9PiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZG9jdW1lbnQuaGFzRm9jdXMuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZG9jdW1lbnRJc0hpZGRlbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLl9kb2N1bWVudC5oaWRkZW47XG4gIH1cblxuICBnZXQgZG9jdW1lbnRRdWVyeVNlbGVjdG9yKCk6IDxFbGVtZW50IGV4dGVuZHMgSFRNTEVsZW1lbnQ+KHRhZzogc3RyaW5nKSA9PiBFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX2RvY3VtZW50LnF1ZXJ5U2VsZWN0b3IuYmluZCh0aGlzLl9kb2N1bWVudCk7XG4gIH1cblxuICBnZXQgZmV0Y2goKTogKGlucHV0OiBzdHJpbmcgfCBVUkwgfCBSZXF1ZXN0LCBpbml0PzogUmVxdWVzdEluaXQpID0+IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LmZldGNoLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCBsb2NhdGlvbkhvc3RuYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLmhvc3RuYW1lO1xuICB9XG5cbiAgZ2V0IGxvY2F0aW9uU2VhcmNoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2xvY2F0aW9uLnNlYXJjaDtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JDb25uZWN0aW9uKCk6IElOZXR3b3JrSW5mb3JtYXRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9uYXZpZ2F0b3IuY29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBuYXZpZ2F0b3JJc09uTGluZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fbmF2aWdhdG9yLm9uTGluZTtcbiAgfVxuXG4gIGdldCBxdWV1ZU1pY3JvdGFzaygpOiAobWljcm90YXNrOiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gdGhpcy5fd2luZG93LnF1ZXVlTWljcm90YXNrLmJpbmQodGhpcy5fd2luZG93KTtcbiAgfVxuXG4gIGdldCByZW1vdmVEb2N1bWVudEV2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQodGhpcy5fZG9jdW1lbnQpO1xuICB9XG5cbiAgZ2V0IHJlbW92ZVdpbmRvd0V2ZW50TGlzdGVuZXIoKTogKHR5cGU6IHN0cmluZywgbGlzdGVuZXI6IChldmVudDogRXZlbnQpID0+IHZvaWQsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpID0+IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cblxuICBnZXQgc2V0SW50ZXJ2YWwoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0SW50ZXJ2YWwuYmluZCh0aGlzLl93aW5kb3cpO1xuICB9XG5cbiAgZ2V0IHNldFRpbWVvdXQoKTogKGhhbmRsZXI6IHN0cmluZyB8IEZ1bmN0aW9uLCB0aW1lb3V0PzogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl93aW5kb3cuc2V0VGltZW91dC5iaW5kKHRoaXMuX3dpbmRvdyk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU2NvcGUuZ2V0SW5zdGFuY2UoKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSBfZGlzcG9zZWQ6IGJvb2xlYW47XG4gIHByaXZhdGUgX2Rpc3Bvc2FibGU6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IoZGlzcG9zYWJsZTogKCkgPT4gdm9pZCkge1xuICAgIHRoaXMuX2Rpc3Bvc2VkID0gZmFsc2U7XG4gICAgdGhpcy5fZGlzcG9zYWJsZSA9IGRpc3Bvc2FibGU7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9kaXNwb3NlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VkID0gdHJ1ZTtcblxuICAgIHJldHVybiB0aGlzLl9kaXNwb3NhYmxlLmNhbGwodGhpcyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBJRGlzcG9zYWJsZSBmcm9tICcuL0lEaXNwb3NhYmxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzcG9zYWJsZUxpc3Qge1xuICBwcml2YXRlIHJlYWRvbmx5IF9saXN0OiBJRGlzcG9zYWJsZVtdID0gW107XG5cbiAgYWRkKGRpc3Bvc2FibGU6IElEaXNwb3NhYmxlKTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdC5wdXNoKGRpc3Bvc2FibGUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9saXN0LmZvckVhY2goZGlzcG9zYWJsZSA9PiBkaXNwb3NhYmxlLmRpc3Bvc2UoKSk7XG4gICAgdGhpcy5fbGlzdC5sZW5ndGggPSAwO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYERpc3Bvc2FibGVMaXN0W2Rpc3Bvc2FibGVzPSR7dGhpcy5fbGlzdC5sZW5ndGh9XWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8vIEFzIGZsb2F0IGluIEVDTUFTY3JpcHQgdXNlIDY0LWJpdCBmb3JtYXQgaXQgY2Fubm90IGhhdmUvaGFuZGxlIG1vcmUgdGhhbiAxNSBzeW1ib2xzIGFmdGVyIGRvdC5cbmNvbnN0IG1heERpZ2l0c0luRmxvYXRBZnRlckRvdCA9IDE1O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOdW1iZXJzIHtcbiAgc3RhdGljIGNvdW50TnVtYmVyTGVuZ3RoKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xuICAgIGxldCBpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlID0gMDtcbiAgICBsZXQgbnVtYmVyID0gdmFsdWU7XG5cbiAgICBpZiAobnVtYmVyIDwgMCkge1xuICAgICAgbnVtYmVyICo9IC0xO1xuICAgICAgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSsrO1xuICAgIH1cblxuICAgIHJldHVybiBOdW1iZXJzLmNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbChudW1iZXIpICsgaW5jcmVtZW50Rm9yTmVnYXRpdmVWYWx1ZSArIChudW1iZXIgIT09IE1hdGguZmxvb3IobnVtYmVyKSA/IE51bWJlcnMuY291bnREaWdpdHNBZnRlckRlY2ltYWwobnVtYmVyKSArIDEgOiAwKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGZpeFJvdW5kaW5nKHZhbHVlOiBudW1iZXIsIHByZWNpc2lvbjogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBwb3dlciA9IE1hdGgucG93KDEwLCBwcmVjaXNpb24pO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQodmFsdWUgKiBwb3dlcikgLyBwb3dlcjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGNvdW50RGlnaXRzQmVmb3JlRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBsZXQgZGlnaXRzQmVmb3JlRGVjaW1hbCA9IDE7XG4gICAgbGV0IG51bWJlciA9IHZhbHVlO1xuXG4gICAgd2hpbGUgKG51bWJlciA+PSAxMCkge1xuICAgICAgbnVtYmVyID0gbnVtYmVyIC8gMTA7XG4gICAgICBkaWdpdHNCZWZvcmVEZWNpbWFsKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpZ2l0c0JlZm9yZURlY2ltYWw7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBjb3VudERpZ2l0c0FmdGVyRGVjaW1hbCh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBvcmlnaW5hbFZhbHVlID0gdmFsdWU7XG4gICAgbGV0IG1vZGlmaWVkVmFsdWUgPSBNYXRoLmZsb29yKHZhbHVlKTtcbiAgICBsZXQgY291bnQgPSAwO1xuXG4gICAgd2hpbGUgKG1vZGlmaWVkVmFsdWUgIT09IG9yaWdpbmFsVmFsdWUgJiYgY291bnQgPCBtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QpIHtcbiAgICAgIGNvdW50Kys7XG4gICAgICBtb2RpZmllZFZhbHVlID0gTnVtYmVycy5maXhSb3VuZGluZyhvcmlnaW5hbFZhbHVlLCBjb3VudCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvdW50O1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ051bWJlcnMgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJpbmdzIHtcbiAgc3RhdGljIHJhbmRvbShsZW5ndGg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgY29uc3QgcmFuZG9tMTNDaGFyYWN0ZXJzID0gKCk6IHN0cmluZyA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygxNikuc3Vic3RyaW5nKDIsIDE1KTtcbiAgICB9O1xuXG4gICAgY29uc3QgbG9vcHM6IG51bWJlciA9IE1hdGguY2VpbChsZW5ndGggLyAxMyk7XG5cbiAgICByZXR1cm4gbmV3IEFycmF5KGxvb3BzKS5maWxsKHJhbmRvbTEzQ2hhcmFjdGVycykucmVkdWNlKChzdHJpbmcsIGZ1bmMpID0+IHtcbiAgICAgIHJldHVybiBzdHJpbmcgKyBmdW5jKCk7XG4gICAgfSwgJycpLnN1YnN0cmluZygwLCBsZW5ndGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmluZ3MgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXNzZXJ0VW5yZWFjaGFibGUoeDogbmV2ZXIpOiBuZXZlciB7XG4gIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBbJHt4fV0uIFRoaXMgc2hvdWxkIG5ldmVyIGJlIHJlYWNoZWRgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgYXNzZXJ0VW5yZWFjaGFibGU7IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi9JQXBwZW5kZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBcHBlbmRlcnMge1xuICBwcml2YXRlIF9hcHBlbmRlcnM6IEFycmF5PElBcHBlbmRlcj4gPSBbXTtcblxuICBnZXQgdmFsdWUoKTogQXJyYXk8SUFwcGVuZGVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwcGVuZGVycztcbiAgfVxuXG4gIGFkZChhcHBlbmRlcjogSUFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzLnB1c2goYXBwZW5kZXIpO1xuICB9XG5cbiAgcmVtb3ZlKGFwcGVuZGVyKTogdm9pZCB7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gdGhpcy5fYXBwZW5kZXJzLnJlZHVjZSgoaXRlbXMsIGl0ZW0pID0+IHtcbiAgICAgIGlmICghKGl0ZW0gPT09IGFwcGVuZGVyKSkge1xuICAgICAgICBpdGVtcy5wdXNoKGl0ZW0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaXRlbXM7XG4gICAgfSwgW10gYXMgQXJyYXk8SUFwcGVuZGVyPik7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi9Mb2dnZXInO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDb25zb2xlQXBwZW5kZXIgaW1wbGVtZW50cyBJQXBwZW5kZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF90aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbDtcblxuICBsb2cobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCBkYXRlOiBEYXRlKTogdm9pZCB7XG4gICAgaWYgKGxvZ0xldmVsIDwgdGhpcy5fdGhyZXNob2xkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBgJHtkYXRlLnRvSVNPU3RyaW5nKCl9IFske2NhdGVnb3J5fV0gWyR7TG9nZ2luZ0xldmVsW2xvZ0xldmVsXX1dICR7bWVzc2FnZX1gO1xuXG4gICAgaWYgKGxvZ0xldmVsIDwgTG9nZ2luZ0xldmVsLldhcm4pIHtcbiAgICAgIGNvbnNvbGUubG9nKGZ1bGxNZXNzYWdlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUuZXJyb3IoZnVsbE1lc3NhZ2UpO1xuICB9XG5cbiAgY29uc3RydWN0b3IodGhyZXNob2xkOiBMb2dnaW5nTGV2ZWwpIHtcbiAgICB0aGlzLl90aHJlc2hvbGQgPSB0aHJlc2hvbGQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7SUFwcGVuZGVyfSBmcm9tICcuL0lBcHBlbmRlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5leHBvcnQgZW51bSBMb2dnaW5nTGV2ZWwge1xuICBBbGwgPSAtMSxcbiAgVHJhY2UgPSAxMCxcbiAgRGVidWcgPSAyMCxcbiAgSW5mbyA9IDMwLFxuICBXYXJuID0gNDAsXG4gIEVycm9yID0gNTAsXG4gIEZhdGFsID0gNjAsXG4gIE9mZiA9IDEwMCxcbn1cblxuZXhwb3J0IHR5cGUgTG9nZ2luZ0xldmVsVHlwZSA9ICdPZmYnIHwgJ1RyYWNlJyB8ICdEZWJ1ZycgfCAnSW5mbycgfCAnV2FybicgfCAnRXJyb3InIHwgJ0ZhdGFsJyB8ICdBbGwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9jYXRlZ29yeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBlbmRlcnM6IEFwcGVuZGVycztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nVGhyZXNob2xkO1xuXG4gIGdldCBjYXRlZ29yeSgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jYXRlZ29yeTtcbiAgfVxuXG4gIGdldCBhcHBlbmRlcnMoKTogQXBwZW5kZXJzIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwZW5kZXJzO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBMb2dnaW5nVGhyZXNob2xkIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgdHJhY2UoLi4uYXJnczogYW55KTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90aHJlc2hvbGQudmFsdWUgfHwgdGhpcy5fdGhyZXNob2xkLnZhbHVlID4gTG9nZ2luZ0xldmVsLlRyYWNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLlRyYWNlLCBhcmdzKTtcbiAgfVxuXG4gIGRlYnVnKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5EZWJ1Zykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5EZWJ1ZywgYXJncyk7XG4gIH1cblxuICBpbmZvKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5JbmZvKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5sb2coTG9nZ2luZ0xldmVsLkluZm8sIGFyZ3MpO1xuICB9XG5cbiAgd2FybiguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuV2Fybikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5XYXJuLCBhcmdzKTtcbiAgfVxuXG4gIGVycm9yKC4uLmFyZ3M6IGFueSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fdGhyZXNob2xkLnZhbHVlIHx8IHRoaXMuX3RocmVzaG9sZC52YWx1ZSA+IExvZ2dpbmdMZXZlbC5FcnJvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9nKExvZ2dpbmdMZXZlbC5FcnJvciwgYXJncyk7XG4gIH1cblxuICBmYXRhbCguLi5hcmdzOiBhbnkpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3RocmVzaG9sZC52YWx1ZSB8fCB0aGlzLl90aHJlc2hvbGQudmFsdWUgPiBMb2dnaW5nTGV2ZWwuRmF0YWwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhMb2dnaW5nTGV2ZWwuRmF0YWwsIGFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2cobGV2ZWw6IG51bWJlciwgYXJnczogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgbWVzc2FnZSA9IHRoaXMucmVwbGFjZVBsYWNlaG9sZGVycyhhcmdzKTtcblxuICAgIHRoaXMuX2FwcGVuZGVycy52YWx1ZS5mb3JFYWNoKChhcHBlbmRlcjogSUFwcGVuZGVyKSA9PiB7XG4gICAgICBhcHBlbmRlci5sb2cobGV2ZWwsIG1lc3NhZ2UsIHRoaXMuY2F0ZWdvcnksIGRhdGUpO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZXBsYWNlUGxhY2Vob2xkZXJzKGFyZ3M6IGFueSk6IHN0cmluZyB7XG4gICAgbGV0IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcgPSBhcmdzWzBdO1xuICAgIGxldCBpbmRleCA9IDA7XG5cbiAgICB3aGlsZSAocmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5pbmRleE9mICYmIGFyZ3MubGVuZ3RoID4gMSAmJiBpbmRleCA+PSAwKSB7XG4gICAgICBpbmRleCA9IHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuaW5kZXhPZignJScsIGluZGV4KTtcblxuICAgICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgICBjb25zdCB0eXBlID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxLCBpbmRleCArIDIpO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICAgIGNhc2UgJyUnOlxuICAgICAgICAgICAgLy8gRXNjYXBlZCAnJSUnIHR1cm5zIGludG8gJyUnXG4gICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoMCwgaW5kZXgpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAxKTtcbiAgICAgICAgICAgIGluZGV4Kys7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ3MnOlxuICAgICAgICAgIGNhc2UgJ2QnOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAnJWQnIG9yICclcycgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMudG9TdHJpbmcoYXJnc1sxXSksXG4gICAgICAgICAgICAgIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcsXG4gICAgICAgICAgICAgIGluZGV4XG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2onOlxuICAgICAgICAgICAgLy8gUmVwbGFjZSAlaicgd2l0aCB0aGUgYXJndW1lbnRcbiAgICAgICAgICAgIGFyZ3NbMF0gPSByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nID0gdGhpcy5yZXBsYWNlQXJndW1lbnQoXG4gICAgICAgICAgICAgIHRoaXMuc3RyaW5naWZ5KGFyZ3NbMV0pLFxuICAgICAgICAgICAgICByZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nLFxuICAgICAgICAgICAgICBpbmRleFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgYXJncy5zcGxpY2UoMSwgMSk7XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICByZXR1cm4gYXJncy50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgYXJncyA9IGFyZ3MucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlLCBpbmRleCwgYXJyYXkpID0+IHtcbiAgICAgICAgaWYgKGluZGV4ICsgMSA9PT0gYXJyYXkubGVuZ3RoICYmIGN1cnJlbnRWYWx1ZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmVycm9yU3RhY2tBbHNvSGFzRXJyb3JNZXNzYWdlKSB7XG4gICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLnN0YWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyAnXFxuJyArIHRoaXMudG9TdHJpbmcoY3VycmVudFZhbHVlLm1lc3NhZ2UpICsgJ1xcbicgKyB0aGlzLnRvU3RyaW5nKGN1cnJlbnRWYWx1ZS5zdGFjayk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IgKyBgWyR7dGhpcy50b1N0cmluZyhjdXJyZW50VmFsdWUpfV1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3MudG9TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RyaW5naWZ5KGFyZzogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBjYWNoZSA9IFtdO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgYXJnIGluc3RhbmNlb2YgRXJyb3IgPyB0aGlzLnRvU3RyaW5nKGFyZykgOiBhcmcsXG4gICAgICAgIChrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgaWYgKCEhdmFsdWUgJiYgdmFsdWUgaW5zdGFuY2VvZiBPYmplY3QpIHtcbiAgICAgICAgICAgIGlmIChjYWNoZS5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuICc8cmVjdXJzaXZlPic7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNhY2hlLnB1c2godmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgMlxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gJ1tvYmplY3QgaW52YWxpZCBKU09OLnN0cmluZ2lmeV0nO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVwbGFjZUFyZ3VtZW50KGFyZ3VtZW50OiBhbnksIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmc6IHN0cmluZywgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIHJlcGxhY2VQbGFjZWhvbGRlcnNTdHJpbmcuc3Vic3RyaW5nKDAsIGluZGV4KSArIHRoaXMudG9TdHJpbmcoYXJndW1lbnQpICsgcmVwbGFjZVBsYWNlaG9sZGVyc1N0cmluZy5zdWJzdHJpbmcoaW5kZXggKyAyKTtcbiAgfVxuXG4gIHByaXZhdGUgdG9TdHJpbmcoZGF0YTogYW55KTogc3RyaW5nIHtcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdib29sZWFuJykge1xuICAgICAgcmV0dXJuIGRhdGEgPyAndHJ1ZScgOiAnZmFsc2UnO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgbGV0IHRvU3RyaW5nU3RyID0gJyc7XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRvU3RyaW5nU3RyID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgT2JqZWN0KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgdG9TdHJpbmdTdHIgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICB0b1N0cmluZ1N0ciA9ICdbb2JqZWN0IGludmFsaWQgdG9TdHJpbmcoKV0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRvU3RyaW5nU3RyO1xuICB9XG5cbiAgY29uc3RydWN0b3IoY2F0ZWdvcnk6IHN0cmluZywgYXBwZW5kZXJzOiBBcHBlbmRlcnMsIHRocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCkge1xuICAgIHRoaXMuX2NhdGVnb3J5ID0gY2F0ZWdvcnk7XG4gICAgdGhpcy5fYXBwZW5kZXJzID0gYXBwZW5kZXJzO1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEJ1aWxkRmVhdHVyZXMgZnJvbSAnLi4vZW52aXJvbm1lbnQvQnVpbGRGZWF0dXJlcyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dlckRlZmF1bHRzIHtcbiAgc3RhdGljIGdldCBkZWZhdWx0TG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbCB7XG4gICAgcmV0dXJuIExvZ2dpbmdMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRMb2dzXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdENvbnNvbGVMb2dnaW5nTGV2ZWwoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gTG9nZ2luZ0xldmVsW0J1aWxkRmVhdHVyZXMubG9nVG9Db25zb2xlXTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCgpOiBMb2dnaW5nTGV2ZWwge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyLCB7TG9nZ2luZ0xldmVsfSBmcm9tICcuL0xvZ2dlcic7XG5pbXBvcnQgQXBwZW5kZXJzIGZyb20gJy4vQXBwZW5kZXJzJztcbmltcG9ydCBMb2dnaW5nVGhyZXNob2xkIGZyb20gJy4vTG9nZ2luZ1RocmVzaG9sZCc7XG5pbXBvcnQgQ29uc29sZUFwcGVuZGVyIGZyb20gJy4vQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQge0lDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyfSBmcm9tICcuLi9kb20vSUNvbmZpZ3VyYXRpb25QYXJhbWF0ZXJSZWFkZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMb2dnZXJGYWN0b3J5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXI6IElDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyID0gbmV3IENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcnM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IElMb2dnZXJ9ID0ge307XG4gIHByaXZhdGUgc3RhdGljIF9hcHBlbmRlcnM6IEFwcGVuZGVycyA9IG5ldyBBcHBlbmRlcnMoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3RocmVzaG9sZDogTG9nZ2luZ1RocmVzaG9sZCA9IG5ldyBMb2dnaW5nVGhyZXNob2xkKCk7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlDb25maWd1cmF0aW9uOiBUZWxlbWV0cnlDb25maWd1cmF0aW9uID0gbmV3IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTtcblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb247XG4gIH1cblxuICBzdGF0aWMgZ2V0TG9nZ2VyKGNhdGVnb3J5OiBzdHJpbmcpOiBJTG9nZ2VyIHtcbiAgICBpZiAodHlwZW9mIGNhdGVnb3J5ICE9PSAnc3RyaW5nJykge1xuICAgICAgY2F0ZWdvcnkgPSAnU0RLJztcbiAgICB9XG5cbiAgICBjb25zdCBsb2dnZXIgPSBMb2dnZXJGYWN0b3J5Ll9sb2dnZXJzW2NhdGVnb3J5XTtcblxuICAgIGlmIChsb2dnZXIpIHtcbiAgICAgIHJldHVybiBsb2dnZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIExvZ2dlckZhY3RvcnkuX2xvZ2dlcnNbY2F0ZWdvcnldID0gbmV3IExvZ2dlcihjYXRlZ29yeSwgdGhpcy5fYXBwZW5kZXJzLCB0aGlzLl90aHJlc2hvbGQpO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgTG9nZ2VyRmFjdG9yeS5hcHBseUxvZ2dpbmdMZXZlbCgpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgnY29uc29sZScsIExvZ2dlckZhY3RvcnkuYXBwbHlDb25zb2xlTG9nZ2VyLmJpbmQodGhpcykpO1xuICAgIExvZ2dlckZhY3RvcnkuYXBwbHlBcHBlbmRlckxvZ2dpbmdMZXZlbCgndGVsZW1ldHJ5JywgTG9nZ2VyRmFjdG9yeS5hcHBseVRlbGVtZXRyeUxvZ2dlci5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5TG9nZ2luZ0xldmVsKCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWxvZ2dpbmctbGV2ZWwnKTtcblxuICAgIGlmIChMb2dnaW5nTGV2ZWxbcGFyYW1ldGVyVmFsdWVdKSB7XG4gICAgICB0aGlzLl90aHJlc2hvbGQuc2V0VGhyZXNob2xkKExvZ2dpbmdMZXZlbFtwYXJhbWV0ZXJWYWx1ZV0pO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwobmFtZTogc3RyaW5nLCBhcHBseUFwcGVuZGVyOiAobGV2ZWw6IExvZ2dpbmdMZXZlbCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGNvbnN0IHBhcmFtZXRlclZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZShgcGhlbml4LSR7bmFtZX0tbG9nZ2luZy1sZXZlbGApO1xuXG4gICAgaWYgKHBhcmFtZXRlclZhbHVlID09PSAnT2ZmJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGFwcGx5QXBwZW5kZXIoTG9nZ2luZ0xldmVsW3BhcmFtZXRlclZhbHVlXSk7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBhcHBseUNvbnNvbGVMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IENvbnNvbGVBcHBlbmRlcihsZXZlbCB8fCBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0Q29uc29sZUxvZ2dpbmdMZXZlbCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXBwbHlUZWxlbWV0cnlMb2dnZXIobGV2ZWw6IExvZ2dpbmdMZXZlbCk6IHZvaWQge1xuICAgIHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24udGhyZXNob2xkID0gbGV2ZWwgfHwgTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbDtcblxuICAgIHRoaXMuX2FwcGVuZGVycy5hZGQobmV3IFRlbGVtZXRyeUFwcGVuZGVyKHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24pKTtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdMb2dnZXJGYWN0b3J5IGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5Mb2dnZXJGYWN0b3J5LmFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCB7TG9nZ2luZ0xldmVsLCBMb2dnaW5nTGV2ZWxUeXBlfSBmcm9tICcuL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExvZ2dpbmdMZXZlbE1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFRvTG9nZ2luZ0xldmVsVHlwZShsb2dnaW5nTGV2ZWw6IExvZ2dpbmdMZXZlbCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAobG9nZ2luZ0xldmVsKSB7XG4gICAgICBjYXNlIExvZ2dpbmdMZXZlbC5PZmY6XG4gICAgICAgIHJldHVybiAnT2ZmJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLlRyYWNlOlxuICAgICAgICByZXR1cm4gJ1RyYWNlJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkRlYnVnOlxuICAgICAgICByZXR1cm4gJ0RlYnVnJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkluZm86XG4gICAgICAgIHJldHVybiAnVHJhY2UnO1xuICAgICAgY2FzZSBMb2dnaW5nTGV2ZWwuV2FybjpcbiAgICAgICAgcmV0dXJuICdXYXJuJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkVycm9yOlxuICAgICAgICByZXR1cm4gJ0Vycm9yJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkZhdGFsOlxuICAgICAgICByZXR1cm4gJ0ZhdGFsJztcbiAgICAgIGNhc2UgTG9nZ2luZ0xldmVsLkFsbDpcbiAgICAgICAgcmV0dXJuICdBbGwnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUobG9nZ2luZ0xldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChsb2dnaW5nTGV2ZWxUeXBlOiBMb2dnaW5nTGV2ZWxUeXBlKTogTG9nZ2luZ0xldmVsIHtcbiAgICBzd2l0Y2ggKGxvZ2dpbmdMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuT2ZmO1xuICAgICAgY2FzZSAnVHJhY2UnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLlRyYWNlO1xuICAgICAgY2FzZSAnRGVidWcnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkRlYnVnO1xuICAgICAgY2FzZSAnSW5mbyc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuSW5mbztcbiAgICAgIGNhc2UgJ1dhcm4nOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLldhcm47XG4gICAgICBjYXNlICdFcnJvcic6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRXJyb3I7XG4gICAgICBjYXNlICdGYXRhbCc6XG4gICAgICAgIHJldHVybiBMb2dnaW5nTGV2ZWwuRmF0YWw7XG4gICAgICBjYXNlICdBbGwnOlxuICAgICAgICByZXR1cm4gTG9nZ2luZ0xldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGxvZ2dpbmdMZXZlbFR5cGUpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4vTG9nZ2VyRGVmYXVsdHMnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4vTG9nZ2VyJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG9nZ2luZ1RocmVzaG9sZCB7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogTG9nZ2luZ0xldmVsID0gTG9nZ2VyRGVmYXVsdHMuZGVmYXVsdExvZ2dpbmdMZXZlbDtcblxuICBnZXQgdmFsdWUoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0VGhyZXNob2xkKHRocmVzaG9sZDogTG9nZ2luZ0xldmVsKTogdm9pZCB7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGhyZXNob2xkO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge1RlbGVtZXRyeUxldmVsfSBmcm9tICcuL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuL01ldHJpY3NUeXBlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljVHlwZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3M6IE1ldHJpY3NUeXBlO1xuXG4gIGNvbnN0cnVjdG9yKG1ldHJpY3M6IE1ldHJpY3NUeXBlKSB7XG4gICAgdGhpcy5fbWV0cmljcyA9IG1ldHJpY3M7XG4gIH1cblxuICBnZXROYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIE1ldHJpY3NUeXBlW3RoaXMuX21ldHJpY3NdO1xuICB9XG5cbiAgZ2V0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHN3aXRjaCAodGhpcy5fbWV0cmljcykge1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5DaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TdGFsbGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5CdWZmZXJpbmc6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLlNldHVwQ29tcGxldGVkOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5TZXR1cEZhaWxlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuUm91bmRUcmlwVGltZTpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHk6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBjYXNlIE1ldHJpY3NUeXBlLk5ldHdvcmtUeXBlOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5SZXNvbHV0aW9uQ2hhbmdlZDpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGNhc2UgTWV0cmljc1R5cGUuQXBwbGljYXRpb25Gb3JlZ3JvdW5kOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuQWxsO1xuICAgICAgY2FzZSBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQ6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5BbGw7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9tZXRyaWNzKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5leHBvcnQgZW51bSBUZWxlbWV0cnlMZXZlbCB7XG4gIE9mZiA9IDEwMCxcbiAgRXNzZW50aWFsID0gMTAsXG4gIEFsbCA9IC0xXG59XG5cbmV4cG9ydCB0eXBlIFRlbGVtZXRyeUxldmVsVHlwZSA9ICdPZmYnIHwgJ0Vzc2VudGlhbCcgfCAnQWxsJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWV0cmljc0NvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbWV0cmljcyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3RocmVzaG9sZDogVGVsZW1ldHJ5TGV2ZWwgPSBUZWxlbWV0cnlEZWZhdWx0LmRlZmF1bHRUZWxlbWV0cnlMZXZlbDtcblxuICBnZXQgdXJsKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3VybDtcbiAgfVxuXG4gIHNldCB1cmwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBtZXRyaWNzVXJsID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgbWV0cmljc1VybC5wYXRobmFtZSA9IG1ldHJpY3NVcmwucGF0aG5hbWUgKyAnL21ldHJpY3MnO1xuXG4gICAgdGhpcy5fdXJsID0gbWV0cmljc1VybC50b1N0cmluZygpO1xuICB9XG5cbiAgZ2V0IGVudmlyb25tZW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2Vudmlyb25tZW50O1xuICB9XG5cbiAgc2V0IGVudmlyb25tZW50KGVudmlyb25tZW50OiBzdHJpbmcpIHtcbiAgICB0aGlzLl9lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICB9XG5cbiAgZ2V0IHRlbmFuY3koKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdGVuYW5jeTtcbiAgfVxuXG4gIHNldCB0ZW5hbmN5KHRlbmFuY3k6IHN0cmluZykge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZW5hbmN5O1xuICB9XG5cbiAgZ2V0IHNlc3Npb25JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9zZXNzaW9uSWQ7XG4gIH1cblxuICBzZXQgc2Vzc2lvbklkKHNlc3Npb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gc2Vzc2lvbklkO1xuICB9XG5cbiAgZ2V0IHRocmVzaG9sZCgpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgcmV0dXJuIHRoaXMuX3RocmVzaG9sZDtcbiAgfVxuXG4gIHNldCB0aHJlc2hvbGQodGhyZXNob2xkOiBUZWxlbWV0cnlMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbH0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgU0RLIGZyb20gJy4uL3Nkay9TREsnO1xuaW1wb3J0IFRlbGVtZXRyeVVybCBmcm9tICcuLi9zZGsvVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuLi9zZGsvRW52aXJvbm1lbnQnO1xuaW1wb3J0IFRlbGVtZXRyeUxldmVsTWFwcGluZyBmcm9tICcuL1RlbGVtZXRyaWNMZXZlbE1hcHBpbmcnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBNZXRyaWNzRmFjdG9yeSB7XG4gIHByaXZhdGUgc3RhdGljIF9tZXRyaWNzU2VydmljZXM6IHtbY2F0ZWdvcnk6IHN0cmluZ106IE1ldHJpY3NTZXJ2aWNlfSA9IHt9O1xuXG4gIHN0YXRpYyBnZXRNZXRyaWNzU2VydmljZSh1cmw6IHN0cmluZyk6IE1ldHJpY3NTZXJ2aWNlIHtcbiAgICBpZiAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigndXInKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNzU2VydmljZXMgPSBNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzW3VybF07XG5cbiAgICBpZiAobWV0cmljc1NlcnZpY2VzKSB7XG4gICAgICByZXR1cm4gbWV0cmljc1NlcnZpY2VzO1xuICAgIH1cblxuICAgIGNvbnN0IG1ldHJpY3NDb25maWd1cmF0aW9uID0gbmV3IE1ldHJpY3NDb25maWd1cmF0aW9uKCk7XG5cbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3kgPSBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBtZXRyaWNzQ29uZmlndXJhdGlvbi51cmwgPSBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gICAgbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQgPSBFbnZpcm9ubWVudC5nZXRFbnZpcm9ubWVudEZyb21VcmwodXJsKTtcblxuICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUeXBlVG9UZWxlbWV0cnlMZXZlbChTREsudGVsZW1ldHJ5TGV2ZWwpO1xuXG4gICAgcmV0dXJuIE1ldHJpY3NGYWN0b3J5Ll9tZXRyaWNzU2VydmljZXNbdXJsXSA9IG5ldyBNZXRyaWNzU2VydmljZShtZXRyaWNzQ29uZmlndXJhdGlvbik7XG4gIH1cblxuICBzdGF0aWMgc2V0VGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWw6IFRlbGVtZXRyeUxldmVsKTogdm9pZCB7XG4gICAgY29uc3QgbWV0cmljc1NlcnZpY2VzID0gT2JqZWN0LnZhbHVlcyhNZXRyaWNzRmFjdG9yeS5fbWV0cmljc1NlcnZpY2VzKTtcblxuICAgIGlmIChtZXRyaWNzU2VydmljZXMgJiYgbWV0cmljc1NlcnZpY2VzLmxlbmd0aCkge1xuICAgICAgbWV0cmljc1NlcnZpY2VzLmZvckVhY2gobWV0cmljc1NlcnZpY2UgPT4ge1xuICAgICAgICBjb25zdCBtZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgICAgIG1ldHJpY3NDb25maWd1cmF0aW9uLnRocmVzaG9sZCA9IHRlbGVtZXRyeUxldmVsO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0xvZ2dlckZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBFeHBvbmVudGlhbEJhY2tvZmYgZnJvbSAnLi4vdGltZS9FeHBvbmVudGlhbEJhY2tvZmYnO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBNZXRyaWNUeXBlIGZyb20gJy4vTWV0cmljVHlwZSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5cbmNvbnN0IHJlcXVlc3RTaXplTGltaXQgPSAxMDI0O1xuY29uc3QgbWF4QnVmZmVyZWRSZWNvcmRzID0gMjA0ODtcblxuaW50ZXJmYWNlIElWYWx1ZSB7XG4gIHN0cmluZz86IHN0cmluZztcbiAgdWludDY0PzogbnVtYmVyO1xuICBmbG9hdD86IG51bWJlcjtcbn1cblxuaW50ZXJmYWNlIElNZXRyaWNSZWNvcmQge1xuICB0aW1lc3RhbXA6IHN0cmluZztcbiAgdGVuYW5jeTogc3RyaW5nO1xuICBzZXNzaW9uSWQ6IHN0cmluZztcbiAgc3RyZWFtSWQ6IHN0cmluZztcbiAgbWV0cmljOiBzdHJpbmc7XG4gIHZhbHVlOiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU6IElWYWx1ZTtcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBydW50aW1lOiBudW1iZXI7XG4gIHJlc291cmNlPzogc3RyaW5nO1xuICBraW5kPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgSU1ldHJpYyB7XG4gIHN0cmVhbUlkPzogc3RyaW5nO1xuICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZTtcbiAgdmFsdWU/OiBJVmFsdWU7XG4gIHByZXZpb3VzVmFsdWU/OiBJVmFsdWU7XG4gIHJ1bnRpbWU6IG51bWJlcjtcbiAgcmVzb3VyY2U/OiBzdHJpbmc7XG4gIGtpbmQ/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1ldHJpY3NTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ01ldHJpY3NTZXJ2aWNlJyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21ldHJpY3NDb25maWd1cmF0aW9uOiBNZXRyaWNzQ29uZmlndXJhdGlvbjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZXhwb25lbnRpYWxCYWNrb2ZmOiBFeHBvbmVudGlhbEJhY2tvZmY7XG4gIHByaXZhdGUgX21ldHJpY3M6IEFycmF5PElNZXRyaWNSZWNvcmQ+ID0gW107XG4gIHByaXZhdGUgX2lzU2VuZGluZzogYm9vbGVhbjtcbiAgcHJpdmF0ZSBfZmFpbHVyZUNvdW50ID0gMDtcbiAgcHJpdmF0ZSBfZG9tYWluID0gR2xvYmFsU2NvcGUubG9jYXRpb25Ib3N0bmFtZTtcblxuICBjb25zdHJ1Y3RvcihtZXRyaWNzQ29uZmlndXJhdGlvbjogTWV0cmljc0NvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbiA9IG1ldHJpY3NDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZiA9IG5ldyBFeHBvbmVudGlhbEJhY2tvZmYoKTtcbiAgfVxuXG4gIGdldCBtZXRyaWNzQ29uZmlndXJhdGlvbigpOiBNZXRyaWNzQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uO1xuICB9XG5cbiAgcHVzaChtZXRyaWM6IElNZXRyaWMpOiB2b2lkIHtcbiAgICBjb25zdCB7c3RyZWFtSWQsIHZhbHVlLCBwcmV2aW91c1ZhbHVlLCBydW50aW1lLCByZXNvdXJjZSwga2luZH0gPSBtZXRyaWM7XG4gICAgY29uc3QgbWV0cmljVHlwZSA9IG5ldyBNZXRyaWNUeXBlKG1ldHJpYy5tZXRyaWNUeXBlKTtcblxuICAgIGlmICh0aGlzLl9tZXRyaWNzQ29uZmlndXJhdGlvbi50aHJlc2hvbGQgPiBtZXRyaWNUeXBlLmdldFRlbGVtZXRyeUxldmVsKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRyaWNSZWNvcmQgPSB7XG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHRlbmFuY3k6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBzZXNzaW9uSWQ6IHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnNlc3Npb25JZCxcbiAgICAgIHN0cmVhbUlkLFxuICAgICAgbWV0cmljOiBtZXRyaWNUeXBlLmdldE5hbWUoKSxcbiAgICAgIHZhbHVlLFxuICAgICAgcHJldmlvdXNWYWx1ZSxcbiAgICAgIGZ1bGxRdWFsaWZpZWROYW1lOiB0aGlzLl9kb21haW4sXG4gICAgICBlbnZpcm9ubWVudDogdGhpcy5fbWV0cmljc0NvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgcnVudGltZSxcbiAgICAgIHJlc291cmNlLFxuICAgICAga2luZFxuICAgIH07XG5cbiAgICB0aGlzLl9tZXRyaWNzLnB1c2gobWV0cmljUmVjb3JkKTtcblxuICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNlbmRNZXRyaWNzKG1ldHJpY3NNZXNzYWdlczogQXJyYXk8SU1ldHJpY1JlY29yZD4pOiBQcm9taXNlPFJlc3BvbnNlPiB7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeSh7cmVjb3JkczogbWV0cmljc01lc3NhZ2VzfSkpO1xuXG4gICAgcmV0dXJuIGF3YWl0IEdsb2JhbFNjb3BlLmZldGNoKHRoaXMuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTWV0cmljc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBtZXRyaWNzTWVzc2FnZXMgPSB0aGlzLl9tZXRyaWNzLnNsaWNlKDAsIHJlcXVlc3RTaXplTGltaXQpO1xuXG4gICAgdGhpcy5fbWV0cmljcyA9IHRoaXMuX21ldHJpY3Muc2xpY2UocmVxdWVzdFNpemVMaW1pdCk7XG5cbiAgICByZXR1cm4gdGhpcy5zZW5kTWV0cmljcyhtZXRyaWNzTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgaWYgKHRoaXMuaXNSZXNwb25zZVN0YXR1c0NvZGVSZXRyeWFibGUocmVzcG9uc2UpKSB7XG4gICAgICAgIGlmICh0aGlzLl9tZXRyaWNzLmxlbmd0aCA8PSBtYXhCdWZmZXJlZFJlY29yZHMpIHtcbiAgICAgICAgICB0aGlzLl9mYWlsdXJlQ291bnQrKztcblxuICAgICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbWV0cmljcyA9IFsuLi5tZXRyaWNzTWVzc2FnZXMsIC4uLnRoaXMuX21ldHJpY3NdO1xuXG4gICAgICAgICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZE1ldHJpY3NJZkFibGUoKTtcbiAgICAgICAgICB9LCB0aGlzLl9leHBvbmVudGlhbEJhY2tvZmYuZ2V0RXhwb25lbnRpYWxCYWNrb2ZmSW50ZXJ2YWxCeUZhaWx1cmVDb3VudCh0aGlzLl9mYWlsdXJlQ291bnQpKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignVG9vIG1hbnkgY2FjaGVkIG1ldHJpYyByZWNvcmRzIFslc10sIGRyb3BwaW5nIFslc10gcmVjb3JkcycsIHRoaXMuX21ldHJpY3MubGVuZ3RoLCBtZXRyaWNzTWVzc2FnZXMubGVuZ3RoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG4gICAgICB0aGlzLl9mYWlsdXJlQ291bnQgPSAwO1xuXG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTWV0cmljc0lmQWJsZSgpO1xuXG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKCkgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRNZXRyaWNzSWZBYmxlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlKHtzdGF0dXN9OiBSZXNwb25zZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAvXjVcXGR7Mn0kLy50ZXN0KHN0YXR1cy50b1N0cmluZygpKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZW51bSBNZXRyaWNzVHlwZSB7XG4gIFRpbWVUb0ZpcnN0RnJhbWUsXG4gIENoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUsXG4gIFN0YWxsZWQsXG4gIEJ1ZmZlcmluZyxcbiAgU2V0dXBDb21wbGV0ZWQsXG4gIFNldHVwRmFpbGVkLFxuICBSb3VuZFRyaXBUaW1lLFxuICBEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgTmV0d29ya1R5cGUsXG4gIFJlc29sdXRpb25DaGFuZ2VkLFxuICBBcHBsaWNhdGlvbkZvcmVncm91bmQsXG4gIEFwcGxpY2F0aW9uQmFja2dyb3VuZFxufVxuXG5leHBvcnQgZGVmYXVsdCBNZXRyaWNzVHlwZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWwsIFRlbGVtZXRyeUxldmVsVHlwZX0gZnJvbSAnLi9NZXRyaWNzQ29uZmlndXJhdGlvbic7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUxldmVsTWFwcGluZyB7XG4gIHN0YXRpYyBjb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZSh0ZWxlbWV0cnlMZXZlbDogVGVsZW1ldHJ5TGV2ZWwpOiBUZWxlbWV0cnlMZXZlbFR5cGUge1xuICAgIHN3aXRjaCAodGVsZW1ldHJ5TGV2ZWwpIHtcbiAgICAgIGNhc2UgVGVsZW1ldHJ5TGV2ZWwuT2ZmOlxuICAgICAgICByZXR1cm4gJ09mZic7XG4gICAgICBjYXNlIFRlbGVtZXRyeUxldmVsLkVzc2VudGlhbDpcbiAgICAgICAgcmV0dXJuICdFc3NlbnRpYWwnO1xuICAgICAgY2FzZSBUZWxlbWV0cnlMZXZlbC5BbGw6XG4gICAgICAgIHJldHVybiAnQWxsJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwodGVsZW1ldHJ5TGV2ZWxUeXBlOiBUZWxlbWV0cnlMZXZlbFR5cGUpOiBUZWxlbWV0cnlMZXZlbCB7XG4gICAgc3dpdGNoICh0ZWxlbWV0cnlMZXZlbFR5cGUpIHtcbiAgICAgIGNhc2UgJ09mZic6XG4gICAgICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbC5PZmY7XG4gICAgICBjYXNlICdFc3NlbnRpYWwnOlxuICAgICAgICByZXR1cm4gVGVsZW1ldHJ5TGV2ZWwuRXNzZW50aWFsO1xuICAgICAgY2FzZSAnQWxsJzpcbiAgICAgICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsLkFsbDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHRlbGVtZXRyeUxldmVsVHlwZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgQnVpbGRGZWF0dXJlcyBmcm9tICcuLi9lbnZpcm9ubWVudC9CdWlsZEZlYXR1cmVzJztcbmltcG9ydCB7VGVsZW1ldHJ5TGV2ZWx9IGZyb20gJy4uL21ldHJpY3MvTWV0cmljc0NvbmZpZ3VyYXRpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlEZWZhdWx0IHtcbiAgc3RhdGljIGdldCBkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwoKTogVGVsZW1ldHJ5TGV2ZWwge1xuICAgIHJldHVybiBUZWxlbWV0cnlMZXZlbFtCdWlsZEZlYXR1cmVzLnNlbmRNZXRyaWNzXTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBQcm9taXNlSGFuZGxlciBmcm9tICcuL1Byb21pc2VIYW5kbGVyJztcblxuY2xhc3MgUHJvbWlzZSB7XG4gIF9zdGF0ZTogbnVtYmVyO1xuICBfaGFuZGxlZDogYm9vbGVhbjtcbiAgX3ZhbHVlOiBQcm9taXNlO1xuICBfZGVmZXJyZWRzOiBBcnJheTxQcm9taXNlSGFuZGxlcj47XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgLy8gQHRzLWlnbm9yZVxuICB0aGVuKG9uRnVsZmlsbGVkOiBGdW5jdGlvbiwgb25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZDtcblxuICBjb25zdHJ1Y3RvcihjYWxsYmFjaykge1xuICAgIGlmICghKHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUHJvbWlzZXMgbXVzdCBiZSBjb25zdHJ1Y3RlZCB2aWEgbmV3Jyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbm90IGEgZnVuY3Rpb24nKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdGF0ZSA9IDA7XG4gICAgdGhpcy5faGFuZGxlZCA9IGZhbHNlO1xuICAgIHRoaXMuX3ZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2RlZmVycmVkcyA9IFtdO1xuXG4gICAgdGhpcy5kb1Jlc29sdmUoY2FsbGJhY2spO1xuICB9XG5cbiAgZG9SZXNvbHZlKGNhbGxiYWNrOiBGdW5jdGlvbik6IHZvaWQge1xuICAgIGxldCBkb25lID0gZmFsc2U7XG5cbiAgICB0cnkge1xuICAgICAgY2FsbGJhY2soXG4gICAgICAgIHZhbHVlID0+IHtcbiAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRvbmUgPSB0cnVlO1xuICAgICAgICAgIHRoaXMucHJvbWlzZVJlc29sdmUodmFsdWUpO1xuICAgICAgICB9LFxuICAgICAgICByZWFzb24gPT4ge1xuICAgICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9uZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5wcm9taXNlUmVqZWN0KHJlYXNvbik7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICB0aGlzLnByb21pc2VSZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2VSZXNvbHZlKG5ld1ZhbHVlOiBQcm9taXNlIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgY29uc3QgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQcm9taXNlIFJlc29sdXRpb24gUHJvY2VkdXJlOiBodHRwczovL2dpdGh1Yi5jb20vUHJvbWlzZXMtYXBsdXMvUHJvbWlzZXMtc3BlYyN0aGUtUHJvbWlzZS1yZXNvbHV0aW9uLXByb2NlZHVyZVxuICAgICAgaWYgKG5ld1ZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0EgUHJvbWlzZSBjYW5ub3QgYmUgcmVzb2x2ZWQgd2l0aCBpdCBzZWxmLicpO1xuICAgICAgfVxuXG4gICAgICBpZiAobmV3VmFsdWUgJiYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG5ld1ZhbHVlID09PSAnZnVuY3Rpb24nKSkge1xuICAgICAgICBjb25zdCB0aGVuID0gbmV3VmFsdWUudGhlbjtcblxuICAgICAgICBpZiAobmV3VmFsdWUgaW5zdGFuY2VvZiBQcm9taXNlKSB7XG4gICAgICAgICAgcHJvbWlzZS5fc3RhdGUgPSAzO1xuICAgICAgICAgIHByb21pc2UuX3ZhbHVlID0gbmV3VmFsdWU7XG4gICAgICAgICAgcHJvbWlzZS5maW5hbGUoKTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHByb21pc2UuZG9SZXNvbHZlKGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1yZXN0LXBhcmFtc1xuICAgICAgICAgICAgdGhlbi5hcHBseShuZXdWYWx1ZSwgYXJndW1lbnRzKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBwcm9taXNlLl9zdGF0ZSA9IDE7XG4gICAgICBwcm9taXNlLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgICAgcHJvbWlzZS5maW5hbGUoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBwcm9taXNlLnByb21pc2VSZWplY3QoZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvbWlzZVJlamVjdChuZXdWYWx1ZTogUHJvbWlzZSB8IHVuZGVmaW5lZCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXRlID0gMjtcbiAgICB0aGlzLl92YWx1ZSA9IG5ld1ZhbHVlO1xuICAgIHRoaXMuZmluYWxlKCk7XG4gIH1cblxuICBmaW5hbGUoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAyICYmIHRoaXMuX2RlZmVycmVkcy5sZW5ndGggPT09IDApIHtcbiAgICAgIFByb21pc2UuX2ltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5faGFuZGxlZCkge1xuICAgICAgICAgIFByb21pc2UuX3VuaGFuZGxlZFJlamVjdGlvbih0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLl9kZWZlcnJlZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIHRoaXMuaGFuZGxlKHRoaXMuX2RlZmVycmVkc1tpXSk7XG4gICAgfVxuXG4gICAgdGhpcy5fZGVmZXJyZWRzID0gbnVsbDtcbiAgfVxuXG4gIGhhbmRsZShkZWZlcnJlZDogUHJvbWlzZUhhbmRsZXIpOiB2b2lkIHtcbiAgICBsZXQgcHJvbWlzZSA9IHRoaXMgYXMgUHJvbWlzZTtcblxuICAgIHdoaWxlIChwcm9taXNlLl9zdGF0ZSA9PT0gMykge1xuICAgICAgcHJvbWlzZSA9IHByb21pc2UuX3ZhbHVlO1xuICAgIH1cblxuICAgIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gMCkge1xuICAgICAgcHJvbWlzZS5fZGVmZXJyZWRzLnB1c2goZGVmZXJyZWQpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcHJvbWlzZS5faGFuZGxlZCA9IHRydWU7XG4gICAgUHJvbWlzZS5faW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gcHJvbWlzZS5fc3RhdGUgPT09IDEgPyBkZWZlcnJlZC5vbkZ1bGZpbGxlZCA6IGRlZmVycmVkLm9uUmVqZWN0ZWQ7XG5cbiAgICAgIGlmIChjYWxsYmFjayA9PT0gbnVsbCkge1xuICAgICAgICBpZiAocHJvbWlzZS5fc3RhdGUgPT09IDEpIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZXNvbHZlKHByb21pc2UuX3ZhbHVlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkZWZlcnJlZC5wcm9taXNlLnByb21pc2VSZWplY3QocHJvbWlzZS5fdmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVzdWx0O1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXN1bHQgPSBjYWxsYmFjayhwcm9taXNlLl92YWx1ZSk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlamVjdChlKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGRlZmVycmVkLnByb21pc2UucHJvbWlzZVJlc29sdmUocmVzdWx0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhbGwoYXJyOiBBcnJheTxQcm9taXNlPik6IFByb21pc2Uge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ1Byb21pc2UuYWxsIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcnIpO1xuXG4gICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIHJlc29sdmUoW10pO1xuICAgICAgfVxuXG4gICAgICBsZXQgcmVtYWluaW5nID0gYXJncy5sZW5ndGg7XG4gICAgICBjb25zdCBtYW5hZ2VSZXNwb25zZSA9IChpLCB2YWx1ZSk6IHZvaWQgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICh2YWx1ZSAmJiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpKSB7XG4gICAgICAgICAgICBjb25zdCB0aGVuID0gdmFsdWUudGhlbjtcblxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgIHRoZW4uY2FsbChcbiAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZSA9PiBtYW5hZ2VSZXNwb25zZShpLCB2YWx1ZSksXG4gICAgICAgICAgICAgICAgcmVqZWN0XG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGFyZ3NbaV0gPSB2YWx1ZTtcblxuICAgICAgICAgIGlmICgtLXJlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShhcmdzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG1hbmFnZVJlc3BvbnNlKGksIGFyZ3NbaV0pO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIHJlc29sdmUodmFsdWUpOiBQcm9taXNlIHtcbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZS5jb25zdHJ1Y3RvciA9PT0gUHJvbWlzZSkge1xuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHJlc29sdmUodmFsdWUpKTtcbiAgfVxuXG4gIHN0YXRpYyByZWplY3QodmFsdWUpOiBQcm9taXNlIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4gcmVqZWN0KHZhbHVlKSk7XG4gIH1cblxuICBzdGF0aWMgcmFjZShhcnI6IEFycmF5PFByb21pc2U+KTogUHJvbWlzZSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignUHJvbWlzZS5yYWNlIGFjY2VwdHMgYW4gYXJyYXknKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBhcnIubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKGFycltpXSkudGhlbihyZXNvbHZlLCByZWplY3QpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIF9pbW1lZGlhdGUoY2FsbGJhY2s6IEZ1bmN0aW9uKTogdm9pZCB7XG4gICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoY2FsbGJhY2ssIDApO1xuICB9XG5cbiAgc3RhdGljIF91bmhhbmRsZWRSZWplY3Rpb24oZXJyb3IpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICd1bmRlZmluZWQnICYmIGNvbnNvbGUpIHtcbiAgICAgIGNvbnNvbGUud2FybignUG9zc2libGUgVW5oYW5kbGVkIFByb21pc2UgUmVqZWN0aW9uOicsIGVycm9yKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb25zb2xlXG4gICAgfVxuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlWydjYXRjaCddID0gZnVuY3Rpb24ob25SZWplY3RlZDogRnVuY3Rpb24pOiBQcm9taXNlIHwgdm9pZCB7XG4gIHJldHVybiB0aGlzLnRoZW4obnVsbCwgb25SZWplY3RlZCk7XG59O1xuXG5Qcm9taXNlLnByb3RvdHlwZVsndGhlbiddID0gZnVuY3Rpb24ob25GdWxmaWxsZWQ6IEZ1bmN0aW9uLCBvblJlamVjdGVkOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyB0aGlzLmNvbnN0cnVjdG9yKCgpID0+IG51bGwpO1xuXG4gIHRoaXMuaGFuZGxlKG5ldyBQcm9taXNlSGFuZGxlcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkpO1xuXG4gIHJldHVybiBwcm9taXNlO1xufTtcblxuUHJvbWlzZS5wcm90b3R5cGVbJ2ZpbmFsbHknXSA9IGZ1bmN0aW9uKGNhbGxiYWNrOiBGdW5jdGlvbik6IFByb21pc2UgfCB2b2lkIHtcbiAgY29uc3QgY29uc3RydWN0b3IgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gIHJldHVybiB0aGlzLnRoZW4oXG4gICAgdmFsdWUgPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IHZhbHVlKSxcbiAgICByZWFzb24gPT4gY29uc3RydWN0b3IucmVzb2x2ZShjYWxsYmFjaygpKS50aGVuKCgpID0+IGNvbnN0cnVjdG9yLnJlamVjdChyZWFzb24pKVxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgUHJvbWlzZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBQcm9taXNlIGZyb20gJy4vUHJvbWlzZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFByb21pc2VIYW5kbGVyIHtcbiAgb25GdWxmaWxsZWQ6IEZ1bmN0aW9uO1xuICBvblJlamVjdGVkOiBGdW5jdGlvbjtcbiAgcHJvbWlzZTogUHJvbWlzZTtcblxuICBjb25zdHJ1Y3RvcihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgcHJvbWlzZSkge1xuICAgIHRoaXMub25GdWxmaWxsZWQgPSB0eXBlb2Ygb25GdWxmaWxsZWQgPT09ICdmdW5jdGlvbicgPyBvbkZ1bGZpbGxlZCA6IG51bGw7XG4gICAgdGhpcy5vblJlamVjdGVkID0gdHlwZW9mIG9uUmVqZWN0ZWQgPT09ICdmdW5jdGlvbicgPyBvblJlamVjdGVkIDogbnVsbDtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElQZWVyQ29ubmVjdGlvbiBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSBmcm9tICcuL0lQZWVyQ29ubmVjdGlvbkZhY3RvcnknO1xuaW1wb3J0IFZhbmlsbGFQZWVyQ29ubmVjdGlvbkZhY3RvcnkgZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcblxuZXhwb3J0IGludGVyZmFjZSBJUGVlckNvbm5lY3Rpb25PZmZlckluaXQge1xuICBhdWRpb1RyYW5zY2VpdmVyPzogUlRDUnRwVHJhbnNjZWl2ZXI7XG4gIHZpZGVvVHJhbnNjZWl2ZXI/OiBSVENSdHBUcmFuc2NlaXZlcjtcbiAgcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgbG9jYWxPZmZlcjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVlckNvbm5lY3Rpb25TZXJ2aWNlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdQZWVyQ29ubmVjdGlvblNlcnZpY2UnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3BlZXJDb25uZWN0aW9uRmFjdG9yeTogU3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiA9IG5ldyBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KG5ldyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5KCkpO1xuICBwcml2YXRlIHN0YXRpYyBfY2FjaGVkOiB7XG4gICAgZGlyZWN0aW9uPzogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb247XG4gICAgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0PjtcbiAgfTtcblxuICBzdGF0aWMgZ2V0IHBlZXJDb25uZWN0aW9uRmFjdG9yeSgpOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+IHtcbiAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25TZXJ2aWNlLl9wZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOiB2b2lkIHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNQcmVjYWNoaW5nRW5hYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIoKVxuICAgICAgICAuY2F0Y2goZSA9PiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHByZS1jYWNoZSBwZWVyIGNvbm5lY3Rpb24gb2ZmZXInLCBlKSk7XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGFzeW5jIHByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpOiBQcm9taXNlPHsgcGVlckNvbm5lY3Rpb246IFByb21pc2U8SVBlZXJDb25uZWN0aW9uT2ZmZXJJbml0IHwgdm9pZD47IGRpcmVjdGlvbjogUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gfT4ge1xuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IHtcbiAgICAgIGRpcmVjdGlvbjogJ3JlY3Zvbmx5JyxcbiAgICAgIHBlZXJDb25uZWN0aW9uOiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigpXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9KVxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcihkaXJlY3Rpb246IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uID0gJ3JlY3Zvbmx5JywgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gZmFsc2UpOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbk9mZmVySW5pdD4ge1xuICAgIGlmIChQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCAmJiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZC5kaXJlY3Rpb24gPT09IGRpcmVjdGlvbiAmJiAhZW5jb2RlZEluc2VydGFibGVTdHJlYW1zKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IFBlZXJDb25uZWN0aW9uU2VydmljZS5fY2FjaGVkLnBlZXJDb25uZWN0aW9uO1xuXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX2NhY2hlZCA9IG51bGw7XG5cbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb25maWd1cmF0aW9uOiBSVENDb25maWd1cmF0aW9uID0gRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgPyB7ZW5jb2RlZEluc2VydGFibGVTdHJlYW1zfSA6IHVuZGVmaW5lZDtcblxuICAgIHJldHVybiBQZWVyQ29ubmVjdGlvblNlcnZpY2UuX3BlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZS5jcmVhdGVQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKVxuICAgICAgLnRoZW4oYXN5bmMgcGVlckNvbm5lY3Rpb24gPT4ge1xuICAgICAgICBjb25zdCBzdXBwb3J0c0FkZFRyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNBZGRUcmFuc2NlaXZlcjtcbiAgICAgICAgbGV0IHZpZGVvVHJhbnNjZWl2ZXIsIGF1ZGlvVHJhbnNjZWl2ZXI7XG5cbiAgICAgICAgaWYgKHN1cHBvcnRzQWRkVHJhbnNjZWl2ZXIpIHtcbiAgICAgICAgICBhdWRpb1RyYW5zY2VpdmVyID0gcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIoJ2F1ZGlvJywge2RpcmVjdGlvbn0pO1xuICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIgPSBwZWVyQ29ubmVjdGlvbi5hZGRUcmFuc2NlaXZlcigndmlkZW8nLCB7ZGlyZWN0aW9ufSk7XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYXVkaW9UcmFuc2NlaXZlcixcbiAgICAgICAgICAgIHZpZGVvVHJhbnNjZWl2ZXIsXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbjogcGVlckNvbm5lY3Rpb24sXG4gICAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcih1bmRlZmluZWQpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSBkaXJlY3Rpb24gPT09ICdyZWN2b25seScgPyB7XG4gICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICBvZmZlclRvUmVjZWl2ZVZpZGVvOiB0cnVlXG4gICAgICAgIH0gOiB7fTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uOiBwZWVyQ29ubmVjdGlvbixcbiAgICAgICAgICBsb2NhbE9mZmVyOiBhd2FpdCBwZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihvcHRpb25zKVxuICAgICAgICB9O1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignUGVlckNvbm5lY3Rpb25TZXJ2aWNlIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5QZWVyQ29ubmVjdGlvblNlcnZpY2UuaW5pdGlhdGVJbml0aWFsUHJlY2FjaGluZygpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUnRjQ29uZmlndXJhdGlvbk1hbmFnZXIge1xuICBzdGF0aWMgdHJ1bmNhdGVJY2VTZXJ2ZXJzKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBSVENDb25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBpY2VTZXJ2ZXJzOiBSVENJY2VTZXJ2ZXJbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHVybHM6IHN0cmluZ1tdID0gW107XG5cbiAgICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCAyOyBpbmRleCsrKSB7XG4gICAgICAgIGNvbnN0IHVybCA9IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XTtcblxuICAgICAgICBpZiAodXJsKSB7XG4gICAgICAgICAgdXJscy5wdXNoKGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51cmxzW2luZGV4XSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWNlU2VydmVycy5wdXNoKHtcbiAgICAgICAgdXJsczogdXJscyxcbiAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgY3JlZGVudGlhbDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLmNyZWRlbnRpYWxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycyA9IGljZVNlcnZlcnM7XG5cbiAgICByZXR1cm4gY29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdSdGNDb25maWd1cmF0aW9uTWFuYWdlciBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi9TZHBQYXJzZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSdGNNb25pdG9yU3RhdGlzdGljIHtcbiAgW2tpbmQ6IHN0cmluZ106IElSdGNTdGF0aXN0aWM7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0IHtcbiAgcmVzdWx0OiAoKSA9PiBJTGVnYWN5UlRDU3RhdHNSZXBvcnRJdGVtW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUxlZ2FjeVJUQ1N0YXRzUmVwb3J0SXRlbSBleHRlbmRzIFJUQ1N0YXRzUmVwb3J0IHtcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lczogKCkgPT4gc3RyaW5nW107XG4gIHN0YXQ6IChuYW1lKSA9PiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJ0Y1N0YXRpc3RpYyB7XG4gIHNzcmM/OiBzdHJpbmc7XG4gIG1lZGlhVHlwZT86IHN0cmluZztcbiAgdGltZXN0YW1wOiBudW1iZXI7XG4gIGJpdHJhdGU/OiBudW1iZXI7XG4gIGJ5dGVzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGZyYW1lc0RlY29kZWQ/OiBudW1iZXI7XG4gIHBhY2tldHNMb3N0PzogbnVtYmVyO1xuICBwYWNrZXRzUmVjZWl2ZWQ/OiBudW1iZXI7XG4gIGNvZGVjPzogc3RyaW5nO1xuICBmcHM/OiBudW1iZXI7XG4gIHJvdW5kVHJpcFRpbWU/OiBudW1iZXI7XG4gIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuY29uc3QgdXBkYXRlU3RhdGlzdGljVGltZW91dCA9IDEwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9lc3RpbWF0ZWRSb3VuZFRyaXBUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VzdGltYXRlZFZpZGVvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfZXN0aW1hdGVkQXVkaW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9ydGNTdGF0aXN0aWM6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+ID0gbmV3IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+KHt9KTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbjtcbiAgcHJpdmF0ZSBfaXNNb25pdG9yUnVubmluZyA9IHRydWU7XG4gIHByaXZhdGUgX3VwZGF0ZVRpbWVvdXQ6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdHJhY2tzVG9Nb25pdG9yOiBzdHJpbmdbXTtcblxuICBjb25zdHJ1Y3RvcihwZWVyQ29ubmVjdGlvbjogSVBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbTogTWVkaWFTdHJlYW0sIGVzdGltYXRlZFJvdW5kVHJpcFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gcGVlckNvbm5lY3Rpb247XG4gICAgdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZSA9IGVzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgdGhpcy5fdHJhY2tzVG9Nb25pdG9yID0gbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkubWFwKHRyYWNrID0+IHRyYWNrLmtpbmQpIHx8IFtdO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmdldEN1cnJlbnRPZmZlckRpc2FibGVkKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFNEUCA9IG5ldyBTZHBQYXJzZXIodGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudFJlbW90ZURlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgdGhpcy5fZXN0aW1hdGVkQXVkaW9Db2RlYyA9IHBhcnNlZFNEUC5hdWRpb0NvZGVjO1xuICAgICAgICB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjID0gcGFyc2VkU0RQLnZpZGVvQ29kZWM7XG4gICAgICB9XG5cbiAgICAgIHRoaXMudXBkYXRlU3RhdGlzdGljKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHJ0Y1N0YXRpc3RpYygpOiBTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPiB7XG4gICAgcmV0dXJuIHRoaXMuX3J0Y1N0YXRpc3RpYztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5faXNNb25pdG9yUnVubmluZyA9IGZhbHNlO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcblxuICAgIGlmICh0aGlzLl91cGRhdGVUaW1lb3V0KSB7XG4gICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGhpcy5fdXBkYXRlVGltZW91dCk7XG4gICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZVN0YXRpc3RpYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IHRoaXMudXBkYXRlU3RhdGlzdGljTGVnYWN5KCk7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBTYWZhcmkgMTEgZG9lc250IGhhdmUga2luZCBvciBtZWRpYVR5cGUgc28gd2UgbmVlZCB0byB0YWtlIGl0IGZyb20gdGhlIGluYm91bmQtcnRwIG9iamVjdCBpZFxuICAgIGNvbnN0IGdldEtpbmRGb3JTYWZhcmkxMSA9IChpdGVtKTogc3RyaW5nID0+IGl0ZW0uaWQuaW5jbHVkZXMoJ0F1ZGlvJykgPyAnYXVkaW8nIDogaXRlbS5pZC5pbmNsdWRlcygnVmlkZW8nKSA/ICd2aWRlbycgOiAnJztcbiAgICBjb25zdCBpZ25vcmVkID0gYXdhaXQgdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0U3RhdHMobnVsbClcbiAgICAgIC50aGVuKHN0YXRzID0+IHtcbiAgICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcblxuICAgICAgICBpZiAoc3RhdHMpIHtcbiAgICAgICAgICBsZXQgcm91bmRUcmlwVGltZSA9IHRoaXMuX2VzdGltYXRlZFJvdW5kVHJpcFRpbWU7XG4gICAgICAgICAgbGV0IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcblxuICAgICAgICAgIHN0YXRzLmZvckVhY2gocmVwb3J0ID0+IHtcbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQuY3VycmVudFJvdW5kVHJpcFRpbWUpIHtcbiAgICAgICAgICAgICAgcm91bmRUcmlwVGltZSA9IHJlcG9ydC5jdXJyZW50Um91bmRUcmlwVGltZSAqIDEwMDA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ3ZpZGVvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWyd2aWRlbyddLnJvdW5kVHJpcFRpbWUgPSByb3VuZFRyaXBUaW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ2NhbmRpZGF0ZS1wYWlyJyAmJiByZXBvcnQubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgIGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IHJlcG9ydC5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG5cbiAgICAgICAgICAgICAgaWYgKHJ0Y1N0YXRpc3RpY3NbJ2F1ZGlvJ10pIHtcbiAgICAgICAgICAgICAgICBydGNTdGF0aXN0aWNzWydhdWRpbyddLmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCA9IGxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcDtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmIChydGNTdGF0aXN0aWNzWyd2aWRlbyddKSB7XG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1sndmlkZW8nXS5sYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXAgPSBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSAnaW5ib3VuZC1ydHAnKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGtpbmQgPSByZXBvcnQua2luZCB8fCByZXBvcnQubWVkaWFUeXBlIHx8IGdldEtpbmRGb3JTYWZhcmkxMShyZXBvcnQpO1xuICAgICAgICAgICAgICBsZXQgY29kZWMgPSAnJztcblxuICAgICAgICAgICAgICBzdGF0cy5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtLmlkID09PSByZXBvcnQuY29kZWNJZCkge1xuICAgICAgICAgICAgICAgICAgY29kZWMgPSBpdGVtLm1pbWVUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgaWYgKGtpbmQgJiYgdGhpcy5fdHJhY2tzVG9Nb25pdG9yLmluY2x1ZGVzKGtpbmQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXBvcnQuYnl0ZXNSZWNlaXZlZCB8fCAwO1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQnl0ZXNSZWNlaXZlZCA9IHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZT8uW2tpbmRdPy5ieXRlc1JlY2VpdmVkID8/IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgYnl0ZXNEZWx0YSA9IGJ5dGVzIC0gcHJldmlvdXNCeXRlc1JlY2VpdmVkO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVEZWx0YSA9IHJlcG9ydC50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWU/LltraW5kXT8udGltZXN0YW1wO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpdHJhdGUgPSBieXRlc0RlbHRhICYmIHRpbWVEZWx0YSA/IE1hdGguZmxvb3IoOCAqIGJ5dGVzRGVsdGEgL1xuICAgICAgICAgICAgICAgICAgdGltZURlbHRhICogMTAwMCkgOiAwO1xuXG4gICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXSA9IHtcbiAgICAgICAgICAgICAgICAgIHNzcmM6IHJlcG9ydC5zc3JjLFxuICAgICAgICAgICAgICAgICAgbWVkaWFUeXBlOiBraW5kLFxuICAgICAgICAgICAgICAgICAgdGltZXN0YW1wOiByZXBvcnQudGltZXN0YW1wLFxuICAgICAgICAgICAgICAgICAgYml0cmF0ZSxcbiAgICAgICAgICAgICAgICAgIGJ5dGVzUmVjZWl2ZWQ6IHJlcG9ydC5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgcGFja2V0c0xvc3Q6IHJlcG9ydC5wYWNrZXRzTG9zdCxcbiAgICAgICAgICAgICAgICAgIHBhY2tldHNSZWNlaXZlZDogcmVwb3J0LnBhY2tldHNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgIGNvZGVjOiBjb2RlYyB8fCB0aGlzLmdldENvZGVjQnlUeXBlKGtpbmQpLFxuICAgICAgICAgICAgICAgICAgcm91bmRUcmlwVGltZVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAocmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXApIHtcbiAgICAgICAgICAgICAgICAgIHJ0Y1N0YXRpc3RpY3Nba2luZF0ubGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wID0gcmVwb3J0Lmxhc3RQYWNrZXRSZWNlaXZlZFRpbWVzdGFtcCB8fCBsYXN0UGFja2V0UmVjZWl2ZWRUaW1lc3RhbXA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGtpbmQgPT09ICd2aWRlbycgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlICYmIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlbykge1xuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnJhbWVzRGVjb2RlZCddID0gcmVwb3J0LmZyYW1lc0RlY29kZWQ7XG5cbiAgICAgICAgICAgICAgICAgIGNvbnN0IGZwcyA9IChyZXBvcnQuZnJhbWVzRGVjb2RlZCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby5mcmFtZXNEZWNvZGVkKSAvXG4gICAgICAgICAgICAgICAgICAgIChydGNTdGF0aXN0aWNzW2tpbmRdLnRpbWVzdGFtcCAtIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZS52aWRlby50aW1lc3RhbXApICpcbiAgICAgICAgICAgICAgICAgICAgMTAwMDtcblxuICAgICAgICAgICAgICAgICAgcnRjU3RhdGlzdGljc1traW5kXVsnZnBzJ10gPSBmcHMgPyBNYXRoLnJvdW5kKGZwcyAqIDEwMCkgLyAxMDAgOiAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlID0gcnRjU3RhdGlzdGljcztcbiAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICAgIHRoaXMuX3VwZGF0ZVRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlU3RhdGlzdGljKCksIHVwZGF0ZVN0YXRpc3RpY1RpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlU3RhdGlzdGljTGVnYWN5KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGlnbm9yZWQgPSBhd2FpdCB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0c0xlZ2FjeSgpLnRoZW4oc3RhdHMgPT4ge1xuICAgICAgY29uc3QgcnRjU3RhdGlzdGljczogSVJ0Y01vbml0b3JTdGF0aXN0aWMgPSB7fTtcbiAgICAgIGxldCByb3VuZFRyaXBUaW1lID0gdGhpcy5fZXN0aW1hdGVkUm91bmRUcmlwVGltZTtcblxuICAgICAgc3RhdHMucmVzdWx0KCkuZm9yRWFjaChyZXBvcnQgPT4ge1xuICAgICAgICByZXBvcnQubmFtZXMoKS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICAgIGlmIChuYW1lID09PSAnZ29vZ1JUVCcpIHtcbiAgICAgICAgICAgIHJvdW5kVHJpcFRpbWUgPSByZXBvcnQuc3RhdChuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmIChyZXBvcnQudHlwZSA9PT0gJ3NzcmMnKSB7XG4gICAgICAgICAgY29uc3QgbWVkaWFUeXBlID0gcmVwb3J0LnN0YXQoJ21lZGlhVHlwZScpLnRvU3RyaW5nKCk7XG5cbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV0gPSB7dGltZXN0YW1wOiBEYXRlLm5vdygpfTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3NzcmMnXSA9IHJlcG9ydC5zdGF0KCdzc3JjJykudG9TdHJpbmcoKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ21lZGlhVHlwZSddID0gbWVkaWFUeXBlO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnYnl0ZXNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ2J5dGVzUmVjZWl2ZWQnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNMb3N0J10gPSByZXBvcnQuc3RhdCgncGFja2V0c0xvc3QnKTtcbiAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ3BhY2tldHNSZWNlaXZlZCddID0gcmVwb3J0LnN0YXQoJ3BhY2tldHNSZWNlaXZlZCcpO1xuICAgICAgICAgIHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXVsnY29kZWMnXSA9IHJlcG9ydC5zdGF0KCdnb29nQ29kZWNOYW1lJykudG9TdHJpbmcoKSB8fCB0aGlzLmdldENvZGVjQnlUeXBlKG1lZGlhVHlwZSk7XG4gICAgICAgICAgcnRjU3RhdGlzdGljc1ttZWRpYVR5cGVdWydyb3VuZFRyaXBUaW1lJ10gPSByb3VuZFRyaXBUaW1lO1xuXG4gICAgICAgICAgaWYgKG1lZGlhVHlwZSA9PT0gJ3ZpZGVvJyAmJiB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUgJiYgdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvKSB7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZyYW1lc0RlY29kZWQnXSA9IHJlcG9ydC5zdGF0KCdmcmFtZXNEZWNvZGVkJyk7XG4gICAgICAgICAgICBydGNTdGF0aXN0aWNzW21lZGlhVHlwZV1bJ2ZwcyddID0gKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS5mcmFtZXNEZWNvZGVkIC0gdGhpcy5fcnRjU3RhdGlzdGljLnZhbHVlLnZpZGVvLmZyYW1lc0RlY29kZWQpIC9cbiAgICAgICAgICAgICAgKHJ0Y1N0YXRpc3RpY3NbbWVkaWFUeXBlXS50aW1lc3RhbXAgLSB0aGlzLl9ydGNTdGF0aXN0aWMudmFsdWUudmlkZW8udGltZXN0YW1wKSAqXG4gICAgICAgICAgICAxMDAwIHx8IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3J0Y1N0YXRpc3RpYy52YWx1ZSA9IHJ0Y1N0YXRpc3RpY3M7XG4gICAgfSkudGhlbigoKSA9PiB7XG4gICAgICBpZiAodGhpcy5faXNNb25pdG9yUnVubmluZykge1xuICAgICAgICB0aGlzLl91cGRhdGVUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVN0YXRpc3RpYygpLCB1cGRhdGVTdGF0aXN0aWNUaW1lb3V0KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29kZWNCeVR5cGUodHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgIGNhc2UgJ2F1ZGlvJzpcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VzdGltYXRlZEF1ZGlvQ29kZWM7XG4gICAgICBjYXNlICd2aWRlbyc6XG4gICAgICAgIHJldHVybiB0aGlzLl9lc3RpbWF0ZWRWaWRlb0NvZGVjO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICd1bmtub3duJztcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2RwUGFyc2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfc2RwOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2F1ZGlvQ29kZWM6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9Db2RlYzogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc0F1ZGlvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IF9pc1ZpZGVvVHJhY2tFbmFibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHNkcDogc3RyaW5nKSB7XG4gICAgdGhpcy5fc2RwID0gc2RwO1xuXG4gICAgY29uc3Qgc2RwU3BsaXRCeUxpbmVzID0gdGhpcy5fc2RwLnNwbGl0KC8oXFxyXFxufFxccnxcXG4pLyk7XG4gICAgY29uc3Qgc2RwU3BsaXRCeVRyYWNrcyA9IHRoaXMuX3NkcC5zcGxpdCgvKD86XnxbXFxyXFxuXSltPS8pO1xuXG4gICAgdGhpcy5fYXVkaW9Db2RlYyA9IHRoaXMuYXBwbHlDb2RlYygnYXVkaW8nLCBzZHBTcGxpdEJ5TGluZXMpO1xuICAgIHRoaXMuX3ZpZGVvQ29kZWMgPSB0aGlzLmFwcGx5Q29kZWMoJ3ZpZGVvJywgc2RwU3BsaXRCeUxpbmVzKTtcbiAgICB0aGlzLl9pc0F1ZGlvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgnYXVkaW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgICB0aGlzLl9pc1ZpZGVvVHJhY2tFbmFibGVkID0gdGhpcy5pc1RyYWNrQnlUeXBlRW5hYmxlZCgndmlkZW8nLCBzZHBTcGxpdEJ5VHJhY2tzKTtcbiAgfVxuXG4gIGdldCBhdWRpb0NvZGVjKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQ29kZWM7XG4gIH1cblxuICBnZXQgdmlkZW9Db2RlYygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl92aWRlb0NvZGVjO1xuICB9XG5cbiAgZ2V0IGlzQXVkaW9UcmFja0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQXVkaW9UcmFja0VuYWJsZWQ7XG4gIH1cblxuICBnZXQgaXNWaWRlb1RyYWNrRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaWRlb1RyYWNrRW5hYmxlZDtcbiAgfVxuXG4gIHByaXZhdGUgaXNUcmFja0J5VHlwZUVuYWJsZWQodHlwZTogc3RyaW5nLCBzZHBTcGxpdEJ5VHJhY2tzOiBzdHJpbmdbXSk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHNkcFNlY3Rpb25Gb3JUeXBlID0gc2RwU3BsaXRCeVRyYWNrcy5maW5kKHNkcFRyYWNrID0+IHNkcFRyYWNrLnN0YXJ0c1dpdGgodHlwZSkpO1xuXG4gICAgaWYgKCFzZHBTZWN0aW9uRm9yVHlwZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiAhc2RwU2VjdGlvbkZvclR5cGUuaW5jbHVkZXMoYGE9aW5hY3RpdmVgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlDb2RlYyh0eXBlOiBzdHJpbmcsIHNkcFNwbGl0QnlMaW5lczogc3RyaW5nIFtdKTogc3RyaW5nIHtcbiAgICBjb25zdCB1c2VkQ29kZWNMaW5lID0gc2RwU3BsaXRCeUxpbmVzLmZpbmQoc2RwTGluZSA9PiBzZHBMaW5lLmluY2x1ZGVzKGBhPXJ0cG1hcDoke3NkcFNwbGl0QnlMaW5lcy5maW5kKGkgPT4gaS5pbmNsdWRlcyhgbT0ke3R5cGV9YCkpLnNwbGl0KCcgJylbM119YCkpO1xuICAgIGNvbnN0IHVzZWRDb2RlYyA9IHVzZWRDb2RlY0xpbmUuc3BsaXQoJyAnKVsxXTtcbiAgICBjb25zdCBjb2RlY05hbWUgPSB1c2VkQ29kZWMuc3BsaXQoJy8nKVswXTtcblxuICAgIHJldHVybiBjb2RlY05hbWU7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24sIHtQZWVyQ29ubmVjdGlvbkV2ZW50c30gZnJvbSAnLi9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQge0lMZWdhY3lSVENTdGF0c1JlcG9ydH0gZnJvbSAnLi9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5cbmNsYXNzIFZhbmlsbGFQZWVyQ29ubmVjdGlvbiBpbXBsZW1lbnRzIElQZWVyQ29ubmVjdGlvbiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdWYW5pbGxhUGVlckNvbm5lY3Rpb24nKTtcbiAgcHJpdmF0ZSBfcGVlckNvbm5lY3Rpb246IFJUQ1BlZXJDb25uZWN0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LndlYmtpdFJUQ1BlZXJDb25uZWN0aW9uRW5hYmxlZCkge1xuICAgICAgLy8gSWdub3JlZCBhcyBsZWdhY3kgd2Via2l0UlRDUGVlckNvbm5lY3Rpb24gY2xhc3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gVGhpcyB3YXMgYSBDaHJvbWUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25cbiAgICAgIC8vIFJlcXVpcmVzIGEgdHMtaWdub3JlIGRpcmVjdGl2ZSB0byBwcmV2ZW50IHR5cGVzY3JpcHQgZXJyb3JzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10cy1jb21tZW50XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbiA9IG5ldyB3ZWJraXRSVENQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbmV3IFJUQ1BlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgZ2V0IG5hdGl2ZSgpOiBSVENQZWVyQ29ubmVjdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIGdldCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbigpOiBSVENTZXNzaW9uRGVzY3JpcHRpb24gfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uKCk6IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb247XG4gIH1cblxuICBnZXQgY29ubmVjdGlvblN0YXRlKCk6IFJUQ1BlZXJDb25uZWN0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jb25uZWN0aW9uU3RhdGU7XG4gIH1cblxuICBnZXQgaWNlQ29ubmVjdGlvblN0YXRlKCk6IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZTtcbiAgfVxuXG4gIGdldCBzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24oKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uID09PSAnZnVuY3Rpb24nO1xuICB9XG5cbiAgZ2V0IHN1cHBvcnRzU2V0Q29uZmlndXJhdGlvbigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHlwZW9mIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24gPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBnZXQgc3VwcG9ydHNBZGRUcmFuc2NlaXZlcigpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIUZlYXR1cmVFbmFibGVtZW50LmFkZFRyYW5jZWl2ZXJEaXNhYmxlZCAmJiB0eXBlb2YgdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIgPT09ICdmdW5jdGlvbic7XG4gIH1cblxuICBhc3luYyBjcmVhdGVPZmZlcihvcHRpb25zPzogUlRDT2ZmZXJPcHRpb25zKTogUHJvbWlzZTxSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0PiB7XG4gICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkKSB7XG4gICAgICAvLyBJZ25vcmVkIGFzIGxlZ2FjeSBjcmVhdGVPZmZlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVPZmZlcihyZXNvbHZlLCByZWplY3QsIG9wdGlvbnMpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIob3B0aW9ucyk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVBbnN3ZXIob3B0aW9ucz86IFJUQ0Fuc3dlck9wdGlvbnMpOiBQcm9taXNlPFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ+IHtcbiAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQucHJvbWlzZUJhc2VkUENNZXRob2RzRGlzYWJsZWQpIHtcbiAgICAgIC8vIElnbm9yZWQgYXMgbGVnYWN5IGNyZWF0ZUFuc3dlciBtZXRob2Qgd2l0aCBjYWxsYmFja3MgaXMgZGVwcmVjYXRlZFxuICAgICAgLy8gUmVxdWlyZXMgYSB0cy1pZ25vcmUgZGlyZWN0aXZlIHRvIHByZXZlbnQgdHlwZXNjcmlwdCBlcnJvcnNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXRzLWNvbW1lbnRcbiAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5jcmVhdGVBbnN3ZXIocmVzb2x2ZSwgcmVqZWN0LCBvcHRpb25zKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNyZWF0ZUFuc3dlcihvcHRpb25zKTtcbiAgfVxuXG4gIGFzeW5jIHNldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uc2V0TG9jYWxEZXNjcmlwdGlvbihGZWF0dXJlRW5hYmxlbWVudC5wcm9taXNlQmFzZWRQQ01ldGhvZHNEaXNhYmxlZCA/XG4gICAgICBuZXcgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKSA6IGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIHNldFJlbW90ZURlc2NyaXB0aW9uKGRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgaGFzQ3J5cHRvID0gZGVzY3JpcHRpb24uc2RwPy5tYXRjaCgvYT1jcnlwdG86L2kpO1xuXG4gICAgaWYgKGhhc0NyeXB0bykge1xuICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1NEUCBhPWNyeXB0byBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKEZlYXR1cmVFbmFibGVtZW50LnByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkID9cbiAgICAgIG5ldyBSVENTZXNzaW9uRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pIDogZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgZ2V0U2VuZGVycygpOiBSVENSdHBTZW5kZXJbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFNlbmRlcnMoKTtcbiAgfVxuXG4gIGdldFJlY2VpdmVycygpOiBSVENSdHBSZWNlaXZlcltdIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCk7XG4gIH1cblxuICBnZXRTdGF0cyhzZWxlY3Rvcj86IE1lZGlhU3RyZWFtVHJhY2sgfCBudWxsKTogUHJvbWlzZTxSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRTdGF0cyhzZWxlY3Rvcik7XG4gIH1cblxuICBnZXRTdGF0c0xlZ2FjeSgpOiBQcm9taXNlPElMZWdhY3lSVENTdGF0c1JlcG9ydD4ge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIC8vIElnbm9yZWQgZHVlIHRvIHR5cGVzY3JpcHQgbm90IGhhdmluZyBsZWdhY3kgJ2dldFN0YXRzJyBtZXRob2QgdHlwZSBkZWZpbml0aW9uXG4gICAgICAvLyBUaGlzIHdhcyBhIENocm9tZSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgJ2dldFN0YXRzJyBtZXRob2QgZm9yXG4gICAgICAvLyBDaHJvbWVAPD0gNjYgZGV0YWlsZWQgaGVyZTogaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9NjI3ODE2XG4gICAgICAvLyBSZXF1aXJlcyBhIHRzLWlnbm9yZSBkaXJlY3RpdmUgdG8gcHJldmVudCB0eXBlc2NyaXB0IGVycm9yc1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHMtY29tbWVudFxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX3BlZXJDb25uZWN0aW9uLmdldFN0YXRzKHJlc29sdmUpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkRXZlbnRMaXN0ZW5lcih0eXBlOiBQZWVyQ29ubmVjdGlvbkV2ZW50cywgbGlzdGVuZXI6IEV2ZW50TGlzdGVuZXJPckV2ZW50TGlzdGVuZXJPYmplY3QsIG9wdGlvbnM/OiBib29sZWFuIHwgQWRkRXZlbnRMaXN0ZW5lck9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgfVxuXG4gIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTogUGVlckNvbm5lY3Rpb25FdmVudHMsIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LCBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zKTogdm9pZCB7XG4gICAgdGhpcy5fcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcih0eXBlLCBsaXN0ZW5lciwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRUcmFuc2NlaXZlcihuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCk6IFJUQ1J0cFRyYW5zY2VpdmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24uYWRkVHJhbnNjZWl2ZXIobmFtZSwgb3B0aW9ucyk7XG4gIH1cblxuICBhZGRTdHJlYW0obWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogdm9pZCB7XG4gICAgbWVkaWFTdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5hZGRUcmFjayh0cmFjayk7XG4gICAgfSk7XG4gIH1cblxuICBnZXRDb25maWd1cmF0aW9uKCk6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5nZXRDb25maWd1cmF0aW9uKCk7XG4gIH1cblxuICBzZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiB2b2lkIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5zZXRDb25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgc2V0IG9udHJhY2soaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2sgPSBoYW5kbGVyO1xuICB9XG5cbiAgZ2V0IG9udHJhY2soKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1RyYWNrRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9udHJhY2s7XG4gIH1cblxuICBzZXQgb25pY2VjYW5kaWRhdGUoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uaWNlY2FuZGlkYXRlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmljZWNhbmRpZGF0ZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25pY2VjYW5kaWRhdGU7XG4gIH1cblxuICBzZXQgb25jb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQpID0+IHVua25vd24pIHwgbnVsbCkge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLm9uY29ubmVjdGlvbnN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgfVxuXG4gIGdldCBvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSgpOiAoKHRoaXM6IFJUQ1BlZXJDb25uZWN0aW9uLCBldjogUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudCkgPT4gdW5rbm93bikgfCBudWxsIHtcbiAgICByZXR1cm4gdGhpcy5fcGVlckNvbm5lY3Rpb24ub25jb25uZWN0aW9uc3RhdGVjaGFuZ2U7XG4gIH1cblxuICBzZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoaGFuZGxlcjogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwpIHtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZSA9IGhhbmRsZXI7XG4gIH1cblxuICBnZXQgb25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UoKTogKCh0aGlzOiBSVENQZWVyQ29ubmVjdGlvbiwgZXY6IEV2ZW50KSA9PiB1bmtub3duKSB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9wZWVyQ29ubmVjdGlvbi5vbmljZWNvbm5lY3Rpb25zdGF0ZWNoYW5nZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uLmNsb3NlKCk7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uID0gbnVsbDtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb247IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4vSVBlZXJDb25uZWN0aW9uRmFjdG9yeSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4vSVBlZXJDb25uZWN0aW9uJztcbmltcG9ydCBWYW5pbGxhUGVlckNvbm5lY3Rpb24gZnJvbSAnLi9WYW5pbGxhUGVlckNvbm5lY3Rpb24nO1xuXG5jbGFzcyBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5IGltcGxlbWVudHMgSVBlZXJDb25uZWN0aW9uRmFjdG9yeSB7XG4gIGFzeW5jIGNyZWF0ZVBlZXJDb25uZWN0aW9uKGNvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uKTogUHJvbWlzZTxJUGVlckNvbm5lY3Rpb24+IHtcbiAgICByZXR1cm4gbmV3IFZhbmlsbGFQZWVyQ29ubmVjdGlvbihjb25maWd1cmF0aW9uKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWYW5pbGxhUGVlckNvbm5lY3Rpb25GYWN0b3J5OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgU3ViamVjdCBmcm9tICcuL1N1YmplY3QnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkT25seVN1YmplY3Q8VD4ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdWJqZWN0OiBTdWJqZWN0PFQ+O1xuXG4gIGNvbnN0cnVjdG9yKHN1YmplY3Q6IFN1YmplY3Q8VD4pIHtcbiAgICB0aGlzLl9zdWJqZWN0ID0gc3ViamVjdDtcbiAgfVxuXG4gIGdldCB2YWx1ZSgpOiBUIHtcbiAgICByZXR1cm4gdGhpcy5fc3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKGxpc3RlbmVyKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElDb21wYXJhYmxlIGZyb20gJy4uL2xhbmcvSUNvbXBhcmFibGUnO1xuXG5jbGFzcyBEaXNwb3NhYmxlTGlzdGVuZXI8VD4gZXh0ZW5kcyBEaXNwb3NhYmxlIHtcbiAgY29uc3RydWN0b3IobGlzdGVuZXJzOiBBcnJheTxUPiwgbGlzdGVuZXI6IFQpIHtcbiAgICBzdXBlcigoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSBsaXN0ZW5lcnMuaW5kZXhPZihsaXN0ZW5lcik7XG5cbiAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICBsaXN0ZW5lcnMuc3BsaWNlKGlkeCwgMSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3ViamVjdDxUPiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xpc3RlbmVyczogQXJyYXk8KFQpID0+IHZvaWQ+O1xuICBwcml2YXRlIF92YWx1ZTogVDtcblxuICBjb25zdHJ1Y3Rvcih2YWx1ZTogVCkge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtdO1xuICAgIHRoaXMuX3ZhbHVlID0gdmFsdWU7XG4gIH1cblxuICBzZXQgdmFsdWUodmFsdWU6IFQpIHtcbiAgICBsZXQgY2hhbmdlZCA9IHRoaXMuX3ZhbHVlICE9PSB2YWx1ZTtcblxuICAgIGlmIChjaGFuZ2VkICYmIHZhbHVlKSB7XG4gICAgICBjb25zdCBjb21wYXJhYmxlID0gdmFsdWUgYXMgdW5rbm93biBhcyBJQ29tcGFyYWJsZTxUPjtcblxuICAgICAgaWYgKHR5cGVvZiBjb21wYXJhYmxlLmVxdWFscyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjaGFuZ2VkID0gIWNvbXBhcmFibGUuZXF1YWxzKHRoaXMuX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIWNoYW5nZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2gobGlzdGVuZXIgPT4ge1xuICAgICAgbGlzdGVuZXIodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IHZhbHVlKCk6IFQge1xuICAgIHJldHVybiB0aGlzLl92YWx1ZTtcbiAgfVxuXG4gIHN1YnNjcmliZShsaXN0ZW5lcjogKFQpID0+IHZvaWQpOiBJRGlzcG9zYWJsZSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuXG4gICAgbGlzdGVuZXIodGhpcy5fdmFsdWUpO1xuXG4gICAgcmV0dXJuIG5ldyBEaXNwb3NhYmxlTGlzdGVuZXI8KFQpID0+IHZvaWQ+KHRoaXMuX2xpc3RlbmVycywgbGlzdGVuZXIpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBFbnZpcm9ubWVudCB7XG4gIHN0YXRpYyBnZXRFbnZpcm9ubWVudEZyb21VcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBiYXNlVVJMID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh1cmwpO1xuXG4gICAgICByZXR1cm4gYmFzZVVSTC5vcmlnaW47XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBTdHJpbmdzIGZyb20gJy4uL2xhbmcvU3RyaW5ncyc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi9yeC9TdWJqZWN0JztcbmltcG9ydCBSZWFkT25seVN1YmplY3QgZnJvbSAnLi4vcngvUmVhZE9ubHlTdWJqZWN0JztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWwsIExvZ2dpbmdMZXZlbFR5cGV9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IENvbnNvbGVBcHBlbmRlciBmcm9tICcuLi9sb2dnZXIvQ29uc29sZUFwcGVuZGVyJztcbmltcG9ydCBUZWxlbWV0cnlBcHBlbmRlciBmcm9tICcuLi90ZWxlbWV0cnkvVGVsZW1ldHJ5QXBlbmRlcic7XG5pbXBvcnQgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlciBmcm9tICcuLi9kb20vQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcic7XG5pbXBvcnQgTWV0cmljc0NvbmZpZ3VyYXRpb24sIHtUZWxlbWV0cnlMZXZlbCwgVGVsZW1ldHJ5TGV2ZWxUeXBlfSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NDb25maWd1cmF0aW9uJztcbmltcG9ydCBNZXRyaWNzU2VydmljZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlMZXZlbE1hcHBpbmcgZnJvbSAnLi4vbWV0cmljcy9UZWxlbWV0cmljTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBMb2dnaW5nTGV2ZWxNYXBwaW5nIGZyb20gJy4uL2xvZ2dlci9Mb2dnaW5nTGV2ZWxNYXBwaW5nJztcbmltcG9ydCBCdWlsZEZlYXR1cmVzIGZyb20gJy4uL2Vudmlyb25tZW50L0J1aWxkRmVhdHVyZXMnO1xuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi9kb20vQnJvd3NlckRldGVjdG9yJztcbmltcG9ydCB7SUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXJ9IGZyb20gJy4uL2RvbS9JQ29uZmlndXJhdGlvblBhcmFtYXRlclJlYWRlcic7XG5pbXBvcnQgQXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IgZnJvbSAnLi4vZG9tL0FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb25GYWN0b3J5IGZyb20gJy4uL3J0Yy9JUGVlckNvbm5lY3Rpb25GYWN0b3J5JztcbmltcG9ydCBQZWVyQ29ubmVjdGlvblNlcnZpY2UgZnJvbSAnLi4vcnRjL1BlZXJDb25uZWN0aW9uU2VydmljZSc7XG5pbXBvcnQgVGVsZW1ldHJ5VXJsIGZyb20gJy4vVGVsZW1ldHJ5VXJsJztcbmltcG9ydCBFbnZpcm9ubWVudCBmcm9tICcuL0Vudmlyb25tZW50JztcbmltcG9ydCB7SGxzUGxheWVyVHlwZSwgU2hha2FUeXBlLCBXZWJQbGF5ZXJUeXBlfSBmcm9tICcuL3N0cmVhbWluZy9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgVGVsZW1ldHJ5RGVmYXVsdCBmcm9tICcuLi9tZXRyaWNzL1RlbGVtZXRyeURlZmF1bHQnO1xuXG5jb25zdCBwYWdlTG9hZFRpbWUgPSB3aW5kb3dbJ19fcGhlbml4UGFnZUxvYWRUaW1lJ10gfHwgd2luZG93WydfX3BhZ2VMb2FkVGltZSddIHx8IERhdGUubm93KCk7XG5cbmludGVyZmFjZSBJSW5pdE9wdGlvbnMge1xuICBkaXNjb3ZlcnlVcmk/OiBzdHJpbmc7XG4gIHBlZXJDb25uZWN0aW9uRmFjdG9yeT86IElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIHRlbGVtZXRyeUxldmVsPzogVGVsZW1ldHJ5TGV2ZWxUeXBlO1xuICBsb2dnaW5nTGV2ZWw/OiBMb2dnaW5nTGV2ZWxUeXBlO1xuICBjb25zb2xlTG9nZ2luZ0xldmVsPzogTG9nZ2luZ0xldmVsVHlwZTtcbiAgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbT86IGJvb2xlYW47XG4gIGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlPzogYm9vbGVhbjtcbiAgd2ViUGxheWVyTG9hZGVyPzogKHBsYXllcjogV2ViUGxheWVyVHlwZSkgPT4gdm9pZDtcbiAgc2hha2FQbGF5ZXJMb2FkZXI/OiAocGxheWVyOiBTaGFrYVR5cGUpID0+IHZvaWQ7XG4gIGhsc0pzTG9hZGVyPzogKHBsYXllcjogSGxzUGxheWVyVHlwZSkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24gPSB0cnVlO1xuICBwcml2YXRlIHN0YXRpYyBfYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF9mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ID0gdHJ1ZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcyA9IHRydWU7XG4gIHByaXZhdGUgc3RhdGljIF93ZWJQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfc2hha2FQbGF5ZXJMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfaGxzSnNMb2FkZXIgPSBudWxsO1xuICBwcml2YXRlIHN0YXRpYyBfY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcjogSUNvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIgPSBuZXcgQ29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlcigpO1xuICBwcml2YXRlIHN0YXRpYyBfYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHN0YXRpYyBfZW52aXJvbm1lbnQ6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oJycpO1xuICBwcml2YXRlIHN0YXRpYyBfdGVsZW1ldHJ5VXJsOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCdodHRwczovL3RlbGVtZXRyeS5waGVuaXhydHMuY29tL3RlbGVtZXRyeScpO1xuICBwcml2YXRlIHN0YXRpYyBfbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDg7XG4gIHByaXZhdGUgc3RhdGljIF90ZWxlbWV0cnlMZXZlbDogU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4gPSBuZXcgU3ViamVjdDxUZWxlbWV0cnlMZXZlbD4oVGVsZW1ldHJ5RGVmYXVsdC5kZWZhdWx0VGVsZW1ldHJ5TGV2ZWwpO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHN0YXRpYyBfbWV0cmljc0NvbmZpZ3VyYXRpb246IE1ldHJpY3NDb25maWd1cmF0aW9uO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2VuZExvY2FsQ2FuZGlkYXRlczogU3ViamVjdDxib29sZWFuPiA9IG5ldyBTdWJqZWN0KEJ1aWxkRmVhdHVyZXMuc2VuZExvY2FsQ2FuZGlkYXRlcyk7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF90ZW5hbmN5OiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCcnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2NsaWVudFNlc3Npb25JZDogc3RyaW5nID0gU3RyaW5ncy5yYW5kb20oMzIpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfbG9hZGVkVGltZXN0YW1wOiBEYXRlID0gbmV3IERhdGUoKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdTREsnKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX2luaXRpYWxpemVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfcmVhZE9ubHlJbml0aWFsaXplZDogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPihTREsuX2luaXRpYWxpemVkKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5RGlzY292ZXJ5VXJpOiBSZWFkT25seVN1YmplY3Q8c3RyaW5nPiA9IG5ldyBSZWFkT25seVN1YmplY3Q8c3RyaW5nPihEaXNjb3ZlcnlVcmkudXJpKTtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb25GYWN0b3J5OiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uRmFjdG9yeT4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElQZWVyQ29ubmVjdGlvbkZhY3Rvcnk+KFBlZXJDb25uZWN0aW9uU2VydmljZS5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpO1xuXG4gIHN0YXRpYyBnZXQgcGFnZUxvYWRUaW1lKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2VuZExvY2FsQ2FuZGlkYXRlcygpOiBTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZExvY2FsQ2FuZGlkYXRlcztcbiAgfVxuXG4gIHN0YXRpYyBnZXQgdGVuYW5jeSgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZW5hbmN5O1xuICB9XG5cbiAgc3RhdGljIGdldCBjbGllbnRTZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gU0RLLl9jbGllbnRTZXNzaW9uSWQ7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGxvYWRlZFRpbWVzdGFtcCgpOiBEYXRlIHtcbiAgICByZXR1cm4gU0RLLl9sb2FkZWRUaW1lc3RhbXA7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGluaXRpYWxpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlJbml0aWFsaXplZDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZGlzY292ZXJ5VXJpKCk6IFJlYWRPbmx5U3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gU0RLLl9yZWFkT25seURpc2NvdmVyeVVyaTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGVlckNvbm5lY3Rpb25GYWN0b3J5KCk6IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb25GYWN0b3J5PiB7XG4gICAgcmV0dXJuIFNESy5fcmVhZE9ubHlQZWVyQ29ubmVjdGlvbkZhY3Rvcnk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGF1dG9tYXRpY1JldHJ5T25GYWlsdXJlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBTREsuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICB9XG5cbiAgc3RhdGljIGdldCBhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gU0RLLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXM7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHdlYlBsYXllckxvYWRlcigpOiAoV2ViUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3dlYlBsYXllckxvYWRlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hha2FQbGF5ZXJMb2FkZXIoKTogKFNoYWthVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthUGxheWVyTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBobHNKc0xvYWRlcigpOiAoSGxzUGxheWVyVHlwZSkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc0pzTG9hZGVyO1xuICB9XG5cbiAgc3RhdGljIGdldCBtZXRyaWNzU2VydmljZSgpOiBNZXRyaWNzU2VydmljZSB7XG4gICAgcmV0dXJuIFNESy5fbWV0cmljc1NlcnZpY2U7XG4gIH1cblxuICBzdGF0aWMgZ2V0IGFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yKCk6IEFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIHtcbiAgICByZXR1cm4gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3I7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeVVybCgpOiBTdWJqZWN0PHN0cmluZz4ge1xuICAgIHJldHVybiB0aGlzLl90ZWxlbWV0cnlVcmw7XG4gIH1cblxuICBzdGF0aWMgZ2V0IG1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cztcbiAgfVxuXG4gIHN0YXRpYyBzZXQgbWF4aW1hbE51bWJlck9mUGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyhyZXRyaWVzQW1vdW50OiBudW1iZXIpIHtcbiAgICB0aGlzLl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gcmV0cmllc0Ftb3VudDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgbG9nZ2luZ0xldmVsKCk6IExvZ2dpbmdMZXZlbFR5cGUge1xuICAgIHJldHVybiBMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUb0xvZ2dpbmdMZXZlbFR5cGUodGhpcy5fbG9nZ2VyLnRocmVzaG9sZC52YWx1ZSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHRlbGVtZXRyeUxldmVsKCk6IFRlbGVtZXRyeUxldmVsVHlwZSB7XG4gICAgcmV0dXJuIFRlbGVtZXRyeUxldmVsTWFwcGluZy5jb252ZXJ0VGVsZW1ldHJ5TGV2ZWxUb1RlbGVtZXRyeUxldmVsVHlwZShTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlKTtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgYnJvd3NlckRldGVjdG9yKCk6IEJyb3dzZXJEZXRlY3RvciB7XG4gICAgcmV0dXJuIEJyb3dzZXJEZXRlY3RvcjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseVRlbGVtZXRyeUNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgY29uc3QgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbiA9IExvZ2dlckZhY3RvcnkudGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICAgIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24uc2Vzc2lvbklkID0gU0RLLmNsaWVudFNlc3Npb25JZDtcbiAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSA9IFNESy5wYWdlTG9hZFRpbWU7XG5cbiAgICBjb25zdCBpZ25vcmVkRW52aXJvbm1lbnQgPSBTREsuX2Vudmlyb25tZW50LnN1YnNjcmliZShlbnZpcm9ubWVudCA9PiB7XG4gICAgICB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnQ7XG4gICAgfSk7XG4gICAgY29uc3QgaWdub3JlZERpc2NvdmVyeVVyaSA9IFNESy50ZWxlbWV0cnlVcmwuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIGNvbnN0IHRlbGVtZXRyeUFwcGVuZGVyID0gdGhpcy5fbG9nZ2VyLmFwcGVuZGVycy52YWx1ZS5maW5kKGFwcGVuZGVyID0+IGFwcGVuZGVyIGluc3RhbmNlb2YgVGVsZW1ldHJ5QXBwZW5kZXIpO1xuXG4gICAgICBpZiAodGVsZW1ldHJ5QXBwZW5kZXIpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi51cmwgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgVVJMIHdhcyBzZXQgdG8gWyVzXScsIHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24udXJsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBpZ25vcmVkVGVuYW5jeSA9IFNESy5fdGVuYW5jeS5zdWJzY3JpYmUodGVuYW5jeSA9PiB7XG4gICAgICBjb25zdCB0ZWxlbWV0cnlBcHBlbmRlciA9IHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMudmFsdWUuZmluZChhcHBlbmRlciA9PiBhcHBlbmRlciBpbnN0YW5jZW9mIFRlbGVtZXRyeUFwcGVuZGVyKTtcblxuICAgICAgaWYgKHRlbGVtZXRyeUFwcGVuZGVyICYmIHRlbmFuY3kpIHtcbiAgICAgICAgdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50ZW5hbmN5ID0gdGVuYW5jeTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZSh0ZWxlbWV0cnlBcHBlbmRlcik7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5hcHBlbmRlcnMuYWRkKG5ldyBUZWxlbWV0cnlBcHBlbmRlcih0ZWxlbWV0cnlDb25maWd1cmF0aW9uKSk7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdUZWxlbWV0cnkgdGVuYW5jeSB3YXMgc2V0IHRvIFslc10nLCB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3kpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgU0RLLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKERpc2NvdmVyeVVyaS51cmkudmFsdWUpO1xuICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24gPSBTREsuX21ldHJpY3NTZXJ2aWNlLm1ldHJpY3NDb25maWd1cmF0aW9uO1xuXG4gICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuXG4gICAgY29uc3QgaWdub3JlZEVudmlyb25tZW50ID0gU0RLLl9lbnZpcm9ubWVudC5zdWJzY3JpYmUoZW52aXJvbm1lbnQgPT4ge1xuICAgICAgU0RLLl9tZXRyaWNzQ29uZmlndXJhdGlvbi5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50O1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWREaXNjb3ZlcnlVcmkgPSBTREsudGVsZW1ldHJ5VXJsLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsuX21ldHJpY3NDb25maWd1cmF0aW9uLnVybCA9IHZhbHVlO1xuICAgIH0pO1xuICAgIGNvbnN0IGlnbm9yZWRUZW5hbmN5ID0gU0RLLl90ZW5hbmN5LnN1YnNjcmliZSh0ZW5hbmN5ID0+IHtcbiAgICAgIFNESy5fbWV0cmljc0NvbmZpZ3VyYXRpb24udGVuYW5jeSA9IHRlbmFuY3k7XG4gICAgfSk7XG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldFN0cmluZ1ZhbHVlKCdwaGVuaXgtbWV0cmljcy1sZXZlbCcpO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBNZXRyaWNzRmFjdG9yeS5zZXRUZWxlbWV0cnlMZXZlbChUZWxlbWV0cnlMZXZlbFt2YWx1ZV0pO1xuICAgIH1cblxuICAgIGNvbnN0IGlnbm9yZWRUZWxlbWV0cnlMZXZlbCA9IFNESy5fdGVsZW1ldHJ5TGV2ZWwuc3Vic2NyaWJlKHRlbGVtZXRyeUxldmVsID0+IHtcbiAgICAgIE1ldHJpY3NGYWN0b3J5LnNldFRlbGVtZXRyeUxldmVsKHRlbGVtZXRyeUxldmVsKTtcbiAgICB9KTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuX2F1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZSA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtYXV0b21hdGljYWxseS1yZXRyeS1vbi1mYWlsdXJlJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0F1dG9tYXRpY2FsbHkgcmV0cnkgb24gZmFpbHVyZSBpcyBzZXQgdG86IFslc10nLCB0aGlzLl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUpO1xuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGljIGFwcGx5QXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRCb29sZWFuVmFsdWUoJ3BoZW5peC1hdXRvbWF0aWNhbGx5LXJlY29ubmVjdC1wZWVyLWNvbm5lY3Rpb24nKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnQXV0b21hdGljYWxseSByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGlzIHNldCB0bzogWyVzXScsIHRoaXMuX2F1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbik7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTogdm9pZCB7XG4gICAgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0Qm9vbGVhblZhbHVlKCdwaGVuaXgtZm9yY2UtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLXJlc3RhcnQnKTtcbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRm9yY2UgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCk7XG5cbiAgICByZXR1cm47XG4gIH1cblxuICBzdGF0aWMgYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICB0aGlzLl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMgPSB0aGlzLl9jb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyLmdldEJvb2xlYW5WYWx1ZSgncGhlbml4LXNraXAtZ2FyYmFnZS1jb2xsZWN0aW9uLW9uLW1vYmlsZS1kZXZpY2VzJyk7XG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1NraXAgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG1vYmlsZSBkZXZpY2VzIG9uIHJlc3RhcnQgaXMgc2V0IHRvOiBbJXNdJywgdGhpcy5fc2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzKTtcblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseURpc2NvdmVyeVVyaURlZmF1bHRGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbigpOiB2b2lkIHtcbiAgICBTREsuZGlzY292ZXJ5VXJpLnN1YnNjcmliZSh2YWx1ZSA9PiB7XG4gICAgICBTREsudGVsZW1ldHJ5VXJsLnZhbHVlID0gU0RLLmdldFRlbGVtZXRyeVVybCh2YWx1ZSk7XG4gICAgICBTREsuX2Vudmlyb25tZW50LnZhbHVlID0gRW52aXJvbm1lbnQuZ2V0RW52aXJvbm1lbnRGcm9tVXJsKHZhbHVlKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGNoYW5uZWxUb2tlbiA9IHRoaXMuX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIuZ2V0U3RyaW5nVmFsdWUoJ3BoZW5peC1jaGFubmVsLXRva2VuJyk7XG5cbiAgICBpZiAoY2hhbm5lbFRva2VuKSB7XG4gICAgICBjb25zdCBlZGdlVG9rZW4gPSBFZGdlQXV0aFBhcnNlci5wYXJzZVRva2VuKGNoYW5uZWxUb2tlbik7XG5cbiAgICAgIFNESy5fdGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5O1xuICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHVyaVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LXVyaScpO1xuXG4gICAgaWYgKHVyaVZhbHVlKSB7XG4gICAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gdXJpVmFsdWU7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJ5IFVSSSBzZXQgZnJvbSBcInBoZW5peC11cmlcIiBjb25maWd1cmF0aW9uIHBhcmFtZXRlciB0YWcgdG8gWyVzXScsIFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgYmFzZVVSSVZhbHVlID0gdGhpcy5fY29uZmlndXJhdGlvblBhcmFtZXRlclJlYWRlci5nZXRTdHJpbmdWYWx1ZSgncGhlbml4LWJhc2UtdXJpJyk7XG5cbiAgICBpZiAoYmFzZVVSSVZhbHVlKSB7XG4gICAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKGJhc2VVUklWYWx1ZSk7XG5cbiAgICAgIHVyaS5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSB1cmkudG9TdHJpbmcoKTtcbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdEaXNjb3ZlcnkgVVJJIHNldCBmcm9tIFwicGhlbml4LWJhc2UtdXJpXCIgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXIgdGFnIHRvIFslc10nLCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBpbml0KG9wdGlvbnM/OiBJSW5pdE9wdGlvbnMpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2luaXRpYWxpemVkLnZhbHVlKSB7XG4gICAgICB0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciA9IG5ldyBBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvcigpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5kaXNjb3ZlcnlVcmkpIHtcbiAgICAgICAgRGlzY292ZXJ5VXJpLnVyaS52YWx1ZSA9IG9wdGlvbnMuZGlzY292ZXJ5VXJpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkpIHtcbiAgICAgICAgUGVlckNvbm5lY3Rpb25TZXJ2aWNlLnBlZXJDb25uZWN0aW9uRmFjdG9yeS52YWx1ZSA9IG9wdGlvbnMucGVlckNvbm5lY3Rpb25GYWN0b3J5O1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy50ZWxlbWV0cnlMZXZlbCAmJiBUZWxlbWV0cnlMZXZlbFtvcHRpb25zLnRlbGVtZXRyeUxldmVsXSkge1xuICAgICAgICBTREsuX3RlbGVtZXRyeUxldmVsLnZhbHVlID0gVGVsZW1ldHJ5TGV2ZWxNYXBwaW5nLmNvbnZlcnRUZWxlbWV0cnlMZXZlbFR5cGVUb1RlbGVtZXRyeUxldmVsKG9wdGlvbnMudGVsZW1ldHJ5TGV2ZWwpO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5sb2dnaW5nTGV2ZWwgJiYgTG9nZ2luZ0xldmVsW29wdGlvbnMubG9nZ2luZ0xldmVsXSkge1xuICAgICAgICB0aGlzLl9sb2dnZXIudGhyZXNob2xkLnNldFRocmVzaG9sZChMb2dnaW5nTGV2ZWxNYXBwaW5nLmNvbnZlcnRMb2dnaW5nTGV2ZWxUeXBlVG9Mb2dnaW5nTGV2ZWwob3B0aW9ucy5sb2dnaW5nTGV2ZWwpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAmJiBMb2dnaW5nTGV2ZWxbb3B0aW9ucy5jb25zb2xlTG9nZ2luZ0xldmVsXSkge1xuICAgICAgICBjb25zdCBjb25zb2xlQXBwZW5kZXIgPSB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnZhbHVlLmZpbmQoYXBwZW5kZXIgPT4gYXBwZW5kZXIgaW5zdGFuY2VvZiBDb25zb2xlQXBwZW5kZXIpO1xuXG4gICAgICAgIGlmIChjb25zb2xlQXBwZW5kZXIpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLnJlbW92ZShjb25zb2xlQXBwZW5kZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG9wdGlvbnMuY29uc29sZUxvZ2dpbmdMZXZlbCAhPT0gJ09mZicpIHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuYXBwZW5kZXJzLmFkZChuZXcgQ29uc29sZUFwcGVuZGVyKExvZ2dpbmdMZXZlbE1hcHBpbmcuY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbChvcHRpb25zLmNvbnNvbGVMb2dnaW5nTGV2ZWwpKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvcHRpb25zLmF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0gPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtID0gb3B0aW9ucy5hdXRvbWF0aWNhbGx5UGxheU1lZGlhU3RyZWFtO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUgPT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLl9hdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSA9IG9wdGlvbnMuYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmU7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLndlYlBsYXllckxvYWRlcikge1xuICAgICAgICB0aGlzLl93ZWJQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLndlYlBsYXllckxvYWRlcjtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fc2hha2FQbGF5ZXJMb2FkZXIgPSBvcHRpb25zLnNoYWthUGxheWVyTG9hZGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9obHNKc0xvYWRlciA9IG9wdGlvbnMuaGxzSnNMb2FkZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgU0RLLl9pbml0aWFsaXplZC52YWx1ZSA9IHRydWU7XG4gIH1cblxuICBzdGF0aWMgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBTREsuX2luaXRpYWxpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZGlzcG9zZSgpO1xuICAgIHRoaXMuX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gbnVsbDtcbiAgfVxuXG4gIHN0YXRpYyBnZXRUZWxlbWV0cnlVcmwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBUZWxlbWV0cnlVcmwuZ2V0VGVsZW1ldHJ5VXJsKHVybCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufVxuXG5HbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCd1bmxvYWQnLCAoKSA9PiB7XG4gIFNESy5kaXNwb3NlKCk7XG59KTtcblxuU0RLLmFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlNZXRyaWNzQ29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbigpO1xuU0RLLmFwcGx5QXV0b21hdGljYWxseVJldHJ5T25GYWlsdXJlRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseUF1dG9tYXRpY2FsbHlSZWNvbm5lY3RQZWVyQ29ubmVjdGlvbkZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuYXBwbHlGb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0RnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24oKTtcblNESy5hcHBseVNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlc0Zyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKCk7XG5TREsuaW5pdCgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGVsZW1ldHJ5VXJsIHtcbiAgc3RhdGljIGdldFRlbGVtZXRyeVVybCh1cmw6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGJhc2VVUkwgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHVybCk7XG4gICAgICBjb25zdCBzZWdtZW50cyA9IGJhc2VVUkwuaG9zdG5hbWUuc3BsaXQoJy4nKTtcblxuICAgICAgc3dpdGNoIChiYXNlVVJMLnByb3RvY29sKSB7XG4gICAgICAgIGNhc2UgJ3dzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwOic7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnd3NzOic6XG4gICAgICAgICAgYmFzZVVSTC5wcm90b2NvbCA9ICdodHRwczonO1xuXG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKHNlZ21lbnRzLmxlbmd0aCA9PT0gMiB8fFxuICAgICAgICAgIChzZWdtZW50cy5sZW5ndGggPT09IDMgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMl0ubGVuZ3RoIDw9IDIgJiYgc2VnbWVudHNbc2VnbWVudHMubGVuZ3RoIC0gMV0ubGVuZ3RoIDw9IDMpXG4gICAgICApIHtcbiAgICAgICAgc2VnbWVudHMudW5zaGlmdCgndGVsZW1ldHJ5Jyk7XG4gICAgICB9IGVsc2UgaWYgKHNlZ21lbnRzWzBdLnN0YXJ0c1dpdGgoJ3N0Zy0nKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLXN0ZycpIHx8IHNlZ21lbnRzWzBdLmluY2x1ZGVzKCctc3RnLScpIHx8IHNlZ21lbnRzWzBdID09PSAnc3RnJykge1xuICAgICAgICBzZWdtZW50c1swXSA9ICd0ZWxlbWV0cnktc3RnJztcbiAgICAgIH0gZWxzZSBpZiAoc2VnbWVudHNbMF0uc3RhcnRzV2l0aCgnbG9jYWwnKSB8fCBzZWdtZW50c1swXS5lbmRzV2l0aCgnLWxvY2FsJykpIHtcbiAgICAgICAgLy8gTGVhdmUgVVJMIHVuY2hhbmdlZFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VnbWVudHNbMF0gPSAndGVsZW1ldHJ5JztcbiAgICAgIH1cblxuICAgICAgYmFzZVVSTC5ob3N0bmFtZSA9IHNlZ21lbnRzLmpvaW4oJy4nKTtcblxuICAgICAgcmV0dXJuIGAke2Jhc2VVUkwub3JpZ2lufS90ZWxlbWV0cnlgO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiB1cmw7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmV4cG9ydCB0eXBlIEJpdHJhdGVTdGF0ZVR5cGUgPSAnS2VlcCcgfCAnUmVzZXQnO1xuZXhwb3J0IHR5cGUgQml0cmF0ZU1vZGVUeXBlID0gJ05vcm1hbCcgfCAnRm9yY2UnIHwgJ1Jlc2V0JztcblxuZXhwb3J0IGVudW0gQml0cmF0ZVN0YXRlIHtcbiAgS2VlcCxcbiAgUmVzZXRcbn1cblxuZXhwb3J0IGVudW0gQml0cmF0ZU1vZGUge1xuICBOb3JtYWwsXG4gIEZvcmNlLFxuICBSZXNldFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZSB7XG4gIGFwaVZlcnNpb246IG51bWJlcjtcbiAgc2hhcmVkU2VjcmV0OiBzdHJpbmc7XG4gIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyO1xuICBiaXRyYXRlSW5CaXRzUGVyU2Vjb25kOiBudW1iZXI7XG4gIGJpdHJhdGVTdGF0ZTogQml0cmF0ZVN0YXRlVHlwZTtcbiAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlVHlwZTtcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgUmVhZE9ubHlTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1JlYWRPbmx5U3ViamVjdCc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRXhwb25lbnRpYWxCYWNrb2ZmIGZyb20gJy4uLy4uL3RpbWUvRXhwb25lbnRpYWxCYWNrb2ZmJztcbmltcG9ydCBFbmRQb2ludCwge0lTdHJlYW19IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5pbXBvcnQgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIgZnJvbSAnLi4vLi4vZG9tL0dhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyJztcbmltcG9ydCBJUGVlckNvbm5lY3Rpb24gZnJvbSAnLi4vLi4vcnRjL0lQZWVyQ29ubmVjdGlvbic7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4vQ2hhbm5lbFN0YXRlJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IFZpZGVvVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1ZpZGVvVGVsZW1ldHJ5JztcbmltcG9ydCBTZXNzaW9uVGVsZW1ldHJ5IGZyb20gJy4uLy4uL3ZpZGVvL1Nlc3Npb25UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZX0gZnJvbSAnLi4vYXBpL1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQge0VuY29kZWRFZGdlVG9rZW59IGZyb20gJy4uLy4uL2VkZ2VBdXRoL0VuY29kZWRFZGdlVG9rZW4nO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IFRva2VuQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1Rva2VuQ29udGV4dCc7XG5pbXBvcnQgQ2hhbm5lbENvbnRleHQsIHtDaGFubmVsQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvQ2hhbm5lbENvbnRleHQnO1xuaW1wb3J0IEVuY29kZWRTdHJlYW1TaW5rLCB7SUVuY29kZWRTdHJlYW1TaW5rfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9FbmNvZGVkU3RyZWFtU2luayc7XG5pbXBvcnQgU3RyZWFtVHJhY2tUcmFuc2Zvcm0sIHtJU3RyZWFtVHJhY2tUcmFuc2Zvcm19IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL1N0cmVhbVRyYWNrVHJhbnNmb3JtJztcbmltcG9ydCBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0LCB7U3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnN9IGZyb20gJy4uL2NvbnRleHQvU3RyZWFtVHJhbnNmb3JtQ29udGV4dCc7XG5pbXBvcnQgUGVlckNvbm5lY3Rpb25Db250ZXh0IGZyb20gJy4uL2NvbnRleHQvUGVlckNvbm5lY3Rpb25Db250ZXh0JztcbmltcG9ydCBTdGF0ZUNvbnRleHQgZnJvbSAnLi4vY29udGV4dC9TdGF0ZUNvbnRleHQnO1xuaW1wb3J0IFN0cmVhbUZhY3RvcnkgZnJvbSAnLi4vc3RyZWFtaW5nL1N0cmVhbUZhY3RvcnknO1xuaW1wb3J0IERpc2NvdmVyeSBmcm9tICcuLi9kaXNjb3ZlcnkvRGlzY292ZXJ5JztcbmltcG9ydCBEaXNjb3ZlcnlVcmkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeVVyaSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuXG5jb25zdCBkZWZhdWx0U3RyZWFtVGVybWluYXRpb25SZWFzb24gPSAnY2xpZW50OnRlcm1pbmF0aW9uJztcbmNvbnN0IGZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzID0gMzAwMDtcbmNvbnN0IHN0YW5kYnlQb2xsaW5nSW50ZXJ2YWxJbk1pbGxpc2Vjb25kcyA9IDE1MDAwO1xuXG5leHBvcnQgdHlwZSBDaGFubmVsT3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogTWlsbGlzZWNvbmQ7XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT47XG4gIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s/OiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPjtcbiAgZW5jb2RlZFZpZGVvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT47XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms/OiBJRW5jb2RlZFN0cmVhbVNpbms8UlRDRW5jb2RlZEF1ZGlvRnJhbWU+O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbCBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0NoYW5uZWwnKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdG9rZW5Db250ZXh0OiBUb2tlbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxDb250ZXh0OiBDaGFubmVsQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGVlckNvbm5lY3Rpb25Db250ZXh0OiBQZWVyQ29ubmVjdGlvbkNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQ6IFN0cmVhbVRyYW5zZm9ybUNvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0YXRlQ29udGV4dDogU3RhdGVDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9leHBvbmVudGlhbEJhY2tvZmY6IEV4cG9uZW50aWFsQmFja29mZjtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbFN0YXJ0VGltZTogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVZpZGVvRWxlbWVudDogUmVhZE9ubHlTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVRva2VuOiBSZWFkT25seVN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGVlckNvbm5lY3Rpb246IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YXRlOiBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvTXV0ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlBdXRvUGF1c2VkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VG9rZW5FeHBpcmluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUF1dGhvcml6ZWQ6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlPbmxpbmU6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlMb2FkaW5nOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5UGxheWluZzogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0YW5kYnk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlTdG9wcGVkOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5VGFyZ2V0TGFnOiBSZWFkT25seVN1YmplY3Q8TWlsbGlzZWNvbmQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUxhZzogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlCaXRyYXRlTGltaXQ6IFJlYWRPbmx5U3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlSZXNvbHV0aW9uOiBSZWFkT25seVN1YmplY3Q8RGltZW5zaW9uPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfcmVhZE9ubHlGYWlsdXJlQ291bnQ6IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seUVuZFBvaW50OiBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVN0cmVhbTogUmVhZE9ubHlTdWJqZWN0PElTdHJlYW0+O1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZWFkT25seVJ0Y1N0YXRpc3RpY3M6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz47XG4gIHByaXZhdGUgcmVhZG9ubHkgX3JlYWRPbmx5TWVkaWFTdHJlYW06IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT47XG5cbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uVGVsZW1ldHJ5OiBTZXNzaW9uVGVsZW1ldHJ5O1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXI6ICgpID0+IHZvaWQ7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCB0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgb3B0aW9ucz86IENoYW5uZWxPcHRpb25zKSB7XG4gICAgY29uc3QgZWRnZVRva2VuID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbik7XG4gICAgY29uc3QgY2hhbm5lbENvbnRleHRPcHRpb25zOiBDaGFubmVsQ29udGV4dE9wdGlvbnMgPSB7dGFyZ2V0TGFnOiBvcHRpb25zPy50YXJnZXRMYWd9O1xuICAgIGNvbnN0IHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucyA9IHtcbiAgICAgIGhhc0luc2VydGFibGVTdHJlYW1zOiBlZGdlVG9rZW4uY2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdpbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKSxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnM/LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2ssXG4gICAgICBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBvcHRpb25zPy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrLFxuICAgICAgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogb3B0aW9ucz8uZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnM/LmVuY29kZWRBdWRpb1N0cmVhbVNpbmtcbiAgICB9O1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0ID0gbmV3IFRva2VuQ29udGV4dCh0b2tlbik7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQgPSBuZXcgQ2hhbm5lbENvbnRleHQoY2hhbm5lbENvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQgPSBuZXcgUGVlckNvbm5lY3Rpb25Db250ZXh0KCk7XG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dCA9IG5ldyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0KHN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zKTtcbiAgICB0aGlzLl9zdGF0ZUNvbnRleHQgPSBuZXcgU3RhdGVDb250ZXh0KCk7XG4gICAgdGhpcy5fZXhwb25lbnRpYWxCYWNrb2ZmID0gbmV3IEV4cG9uZW50aWFsQmFja29mZigpO1xuICAgIHRoaXMuX2NoYW5uZWxTdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHRoaXMuX3JlYWRPbmx5VmlkZW9FbGVtZW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxIVE1MVmlkZW9FbGVtZW50Pih0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQpO1xuICAgIHRoaXMuX3JlYWRPbmx5VG9rZW4gPSBuZXcgUmVhZE9ubHlTdWJqZWN0PHN0cmluZz4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuKTtcbiAgICB0aGlzLl9yZWFkT25seVBlZXJDb25uZWN0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbik7XG4gICAgdGhpcy5fcmVhZE9ubHlTdGF0ZSA9IG5ldyBSZWFkT25seVN1YmplY3Q8Q2hhbm5lbFN0YXRlPih0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZSk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvTXV0ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlBdXRvUGF1c2VkID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkKTtcbiAgICB0aGlzLl9yZWFkT25seVRva2VuRXhwaXJpbmcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbkV4cGlyaW5nKTtcbiAgICB0aGlzLl9yZWFkT25seUF1dGhvcml6ZWQgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQpO1xuICAgIHRoaXMuX3JlYWRPbmx5T25saW5lID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUpO1xuICAgIHRoaXMuX3JlYWRPbmx5TG9hZGluZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZyk7XG4gICAgdGhpcy5fcmVhZE9ubHlQbGF5aW5nID0gbmV3IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPih0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nKTtcbiAgICB0aGlzLl9yZWFkT25seVN0YW5kYnkgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YW5kYnkpO1xuICAgIHRoaXMuX3JlYWRPbmx5U3RvcHBlZCA9IG5ldyBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZCk7XG4gICAgdGhpcy5fcmVhZE9ubHlUYXJnZXRMYWcgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PG51bWJlcj4odGhpcy5fY2hhbm5lbENvbnRleHQudGFyZ2V0TGFnKTtcbiAgICB0aGlzLl9yZWFkT25seUxhZyA9IG5ldyBSZWFkT25seVN1YmplY3Q8bnVtYmVyPih0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcpO1xuICAgIHRoaXMuX3JlYWRPbmx5Qml0cmF0ZUxpbWl0ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdCk7XG4gICAgdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uID0gbmV3IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+KHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24pO1xuICAgIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50ID0gbmV3IFJlYWRPbmx5U3ViamVjdDxudW1iZXI+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudCk7XG4gICAgdGhpcy5fcmVhZE9ubHlFbmRQb2ludCA9IG5ldyBSZWFkT25seVN1YmplY3Q8RW5kUG9pbnQ+KHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50KTtcbiAgICB0aGlzLl9yZWFkT25seVN0cmVhbSA9IG5ldyBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtKTtcbiAgICB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3MgPSBuZXcgUmVhZE9ubHlTdWJqZWN0PElSdGNNb25pdG9yU3RhdGlzdGljPih0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNTdGF0aXN0aWNzKTtcbiAgICB0aGlzLl9yZWFkT25seU1lZGlhU3RyZWFtID0gbmV3IFJlYWRPbmx5U3ViamVjdDxNZWRpYVN0cmVhbT4odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtKTtcblxuICAgIGNvbnN0IGRpc2NvdmVyeVVyaSA9IChlZGdlVG9rZW4udXJpIHx8IFNESy5kaXNjb3ZlcnlVcmkudmFsdWUpLnRvU3RyaW5nKCk7XG5cbiAgICBTREsudGVuYW5jeS52YWx1ZSA9IGVkZ2VUb2tlbi50ZW5hbmN5IHx8IFNESy50ZW5hbmN5LnZhbHVlO1xuICAgIERpc2NvdmVyeVVyaS51cmkudmFsdWUgPSBkaXNjb3ZlcnlVcmk7XG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuICAgIHRoaXMuX3Nlc3Npb25UZWxlbWV0cnkgPSBuZXcgU2Vzc2lvblRlbGVtZXRyeShTREsucGFnZUxvYWRUaW1lLCB0aGlzLl9tZXRyaWNzU2VydmljZSk7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5KTtcbiAgICB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIgPSB0aGlzLmhhbmRsZVZpZGVvTWV0YURhdGFDaGFuZ2VkLmJpbmQodGhpcyk7XG4gICAgdGhpcy52aWRlb0VsZW1lbnQgPSB2aWRlb0VsZW1lbnQ7XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnN1YnNjcmliZSh2aWRlb0VsZW1lbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgICAgICBpZiAoIXZpZGVvRWxlbWVudCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlbmRlcmVyRGlzcG9zYWJsZXMuYWRkKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS5zdWJzY3JpYmUoc3RyZWFtID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoIXN0cmVhbSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICghdGhpcy52aWRlb0VsZW1lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldCkge1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkgPSBuZXcgVmlkZW9UZWxlbWV0cnkodGhpcy5zdHJlYW1JZCwgU0RLLnBhZ2VMb2FkVGltZSwgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSwgdGhpcy5fbWV0cmljc1NlcnZpY2UpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JUaW1lVG9GaXJzdFRpbWUodGhpcy52aWRlb0VsZW1lbnQpO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5LnNldHVwTGlzdGVuZXJGb3JSZWJ1ZmZlcmluZyh0aGlzLnZpZGVvRWxlbWVudCk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPT09IENoYW5uZWxTdGF0ZS5TdG9wcGVkKSB7XG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5yZXN0YXJ0QWZ0ZXJTdG9wKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmFkZCh0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzKTtcbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmNsZWFyRmFpbHVyZUNvdW50VGltZW91dCkge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aGlzLl9jaGFubmVsQ29udGV4dC5jbGVhckZhaWx1cmVDb3VudFRpbWVvdXQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5mYWlsdXJlQ291bnQudmFsdWUpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGUgIT09IENoYW5uZWxTdGF0ZS5QbGF5aW5nKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgfSwgZmFpbHVyZUNvdW50Q2xlYW5VcEludGVydmFsSW5NaWxsaXNlY29uZHMpO1xuICAgICAgfSkpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQoXG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnN1YnNjcmliZShyZXNvbHV0aW9uID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvVGVsZW1ldHJ5KSB7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9UZWxlbWV0cnkub25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKHJlc29sdXRpb24udG9TdHJpbmcoKSk7XG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsRGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnN1YnNjcmliZShiaXRyYXRlTGltaXQgPT4ge1xuICAgICAgICBpZiAoYml0cmF0ZUxpbWl0ICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSkge1xuICAgICAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5saW1pdEJpdHJhdGUoXG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgICAgICBlbGFwc2VkSW5NaWxsaXNlY29uZHMsXG4gICAgICAgICAgICBiaXRyYXRlTGltaXQsXG4gICAgICAgICAgICBCaXRyYXRlU3RhdGUuS2VlcCxcbiAgICAgICAgICAgIEJpdHJhdGVNb2RlLk5vcm1hbFxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICBjb25zdCBkZXN0cm95U3RyZWFtT25Vbm1vdW50ID0gKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuZGVzdHJveVN0cmVhbU9uVW5tb3VudCh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsICdjbGllbnQ6dGVybWluYXRpb24tb24td2luZG93LXVubG9hZCcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBHbG9iYWxTY29wZS5hZGRXaW5kb3dFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCBkZXN0cm95U3RyZWFtT25Vbm1vdW50KTtcblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmNoYW5uZWxEaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgR2xvYmFsU2NvcGUucmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lcignYmVmb3JldW5sb2FkJywgZGVzdHJveVN0cmVhbU9uVW5tb3VudCk7XG4gICAgfSkpO1xuXG4gICAgdGhpcy5zdGFydCgpO1xuICB9XG5cbiAgZ2V0IHZpZGVvRWxlbWVudCgpOiBIVE1MVmlkZW9FbGVtZW50IHtcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0IHZpZGVvRWxlbWVudCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQpIHtcbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkZGF0YScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3ZpZGVvTWV0YURhdGFDaGFuZ2VkSGFuZGxlcik7XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSAnJztcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmRhdGFzZXQuc3RyZWFtSWQgPSAnJztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmcpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlN0b3BwZWQ7XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlID0gdmlkZW9FbGVtZW50O1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZG1ldGFkYXRhJywgdGhpcy5fdmlkZW9NZXRhRGF0YUNoYW5nZWRIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlVmlkZW9NZXRhRGF0YUNoYW5nZWQoKTogdm9pZCB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKHZpZGVvRWxlbWVudCkge1xuICAgICAgaWYgKHRoaXMucmVzb2x1dGlvbi52YWx1ZS53aWR0aCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvV2lkdGggfHwgdGhpcy5yZXNvbHV0aW9uLnZhbHVlLmhlaWdodCAhPT0gdmlkZW9FbGVtZW50LnZpZGVvSGVpZ2h0KSB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJlc29sdXRpb24udmFsdWUgPSBuZXcgRGltZW5zaW9uKHZpZGVvRWxlbWVudC52aWRlb1dpZHRoLCB2aWRlb0VsZW1lbnQudmlkZW9IZWlnaHQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZXNvbHV0aW9uLnZhbHVlID0gRGltZW5zaW9uLmVtcHR5O1xuICAgIH1cbiAgfVxuXG4gIGdldCB0b2tlbigpOiBFbmNvZGVkRWRnZVRva2VuIHtcbiAgICByZXR1cm4gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICB9XG5cbiAgc2V0IHRva2VuKHRva2VuOiBFbmNvZGVkRWRnZVRva2VuKSB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuXG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlID0gdG9rZW47XG4gICAgdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuRXhwaXJpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgIGNvbnN0IGVkZ2VUb2tlbiA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlKTtcbiAgICBjb25zdCBkaXNjb3ZlcnlVcmkgPSAoZWRnZVRva2VuLnVyaSB8fCBTREsuZGlzY292ZXJ5VXJpLnZhbHVlKS50b1N0cmluZygpO1xuXG4gICAgU0RLLnRlbmFuY3kudmFsdWUgPSBlZGdlVG9rZW4udGVuYW5jeSB8fCBTREsudGVuYW5jeS52YWx1ZTtcbiAgICBEaXNjb3ZlcnlVcmkudXJpLnZhbHVlID0gZGlzY292ZXJ5VXJpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UgPSBNZXRyaWNzRmFjdG9yeS5nZXRNZXRyaWNzU2VydmljZShkaXNjb3ZlcnlVcmkpO1xuXG4gICAgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSA9IGVkZ2VUb2tlbi5jYXBhYmlsaXRpZXMuaW5jbHVkZXMoJ2luc2VydGFibGUtc3RyZWFtcycpO1xuICAgIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlID0gZWRnZVRva2VuLmNhcGFiaWxpdGllcy5pbmNsdWRlcygnZW5jb2RlZC1pbnNlcnRhYmxlLXN0cmVhbXMnKTtcblxuICAgIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIGdldCBwZWVyQ29ubmVjdGlvbigpOiBSZWFkT25seVN1YmplY3Q8SVBlZXJDb25uZWN0aW9uPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5UGVlckNvbm5lY3Rpb247XG4gIH1cblxuICBnZXQgc3RhdGUoKTogUmVhZE9ubHlTdWJqZWN0PENoYW5uZWxTdGF0ZT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YXRlO1xuICB9XG5cbiAgZ2V0IGF1dG9NdXRlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUF1dG9NdXRlZDtcbiAgfVxuXG4gIGdldCBhdXRvUGF1c2VkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0b1BhdXNlZDtcbiAgfVxuXG4gIGdldCB0b2tlbkV4cGlyaW5nKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5VG9rZW5FeHBpcmluZztcbiAgfVxuXG4gIGdldCBhdXRob3JpemVkKCk6IFJlYWRPbmx5U3ViamVjdDxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5QXV0aG9yaXplZDtcbiAgfVxuXG4gIGdldCBvbmxpbmUoKTogUmVhZE9ubHlTdWJqZWN0PGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlPbmxpbmU7XG4gIH1cblxuICBnZXQgbG9hZGluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUxvYWRpbmc7XG4gIH1cblxuICBnZXQgcGxheWluZygpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVBsYXlpbmc7XG4gIH1cblxuICBnZXQgc3RhbmRieSgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0YW5kYnk7XG4gIH1cblxuICBnZXQgc3RvcHBlZCgpOiBSZWFkT25seVN1YmplY3Q8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0b3BwZWQ7XG4gIH1cblxuICBnZXQgdGFyZ2V0TGFnKCk6IFJlYWRPbmx5U3ViamVjdDxNaWxsaXNlY29uZD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVRhcmdldExhZztcbiAgfVxuXG4gIGdldCBsYWcoKTogUmVhZE9ubHlTdWJqZWN0PE1pbGxpc2Vjb25kPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TGFnO1xuICB9XG5cbiAgZ2V0IGJpdHJhdGVMaW1pdCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUJpdHJhdGVMaW1pdC52YWx1ZTtcbiAgfVxuXG4gIGdldCByZXNvbHV0aW9uKCk6IFJlYWRPbmx5U3ViamVjdDxEaW1lbnNpb24+IHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZE9ubHlSZXNvbHV0aW9uO1xuICB9XG5cbiAgZ2V0IGZhaWx1cmVDb3VudCgpOiBSZWFkT25seVN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5RmFpbHVyZUNvdW50O1xuICB9XG5cbiAgZ2V0IGVuZFBvaW50KCk6IFJlYWRPbmx5U3ViamVjdDxFbmRQb2ludD4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seUVuZFBvaW50O1xuICB9XG5cbiAgZ2V0IHN0cmVhbSgpOiBSZWFkT25seVN1YmplY3Q8SVN0cmVhbT4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVN0cmVhbTtcbiAgfVxuXG4gIGdldCBzdHJlYW1JZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZDtcbiAgfVxuXG4gIGdldCBydGNTdGF0aXN0aWNzKCk6IFJlYWRPbmx5U3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkT25seVJ0Y1N0YXRpc3RpY3M7XG4gIH1cblxuICBnZXQgbWVkaWFTdHJlYW0oKTogUmVhZE9ubHlTdWJqZWN0PE1lZGlhU3RyZWFtPiB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRPbmx5TWVkaWFTdHJlYW07XG4gIH1cblxuICBzZXRCaXRyYXRlTGltaXQoYml0cmF0ZUxpbWl0OiBCaXRzUGVyU2Vjb25kKTogdm9pZCB7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYml0cmF0ZUxpbWl0LnZhbHVlID0gYml0cmF0ZUxpbWl0O1xuICB9XG5cbiAgY2xlYXJCaXRyYXRlTGltaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRJbk1pbGxpc2Vjb25kcyA9IERhdGUubm93KCkgLSB0aGlzLl9jaGFubmVsQ29udGV4dC5jaGFubmVsSW5pdGlhbGl6YXRpb24uZ2V0VGltZSgpO1xuICAgICAgY29uc3QgYml0cmF0ZUluQml0c1BlclNlY29uZCA9IDA7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUubGltaXRCaXRyYXRlKFxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUsXG4gICAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgICAgYml0cmF0ZUluQml0c1BlclNlY29uZCxcbiAgICAgICAgQml0cmF0ZVN0YXRlLktlZXAsXG4gICAgICAgIEJpdHJhdGVNb2RlLlJlc2V0XG4gICAgICApXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgPT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmJpdHJhdGVMaW1pdC52YWx1ZSA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdFcnJvciB3aGlsZSBzZXR0aW5nIGxpbWl0IGJpdHJhdGUnLCBlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVGFyZ2V0TGFnKGxhZzogTWlsbGlzZWNvbmQpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC50YXJnZXRMYWcudmFsdWUgPSBsYWc7XG4gIH1cblxuICBhc3luYyBzdG9wKHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKCF0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSkge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucmVuZGVyZXJEaXNwb3NhYmxlcy5hZGQodGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcuc3Vic2NyaWJlKGlzU3RhcnRpbmcgPT4ge1xuICAgICAgICBpZiAoIWlzU3RhcnRpbmcpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdG9wKHJlYXNvbik7XG4gICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHByb2Nlc3NTdG9wKHJlYXNvbjogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZSkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlKCk7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5yZW5kZXJlckRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcyhyZWFzb24pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcbiAgfVxuXG4gIGFzeW5jIHJlc3VtZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0Lm1lZGlhU3RyZWFtLnZhbHVlKSB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgbXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHVubXV0ZSgpOiB2b2lkIHtcbiAgICBjb25zdCB2aWRlb0VsZW1lbnQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWU7XG5cbiAgICBpZiAodmlkZW9FbGVtZW50KSB7XG4gICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRpc3Bvc2UoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuc3RvcCgnY2xpZW50OmNoYW5uZWwtZGlzcG9zZScpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuY2hhbm5lbERpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc0Rpc3Bvc2VkID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldFVyaSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbik6IFVSTCB7XG4gICAgY29uc3QgdXJsID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudXJpO1xuXG4gICAgaWYgKHVybCkge1xuICAgICAgcmV0dXJuIHVybDtcbiAgICB9XG5cbiAgICB0aGlzLl9sb2dnZXIuaW5mbygnRmFsbCBiYWNrIHRvIHRoZSBkZWZhdWx0IGRpc2NvdmVyIFVSSSBbJXNdJywgU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gbmV3IEdsb2JhbFNjb3BlLlVSTChTREsuZGlzY292ZXJ5VXJpLnZhbHVlKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZUNvbnRleHQuaXNEaXNwb3NlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDaGFubmVsIHdhcyBhbHJlYWR5IGRpc3Bvc2VkJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyBzdGFydCcpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgcmV0dXJuIHRoaXMucHJvY2Vzc1N0YXJ0KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdGFydGluZztcblxuICAgIGNvbnN0IHRva2VuOiBFbmNvZGVkRWRnZVRva2VuID0gdGhpcy5fdG9rZW5Db250ZXh0LnRva2VuLnZhbHVlO1xuICAgIGNvbnN0IGxpc3Rlbk9uU3RyZWFtU2V0dXAgPSB0aGlzLl9zZXNzaW9uVGVsZW1ldHJ5Lmxpc3Rlbk9uU3RyZWFtU2V0dXAoKTtcblxuICAgIGlmICghRWRnZUF1dGhQYXJzZXIuaXNFbmNvZGVkRWRnZVRva2VuVmFsaWQodG9rZW4pKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSB0b2tlbiBbJXNdJywgdG9rZW4pO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuVW5hdXRob3JpemVkO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IHt2YWxpZCwgdmFsaWRhdGlvblJlc3VsdH0gPSBTdHJlYW1UcmFja1RyYW5zZm9ybS52YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0oJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC52aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gU3RyZWFtVHJhY2tUcmFuc2Zvcm0udmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKCdhdWRpbycsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayk7XG5cbiAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKHZhbGlkYXRpb25SZXN1bHQpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgY29uc3Qge3ZhbGlkLCB2YWxpZGF0aW9uUmVzdWx0fSA9IEVuY29kZWRTdHJlYW1TaW5rLnZhbGlkYXRlRW5jb2RlZFN0cmVhbVNpbmsoJ3ZpZGVvJywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkVmlkZW9TdHJlYW1TaW5rKTtcblxuICAgICAgaWYgKCF2YWxpZCkge1xuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IodmFsaWRhdGlvblJlc3VsdCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rKSB7XG4gICAgICBjb25zdCB7dmFsaWQsIHZhbGlkYXRpb25SZXN1bHR9ID0gRW5jb2RlZFN0cmVhbVNpbmsudmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luaygnYXVkaW8nLCB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0LmVuY29kZWRBdWRpb1N0cmVhbVNpbmspO1xuXG4gICAgICBpZiAoIXZhbGlkKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcih2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlICYmIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggaW5zZXJ0YWJsZS1zdHJlYW1zIGFuZCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBhcmUgZW5hYmxlZCwgb25seSB1c2Ugb25lIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID09PSAnZnVuY3Rpb24nO1xuICAgIGNvbnN0IGhhc0VuY29kZWRTdHJlYW1TaW5rID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgaWYgKGhhc1RyYW5zZm9ybVN0cmVhbUNhbGxiYWNrICYmIGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0JvdGggTWVkaWEgU3RyZWFtIFRyYWNrIHRyYW5zZm9ybSBjYWxsYmFjayBhbmQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIHNpbmsgZnVuY3Rpb24gZm91bmQsIG9ubHkgdXNlIG9uZSB0eXBlIG9yIHRoZSBvdGhlcicpO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0Lmhhc0luc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIUZlYXR1cmVFbmFibGVtZW50LmlzSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgTWVkaWEgU3RyZWFtIFRyYWNrIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gaXMgbWlzc2luZzsgaG93ZXZlciwgaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIGVuYWJsZWQnKTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX3N0YXRlQ29udGV4dC5pc1N0YXJ0aW5nLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoaGFzVHJhbnNmb3JtU3RyZWFtQ2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKGBDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gY2FsbGJhY2sgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGluc2VydGFibGUtc3RyZWFtcyBpcyBub3QgZW5hYmxlZGApO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICBpZiAoIShGZWF0dXJlRW5hYmxlbWVudC5pc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCB8fCBGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkpIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdCcm93c2VyIGRvZXMgbm90IHN1cHBvcnQgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zIEFQSScpO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dGhvcml6ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghaGFzRW5jb2RlZFN0cmVhbVNpbmspIHtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdDcmVhdGVDaGFubmVsT3B0aW9ucyB0cmFuc2Zvcm0gc2luayBmdW5jdGlvbiBpcyBtaXNzaW5nOyBob3dldmVyLCBlbmNvZGVkLWluc2VydGFibGUtc3RyZWFtcyBpcyBlbmFibGVkJyk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc0VuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcihgQ3JlYXRlQ2hhbm5lbE9wdGlvbnMgdHJhbnNmb3JtIHNpbmsgZnVuY3Rpb24gZm91bmQ7IGhvd2V2ZXIsIGVuY29kZWQtaW5zZXJ0YWJsZS1zdHJlYW1zIGlzIG5vdCBlbmFibGVkYCk7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0aG9yaXplZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNsZWFuVXBSZXNvdXJjZXMoJ2NsaWVudDpzdGFydCcpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgY29uc3QgdXJpID0gdGhpcy5nZXRVcmkodG9rZW4pO1xuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZGlzcG9zYWJsZXMuYWRkKFxuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUuc3Vic2NyaWJlKHN0YXRlID0+IHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBDaGFubmVsU3RhdGUuRXJyb3IgfHwgc3RhdGUgPT09IENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nKSB7XG4gICAgICAgICAgRGlzY292ZXJ5LmNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50KHVyaSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGNvbnN0IGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjazogKCkgPT4gUHJvbWlzZTx2b2lkPiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlKTogdm9pZCA9PiB7XG4gICAgICAvLyBOZWVkIHRvIHNldCBpc1N0YXJ0aW5nIHRvIGZhbHNlIGFuZCBjYWxsIGhhbmRsZVN0cmVhbUZhaWx1cmUgaWYgc3RyZWFtIG1vbml0b3JzIGZvdW5kIGFuIGlzc3VlXG4gICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICByZXR1cm4gcmVzb2x2ZSh0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKSk7XG4gICAgfSk7XG4gICAgY29uc3Qgc3RyZWFtUGxheWVyID0gU3RyZWFtRmFjdG9yeS5jcmVhdGUodG9rZW4sIHRoaXMuX2NoYW5uZWxDb250ZXh0LCB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQsIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmVDYWxsYmFjayk7XG5cbiAgICBpZiAoIXN0cmVhbVBsYXllcikge1xuICAgICAgdGhpcy5fc3RhdGVDb250ZXh0LmlzU3RhcnRpbmcudmFsdWUgPSBmYWxzZTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW1QbGF5ZXIuc3RhcnQoXG4gICAgICB1cmksXG4gICAgICB0b2tlbixcbiAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAsXG4gICAgICB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50LmJpbmQodGhpcykpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgIGxpc3Rlbk9uU3RyZWFtU2V0dXAuZmFpbCgpO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSsrO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0Lm9ubGluZS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY2xlYW5VcFJlc291cmNlcygnY2xpZW50OmNsZWFudXAtYWZ0ZXItZmFpbGVkLXNldHVwJyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdGFydCBjaGFubmVsJywgZSk7XG4gICAgICB9KVxuICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICB0aGlzLl9zdGF0ZUNvbnRleHQuaXNTdGFydGluZy52YWx1ZSA9IGZhbHNlO1xuXG4gICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9PT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgfHwgIVNESy5hdXRvbWF0aWNSZXRyeU9uRmFpbHVyZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRpbWVvdXRJZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLmhhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZScsIGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIHRoaXMuZ2V0UmV0cnlJbnRlcnZhbCgpKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5kaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgICB9KSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVzdGFydEFmdGVyU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5fc3RhdGVDb250ZXh0LmlzRGlzcG9zZWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2hhbm5lbCB3YXMgYWxyZWFkeSBkaXNwb3NlZCcpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3Rva2VuQ29udGV4dC50b2tlbi52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc3RhcnQoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcGxheSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBtZWRpYVN0cmVhbSA9IHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghbWVkaWFTdHJlYW0pIHtcbiAgICAgIHJldHVybiB0aGlzLnN0YXJ0KCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMucGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRSZXRyeUludGVydmFsKCk6IG51bWJlciB7XG4gICAgc3dpdGNoICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSkge1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuSW5pdGlhbGl6aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICAgIHJldHVybiBzdGFuZGJ5UG9sbGluZ0ludGVydmFsSW5NaWxsaXNlY29uZHM7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5FcnJvcjpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlJlY292ZXJpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0b3BwZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdGFydGluZzpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5QYXVzZWQ6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvbm5lY3Rpbmc6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbnN1cHBvcnRlZEZlYXR1cmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5UcmFuc2llbnRDb25maWd1cmF0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Db25uZWN0aW9uRXJyb3I6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5DbGllbnRTdGFydEVycm9yOlxuICAgICAgICAvLyBGaXJzdCBhbmQgc2Vjb25kIGF0dGVtcHQgZmFzdCwgYWZ0ZXIgdGhhdCBleHBvbmVudGlhbCB3aXRoIGJhY2tvZmYgaW50ZXJ2YWxcbiAgICAgICAgcmV0dXJuIHRoaXMuX2V4cG9uZW50aWFsQmFja29mZi5nZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KHRoaXMuX2NoYW5uZWxDb250ZXh0LmZhaWx1cmVDb3VudC52YWx1ZSk7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBoYW5kbGVTdHJlYW1GYWlsdXJlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHN3aXRjaCAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUpIHtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuU3RhbmRCeTpcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLk9mZmxpbmU6XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuVHJhbnNpZW50Q29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yOlxuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ2xpZW50U3RhcnRFcnJvcjpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1JldHJ5IHN0YXJ0IHdpdGggaW5pdGlhbCBzdGF0ZSBbJXNdIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSwgQ2hhbm5lbFN0YXRlW3RoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlXSk7XG5cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5VbmF1dGhvcml6ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHVuYXV0aG9yaXplZCwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuIFBsZWFzZSBwcm92aWRlIGEgbmV3IHRva2VuIGFuZCBpbnZva2Ugc3RhcnQoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLkdlb1Jlc3RyaWN0ZWQ6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGdlbyByZXN0cmljdGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4gUGxlYXNlIHByb3ZpZGUgYSBuZXcgdG9rZW4gYW5kIGludm9rZSBzdGFydCgpJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuR2VvQmxvY2tlZDpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgZ2VvIGJsb2NrZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgcHJvdmlkZSBhIG5ldyB0b2tlbiBhbmQgaW52b2tlIHN0YXJ0KCknKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5TdG9wcGVkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBjYXNlIENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIGFscmVhZHkgaW5pdGlhbGl6aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlBsYXlpbmc6XG4gICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdDaGFubmVsIGlzIHBsYXlpbmcsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0Jyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuUGF1c2VkOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBwYXVzZWQsIHNraXBwaW5nIHJldHJ5IG9mIHN0YXJ0LiBQbGVhc2UgaW52b2tlIHBsYXkoKScpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBhbHJlYWR5IHN0YXJ0aW5nLCBza2lwcGluZyByZXRyeSBvZiBzdGFydCcpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNhc2UgQ2hhbm5lbFN0YXRlLlVuc3VwcG9ydGVkRmVhdHVyZTpcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgaXMgc3RvcHBlZCBkdWUgdG8gdW5zdXBwb3J0ZWQgZmVhdHVyZSwgc2tpcHBpbmcgcmV0cnkgb2Ygc3RhcnQuJyk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgY2FzZSBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yOlxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ2hhbm5lbCBpcyBzdG9wcGVkIGR1ZSB0byBjb25maWd1cmF0aW9uIGVycm9yLCBza2lwcGluZyByZXRyeSBvZiBzdGFydC4nKTtcblxuICAgICAgICByZXR1cm47XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZSh0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc3RhcnQoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5VcFJlc291cmNlcyhyZWFzb246IHN0cmluZyA9IGRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbik6IHZvaWQge1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmRpc3Bvc2UoKTtcblxuICAgIGNvbnN0IHBlZXJDb25uZWN0aW9uID0gdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlO1xuXG4gICAgaWYgKHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgPSBudWxsO1xuICAgICAgcGVlckNvbm5lY3Rpb24uY2xvc2UoKTtcbiAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgaWYgKFNESy5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0ICYmICEoRmVhdHVyZUVuYWJsZW1lbnQuaXNNb2JpbGUgJiYgU0RLLnNraXBHYXJiYWdlQ29sbGVjdGlvbk9uTW9iaWxlRGV2aWNlcykpIHtcbiAgICAgICAgR2FyYmFnZUNvbGxlY3Rvck1hbmFnZXIuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUpIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHRyYWNrLnN0b3AoKSk7XG4gICAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQubWVkaWFTdHJlYW0udmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RvcHBlZC52YWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSkge1xuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmRlc3Ryb3lTdHJlYW0odGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlLCByZWFzb24pXG4gICAgICAgIC50aGVuKCh7c3RhdHVzfSkgPT4ge1xuICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBkZXN0cm95IHN0cmVhbSB3aXRoIHJlYXNvbiBbJXNdJywgdGhpcy5zdHJlYW1JZCwgc3RhdHVzKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIERlc3Ryb3llZCBzdHJlYW0gd2l0aCByZWFzb24gWyVzXScsIHRoaXMuc3RyZWFtSWQsIHN0YXR1cyk7XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ1slc10gRmFpbGVkIHRvIGRlc3Ryb3kgc3RyZWFtJywgdGhpcy5zdHJlYW1JZCwgZSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnZpZGVvRWxlbWVudCAmJiB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0KSB7XG4gICAgICB0aGlzLnZpZGVvRWxlbWVudC5kYXRhc2V0LnNlc3Npb25JZCA9ICcnO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQuZGF0YXNldC5zdHJlYW1JZCA9ICcnO1xuICAgIH1cblxuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbS52YWx1ZSA9IG51bGw7XG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBudWxsO1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQobWVkaWFTdHJlYW06IE1lZGlhU3RyZWFtKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdmlkZW9FbGVtZW50ID0gdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlO1xuXG4gICAgaWYgKCF2aWRlb0VsZW1lbnQpIHtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuU3RvcHBlZDtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMudmFsdWUpIHtcbiAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICB9XG5cbiAgICBjb25zdCBwbGF5UHJvbWlzZSA9IHZpZGVvRWxlbWVudC5wbGF5KCk7XG5cbiAgICBpZiAocGxheVByb21pc2UgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b011dGVkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBsYXlpbmc7XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gcGxheVByb21pc2UudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSB0cnVlO1xuICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgIGNvbnN0IGhhc0F1ZGlvVHJhY2sgPSAhIW1lZGlhU3RyZWFtLmdldFRyYWNrcygpLmZpbHRlcih0cmFjayA9PiB7XG4gICAgICAgIHJldHVybiB0cmFjay5raW5kID09PSAnYXVkaW8nO1xuICAgICAgfSkubGVuZ3RoO1xuICAgICAgY29uc3QgYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgPSAhU0RLLmF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlO1xuXG4gICAgICBpZiAoYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmVPZmYgfHwgdmlkZW9FbGVtZW50Lm11dGVkIHx8ICFoYXNBdWRpb1RyYWNrKSB7XG4gICAgICAgIHZpZGVvRWxlbWVudC5zcmNPYmplY3QgPSBudWxsO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG5cbiAgICAgICAgaWYgKGF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gUGF1c2VkIHZpZGVvIGFmdGVyIHBsYXkgZmFpbGVkLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaGFzQXVkaW9UcmFjaykge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gcGxheSBtdXRlZCB2aWRlby4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkLicsIHRoaXMuc3RyZWFtSWQsIGUpO1xuXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdmlkZW9FbGVtZW50Lm11dGVkID0gdHJ1ZTtcblxuICAgICAgcmV0dXJuIHZpZGVvRWxlbWVudC5wbGF5KClcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFBsYXllZCB2aWRlbyBhZnRlciBhdXRvIG11dGluZy4gTWFudWFsIHVzZXIgYWN0aW9uIHJlcXVpcmVkIHRvIHVubXV0ZS4nLCB0aGlzLnN0cmVhbUlkKTtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXV0b1BhdXNlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QbGF5aW5nO1xuICAgICAgICB9KS5jYXRjaChlID0+IHtcbiAgICAgICAgICB2aWRlb0VsZW1lbnQubXV0ZWQgPSBmYWxzZTtcblxuICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBwbGF5IHZpZGVvLiBNYW51YWwgdXNlciBhY3Rpb24gcmVxdWlyZWQuJywgdGhpcy5zdHJlYW1JZCwgZSk7XG5cbiAgICAgICAgICB2aWRlb0VsZW1lbnQuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvTXV0ZWQudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hdXRvUGF1c2VkLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLlBhdXNlZDtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmVudW0gQ2hhbm5lbFN0YXRlIHtcbiAgSW5pdGlhbGl6aW5nID0gMCxcbiAgT2ZmbGluZSA9IDEsXG4gIFN0YXJ0aW5nID0gMixcbiAgUGF1c2VkID0gMyxcbiAgUGxheWluZyA9IDQsXG4gIFJlY292ZXJpbmcgPSA1LFxuICBSZWNvbm5lY3RpbmcgPSA2LFxuICBTdGFuZEJ5ID0gNyxcbiAgU3RvcHBlZCA9IDgsXG4gIFVuYXV0aG9yaXplZCA9IDksXG4gIEdlb1Jlc3RyaWN0ZWQgPSAxMCxcbiAgR2VvQmxvY2tlZCA9IDExLFxuICBVbnN1cHBvcnRlZEZlYXR1cmUgPSAxMixcbiAgQ29uZmlndXJhdGlvbkVycm9yID0gMTMsXG4gIFRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciA9IDE0LFxuICBDb25uZWN0aW9uRXJyb3IgPSAxNSxcbiAgQ2xpZW50U3RhcnRFcnJvciA9IDE2LFxuICBFcnJvciA9IDE3XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoYW5uZWxTdGF0ZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7TWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcbmltcG9ydCB7RW5jb2RlZEVkZ2VUb2tlbn0gZnJvbSAnLi4vLi4vZWRnZUF1dGgvRW5jb2RlZEVkZ2VUb2tlbic7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IFNESyBmcm9tICcuLi9TREsnO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCB7SVN0cmVhbVRyYWNrVHJhbnNmb3JtfSBmcm9tICcuLi90cmFuc2Zvcm1hdGlvbi9TdHJlYW1UcmFja1RyYW5zZm9ybSc7XG5pbXBvcnQgQ2hhbm5lbCwge0NoYW5uZWxPcHRpb25zfSBmcm9tICcuL0NoYW5uZWwnO1xuXG50eXBlIENyZWF0ZUNoYW5uZWxPcHRpb25zID0ge1xuICB2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHRva2VuOiBFbmNvZGVkRWRnZVRva2VuO1xuICB0YXJnZXRMYWc/OiBNaWxsaXNlY29uZDtcbiAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPjtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaz86IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+O1xuICBlbmNvZGVkVmlkZW9TdHJlYW1TaW5rPzogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPjtcbiAgZW5jb2RlZEF1ZGlvU3RyZWFtU2luaz86IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT47XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBDaGFubmVscyB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9pc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQgPSBGZWF0dXJlRW5hYmxlbWVudC5pc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWRcbiAgICAmJiAoRmVhdHVyZUVuYWJsZW1lbnQuaXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXNTdXBwb3J0ZWQgfHwgRmVhdHVyZUVuYWJsZW1lbnQuaXNSVENSdHBTY3JpcHRUcmFuc2Zvcm1TdXBwb3J0ZWQpO1xuXG4gIHN0YXRpYyBjcmVhdGVDaGFubmVsKG9wdGlvbnM6IENyZWF0ZUNoYW5uZWxPcHRpb25zKTogQ2hhbm5lbCB7XG4gICAgaWYgKCFTREsuaW5pdGlhbGl6ZWQudmFsdWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU0RLIGlzIG5vdCBsb2FkZWQuJyk7XG4gICAgfVxuXG4gICAgY29uc3QgY2hhbm5lbE9wdGlvbnM6IENoYW5uZWxPcHRpb25zID0ge1xuICAgICAgdGFyZ2V0TGFnOiBvcHRpb25zLnRhcmdldExhZyxcbiAgICAgIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IG9wdGlvbnMuYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayxcbiAgICAgIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayxcbiAgICAgIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IG9wdGlvbnMuZW5jb2RlZEF1ZGlvU3RyZWFtU2lua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IENoYW5uZWwob3B0aW9ucy52aWRlb0VsZW1lbnQsIG9wdGlvbnMudG9rZW4sIGNoYW5uZWxPcHRpb25zKTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0IGlzRnJhbWVUaW1pbmdJbmZvcm1hdGlvblN1cHBvcnRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNGcmFtZVRpbWluZ0luZm9ybWF0aW9uU3VwcG9ydGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0NoYW5uZWxzIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgQ2hhbm5lbFN0YXRlIGZyb20gJy4uL2NoYW5uZWxzL0NoYW5uZWxTdGF0ZSc7XG5pbXBvcnQgRGltZW5zaW9uIGZyb20gJy4uLy4uL3ZpZGVvL0RpbWVuc2lvbic7XG5pbXBvcnQgRW5kUG9pbnQsIHtJU3RyZWFtLCBTdWJzY3JpYmVTdGF0dXN9IGZyb20gJy4uL2Rpc2NvdmVyeS9FbmRQb2ludCc7XG5pbXBvcnQgVmlkZW9UZWxlbWV0cnkgZnJvbSAnLi4vLi4vdmlkZW8vVmlkZW9UZWxlbWV0cnknO1xuaW1wb3J0IHtJUnRjTW9uaXRvclN0YXRpc3RpYywgSVJ0Y1N0YXRpc3RpY30gZnJvbSAnLi4vLi4vcnRjL1J0Y0Nvbm5lY3Rpb25Nb25pdG9yJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBhc3NlcnRVbnJlYWNoYWJsZSBmcm9tICcuLi8uLi9sYW5nL2Fzc2VydFVucmVhY2hhYmxlJztcbmltcG9ydCBEaXNwb3NhYmxlTGlzdCBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGVMaXN0JztcbmltcG9ydCB7Qml0c1BlclNlY29uZCwgTWlsbGlzZWNvbmR9IGZyb20gJy4uLy4uL3VuaXRzL1VuaXRzJztcblxuY29uc3QgZGVmYXVsdFRhcmdldExhZyA9IDA7XG5cbmV4cG9ydCB0eXBlIENoYW5uZWxDb250ZXh0T3B0aW9ucyA9IHtcbiAgdGFyZ2V0TGFnPzogbnVtYmVyO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2hhbm5lbENvbnRleHQge1xuICBjaGFubmVsSW5pdGlhbGl6YXRpb246IERhdGU7XG4gIGRpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgY2hhbm5lbERpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdDtcbiAgcmVuZGVyZXJEaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3Q7XG4gIHZpZGVvRWxlbWVudDogU3ViamVjdDxIVE1MVmlkZW9FbGVtZW50PjtcbiAgc3RhdGU6IFN1YmplY3Q8Q2hhbm5lbFN0YXRlPjtcbiAgYXV0b011dGVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRvUGF1c2VkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBhdXRob3JpemVkOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBvbmxpbmU6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIGxvYWRpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHBsYXlpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0YW5kYnk6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHN0b3BwZWQ6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHRhcmdldExhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGxhZzogU3ViamVjdDxNaWxsaXNlY29uZD47XG4gIGJpdHJhdGVMaW1pdDogU3ViamVjdDxCaXRzUGVyU2Vjb25kPjtcbiAgcmVzb2x1dGlvbjogU3ViamVjdDxEaW1lbnNpb24+O1xuICBmYWlsdXJlQ291bnQ6IFN1YmplY3Q8bnVtYmVyPjtcbiAgZW5kUG9pbnQ6IFN1YmplY3Q8RW5kUG9pbnQ+O1xuICBzdHJlYW06IFN1YmplY3Q8SVN0cmVhbT47XG4gIHJ0Y1N0YXRpc3RpY3M6IFN1YmplY3Q8SVJ0Y01vbml0b3JTdGF0aXN0aWM+O1xuICB2aWRlb1RlbGVtZXRyeTogVmlkZW9UZWxlbWV0cnk7XG4gIHJ0Y0F1ZGlvU3RhdGlzdGljOiBJUnRjU3RhdGlzdGljO1xuICBydGNWaWRlb1N0YXRpc3RpYzogSVJ0Y1N0YXRpc3RpYztcbiAgY2xlYXJGYWlsdXJlQ291bnRUaW1lb3V0OiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9ucz86IENoYW5uZWxDb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuZGlzcG9zYWJsZXMgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgICB0aGlzLmNoYW5uZWxEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMucmVuZGVyZXJEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuY2hhbm5lbEluaXRpYWxpemF0aW9uID0gbmV3IERhdGUoKTtcbiAgICB0aGlzLnZpZGVvRWxlbWVudCA9IG5ldyBTdWJqZWN0PEhUTUxWaWRlb0VsZW1lbnQ+KG51bGwpO1xuICAgIHRoaXMuc3RhdGUgPSBuZXcgU3ViamVjdDxDaGFubmVsU3RhdGU+KENoYW5uZWxTdGF0ZS5Jbml0aWFsaXppbmcpO1xuICAgIHRoaXMuYXV0b011dGVkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuYXV0b1BhdXNlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmF1dGhvcml6ZWQgPSBuZXcgU3ViamVjdDxib29sZWFuPih0cnVlKTtcbiAgICB0aGlzLm9ubGluZSA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KHRydWUpO1xuICAgIHRoaXMubG9hZGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnBsYXlpbmcgPSBuZXcgU3ViamVjdDxib29sZWFuPihmYWxzZSk7XG4gICAgdGhpcy5zdGFuZGJ5ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpO1xuICAgIHRoaXMuc3RvcHBlZCA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLnRhcmdldExhZyA9IG5ldyBTdWJqZWN0PE1pbGxpc2Vjb25kPihvcHRpb25zPy50YXJnZXRMYWcgPz8gZGVmYXVsdFRhcmdldExhZyk7XG4gICAgdGhpcy5sYWcgPSBuZXcgU3ViamVjdDxNaWxsaXNlY29uZD4oMCk7XG4gICAgdGhpcy5iaXRyYXRlTGltaXQgPSBuZXcgU3ViamVjdDxCaXRzUGVyU2Vjb25kPigwKTtcbiAgICB0aGlzLnJlc29sdXRpb24gPSBuZXcgU3ViamVjdDxEaW1lbnNpb24+KERpbWVuc2lvbi5lbXB0eSk7XG4gICAgdGhpcy5mYWlsdXJlQ291bnQgPSBuZXcgU3ViamVjdDxudW1iZXI+KDApO1xuICAgIHRoaXMuZW5kUG9pbnQgPSBuZXcgU3ViamVjdDxFbmRQb2ludD4obnVsbCk7XG4gICAgdGhpcy5zdHJlYW0gPSBuZXcgU3ViamVjdDxJU3RyZWFtPihudWxsKTtcbiAgICB0aGlzLnJ0Y1N0YXRpc3RpY3MgPSBuZXcgU3ViamVjdDxJUnRjTW9uaXRvclN0YXRpc3RpYz4obnVsbCk7XG4gIH1cblxuICBnZXQgc3RyZWFtSWQoKTogc3RyaW5nIHtcbiAgICBjb25zdCBzdHJlYW0gPSB0aGlzLnN0cmVhbS52YWx1ZTtcblxuICAgIGlmICghc3RyZWFtKSB7XG4gICAgICByZXR1cm4gJy0nO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJlYW0uc3RyZWFtSWQ7XG4gIH1cblxuICBhcHBseVN0YXR1cyhzdGF0dXM6IFN1YnNjcmliZVN0YXR1cyk6IHZvaWQge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndW5hdXRob3JpemVkJzpcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgIGNhc2UgJ2dlby1ibG9ja2VkJzpcbiAgICAgICAgdGhpcy5hdXRob3JpemVkLnZhbHVlID0gZmFsc2U7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHRoaXMuZmFpbHVyZUNvdW50LnZhbHVlID0gMDtcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5mYWlsdXJlQ291bnQudmFsdWUrKztcbiAgICAgICAgdGhpcy5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcHBlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0cmVhbS52YWx1ZSA9IG51bGw7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGFwcGx5U2Vzc2lvbkFuZFN0cmVhbVByb3BlcnRpZXNUb1ZpZGVvRWxlbWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy52aWRlb0VsZW1lbnQudmFsdWUgJiYgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldCkge1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zZXNzaW9uSWQgPSBTREsuY2xpZW50U2Vzc2lvbklkO1xuICAgICAgdGhpcy52aWRlb0VsZW1lbnQudmFsdWUuZGF0YXNldC5zdHJlYW1JZCA9IHRoaXMuc3RyZWFtSWQ7XG4gICAgfVxuICB9XG5cbiAgbWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU3Vic2NyaWJlU3RhdHVzKTogQ2hhbm5lbFN0YXRlIHtcbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSAnb2snOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlN0YXJ0aW5nO1xuICAgICAgY2FzZSAnbm8tc3RyZWFtJzpcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhbmRCeTtcbiAgICAgIGNhc2UgJ2dlby1yZXN0cmljdGVkJzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5HZW9SZXN0cmljdGVkO1xuICAgICAgY2FzZSAnZ2VvLWJsb2NrZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLkdlb0Jsb2NrZWQ7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ2NhcGFjaXR5JzpcbiAgICAgIGNhc2UgJ3JhdGUtbGltaXRlZCc6XG4gICAgICBjYXNlICd0aW1lb3V0JzpcbiAgICAgICAgcmV0dXJuIENoYW5uZWxTdGF0ZS5SZWNvdmVyaW5nO1xuICAgICAgY2FzZSAnZm9yYmlkZGVuLXRhZyc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuQ29uZmlndXJhdGlvbkVycm9yO1xuICAgICAgY2FzZSAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvcjtcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZWVyQ29ubmVjdGlvbkNvbnRleHQge1xuICBtZWRpYVN0cmVhbTogU3ViamVjdDxNZWRpYVN0cmVhbT47XG4gIHBlZXJDb25uZWN0aW9uOiBTdWJqZWN0PElQZWVyQ29ubmVjdGlvbj47XG4gIHBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHM6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1lZGlhU3RyZWFtID0gbmV3IFN1YmplY3Q8TWVkaWFTdHJlYW0+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb24gPSBuZXcgU3ViamVjdDxJUGVlckNvbm5lY3Rpb24+KG51bGwpO1xuICAgIHRoaXMucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdGF0ZUNvbnRleHQge1xuICBpc1N0YXJ0aW5nOiBTdWJqZWN0PGJvb2xlYW4+O1xuICBpc0Rpc3Bvc2VkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaXNTdGFydGluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgICB0aGlzLmlzRGlzcG9zZWQgPSBmYWxzZTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFN1YmplY3QgZnJvbSAnLi4vLi4vcngvU3ViamVjdCc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcblxuZXhwb3J0IHR5cGUgU3RyZWFtVHJhbnNmb3JtQ29udGV4dE9wdGlvbnMgPSB7XG4gIGhhc0luc2VydGFibGVTdHJlYW1zOiBib29sZWFuO1xuICBoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXM6IGJvb2xlYW47XG4gIHZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPEF1ZGlvRGF0YT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRWaWRlb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkVmlkZW9GcmFtZT4gfCB1bmRlZmluZWQ7XG4gIGVuY29kZWRBdWRpb1N0cmVhbVNpbms6IElFbmNvZGVkU3RyZWFtU2luazxSVENFbmNvZGVkQXVkaW9GcmFtZT4gfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IHtcbiAgcmVhZG9ubHkgaGFzSW5zZXJ0YWJsZVN0cmVhbXM6IFN1YmplY3Q8Ym9vbGVhbj47XG4gIHJlYWRvbmx5IGhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtczogU3ViamVjdDxib29sZWFuPjtcbiAgcmVhZG9ubHkgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjazogSVN0cmVhbVRyYWNrVHJhbnNmb3JtPFZpZGVvRnJhbWU+IHwgdW5kZWZpbmVkO1xuICByZWFkb25seSBhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08QXVkaW9EYXRhPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBTdHJlYW1UcmFuc2Zvcm1Db250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGFzSW5zZXJ0YWJsZVN0cmVhbXMgPSBuZXcgU3ViamVjdDxib29sZWFuPihvcHRpb25zLmhhc0luc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLmhhc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KG9wdGlvbnMuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zKTtcbiAgICB0aGlzLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sgPSBvcHRpb25zLnZpZGVvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s7XG4gICAgdGhpcy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrID0gb3B0aW9ucy5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrO1xuICAgIHRoaXMuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9IG9wdGlvbnMuZW5jb2RlZFZpZGVvU3RyZWFtU2luaztcbiAgICB0aGlzLmVuY29kZWRBdWRpb1N0cmVhbVNpbmsgPSBvcHRpb25zLmVuY29kZWRBdWRpb1N0cmVhbVNpbms7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBTdWJqZWN0IGZyb20gJy4uLy4uL3J4L1N1YmplY3QnO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVG9rZW5Db250ZXh0IHtcbiAgdG9rZW46IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj47XG4gIHRva2VuRXhwaXJpbmc6IFN1YmplY3Q8Ym9vbGVhbj47XG5cbiAgY29uc3RydWN0b3IodG9rZW46IEVuY29kZWRFZGdlVG9rZW4pIHtcbiAgICB0aGlzLnRva2VuID0gbmV3IFN1YmplY3Q8RW5jb2RlZEVkZ2VUb2tlbj4odG9rZW4pO1xuICAgIHRoaXMudG9rZW5FeHBpcmluZyA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KGZhbHNlKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5jb25zdCBkZWZhdWx0RGlzY292ZXJ5VXJpID0gJ2h0dHBzOi8vcGNhc3QucGhlbml4cnRzLmNvbS9wY2FzdC9lbmRQb2ludHMnO1xuXG5leHBvcnQge2RlZmF1bHREaXNjb3ZlcnlVcml9OyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtCaXRyYXRlTW9kZSwgQml0cmF0ZU1vZGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlTW9kZU1hcHBpbmcge1xuICBzdGF0aWMgY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUoYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlKTogQml0cmF0ZU1vZGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVNb2RlKSB7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLk5vcm1hbDpcbiAgICAgICAgcmV0dXJuICdOb3JtYWwnO1xuICAgICAgY2FzZSBCaXRyYXRlTW9kZS5Gb3JjZTpcbiAgICAgICAgcmV0dXJuICdGb3JjZSc7XG4gICAgICBjYXNlIEJpdHJhdGVNb2RlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVNb2RlKTtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7Qml0cmF0ZVN0YXRlLCBCaXRyYXRlU3RhdGVUeXBlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRyYXRlU3RhdGVNYXBwaW5nIHtcbiAgc3RhdGljIGNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUoYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUpOiBCaXRyYXRlU3RhdGVUeXBlIHtcbiAgICBzd2l0Y2ggKGJpdHJhdGVTdGF0ZSkge1xuICAgICAgY2FzZSBCaXRyYXRlU3RhdGUuS2VlcDpcbiAgICAgICAgcmV0dXJuICdLZWVwJztcbiAgICAgIGNhc2UgQml0cmF0ZVN0YXRlLlJlc2V0OlxuICAgICAgICByZXR1cm4gJ1Jlc2V0JztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGFzc2VydFVucmVhY2hhYmxlKGJpdHJhdGVTdGF0ZSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IERpc2NvdmVyeVNlcnZpY2UgZnJvbSAnLi9EaXNjb3ZlcnlTZXJ2aWNlJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCA9IDYwMDAwO1xuXG5pbnRlcmZhY2UgSVBlclVSSUVuZHBvaW50IHsgW3g6IHN0cmluZ106IFByb21pc2U8RW5kUG9pbnQ+IH1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5IHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2NhY2hlOiBJUGVyVVJJRW5kcG9pbnQgPSB7fTtcblxuICBzdGF0aWMgYXN5bmMgcHJlY2FjaGVDbG9zZXN0RW5kUG9pbnREaXNjb3ZlcnkoKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVyaSA9IG5ldyBHbG9iYWxTY29wZS5VUkwoU0RLLmRpc2NvdmVyeVVyaS52YWx1ZSk7XG5cbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKTtcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaTogVVJMKTogUHJvbWlzZTxFbmRQb2ludD4ge1xuICAgIGNvbnN0IHVybCA9IHVyaS50b1N0cmluZygpO1xuXG4gICAgaWYgKERpc2NvdmVyeS5fY2FjaGVbdXJsXSkge1xuICAgICAgcmV0dXJuIERpc2NvdmVyeS5fY2FjaGVbdXJsXTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNjb3ZlcnlTZXJ2aWNlID0gbmV3IERpc2NvdmVyeVNlcnZpY2UodXJpKTtcbiAgICBjb25zdCBjYWNoZWRWYWx1ZSA9IERpc2NvdmVyeS5fY2FjaGVbdXJsXSA9IGRpc2NvdmVyeVNlcnZpY2UuZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQoKTtcbiAgICBjb25zdCBpZ25vcmVkID0gRGlzY292ZXJ5Ll9jYWNoZVt1cmxdLnRoZW4oKCkgPT4ge1xuICAgICAgY29uc3QgaWdub3JlZCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBpZiAoRGlzY292ZXJ5Ll9jYWNoZVt1cmxdID09PSBjYWNoZWRWYWx1ZSkge1xuICAgICAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgICAgIH1cbiAgICAgIH0sIGRpc2NvdmVyeUNhY2hlSW50ZXJ2YWwpO1xuICAgIH0pLmNhdGNoKCgpID0+IHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfSk7XG5cbiAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gIH1cblxuICBzdGF0aWMgY2xlYXJDYWNoZWRDbG9zZXN0RW5kcG9pbnQodXJpOiBVUkwpOiB2b2lkIHtcbiAgICBjb25zdCB1cmwgPSB1cmkudG9TdHJpbmcoKTtcblxuICAgIGlmIChEaXNjb3ZlcnkuX2NhY2hlW3VybF0pIHtcbiAgICAgIGRlbGV0ZSBEaXNjb3ZlcnkuX2NhY2hlW3VybF07XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn1cblxuY29uc3QgaWdub3JlZCA9IERpc2NvdmVyeS5wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSgpOyIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5pbXBvcnQgTWV0cmljc0ZhY3RvcnkgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzRmFjdG9yeSc7XG5pbXBvcnQgTWV0cmljc1R5cGUgZnJvbSAnLi4vLi4vbWV0cmljcy9NZXRyaWNzVHlwZSc7XG5pbXBvcnQgRGlzY292ZXJ5VXJpIGZyb20gJy4vRGlzY292ZXJ5VXJpJztcbmltcG9ydCBFbmRQb2ludCBmcm9tICcuL0VuZFBvaW50JztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcblxuY29uc3QgZGVmYXVsdFRpbWVvdXQgPSAyMDAwMDtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGlzY292ZXJ5U2VydmljZSB7XG4gIHByaXZhdGUgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdEaXNjb3ZlcnknKTtcbiAgcHJpdmF0ZSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF91cmk6IFVSTDtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IFVSTCkge1xuICAgIGlmICghdXJpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB1cmknKTtcbiAgICB9XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IE1ldHJpY3NGYWN0b3J5LmdldE1ldHJpY3NTZXJ2aWNlKHVyaS50b1N0cmluZygpKTtcbiAgICB0aGlzLl91cmkgPSB1cmk7XG4gIH1cblxuICBhc3luYyBkaXNjb3Zlck5lYXJieUVuZFBvaW50cyh1cmk6IFVSTCwgdGltZW91dDogbnVtYmVyKTogUHJvbWlzZTxFbmRQb2ludFtdPiB7XG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0Rpc2NvdmVyeSByZXF1aXJlcyB0aW1lb3V0Jyk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdXJpLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIGNhY2hlOiAnbm8tY2FjaGUnXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigoXywgcmVqZWN0KSA9PiBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHJlamVjdChuZXcgRXJyb3IoYERpc2NvdmVyeSB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRpbWVvdXQpKVxuICAgIF0pO1xuXG4gICAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBEaXNjb3ZlcnkgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgaWYgKHJlc3BvbnNlLmJvZHkgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY292ZXJ5IGZhaWxlZCB3aXRoIG5vIGRhdGEgWyR7dXJsfV1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBhc1N0cmluZyA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhc1N0cmluZy5zcGxpdCgnLCcpO1xuXG4gICAgcmV0dXJuIGVuZFBvaW50cy5tYXAoZW5kUG9pbnQgPT4gbmV3IEVuZFBvaW50KGVuZFBvaW50LCB0aW1lb3V0KSk7XG4gIH1cblxuICBhc3luYyBkaXNjb3ZlckNsb3Nlc3RFbmRQb2ludCh0aW1lb3V0OiBudW1iZXIgPSBkZWZhdWx0VGltZW91dCk6IFByb21pc2U8RW5kUG9pbnQ+IHtcbiAgICBjb25zdCB1cmwgPSBEaXNjb3ZlcnlVcmkuYnVpbGREaXNjb3ZlcnlVcmwodGhpcy5fdXJpKTtcbiAgICBjb25zdCBlbmRQb2ludHMgPSBhd2FpdCB0aGlzLmRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzKG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKSwgdGltZW91dCk7XG4gICAgbGV0IGZhaWxlZFJlcXVlc3RzID0gMDtcbiAgICBjb25zdCBwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCA9ICgpOiBQcm9taXNlPHZvaWQ+ID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChmYWlsZWRSZXF1ZXN0cyA+PSBlbmRQb2ludHMubGVuZ3RoKSB7XG4gICAgICAgIHJlamVjdChgRGlzY292ZXJ5IG9mIFske2VuZFBvaW50cy5sZW5ndGh9XSBlbmRwb2ludHMgZnJvbSBbJHt1cmx9XSBmYWlsZWQsIHByZXZlbnRpbmcgaXQgZnJvbSBjb21wbGV0aW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgZW5kUG9pbnQgPSBhd2FpdCBQcm9taXNlLnJhY2UoZW5kUG9pbnRzLm1hcChlbmRQb2ludCA9PiBlbmRQb2ludFxuICAgICAgLnBpbmcoKVxuICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICB0aGlzLl9sb2dnZXIud2FybignRmFpbGVkIHRvIHBpbmcgZW5kIHBvaW50IFslc10nLCBlbmRQb2ludCwgZSk7XG5cbiAgICAgICAgZmFpbGVkUmVxdWVzdHMrKztcblxuICAgICAgICByZXR1cm4gcHJvcGFnYXRlRmFpbHVyZUlmQWxsUmVxdWVzdHNGYWlsZWQoKTtcbiAgICAgIH0pXG4gICAgICAudGhlbih0aW1lID0+IHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnRGlzY292ZXJlZCBlbmQgcG9pbnQgWyVzXSB3aXRoIHRpbWUgWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCksIHRpbWUpO1xuICAgICAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Sb3VuZFRyaXBUaW1lLFxuICAgICAgICAgIHJ1bnRpbWU6IChub3cgLSBTREsucGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICAgICAgdmFsdWU6IHt1aW50NjQ6IHRpbWUgfHwgMH0sXG4gICAgICAgICAgcmVzb3VyY2U6IGVuZFBvaW50LnRvU3RyaW5nKCksXG4gICAgICAgICAga2luZDogJ3BpbmcnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBlbmRQb2ludDtcbiAgICAgIH0pKSk7XG5cbiAgICByZXR1cm4gZW5kUG9pbnQ7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgU3ViamVjdCBmcm9tICcuLi8uLi9yeC9TdWJqZWN0JztcbmltcG9ydCBWZXJzaW9uTWFuYWdlciBmcm9tICcuLi92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcbmltcG9ydCBQYXJhbWV0ZXJzIGZyb20gJy4uLy4uL2Vudmlyb25tZW50L1BhcmFtZXRlcnMnO1xuaW1wb3J0IHtkZWZhdWx0RGlzY292ZXJ5VXJpfSBmcm9tICcuLi9kZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpc2NvdmVyeVVyaSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kaXNjb3ZlcnlVcmk6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0PHN0cmluZz4oZGVmYXVsdERpc2NvdmVyeVVyaSk7XG5cbiAgc3RhdGljIGdldCB1cmkoKTogU3ViamVjdDxzdHJpbmc+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5VXJpLl9kaXNjb3ZlcnlVcmk7XG4gIH1cblxuICBzdGF0aWMgYnVpbGREaXNjb3ZlcnlVcmwodXJpOiBVUkwpOiBzdHJpbmcge1xuICAgIGNvbnN0IHVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJpLnRvU3RyaW5nKCkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVybC5zZWFyY2hQYXJhbXMuc2V0KCd2ZXJzaW9uJywgc2RrVmVyc2lvbik7XG4gICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQoJ2ludGVudGlvbnMnLCBpbnRlbnRpb25zKTtcbiAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgnXycsIGAke0RhdGUubm93KCl9YCk7XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lID09PSAnLycpIHtcbiAgICAgIHVybC5wYXRobmFtZSA9ICcvcGNhc3QvZW5kUG9pbnRzJztcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7XG4gIH1cblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGlzY292ZXJ5VXJpIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCB7SUxvZ2dlcn0gZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckludGVyZmFjZSc7XG5pbXBvcnQgTG9nZ2VyRmFjdG9yeSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VyRmFjdG9yeSc7XG5pbXBvcnQgRWRnZUF1dGhQYXJzZXIgZnJvbSAnLi4vLi4vZWRnZUF1dGgvRWRnZUF1dGhQYXJzZXInO1xuaW1wb3J0IHtFbmNvZGVkRWRnZVRva2VufSBmcm9tICcuLi8uLi9lZGdlQXV0aC9FbmNvZGVkRWRnZVRva2VuJztcblxuaW1wb3J0IHtcbiAgSVN1YnNjcmliZVJlc3BvbnNlLFxuICBJU3Vic2NyaWJlV2l0aE9mZmVyUmVxdWVzdCxcbiAgSVN1YnNjcmliZVdpdGhvdXRPZmZlclJlcXVlc3Rcbn0gZnJvbSAnLi4vYXBpL1N1YnNjcmliZSc7XG5pbXBvcnQge0lTZXRSZW1vdGVEZXNjcmlwdGlvblJlcXVlc3QsIElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlfSBmcm9tICcuLi9hcGkvU2V0UmVtb3RlRGVzY3JpcHRpb24nO1xuaW1wb3J0IHtJRGVzdHJveVN0cmVhbVJlcXVlc3QsIElEZXN0cm95U3RyZWFtUmVzcG9uc2V9IGZyb20gJy4uL2FwaS9EZXN0cm95U3RyZWFtJztcbmltcG9ydCB7SUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0LCBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlfSBmcm9tICcuLi9hcGkvQWRkSWNlQ2FuZGlkYXRlcyc7XG5pbXBvcnQgVmVyc2lvbk1hbmFnZXIgZnJvbSAnLi4vdmVyc2lvbi9WZXJzaW9uTWFuYWdlcic7XG5pbXBvcnQgUGFyYW1ldGVycyBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9QYXJhbWV0ZXJzJztcbmltcG9ydCB7Qml0cmF0ZU1vZGUsIEJpdHJhdGVTdGF0ZSwgSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlfSBmcm9tICcuLi9hcGkvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGUnO1xuaW1wb3J0IEJpdHJhdGVNb2RlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVNb2RlTWFwcGluZyc7XG5pbXBvcnQgQml0cmF0ZVN0YXRlTWFwcGluZyBmcm9tICcuL0JpdHJhdGVTdGF0ZU1hcHBpbmcnO1xuaW1wb3J0IHtCaXRzUGVyU2Vjb25kLCBNaWxsaXNlY29uZH0gZnJvbSAnLi4vLi4vdW5pdHMvVW5pdHMnO1xuaW1wb3J0IHtcbiAgSVB1Ymxpc2hSZXNwb25zZSxcbiAgSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0LFxuICBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QsXG4gIFB1Ymxpc2hTdGF0dXNcbn0gZnJvbSAnLi4vYXBpL1B1Ymxpc2gnO1xuXG5jb25zdCBhcGlWZXJzaW9uID0gNztcblxuZXhwb3J0IHR5cGUgU3Vic2NyaWJlU3RhdHVzID0gJ29rJyB8ICduby1zdHJlYW0nIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdnZW8tcmVzdHJpY3RlZCcgfCAnZ2VvLWJsb2NrZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZvcmJpZGRlbi10YWcnIHwgJ3BvcnQtaW4tcmFuZ2Utbm90LWZvdW5kJyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgUmVtb3ZlVGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSAnb2snIHwgJ25vdC1mb3VuZCcgfCAndW5hdXRob3JpemVkJyB8ICdyYXRlLWxpbWl0ZWQnIHwgJ2NhcGFjaXR5JyB8ICd0aW1lb3V0JyB8ICdmYWlsZWQnO1xuZXhwb3J0IHR5cGUgQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyA9ICdvaycgfCAnbm90LWZvdW5kJyB8ICd1bmF1dGhvcml6ZWQnIHwgJ3JhdGUtbGltaXRlZCcgfCAnY2FwYWNpdHknIHwgJ3RpbWVvdXQnIHwgJ2ZhaWxlZCc7XG5leHBvcnQgdHlwZSBEZXN0cm95U3RyZWFtU3RhdHVzID0gJ29rJyB8ICdub3QtZm91bmQnIHwgJ3VuYXV0aG9yaXplZCcgfCAncmF0ZS1saW1pdGVkJyB8ICdjYXBhY2l0eScgfCAndGltZW91dCcgfCAnZmFpbGVkJztcbmV4cG9ydCBpbnRlcmZhY2UgSVN0cmVhbSB7XG4gIHN0cmVhbUlkOiBzdHJpbmc7XG4gIHNoYXJlZFNlY3JldDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVN1YnNjcmliZVJlc3BvbnNlSW5pdCB7XG4gIHN0YXR1czogU3Vic2NyaWJlU3RhdHVzO1xuICBzdHJlYW0/OiBJU3RyZWFtO1xuICBsYWc/OiBNaWxsaXNlY29uZDtcbiAgcnRjQ29uZmlndXJhdGlvbj86IFJUQ0NvbmZpZ3VyYXRpb247XG4gIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2U/OiB7XG4gICAgc2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0O1xuICB9O1xuICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbn1cblxuZXhwb3J0IHR5cGUgSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7XG4gIHN0YXR1czogUHVibGlzaFN0YXR1cztcbiAgc3RyZWFtPzogSVN0cmVhbTtcbiAgbGFnPzogTWlsbGlzZWNvbmQ7XG4gIHJ0Y0NvbmZpZ3VyYXRpb24/OiBSVENDb25maWd1cmF0aW9uO1xuICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlPzoge1xuICAgIHNlc3Npb25EZXNjcmlwdGlvbjogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbiAgfTtcbiAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZT86IHtcbiAgICBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQ7XG4gIH07XG59O1xuXG5pbnRlcmZhY2UgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cztcbiAgc2Vzc2lvbkRlc2NyaXB0aW9uPzogUlRDU2Vzc2lvbkRlc2NyaXB0aW9uSW5pdDtcbn1cblxuaW50ZXJmYWNlIElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0IHtcbiAgc3RhdHVzOiBBZGRJY2VDYW5kaWRhdGVzU3RhdHVzO1xuICBvcHRpb25zPzogc3RyaW5nW107XG59XG5cbmludGVyZmFjZSBJU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVSZXNwb25zZUluaXQge1xuICBzdGF0dXM6IFNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzO1xufVxuXG5pbnRlcmZhY2UgSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQge1xuICBzdGF0dXM6IERlc3Ryb3lTdHJlYW1TdGF0dXM7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEVuZFBvaW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ0VuZFBvaW50Jyk7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3VyaTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF90aW1lb3V0OiBudW1iZXI7XG4gIHByaXZhdGUgX3JvdW5kVHJpcFRpbWU6IG51bWJlcjtcblxuICBjb25zdHJ1Y3Rvcih1cmk6IHN0cmluZywgdGltZW91dDogbnVtYmVyKSB7XG4gICAgdGhpcy5fdXJpID0gdXJpO1xuICAgIHRoaXMuX3RpbWVvdXQgPSB0aW1lb3V0O1xuXG4gICAgaWYgKCF0aW1lb3V0KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEVuZCBwb2ludCByZXF1aXJlcyBhIHRpbWVvdXRgKTtcbiAgICB9XG4gIH1cblxuICBnZXQgcm91bmRUcmlwVGltZSgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9yb3VuZFRyaXBUaW1lO1xuICB9XG5cbiAgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYEVuZFBvaW50W3VyaT0ke3RoaXMuX3VyaX1dYDtcbiAgfVxuXG4gIGFzeW5jIHBpbmcoKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkUGluZ1VybCgpO1xuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnR0VUJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZSdcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KChfLCByZWplY3QpID0+XG4gICAgICAgIEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcihgUGluZyB0aW1lZCBvdXQgWyR7dXJsfV1gKSksIHRoaXMuX3RpbWVvdXQpKVxuICAgIF0pO1xuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcblxuICAgIGlmICghcmVzcG9uc2Uub2spIHsgLyogSGFuZGxlICovXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFBpbmcgZmFpbGVkIFske3VybH1dIFske3Jlc3BvbnNlLnN0YXR1c31dYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcm91bmRUcmlwVGltZSA9IGZpbmlzaGVkIC0gc3RhcnQ7XG5cbiAgICByZXR1cm4gdGhpcy5fcm91bmRUcmlwVGltZTtcbiAgfVxuXG4gIGFzeW5jIHN1YnNjcmliZSh0b2tlbjogRW5jb2RlZEVkZ2VUb2tlbiwgbG9jYWxTZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQsIGZhaWx1cmVDb3VudDogbnVtYmVyKTogUHJvbWlzZTxJU3Vic2NyaWJlUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdGVuYW5jeSA9IEVkZ2VBdXRoUGFyc2VyLnBhcnNlVG9rZW4odG9rZW4pLnRlbmFuY3k7XG5cbiAgICBpZiAoIXRlbmFuY3kpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHBhcnNlIHRva2VuIFslc10nLCB0b2tlbik7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAndW5hdXRob3JpemVkJ307XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbdGVuYW5jeSwgJ3N0cmVhbScsICdzdWJzY3JpYmUnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVN1YnNjcmliZVdpdGhPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgc2V0UmVtb3RlRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICAgICAgdHlwZTogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgICAgIHNkcDogbG9jYWxTZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvbjoge2FwaVZlcnNpb259XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJU3Vic2NyaWJlV2l0aG91dE9mZmVyUmVxdWVzdCA9IHtcbiAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgY2xpZW50VmVyc2lvbixcbiAgICAgICAgYmVhcmVyVG9rZW46IHRva2VuLFxuICAgICAgICBmYWlsdXJlQ291bnQsXG4gICAgICAgIGh0dHBSb3VuZFRyaXBUaW1lOiB0aGlzLl9yb3VuZFRyaXBUaW1lLFxuICAgICAgICBjcmVhdGVPZmZlckRlc2NyaXB0aW9uOiB7YXBpVmVyc2lvbn1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgbmV3IEVycm9yKGBTdWJzY3JpYmUgdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gc3Vic2NyaWJlJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBTdWJzY3JpYmVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1N1YnNjcmliZVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzdWJzY3JpYmVSZXNwb25zZSA9IGF3YWl0IHRoaXMuY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHN1YnNjcmliZSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBzdWJzY3JpYmVSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gc3Vic2NyaWJlUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBwdWJsaXNoKG5hbWU6IHN0cmluZywgdG9rZW46IEVuY29kZWRFZGdlVG9rZW4sIGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uOiBSVENTZXNzaW9uRGVzY3JpcHRpb25Jbml0LCBmYWlsdXJlQ291bnQ6IG51bWJlcik6IFByb21pc2U8SVB1Ymxpc2hSZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCB0ZW5hbmN5ID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikudGVuYW5jeTtcblxuICAgIGlmICghdGVuYW5jeSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcGFyc2UgdG9rZW4gWyVzXScsIHRva2VuKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICd1bmF1dGhvcml6ZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFt0ZW5hbmN5LCAnc3RyZWFtJywgJ3B1Ymxpc2gnXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGNsaWVudFZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuXG4gICAgaWYgKGZhaWx1cmVDb3VudCA9PT0gMCAmJiBsb2NhbFNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgY29uc3QgYm9keVdpdGhPZmZlcjogSVB1Ymxpc2hXaXRoT2ZmZXJSZXF1ZXN0ID0ge1xuICAgICAgICBhcGlWZXJzaW9uLFxuICAgICAgICBjbGllbnRWZXJzaW9uLFxuICAgICAgICBiZWFyZXJUb2tlbjogdG9rZW4sXG4gICAgICAgIGZhaWx1cmVDb3VudCxcbiAgICAgICAgaHR0cFJvdW5kVHJpcFRpbWU6IHRoaXMuX3JvdW5kVHJpcFRpbWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uOiB7XG4gICAgICAgICAgYXBpVmVyc2lvbixcbiAgICAgICAgICBzZXNzaW9uRGVzY3JpcHRpb246IHtcbiAgICAgICAgICAgIHR5cGU6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnR5cGUsXG4gICAgICAgICAgICBzZHA6IGxvY2FsU2Vzc2lvbkRlc2NyaXB0aW9uLnNkcFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb246IHtcbiAgICAgICAgICBzdHJlYW1JZDogJycsXG4gICAgICAgICAgYXBpVmVyc2lvblxuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keVdpdGhPZmZlcikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBib2R5V2l0aG91dE9mZmVyOiBJUHVibGlzaFdpdGhvdXRPZmZlclJlcXVlc3QgPSB7XG4gICAgICAgIGFwaVZlcnNpb24sXG4gICAgICAgIGNsaWVudFZlcnNpb24sXG4gICAgICAgIGJlYXJlclRva2VuOiB0b2tlbixcbiAgICAgICAgZmFpbHVyZUNvdW50LFxuICAgICAgICBodHRwUm91bmRUcmlwVGltZTogdGhpcy5fcm91bmRUcmlwVGltZSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvbjoge1xuICAgICAgICAgIHN0cmVhbUlkOiAnJyxcbiAgICAgICAgICBhcGlWZXJzaW9uXG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5V2l0aG91dE9mZmVyKSk7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGxldCBodHRwUmVzcG9uc2U6IFJlc3BvbnNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGxldCB0aW1lb3V0OiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICAgICAgaHR0cFJlc3BvbnNlID0gYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgICAgR2xvYmFsU2NvcGUuZmV0Y2godXJsLCB7XG4gICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgICAgYm9keTogZm9ybURhdGFcbiAgICAgICAgfSksXG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPihyZXNvbHZlID0+XG4gICAgICAgICAgdGltZW91dCA9IEdsb2JhbFNjb3BlLnNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcHVibGlzaCcsIG5ldyBFcnJvcihgUHVibGlzaCB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBwdWJsaXNoJywgZSk7XG5cbiAgICAgIHJldHVybiB7c3RhdHVzOiAnZmFpbGVkJ307XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhdHVzOiBQdWJsaXNoU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKGh0dHBSZXNwb25zZSk7XG5cbiAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICByZXR1cm4ge3N0YXR1c307XG4gICAgfVxuXG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeSwgaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5kZWJ1ZygnR290IHB1Ymxpc2ggcmVzcG9uc2UgWyVqXSBpbiBbJXNdIG1zJywgc3Vic2NyaWJlUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtOiBJU3RyZWFtLCBzZXNzaW9uRGVzY3JpcHRpb246IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbkluaXQpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzY3JpcHRpb24nLCAncmVtb3RlJ10pLnRvU3RyaW5nKCk7XG4gICAgY29uc3QgZm9ybURhdGEgPSBuZXcgR2xvYmFsU2NvcGUuRm9ybURhdGEoKTtcbiAgICBjb25zdCBib2R5OiBJU2V0UmVtb3RlRGVzY3JpcHRpb25SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHNlc3Npb25EZXNjcmlwdGlvbjoge1xuICAgICAgICB0eXBlOiBzZXNzaW9uRGVzY3JpcHRpb24udHlwZSxcbiAgICAgICAgc2RwOiBzZXNzaW9uRGVzY3JpcHRpb24uc2RwXG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uJywgbmV3IEVycm9yKGBTZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHRpbWVkIG91dCBbJHt1cmx9XWApKTtcbiAgICAgICAgICAgIHJlc29sdmUoe3N0YXR1czogNDA4fSBhcyBSZXNwb25zZSk7XG4gICAgICAgICAgfSwgdGhpcy5fdGltZW91dCkpXG4gICAgICBdKVxuICAgICAgICAuZmluYWxseSgoKSA9PiB7XG4gICAgICAgICAgaWYgKHRpbWVvdXQpIHtcbiAgICAgICAgICAgIEdsb2JhbFNjb3BlLmNsZWFyVGltZW91dCh0aW1lb3V0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCByZW1vdGUgZGVzY3JpcHRpb24nLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzID0gdGhpcy5tYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKGh0dHBSZXNwb25zZSk7XG5cbiAgICB0aGlzLl9sb2dnZXIuZGVidWcoJ0dvdCBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBhc3luYyBsaW1pdEJpdHJhdGUoXG4gICAgc3RyZWFtOiBJU3RyZWFtLFxuICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kczogbnVtYmVyLFxuICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQ6IEJpdHNQZXJTZWNvbmQsXG4gICAgYml0cmF0ZVN0YXRlOiBCaXRyYXRlU3RhdGUsXG4gICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlLFxuICApOiBQcm9taXNlPElTZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnYml0cmF0ZSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSVNldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGVsYXBzZWRJbk1pbGxpc2Vjb25kcyxcbiAgICAgIGJpdHJhdGVJbkJpdHNQZXJTZWNvbmQsXG4gICAgICBiaXRyYXRlU3RhdGU6IEJpdHJhdGVTdGF0ZU1hcHBpbmcuY29udmVydEJpdHJhdGVTdGF0ZVRvQml0cmF0ZVN0YXRlVHlwZShiaXRyYXRlU3RhdGUpLFxuICAgICAgYml0cmF0ZU1vZGU6IEJpdHJhdGVNb2RlTWFwcGluZy5jb252ZXJ0Qml0cmF0ZU1vZGVUb0JpdHJhdGVNb2RlVHlwZShiaXRyYXRlTW9kZSlcbiAgICB9O1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KGJvZHkpKTtcblxuICAgIGNvbnN0IHN0YXJ0ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgaHR0cFJlc3BvbnNlOiBSZXNwb25zZTtcblxuICAgIHRyeSB7XG4gICAgICBsZXQgdGltZW91dDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgICAgIGh0dHBSZXNwb25zZSA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgIEdsb2JhbFNjb3BlLmZldGNoKHVybCwge1xuICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICAgIGJvZHk6IGZvcm1EYXRhXG4gICAgICAgIH0pLFxuICAgICAgICBuZXcgUHJvbWlzZTxSZXNwb25zZT4ocmVzb2x2ZSA9PlxuICAgICAgICAgIHRpbWVvdXQgPSBHbG9iYWxTY29wZS5zZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIHRvIHNldCBsaW1pdCBiaXRyYXRlIHRpbWVkJywgbmV3IEVycm9yKGBTZXQgbGltaXQgYml0cmF0ZSB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzZXQgbGltaXQgYml0cmF0ZSB0aW1lZCcsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb1NldFRlbXBvcmFyeU1heGltYWxCaXRyYXRlU3RhdHVzKGh0dHBSZXNwb25zZSk7XG4gICAgY29uc3QgZmluaXNoZWQgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBzZXQgbGltaXQgYml0cmF0ZSByZXNwb25zZSBbJXNdIGluIFslc10gbXMnLCBzdGF0dXMsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIHtzdGF0dXN9O1xuICB9XG5cbiAgYXN5bmMgYWRkSWNlQ2FuZGlkYXRlcyhzdHJlYW06IElTdHJlYW0sIGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdLCBkaXNjb3ZlcnlDb21wbGV0ZWQ6IGJvb2xlYW4sIG9wdGlvbnM6IHN0cmluZ1tdID0gW10pOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgdXJsID0gdGhpcy5idWlsZFVybChbc3RyZWFtLnRlbmFuY3ksICdzdHJlYW0nLCBzdHJlYW0uc3RyZWFtSWQsICdpY2UnLCAnY2FuZGlkYXRlcyddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSUFkZEljZUNhbmRpZGF0ZXNSZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIGNhbmRpZGF0ZXMsXG4gICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQsXG4gICAgICBvcHRpb25zXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YVxuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBuZXcgRXJyb3IoYEFkZCBpY2UgY2FuZGlkYXRlcyB0aW1lZCBvdXQgWyR7dXJsfV1gKSk7XG4gICAgICAgICAgICByZXNvbHZlKHtzdGF0dXM6IDQwOH0gYXMgUmVzcG9uc2UpO1xuICAgICAgICAgIH0sIHRoaXMuX3RpbWVvdXQpKVxuICAgICAgXSlcbiAgICAgICAgLmZpbmFsbHkoKCkgPT4ge1xuICAgICAgICAgIGlmICh0aW1lb3V0KSB7XG4gICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBhZGQgaWNlIGNhbmRpZGF0ZXMnLCBlKTtcblxuICAgICAgcmV0dXJuIHtzdGF0dXM6ICdmYWlsZWQnfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0dXM6IEFkZEljZUNhbmRpZGF0ZXNTdGF0dXMgPSB0aGlzLm1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMoaHR0cFJlc3BvbnNlKTtcblxuICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgIHJldHVybiB7c3RhdHVzfTtcbiAgICB9XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlID0gYXdhaXQgdGhpcy5jb252ZXJ0SHR0cFJlc3BvbnNlVG9BZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2UoaHR0cFJlc3BvbnNlKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdHb3QgYWRkIElDRSBjYW5kaWRhdGVzIHJlc3BvbnNlIFslal0gaW4gWyVzXSBtcycsIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSwgZmluaXNoZWQgLSBzdGFydCk7XG5cbiAgICByZXR1cm4gYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICB9XG5cbiAgYXN5bmMgZGVzdHJveVN0cmVhbShzdHJlYW06IElTdHJlYW0sIHJlYXNvbjogc3RyaW5nKTogUHJvbWlzZTxJRGVzdHJveVN0cmVhbVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IHVybCA9IHRoaXMuYnVpbGRVcmwoW3N0cmVhbS50ZW5hbmN5LCAnc3RyZWFtJywgc3RyZWFtLnN0cmVhbUlkLCAnZGVzdHJveSddKS50b1N0cmluZygpO1xuICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEdsb2JhbFNjb3BlLkZvcm1EYXRhKCk7XG4gICAgY29uc3QgYm9keTogSURlc3Ryb3lTdHJlYW1SZXF1ZXN0ID0ge1xuICAgICAgYXBpVmVyc2lvbixcbiAgICAgIHNoYXJlZFNlY3JldDogc3RyZWFtLnNoYXJlZFNlY3JldCxcbiAgICAgIHJlYXNvbixcbiAgICAgIG9wdGlvbnM6IFtdXG4gICAgfTtcblxuICAgIGZvcm1EYXRhLmFwcGVuZCgnanNvbkJvZHknLCBKU09OLnN0cmluZ2lmeShib2R5KSk7XG5cbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgbGV0IGh0dHBSZXNwb25zZTogUmVzcG9uc2U7XG5cbiAgICB0cnkge1xuICAgICAgbGV0IHRpbWVvdXQ6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gICAgICBodHRwUmVzcG9uc2UgPSBhd2FpdCBQcm9taXNlLnJhY2UoW1xuICAgICAgICBHbG9iYWxTY29wZS5mZXRjaCh1cmwsIHtcbiAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgICBib2R5OiBmb3JtRGF0YSxcbiAgICAgICAgICBjYWNoZTogJ25vLWNhY2hlJ1xuICAgICAgICB9KSxcbiAgICAgICAgbmV3IFByb21pc2U8UmVzcG9uc2U+KHJlc29sdmUgPT5cbiAgICAgICAgICB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0ZhaWxlZCB0byBzdWJzY3JpYmUnLCBuZXcgRXJyb3IoYERlbGV0ZSBzdHJlYW0gdGltZWQgb3V0IFske3VybH1dYCkpO1xuICAgICAgICAgICAgcmVzb2x2ZSh7c3RhdHVzOiA0MDh9IGFzIFJlc3BvbnNlKTtcbiAgICAgICAgICB9LCB0aGlzLl90aW1lb3V0KSlcbiAgICAgIF0pXG4gICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICBpZiAodGltZW91dCkge1xuICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gZGVsZXRlIHN0cmVhbScsIGUpO1xuXG4gICAgICByZXR1cm4ge3N0YXR1czogJ2ZhaWxlZCd9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXR1czogRGVzdHJveVN0cmVhbVN0YXR1cyA9IHRoaXMubWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhodHRwUmVzcG9uc2UpO1xuXG4gICAgaWYgKHN0YXR1cyAhPT0gJ29rJykge1xuICAgICAgcmV0dXJuIHtzdGF0dXN9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBkZXN0cm95U3RyZWFtUmVzcG9uc2UgPSBhd2FpdCB0aGlzLmNvbnZlcnRIdHRwUmVzcG9uc2VUb0Rlc3Ryb3lTdHJlYW1SZXNwb25zZShodHRwUmVzcG9uc2UpO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0dvdCBkZXN0cm95IHN0cmVhbSByZXNwb25zZSBbJWpdIGluIFslc10gbXMnLCBkZXN0cm95U3RyZWFtUmVzcG9uc2UsIGZpbmlzaGVkIC0gc3RhcnQpO1xuXG4gICAgcmV0dXJuIGRlc3Ryb3lTdHJlYW1SZXNwb25zZTtcbiAgfVxuXG4gIGFzeW5jIGRlc3Ryb3lTdHJlYW1PblVubW91bnQoc3RyZWFtOiBJU3RyZWFtLCByZWFzb246IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICghbmF2aWdhdG9yPy5zZW5kQmVhY29uKSB7XG4gICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5kZXN0cm95U3RyZWFtKHN0cmVhbSwgcmVhc29uKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSB0aGlzLmJ1aWxkVXJsKFtzdHJlYW0udGVuYW5jeSwgJ3N0cmVhbScsIHN0cmVhbS5zdHJlYW1JZCwgJ2Rlc3Ryb3knXSkudG9TdHJpbmcoKTtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuICAgIGNvbnN0IGJvZHk6IElEZXN0cm95U3RyZWFtUmVxdWVzdCA9IHtcbiAgICAgIGFwaVZlcnNpb24sXG4gICAgICBzaGFyZWRTZWNyZXQ6IHN0cmVhbS5zaGFyZWRTZWNyZXQsXG4gICAgICByZWFzb24sXG4gICAgICBvcHRpb25zOiBbXVxuICAgIH07XG5cbiAgICBmb3JtRGF0YS5hcHBlbmQoJ2pzb25Cb2R5JywgSlNPTi5zdHJpbmdpZnkoYm9keSkpO1xuXG4gICAgbmF2aWdhdG9yLnNlbmRCZWFjb24odXJsLCBmb3JtRGF0YSk7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkVXJsKHBhdGg6IHN0cmluZ1tdKTogVVJMIHtcbiAgICBjb25zdCB1cmkgPSBuZXcgR2xvYmFsU2NvcGUuVVJMKHRoaXMuX3VyaSk7XG4gICAgY29uc3QgcGF0aEFzQXJyYXkgPSB1cmkucGF0aG5hbWUuc3BsaXQoJy8nKTtcblxuICAgIHBhdGhBc0FycmF5Lmxlbmd0aCA9IHBhdGhBc0FycmF5Lmxlbmd0aCAtIDE7XG5cbiAgICB1cmkucGF0aG5hbWUgPSBwYXRoQXNBcnJheS5jb25jYXQoLi4ucGF0aCkuam9pbignLycpO1xuXG4gICAgcmV0dXJuIHVyaTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRQaW5nVXJsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgdXJpID0gbmV3IEdsb2JhbFNjb3BlLlVSTCh0aGlzLl91cmkpO1xuICAgIGNvbnN0IHNka1ZlcnNpb24gPSBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uO1xuICAgIGNvbnN0IGludGVudGlvbnMgPSBQYXJhbWV0ZXJzLmRpc2NvdmVyeVBhcmFtZXRlcnMuaW50ZW50aW9ucztcblxuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCd0eXBlJywgJ2h0dHAnKTtcbiAgICB1cmkuc2VhcmNoUGFyYW1zLnNldCgndmVyc2lvbicsIHNka1ZlcnNpb24pO1xuICAgIHVyaS5zZWFyY2hQYXJhbXMuc2V0KCdpbnRlbnRpb25zJywgaW50ZW50aW9ucyk7XG4gICAgdXJpLnNlYXJjaFBhcmFtcy5zZXQoJ18nLCBgJHtEYXRlLm5vdygpfWApO1xuXG4gICAgcmV0dXJuIHVyaS50b1N0cmluZygpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9QdWJsaXNoU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFB1Ymxpc2hTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDAyOlxuICAgICAgICByZXR1cm4gJ2dlby1yZXN0cmljdGVkJztcbiAgICAgIGNhc2UgNDAzOlxuICAgICAgICByZXR1cm4gJ2dlby1ibG9ja2VkJztcbiAgICAgIGNhc2UgNDA2OlxuICAgICAgICByZXR1cm4gJ21pc3NpbmctY2hhbm5lbC1vci1yb29tLWlkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA0MDk6XG4gICAgICAgIHJldHVybiAncG9ydC1pbi1yYW5nZS1ub3QtZm91bmQnO1xuICAgICAgY2FzZSA0MTU6XG4gICAgICAgIHJldHVybiAnZm9yYmlkZGVuLXRhZyc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzKHJlc3BvbnNlOiBSZXNwb25zZSk6IFN1YnNjcmliZVN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDI6XG4gICAgICAgIHJldHVybiAnZ2VvLXJlc3RyaWN0ZWQnO1xuICAgICAgY2FzZSA0MDM6XG4gICAgICAgIHJldHVybiAnZ2VvLWJsb2NrZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDQwOTpcbiAgICAgICAgcmV0dXJuICdwb3J0LWluLXJhbmdlLW5vdC1mb3VuZCc7XG4gICAgICBjYXNlIDQxNTpcbiAgICAgICAgcmV0dXJuICdmb3JiaWRkZW4tdGFnJztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYXBIdHRwU3RhdHVzVG9TZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogU2V0VGVtcG9yYXJ5TWF4aW1hbEJpdHJhdGVTdGF0dXMge1xuICAgIGlmICghcmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlc3BvbnNlLnN0YXR1cykge1xuICAgICAgY2FzZSAyMDA6XG4gICAgICAgIHJldHVybiAnb2snO1xuICAgICAgY2FzZSA0MDE6XG4gICAgICAgIHJldHVybiAndW5hdXRob3JpemVkJztcbiAgICAgIGNhc2UgNDA4OlxuICAgICAgICByZXR1cm4gJ3RpbWVvdXQnO1xuICAgICAgY2FzZSA1MDM6XG4gICAgICAgIHJldHVybiAnY2FwYWNpdHknO1xuICAgICAgY2FzZSA1MDQ6XG4gICAgICAgIHJldHVybiAncmF0ZS1saW1pdGVkJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnZmFpbGVkJztcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIG1hcEh0dHBTdGF0dXNUb0FkZEljZUNhbmRpZGF0ZXNTdGF0dXMocmVzcG9uc2U6IFJlc3BvbnNlKTogQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyB7XG4gICAgaWYgKCFyZXNwb25zZSkge1xuICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cblxuICAgIHN3aXRjaCAocmVzcG9uc2Uuc3RhdHVzKSB7XG4gICAgICBjYXNlIDIwMDpcbiAgICAgICAgcmV0dXJuICdvayc7XG4gICAgICBjYXNlIDQwMTpcbiAgICAgICAgcmV0dXJuICd1bmF1dGhvcml6ZWQnO1xuICAgICAgY2FzZSA0MDg6XG4gICAgICAgIHJldHVybiAndGltZW91dCc7XG4gICAgICBjYXNlIDUwMzpcbiAgICAgICAgcmV0dXJuICdjYXBhY2l0eSc7XG4gICAgICBjYXNlIDUwNDpcbiAgICAgICAgcmV0dXJuICdyYXRlLWxpbWl0ZWQnO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdmYWlsZWQnO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgbWFwSHR0cFN0YXR1c1RvU2V0RGVzdHJveVN0cmVhbVN0YXR1cyhyZXNwb25zZTogUmVzcG9uc2UpOiBEZXN0cm95U3RyZWFtU3RhdHVzIHtcbiAgICBpZiAoIXJlc3BvbnNlKSB7XG4gICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuXG4gICAgc3dpdGNoIChyZXNwb25zZS5zdGF0dXMpIHtcbiAgICAgIGNhc2UgMjAwOlxuICAgICAgICByZXR1cm4gJ29rJztcbiAgICAgIGNhc2UgNDAxOlxuICAgICAgICByZXR1cm4gJ3VuYXV0aG9yaXplZCc7XG4gICAgICBjYXNlIDQwODpcbiAgICAgICAgcmV0dXJuICd0aW1lb3V0JztcbiAgICAgIGNhc2UgNTAzOlxuICAgICAgICByZXR1cm4gJ2NhcGFjaXR5JztcbiAgICAgIGNhc2UgNTA0OlxuICAgICAgICByZXR1cm4gJ3JhdGUtbGltaXRlZCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9TdWJzY3JpYmVSZXNwb25zZSh0ZW5hbmN5OiBzdHJpbmcsIHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SVN1YnNjcmliZVJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVN1YnNjcmliZVJlc3BvbnNlO1xuICAgIGNvbnN0IHN1YnNjcmliZVJlc3BvbnNlOiBJU3Vic2NyaWJlUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgc3Vic2NyaWJlUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBzdWJzY3JpYmVSZXNwb25zZS5sYWcgPSBkYXRhLmxhZztcblxuICAgIGlmIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YS5ydGNDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLnJ0Y0NvbmZpZ3VyYXRpb24gPSB0aGlzLmNvbnZlcnRJUnRjQ29uZmlndXJhdGlvblRvUlRDQ29uZmlndXJhdGlvbihkYXRhLnJ0Y0NvbmZpZ3VyYXRpb24pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgc3Vic2NyaWJlUmVzcG9uc2UuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHN1YnNjcmliZVJlc3BvbnNlLmNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbn07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1YnNjcmliZVJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UodGVuYW5jeTogc3RyaW5nLCByZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElQdWJsaXNoUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJUHVibGlzaFJlc3BvbnNlO1xuICAgIGNvbnN0IHB1Ymxpc2hSZXNwb25zZTogSVB1Ymxpc2hSZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICBwdWJsaXNoUmVzcG9uc2Uuc3RyZWFtID0ge1xuICAgICAgdGVuYW5jeSxcbiAgICAgIHN0cmVhbUlkOiBkYXRhLnN0cmVhbUlkLFxuICAgICAgc2hhcmVkU2VjcmV0OiBkYXRhLnNoYXJlZFNlY3JldFxuICAgIH07XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgaWYgKGRhdGEucnRjQ29uZmlndXJhdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UucnRjQ29uZmlndXJhdGlvbiA9IHRoaXMuY29udmVydElSdGNDb25maWd1cmF0aW9uVG9SVENDb25maWd1cmF0aW9uKGRhdGEucnRjQ29uZmlndXJhdGlvbik7XG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhLnNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2UgJiYgZGF0YS5zZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2Uuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSA9IHtzZXNzaW9uRGVzY3JpcHRpb246IGRhdGEuc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb259O1xuICAgICAgfVxuXG4gICAgICBpZiAoZGF0YS5jcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgICAgcHVibGlzaFJlc3BvbnNlLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UgPSB7c2Vzc2lvbkRlc2NyaXB0aW9uOiBkYXRhLmNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlICYmIGRhdGEuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbikge1xuICAgICAgICBwdWJsaXNoUmVzcG9uc2UuY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlID0ge3Nlc3Npb25EZXNjcmlwdGlvbjogZGF0YS5jcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9ufTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcHVibGlzaFJlc3BvbnNlO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbjogUlRDQ29uZmlndXJhdGlvbik6IFJUQ0NvbmZpZ3VyYXRpb24ge1xuICAgIGNvbnN0IHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24gPSB7aWNlU2VydmVyczogW119O1xuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7XG4gICAgICBydGNDb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSA9IGNvbmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5O1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlndXJhdGlvbi5pY2VDYW5kaWRhdGVQb29sU2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlQ2FuZGlkYXRlUG9vbFNpemUgPSBjb25maWd1cmF0aW9uLmljZUNhbmRpZGF0ZVBvb2xTaXplO1xuICAgIH1cblxuICAgIGlmIChjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHtcbiAgICAgIGNvbnN0IGljZVNlcnZlcnM6IFJUQ0ljZVNlcnZlcltdID0gW107XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGljZVNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgdXJsczogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzW2ldLnVybHMsXG4gICAgICAgICAgdXNlcm5hbWU6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVyc1tpXS51c2VybmFtZSxcbiAgICAgICAgICBjcmVkZW50aWFsOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnNbaV0uY3JlZGVudGlhbFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcnRjQ29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzID0gaWNlU2VydmVycztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHtcbiAgICAgIHJ0Y0NvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5ID0gY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3k7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZ3VyYXRpb24ucnRjcE11eFBvbGljeSkge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5ID0gY29uZmlndXJhdGlvbi5ydGNwTXV4UG9saWN5O1xuICAgIH1cblxuICAgIHJldHVybiBydGNDb25maWd1cmF0aW9uO1xuICB9XG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElTZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlSW5pdD4ge1xuICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCkgYXMgSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gICAgY29uc3Qgc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZTogSVNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2VJbml0ID0ge3N0YXR1czogZGF0YS5zdGF0dXN9O1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5zZXNzaW9uRGVzY3JpcHRpb24pIHtcbiAgICAgIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uID0gZGF0YS5zZXNzaW9uRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2U7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZShyZXNwb25zZTogUmVzcG9uc2UpOiBQcm9taXNlPElBZGRJY2VDYW5kaWRhdGVzUmVzcG9uc2VJbml0PiB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKSBhcyBJQWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlO1xuICAgIGNvbnN0IGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTogSUFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZUluaXQgPSB7XG4gICAgICBzdGF0dXM6IGRhdGEuc3RhdHVzLFxuICAgICAgb3B0aW9uczogW11cbiAgICB9O1xuXG4gICAgaWYgKGRhdGEpIHtcbiAgICAgIGlmIChkYXRhLm9wdGlvbnMpIHtcbiAgICAgICAgYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlLm9wdGlvbnMgPSBkYXRhLm9wdGlvbnM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFkZEljZUNhbmRpZGF0ZXNSZXNwb25zZTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY29udmVydEh0dHBSZXNwb25zZVRvRGVzdHJveVN0cmVhbVJlc3BvbnNlKHJlc3BvbnNlOiBSZXNwb25zZSk6IFByb21pc2U8SURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQ+IHtcbiAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzcG9uc2UuanNvbigpIGFzIElEZXN0cm95U3RyZWFtUmVzcG9uc2U7XG4gICAgY29uc3QgZGVzdHJveVN0cmVhbTogSURlc3Ryb3lTdHJlYW1SZXNwb25zZUluaXQgPSB7c3RhdHVzOiBkYXRhLnN0YXR1c307XG5cbiAgICByZXR1cm4gZGVzdHJveVN0cmVhbTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uLy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi8uLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuaW1wb3J0IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgZnJvbSAnLi9DaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2h1bmtlZFN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignQ2h1bmtlZFN0cmVhbScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9jaGFubmVsQ29udGV4dDogQ2hhbm5lbENvbnRleHQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGU7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vbml0b3JEaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9oYW5kbGVTdHJlYW1GYWlsdXJlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcml2YXRlIF9zdHJlYW1TdGF0aXN0aWNzOiBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljcztcbiAgcHJpdmF0ZSBfbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG5cbiAgY29uc3RydWN0b3IoY2hhbm5lbENvbnRleHQsIGNodW5rZWRTdHJlYW1QbGF5YmFja01vZGU6IENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUgPSBjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlO1xuICAgIHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUgPSBoYW5kbGVTdHJlYW1GYWlsdXJlO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaTogVVJMLCB0b2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkIHwgSURpc3Bvc2FibGU+IHtcbiAgICByZXR1cm4gRGlzY292ZXJ5LmRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmcodXJpKVxuICAgICAgLnRoZW4oZW5kUG9pbnQgPT4ge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5vbmxpbmUudmFsdWUgPSB0cnVlO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZSA9IGVuZFBvaW50O1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnQ29ubmVjdGluZyB0byBbJXNdJywgZW5kUG9pbnQudG9TdHJpbmcoKSk7XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbnVsbCwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5fY2hhbm5lbENvbnRleHQubWFwU3Vic2NyaWJlU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1cyk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2ZmZXJTZHAgPSBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcDtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgICBvcmlnaW5TdGFydFRpbWU6IERhdGUubm93KCkgLSBsYWcgKyB0aGlzLl9jaGFubmVsQ29udGV4dC5lbmRQb2ludC52YWx1ZS5yb3VuZFRyaXBUaW1lIC8gMixcbiAgICAgICAgICBsYWdcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gQ2h1bmtlZFN0cmVhbWluZy5zdGFydCh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBvZmZlclNkcCwgb3B0aW9ucylcbiAgICAgICAgICAudGhlbihwbGF5ZXIgPT4ge1xuICAgICAgICAgICAgdGhpcy5tb25pdG9yKHBsYXllcik7XG5cbiAgICAgICAgICAgIHJldHVybiBwbGF5ZXI7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoJ0NodW5rZWRTdHJlYW1pbmcgZmFpbGVkJywgZSk7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5TdG9wcGVkO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIG1vbml0b3IocGxheWVyOiBJRGlzcG9zYWJsZSk6IHZvaWQge1xuICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICBjb25zdCB0aW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBuZXdTdHJlYW1TdGF0aXN0aWNzID0gQ2h1bmtlZFN0cmVhbWluZy5nZXRTdGF0cygpO1xuXG4gICAgICBpZiAodGhpcy5fY2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSA9PT0gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5MaXZlXG4gICAgICAgICAgJiYgbmV3U3RyZWFtU3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPT09IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICAgICAgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLmN1cnJlbnRUaW1lID09PSB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuZHVyYXRpb25cbiAgICAgICkge1xuICAgICAgICB0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG4gICAgICAgIHBsYXllci5kaXNwb3NlKCk7XG4gICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIGVuZCBvZiBzdHJlYW0nLCBlKTtcbiAgICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzICYmXG4gICAgICAgICF0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmXG4gICAgICAgIHRoaXMuX3N0cmVhbVN0YXRpc3RpY3MuY3VycmVudFRpbWUgPj0gbmV3U3RyZWFtU3RhdGlzdGljcy5jdXJyZW50VGltZSAmJlxuICAgICAgICAgICh0aGlzLl9zdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCA+PSBuZXdTdHJlYW1TdGF0aXN0aWNzLmRhdGFCdWZmZXJlZCB8fCAhbmV3U3RyZWFtU3RhdGlzdGljcy5kYXRhQnVmZmVyZWQpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCsrO1xuXG4gICAgICAgIGlmICh0aGlzLl9tb25pdG9yRmFpbHVyZUNvdW50ID4gNCkge1xuICAgICAgICAgIHRoaXMuX21vbml0b3JGYWlsdXJlQ291bnQgPSAwO1xuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sb2FkaW5nLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgICBwbGF5ZXIuZGlzcG9zZSgpO1xuICAgICAgICAgIHRoaXMuX21vbml0b3JEaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5faGFuZGxlU3RyZWFtRmFpbHVyZSgpXG4gICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlJywgZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fbW9uaXRvckZhaWx1cmVDb3VudCA9IDA7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2VkICYmIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID09PSBDaGFubmVsU3RhdGUuUGxheWluZykge1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5QYXVzZWQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnBhdXNlZCAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSAhPT0gQ2hhbm5lbFN0YXRlLlBsYXlpbmcpIHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGxheWluZztcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc3RyZWFtU3RhdGlzdGljcyA9IG5ld1N0cmVhbVN0YXRpc3RpY3M7XG5cbiAgICAgIHRoaXMubW9uaXRvcihwbGF5ZXIpO1xuICAgIH0sIDEwMDApO1xuXG4gICAgdGhpcy5fbW9uaXRvckRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgfSkpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9tb25pdG9yRGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5lbnVtIENodW5rZWRTdHJlYW1QbGF5YmFja01vZGUge1xuICAgIExpdmUgPSAxLFxuICAgIE9uZERlbWFuZCA9IDJcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZTsiLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgV2ViUGxheWVyIGZyb20gJy4vV2ViUGxheWVyJztcbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBTaGFrYVBsYXllciBmcm9tICcuL1NoYWthUGxheWVyJztcbmltcG9ydCBIbHNQbGF5ZXIgZnJvbSAnLi9IbHNQbGF5ZXInO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IHtIbHNQbGF5ZXJUeXBlLCBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3MsIFNoYWthVHlwZSwgV2ViUGxheWVyVHlwZX0gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5cbmV4cG9ydCBjbGFzcyBDaHVua2VkU3RyZWFtaW5nIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BlbmRpbmcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX2hsc1BsYXllcjogSGxzUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3BoZW5peFdlYlBsYXllcjogV2ViUGxheWVyVHlwZTtcbiAgcHJpdmF0ZSBzdGF0aWMgX3NoYWthOiBTaGFrYVR5cGU7XG4gIHByaXZhdGUgc3RhdGljIF9vcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucztcbiAgcHJpdmF0ZSBzdGF0aWMgX3BsYXllcjogU2hha2FQbGF5ZXIgfCBXZWJQbGF5ZXIgfCBIbHNQbGF5ZXI7XG5cbiAgc3RhdGljIGdldCBobHNQbGF5ZXIoKTogSGxzUGxheWVyVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX2hsc1BsYXllcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgcGhlbml4V2ViUGxheWVyKCk6IFdlYlBsYXllclR5cGUge1xuICAgIHJldHVybiB0aGlzLl9waGVuaXhXZWJQbGF5ZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0IHNoYWthKCk6IFNoYWthVHlwZSB7XG4gICAgcmV0dXJuIHRoaXMuX3NoYWthO1xuICB9XG5cbiAgc3RhdGljIGFzeW5jIHN0YXJ0KHZpZGVvRWxlbWVudDogSFRNTFZpZGVvRWxlbWVudCwgc3RyZWFtSWQ6IHN0cmluZywgb2ZmZXJTZHA6IHN0cmluZywgb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnMpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyIHx8IHRoaXMuX3NoYWthIHx8IHRoaXMuX3BoZW5peFdlYlBsYXllcikge1xuICAgICAgcmV0dXJuIHRoaXMubG9hZGVkKHZpZGVvRWxlbWVudCwgc3RyZWFtSWQsIG9mZmVyU2RwKTtcbiAgICB9XG5cbiAgICBpZiAoIVNESy53ZWJQbGF5ZXJMb2FkZXIgJiYgIVNESy5zaGFrYVBsYXllckxvYWRlciAmJiAhU0RLLmhsc0pzTG9hZGVyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkLWZlYXR1cmUsIGFkZCBzdHJlYW0gcGxheWVyJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgaWYgKFNESy5obHNKc0xvYWRlcikge1xuICAgICAgICB0aGlzLl9wZW5kaW5nID0gdHJ1ZTtcbiAgICAgICAgU0RLLmhsc0pzTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5faGxzUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsud2ViUGxheWVyTG9hZGVyKSB7XG4gICAgICAgIHRoaXMuX3BlbmRpbmcgPSB0cnVlO1xuICAgICAgICBTREsud2ViUGxheWVyTG9hZGVyKHBsYXllciA9PiB7XG4gICAgICAgICAgdGhpcy5fcGhlbml4V2ViUGxheWVyID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChTREsuc2hha2FQbGF5ZXJMb2FkZXIpIHtcbiAgICAgICAgdGhpcy5fcGVuZGluZyA9IHRydWU7XG4gICAgICAgIFNESy5zaGFrYVBsYXllckxvYWRlcihwbGF5ZXIgPT4ge1xuICAgICAgICAgIHRoaXMuX3NoYWthID0gcGxheWVyO1xuXG4gICAgICAgICAgaWYgKHRoaXMuX3BlbmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX3BlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgcmVzb2x2ZSh0aGlzLmxvYWRlZCh2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHBsYXkoUGxheWVyOiB0eXBlb2YgV2ViUGxheWVyIHwgdHlwZW9mIFNoYWthUGxheWVyIHwgdHlwZW9mIEhsc1BsYXllciwgdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBzdHJlYW1JZDogc3RyaW5nLCBvZmZlclNkcDogc3RyaW5nLCBvcHRpb25zOiBDaHVua2VkU3RyZWFtaW5nT3B0aW9ucyk6IFByb21pc2U8SURpc3Bvc2FibGU+IHtcbiAgICBjb25zdCBkYXNoTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tcGRcXD8/W15cXHNdKikvbSk7XG4gICAgY29uc3QgaGxzTWFuaWZlc3RVcmxNYXRjaCA9IG9mZmVyU2RwLm1hdGNoKC9hPXgtcGxheWxpc3Q6KFteXFxuXSpbLl1tM3U4XFw/P1teXFxzXSopL20pO1xuICAgIGNvbnN0IG1hbmlmZXN0VXJsID0gZGFzaE1hbmlmZXN0VXJsTWF0Y2ggJiYgZGFzaE1hbmlmZXN0VXJsTWF0Y2hbMV0gPyBkYXNoTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuICAgIGNvbnN0IHBsYXlsaXN0VXJsID0gaGxzTWFuaWZlc3RVcmxNYXRjaCAmJiBobHNNYW5pZmVzdFVybE1hdGNoWzFdID8gaGxzTWFuaWZlc3RVcmxNYXRjaFsxXSA6ICcnO1xuXG4gICAgaWYgKHBsYXlsaXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX3BoZW5peFdlYlBsYXllciB8fCBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpIHtcbiAgICAgICAgdGhpcy5fcGxheWVyID0gbmV3IFBsYXllcih2aWRlb0VsZW1lbnQsICdobHMnLCBzdHJlYW1JZCwgcGxheWxpc3RVcmwsIG9wdGlvbnMpO1xuXG4gICAgICAgIHRoaXMuX3BsYXllci5zdGFydCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9wbGF5ZXI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0VXJsKSB7XG4gICAgICBpZiAoIXRoaXMuX2hsc1BsYXllciAmJiAhKHRoaXMuX3BoZW5peFdlYlBsYXllciAmJiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHMpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBQbGF5ZXIodmlkZW9FbGVtZW50LCAnZGFzaCcsIHN0cmVhbUlkLCBtYW5pZmVzdFVybCwgb3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5fcGxheWVyLnN0YXJ0KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuX3BsYXllcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWFuaWZlc3RVcmwgfHwgcGxheWxpc3RVcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgWyR7c3RyZWFtSWR9XSBDYW5ub3QgcGxheSBbJHtwbGF5bGlzdFVybCA/ICdITFMnIDogJ0RBU0gnfV0gc3RyZWFtIHdpdGggaW5jbHVkZWQgcGxheWVyYCk7XG4gICAgfVxuXG4gICAgdGhyb3cgbmV3IEVycm9yKCdObyBzdHJlYW0gcGxheWxpc3QgZm91bmQnKTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGxvYWRlZCh2aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQsIHN0cmVhbUlkOiBzdHJpbmcsIG9mZmVyU2RwOiBzdHJpbmcpOiBQcm9taXNlPElEaXNwb3NhYmxlPiB7XG4gICAgaWYgKCF0aGlzLl9zaGFrYSAmJiAhdGhpcy5fcGhlbml4V2ViUGxheWVyICYmICF0aGlzLl9obHNQbGF5ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faGxzUGxheWVyKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KEhsc1BsYXllciwgdmlkZW9FbGVtZW50LCBzdHJlYW1JZCwgb2ZmZXJTZHAsIHtcbiAgICAgICAgLi4udGhpcy5fb3B0aW9ucyxcbiAgICAgICAgcHJlZmVyTmF0aXZlOiBGZWF0dXJlRW5hYmxlbWVudC5zaG91bGRVc2VOYXRpdmVIbHNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIHJldHVybiB0aGlzLnBsYXkoV2ViUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3NoYWthKSB7XG4gICAgICByZXR1cm4gdGhpcy5wbGF5KFNoYWthUGxheWVyLCB2aWRlb0VsZW1lbnQsIHN0cmVhbUlkLCBvZmZlclNkcCwge1xuICAgICAgICAuLi50aGlzLl9vcHRpb25zLFxuICAgICAgICBwcmVmZXJOYXRpdmU6IEZlYXR1cmVFbmFibGVtZW50LnNob3VsZFVzZU5hdGl2ZUhsc1xuICAgICAgfSk7XG4gICAgfVxuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmd9IGZyb20gJy4vQ2h1bmtlZFN0cmVhbWluZyc7XG5pbXBvcnQge0NodW5rZWRTdHJlYW1pbmdPcHRpb25zLCBDaHVua2VkU3RyZWFtaW5nU3RhdGlzdGljc30gZnJvbSAnLi9TdHJlYW1UeXBlcyc7XG5pbXBvcnQge0lIbHNQbGF5ZXJUeXBlfSBmcm9tICcuL0lIbHNQbGF5ZXInO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBIbHNQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF92aWRlb0VsZW1lbnQ6IEhUTUxWaWRlb0VsZW1lbnQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2tpbmQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWFuaWZlc3RVUkk6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogQ2h1bmtlZFN0cmVhbWluZ09wdGlvbnM7XG4gIHByaXZhdGUgX3BsYXllcjogSUhsc1BsYXllclR5cGU7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5obHNQbGF5ZXIpIHtcbiAgICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpKSB7XG4gICAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllcih7XG4gICAgICAgICAgZW5hYmxlV29ya2VyOiB0cnVlLFxuICAgICAgICAgIG1heEJ1ZmZlckxlbmd0aDogMSxcbiAgICAgICAgICBiYWNrQnVmZmVyTGVuZ3RoOiAwLFxuICAgICAgICAgIGxpdmVTeW5jRHVyYXRpb246IDcsXG4gICAgICAgICAgbGl2ZUR1cmF0aW9uSW5maW5pdHk6IHRydWUsXG4gICAgICAgICAgbGl2ZU1heExhdGVuY3lEdXJhdGlvbjogSW5maW5pdHksXG4gICAgICAgICAgaGlnaEJ1ZmZlcldhdGNoZG9nUGVyaW9kOiAxXG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLl9wbGF5ZXIubG9hZFNvdXJjZSh0aGlzLl9tYW5pZmVzdFVSSSk7XG4gICAgICAgIHRoaXMuX3BsYXllci5hdHRhY2hNZWRpYSh0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgfSBlbHNlIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuY2FuUGxheVR5cGUoJ2FwcGxpY2F0aW9uL3ZuZC5hcHBsZS5tcGVndXJsJykpIHtcbiAgICAgICAgdGhpcy5fdmlkZW9FbGVtZW50LnNyYyA9IHRoaXMuX21hbmlmZXN0VVJJO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLmhsc1BsYXllci5pc1N1cHBvcnRlZCgpO1xuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMC4wLFxuICAgICAgICBsYWc6IDAuMCxcbiAgICAgICAgbmV0d29ya1N0YXRlOiBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0aXN0aWNzID0ge1xuICAgICAgd2lkdGg6IHRoaXMuX3BsYXllci5tZWRpYS5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogdGhpcy5fcGxheWVyLm1lZGlhLm9mZnNldEhlaWdodCxcbiAgICAgIGN1cnJlbnRUaW1lOiB0aGlzLl9wbGF5ZXIubWVkaWEuY3VycmVudFRpbWUsXG4gICAgICBsYWc6IDAuMCxcbiAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZSxcbiAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgfTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0lETEUnKSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0lkbGU7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VSUk9SJyB8fCB0aGlzLl9wbGF5ZXIuc3RyZWFtQ29udHJvbGxlci5zdGF0ZSA9PT0gJ0VOREVEJykge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtOb1NvdXJjZTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX3BsYXllci5zdHJlYW1Db250cm9sbGVyLnN0YXRlLmluY2x1ZGVzKCdMT0FESU5HJykgfHwgdGhpcy5fcGxheWVyLnN0cmVhbUNvbnRyb2xsZXIuc3RhdGUuaW5jbHVkZXMoJ1dBSVRJTkcnKSkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0aXN0aWNzLm5ldHdvcmtTdGF0ZSA9IE5ldHdvcmtTdGF0ZXMuTmV0d29ya0VtcHR5O1xuICAgIH1cblxuICAgIGNvbnN0IGN1cnJlbnRUaW1lID0gdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddIHx8IDA7XG4gICAgY29uc3QgdHJ1ZUN1cnJlbnRUaW1lID0gKERhdGUubm93KCkgLSB0aGlzLl9vcHRpb25zLm9yaWdpblN0YXJ0VGltZSkgLyAxMDAwO1xuXG4gICAgc3RhdGlzdGljcy5sYWcgPSBNYXRoLm1heCgwLjAsIChjdXJyZW50VGltZSArICh0aGlzLl9vcHRpb25zLmxhZyAvIDEwMDApKSAtIHRydWVDdXJyZW50VGltZSk7XG5cbiAgICByZXR1cm4gc3RhdGlzdGljcztcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3BsYXllciAmJiB0aGlzLl9wbGF5ZXIuZGVzdHJveSkge1xuICAgICAgdGhpcy5fcGxheWVyLmRlc3Ryb3koKTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgICB9XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuZXhwb3J0IGVudW0gTmV0d29ya1N0YXRlcyB7XG4gIE5ldHdvcmtFbXB0eSxcbiAgTmV0d29ya0lkbGUsXG4gIE5ldHdvcmtMb2FkaW5nLFxuICBOZXR3b3JrTm9Tb3VyY2Vcbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBHbG9iYWxTY29wZSBmcm9tICcuLi8uLi9nbG9iYWxTY29wZS9HbG9iYWxTY29wZSc7XG5pbXBvcnQgSVBlZXJDb25uZWN0aW9uIGZyb20gJy4uLy4uL3J0Yy9JUGVlckNvbm5lY3Rpb24nO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IEdhcmJhZ2VDb2xsZWN0b3JNYW5hZ2VyIGZyb20gJy4uLy4uL2RvbS9HYXJiYWdlQ29sbGVjdG9yTWFuYWdlcic7XG5pbXBvcnQge1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzfSBmcm9tICcuLi9kaXNjb3ZlcnkvRW5kUG9pbnQnO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uU2VydmljZSBmcm9tICcuLi8uLi9ydGMvUGVlckNvbm5lY3Rpb25TZXJ2aWNlJztcbmltcG9ydCBEaXNjb3ZlcnkgZnJvbSAnLi4vZGlzY292ZXJ5L0Rpc2NvdmVyeSc7XG5pbXBvcnQgRmVhdHVyZUVuYWJsZW1lbnQgZnJvbSAnLi4vLi4vZW52aXJvbm1lbnQvRmVhdHVyZUVuYWJsZW1lbnQnO1xuaW1wb3J0IENoYW5uZWxTdGF0ZSBmcm9tICcuLi9jaGFubmVscy9DaGFubmVsU3RhdGUnO1xuaW1wb3J0IGFzc2VydFVucmVhY2hhYmxlIGZyb20gJy4uLy4uL2xhbmcvYXNzZXJ0VW5yZWFjaGFibGUnO1xuaW1wb3J0IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIGZyb20gJy4uLy4uL3J0Yy9SdGNDb25uZWN0aW9uTW9uaXRvcic7XG5pbXBvcnQgRHVyYXRpb25zIGZyb20gJy4uLy4uL3RpbWUvRHVyYXRpb24nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaGFubmVsQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L0NoYW5uZWxDb250ZXh0JztcbmltcG9ydCBSdGNDb25maWd1cmF0aW9uTWFuYWdlciBmcm9tICcuLi8uLi9ydGMvUnRjQ29uZmlndXJhdGlvbk1hbmFnZXInO1xuaW1wb3J0IFBlZXJDb25uZWN0aW9uQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1BlZXJDb25uZWN0aW9uQ29udGV4dCc7XG5pbXBvcnQgU3RyZWFtVHJhbnNmb3JtQ29udGV4dCBmcm9tICcuLi9jb250ZXh0L1N0cmVhbVRyYW5zZm9ybUNvbnRleHQnO1xuaW1wb3J0IEluc2VydGFibGVTdHJlYW1zIGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0luc2VydGFibGVTdHJlYW1zJztcbmltcG9ydCBTZHBQYXJzZXIgZnJvbSAnLi4vLi4vcnRjL1NkcFBhcnNlcic7XG5pbXBvcnQge0lTdHJlYW19IGZyb20gJy4vSVN0cmVhbSc7XG5pbXBvcnQgU0RLIGZyb20gJy4uL1NESyc7XG5cbmNvbnN0IGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsID0gMTAwO1xuY29uc3QgZGVmYXVsdFN0cmVhbVNldHVwVGltZW91dCA9IDMwMDAwO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFsVGltZVN0cmVhbSBpbXBsZW1lbnRzIElTdHJlYW0ge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignUmVhbFRpbWVTdHJlYW0nKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfY2hhbm5lbENvbnRleHQ6IENoYW5uZWxDb250ZXh0O1xuICBwcml2YXRlIHJlYWRvbmx5IF9wZWVyQ29ubmVjdGlvbkNvbnRleHQ6IFBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtVHJhbnNmb3JtQ29udGV4dDogU3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgcHJpdmF0ZSByZWFkb25seSBfaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcHJpdmF0ZSByZWFkb25seSBfZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0O1xuXG4gIGNvbnN0cnVjdG9yKGNoYW5uZWxDb250ZXh0LCBwZWVyQ29ubmVjdGlvbkNvbnRleHQsIHN0cmVhbVRyYW5zZm9ybUNvbnRleHQsIGhhbmRsZVN0cmVhbUZhaWx1cmU6ICgpID0+IFByb21pc2U8dm9pZD4pIHtcbiAgICB0aGlzLl9jaGFubmVsQ29udGV4dCA9IGNoYW5uZWxDb250ZXh0O1xuICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dCA9IHBlZXJDb25uZWN0aW9uQ29udGV4dDtcbiAgICB0aGlzLl9zdHJlYW1UcmFuc2Zvcm1Db250ZXh0ID0gc3RyZWFtVHJhbnNmb3JtQ29udGV4dDtcbiAgICB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlID0gaGFuZGxlU3RyZWFtRmFpbHVyZTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcyA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmRpc3Bvc2FibGVzLmFkZCh0aGlzKTtcbiAgfVxuXG4gIHN0YXJ0KHVyaSwgdG9rZW4sIGxpc3Rlbk9uU3RyZWFtU2V0dXAsIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZW5jb2RlZEluc2VydGFibGVTdHJlYW1zID0gdHlwZW9mIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luayA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rID09PSAnZnVuY3Rpb24nO1xuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIERpc2NvdmVyeS5kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nKHVyaSksXG4gICAgICBQZWVyQ29ubmVjdGlvblNlcnZpY2UuY3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlcigncmVjdm9ubHknLCBlbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMpXG4gICAgICAgIC50aGVuKCh7bG9jYWxPZmZlciwgcGVlckNvbm5lY3Rpb259KSA9PiB7XG4gICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlID0gcGVlckNvbm5lY3Rpb247XG5cbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbG9jYWxPZmZlcixcbiAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICBdKVxuICAgICAgLnRoZW4oKFtlbmRQb2ludCwge2xvY2FsT2ZmZXIsIHBlZXJDb25uZWN0aW9ufV0pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQub25saW5lLnZhbHVlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUgPSBlbmRQb2ludDtcbiAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0Nvbm5lY3RpbmcgdG8gWyVzXScsIGVuZFBvaW50LnRvU3RyaW5nKCkpO1xuICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnTG9jYWwgb2ZmZXI6XFxuJyArIGxvY2FsT2ZmZXIuc2RwKTtcblxuICAgICAgICBpZiAoRmVhdHVyZUVuYWJsZW1lbnQuY2xpZW50T2ZmZXJEaXNhYmxlZCB8fCAhcGVlckNvbm5lY3Rpb24uc3VwcG9ydHNTZXRDb25maWd1cmF0aW9uIHx8ICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c0dldENvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5jbG9zZSgpO1xuICAgICAgICAgIHBlZXJDb25uZWN0aW9uLmRpc3Bvc2UoKTtcblxuICAgICAgICAgIGlmIChTREsuZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCAmJiAhKEZlYXR1cmVFbmFibGVtZW50LmlzTW9iaWxlICYmIFNESy5za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMpKSB7XG4gICAgICAgICAgICBHYXJiYWdlQ29sbGVjdG9yTWFuYWdlci5mb3JjZUdhcmJhZ2VDb2xsZWN0aW9uKCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcGVlckNvbm5lY3Rpb24gPSBudWxsO1xuICAgICAgICAgIGxvY2FsT2ZmZXIgPSBudWxsO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuZFBvaW50LnN1YnNjcmliZSh0b2tlbiwgbG9jYWxPZmZlciwgdGhpcy5fY2hhbm5lbENvbnRleHQuZmFpbHVyZUNvdW50LnZhbHVlKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoe3N0YXR1cywgc3RyZWFtLCBydGNDb25maWd1cmF0aW9uLCBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLCBjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2UsIGxhZ30pID0+IHtcbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlID0gc3RyZWFtO1xuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5sYWcudmFsdWUgPSBsYWc7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuYXBwbHlTZXNzaW9uQW5kU3RyZWFtUHJvcGVydGllc1RvVmlkZW9FbGVtZW50KCk7XG5cbiAgICAgICAgdGhpcy5fbG9nZ2VyLmRlYnVnKFxuICAgICAgICAgICdbJXNdIFN1YnNjcmliZSBjb21wbGV0ZWQgWyVzXSBbJWpdIFslal0gWyVqXSBbJWpdJyxcbiAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgcnRjQ29uZmlndXJhdGlvbixcbiAgICAgICAgICBzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlLFxuICAgICAgICAgIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZSxcbiAgICAgICAgICBjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5tYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMoc3RhdHVzKTtcblxuICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5hcHBseVN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5hcHBseVJ0Y0NvbmZpZ3VyYXRpb24odGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlLCBydGNDb25maWd1cmF0aW9uKVxuICAgICAgICAgIC50aGVuKHBlZXJDb25uZWN0aW9uID0+IHtcbiAgICAgICAgICAgIGxldCBzdWJtaXRDYW5kaWRhdGVzVGltZW91dDtcbiAgICAgICAgICAgIGxldCBjYW5jZWxEaXNjb3ZlcnkgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBkaXNjb3ZlcnlDb21wbGV0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGNhbmRpZGF0ZXM6IFJUQ0ljZUNhbmRpZGF0ZVtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uLnZhbHVlKSB7XG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvbi52YWx1ZSA9IHBlZXJDb25uZWN0aW9uO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5vbmljZWNhbmRpZGF0ZSA9IChlKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKGNhbmNlbERpc2NvdmVyeSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICghU0RLLnNlbmRMb2NhbENhbmRpZGF0ZXMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAoZS5jYW5kaWRhdGUgJiYgZS5jYW5kaWRhdGUuY2FuZGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5wdXNoKGUuY2FuZGlkYXRlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkaXNjb3ZlcnlDb21wbGV0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaWYgKCFzdWJtaXRDYW5kaWRhdGVzVGltZW91dCkge1xuICAgICAgICAgICAgICAgIHN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0ID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtLnZhbHVlICE9PSBzdHJlYW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICBpZiAoY2FuY2VsRGlzY292ZXJ5KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2NoYW5uZWxDb250ZXh0LmVuZFBvaW50LnZhbHVlLmFkZEljZUNhbmRpZGF0ZXMoc3RyZWFtLCBjYW5kaWRhdGVzLCBkaXNjb3ZlcnlDb21wbGV0ZWQpXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCh7c3RhdHVzLCBvcHRpb25zfSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT09ICdvaycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMgd2l0aCByZWFzb24gWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuaW5jbHVkZXMoJ2NhbmNlbCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjYW5jZWxEaXNjb3ZlcnkgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEFkZGVkIElDRSBjYW5kaWRhdGVzIHdpdGggcmVhc29uIFslc10gYW5kIG9wdGlvbnMgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzdGF0dXMsIG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEZhaWxlZCB0byBhZGQgSUNFIGNhbmRpZGF0ZXMnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgZSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0sIGljZUNhbmRpZGF0ZUFjY3VtdWxhdGlvbkludGVydmFsKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ub25pY2Vjb25uZWN0aW9uc3RhdGVjaGFuZ2UgPSAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW0udmFsdWUgIT09IHN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb24udmFsdWUgIT09IHBlZXJDb25uZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdG9wIG5vcm1hbGx5IHRoZSBwZWVyIGNvbm5lY3Rpb24gaXMgdW5yZWdpc3RlcmVkIGZpcnN0LlxuICAgICAgICAgICAgICAgIC8vIFRodXMgYW55dGltZSB3ZSBzZWUgYSBjbG9zZWQgcGVlciBjb25uZWN0aW9uIHRoYXQgaXMgc3RpbGwgdmFsaWQsIGl0IGlzIGFuIGVycm9yLlxuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gQ2hhbm5lbFN0YXRlLkNvbm5lY3Rpb25FcnJvcjtcblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnZpZGVvRWxlbWVudC52YWx1ZS5wYXVzZSgpO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQudmlkZW9FbGVtZW50LnZhbHVlLnNyY09iamVjdCA9IG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQucGxheWluZy52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuX2hhbmRsZVN0cmVhbUZhaWx1cmUoKVxuICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgJ1slc10gRmFpbGVkIGhhbmRsaW5nIHN0cmVhbSBmYWlsdXJlIGFmdGVyIHBlZXIgY29ubmVjdGlvbiBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlLFxuICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHN3aXRjaCAocGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAnY2hlY2tpbmcnOlxuICAgICAgICAgICAgICAgIGNhc2UgJ2NvbXBsZXRlZCc6XG4gICAgICAgICAgICAgICAgY2FzZSAnY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICduZXcnOlxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgY2FzZSAnZGlzY29ubmVjdGVkJzpcbiAgICAgICAgICAgICAgICBjYXNlICdmYWlsZWQnOlxuICAgICAgICAgICAgICAgICAgaWYgKEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIElDRSBjb25uZWN0aW9uIHN0YXRlIGNoYW5nZWQgdG8gWyVzXSwgdHJ5aW5nIHRvIHJlY29ubmVjdCcsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGNhc2UgJ2Nsb3NlZCc6XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBJQ0UgY29ubmVjdGlvbiBzdGF0ZSBjaGFuZ2VkIHRvIFslc10sIHJldHJ5aW5nIHRvIGNvbm5lY3QnLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgcGVlckNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKTtcblxuICAgICAgICAgICAgICAgICAgcmV0cnlDYWxsYmFjaygpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgIGFzc2VydFVucmVhY2hhYmxlKHBlZXJDb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtUHJvbWlzZSA9IG5ldyBQcm9taXNlPE1lZGlhU3RyZWFtPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICAgIGlmICghRmVhdHVyZUVuYWJsZW1lbnQub25UcmFja0Rpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpLCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLm9udHJhY2sgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgICAgR2xvYmFsU2NvcGUuY2xlYXJUaW1lb3V0KHRpbWVvdXRJZCk7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtc1swXSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnN0IHRyYWNrTGlzdGVuZXIgPSAoZSk6IHZvaWQgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICAgICAgICBHbG9iYWxTY29wZS5jbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2FkZHN0cmVhbScsIHRyYWNrTGlzdGVuZXIpO1xuXG4gICAgICAgICAgICAgICAgaWYgKGUuc3RyZWFtcykge1xuICAgICAgICAgICAgICAgICAgcmVzb2x2ZShlLnN0cmVhbXNbMF0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICByZXNvbHZlKGUuc3RyZWFtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgdGltZW91dElkID0gR2xvYmFsU2NvcGUuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndHJhY2snLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5yZW1vdmVFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdTdHJlYW0gc2V0dXAgdGltZWQgb3V0JykpO1xuICAgICAgICAgICAgICB9LCBkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0KTtcblxuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCd0cmFjaycsIHRyYWNrTGlzdGVuZXIpO1xuICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5hZGRFdmVudExpc3RlbmVyKCdhZGRzdHJlYW0nLCB0cmFja0xpc3RlbmVyKTtcblxuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFzZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24oc2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24pXG4gICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gRmFpbGVkIHRvIHNldCBsb2NhbCBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIHNldFJlbW90ZURlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLCBlLm1lc3NhZ2UpO1xuXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSkudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIFNldCByZW1vdGUgU0RQIGFuc3dlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uLnNkcCk7XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uKGNyZWF0ZUFuc3dlckRlc2NyaXB0aW9uUmVzcG9uc2Uuc2Vzc2lvbkRlc2NyaXB0aW9uKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgcmVtb3RlIGRlc2NyaXB0aW9uIFslal0gd2l0aCBtZXNzYWdlIFslc10nLCB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCwgY3JlYXRlQW5zd2VyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFjcmVhdGVPZmZlckRlc2NyaXB0aW9uUmVzcG9uc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBTZXQgcmVtb3RlIFNEUCBvZmZlciBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24uc2RwKTtcblxuICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24oY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlLnNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbygnWyVzXSBGYWlsZWQgdG8gc2V0IHJlbW90ZSBkZXNjcmlwdGlvbiBbJWpdIHdpdGggbWVzc2FnZSBbJXNdJywgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsIGNyZWF0ZU9mZmVyRGVzY3JpcHRpb25SZXNwb25zZS5zZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgIHRocm93IGU7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gcGVlckNvbm5lY3Rpb24uY3JlYXRlQW5zd2VyKHtcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVBdWRpbzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgb2ZmZXJUb1JlY2VpdmVWaWRlbzogdHJ1ZVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSkudGhlbihhbnN3ZXIgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gU2V0IGxvY2FsIFNEUCBhbnN3ZXIgWyVqXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBhbnN3ZXIpO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUuc2V0UmVtb3RlRGVzY3JpcHRpb24oc3RyZWFtLCBhbnN3ZXIpO1xuICAgICAgICAgICAgICAgIH0pLnRoZW4oKHtzdGF0dXMsIHNlc3Npb25EZXNjcmlwdGlvbn0pID0+IHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0YXRlLnZhbHVlID0gdGhpcy5tYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyhzdGF0dXMpO1xuXG4gICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9PSAnb2snKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhbmRieS52YWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0b3BwZWQudmFsdWUgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbilcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdbJXNdIEZhaWxlZCB0byBzZXQgbG9jYWwgZGVzY3JpcHRpb24gWyVqXSB3aXRoIG1lc3NhZ2UgWyVzXScsIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLCBzZXNzaW9uRGVzY3JpcHRpb24sIGUubWVzc2FnZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICBsaXN0ZW5PblN0cmVhbVNldHVwLnN1Y2Nlc3ModGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQpO1xuXG4gICAgICAgICAgICAgIHJldHVybiBtZWRpYVN0cmVhbVByb21pc2U7XG4gICAgICAgICAgICB9KS50aGVuKG1lZGlhU3RyZWFtID0+IHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuaGFzRW5jb2RlZEluc2VydGFibGVTdHJlYW1zLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmVtb3RlRGVzY3JpcHRpb24gPSBuZXcgU2RwUGFyc2VyKHBlZXJDb25uZWN0aW9uLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbi5zZHApO1xuICAgICAgICAgICAgICAgIGNvbnN0IHtkaXNwb3NhYmxlc30gPSBJbnNlcnRhYmxlU3RyZWFtcy5hcHBseUVuY29kZWRTdHJlYW1UcmFuc2Zvcm1hdGlvbihtZWRpYVN0cmVhbSwgcGVlckNvbm5lY3Rpb24uZ2V0UmVjZWl2ZXJzKCksIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQuZW5jb2RlZFZpZGVvU3RyZWFtU2luaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5lbmNvZGVkQXVkaW9TdHJlYW1TaW5rLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi52aWRlb0NvZGVjLCBwYXJzZWRSZW1vdGVEZXNjcmlwdGlvbi5hdWRpb0NvZGVjKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBpZiAodGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5oYXNJbnNlcnRhYmxlU3RyZWFtcy52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHt0cmFuc2Zvcm1lZFN0cmVhbSwgZGlzcG9zYWJsZXN9ID0gSW5zZXJ0YWJsZVN0cmVhbXMuYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24obWVkaWFTdHJlYW0sIHRoaXMuX3N0cmVhbVRyYW5zZm9ybUNvbnRleHQudmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjaywgdGhpcy5fc3RyZWFtVHJhbnNmb3JtQ29udGV4dC5hdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKTtcblxuICAgICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChkaXNwb3NhYmxlcyk7XG4gICAgICAgICAgICAgICAgbWVkaWFTdHJlYW0gPSB0cmFuc2Zvcm1lZFN0cmVhbTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5tZWRpYVN0cmVhbS52YWx1ZSA9IG1lZGlhU3RyZWFtO1xuXG4gICAgICAgICAgICAgIGNvbnN0IHJ0Y0Nvbm5lY3Rpb25Nb25pdG9yID0gbmV3IFJ0Y0Nvbm5lY3Rpb25Nb25pdG9yKHBlZXJDb25uZWN0aW9uLCBtZWRpYVN0cmVhbSwgdGhpcy5fY2hhbm5lbENvbnRleHQuZW5kUG9pbnQudmFsdWUucm91bmRUcmlwVGltZSAvIDQpO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvcik7XG5cbiAgICAgICAgICAgICAgY29uc3QgcnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24gPSBydGNDb25uZWN0aW9uTW9uaXRvci5ydGNTdGF0aXN0aWMuc3Vic2NyaWJlKHN0YXRpc3RpY3MgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1N0YXRpc3RpY3MudmFsdWUgPSBzdGF0aXN0aWNzO1xuXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiAhdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljID0gc3RhdGlzdGljcy5hdWRpbztcbiAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcblxuICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGxldCBhdWRpb1RyYWNrRmFpbGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgbGV0IHZpZGVvVHJhY2tGYWlsZWQgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIGlmIChzdGF0aXN0aWNzLmF1ZGlvKSB7XG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMudGltZXN0YW1wICE9PSBzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCkge1xuICAgICAgICAgICAgICAgICAgICBhdWRpb1RyYWNrRmFpbGVkID0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQucnRjQXVkaW9TdGF0aXN0aWMuYnl0ZXNSZWNlaXZlZCA9PT0gc3RhdGlzdGljcy5hdWRpby5ieXRlc1JlY2VpdmVkO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpb1RyYWNrRmFpbGVkICYmIEdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgICAgICAgICAgICAnWyVzXSBBdWRpbyB0cmFjayBmYWlsZWQgd2l0aCBsYXN0IGJ5dGVzUmVjZWl2ZWQgWyVzXSBpcyBlcXVhbCB0byBwcmV2aW91cyBieXRlc1JlY2VpdmVkIFslc10gd2l0aGluIFslc10nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RyZWFtSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLmF1ZGlvLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IER1cmF0aW9ucyhzdGF0aXN0aWNzLmF1ZGlvLnRpbWVzdGFtcCAtIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y0F1ZGlvU3RhdGlzdGljLnRpbWVzdGFtcCkudG9Jc29TdHJpbmcoKVxuICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNBdWRpb1N0YXRpc3RpYyA9IHN0YXRpc3RpY3MuYXVkaW87XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy50aW1lc3RhbXAgIT09IHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wKSB7XG4gICAgICAgICAgICAgICAgICAgIHZpZGVvVHJhY2tGYWlsZWQgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYyAmJiB0aGlzLl9jaGFubmVsQ29udGV4dC5ydGNWaWRlb1N0YXRpc3RpYy5ieXRlc1JlY2VpdmVkID09PSBzdGF0aXN0aWNzLnZpZGVvLmJ5dGVzUmVjZWl2ZWQ7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgJiYgR2xvYmFsU2NvcGUubmF2aWdhdG9ySXNPbkxpbmUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuaW5mbyhcbiAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIFZpZGVvIHRyYWNrIGZhaWxlZCB3aXRoIGxhc3QgYnl0ZXNSZWNlaXZlZCBbJXNdIGlzIGVxdWFsIHRvIHByZXZpb3VzIGJ5dGVzUmVjZWl2ZWQgWyVzXSB3aXRoaW4gWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdHJlYW1JZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpc3RpY3MudmlkZW8uYnl0ZXNSZWNlaXZlZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljLmJ5dGVzUmVjZWl2ZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRHVyYXRpb25zKHN0YXRpc3RpY3MudmlkZW8udGltZXN0YW1wIC0gdGhpcy5fY2hhbm5lbENvbnRleHQucnRjVmlkZW9TdGF0aXN0aWMudGltZXN0YW1wKS50b0lzb1N0cmluZygpXG4gICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnJ0Y1ZpZGVvU3RhdGlzdGljID0gc3RhdGlzdGljcy52aWRlbztcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoIUdsb2JhbFNjb3BlLm5hdmlnYXRvcklzT25MaW5lKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5zdGF0ZS52YWx1ZSA9IENoYW5uZWxTdGF0ZS5PZmZsaW5lO1xuXG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHZpZGVvVHJhY2tGYWlsZWQgfHwgYXVkaW9UcmFja0ZhaWxlZCkge1xuICAgICAgICAgICAgICAgICAgY29uc3QgcmV0cnlDYWxsYmFjayA9ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuQ29ubmVjdGlvbkVycm9yO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUucGF1c2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC52aWRlb0VsZW1lbnQudmFsdWUuc3JjT2JqZWN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnBsYXlpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQubG9hZGluZy52YWx1ZSA9IHRydWU7XG5cbiAgICAgICAgICAgICAgICAgICAgcnRjQ29ubmVjdGlvbk1vbml0b3IuZGlzcG9zZSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLl9oYW5kbGVTdHJlYW1GYWlsdXJlKClcbiAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9sb2dnZXIuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdbJXNdIEZhaWxlZCBoYW5kbGluZyBzdHJlYW0gZmFpbHVyZSBhZnRlciB0cmFjayBzdG9wcGVkIHdpdGggc3RhdGUgWyVzXScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LnN0cmVhbUlkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICB0aGlzLnJlY29ubmVjdFBlZXJDb25uZWN0aW9uKHBlZXJDb25uZWN0aW9uLCByZXRyeUNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgdGhpcy5fcGVlckNvbm5lY3Rpb25Db250ZXh0LnBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgPSAwO1xuXG4gICAgICAgICAgICAgICAgICBpZiAodGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5SZWNvbm5lY3RpbmcgJiYgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgIT09IENoYW5uZWxTdGF0ZS5PZmZsaW5lKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID8gQ2hhbm5lbFN0YXRlLlBsYXlpbmcgOiBDaGFubmVsU3RhdGUuUGF1c2VkO1xuICAgICAgICAgICAgICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0NoYW5uZWwgc3RhdGUgcmVzdG9yZWQgdG8gWyVzXSBhZnRlciByZWNvbm5lY3RpbmcnLCBDaGFubmVsU3RhdGVbdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWVdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZChydGNDb25uZWN0aW9uTW9uaXRvclN0YXRpc3RpY1N1YnNjcmlwdGlvbik7XG5cbiAgICAgICAgICAgICAgaWYgKCFTREsuYXV0b21hdGljYWxseVBsYXlNZWRpYVN0cmVhbSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9NdXRlZC52YWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmF1dG9QYXVzZWQudmFsdWUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NoYW5uZWxDb250ZXh0LmxvYWRpbmcudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jaGFubmVsQ29udGV4dC5wbGF5aW5nLnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUGF1c2VkO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHBsYXlNZWRpYVN0cmVhbUluVmlkZW9FbGVtZW50KG1lZGlhU3RyZWFtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGFwcGx5UnRjQ29uZmlndXJhdGlvbihcbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uOiBJUGVlckNvbm5lY3Rpb24gfCBudWxsLFxuICAgIHJ0Y0NvbmZpZ3VyYXRpb246IFJUQ0NvbmZpZ3VyYXRpb24pOiBQcm9taXNlPElQZWVyQ29ubmVjdGlvbj4ge1xuICAgIGlmICghb3B0aW9uYWxQZWVyQ29ubmVjdGlvbikge1xuICAgICAgcnRjQ29uZmlndXJhdGlvbiA9IFJ0Y0NvbmZpZ3VyYXRpb25NYW5hZ2VyLnRydW5jYXRlSWNlU2VydmVycyhydGNDb25maWd1cmF0aW9uKTtcblxuICAgICAgcmV0dXJuIFNESy5wZWVyQ29ubmVjdGlvbkZhY3RvcnkudmFsdWUuY3JlYXRlUGVlckNvbm5lY3Rpb24ocnRjQ29uZmlndXJhdGlvbik7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3UnRjQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLm9wdGlvbmFsUGVlckNvbm5lY3Rpb24uZ2V0Q29uZmlndXJhdGlvbigpLFxuICAgICAgLi4ucnRjQ29uZmlndXJhdGlvblxuICAgIH07XG5cbiAgICBvcHRpb25hbFBlZXJDb25uZWN0aW9uLnNldENvbmZpZ3VyYXRpb24obmV3UnRjQ29uZmlndXJhdGlvbik7XG5cbiAgICByZXR1cm4gb3B0aW9uYWxQZWVyQ29ubmVjdGlvbjtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb25uZWN0UGVlckNvbm5lY3Rpb24ocGVlckNvbm5lY3Rpb246IElQZWVyQ29ubmVjdGlvbiwgcmV0cnlDYWxsYmFjazogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIGlmIChwZWVyQ29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUgPT09ICdjbG9zZWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fY2hhbm5lbENvbnRleHQuc3RhdGUudmFsdWUgPSBDaGFubmVsU3RhdGUuUmVjb25uZWN0aW5nO1xuXG4gICAgaWYgKHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIDwgU0RLLm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMgfHwgIVNESy5hdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24pIHtcbiAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKys7XG5cbiAgICAgIGNvbnN0IGlzQ2xpZW50T2ZmZXJGbG93ID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb24/LnR5cGUgPT09ICdvZmZlcic7XG5cbiAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5jbGllbnRPZmZlckRpc2FibGVkIHx8XG4gICAgICAgICFwZWVyQ29ubmVjdGlvbi5zdXBwb3J0c1NldENvbmZpZ3VyYXRpb24gfHxcbiAgICAgICAgIXBlZXJDb25uZWN0aW9uLnN1cHBvcnRzR2V0Q29uZmlndXJhdGlvbiB8fFxuICAgICAgICAhaXNDbGllbnRPZmZlckZsb3dcbiAgICAgICkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2xvZ2dlci5pbmZvKCdSZWNvbm5lY3RpbmcgcGVlciBjb25uZWN0aW9uIGJ5IHJlc3RhcnRpbmcgSUNFJyk7XG5cbiAgICAgIGNvbnN0IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gcGVlckNvbm5lY3Rpb24uY3VycmVudExvY2FsRGVzY3JpcHRpb247XG4gICAgICBjb25zdCBpZ25vcmVkID0gcGVlckNvbm5lY3Rpb24uY3JlYXRlT2ZmZXIoe2ljZVJlc3RhcnQ6IHRydWV9KS50aGVuKG9mZmVyID0+IHtcbiAgICAgICAgcmV0dXJuIHBlZXJDb25uZWN0aW9uLnNldExvY2FsRGVzY3JpcHRpb24ob2ZmZXIpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBwZWVyQ29ubmVjdGlvbi5zZXRMb2NhbERlc2NyaXB0aW9uKGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICB9KVxuICAgICAgICAuY2F0Y2goZSA9PiB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdGYWlsZWQgdG8gcmVjb25uZWN0IHBlZXIgY29ubmVjdGlvbicsIGUpO1xuICAgICAgICAgIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzID0gMDtcbiAgICAgICAgICByZXRyeUNhbGxiYWNrKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oJ0ZhaWxlZCB0byByZWNvbm5lY3QgcGVlciBjb25uZWN0aW9uIGFmdGVyIFslc10gYXR0ZW1wdHMsIHBlcmZvcm1pbmcgZnVsbCByZWNvdmVyeScsIHRoaXMuX3BlZXJDb25uZWN0aW9uQ29udGV4dC5wZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzKTtcbiAgICB0aGlzLl9wZWVyQ29ubmVjdGlvbkNvbnRleHQucGVlckNvbm5lY3Rpb25SZWNvbm5lY3RBdHRlbXB0cyA9IDA7XG4gICAgcmV0cnlDYWxsYmFjaygpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIG1hcFNldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzVG9DaGFubmVsU3RhdHVzKHN0YXR1czogU2V0UmVtb3RlRGVzY3JpcHRpb25TdGF0dXMpOiBDaGFubmVsU3RhdGUge1xuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlICdvayc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuU3RhcnRpbmc7XG4gICAgICBjYXNlICd1bmF1dGhvcml6ZWQnOlxuICAgICAgICByZXR1cm4gQ2hhbm5lbFN0YXRlLlVuYXV0aG9yaXplZDtcbiAgICAgIGNhc2UgJ25vdC1mb3VuZCc6XG4gICAgICBjYXNlICdjYXBhY2l0eSc6XG4gICAgICBjYXNlICdyYXRlLWxpbWl0ZWQnOlxuICAgICAgY2FzZSAndGltZW91dCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuUmVjb3ZlcmluZztcbiAgICAgIGNhc2UgJ2ZhaWxlZCc6XG4gICAgICAgIHJldHVybiBDaGFubmVsU3RhdGUuRXJyb3I7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBhc3NlcnRVbnJlYWNoYWJsZShzdGF0dXMpO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ30gZnJvbSAnLi9DaHVua2VkU3RyZWFtaW5nJztcbmltcG9ydCB7Q2h1bmtlZFN0cmVhbWluZ09wdGlvbnMsIENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzfSBmcm9tICcuL1N0cmVhbVR5cGVzJztcbmltcG9ydCB7TmV0d29ya1N0YXRlc30gZnJvbSAnLi9OZXR3b3JrU3RhdGVzJztcblxudHlwZSBTaGFrYU9wdGlvbnMgPSB7XG4gIGFicjoge1xuICAgIGRlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogbnVtYmVyO1xuICB9O1xuICBtYW5pZmVzdDoge1xuICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgdGltZW91dDogbnVtYmVyO1xuICAgIH07XG4gIH07XG4gIHN0cmVhbWluZzoge1xuICAgIGxpdmVTeW5jUGFuaWNUaHJlc2hvbGQ6IG51bWJlcjtcbiAgICBidWZmZXJpbmdHb2FsOiBudW1iZXI7XG4gICAgYnVmZmVyQmVoaW5kOiBudW1iZXI7XG4gICAgcmV0cnlQYXJhbWV0ZXJzOiB7XG4gICAgICB0aW1lb3V0OiBudW1iZXI7XG4gICAgICBtYXhBdHRlbXB0czogbnVtYmVyO1xuICAgICAgYmFja29mZkZhY3RvcjogbnVtYmVyO1xuICAgIH07XG4gIH07XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIElTaGFrYSB7XG4gIGNvbmZpZ3VyZTogKG86IFNoYWthT3B0aW9ucykgPT4gdm9pZDtcbiAgbG9hZDogKHVyaTogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBnZXRTdGF0czogKCkgPT4gQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG4gIGRlc3Ryb3k6ICgpID0+IHZvaWQ7XG4gIHVubG9hZDogKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hha2FQbGF5ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2hha2FQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tb25pdG9yZWRTdGF0aXN0aWNzOiB7XG4gICAgZXN0aW1hdGVkQmFuZHdpZHRoOiBudW1iZXI7XG4gICAgcGxheVRpbWU6IG51bWJlcjtcbiAgfTtcbiAgcHJpdmF0ZSBfcGxheWVyOiBJU2hha2E7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcyA9IHtcbiAgICAgIGVzdGltYXRlZEJhbmR3aWR0aDogMCxcbiAgICAgIHBsYXlUaW1lOiAwXG4gICAgfTtcbiAgfVxuXG4gIHN0YXJ0KCk6IHZvaWQge1xuICAgIGlmIChDaHVua2VkU3RyZWFtaW5nLnNoYWthKSB7XG4gICAgICBjb25zdCBwbGF5ZXJPcHRpb25zOiBTaGFrYU9wdGlvbnMgPSB7XG4gICAgICAgIGFicjoge2RlZmF1bHRCYW5kd2lkdGhFc3RpbWF0ZTogMjAwMDAwMH0sXG4gICAgICAgIG1hbmlmZXN0OiB7cmV0cnlQYXJhbWV0ZXJzOiB7dGltZW91dDogMTAwMDB9fSxcbiAgICAgICAgc3RyZWFtaW5nOiB7XG4gICAgICAgICAgbGl2ZVN5bmNQYW5pY1RocmVzaG9sZDogMSxcbiAgICAgICAgICBidWZmZXJpbmdHb2FsOiA2MCxcbiAgICAgICAgICBidWZmZXJCZWhpbmQ6IDMwLFxuICAgICAgICAgIHJldHJ5UGFyYW1ldGVyczoge1xuICAgICAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICAgICAgICBtYXhBdHRlbXB0czogMTAsXG4gICAgICAgICAgICBiYWNrb2ZmRmFjdG9yOiAxLjFcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIHRoaXMuX3BsYXllciA9IG5ldyBDaHVua2VkU3RyZWFtaW5nLnNoYWthLlBsYXllcih0aGlzLl92aWRlb0VsZW1lbnQpO1xuICAgICAgdGhpcy5sb2FkUGxheWVyKHBsYXllck9wdGlvbnMpO1xuXG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3Mge1xuICAgIGlmICghdGhpcy5fcGxheWVyKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogMCxcbiAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICBjdXJyZW50VGltZTogMCxcbiAgICAgICAgbGFnOiAwLFxuICAgICAgICBuZXR3b3JrU3RhdGU6IE5ldHdvcmtTdGF0ZXMuTmV0d29ya05vU291cmNlXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB7XG4gICAgICAuLi50aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKSxcbiAgICAgIGN1cnJlbnRUaW1lOiAwLFxuICAgICAgbGFnOiAwXG4gICAgfTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHRoaXMuX3ZpZGVvRWxlbWVudFsnY3VycmVudFRpbWUnXSB8fCAwO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcbiAgICBjb25zdCBsYWcgPSBNYXRoLm1heCgwLjAsIHRydWVDdXJyZW50VGltZSAtIGN1cnJlbnRUaW1lKTtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQpIHtcbiAgICAgIHN0YXRpc3RpY3MuY3VycmVudFRpbWUgPSBjdXJyZW50VGltZTtcbiAgICAgIHN0YXRpc3RpY3MubGFnID0gbGFnO1xuXG4gICAgICBpZiAodGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkICYmIHRoaXMuX3ZpZGVvRWxlbWVudC5idWZmZXJlZC5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPCBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5wbGF5VGltZSA+IDAgJiYgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5wbGF5VGltZSA8IHN0YXRpc3RpY3MucGxheVRpbWUpIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgdGhpcy5fbW9uaXRvcmVkU3RhdGlzdGljcy5lc3RpbWF0ZWRCYW5kd2lkdGggPSBzdGF0aXN0aWNzLmVzdGltYXRlZEJhbmR3aWR0aDtcbiAgICB0aGlzLl9tb25pdG9yZWRTdGF0aXN0aWNzLnBsYXlUaW1lID0gc3RhdGlzdGljcy5wbGF5VGltZTtcblxuICAgIHJldHVybiBzdGF0aXN0aWNzO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fcGxheWVyKSB7XG4gICAgICB0aGlzLl9wbGF5ZXIudW5sb2FkKCk7XG4gICAgICB0aGlzLl9wbGF5ZXIuZGVzdHJveSgpO1xuICAgIH1cblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIGxvYWRQbGF5ZXIocGxheWVyQ29uZmlnOiBTaGFrYU9wdGlvbnMpOiB2b2lkIHtcbiAgICB0aGlzLl9wbGF5ZXIuY29uZmlndXJlKHBsYXllckNvbmZpZyk7XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5fcGxheWVyLmxvYWQodGhpcy5fbWFuaWZlc3RVUkkpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmluZm8oJ1slc10gREFTSCBsaXZlIHN0cmVhbSBoYXMgYmVlbiBsb2FkZWQnLCB0aGlzLl9zdHJlYW1JZCk7XG5cbiAgICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQucGxheSkge1xuICAgICAgICB0aGlzLl92aWRlb0VsZW1lbnQucGxheSgpO1xuICAgICAgfVxuICAgIH0pLmNhdGNoKGUgPT4ge1xuICAgICAgdGhpcy5fbG9nZ2VyLmVycm9yKCdbJXNdIEVycm9yIHdoaWxlIGxvYWRpbmcgREFTSCBsaXZlIHN0cmVhbSBbJXNdJywgdGhpcy5fc3RyZWFtSWQsIGUuY29kZSwgZSk7XG4gICAgfSk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7SVN0cmVhbX0gZnJvbSAnLi9JU3RyZWFtJztcbmltcG9ydCBFZGdlQXV0aFBhcnNlciBmcm9tICcuLi8uLi9lZGdlQXV0aC9FZGdlQXV0aFBhcnNlcic7XG5pbXBvcnQgQ2h1bmtlZFN0cmVhbSBmcm9tICcuL0NodW5rZWRTdHJlYW0nO1xuaW1wb3J0IFJlYWxUaW1lU3RyZWFtIGZyb20gJy4vUmVhbFRpbWVTdHJlYW0nO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi8uLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBDaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIGZyb20gJy4vQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN0cmVhbUZhY3Rvcnkge1xuICBwcml2YXRlIHN0YXRpYyBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbWluZycpO1xuXG4gIHN0YXRpYyBjcmVhdGUodG9rZW46IHN0cmluZywgY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZTogKCkgPT4gUHJvbWlzZTx2b2lkPik6IElTdHJlYW0ge1xuICAgIGNvbnN0IHRva2VuQ2FwYWJpbGl0aWVzID0gRWRnZUF1dGhQYXJzZXIucGFyc2VUb2tlbih0b2tlbikuY2FwYWJpbGl0aWVzO1xuICAgIGNvbnN0IGhhc1N0cmVhbWluZyA9IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdzdHJlYW1pbmcnKTtcbiAgICBjb25zdCBoYXNPbkRlbWFuZCA9IHRva2VuQ2FwYWJpbGl0aWVzLmluY2x1ZGVzKCdvbi1kZW1hbmQnKTtcblxuICAgIGlmIChoYXNTdHJlYW1pbmcgfHwgaGFzT25EZW1hbmQpIHtcbiAgICAgIHJldHVybiBuZXcgQ2h1bmtlZFN0cmVhbShjaGFubmVsQ29udGV4dCwgIWhhc09uRGVtYW5kID8gQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5MaXZlIDogQ2h1bmtlZFN0cmVhbVBsYXliYWNrTW9kZS5PbmREZW1hbmQsIGhhbmRsZVN0cmVhbUZhaWx1cmUpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVhbFRpbWVTdHJlYW0oY2hhbm5lbENvbnRleHQsIHBlZXJDb25uZWN0aW9uQ29udGV4dCwgc3RyZWFtVHJhbnNmb3JtQ29udGV4dCwgaGFuZGxlU3RyZWFtRmFpbHVyZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N0cmVhbUZhY3RvcnkgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQge0lMb2dnZXJ9IGZyb20gJy4uLy4uL2xvZ2dlci9Mb2dnZXJJbnRlcmZhY2UnO1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nfSBmcm9tICcuL0NodW5rZWRTdHJlYW1pbmcnO1xuaW1wb3J0IHtDaHVua2VkU3RyZWFtaW5nT3B0aW9ucywgQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3N9IGZyb20gJy4vU3RyZWFtVHlwZXMnO1xuaW1wb3J0IHtOZXR3b3JrU3RhdGVzfSBmcm9tICcuL05ldHdvcmtTdGF0ZXMnO1xuXG5jb25zdCBiYW5kd2lkdGhUb1N0YXJ0QXQgPSAzMDAwMDAwOyAvLyBDb3JyZXNwb25kcyB0byA3MjBwIGluIG1vc3Qgc2V0dXBzXG5jb25zdCBtaW5UaW1lQmVmb3JlTmV4dFJlbG9hZCA9IDE1MDAwO1xuXG50eXBlIEV2ZW50TGlzdGVuZXJGb3JXZWJQbGF5ZXIgPSAoZXZ0OiBXZWJQbGF5ZXJFdmVudCkgPT4gdm9pZDtcbnR5cGUgV2ViUGxheWVyRXZlbnQgPSB7XG4gIGNvZGU6IG51bWJlcjtcbiAgc2V2ZXJpdHk6IG51bWJlcjtcbiAgZXJyb3I6IHN0cmluZztcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVdlYlBsYXllciB7XG4gIHN0YXJ0OiAodXJsOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGFkZEV2ZW50TGlzdGVuZXIobmFtZTogc3RyaW5nLCBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lckZvcldlYlBsYXllcik6IHZvaWQ7XG4gIGRpc3Bvc2UoKTogdm9pZDtcbiAgZXJyb3JzOiB7XG4gICAgc2V2ZXJpdHk6IHtcbiAgICAgIFJFQ09WRVJBQkxFOiBudW1iZXI7XG4gICAgfTtcbiAgfTtcbiAgZ2V0U3RhdHMoKTogQ2h1bmtlZFN0cmVhbWluZ1N0YXRpc3RpY3M7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFdlYlBsYXllciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2xvZ2dlcjogSUxvZ2dlciA9IExvZ2dlckZhY3RvcnkuZ2V0TG9nZ2VyKCdXZWJQbGF5ZXInKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50O1xuICBwcml2YXRlIHJlYWRvbmx5IF9raW5kOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3N0cmVhbUlkOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX21hbmlmZXN0VVJJOiBzdHJpbmc7XG4gIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zO1xuICBwcml2YXRlIF9wbGF5ZXI6IElXZWJQbGF5ZXI7XG4gIHByaXZhdGUgX2xhc3RSZWxvYWRUaW1lOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IodmlkZW9FbGVtZW50OiBIVE1MVmlkZW9FbGVtZW50LCBraW5kOiBzdHJpbmcsIHN0cmVhbUlkOiBzdHJpbmcsIG1hbmlmZXN0VVJJOiBzdHJpbmcsIG9wdGlvbnM6IENodW5rZWRTdHJlYW1pbmdPcHRpb25zKSB7XG4gICAgdGhpcy5fdmlkZW9FbGVtZW50ID0gdmlkZW9FbGVtZW50O1xuICAgIHRoaXMuX2tpbmQgPSBraW5kO1xuICAgIHRoaXMuX3N0cmVhbUlkID0gc3RyZWFtSWQ7XG4gICAgdGhpcy5fbWFuaWZlc3RVUkkgPSBlbmNvZGVVUkkobWFuaWZlc3RVUkkpLnJlcGxhY2UoL1sjXS9nLCAnJTIzJyk7XG4gICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7XG4gIH1cblxuICBzdGFydCgpOiB2b2lkIHtcbiAgICBpZiAoQ2h1bmtlZFN0cmVhbWluZy5waGVuaXhXZWJQbGF5ZXIpIHtcbiAgICAgIGNvbnN0IHBsYXllck9wdGlvbnMgPSB7XG4gICAgICAgIC4uLnRoaXMuX29wdGlvbnMsXG4gICAgICAgIGJhbmR3aWR0aFRvU3RhcnRBdFxuICAgICAgfTtcblxuICAgICAgdGhpcy5fcGxheWVyID0gbmV3IENodW5rZWRTdHJlYW1pbmcucGhlbml4V2ViUGxheWVyLldlYlBsYXllcih0aGlzLl9sb2dnZXIsIHRoaXMuX3ZpZGVvRWxlbWVudCwgcGxheWVyT3B0aW9ucyk7XG4gICAgICB0aGlzLl9wbGF5ZXIuc3RhcnQodGhpcy5fbWFuaWZlc3RVUkkpO1xuXG4gICAgICB0aGlzLl9wbGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBlcnJvck9iamVjdCA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNhblJlbG9hZCgpICYmIGVycm9yT2JqZWN0ICYmIChlcnJvck9iamVjdC5jb2RlID09PSAzIHx8IGVycm9yT2JqZWN0LnNldmVyaXR5ID09PSBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5lcnJvcnMuc2V2ZXJpdHkuUkVDT1ZFUkFCTEUpKSB7XG4gICAgICAgICAgdGhpcy5fbG9nZ2VyLndhcm4oJ1JlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIGFmdGVyIGVycm9yIGV2ZW50IFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICAgICAgdGhpcy5yZWxvYWRJZkFibGUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2xvZ2dlci5lcnJvcignQ2Fubm90IHJlbG9hZCB3aXRoIGVycm9yIFslal0nLCBlcnJvck9iamVjdCk7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlzU3VwcG9ydGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllciAmJiBDaHVua2VkU3RyZWFtaW5nLnBoZW5peFdlYlBsYXllci5pc1N1cHBvcnRlZDtcbiAgfVxuXG4gIGdldFN0YXRzKCk6IENodW5rZWRTdHJlYW1pbmdTdGF0aXN0aWNzIHtcbiAgICBpZiAoIXRoaXMuX3BsYXllcikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgIGhlaWdodDogMCxcbiAgICAgICAgY3VycmVudFRpbWU6IDAuMCxcbiAgICAgICAgbGFnOiAwLjAsXG4gICAgICAgIG5ldHdvcmtTdGF0ZTogTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2UsXG4gICAgICAgIGRhdGFCdWZmZXJlZDogMC4wXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IHN0YXRpc3RpY3MgPSB0aGlzLl9wbGF5ZXIuZ2V0U3RhdHMoKTtcbiAgICBjb25zdCBjdXJyZW50VGltZSA9IHN0YXRpc3RpY3MuY3VycmVudFRpbWUgfHwgdGhpcy5fdmlkZW9FbGVtZW50WydjdXJyZW50VGltZSddO1xuICAgIGNvbnN0IHRydWVDdXJyZW50VGltZSA9IChEYXRlLm5vdygpIC0gdGhpcy5fb3B0aW9ucy5vcmlnaW5TdGFydFRpbWUpIC8gMTAwMDtcblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5kYXRhQnVmZmVyZWQgPSB0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQuZW5kKDApO1xuICAgIH1cblxuICAgIGlmIChzdGF0aXN0aWNzLmlzTmF0aXZlICYmIHN0YXRpc3RpY3MuZGVsaXZlcnlUeXBlID09PSAnSGxzJykge1xuICAgICAgc3RhdGlzdGljcy5jdXJyZW50VGltZSA9IGN1cnJlbnRUaW1lIC0gc3RhdGlzdGljcy5sYWc7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmN1cnJlbnRUaW1lKSB7XG4gICAgICBzdGF0aXN0aWNzLmN1cnJlbnRUaW1lID0gY3VycmVudFRpbWU7XG4gICAgfVxuXG4gICAgaWYgKCFzdGF0aXN0aWNzLmlzTmF0aXZlKSB7XG4gICAgICBzdGF0aXN0aWNzLmxhZyA9IE1hdGgubWF4KDAuMCwgdHJ1ZUN1cnJlbnRUaW1lIC0gY3VycmVudFRpbWUpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl92aWRlb0VsZW1lbnQuYnVmZmVyZWQ/Lmxlbmd0aCkge1xuICAgICAgc3RhdGlzdGljcy5uZXR3b3JrU3RhdGUgPSBOZXR3b3JrU3RhdGVzLk5ldHdvcmtMb2FkaW5nO1xuICAgIH0gZWxzZSBpZiAoc3RhdGlzdGljcy5jdXJyZW50VGltZSA+IDApIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrSWRsZTtcbiAgICB9IGVsc2UgaWYgKHN0YXRpc3RpY3MudmlkZW8pIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrRW1wdHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHN0YXRpc3RpY3MubmV0d29ya1N0YXRlID0gTmV0d29ya1N0YXRlcy5OZXR3b3JrTm9Tb3VyY2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRpc3RpY3M7XG4gIH1cblxuICBkaXNwb3NlKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9wbGF5ZXIpIHtcbiAgICAgIHRoaXMuX3BsYXllci5kaXNwb3NlKCk7XG4gICAgfVxuXG4gICAgdGhpcy5fcGxheWVyID0gbnVsbDtcbiAgfVxuXG4gIHByaXZhdGUgY2FuUmVsb2FkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhhc0VsYXBzZWRNaW5UaW1lU2luY2VMYXN0UmVsb2FkID0gIXRoaXMuX2xhc3RSZWxvYWRUaW1lIHx8IERhdGUubm93KCkgLSB0aGlzLl9sYXN0UmVsb2FkVGltZSA+IG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkO1xuXG4gICAgcmV0dXJuIHRoaXMuX3ZpZGVvRWxlbWVudCAmJiB0aGlzLl9wbGF5ZXIgJiYgdGhpcy5fdmlkZW9FbGVtZW50LmJ1ZmZlcmVkLmxlbmd0aCAhPT0gMCAmJiBoYXNFbGFwc2VkTWluVGltZVNpbmNlTGFzdFJlbG9hZDtcbiAgfVxuXG4gIHByaXZhdGUgcmVsb2FkSWZBYmxlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jYW5SZWxvYWQoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xvZ2dlci53YXJuKCdbJXNdIFJlbG9hZGluZyB1bmhlYWx0aHkgc3RyZWFtIHRoYXQgd2FzIGFjdGl2ZSBmb3IgYXQgbGVhc3QgWyVzXSBzZWNvbmRzJywgdGhpcy5fc3RyZWFtSWQsIG1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIC8gMTAwMCk7XG5cbiAgICB0aGlzLl9sYXN0UmVsb2FkVGltZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLnJlbG9hZCgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWxvYWQoKTogdm9pZCB7XG4gICAgdGhpcy5fcGxheWVyLmRpc3Bvc2UoKTtcblxuICAgIHRoaXMuX3BsYXllciA9IG51bGw7XG5cbiAgICB0aGlzLnN0YXJ0KCk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUVuY29kZWRTdHJlYW1TaW5rPFQgPSBSVENFbmNvZGVkQXVkaW9GcmFtZSB8IFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiB7XG4gICAgKHRyYWNrOiBNZWRpYVN0cmVhbVRyYWNrLCBjaHVuazogVCk6IGJvb2xlYW4gfCBQcm9taXNlTGlrZTxib29sZWFuPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRW5jb2RlZFN0cmVhbVNpbmsge1xuICBzdGF0aWMgdmFsaWRhdGVFbmNvZGVkU3RyZWFtU2luayhtb2RlOiAnYXVkaW8nIHwgJ3ZpZGVvJywgaXRlbTogSUVuY29kZWRTdHJlYW1TaW5rKSB7XG4gICAgaWYgKHR5cGVvZiBpdGVtICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB2YWxpZDogZmFsc2UsXG4gICAgICAgIHZhbGlkYXRpb25SZXN1bHQ6IGBVbmV4cGVjdGVkICR7bW9kZX0gRW5jb2RlZCBTdHJlYW0gU2luayBmdW5jdGlvbiB0eXBlLiBGb3VuZCBbJHt0eXBlb2YgaXRlbX1dYFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggIT09IDIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBFbmNvZGVkIFN0cmVhbSBTaW5rIGZ1bmN0aW9uIHBhcmFtZXRlciBsZW5ndGguIEV4cGVjdGVkIDIuIEZvdW5kIFske2l0ZW0ubGVuZ3RofV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB2YWxpZDogdHJ1ZSxcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQ6ICdvaydcbiAgICB9O1xuICB9XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdFbmNvZGVkU3RyZWFtU2luayBpcyBhIHN0YXRpYyBjbGFzcyB0aGF0IG1heSBub3QgYmUgaW5zdGFudGlhdGVkJyk7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCBEaXNwb3NhYmxlIGZyb20gJy4uLy4uL2xhbmcvRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgYXNzZXJ0VW5yZWFjaGFibGUgZnJvbSAnLi4vLi4vbGFuZy9hc3NlcnRVbnJlYWNoYWJsZSc7XG5pbXBvcnQge0lTdHJlYW1UcmFja1RyYW5zZm9ybX0gZnJvbSAnLi4vdHJhbnNmb3JtYXRpb24vU3RyZWFtVHJhY2tUcmFuc2Zvcm0nO1xuaW1wb3J0IHtJRW5jb2RlZFN0cmVhbVNpbmt9IGZyb20gJy4uL3RyYW5zZm9ybWF0aW9uL0VuY29kZWRTdHJlYW1TaW5rJztcbmltcG9ydCBGZWF0dXJlRW5hYmxlbWVudCBmcm9tICcuLi8uLi9lbnZpcm9ubWVudC9GZWF0dXJlRW5hYmxlbWVudCc7XG5pbXBvcnQgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciwge1N1cnJvZ2F0ZUZyYW1lVHlwZSwgU2tpcEZyYW1lfSBmcm9tICcuL1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXInO1xuXG50eXBlIE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gJ3ZpZGVvJyB8ICdhdWRpbyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEluc2VydGFibGVTdHJlYW1zIHtcbiAgc3RhdGljIGFwcGx5RW5jb2RlZFN0cmVhbVRyYW5zZm9ybWF0aW9uKHN0cmVhbTogTWVkaWFTdHJlYW0sIHJlY2VpdmVyczogUlRDUnRwUmVjZWl2ZXJbXSwgZW5jb2RlZFZpZGVvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiwgZW5jb2RlZEF1ZGlvU3RyZWFtU2luazogSUVuY29kZWRTdHJlYW1TaW5rPFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiwgdmlkZW9Db2RlYzogc3RyaW5nLCBhdWRpb0NvZGVjOiBzdHJpbmcpOiB7ZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0ID0gbmV3IERpc3Bvc2FibGVMaXN0KCk7XG5cbiAgICBzdHJlYW0uZ2V0VHJhY2tzKCkuZm9yRWFjaCh0cmFjayA9PiB7XG4gICAgICBjb25zdCByZWNlaXZlciA9IHJlY2VpdmVycy5maWx0ZXIocmVjZWl2ZSA9PiByZWNlaXZlLnRyYWNrID09PSB0cmFjaylbMF07XG4gICAgICBjb25zdCBraW5kOiBNZWRpYVN0cmVhbVRyYWNrS2luZCA9IHRyYWNrLmtpbmQgYXMgTWVkaWFTdHJlYW1UcmFja0tpbmQ7XG5cbiAgICAgIHN3aXRjaCAoa2luZCkge1xuICAgICAgICBjYXNlICd2aWRlbyc6IHtcbiAgICAgICAgICBpZiAoZW5jb2RlZFZpZGVvU3RyZWFtU2luaykge1xuICAgICAgICAgICAgaWYgKEZlYXR1cmVFbmFibGVtZW50LmlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi9Xb3JrZXJUcmFuc2Zvcm1TdHJlYW0udHMnLCBpbXBvcnQubWV0YS51cmwpLCB7dHlwZTogJ21vZHVsZSd9KTtcblxuICAgICAgICAgICAgICB3b3JrZXIub25tZXNzYWdlID0gYXN5bmMgZXZlbnQgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgZXZlbnQuZGF0YS5jaHVuaykpIHtcbiAgICAgICAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7Zm9yY2VJbnZhbGlkRnJhbWU6IHRydWV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmVjZWl2ZXIudHJhbnNmb3JtID0gbmV3IFJUQ1J0cFNjcmlwdFRyYW5zZm9ybSh3b3JrZXIsIHtcbiAgICAgICAgICAgICAgICBraW5kOiB0cmFjay5raW5kLFxuICAgICAgICAgICAgICAgIGNvZGVjOiB2aWRlb0NvZGVjXG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZFZpZGVvRnJhbWUsIFJUQ0VuY29kZWRWaWRlb0ZyYW1lPiA9IGFzeW5jKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZFZpZGVvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgbGV0IHN1cnJvZ2F0ZTogU3Vycm9nYXRlRnJhbWVUeXBlO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNodW5rLnR5cGUgPT09ICdrZXknKSB7XG4gICAgICAgICAgICAgICAgICBzdXJyb2dhdGUgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldEludmFsaWRTdXJyb2dhdGVWaWRlb0lGcmFtZSh2aWRlb0NvZGVjKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgc3Vycm9nYXRlID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUodmlkZW9Db2RlYyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHN1cnJvZ2F0ZSA9PT0gU2tpcEZyYW1lKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IHN1cnJvZ2F0ZSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjaHVuay50eXBlID09PSAna2V5Jykge1xuICAgICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyh2aWRlb0NvZGVjKSB8fCBjaHVuay5kYXRhO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBjaHVuay5kYXRhID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKHZpZGVvQ29kZWMpIHx8IGNodW5rLmRhdGE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHJlY2VpdmVyU3RyZWFtcyA9IHJlY2VpdmVyLmNyZWF0ZUVuY29kZWRTdHJlYW1zKCk7XG4gICAgICAgICAgICBjb25zdCBzb3VyY2UgPSByZWNlaXZlclN0cmVhbXMucmVhZGFibGU7XG4gICAgICAgICAgICBjb25zdCBzaW5rID0gcmVjZWl2ZXJTdHJlYW1zLndyaXRhYmxlO1xuXG4gICAgICAgICAgICBzb3VyY2VcbiAgICAgICAgICAgICAgLnBpcGVUaHJvdWdoKHRyYW5zZm9ybWVyKVxuICAgICAgICAgICAgICAucGlwZVRvKHNpbmspO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgY2FzZSAnYXVkaW8nOiB7XG4gICAgICAgICAgaWYgKGVuY29kZWRBdWRpb1N0cmVhbVNpbmspIHtcbiAgICAgICAgICAgIGlmIChGZWF0dXJlRW5hYmxlbWVudC5pc1JUQ1J0cFNjcmlwdFRyYW5zZm9ybVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4vV29ya2VyVHJhbnNmb3JtU3RyZWFtLnRzJywgaW1wb3J0Lm1ldGEudXJsKSwge3R5cGU6ICdtb2R1bGUnfSk7XG5cbiAgICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGFzeW5jIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWF3YWl0IGVuY29kZWRBdWRpb1N0cmVhbVNpbmsodHJhY2ssIGV2ZW50LmRhdGEuY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe2ZvcmNlSW52YWxpZEZyYW1lOiB0cnVlfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgIHJlY2VpdmVyLnRyYW5zZm9ybSA9IG5ldyBSVENSdHBTY3JpcHRUcmFuc2Zvcm0od29ya2VyLCB7XG4gICAgICAgICAgICAgICAga2luZDogdHJhY2sua2luZCxcbiAgICAgICAgICAgICAgICBjb2RlYzogYXVkaW9Db2RlY1xuICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICBjb25zdCBtZWRpYVN0cmVhbSA9IG5ldyBNZWRpYVN0cmVhbSgpO1xuICAgICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICAgIGF1ZGlvUHVtcGVyLnNyY09iamVjdCA9IG1lZGlhU3RyZWFtO1xuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGF1ZGlvUHVtcGVyKTtcblxuICAgICAgICAgICAgICBkaXNwb3NhYmxlcy5hZGQobmV3IERpc3Bvc2FibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGF1ZGlvUHVtcGVyKTtcbiAgICAgICAgICAgICAgfSkpO1xuXG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBlbmNvZGVkU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8UlRDRW5jb2RlZEF1ZGlvRnJhbWUsIFJUQ0VuY29kZWRBdWRpb0ZyYW1lPiA9IGFzeW5jKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghYXdhaXQgZW5jb2RlZEF1ZGlvU3RyZWFtU2luayh0cmFjaywgY2h1bmspKSB7XG4gICAgICAgICAgICAgICAgY2h1bmsuZGF0YSA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSgpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNodW5rLmRhdGEgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLmdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMoYXVkaW9Db2RlYykgfHwgY2h1bmsuZGF0YTtcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogZW5jb2RlZFN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCByZWNlaXZlclN0cmVhbXMgPSByZWNlaXZlci5jcmVhdGVFbmNvZGVkU3RyZWFtcygpO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcmVjZWl2ZXJTdHJlYW1zLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IHJlY2VpdmVyU3RyZWFtcy53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge2Rpc3Bvc2FibGVzfTtcbiAgfVxuXG4gIHN0YXRpYyBhcHBseUluc2VydGFibGVTdHJlYW1UcmFuc2Zvcm1hdGlvbihzdHJlYW06IE1lZGlhU3RyZWFtLCB2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VmlkZW9GcmFtZT4sIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IElTdHJlYW1UcmFja1RyYW5zZm9ybTxBdWRpb0RhdGE+KToge3RyYW5zZm9ybWVkU3RyZWFtOiBNZWRpYVN0cmVhbTsgZGlzcG9zYWJsZXM6IERpc3Bvc2FibGVMaXN0fSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZWRTdHJlYW0gPSBuZXcgTWVkaWFTdHJlYW0oKTtcbiAgICBjb25zdCBkaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcblxuICAgIHN0cmVhbS5nZXRUcmFja3MoKS5mb3JFYWNoKHRyYWNrID0+IHtcbiAgICAgIGNvbnN0IGtpbmQ6IE1lZGlhU3RyZWFtVHJhY2tLaW5kID0gdHJhY2sua2luZCBhcyBNZWRpYVN0cmVhbVRyYWNrS2luZDtcblxuICAgICAgc3dpdGNoIChraW5kKSB7XG4gICAgICAgIGNhc2UgJ3ZpZGVvJzoge1xuICAgICAgICAgIGlmICh2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8VmlkZW9GcmFtZSwgVmlkZW9GcmFtZT4gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgICAgICAgICAgdmlkZW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayh0cmFjaywgY2h1bmssIGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgdmlkZW9UcmFjayA9IHRyYWNrIGFzIE1lZGlhU3RyZWFtVmlkZW9UcmFjaztcbiAgICAgICAgICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7dHJhbnNmb3JtOiBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3NvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yKHt0cmFjazogdmlkZW9UcmFja30pO1xuICAgICAgICAgICAgY29uc3QgZ2VuZXJhdG9yID0gbmV3IE1lZGlhU3RyZWFtVHJhY2tHZW5lcmF0b3Ioe2tpbmQ6IHZpZGVvVHJhY2sua2luZH0pO1xuICAgICAgICAgICAgY29uc3Qgc291cmNlID0gcHJvY2Vzc29yLnJlYWRhYmxlO1xuICAgICAgICAgICAgY29uc3Qgc2luayA9IGdlbmVyYXRvci53cml0YWJsZTtcblxuICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgIC5waXBlVGhyb3VnaCh0cmFuc2Zvcm1lcilcbiAgICAgICAgICAgICAgLnBpcGVUbyhzaW5rKTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0uYWRkVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgIGRpc3Bvc2FibGVzLmFkZChuZXcgRGlzcG9zYWJsZSgoKSA9PiB7XG4gICAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLnJlbW92ZVRyYWNrKGdlbmVyYXRvcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGNhc2UgJ2F1ZGlvJzoge1xuICAgICAgICAgIGlmIChhdWRpb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrKSB7XG4gICAgICAgICAgICBjb25zdCBpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2s6IFRyYW5zZm9ybWVyVHJhbnNmb3JtQ2FsbGJhY2s8QXVkaW9EYXRhLCBBdWRpb0RhdGE+ID0gKGNodW5rLCBjb250cm9sbGVyKSA9PiB7XG4gICAgICAgICAgICAgIGF1ZGlvU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2sodHJhY2ssIGNodW5rLCBjb250cm9sbGVyKTtcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGF1ZGlvVHJhY2sgPSB0cmFjayBhcyBNZWRpYVN0cmVhbUF1ZGlvVHJhY2s7XG4gICAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe3RyYW5zZm9ybTogaW5zZXJ0YWJsZVN0cmVhbVRyYW5zZm9ybUNhbGxiYWNrfSk7XG4gICAgICAgICAgICBjb25zdCBwcm9jZXNzb3IgPSBuZXcgTWVkaWFTdHJlYW1UcmFja1Byb2Nlc3Nvcih7dHJhY2s6IGF1ZGlvVHJhY2t9KTtcbiAgICAgICAgICAgIGNvbnN0IGdlbmVyYXRvciA9IG5ldyBNZWRpYVN0cmVhbVRyYWNrR2VuZXJhdG9yKHtraW5kOiBhdWRpb1RyYWNrLmtpbmR9KTtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZSA9IHByb2Nlc3Nvci5yZWFkYWJsZTtcbiAgICAgICAgICAgIGNvbnN0IHNpbmsgPSBnZW5lcmF0b3Iud3JpdGFibGU7XG5cbiAgICAgICAgICAgIHNvdXJjZVxuICAgICAgICAgICAgICAucGlwZVRocm91Z2godHJhbnNmb3JtZXIpXG4gICAgICAgICAgICAgIC5waXBlVG8oc2luayk7XG5cbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKGdlbmVyYXRvcik7XG5cbiAgICAgICAgICAgIGNvbnN0IG1lZGlhU3RyZWFtID0gbmV3IE1lZGlhU3RyZWFtKCk7XG4gICAgICAgICAgICBjb25zdCBhdWRpb1B1bXBlciA9IG5ldyBBdWRpbygpO1xuXG4gICAgICAgICAgICBtZWRpYVN0cmVhbS5hZGRUcmFjayh0cmFjayk7XG4gICAgICAgICAgICBhdWRpb1B1bXBlci5zcmNPYmplY3QgPSBtZWRpYVN0cmVhbTtcbiAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYXVkaW9QdW1wZXIpO1xuICAgICAgICAgICAgZGlzcG9zYWJsZXMuYWRkKG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgICAgICAgICAgdHJhbnNmb3JtZWRTdHJlYW0ucmVtb3ZlVHJhY2soZ2VuZXJhdG9yKTtcbiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhdWRpb1B1bXBlcik7XG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkU3RyZWFtLmFkZFRyYWNrKHRyYWNrKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgYXNzZXJ0VW5yZWFjaGFibGUoa2luZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHJhbnNmb3JtZWRTdHJlYW0sXG4gICAgICBkaXNwb3NhYmxlc1xuICAgIH07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0luc2VydGFibGVTdHJlYW1zIGlzIGEgc3RhdGljIGNsYXNzIHRoYXQgbWF5IG5vdCBiZSBpbnN0YW50aWF0ZWQnKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJU3RyZWFtVHJhY2tUcmFuc2Zvcm08VCA9IEF1ZGlvRGF0YSB8IFZpZGVvRnJhbWU+IHtcbiAgICAodHJhY2s6IE1lZGlhU3RyZWFtVHJhY2ssIGNodW5rOiBULCBjb250cm9sbGVyOiBUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlcjxUPik6IHZvaWQgfCBQcm9taXNlTGlrZTx2b2lkPjtcbn1cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3RyZWFtVHJhY2tUcmFuc2Zvcm0ge1xuICBzdGF0aWMgdmFsaWRhdGVNZWRpYVN0cmVhbVRyYWNrVHJhbnNmb3JtKG1vZGU6ICdhdWRpbycgfCAndmlkZW8nLCBpdGVtOiBJU3RyZWFtVHJhY2tUcmFuc2Zvcm0pIHtcbiAgICBpZiAodHlwZW9mIGl0ZW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbGlkOiBmYWxzZSxcbiAgICAgICAgdmFsaWRhdGlvblJlc3VsdDogYFVuZXhwZWN0ZWQgJHttb2RlfSBNZWRpYSBTdHJlYW0gVHJhY2sgdHJhbnNmb3JtIGZ1bmN0aW9uIHR5cGUuIEZvdW5kIFske3R5cGVvZiBpdGVtfV1gXG4gICAgICB9O1xuICAgIH1cblxuICAgIGlmIChpdGVtLmxlbmd0aCAhPT0gMykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICB2YWxpZGF0aW9uUmVzdWx0OiBgVW5leHBlY3RlZCAke21vZGV9IE1lZGlhIFN0cmVhbSBUcmFjayB0cmFuc2Zvcm0gZnVuY3Rpb24gcGFyYW1ldGVyIGxlbmd0aC4gRXhwZWN0ZWQgMy4gRm91bmQgWyR7aXRlbS5sZW5ndGh9XWBcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgdmFsaWRhdGlvblJlc3VsdDogJ29rJ1xuICAgIH07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuaW1wb3J0IEJyb3dzZXJEZXRlY3RvciBmcm9tICcuLi8uLi9kb20vQnJvd3NlckRldGVjdG9yJztcblxuZXhwb3J0IGNvbnN0IFNraXBGcmFtZSA9IFN5bWJvbCgpO1xuXG5leHBvcnQgdHlwZSBTdXJyb2dhdGVGcmFtZVR5cGUgPSBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB8IHR5cGVvZiBTa2lwRnJhbWU7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNTYWZhcmkgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdTYWZhcmknO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNNb2JpbGVDaHJvbWUgPSBCcm93c2VyRGV0ZWN0b3IuYnJvd3Nlck5hbWUgPT09ICdDaHJvbWUnICYmIEJyb3dzZXJEZXRlY3Rvci5pc01vYmlsZSgpO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfaXNBbmRyb2lkQ2hyb21lID0gQnJvd3NlckRldGVjdG9yLmJyb3dzZXJOYW1lID09PSAnQ2hyb21lJyAmJiBCcm93c2VyRGV0ZWN0b3IuaXNBbmRyb2lkO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfc2luZ2xlWmVyb0J5dGUgPSBuZXcgVWludDhBcnJheShbMHgwMF0pO1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjID0ge09QVVM6IG5ldyBVaW50OEFycmF5KFsweDY4LCAweDA3LCAweGQ5LCAweGFiLCAweGJjLCAweDc5LCAweDg3LCAweGFiLCAweDhlLCAweDRhLCAweDE0LCAweGYzLCAweGE3LCAweDFjLCAweGYyLCAweDlhLCAweDdhLCAweDQ1LCAweGE3LCAweDJkLCAweDQ0LCAweDI1LCAweDc0LCAweDRjLCAweGFkLCAweDE2LCAweGIzLCAweDBlLCAweDUxLCAweDU3LCAweGVhLCAweGU3LCAweGFkLCAweDJhLCAweDM4LCAweGNlLCAweDMzXSl9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2NywgMHhmNCwgMHgwMCwgMHgwYSwgMHg5MSwgMHg5YiwgMHgyYiwgMHhmMSwgMHhmMSwgMHhmOCwgMHgwOCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMywgMHgwMCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgxOSwgMHgwNywgMHg4OSwgMHgxMiwgMHhjYiwgLy8gU2VxdWVuY2UgcGFyYW1ldGVyIHNldFxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg2OCwgMHhlYiwgMHhlMywgMHhjNCwgMHg0OCwgMHg0NCwgLy8gUGljdHVyZSBwYXJhbXRlciBzZXRcbiAgICAgIC8qICovIDB4MDAsIDB4MDAsIDB4MDEsIDB4NjUsIDB4ODgsIDB4ODIsIDB4MDAsIDB4M2YsIDB4NzAsIDB4MjMsIDB4ODYsIDB4ZTYsIDB4ZDEsIDB4ODAsIDB4MDksIDB4YWYsIDB4MGEsIDB4NDEsIDB4NjYsIDB4NmIsIDB4NTQsIDB4NDYsIDB4ZmIsIDB4NzEsIDB4ZDksIDB4N2YsIDB4ZmYsIDB4ZmYsIDB4ZjldKSwgLy8gU2xpY2UgbGF5ZXI6IGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHhiMCwgMHgwMiwgMHgwMCwgMHg5ZCwgMHgwMSwgMHgyYSwgMHgwMSwgMHgwMCwgMHgwMSwgMHgwMCwgMHgzOSwgMHg2YiwgMHgwMCwgMHgyNywgMHgxYywgMHgyNCwgMHgwYywgMHgyYywgMHgyYywgMHg0NCwgMHhjYywgMHgyNCwgMHg0MSwgMHhhOCwgMHgwMCwgMHgxMywgMHhhNywgMHhhMywgMHg3YSwgMHg1MCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODIsIDB4NDksIDB4ODMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDYsIDB4NzYsIDB4MzgsIDB4MjQsIDB4MWMsIDB4MTksIDB4YTAsIDB4MDAsIDB4MDAsIDB4MjAsIDB4NDAsIDB4MDAsIDB4MTEsIDB4YmYsIDB4ZGQsIDB4NzcsIDB4ZmYsIDB4NDAsIDB4N2YsIDB4YjEsIDB4MDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXkyeDJWaWRlb1BGcmFtZVBlckNvZGVjID0ge1xuICAgIEgyNjQ6IG5ldyBVaW50OEFycmF5KFtcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDksIDB4ZjAsIC8vIEFjY2VzcyB1bml0IGRlbGltaXRlclxuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHg0MSwgMHg5YSwgMHg2OCwgMHg0OSwgMHhhOCwgMHg0MSwgMHg2OCwgMHg5OSwgMHg0YywgMHgwZiwgMHhmZiwgMHg5MiwgMHg4MV0pLCAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gICAgVlA4OiBuZXcgVWludDhBcnJheShbMHgzMSwgMHgwMywgMHgwMCwgMHhlNCwgMHhlMCwgMHhhOCwgMHg5YiwgMHgzNywgMHhhZiwgMHgxMCwgMHg0ZiwgMHg0ZiwgMHhiMSwgMHgwYSwgMHgyZiwgMHhlNCwgMHg5MiwgMHhjMCwgMHgxZiwgMHhlNywgMHg0ZiwgMHg0NiwgMHhmZiwgMHhlZSwgMHg1MSwgMHhjMSwgMHg1ZCwgMHgwMCwgMHhmZSwgMHhlYiwgMHhkZSwgMHgyZiwgMHg4YSwgMHgxZSwgMHg2YiwgMHg3YiwgMHgwNywgMHg3MiwgMHg2MywgMHgwOSwgMHhhNCwgMHg4ZSwgMHhjMF0pLFxuICAgIFZQOTogbmV3IFVpbnQ4QXJyYXkoWzB4ODYsIDB4MDAsIDB4NDAsIDB4OTIsIDB4OWMsIDB4MjQsIDB4NDgsIDB4MDAsIDB4MDAsIDB4MDMsIDB4NzAsIDB4MDAsIDB4MDAsIDB4NGIsIDB4NDBdKVxuICB9O1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBfZHVtbXk4Mng4MkgyNjQgPSB7XG4gICAgSUZyYW1lOiBuZXcgVWludDhBcnJheShbXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY3LCAweDQyLCAweGMwLCAweDBkLCAweGRhLCAweDE4LCAweGRlLCAweDIyLCAweDIyLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAwLCAweDEwLCAweDAwLCAweDAwLCAweDAzLCAweDAzLCAweGM4LCAweGYxLCAweDQyLCAweGFhLCAvLyBTZXF1ZW5jZSBwYXJhbWV0ZXIgc2V0XG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY4LCAweGNlLCAweDBmLCAweGM4LCAvLyBQaWN0dXJlIHBhcmFtZXRlciBzZXRcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDYsIDB4MDMsIC4uLm5ldyBVaW50OEFycmF5KDQwKS5maWxsKDB4ZmYpLCAweDVmLCAuLi5uZXcgVWludDhBcnJheSgxMDI5NSkuZmlsbCgweGZmKSwgMHg4MCwgLy8gU3VwcGxlbWVudGFsIGVuaGFuY2VtZW50IGluZm9ybWF0aW9uIChTRUkpXG4gICAgICAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDY1LCAweDg4LCAweDg0LCAweDA1LCAuLi5uZXcgVWludDhBcnJheSgzKS5maWxsKDB4ZmYpLCAweDBmLCAweDQ1LCAweDAwLCAweDAxLCAweDU3LCAweDlmLCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDI3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc1LCAweGQ3LCAweDVkLCAweDc4XSksIC8vIFNsaWNlIGxheWVyOiBJZHIgZGF0YVxuICAgIFBGcmFtZTogbmV3IFVpbnQ4QXJyYXkoW1xuICAgICAgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwNiwgMHgwMywgLi4ubmV3IFVpbnQ4QXJyYXkoNDApLmZpbGwoMHhmZiksIDB4YTQsIC4uLm5ldyBVaW50OEFycmF5KDEwMzY0KS5maWxsKDB4ZmYpLCAweDgwLCAvLyBTRUlcbiAgICAgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDEsIDB4NDEsIDB4OWEsIDB4MjAsIDB4MTUsIDB4ZjAsIDB4NGJdKSAvLyBTbGljZSBsYXllcjogbm9uIGlkciBkYXRhXG4gIH07XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF9kdW1teTgyeDgySDI2NFBGcmFtZUZyYW1lTnVtYmVySW5kZXggPSAxMDQxODtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXJSZXNldCA9IDE7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IF91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNNb2JpbGVDaHJvbWUgfHwgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNTYWZhcmk7XG4gIHByaXZhdGUgc3RhdGljIF9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVBdWRpb1NpbGVudFBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdPUFVTJzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjLk9QVVMuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldEludmFsaWRTdXJyb2dhdGVBdWRpb0RhdGEoKTogQXJyYXlCdWZmZXIge1xuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBzdGF0aWMgZ2V0U3Vycm9nYXRlVmlkZW9JRnJhbWVQZXJDb2RlYyhjb2RlYzogc3RyaW5nKTogQXJyYXlCdWZmZXIgfCB1bmRlZmluZWQge1xuICAgIHN3aXRjaCAoY29kZWMudG9VcHBlckNhc2UoKSkge1xuICAgICAgY2FzZSAnSDI2NCc6IHtcbiAgICAgICAgaWYgKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15ODJ4ODJIMjY0LklGcmFtZS5idWZmZXI7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLkgyNjQuYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDgnOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvSUZyYW1lUGVyQ29kZWMuVlA4LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnVlA5Jzoge1xuICAgICAgICByZXR1cm4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXkyeDJWaWRlb0lGcmFtZVBlckNvZGVjLlZQOS5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0SW52YWxpZFN1cnJvZ2F0ZVZpZGVvSUZyYW1lKGNvZGVjOiBzdHJpbmcpOiBTdXJyb2dhdGVGcmFtZVR5cGUge1xuICAgIGlmICgoY29kZWMudG9VcHBlckNhc2UoKSA9PT0gJ0gyNjQnKSAmJiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKSB7XG4gICAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0O1xuXG4gICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5faXNBbmRyb2lkQ2hyb21lKSB7XG4gICAgICAgIHJldHVybiBTa2lwRnJhbWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdXJyb2dhdGVWaWRlb1BGcmFtZVBlckNvZGVjKGNvZGVjOiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB8IHVuZGVmaW5lZCB7XG4gICAgc3dpdGNoIChjb2RlYy50b1VwcGVyQ2FzZSgpKSB7XG4gICAgICBjYXNlICdIMjY0Jzoge1xuICAgICAgICBpZiAoU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fdXNlVXBkYXRlU3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcikge1xuICAgICAgICAgIGNvbnN0IGJ1ZmZlciA9IFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlcigpO1xuXG4gICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuSDI2NC5idWZmZXI7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ1ZQOCc6IHtcbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX2R1bW15MngyVmlkZW9QRnJhbWVQZXJDb2RlYy5WUDguYnVmZmVyO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdWUDknOiB7XG4gICAgICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMuVlA5LmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUoY29kZWM6IHN0cmluZyk6IFN1cnJvZ2F0ZUZyYW1lVHlwZSB7XG4gICAgaWYgKChjb2RlYy50b1VwcGVyQ2FzZSgpID09PSAnSDI2NCcpICYmIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3VzZVVwZGF0ZVN1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIpIHtcbiAgICAgIGNvbnN0IHNhdmVkU3Vycm9nYXRlRnJhbWVOdW1iZXIgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyO1xuICAgICAgY29uc3QgYnVmZmVyID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5nZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk7XG5cbiAgICAgIGlmIChzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyID4gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0KSB7XG4gICAgICAgIGlmIChTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9pc0FuZHJvaWRDaHJvbWUpIHtcbiAgICAgICAgICByZXR1cm4gU2tpcEZyYW1lO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3NpbmdsZVplcm9CeXRlLmJ1ZmZlcjtcbiAgICAgIH1cblxuICAgICAgU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlcisrO1xuXG4gICAgICByZXR1cm4gYnVmZmVyO1xuICAgIH1cblxuICAgIHJldHVybiBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zaW5nbGVaZXJvQnl0ZS5idWZmZXI7XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRTdXJyb2dhdGU4Mng4MlBGcmFtZUFuZFVwZGF0ZUZyYW1lTnVtYmVyKCk6IEFycmF5QnVmZmVyIHtcbiAgICBjb25zdCBiaXRNYXNrMSA9IDB4MGU7XG4gICAgY29uc3QgYml0TWFzazIgPSAweDAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0UmlnaHRCeTEgPSAxO1xuICAgIGNvbnN0IGJpdFNoaWZ0TGVmdEJ5NyA9IDc7XG4gICAgY29uc3QgYnl0ZTEgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMSkgPj4gYml0U2hpZnRSaWdodEJ5MSk7XG4gICAgY29uc3QgYnl0ZTIgPSAoKFN1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIuX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIgJiBiaXRNYXNrMikgPDwgYml0U2hpZnRMZWZ0Qnk3KTtcbiAgICBjb25zdCBjb3B5T2ZEdW1teVBGcmFtZXMgPSBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9kdW1teTgyeDgySDI2NC5QRnJhbWUuc2xpY2UoKTtcbiAgICBjb25zdCBidWZmZXIgPSBjb3B5T2ZEdW1teVBGcmFtZXMuYnVmZmVyO1xuICAgIGNvbnN0IGJ1ZmZlckluZGV4ID0gU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlci5fZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4O1xuXG4gICAgYnVmZmVyW2J1ZmZlckluZGV4XSB8PSBieXRlMTtcbiAgICBidWZmZXJbYnVmZmVySW5kZXggKyAxXSB8PSBieXRlMjtcbiAgICBTdXJyb2dhdGVGcmFtZURhdGFNYW5hZ2VyLl9zdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyKys7XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIgaXMgYSBzdGF0aWMgY2xhc3MgdGhhdCBtYXkgbm90IGJlIGluc3RhbnRpYXRlZCcpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5kZWNsYXJlIGNvbnN0IF9fQlVJTERfVkVSU0lPTl9fOiBzdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFZlcnNpb25NYW5hZ2VyIHtcbiAgcHJpdmF0ZSBzdGF0aWMgX2RlZmF1bHRWZXJzaW9uID0gbmV3IERhdGUoKS50b0lTT1N0cmluZygpO1xuXG4gIHN0YXRpYyBnZXQgc2RrVmVyc2lvbigpOiBzdHJpbmcge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gX19CVUlMRF9WRVJTSU9OX187XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWZXJzaW9uO1xuICAgIH1cbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IFRlbGVtZXRyeVNlcnZpY2UgZnJvbSAnLi9UZWxlbWV0cnlTZXJ2aWNlJztcbmltcG9ydCBUZWxlbWV0cnlDb25maWd1cmF0aW9uIGZyb20gJy4vVGVsZW1ldHJ5Q29uZmlndXJhdGlvbic7XG5pbXBvcnQge0lBcHBlbmRlcn0gZnJvbSAnLi4vbG9nZ2VyL0lBcHBlbmRlcic7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUFwcGVuZGVyIGltcGxlbWVudHMgSUFwcGVuZGVyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5U2VydmljZTogVGVsZW1ldHJ5U2VydmljZTtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVuYW5jeTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IF9zZXNzaW9uSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfdGhyZXNob2xkOiBMb2dnaW5nTGV2ZWw7XG5cbiAgY29uc3RydWN0b3IodGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbikge1xuICAgIHRoaXMuX3RlbmFuY3kgPSB0ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3k7XG4gICAgdGhpcy5fc2Vzc2lvbklkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQ7XG4gICAgdGhpcy5fdGhyZXNob2xkID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi50aHJlc2hvbGQ7XG4gICAgdGhpcy5fdGVsZW1ldHJ5U2VydmljZSA9IG5ldyBUZWxlbWV0cnlTZXJ2aWNlKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pO1xuICB9XG5cbiAgbG9nKGxvZ0xldmVsOiBMb2dnaW5nTGV2ZWwsIG1lc3NhZ2U6IHN0cmluZywgY2F0ZWdvcnk6IHN0cmluZywgZGF0ZTogRGF0ZSk6IHZvaWQge1xuICAgIGlmIChsb2dMZXZlbCA8IHRoaXMuX3RocmVzaG9sZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX3RlbGVtZXRyeVNlcnZpY2UucHVzaChsb2dMZXZlbCwgbWVzc2FnZSwgY2F0ZWdvcnksIGRhdGUpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgR2xvYmFsU2NvcGUgZnJvbSAnLi4vZ2xvYmFsU2NvcGUvR2xvYmFsU2NvcGUnO1xuaW1wb3J0IHtMb2dnaW5nTGV2ZWx9IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXInO1xuaW1wb3J0IExvZ2dlckRlZmF1bHRzIGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJEZWZhdWx0cyc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24ge1xuICBwcml2YXRlIF91cmwgPSAnaHR0cHM6Ly90ZWxlbWV0cnkucGhlbml4cnRzLmNvbS90ZWxlbWV0cnkvbG9ncyc7XG4gIHByaXZhdGUgX3RlbmFuY3k6IHN0cmluZztcbiAgcHJpdmF0ZSBfc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHByaXZhdGUgX2Vudmlyb25tZW50OiBzdHJpbmc7XG4gIHByaXZhdGUgX3BhZ2VMb2FkVGltZTogbnVtYmVyO1xuICBwcml2YXRlIF90aHJlc2hvbGQgPSBMb2dnZXJEZWZhdWx0cy5kZWZhdWx0VGVsZW1ldHJ5TG9nZ2luZ0xldmVsO1xuXG4gIGdldCB1cmwoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fdXJsO1xuICB9XG5cbiAgc2V0IHVybCh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IHRlbGVtZXRyeVVybCA9IG5ldyBHbG9iYWxTY29wZS5VUkwodXJsKTtcblxuICAgIHRlbGVtZXRyeVVybC5wYXRobmFtZSA9IHRlbGVtZXRyeVVybC5wYXRobmFtZSArICcvbG9ncyc7XG5cbiAgICB0aGlzLl91cmwgPSB0ZWxlbWV0cnlVcmwudG9TdHJpbmcoKTtcbiAgfVxuXG4gIGdldCBlbnZpcm9ubWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9lbnZpcm9ubWVudDtcbiAgfVxuXG4gIHNldCBlbnZpcm9ubWVudChlbnZpcm9ubWVudDogc3RyaW5nKSB7XG4gICAgdGhpcy5fZW52aXJvbm1lbnQgPSBlbnZpcm9ubWVudDtcbiAgfVxuXG4gIGdldCB0ZW5hbmN5KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX3RlbmFuY3k7XG4gIH1cblxuICBzZXQgdGVuYW5jeSh0ZW5hbmN5OiBzdHJpbmcpIHtcbiAgICB0aGlzLl90ZW5hbmN5ID0gdGVuYW5jeTtcbiAgfVxuXG4gIGdldCBzZXNzaW9uSWQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbklkO1xuICB9XG5cbiAgc2V0IHNlc3Npb25JZChzZXNzaW9uSWQ6IHN0cmluZykge1xuICAgIHRoaXMuX3Nlc3Npb25JZCA9IHNlc3Npb25JZDtcbiAgfVxuXG4gIGdldCBwYWdlTG9hZFRpbWUoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5fcGFnZUxvYWRUaW1lO1xuICB9XG5cbiAgc2V0IHBhZ2VMb2FkVGltZShwYWdlTG9hZFRpbWU6IG51bWJlcikge1xuICAgIHRoaXMuX3BhZ2VMb2FkVGltZSA9IHBhZ2VMb2FkVGltZTtcbiAgfVxuXG4gIGdldCB0aHJlc2hvbGQoKTogTG9nZ2luZ0xldmVsIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyZXNob2xkO1xuICB9XG5cbiAgc2V0IHRocmVzaG9sZCh0aHJlc2hvbGQ6IExvZ2dpbmdMZXZlbCkge1xuICAgIHRoaXMuX3RocmVzaG9sZCA9IHRocmVzaG9sZDtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IEdsb2JhbFNjb3BlIGZyb20gJy4uL2dsb2JhbFNjb3BlL0dsb2JhbFNjb3BlJztcbmltcG9ydCBOdW1iZXJzIGZyb20gJy4uL2xhbmcvTnVtYmVycyc7XG5pbXBvcnQge0xvZ2dpbmdMZXZlbH0gZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlcic7XG5pbXBvcnQgVGVsZW1ldHJ5Q29uZmlndXJhdGlvbiBmcm9tICcuL1RlbGVtZXRyeUNvbmZpZ3VyYXRpb24nO1xuaW1wb3J0IFZlcnNpb25NYW5hZ2VyIGZyb20gJy4uL3Nkay92ZXJzaW9uL1ZlcnNpb25NYW5hZ2VyJztcblxuY29uc3QgcmVxdWVzdFNpemVMaW1pdCA9IDgxOTI7XG5cbmludGVyZmFjZSBJTG9nSXRlbSB7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICB0ZW5hbmN5OiBzdHJpbmc7XG4gIGxldmVsOiBzdHJpbmc7XG4gIGNhdGVnb3J5OiBzdHJpbmc7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc2Vzc2lvbklkOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbiAgZnVsbFF1YWxpZmllZE5hbWU6IHN0cmluZztcbiAgcnVudGltZTogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZWxlbWV0cnlTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjogVGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcblxuICBwcml2YXRlIF9sb2dzOiBBcnJheTxJTG9nSXRlbT4gPSBbXTtcbiAgcHJpdmF0ZSBfaXNTZW5kaW5nOiBib29sZWFuO1xuICBwcml2YXRlIF9kb21haW4gPSBHbG9iYWxTY29wZS5sb2NhdGlvbkhvc3RuYW1lO1xuXG4gIGNvbnN0cnVjdG9yKHRlbGVtZXRyeUNvbmZpZ3VyYXRpb246IFRlbGVtZXRyeUNvbmZpZ3VyYXRpb24pIHtcbiAgICB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uID0gdGVsZW1ldHJ5Q29uZmlndXJhdGlvbjtcbiAgfVxuXG4gIHB1c2gobG9nTGV2ZWw6IExvZ2dpbmdMZXZlbCwgbWVzc2FnZTogc3RyaW5nLCBjYXRlZ29yeTogc3RyaW5nLCB0aW1lc3RhbXA6IERhdGUpOiB2b2lkIHtcbiAgICBjb25zdCBydW50aW1lID0gKHRpbWVzdGFtcC52YWx1ZU9mKCkgLSB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnBhZ2VMb2FkVGltZSkgLyAxMDAwO1xuICAgIGNvbnN0IGxvZ1JlY29yZCA9IHtcbiAgICAgIHRpbWVzdGFtcDogdGltZXN0YW1wLnRvSVNPU3RyaW5nKCksXG4gICAgICB0ZW5hbmN5OiB0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnRlbmFuY3ksXG4gICAgICBsZXZlbDogTG9nZ2luZ0xldmVsW2xvZ0xldmVsXSxcbiAgICAgIGNhdGVnb3J5LFxuICAgICAgbWVzc2FnZSxcbiAgICAgIHNlc3Npb25JZDogdGhpcy5fdGVsZW1ldHJ5Q29uZmlndXJhdGlvbi5zZXNzaW9uSWQsXG4gICAgICB2ZXJzaW9uOiBWZXJzaW9uTWFuYWdlci5zZGtWZXJzaW9uLFxuICAgICAgZW52aXJvbm1lbnQ6IHRoaXMuX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24uZW52aXJvbm1lbnQsXG4gICAgICBmdWxsUXVhbGlmaWVkTmFtZTogdGhpcy5fZG9tYWluLFxuICAgICAgcnVudGltZVxuICAgIH07XG5cbiAgICBpZiAobG9nTGV2ZWwgPCBMb2dnaW5nTGV2ZWwuRXJyb3IpIHtcbiAgICAgIHRoaXMuX2xvZ3MucHVzaChsb2dSZWNvcmQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sb2dzLnVuc2hpZnQobG9nUmVjb3JkKTtcbiAgICB9XG5cbiAgICBjb25zdCBpZ25vcmVkID0gdGhpcy5zZW5kTG9nc0lmQWJsZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9ncyhsb2dNZXNzYWdlczogQXJyYXk8SUxvZ0l0ZW0+KTogUHJvbWlzZTxSZXNwb25zZSB8IHZvaWQ+IHtcbiAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBHbG9iYWxTY29wZS5Gb3JtRGF0YSgpO1xuXG4gICAgZm9ybURhdGEuYXBwZW5kKCdqc29uQm9keScsIEpTT04uc3RyaW5naWZ5KHtyZWNvcmRzOiBsb2dNZXNzYWdlc30pKTtcblxuICAgIHJldHVybiBhd2FpdCBHbG9iYWxTY29wZS5mZXRjaCh0aGlzLl90ZWxlbWV0cnlDb25maWd1cmF0aW9uLnVybCwge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICBib2R5OiBmb3JtRGF0YVxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzZW5kTG9nc0lmQWJsZSgpOiBQcm9taXNlPFJlc3BvbnNlIHwgdm9pZD4ge1xuICAgIGlmICh0aGlzLl9sb2dzLmxlbmd0aCA8PSAwIHx8IHRoaXMuX2lzU2VuZGluZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBudW1iZXJPZkxvZ3NUb1NlbmQgPSAwO1xuICAgIGxldCBzaXplT2ZMb2dzVG9TZW5kID0gMDtcblxuICAgIHRoaXMuX2lzU2VuZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBnZXRJdGVtU2l6ZSA9IGl0ZW0gPT4gdHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gTnVtYmVycy5jb3VudE51bWJlckxlbmd0aChpdGVtKSA6IGl0ZW0ubGVuZ3RoO1xuICAgIGNvbnN0IGdldExvZ1NpemUgPSAobG9nOiBJTG9nSXRlbSk6IG51bWJlciA9PiBPYmplY3QudmFsdWVzKGxvZylcbiAgICAgIC5yZWR1Y2UoKHN1bSwgaXRlbSkgPT4gc3VtICsgKGl0ZW0gPyBnZXRJdGVtU2l6ZShpdGVtKSA6IDApLCAwKTtcblxuICAgIHdoaWxlICh0aGlzLl9sb2dzLmxlbmd0aCA+IG51bWJlck9mTG9nc1RvU2VuZCAmJiBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkgKyBzaXplT2ZMb2dzVG9TZW5kIDwgcmVxdWVzdFNpemVMaW1pdCkge1xuICAgICAgc2l6ZU9mTG9nc1RvU2VuZCArPSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSk7XG4gICAgICBudW1iZXJPZkxvZ3NUb1NlbmQrKztcbiAgICB9XG5cbiAgICBpZiAoIW51bWJlck9mTG9nc1RvU2VuZCkge1xuICAgICAgdGhpcy5fbG9nc1tudW1iZXJPZkxvZ3NUb1NlbmRdLm1lc3NhZ2UgPSB0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0ubWVzc2FnZS5zdWJzdHJpbmcoMCxcbiAgICAgICAgZ2V0TG9nU2l6ZSh0aGlzLl9sb2dzW251bWJlck9mTG9nc1RvU2VuZF0pICsgKHJlcXVlc3RTaXplTGltaXQgLSBnZXRMb2dTaXplKHRoaXMuX2xvZ3NbbnVtYmVyT2ZMb2dzVG9TZW5kXSkpKTtcbiAgICAgIG51bWJlck9mTG9nc1RvU2VuZCA9IDE7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nTWVzc2FnZXMgPSB0aGlzLl9sb2dzLnNsaWNlKDAsIG51bWJlck9mTG9nc1RvU2VuZCk7XG5cbiAgICB0aGlzLl9sb2dzID0gdGhpcy5fbG9ncy5zbGljZShudW1iZXJPZkxvZ3NUb1NlbmQpO1xuXG4gICAgcmV0dXJuIHRoaXMuc2VuZExvZ3MobG9nTWVzc2FnZXMpLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgdGhpcy5faXNTZW5kaW5nID0gZmFsc2U7XG5cbiAgICAgIGNvbnN0IGlnbm9yZWQgPSB0aGlzLnNlbmRMb2dzSWZBYmxlKCk7XG5cbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7XG4gICAgICB0aGlzLl9pc1NlbmRpbmcgPSBmYWxzZTtcblxuICAgICAgY29uc3QgaWdub3JlZCA9IHRoaXMuc2VuZExvZ3NJZkFibGUoKTtcbiAgICB9KTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEdXJhdGlvbnMge1xuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjogbnVtYmVyO1xuXG4gIGNvbnN0cnVjdG9yKGR1cmF0aW9uID0gMCkge1xuICAgIHRoaXMuX2R1cmF0aW9uID0gZHVyYXRpb247XG4gIH1cblxuICB0b0lzb1N0cmluZygpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl9kdXJhdGlvbiA9PT0gMCkge1xuICAgICAgcmV0dXJuICdQMFMnO1xuICAgIH1cblxuICAgIGNvbnN0IGlzTmVnYXRpdmUgPSB0aGlzLl9kdXJhdGlvbiA8IDA7XG4gICAgY29uc3QgZHVyYXRpb24gPSBpc05lZ2F0aXZlID8gTWF0aC5hYnModGhpcy5fZHVyYXRpb24pIDogdGhpcy5fZHVyYXRpb247XG4gICAgbGV0IG9mZnNldCA9IE1hdGguZmxvb3IoZHVyYXRpb24pO1xuICAgIGNvbnN0IG1pbGxpc2Vjb25kcyA9IG9mZnNldCAlIDEwMDA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDEwMDApO1xuXG4gICAgY29uc3Qgc2Vjb25kcyA9IG9mZnNldCAlIDYwO1xuXG4gICAgb2Zmc2V0ID0gTWF0aC5mbG9vcihvZmZzZXQgLyA2MCk7XG5cbiAgICBjb25zdCBtaW51dGVzID0gb2Zmc2V0ICUgNjA7XG5cbiAgICBvZmZzZXQgPSBNYXRoLmZsb29yKG9mZnNldCAvIDYwKTtcblxuICAgIGNvbnN0IGhvdXJzID0gb2Zmc2V0ICUgMjQ7XG4gICAgY29uc3QgcGFydHMgPSBbJ1BUJ107XG5cbiAgICBpZiAoaXNOZWdhdGl2ZSkge1xuICAgICAgcGFydHMudW5zaGlmdCgnLScpO1xuICAgIH1cblxuICAgIGlmIChob3Vycykge1xuICAgICAgcGFydHMucHVzaChob3VycyArICdIJyk7XG4gICAgfVxuXG4gICAgaWYgKG1pbnV0ZXMpIHtcbiAgICAgIHBhcnRzLnB1c2gobWludXRlcyArICdNJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlY29uZHMgfHwgbWlsbGlzZWNvbmRzKSB7XG4gICAgICBwYXJ0cy5wdXNoKFN0cmluZyhzZWNvbmRzKSk7XG5cbiAgICAgIGlmIChtaWxsaXNlY29uZHMpIHtcbiAgICAgICAgcGFydHMucHVzaCgnLicgKyB0aGlzLnBhZFN0YXJ0KG1pbGxpc2Vjb25kcy50b1N0cmluZygpLCAzLCAnMCcpKTtcbiAgICAgIH1cblxuICAgICAgcGFydHMucHVzaCgnUycpO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJ0cy5qb2luKCcnKTtcbiAgfVxuXG4gIHBhZFN0YXJ0KGl0ZW06IHN0cmluZywgdGFyZ2V0TGVuZ3RoOiBudW1iZXIsIHBhZFN0cmluZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICB0YXJnZXRMZW5ndGggPSB0YXJnZXRMZW5ndGggPj4gMDtcbiAgICBwYWRTdHJpbmcgPSBTdHJpbmcoKHR5cGVvZiBwYWRTdHJpbmcgIT09ICd1bmRlZmluZWQnID8gcGFkU3RyaW5nIDogJyAnKSk7XG5cbiAgICBpZiAoaXRlbS5sZW5ndGggPiB0YXJnZXRMZW5ndGgpIHtcbiAgICAgIHJldHVybiBpdGVtO1xuICAgIH1cblxuICAgIHRhcmdldExlbmd0aCA9IHRhcmdldExlbmd0aCAtIGl0ZW0ubGVuZ3RoO1xuXG4gICAgaWYgKHRhcmdldExlbmd0aCA+IHBhZFN0cmluZy5sZW5ndGgpIHtcbiAgICAgIHBhZFN0cmluZyArPSBwYWRTdHJpbmcucmVwZWF0KHRhcmdldExlbmd0aCAvIHBhZFN0cmluZy5sZW5ndGgpO1xuICAgIH1cblxuICAgIHJldHVybiBwYWRTdHJpbmcuc2xpY2UoMCwgdGFyZ2V0TGVuZ3RoKSArIGl0ZW07XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cblxuY29uc3QgZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAyMDAwO1xuY29uc3QgZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAxO1xuY29uc3QgZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQgPSAzMDAwMDA7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEV4cG9uZW50aWFsQmFja29mZiB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2JhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQsXG4gICAgbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZDogbnVtYmVyID0gZGVmYXVsdE1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmRcbiAgKSB7XG4gICAgdGhpcy5fYmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IGJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWluQmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gICAgdGhpcy5fbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCA9IG1heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQ7XG4gIH1cblxuICBnZXRFeHBvbmVudGlhbEJhY2tvZmZJbnRlcnZhbEJ5RmFpbHVyZUNvdW50KGZhaWx1cmVDb3VudDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBiYWNrb2ZmSW50ZXJ2YWxJblNlY29uZHMgPSB0aGlzLl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIC8gMTAwMDtcbiAgICBjb25zdCByYW5kb21pemF0aW9uID0gMC41ICsgKDAuNSAqIE1hdGgucmFuZG9tKCkpOyAvLyBbMC41LCAxKVxuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZiA9IE1hdGgucG93KGJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcywgZmFpbHVyZUNvdW50IC0gMik7IC8vICBbMS80IDEvMiAxIDIgNCA4IC4uLi5dXG4gICAgY29uc3QgZXhwb25lbnRpYWxCYWNrb2ZmV2l0aFJhbmRvbWl6YXRpb24gPSBNYXRoLmZsb29yKGV4cG9uZW50aWFsQmFja29mZikgKiByYW5kb21pemF0aW9uO1xuICAgIGNvbnN0IGV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCA9IE1hdGguY2VpbChNYXRoLm1heChleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiAqIDEwMDAsIHRoaXMuX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpKTtcblxuICAgIHJldHVybiBNYXRoLm1pbihleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbkluTWlsbGlzZWNvbmQsIHRoaXMuX21heEJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQpO1xuICB9XG59IiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5pbXBvcnQgSUNvbXBhcmFibGUgZnJvbSAnLi4vbGFuZy9JQ29tcGFyYWJsZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpbWVuc2lvbiBpbXBsZW1lbnRzIElDb21wYXJhYmxlPERpbWVuc2lvbj4ge1xuICByZWFkb25seSB3aWR0aDogbnVtYmVyO1xuICByZWFkb25seSBoZWlnaHQ6IG51bWJlcjtcblxuICBzdGF0aWMgZ2V0IGVtcHR5KCk6IERpbWVuc2lvbiB7XG4gICAgcmV0dXJuIG5ldyBEaW1lbnNpb24oMCwgMCk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuICAgIHRoaXMud2lkdGggPSB3aWR0aDtcbiAgICB0aGlzLmhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIGVxdWFscyhvdGhlcjogRGltZW5zaW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIG90aGVyICYmIHRoaXMud2lkdGggPT09IG90aGVyLndpZHRoICYmIHRoaXMuaGVpZ2h0ID09PSBvdGhlci5oZWlnaHQ7XG4gIH1cblxuICB0b1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHt0aGlzLndpZHRofXgke3RoaXMuaGVpZ2h0fWA7XG4gIH1cbn0iLCIvKipcbiAqIENvcHlyaWdodCAyMDI0IFBoZW5peCBSZWFsIFRpbWUgU29sdXRpb25zLCBJbmMuIENvbmZpZGVudGlhbCBhbmQgUHJvcHJpZXRhcnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKi9cbmltcG9ydCB7U3RyZWFtU2V0dXBMaXN0ZW5lcn0gZnJvbSAnLi4vZG9tL1N0cmVhbVNldHVwTGlzdGVuZXInO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBMb2dnZXJGYWN0b3J5IGZyb20gJy4uL2xvZ2dlci9Mb2dnZXJGYWN0b3J5JztcbmltcG9ydCBOZXR3b3JrTW9uaXRvciBmcm9tICcuLi9kb20vTmV0d29ya01vbml0b3InO1xuaW1wb3J0IFNESyBmcm9tICcuLi9zZGsvU0RLJztcbmltcG9ydCBNZXRyaWNzVHlwZSBmcm9tICcuLi9tZXRyaWNzL01ldHJpY3NUeXBlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgSURpc3Bvc2FibGUgZnJvbSAnLi4vbGFuZy9JRGlzcG9zYWJsZSc7XG5pbXBvcnQgRGlzcG9zYWJsZUxpc3QgZnJvbSAnLi4vbGFuZy9EaXNwb3NhYmxlTGlzdCc7XG5pbXBvcnQgTWV0cmljc1NlcnZpY2UgZnJvbSAnLi4vbWV0cmljcy9NZXRyaWNzU2VydmljZSc7XG5cbmludGVyZmFjZSBJTmV0d29ya1N0YXRpc3RpY3Mge1xuICBydHQ/OiBudW1iZXI7XG4gIGVmZmVjdGl2ZVR5cGU/OiBzdHJpbmc7XG4gIGRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5PzogbnVtYmVyO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTZXNzaW9uVGVsZW1ldHJ5IGltcGxlbWVudHMgSURpc3Bvc2FibGUge1xuICBwcml2YXRlIHJlYWRvbmx5IF9sb2dnZXI6IElMb2dnZXIgPSBMb2dnZXJGYWN0b3J5LmdldExvZ2dlcignU2Vzc2lvblRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2U7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yID0gU0RLLmFwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yO1xuICBwcml2YXRlIHJlYWRvbmx5IF9uZXR3b3JrTW9uaXRvcjogTmV0d29ya01vbml0b3IgPSBuZXcgTmV0d29ya01vbml0b3IoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rpc3Bvc2FibGVzOiBEaXNwb3NhYmxlTGlzdCA9IG5ldyBEaXNwb3NhYmxlTGlzdCgpO1xuICBwcml2YXRlIF9sYXN0TmV0d29ya1N0YXRpc3RpY3M6IElOZXR3b3JrU3RhdGlzdGljcyA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHBhZ2VMb2FkVGltZTogbnVtYmVyLCBtZXRyaWNzU2VydmljZTogTWV0cmljc1NlcnZpY2UpIHtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yKTtcbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuXG4gICAgaWYgKCF0aGlzLl9uZXR3b3JrTW9uaXRvci5pc1N1cHBvcnRlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2FibGVzLmFkZCh0aGlzLl9hcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvci5pc0ZvcmVncm91bmQuc3Vic2NyaWJlKGlzRm9yZWdyb3VuZCA9PiB7XG4gICAgICB0aGlzLnJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLnJ0dC5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgdGhpcy5yZWNvcmROZXR3b3JrUlRUVXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuYWRkKHRoaXMuX25ldHdvcmtNb25pdG9yLmVmZmVjdGl2ZVR5cGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya1R5cGVDaGFuZ2VVcGRhdGUodmFsdWUpO1xuICAgIH0pKTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fbmV0d29ya01vbml0b3IuZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgIHRoaXMucmVjb3JkTmV0d29ya0Rvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5VXBkYXRlKHZhbHVlKTtcbiAgICB9KSk7XG4gIH1cblxuICBsaXN0ZW5PblN0cmVhbVNldHVwKCk6IFN0cmVhbVNldHVwTGlzdGVuZXIge1xuICAgIHJldHVybiBuZXcgU3RyZWFtU2V0dXBMaXN0ZW5lcih0aGlzLl9wYWdlTG9hZFRpbWUpO1xuICB9XG5cbiAgZGlzcG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZEZvcmVncm91bmRDaGFuZ2UoaXNGb3JlZ3JvdW5kOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCB0aW1lU2luY2VMYXN0Q2hhbmdlID0gdGhpcy5fYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IuZ2V0VGltZVNpbmNlTGFzdENoYW5nZSgpO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBpc0ZvcmVncm91bmQgPyBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkZvcmVncm91bmQgOiBNZXRyaWNzVHlwZS5BcHBsaWNhdGlvbkJhY2tncm91bmQsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGltZVNpbmNlTGFzdENoYW5nZX1cbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ0FwcGxpY2F0aW9uIGhhcyBnb25lIGludG8gdGhlIFslc10gYWZ0ZXIgWyVzXSBtcycsXG4gICAgICBpc0ZvcmVncm91bmQgPyAnZm9yZWdyb3VuZCcgOiAnYmFja2dyb3VuZCcsXG4gICAgICBuZXcgRHVyYXRpb25zKHRpbWVTaW5jZUxhc3RDaGFuZ2UpLnRvSXNvU3RyaW5nKCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVjb3JkTmV0d29ya1JUVFVwZGF0ZShuZXdSVFQ6IG51bWJlcik6IHZvaWQge1xuICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgY29uc3Qgb2xkUnR0ID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLnJ0dDtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5ydHQgPSBuZXdSVFQ7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlJvdW5kVHJpcFRpbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogbmV3UlRUfSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZFJ0dCA/IHt1aW50NjQ6IG9sZFJ0dH0gOiB1bmRlZmluZWQsXG4gICAgICByZXNvdXJjZTogJ25hdmlnYXRvcidcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBSVFQgY2hhbmdlZCB0byBbJXNdIGZyb20gWyVzXScsXG4gICAgICBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKSxcbiAgICAgIG5ld1JUVCxcbiAgICAgIG9sZFJ0dFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlKG5ld05ldHdvcmtUeXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IG9sZE5ldHdvcmtUeXBlID0gdGhpcy5fbGFzdE5ldHdvcmtTdGF0aXN0aWNzLmVmZmVjdGl2ZVR5cGU7XG5cbiAgICB0aGlzLl9sYXN0TmV0d29ya1N0YXRpc3RpY3MuZWZmZWN0aXZlVHlwZSA9IG5ld05ldHdvcmtUeXBlO1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5OZXR3b3JrVHlwZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7c3RyaW5nOiBuZXdOZXR3b3JrVHlwZX0sXG4gICAgICBwcmV2aW91c1ZhbHVlOiBvbGROZXR3b3JrVHlwZSA/IHtzdHJpbmc6IG9sZE5ldHdvcmtUeXBlfSA6IHVuZGVmaW5lZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBOZXR3b3JrIGVmZmVjdGl2ZSB0eXBlIGhhcyBjaGFuZ2VkIHRvIFslc10gZnJvbSBbJXNdJyxcbiAgICAgIG5ldyBEdXJhdGlvbnMobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKS50b0lzb1N0cmluZygpLFxuICAgICAgbmV3TmV0d29ya1R5cGUsXG4gICAgICBvbGROZXR3b3JrVHlwZVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHJlY29yZE5ldHdvcmtEb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eVVwZGF0ZShuZXdDYXBhY2l0eTogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBvbGRDYXBhY2l0eSA9IHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eTtcblxuICAgIHRoaXMuX2xhc3ROZXR3b3JrU3RhdGlzdGljcy5kb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSA9IG5ld0NhcGFjaXR5O1xuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5Eb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7ZmxvYXQ6IG5ld0NhcGFjaXR5fSxcbiAgICAgIHByZXZpb3VzVmFsdWU6IG9sZENhcGFjaXR5ID8ge2Zsb2F0OiBvbGRDYXBhY2l0eX0gOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gTmV0d29yayBkb3dubGluayB0aHJvdWdocHV0IGNhcGFjaXR5IGNoYW5nZWQgdG8gWyVzXSBmcm9tIFslc10nLFxuICAgICAgbmV3IER1cmF0aW9ucyhub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpLnRvSXNvU3RyaW5nKCksXG4gICAgICBuZXdDYXBhY2l0eSxcbiAgICAgIG9sZENhcGFjaXR5XG4gICAgKTtcbiAgfVxufSIsIi8qKlxuICogQ29weXJpZ2h0IDIwMjQgUGhlbml4IFJlYWwgVGltZSBTb2x1dGlvbnMsIEluYy4gQ29uZmlkZW50aWFsIGFuZCBQcm9wcmlldGFyeS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqL1xuaW1wb3J0IExvZ2dlckZhY3RvcnkgZnJvbSAnLi4vbG9nZ2VyL0xvZ2dlckZhY3RvcnknO1xuaW1wb3J0IHtJTG9nZ2VyfSBmcm9tICcuLi9sb2dnZXIvTG9nZ2VySW50ZXJmYWNlJztcbmltcG9ydCBEdXJhdGlvbnMgZnJvbSAnLi4vdGltZS9EdXJhdGlvbic7XG5pbXBvcnQgRGlzcG9zYWJsZSBmcm9tICcuLi9sYW5nL0Rpc3Bvc2FibGUnO1xuaW1wb3J0IElEaXNwb3NhYmxlIGZyb20gJy4uL2xhbmcvSURpc3Bvc2FibGUnO1xuaW1wb3J0IE1ldHJpY3NUeXBlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1R5cGUnO1xuaW1wb3J0IERpc3Bvc2FibGVMaXN0IGZyb20gJy4uL2xhbmcvRGlzcG9zYWJsZUxpc3QnO1xuaW1wb3J0IE1ldHJpY3NTZXJ2aWNlIGZyb20gJy4uL21ldHJpY3MvTWV0cmljc1NlcnZpY2UnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWaWRlb1RlbGVtZXRyeSBpbXBsZW1lbnRzIElEaXNwb3NhYmxlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBfcGFnZUxvYWRUaW1lOiBudW1iZXI7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2NoYW5uZWxTdGFydFRpbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbG9nZ2VyOiBJTG9nZ2VyID0gTG9nZ2VyRmFjdG9yeS5nZXRMb2dnZXIoJ1N0cmVhbVRlbGVtZXRyeScpO1xuICBwcml2YXRlIHJlYWRvbmx5IF9kaXNwb3NhYmxlczogRGlzcG9zYWJsZUxpc3QgPSBuZXcgRGlzcG9zYWJsZUxpc3QoKTtcbiAgcHJpdmF0ZSByZWFkb25seSBfc3RyZWFtSWQ6IHN0cmluZztcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlO1xuICBwcml2YXRlIF9saXN0ZW5Ub0ZpcnN0VGltZTogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBfbGlzdGVuRm9yU3RhbGw6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgX2xpc3RlbkZvckNvbnRpbnVhdGlvbjogKGV2ZW50KSA9PiB2b2lkO1xuICBwcml2YXRlIF90aW1lVG9GaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX2NoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWU6IG51bWJlcjtcbiAgcHJpdmF0ZSBfc3RhcnRSZWNvcmRpbmdGaXJzdEZyYW1lOiBudW1iZXI7XG4gIHByaXZhdGUgX3ZpZGVvU3RhbGxlZDogbnVtYmVyO1xuICBwcml2YXRlIF9sYXN0UHJvZ3Jlc3M6IG51bWJlcjtcbiAgcHJpdmF0ZSBfdmlkZW9SZXNvbHV0aW9uOiBzdHJpbmc7XG4gIHByaXZhdGUgX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyOiBEaXNwb3NhYmxlO1xuICBwcml2YXRlIF9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXI6IERpc3Bvc2FibGU7XG5cbiAgY29uc3RydWN0b3Ioc3RyZWFtSWQ6IHN0cmluZywgcGFnZUxvYWRUaW1lOiBudW1iZXIsIGNoYW5uZWxTdGFydFRpbWU6IG51bWJlciwgbWV0cmljc1NlcnZpY2U6IE1ldHJpY3NTZXJ2aWNlKSB7XG4gICAgdGhpcy5fc3RyZWFtSWQgPSBzdHJlYW1JZDtcbiAgICB0aGlzLl9wYWdlTG9hZFRpbWUgPSBwYWdlTG9hZFRpbWU7XG4gICAgdGhpcy5fY2hhbm5lbFN0YXJ0VGltZSA9IGNoYW5uZWxTdGFydFRpbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZSA9IG1ldHJpY3NTZXJ2aWNlO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclRpbWVUb0ZpcnN0VGltZSh2aWRlbzogSFRNTFZpZGVvRWxlbWVudCk6IHZvaWQge1xuICAgIHRoaXMuX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSA9IERhdGUubm93KCk7XG5cbiAgICB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSA9ICgpOiB2b2lkID0+IHRoaXMuY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTtcblxuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVkbWV0YWRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWRlZGRhdGEnLCB0aGlzLl9saXN0ZW5Ub0ZpcnN0VGltZSk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZWRtZXRhZGF0YScsIHRoaXMuX2xpc3RlblRvRmlyc3RUaW1lKTtcbiAgICB9KTtcbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJUaW1lVG9GaXJzdEZyYW1lTGlzdGVuZXIpO1xuICB9XG5cbiAgc2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nKHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fbGlzdGVuRm9yU3RhbGwgPSAoKTogdm9pZCA9PiB0aGlzLm9uU3RhbGwoKTtcblxuICAgIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbiA9IChldmVudCk6IHZvaWQgPT4gdGhpcy5vbkNvbnRpbnVhdGlvbihldmVudCwgdmlkZW8pO1xuXG4gICAgdmlkZW8uYWRkRXZlbnRMaXN0ZW5lcignc3RhbGxlZCcsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCdzdXNwZW5kJywgdGhpcy5fbGlzdGVuRm9yU3RhbGwpO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXknLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgIHZpZGVvLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCd0aW1ldXBkYXRlJywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcblxuICAgIHRoaXMuX2NsZWFyUmVidWZmZXJpbmdMaXN0ZW5lciA9IG5ldyBEaXNwb3NhYmxlKCgpID0+IHtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N0YWxsZWQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwYXVzZScsIHRoaXMuX2xpc3RlbkZvclN0YWxsKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3N1c3BlbmQnLCB0aGlzLl9saXN0ZW5Gb3JTdGFsbCk7XG4gICAgICB2aWRlby5yZW1vdmVFdmVudExpc3RlbmVyKCdwbGF5JywgdGhpcy5fbGlzdGVuRm9yQ29udGludWF0aW9uKTtcbiAgICAgIHZpZGVvLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3BsYXlpbmcnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzLl9saXN0ZW5Gb3JDb250aW51YXRpb24pO1xuICAgICAgdmlkZW8ucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGltZXVwZGF0ZScsIHRoaXMuX2xpc3RlbkZvckNvbnRpbnVhdGlvbik7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9kaXNwb3NhYmxlcy5hZGQodGhpcy5fY2xlYXJSZWJ1ZmZlcmluZ0xpc3RlbmVyKTtcbiAgfVxuXG4gIGRpc3Bvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5fZGlzcG9zYWJsZXMuZGlzcG9zZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZHVyYXRpb25TaW5jZVBhZ2VMb2FkKCk6IHN0cmluZyB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiBuZXcgRHVyYXRpb25zKG5vdyAtIHRoaXMuX3BhZ2VMb2FkVGltZSkudG9Jc29TdHJpbmcoKTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsbFRpbWVUb0ZpcnN0RnJhbWUoKTogdm9pZCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMucHVzaFRpbWVUb0ZpcnN0RnJhbWUobm93KTtcbiAgICB0aGlzLnB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKG5vdyk7XG5cbiAgICB0aGlzLl9jbGVhclRpbWVUb0ZpcnN0RnJhbWVMaXN0ZW5lci5kaXNwb3NlKCk7XG4gIH1cblxuICBwcml2YXRlIHB1c2hUaW1lVG9GaXJzdEZyYW1lKG5vdyk6IHZvaWQge1xuICAgIHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUgPSBub3cgLSB0aGlzLl9zdGFydFJlY29yZGluZ0ZpcnN0RnJhbWU7XG5cbiAgICB0aGlzLl9tZXRyaWNzU2VydmljZS5wdXNoKHtcbiAgICAgIG1ldHJpY1R5cGU6IE1ldHJpY3NUeXBlLlRpbWVUb0ZpcnN0RnJhbWUsXG4gICAgICBydW50aW1lOiAobm93IC0gdGhpcy5fcGFnZUxvYWRUaW1lKSAvIDEwMDAsXG4gICAgICB2YWx1ZToge3VpbnQ2NDogdGhpcy5fdGltZVRvRmlyc3RGcmFtZX0sXG4gICAgICBzdHJlYW1JZDogdGhpcy5fc3RyZWFtSWRcbiAgICB9KTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBGaXJzdCBmcmFtZSBbJXNdJyxcbiAgICAgIHRoaXMuZHVyYXRpb25TaW5jZVBhZ2VMb2FkLFxuICAgICAgdGhpcy5fc3RyZWFtSWQsXG4gICAgICBuZXcgRHVyYXRpb25zKHRoaXMuX3RpbWVUb0ZpcnN0RnJhbWUpLnRvSXNvU3RyaW5nKClcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBwdXNoQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZShub3cpOiB2b2lkIHtcbiAgICB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lID0gbm93IC0gdGhpcy5fY2hhbm5lbFN0YXJ0VGltZTtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQ2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSxcbiAgICAgIHJ1bnRpbWU6IChub3cgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIENoYW5uZWwgY3JlYXRpb24gdG8gZmlyc3QgZnJhbWUgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aGlzLl9jaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TdGFsbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fdmlkZW9TdGFsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fbWV0cmljc1NlcnZpY2UucHVzaCh7XG4gICAgICBtZXRyaWNUeXBlOiBNZXRyaWNzVHlwZS5TdGFsbGVkLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9TdGFsbGVkID0gRGF0ZS5ub3coKTtcblxuICAgIHRoaXMuX2xvZ2dlci5pbmZvKFxuICAgICAgJ1slc10gWyVzXSBbYnVmZmVyaW5nXSBTdHJlYW0gaGFzIHN0YWxsZWQnLFxuICAgICAgdGhpcy5kdXJhdGlvblNpbmNlUGFnZUxvYWQsXG4gICAgICB0aGlzLl9zdHJlYW1JZFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIG9uQ29udGludWF0aW9uKGV2ZW50LCB2aWRlbyk6IHZvaWQge1xuICAgIGlmICghdmlkZW8uYnVmZmVyZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXJMZW5ndGggPSB2aWRlby5idWZmZXJlZC5sZW5ndGg7XG4gICAgY29uc3QgaGFzTm90UHJvZ3Jlc3NlZFNpbmNlTGFzdFByb2dyZXNzRXZlbnQgPSBldmVudC50eXBlID09PSAncGxheWluZydcbiAgICB8fCBidWZmZXJMZW5ndGggPiAwID8gKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcydcbiAgICAgIHx8IGV2ZW50LnR5cGUgPT09ICd0aW1ldXBkYXRlJylcbiAgICAgICYmIHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKSA9PT0gdGhpcy5fbGFzdFByb2dyZXNzIDogdHJ1ZTtcblxuICAgIGlmICghdGhpcy5fdmlkZW9TdGFsbGVkIHx8IGhhc05vdFByb2dyZXNzZWRTaW5jZUxhc3RQcm9ncmVzc0V2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgIHRoaXMuX2xhc3RQcm9ncmVzcyA9IHZpZGVvLmJ1ZmZlcmVkLmVuZChidWZmZXJMZW5ndGggLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCB0aW1lU2luY2VTdG9wID0gRGF0ZS5ub3coKSAtIHRoaXMuX3ZpZGVvU3RhbGxlZDtcblxuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuQnVmZmVyaW5nLFxuICAgICAgcnVudGltZTogKERhdGUubm93KCkgLSB0aGlzLl9wYWdlTG9hZFRpbWUpIC8gMTAwMCxcbiAgICAgIHZhbHVlOiB7dWludDY0OiB0aW1lU2luY2VTdG9wfSxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fbG9nZ2VyLmluZm8oXG4gICAgICAnWyVzXSBbJXNdIFtidWZmZXJpbmddIFN0cmVhbSBoYXMgcmVjb3ZlcmVkIGZyb20gc3RhbGwgYWZ0ZXIgWyVzXScsXG4gICAgICB0aGlzLmR1cmF0aW9uU2luY2VQYWdlTG9hZCxcbiAgICAgIHRoaXMuX3N0cmVhbUlkLFxuICAgICAgbmV3IER1cmF0aW9ucyh0aW1lU2luY2VTdG9wKS50b0lzb1N0cmluZygpXG4gICAgKTtcbiAgICB0aGlzLl92aWRlb1N0YWxsZWQgPSBudWxsO1xuICB9XG5cbiAgb25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzKG5ld1Jlc29sdXRpb246IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuX21ldHJpY3NTZXJ2aWNlLnB1c2goe1xuICAgICAgbWV0cmljVHlwZTogTWV0cmljc1R5cGUuUmVzb2x1dGlvbkNoYW5nZWQsXG4gICAgICBydW50aW1lOiAoRGF0ZS5ub3coKSAtIHRoaXMuX3BhZ2VMb2FkVGltZSkgLyAxMDAwLFxuICAgICAgdmFsdWU6IHtzdHJpbmc6IG5ld1Jlc29sdXRpb259LFxuICAgICAgcHJldmlvdXNWYWx1ZTogdGhpcy5fdmlkZW9SZXNvbHV0aW9uID8ge3N0cmluZzogdGhpcy5fdmlkZW9SZXNvbHV0aW9ufSA6IHVuZGVmaW5lZCxcbiAgICAgIHN0cmVhbUlkOiB0aGlzLl9zdHJlYW1JZFxuICAgIH0pO1xuXG4gICAgdGhpcy5fdmlkZW9SZXNvbHV0aW9uID0gbmV3UmVzb2x1dGlvbjtcbiAgfVxufSIsImZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIsIGEpIHtcbiAgKG51bGwgPT0gYSB8fCBhID4gci5sZW5ndGgpICYmIChhID0gci5sZW5ndGgpO1xuICBmb3IgKHZhciBlID0gMCwgbiA9IEFycmF5KGEpOyBlIDwgYTsgZSsrKSBuW2VdID0gcltlXTtcbiAgcmV0dXJuIG47XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheUxpa2VUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkocikpIHJldHVybiByO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXJyYXlXaXRoSG9sZXMsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlMaWtlVG9BcnJheSA9IHJlcXVpcmUoXCIuL2FycmF5TGlrZVRvQXJyYXkuanNcIik7XG5mdW5jdGlvbiBfYXJyYXlXaXRob3V0SG9sZXMocikge1xuICBpZiAoQXJyYXkuaXNBcnJheShyKSkgcmV0dXJuIGFycmF5TGlrZVRvQXJyYXkocik7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hcnJheVdpdGhvdXRIb2xlcywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoZSkge1xuICBpZiAodm9pZCAwID09PSBlKSB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIHJldHVybiBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfYXNzZXJ0VGhpc0luaXRpYWxpemVkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gYXN5bmNHZW5lcmF0b3JTdGVwKG4sIHQsIGUsIHIsIG8sIGEsIGMpIHtcbiAgdHJ5IHtcbiAgICB2YXIgaSA9IG5bYV0oYyksXG4gICAgICB1ID0gaS52YWx1ZTtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiB2b2lkIGUobik7XG4gIH1cbiAgaS5kb25lID8gdCh1KSA6IFByb21pc2UucmVzb2x2ZSh1KS50aGVuKHIsIG8pO1xufVxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3Iobikge1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHZhciB0ID0gdGhpcyxcbiAgICAgIGUgPSBhcmd1bWVudHM7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyLCBvKSB7XG4gICAgICB2YXIgYSA9IG4uYXBwbHkodCwgZSk7XG4gICAgICBmdW5jdGlvbiBfbmV4dChuKSB7XG4gICAgICAgIGFzeW5jR2VuZXJhdG9yU3RlcChhLCByLCBvLCBfbmV4dCwgX3Rocm93LCBcIm5leHRcIiwgbik7XG4gICAgICB9XG4gICAgICBmdW5jdGlvbiBfdGhyb3cobikge1xuICAgICAgICBhc3luY0dlbmVyYXRvclN0ZXAoYSwgciwgbywgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBuKTtcbiAgICAgIH1cbiAgICAgIF9uZXh0KHZvaWQgMCk7XG4gICAgfSk7XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9hc3luY1RvR2VuZXJhdG9yLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGEsIG4pIHtcbiAgaWYgKCEoYSBpbnN0YW5jZW9mIG4pKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY2xhc3NDYWxsQ2hlY2ssIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlLCByKSB7XG4gIGZvciAodmFyIHQgPSAwOyB0IDwgci5sZW5ndGg7IHQrKykge1xuICAgIHZhciBvID0gclt0XTtcbiAgICBvLmVudW1lcmFibGUgPSBvLmVudW1lcmFibGUgfHwgITEsIG8uY29uZmlndXJhYmxlID0gITAsIFwidmFsdWVcIiBpbiBvICYmIChvLndyaXRhYmxlID0gITApLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwgdG9Qcm9wZXJ0eUtleShvLmtleSksIG8pO1xuICB9XG59XG5mdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZSwgciwgdCkge1xuICByZXR1cm4gciAmJiBfZGVmaW5lUHJvcGVydGllcyhlLnByb3RvdHlwZSwgciksIHQgJiYgX2RlZmluZVByb3BlcnRpZXMoZSwgdCksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCBcInByb3RvdHlwZVwiLCB7XG4gICAgd3JpdGFibGU6ICExXG4gIH0pLCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfY3JlYXRlQ2xhc3MsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoXCIuL3RvUHJvcGVydHlLZXkuanNcIik7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfZGVmaW5lUHJvcGVydHksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfZ2V0UHJvdG90eXBlT2YodCkge1xuICByZXR1cm4gbW9kdWxlLmV4cG9ydHMgPSBfZ2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3QuZ2V0UHJvdG90eXBlT2YuYmluZCgpIDogZnVuY3Rpb24gKHQpIHtcbiAgICByZXR1cm4gdC5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHQpO1xuICB9LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHMsIF9nZXRQcm90b3R5cGVPZih0KTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX2dldFByb3RvdHlwZU9mLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZShcIi4vc2V0UHJvdG90eXBlT2YuanNcIik7XG5mdW5jdGlvbiBfaW5oZXJpdHModCwgZSkge1xuICBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBlICYmIG51bGwgIT09IGUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvblwiKTtcbiAgdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGUgJiYgZS5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHQsXG4gICAgICB3cml0YWJsZTogITAsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfVxuICB9KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIFwicHJvdG90eXBlXCIsIHtcbiAgICB3cml0YWJsZTogITFcbiAgfSksIGUgJiYgc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9pbmhlcml0cywgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsImZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocikge1xuICBpZiAoXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIG51bGwgIT0gcltTeW1ib2wuaXRlcmF0b3JdIHx8IG51bGwgIT0gcltcIkBAaXRlcmF0b3JcIl0pIHJldHVybiBBcnJheS5mcm9tKHIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIsIGwpIHtcbiAgdmFyIHQgPSBudWxsID09IHIgPyBudWxsIDogXCJ1bmRlZmluZWRcIiAhPSB0eXBlb2YgU3ltYm9sICYmIHJbU3ltYm9sLml0ZXJhdG9yXSB8fCByW1wiQEBpdGVyYXRvclwiXTtcbiAgaWYgKG51bGwgIT0gdCkge1xuICAgIHZhciBlLFxuICAgICAgbixcbiAgICAgIGksXG4gICAgICB1LFxuICAgICAgYSA9IFtdLFxuICAgICAgZiA9ICEwLFxuICAgICAgbyA9ICExO1xuICAgIHRyeSB7XG4gICAgICBpZiAoaSA9ICh0ID0gdC5jYWxsKHIpKS5uZXh0LCAwID09PSBsKSB7XG4gICAgICAgIGlmIChPYmplY3QodCkgIT09IHQpIHJldHVybjtcbiAgICAgICAgZiA9ICExO1xuICAgICAgfSBlbHNlIGZvciAoOyAhKGYgPSAoZSA9IGkuY2FsbCh0KSkuZG9uZSkgJiYgKGEucHVzaChlLnZhbHVlKSwgYS5sZW5ndGggIT09IGwpOyBmID0gITApO1xuICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgIG8gPSAhMCwgbiA9IHI7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICghZiAmJiBudWxsICE9IHRbXCJyZXR1cm5cIl0gJiYgKHUgPSB0W1wicmV0dXJuXCJdKCksIE9iamVjdCh1KSAhPT0gdSkpIHJldHVybjtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChvKSB0aHJvdyBuO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfaXRlcmFibGVUb0FycmF5TGltaXQsIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfbm9uSXRlcmFibGVSZXN0KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfbm9uSXRlcmFibGVSZXN0LCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX25vbkl0ZXJhYmxlU3ByZWFkKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UuXFxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLlwiKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX25vbkl0ZXJhYmxlU3ByZWFkLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwidmFyIF90eXBlb2YgPSByZXF1aXJlKFwiLi90eXBlb2YuanNcIilbXCJkZWZhdWx0XCJdO1xudmFyIGFzc2VydFRoaXNJbml0aWFsaXplZCA9IHJlcXVpcmUoXCIuL2Fzc2VydFRoaXNJbml0aWFsaXplZC5qc1wiKTtcbmZ1bmN0aW9uIF9wb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKHQsIGUpIHtcbiAgaWYgKGUgJiYgKFwib2JqZWN0XCIgPT0gX3R5cGVvZihlKSB8fCBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUpKSByZXR1cm4gZTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkRlcml2ZWQgY29uc3RydWN0b3JzIG1heSBvbmx5IHJldHVybiBvYmplY3Qgb3IgdW5kZWZpbmVkXCIpO1xuICByZXR1cm4gYXNzZXJ0VGhpc0luaXRpYWxpemVkKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbmZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gIFwidXNlIHN0cmljdFwiOyAvKiEgcmVnZW5lcmF0b3ItcnVudGltZSAtLSBDb3B5cmlnaHQgKGMpIDIwMTQtcHJlc2VudCwgRmFjZWJvb2ssIEluYy4gLS0gbGljZW5zZSAoTUlUKTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2Jsb2IvbWFpbi9MSUNFTlNFICovXG4gIG1vZHVsZS5leHBvcnRzID0gX3JlZ2VuZXJhdG9yUnVudGltZSA9IGZ1bmN0aW9uIF9yZWdlbmVyYXRvclJ1bnRpbWUoKSB7XG4gICAgcmV0dXJuIGU7XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cztcbiAgdmFyIHQsXG4gICAgZSA9IHt9LFxuICAgIHIgPSBPYmplY3QucHJvdG90eXBlLFxuICAgIG4gPSByLmhhc093blByb3BlcnR5LFxuICAgIG8gPSBPYmplY3QuZGVmaW5lUHJvcGVydHkgfHwgZnVuY3Rpb24gKHQsIGUsIHIpIHtcbiAgICAgIHRbZV0gPSByLnZhbHVlO1xuICAgIH0sXG4gICAgaSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sID8gU3ltYm9sIDoge30sXG4gICAgYSA9IGkuaXRlcmF0b3IgfHwgXCJAQGl0ZXJhdG9yXCIsXG4gICAgYyA9IGkuYXN5bmNJdGVyYXRvciB8fCBcIkBAYXN5bmNJdGVyYXRvclwiLFxuICAgIHUgPSBpLnRvU3RyaW5nVGFnIHx8IFwiQEB0b1N0cmluZ1RhZ1wiO1xuICBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodCwgZSwge1xuICAgICAgdmFsdWU6IHIsXG4gICAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogITAsXG4gICAgICB3cml0YWJsZTogITBcbiAgICB9KSwgdFtlXTtcbiAgfVxuICB0cnkge1xuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKHQpIHtcbiAgICBkZWZpbmUgPSBmdW5jdGlvbiBkZWZpbmUodCwgZSwgcikge1xuICAgICAgcmV0dXJuIHRbZV0gPSByO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gd3JhcCh0LCBlLCByLCBuKSB7XG4gICAgdmFyIGkgPSBlICYmIGUucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gZSA6IEdlbmVyYXRvcixcbiAgICAgIGEgPSBPYmplY3QuY3JlYXRlKGkucHJvdG90eXBlKSxcbiAgICAgIGMgPSBuZXcgQ29udGV4dChuIHx8IFtdKTtcbiAgICByZXR1cm4gbyhhLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IG1ha2VJbnZva2VNZXRob2QodCwgciwgYylcbiAgICB9KSwgYTtcbiAgfVxuICBmdW5jdGlvbiB0cnlDYXRjaCh0LCBlLCByKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwibm9ybWFsXCIsXG4gICAgICAgIGFyZzogdC5jYWxsKGUsIHIpXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKHQpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6IFwidGhyb3dcIixcbiAgICAgICAgYXJnOiB0XG4gICAgICB9O1xuICAgIH1cbiAgfVxuICBlLndyYXAgPSB3cmFwO1xuICB2YXIgaCA9IFwic3VzcGVuZGVkU3RhcnRcIixcbiAgICBsID0gXCJzdXNwZW5kZWRZaWVsZFwiLFxuICAgIGYgPSBcImV4ZWN1dGluZ1wiLFxuICAgIHMgPSBcImNvbXBsZXRlZFwiLFxuICAgIHkgPSB7fTtcbiAgZnVuY3Rpb24gR2VuZXJhdG9yKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb24oKSB7fVxuICBmdW5jdGlvbiBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSgpIHt9XG4gIHZhciBwID0ge307XG4gIGRlZmluZShwLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuICB2YXIgZCA9IE9iamVjdC5nZXRQcm90b3R5cGVPZixcbiAgICB2ID0gZCAmJiBkKGQodmFsdWVzKFtdKSkpO1xuICB2ICYmIHYgIT09IHIgJiYgbi5jYWxsKHYsIGEpICYmIChwID0gdik7XG4gIHZhciBnID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUucHJvdG90eXBlID0gR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUocCk7XG4gIGZ1bmN0aW9uIGRlZmluZUl0ZXJhdG9yTWV0aG9kcyh0KSB7XG4gICAgW1wibmV4dFwiLCBcInRocm93XCIsIFwicmV0dXJuXCJdLmZvckVhY2goZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRlZmluZSh0LCBlLCBmdW5jdGlvbiAodCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW52b2tlKGUsIHQpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbiAgZnVuY3Rpb24gQXN5bmNJdGVyYXRvcih0LCBlKSB7XG4gICAgZnVuY3Rpb24gaW52b2tlKHIsIG8sIGksIGEpIHtcbiAgICAgIHZhciBjID0gdHJ5Q2F0Y2godFtyXSwgdCwgbyk7XG4gICAgICBpZiAoXCJ0aHJvd1wiICE9PSBjLnR5cGUpIHtcbiAgICAgICAgdmFyIHUgPSBjLmFyZyxcbiAgICAgICAgICBoID0gdS52YWx1ZTtcbiAgICAgICAgcmV0dXJuIGggJiYgXCJvYmplY3RcIiA9PSBfdHlwZW9mKGgpICYmIG4uY2FsbChoLCBcIl9fYXdhaXRcIikgPyBlLnJlc29sdmUoaC5fX2F3YWl0KS50aGVuKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgaW52b2tlKFwibmV4dFwiLCB0LCBpLCBhKTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSkgOiBlLnJlc29sdmUoaCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHUudmFsdWUgPSB0LCBpKHUpO1xuICAgICAgICB9LCBmdW5jdGlvbiAodCkge1xuICAgICAgICAgIHJldHVybiBpbnZva2UoXCJ0aHJvd1wiLCB0LCBpLCBhKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBhKGMuYXJnKTtcbiAgICB9XG4gICAgdmFyIHI7XG4gICAgbyh0aGlzLCBcIl9pbnZva2VcIiwge1xuICAgICAgdmFsdWU6IGZ1bmN0aW9uIHZhbHVlKHQsIG4pIHtcbiAgICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBlKGZ1bmN0aW9uIChlLCByKSB7XG4gICAgICAgICAgICBpbnZva2UodCwgbiwgZSwgcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHIgPSByID8gci50aGVuKGNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnLCBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZykgOiBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG4gIGZ1bmN0aW9uIG1ha2VJbnZva2VNZXRob2QoZSwgciwgbikge1xuICAgIHZhciBvID0gaDtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGksIGEpIHtcbiAgICAgIGlmIChvID09PSBmKSB0aHJvdyBFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IHJ1bm5pbmdcIik7XG4gICAgICBpZiAobyA9PT0gcykge1xuICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBpKSB0aHJvdyBhO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHZhbHVlOiB0LFxuICAgICAgICAgIGRvbmU6ICEwXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBmb3IgKG4ubWV0aG9kID0gaSwgbi5hcmcgPSBhOzspIHtcbiAgICAgICAgdmFyIGMgPSBuLmRlbGVnYXRlO1xuICAgICAgICBpZiAoYykge1xuICAgICAgICAgIHZhciB1ID0gbWF5YmVJbnZva2VEZWxlZ2F0ZShjLCBuKTtcbiAgICAgICAgICBpZiAodSkge1xuICAgICAgICAgICAgaWYgKHUgPT09IHkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgcmV0dXJuIHU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChcIm5leHRcIiA9PT0gbi5tZXRob2QpIG4uc2VudCA9IG4uX3NlbnQgPSBuLmFyZztlbHNlIGlmIChcInRocm93XCIgPT09IG4ubWV0aG9kKSB7XG4gICAgICAgICAgaWYgKG8gPT09IGgpIHRocm93IG8gPSBzLCBuLmFyZztcbiAgICAgICAgICBuLmRpc3BhdGNoRXhjZXB0aW9uKG4uYXJnKTtcbiAgICAgICAgfSBlbHNlIFwicmV0dXJuXCIgPT09IG4ubWV0aG9kICYmIG4uYWJydXB0KFwicmV0dXJuXCIsIG4uYXJnKTtcbiAgICAgICAgbyA9IGY7XG4gICAgICAgIHZhciBwID0gdHJ5Q2F0Y2goZSwgciwgbik7XG4gICAgICAgIGlmIChcIm5vcm1hbFwiID09PSBwLnR5cGUpIHtcbiAgICAgICAgICBpZiAobyA9IG4uZG9uZSA/IHMgOiBsLCBwLmFyZyA9PT0geSkgY29udGludWU7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiBwLmFyZyxcbiAgICAgICAgICAgIGRvbmU6IG4uZG9uZVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgXCJ0aHJvd1wiID09PSBwLnR5cGUgJiYgKG8gPSBzLCBuLm1ldGhvZCA9IFwidGhyb3dcIiwgbi5hcmcgPSBwLmFyZyk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpIHtcbiAgICB2YXIgbiA9IHIubWV0aG9kLFxuICAgICAgbyA9IGUuaXRlcmF0b3Jbbl07XG4gICAgaWYgKG8gPT09IHQpIHJldHVybiByLmRlbGVnYXRlID0gbnVsbCwgXCJ0aHJvd1wiID09PSBuICYmIGUuaXRlcmF0b3JbXCJyZXR1cm5cIl0gJiYgKHIubWV0aG9kID0gXCJyZXR1cm5cIiwgci5hcmcgPSB0LCBtYXliZUludm9rZURlbGVnYXRlKGUsIHIpLCBcInRocm93XCIgPT09IHIubWV0aG9kKSB8fCBcInJldHVyblwiICE9PSBuICYmIChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAnXCIgKyBuICsgXCInIG1ldGhvZFwiKSksIHk7XG4gICAgdmFyIGkgPSB0cnlDYXRjaChvLCBlLml0ZXJhdG9yLCByLmFyZyk7XG4gICAgaWYgKFwidGhyb3dcIiA9PT0gaS50eXBlKSByZXR1cm4gci5tZXRob2QgPSBcInRocm93XCIsIHIuYXJnID0gaS5hcmcsIHIuZGVsZWdhdGUgPSBudWxsLCB5O1xuICAgIHZhciBhID0gaS5hcmc7XG4gICAgcmV0dXJuIGEgPyBhLmRvbmUgPyAocltlLnJlc3VsdE5hbWVdID0gYS52YWx1ZSwgci5uZXh0ID0gZS5uZXh0TG9jLCBcInJldHVyblwiICE9PSByLm1ldGhvZCAmJiAoci5tZXRob2QgPSBcIm5leHRcIiwgci5hcmcgPSB0KSwgci5kZWxlZ2F0ZSA9IG51bGwsIHkpIDogYSA6IChyLm1ldGhvZCA9IFwidGhyb3dcIiwgci5hcmcgPSBuZXcgVHlwZUVycm9yKFwiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3RcIiksIHIuZGVsZWdhdGUgPSBudWxsLCB5KTtcbiAgfVxuICBmdW5jdGlvbiBwdXNoVHJ5RW50cnkodCkge1xuICAgIHZhciBlID0ge1xuICAgICAgdHJ5TG9jOiB0WzBdXG4gICAgfTtcbiAgICAxIGluIHQgJiYgKGUuY2F0Y2hMb2MgPSB0WzFdKSwgMiBpbiB0ICYmIChlLmZpbmFsbHlMb2MgPSB0WzJdLCBlLmFmdGVyTG9jID0gdFszXSksIHRoaXMudHJ5RW50cmllcy5wdXNoKGUpO1xuICB9XG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkodCkge1xuICAgIHZhciBlID0gdC5jb21wbGV0aW9uIHx8IHt9O1xuICAgIGUudHlwZSA9IFwibm9ybWFsXCIsIGRlbGV0ZSBlLmFyZywgdC5jb21wbGV0aW9uID0gZTtcbiAgfVxuICBmdW5jdGlvbiBDb250ZXh0KHQpIHtcbiAgICB0aGlzLnRyeUVudHJpZXMgPSBbe1xuICAgICAgdHJ5TG9jOiBcInJvb3RcIlxuICAgIH1dLCB0LmZvckVhY2gocHVzaFRyeUVudHJ5LCB0aGlzKSwgdGhpcy5yZXNldCghMCk7XG4gIH1cbiAgZnVuY3Rpb24gdmFsdWVzKGUpIHtcbiAgICBpZiAoZSB8fCBcIlwiID09PSBlKSB7XG4gICAgICB2YXIgciA9IGVbYV07XG4gICAgICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgICAgIGlmIChcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIGUubmV4dCkgcmV0dXJuIGU7XG4gICAgICBpZiAoIWlzTmFOKGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgbyA9IC0xLFxuICAgICAgICAgIGkgPSBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgZm9yICg7ICsrbyA8IGUubGVuZ3RoOykgaWYgKG4uY2FsbChlLCBvKSkgcmV0dXJuIG5leHQudmFsdWUgPSBlW29dLCBuZXh0LmRvbmUgPSAhMSwgbmV4dDtcbiAgICAgICAgICAgIHJldHVybiBuZXh0LnZhbHVlID0gdCwgbmV4dC5kb25lID0gITAsIG5leHQ7XG4gICAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGkubmV4dCA9IGk7XG4gICAgICB9XG4gICAgfVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoX3R5cGVvZihlKSArIFwiIGlzIG5vdCBpdGVyYWJsZVwiKTtcbiAgfVxuICByZXR1cm4gR2VuZXJhdG9yRnVuY3Rpb24ucHJvdG90eXBlID0gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIG8oZywgXCJjb25zdHJ1Y3RvclwiLCB7XG4gICAgdmFsdWU6IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLFxuICAgIGNvbmZpZ3VyYWJsZTogITBcbiAgfSksIG8oR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsIFwiY29uc3RydWN0b3JcIiwge1xuICAgIHZhbHVlOiBHZW5lcmF0b3JGdW5jdGlvbixcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCBHZW5lcmF0b3JGdW5jdGlvbi5kaXNwbGF5TmFtZSA9IGRlZmluZShHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgdSwgXCJHZW5lcmF0b3JGdW5jdGlvblwiKSwgZS5pc0dlbmVyYXRvckZ1bmN0aW9uID0gZnVuY3Rpb24gKHQpIHtcbiAgICB2YXIgZSA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgdCAmJiB0LmNvbnN0cnVjdG9yO1xuICAgIHJldHVybiAhIWUgJiYgKGUgPT09IEdlbmVyYXRvckZ1bmN0aW9uIHx8IFwiR2VuZXJhdG9yRnVuY3Rpb25cIiA9PT0gKGUuZGlzcGxheU5hbWUgfHwgZS5uYW1lKSk7XG4gIH0sIGUubWFyayA9IGZ1bmN0aW9uICh0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZih0LCBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSkgOiAodC5fX3Byb3RvX18gPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSwgZGVmaW5lKHQsIHUsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIikpLCB0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoZyksIHQ7XG4gIH0sIGUuYXdyYXAgPSBmdW5jdGlvbiAodCkge1xuICAgIHJldHVybiB7XG4gICAgICBfX2F3YWl0OiB0XG4gICAgfTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlKSwgZGVmaW5lKEFzeW5jSXRlcmF0b3IucHJvdG90eXBlLCBjLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBlLkFzeW5jSXRlcmF0b3IgPSBBc3luY0l0ZXJhdG9yLCBlLmFzeW5jID0gZnVuY3Rpb24gKHQsIHIsIG4sIG8sIGkpIHtcbiAgICB2b2lkIDAgPT09IGkgJiYgKGkgPSBQcm9taXNlKTtcbiAgICB2YXIgYSA9IG5ldyBBc3luY0l0ZXJhdG9yKHdyYXAodCwgciwgbiwgbyksIGkpO1xuICAgIHJldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocikgPyBhIDogYS5uZXh0KCkudGhlbihmdW5jdGlvbiAodCkge1xuICAgICAgcmV0dXJuIHQuZG9uZSA/IHQudmFsdWUgOiBhLm5leHQoKTtcbiAgICB9KTtcbiAgfSwgZGVmaW5lSXRlcmF0b3JNZXRob2RzKGcpLCBkZWZpbmUoZywgdSwgXCJHZW5lcmF0b3JcIiksIGRlZmluZShnLCBhLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBkZWZpbmUoZywgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIFwiW29iamVjdCBHZW5lcmF0b3JdXCI7XG4gIH0pLCBlLmtleXMgPSBmdW5jdGlvbiAodCkge1xuICAgIHZhciBlID0gT2JqZWN0KHQpLFxuICAgICAgciA9IFtdO1xuICAgIGZvciAodmFyIG4gaW4gZSkgci5wdXNoKG4pO1xuICAgIHJldHVybiByLnJldmVyc2UoKSwgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIGZvciAoOyByLmxlbmd0aDspIHtcbiAgICAgICAgdmFyIHQgPSByLnBvcCgpO1xuICAgICAgICBpZiAodCBpbiBlKSByZXR1cm4gbmV4dC52YWx1ZSA9IHQsIG5leHQuZG9uZSA9ICExLCBuZXh0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5leHQuZG9uZSA9ICEwLCBuZXh0O1xuICAgIH07XG4gIH0sIGUudmFsdWVzID0gdmFsdWVzLCBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcbiAgICByZXNldDogZnVuY3Rpb24gcmVzZXQoZSkge1xuICAgICAgaWYgKHRoaXMucHJldiA9IDAsIHRoaXMubmV4dCA9IDAsIHRoaXMuc2VudCA9IHRoaXMuX3NlbnQgPSB0LCB0aGlzLmRvbmUgPSAhMSwgdGhpcy5kZWxlZ2F0ZSA9IG51bGwsIHRoaXMubWV0aG9kID0gXCJuZXh0XCIsIHRoaXMuYXJnID0gdCwgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSksICFlKSBmb3IgKHZhciByIGluIHRoaXMpIFwidFwiID09PSByLmNoYXJBdCgwKSAmJiBuLmNhbGwodGhpcywgcikgJiYgIWlzTmFOKCtyLnNsaWNlKDEpKSAmJiAodGhpc1tyXSA9IHQpO1xuICAgIH0sXG4gICAgc3RvcDogZnVuY3Rpb24gc3RvcCgpIHtcbiAgICAgIHRoaXMuZG9uZSA9ICEwO1xuICAgICAgdmFyIHQgPSB0aGlzLnRyeUVudHJpZXNbMF0uY29tcGxldGlvbjtcbiAgICAgIGlmIChcInRocm93XCIgPT09IHQudHlwZSkgdGhyb3cgdC5hcmc7XG4gICAgICByZXR1cm4gdGhpcy5ydmFsO1xuICAgIH0sXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uIGRpc3BhdGNoRXhjZXB0aW9uKGUpIHtcbiAgICAgIGlmICh0aGlzLmRvbmUpIHRocm93IGU7XG4gICAgICB2YXIgciA9IHRoaXM7XG4gICAgICBmdW5jdGlvbiBoYW5kbGUobiwgbykge1xuICAgICAgICByZXR1cm4gYS50eXBlID0gXCJ0aHJvd1wiLCBhLmFyZyA9IGUsIHIubmV4dCA9IG4sIG8gJiYgKHIubWV0aG9kID0gXCJuZXh0XCIsIHIuYXJnID0gdCksICEhbztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIG8gPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgbyA+PSAwOyAtLW8pIHtcbiAgICAgICAgdmFyIGkgPSB0aGlzLnRyeUVudHJpZXNbb10sXG4gICAgICAgICAgYSA9IGkuY29tcGxldGlvbjtcbiAgICAgICAgaWYgKFwicm9vdFwiID09PSBpLnRyeUxvYykgcmV0dXJuIGhhbmRsZShcImVuZFwiKTtcbiAgICAgICAgaWYgKGkudHJ5TG9jIDw9IHRoaXMucHJldikge1xuICAgICAgICAgIHZhciBjID0gbi5jYWxsKGksIFwiY2F0Y2hMb2NcIiksXG4gICAgICAgICAgICB1ID0gbi5jYWxsKGksIFwiZmluYWxseUxvY1wiKTtcbiAgICAgICAgICBpZiAoYyAmJiB1KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5maW5hbGx5TG9jKSByZXR1cm4gaGFuZGxlKGkuZmluYWxseUxvYyk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgaS5jYXRjaExvYykgcmV0dXJuIGhhbmRsZShpLmNhdGNoTG9jLCAhMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICghdSkgdGhyb3cgRXJyb3IoXCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseVwiKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBpLmZpbmFsbHlMb2MpIHJldHVybiBoYW5kbGUoaS5maW5hbGx5TG9jKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIGFicnVwdDogZnVuY3Rpb24gYWJydXB0KHQsIGUpIHtcbiAgICAgIGZvciAodmFyIHIgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgciA+PSAwOyAtLXIpIHtcbiAgICAgICAgdmFyIG8gPSB0aGlzLnRyeUVudHJpZXNbcl07XG4gICAgICAgIGlmIChvLnRyeUxvYyA8PSB0aGlzLnByZXYgJiYgbi5jYWxsKG8sIFwiZmluYWxseUxvY1wiKSAmJiB0aGlzLnByZXYgPCBvLmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgaSA9IG87XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGkgJiYgKFwiYnJlYWtcIiA9PT0gdCB8fCBcImNvbnRpbnVlXCIgPT09IHQpICYmIGkudHJ5TG9jIDw9IGUgJiYgZSA8PSBpLmZpbmFsbHlMb2MgJiYgKGkgPSBudWxsKTtcbiAgICAgIHZhciBhID0gaSA/IGkuY29tcGxldGlvbiA6IHt9O1xuICAgICAgcmV0dXJuIGEudHlwZSA9IHQsIGEuYXJnID0gZSwgaSA/ICh0aGlzLm1ldGhvZCA9IFwibmV4dFwiLCB0aGlzLm5leHQgPSBpLmZpbmFsbHlMb2MsIHkpIDogdGhpcy5jb21wbGV0ZShhKTtcbiAgICB9LFxuICAgIGNvbXBsZXRlOiBmdW5jdGlvbiBjb21wbGV0ZSh0LCBlKSB7XG4gICAgICBpZiAoXCJ0aHJvd1wiID09PSB0LnR5cGUpIHRocm93IHQuYXJnO1xuICAgICAgcmV0dXJuIFwiYnJlYWtcIiA9PT0gdC50eXBlIHx8IFwiY29udGludWVcIiA9PT0gdC50eXBlID8gdGhpcy5uZXh0ID0gdC5hcmcgOiBcInJldHVyblwiID09PSB0LnR5cGUgPyAodGhpcy5ydmFsID0gdGhpcy5hcmcgPSB0LmFyZywgdGhpcy5tZXRob2QgPSBcInJldHVyblwiLCB0aGlzLm5leHQgPSBcImVuZFwiKSA6IFwibm9ybWFsXCIgPT09IHQudHlwZSAmJiBlICYmICh0aGlzLm5leHQgPSBlKSwgeTtcbiAgICB9LFxuICAgIGZpbmlzaDogZnVuY3Rpb24gZmluaXNoKHQpIHtcbiAgICAgIGZvciAodmFyIGUgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgZSA+PSAwOyAtLWUpIHtcbiAgICAgICAgdmFyIHIgPSB0aGlzLnRyeUVudHJpZXNbZV07XG4gICAgICAgIGlmIChyLmZpbmFsbHlMb2MgPT09IHQpIHJldHVybiB0aGlzLmNvbXBsZXRlKHIuY29tcGxldGlvbiwgci5hZnRlckxvYyksIHJlc2V0VHJ5RW50cnkociksIHk7XG4gICAgICB9XG4gICAgfSxcbiAgICBcImNhdGNoXCI6IGZ1bmN0aW9uIF9jYXRjaCh0KSB7XG4gICAgICBmb3IgKHZhciBlID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGUgPj0gMDsgLS1lKSB7XG4gICAgICAgIHZhciByID0gdGhpcy50cnlFbnRyaWVzW2VdO1xuICAgICAgICBpZiAoci50cnlMb2MgPT09IHQpIHtcbiAgICAgICAgICB2YXIgbiA9IHIuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAoXCJ0aHJvd1wiID09PSBuLnR5cGUpIHtcbiAgICAgICAgICAgIHZhciBvID0gbi5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KHIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgRXJyb3IoXCJpbGxlZ2FsIGNhdGNoIGF0dGVtcHRcIik7XG4gICAgfSxcbiAgICBkZWxlZ2F0ZVlpZWxkOiBmdW5jdGlvbiBkZWxlZ2F0ZVlpZWxkKGUsIHIsIG4pIHtcbiAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlID0ge1xuICAgICAgICBpdGVyYXRvcjogdmFsdWVzKGUpLFxuICAgICAgICByZXN1bHROYW1lOiByLFxuICAgICAgICBuZXh0TG9jOiBuXG4gICAgICB9LCBcIm5leHRcIiA9PT0gdGhpcy5tZXRob2QgJiYgKHRoaXMuYXJnID0gdCksIHk7XG4gICAgfVxuICB9LCBlO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfcmVnZW5lcmF0b3JSdW50aW1lLCBtb2R1bGUuZXhwb3J0cy5fX2VzTW9kdWxlID0gdHJ1ZSwgbW9kdWxlLmV4cG9ydHNbXCJkZWZhdWx0XCJdID0gbW9kdWxlLmV4cG9ydHM7IiwiZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKHQsIGUpIHtcbiAgcmV0dXJuIG1vZHVsZS5leHBvcnRzID0gX3NldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LnNldFByb3RvdHlwZU9mLmJpbmQoKSA6IGZ1bmN0aW9uICh0LCBlKSB7XG4gICAgcmV0dXJuIHQuX19wcm90b19fID0gZSwgdDtcbiAgfSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzLCBfc2V0UHJvdG90eXBlT2YodCwgZSk7XG59XG5tb2R1bGUuZXhwb3J0cyA9IF9zZXRQcm90b3R5cGVPZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheVdpdGhIb2xlcyA9IHJlcXVpcmUoXCIuL2FycmF5V2l0aEhvbGVzLmpzXCIpO1xudmFyIGl0ZXJhYmxlVG9BcnJheUxpbWl0ID0gcmVxdWlyZShcIi4vaXRlcmFibGVUb0FycmF5TGltaXQuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVJlc3QgPSByZXF1aXJlKFwiLi9ub25JdGVyYWJsZVJlc3QuanNcIik7XG5mdW5jdGlvbiBfc2xpY2VkVG9BcnJheShyLCBlKSB7XG4gIHJldHVybiBhcnJheVdpdGhIb2xlcyhyKSB8fCBpdGVyYWJsZVRvQXJyYXlMaW1pdChyLCBlKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBlKSB8fCBub25JdGVyYWJsZVJlc3QoKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3NsaWNlZFRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgYXJyYXlXaXRob3V0SG9sZXMgPSByZXF1aXJlKFwiLi9hcnJheVdpdGhvdXRIb2xlcy5qc1wiKTtcbnZhciBpdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi9pdGVyYWJsZVRvQXJyYXkuanNcIik7XG52YXIgdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkgPSByZXF1aXJlKFwiLi91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheS5qc1wiKTtcbnZhciBub25JdGVyYWJsZVNwcmVhZCA9IHJlcXVpcmUoXCIuL25vbkl0ZXJhYmxlU3ByZWFkLmpzXCIpO1xuZnVuY3Rpb24gX3RvQ29uc3VtYWJsZUFycmF5KHIpIHtcbiAgcmV0dXJuIGFycmF5V2l0aG91dEhvbGVzKHIpIHx8IGl0ZXJhYmxlVG9BcnJheShyKSB8fCB1bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyKSB8fCBub25JdGVyYWJsZVNwcmVhZCgpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBfdG9Db25zdW1hYmxlQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJ2YXIgX3R5cGVvZiA9IHJlcXVpcmUoXCIuL3R5cGVvZi5qc1wiKVtcImRlZmF1bHRcIl07XG5mdW5jdGlvbiB0b1ByaW1pdGl2ZSh0LCByKSB7XG4gIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YodCkgfHwgIXQpIHJldHVybiB0O1xuICB2YXIgZSA9IHRbU3ltYm9sLnRvUHJpbWl0aXZlXTtcbiAgaWYgKHZvaWQgMCAhPT0gZSkge1xuICAgIHZhciBpID0gZS5jYWxsKHQsIHIgfHwgXCJkZWZhdWx0XCIpO1xuICAgIGlmIChcIm9iamVjdFwiICE9IF90eXBlb2YoaSkpIHJldHVybiBpO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLlwiKTtcbiAgfVxuICByZXR1cm4gKFwic3RyaW5nXCIgPT09IHIgPyBTdHJpbmcgOiBOdW1iZXIpKHQpO1xufVxubW9kdWxlLmV4cG9ydHMgPSB0b1ByaW1pdGl2ZSwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBfdHlwZW9mID0gcmVxdWlyZShcIi4vdHlwZW9mLmpzXCIpW1wiZGVmYXVsdFwiXTtcbnZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoXCIuL3RvUHJpbWl0aXZlLmpzXCIpO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IHRvUHJvcGVydHlLZXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCJmdW5jdGlvbiBfdHlwZW9mKG8pIHtcbiAgXCJAYmFiZWwvaGVscGVycyAtIHR5cGVvZlwiO1xuXG4gIHJldHVybiBtb2R1bGUuZXhwb3J0cyA9IF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0cywgX3R5cGVvZihvKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gX3R5cGVvZiwgbW9kdWxlLmV4cG9ydHMuX19lc01vZHVsZSA9IHRydWUsIG1vZHVsZS5leHBvcnRzW1wiZGVmYXVsdFwiXSA9IG1vZHVsZS5leHBvcnRzOyIsInZhciBhcnJheUxpa2VUb0FycmF5ID0gcmVxdWlyZShcIi4vYXJyYXlMaWtlVG9BcnJheS5qc1wiKTtcbmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyLCBhKSB7XG4gIGlmIChyKSB7XG4gICAgaWYgKFwic3RyaW5nXCIgPT0gdHlwZW9mIHIpIHJldHVybiBhcnJheUxpa2VUb0FycmF5KHIsIGEpO1xuICAgIHZhciB0ID0ge30udG9TdHJpbmcuY2FsbChyKS5zbGljZSg4LCAtMSk7XG4gICAgcmV0dXJuIFwiT2JqZWN0XCIgPT09IHQgJiYgci5jb25zdHJ1Y3RvciAmJiAodCA9IHIuY29uc3RydWN0b3IubmFtZSksIFwiTWFwXCIgPT09IHQgfHwgXCJTZXRcIiA9PT0gdCA/IEFycmF5LmZyb20ocikgOiBcIkFyZ3VtZW50c1wiID09PSB0IHx8IC9eKD86VWl8SSludCg/Ojh8MTZ8MzIpKD86Q2xhbXBlZCk/QXJyYXkkLy50ZXN0KHQpID8gYXJyYXlMaWtlVG9BcnJheShyLCBhKSA6IHZvaWQgMDtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXksIG1vZHVsZS5leHBvcnRzLl9fZXNNb2R1bGUgPSB0cnVlLCBtb2R1bGUuZXhwb3J0c1tcImRlZmF1bHRcIl0gPSBtb2R1bGUuZXhwb3J0czsiLCIvLyBUT0RPKEJhYmVsIDgpOiBSZW1vdmUgdGhpcyBmaWxlLlxuXG52YXIgcnVudGltZSA9IHJlcXVpcmUoXCIuLi9oZWxwZXJzL3JlZ2VuZXJhdG9yUnVudGltZVwiKSgpO1xubW9kdWxlLmV4cG9ydHMgPSBydW50aW1lO1xuXG4vLyBDb3BpZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVnZW5lcmF0b3IvYmxvYi9tYWluL3BhY2thZ2VzL3J1bnRpbWUvcnVudGltZS5qcyNMNzM2PVxudHJ5IHtcbiAgcmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbn0gY2F0Y2ggKGFjY2lkZW50YWxTdHJpY3RNb2RlKSB7XG4gIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gXCJvYmplY3RcIikge1xuICAgIGdsb2JhbFRoaXMucmVnZW5lcmF0b3JSdW50aW1lID0gcnVudGltZTtcbiAgfSBlbHNlIHtcbiAgICBGdW5jdGlvbihcInJcIiwgXCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByXCIpKHJ1bnRpbWUpO1xuICB9XG59XG4iLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdKG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuLy8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbl9fd2VicGFja19yZXF1aXJlX18ubSA9IF9fd2VicGFja19tb2R1bGVzX187XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiLy8gVGhpcyBmdW5jdGlvbiBhbGxvdyB0byByZWZlcmVuY2UgYXN5bmMgY2h1bmtzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnUgPSAoY2h1bmtJZCkgPT4ge1xuXHQvLyByZXR1cm4gdXJsIGZvciBmaWxlbmFtZXMgYmFzZWQgb24gdGVtcGxhdGVcblx0cmV0dXJuIFwiXCIgKyBjaHVua0lkICsgXCIuanNcIjtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5iID0gZG9jdW1lbnQuYmFzZVVSSSB8fCBzZWxmLmxvY2F0aW9uLmhyZWY7XG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0XCJjaGFubmVsc1wiOiAwXG59O1xuXG4vLyBubyBjaHVuayBvbiBkZW1hbmQgbG9hZGluZ1xuXG4vLyBubyBwcmVmZXRjaGluZ1xuXG4vLyBubyBwcmVsb2FkZWRcblxuLy8gbm8gSE1SXG5cbi8vIG5vIEhNUiBtYW5pZmVzdFxuXG4vLyBubyBvbiBjaHVua3MgbG9hZGVkXG5cbi8vIG5vIGpzb25wIGZ1bmN0aW9uIiwiLyoqXG4gKiBDb3B5cmlnaHQgMjAyNCBQaGVuaXggUmVhbCBUaW1lIFNvbHV0aW9ucywgSW5jLiBDb25maWRlbnRpYWwgYW5kIFByb3ByaWV0YXJ5LiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICovXG5cbmltcG9ydCBTREsgZnJvbSAnLi4vU0RLJztcbmltcG9ydCBDaGFubmVscyBmcm9tICcuL0NoYW5uZWxzJztcbmltcG9ydCBDaGFubmVsU3RhdGUgZnJvbSAnLi9DaGFubmVsU3RhdGUnO1xuXG5leHBvcnQge1xuICBTREssXG4gIENoYW5uZWxzLFxuICBDaGFubmVsU3RhdGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgU0RLLFxuICBDaGFubmVscyxcbiAgQ2hhbm5lbFN0YXRlXG59OyJdLCJuYW1lcyI6WyJHbG9iYWxTY29wZSIsIkRpc3Bvc2FibGUiLCJEaXNwb3NhYmxlTGlzdCIsIlN1YmplY3QiLCJSZWFkT25seVN1YmplY3QiLCJ2aXNpYmlsaXR5Q2hhbmdlRXZlbnQiLCJBcHBsaWNhdGlvbkFjdGl2aXR5TW9uaXRvciIsIl9jbGFzc0NhbGxDaGVjayIsIl9kZWZpbmVQcm9wZXJ0eSIsIkRhdGUiLCJub3ciLCJfaXNGb3JlZ3JvdW5kIiwiX3JlYWRPbmx5SXNGb3JlZ3JvdW5kIiwiaW5pdGlhbGl6ZSIsIl9jcmVhdGVDbGFzcyIsImtleSIsImdldCIsInZhbHVlIiwiZ2V0VGltZVNpbmNlTGFzdENoYW5nZSIsIl90aW1lT2ZMYXN0VGFiRm9jdXNDaGFuZ2UiLCJkaXNwb3NlIiwiX2Rpc3Bvc2FibGVzIiwiX3RoaXMiLCJoYW5kbGVWaXNpYmlsaXR5Q2hhbmdlIiwiZG9jdW1lbnRJc0hpZGRlbiIsInVzZUV2ZW50Q2FwdHVyZVBoYXNlIiwiYWRkRG9jdW1lbnRFdmVudExpc3RlbmVyIiwiYWRkIiwicmVtb3ZlRG9jdW1lbnRFdmVudExpc3RlbmVyIiwiZGVmYXVsdCIsIkJyb3dzZXJEZXRlY3RvciIsIl9icm93c2VyTmFtZUFuZFZlcnNpb24iLCJfYnJvd3Nlck5hbWUiLCJfYnJvd3Nlck1ham9yVmVyc2lvbiIsIl9pc0FuZHJvaWQiLCJfaXNDaHJvbWU2OSIsIl9pc0Nocm9tZTcwIiwiX2lzQ2hyb21lNzEiLCJfaXNDaHJvbWU3MiIsIl9pc0Nocm9tZTc0IiwiX2lzQ2hyb21lNzUiLCJfaXNDaHJvbWU3NiIsIl9pc0Nocm9tZTc3IiwiaXNNb2JpbGUiLCJfaXNNb2JpbGUiLCJwYXJzZUJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImJyb3dzZXJOYW1lQW5kVmVyc2lvbiIsIm1hdGNoIiwiX2Jyb3dzZXJOYW1lQW5kVmVyc2lvblJlZ2V4IiwicGFyc2VCcm93c2VyTmFtZUFuZFZlcnNpb25Gb3JJRSIsInBhcnNlQnJvd3Nlck5hbWUiLCJicm93c2VyTmFtZUxpc3QiLCJzcGxpdCIsInBhcnNlQnJvd3Nlck1ham9yVmVyc2lvbiIsImJyb3dzZXJWZXJzaW9uTGlzdCIsImZ1bGxWZXJzaW9uIiwiTnVtYmVyIiwibXNpZSIsImluZGV4T2YiLCJjb25jYXQiLCJwYXJzZUludCIsInN1YnN0cmluZyIsInRyaWRlbnQiLCJ2ZXJzaW9uIiwiX0Jyb3dzZXJEZXRlY3RvciIsInRlc3QiLCJfbmF2aWdhdG9yIiwiX25hdmlnYXRvcjIiLCJpbmNsdWRlcyIsIkxvZ2dlckRlZmF1bHRzIiwiTG9nZ2luZ0xldmVsTWFwcGluZyIsIlRlbGVtZXRyeURlZmF1bHQiLCJUZWxlbWV0cnlMZXZlbE1hcHBpbmciLCJDb25maWd1cmF0aW9uUGFyYW1ldGVyUmVhZGVyIiwiZ2V0U3RyaW5nVmFsdWUiLCJuYW1lIiwicmVhZENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJWYWx1ZSIsInJlYWRDb25maWd1cmF0aW9uUGFyYW1ldGVyVVJJVmFsdWUiLCJkZWZhdWx0U3RyaW5nVmFsdWUiLCJnZXRCb29sZWFuVmFsdWUiLCJ2YWx1ZUZyb21VcmkiLCJkZWZhdWx0Qm9vbGVhblZhbHVlIiwiY29udmVydFRlbGVtZXRyeUxldmVsVG9UZWxlbWV0cnlMZXZlbFR5cGUiLCJkZWZhdWx0VGVsZW1ldHJ5TGV2ZWwiLCJjb252ZXJ0TG9nZ2luZ0xldmVsVG9Mb2dnaW5nTGV2ZWxUeXBlIiwiZGVmYXVsdExvZ2dpbmdMZXZlbCIsImRlZmF1bHRDb25zb2xlTG9nZ2luZ0xldmVsIiwiZGVmYXVsdFRlbGVtZXRyeUxvZ2dpbmdMZXZlbCIsIm1ldGFWYWx1ZSIsImRvY3VtZW50UXVlcnlTZWxlY3RvciIsImdldEF0dHJpYnV0ZSIsInZhbHVlVVJJUGFyYW1ldGVyTmFtZSIsIlVSTFNlYXJjaFBhcmFtcyIsImxvY2F0aW9uU2VhcmNoIiwidW5kZWZpbmVkIiwiRmVhdHVyZUVuYWJsZW1lbnQiLCJHYXJiYWdlQ29sbGVjdG9yTWFuYWdlciIsIkVycm9yIiwiZm9yY2VHYXJiYWdlQ29sbGVjdGlvbiIsImlzRm9yY2VDaHJvbWVHYXJiYWdlQ29sbGVjdGlvblN1cHBvcnRlZCIsImZvcmNlQ2hyb21lR2FyYmFnZUNvbGxlY3Rpb24iLCJpc1F1ZXVlTWljcm90YXNrU3VwcG9ydGVkIiwicXVldWVNaWNyb3Rhc2siLCJvdmVybG9hZE1lbW9yeVRvSW52b2tlR2FyYmFnZUNvbGxlY3Rpb24iLCJiaW5kIiwic2V0VGltZW91dCIsImltZyIsImRvY3VtZW50Q3JlYXRlRWxlbWVudCIsInNyYyIsIlVSTCIsImNyZWF0ZU9iamVjdFVSTCIsIkJsb2IiLCJBcnJheUJ1ZmZlciIsIm9uZXJyb3IiLCJyZXZva2VPYmplY3RVUkwiLCJOZXR3b3JrTW9uaXRvciIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJpc1N1cHBvcnRlZCIsInNldHVwTmV0d29ya0NoYW5nZUxpc3RlbmVycyIsInVwZGF0ZVN0YXRpc3RpY3MiLCJfaXNTdXBwb3J0ZWQiLCJfcnR0IiwiX2VmZmVjdGl2ZVR5cGUiLCJfZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJnZXREb3dubGlua1Rocm91Z2hwdXRDYXBhY2l0eSIsIl9yZWYiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8iLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8yIiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvMyIsImRvd25saW5rIiwiZG93bmxpbmtNYXgiLCJnZXRFZmZlY3RpdmVUeXBlIiwiX3JlZjIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG80IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvNSIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzYiLCJlZmZlY3RpdmVUeXBlIiwidHlwZSIsImdldFJvdW5kVHJpcFRpbWUiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG83IiwiX0dsb2JhbFNjb3BlJG5hdmlnYXRvOCIsInJ0dCIsIl9HbG9iYWxTY29wZSRuYXZpZ2F0bzkiLCJsaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJfR2xvYmFsU2NvcGUkbmF2aWdhdG8xMCIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJNZXRyaWNzVHlwZSIsIk1ldHJpY1R5cGUiLCJEdXJhdGlvbnMiLCJTREsiLCJMb2dnZXJGYWN0b3J5IiwiU3RyZWFtU2V0dXBMaXN0ZW5lciIsInBhZ2VMb2FkVGltZSIsImdldExvZ2dlciIsIm1ldHJpY3NTZXJ2aWNlIiwiX3N0YXJ0VGltZSIsIl9wYWdlTG9hZFRpbWUiLCJzdWNjZXNzIiwic3RyZWFtSWQiLCJyZWNvcmRTdHJlYW1NZXRyaWMiLCJTZXR1cENvbXBsZXRlZCIsImZhaWwiLCJTZXR1cEZhaWxlZCIsIm1ldHJpY1R5cGUiLCJfbWV0cmljU3VibWl0dGVkIiwic2V0dXBUaW1lIiwibWV0cmljTmFtZSIsImdldE5hbWUiLCJwdXNoIiwicnVudGltZSIsInVpbnQ2NCIsIl9sb2dnZXIiLCJpbmZvIiwidG9Jc29TdHJpbmciLCJFZGdlVG9rZW4iLCJlZGdlQXV0aFRva2VuUHJlZml4IiwiRWRnZUF1dGhQYXJzZXIiLCJwYXJzZVRva2VuIiwidG9rZW4iLCJpc0VuY29kZWRFZGdlVG9rZW5WYWxpZCIsImVycm9yIiwiZGVjb2RlZFRva2VuIiwiYXRvYiIsInN1YnN0ciIsImxlbmd0aCIsImVkZ2VUb2tlbiIsIkpTT04iLCJwYXJzZSIsImUiLCJzdGFydHNXaXRoIiwiX2VkZ2VUb2tlbiR0b2tlbiIsIl9lZGdlVG9rZW4kdG9rZW4yIiwiX2FwcGxpY2F0aW9uSWQiLCJhcHBsaWNhdGlvbklkIiwiX3Rva2VuIiwidXJpIiwiY2FwYWJpbGl0aWVzIiwiQnVpbGRGZWF0dXJlcyIsIl9zZW5kTG9jYWxDYW5kaWRhdGVzIiwiX3NlbmRMb2dzIiwiX3NlbmRNZXRyaWNzIiwiX2xvZ1RvQ29uc29sZSIsImFwcGx5RmVhdHVyZXMiLCJmZWF0dXJlcyIsIl9fRkVBVFVSRVNfXyIsInNlbmRMb2NhbENhbmRpZGF0ZXMiLCJzZW5kTG9ncyIsInNlbmRNZXRyaWNzIiwibG9nVG9Db25zb2xlIiwiaXNDaHJvbWU3NCIsImlzQ2hyb21lNzUiLCJpc0Nocm9tZTc2IiwiaXNDaHJvbWU3NyIsImlzQ2hyb21lNjkiLCJpc0Nocm9tZTcwIiwiaXNDaHJvbWU3MSIsImlzQ2hyb21lNzIiLCJicm93c2VyTmFtZSIsImJyb3dzZXJNYWpvclZlcnNpb24iLCJNZWRpYVN0cmVhbVRyYWNrUHJvY2Vzc29yIiwiTWVkaWFTdHJlYW1UcmFja0dlbmVyYXRvciIsIlJUQ1J0cFJlY2VpdmVyIiwicHJvdG90eXBlIiwiY3JlYXRlRW5jb2RlZFN0cmVhbXMiLCJSVENSdHBTY3JpcHRUcmFuc2Zvcm0iLCJIVE1MVmlkZW9FbGVtZW50IiwicmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayIsIlBhcmFtZXRlcnMiLCJfZGlzY292ZXJ5UGFyYW1ldGVycyIsImFwcGx5UGFyYW1ldGVycyIsInBhcmFtZXRlcnMiLCJfX1BBUkFNRVRFUlNfXyIsImRpc2NvdmVyeSIsImludGVudGlvbnMiLCJfZG9jdW1lbnQiLCJkb2N1bWVudCIsIl9sb2NhdGlvbiIsImxvY2F0aW9uIiwiX3dpbmRvdyIsIndpbmRvdyIsIkZvcm1EYXRhIiwiY2xlYXJJbnRlcnZhbCIsImNsZWFyVGltZW91dCIsImNyZWF0ZUVsZW1lbnQiLCJoYXNGb2N1cyIsImhpZGRlbiIsInF1ZXJ5U2VsZWN0b3IiLCJmZXRjaCIsImhvc3RuYW1lIiwic2VhcmNoIiwiY29ubmVjdGlvbiIsIm9uTGluZSIsInNldEludGVydmFsIiwiZ2V0SW5zdGFuY2UiLCJfaW5zdGFuY2UiLCJfR2xvYmFsU2NvcGUiLCJkaXNwb3NhYmxlIiwiX2Rpc3Bvc2VkIiwiX2Rpc3Bvc2FibGUiLCJjYWxsIiwiX2xpc3QiLCJmb3JFYWNoIiwidG9TdHJpbmciLCJtYXhEaWdpdHNJbkZsb2F0QWZ0ZXJEb3QiLCJOdW1iZXJzIiwiY291bnROdW1iZXJMZW5ndGgiLCJpbmNyZW1lbnRGb3JOZWdhdGl2ZVZhbHVlIiwibnVtYmVyIiwiY291bnREaWdpdHNCZWZvcmVEZWNpbWFsIiwiTWF0aCIsImZsb29yIiwiY291bnREaWdpdHNBZnRlckRlY2ltYWwiLCJmaXhSb3VuZGluZyIsInByZWNpc2lvbiIsInBvd2VyIiwicG93Iiwicm91bmQiLCJkaWdpdHNCZWZvcmVEZWNpbWFsIiwib3JpZ2luYWxWYWx1ZSIsIm1vZGlmaWVkVmFsdWUiLCJjb3VudCIsIlN0cmluZ3MiLCJyYW5kb20iLCJyYW5kb20xM0NoYXJhY3RlcnMiLCJsb29wcyIsImNlaWwiLCJBcnJheSIsImZpbGwiLCJyZWR1Y2UiLCJzdHJpbmciLCJmdW5jIiwiYXNzZXJ0VW5yZWFjaGFibGUiLCJ4IiwiQXBwZW5kZXJzIiwiX2FwcGVuZGVycyIsImFwcGVuZGVyIiwicmVtb3ZlIiwiaXRlbXMiLCJpdGVtIiwiTG9nZ2luZ0xldmVsIiwiQ29uc29sZUFwcGVuZGVyIiwidGhyZXNob2xkIiwiX3RocmVzaG9sZCIsImxvZyIsImxvZ0xldmVsIiwibWVzc2FnZSIsImNhdGVnb3J5IiwiZGF0ZSIsImZ1bGxNZXNzYWdlIiwidG9JU09TdHJpbmciLCJXYXJuIiwiY29uc29sZSIsIkxvZ2dlciIsImFwcGVuZGVycyIsIl9jYXRlZ29yeSIsInRyYWNlIiwiVHJhY2UiLCJfbGVuIiwiYXJndW1lbnRzIiwiYXJncyIsIl9rZXkiLCJkZWJ1ZyIsIkRlYnVnIiwiX2xlbjIiLCJfa2V5MiIsIkluZm8iLCJfbGVuMyIsIl9rZXkzIiwid2FybiIsIl9sZW40IiwiX2tleTQiLCJfbGVuNSIsIl9rZXk1IiwiZmF0YWwiLCJGYXRhbCIsIl9sZW42IiwiX2tleTYiLCJsZXZlbCIsInJlcGxhY2VQbGFjZWhvbGRlcnMiLCJfdGhpczIiLCJyZXBsYWNlUGxhY2Vob2xkZXJzU3RyaW5nIiwiaW5kZXgiLCJyZXBsYWNlQXJndW1lbnQiLCJzcGxpY2UiLCJzdHJpbmdpZnkiLCJhY2N1bXVsYXRvciIsImN1cnJlbnRWYWx1ZSIsImFycmF5IiwiZXJyb3JTdGFja0Fsc29IYXNFcnJvck1lc3NhZ2UiLCJzdGFjayIsImFyZyIsImNhY2hlIiwiT2JqZWN0IiwiYXJndW1lbnQiLCJkYXRhIiwidG9TdHJpbmdTdHIiLCJMb2dnaW5nVGhyZXNob2xkIiwiVGVsZW1ldHJ5QXBwZW5kZXIiLCJUZWxlbWV0cnlDb25maWd1cmF0aW9uIiwiX3RlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJsb2dnZXIiLCJfbG9nZ2VycyIsImFwcGx5TG9nZ2VyQ29uZmlnRnJvbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24iLCJhcHBseUxvZ2dpbmdMZXZlbCIsImFwcGx5QXBwZW5kZXJMb2dnaW5nTGV2ZWwiLCJhcHBseUNvbnNvbGVMb2dnZXIiLCJhcHBseVRlbGVtZXRyeUxvZ2dlciIsInBhcmFtZXRlclZhbHVlIiwiX2NvbmZpZ3VyYXRpb25QYXJhbWV0ZXJSZWFkZXIiLCJzZXRUaHJlc2hvbGQiLCJhcHBseUFwcGVuZGVyIiwibG9nZ2luZ0xldmVsIiwiT2ZmIiwiQWxsIiwiY29udmVydExvZ2dpbmdMZXZlbFR5cGVUb0xvZ2dpbmdMZXZlbCIsImxvZ2dpbmdMZXZlbFR5cGUiLCJUZWxlbWV0cnlMZXZlbCIsIm1ldHJpY3MiLCJfbWV0cmljcyIsImdldFRlbGVtZXRyeUxldmVsIiwiVGltZVRvRmlyc3RGcmFtZSIsIkVzc2VudGlhbCIsIkNoYW5uZWxDcmVhdGlvblRpbWVUb0ZpcnN0RnJhbWUiLCJTdGFsbGVkIiwiQnVmZmVyaW5nIiwiUm91bmRUcmlwVGltZSIsIkRvd25saW5rVGhyb3VnaHB1dENhcGFjaXR5IiwiTmV0d29ya1R5cGUiLCJSZXNvbHV0aW9uQ2hhbmdlZCIsIkFwcGxpY2F0aW9uRm9yZWdyb3VuZCIsIkFwcGxpY2F0aW9uQmFja2dyb3VuZCIsIk1ldHJpY3NDb25maWd1cmF0aW9uIiwiX3VybCIsInNldCIsInVybCIsIm1ldHJpY3NVcmwiLCJwYXRobmFtZSIsIl9lbnZpcm9ubWVudCIsImVudmlyb25tZW50IiwiX3RlbmFuY3kiLCJ0ZW5hbmN5IiwiX3Nlc3Npb25JZCIsInNlc3Npb25JZCIsIk1ldHJpY3NTZXJ2aWNlIiwiVGVsZW1ldHJ5VXJsIiwiRW52aXJvbm1lbnQiLCJNZXRyaWNzRmFjdG9yeSIsImdldE1ldHJpY3NTZXJ2aWNlIiwibWV0cmljc1NlcnZpY2VzIiwiX21ldHJpY3NTZXJ2aWNlcyIsIm1ldHJpY3NDb25maWd1cmF0aW9uIiwiY2xpZW50U2Vzc2lvbklkIiwiZ2V0VGVsZW1ldHJ5VXJsIiwiZ2V0RW52aXJvbm1lbnRGcm9tVXJsIiwiY29udmVydFRlbGVtZXRyeUxldmVsVHlwZVRvVGVsZW1ldHJ5TGV2ZWwiLCJ0ZWxlbWV0cnlMZXZlbCIsInNldFRlbGVtZXRyeUxldmVsIiwidmFsdWVzIiwiRXhwb25lbnRpYWxCYWNrb2ZmIiwiVmVyc2lvbk1hbmFnZXIiLCJyZXF1ZXN0U2l6ZUxpbWl0IiwibWF4QnVmZmVyZWRSZWNvcmRzIiwibG9jYXRpb25Ib3N0bmFtZSIsIl9tZXRyaWNzQ29uZmlndXJhdGlvbiIsIl9leHBvbmVudGlhbEJhY2tvZmYiLCJtZXRyaWMiLCJwcmV2aW91c1ZhbHVlIiwicmVzb3VyY2UiLCJraW5kIiwibWV0cmljUmVjb3JkIiwidGltZXN0YW1wIiwiZnVsbFF1YWxpZmllZE5hbWUiLCJfZG9tYWluIiwic2RrVmVyc2lvbiIsImlnbm9yZWQiLCJzZW5kTWV0cmljc0lmQWJsZSIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yUnVudGltZSIsIm1hcmsiLCJfY2FsbGVlIiwibWV0cmljc01lc3NhZ2VzIiwiZm9ybURhdGEiLCJ3cmFwIiwiX2NhbGxlZSQiLCJfY29udGV4dCIsInByZXYiLCJuZXh0IiwiYXBwZW5kIiwicmVjb3JkcyIsIm1ldGhvZCIsImJvZHkiLCJhYnJ1cHQiLCJzZW50Iiwic3RvcCIsIl94IiwiYXBwbHkiLCJfc2VuZE1ldHJpY3NJZkFibGUiLCJfY2FsbGVlMiIsIl9jYWxsZWUyJCIsIl9jb250ZXh0MiIsIl9pc1NlbmRpbmciLCJzbGljZSIsInRoZW4iLCJyZXNwb25zZSIsImlzUmVzcG9uc2VTdGF0dXNDb2RlUmV0cnlhYmxlIiwiX2ZhaWx1cmVDb3VudCIsIl90b0NvbnN1bWFibGVBcnJheSIsImdldEV4cG9uZW50aWFsQmFja29mZkludGVydmFsQnlGYWlsdXJlQ291bnQiLCJjYXRjaCIsInN0YXR1cyIsInRlbGVtZXRyeUxldmVsVHlwZSIsIlByb21pc2VIYW5kbGVyIiwiUHJvbWlzZSIsImNhbGxiYWNrIiwiVHlwZUVycm9yIiwiX3N0YXRlIiwiX2hhbmRsZWQiLCJfdmFsdWUiLCJfZGVmZXJyZWRzIiwiZG9SZXNvbHZlIiwiZG9uZSIsInByb21pc2VSZXNvbHZlIiwicmVhc29uIiwicHJvbWlzZVJlamVjdCIsIm5ld1ZhbHVlIiwicHJvbWlzZSIsIl90eXBlb2YiLCJmaW5hbGUiLCJfaW1tZWRpYXRlIiwiX3VuaGFuZGxlZFJlamVjdGlvbiIsImkiLCJsZW4iLCJoYW5kbGUiLCJkZWZlcnJlZCIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsInJlc3VsdCIsImFsbCIsImFyciIsInJlc29sdmUiLCJyZWplY3QiLCJpc0FycmF5IiwicmVtYWluaW5nIiwibWFuYWdlUmVzcG9uc2UiLCJjb25zdHJ1Y3RvciIsIl8iLCJyYWNlIiwiVmFuaWxsYVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIlBlZXJDb25uZWN0aW9uU2VydmljZSIsIl9wZWVyQ29ubmVjdGlvbkZhY3RvcnkiLCJpbml0aWF0ZUluaXRpYWxQcmVjYWNoaW5nIiwiaXNQcmVjYWNoaW5nRW5hYmxlZCIsInByZWNhY2hlQ3JlYXRlUGVlckNvbm5lY3Rpb25PZmZlciIsIl9wcmVjYWNoZUNyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FjaGVkIiwiZGlyZWN0aW9uIiwicGVlckNvbm5lY3Rpb24iLCJjcmVhdGVQZWVyQ29ubmVjdGlvbk9mZmVyIiwiX2NyZWF0ZVBlZXJDb25uZWN0aW9uT2ZmZXIiLCJfY2FsbGVlMyIsImVuY29kZWRJbnNlcnRhYmxlU3RyZWFtcyIsImNvbmZpZ3VyYXRpb24iLCJfYXJnczMiLCJfY2FsbGVlMyQiLCJfY29udGV4dDMiLCJpc0VuY29kZWRJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsImNyZWF0ZVBlZXJDb25uZWN0aW9uIiwic3VwcG9ydHNBZGRUcmFuc2NlaXZlciIsInZpZGVvVHJhbnNjZWl2ZXIiLCJhdWRpb1RyYW5zY2VpdmVyIiwib3B0aW9ucyIsImFkZFRyYW5zY2VpdmVyIiwidDAiLCJ0MSIsInQyIiwiY3JlYXRlT2ZmZXIiLCJ0MyIsImxvY2FsT2ZmZXIiLCJvZmZlclRvUmVjZWl2ZUF1ZGlvIiwib2ZmZXJUb1JlY2VpdmVWaWRlbyIsInQ0IiwidDUiLCJSdGNDb25maWd1cmF0aW9uTWFuYWdlciIsInRydW5jYXRlSWNlU2VydmVycyIsImljZVNlcnZlcnMiLCJ1cmxzIiwidXNlcm5hbWUiLCJjcmVkZW50aWFsIiwiU2RwUGFyc2VyIiwidXBkYXRlU3RhdGlzdGljVGltZW91dCIsIlJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwibWVkaWFTdHJlYW0iLCJlc3RpbWF0ZWRSb3VuZFRyaXBUaW1lIiwiX3BlZXJDb25uZWN0aW9uIiwiX2VzdGltYXRlZFJvdW5kVHJpcFRpbWUiLCJfdHJhY2tzVG9Nb25pdG9yIiwiZ2V0VHJhY2tzIiwibWFwIiwidHJhY2siLCJnZXRDdXJyZW50T2ZmZXJEaXNhYmxlZCIsInBhcnNlZFNEUCIsImN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiIsInNkcCIsIl9lc3RpbWF0ZWRBdWRpb0NvZGVjIiwiYXVkaW9Db2RlYyIsIl9lc3RpbWF0ZWRWaWRlb0NvZGVjIiwidmlkZW9Db2RlYyIsInVwZGF0ZVN0YXRpc3RpYyIsIl9ydGNTdGF0aXN0aWMiLCJfaXNNb25pdG9yUnVubmluZyIsIl91cGRhdGVUaW1lb3V0IiwiX3VwZGF0ZVN0YXRpc3RpYyIsIl9pZ25vcmVkIiwiZ2V0S2luZEZvclNhZmFyaTExIiwiZ2V0U3RhdHNQcm9taXNlQmFzZWREaXNhYmxlZCIsInVwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImlkIiwiZ2V0U3RhdHMiLCJzdGF0cyIsInJ0Y1N0YXRpc3RpY3MiLCJyb3VuZFRyaXBUaW1lIiwibGFzdFBhY2tldFJlY2VpdmVkVGltZXN0YW1wIiwicmVwb3J0IiwiY3VycmVudFJvdW5kVHJpcFRpbWUiLCJtZWRpYVR5cGUiLCJjb2RlYyIsImNvZGVjSWQiLCJtaW1lVHlwZSIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdiIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjIiLCJfdGhpcyRfcnRjU3RhdGlzdGljJHYzIiwiX3RoaXMkX3J0Y1N0YXRpc3RpYyR2NCIsIl90aGlzJF9ydGNTdGF0aXN0aWMkdjUiLCJieXRlcyIsImJ5dGVzUmVjZWl2ZWQiLCJwcmV2aW91c0J5dGVzUmVjZWl2ZWQiLCJieXRlc0RlbHRhIiwidGltZURlbHRhIiwiYml0cmF0ZSIsInNzcmMiLCJwYWNrZXRzTG9zdCIsInBhY2tldHNSZWNlaXZlZCIsImdldENvZGVjQnlUeXBlIiwidmlkZW8iLCJmcmFtZXNEZWNvZGVkIiwiZnBzIiwiX3VwZGF0ZVN0YXRpc3RpY0xlZ2FjeSIsImdldFN0YXRzTGVnYWN5IiwibmFtZXMiLCJzdGF0IiwiX3NkcCIsInNkcFNwbGl0QnlMaW5lcyIsInNkcFNwbGl0QnlUcmFja3MiLCJfYXVkaW9Db2RlYyIsImFwcGx5Q29kZWMiLCJfdmlkZW9Db2RlYyIsIl9pc0F1ZGlvVHJhY2tFbmFibGVkIiwiaXNUcmFja0J5VHlwZUVuYWJsZWQiLCJfaXNWaWRlb1RyYWNrRW5hYmxlZCIsInNkcFNlY3Rpb25Gb3JUeXBlIiwiZmluZCIsInNkcFRyYWNrIiwidXNlZENvZGVjTGluZSIsInNkcExpbmUiLCJ1c2VkQ29kZWMiLCJjb2RlY05hbWUiLCJWYW5pbGxhUGVlckNvbm5lY3Rpb24iLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbkVuYWJsZWQiLCJ3ZWJraXRSVENQZWVyQ29ubmVjdGlvbiIsIlJUQ1BlZXJDb25uZWN0aW9uIiwiY3VycmVudExvY2FsRGVzY3JpcHRpb24iLCJjb25uZWN0aW9uU3RhdGUiLCJpY2VDb25uZWN0aW9uU3RhdGUiLCJnZXRDb25maWd1cmF0aW9uIiwic2V0Q29uZmlndXJhdGlvbiIsImFkZFRyYW5jZWl2ZXJEaXNhYmxlZCIsIl9jcmVhdGVPZmZlciIsInByb21pc2VCYXNlZFBDTWV0aG9kc0Rpc2FibGVkIiwiX2NyZWF0ZUFuc3dlciIsImNyZWF0ZUFuc3dlciIsIl94MiIsIl9zZXRMb2NhbERlc2NyaXB0aW9uIiwiZGVzY3JpcHRpb24iLCJzZXRMb2NhbERlc2NyaXB0aW9uIiwiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIiwiX3gzIiwiX3NldFJlbW90ZURlc2NyaXB0aW9uIiwiX2NhbGxlZTQiLCJfZGVzY3JpcHRpb24kc2RwIiwiaGFzQ3J5cHRvIiwiX2NhbGxlZTQkIiwiX2NvbnRleHQ0Iiwic2V0UmVtb3RlRGVzY3JpcHRpb24iLCJfeDQiLCJnZXRTZW5kZXJzIiwiZ2V0UmVjZWl2ZXJzIiwic2VsZWN0b3IiLCJfdGhpczMiLCJhZGRTdHJlYW0iLCJfdGhpczQiLCJhZGRUcmFjayIsIm9udHJhY2siLCJoYW5kbGVyIiwib25pY2VjYW5kaWRhdGUiLCJvbmNvbm5lY3Rpb25zdGF0ZWNoYW5nZSIsIm9uaWNlY29ubmVjdGlvbnN0YXRlY2hhbmdlIiwiY2xvc2UiLCJfY3JlYXRlUGVlckNvbm5lY3Rpb24iLCJzdWJqZWN0IiwiX3N1YmplY3QiLCJzdWJzY3JpYmUiLCJEaXNwb3NhYmxlTGlzdGVuZXIiLCJfRGlzcG9zYWJsZSIsImxpc3RlbmVycyIsIl9jYWxsU3VwZXIiLCJpZHgiLCJfaW5oZXJpdHMiLCJfbGlzdGVuZXJzIiwiY2hhbmdlZCIsImNvbXBhcmFibGUiLCJlcXVhbHMiLCJiYXNlVVJMIiwib3JpZ2luIiwiRGlzY292ZXJ5VXJpIiwiX2NsaWVudFNlc3Npb25JZCIsIl9sb2FkZWRUaW1lc3RhbXAiLCJfcmVhZE9ubHlJbml0aWFsaXplZCIsIl9yZWFkT25seURpc2NvdmVyeVVyaSIsIl9yZWFkT25seVBlZXJDb25uZWN0aW9uRmFjdG9yeSIsIl9hdXRvbWF0aWNhbGx5UmV0cnlPbkZhaWx1cmUiLCJfYXV0b21hdGljYWxseVJlY29ubmVjdFBlZXJDb25uZWN0aW9uIiwiX2F1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJfYXV0b21hdGljYWxseU11dGVWaWRlb09uUGxheUZhaWx1cmUiLCJfZm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydCIsIl9za2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXMiLCJfd2ViUGxheWVyTG9hZGVyIiwiX3NoYWthUGxheWVyTG9hZGVyIiwiX2hsc0pzTG9hZGVyIiwiX21ldHJpY3NTZXJ2aWNlIiwiX2FwcGxpY2F0aW9uQWN0aXZpdHlNb25pdG9yIiwiX3RlbGVtZXRyeVVybCIsIl9tYXhpbWFsTnVtYmVyT2ZQZWVyQ29ubmVjdGlvblJlY29ubmVjdEF0dGVtcHRzIiwicmV0cmllc0Ftb3VudCIsIl90ZWxlbWV0cnlMZXZlbCIsImFwcGx5VGVsZW1ldHJ5Q29uZmlndXJhdGlvbiIsInRlbGVtZXRyeUNvbmZpZ3VyYXRpb24iLCJpZ25vcmVkRW52aXJvbm1lbnQiLCJpZ25vcmVkRGlzY292ZXJ5VXJpIiwidGVsZW1ldHJ5VXJsIiwidGVsZW1ldHJ5QXBwZW5kZXIiLCJpZ25vcmVkVGVuYW5jeSIsImFwcGx5TWV0cmljc0NvbmZpZ3VyYXRpb24iLCJpZ25vcmVkVGVsZW1ldHJ5TGV2ZWwiLCJhcHBseUF1dG9tYXRpY2FsbHlSZXRyeU9uRmFpbHVyZUZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlBdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb25Gcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5Rm9yY2VHYXJiYWdlQ29sbGVjdGlvbk9uUmVzdGFydEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiYXBwbHlTa2lwR2FyYmFnZUNvbGxlY3Rpb25Pbk1vYmlsZURldmljZXNGcm9tUGFyYW1ldGVyQ29uZmlndXJhdGlvbiIsImFwcGx5RGlzY292ZXJ5VXJpRGVmYXVsdEZyb21QYXJhbWV0ZXJDb25maWd1cmF0aW9uIiwiZGlzY292ZXJ5VXJpIiwiY2hhbm5lbFRva2VuIiwidXJpVmFsdWUiLCJiYXNlVVJJVmFsdWUiLCJpbml0IiwiX2luaXRpYWxpemVkIiwicGVlckNvbm5lY3Rpb25GYWN0b3J5IiwiY29uc29sZUxvZ2dpbmdMZXZlbCIsImNvbnNvbGVBcHBlbmRlciIsImF1dG9tYXRpY2FsbHlQbGF5TWVkaWFTdHJlYW0iLCJhdXRvbWF0aWNhbGx5TXV0ZVZpZGVvT25QbGF5RmFpbHVyZSIsIndlYlBsYXllckxvYWRlciIsInNoYWthUGxheWVyTG9hZGVyIiwiaGxzSnNMb2FkZXIiLCJfU0RLIiwiYWRkV2luZG93RXZlbnRMaXN0ZW5lciIsInNlZ21lbnRzIiwicHJvdG9jb2wiLCJ1bnNoaWZ0IiwiZW5kc1dpdGgiLCJqb2luIiwiQml0cmF0ZVN0YXRlIiwiQml0cmF0ZU1vZGUiLCJEaW1lbnNpb24iLCJDaGFubmVsU3RhdGUiLCJWaWRlb1RlbGVtZXRyeSIsIlNlc3Npb25UZWxlbWV0cnkiLCJUb2tlbkNvbnRleHQiLCJDaGFubmVsQ29udGV4dCIsIkVuY29kZWRTdHJlYW1TaW5rIiwiU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJTdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiUGVlckNvbm5lY3Rpb25Db250ZXh0IiwiU3RhdGVDb250ZXh0IiwiU3RyZWFtRmFjdG9yeSIsIkRpc2NvdmVyeSIsImRlZmF1bHRTdHJlYW1UZXJtaW5hdGlvblJlYXNvbiIsImZhaWx1cmVDb3VudENsZWFuVXBJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwic3RhbmRieVBvbGxpbmdJbnRlcnZhbEluTWlsbGlzZWNvbmRzIiwiQ2hhbm5lbCIsInZpZGVvRWxlbWVudCIsImNoYW5uZWxDb250ZXh0T3B0aW9ucyIsInRhcmdldExhZyIsInN0cmVhbVRyYW5zZm9ybUNvbnRleHRPcHRpb25zIiwiaGFzSW5zZXJ0YWJsZVN0cmVhbXMiLCJoYXNFbmNvZGVkSW5zZXJ0YWJsZVN0cmVhbXMiLCJ2aWRlb1N0cmVhbVRyYW5zZm9ybUNhbGxiYWNrIiwiYXVkaW9TdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImVuY29kZWRWaWRlb1N0cmVhbVNpbmsiLCJlbmNvZGVkQXVkaW9TdHJlYW1TaW5rIiwiX3Rva2VuQ29udGV4dCIsIl9jaGFubmVsQ29udGV4dCIsIl9wZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJfc3RyZWFtVHJhbnNmb3JtQ29udGV4dCIsIl9zdGF0ZUNvbnRleHQiLCJfY2hhbm5lbFN0YXJ0VGltZSIsIl9yZWFkT25seVZpZGVvRWxlbWVudCIsIl9yZWFkT25seVRva2VuIiwiX3JlYWRPbmx5UGVlckNvbm5lY3Rpb24iLCJfcmVhZE9ubHlTdGF0ZSIsInN0YXRlIiwiX3JlYWRPbmx5QXV0b011dGVkIiwiYXV0b011dGVkIiwiX3JlYWRPbmx5QXV0b1BhdXNlZCIsImF1dG9QYXVzZWQiLCJfcmVhZE9ubHlUb2tlbkV4cGlyaW5nIiwidG9rZW5FeHBpcmluZyIsIl9yZWFkT25seUF1dGhvcml6ZWQiLCJhdXRob3JpemVkIiwiX3JlYWRPbmx5T25saW5lIiwib25saW5lIiwiX3JlYWRPbmx5TG9hZGluZyIsImxvYWRpbmciLCJfcmVhZE9ubHlQbGF5aW5nIiwicGxheWluZyIsIl9yZWFkT25seVN0YW5kYnkiLCJzdGFuZGJ5IiwiX3JlYWRPbmx5U3RvcHBlZCIsInN0b3BwZWQiLCJfcmVhZE9ubHlUYXJnZXRMYWciLCJfcmVhZE9ubHlMYWciLCJsYWciLCJfcmVhZE9ubHlCaXRyYXRlTGltaXQiLCJiaXRyYXRlTGltaXQiLCJfcmVhZE9ubHlSZXNvbHV0aW9uIiwicmVzb2x1dGlvbiIsIl9yZWFkT25seUZhaWx1cmVDb3VudCIsImZhaWx1cmVDb3VudCIsIl9yZWFkT25seUVuZFBvaW50IiwiZW5kUG9pbnQiLCJfcmVhZE9ubHlTdHJlYW0iLCJzdHJlYW0iLCJfcmVhZE9ubHlSdGNTdGF0aXN0aWNzIiwiX3JlYWRPbmx5TWVkaWFTdHJlYW0iLCJfc2Vzc2lvblRlbGVtZXRyeSIsImNoYW5uZWxEaXNwb3NhYmxlcyIsIl92aWRlb01ldGFEYXRhQ2hhbmdlZEhhbmRsZXIiLCJoYW5kbGVWaWRlb01ldGFEYXRhQ2hhbmdlZCIsInJlbmRlcmVyRGlzcG9zYWJsZXMiLCJ2aWRlb1RlbGVtZXRyeSIsImRhdGFzZXQiLCJzZXR1cExpc3RlbmVyRm9yVGltZVRvRmlyc3RUaW1lIiwic2V0dXBMaXN0ZW5lckZvclJlYnVmZmVyaW5nIiwiU3RvcHBlZCIsInJlc3RhcnRBZnRlclN0b3AiLCJjbGVhckZhaWx1cmVDb3VudFRpbWVvdXQiLCJQbGF5aW5nIiwib25WaWRlb1Jlc29sdXRpb25DaGFuZ2VzIiwiZWxhcHNlZEluTWlsbGlzZWNvbmRzIiwiY2hhbm5lbEluaXRpYWxpemF0aW9uIiwiZ2V0VGltZSIsImxpbWl0Qml0cmF0ZSIsIktlZXAiLCJOb3JtYWwiLCJkZXN0cm95U3RyZWFtT25Vbm1vdW50IiwicmVtb3ZlV2luZG93RXZlbnRMaXN0ZW5lciIsInN0YXJ0IiwicGF1c2UiLCJzcmNPYmplY3QiLCJJbml0aWFsaXppbmciLCJ3aWR0aCIsInZpZGVvV2lkdGgiLCJoZWlnaHQiLCJ2aWRlb0hlaWdodCIsImVtcHR5IiwiZGlzcG9zYWJsZXMiLCJzZXRCaXRyYXRlTGltaXQiLCJjbGVhckJpdHJhdGVMaW1pdCIsImJpdHJhdGVJbkJpdHNQZXJTZWNvbmQiLCJSZXNldCIsInVwZGF0ZVRhcmdldExhZyIsIl9zdG9wIiwiaXNTdGFydGluZyIsInByb2Nlc3NTdG9wIiwiY2xlYW5VcFJlc291cmNlcyIsIl9yZXN1bWUiLCJwbGF5TWVkaWFTdHJlYW1JblZpZGVvRWxlbWVudCIsInJlc3VtZSIsIm11dGUiLCJtdXRlZCIsInVubXV0ZSIsIl9kaXNwb3NlIiwiaXNEaXNwb3NlZCIsImdldFVyaSIsIl9zdGFydCIsInByb2Nlc3NTdGFydCIsIl9wcm9jZXNzU3RhcnQiLCJfY2FsbGVlNSIsIl90aGlzNSIsImxpc3Rlbk9uU3RyZWFtU2V0dXAiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJ2YWxpZCIsInZhbGlkYXRpb25SZXN1bHQiLCJfU3RyZWFtVHJhY2tUcmFuc2Zvcm0yIiwiX3ZhbGlkIiwiX3ZhbGlkYXRpb25SZXN1bHQiLCJfRW5jb2RlZFN0cmVhbVNpbmskdmEiLCJfdmFsaWQyIiwiX3ZhbGlkYXRpb25SZXN1bHQyIiwiX0VuY29kZWRTdHJlYW1TaW5rJHZhMiIsIl92YWxpZDMiLCJfdmFsaWRhdGlvblJlc3VsdDMiLCJoYXNUcmFuc2Zvcm1TdHJlYW1DYWxsYmFjayIsImhhc0VuY29kZWRTdHJlYW1TaW5rIiwiaGFuZGxlU3RyZWFtRmFpbHVyZUNhbGxiYWNrIiwic3RyZWFtUGxheWVyIiwiX2NhbGxlZTUkIiwiX2NvbnRleHQ1IiwiU3RhcnRpbmciLCJVbmF1dGhvcml6ZWQiLCJ2YWxpZGF0ZU1lZGlhU3RyZWFtVHJhY2tUcmFuc2Zvcm0iLCJDb25maWd1cmF0aW9uRXJyb3IiLCJ2YWxpZGF0ZUVuY29kZWRTdHJlYW1TaW5rIiwiaXNJbnNlcnRhYmxlU3RyZWFtc1N1cHBvcnRlZCIsIlVuc3VwcG9ydGVkRmVhdHVyZSIsImlzUlRDUnRwU2NyaXB0VHJhbnNmb3JtU3VwcG9ydGVkIiwiUmVjb3ZlcmluZyIsImNsZWFyQ2FjaGVkQ2xvc2VzdEVuZHBvaW50IiwiaGFuZGxlU3RyZWFtRmFpbHVyZSIsImNyZWF0ZSIsIkNsaWVudFN0YXJ0RXJyb3IiLCJmaW5hbGx5IiwiYXV0b21hdGljUmV0cnlPbkZhaWx1cmUiLCJ0aW1lb3V0SWQiLCJnZXRSZXRyeUludGVydmFsIiwiX3Jlc3RhcnRBZnRlclN0b3AiLCJfY2FsbGVlNiIsIl9jYWxsZWU2JCIsIl9jb250ZXh0NiIsIl9wbGF5IiwiX2NhbGxlZTciLCJfY2FsbGVlNyQiLCJfY29udGV4dDciLCJwbGF5IiwiU3RhbmRCeSIsIk9mZmxpbmUiLCJHZW9SZXN0cmljdGVkIiwiR2VvQmxvY2tlZCIsIlBhdXNlZCIsIlJlY29ubmVjdGluZyIsIlRyYW5zaWVudENvbmZpZ3VyYXRpb25FcnJvciIsIkNvbm5lY3Rpb25FcnJvciIsIl9oYW5kbGVTdHJlYW1GYWlsdXJlIiwiX2NhbGxlZTgiLCJfY2FsbGVlOCQiLCJfY29udGV4dDgiLCJfdGhpczYiLCJmb3JjZUdhcmJhZ2VDb2xsZWN0aW9uT25SZXN0YXJ0Iiwic2tpcEdhcmJhZ2VDb2xsZWN0aW9uT25Nb2JpbGVEZXZpY2VzIiwiZGVzdHJveVN0cmVhbSIsInBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJfcGxheU1lZGlhU3RyZWFtSW5WaWRlb0VsZW1lbnQiLCJfY2FsbGVlOSIsIl90aGlzNyIsInBsYXlQcm9taXNlIiwiX2NhbGxlZTkkIiwiX2NvbnRleHQ5IiwiaGFzQXVkaW9UcmFjayIsImZpbHRlciIsImF1dG9tYXRpY2FsbHlNdXRlVmlkZW9PblBsYXlGYWlsdXJlT2ZmIiwiQ2hhbm5lbHMiLCJjcmVhdGVDaGFubmVsIiwiaW5pdGlhbGl6ZWQiLCJjaGFubmVsT3B0aW9ucyIsIl9pc0ZyYW1lVGltaW5nSW5mb3JtYXRpb25TdXBwb3J0ZWQiLCJpc1JlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2tTdXBwb3J0ZWQiLCJkZWZhdWx0VGFyZ2V0TGFnIiwiX29wdGlvbnMkdGFyZ2V0TGFnIiwiYXBwbHlTdGF0dXMiLCJhcHBseVNlc3Npb25BbmRTdHJlYW1Qcm9wZXJ0aWVzVG9WaWRlb0VsZW1lbnQiLCJtYXBTdWJzY3JpYmVTdGF0dXNUb0NoYW5uZWxTdGF0dXMiLCJkZWZhdWx0RGlzY292ZXJ5VXJpIiwiQml0cmF0ZU1vZGVNYXBwaW5nIiwiY29udmVydEJpdHJhdGVNb2RlVG9CaXRyYXRlTW9kZVR5cGUiLCJiaXRyYXRlTW9kZSIsIkZvcmNlIiwiQml0cmF0ZVN0YXRlTWFwcGluZyIsImNvbnZlcnRCaXRyYXRlU3RhdGVUb0JpdHJhdGVTdGF0ZVR5cGUiLCJiaXRyYXRlU3RhdGUiLCJEaXNjb3ZlcnlTZXJ2aWNlIiwiZGlzY292ZXJ5Q2FjaGVJbnRlcnZhbCIsIl9wcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsImRpc2NvdmVyQ2xvc2VzdEVuZFBvaW50V2l0aENhY2hpbmciLCJwcmVjYWNoZUNsb3Nlc3RFbmRQb2ludERpc2NvdmVyeSIsIl9kaXNjb3ZlckNsb3Nlc3RFbmRQb2ludFdpdGhDYWNoaW5nIiwiZGlzY292ZXJ5U2VydmljZSIsImNhY2hlZFZhbHVlIiwiX2NhY2hlIiwiZGlzY292ZXJDbG9zZXN0RW5kUG9pbnQiLCJFbmRQb2ludCIsImRlZmF1bHRUaW1lb3V0IiwiX3VyaSIsIl9kaXNjb3Zlck5lYXJieUVuZFBvaW50cyIsInRpbWVvdXQiLCJhc1N0cmluZyIsImVuZFBvaW50cyIsIm9rIiwidGV4dCIsImRpc2NvdmVyTmVhcmJ5RW5kUG9pbnRzIiwiX2Rpc2NvdmVyQ2xvc2VzdEVuZFBvaW50IiwiZmFpbGVkUmVxdWVzdHMiLCJwcm9wYWdhdGVGYWlsdXJlSWZBbGxSZXF1ZXN0c0ZhaWxlZCIsIl9hcmdzMiIsImJ1aWxkRGlzY292ZXJ5VXJsIiwicGluZyIsInRpbWUiLCJfZGlzY292ZXJ5VXJpIiwiZGlzY292ZXJ5UGFyYW1ldGVycyIsInNlYXJjaFBhcmFtcyIsImFwaVZlcnNpb24iLCJfdGltZW91dCIsIl9yb3VuZFRyaXBUaW1lIiwiX3BpbmciLCJmaW5pc2hlZCIsImJ1aWxkUGluZ1VybCIsIl9zdWJzY3JpYmUiLCJsb2NhbFNlc3Npb25EZXNjcmlwdGlvbiIsImNsaWVudFZlcnNpb24iLCJib2R5V2l0aE9mZmVyIiwiYm9keVdpdGhvdXRPZmZlciIsImh0dHBSZXNwb25zZSIsInN1YnNjcmliZVJlc3BvbnNlIiwiYnVpbGRVcmwiLCJiZWFyZXJUb2tlbiIsImh0dHBSb3VuZFRyaXBUaW1lIiwic2Vzc2lvbkRlc2NyaXB0aW9uIiwiY3JlYXRlQW5zd2VyRGVzY3JpcHRpb24iLCJjcmVhdGVPZmZlckRlc2NyaXB0aW9uIiwibWFwSHR0cFN0YXR1c1RvU3Vic2NyaWJlU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU3Vic2NyaWJlUmVzcG9uc2UiLCJfcHVibGlzaCIsIm1hcEh0dHBTdGF0dXNUb1B1Ymxpc2hTdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9QdWJsaXNoUmVzcG9uc2UiLCJwdWJsaXNoIiwiX3g1IiwiX3g2IiwiX3g3Iiwic2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsInNoYXJlZFNlY3JldCIsIm1hcEh0dHBTdGF0dXNUb1NldFJlbW90ZURlc2NyaXB0aW9uU3RhdHVzIiwiY29udmVydEh0dHBSZXNwb25zZVRvU2V0UmVtb3RlRGVzY3JpcHRpb25SZXNwb25zZSIsIl94OCIsIl94OSIsIl9saW1pdEJpdHJhdGUiLCJtYXBIdHRwU3RhdHVzVG9TZXRUZW1wb3JhcnlNYXhpbWFsQml0cmF0ZVN0YXR1cyIsIl94MTAiLCJfeDExIiwiX3gxMiIsIl94MTMiLCJfeDE0IiwiX2FkZEljZUNhbmRpZGF0ZXMiLCJjYW5kaWRhdGVzIiwiZGlzY292ZXJ5Q29tcGxldGVkIiwiYWRkSWNlQ2FuZGlkYXRlc1Jlc3BvbnNlIiwiX2FyZ3M2IiwibWFwSHR0cFN0YXR1c1RvQWRkSWNlQ2FuZGlkYXRlc1N0YXR1cyIsImNvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsImFkZEljZUNhbmRpZGF0ZXMiLCJfeDE1IiwiX3gxNiIsIl94MTciLCJfZGVzdHJveVN0cmVhbSIsImRlc3Ryb3lTdHJlYW1SZXNwb25zZSIsIm1hcEh0dHBTdGF0dXNUb1NldERlc3Ryb3lTdHJlYW1TdGF0dXMiLCJjb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfeDE4IiwiX3gxOSIsIl9kZXN0cm95U3RyZWFtT25Vbm1vdW50Iiwic2VuZEJlYWNvbiIsIl94MjAiLCJfeDIxIiwicGF0aCIsInBhdGhBc0FycmF5IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb1N1YnNjcmliZVJlc3BvbnNlIiwianNvbiIsInJ0Y0NvbmZpZ3VyYXRpb24iLCJjb252ZXJ0SVJ0Y0NvbmZpZ3VyYXRpb25Ub1JUQ0NvbmZpZ3VyYXRpb24iLCJjcmVhdGVBbnN3ZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiY3JlYXRlT2ZmZXJEZXNjcmlwdGlvblJlc3BvbnNlIiwiX3gyMiIsIl94MjMiLCJfY29udmVydEh0dHBSZXNwb25zZVRvUHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwIiwicHVibGlzaFJlc3BvbnNlIiwiX2NhbGxlZTEwJCIsIl9jb250ZXh0MTAiLCJfeDI0IiwiX3gyNSIsImJ1bmRsZVBvbGljeSIsImljZUNhbmRpZGF0ZVBvb2xTaXplIiwiaWNlVHJhbnNwb3J0UG9saWN5IiwicnRjcE11eFBvbGljeSIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9TZXRSZW1vdGVEZXNjcmlwdGlvblJlc3BvbnNlIiwiX2NhbGxlZTExIiwiX2NhbGxlZTExJCIsIl9jb250ZXh0MTEiLCJfeDI2IiwiX2NvbnZlcnRIdHRwUmVzcG9uc2VUb0FkZEljZUNhbmRpZGF0ZXNSZXNwb25zZSIsIl9jYWxsZWUxMiIsIl9jYWxsZWUxMiQiLCJfY29udGV4dDEyIiwiX3gyNyIsIl9jb252ZXJ0SHR0cFJlc3BvbnNlVG9EZXN0cm95U3RyZWFtUmVzcG9uc2UiLCJfY2FsbGVlMTMiLCJfY2FsbGVlMTMkIiwiX2NvbnRleHQxMyIsIl94MjgiLCJDaHVua2VkU3RyZWFtaW5nIiwiTmV0d29ya1N0YXRlcyIsIkNodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJDaHVua2VkU3RyZWFtIiwiY2hhbm5lbENvbnRleHQiLCJjaHVua2VkU3RyZWFtUGxheWJhY2tNb2RlIiwiX2NodW5rZWRTdHJlYW1QbGF5YmFja01vZGUiLCJvZmZlclNkcCIsIm9yaWdpblN0YXJ0VGltZSIsInBsYXllciIsIm1vbml0b3IiLCJfbW9uaXRvckRpc3Bvc2FibGVzIiwibmV3U3RyZWFtU3RhdGlzdGljcyIsIkxpdmUiLCJuZXR3b3JrU3RhdGUiLCJOZXR3b3JrTm9Tb3VyY2UiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX21vbml0b3JGYWlsdXJlQ291bnQiLCJfc3RyZWFtU3RhdGlzdGljcyIsInBhdXNlZCIsImRhdGFCdWZmZXJlZCIsIldlYlBsYXllciIsIlNoYWthUGxheWVyIiwiSGxzUGxheWVyIiwiX2hsc1BsYXllciIsIl9waGVuaXhXZWJQbGF5ZXIiLCJfc2hha2EiLCJfb3B0aW9ucyIsImxvYWRlZCIsIl9wZW5kaW5nIiwiX3BsYXllciIsIlBsYXllciIsImRhc2hNYW5pZmVzdFVybE1hdGNoIiwiaGxzTWFuaWZlc3RVcmxNYXRjaCIsIm1hbmlmZXN0VXJsIiwicGxheWxpc3RVcmwiLCJzaG91bGRVc2VOYXRpdmVIbHMiLCJfb2JqZWN0U3ByZWFkIiwicHJlZmVyTmF0aXZlIiwibWFuaWZlc3RVUkkiLCJfdmlkZW9FbGVtZW50IiwiX2tpbmQiLCJfc3RyZWFtSWQiLCJfbWFuaWZlc3RVUkkiLCJlbmNvZGVVUkkiLCJyZXBsYWNlIiwiaGxzUGxheWVyIiwiZW5hYmxlV29ya2VyIiwibWF4QnVmZmVyTGVuZ3RoIiwiYmFja0J1ZmZlckxlbmd0aCIsImxpdmVTeW5jRHVyYXRpb24iLCJsaXZlRHVyYXRpb25JbmZpbml0eSIsImxpdmVNYXhMYXRlbmN5RHVyYXRpb24iLCJJbmZpbml0eSIsImhpZ2hCdWZmZXJXYXRjaGRvZ1BlcmlvZCIsImxvYWRTb3VyY2UiLCJhdHRhY2hNZWRpYSIsImNhblBsYXlUeXBlIiwic3RhdGlzdGljcyIsIm1lZGlhIiwib2Zmc2V0V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJOZXR3b3JrSWRsZSIsImJ1ZmZlcmVkIiwiZW5kIiwic3RyZWFtQ29udHJvbGxlciIsIk5ldHdvcmtMb2FkaW5nIiwiTmV0d29ya0VtcHR5IiwidHJ1ZUN1cnJlbnRUaW1lIiwibWF4IiwiZGVzdHJveSIsIkluc2VydGFibGVTdHJlYW1zIiwiaWNlQ2FuZGlkYXRlQWNjdW11bGF0aW9uSW50ZXJ2YWwiLCJkZWZhdWx0U3RyZWFtU2V0dXBUaW1lb3V0IiwiUmVhbFRpbWVTdHJlYW0iLCJwZWVyQ29ubmVjdGlvbkNvbnRleHQiLCJzdHJlYW1UcmFuc2Zvcm1Db250ZXh0IiwiX3JlZjMiLCJfc2xpY2VkVG9BcnJheSIsIl9yZWYzJCIsImNsaWVudE9mZmVyRGlzYWJsZWQiLCJzdXBwb3J0c1NldENvbmZpZ3VyYXRpb24iLCJzdXBwb3J0c0dldENvbmZpZ3VyYXRpb24iLCJfcmVmNCIsImFwcGx5UnRjQ29uZmlndXJhdGlvbiIsInN1Ym1pdENhbmRpZGF0ZXNUaW1lb3V0IiwiY2FuY2VsRGlzY292ZXJ5IiwiY2FuZGlkYXRlIiwiX3JlZjUiLCJyZXRyeUNhbGxiYWNrIiwibmF2aWdhdG9ySXNPbkxpbmUiLCJyZWNvbm5lY3RQZWVyQ29ubmVjdGlvbiIsIm1lZGlhU3RyZWFtUHJvbWlzZSIsIm9uVHJhY2tEaXNhYmxlZCIsInN0cmVhbXMiLCJ0cmFja0xpc3RlbmVyIiwiYW5zd2VyIiwiX3JlZjYiLCJtYXBTZXRSZW1vdGVEZXNjcmlwdGlvblN0YXR1c1RvQ2hhbm5lbFN0YXR1cyIsInBhcnNlZFJlbW90ZURlc2NyaXB0aW9uIiwiX0luc2VydGFibGVTdHJlYW1zJGFwIiwiYXBwbHlFbmNvZGVkU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJfSW5zZXJ0YWJsZVN0cmVhbXMkYXAyIiwiYXBwbHlJbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtYXRpb24iLCJ0cmFuc2Zvcm1lZFN0cmVhbSIsInJ0Y0Nvbm5lY3Rpb25Nb25pdG9yIiwicnRjQ29ubmVjdGlvbk1vbml0b3JTdGF0aXN0aWNTdWJzY3JpcHRpb24iLCJydGNTdGF0aXN0aWMiLCJydGNWaWRlb1N0YXRpc3RpYyIsInJ0Y0F1ZGlvU3RhdGlzdGljIiwiYXVkaW8iLCJhdWRpb1RyYWNrRmFpbGVkIiwidmlkZW9UcmFja0ZhaWxlZCIsIl9hcHBseVJ0Y0NvbmZpZ3VyYXRpb24iLCJvcHRpb25hbFBlZXJDb25uZWN0aW9uIiwibmV3UnRjQ29uZmlndXJhdGlvbiIsIm1heGltYWxOdW1iZXJPZlBlZXJDb25uZWN0aW9uUmVjb25uZWN0QXR0ZW1wdHMiLCJhdXRvbWF0aWNhbGx5UmVjb25uZWN0UGVlckNvbm5lY3Rpb24iLCJfcGVlckNvbm5lY3Rpb24kY3VycmUiLCJpc0NsaWVudE9mZmVyRmxvdyIsImljZVJlc3RhcnQiLCJvZmZlciIsIl9tb25pdG9yZWRTdGF0aXN0aWNzIiwiZXN0aW1hdGVkQmFuZHdpZHRoIiwicGxheVRpbWUiLCJzaGFrYSIsInBsYXllck9wdGlvbnMiLCJhYnIiLCJkZWZhdWx0QmFuZHdpZHRoRXN0aW1hdGUiLCJtYW5pZmVzdCIsInJldHJ5UGFyYW1ldGVycyIsInN0cmVhbWluZyIsImxpdmVTeW5jUGFuaWNUaHJlc2hvbGQiLCJidWZmZXJpbmdHb2FsIiwiYnVmZmVyQmVoaW5kIiwibWF4QXR0ZW1wdHMiLCJiYWNrb2ZmRmFjdG9yIiwibG9hZFBsYXllciIsInVubG9hZCIsInBsYXllckNvbmZpZyIsImNvbmZpZ3VyZSIsImxvYWQiLCJjb2RlIiwidG9rZW5DYXBhYmlsaXRpZXMiLCJoYXNTdHJlYW1pbmciLCJoYXNPbkRlbWFuZCIsIk9uZERlbWFuZCIsImJhbmR3aWR0aFRvU3RhcnRBdCIsIm1pblRpbWVCZWZvcmVOZXh0UmVsb2FkIiwicGhlbml4V2ViUGxheWVyIiwiZXJyb3JPYmplY3QiLCJjYW5SZWxvYWQiLCJzZXZlcml0eSIsImVycm9ycyIsIlJFQ09WRVJBQkxFIiwicmVsb2FkSWZBYmxlIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiIiwiX3RoaXMkX3ZpZGVvRWxlbWVudCRiMiIsImlzTmF0aXZlIiwiZGVsaXZlcnlUeXBlIiwiaGFzRWxhcHNlZE1pblRpbWVTaW5jZUxhc3RSZWxvYWQiLCJfbGFzdFJlbG9hZFRpbWUiLCJyZWxvYWQiLCJtb2RlIiwiU3Vycm9nYXRlRnJhbWVEYXRhTWFuYWdlciIsIlNraXBGcmFtZSIsInJlY2VpdmVycyIsInJlY2VpdmVyIiwicmVjZWl2ZSIsIndvcmtlciIsIldvcmtlciIsImltcG9ydCIsIm1ldGEiLCJvbm1lc3NhZ2UiLCJldmVudCIsImNodW5rIiwicG9zdE1lc3NhZ2UiLCJmb3JjZUludmFsaWRGcmFtZSIsInRyYW5zZm9ybSIsInRlcm1pbmF0ZSIsImVuY29kZWRTdHJlYW1UcmFuc2Zvcm1DYWxsYmFjayIsImNvbnRyb2xsZXIiLCJzdXJyb2dhdGUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9JRnJhbWUiLCJnZXRJbnZhbGlkU3Vycm9nYXRlVmlkZW9QRnJhbWUiLCJnZXRTdXJyb2dhdGVWaWRlb0lGcmFtZVBlckNvZGVjIiwiZ2V0U3Vycm9nYXRlVmlkZW9QRnJhbWVQZXJDb2RlYyIsImVucXVldWUiLCJ0cmFuc2Zvcm1lciIsIlRyYW5zZm9ybVN0cmVhbSIsInJlY2VpdmVyU3RyZWFtcyIsInNvdXJjZSIsInJlYWRhYmxlIiwic2luayIsIndyaXRhYmxlIiwicGlwZVRocm91Z2giLCJwaXBlVG8iLCJNZWRpYVN0cmVhbSIsImF1ZGlvUHVtcGVyIiwiQXVkaW8iLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwiZ2V0SW52YWxpZFN1cnJvZ2F0ZUF1ZGlvRGF0YSIsImdldFN1cnJvZ2F0ZUF1ZGlvU2lsZW50UGVyQ29kZWMiLCJpbnNlcnRhYmxlU3RyZWFtVHJhbnNmb3JtQ2FsbGJhY2siLCJ2aWRlb1RyYWNrIiwicHJvY2Vzc29yIiwiZ2VuZXJhdG9yIiwicmVtb3ZlVHJhY2siLCJhdWRpb1RyYWNrIiwiU3ltYm9sIiwidG9VcHBlckNhc2UiLCJfZHVtbXlBdWRpb1NpbGVudFBlckNvZGVjIiwiT1BVUyIsImJ1ZmZlciIsIl9zaW5nbGVaZXJvQnl0ZSIsIl91c2VVcGRhdGVTdXJyb2dhdGU4Mng4MlBGcmFtZUZyYW1lTnVtYmVyIiwiX3N1cnJvZ2F0ZTgyeDgyUEZyYW1lRnJhbWVOdW1iZXIiLCJfc3Vycm9nYXRlODJ4ODJQRnJhbWVGcmFtZU51bWJlclJlc2V0IiwiX2R1bW15ODJ4ODJIMjY0IiwiSUZyYW1lIiwiX2R1bW15MngyVmlkZW9JRnJhbWVQZXJDb2RlYyIsIkgyNjQiLCJWUDgiLCJWUDkiLCJfaXNBbmRyb2lkQ2hyb21lIiwiZ2V0U3Vycm9nYXRlODJ4ODJQRnJhbWVBbmRVcGRhdGVGcmFtZU51bWJlciIsIl9kdW1teTJ4MlZpZGVvUEZyYW1lUGVyQ29kZWMiLCJzYXZlZFN1cnJvZ2F0ZUZyYW1lTnVtYmVyIiwiYml0TWFzazEiLCJiaXRNYXNrMiIsImJpdFNoaWZ0UmlnaHRCeTEiLCJiaXRTaGlmdExlZnRCeTciLCJieXRlMSIsImJ5dGUyIiwiY29weU9mRHVtbXlQRnJhbWVzIiwiUEZyYW1lIiwiYnVmZmVySW5kZXgiLCJfZHVtbXk4Mng4MkgyNjRQRnJhbWVGcmFtZU51bWJlckluZGV4IiwiX1N1cnJvZ2F0ZUZyYW1lRGF0YU1hbmFnZXIiLCJpc0FuZHJvaWQiLCJVaW50OEFycmF5IiwiX2lzTW9iaWxlQ2hyb21lIiwiX2lzU2FmYXJpIiwiX19CVUlMRF9WRVJTSU9OX18iLCJfZGVmYXVsdFZlcnNpb24iLCJUZWxlbWV0cnlTZXJ2aWNlIiwiX3RlbGVtZXRyeVNlcnZpY2UiLCJ2YWx1ZU9mIiwibG9nUmVjb3JkIiwiX2xvZ3MiLCJzZW5kTG9nc0lmQWJsZSIsImxvZ01lc3NhZ2VzIiwiX3NlbmRMb2dzSWZBYmxlIiwibnVtYmVyT2ZMb2dzVG9TZW5kIiwic2l6ZU9mTG9nc1RvU2VuZCIsImdldEl0ZW1TaXplIiwiZ2V0TG9nU2l6ZSIsInN1bSIsIl9kdXJhdGlvbiIsImlzTmVnYXRpdmUiLCJhYnMiLCJvZmZzZXQiLCJtaWxsaXNlY29uZHMiLCJzZWNvbmRzIiwibWludXRlcyIsImhvdXJzIiwicGFydHMiLCJTdHJpbmciLCJwYWRTdGFydCIsInRhcmdldExlbmd0aCIsInBhZFN0cmluZyIsInJlcGVhdCIsImRlZmF1bHRCYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiZGVmYXVsdE1pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJkZWZhdWx0TWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJtaW5CYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwibWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsIl9iYWNrb2ZmSW50ZXJ2YWxJbk1pbGxpc2Vjb25kIiwiX21pbkJhY2tvZmZJbnRlcnZhbEluTWlsbGlzZWNvbmQiLCJfbWF4QmFja29mZkludGVydmFsSW5NaWxsaXNlY29uZCIsImJhY2tvZmZJbnRlcnZhbEluU2Vjb25kcyIsInJhbmRvbWl6YXRpb24iLCJleHBvbmVudGlhbEJhY2tvZmYiLCJleHBvbmVudGlhbEJhY2tvZmZXaXRoUmFuZG9taXphdGlvbiIsImV4cG9uZW50aWFsQmFja29mZldpdGhSYW5kb21pemF0aW9uSW5NaWxsaXNlY29uZCIsIm1pbiIsIm90aGVyIiwiYXBwbGljYXRpb25BY3Rpdml0eU1vbml0b3IiLCJfbmV0d29ya01vbml0b3IiLCJpc0ZvcmVncm91bmQiLCJyZWNvcmRGb3JlZ3JvdW5kQ2hhbmdlIiwicmVjb3JkTmV0d29ya1JUVFVwZGF0ZSIsInJlY29yZE5ldHdvcmtUeXBlQ2hhbmdlVXBkYXRlIiwiZG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHkiLCJyZWNvcmROZXR3b3JrRG93bmxpbmtUaHJvdWdocHV0Q2FwYWNpdHlVcGRhdGUiLCJ0aW1lU2luY2VMYXN0Q2hhbmdlIiwibmV3UlRUIiwib2xkUnR0IiwiX2xhc3ROZXR3b3JrU3RhdGlzdGljcyIsIm5ld05ldHdvcmtUeXBlIiwib2xkTmV0d29ya1R5cGUiLCJuZXdDYXBhY2l0eSIsIm9sZENhcGFjaXR5IiwiZmxvYXQiLCJjaGFubmVsU3RhcnRUaW1lIiwiX3N0YXJ0UmVjb3JkaW5nRmlyc3RGcmFtZSIsIl9saXN0ZW5Ub0ZpcnN0VGltZSIsImNhbGxUaW1lVG9GaXJzdEZyYW1lIiwiX2NsZWFyVGltZVRvRmlyc3RGcmFtZUxpc3RlbmVyIiwiX2xpc3RlbkZvclN0YWxsIiwib25TdGFsbCIsIl9saXN0ZW5Gb3JDb250aW51YXRpb24iLCJvbkNvbnRpbnVhdGlvbiIsIl9jbGVhclJlYnVmZmVyaW5nTGlzdGVuZXIiLCJwdXNoVGltZVRvRmlyc3RGcmFtZSIsInB1c2hDaGFubmVsQ3JlYXRpb25UaW1lVG9GaXJzdEZyYW1lIiwiX3RpbWVUb0ZpcnN0RnJhbWUiLCJkdXJhdGlvblNpbmNlUGFnZUxvYWQiLCJfY2hhbm5lbENyZWF0aW9uVGltZVRvRmlyc3RGcmFtZSIsIl92aWRlb1N0YWxsZWQiLCJidWZmZXJMZW5ndGgiLCJoYXNOb3RQcm9ncmVzc2VkU2luY2VMYXN0UHJvZ3Jlc3NFdmVudCIsIl9sYXN0UHJvZ3Jlc3MiLCJ0aW1lU2luY2VTdG9wIiwibmV3UmVzb2x1dGlvbiIsIl92aWRlb1Jlc29sdXRpb24iXSwic291cmNlUm9vdCI6IiJ9