@microsoft/ocsdk 0.6.0-main.7948c3f → 0.6.0-main.7b9626a
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.
- package/README.md +22 -0
- package/dist/SDK.min.js +1 -1
- package/lib/Common/Enums.d.ts +4 -1
- package/lib/Common/Enums.js +4 -1
- package/lib/Common/Enums.js.map +1 -1
- package/lib/Common/OmnichannelEndpoints.d.ts +2 -0
- package/lib/Common/OmnichannelEndpoints.js +3 -1
- package/lib/Common/OmnichannelEndpoints.js.map +1 -1
- package/lib/Common/RequestTimeoutConfig.d.ts +1 -0
- package/lib/Common/RequestTimeoutConfig.js +1 -1
- package/lib/Interfaces/IRenewChatTokenOptionalParams.d.ts +11 -0
- package/lib/Interfaces/IRenewChatTokenOptionalParams.js +2 -0
- package/lib/Interfaces/IRenewChatTokenOptionalParams.js.map +1 -0
- package/lib/Interfaces/ISDK.d.ts +3 -0
- package/lib/Interfaces/ISDK.js +1 -1
- package/lib/Model/RenewChatTokenResponse.d.ts +10 -0
- package/lib/Model/RenewChatTokenResponse.js +22 -0
- package/lib/Model/RenewChatTokenResponse.js.map +1 -0
- package/lib/SDK.d.ts +10 -0
- package/lib/SDK.js +773 -636
- package/lib/SDK.js.map +1 -1
- package/lib/Utils/LoggingSanitizer.d.ts +1 -0
- package/lib/Utils/LoggingSanitizer.js +24 -5
- package/lib/Utils/LoggingSanitizer.js.map +1 -1
- package/lib/Utils/waitTimeBetweenRetriesConfigs.js +3 -2
- package/lib/Utils/waitTimeBetweenRetriesConfigs.js.map +1 -1
- package/package.json +1 -1
package/lib/SDK.js
CHANGED
|
@@ -35,7 +35,7 @@ var _SessionInitRetryHandler = _interopRequireDefault(require("./Utils/SessionIn
|
|
|
35
35
|
var _uuid = require("./Utils/uuid");
|
|
36
36
|
var _waitTimeBetweenRetriesConfigs = require("./Utils/waitTimeBetweenRetriesConfigs");
|
|
37
37
|
var _SDK;
|
|
38
|
-
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var
|
|
38
|
+
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t22 in e) "default" !== _t22 && {}.hasOwnProperty.call(e, _t22) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t22)) && (i.get || i.set) ? o(f, _t22, i) : f[_t22] = e[_t22]); return f; })(e, t); }
|
|
39
39
|
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
40
40
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
41
41
|
function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t["return"] || t["return"](); } finally { if (u) throw o; } } }; }
|
|
@@ -518,33 +518,29 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
// Resolves only if it contains chat token response which only happens on status 200
|
|
521
|
-
if (!data) {
|
|
522
|
-
_context5.next = 4;
|
|
523
|
-
break;
|
|
524
|
-
}
|
|
525
|
-
if (!(Object.keys(data).length === 0)) {
|
|
521
|
+
if (!(data && Object.keys(data).length > 0)) {
|
|
526
522
|
_context5.next = 3;
|
|
527
523
|
break;
|
|
528
524
|
}
|
|
529
|
-
reject(new Error("Empty data received from getChatToken"));
|
|
530
|
-
return _context5.abrupt("return");
|
|
531
|
-
case 3:
|
|
532
525
|
data.requestId = requestId;
|
|
533
526
|
_this3.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATTOKENSUCCEEDED, "Get Chat Token succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
534
527
|
resolve(data);
|
|
535
528
|
return _context5.abrupt("return");
|
|
536
|
-
case
|
|
537
|
-
if (!(reconnectId && response.status === _Constants["default"].noContentStatusCode)) {
|
|
538
|
-
_context5.next =
|
|
529
|
+
case 3:
|
|
530
|
+
if (!(!data && reconnectId && response.status === _Constants["default"].noContentStatusCode)) {
|
|
531
|
+
_context5.next = 4;
|
|
539
532
|
break;
|
|
540
533
|
}
|
|
541
534
|
reject(response);
|
|
542
535
|
return _context5.abrupt("return");
|
|
536
|
+
case 4:
|
|
537
|
+
throw Object.assign(new Error("Empty data received from getChatToken"), {
|
|
538
|
+
response: {
|
|
539
|
+
status: response.status
|
|
540
|
+
}
|
|
541
|
+
});
|
|
543
542
|
case 5:
|
|
544
|
-
_context5.
|
|
545
|
-
break;
|
|
546
|
-
case 6:
|
|
547
|
-
_context5.prev = 6;
|
|
543
|
+
_context5.prev = 5;
|
|
548
544
|
_t4 = _context5["catch"](1);
|
|
549
545
|
_httpRequestResponseTime4 = backendTimer.milliSecondsElapsed;
|
|
550
546
|
_elapsedTimeInMilliseconds4 = timer.milliSecondsElapsed;
|
|
@@ -553,11 +549,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
553
549
|
reject(new Error(_this3.HTTPTimeOutErrorMessage));
|
|
554
550
|
}
|
|
555
551
|
reject(_t4);
|
|
556
|
-
case
|
|
552
|
+
case 6:
|
|
557
553
|
case "end":
|
|
558
554
|
return _context5.stop();
|
|
559
555
|
}
|
|
560
|
-
}, _callee5, null, [[1,
|
|
556
|
+
}, _callee5, null, [[1, 5]]);
|
|
561
557
|
}));
|
|
562
558
|
return function (_x6, _x7) {
|
|
563
559
|
return _ref2.apply(this, arguments);
|
|
@@ -575,41 +571,76 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
575
571
|
return getChatToken;
|
|
576
572
|
}()
|
|
577
573
|
/**
|
|
578
|
-
*
|
|
579
|
-
*
|
|
574
|
+
* Renews the ACS chat token of the visitor in an open conversation, so the chat can continue after the token
|
|
575
|
+
* from getChatToken expires. Rejects when the API is not available or the conversation can't be renewed (e.g. 404);
|
|
576
|
+
* callers should keep their current token in that case.
|
|
577
|
+
* @param requestId RequestId of the conversation, or the reconnect id for a reconnected chat.
|
|
578
|
+
* @param renewChatTokenOptionalParams Optional parameters for renew chat token.
|
|
580
579
|
*/
|
|
581
580
|
)
|
|
582
581
|
}, {
|
|
583
|
-
key: "
|
|
582
|
+
key: "renewChatToken",
|
|
584
583
|
value: (function () {
|
|
585
|
-
var
|
|
584
|
+
var _renewChatToken = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee8(requestId) {
|
|
586
585
|
var _this$configuration$d5,
|
|
586
|
+
_this$configuration$w,
|
|
587
|
+
_this$configuration$w2,
|
|
587
588
|
_this4 = this;
|
|
588
|
-
var
|
|
589
|
+
var renewChatTokenOptionalParams,
|
|
590
|
+
timer,
|
|
591
|
+
authenticatedUserToken,
|
|
592
|
+
maxRetries,
|
|
593
|
+
requestHeaders,
|
|
594
|
+
endpoint,
|
|
595
|
+
requestPath,
|
|
596
|
+
params,
|
|
597
|
+
url,
|
|
598
|
+
method,
|
|
599
|
+
options,
|
|
600
|
+
axiosInstance,
|
|
601
|
+
_args8 = arguments;
|
|
589
602
|
return _regenerator["default"].wrap(function (_context8) {
|
|
590
603
|
while (1) switch (_context8.prev = _context8.next) {
|
|
591
604
|
case 0:
|
|
605
|
+
renewChatTokenOptionalParams = _args8.length > 1 && _args8[1] !== undefined ? _args8[1] : {};
|
|
592
606
|
timer = _Timer.Timer.TIMER();
|
|
593
|
-
authenticatedUserToken =
|
|
594
|
-
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
595
|
-
requestId
|
|
596
|
-
|
|
607
|
+
authenticatedUserToken = renewChatTokenOptionalParams.authenticatedUserToken, maxRetries = renewChatTokenOptionalParams.maxRetries;
|
|
608
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.RENEWCHATTOKENSTARTED, "Renew Chat Token Started", requestId);
|
|
609
|
+
if (requestId) {
|
|
610
|
+
_context8.next = 1;
|
|
611
|
+
break;
|
|
612
|
+
}
|
|
613
|
+
throw new Error("Invalid requestId");
|
|
614
|
+
case 1:
|
|
597
615
|
requestHeaders = _objectSpread({}, _Constants["default"].defaultHeaders);
|
|
598
|
-
|
|
599
|
-
|
|
616
|
+
if (authenticatedUserToken) {
|
|
617
|
+
requestHeaders[_OmnichannelHTTPHeaders["default"].authenticatedUserToken] = authenticatedUserToken;
|
|
618
|
+
requestHeaders[_OmnichannelHTTPHeaders["default"].authCodeNonce] = this.configuration.authCodeNonce;
|
|
619
|
+
}
|
|
600
620
|
this.addDefaultHeaders(requestId, requestHeaders);
|
|
621
|
+
endpoint = authenticatedUserToken ? _OmnichannelEndpoints["default"].LiveChatv2AuthRenewChatTokenPath : _OmnichannelEndpoints["default"].LiveChatv2RenewChatTokenPath;
|
|
622
|
+
requestPath = "/".concat(endpoint, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId);
|
|
623
|
+
params = {
|
|
624
|
+
channelId: this.omnichannelConfiguration.channelId
|
|
625
|
+
};
|
|
601
626
|
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
602
627
|
method = "GET";
|
|
603
628
|
options = {
|
|
604
629
|
headers: requestHeaders,
|
|
605
630
|
method: method,
|
|
606
631
|
url: url,
|
|
607
|
-
|
|
632
|
+
params: params,
|
|
633
|
+
timeout: (_this$configuration$d5 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d5 !== void 0 ? _this$configuration$d5 : this.configuration.requestTimeoutConfig.renewChatToken
|
|
608
634
|
};
|
|
609
635
|
axiosInstance = _axios["default"].create();
|
|
636
|
+
(0, _axiosRetryHandler["default"])(axiosInstance, {
|
|
637
|
+
headerOverwrites: [_OmnichannelHTTPHeaders["default"].authCodeNonce],
|
|
638
|
+
retries: typeof maxRetries === "number" && Number.isInteger(maxRetries) && maxRetries >= 0 ? maxRetries : this.configuration.maxRequestRetriesOnFailure,
|
|
639
|
+
waitTimeInMsBetweenRetries: (_this$configuration$w = (_this$configuration$w2 = this.configuration.waitTimeBetweenRetriesConfig) === null || _this$configuration$w2 === void 0 ? void 0 : _this$configuration$w2.renewChatToken) !== null && _this$configuration$w !== void 0 ? _this$configuration$w : _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs.renewChatToken
|
|
640
|
+
});
|
|
610
641
|
return _context8.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
611
642
|
var _ref3 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee7(resolve, reject) {
|
|
612
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers, _httpRequestResponseTime5, _elapsedTimeInMilliseconds5, _t5;
|
|
643
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers, error, _httpRequestResponseTime5, _elapsedTimeInMilliseconds5, _t5;
|
|
613
644
|
return _regenerator["default"].wrap(function (_context7) {
|
|
614
645
|
while (1) switch (_context7.prev = _context7.next) {
|
|
615
646
|
case 0:
|
|
@@ -623,31 +654,35 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
623
654
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
624
655
|
data = response.data, headers = response.headers;
|
|
625
656
|
_this4.setAuthCodeNonce(headers);
|
|
626
|
-
|
|
627
|
-
// Resolves only if it contains reconnectable chats response which only happens on status 200
|
|
628
|
-
if (!data) {
|
|
657
|
+
if (!(!data || (0, _typeof2["default"])(data) !== "object" || !data.Token)) {
|
|
629
658
|
_context7.next = 3;
|
|
630
659
|
break;
|
|
631
660
|
}
|
|
632
|
-
|
|
633
|
-
|
|
661
|
+
error = new Error("Invalid data received from renewChatToken"); // Not passing response: logWithLogger reads response.data.Region, which throws when data is null
|
|
662
|
+
_this4.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.RENEWCHATTOKENFAILED, "Renew Chat Token failed", requestId, undefined, elapsedTimeInMilliseconds, requestPath, method, error, undefined, requestHeaders, httpRequestResponseTime);
|
|
663
|
+
reject(error);
|
|
634
664
|
return _context7.abrupt("return");
|
|
635
665
|
case 3:
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
666
|
+
data.requestId = requestId;
|
|
667
|
+
_this4.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.RENEWCHATTOKENSUCCEEDED, "Renew Chat Token succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
668
|
+
resolve(data);
|
|
669
|
+
_context7.next = 6;
|
|
670
|
+
break;
|
|
639
671
|
case 4:
|
|
640
672
|
_context7.prev = 4;
|
|
641
673
|
_t5 = _context7["catch"](1);
|
|
642
674
|
_httpRequestResponseTime5 = backendTimer.milliSecondsElapsed;
|
|
643
675
|
_elapsedTimeInMilliseconds5 = timer.milliSecondsElapsed;
|
|
644
|
-
_this4.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.
|
|
645
|
-
if ((0, _isExpectedAxiosError["default"])(_t5, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
646
|
-
|
|
676
|
+
_this4.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.RENEWCHATTOKENFAILED, "Renew Chat Token failed", requestId, undefined, _elapsedTimeInMilliseconds5, requestPath, method, _t5, undefined, requestHeaders, _httpRequestResponseTime5);
|
|
677
|
+
if (!(0, _isExpectedAxiosError["default"])(_t5, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
678
|
+
_context7.next = 5;
|
|
679
|
+
break;
|
|
647
680
|
}
|
|
648
|
-
reject(
|
|
681
|
+
reject(new Error(_this4.HTTPTimeOutErrorMessage));
|
|
649
682
|
return _context7.abrupt("return");
|
|
650
683
|
case 5:
|
|
684
|
+
reject(_t5);
|
|
685
|
+
case 6:
|
|
651
686
|
case "end":
|
|
652
687
|
return _context7.stop();
|
|
653
688
|
}
|
|
@@ -657,58 +692,53 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
657
692
|
return _ref3.apply(this, arguments);
|
|
658
693
|
};
|
|
659
694
|
}()));
|
|
660
|
-
case
|
|
695
|
+
case 2:
|
|
661
696
|
case "end":
|
|
662
697
|
return _context8.stop();
|
|
663
698
|
}
|
|
664
699
|
}, _callee8, this);
|
|
665
700
|
}));
|
|
666
|
-
function
|
|
667
|
-
return
|
|
701
|
+
function renewChatToken(_x8) {
|
|
702
|
+
return _renewChatToken.apply(this, arguments);
|
|
668
703
|
}
|
|
669
|
-
return
|
|
704
|
+
return renewChatToken;
|
|
670
705
|
}()
|
|
671
706
|
/**
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
707
|
+
* Fetches the reconnectable chats from omnichannel from the given user information in JWT token(claim name: sub).
|
|
708
|
+
* @param reconnectableChatsParams Mandate parameters for get reconnectable chats.
|
|
709
|
+
*/
|
|
675
710
|
)
|
|
676
711
|
}, {
|
|
677
|
-
key: "
|
|
712
|
+
key: "getReconnectableChats",
|
|
678
713
|
value: (function () {
|
|
679
|
-
var
|
|
714
|
+
var _getReconnectableChats = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee0(reconnectableChatsParams) {
|
|
680
715
|
var _this$configuration$d6,
|
|
681
716
|
_this5 = this;
|
|
682
|
-
var
|
|
683
|
-
timer,
|
|
684
|
-
requestPath,
|
|
685
|
-
requestHeaders,
|
|
686
|
-
url,
|
|
687
|
-
method,
|
|
688
|
-
options,
|
|
689
|
-
axiosInstance,
|
|
690
|
-
_args0 = arguments;
|
|
717
|
+
var timer, authenticatedUserToken, requestId, requestPath, requestHeaders, url, method, options, axiosInstance;
|
|
691
718
|
return _regenerator["default"].wrap(function (_context0) {
|
|
692
719
|
while (1) switch (_context0.prev = _context0.next) {
|
|
693
720
|
case 0:
|
|
694
|
-
optionalParams = _args0.length > 1 && _args0[1] !== undefined ? _args0[1] : {};
|
|
695
721
|
timer = _Timer.Timer.TIMER();
|
|
696
|
-
|
|
697
|
-
|
|
722
|
+
authenticatedUserToken = reconnectableChatsParams.authenticatedUserToken;
|
|
723
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSSTARTED, "Get Reconnectable chat Started");
|
|
724
|
+
requestId = reconnectableChatsParams === null || reconnectableChatsParams === void 0 ? void 0 : reconnectableChatsParams.requestId;
|
|
725
|
+
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatGetReconnectableChatsPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
698
726
|
requestHeaders = _objectSpread({}, _Constants["default"].defaultHeaders);
|
|
699
|
-
|
|
727
|
+
requestHeaders[_OmnichannelHTTPHeaders["default"].authenticatedUserToken] = authenticatedUserToken;
|
|
728
|
+
requestHeaders[_OmnichannelHTTPHeaders["default"].authCodeNonce] = this.configuration.authCodeNonce;
|
|
729
|
+
this.addDefaultHeaders(requestId, requestHeaders);
|
|
700
730
|
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
701
731
|
method = "GET";
|
|
702
732
|
options = {
|
|
703
733
|
headers: requestHeaders,
|
|
704
734
|
method: method,
|
|
705
735
|
url: url,
|
|
706
|
-
timeout: (_this$configuration$d6 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d6 !== void 0 ? _this$configuration$d6 : this.configuration.requestTimeoutConfig.
|
|
736
|
+
timeout: (_this$configuration$d6 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d6 !== void 0 ? _this$configuration$d6 : this.configuration.requestTimeoutConfig.getReconnectableChats
|
|
707
737
|
};
|
|
708
738
|
axiosInstance = _axios["default"].create();
|
|
709
739
|
return _context0.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
710
740
|
var _ref4 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee9(resolve, reject) {
|
|
711
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, _httpRequestResponseTime6, _elapsedTimeInMilliseconds6, _t6;
|
|
741
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers, _httpRequestResponseTime6, _elapsedTimeInMilliseconds6, _t6;
|
|
712
742
|
return _regenerator["default"].wrap(function (_context9) {
|
|
713
743
|
while (1) switch (_context9.prev = _context9.next) {
|
|
714
744
|
case 0:
|
|
@@ -720,17 +750,19 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
720
750
|
response = _context9.sent;
|
|
721
751
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
722
752
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
723
|
-
data = response.data;
|
|
753
|
+
data = response.data, headers = response.headers;
|
|
754
|
+
_this5.setAuthCodeNonce(headers);
|
|
755
|
+
|
|
756
|
+
// Resolves only if it contains reconnectable chats response which only happens on status 200
|
|
724
757
|
if (!data) {
|
|
725
758
|
_context9.next = 3;
|
|
726
759
|
break;
|
|
727
760
|
}
|
|
728
|
-
_this5.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
761
|
+
_this5.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSSUCCEEDED, "Get Reconnectable Chats Succeeded and old session returned", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
729
762
|
resolve(data);
|
|
730
763
|
return _context9.abrupt("return");
|
|
731
764
|
case 3:
|
|
732
|
-
// No data found so returning null
|
|
733
|
-
_this5.logWithLogger(_LogLevel.LogLevel.WARN, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSUCCEEDED, "Get Reconnect availability didn't send any valid data", optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
765
|
+
// No data found in the old sessions so returning null
|
|
734
766
|
resolve();
|
|
735
767
|
return _context9.abrupt("return");
|
|
736
768
|
case 4:
|
|
@@ -738,7 +770,7 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
738
770
|
_t6 = _context9["catch"](1);
|
|
739
771
|
_httpRequestResponseTime6 = backendTimer.milliSecondsElapsed;
|
|
740
772
|
_elapsedTimeInMilliseconds6 = timer.milliSecondsElapsed;
|
|
741
|
-
_this5.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.
|
|
773
|
+
_this5.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSFAILED, "Get Reconnectable Chats failed", requestId, undefined, _elapsedTimeInMilliseconds6, requestPath, method, _t6, undefined, requestHeaders, _httpRequestResponseTime6);
|
|
742
774
|
if ((0, _isExpectedAxiosError["default"])(_t6, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
743
775
|
reject(new Error(_this5.HTTPTimeOutErrorMessage));
|
|
744
776
|
}
|
|
@@ -760,7 +792,104 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
760
792
|
}
|
|
761
793
|
}, _callee0, this);
|
|
762
794
|
}));
|
|
763
|
-
function
|
|
795
|
+
function getReconnectableChats(_x1) {
|
|
796
|
+
return _getReconnectableChats.apply(this, arguments);
|
|
797
|
+
}
|
|
798
|
+
return getReconnectableChats;
|
|
799
|
+
}()
|
|
800
|
+
/**
|
|
801
|
+
* Fetches the reconnectable chats from omnichannel from the given user information in JWT token(claim name: sub).
|
|
802
|
+
* @param reconnectableChatsParams Mandate parameters for get reconnectable chats.
|
|
803
|
+
*/
|
|
804
|
+
)
|
|
805
|
+
}, {
|
|
806
|
+
key: "getReconnectAvailability",
|
|
807
|
+
value: (function () {
|
|
808
|
+
var _getReconnectAvailability = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee10(reconnectId) {
|
|
809
|
+
var _this$configuration$d7,
|
|
810
|
+
_this6 = this;
|
|
811
|
+
var optionalParams,
|
|
812
|
+
timer,
|
|
813
|
+
requestPath,
|
|
814
|
+
requestHeaders,
|
|
815
|
+
url,
|
|
816
|
+
method,
|
|
817
|
+
options,
|
|
818
|
+
axiosInstance,
|
|
819
|
+
_args10 = arguments;
|
|
820
|
+
return _regenerator["default"].wrap(function (_context10) {
|
|
821
|
+
while (1) switch (_context10.prev = _context10.next) {
|
|
822
|
+
case 0:
|
|
823
|
+
optionalParams = _args10.length > 1 && _args10[1] !== undefined ? _args10[1] : {};
|
|
824
|
+
timer = _Timer.Timer.TIMER();
|
|
825
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSTARTED, "Get Reconnectable availability Started");
|
|
826
|
+
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatReconnectAvailabilityPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(reconnectId);
|
|
827
|
+
requestHeaders = _objectSpread({}, _Constants["default"].defaultHeaders);
|
|
828
|
+
this.addDefaultHeaders(optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.requestId, requestHeaders);
|
|
829
|
+
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
830
|
+
method = "GET";
|
|
831
|
+
options = {
|
|
832
|
+
headers: requestHeaders,
|
|
833
|
+
method: method,
|
|
834
|
+
url: url,
|
|
835
|
+
timeout: (_this$configuration$d7 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d7 !== void 0 ? _this$configuration$d7 : this.configuration.requestTimeoutConfig.getReconnectAvailability
|
|
836
|
+
};
|
|
837
|
+
axiosInstance = _axios["default"].create();
|
|
838
|
+
return _context10.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
839
|
+
var _ref5 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee1(resolve, reject) {
|
|
840
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, _httpRequestResponseTime7, _elapsedTimeInMilliseconds7, _t7;
|
|
841
|
+
return _regenerator["default"].wrap(function (_context1) {
|
|
842
|
+
while (1) switch (_context1.prev = _context1.next) {
|
|
843
|
+
case 0:
|
|
844
|
+
backendTimer = _Timer.Timer.TIMER();
|
|
845
|
+
_context1.prev = 1;
|
|
846
|
+
_context1.next = 2;
|
|
847
|
+
return axiosInstance(options);
|
|
848
|
+
case 2:
|
|
849
|
+
response = _context1.sent;
|
|
850
|
+
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
851
|
+
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
852
|
+
data = response.data;
|
|
853
|
+
if (!data) {
|
|
854
|
+
_context1.next = 3;
|
|
855
|
+
break;
|
|
856
|
+
}
|
|
857
|
+
_this6.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSUCCEEDED, "Get Reconnect availability succeeded", optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
858
|
+
resolve(data);
|
|
859
|
+
return _context1.abrupt("return");
|
|
860
|
+
case 3:
|
|
861
|
+
// No data found so returning null
|
|
862
|
+
_this6.logWithLogger(_LogLevel.LogLevel.WARN, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSUCCEEDED, "Get Reconnect availability didn't send any valid data", optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
863
|
+
resolve();
|
|
864
|
+
return _context1.abrupt("return");
|
|
865
|
+
case 4:
|
|
866
|
+
_context1.prev = 4;
|
|
867
|
+
_t7 = _context1["catch"](1);
|
|
868
|
+
_httpRequestResponseTime7 = backendTimer.milliSecondsElapsed;
|
|
869
|
+
_elapsedTimeInMilliseconds7 = timer.milliSecondsElapsed;
|
|
870
|
+
_this6.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYFAILED, "Get Reconnect Availability failed", optionalParams === null || optionalParams === void 0 ? void 0 : optionalParams.requestId, undefined, _elapsedTimeInMilliseconds7, requestPath, method, _t7, undefined, requestHeaders, _httpRequestResponseTime7);
|
|
871
|
+
if ((0, _isExpectedAxiosError["default"])(_t7, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
872
|
+
reject(new Error(_this6.HTTPTimeOutErrorMessage));
|
|
873
|
+
}
|
|
874
|
+
reject(_t7);
|
|
875
|
+
return _context1.abrupt("return");
|
|
876
|
+
case 5:
|
|
877
|
+
case "end":
|
|
878
|
+
return _context1.stop();
|
|
879
|
+
}
|
|
880
|
+
}, _callee1, null, [[1, 4]]);
|
|
881
|
+
}));
|
|
882
|
+
return function (_x13, _x14) {
|
|
883
|
+
return _ref5.apply(this, arguments);
|
|
884
|
+
};
|
|
885
|
+
}()));
|
|
886
|
+
case 1:
|
|
887
|
+
case "end":
|
|
888
|
+
return _context10.stop();
|
|
889
|
+
}
|
|
890
|
+
}, _callee10, this);
|
|
891
|
+
}));
|
|
892
|
+
function getReconnectAvailability(_x12) {
|
|
764
893
|
return _getReconnectAvailability.apply(this, arguments);
|
|
765
894
|
}
|
|
766
895
|
return getReconnectAvailability;
|
|
@@ -774,9 +903,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
774
903
|
}, {
|
|
775
904
|
key: "getAgentAvailability",
|
|
776
905
|
value: (function () {
|
|
777
|
-
var _getAgentAvailability = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
778
|
-
var _this$configuration$
|
|
779
|
-
|
|
906
|
+
var _getAgentAvailability = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee12(requestId) {
|
|
907
|
+
var _this$configuration$d8,
|
|
908
|
+
_this7 = this;
|
|
780
909
|
var queueAvailabilityOptionalParams,
|
|
781
910
|
timer,
|
|
782
911
|
requestPath,
|
|
@@ -791,11 +920,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
791
920
|
url,
|
|
792
921
|
method,
|
|
793
922
|
options,
|
|
794
|
-
|
|
795
|
-
return _regenerator["default"].wrap(function (
|
|
796
|
-
while (1) switch (
|
|
923
|
+
_args12 = arguments;
|
|
924
|
+
return _regenerator["default"].wrap(function (_context12) {
|
|
925
|
+
while (1) switch (_context12.prev = _context12.next) {
|
|
797
926
|
case 0:
|
|
798
|
-
queueAvailabilityOptionalParams =
|
|
927
|
+
queueAvailabilityOptionalParams = _args12.length > 1 && _args12[1] !== undefined ? _args12[1] : {};
|
|
799
928
|
timer = _Timer.Timer.TIMER();
|
|
800
929
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETAGENTAVAILABILITYSTARTED, "Get agent availability Started", requestId);
|
|
801
930
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].GetAgentAvailabilityPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId, "?channelId=lcw");
|
|
@@ -832,10 +961,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
832
961
|
//data.cacheKey = hash.createHash('sha256').update(JSON.stringify(cachObj)).digest('hex').toString();
|
|
833
962
|
data.cacheKey = (0, _sha["default"])(JSON.stringify(cachObj)).toString(_encHex["default"]);
|
|
834
963
|
if (!(getContext && !window.document)) {
|
|
835
|
-
|
|
964
|
+
_context12.next = 1;
|
|
836
965
|
break;
|
|
837
966
|
}
|
|
838
|
-
return
|
|
967
|
+
return _context12.abrupt("return", Promise.reject(new Error("getContext is only supported on web browsers")));
|
|
839
968
|
case 1:
|
|
840
969
|
if (getContext) {
|
|
841
970
|
data.browser = _BrowserInfo.BrowserInfo.getBrowserName();
|
|
@@ -849,10 +978,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
849
978
|
|
|
850
979
|
// Validate locale
|
|
851
980
|
if (!(data.locale && !_Locales["default"].supportedLocales.includes(data.locale))) {
|
|
852
|
-
|
|
981
|
+
_context12.next = 2;
|
|
853
982
|
break;
|
|
854
983
|
}
|
|
855
|
-
return
|
|
984
|
+
return _context12.abrupt("return", Promise.reject(new Error("Unsupported locale: '".concat(data.locale, "'"))));
|
|
856
985
|
case 2:
|
|
857
986
|
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
858
987
|
method = "POST";
|
|
@@ -861,61 +990,68 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
861
990
|
headers: requestHeaders,
|
|
862
991
|
method: method,
|
|
863
992
|
url: url,
|
|
864
|
-
timeout: (_this$configuration$
|
|
993
|
+
timeout: (_this$configuration$d8 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d8 !== void 0 ? _this$configuration$d8 : this.configuration.requestTimeoutConfig.getAgentAvailability
|
|
865
994
|
};
|
|
866
|
-
return
|
|
867
|
-
var
|
|
868
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, _data, headers,
|
|
869
|
-
return _regenerator["default"].wrap(function (
|
|
870
|
-
while (1) switch (
|
|
995
|
+
return _context12.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
996
|
+
var _ref6 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee11(resolve, reject) {
|
|
997
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, _data, headers, _httpRequestResponseTime8, _elapsedTimeInMilliseconds8, _t8;
|
|
998
|
+
return _regenerator["default"].wrap(function (_context11) {
|
|
999
|
+
while (1) switch (_context11.prev = _context11.next) {
|
|
871
1000
|
case 0:
|
|
872
1001
|
backendTimer = _Timer.Timer.TIMER();
|
|
873
|
-
|
|
874
|
-
|
|
1002
|
+
_context11.prev = 1;
|
|
1003
|
+
_context11.next = 2;
|
|
875
1004
|
return axiosInstance(options);
|
|
876
1005
|
case 2:
|
|
877
|
-
response =
|
|
1006
|
+
response = _context11.sent;
|
|
878
1007
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
879
1008
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
880
1009
|
_data = response.data, headers = response.headers;
|
|
881
|
-
|
|
882
|
-
if (_data) {
|
|
883
|
-
|
|
884
|
-
|
|
1010
|
+
_this7.setAuthCodeNonce(headers);
|
|
1011
|
+
if (!_data) {
|
|
1012
|
+
_context11.next = 3;
|
|
1013
|
+
break;
|
|
885
1014
|
}
|
|
886
|
-
|
|
887
|
-
|
|
1015
|
+
_this7.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETAGENTAVAILABILITYSUCCEEDED, "Get agent availability succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1016
|
+
resolve(_data);
|
|
1017
|
+
return _context11.abrupt("return");
|
|
888
1018
|
case 3:
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
|
|
892
|
-
|
|
893
|
-
|
|
894
|
-
|
|
895
|
-
|
|
1019
|
+
throw Object.assign(new Error("Empty data received from getAgentAvailability"), {
|
|
1020
|
+
response: {
|
|
1021
|
+
status: response.status
|
|
1022
|
+
}
|
|
1023
|
+
});
|
|
1024
|
+
case 4:
|
|
1025
|
+
_context11.prev = 4;
|
|
1026
|
+
_t8 = _context11["catch"](1);
|
|
1027
|
+
_httpRequestResponseTime8 = backendTimer.milliSecondsElapsed;
|
|
1028
|
+
_elapsedTimeInMilliseconds8 = timer.milliSecondsElapsed;
|
|
1029
|
+
_this7.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETAGENTAVAILABILITYFAILED, "Get agent availability failed", requestId, undefined, _elapsedTimeInMilliseconds8, requestPath, method, _t8, undefined, requestHeaders, _httpRequestResponseTime8);
|
|
1030
|
+
if (!(0, _isExpectedAxiosError["default"])(_t8, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1031
|
+
_context11.next = 5;
|
|
896
1032
|
break;
|
|
897
1033
|
}
|
|
898
|
-
reject(new Error(
|
|
899
|
-
return
|
|
900
|
-
case 4:
|
|
901
|
-
reject(_t7);
|
|
1034
|
+
reject(new Error(_this7.HTTPTimeOutErrorMessage));
|
|
1035
|
+
return _context11.abrupt("return");
|
|
902
1036
|
case 5:
|
|
1037
|
+
reject(_t8);
|
|
1038
|
+
case 6:
|
|
903
1039
|
case "end":
|
|
904
|
-
return
|
|
1040
|
+
return _context11.stop();
|
|
905
1041
|
}
|
|
906
|
-
},
|
|
1042
|
+
}, _callee11, null, [[1, 4]]);
|
|
907
1043
|
}));
|
|
908
|
-
return function (
|
|
909
|
-
return
|
|
1044
|
+
return function (_x16, _x17) {
|
|
1045
|
+
return _ref6.apply(this, arguments);
|
|
910
1046
|
};
|
|
911
1047
|
}()));
|
|
912
1048
|
case 3:
|
|
913
1049
|
case "end":
|
|
914
|
-
return
|
|
1050
|
+
return _context12.stop();
|
|
915
1051
|
}
|
|
916
|
-
},
|
|
1052
|
+
}, _callee12, this);
|
|
917
1053
|
}));
|
|
918
|
-
function getAgentAvailability(
|
|
1054
|
+
function getAgentAvailability(_x15) {
|
|
919
1055
|
return _getAgentAvailability.apply(this, arguments);
|
|
920
1056
|
}
|
|
921
1057
|
return getAgentAvailability;
|
|
@@ -929,9 +1065,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
929
1065
|
}, {
|
|
930
1066
|
key: "sessionInit",
|
|
931
1067
|
value: (function () {
|
|
932
|
-
var _sessionInit = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
933
|
-
var _this$configuration$
|
|
934
|
-
|
|
1068
|
+
var _sessionInit = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee14(requestId) {
|
|
1069
|
+
var _this$configuration$d9,
|
|
1070
|
+
_this8 = this;
|
|
935
1071
|
var sessionInitOptionalParams,
|
|
936
1072
|
timer,
|
|
937
1073
|
axiosInstance,
|
|
@@ -949,11 +1085,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
949
1085
|
url,
|
|
950
1086
|
method,
|
|
951
1087
|
options,
|
|
952
|
-
|
|
953
|
-
return _regenerator["default"].wrap(function (
|
|
954
|
-
while (1) switch (
|
|
1088
|
+
_args14 = arguments;
|
|
1089
|
+
return _regenerator["default"].wrap(function (_context14) {
|
|
1090
|
+
while (1) switch (_context14.prev = _context14.next) {
|
|
955
1091
|
case 0:
|
|
956
|
-
sessionInitOptionalParams =
|
|
1092
|
+
sessionInitOptionalParams = _args14.length > 1 && _args14[1] !== undefined ? _args14[1] : {};
|
|
957
1093
|
timer = _Timer.Timer.TIMER();
|
|
958
1094
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SESSIONINITSTARTED, "Session Init Started", requestId);
|
|
959
1095
|
axiosInstance = _axios["default"].create();
|
|
@@ -991,10 +1127,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
991
1127
|
params.sig = reconnectId;
|
|
992
1128
|
}
|
|
993
1129
|
if (!(getContext && !window.document)) {
|
|
994
|
-
|
|
1130
|
+
_context14.next = 1;
|
|
995
1131
|
break;
|
|
996
1132
|
}
|
|
997
|
-
return
|
|
1133
|
+
return _context14.abrupt("return", Promise.reject(new Error("getContext is only supported on web browsers")));
|
|
998
1134
|
case 1:
|
|
999
1135
|
if (getContext) {
|
|
1000
1136
|
data.browser = _BrowserInfo.BrowserInfo.getBrowserName();
|
|
@@ -1010,10 +1146,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1010
1146
|
|
|
1011
1147
|
// Validate locale
|
|
1012
1148
|
if (!(data.locale && !_Locales["default"].supportedLocales.includes(data.locale))) {
|
|
1013
|
-
|
|
1149
|
+
_context14.next = 2;
|
|
1014
1150
|
break;
|
|
1015
1151
|
}
|
|
1016
|
-
return
|
|
1152
|
+
return _context14.abrupt("return", Promise.reject(new Error("Unsupported locale: '".concat(data.locale, "'"))));
|
|
1017
1153
|
case 2:
|
|
1018
1154
|
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
1019
1155
|
method = "POST";
|
|
@@ -1023,59 +1159,59 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1023
1159
|
method: method,
|
|
1024
1160
|
url: url,
|
|
1025
1161
|
params: params,
|
|
1026
|
-
timeout: (_this$configuration$
|
|
1162
|
+
timeout: (_this$configuration$d9 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d9 !== void 0 ? _this$configuration$d9 : this.configuration.requestTimeoutConfig.sessionInit
|
|
1027
1163
|
};
|
|
1028
|
-
return
|
|
1029
|
-
var
|
|
1030
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, headers,
|
|
1031
|
-
return _regenerator["default"].wrap(function (
|
|
1032
|
-
while (1) switch (
|
|
1164
|
+
return _context14.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1165
|
+
var _ref7 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee13(resolve, reject) {
|
|
1166
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, headers, _httpRequestResponseTime9, _elapsedTimeInMilliseconds9, _t9;
|
|
1167
|
+
return _regenerator["default"].wrap(function (_context13) {
|
|
1168
|
+
while (1) switch (_context13.prev = _context13.next) {
|
|
1033
1169
|
case 0:
|
|
1034
1170
|
backendTimer = _Timer.Timer.TIMER();
|
|
1035
|
-
|
|
1036
|
-
|
|
1171
|
+
_context13.prev = 1;
|
|
1172
|
+
_context13.next = 2;
|
|
1037
1173
|
return axiosInstance(options);
|
|
1038
1174
|
case 2:
|
|
1039
|
-
response =
|
|
1175
|
+
response = _context13.sent;
|
|
1040
1176
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1041
1177
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1042
1178
|
headers = response.headers;
|
|
1043
|
-
|
|
1044
|
-
|
|
1179
|
+
_this8.setAuthCodeNonce(headers);
|
|
1180
|
+
_this8.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SESSIONINITSUCCEEDED, "Session Init Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, data, requestHeaders, httpRequestResponseTime);
|
|
1045
1181
|
resolve();
|
|
1046
|
-
|
|
1182
|
+
_context13.next = 5;
|
|
1047
1183
|
break;
|
|
1048
1184
|
case 3:
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
1055
|
-
|
|
1185
|
+
_context13.prev = 3;
|
|
1186
|
+
_t9 = _context13["catch"](1);
|
|
1187
|
+
_httpRequestResponseTime9 = backendTimer.milliSecondsElapsed;
|
|
1188
|
+
_elapsedTimeInMilliseconds9 = timer.milliSecondsElapsed;
|
|
1189
|
+
_this8.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SESSIONINITFAILED, "Session Init failed", requestId, undefined, _elapsedTimeInMilliseconds9, requestPath, method, _t9, data, requestHeaders, _httpRequestResponseTime9);
|
|
1190
|
+
if (!(0, _isExpectedAxiosError["default"])(_t9, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1191
|
+
_context13.next = 4;
|
|
1056
1192
|
break;
|
|
1057
1193
|
}
|
|
1058
|
-
reject(new Error(
|
|
1059
|
-
return
|
|
1194
|
+
reject(new Error(_this8.HTTPTimeOutErrorMessage));
|
|
1195
|
+
return _context13.abrupt("return");
|
|
1060
1196
|
case 4:
|
|
1061
|
-
reject(
|
|
1197
|
+
reject(_t9);
|
|
1062
1198
|
case 5:
|
|
1063
1199
|
case "end":
|
|
1064
|
-
return
|
|
1200
|
+
return _context13.stop();
|
|
1065
1201
|
}
|
|
1066
|
-
},
|
|
1202
|
+
}, _callee13, null, [[1, 3]]);
|
|
1067
1203
|
}));
|
|
1068
|
-
return function (
|
|
1069
|
-
return
|
|
1204
|
+
return function (_x19, _x20) {
|
|
1205
|
+
return _ref7.apply(this, arguments);
|
|
1070
1206
|
};
|
|
1071
1207
|
}()));
|
|
1072
1208
|
case 3:
|
|
1073
1209
|
case "end":
|
|
1074
|
-
return
|
|
1210
|
+
return _context14.stop();
|
|
1075
1211
|
}
|
|
1076
|
-
},
|
|
1212
|
+
}, _callee14, this);
|
|
1077
1213
|
}));
|
|
1078
|
-
function sessionInit(
|
|
1214
|
+
function sessionInit(_x18) {
|
|
1079
1215
|
return _sessionInit.apply(this, arguments);
|
|
1080
1216
|
}
|
|
1081
1217
|
return sessionInit;
|
|
@@ -1083,8 +1219,8 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1083
1219
|
}, {
|
|
1084
1220
|
key: "createConversation",
|
|
1085
1221
|
value: function () {
|
|
1086
|
-
var _createConversation = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1087
|
-
var _this$configuration$
|
|
1222
|
+
var _createConversation = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee15(requestId) {
|
|
1223
|
+
var _this$configuration$d0;
|
|
1088
1224
|
var sessionInitOptionalParams,
|
|
1089
1225
|
timer,
|
|
1090
1226
|
axiosInstance,
|
|
@@ -1106,14 +1242,14 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1106
1242
|
elapsedTimeInMilliseconds,
|
|
1107
1243
|
_data2,
|
|
1108
1244
|
headers,
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
return _regenerator["default"].wrap(function (
|
|
1114
|
-
while (1) switch (
|
|
1245
|
+
_httpRequestResponseTime0,
|
|
1246
|
+
_elapsedTimeInMilliseconds0,
|
|
1247
|
+
_args15 = arguments,
|
|
1248
|
+
_t0;
|
|
1249
|
+
return _regenerator["default"].wrap(function (_context15) {
|
|
1250
|
+
while (1) switch (_context15.prev = _context15.next) {
|
|
1115
1251
|
case 0:
|
|
1116
|
-
sessionInitOptionalParams =
|
|
1252
|
+
sessionInitOptionalParams = _args15.length > 1 && _args15[1] !== undefined ? _args15[1] : {};
|
|
1117
1253
|
timer = _Timer.Timer.TIMER();
|
|
1118
1254
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.CREATESESSIONSTARTED, "Create conversation call Started", requestId);
|
|
1119
1255
|
axiosInstance = _axios["default"].create();
|
|
@@ -1141,10 +1277,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1141
1277
|
}
|
|
1142
1278
|
data.channelId = this.omnichannelConfiguration.channelId;
|
|
1143
1279
|
if (!(getContext && !window.document)) {
|
|
1144
|
-
|
|
1280
|
+
_context15.next = 1;
|
|
1145
1281
|
break;
|
|
1146
1282
|
}
|
|
1147
|
-
return
|
|
1283
|
+
return _context15.abrupt("return", Promise.reject(new Error("getContext is only supported on web browsers")));
|
|
1148
1284
|
case 1:
|
|
1149
1285
|
if (getContext) {
|
|
1150
1286
|
data.browser = _BrowserInfo.BrowserInfo.getBrowserName();
|
|
@@ -1160,10 +1296,10 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1160
1296
|
|
|
1161
1297
|
// Validate locale
|
|
1162
1298
|
if (!(data.locale && !_Locales["default"].supportedLocales.includes(data.locale))) {
|
|
1163
|
-
|
|
1299
|
+
_context15.next = 2;
|
|
1164
1300
|
break;
|
|
1165
1301
|
}
|
|
1166
|
-
return
|
|
1302
|
+
return _context15.abrupt("return", Promise.reject(new Error("Unsupported locale: '".concat(data.locale, "'"))));
|
|
1167
1303
|
case 2:
|
|
1168
1304
|
url = "".concat(this.omnichannelConfiguration.orgUrl).concat(requestPath);
|
|
1169
1305
|
method = "POST";
|
|
@@ -1172,14 +1308,14 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1172
1308
|
headers: requestHeaders,
|
|
1173
1309
|
method: method,
|
|
1174
1310
|
url: url,
|
|
1175
|
-
timeout: (_this$configuration$
|
|
1311
|
+
timeout: (_this$configuration$d0 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d0 !== void 0 ? _this$configuration$d0 : this.configuration.requestTimeoutConfig.sessionInit
|
|
1176
1312
|
};
|
|
1177
1313
|
backendTimer = _Timer.Timer.TIMER();
|
|
1178
|
-
|
|
1179
|
-
|
|
1314
|
+
_context15.prev = 3;
|
|
1315
|
+
_context15.next = 4;
|
|
1180
1316
|
return axiosInstance(options);
|
|
1181
1317
|
case 4:
|
|
1182
|
-
response =
|
|
1318
|
+
response = _context15.sent;
|
|
1183
1319
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1184
1320
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1185
1321
|
_data2 = response.data, headers = response.headers;
|
|
@@ -1192,34 +1328,34 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1192
1328
|
|
|
1193
1329
|
// check if data is empty, if so, then throw an error
|
|
1194
1330
|
if (!(Object.keys(_data2).length === 0)) {
|
|
1195
|
-
|
|
1331
|
+
_context15.next = 5;
|
|
1196
1332
|
break;
|
|
1197
1333
|
}
|
|
1198
1334
|
throw new Error("Empty data received from getChatToken");
|
|
1199
1335
|
case 5:
|
|
1200
1336
|
_data2.requestId = requestId;
|
|
1201
1337
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.CREATESESSIONSUCCEEDED, "Create coversation call Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1202
|
-
return
|
|
1338
|
+
return _context15.abrupt("return", _data2);
|
|
1203
1339
|
case 6:
|
|
1204
|
-
|
|
1205
|
-
|
|
1206
|
-
|
|
1207
|
-
|
|
1208
|
-
this.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.CREATESESSIONFAILED, "Create conversation call failed", requestId, undefined,
|
|
1209
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
1210
|
-
|
|
1340
|
+
_context15.prev = 6;
|
|
1341
|
+
_t0 = _context15["catch"](3);
|
|
1342
|
+
_httpRequestResponseTime0 = backendTimer.milliSecondsElapsed;
|
|
1343
|
+
_elapsedTimeInMilliseconds0 = timer.milliSecondsElapsed;
|
|
1344
|
+
this.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.CREATESESSIONFAILED, "Create conversation call failed", requestId, undefined, _elapsedTimeInMilliseconds0, requestPath, method, _t0, data, requestHeaders, _httpRequestResponseTime0);
|
|
1345
|
+
if (!(0, _isExpectedAxiosError["default"])(_t0, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1346
|
+
_context15.next = 7;
|
|
1211
1347
|
break;
|
|
1212
1348
|
}
|
|
1213
1349
|
throw new Error(this.HTTPTimeOutErrorMessage);
|
|
1214
1350
|
case 7:
|
|
1215
|
-
throw
|
|
1351
|
+
throw _t0;
|
|
1216
1352
|
case 8:
|
|
1217
1353
|
case "end":
|
|
1218
|
-
return
|
|
1354
|
+
return _context15.stop();
|
|
1219
1355
|
}
|
|
1220
|
-
},
|
|
1356
|
+
}, _callee15, this, [[3, 6]]);
|
|
1221
1357
|
}));
|
|
1222
|
-
function createConversation(
|
|
1358
|
+
function createConversation(_x21) {
|
|
1223
1359
|
return _createConversation.apply(this, arguments);
|
|
1224
1360
|
}
|
|
1225
1361
|
return createConversation;
|
|
@@ -1232,9 +1368,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1232
1368
|
}, {
|
|
1233
1369
|
key: "sessionClose",
|
|
1234
1370
|
value: (function () {
|
|
1235
|
-
var _sessionClose = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1236
|
-
var _this$configuration$
|
|
1237
|
-
|
|
1371
|
+
var _sessionClose = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee17(requestId) {
|
|
1372
|
+
var _this$configuration$d1,
|
|
1373
|
+
_this9 = this;
|
|
1238
1374
|
var sessionCloseOptionalParams,
|
|
1239
1375
|
timer,
|
|
1240
1376
|
requestPath,
|
|
@@ -1248,11 +1384,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1248
1384
|
url,
|
|
1249
1385
|
method,
|
|
1250
1386
|
options,
|
|
1251
|
-
|
|
1252
|
-
return _regenerator["default"].wrap(function (
|
|
1253
|
-
while (1) switch (
|
|
1387
|
+
_args17 = arguments;
|
|
1388
|
+
return _regenerator["default"].wrap(function (_context17) {
|
|
1389
|
+
while (1) switch (_context17.prev = _context17.next) {
|
|
1254
1390
|
case 0:
|
|
1255
|
-
sessionCloseOptionalParams =
|
|
1391
|
+
sessionCloseOptionalParams = _args17.length > 1 && _args17[1] !== undefined ? _args17[1] : {};
|
|
1256
1392
|
timer = _Timer.Timer.TIMER();
|
|
1257
1393
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SESSIONCLOSESTARTED, "Session Close Started", requestId);
|
|
1258
1394
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatSessionClosePath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
@@ -1285,56 +1421,56 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1285
1421
|
headers: requestHeaders,
|
|
1286
1422
|
method: method,
|
|
1287
1423
|
url: url,
|
|
1288
|
-
timeout: (_this$configuration$
|
|
1424
|
+
timeout: (_this$configuration$d1 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d1 !== void 0 ? _this$configuration$d1 : this.configuration.requestTimeoutConfig.sessionClose
|
|
1289
1425
|
};
|
|
1290
|
-
return
|
|
1291
|
-
var
|
|
1292
|
-
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
1293
|
-
return _regenerator["default"].wrap(function (
|
|
1294
|
-
while (1) switch (
|
|
1426
|
+
return _context17.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1427
|
+
var _ref8 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee16(resolve, reject) {
|
|
1428
|
+
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime1, _elapsedTimeInMilliseconds1, _t1;
|
|
1429
|
+
return _regenerator["default"].wrap(function (_context16) {
|
|
1430
|
+
while (1) switch (_context16.prev = _context16.next) {
|
|
1295
1431
|
case 0:
|
|
1296
1432
|
backendTimer = _Timer.Timer.TIMER();
|
|
1297
|
-
|
|
1298
|
-
|
|
1433
|
+
_context16.prev = 1;
|
|
1434
|
+
_context16.next = 2;
|
|
1299
1435
|
return axiosInstance(options);
|
|
1300
1436
|
case 2:
|
|
1301
|
-
response =
|
|
1437
|
+
response = _context16.sent;
|
|
1302
1438
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1303
1439
|
headers = response.headers;
|
|
1304
|
-
|
|
1440
|
+
_this9.setAuthCodeNonce(headers);
|
|
1305
1441
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1306
|
-
|
|
1442
|
+
_this9.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SESSIONCLOSESUCCEEDED, "Session Close succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1307
1443
|
resolve();
|
|
1308
1444
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1309
|
-
|
|
1445
|
+
_context16.next = 4;
|
|
1310
1446
|
break;
|
|
1311
1447
|
case 3:
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
if (
|
|
1318
|
-
reject(new Error(
|
|
1448
|
+
_context16.prev = 3;
|
|
1449
|
+
_t1 = _context16["catch"](1);
|
|
1450
|
+
_httpRequestResponseTime1 = backendTimer.milliSecondsElapsed;
|
|
1451
|
+
_elapsedTimeInMilliseconds1 = timer.milliSecondsElapsed;
|
|
1452
|
+
_this9.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SESSIONCLOSEFAILED, "Session close failed", requestId, undefined, _elapsedTimeInMilliseconds1, requestPath, method, _t1, undefined, requestHeaders, _httpRequestResponseTime1);
|
|
1453
|
+
if (_t1.code === _Constants["default"].axiosTimeoutErrorCode) {
|
|
1454
|
+
reject(new Error(_this9.HTTPTimeOutErrorMessage));
|
|
1319
1455
|
}
|
|
1320
|
-
reject(
|
|
1456
|
+
reject(_t1);
|
|
1321
1457
|
case 4:
|
|
1322
1458
|
case "end":
|
|
1323
|
-
return
|
|
1459
|
+
return _context16.stop();
|
|
1324
1460
|
}
|
|
1325
|
-
},
|
|
1461
|
+
}, _callee16, null, [[1, 3]]);
|
|
1326
1462
|
}));
|
|
1327
|
-
return function (
|
|
1328
|
-
return
|
|
1463
|
+
return function (_x23, _x24) {
|
|
1464
|
+
return _ref8.apply(this, arguments);
|
|
1329
1465
|
};
|
|
1330
1466
|
}()));
|
|
1331
1467
|
case 1:
|
|
1332
1468
|
case "end":
|
|
1333
|
-
return
|
|
1469
|
+
return _context17.stop();
|
|
1334
1470
|
}
|
|
1335
|
-
},
|
|
1471
|
+
}, _callee17, this);
|
|
1336
1472
|
}));
|
|
1337
|
-
function sessionClose(
|
|
1473
|
+
function sessionClose(_x22) {
|
|
1338
1474
|
return _sessionClose.apply(this, arguments);
|
|
1339
1475
|
}
|
|
1340
1476
|
return sessionClose;
|
|
@@ -1348,12 +1484,12 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1348
1484
|
}, {
|
|
1349
1485
|
key: "validateAuthChatRecord",
|
|
1350
1486
|
value: (function () {
|
|
1351
|
-
var _validateAuthChatRecord = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1352
|
-
var _this$configuration$
|
|
1353
|
-
|
|
1487
|
+
var _validateAuthChatRecord = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee19(requestId, validateAuthChatRecordOptionalParams) {
|
|
1488
|
+
var _this$configuration$d10,
|
|
1489
|
+
_this0 = this;
|
|
1354
1490
|
var timer, authenticatedUserToken, chatId, requestPath, axiosInstance, requestHeaders, url, method, options;
|
|
1355
|
-
return _regenerator["default"].wrap(function (
|
|
1356
|
-
while (1) switch (
|
|
1491
|
+
return _regenerator["default"].wrap(function (_context19) {
|
|
1492
|
+
while (1) switch (_context19.prev = _context19.next) {
|
|
1357
1493
|
case 0:
|
|
1358
1494
|
timer = _Timer.Timer.TIMER();
|
|
1359
1495
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.VALIDATEAUTHCHATRECORDSTARTED, "Validate Auth Chat Record Started", requestId);
|
|
@@ -1377,67 +1513,67 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1377
1513
|
headers: requestHeaders,
|
|
1378
1514
|
method: method,
|
|
1379
1515
|
url: url,
|
|
1380
|
-
timeout: (_this$configuration$
|
|
1516
|
+
timeout: (_this$configuration$d10 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d10 !== void 0 ? _this$configuration$d10 : this.configuration.requestTimeoutConfig.validateAuthChatRecordTimeout
|
|
1381
1517
|
};
|
|
1382
|
-
return
|
|
1383
|
-
var
|
|
1384
|
-
var backendTimer, _response$data, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
1385
|
-
return _regenerator["default"].wrap(function (
|
|
1386
|
-
while (1) switch (
|
|
1518
|
+
return _context19.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1519
|
+
var _ref9 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee18(resolve, reject) {
|
|
1520
|
+
var backendTimer, _response$data, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime10, _elapsedTimeInMilliseconds10, _t10;
|
|
1521
|
+
return _regenerator["default"].wrap(function (_context18) {
|
|
1522
|
+
while (1) switch (_context18.prev = _context18.next) {
|
|
1387
1523
|
case 0:
|
|
1388
1524
|
backendTimer = _Timer.Timer.TIMER();
|
|
1389
|
-
|
|
1390
|
-
|
|
1525
|
+
_context18.prev = 1;
|
|
1526
|
+
_context18.next = 2;
|
|
1391
1527
|
return axiosInstance(options);
|
|
1392
1528
|
case 2:
|
|
1393
|
-
response =
|
|
1529
|
+
response = _context18.sent;
|
|
1394
1530
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1395
1531
|
headers = response.headers;
|
|
1396
|
-
|
|
1532
|
+
_this0.setAuthCodeNonce(headers);
|
|
1397
1533
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1398
1534
|
if (((_response$data = response.data) === null || _response$data === void 0 ? void 0 : _response$data.authChatExist) === true) {
|
|
1399
|
-
|
|
1535
|
+
_this0.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.VALIDATEAUTHCHATRECORDSUCCEEDED, "Validate Auth Chat Record succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1400
1536
|
resolve(response.data);
|
|
1401
1537
|
} else {
|
|
1402
|
-
|
|
1538
|
+
_this0.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.VALIDATEAUTHCHATRECORDFAILED, "Validate Auth Chat Record Failed. Record is not found or request is not authorized", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1403
1539
|
reject(new Error("Validate Auth Chat Record Failed. Record is not found or request is not authorized"));
|
|
1404
1540
|
}
|
|
1405
1541
|
|
|
1406
1542
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1407
|
-
|
|
1543
|
+
_context18.next = 4;
|
|
1408
1544
|
break;
|
|
1409
1545
|
case 3:
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
1416
|
-
reject(new Error(
|
|
1546
|
+
_context18.prev = 3;
|
|
1547
|
+
_t10 = _context18["catch"](1);
|
|
1548
|
+
_httpRequestResponseTime10 = backendTimer.milliSecondsElapsed;
|
|
1549
|
+
_elapsedTimeInMilliseconds10 = timer.milliSecondsElapsed;
|
|
1550
|
+
_this0.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.VALIDATEAUTHCHATRECORDFAILED, "Validate Auth Chat Record failed", requestId, undefined, _elapsedTimeInMilliseconds10, requestPath, method, _t10, undefined, requestHeaders, _httpRequestResponseTime10);
|
|
1551
|
+
if ((0, _isExpectedAxiosError["default"])(_t10, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1552
|
+
reject(new Error(_this0.HTTPTimeOutErrorMessage));
|
|
1417
1553
|
}
|
|
1418
|
-
if (
|
|
1554
|
+
if (_t10.toString() === "Error: Request failed with status code 404") {
|
|
1419
1555
|
// backward compatibility
|
|
1420
1556
|
resolve({});
|
|
1421
1557
|
} else {
|
|
1422
|
-
reject(
|
|
1558
|
+
reject(_t10);
|
|
1423
1559
|
}
|
|
1424
1560
|
case 4:
|
|
1425
1561
|
case "end":
|
|
1426
|
-
return
|
|
1562
|
+
return _context18.stop();
|
|
1427
1563
|
}
|
|
1428
|
-
},
|
|
1564
|
+
}, _callee18, null, [[1, 3]]);
|
|
1429
1565
|
}));
|
|
1430
|
-
return function (
|
|
1431
|
-
return
|
|
1566
|
+
return function (_x27, _x28) {
|
|
1567
|
+
return _ref9.apply(this, arguments);
|
|
1432
1568
|
};
|
|
1433
1569
|
}()));
|
|
1434
1570
|
case 1:
|
|
1435
1571
|
case "end":
|
|
1436
|
-
return
|
|
1572
|
+
return _context19.stop();
|
|
1437
1573
|
}
|
|
1438
|
-
},
|
|
1574
|
+
}, _callee19, this);
|
|
1439
1575
|
}));
|
|
1440
|
-
function validateAuthChatRecord(
|
|
1576
|
+
function validateAuthChatRecord(_x25, _x26) {
|
|
1441
1577
|
return _validateAuthChatRecord.apply(this, arguments);
|
|
1442
1578
|
}
|
|
1443
1579
|
return validateAuthChatRecord;
|
|
@@ -1452,9 +1588,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1452
1588
|
}, {
|
|
1453
1589
|
key: "submitPostChatResponse",
|
|
1454
1590
|
value: (function () {
|
|
1455
|
-
var _submitPostChatResponse = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1456
|
-
var _this$configuration$
|
|
1457
|
-
|
|
1591
|
+
var _submitPostChatResponse = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee21(requestId, postChatResponse) {
|
|
1592
|
+
var _this$configuration$d11,
|
|
1593
|
+
_this1 = this;
|
|
1458
1594
|
var submitPostChatResponseOptionalParams,
|
|
1459
1595
|
timer,
|
|
1460
1596
|
requestPath,
|
|
@@ -1464,11 +1600,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1464
1600
|
url,
|
|
1465
1601
|
method,
|
|
1466
1602
|
options,
|
|
1467
|
-
|
|
1468
|
-
return _regenerator["default"].wrap(function (
|
|
1469
|
-
while (1) switch (
|
|
1603
|
+
_args21 = arguments;
|
|
1604
|
+
return _regenerator["default"].wrap(function (_context21) {
|
|
1605
|
+
while (1) switch (_context21.prev = _context21.next) {
|
|
1470
1606
|
case 0:
|
|
1471
|
-
submitPostChatResponseOptionalParams =
|
|
1607
|
+
submitPostChatResponseOptionalParams = _args21.length > 2 && _args21[2] !== undefined ? _args21[2] : {};
|
|
1472
1608
|
timer = _Timer.Timer.TIMER();
|
|
1473
1609
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SUBMITPOSTCHATSTARTED, "Submit Post Chat Started", requestId);
|
|
1474
1610
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatSubmitPostChatPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
@@ -1493,55 +1629,55 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1493
1629
|
headers: requestHeaders,
|
|
1494
1630
|
method: method,
|
|
1495
1631
|
url: url,
|
|
1496
|
-
timeout: (_this$configuration$
|
|
1632
|
+
timeout: (_this$configuration$d11 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d11 !== void 0 ? _this$configuration$d11 : this.configuration.requestTimeoutConfig.submitPostChatResponse
|
|
1497
1633
|
};
|
|
1498
|
-
return
|
|
1499
|
-
var
|
|
1500
|
-
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
1501
|
-
return _regenerator["default"].wrap(function (
|
|
1502
|
-
while (1) switch (
|
|
1634
|
+
return _context21.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1635
|
+
var _ref0 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee20(resolve, reject) {
|
|
1636
|
+
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime11, _elapsedTimeInMilliseconds11, _t11;
|
|
1637
|
+
return _regenerator["default"].wrap(function (_context20) {
|
|
1638
|
+
while (1) switch (_context20.prev = _context20.next) {
|
|
1503
1639
|
case 0:
|
|
1504
1640
|
backendTimer = _Timer.Timer.TIMER();
|
|
1505
|
-
|
|
1506
|
-
|
|
1641
|
+
_context20.prev = 1;
|
|
1642
|
+
_context20.next = 2;
|
|
1507
1643
|
return axiosInstance(options);
|
|
1508
1644
|
case 2:
|
|
1509
|
-
response =
|
|
1645
|
+
response = _context20.sent;
|
|
1510
1646
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1511
1647
|
headers = response.headers;
|
|
1512
|
-
|
|
1648
|
+
_this1.setAuthCodeNonce(headers);
|
|
1513
1649
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1514
|
-
|
|
1650
|
+
_this1.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SUBMITPOSTCHATSUCCEEDED, "Submit Post Chat succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1515
1651
|
resolve();
|
|
1516
|
-
|
|
1652
|
+
_context20.next = 4;
|
|
1517
1653
|
break;
|
|
1518
1654
|
case 3:
|
|
1519
|
-
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
1525
|
-
reject(new Error(
|
|
1655
|
+
_context20.prev = 3;
|
|
1656
|
+
_t11 = _context20["catch"](1);
|
|
1657
|
+
_httpRequestResponseTime11 = backendTimer.milliSecondsElapsed;
|
|
1658
|
+
_elapsedTimeInMilliseconds11 = timer.milliSecondsElapsed;
|
|
1659
|
+
_this1.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SUBMITPOSTCHATFAILED, "Submit Post Chat Failed", requestId, undefined, _elapsedTimeInMilliseconds11, requestPath, method, _t11, undefined, requestHeaders, _httpRequestResponseTime11);
|
|
1660
|
+
if ((0, _isExpectedAxiosError["default"])(_t11, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1661
|
+
reject(new Error(_this1.HTTPTimeOutErrorMessage));
|
|
1526
1662
|
}
|
|
1527
|
-
reject(
|
|
1663
|
+
reject(_t11);
|
|
1528
1664
|
case 4:
|
|
1529
1665
|
case "end":
|
|
1530
|
-
return
|
|
1666
|
+
return _context20.stop();
|
|
1531
1667
|
}
|
|
1532
|
-
},
|
|
1668
|
+
}, _callee20, null, [[1, 3]]);
|
|
1533
1669
|
}));
|
|
1534
|
-
return function (
|
|
1535
|
-
return
|
|
1670
|
+
return function (_x31, _x32) {
|
|
1671
|
+
return _ref0.apply(this, arguments);
|
|
1536
1672
|
};
|
|
1537
1673
|
}()));
|
|
1538
1674
|
case 1:
|
|
1539
1675
|
case "end":
|
|
1540
|
-
return
|
|
1676
|
+
return _context21.stop();
|
|
1541
1677
|
}
|
|
1542
|
-
},
|
|
1678
|
+
}, _callee21, this);
|
|
1543
1679
|
}));
|
|
1544
|
-
function submitPostChatResponse(
|
|
1680
|
+
function submitPostChatResponse(_x29, _x30) {
|
|
1545
1681
|
return _submitPostChatResponse.apply(this, arguments);
|
|
1546
1682
|
}
|
|
1547
1683
|
return submitPostChatResponse;
|
|
@@ -1556,9 +1692,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1556
1692
|
}, {
|
|
1557
1693
|
key: "getSurveyInviteLink",
|
|
1558
1694
|
value: (function () {
|
|
1559
|
-
var _getSurveyInviteLink = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1560
|
-
var _this$configuration$
|
|
1561
|
-
|
|
1695
|
+
var _getSurveyInviteLink = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee23(surveyOwnerId, surveyInviteAPIRequestBody) {
|
|
1696
|
+
var _this$configuration$d12,
|
|
1697
|
+
_this10 = this;
|
|
1562
1698
|
var getsurveyInviteLinkOptionalParams,
|
|
1563
1699
|
timer,
|
|
1564
1700
|
requestPath,
|
|
@@ -1569,11 +1705,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1569
1705
|
url,
|
|
1570
1706
|
method,
|
|
1571
1707
|
options,
|
|
1572
|
-
|
|
1573
|
-
return _regenerator["default"].wrap(function (
|
|
1574
|
-
while (1) switch (
|
|
1708
|
+
_args23 = arguments;
|
|
1709
|
+
return _regenerator["default"].wrap(function (_context23) {
|
|
1710
|
+
while (1) switch (_context23.prev = _context23.next) {
|
|
1575
1711
|
case 0:
|
|
1576
|
-
getsurveyInviteLinkOptionalParams =
|
|
1712
|
+
getsurveyInviteLinkOptionalParams = _args23.length > 2 && _args23[2] !== undefined ? _args23[2] : {};
|
|
1577
1713
|
timer = _Timer.Timer.TIMER();
|
|
1578
1714
|
if (this.logger) {
|
|
1579
1715
|
this.logger.log(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETSURVEYINVITELINKSTARTED, {
|
|
@@ -1606,55 +1742,55 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1606
1742
|
headers: requestHeaders,
|
|
1607
1743
|
method: method,
|
|
1608
1744
|
url: url,
|
|
1609
|
-
timeout: (_this$configuration$
|
|
1745
|
+
timeout: (_this$configuration$d12 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d12 !== void 0 ? _this$configuration$d12 : this.configuration.requestTimeoutConfig.getSurveyInviteLink
|
|
1610
1746
|
};
|
|
1611
|
-
return
|
|
1612
|
-
var
|
|
1613
|
-
var backendTimer, response, httpRequestResponseTime, data, headers, elapsedTimeInMilliseconds,
|
|
1614
|
-
return _regenerator["default"].wrap(function (
|
|
1615
|
-
while (1) switch (
|
|
1747
|
+
return _context23.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1748
|
+
var _ref1 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee22(resolve, reject) {
|
|
1749
|
+
var backendTimer, response, httpRequestResponseTime, data, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime12, _elapsedTimeInMilliseconds12, _t12;
|
|
1750
|
+
return _regenerator["default"].wrap(function (_context22) {
|
|
1751
|
+
while (1) switch (_context22.prev = _context22.next) {
|
|
1616
1752
|
case 0:
|
|
1617
1753
|
backendTimer = _Timer.Timer.TIMER();
|
|
1618
|
-
|
|
1619
|
-
|
|
1754
|
+
_context22.prev = 1;
|
|
1755
|
+
_context22.next = 2;
|
|
1620
1756
|
return axiosInstance(options);
|
|
1621
1757
|
case 2:
|
|
1622
|
-
response =
|
|
1758
|
+
response = _context22.sent;
|
|
1623
1759
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1624
1760
|
data = response.data, headers = response.headers;
|
|
1625
|
-
|
|
1761
|
+
_this10.setAuthCodeNonce(headers);
|
|
1626
1762
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1627
|
-
|
|
1763
|
+
_this10.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETSURVEYINVITELINKSUCCEEDED, "Get Survey Invite Link Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1628
1764
|
resolve(data);
|
|
1629
|
-
|
|
1765
|
+
_context22.next = 4;
|
|
1630
1766
|
break;
|
|
1631
1767
|
case 3:
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
1638
|
-
reject(new Error(
|
|
1768
|
+
_context22.prev = 3;
|
|
1769
|
+
_t12 = _context22["catch"](1);
|
|
1770
|
+
_httpRequestResponseTime12 = backendTimer.milliSecondsElapsed;
|
|
1771
|
+
_elapsedTimeInMilliseconds12 = timer.milliSecondsElapsed;
|
|
1772
|
+
_this10.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETSURVEYINVITELINKFAILED, "Get Survey Invite Link failed", requestId, undefined, _elapsedTimeInMilliseconds12, requestPath, method, _t12, undefined, requestHeaders, _httpRequestResponseTime12);
|
|
1773
|
+
if ((0, _isExpectedAxiosError["default"])(_t12, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1774
|
+
reject(new Error(_this10.HTTPTimeOutErrorMessage));
|
|
1639
1775
|
}
|
|
1640
|
-
reject(
|
|
1776
|
+
reject(_t12);
|
|
1641
1777
|
case 4:
|
|
1642
1778
|
case "end":
|
|
1643
|
-
return
|
|
1779
|
+
return _context22.stop();
|
|
1644
1780
|
}
|
|
1645
|
-
},
|
|
1781
|
+
}, _callee22, null, [[1, 3]]);
|
|
1646
1782
|
}));
|
|
1647
|
-
return function (
|
|
1648
|
-
return
|
|
1783
|
+
return function (_x35, _x36) {
|
|
1784
|
+
return _ref1.apply(this, arguments);
|
|
1649
1785
|
};
|
|
1650
1786
|
}()));
|
|
1651
1787
|
case 1:
|
|
1652
1788
|
case "end":
|
|
1653
|
-
return
|
|
1789
|
+
return _context23.stop();
|
|
1654
1790
|
}
|
|
1655
|
-
},
|
|
1791
|
+
}, _callee23, this);
|
|
1656
1792
|
}));
|
|
1657
|
-
function getSurveyInviteLink(
|
|
1793
|
+
function getSurveyInviteLink(_x33, _x34) {
|
|
1658
1794
|
return _getSurveyInviteLink.apply(this, arguments);
|
|
1659
1795
|
}
|
|
1660
1796
|
return getSurveyInviteLink;
|
|
@@ -1670,9 +1806,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1670
1806
|
}, {
|
|
1671
1807
|
key: "getChatTranscripts",
|
|
1672
1808
|
value: (function () {
|
|
1673
|
-
var _getChatTranscripts = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1674
|
-
var _this$configuration$
|
|
1675
|
-
|
|
1809
|
+
var _getChatTranscripts = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee25(requestId, chatId, token) {
|
|
1810
|
+
var _this$configuration$d13,
|
|
1811
|
+
_this11 = this;
|
|
1676
1812
|
var getChatTranscriptsOptionalParams,
|
|
1677
1813
|
timer,
|
|
1678
1814
|
requestPath,
|
|
@@ -1683,11 +1819,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1683
1819
|
url,
|
|
1684
1820
|
method,
|
|
1685
1821
|
options,
|
|
1686
|
-
|
|
1687
|
-
return _regenerator["default"].wrap(function (
|
|
1688
|
-
while (1) switch (
|
|
1822
|
+
_args25 = arguments;
|
|
1823
|
+
return _regenerator["default"].wrap(function (_context25) {
|
|
1824
|
+
while (1) switch (_context25.prev = _context25.next) {
|
|
1689
1825
|
case 0:
|
|
1690
|
-
getChatTranscriptsOptionalParams =
|
|
1826
|
+
getChatTranscriptsOptionalParams = _args25.length > 3 && _args25[3] !== undefined ? _args25[3] : {};
|
|
1691
1827
|
timer = _Timer.Timer.TIMER();
|
|
1692
1828
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATTRANSCRIPTSTARTED, "Get Chat Transcript Started", requestId);
|
|
1693
1829
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatGetChatTranscriptPath, "/").concat(chatId, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
@@ -1721,55 +1857,55 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1721
1857
|
headers: requestHeaders,
|
|
1722
1858
|
method: method,
|
|
1723
1859
|
url: url,
|
|
1724
|
-
timeout: (_this$configuration$
|
|
1860
|
+
timeout: (_this$configuration$d13 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d13 !== void 0 ? _this$configuration$d13 : this.configuration.requestTimeoutConfig.getChatTranscripts
|
|
1725
1861
|
};
|
|
1726
|
-
return
|
|
1727
|
-
var
|
|
1728
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers,
|
|
1729
|
-
return _regenerator["default"].wrap(function (
|
|
1730
|
-
while (1) switch (
|
|
1862
|
+
return _context25.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1863
|
+
var _ref10 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee24(resolve, reject) {
|
|
1864
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers, _httpRequestResponseTime13, _elapsedTimeInMilliseconds13, _t13;
|
|
1865
|
+
return _regenerator["default"].wrap(function (_context24) {
|
|
1866
|
+
while (1) switch (_context24.prev = _context24.next) {
|
|
1731
1867
|
case 0:
|
|
1732
1868
|
backendTimer = _Timer.Timer.TIMER();
|
|
1733
|
-
|
|
1734
|
-
|
|
1869
|
+
_context24.prev = 1;
|
|
1870
|
+
_context24.next = 2;
|
|
1735
1871
|
return axiosInstance(options);
|
|
1736
1872
|
case 2:
|
|
1737
|
-
response =
|
|
1873
|
+
response = _context24.sent;
|
|
1738
1874
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1739
1875
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1740
1876
|
data = response.data, headers = response.headers;
|
|
1741
|
-
|
|
1742
|
-
|
|
1877
|
+
_this11.setAuthCodeNonce(headers);
|
|
1878
|
+
_this11.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETCHATTRANSCRIPTSUCCEEDED, "Get Chat Transcript succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1743
1879
|
resolve(data);
|
|
1744
|
-
|
|
1880
|
+
_context24.next = 4;
|
|
1745
1881
|
break;
|
|
1746
1882
|
case 3:
|
|
1747
|
-
|
|
1748
|
-
|
|
1749
|
-
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
1753
|
-
reject(new Error(
|
|
1883
|
+
_context24.prev = 3;
|
|
1884
|
+
_t13 = _context24["catch"](1);
|
|
1885
|
+
_httpRequestResponseTime13 = backendTimer.milliSecondsElapsed;
|
|
1886
|
+
_elapsedTimeInMilliseconds13 = timer.milliSecondsElapsed;
|
|
1887
|
+
_this11.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETCHATTRANSCRIPTFAILED, "Get Chat Transcript failed", requestId, undefined, _elapsedTimeInMilliseconds13, requestPath, method, _t13, undefined, requestHeaders, _httpRequestResponseTime13);
|
|
1888
|
+
if ((0, _isExpectedAxiosError["default"])(_t13, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
1889
|
+
reject(new Error(_this11.HTTPTimeOutErrorMessage));
|
|
1754
1890
|
}
|
|
1755
|
-
reject(
|
|
1891
|
+
reject(_t13);
|
|
1756
1892
|
case 4:
|
|
1757
1893
|
case "end":
|
|
1758
|
-
return
|
|
1894
|
+
return _context24.stop();
|
|
1759
1895
|
}
|
|
1760
|
-
},
|
|
1896
|
+
}, _callee24, null, [[1, 3]]);
|
|
1761
1897
|
}));
|
|
1762
|
-
return function (
|
|
1763
|
-
return
|
|
1898
|
+
return function (_x40, _x41) {
|
|
1899
|
+
return _ref10.apply(this, arguments);
|
|
1764
1900
|
};
|
|
1765
1901
|
}()));
|
|
1766
1902
|
case 1:
|
|
1767
1903
|
case "end":
|
|
1768
|
-
return
|
|
1904
|
+
return _context25.stop();
|
|
1769
1905
|
}
|
|
1770
|
-
},
|
|
1906
|
+
}, _callee25, this);
|
|
1771
1907
|
}));
|
|
1772
|
-
function getChatTranscripts(
|
|
1908
|
+
function getChatTranscripts(_x37, _x38, _x39) {
|
|
1773
1909
|
return _getChatTranscripts.apply(this, arguments);
|
|
1774
1910
|
}
|
|
1775
1911
|
return getChatTranscripts;
|
|
@@ -1783,9 +1919,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1783
1919
|
}, {
|
|
1784
1920
|
key: "getPersistentChatHistory",
|
|
1785
1921
|
value: (function () {
|
|
1786
|
-
var _getPersistentChatHistory = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1787
|
-
var _this$configuration$
|
|
1788
|
-
|
|
1922
|
+
var _getPersistentChatHistory = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee27(requestId) {
|
|
1923
|
+
var _this$configuration$d14,
|
|
1924
|
+
_this12 = this;
|
|
1789
1925
|
var getPersistentChatHistoryOptionalParams,
|
|
1790
1926
|
timer,
|
|
1791
1927
|
authenticatedUserToken,
|
|
@@ -1799,21 +1935,21 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1799
1935
|
url,
|
|
1800
1936
|
method,
|
|
1801
1937
|
options,
|
|
1802
|
-
|
|
1803
|
-
return _regenerator["default"].wrap(function (
|
|
1804
|
-
while (1) switch (
|
|
1938
|
+
_args27 = arguments;
|
|
1939
|
+
return _regenerator["default"].wrap(function (_context27) {
|
|
1940
|
+
while (1) switch (_context27.prev = _context27.next) {
|
|
1805
1941
|
case 0:
|
|
1806
|
-
getPersistentChatHistoryOptionalParams =
|
|
1942
|
+
getPersistentChatHistoryOptionalParams = _args27.length > 1 && _args27[1] !== undefined ? _args27[1] : {};
|
|
1807
1943
|
timer = _Timer.Timer.TIMER();
|
|
1808
1944
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETPERSISTENTCHATHISTORYSTARTED, "Get Persistent Chat History Started", requestId);
|
|
1809
1945
|
authenticatedUserToken = getPersistentChatHistoryOptionalParams.authenticatedUserToken, pageSize = getPersistentChatHistoryOptionalParams.pageSize, pageToken = getPersistentChatHistoryOptionalParams.pageToken;
|
|
1810
1946
|
if (authenticatedUserToken) {
|
|
1811
|
-
|
|
1947
|
+
_context27.next = 1;
|
|
1812
1948
|
break;
|
|
1813
1949
|
}
|
|
1814
1950
|
errorMessage = "Authenticated user token is required for persistent chat history";
|
|
1815
1951
|
this.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETPERSISTENTCHATHISTORYFAILED, "Get Persistent Chat History failed - Missing authenticated user token", requestId);
|
|
1816
|
-
return
|
|
1952
|
+
return _context27.abrupt("return", Promise.reject(new Error(errorMessage)));
|
|
1817
1953
|
case 1:
|
|
1818
1954
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatAuthGetPersistentChatHistoryPath, "/").concat(this.omnichannelConfiguration.orgId, "/widgetapp/").concat(this.omnichannelConfiguration.widgetId, "/conversation/history");
|
|
1819
1955
|
axiosInstance = _axios["default"].create();
|
|
@@ -1840,59 +1976,59 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1840
1976
|
method: method,
|
|
1841
1977
|
url: url,
|
|
1842
1978
|
params: params,
|
|
1843
|
-
timeout: (_this$configuration$
|
|
1979
|
+
timeout: (_this$configuration$d14 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d14 !== void 0 ? _this$configuration$d14 : this.configuration.requestTimeoutConfig.getPersistentChatHistory
|
|
1844
1980
|
};
|
|
1845
|
-
return
|
|
1846
|
-
var
|
|
1847
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers,
|
|
1848
|
-
return _regenerator["default"].wrap(function (
|
|
1849
|
-
while (1) switch (
|
|
1981
|
+
return _context27.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
1982
|
+
var _ref11 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee26(resolve, reject) {
|
|
1983
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, headers, _httpRequestResponseTime14, _elapsedTimeInMilliseconds14, _t14;
|
|
1984
|
+
return _regenerator["default"].wrap(function (_context26) {
|
|
1985
|
+
while (1) switch (_context26.prev = _context26.next) {
|
|
1850
1986
|
case 0:
|
|
1851
1987
|
backendTimer = _Timer.Timer.TIMER();
|
|
1852
|
-
|
|
1853
|
-
|
|
1988
|
+
_context26.prev = 1;
|
|
1989
|
+
_context26.next = 2;
|
|
1854
1990
|
return axiosInstance(options);
|
|
1855
1991
|
case 2:
|
|
1856
|
-
response =
|
|
1992
|
+
response = _context26.sent;
|
|
1857
1993
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1858
1994
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1859
1995
|
data = response.data, headers = response.headers;
|
|
1860
|
-
|
|
1861
|
-
|
|
1996
|
+
_this12.setAuthCodeNonce(headers);
|
|
1997
|
+
_this12.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETPERSISTENTCHATHISTORYSUCCEEDED, "Get Persistent Chat History succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1862
1998
|
resolve(data);
|
|
1863
|
-
|
|
1999
|
+
_context26.next = 5;
|
|
1864
2000
|
break;
|
|
1865
2001
|
case 3:
|
|
1866
|
-
|
|
1867
|
-
|
|
1868
|
-
|
|
1869
|
-
|
|
1870
|
-
|
|
1871
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
1872
|
-
|
|
2002
|
+
_context26.prev = 3;
|
|
2003
|
+
_t14 = _context26["catch"](1);
|
|
2004
|
+
_httpRequestResponseTime14 = backendTimer.milliSecondsElapsed;
|
|
2005
|
+
_elapsedTimeInMilliseconds14 = timer.milliSecondsElapsed;
|
|
2006
|
+
_this12.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETPERSISTENTCHATHISTORYFAILED, "Get Persistent Chat History failed", requestId, undefined, _elapsedTimeInMilliseconds14, requestPath, method, _t14, undefined, requestHeaders, _httpRequestResponseTime14);
|
|
2007
|
+
if (!(0, _isExpectedAxiosError["default"])(_t14, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2008
|
+
_context26.next = 4;
|
|
1873
2009
|
break;
|
|
1874
2010
|
}
|
|
1875
|
-
reject(new Error(
|
|
1876
|
-
return
|
|
2011
|
+
reject(new Error(_this12.HTTPTimeOutErrorMessage));
|
|
2012
|
+
return _context26.abrupt("return");
|
|
1877
2013
|
case 4:
|
|
1878
|
-
reject(
|
|
2014
|
+
reject(_t14);
|
|
1879
2015
|
case 5:
|
|
1880
2016
|
case "end":
|
|
1881
|
-
return
|
|
2017
|
+
return _context26.stop();
|
|
1882
2018
|
}
|
|
1883
|
-
},
|
|
2019
|
+
}, _callee26, null, [[1, 3]]);
|
|
1884
2020
|
}));
|
|
1885
|
-
return function (
|
|
1886
|
-
return
|
|
2021
|
+
return function (_x43, _x44) {
|
|
2022
|
+
return _ref11.apply(this, arguments);
|
|
1887
2023
|
};
|
|
1888
2024
|
}()));
|
|
1889
2025
|
case 2:
|
|
1890
2026
|
case "end":
|
|
1891
|
-
return
|
|
2027
|
+
return _context27.stop();
|
|
1892
2028
|
}
|
|
1893
|
-
},
|
|
2029
|
+
}, _callee27, this);
|
|
1894
2030
|
}));
|
|
1895
|
-
function getPersistentChatHistory(
|
|
2031
|
+
function getPersistentChatHistory(_x42) {
|
|
1896
2032
|
return _getPersistentChatHistory.apply(this, arguments);
|
|
1897
2033
|
}
|
|
1898
2034
|
return getPersistentChatHistory;
|
|
@@ -1908,9 +2044,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1908
2044
|
}, {
|
|
1909
2045
|
key: "emailTranscript",
|
|
1910
2046
|
value: (function () {
|
|
1911
|
-
var _emailTranscript = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
1912
|
-
var _this$configuration$
|
|
1913
|
-
|
|
2047
|
+
var _emailTranscript = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee29(requestId, token, emailRequestBody) {
|
|
2048
|
+
var _this$configuration$d15,
|
|
2049
|
+
_this13 = this;
|
|
1914
2050
|
var emailTranscriptOptionalParams,
|
|
1915
2051
|
timer,
|
|
1916
2052
|
requestPath,
|
|
@@ -1920,11 +2056,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1920
2056
|
url,
|
|
1921
2057
|
method,
|
|
1922
2058
|
options,
|
|
1923
|
-
|
|
1924
|
-
return _regenerator["default"].wrap(function (
|
|
1925
|
-
while (1) switch (
|
|
2059
|
+
_args29 = arguments;
|
|
2060
|
+
return _regenerator["default"].wrap(function (_context29) {
|
|
2061
|
+
while (1) switch (_context29.prev = _context29.next) {
|
|
1926
2062
|
case 0:
|
|
1927
|
-
emailTranscriptOptionalParams =
|
|
2063
|
+
emailTranscriptOptionalParams = _args29.length > 3 && _args29[3] !== undefined ? _args29[3] : {};
|
|
1928
2064
|
timer = _Timer.Timer.TIMER();
|
|
1929
2065
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.EMAILTRANSCRIPTSTARTED, "Email Transcript Started", requestId);
|
|
1930
2066
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatTranscriptEmailRequestPath, "/").concat(requestId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
@@ -1952,55 +2088,55 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
1952
2088
|
headers: requestHeaders,
|
|
1953
2089
|
method: method,
|
|
1954
2090
|
url: url,
|
|
1955
|
-
timeout: (_this$configuration$
|
|
2091
|
+
timeout: (_this$configuration$d15 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d15 !== void 0 ? _this$configuration$d15 : this.configuration.requestTimeoutConfig.emailTranscript
|
|
1956
2092
|
};
|
|
1957
|
-
return
|
|
1958
|
-
var
|
|
1959
|
-
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
1960
|
-
return _regenerator["default"].wrap(function (
|
|
1961
|
-
while (1) switch (
|
|
2093
|
+
return _context29.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2094
|
+
var _ref12 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee28(resolve, reject) {
|
|
2095
|
+
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime15, _elapsedTimeInMilliseconds15, _t15;
|
|
2096
|
+
return _regenerator["default"].wrap(function (_context28) {
|
|
2097
|
+
while (1) switch (_context28.prev = _context28.next) {
|
|
1962
2098
|
case 0:
|
|
1963
2099
|
backendTimer = _Timer.Timer.TIMER();
|
|
1964
|
-
|
|
1965
|
-
|
|
2100
|
+
_context28.prev = 1;
|
|
2101
|
+
_context28.next = 2;
|
|
1966
2102
|
return axiosInstance(options);
|
|
1967
2103
|
case 2:
|
|
1968
|
-
response =
|
|
2104
|
+
response = _context28.sent;
|
|
1969
2105
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
1970
2106
|
headers = response.headers;
|
|
1971
|
-
|
|
2107
|
+
_this13.setAuthCodeNonce(headers);
|
|
1972
2108
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
1973
|
-
|
|
2109
|
+
_this13.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.EMAILTRANSCRIPTSUCCEEDED, "Email Transcript succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
1974
2110
|
resolve();
|
|
1975
|
-
|
|
2111
|
+
_context28.next = 4;
|
|
1976
2112
|
break;
|
|
1977
2113
|
case 3:
|
|
1978
|
-
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
1984
|
-
reject(new Error(
|
|
2114
|
+
_context28.prev = 3;
|
|
2115
|
+
_t15 = _context28["catch"](1);
|
|
2116
|
+
_httpRequestResponseTime15 = backendTimer.milliSecondsElapsed;
|
|
2117
|
+
_elapsedTimeInMilliseconds15 = timer.milliSecondsElapsed;
|
|
2118
|
+
_this13.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.EMAILTRANSCRIPTFAILED, "Email Transcript Failed", requestId, undefined, _elapsedTimeInMilliseconds15, requestPath, method, _t15, undefined, requestHeaders, _httpRequestResponseTime15);
|
|
2119
|
+
if ((0, _isExpectedAxiosError["default"])(_t15, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2120
|
+
reject(new Error(_this13.HTTPTimeOutErrorMessage));
|
|
1985
2121
|
}
|
|
1986
|
-
reject(
|
|
2122
|
+
reject(_t15);
|
|
1987
2123
|
case 4:
|
|
1988
2124
|
case "end":
|
|
1989
|
-
return
|
|
2125
|
+
return _context28.stop();
|
|
1990
2126
|
}
|
|
1991
|
-
},
|
|
2127
|
+
}, _callee28, null, [[1, 3]]);
|
|
1992
2128
|
}));
|
|
1993
|
-
return function (
|
|
1994
|
-
return
|
|
2129
|
+
return function (_x48, _x49) {
|
|
2130
|
+
return _ref12.apply(this, arguments);
|
|
1995
2131
|
};
|
|
1996
2132
|
}()));
|
|
1997
2133
|
case 1:
|
|
1998
2134
|
case "end":
|
|
1999
|
-
return
|
|
2135
|
+
return _context29.stop();
|
|
2000
2136
|
}
|
|
2001
|
-
},
|
|
2137
|
+
}, _callee29, this);
|
|
2002
2138
|
}));
|
|
2003
|
-
function emailTranscript(
|
|
2139
|
+
function emailTranscript(_x45, _x46, _x47) {
|
|
2004
2140
|
return _emailTranscript.apply(this, arguments);
|
|
2005
2141
|
}
|
|
2006
2142
|
return emailTranscript;
|
|
@@ -2013,12 +2149,12 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2013
2149
|
}, {
|
|
2014
2150
|
key: "fetchDataMaskingInfo",
|
|
2015
2151
|
value: (function () {
|
|
2016
|
-
var _fetchDataMaskingInfo = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2017
|
-
var _this$configuration$
|
|
2018
|
-
|
|
2152
|
+
var _fetchDataMaskingInfo = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee31(requestId) {
|
|
2153
|
+
var _this$configuration$d16,
|
|
2154
|
+
_this14 = this;
|
|
2019
2155
|
var timer, requestPath, axiosInstance, requestHeaders, url, method, options;
|
|
2020
|
-
return _regenerator["default"].wrap(function (
|
|
2021
|
-
while (1) switch (
|
|
2156
|
+
return _regenerator["default"].wrap(function (_context31) {
|
|
2157
|
+
while (1) switch (_context31.prev = _context31.next) {
|
|
2022
2158
|
case 0:
|
|
2023
2159
|
timer = _Timer.Timer.TIMER();
|
|
2024
2160
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.FETCHDATAMASKINGSTARTED, "Fetch Data Masking Started", requestId);
|
|
@@ -2041,54 +2177,54 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2041
2177
|
headers: requestHeaders,
|
|
2042
2178
|
method: method,
|
|
2043
2179
|
url: url,
|
|
2044
|
-
timeout: (_this$configuration$
|
|
2180
|
+
timeout: (_this$configuration$d16 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d16 !== void 0 ? _this$configuration$d16 : this.configuration.requestTimeoutConfig.fetchDataMaskingInfo
|
|
2045
2181
|
};
|
|
2046
|
-
return
|
|
2047
|
-
var
|
|
2048
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data,
|
|
2049
|
-
return _regenerator["default"].wrap(function (
|
|
2050
|
-
while (1) switch (
|
|
2182
|
+
return _context31.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2183
|
+
var _ref13 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee30(resolve, reject) {
|
|
2184
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, data, _httpRequestResponseTime16, _elapsedTimeInMilliseconds16, _t16;
|
|
2185
|
+
return _regenerator["default"].wrap(function (_context30) {
|
|
2186
|
+
while (1) switch (_context30.prev = _context30.next) {
|
|
2051
2187
|
case 0:
|
|
2052
2188
|
backendTimer = _Timer.Timer.TIMER();
|
|
2053
|
-
|
|
2054
|
-
|
|
2189
|
+
_context30.prev = 1;
|
|
2190
|
+
_context30.next = 2;
|
|
2055
2191
|
return axiosInstance(options);
|
|
2056
2192
|
case 2:
|
|
2057
|
-
response =
|
|
2193
|
+
response = _context30.sent;
|
|
2058
2194
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2059
2195
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2060
2196
|
data = response.data;
|
|
2061
|
-
|
|
2197
|
+
_this14.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.FETCHDATAMASKINGSUCCEEDED, "Fetch Data Masking succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2062
2198
|
resolve(data);
|
|
2063
|
-
|
|
2199
|
+
_context30.next = 4;
|
|
2064
2200
|
break;
|
|
2065
2201
|
case 3:
|
|
2066
|
-
|
|
2067
|
-
|
|
2068
|
-
|
|
2069
|
-
|
|
2070
|
-
|
|
2071
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
2072
|
-
reject(new Error(
|
|
2202
|
+
_context30.prev = 3;
|
|
2203
|
+
_t16 = _context30["catch"](1);
|
|
2204
|
+
_httpRequestResponseTime16 = backendTimer.milliSecondsElapsed;
|
|
2205
|
+
_elapsedTimeInMilliseconds16 = timer.milliSecondsElapsed;
|
|
2206
|
+
_this14.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.FETCHDATAMASKINGFAILED, "Fetch Data Masking Failed", requestId, undefined, _elapsedTimeInMilliseconds16, requestPath, method, _t16, undefined, requestHeaders, _httpRequestResponseTime16);
|
|
2207
|
+
if ((0, _isExpectedAxiosError["default"])(_t16, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2208
|
+
reject(new Error(_this14.HTTPTimeOutErrorMessage));
|
|
2073
2209
|
}
|
|
2074
|
-
reject(
|
|
2210
|
+
reject(_t16);
|
|
2075
2211
|
case 4:
|
|
2076
2212
|
case "end":
|
|
2077
|
-
return
|
|
2213
|
+
return _context30.stop();
|
|
2078
2214
|
}
|
|
2079
|
-
},
|
|
2215
|
+
}, _callee30, null, [[1, 3]]);
|
|
2080
2216
|
}));
|
|
2081
|
-
return function (
|
|
2082
|
-
return
|
|
2217
|
+
return function (_x51, _x52) {
|
|
2218
|
+
return _ref13.apply(this, arguments);
|
|
2083
2219
|
};
|
|
2084
2220
|
}()));
|
|
2085
2221
|
case 1:
|
|
2086
2222
|
case "end":
|
|
2087
|
-
return
|
|
2223
|
+
return _context31.stop();
|
|
2088
2224
|
}
|
|
2089
|
-
},
|
|
2225
|
+
}, _callee31, this);
|
|
2090
2226
|
}));
|
|
2091
|
-
function fetchDataMaskingInfo(
|
|
2227
|
+
function fetchDataMaskingInfo(_x50) {
|
|
2092
2228
|
return _fetchDataMaskingInfo.apply(this, arguments);
|
|
2093
2229
|
}
|
|
2094
2230
|
return fetchDataMaskingInfo;
|
|
@@ -2103,9 +2239,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2103
2239
|
}, {
|
|
2104
2240
|
key: "makeSecondaryChannelEventRequest",
|
|
2105
2241
|
value: (function () {
|
|
2106
|
-
var _makeSecondaryChannelEventRequest = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2107
|
-
var _this$configuration$
|
|
2108
|
-
|
|
2242
|
+
var _makeSecondaryChannelEventRequest = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee33(requestId, secondaryChannelEventRequestBody) {
|
|
2243
|
+
var _this$configuration$d17,
|
|
2244
|
+
_this15 = this;
|
|
2109
2245
|
var secondaryChannelEventOptionalParams,
|
|
2110
2246
|
timer,
|
|
2111
2247
|
requestPath,
|
|
@@ -2115,11 +2251,11 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2115
2251
|
url,
|
|
2116
2252
|
method,
|
|
2117
2253
|
options,
|
|
2118
|
-
|
|
2119
|
-
return _regenerator["default"].wrap(function (
|
|
2120
|
-
while (1) switch (
|
|
2254
|
+
_args33 = arguments;
|
|
2255
|
+
return _regenerator["default"].wrap(function (_context33) {
|
|
2256
|
+
while (1) switch (_context33.prev = _context33.next) {
|
|
2121
2257
|
case 0:
|
|
2122
|
-
secondaryChannelEventOptionalParams =
|
|
2258
|
+
secondaryChannelEventOptionalParams = _args33.length > 2 && _args33[2] !== undefined ? _args33[2] : {};
|
|
2123
2259
|
timer = _Timer.Timer.TIMER();
|
|
2124
2260
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SECONDARYCHANNELEVENTREQUESTSTARTED, "Secondary Channel Event Request Started", requestId);
|
|
2125
2261
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatSecondaryChannelEventPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(requestId);
|
|
@@ -2146,55 +2282,55 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2146
2282
|
headers: requestHeaders,
|
|
2147
2283
|
method: method,
|
|
2148
2284
|
url: url,
|
|
2149
|
-
timeout: (_this$configuration$
|
|
2285
|
+
timeout: (_this$configuration$d17 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d17 !== void 0 ? _this$configuration$d17 : this.configuration.requestTimeoutConfig.makeSecondaryChannelEventRequest
|
|
2150
2286
|
};
|
|
2151
|
-
return
|
|
2152
|
-
var
|
|
2153
|
-
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
2154
|
-
return _regenerator["default"].wrap(function (
|
|
2155
|
-
while (1) switch (
|
|
2287
|
+
return _context33.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2288
|
+
var _ref14 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee32(resolve, reject) {
|
|
2289
|
+
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime17, _elapsedTimeInMilliseconds17, _t17;
|
|
2290
|
+
return _regenerator["default"].wrap(function (_context32) {
|
|
2291
|
+
while (1) switch (_context32.prev = _context32.next) {
|
|
2156
2292
|
case 0:
|
|
2157
2293
|
backendTimer = _Timer.Timer.TIMER();
|
|
2158
|
-
|
|
2159
|
-
|
|
2294
|
+
_context32.prev = 1;
|
|
2295
|
+
_context32.next = 2;
|
|
2160
2296
|
return axiosInstance(options);
|
|
2161
2297
|
case 2:
|
|
2162
|
-
response =
|
|
2298
|
+
response = _context32.sent;
|
|
2163
2299
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2164
2300
|
headers = response.headers;
|
|
2165
|
-
|
|
2301
|
+
_this15.setAuthCodeNonce(headers);
|
|
2166
2302
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2167
|
-
|
|
2303
|
+
_this15.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SECONDARYCHANNELEVENTREQUESTSUCCEEDED, "Secondary Channel Event Request Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2168
2304
|
resolve();
|
|
2169
|
-
|
|
2305
|
+
_context32.next = 4;
|
|
2170
2306
|
break;
|
|
2171
2307
|
case 3:
|
|
2172
|
-
|
|
2173
|
-
|
|
2174
|
-
|
|
2175
|
-
|
|
2176
|
-
|
|
2177
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
2178
|
-
reject(new Error(
|
|
2308
|
+
_context32.prev = 3;
|
|
2309
|
+
_t17 = _context32["catch"](1);
|
|
2310
|
+
_httpRequestResponseTime17 = backendTimer.milliSecondsElapsed;
|
|
2311
|
+
_elapsedTimeInMilliseconds17 = timer.milliSecondsElapsed;
|
|
2312
|
+
_this15.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SECONDARYCHANNELEVENTREQUESTFAILED, "Secondary Channel Event Request Failed", requestId, undefined, _elapsedTimeInMilliseconds17, requestPath, method, _t17, undefined, requestHeaders, _httpRequestResponseTime17);
|
|
2313
|
+
if ((0, _isExpectedAxiosError["default"])(_t17, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2314
|
+
reject(new Error(_this15.HTTPTimeOutErrorMessage));
|
|
2179
2315
|
}
|
|
2180
|
-
reject(
|
|
2316
|
+
reject(_t17);
|
|
2181
2317
|
case 4:
|
|
2182
2318
|
case "end":
|
|
2183
|
-
return
|
|
2319
|
+
return _context32.stop();
|
|
2184
2320
|
}
|
|
2185
|
-
},
|
|
2321
|
+
}, _callee32, null, [[1, 3]]);
|
|
2186
2322
|
}));
|
|
2187
|
-
return function (
|
|
2188
|
-
return
|
|
2323
|
+
return function (_x55, _x56) {
|
|
2324
|
+
return _ref14.apply(this, arguments);
|
|
2189
2325
|
};
|
|
2190
2326
|
}()));
|
|
2191
2327
|
case 1:
|
|
2192
2328
|
case "end":
|
|
2193
|
-
return
|
|
2329
|
+
return _context33.stop();
|
|
2194
2330
|
}
|
|
2195
|
-
},
|
|
2331
|
+
}, _callee33, this);
|
|
2196
2332
|
}));
|
|
2197
|
-
function makeSecondaryChannelEventRequest(
|
|
2333
|
+
function makeSecondaryChannelEventRequest(_x53, _x54) {
|
|
2198
2334
|
return _makeSecondaryChannelEventRequest.apply(this, arguments);
|
|
2199
2335
|
}
|
|
2200
2336
|
return makeSecondaryChannelEventRequest;
|
|
@@ -2206,9 +2342,9 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2206
2342
|
}, {
|
|
2207
2343
|
key: "sendTypingIndicator",
|
|
2208
2344
|
value: (function () {
|
|
2209
|
-
var _sendTypingIndicator = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2210
|
-
var _this$configuration$
|
|
2211
|
-
|
|
2345
|
+
var _sendTypingIndicator = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee35(requestId, currentLiveChatVersion) {
|
|
2346
|
+
var _this$configuration$d18,
|
|
2347
|
+
_this16 = this;
|
|
2212
2348
|
var sendTypingIndicatorOptionalParams,
|
|
2213
2349
|
timer,
|
|
2214
2350
|
customerDisplayName,
|
|
@@ -2218,21 +2354,21 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2218
2354
|
url,
|
|
2219
2355
|
method,
|
|
2220
2356
|
options,
|
|
2221
|
-
|
|
2222
|
-
return _regenerator["default"].wrap(function (
|
|
2223
|
-
while (1) switch (
|
|
2357
|
+
_args35 = arguments;
|
|
2358
|
+
return _regenerator["default"].wrap(function (_context35) {
|
|
2359
|
+
while (1) switch (_context35.prev = _context35.next) {
|
|
2224
2360
|
case 0:
|
|
2225
|
-
sendTypingIndicatorOptionalParams =
|
|
2361
|
+
sendTypingIndicatorOptionalParams = _args35.length > 2 && _args35[2] !== undefined ? _args35[2] : {};
|
|
2226
2362
|
if (!(!currentLiveChatVersion || currentLiveChatVersion !== _Enums.LiveChatVersion.V2)) {
|
|
2227
|
-
|
|
2363
|
+
_context35.next = 1;
|
|
2228
2364
|
break;
|
|
2229
2365
|
}
|
|
2230
|
-
return
|
|
2366
|
+
return _context35.abrupt("return", Promise.resolve());
|
|
2231
2367
|
case 1:
|
|
2232
2368
|
timer = _Timer.Timer.TIMER();
|
|
2233
2369
|
customerDisplayName = sendTypingIndicatorOptionalParams.customerDisplayName;
|
|
2234
2370
|
if (!(!currentLiveChatVersion || currentLiveChatVersion !== _Enums.LiveChatVersion.V2)) {
|
|
2235
|
-
|
|
2371
|
+
_context35.next = 2;
|
|
2236
2372
|
break;
|
|
2237
2373
|
}
|
|
2238
2374
|
throw new Error('Typing indicator is only supported on v2');
|
|
@@ -2251,53 +2387,53 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2251
2387
|
headers: requestHeaders,
|
|
2252
2388
|
method: method,
|
|
2253
2389
|
url: url,
|
|
2254
|
-
timeout: (_this$configuration$
|
|
2390
|
+
timeout: (_this$configuration$d18 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d18 !== void 0 ? _this$configuration$d18 : this.configuration.requestTimeoutConfig.sendTypingIndicator
|
|
2255
2391
|
};
|
|
2256
|
-
return
|
|
2257
|
-
var
|
|
2258
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds,
|
|
2259
|
-
return _regenerator["default"].wrap(function (
|
|
2260
|
-
while (1) switch (
|
|
2392
|
+
return _context35.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2393
|
+
var _ref15 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee34(resolve, reject) {
|
|
2394
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, _httpRequestResponseTime18, _elapsedTimeInMilliseconds18, _t18;
|
|
2395
|
+
return _regenerator["default"].wrap(function (_context34) {
|
|
2396
|
+
while (1) switch (_context34.prev = _context34.next) {
|
|
2261
2397
|
case 0:
|
|
2262
2398
|
backendTimer = _Timer.Timer.TIMER();
|
|
2263
|
-
|
|
2264
|
-
|
|
2399
|
+
_context34.prev = 1;
|
|
2400
|
+
_context34.next = 2;
|
|
2265
2401
|
return axiosInstance(options);
|
|
2266
2402
|
case 2:
|
|
2267
|
-
response =
|
|
2403
|
+
response = _context34.sent;
|
|
2268
2404
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2269
2405
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2270
|
-
|
|
2406
|
+
_this16.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SENDTYPINGINDICATORSUCCEEDED, "Send Typing Indicator Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2271
2407
|
resolve();
|
|
2272
|
-
|
|
2408
|
+
_context34.next = 4;
|
|
2273
2409
|
break;
|
|
2274
2410
|
case 3:
|
|
2275
|
-
|
|
2276
|
-
|
|
2277
|
-
|
|
2278
|
-
|
|
2279
|
-
|
|
2280
|
-
if ((0, _isExpectedAxiosError["default"])(
|
|
2281
|
-
reject(new Error(
|
|
2411
|
+
_context34.prev = 3;
|
|
2412
|
+
_t18 = _context34["catch"](1);
|
|
2413
|
+
_httpRequestResponseTime18 = backendTimer.milliSecondsElapsed;
|
|
2414
|
+
_elapsedTimeInMilliseconds18 = timer.milliSecondsElapsed;
|
|
2415
|
+
_this16.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SENDTYPINGINDICATORFAILED, "Send Typing Indicator Failed", requestId, undefined, _elapsedTimeInMilliseconds18, requestPath, method, _t18, undefined, requestHeaders, _httpRequestResponseTime18);
|
|
2416
|
+
if ((0, _isExpectedAxiosError["default"])(_t18, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2417
|
+
reject(new Error(_this16.HTTPTimeOutErrorMessage));
|
|
2282
2418
|
}
|
|
2283
|
-
reject(
|
|
2419
|
+
reject(_t18);
|
|
2284
2420
|
case 4:
|
|
2285
2421
|
case "end":
|
|
2286
|
-
return
|
|
2422
|
+
return _context34.stop();
|
|
2287
2423
|
}
|
|
2288
|
-
},
|
|
2424
|
+
}, _callee34, null, [[1, 3]]);
|
|
2289
2425
|
}));
|
|
2290
|
-
return function (
|
|
2291
|
-
return
|
|
2426
|
+
return function (_x59, _x60) {
|
|
2427
|
+
return _ref15.apply(this, arguments);
|
|
2292
2428
|
};
|
|
2293
2429
|
}()));
|
|
2294
2430
|
case 3:
|
|
2295
2431
|
case "end":
|
|
2296
|
-
return
|
|
2432
|
+
return _context35.stop();
|
|
2297
2433
|
}
|
|
2298
|
-
},
|
|
2434
|
+
}, _callee35, this);
|
|
2299
2435
|
}));
|
|
2300
|
-
function sendTypingIndicator(
|
|
2436
|
+
function sendTypingIndicator(_x57, _x58) {
|
|
2301
2437
|
return _sendTypingIndicator.apply(this, arguments);
|
|
2302
2438
|
}
|
|
2303
2439
|
return sendTypingIndicator;
|
|
@@ -2312,18 +2448,18 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2312
2448
|
}, {
|
|
2313
2449
|
key: "midConversationAuthenticateChat",
|
|
2314
2450
|
value: (function () {
|
|
2315
|
-
var _midConversationAuthenticateChat = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2316
|
-
var _this$configuration$
|
|
2317
|
-
|
|
2451
|
+
var _midConversationAuthenticateChat = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee37(requestId, authenticateChatParams) {
|
|
2452
|
+
var _this$configuration$d19,
|
|
2453
|
+
_this17 = this;
|
|
2318
2454
|
var timer, chatId, authenticatedUserToken, requestPath, axiosInstance, requestHeaders, url, method, options;
|
|
2319
|
-
return _regenerator["default"].wrap(function (
|
|
2320
|
-
while (1) switch (
|
|
2455
|
+
return _regenerator["default"].wrap(function (_context37) {
|
|
2456
|
+
while (1) switch (_context37.prev = _context37.next) {
|
|
2321
2457
|
case 0:
|
|
2322
2458
|
timer = _Timer.Timer.TIMER();
|
|
2323
2459
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.MIDAUTHENTICATECHATSTARTED, "Mid-Authenticate Chat Started", requestId);
|
|
2324
2460
|
chatId = authenticateChatParams.chatId, authenticatedUserToken = authenticateChatParams.authenticatedUserToken;
|
|
2325
2461
|
if (!(!chatId || !authenticatedUserToken)) {
|
|
2326
|
-
|
|
2462
|
+
_context37.next = 1;
|
|
2327
2463
|
break;
|
|
2328
2464
|
}
|
|
2329
2465
|
this.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.MIDAUTHENTICATECHATFAILED, "Mid-Authenticate Chat Failed - chatId and authenticatedUserToken are required", requestId);
|
|
@@ -2347,62 +2483,62 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2347
2483
|
headers: requestHeaders,
|
|
2348
2484
|
method: method,
|
|
2349
2485
|
url: url,
|
|
2350
|
-
timeout: (_this$configuration$
|
|
2486
|
+
timeout: (_this$configuration$d19 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d19 !== void 0 ? _this$configuration$d19 : this.configuration.requestTimeoutConfig.midConversationAuthenticateChat
|
|
2351
2487
|
};
|
|
2352
|
-
return
|
|
2353
|
-
var
|
|
2354
|
-
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, headers,
|
|
2355
|
-
return _regenerator["default"].wrap(function (
|
|
2356
|
-
while (1) switch (
|
|
2488
|
+
return _context37.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2489
|
+
var _ref16 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee36(resolve, reject) {
|
|
2490
|
+
var backendTimer, response, httpRequestResponseTime, elapsedTimeInMilliseconds, headers, _httpRequestResponseTime19, _elapsedTimeInMilliseconds19, _t19;
|
|
2491
|
+
return _regenerator["default"].wrap(function (_context36) {
|
|
2492
|
+
while (1) switch (_context36.prev = _context36.next) {
|
|
2357
2493
|
case 0:
|
|
2358
2494
|
backendTimer = _Timer.Timer.TIMER();
|
|
2359
|
-
|
|
2360
|
-
|
|
2495
|
+
_context36.prev = 1;
|
|
2496
|
+
_context36.next = 2;
|
|
2361
2497
|
return axiosInstance(options);
|
|
2362
2498
|
case 2:
|
|
2363
|
-
response =
|
|
2499
|
+
response = _context36.sent;
|
|
2364
2500
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2365
2501
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2366
2502
|
headers = response.headers;
|
|
2367
|
-
|
|
2503
|
+
_this17.setAuthCodeNonce(headers);
|
|
2368
2504
|
if (headers && headers[_OmnichannelHTTPHeaders["default"].ocSessionId.toLowerCase()]) {
|
|
2369
|
-
|
|
2505
|
+
_this17.sessionId = headers[_OmnichannelHTTPHeaders["default"].ocSessionId.toLowerCase()];
|
|
2370
2506
|
}
|
|
2371
|
-
|
|
2507
|
+
_this17.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.MIDAUTHENTICATECHATSUCCEEDED, "Mid-Authenticate Chat Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2372
2508
|
resolve();
|
|
2373
|
-
|
|
2509
|
+
_context36.next = 5;
|
|
2374
2510
|
break;
|
|
2375
2511
|
case 3:
|
|
2376
|
-
|
|
2377
|
-
|
|
2378
|
-
|
|
2379
|
-
|
|
2380
|
-
|
|
2381
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
2382
|
-
|
|
2512
|
+
_context36.prev = 3;
|
|
2513
|
+
_t19 = _context36["catch"](1);
|
|
2514
|
+
_httpRequestResponseTime19 = backendTimer.milliSecondsElapsed;
|
|
2515
|
+
_elapsedTimeInMilliseconds19 = timer.milliSecondsElapsed;
|
|
2516
|
+
_this17.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.MIDAUTHENTICATECHATFAILED, "Mid-Authenticate Chat Failed", requestId, undefined, _elapsedTimeInMilliseconds19, requestPath, method, _t19, undefined, requestHeaders, _httpRequestResponseTime19);
|
|
2517
|
+
if (!(0, _isExpectedAxiosError["default"])(_t19, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2518
|
+
_context36.next = 4;
|
|
2383
2519
|
break;
|
|
2384
2520
|
}
|
|
2385
|
-
reject(new Error(
|
|
2386
|
-
return
|
|
2521
|
+
reject(new Error(_this17.HTTPTimeOutErrorMessage));
|
|
2522
|
+
return _context36.abrupt("return");
|
|
2387
2523
|
case 4:
|
|
2388
|
-
reject(
|
|
2524
|
+
reject(_t19);
|
|
2389
2525
|
case 5:
|
|
2390
2526
|
case "end":
|
|
2391
|
-
return
|
|
2527
|
+
return _context36.stop();
|
|
2392
2528
|
}
|
|
2393
|
-
},
|
|
2529
|
+
}, _callee36, null, [[1, 3]]);
|
|
2394
2530
|
}));
|
|
2395
|
-
return function (
|
|
2396
|
-
return
|
|
2531
|
+
return function (_x63, _x64) {
|
|
2532
|
+
return _ref16.apply(this, arguments);
|
|
2397
2533
|
};
|
|
2398
2534
|
}()));
|
|
2399
2535
|
case 2:
|
|
2400
2536
|
case "end":
|
|
2401
|
-
return
|
|
2537
|
+
return _context37.stop();
|
|
2402
2538
|
}
|
|
2403
|
-
},
|
|
2539
|
+
}, _callee37, this);
|
|
2404
2540
|
}));
|
|
2405
|
-
function midConversationAuthenticateChat(
|
|
2541
|
+
function midConversationAuthenticateChat(_x61, _x62) {
|
|
2406
2542
|
return _midConversationAuthenticateChat.apply(this, arguments);
|
|
2407
2543
|
}
|
|
2408
2544
|
return midConversationAuthenticateChat;
|
|
@@ -2416,12 +2552,12 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2416
2552
|
}, {
|
|
2417
2553
|
key: "getUnreadMessageCount",
|
|
2418
2554
|
value: (function () {
|
|
2419
|
-
var _getUnreadMessageCount = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2420
|
-
var _this$configuration$
|
|
2421
|
-
|
|
2555
|
+
var _getUnreadMessageCount = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee39(authenticatedUserToken) {
|
|
2556
|
+
var _this$configuration$d20,
|
|
2557
|
+
_this18 = this;
|
|
2422
2558
|
var timer, requestId, requestPath, axiosInstance, requestHeaders, url, method, options;
|
|
2423
|
-
return _regenerator["default"].wrap(function (
|
|
2424
|
-
while (1) switch (
|
|
2559
|
+
return _regenerator["default"].wrap(function (_context39) {
|
|
2560
|
+
while (1) switch (_context39.prev = _context39.next) {
|
|
2425
2561
|
case 0:
|
|
2426
2562
|
timer = _Timer.Timer.TIMER();
|
|
2427
2563
|
requestId = (0, _uuid.uuidv4)();
|
|
@@ -2442,59 +2578,59 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2442
2578
|
headers: requestHeaders,
|
|
2443
2579
|
method: method,
|
|
2444
2580
|
url: url,
|
|
2445
|
-
timeout: (_this$configuration$
|
|
2581
|
+
timeout: (_this$configuration$d20 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d20 !== void 0 ? _this$configuration$d20 : this.configuration.requestTimeoutConfig.getUnreadMessageCount
|
|
2446
2582
|
};
|
|
2447
|
-
return
|
|
2448
|
-
var
|
|
2449
|
-
var backendTimer, response, httpRequestResponseTime, data, headers, elapsedTimeInMilliseconds,
|
|
2450
|
-
return _regenerator["default"].wrap(function (
|
|
2451
|
-
while (1) switch (
|
|
2583
|
+
return _context39.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2584
|
+
var _ref17 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee38(resolve, reject) {
|
|
2585
|
+
var backendTimer, response, httpRequestResponseTime, data, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime20, _elapsedTimeInMilliseconds20, _t20;
|
|
2586
|
+
return _regenerator["default"].wrap(function (_context38) {
|
|
2587
|
+
while (1) switch (_context38.prev = _context38.next) {
|
|
2452
2588
|
case 0:
|
|
2453
2589
|
backendTimer = _Timer.Timer.TIMER();
|
|
2454
|
-
|
|
2455
|
-
|
|
2590
|
+
_context38.prev = 1;
|
|
2591
|
+
_context38.next = 2;
|
|
2456
2592
|
return axiosInstance(options);
|
|
2457
2593
|
case 2:
|
|
2458
|
-
response =
|
|
2594
|
+
response = _context38.sent;
|
|
2459
2595
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2460
2596
|
data = response.data, headers = response.headers;
|
|
2461
|
-
|
|
2597
|
+
_this18.setAuthCodeNonce(headers);
|
|
2462
2598
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2463
|
-
|
|
2599
|
+
_this18.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETUNREADMESSAGECOUNTSUCCEEDED, "Get Unread Message Count Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2464
2600
|
resolve(data);
|
|
2465
|
-
|
|
2601
|
+
_context38.next = 5;
|
|
2466
2602
|
break;
|
|
2467
2603
|
case 3:
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
2474
|
-
|
|
2604
|
+
_context38.prev = 3;
|
|
2605
|
+
_t20 = _context38["catch"](1);
|
|
2606
|
+
_httpRequestResponseTime20 = backendTimer.milliSecondsElapsed;
|
|
2607
|
+
_elapsedTimeInMilliseconds20 = timer.milliSecondsElapsed;
|
|
2608
|
+
_this18.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETUNREADMESSAGECOUNTFAILED, "Get Unread Message Count Failed", requestId, undefined, _elapsedTimeInMilliseconds20, requestPath, method, _t20, undefined, requestHeaders, _httpRequestResponseTime20);
|
|
2609
|
+
if (!(0, _isExpectedAxiosError["default"])(_t20, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2610
|
+
_context38.next = 4;
|
|
2475
2611
|
break;
|
|
2476
2612
|
}
|
|
2477
|
-
reject(new Error(
|
|
2478
|
-
return
|
|
2613
|
+
reject(new Error(_this18.HTTPTimeOutErrorMessage));
|
|
2614
|
+
return _context38.abrupt("return");
|
|
2479
2615
|
case 4:
|
|
2480
|
-
reject(
|
|
2616
|
+
reject(_t20);
|
|
2481
2617
|
case 5:
|
|
2482
2618
|
case "end":
|
|
2483
|
-
return
|
|
2619
|
+
return _context38.stop();
|
|
2484
2620
|
}
|
|
2485
|
-
},
|
|
2621
|
+
}, _callee38, null, [[1, 3]]);
|
|
2486
2622
|
}));
|
|
2487
|
-
return function (
|
|
2488
|
-
return
|
|
2623
|
+
return function (_x66, _x67) {
|
|
2624
|
+
return _ref17.apply(this, arguments);
|
|
2489
2625
|
};
|
|
2490
2626
|
}()));
|
|
2491
2627
|
case 1:
|
|
2492
2628
|
case "end":
|
|
2493
|
-
return
|
|
2629
|
+
return _context39.stop();
|
|
2494
2630
|
}
|
|
2495
|
-
},
|
|
2631
|
+
}, _callee39, this);
|
|
2496
2632
|
}));
|
|
2497
|
-
function getUnreadMessageCount(
|
|
2633
|
+
function getUnreadMessageCount(_x65) {
|
|
2498
2634
|
return _getUnreadMessageCount.apply(this, arguments);
|
|
2499
2635
|
}
|
|
2500
2636
|
return getUnreadMessageCount;
|
|
@@ -2510,12 +2646,12 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2510
2646
|
}, {
|
|
2511
2647
|
key: "sendReadReceipt",
|
|
2512
2648
|
value: (function () {
|
|
2513
|
-
var _sendReadReceipt = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function
|
|
2514
|
-
var _this$configuration$
|
|
2515
|
-
|
|
2649
|
+
var _sendReadReceipt = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee41(requestId, messageId, authenticatedUserToken) {
|
|
2650
|
+
var _this$configuration$d21,
|
|
2651
|
+
_this19 = this;
|
|
2516
2652
|
var timer, requestPath, axiosInstance, requestHeaders, url, method, options;
|
|
2517
|
-
return _regenerator["default"].wrap(function (
|
|
2518
|
-
while (1) switch (
|
|
2653
|
+
return _regenerator["default"].wrap(function (_context41) {
|
|
2654
|
+
while (1) switch (_context41.prev = _context41.next) {
|
|
2519
2655
|
case 0:
|
|
2520
2656
|
timer = _Timer.Timer.TIMER();
|
|
2521
2657
|
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SENDREADRECEIPTSTARTED, "Send Read Receipt Started", requestId);
|
|
@@ -2538,59 +2674,59 @@ var SDK = exports["default"] = /*#__PURE__*/function () {
|
|
|
2538
2674
|
headers: requestHeaders,
|
|
2539
2675
|
method: method,
|
|
2540
2676
|
url: url,
|
|
2541
|
-
timeout: (_this$configuration$
|
|
2677
|
+
timeout: (_this$configuration$d21 = this.configuration.defaultRequestTimeout) !== null && _this$configuration$d21 !== void 0 ? _this$configuration$d21 : this.configuration.requestTimeoutConfig.sendReadReceipt
|
|
2542
2678
|
};
|
|
2543
|
-
return
|
|
2544
|
-
var
|
|
2545
|
-
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds,
|
|
2546
|
-
return _regenerator["default"].wrap(function (
|
|
2547
|
-
while (1) switch (
|
|
2679
|
+
return _context41.abrupt("return", new Promise(/*#__PURE__*/function () {
|
|
2680
|
+
var _ref18 = (0, _asyncToGenerator2["default"])(/*#__PURE__*/_regenerator["default"].mark(function _callee40(resolve, reject) {
|
|
2681
|
+
var backendTimer, response, httpRequestResponseTime, headers, elapsedTimeInMilliseconds, _httpRequestResponseTime21, _elapsedTimeInMilliseconds21, _t21;
|
|
2682
|
+
return _regenerator["default"].wrap(function (_context40) {
|
|
2683
|
+
while (1) switch (_context40.prev = _context40.next) {
|
|
2548
2684
|
case 0:
|
|
2549
2685
|
backendTimer = _Timer.Timer.TIMER();
|
|
2550
|
-
|
|
2551
|
-
|
|
2686
|
+
_context40.prev = 1;
|
|
2687
|
+
_context40.next = 2;
|
|
2552
2688
|
return axiosInstance(options);
|
|
2553
2689
|
case 2:
|
|
2554
|
-
response =
|
|
2690
|
+
response = _context40.sent;
|
|
2555
2691
|
httpRequestResponseTime = backendTimer.milliSecondsElapsed;
|
|
2556
2692
|
headers = response.headers;
|
|
2557
|
-
|
|
2693
|
+
_this19.setAuthCodeNonce(headers);
|
|
2558
2694
|
elapsedTimeInMilliseconds = timer.milliSecondsElapsed;
|
|
2559
|
-
|
|
2695
|
+
_this19.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.SENDREADRECEIPTSUCCEEDED, "Send Read Receipt Succeeded", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders, httpRequestResponseTime);
|
|
2560
2696
|
resolve();
|
|
2561
|
-
|
|
2697
|
+
_context40.next = 5;
|
|
2562
2698
|
break;
|
|
2563
2699
|
case 3:
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2567
|
-
|
|
2568
|
-
|
|
2569
|
-
if (!(0, _isExpectedAxiosError["default"])(
|
|
2570
|
-
|
|
2700
|
+
_context40.prev = 3;
|
|
2701
|
+
_t21 = _context40["catch"](1);
|
|
2702
|
+
_httpRequestResponseTime21 = backendTimer.milliSecondsElapsed;
|
|
2703
|
+
_elapsedTimeInMilliseconds21 = timer.milliSecondsElapsed;
|
|
2704
|
+
_this19.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.SENDREADRECEIPTFAILED, "Send Read Receipt Failed", requestId, undefined, _elapsedTimeInMilliseconds21, requestPath, method, _t21, undefined, requestHeaders, _httpRequestResponseTime21);
|
|
2705
|
+
if (!(0, _isExpectedAxiosError["default"])(_t21, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
2706
|
+
_context40.next = 4;
|
|
2571
2707
|
break;
|
|
2572
2708
|
}
|
|
2573
|
-
reject(new Error(
|
|
2574
|
-
return
|
|
2709
|
+
reject(new Error(_this19.HTTPTimeOutErrorMessage));
|
|
2710
|
+
return _context40.abrupt("return");
|
|
2575
2711
|
case 4:
|
|
2576
|
-
reject(
|
|
2712
|
+
reject(_t21);
|
|
2577
2713
|
case 5:
|
|
2578
2714
|
case "end":
|
|
2579
|
-
return
|
|
2715
|
+
return _context40.stop();
|
|
2580
2716
|
}
|
|
2581
|
-
},
|
|
2717
|
+
}, _callee40, null, [[1, 3]]);
|
|
2582
2718
|
}));
|
|
2583
|
-
return function (
|
|
2584
|
-
return
|
|
2719
|
+
return function (_x71, _x72) {
|
|
2720
|
+
return _ref18.apply(this, arguments);
|
|
2585
2721
|
};
|
|
2586
2722
|
}()));
|
|
2587
2723
|
case 1:
|
|
2588
2724
|
case "end":
|
|
2589
|
-
return
|
|
2725
|
+
return _context41.stop();
|
|
2590
2726
|
}
|
|
2591
|
-
},
|
|
2727
|
+
}, _callee41, this);
|
|
2592
2728
|
}));
|
|
2593
|
-
function sendReadReceipt(
|
|
2729
|
+
function sendReadReceipt(_x68, _x69, _x70) {
|
|
2594
2730
|
return _sendReadReceipt.apply(this, arguments);
|
|
2595
2731
|
}
|
|
2596
2732
|
return sendReadReceipt;
|
|
@@ -2712,7 +2848,8 @@ _SDK = SDK;
|
|
|
2712
2848
|
getPersistentChatHistory: 15000,
|
|
2713
2849
|
midConversationAuthenticateChat: 15000,
|
|
2714
2850
|
getUnreadMessageCount: 15000,
|
|
2715
|
-
sendReadReceipt: 5000
|
|
2851
|
+
sendReadReceipt: 5000,
|
|
2852
|
+
renewChatToken: 15000
|
|
2716
2853
|
});
|
|
2717
2854
|
(0, _defineProperty2["default"])(SDK, "defaultConfiguration", {
|
|
2718
2855
|
authCodeNonce: (0, _uuid.uuidv4)().substring(0, 8),
|
|
@@ -2727,4 +2864,4 @@ _SDK = SDK;
|
|
|
2727
2864
|
waitTimeBetweenRetriesConfig: _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs,
|
|
2728
2865
|
ocUserAgent: []
|
|
2729
2866
|
});
|
|
2730
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjEiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJyZXRyeUNvdW50IiwiX2FyZ3MyIiwiX3QyIiwiX2NvbnRleHQyIiwiR0VUQ0hBVENPTkZJR0ZTVEFSVEVEIiwidXVpZHY0IiwiTGl2ZUNoYXRDb25maWdQYXRoIiwid2lkZ2V0SWQiLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjkiLCJhZGREZWZhdWx0SGVhZGVycyIsImJ5cGFzc0NhY2hlSGVhZGVycyIsIkdFVENIQVRDT05GSUdTVUNDRUVERUQiLCJnZXRSZXRyeUNvdW50IiwiY29uZmlnIiwiR0VUQ0hBVENPTkZJR0ZBSUxFRCIsIlByb21pc2UiLCJyZWplY3QiLCJfeCIsIl9nZXRMV0lEZXRhaWxzIiwiX2NhbGxlZTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQzIiwiX3RoaXMyIiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwic2hvdWxkVXNlU2lnUXVlcnlQYXJhbSIsInBhcmFtcyIsIm9wdGlvbnMiLCJfYXJnczQiLCJfY29udGV4dDQiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIiwiaGVhZGVyT3ZlcndyaXRlcyIsImdldExXSURldGFpbHMiLCJkZWZhdWx0SGVhZGVycyIsIkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwic2lnIiwiX3JlZiIsIl9jYWxsZWUzIiwicmVzb2x2ZSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczMiLCJfdDMiLCJfY29udGV4dDMiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiR0VUTFdJU1RBVFVTRkFJTEVEIiwiaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsIl94MyIsIl94NCIsIl94MiIsIl9nZXRDaGF0VG9rZW4iLCJfY2FsbGVlNiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDQiLCJfdGhpczMiLCJnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyIsImN1cnJlbnRSZXRyeUNvdW50IiwiY3VycmVudExpdmVDaGF0VmVyc2lvbiIsInJlZnJlc2hUb2tlbiIsIk1zT2NCb3RBcHBsaWNhdGlvbklkIiwibXVsdGlCb3QiLCJlbmRwb2ludCIsIl9hcmdzNiIsIl9jb250ZXh0NiIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCIsImdldENoYXRUb2tlbiIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJfcmVmMiIsIl9jYWxsZWU1IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNCIsIl90NCIsIl9jb250ZXh0NSIsInRvTG93ZXJDYXNlIiwiR0VUQ0hBVFRPS0VOU1VDQ0VFREVEIiwic3RhdHVzIiwibm9Db250ZW50U3RhdHVzQ29kZSIsIkdFVENIQVRUT0tFTkZBSUxFRCIsIl94NiIsIl94NyIsIl94NSIsIl9nZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfY2FsbGVlOCIsInJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDUiLCJfdGhpczQiLCJfY29udGV4dDgiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVEIiwiTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwiX3JlZjMiLCJfY2FsbGVlNyIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczUiLCJfdDUiLCJfY29udGV4dDciLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVUNDRUVERUQiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNGQUlMRUQiLCJfeDkiLCJfeDAiLCJfeDgiLCJfZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiX2NhbGxlZTAiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ2IiwiX3RoaXM1Iiwib3B0aW9uYWxQYXJhbXMiLCJfYXJnczAiLCJfY29udGV4dDAiLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVEFSVEVEIiwiTGl2ZUNoYXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5IiwiX3JlZjQiLCJfY2FsbGVlOSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTYiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczYiLCJfdDYiLCJfY29udGV4dDkiLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJXQVJOIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZRkFJTEVEIiwiX3gxMCIsIl94MTEiLCJfeDEiLCJfZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJfY2FsbGVlMTAiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ3IiwiX3RoaXM2IiwicXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyIsImluaXRDb250ZXh0IiwiZ2V0Q29udGV4dCIsImNhY2hPYmoiLCJ0ZW1wQXJyIiwiX2FyZ3MxMCIsIl9jb250ZXh0MTAiLCJHRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQiLCJHZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGgiLCJnZXRBZ2VudEF2YWlsYWJpbGl0eSIsImN1c3RvbUNvbnRleHREYXRhIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJTSEEyNTYiLCJKU09OIiwic3RyaW5naWZ5IiwiSGV4Iiwid2luZG93IiwiZG9jdW1lbnQiLCJicm93c2VyIiwiQnJvd3NlckluZm8iLCJnZXRCcm93c2VyTmFtZSIsImRldmljZSIsIkRldmljZUluZm8iLCJnZXREZXZpY2VUeXBlIiwib3JpZ2ludXJsIiwibG9jYXRpb24iLCJocmVmIiwib3MiLCJPU0luZm8iLCJnZXRPc1R5cGUiLCJsb2NhbGUiLCJkZWZhdWx0TG9jYWxlIiwiTG9jYWxlcyIsInN1cHBvcnRlZExvY2FsZXMiLCJfcmVmNSIsIl9jYWxsZWUxIiwiX2RhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM3IiwiX3Q3IiwiX2NvbnRleHQxIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCIsIl94MTMiLCJfeDE0IiwiX3gxMiIsIl9zZXNzaW9uSW5pdCIsIl9jYWxsZWUxMiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDgiLCJfdGhpczciLCJzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIiwiYmFzZVBhdGgiLCJfYXJnczEyIiwiX2NvbnRleHQxMiIsIlNFU1NJT05JTklUU1RBUlRFRCIsInNlc3Npb25Jbml0Iiwic2hvdWxkUmV0cnkiLCJlcnJvciIsInNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkluaXRQYXRoIiwiTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGgiLCJzZXRSZXF1ZXN0SWRIZWFkZXIiLCJfcmVmNiIsIl9jYWxsZWUxMSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTgiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczgiLCJfdDgiLCJfY29udGV4dDExIiwiU0VTU0lPTklOSVRTVUNDRUVERUQiLCJTRVNTSU9OSU5JVEZBSUxFRCIsIl94MTYiLCJfeDE3IiwiX3gxNSIsIl9jcmVhdGVDb252ZXJzYXRpb24iLCJfY2FsbGVlMTMiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ5IiwiX2RhdGEyIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOSIsIl9hcmdzMTMiLCJfdDkiLCJfY29udGV4dDEzIiwiQ1JFQVRFU0VTU0lPTlNUQVJURUQiLCJMaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRoIiwiTGl2ZUNoYXRDb25uZWN0b3JQYXRoIiwiQ1JFQVRFU0VTU0lPTlNVQ0NFRURFRCIsIkNSRUFURVNFU1NJT05GQUlMRUQiLCJjcmVhdGVDb252ZXJzYXRpb24iLCJfeDE4IiwiX3Nlc3Npb25DbG9zZSIsIl9jYWxsZWUxNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDAiLCJfdGhpczgiLCJzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyIsImlzUmVjb25uZWN0Q2hhdCIsImlzUGVyc2lzdGVudENoYXQiLCJjaGF0SWQiLCJfYXJnczE1IiwiX2NvbnRleHQxNSIsIlNFU1NJT05DTE9TRVNUQVJURUQiLCJMaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGgiLCJzZXNzaW9uQ2xvc2UiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRoIiwiX3JlZjciLCJfY2FsbGVlMTQiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMwIiwiX3QwIiwiX2NvbnRleHQxNCIsIlNFU1NJT05DTE9TRVNVQ0NFRURFRCIsIlNFU1NJT05DTE9TRUZBSUxFRCIsImNvZGUiLCJfeDIwIiwiX3gyMSIsIl94MTkiLCJfdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsIl9jYWxsZWUxNyIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEiLCJfdGhpczkiLCJfY29udGV4dDE3IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiX3JlZjgiLCJfY2FsbGVlMTYiLCJfcmVzcG9uc2UkZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEiLCJfdDEiLCJfY29udGV4dDE2IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwiX3gyNCIsIl94MjUiLCJfeDIyIiwiX3gyMyIsIl9zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiX2NhbGxlZTE5IiwicG9zdENoYXRSZXNwb25zZSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEwIiwiX3RoaXMwIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MxOSIsIl9jb250ZXh0MTkiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJMaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aCIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJfcmVmOSIsIl9jYWxsZWUxOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMCIsIl90MTAiLCJfY29udGV4dDE4IiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsIl94MjgiLCJfeDI5IiwiX3gyNiIsIl94MjciLCJfZ2V0U3VydmV5SW52aXRlTGluayIsIl9jYWxsZWUyMSIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDExIiwiX3RoaXMxIiwiZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJsb2ciLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCIsIlN1cnZleU93bmVySWQiLCJMaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwid2lkZ2V0QXBwSWQiLCJfcmVmMCIsIl9jYWxsZWUyMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTExIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMSIsIl90MTEiLCJfY29udGV4dDIwIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCIsIkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQiLCJfeDMyIiwiX3gzMyIsIl94MzAiLCJfeDMxIiwiX2dldENoYXRUcmFuc2NyaXB0cyIsIl9jYWxsZWUyMyIsInRva2VuIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTIiLCJfdGhpczEwIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJfYXJnczIzIiwiX2NvbnRleHQyMyIsIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzIiwib3JnYW5pemF0aW9uSWQiLCJhdXRob3JpemF0aW9uIiwiTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiX3JlZjEiLCJfY2FsbGVlMjIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxMiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTIiLCJfdDEyIiwiX2NvbnRleHQyMiIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDM3IiwiX3gzOCIsIl94MzQiLCJfeDM1IiwiX3gzNiIsIl9nZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnkiLCJfY2FsbGVlMjUiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxMyIsIl90aGlzMTEiLCJnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyIsInBhZ2VTaXplIiwicGFnZVRva2VuIiwiZXJyb3JNZXNzYWdlIiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVEIiwiR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZRkFJTEVEIiwiTGl2ZUNoYXRBdXRoR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5UGF0aCIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9yZWYxMCIsIl9jYWxsZWUyNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMyIsIl90MTMiLCJfY29udGV4dDI0IiwiR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZU1VDQ0VFREVEIiwiX3g0MCIsIl94NDEiLCJfeDM5IiwiX2VtYWlsVHJhbnNjcmlwdCIsIl9jYWxsZWUyNyIsImVtYWlsUmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNCIsIl90aGlzMTIiLCJlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjciLCJfY29udGV4dDI3IiwiRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJlbWFpbFRyYW5zY3JpcHQiLCJMaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsIl9yZWYxMSIsIl9jYWxsZWUyNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE0IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxNCIsIl90MTQiLCJfY29udGV4dDI2IiwiRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVEIiwiRU1BSUxUUkFOU0NSSVBURkFJTEVEIiwiX3g0NSIsIl94NDYiLCJfeDQyIiwiX3g0MyIsIl94NDQiLCJfZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfY2FsbGVlMjkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNSIsIl90aGlzMTMiLCJfY29udGV4dDI5IiwiRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsImZldGNoRGF0YU1hc2tpbmdJbmZvIiwiX3JlZjEyIiwiX2NhbGxlZTI4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE1IiwiX3QxNSIsIl9jb250ZXh0MjgiLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsIl94NDgiLCJfeDQ5IiwiX3g0NyIsIl9tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIl9jYWxsZWUzMSIsInNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTYiLCJfdGhpczE0Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMiLCJfYXJnczMxIiwiX2NvbnRleHQzMSIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVEIiwiTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoIiwibWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QiLCJMaXZlQ2hhdEF1dGhTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRoIiwiZGVmYXVsdENoYW5uZWxJZCIsIl9yZWYxMyIsIl9jYWxsZWUzMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE2IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxNiIsIl90MTYiLCJfY29udGV4dDMwIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQiLCJfeDUyIiwiX3g1MyIsIl94NTAiLCJfeDUxIiwiX3NlbmRUeXBpbmdJbmRpY2F0b3IiLCJfY2FsbGVlMzMiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNyIsIl90aGlzMTUiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiX2FyZ3MzMyIsIl9jb250ZXh0MzMiLCJTZW5kVHlwaW5nSW5kaWNhdG9yUGF0aCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJfcmVmMTQiLCJfY2FsbGVlMzIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNyIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTciLCJfdDE3IiwiX2NvbnRleHQzMiIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQiLCJTRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVEIiwiX3g1NiIsIl94NTciLCJfeDU0IiwiX3g1NSIsIl9taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX2NhbGxlZTM1IiwiYXV0aGVudGljYXRlQ2hhdFBhcmFtcyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE4IiwiX3RoaXMxNiIsIl9jb250ZXh0MzUiLCJNSURBVVRIRU5USUNBVEVDSEFUU1RBUlRFRCIsIk1JREFVVEhFTlRJQ0FURUNIQVRGQUlMRUQiLCJMaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRoIiwibWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdCIsIl9yZWYxNSIsIl9jYWxsZWUzNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOCIsIl90MTgiLCJfY29udGV4dDM0IiwiTUlEQVVUSEVOVElDQVRFQ0hBVFNVQ0NFRURFRCIsIl94NjAiLCJfeDYxIiwiX3g1OCIsIl94NTkiLCJfZ2V0VW5yZWFkTWVzc2FnZUNvdW50IiwiX2NhbGxlZTM3IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTkiLCJfdGhpczE3IiwiX2NvbnRleHQzNyIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQiLCJnZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfcmVmMTYiLCJfY2FsbGVlMzYiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTkiLCJfdDE5IiwiX2NvbnRleHQzNiIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCIsIkdFVFVOUkVBRE1FU1NBR0VDT1VOVEZBSUxFRCIsIl94NjMiLCJfeDY0IiwiX3g2MiIsIl9zZW5kUmVhZFJlY2VpcHQiLCJfY2FsbGVlMzkiLCJtZXNzYWdlSWQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQyMCIsIl90aGlzMTgiLCJfY29udGV4dDM5IiwiU0VORFJFQURSRUNFSVBUU1RBUlRFRCIsInNlbmRSZWFkUmVjZWlwdCIsIl9yZWYxNyIsIl9jYWxsZWUzOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMyMCIsIl90MjAiLCJfY29udGV4dDM4IiwiU0VORFJFQURSRUNFSVBUU1VDQ0VFREVEIiwiU0VORFJFQURSRUNFSVBURkFJTEVEIiwiX3g2OCIsIl94NjkiLCJfeDY1IiwiX3g2NiIsIl94NjciLCJsb2dMZXZlbCIsInRlbGVtZXRyeUV2ZW50VHlwZSIsImRlc2NyaXB0aW9uIiwicmVxdWVzdFBheWxvYWQiLCJfcmVzcG9uc2UiLCJfcmVzcG9uc2UyIiwiX3Jlc3BvbnNlMyIsIkxvZ2dpbmdTYW5pdGl6ZXIiLCJzdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyIsInNhbml0aXplZFJlcXVlc3RQYXlsb2FkIiwic3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyIsInByZUNoYXRSZXNwb25zZSIsInN0cmlwUHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBHZW9sb2NhdGlvbiIsInNhbml0aXplZFJlcXVlc3RIZWFkZXJzIiwiYXV0aFRva2VuRGV0YWlscyIsInN0cmlwUmVxdWVzdEhlYWRlcnNTZW5zaXRpdmVQcm9wZXJ0aWVzIiwiYXRvYiIsInBheWxvYWQiLCJzcGxpdCIsImpzb25EYXRhIiwicGFyc2UiLCJsd2lDb250ZXh0cyIsInN1YiIsImV4cCIsImx3aUNvbnRleHRzRGF0YSIsIl91bnVzZWQiLCJjdXN0b21EYXRhIiwiUmVxdWVzdElkIiwiUmVnaW9uIiwiRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIkh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiVHJhbnNhY3Rpb25JZCIsInRyYW5zYWN0aW9uaWQiLCJSZXF1ZXN0UGF0aCIsIlJlcXVlc3RNZXRob2QiLCJSZXNwb25zZVN0YXR1c0NvZGUiLCJFeGNlcHRpb25EZXRhaWxzIiwiUmVxdWVzdFBheWxvYWQiLCJSZXF1ZXN0SGVhZGVycyIsIlJlc3BvbnNlRXJyb3Jjb2RlIiwiZXJyb3Jjb2RlIiwiQXV0aFRva2VuRGV0YWlscyIsIlJldHJ5Q291bnQiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIiLCJzdWJzdHJpbmciLCJnZXRDaGF0VG9rZW5SZXRyeUNvdW50IiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiXSwic291cmNlUm9vdCI6Im9jc2RrOi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL1NESy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiwgT0NTREtUZWxlbWV0cnlFdmVudCwgU0RLRXJyb3IgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvc1JldHJ5SGFuZGxlciwgeyBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCwgZ2V0UmV0cnlDb3VudCB9IGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBIZXggZnJvbSBcImNyeXB0by1qcy9lbmMtaGV4XCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJU0RLIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES1wiO1xuaW1wb3J0IElTREtDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES0NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtc1wiXG5pbXBvcnQgSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJbml0Q29udGV4dCBmcm9tIFwiLi9Nb2RlbC9Jbml0Q29udGV4dFwiO1xuaW1wb3J0IExvY2FsZXMgZnJvbSBcIi4vQ29tbW9uL0xvY2FsZXNcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vTW9kZWwvTG9nTGV2ZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTYW5pdGl6ZXIgfSBmcm9tIFwiLi9VdGlscy9Mb2dnaW5nU2FuaXRpemVyXCI7XG5pbXBvcnQgT0NTREtMb2dnZXIgZnJvbSBcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCI7XG5pbXBvcnQgeyBPU0luZm8gfSBmcm9tIFwiLi9VdGlscy9PU0luZm9cIjtcbmltcG9ydCBPbW5pY2hhbm5lbEVuZHBvaW50cyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxFbmRwb2ludHNcIjtcbmltcG9ydCBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciBmcm9tIFwiLi9JbnRlcmZhY2VzL09tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXJcIjtcbmltcG9ydCBRdWV1ZUF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9RdWV1ZUF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdEF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIGZyb20gXCIuL01vZGVsL1JlY29ubmVjdE1hcHBpbmdSZWNvcmRcIjtcbmltcG9ydCB7IFJlcXVlc3RUaW1lb3V0Q29uZmlnIH0gZnJvbSBcIi4vQ29tbW9uL1JlcXVlc3RUaW1lb3V0Q29uZmlnXCI7XG5pbXBvcnQgU0hBMjU2IGZyb20gXCJjcnlwdG8tanMvc2hhMjU2XCI7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tIFwiLi9Db21tb24vTWFwcGluZ3NcIjtcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSBcIi4vVXRpbHMvVGltZXJcIjtcbmltcG9ydCB7IGFkZE9jVXNlckFnZW50SGVhZGVyIH0gZnJvbSBcIi4vVXRpbHMvaHR0cEhlYWRlcnNVdGlsc1wiO1xuaW1wb3J0IHsgY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQgfSBmcm9tIFwiLi9VdGlscy9lbmRwb2ludHNDcmVhdG9yc1wiO1xuaW1wb3J0IGlzRXhwZWN0ZWRBeGlvc0Vycm9yIGZyb20gXCIuL1V0aWxzL2lzRXhwZWN0ZWRBeGlvc0Vycm9yXCI7XG5pbXBvcnQgc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIgZnJvbSBcIi4vVXRpbHMvU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXJcIjtcbmltcG9ydCB7IHV1aWR2NCB9IGZyb20gXCIuL1V0aWxzL3V1aWRcIjtcbmltcG9ydCB7IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzIH0gZnJvbSBcIi4vVXRpbHMvd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3NcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU0RLIGltcGxlbWVudHMgSVNESyB7XG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZzogUmVxdWVzdFRpbWVvdXRDb25maWcgPSB7XG4gICAgZ2V0Q2hhdENvbmZpZzogMTIwMDAwLFxuICAgIGdldExXSURldGFpbHM6IDE1MDAwLFxuICAgIGdldENoYXRUb2tlbjogMTUwMDAsXG4gICAgc2Vzc2lvbkluaXQ6IDE1MDAwLFxuICAgIHNlc3Npb25DbG9zZTogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0YWJsZUNoYXRzOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2U6IDE1MDAwLFxuICAgIGdldFN1cnZleUludml0ZUxpbms6IDE1MDAwLFxuICAgIGdldENoYXRUcmFuc2NyaXB0czogMzAwMDAsXG4gICAgZW1haWxUcmFuc2NyaXB0OiA1MDAwLFxuICAgIGZldGNoRGF0YU1hc2tpbmdJbmZvOiA1MDAwLFxuICAgIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0OiAxNTAwMCxcbiAgICBnZXRBZ2VudEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc2VuZFR5cGluZ0luZGljYXRvcjogNTAwMCxcbiAgICB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dDogMTUwMDAsXG4gICAgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5OiAxNTAwMCxcbiAgICBtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0OiAxNTAwMCxcbiAgICBnZXRVbnJlYWRNZXNzYWdlQ291bnQ6IDE1MDAwLFxuICAgIHNlbmRSZWFkUmVjZWlwdDogNTAwMFxuICB9O1xuXG4gIHByaXZhdGUgc3RhdGljIGRlZmF1bHRDb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IHtcbiAgICBhdXRoQ29kZU5vbmNlOiB1dWlkdjQoKS5zdWJzdHJpbmcoMCwgOCksXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlDb3VudDogMTAsXG4gICAgZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlOiAxMDAwMCxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeU9uNDI5OiB0cnVlLFxuICAgIGdldENoYXRDb25maWdSZXRyeU9uNDI5OiB0cnVlLFxuICAgIG1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlOiA1LFxuICAgIGRlZmF1bHRSZXF1ZXN0VGltZW91dDogdW5kZWZpbmVkLFxuICAgIHJlcXVlc3RUaW1lb3V0Q29uZmlnOiBTREsuZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnLFxuICAgIHVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbTogZmFsc2UsXG4gICAgd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZzogd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MsXG4gICAgb2NVc2VyQWdlbnQ6IFtdXG4gIH07XG5cbiAgbGl2ZUNoYXRWZXJzaW9uOiBudW1iZXI7XG4gIHNlc3Npb25JZD86IHN0cmluZztcbiAgb2NVc2VyQWdlbnQ6IHN0cmluZ1tdO1xuICBIVFRQVGltZU91dEVycm9yTWVzc2FnZSA9IGAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lfTogJHtTREtFcnJvci5DbGllbnRIVFRQVGltZW91dEVycm9yTWVzc2FnZX1gO1xuXG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgb21uaWNoYW5uZWxDb25maWd1cmF0aW9uOiBJT21uaWNoYW5uZWxDb25maWd1cmF0aW9uLCBwcml2YXRlIGNvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uLCBwcml2YXRlIGxvZ2dlcj86IE9DU0RLTG9nZ2VyKSB7XG4gICAgLy8gU2V0cyB0byBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaWYgcGFzc2VkIGNvbmZpZ3VyYXRpb24gaXMgZW1wdHkgb3IgaXMgbm90IGFuIG9iamVjdFxuICAgIGlmICghT2JqZWN0LmtleXModGhpcy5jb25maWd1cmF0aW9uKS5sZW5ndGggfHwgdHlwZW9mIChjb25maWd1cmF0aW9uKSAhPT0gXCJvYmplY3RcIikge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIFNESyBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbltgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGluZGl2aWR1YWwgZW5kcG9pbnRUaW1lb3V0IGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICAgIHRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBjaGFubmVsSWRcbiAgICBjb25zdCB7IGNoYW5uZWxJZCB9ID0gb21uaWNoYW5uZWxDb25maWd1cmF0aW9uO1xuICAgIGlmICghT2JqZWN0LnZhbHVlcyhDaGFubmVsSWQpLmluY2x1ZGVzKGNoYW5uZWxJZCBhcyBDaGFubmVsSWQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2hhbm5lbElkYCk7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgT0MgY29uZmlnXG4gICAgY29uc3QgY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24pO1xuICAgIGZvciAoY29uc3Qga2V5IG9mIENvbnN0YW50cy5yZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMpIHtcbiAgICAgIGlmICghY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgJyR7a2V5fScgaW4gT21uaWNoYW5uZWxDb25maWd1cmF0aW9uYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5vY1VzZXJBZ2VudCA9IHRoaXMuY29uZmlndXJhdGlvbi5vY1VzZXJBZ2VudDtcbiAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IExpdmVDaGF0VmVyc2lvbi5WMjtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTENXIEZDUyBEZXRhaWxzIG9mIHRoZSBPcmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGN3RmNzRGV0YWlscygpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU1NUQVJURUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdGFydGVkXCIsIFwiXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGN3RmNzRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1VDQ0VFREVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgc3VjY2VlZGVkXCIsIFwiXCIsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU0ZBSUxFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIGZhaWxlZFwiLCBcIlwiLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBjaGF0IGNvbmZpZy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0Q29uZmlnKHJlcXVlc3RJZDogc3RyaW5nLCBieXBhc3NDYWNoZSA9IGZhbHNlKTogUHJvbWlzZTxvYmplY3QgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdGU1RBUlRFRCwgXCJHZXQgQ2hhdCBjb25maWcgc3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbmZpZ1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9P3JlcXVlc3RJZD0ke3JlcXVlc3RJZH0mY2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICByZXRyeU9uNDI5OiB0aGlzLmNvbmZpZ3VyYXRpb24uZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgIH0pO1xuXG4gICAgbGV0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChieXBhc3NDYWNoZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7IC4uLkNvbnN0YW50cy5ieXBhc3NDYWNoZUhlYWRlcnMsIC4uLnJlcXVlc3RIZWFkZXJzIH07XG4gICAgfVxuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcblxuICAgICAgLy8gQWRkIHR5cGUgZ3VhcmQgdG8gcHJldmVudCBUeXBlRXJyb3Igd2hlbiBiYWNrZW5kIHJldHVybnMgbm9uLW9iamVjdCAoZS5nLiwgZW1wdHkgc3RyaW5nLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICBpZiAodHlwZW9mIGRhdGEgPT09IFwib2JqZWN0XCIgJiYgZGF0YSAhPT0gbnVsbCkge1xuICAgICAgICBpZiAoZGF0YS5MaXZlQ2hhdFZlcnNpb24pIHtcbiAgICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5oZWFkZXJzID0ge307XG4gICAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICAgICAgZGF0YS5oZWFkZXJzW1wiZGF0ZVwiXSA9IHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHU1VDQ0VFREVELCBcIkdldCBDaGF0IGNvbmZpZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSwgZ2V0UmV0cnlDb3VudChyZXNwb25zZT8uY29uZmlnKSk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCByZXRyeUNvdW50ID0gZ2V0UmV0cnlDb3VudCgoZXJyb3IgYXMgQXhpb3NFcnJvcik/LmNvbmZpZyk7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZBSUxFRCwgXCJHZXQgQ2hhdCBjb25maWcgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUsIHJldHJ5Q291bnQpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMV0kgZGV0YWlscy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExXSURldGFpbHMocmVxdWVzdElkOiBzdHJpbmcsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgXCJHZXQgTFdJIERldGFpbHMgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCBhIGVuZHBvaW50IGZvciBhbm9ueW1vdXMgY2hhdHMgdG8gZ2V0IExXSSBEZXRhaWxzXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldExXSURldGFpbHMsXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYWN0IGF1dGggdG9rZW4gYW5kIHJlY29ubmVjdCBpZCBmcm9tIG9wdGlvbmFsIHBhcmFtXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZWNvbm5lY3RJZCB9ID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgLy8gdXBkYXRlZCBhdXRoIGVuZHBvaW50IGZvciBhdXRoZW50aWNhdGVkIGNoYXRzIGFuZCBhZGQgYXV0aCB0b2tlbiBpbiBoZWFkZXJcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH07XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRMV0lEZXRhaWxzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU1NVQ0NFRURFRCwgXCJHZXQgTFdJIERldGFpbHMgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU0ZBSUxFRCwgXCJHZXQgTFdJIERldGFpbHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3IgZ2V0Y2hhdHRva2VuIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge30sIGN1cnJlbnRSZXRyeUNvdW50OiBudW1iZXIgPSAwKTogUHJvbWlzZTxGZXRjaENoYXRUb2tlblJlc3BvbnNlPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiwgcmVmcmVzaFRva2VuLCBNc09jQm90QXBwbGljYXRpb25JZCB9ID0gZ2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgbXVsdGlCb3QgPSAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCk/IHRydWU6IGZhbHNlO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNUQVJURUQsIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50YCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50KGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gYXMgTGl2ZUNoYXRWZXJzaW9uIHx8IHRoaXMubGl2ZUNoYXRWZXJzaW9uLCBhdXRoZW50aWNhdGVkVXNlclRva2VuID8gdHJ1ZSA6IGZhbHNlLCBtdWx0aUJvdCk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke2VuZHBvaW50fS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIFxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG4gICAgaWYgKE1zT2NCb3RBcHBsaWNhdGlvbklkICYmIE1zT2NCb3RBcHBsaWNhdGlvbklkLmxlbmd0aCA+IDApIHtcbiAgICAgIHBhcmFtc1snTXMtT2MtQm90LUFwcGxpY2F0aW9uLUlkJ10gPSBNc09jQm90QXBwbGljYXRpb25JZDtcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBwYXJhbXMucmVmcmVzaFRva2VuID0gJ3RydWUnXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IChjdXJyZW50UmV0cnlDb3VudCA+IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSkgPyBjdXJyZW50UmV0cnlDb3VudCA6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeU9uNDI5LFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICBpZiAoaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIGNoYXQgdG9rZW4gcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiByZWplY3QgdGhlIHByb21pc2VcbiAgICAgICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKFwiRW1wdHkgZGF0YSByZWNlaXZlZCBmcm9tIGdldENoYXRUb2tlblwiKSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1VDQ0VFREVELCBcIkdldCBDaGF0IFRva2VuIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmIChyZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5GQUlMRUQsIFwiR2V0IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RhYmxlQ2hhdHMocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zOiBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKTogUHJvbWlzZTxSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcztcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIGNoYXQgU3RhcnRlZFwiKTtcbiAgICBjb25zdCByZXF1ZXN0SWQgPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM/LnJlcXVlc3RJZDtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0UmVjb25uZWN0YWJsZUNoYXRzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RhYmxlQ2hhdHNcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyByZWNvbm5lY3RhYmxlIGNoYXRzIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIFN1Y2NlZWRlZCBhbmQgb2xkIHNlc3Npb24gcmV0dXJuZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBpbiB0aGUgb2xkIHNlc3Npb25zIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNGQUlMRUQsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdEF2YWlsYWJpbGl0eShyZWNvbm5lY3RJZDogc3RyaW5nLCBvcHRpb25hbFBhcmFtczogSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFJlY29ubmVjdEF2YWlsYWJpbGl0eSB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZWNvbm5lY3RJZH1gO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIG9wdGlvbmFsUGFyYW1zPy5yZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLldBUk4sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IGRpZG4ndCBzZW5kIGFueSB2YWxpZCBkYXRhXCIsIG9wdGlvbmFsUGFyYW1zPy5yZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZRkFJTEVELCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IGZhaWxlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICogQHBhcmFtIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gaW5pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRBZ2VudEF2YWlsYWJpbGl0eShyZXF1ZXN0SWQ6IHN0cmluZywgcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UXVldWVBdmFpbGFiaWxpdHk+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPWxjd2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldEFnZW50QXZhaWxhYmlsaXR5XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG5cbiAgICBjb25zdCBjYWNoT2JqID0ge1xuICAgICAgXCJvcmdJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZCxcbiAgICAgIFwid2lkZ2V0SWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWRcbiAgICB9XG5cbiAgICBpZiAoZGF0YSAmJiBkYXRhLmN1c3RvbUNvbnRleHREYXRhKSB7XG4gICAgICBjb25zdCB0ZW1wQXJyID0gQ3VzdG9tQ29udGV4dERhdGEuc29ydChkYXRhLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcImN1c3RvbUNvbnRleHRcIjogdGVtcEFyciB9KTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YS5wb3J0YWxjb250YWN0aWQpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24oY2FjaE9iaiwgeyBcInBvcnRhbGNvbnRhY3RpZFwiOiBkYXRhLnBvcnRhbGNvbnRhY3RpZCB9KTtcbiAgICB9XG5cbiAgICAvL2RhdGEuY2FjaGVLZXkgPSBoYXNoLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShjYWNoT2JqKSkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuICAgIGRhdGEuY2FjaGVLZXkgPSBTSEEyNTYoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLnRvU3RyaW5nKEhleCk7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG5cbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqJ1xuICAgKiBTdGFydHMgYSBzZXNzaW9uIHRvIG9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkluaXQocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVEFSVEVELCBcIlNlc3Npb24gSW5pdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGNvbnN0IHJldHJ5T240MjkgPSB0cnVlO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zZXNzaW9uSW5pdCxcbiAgICAgIHNob3VsZFJldHJ5OiAoZXJyb3IpID0+IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyKGVycm9yLCByZXRyeU9uNDI5KSxcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgY29uc3QgYmFzZVBhdGggPSBhdXRoZW50aWNhdGVkVXNlclRva2VuXG4gICAgICA/IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25Jbml0UGF0aDtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7ICAgICBcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdEhlYWRlcnMsIHtcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl06IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sXG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQgJiYgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsZSBpZiBsb2NhbGUgaXMgZW1wdHlcbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVUNDRUVERUQsIFwiU2Vzc2lvbiBJbml0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRGQUlMRUQsIFwiU2Vzc2lvbiBJbml0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGFzeW5jIGNyZWF0ZUNvbnZlcnNhdGlvbihyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8RmV0Y2hDaGF0VG9rZW5SZXNwb25zZT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9OU1RBUlRFRCwgXCJDcmVhdGUgY29udmVyc2F0aW9uIGNhbGwgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRoXG4gICAgICA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yUGF0aDtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke2Jhc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS93aWRnZXRBcHAvJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vY29udmVyc2F0aW9uYDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7ICAgICBcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdEhlYWRlcnMsIHtcbiAgICAgICAgW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl06IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sXG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdOiB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGRhdGEucmVjb25uZWN0SWQgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBkYXRhLmNoYW5uZWxJZCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZDtcblxuICAgIGlmIChnZXRDb250ZXh0ICYmICF3aW5kb3cuZG9jdW1lbnQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYGdldENvbnRleHQgaXMgb25seSBzdXBwb3J0ZWQgb24gd2ViIGJyb3dzZXJzYCkpO1xuICAgIH1cblxuICAgIGlmIChnZXRDb250ZXh0KSB7XG4gICAgICBkYXRhLmJyb3dzZXIgPSBCcm93c2VySW5mby5nZXRCcm93c2VyTmFtZSgpO1xuICAgICAgZGF0YS5kZXZpY2UgPSBEZXZpY2VJbmZvLmdldERldmljZVR5cGUoKTtcbiAgICAgIGRhdGEub3JpZ2ludXJsID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgICBkYXRhLm9zID0gT1NJbmZvLmdldE9zVHlwZSgpO1xuICAgIH1cblxuICAgIC8vIFNldCBkZWZhdWx0IGxvY2FsZSBpZiBsb2NhbGUgaXMgZW1wdHlcbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2Vzc2lvbkluaXRcbiAgICB9O1xuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgaWYgKGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHksIGlmIHNvLCB0aGVuIHRocm93IGFuIGVycm9yXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIik7XG4gICAgICB9XG5cbiAgICAgIGRhdGEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNVQ0NFRURFRCwgXCJDcmVhdGUgY292ZXJzYXRpb24gY2FsbCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05GQUlMRUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICBcbiAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBjbG9zZSAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkNsb3NlKHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1RBUlRFRCwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkNsb3NlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkIH0gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLmNoYXRJZCA9IGNoYXRJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGlzUmVjb25uZWN0Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1JlY29ubmVjdENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGVyc2lzdGVudENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNQZXJzaXN0ZW50Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVUNDRUVERUQsIFwiU2Vzc2lvbiBDbG9zZSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRUZBSUxFRCwgXCJTZXNzaW9uIGNsb3NlIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYXV0aCBjaGF0IHJlY29yZCBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQocmVxdWVzdElkOiBzdHJpbmcsIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgfSA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5hdXRoQ2hhdEV4aXN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUocmVzcG9uc2UuZGF0YSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SREZBSUxFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci50b1N0cmluZygpID09PSBcIkVycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwNFwiKSB7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICByZXNvbHZlKHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcG9zdENoYXRSZXNwb25zZSBQb3N0IGNoYXQgcmVzcG9uc2UgdG8gc3VibWl0LlxuICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UocmVxdWVzdElkOiBzdHJpbmcsIHBvc3RDaGF0UmVzcG9uc2U6IG9iamVjdCwgc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVEFSVEVELCBcIlN1Ym1pdCBQb3N0IENoYXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVELCBcIlN1Ym1pdCBQb3N0IENoYXQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdXJ2ZXlJbnZpdGVMaW5rKHN1cnZleU93bmVySWQ6IHN0cmluZywgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHk6IG9iamVjdCwgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zOiBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbC5JTkZPLFxuICAgICAgICBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELFxuICAgICAgICB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSxcbiAgICAgICAgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZXF1ZXN0SWQgfSA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hhdCB0cmFuc2NyaXB0cyBmb3IgY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0cmFuc2NyaXB0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VHJhbnNjcmlwdHMocmVxdWVzdElkOiBzdHJpbmcsIGNoYXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtczogSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNUQVJURUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIH0gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKHRoaXMubGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIgfHwgKGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gJiYgY3VycmVudExpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSkge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgfVxuICAgIH1cbiAgICBlbHNlIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBURkFJTEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG5cbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBwZXJzaXN0ZW50IGNoYXQgaGlzdG9yeSBmb3IgYXV0aGVudGljYXRlZCB1c2Vycy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBwZXJzaXN0ZW50IGNoYXQgaGlzdG9yeS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnkocmVxdWVzdElkOiBzdHJpbmcsIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zOiBJR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNUQVJURUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcGFnZVNpemUsIHBhZ2VUb2tlbiB9ID0gZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBpZiAoIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIGNvbnN0IGVycm9yTWVzc2FnZSA9IFwiQXV0aGVudGljYXRlZCB1c2VyIHRva2VuIGlzIHJlcXVpcmVkIGZvciBwZXJzaXN0ZW50IGNoYXQgaGlzdG9yeVwiO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWUZBSUxFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3RvcnkgZmFpbGVkIC0gTWlzc2luZyBhdXRoZW50aWNhdGVkIHVzZXIgdG9rZW5cIiwgcmVxdWVzdElkKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoZXJyb3JNZXNzYWdlKSk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0UGVyc2lzdGVudENoYXRIaXN0b3J5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbi9oaXN0b3J5YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge307XG4gICAgXG4gICAgaWYgKHBhZ2VTaXplKSB7XG4gICAgICBwYXJhbXMucGFnZVNpemUgPSBwYWdlU2l6ZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIC8vIGluIGNhc2UgcGFnZSB0b2tlbiBpcyBhc3NpZ25lZCBmcm9tIG11dGF0ZWQgaGVhZGVycywgd2Ugb3ZlcnJpZGUgd2l0aCB0aGUgYWN0dWFsIHZhbHVlIG9yIGVtcHR5XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5wYWdlVG9rZW5dID0gcGFnZVRva2VuIHx8IFwiXCI7XG4gICBcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUEVSU0lTVEVOVENIQVRISVNUT1JZU1VDQ0VFREVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWUZBSUxFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3RvcnkgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRyYW5zY3JpcHQgdG8gY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBlbWFpbFJlcXVlc3RCb2R5IEVtYWlsIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGVtYWlsIHRyYW5zY3JpcHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1haWxUcmFuc2NyaXB0KHJlcXVlc3RJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbFJlcXVlc3RCb2R5OiBvYmplY3QsIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zOiBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRTVEFSVEVELCBcIkVtYWlsIFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGVtYWlsUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkVtYWlsIFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVEZBSUxFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGRhdGEgbWFza2luZyBpbmZvIG9mIHRoZSBvcmcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmV0Y2hEYXRhTWFza2luZ0luZm8ocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPElEYXRhTWFza2luZ0luZm8+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRGZXRjaERhdGFNYXNraW5nSW5mb1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBzZWNvbmRhcnkgY2hhbm5lbCBldmVudCBuZXR3b3JrIGNhbGwgdG8gT21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5OiBvYmplY3QsIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zOiBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICByZXF1ZXN0UGF0aCArPSBcIj9jaGFubmVsSWQ9XCIgKyBDb25zdGFudHMuZGVmYXVsdENoYW5uZWxJZDtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNURkFJTEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKiogU2VuZCB0eXBpbmcgaW5kaWNhdG9yXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlbmRUeXBpbmdJbmRpY2F0b3IocmVxdWVzdElkOiBzdHJpbmcsIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb246IG51bWJlciwgc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zOiBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBhdm9pZGluZyBsb2dnaW5nIEluZm8gZm9yIHR5cGluZ2luZGljYXRvciB0byByZWR1Y2UgbG9nIHRyYWZmaWNcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgfVxuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGN1c3RvbWVyRGlzcGxheU5hbWUgfSA9IHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcztcbiAgICBpZiAoIWN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfHwgY3VycmVudExpdmVDaGF0VmVyc2lvbiAhPT0gTGl2ZUNoYXRWZXJzaW9uLlYyKSB7IHRocm93IG5ldyBFcnJvcignVHlwaW5nIGluZGljYXRvciBpcyBvbmx5IHN1cHBvcnRlZCBvbiB2MicpIH1cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5TZW5kVHlwaW5nSW5kaWNhdG9yUGF0aH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZV0gPSBjdXN0b21lckRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFR5cGluZ0luZGljYXRvclxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQsIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF1dGhlbnRpY2F0ZXMgYW4gb25nb2luZyAocHJldmlvdXNseSB1bmF1dGhlbnRpY2F0ZWQpIGNoYXQgc2Vzc2lvbi5cbiAgICogVXBncmFkZXMgZW5nYWdlbWVudCBjb250ZXh0IHNvIHN1YnNlcXVlbnQgY2FsbHMgdXNlIGF1dGhlbnRpY2F0ZWQgZW5kcG9pbnRzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIEN1cnJlbnQgcmVxdWVzdC9jb3JyZWxhdGlvbiBpZFxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcyB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9XG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdChyZXF1ZXN0SWQ6IHN0cmluZywgYXV0aGVudGljYXRlQ2hhdFBhcmFtczogeyBjaGF0SWQ6IHN0cmluZzsgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nIH0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVFNUQVJURUQsIFwiTWlkLUF1dGhlbnRpY2F0ZSBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgY2hhdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBhdXRoZW50aWNhdGVDaGF0UGFyYW1zO1xuXG4gICAgaWYgKCFjaGF0SWQgfHwgIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFURkFJTEVELFxuICAgICAgICBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBGYWlsZWQgLSBjaGF0SWQgYW5kIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gYXJlIHJlcXVpcmVkXCIsIHJlcXVlc3RJZCk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjaGF0SWQgYW5kIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gYXJlIHJlcXVpcmVkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRSZXF1ZXN0SWRIZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycyAmJiBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVUNDRUVERUQsIFwiTWlkLUF1dGhlbnRpY2F0ZSBDaGF0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFURkFJTEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdW5yZWFkIG1lc3NhZ2UgY291bnQgZm9yIHRoZSBhdXRoZW50aWNhdGVkIHVzZXIuXG4gICAqIEF1dGgtb25seSBlbmRwb2ludCDigJQgZG9lcyBub3QgcmVxdWlyZSBhbiBhY3RpdmUgY2hhdCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlZFVzZXJUb2tlbiBBdXRoIHRva2VuIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRVbnJlYWRNZXNzYWdlQ291bnQoYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L3VucmVhZG1lc3NhZ2VzYDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFVucmVhZE1lc3NhZ2VDb3VudFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFVucmVhZE1lc3NhZ2VDb3VudFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVELCBcIkdldCBVbnJlYWQgTWVzc2FnZSBDb3VudCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVEZBSUxFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU2VuZHMgYSByZWFkIHJlY2VpcHQgZm9yIGEgc3BlY2lmaWMgbWVzc2FnZSBpbiBhbiBhdXRoZW50aWNhdGVkIGNvbnZlcnNhdGlvbi5cbiAgICogVXBkYXRlcyB0aGUgdW5yZWFkIG1lc3NhZ2UgY291bnRlciBvbiB0aGUgc2VydmVyIGFuZCBmb3J3YXJkcyB0aGUgcmVjZWlwdCB0byBBQ1MuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIChjb252ZXJzYXRpb25UaHJlYWRJZCkgb2YgdGhlIGNvbnZlcnNhdGlvbi5cbiAgICogQHBhcmFtIG1lc3NhZ2VJZCBUaGUgQUNTIG1lc3NhZ2UgSUQgdG8gbWFyayBhcyByZWFkLlxuICAgKiBAcGFyYW0gYXV0aGVudGljYXRlZFVzZXJUb2tlbiBBdXRoIHRva2VuIGZvciB0aGUgdXNlci5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kUmVhZFJlY2VpcHQocmVxdWVzdElkOiBzdHJpbmcsIG1lc3NhZ2VJZDogc3RyaW5nLCBhdXRoZW50aWNhdGVkVXNlclRva2VuOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1RBUlRFRCwgXCJTZW5kIFJlYWQgUmVjZWlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvckF1dGhQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS93aWRnZXRhcHAvJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vY29udmVyc2F0aW9ucy8ke3JlcXVlc3RJZH0vcmVhZHJlY2VpcHRgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2VuZFJlYWRSZWNlaXB0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7IG1lc3NhZ2VJZCB9KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc2VuZFJlYWRSZWNlaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVEZBSUxFRCwgXCJTZW5kIFJlYWQgUmVjZWlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dMZXZlbCBMb2cgbGV2ZWwgZm9yIGxvZ2dpbmcuXG4gICAqIEBwYXJhbSB0ZWxlbWV0cnlFdmVudFR5cGUgVGVsZW1ldHJ5IGV2ZW50IHR5cGUgaW4gd2hpY2ggZXZlbnQgd2lsbCBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gcmVzcG9uc2UgUmVzcG9uc2VcbiAgICogQHBhcmFtIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgRWxhcHNlZCB0aW1lIGluIG1zXG4gICAqIEBwYXJhbSByZXF1ZXN0UGF0aCBSZXF1ZXN0IHBhdGhcbiAgICogQHBhcmFtIG1ldGhvZCBNZXRob2RcbiAgICogQHBhcmFtIGVycm9yIEVycm9yXG4gICAqIEBwYXJhbSBkYXRhIERhdGFcbiAgICovXG4gIHByaXZhdGUgbG9nV2l0aExvZ2dlcihsb2dMZXZlbDogTG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZTogT0NTREtUZWxlbWV0cnlFdmVudCwgZGVzY3JpcHRpb246IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nLCByZXNwb25zZT86IEF4aW9zUmVzcG9uc2U8YW55PiwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcz86IG51bWJlciwgcmVxdWVzdFBhdGg/OiBzdHJpbmcsIG1ldGhvZD86IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCByZXF1ZXN0UGF5bG9hZD86IGFueSwgcmVxdWVzdEhlYWRlcnM/OiBhbnksIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lPzogbnVtYmVyLCByZXRyeUNvdW50PzogbnVtYmVyKTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGlmICghdGhpcy5sb2dnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcXVlc3RQYXlsb2FkKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHsgLi4ucmVxdWVzdFBheWxvYWQgfTtcbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwUHJlQ2hhdFJlc3BvbnNlKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwR2VvbG9jYXRpb24oc2FuaXRpemVkUmVxdWVzdFBheWxvYWQpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHVuZGVmaW5lZDtcbiAgICBsZXQgYXV0aFRva2VuRGV0YWlsczogYW55ID0gdW5kZWZpbmVkOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAocmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RIZWFkZXJzID0geyAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyhzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgIGlmIChyZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dKSB7XG4gICAgICAgIGlmICh3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmF0b2IpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgdG9rZW4gPSByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dO1xuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRva2VuLnNwbGl0KFwiLlwiKVsxXTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB3aW5kb3cuYXRvYihwYXlsb2FkKTtcbiAgICAgICAgICAgIGNvbnN0IGpzb25EYXRhID0gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgICAgICAgIGNvbnN0IGx3aUNvbnRleHRzID0ganNvbkRhdGFbXCJsd2ljb250ZXh0c1wiXTtcbiAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMgPSB7XG4gICAgICAgICAgICAgIHN1YjoganNvbkRhdGFbXCJzdWJcIl0sXG4gICAgICAgICAgICAgIGV4cDoganNvbkRhdGFbXCJleHBcIl1cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGlmIChsd2lDb250ZXh0cykge1xuICAgICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0c0RhdGEgPSBKU09OLnBhcnNlKGx3aUNvbnRleHRzKTtcbiAgICAgICAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKGx3aUNvbnRleHRzRGF0YSk7XG4gICAgICAgICAgICAgIGF1dGhUb2tlbkRldGFpbHMubHdpQ29udGV4dHMgPSBsd2lDb250ZXh0c0RhdGE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWVtcHR5XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgIFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgUmVnaW9uOiByZXNwb25zZT8uZGF0YS5SZWdpb24sXG4gICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgSHR0cFJlcXVlc3RSZXNwb25zZVRpbWU6IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lLFxuICAgICAgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2U/LmhlYWRlcnNbQ29uc3RhbnRzLnRyYW5zYWN0aW9uaWRdLFxuICAgICAgUmVxdWVzdFBhdGg6IHJlcXVlc3RQYXRoLFxuICAgICAgUmVxdWVzdE1ldGhvZDogbWV0aG9kLFxuICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LnN0YXR1cyA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBcbiAgICAgIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LmRhdGEgfHwgZXJyb3IgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgUmVxdWVzdFBheWxvYWQ6IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLFxuICAgICAgUmVxdWVzdEhlYWRlcnM6IHNhbml0aXplZFJlcXVlc3RIZWFkZXJzLFxuICAgICAgUmVzcG9uc2VFcnJvcmNvZGU6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LmhlYWRlcnM/LmVycm9yY29kZSA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBBdXRoVG9rZW5EZXRhaWxzOiBhdXRoVG9rZW5EZXRhaWxzLFxuICAgICAgUmV0cnlDb3VudDogcmV0cnlDb3VudFxuICAgIH07XG4gICAgdGhpcy5sb2dnZXIubG9nKGxvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGUsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0QXV0aENvZGVOb25jZSA9IChoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoaGVhZGVycz8uYXV0aGNvZGVub25jZSkge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UgPSBoZWFkZXJzPy5hdXRoY29kZW5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkOiBzdHJpbmcgfCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXApOiB2b2lkIHtcbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICB0aGlzLnNldENvcnJlbGF0aW9uSWRJbkhlYWRlcihyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0U2Vzc2lvbklkSGVhZGVyID0gKHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWRdID0gc2Vzc2lvbklkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2V0UmVxdWVzdElkSGVhZGVyID0gKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldENvcnJlbGF0aW9uSWRJbkhlYWRlciA9IChjb3JyZWxhdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGhlYWRlcnM6IFN0cmluZ01hcCkgPT4ge1xuICAgIGlmIChjb3JyZWxhdGlvbklkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuY29ycmVsYXRpb25JZF0gPSBjb3JyZWxhdGlvbklkO1xuICAgIH1cbiAgfVxufVxuXG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBQUEsSUFBQUEsTUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsTUFBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQUcsa0JBQUEsR0FBQUMsdUJBQUEsQ0FBQUosT0FBQTtBQUVBLElBQUFLLFlBQUEsR0FBQUwsT0FBQTtBQUNBLElBQUFNLFVBQUEsR0FBQUosc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFPLGtCQUFBLEdBQUFQLE9BQUE7QUFDQSxJQUFBUSxXQUFBLEdBQUFSLE9BQUE7QUFFQSxJQUFBUyxPQUFBLEdBQUFQLHNCQUFBLENBQUFGLE9BQUE7QUFxQkEsSUFBQVUsUUFBQSxHQUFBUixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQVcsU0FBQSxHQUFBWCxPQUFBO0FBQ0EsSUFBQVksaUJBQUEsR0FBQVosT0FBQTtBQUVBLElBQUFhLE9BQUEsR0FBQWIsT0FBQTtBQUNBLElBQUFjLHFCQUFBLEdBQUFaLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBZSx1QkFBQSxHQUFBYixzQkFBQSxDQUFBRixPQUFBO0FBTUEsSUFBQWdCLElBQUEsR0FBQWQsc0JBQUEsQ0FBQUYsT0FBQTtBQUVBLElBQUFpQixNQUFBLEdBQUFqQixPQUFBO0FBQ0EsSUFBQWtCLGlCQUFBLEdBQUFsQixPQUFBO0FBQ0EsSUFBQW1CLGtCQUFBLEdBQUFuQixPQUFBO0FBQ0EsSUFBQW9CLHFCQUFBLEdBQUFsQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQXFCLHdCQUFBLEdBQUFuQixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQXNCLEtBQUEsR0FBQXRCLE9BQUE7QUFDQSxJQUFBdUIsOEJBQUEsR0FBQXZCLE9B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
|
|
2867
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfRW51bXMiLCJyZXF1aXJlIiwiX2F4aW9zIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsIl9heGlvc1JldHJ5SGFuZGxlciIsIl9pbnRlcm9wUmVxdWlyZVdpbGRjYXJkIiwiX0Jyb3dzZXJJbmZvIiwiX0NvbnN0YW50cyIsIl9DdXN0b21Db250ZXh0RGF0YSIsIl9EZXZpY2VJbmZvIiwiX2VuY0hleCIsIl9Mb2NhbGVzIiwiX0xvZ0xldmVsIiwiX0xvZ2dpbmdTYW5pdGl6ZXIiLCJfT1NJbmZvIiwiX09tbmljaGFubmVsRW5kcG9pbnRzIiwiX09tbmljaGFubmVsSFRUUEhlYWRlcnMiLCJfc2hhIiwiX1RpbWVyIiwiX2h0dHBIZWFkZXJzVXRpbHMiLCJfZW5kcG9pbnRzQ3JlYXRvcnMiLCJfaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJfU2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJfdXVpZCIsIl93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyIsIl9TREsiLCJlIiwidCIsIldlYWtNYXAiLCJyIiwibiIsIl9fZXNNb2R1bGUiLCJvIiwiaSIsImYiLCJfX3Byb3RvX18iLCJfdHlwZW9mMyIsImhhcyIsImdldCIsInNldCIsIl90MjIiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIm93bktleXMiLCJrZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5MiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9uIiwiRiIsInMiLCJkb25lIiwidmFsdWUiLCJUeXBlRXJyb3IiLCJhIiwidSIsIm5leHQiLCJfYXJyYXlMaWtlVG9BcnJheSIsInRvU3RyaW5nIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIlNESyIsImV4cG9ydHMiLCJvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24iLCJfdGhpcyIsImNvbmZpZ3VyYXRpb24iLCJ1bmRlZmluZWQiLCJkZWZhdWx0Q29uZmlndXJhdGlvbiIsImxvZ2dlciIsIl9jbGFzc0NhbGxDaGVjazIiLCJjb25jYXQiLCJTREtFcnJvciIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JOYW1lIiwiQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2UiLCJoZWFkZXJzIiwiYXV0aGNvZGVub25jZSIsImF1dGhDb2RlTm9uY2UiLCJzZXNzaW9uSWQiLCJPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIiwib2NTZXNzaW9uSWQiLCJyZXF1ZXN0SWQiLCJjb3JyZWxhdGlvbklkIiwiX3R5cGVvZjIiLCJfaSIsIl9PYmplY3Qka2V5cyIsImtleSIsIl9pMiIsIl9PYmplY3Qka2V5czIiLCJjaGFubmVsSWQiLCJ2YWx1ZXMiLCJDaGFubmVsSWQiLCJpbmNsdWRlcyIsIkVycm9yIiwiY3VycmVudE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfaXRlcmF0b3IiLCJDb25zdGFudHMiLCJyZXF1aXJlZE9tbmljaGFubmVsQ29uZmlndXJhdGlvblBhcmFtZXRlcnMiLCJfc3RlcCIsImVyciIsIm9jVXNlckFnZW50IiwibGl2ZUNoYXRWZXJzaW9uIiwiTGl2ZUNoYXRWZXJzaW9uIiwiVjIiLCJfY3JlYXRlQ2xhc3MyIiwiX2dldExjd0Zjc0RldGFpbHMiLCJfYXN5bmNUb0dlbmVyYXRvcjIiLCJfcmVnZW5lcmF0b3IiLCJtYXJrIiwiX2NhbGxlZSIsInRpbWVyIiwicmVxdWVzdFBhdGgiLCJtZXRob2QiLCJ1cmwiLCJheGlvc0luc3RhbmNlIiwicmVxdWVzdEhlYWRlcnMiLCJiYWNrZW5kVGltZXIiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQiLCJyZXNwb25zZSIsImh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsImRhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIl90Iiwid3JhcCIsIl9jb250ZXh0IiwicHJldiIsIlRpbWVyIiwiVElNRVIiLCJsb2dXaXRoTG9nZ2VyIiwiTG9nTGV2ZWwiLCJJTkZPIiwiT0NTREtUZWxlbWV0cnlFdmVudCIsIkdFVExDV0ZDU0RFVEFJTFNTVEFSVEVEIiwiT21uaWNoYW5uZWxFbmRwb2ludHMiLCJMY3dGY3NEZXRhaWxzUGF0aCIsIm9yZ0lkIiwib3JnVXJsIiwiYXhpb3MiLCJjcmVhdGUiLCJheGlvc1JldHJ5SGFuZGxlciIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJhZGRPY1VzZXJBZ2VudEhlYWRlciIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInNlbnQiLCJtaWxsaVNlY29uZHNFbGFwc2VkIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsImFicnVwdCIsIkVSUk9SIiwiR0VUTENXRkNTREVUQUlMU0ZBSUxFRCIsInN0b3AiLCJnZXRMY3dGY3NEZXRhaWxzIiwiX2dldENoYXRDb25maWciLCJfY2FsbGVlMiIsImJ5cGFzc0NhY2hlIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIiLCJyZXRyeUNvdW50IiwiX2FyZ3MyIiwiX3QyIiwiX2NvbnRleHQyIiwiR0VUQ0hBVENPTkZJR0ZTVEFSVEVEIiwidXVpZHY0IiwiTGl2ZUNoYXRDb25maWdQYXRoIiwid2lkZ2V0SWQiLCJyZXRyeU9uNDI5IiwiZ2V0Q2hhdENvbmZpZ1JldHJ5T240MjkiLCJhZGREZWZhdWx0SGVhZGVycyIsImJ5cGFzc0NhY2hlSGVhZGVycyIsIkdFVENIQVRDT05GSUdTVUNDRUVERUQiLCJnZXRSZXRyeUNvdW50IiwiY29uZmlnIiwiR0VUQ0hBVENPTkZJR0ZBSUxFRCIsIlByb21pc2UiLCJyZWplY3QiLCJfeCIsIl9nZXRMV0lEZXRhaWxzIiwiX2NhbGxlZTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQzIiwiX3RoaXMyIiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiYXV0aGVudGljYXRlZFVzZXJUb2tlbiIsInJlY29ubmVjdElkIiwic2hvdWxkVXNlU2lnUXVlcnlQYXJhbSIsInBhcmFtcyIsIm9wdGlvbnMiLCJfYXJnczQiLCJfY29udGV4dDQiLCJHRVRMV0lTVEFUVVNTVEFSVEVEIiwiTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aCIsImF4aW9zUmV0cnlIYW5kbGVyV2l0aE5vdEZvdW5kIiwiaGVhZGVyT3ZlcndyaXRlcyIsImdldExXSURldGFpbHMiLCJkZWZhdWx0SGVhZGVycyIsIkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRoIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwic2lnIiwiX3JlZiIsIl9jYWxsZWUzIiwicmVzb2x2ZSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTMiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczMiLCJfdDMiLCJfY29udGV4dDMiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiR0VUTFdJU1RBVFVTRkFJTEVEIiwiaXNFeHBlY3RlZEF4aW9zRXJyb3IiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsIl94MyIsIl94NCIsIl94MiIsIl9nZXRDaGF0VG9rZW4iLCJfY2FsbGVlNiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDQiLCJfdGhpczMiLCJnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyIsImN1cnJlbnRSZXRyeUNvdW50IiwiY3VycmVudExpdmVDaGF0VmVyc2lvbiIsInJlZnJlc2hUb2tlbiIsIk1zT2NCb3RBcHBsaWNhdGlvbklkIiwibXVsdGlCb3QiLCJlbmRwb2ludCIsIl9hcmdzNiIsIl9jb250ZXh0NiIsIkdFVENIQVRUT0tFTlNUQVJURUQiLCJjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCIsImdldENoYXRUb2tlbiIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJfcmVmMiIsIl9jYWxsZWU1IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNCIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNCIsIl90NCIsIl9jb250ZXh0NSIsInRvTG93ZXJDYXNlIiwiR0VUQ0hBVFRPS0VOU1VDQ0VFREVEIiwic3RhdHVzIiwibm9Db250ZW50U3RhdHVzQ29kZSIsImFzc2lnbiIsIkdFVENIQVRUT0tFTkZBSUxFRCIsIl94NiIsIl94NyIsIl94NSIsIl9yZW5ld0NoYXRUb2tlbiIsIl9jYWxsZWU4IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kdzIiLCJfdGhpczQiLCJyZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwibWF4UmV0cmllcyIsIl9hcmdzOCIsIl9jb250ZXh0OCIsIlJFTkVXQ0hBVFRPS0VOU1RBUlRFRCIsIkxpdmVDaGF0djJBdXRoUmVuZXdDaGF0VG9rZW5QYXRoIiwiTGl2ZUNoYXR2MlJlbmV3Q2hhdFRva2VuUGF0aCIsInJlbmV3Q2hhdFRva2VuIiwiTnVtYmVyIiwiaXNJbnRlZ2VyIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiLCJfcmVmMyIsIl9jYWxsZWU3IiwiZXJyb3IiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU1IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM1IiwiX3Q1IiwiX2NvbnRleHQ3IiwiVG9rZW4iLCJSRU5FV0NIQVRUT0tFTkZBSUxFRCIsIlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVEIiwiX3g5IiwiX3gwIiwiX3g4IiwiX2dldFJlY29ubmVjdGFibGVDaGF0cyIsIl9jYWxsZWUwIiwicmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkNiIsIl90aGlzNSIsIl9jb250ZXh0MCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJnZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJfcmVmNCIsIl9jYWxsZWU5IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzNiIsIl90NiIsIl9jb250ZXh0OSIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCIsIkdFVFJFQ09OTkVDVEFCTEVDSEFUU0ZBSUxFRCIsIl94MTAiLCJfeDExIiwiX3gxIiwiX2dldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDciLCJfdGhpczYiLCJvcHRpb25hbFBhcmFtcyIsIl9hcmdzMTAiLCJfY29udGV4dDEwIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIl9yZWY1IiwiX2NhbGxlZTEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU3IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM3IiwiX3Q3IiwiX2NvbnRleHQxIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiV0FSTiIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCIsIl94MTMiLCJfeDE0IiwiX3gxMiIsIl9nZXRBZ2VudEF2YWlsYWJpbGl0eSIsIl9jYWxsZWUxMiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDgiLCJfdGhpczciLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiY2FjaE9iaiIsInRlbXBBcnIiLCJfYXJnczEyIiwiX2NvbnRleHQxMiIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCIsIkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aCIsImdldEFnZW50QXZhaWxhYmlsaXR5IiwiY3VzdG9tQ29udGV4dERhdGEiLCJDdXN0b21Db250ZXh0RGF0YSIsInNvcnQiLCJwb3J0YWxjb250YWN0aWQiLCJjYWNoZUtleSIsIlNIQTI1NiIsIkpTT04iLCJzdHJpbmdpZnkiLCJIZXgiLCJ3aW5kb3ciLCJkb2N1bWVudCIsImJyb3dzZXIiLCJCcm93c2VySW5mbyIsImdldEJyb3dzZXJOYW1lIiwiZGV2aWNlIiwiRGV2aWNlSW5mbyIsImdldERldmljZVR5cGUiLCJvcmlnaW51cmwiLCJsb2NhdGlvbiIsImhyZWYiLCJvcyIsIk9TSW5mbyIsImdldE9zVHlwZSIsImxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJMb2NhbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsIl9yZWY2IiwiX2NhbGxlZTExIiwiX2RhdGEiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWU4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM4IiwiX3Q4IiwiX2NvbnRleHQxMSIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQiLCJfeDE2IiwiX3gxNyIsIl94MTUiLCJfc2Vzc2lvbkluaXQiLCJfY2FsbGVlMTQiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQ5IiwiX3RoaXM4Iiwic2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyIsImJhc2VQYXRoIiwiX2FyZ3MxNCIsIl9jb250ZXh0MTQiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5Iiwic2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGgiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsInNldFJlcXVlc3RJZEhlYWRlciIsIl9yZWY3IiwiX2NhbGxlZTEzIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOSIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOSIsIl90OSIsIl9jb250ZXh0MTMiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwiX3gxOSIsIl94MjAiLCJfeDE4IiwiX2NyZWF0ZUNvbnZlcnNhdGlvbiIsIl9jYWxsZWUxNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDAiLCJfZGF0YTIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMwIiwiX2FyZ3MxNSIsIl90MCIsIl9jb250ZXh0MTUiLCJDUkVBVEVTRVNTSU9OU1RBUlRFRCIsIkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGgiLCJMaXZlQ2hhdENvbm5lY3RvclBhdGgiLCJDUkVBVEVTRVNTSU9OU1VDQ0VFREVEIiwiQ1JFQVRFU0VTU0lPTkZBSUxFRCIsImNyZWF0ZUNvbnZlcnNhdGlvbiIsIl94MjEiLCJfc2Vzc2lvbkNsb3NlIiwiX2NhbGxlZTE3IiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMSIsIl90aGlzOSIsInNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIl9hcmdzMTciLCJfY29udGV4dDE3IiwiU0VTU0lPTkNMT1NFU1RBUlRFRCIsIkxpdmVDaGF0U2Vzc2lvbkNsb3NlUGF0aCIsInNlc3Npb25DbG9zZSIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJfcmVmOCIsIl9jYWxsZWUxNiIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczEiLCJfdDEiLCJfY29udGV4dDE2IiwiU0VTU0lPTkNMT1NFU1VDQ0VFREVEIiwiU0VTU0lPTkNMT1NFRkFJTEVEIiwiY29kZSIsIl94MjMiLCJfeDI0IiwiX3gyMiIsIl92YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwiX2NhbGxlZTE5IiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTAiLCJfdGhpczAiLCJfY29udGV4dDE5IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiX3JlZjkiLCJfY2FsbGVlMTgiLCJfcmVzcG9uc2UkZGF0YSIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMCIsIl90MTAiLCJfY29udGV4dDE4IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwiX3gyNyIsIl94MjgiLCJfeDI1IiwiX3gyNiIsIl9zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiX2NhbGxlZTIxIiwicG9zdENoYXRSZXNwb25zZSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDExIiwiX3RoaXMxIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyMSIsIl9jb250ZXh0MjEiLCJTVUJNSVRQT1NUQ0hBVFNUQVJURUQiLCJMaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aCIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UiLCJMaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGgiLCJfcmVmMCIsIl9jYWxsZWUyMCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTExIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMSIsIl90MTEiLCJfY29udGV4dDIwIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsIl94MzEiLCJfeDMyIiwiX3gyOSIsIl94MzAiLCJfZ2V0U3VydmV5SW52aXRlTGluayIsIl9jYWxsZWUyMyIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEyIiwiX3RoaXMxMCIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsIl9hcmdzMjMiLCJfY29udGV4dDIzIiwibG9nIiwiR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQiLCJTdXJ2ZXlPd25lcklkIiwiTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsImdldFN1cnZleUludml0ZUxpbmsiLCJMaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aCIsIndpZGdldEFwcElkIiwiX3JlZjEiLCJfY2FsbGVlMjIiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxMiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTIiLCJfdDEyIiwiX2NvbnRleHQyMiIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwiX3gzNSIsIl94MzYiLCJfeDMzIiwiX3gzNCIsIl9nZXRDaGF0VHJhbnNjcmlwdHMiLCJfY2FsbGVlMjUiLCJ0b2tlbiIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDEzIiwiX3RoaXMxMSIsImdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyNSIsIl9jb250ZXh0MjUiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIl9yZWYxMCIsIl9jYWxsZWUyNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTEzIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxMyIsIl90MTMiLCJfY29udGV4dDI0IiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsIl94NDAiLCJfeDQxIiwiX3gzNyIsIl94MzgiLCJfeDM5IiwiX2dldFBlcnNpc3RlbnRDaGF0SGlzdG9yeSIsIl9jYWxsZWUyNyIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE0IiwiX3RoaXMxMiIsImdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zIiwicGFnZVNpemUiLCJwYWdlVG9rZW4iLCJlcnJvck1lc3NhZ2UiLCJfYXJnczI3IiwiX2NvbnRleHQyNyIsIkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNUQVJURUQiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQiLCJMaXZlQ2hhdEF1dGhHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlQYXRoIiwiZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5IiwiX3JlZjExIiwiX2NhbGxlZTI2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTQiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE0IiwiX3QxNCIsIl9jb250ZXh0MjYiLCJHRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVUNDRUVERUQiLCJfeDQzIiwiX3g0NCIsIl94NDIiLCJfZW1haWxUcmFuc2NyaXB0IiwiX2NhbGxlZTI5IiwiZW1haWxSZXF1ZXN0Qm9keSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE1IiwiX3RoaXMxMyIsImVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIiwiX2FyZ3MyOSIsIl9jb250ZXh0MjkiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiX3JlZjEyIiwiX2NhbGxlZTI4IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTUiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE1IiwiX3QxNSIsIl9jb250ZXh0MjgiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJfeDQ4IiwiX3g0OSIsIl94NDUiLCJfeDQ2IiwiX3g0NyIsIl9mZXRjaERhdGFNYXNraW5nSW5mbyIsIl9jYWxsZWUzMSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE2IiwiX3RoaXMxNCIsIl9jb250ZXh0MzEiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJfcmVmMTMiLCJfY2FsbGVlMzAiLCJfaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUxNiIsIl9lbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzMTYiLCJfdDE2IiwiX2NvbnRleHQzMCIsIkZFVENIREFUQU1BU0tJTkdTVUNDRUVERUQiLCJGRVRDSERBVEFNQVNLSU5HRkFJTEVEIiwiX3g1MSIsIl94NTIiLCJfeDUwIiwiX21ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0IiwiX2NhbGxlZTMzIiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQxNyIsIl90aGlzMTUiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyIsIl9hcmdzMzMiLCJfY29udGV4dDMzIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiX3JlZjE0IiwiX2NhbGxlZTMyIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTciLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE3IiwiX3QxNyIsIl9jb250ZXh0MzIiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsIl94NTUiLCJfeDU2IiwiX3g1MyIsIl94NTQiLCJfc2VuZFR5cGluZ0luZGljYXRvciIsIl9jYWxsZWUzNSIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDE4IiwiX3RoaXMxNiIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJfYXJnczM1IiwiX2NvbnRleHQzNSIsIlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRoIiwic2VuZFR5cGluZ0luZGljYXRvciIsIl9yZWYxNSIsIl9jYWxsZWUzNCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTE4IiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMxOCIsIl90MTgiLCJfY29udGV4dDM0IiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJfeDU5IiwiX3g2MCIsIl94NTciLCJfeDU4IiwiX21pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQiLCJfY2FsbGVlMzciLCJhdXRoZW50aWNhdGVDaGF0UGFyYW1zIiwiX3RoaXMkY29uZmlndXJhdGlvbiRkMTkiLCJfdGhpczE3IiwiX2NvbnRleHQzNyIsIk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVEIiwiTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCIsIkxpdmVDaGF0QXV0aE1pZENvbnZlcnNhdGlvblBhdGgiLCJtaWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0IiwiX3JlZjE2IiwiX2NhbGxlZTM2IiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMTkiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczE5IiwiX3QxOSIsIl9jb250ZXh0MzYiLCJNSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVEIiwiX3g2MyIsIl94NjQiLCJfeDYxIiwiX3g2MiIsIl9nZXRVbnJlYWRNZXNzYWdlQ291bnQiLCJfY2FsbGVlMzkiLCJfdGhpcyRjb25maWd1cmF0aW9uJGQyMCIsIl90aGlzMTgiLCJfY29udGV4dDM5IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1RBUlRFRCIsImdldFVucmVhZE1lc3NhZ2VDb3VudCIsIl9yZWYxNyIsIl9jYWxsZWUzOCIsIl9odHRwUmVxdWVzdFJlc3BvbnNlVGltZTIwIiwiX2VsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMyMCIsIl90MjAiLCJfY29udGV4dDM4IiwiR0VUVU5SRUFETUVTU0FHRUNPVU5UU1VDQ0VFREVEIiwiR0VUVU5SRUFETUVTU0FHRUNPVU5URkFJTEVEIiwiX3g2NiIsIl94NjciLCJfeDY1IiwiX3NlbmRSZWFkUmVjZWlwdCIsIl9jYWxsZWU0MSIsIm1lc3NhZ2VJZCIsIl90aGlzJGNvbmZpZ3VyYXRpb24kZDIxIiwiX3RoaXMxOSIsIl9jb250ZXh0NDEiLCJTRU5EUkVBRFJFQ0VJUFRTVEFSVEVEIiwic2VuZFJlYWRSZWNlaXB0IiwiX3JlZjE4IiwiX2NhbGxlZTQwIiwiX2h0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lMjEiLCJfZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczIxIiwiX3QyMSIsIl9jb250ZXh0NDAiLCJTRU5EUkVBRFJFQ0VJUFRTVUNDRUVERUQiLCJTRU5EUkVBRFJFQ0VJUFRGQUlMRUQiLCJfeDcxIiwiX3g3MiIsIl94NjgiLCJfeDY5IiwiX3g3MCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIl9yZXNwb25zZSIsIl9yZXNwb25zZTIiLCJfcmVzcG9uc2UzIiwiTG9nZ2luZ1Nhbml0aXplciIsInN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzIiwic2FuaXRpemVkUmVxdWVzdFBheWxvYWQiLCJzdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzIiwicHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBQcmVDaGF0UmVzcG9uc2UiLCJzdHJpcEdlb2xvY2F0aW9uIiwic2FuaXRpemVkUmVxdWVzdEhlYWRlcnMiLCJhdXRoVG9rZW5EZXRhaWxzIiwic3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMiLCJhdG9iIiwicGF5bG9hZCIsInNwbGl0IiwianNvbkRhdGEiLCJwYXJzZSIsImx3aUNvbnRleHRzIiwic3ViIiwiZXhwIiwibHdpQ29udGV4dHNEYXRhIiwiX3VudXNlZCIsImN1c3RvbURhdGEiLCJSZXF1ZXN0SWQiLCJSZWdpb24iLCJFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIiwiSHR0cFJlcXVlc3RSZXNwb25zZVRpbWUiLCJUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25pZCIsIlJlcXVlc3RQYXRoIiwiUmVxdWVzdE1ldGhvZCIsIlJlc3BvbnNlU3RhdHVzQ29kZSIsIkV4Y2VwdGlvbkRldGFpbHMiLCJSZXF1ZXN0UGF5bG9hZCIsIlJlcXVlc3RIZWFkZXJzIiwiUmVzcG9uc2VFcnJvcmNvZGUiLCJlcnJvcmNvZGUiLCJBdXRoVG9rZW5EZXRhaWxzIiwiUmV0cnlDb3VudCIsInNldFNlc3Npb25JZEhlYWRlciIsInNldENvcnJlbGF0aW9uSWRJbkhlYWRlciIsInN1YnN0cmluZyIsImdldENoYXRUb2tlblJldHJ5Q291bnQiLCJnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmUiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWciXSwic291cmNlUm9vdCI6Im9jc2RrOi8vLyIsInNvdXJjZXMiOlsiLi4vc3JjL1NESy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFubmVsSWQsIExpdmVDaGF0VmVyc2lvbiwgT0NTREtUZWxlbWV0cnlFdmVudCwgU0RLRXJyb3IgfSBmcm9tIFwiLi9Db21tb24vRW51bXNcIjtcbmltcG9ydCBheGlvcywgeyBBeGlvc0Vycm9yLCBBeGlvc1JlcXVlc3RDb25maWcsIEF4aW9zUmVzcG9uc2UgfSBmcm9tIFwiYXhpb3NcIjtcbmltcG9ydCBheGlvc1JldHJ5SGFuZGxlciwgeyBheGlvc1JldHJ5SGFuZGxlcldpdGhOb3RGb3VuZCwgZ2V0UmV0cnlDb3VudCB9IGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBIZXggZnJvbSBcImNyeXB0by1qcy9lbmMtaGV4XCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdEF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJUmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZW5ld0NoYXRUb2tlbk9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNESyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtcIjtcbmltcG9ydCBJU0RLQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTREtDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXNcIlxuaW1wb3J0IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSW5pdENvbnRleHQgZnJvbSBcIi4vTW9kZWwvSW5pdENvbnRleHRcIjtcbmltcG9ydCBMb2NhbGVzIGZyb20gXCIuL0NvbW1vbi9Mb2NhbGVzXCI7XG5pbXBvcnQgeyBMb2dMZXZlbCB9IGZyb20gXCIuL01vZGVsL0xvZ0xldmVsXCI7XG5pbXBvcnQgeyBMb2dnaW5nU2FuaXRpemVyIH0gZnJvbSBcIi4vVXRpbHMvTG9nZ2luZ1Nhbml0aXplclwiO1xuaW1wb3J0IE9DU0RLTG9nZ2VyIGZyb20gXCIuL0NvbW1vbi9PQ1NES0xvZ2dlclwiO1xuaW1wb3J0IHsgT1NJbmZvIH0gZnJvbSBcIi4vVXRpbHMvT1NJbmZvXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxFbmRwb2ludHMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsRW5kcG9pbnRzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxIVFRQSGVhZGVycyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxIVFRQSGVhZGVyc1wiO1xuaW1wb3J0IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgZnJvbSBcIi4vSW50ZXJmYWNlcy9PbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyXCI7XG5pbXBvcnQgUXVldWVBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUXVldWVBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RBdmFpbGFiaWxpdHkgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0QXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0TWFwcGluZ1JlY29yZCBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RNYXBwaW5nUmVjb3JkXCI7XG5pbXBvcnQgUmVuZXdDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9SZW5ld0NoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgeyBSZXF1ZXN0VGltZW91dENvbmZpZyB9IGZyb20gXCIuL0NvbW1vbi9SZXF1ZXN0VGltZW91dENvbmZpZ1wiO1xuaW1wb3J0IFNIQTI1NiBmcm9tIFwiY3J5cHRvLWpzL3NoYTI1NlwiO1xuaW1wb3J0IHsgU3RyaW5nTWFwIH0gZnJvbSBcIi4vQ29tbW9uL01hcHBpbmdzXCI7XG5pbXBvcnQgeyBUaW1lciB9IGZyb20gXCIuL1V0aWxzL1RpbWVyXCI7XG5pbXBvcnQgeyBhZGRPY1VzZXJBZ2VudEhlYWRlciB9IGZyb20gXCIuL1V0aWxzL2h0dHBIZWFkZXJzVXRpbHNcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDEyMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwLFxuICAgIGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeTogMTUwMDAsXG4gICAgbWlkQ29udmVyc2F0aW9uQXV0aGVudGljYXRlQ2hhdDogMTUwMDAsXG4gICAgZ2V0VW5yZWFkTWVzc2FnZUNvdW50OiAxNTAwMCxcbiAgICBzZW5kUmVhZFJlY2VpcHQ6IDUwMDAsXG4gICAgcmVuZXdDaGF0VG9rZW46IDE1MDAwXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdENvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhDb2RlTm9uY2U6IHV1aWR2NCgpLnN1YnN0cmluZygwLCA4KSxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeUNvdW50OiAxMCxcbiAgICBnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmU6IDEwMDAwLFxuICAgIGdldENoYXRUb2tlblJldHJ5T240Mjk6IHRydWUsXG4gICAgZ2V0Q2hhdENvbmZpZ1JldHJ5T240Mjk6IHRydWUsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDUsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWcsXG4gICAgdXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtOiBmYWxzZSxcbiAgICB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnOiB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyxcbiAgICBvY1VzZXJBZ2VudDogW11cbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBvY1VzZXJBZ2VudDogc3RyaW5nW107XG4gIEhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlID0gYCR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck5hbWV9OiAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlfWA7XG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9jVXNlckFnZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLm9jVXNlckFnZW50O1xuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cblxuICAvKipcbiAgICogRmV0Y2hlcyBMQ1cgRkNTIERldGFpbHMgb2YgdGhlIE9yZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMY3dGY3NEZXRhaWxzKCk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1RBUlRFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN0YXJ0ZWRcIiwgXCJcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MY3dGY3NEZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlLmdldCh1cmwsIHtcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRDb25maWdcbiAgICAgIH0pO1xuICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdWNjZWVkZWRcIiwgXCJcIiwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTRkFJTEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgZmFpbGVkXCIsIFwiXCIsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZTVEFSVEVELCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0Q29uZmlnUmV0cnlPbjQyOSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGJ5cGFzc0NhY2hlKSB7XG4gICAgICByZXF1ZXN0SGVhZGVycyA9IHsgLi4uQ29uc3RhbnRzLmJ5cGFzc0NhY2hlSGVhZGVycywgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICB9XG5cbiAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuXG4gICAgICAvLyBBZGQgdHlwZSBndWFyZCB0byBwcmV2ZW50IFR5cGVFcnJvciB3aGVuIGJhY2tlbmQgcmV0dXJucyBub24tb2JqZWN0IChlLmcuLCBlbXB0eSBzdHJpbmcsIG51bGwsIHVuZGVmaW5lZClcbiAgICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gXCJvYmplY3RcIiAmJiBkYXRhICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gZGF0YS5MaXZlQ2hhdFZlcnNpb247XG4gICAgICAgIH1cblxuICAgICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMgJiYgcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl0pIHtcbiAgICAgICAgICBkYXRhLmhlYWRlcnNbXCJkYXRlXCJdID0gcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lLCBnZXRSZXRyeUNvdW50KHJlc3BvbnNlPy5jb25maWcpKTtcblxuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHJldHJ5Q291bnQgPSBnZXRSZXRyeUNvdW50KChlcnJvciBhcyBBeGlvc0Vycm9yKT8uY29uZmlnKTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSwgcmV0cnlDb3VudCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIExXSSBkZXRhaWxzLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKiBAcGFyYW0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgTFdJIERldGFpbHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TFdJRGV0YWlscyhyZXF1ZXN0SWQ6IHN0cmluZywgZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zOiBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVEFSVEVELCBcIkdldCBMV0kgRGV0YWlscyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgLy8gY29uc3RydWN0IGEgZW5kcG9pbnQgZm9yIGFub255bW91cyBjaGF0cyB0byBnZXQgTFdJIERldGFpbHNcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXJXaXRoTm90Rm91bmQoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0TFdJRGV0YWlscyxcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTRkFJTEVELCBcIkdldCBMV0kgRGV0YWlscyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4sIE1zT2NCb3RBcHBsaWNhdGlvbklkIH0gPSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCBtdWx0aUJvdCA9IChNc09jQm90QXBwbGljYXRpb25JZCAmJiBNc09jQm90QXBwbGljYXRpb25JZC5sZW5ndGggPiAwKT8gdHJ1ZTogZmFsc2U7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1RBUlRFRCwgXCJHZXQgQ2hhdCBUb2tlbiBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBpZiAoY3VycmVudFJldHJ5Q291bnQgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY3VycmVudFJldHJ5Q291bnRgKTtcbiAgICB9XG5cbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UsIG11bHRpQm90KTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cbiAgICBpZiAoTXNPY0JvdEFwcGxpY2F0aW9uSWQgJiYgTXNPY0JvdEFwcGxpY2F0aW9uSWQubGVuZ3RoID4gMCkge1xuICAgICAgcGFyYW1zWydNcy1PYy1Cb3QtQXBwbGljYXRpb24tSWQnXSA9IE1zT2NCb3RBcHBsaWNhdGlvbklkO1xuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5yZWZyZXNoVG9rZW4gPSAndHJ1ZSdcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogKGN1cnJlbnRSZXRyeUNvdW50ID4gdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlKSA/IGN1cnJlbnRSZXRyeUNvdW50IDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgcmV0cnlPbjQyOTogdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgY2hhdCB0b2tlbiByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSAmJiBPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VOU1VDQ0VFREVELCBcIkdldCBDaGF0IFRva2VuIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmICghZGF0YSAmJiByZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIiksIHtcbiAgICAgICAgICByZXNwb25zZTogeyBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyB9XG4gICAgICAgIH0pO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTkZBSUxFRCwgXCJHZXQgQ2hhdCBUb2tlbiBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5ld3MgdGhlIEFDUyBjaGF0IHRva2VuIG9mIHRoZSB2aXNpdG9yIGluIGFuIG9wZW4gY29udmVyc2F0aW9uLCBzbyB0aGUgY2hhdCBjYW4gY29udGludWUgYWZ0ZXIgdGhlIHRva2VuXG4gICAqIGZyb20gZ2V0Q2hhdFRva2VuIGV4cGlyZXMuIFJlamVjdHMgd2hlbiB0aGUgQVBJIGlzIG5vdCBhdmFpbGFibGUgb3IgdGhlIGNvbnZlcnNhdGlvbiBjYW4ndCBiZSByZW5ld2VkIChlLmcuIDQwNCk7XG4gICAqIGNhbGxlcnMgc2hvdWxkIGtlZXAgdGhlaXIgY3VycmVudCB0b2tlbiBpbiB0aGF0IGNhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBjb252ZXJzYXRpb24sIG9yIHRoZSByZWNvbm5lY3QgaWQgZm9yIGEgcmVjb25uZWN0ZWQgY2hhdC5cbiAgICogQHBhcmFtIHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgcmVuZXcgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyByZW5ld0NoYXRUb2tlbihyZXF1ZXN0SWQ6IHN0cmluZywgcmVuZXdDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSVJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8UmVuZXdDaGF0VG9rZW5SZXNwb25zZT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIG1heFJldHJpZXMgfSA9IHJlbmV3Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuUkVORVdDSEFUVE9LRU5TVEFSVEVELCBcIlJlbmV3IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCByZXF1ZXN0SWRgKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBlbmRwb2ludCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aFJlbmV3Q2hhdFRva2VuUGF0aCA6IE9tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJSZW5ld0NoYXRUb2tlblBhdGg7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7ZW5kcG9pbnR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9O1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcucmVuZXdDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdHlwZW9mIG1heFJldHJpZXMgPT09IFwibnVtYmVyXCIgJiYgTnVtYmVyLmlzSW50ZWdlcihtYXhSZXRyaWVzKSAmJiBtYXhSZXRyaWVzID49IDBcbiAgICAgICAgPyBtYXhSZXRyaWVzIDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnPy5yZW5ld0NoYXRUb2tlbiA/PyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncy5yZW5ld0NoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSBcIm9iamVjdFwiIHx8ICFkYXRhLlRva2VuKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGEgcmVjZWl2ZWQgZnJvbSByZW5ld0NoYXRUb2tlblwiKTtcbiAgICAgICAgICAvLyBOb3QgcGFzc2luZyByZXNwb25zZTogbG9nV2l0aExvZ2dlciByZWFkcyByZXNwb25zZS5kYXRhLlJlZ2lvbiwgd2hpY2ggdGhyb3dzIHdoZW4gZGF0YSBpcyBudWxsXG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VORkFJTEVELCBcIlJlbmV3IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgZGF0YS5yZXF1ZXN0SWQgPSByZXF1ZXN0SWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlJFTkVXQ0hBVFRPS0VOU1VDQ0VFREVELCBcIlJlbmV3IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5SRU5FV0NIQVRUT0tFTkZBSUxFRCwgXCJSZW5ldyBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICAgKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UmVjb25uZWN0YWJsZUNoYXRzKHJlY29ubmVjdGFibGVDaGF0c1BhcmFtczogSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyk6IFByb21pc2U8UmVjb25uZWN0TWFwcGluZ1JlY29yZCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTU1RBUlRFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBjaGF0IFN0YXJ0ZWRcIik7XG4gICAgY29uc3QgcmVxdWVzdElkID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zPy5yZXF1ZXN0SWQ7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgcmVjb25uZWN0YWJsZSBjaGF0cyByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0YWJsZSBDaGF0cyBTdWNjZWVkZWQgYW5kIG9sZCBzZXNzaW9uIHJldHVybmVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgaW4gdGhlIG9sZCBzZXNzaW9ucyBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTRkFJTEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAqIEZldGNoZXMgdGhlIHJlY29ubmVjdGFibGUgY2hhdHMgZnJvbSBvbW5pY2hhbm5lbCBmcm9tIHRoZSBnaXZlbiB1c2VyIGluZm9ybWF0aW9uIGluIEpXVCB0b2tlbihjbGFpbSBuYW1lOiBzdWIpLlxuICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkocmVjb25uZWN0SWQ6IHN0cmluZywgb3B0aW9uYWxQYXJhbXM6IElSZWNvbm5lY3RBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMob3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5XG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBObyBkYXRhIGZvdW5kIHNvIHJldHVybmluZyBudWxsXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5XQVJOLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBkaWRuJ3Qgc2VuZCBhbnkgdmFsaWQgZGF0YVwiLCBvcHRpb25hbFBhcmFtcz8ucmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgb3B0aW9uYWxQYXJhbXM/LnJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgLy9kYXRhLmNhY2hlS2V5ID0gaGFzaC5jcmVhdGVIYXNoKCdzaGEyNTYnKS51cGRhdGUoSlNPTi5zdHJpbmdpZnkoY2FjaE9iaikpLmRpZ2VzdCgnaGV4JykudG9TdHJpbmcoKTtcbiAgICBkYXRhLmNhY2hlS2V5ID0gU0hBMjU2KEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS50b1N0cmluZyhIZXgpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKFwiRW1wdHkgZGF0YSByZWNlaXZlZCBmcm9tIGdldEFnZW50QXZhaWxhYmlsaXR5XCIpLCB7XG4gICAgICAgICAgcmVzcG9uc2U6IHsgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMgfVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKidcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGNvbnN0IGJhc2VQYXRoID0gYXV0aGVudGljYXRlZFVzZXJUb2tlblxuICAgICAgPyBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGhcbiAgICAgIDogT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGg7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7YmFzZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkICYmIHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklURkFJTEVELCBcIlNlc3Npb24gSW5pdCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBhc3luYyBjcmVhdGVDb252ZXJzYXRpb24ocmVxdWVzdElkOiBzdHJpbmcsIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuQ1JFQVRFU0VTU0lPTlNUQVJURUQsIFwiQ3JlYXRlIGNvbnZlcnNhdGlvbiBjYWxsIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG5cbiAgICBjb25zdCBiYXNlUGF0aCA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5cbiAgICAgID8gT21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aFxuICAgICAgOiBPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdENvbm5lY3RvclBhdGg7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtiYXNlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0QXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbmA7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikgeyAgICAgXG4gICAgICBPYmplY3QuYXNzaWduKHJlcXVlc3RIZWFkZXJzLCB7XG4gICAgICAgIFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dOiBhdXRoZW50aWNhdGVkVXNlclRva2VuLFxuICAgICAgICBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXTogdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBkYXRhLnJlY29ubmVjdElkID0gcmVjb25uZWN0SWQ7XG4gICAgfVxuXG4gICAgZGF0YS5jaGFubmVsSWQgPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWQ7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICB0aGlzLnNlc3Npb25JZCA9IGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBjaGVjayBpZiBkYXRhIGlzIGVtcHR5LCBpZiBzbywgdGhlbiB0aHJvdyBhbiBlcnJvclxuICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpO1xuICAgICAgfVxuXG4gICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkNSRUFURVNFU1NJT05TVUNDRUVERUQsIFwiQ3JlYXRlIGNvdmVyc2F0aW9uIGNhbGwgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5DUkVBVEVTRVNTSU9ORkFJTEVELCBcIkNyZWF0ZSBjb252ZXJzYXRpb24gY2FsbCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCBkYXRhLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgXG4gICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKTtcbiAgICAgIH1cbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICBjb25zdCBkYXRhOiBhbnkgPSB7fTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgZGF0YS5jaGF0SWQgPSBjaGF0SWQ7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1VDQ0VFREVELCBcIlNlc3Npb24gQ2xvc2Ugc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VGQUlMRUQsIFwiU2Vzc2lvbiBjbG9zZSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBpZiAocmVzcG9uc2UuZGF0YT8uYXV0aENoYXRFeGlzdCA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXJyb3IudG9TdHJpbmcoKSA9PT0gXCJFcnJvcjogUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSA0MDRcIikgeyAvLyBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgcmVzb2x2ZSh7fSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlKHJlcXVlc3RJZDogc3RyaW5nLCBwb3N0Q2hhdFJlc3BvbnNlOiBvYmplY3QsIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNVQk1JVFBPU1RDSEFUU1RBUlRFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShwb3N0Q2hhdFJlc3BvbnNlKSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0U3VydmV5SW52aXRlTGluayhzdXJ2ZXlPd25lcklkOiBzdHJpbmcsIHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5OiBvYmplY3QsIGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtczogSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgaWYgKHRoaXMubG9nZ2VyKSB7XG4gICAgICB0aGlzLmxvZ2dlci5sb2coTG9nTGV2ZWwuSU5GTyxcbiAgICAgICAgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCxcbiAgICAgICAgeyBTdXJ2ZXlPd25lcklkOiBzdXJ2ZXlPd25lcklkIH0sXG4gICAgICAgIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBTdGFydGVkXCIpO1xuICAgIH1cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgcmVxdWVzdElkIH0gPSBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucmVxdWVzdElkXSA9IHJlcXVlc3RJZDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHN1cnZleUludml0ZUFQSVJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGNoYXQgdHJhbnNjcmlwdHMgZm9yIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGNoYXRJZCBDaGF0IHRocmVhZCBJZC5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdHJhbnNjcmlwdHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRyYW5zY3JpcHRzKHJlcXVlc3RJZDogc3RyaW5nLCBjaGF0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM6IElHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVEFSVEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiB9ID0gZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuXG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkgZm9yIGF1dGhlbnRpY2F0ZWQgdXNlcnMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5KHJlcXVlc3RJZDogc3RyaW5nLCBnZXRQZXJzaXN0ZW50Q2hhdEhpc3RvcnlPcHRpb25hbFBhcmFtczogSUdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllTVEFSVEVELCBcIkdldCBQZXJzaXN0ZW50IENoYXQgSGlzdG9yeSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHBhZ2VTaXplLCBwYWdlVG9rZW4gfSA9IGdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeU9wdGlvbmFsUGFyYW1zO1xuXG4gICAgaWYgKCFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICBjb25zdCBlcnJvck1lc3NhZ2UgPSBcIkF1dGhlbnRpY2F0ZWQgdXNlciB0b2tlbiBpcyByZXF1aXJlZCBmb3IgcGVyc2lzdGVudCBjaGF0IGhpc3RvcnlcIjtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZCAtIE1pc3NpbmcgYXV0aGVudGljYXRlZCB1c2VyIHRva2VuXCIsIHJlcXVlc3RJZCk7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGVycm9yTWVzc2FnZSkpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aEdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS9jb252ZXJzYXRpb24vaGlzdG9yeWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldFBlcnNpc3RlbnRDaGF0SGlzdG9yeVxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHt9O1xuICAgIFxuICAgIGlmIChwYWdlU2l6ZSkge1xuICAgICAgcGFyYW1zLnBhZ2VTaXplID0gcGFnZVNpemUudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICAvLyBpbiBjYXNlIHBhZ2UgdG9rZW4gaXMgYXNzaWduZWQgZnJvbSBtdXRhdGVkIGhlYWRlcnMsIHdlIG92ZXJyaWRlIHdpdGggdGhlIGFjdHVhbCB2YWx1ZSBvciBlbXB0eVxuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMucGFnZVRva2VuXSA9IHBhZ2VUb2tlbiB8fCBcIlwiO1xuICAgXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UGVyc2lzdGVudENoYXRIaXN0b3J5XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFBFUlNJU1RFTlRDSEFUSElTVE9SWVNVQ0NFRURFRCwgXCJHZXQgUGVyc2lzdGVudCBDaGF0IEhpc3Rvcnkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRQRVJTSVNURU5UQ0hBVEhJU1RPUllGQUlMRUQsIFwiR2V0IFBlcnNpc3RlbnQgQ2hhdCBIaXN0b3J5IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFbWFpbCB0cmFuc2NyaXB0IHRvIGN1c3RvbWVyLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHRva2VuIFNreXBlIHRva2VuLlxuICAgKiBAcGFyYW0gZW1haWxSZXF1ZXN0Qm9keSBFbWFpbCByZXF1ZXN0IGJvZHkuXG4gICAqIEBwYXJhbSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBlbWFpbCB0cmFuc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGVtYWlsVHJhbnNjcmlwdChyZXF1ZXN0SWQ6IHN0cmluZywgdG9rZW46IHN0cmluZywgZW1haWxSZXF1ZXN0Qm9keTogb2JqZWN0LCBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtczogSUVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRU1BSUxUUkFOU0NSSVBUU1RBUlRFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShlbWFpbFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBiYWNrZW5kVGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBkYXRhIG1hc2tpbmcgaW5mbyBvZiB0aGUgb3JnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbiAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGZldGNoRGF0YU1hc2tpbmdJbmZvKHJlcXVlc3RJZDogc3RyaW5nKTogUHJvbWlzZTxJRGF0YU1hc2tpbmdJbmZvPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdTVEFSVEVELCBcIkZldGNoIERhdGEgTWFza2luZyBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZmV0Y2hEYXRhTWFza2luZ0luZm9cbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCBcIkZldGNoIERhdGEgTWFza2luZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSA9IGJhY2tlbmRUaW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ha2VzIGEgc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnQgbmV0d29yayBjYWxsIHRvIE9tbmljaGFubmVsLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSBzZWNvbmRhcnlDaGFubmVsIGV2ZW50IHJlcXVlc3QgYm9keVxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0KHJlcXVlc3RJZDogc3RyaW5nLCBzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keTogb2JqZWN0LCBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtczogSVNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZWNvbmRhcnlDaGFubmVsRXZlbnRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgcmVxdWVzdFBhdGggKz0gXCI/Y2hhbm5lbElkPVwiICsgQ29uc3RhbnRzLmRlZmF1bHRDaGFubmVsSWQ7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5KSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBpZiAoY3VzdG9tZXJEaXNwbGF5TmFtZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRUeXBpbmdJbmRpY2F0b3JcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCwgXCJTZW5kIFR5cGluZyBJbmRpY2F0b3IgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBdXRoZW50aWNhdGVzIGFuIG9uZ29pbmcgKHByZXZpb3VzbHkgdW5hdXRoZW50aWNhdGVkKSBjaGF0IHNlc3Npb24uXG4gICAqIFVwZ3JhZGVzIGVuZ2FnZW1lbnQgY29udGV4dCBzbyBzdWJzZXF1ZW50IGNhbGxzIHVzZSBhdXRoZW50aWNhdGVkIGVuZHBvaW50cy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBDdXJyZW50IHJlcXVlc3QvY29ycmVsYXRpb24gaWRcbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXMgeyBjaGF0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfVxuICAgKi9cbiAgcHVibGljIGFzeW5jIG1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXQocmVxdWVzdElkOiBzdHJpbmcsIGF1dGhlbnRpY2F0ZUNoYXRQYXJhbXM6IHsgY2hhdElkOiBzdHJpbmc7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyB9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50Lk1JREFVVEhFTlRJQ0FURUNIQVRTVEFSVEVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCB7IGNoYXRJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gYXV0aGVudGljYXRlQ2hhdFBhcmFtcztcblxuICAgIGlmICghY2hhdElkIHx8ICFhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCxcbiAgICAgICAgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkIC0gY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiLCByZXF1ZXN0SWQpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiY2hhdElkIGFuZCBhdXRoZW50aWNhdGVkVXNlclRva2VuIGFyZSByZXF1aXJlZFwiKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhNaWRDb252ZXJzYXRpb25QYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5taWRDb252ZXJzYXRpb25BdXRoZW50aWNhdGVDaGF0XG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0geyAuLi5Db25zdGFudHMuZGVmYXVsdEhlYWRlcnMgfTtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG5cbiAgICB0aGlzLmFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0UmVxdWVzdElkSGVhZGVyKHJlcXVlc3RJZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1pZENvbnZlcnNhdGlvbkF1dGhlbnRpY2F0ZUNoYXRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGhlYWRlcnMgJiYgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldKSB7XG4gICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5NSURBVVRIRU5USUNBVEVDSEFUU1VDQ0VFREVELCBcIk1pZC1BdXRoZW50aWNhdGUgQ2hhdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzLCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuTUlEQVVUSEVOVElDQVRFQ0hBVEZBSUxFRCwgXCJNaWQtQXV0aGVudGljYXRlIENoYXQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHVucmVhZCBtZXNzYWdlIGNvdW50IGZvciB0aGUgYXV0aGVudGljYXRlZCB1c2VyLlxuICAgKiBBdXRoLW9ubHkgZW5kcG9pbnQg4oCUIGRvZXMgbm90IHJlcXVpcmUgYW4gYWN0aXZlIGNoYXQgc2Vzc2lvbi5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0VW5yZWFkTWVzc2FnZUNvdW50KGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW46IHN0cmluZyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNUQVJURUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29ubmVjdG9yQXV0aFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9L3dpZGdldGFwcC8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS91bnJlYWRtZXNzYWdlc2A7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSB7IC4uLkNvbnN0YW50cy5kZWZhdWx0SGVhZGVycyB9O1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuYWRkRGVmYXVsdEhlYWRlcnMocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRVbnJlYWRNZXNzYWdlQ291bnRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGJhY2tlbmRUaW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lID0gYmFja2VuZFRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFVOUkVBRE1FU1NBR0VDT1VOVFNVQ0NFRURFRCwgXCJHZXQgVW5yZWFkIE1lc3NhZ2UgQ291bnQgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRVTlJFQURNRVNTQUdFQ09VTlRGQUlMRUQsIFwiR2V0IFVucmVhZCBNZXNzYWdlIENvdW50IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmRzIGEgcmVhZCByZWNlaXB0IGZvciBhIHNwZWNpZmljIG1lc3NhZ2UgaW4gYW4gYXV0aGVudGljYXRlZCBjb252ZXJzYXRpb24uXG4gICAqIFVwZGF0ZXMgdGhlIHVucmVhZCBtZXNzYWdlIGNvdW50ZXIgb24gdGhlIHNlcnZlciBhbmQgZm9yd2FyZHMgdGhlIHJlY2VpcHQgdG8gQUNTLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCAoY29udmVyc2F0aW9uVGhyZWFkSWQpIG9mIHRoZSBjb252ZXJzYXRpb24uXG4gICAqIEBwYXJhbSBtZXNzYWdlSWQgVGhlIEFDUyBtZXNzYWdlIElEIHRvIG1hcmsgYXMgcmVhZC5cbiAgICogQHBhcmFtIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gQXV0aCB0b2tlbiBmb3IgdGhlIHVzZXIuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFJlYWRSZWNlaXB0KHJlcXVlc3RJZDogc3RyaW5nLCBtZXNzYWdlSWQ6IHN0cmluZywgYXV0aGVudGljYXRlZFVzZXJUb2tlbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRSRUFEUkVDRUlQVFNUQVJURUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25uZWN0b3JBdXRoUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vd2lkZ2V0YXBwLyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9L2NvbnZlcnNhdGlvbnMvJHtyZXF1ZXN0SWR9L3JlYWRyZWNlaXB0YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IHsgLi4uQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzIH07XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuXG4gICAgdGhpcy5hZGREZWZhdWx0SGVhZGVycyhyZXF1ZXN0SWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoeyBtZXNzYWdlSWQgfSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRSZWFkUmVjZWlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgYmFja2VuZFRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VORFJFQURSRUNFSVBUU1VDQ0VFREVELCBcIlNlbmQgUmVhZCBSZWNlaXB0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMsIGh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUgPSBiYWNrZW5kVGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EUkVBRFJFQ0VJUFRGQUlMRUQsIFwiU2VuZCBSZWFkIFJlY2VpcHQgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycywgaHR0cFJlcXVlc3RSZXNwb25zZVRpbWUpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55LCBodHRwUmVxdWVzdFJlc3BvbnNlVGltZT86IG51bWJlciwgcmV0cnlDb3VudD86IG51bWJlcik6IHZvaWQgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBpZiAoIXRoaXMubG9nZ2VyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChlcnJvcikge1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyhlcnJvcik7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0UGF5bG9hZCkge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB7IC4uLnJlcXVlc3RQYXlsb2FkIH07XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEN1c3RvbUNvbnRleHREYXRhVmFsdWVzKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKTtcbiAgICAgIH1cbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpIHtcbiAgICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFByZUNoYXRSZXNwb25zZShzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5wcmVDaGF0UmVzcG9uc2UpO1xuICAgICAgfVxuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcEdlb2xvY2F0aW9uKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB1bmRlZmluZWQ7XG4gICAgbGV0IGF1dGhUb2tlbkRldGFpbHM6IGFueSA9IHVuZGVmaW5lZDsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKHJlcXVlc3RIZWFkZXJzKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHsgLi4ucmVxdWVzdEhlYWRlcnMgfTtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMoc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICBpZiAocmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSkge1xuICAgICAgICBpZiAod2luZG93LmRvY3VtZW50ICYmIHdpbmRvdy5hdG9iKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IHRva2VuID0gcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXTtcbiAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSB0b2tlbi5zcGxpdChcIi5cIilbMV07XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gd2luZG93LmF0b2IocGF5bG9hZCk7XG4gICAgICAgICAgICBjb25zdCBqc29uRGF0YSA9IEpTT04ucGFyc2UoZGF0YSk7XG4gICAgICAgICAgICBjb25zdCBsd2lDb250ZXh0cyA9IGpzb25EYXRhW1wibHdpY29udGV4dHNcIl07XG4gICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzID0ge1xuICAgICAgICAgICAgICBzdWI6IGpzb25EYXRhW1wic3ViXCJdLFxuICAgICAgICAgICAgICBleHA6IGpzb25EYXRhW1wiZXhwXCJdXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBpZiAobHdpQ29udGV4dHMpIHtcbiAgICAgICAgICAgICAgY29uc3QgbHdpQ29udGV4dHNEYXRhID0gSlNPTi5wYXJzZShsd2lDb250ZXh0cyk7XG4gICAgICAgICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhsd2lDb250ZXh0c0RhdGEpO1xuICAgICAgICAgICAgICBhdXRoVG9rZW5EZXRhaWxzLmx3aUNvbnRleHRzID0gbHdpQ29udGV4dHNEYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1lbXB0eVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGN1c3RvbURhdGEgPSB7XG4gICAgICBSZXF1ZXN0SWQ6IHJlcXVlc3RJZCxcbiAgICAgIFJlZ2lvbjogcmVzcG9uc2U/LmRhdGEuUmVnaW9uLFxuICAgICAgRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kczogZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyxcbiAgICAgIEh0dHBSZXF1ZXN0UmVzcG9uc2VUaW1lOiBodHRwUmVxdWVzdFJlc3BvbnNlVGltZSxcbiAgICAgIFRyYW5zYWN0aW9uSWQ6IHJlc3BvbnNlPy5oZWFkZXJzW0NvbnN0YW50cy50cmFuc2FjdGlvbmlkXSxcbiAgICAgIFJlcXVlc3RQYXRoOiByZXF1ZXN0UGF0aCxcbiAgICAgIFJlcXVlc3RNZXRob2Q6IG1ldGhvZCxcbiAgICAgIFJlc3BvbnNlU3RhdHVzQ29kZTogcmVzcG9uc2UgPyByZXNwb25zZS5zdGF0dXMgOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5zdGF0dXMgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgXG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5kYXRhIHx8IGVycm9yIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyxcbiAgICAgIFJlc3BvbnNlRXJyb3Jjb2RlOiBlcnJvciA/IChlcnJvciBhcyBhbnkpLnJlc3BvbnNlPy5oZWFkZXJzPy5lcnJvcmNvZGUgOiB1bmRlZmluZWQsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgQXV0aFRva2VuRGV0YWlsczogYXV0aFRva2VuRGV0YWlscyxcbiAgICAgIFJldHJ5Q291bnQ6IHJldHJ5Q291bnRcbiAgICB9O1xuICAgIHRoaXMubG9nZ2VyLmxvZyhsb2dMZXZlbCwgdGVsZW1ldHJ5RXZlbnRUeXBlLCBjdXN0b21EYXRhLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldEF1dGhDb2RlTm9uY2UgPSAoaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2UpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlID0gaGVhZGVycz8uYXV0aGNvZGVub25jZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRIZWFkZXJzKHJlcXVlc3RJZDogc3RyaW5nIHwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwKTogdm9pZCB7XG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG4gICAgdGhpcy5zZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIocmVxdWVzdElkLCByZXF1ZXN0SGVhZGVycyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIHNldFNlc3Npb25JZEhlYWRlciA9IChzZXNzaW9uSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogYW55KSA9PiB7XG4gICAgaWYgKHNlc3Npb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkXSA9IHNlc3Npb25JZDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldFJlcXVlc3RJZEhlYWRlciA9IChyZXF1ZXN0SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCwgaGVhZGVyczogU3RyaW5nTWFwKSA9PiB7XG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXRDb3JyZWxhdGlvbklkSW5IZWFkZXIgPSAoY29ycmVsYXRpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBTdHJpbmdNYXApID0+IHtcbiAgICBpZiAoY29ycmVsYXRpb25JZCkge1xuICAgICAgaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmNvcnJlbGF0aW9uSWRdID0gY29ycmVsYXRpb25JZDtcbiAgICB9XG4gIH1cbn1cblxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE1BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGtCQUFBLEdBQUFDLHVCQUFBLENBQUFKLE9BQUE7QUFFQSxJQUFBSyxZQUFBLEdBQUFMLE9BQUE7QUFDQSxJQUFBTSxVQUFBLEdBQUFKLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBTyxrQkFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsV0FBQSxHQUFBUixPQUFBO0FBRUEsSUFBQVMsT0FBQSxHQUFBUCxzQkFBQSxDQUFBRixPQUFBO0FBc0JBLElBQUFVLFFBQUEsR0FBQVIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFXLFNBQUEsR0FBQVgsT0FBQTtBQUNBLElBQUFZLGlCQUFBLEdBQUFaLE9BQUE7QUFFQSxJQUFBYSxPQUFBLEdBQUFiLE9BQUE7QUFDQSxJQUFBYyxxQkFBQSxHQUFBWixzQkFBQSxDQUFBRixPQUFBO0FBQ0EsSUFBQWUsdUJBQUEsR0FBQWIsc0JBQUEsQ0FBQUYsT0FBQTtBQU9BLElBQUFnQixJQUFBLEdBQUFkLHNCQUFBLENBQUFGLE9BQUE7QUFFQSxJQUFBaUIsTUFBQSxHQUFBakIsT0FBQTtBQUNBLElBQUFrQixpQkFBQSxHQUFBbEIsT0FBQTtBQUNBLElBQUFtQixrQkFBQSxHQUFBbkIsT0FBQTtBQUNBLElBQUFvQixxQkFBQSxHQUFBbEIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFxQix3QkFBQSxHQUFBbkIsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFzQixLQUFBLEdBQUF0QixPQUFBO0FBQ0EsSUFBQXVCLDhCQUFBLEdBQUF2QixPQUFBO0FBQXNGLElBQUF3QixJQUFBO0FBQUEsU0FBQXBCLHdCQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLDZCQUFBQyxPQUFBLE1BQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQXZCLHVCQUFBLFlBQUFBLHdCQUFBcUIsQ0FBQSxFQUFBQyxDQUFBLFNBQUFBLENBQUEsSUFBQUQsQ0FBQSxJQUFBQSxDQUFBLENBQUFLLFVBQUEsU0FBQUwsQ0FBQSxNQUFBTSxDQUFBLEVBQUFDLENBQUEsRUFBQUMsQ0FBQSxLQUFBQyxTQUFBLG1CQUFBVCxDQUFBLGlCQUFBQSxDQUFBLGdCQUFBVSxRQUFBLENBQUFWLENBQUEsMEJBQUFBLENBQUEsU0FBQVEsQ0FBQSxNQUFBRixDQUFBLEdBQUFMLENBQUEsR0FBQUcsQ0FBQSxHQUFBRCxDQUFBLFFBQUFHLENBQUEsQ0FBQUssR0FBQSxDQUFBWCxDQUFBLFVBQUFNLENBQUEsQ0FBQU0sR0FBQSxDQUFBWixDQUFBLEdBQUFNLENBQUEsQ0FBQU8sR0FBQSxDQUFBYixDQUFBLEVBQUFRLENBQUEsY0FBQU0sSUFBQSxJQUFBZCxDQUFBLGdCQUFBYyxJQUFBLE9BQUFDLGNBQUEsQ0FBQUMsSUFBQSxDQUFBaEIsQ0FBQSxFQUFBYyxJQUFBLE9BQUFQLENBQUEsSUFBQUQsQ0FBQSxHQUFBVyxNQUFBLENBQUFDLGNBQUEsS0FBQUQsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBYyxJQUFBLE9BQUFQLENBQUEsQ0FBQUssR0FBQSxJQUFBTCxDQUFBLENBQUFNLEdBQUEsSUFBQVAsQ0FBQSxDQUFBRSxDQUFBLEVBQUFNLElBQUEsRUFBQVAsQ0FBQSxJQUFBQyxDQUFBLENBQUFNLElBQUEsSUFBQWQsQ0FBQSxDQUFBYyxJQUFBLFdBQUFOLENBQUEsS0FBQVIsQ0FBQSxFQUFBQyxDQUFBO0FBQUEsU0FBQW1CLFFBQUFwQixDQUFBLEVBQUFHLENBQUEsUUFBQUYsQ0FBQSxHQUFBZ0IsTUFBQSxDQUFBSSxJQUFBLENBQUFyQixDQUFBLE9BQUFpQixNQUFBLENBQUFLLHFCQUFBLFFBQUFoQixDQUFBLEdBQUFXLE1BQUEsQ0FBQUsscUJBQUEsQ0FBQXRCLENBQUEsR0FBQUcsQ0FBQSxLQUFBRyxDQUFBLEdBQUFBLENBQUEsQ0FBQWlCLE1BQUEsV0FBQXBCLENBQUEsV0FBQWMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbkIsQ0FBQSxFQUFBRyxDQUFBLEVBQUFxQixVQUFBLE9BQUF2QixDQUFBLENBQUF3QixJQUFBLENBQUFDLEtBQUEsQ0FBQXpCLENBQUEsRUFBQUssQ0FBQSxZQUFBTCxDQUFBO0FBQUEsU0FBQTBCLGNBQUEzQixDQUFBLGFBQUFHLENBQUEsTUFBQUEsQ0FBQSxHQUFBeUIsU0FBQSxDQUFBQyxNQUFBLEVBQUExQixDQUFBLFVBQUFGLENBQUEsV0FBQTJCLFNBQUEsQ0FBQXpCLENBQUEsSUFBQXlCLFNBQUEsQ0FBQXpCLENBQUEsUUFBQUEsQ0FBQSxPQUFBaUIsT0FBQSxDQUFBSCxNQUFBLENBQUFoQixDQUFBLE9BQUE2QixPQUFBLFdBQUEzQixDQUFBLFFBQUE0QixnQkFBQSxhQUFBL0IsQ0FBQSxFQUFBRyxDQUFBLEVBQUFGLENBQUEsQ0FBQUUsQ0FBQSxTQUFBYyxNQUFBLENBQUFlLHlCQUFBLEdBQUFmLE1BQUEsQ0FBQWdCLGdCQUFBLENBQUFqQyxDQUFBLEVBQUFpQixNQUFBLENBQUFlLHlCQUFBLENBQUEvQixDQUFBLEtBQUFtQixPQUFBLENBQUFILE1BQUEsQ0FBQWhCLENBQUEsR0FBQTZCLE9BQUEsV0FBQTNCLENBQUEsSUFBQWMsTUFBQSxDQUFBQyxjQUFBLENBQUFsQixDQUFBLEVBQUFHLENBQUEsRUFBQWMsTUFBQSxDQUFBRSx3QkFBQSxDQUFBbEIsQ0FBQSxFQUFBRSxDQUFBLGlCQUFBSCxDQUFBO0FBQUEsU0FBQWtDLDJCQUFBL0IsQ0FBQSxFQUFBSCxDQUFBLFFBQUFDLENBQUEseUJBQUFrQyxNQUFBLElBQUFoQyxDQUFBLENBQUFnQyxNQUFBLENBQUFDLFFBQUEsS0FBQWpDLENBQUEscUJBQUFGLENBQUEsUUFBQW9DLEtBQUEsQ0FBQUMsT0FBQSxDQUFBbkMsQ0FBQSxNQUFBRixDQUFBLEdBQUFzQywyQkFBQSxDQUFBcEMsQ0FBQSxNQUFBSCxDQUFBLElBQUFHLENBQUEsdUJBQUFBLENBQUEsQ0FBQTBCLE1BQUEsSUFBQTVCLENBQUEsS0FBQUUsQ0FBQSxHQUFBRixDQUFBLE9BQUF1QyxFQUFBLE1BQUFDLENBQUEsWUFBQUEsRUFBQSxlQUFBQyxDQUFBLEVBQUFELENBQUEsRUFBQXJDLENBQUEsV0FBQUEsRUFBQSxXQUFBb0MsRUFBQSxJQUFBckMsQ0FBQSxDQUFBMEIsTUFBQSxLQUFBYyxJQUFBLFdBQUFBLElBQUEsTUFBQUMsS0FBQSxFQUFBekMsQ0FBQSxDQUFBcUMsRUFBQSxVQUFBeEMsQ0FBQSxXQUFBQSxFQUFBRyxDQUFBLFVBQUFBLENBQUEsS0FBQUssQ0FBQSxFQUFBaUMsQ0FBQSxnQkFBQUksU0FBQSxpSkFBQXZDLENBQUEsRUFBQXdDLENBQUEsT0FBQUMsQ0FBQSxnQkFBQUwsQ0FBQSxXQUFBQSxFQUFBLElBQUF6QyxDQUFBLEdBQUFBLENBQUEsQ0FBQWUsSUFBQSxDQUFBYixDQUFBLE1BQUFDLENBQUEsV0FBQUEsRUFBQSxRQUFBRCxDQUFBLEdBQUFGLENBQUEsQ0FBQStDLElBQUEsV0FBQUYsQ0FBQSxHQUFBM0MsQ0FBQSxDQUFBd0MsSUFBQSxFQUFBeEMsQ0FBQSxLQUFBSCxDQUFBLFdBQUFBLEVBQUFHLENBQUEsSUFBQTRDLENBQUEsT0FBQXpDLENBQUEsR0FBQUgsQ0FBQSxLQUFBSyxDQUFBLFdBQUFBLEVBQUEsVUFBQXNDLENBQUEsWUFBQTdDLENBQUEsY0FBQUEsQ0FBQSw4QkFBQThDLENBQUEsUUFBQXpDLENBQUE7QUFBQSxTQUFBaUMsNEJBQUFwQyxDQUFBLEVBQUEyQyxDQUFBLFFBQUEzQyxDQUFBLDJCQUFBQSxDQUFBLFNBQUE4QyxpQkFBQSxDQUFBOUMsQ0FBQSxFQUFBMkMsQ0FBQSxPQUFBN0MsQ0FBQSxNQUFBaUQsUUFBQSxDQUFBbEMsSUFBQSxDQUFBYixDQUFBLEVBQUFnRCxLQUFBLDZCQUFBbEQsQ0FBQSxJQUFBRSxDQUFBLENBQUFpRCxXQUFBLEtBQUFuRCxDQUFBLEdBQUFFLENBQUEsQ0FBQWlELFdBQUEsQ0FBQUMsSUFBQSxhQUFBcEQsQ0FBQSxjQUFBQSxDQUFBLEdBQUFvQyxLQUFBLENBQUFpQixJQUFBLENBQUFuRCxDQUFBLG9CQUFBRixDQUFBLCtDQUFBc0QsSUFBQSxDQUFBdEQsQ0FBQSxJQUFBZ0QsaUJBQUEsQ0FBQTlDLENBQUEsRUFBQTJDLENBQUE7QUFBQSxTQUFBRyxrQkFBQTlDLENBQUEsRUFBQTJDLENBQUEsYUFBQUEsQ0FBQSxJQUFBQSxDQUFBLEdBQUEzQyxDQUFBLENBQUEwQixNQUFBLE1BQUFpQixDQUFBLEdBQUEzQyxDQUFBLENBQUEwQixNQUFBLFlBQUE3QixDQUFBLE1BQUFJLENBQUEsR0FBQWlDLEtBQUEsQ0FBQVMsQ0FBQSxHQUFBOUMsQ0FBQSxHQUFBOEMsQ0FBQSxFQUFBOUMsQ0FBQSxJQUFBSSxDQUFBLENBQUFKLENBQUEsSUFBQUcsQ0FBQSxDQUFBSCxDQUFBLFVBQUFJLENBQUE7QUFBQSxJQUVqRW9ELEdBQUcsR0FBQUMsT0FBQTtFQTZDdEIsU0FBQUQsSUFBMkJFLHdCQUFtRCxFQUFxRztJQUFBLElBQUFDLEtBQUE7SUFBQSxJQUEzRkMsYUFBZ0MsR0FBQWhDLFNBQUEsQ0FBQUMsTUFBQSxRQUFBRCxTQUFBLFFBQUFpQyxTQUFBLEdBQUFqQyxTQUFBLE1BQUc0QixHQUFHLENBQUNNLG9CQUFvQjtJQUFBLElBQVVDLE1BQW9CLEdBQUFuQyxTQUFBLENBQUFDLE1BQUEsT0FBQUQsU0FBQSxNQUFBaUMsU0FBQTtJQUFBLElBQUFHLGdCQUFBLG1CQUFBUixHQUFBO0lBQUEsS0FBdEpFLHdCQUFtRCxHQUFuREEsd0JBQW1EO0lBQUEsS0FBVUUsYUFBZ0MsR0FBaENBLGFBQWdDO0lBQUEsS0FBcUNHLE1BQW9CLEdBQXBCQSxNQUFvQjtJQUFBLElBQUFoQyxnQkFBQTtJQUFBLElBQUFBLGdCQUFBO0lBQUEsSUFBQUEsZ0JBQUE7SUFBQSxJQUFBQSxnQkFBQSxpREFBQWtDLE1BQUEsQ0FIcEpDLGVBQVEsQ0FBQ0MsMEJBQTBCLFFBQUFGLE1BQUEsQ0FBS0MsZUFBUSxDQUFDRSw2QkFBNkI7SUF1d0QzRztJQUFBLElBQUFyQyxnQkFBQSx1Q0FDMkIsVUFBQ3NDLE9BQVksRUFBSztNQUMzQyxJQUFJQSxPQUFPLGFBQVBBLE9BQU8sZUFBUEEsT0FBTyxDQUFFQyxhQUFhLEVBQUU7UUFDMUJYLEtBQUksQ0FBQ0MsYUFBYSxDQUFDVyxhQUFhLEdBQUdGLE9BQU8sYUFBUEEsT0FBTyx1QkFBUEEsT0FBTyxDQUFFQyxhQUFhO01BQzNEO0lBQ0YsQ0FBQztJQVFEO0lBQUEsSUFBQXZDLGdCQUFBLHlDQUM2QixVQUFDeUMsU0FBNkIsRUFBRUgsT0FBWSxFQUFLO01BQzVFLElBQUlHLFNBQVMsRUFBRTtRQUNiSCxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUMsR0FBR0YsU0FBUztNQUN6RDtJQUNGLENBQUM7SUFBQSxJQUFBekMsZ0JBQUEseUNBRTRCLFVBQUM0QyxTQUE2QixFQUFFTixPQUFrQixFQUFLO01BQ2xGLElBQUlNLFNBQVMsRUFBRTtRQUNiTixPQUFPLENBQUNJLGtDQUFzQixDQUFDRSxTQUFTLENBQUMsR0FBR0EsU0FBUztNQUN2RDtJQUNGLENBQUM7SUFBQSxJQUFBNUMsZ0JBQUEsK0NBRWtDLFVBQUM2QyxhQUFpQyxFQUFFUCxPQUFrQixFQUFLO01BQzVGLElBQUlPLGFBQWEsRUFBRTtRQUNqQlAsT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0csYUFBYSxDQUFDLEdBQUdBLGFBQWE7TUFDL0Q7SUFDRixDQUFDO0lBanlEQztJQUNBLElBQUksQ0FBQzNELE1BQU0sQ0FBQ0ksSUFBSSxDQUFDLElBQUksQ0FBQ3VDLGFBQWEsQ0FBQyxDQUFDL0IsTUFBTSxJQUFJLElBQUFnRCxRQUFBLGFBQVFqQixhQUFhLE1BQU0sUUFBUSxFQUFFO01BQ2xGLElBQUksQ0FBQ0EsYUFBYSxHQUFHSixHQUFHLENBQUNNLG9CQUFvQjtJQUMvQzs7SUFFQTtJQUNBLFNBQUFnQixFQUFBLE1BQUFDLFlBQUEsR0FBa0I5RCxNQUFNLENBQUNJLElBQUksQ0FBQ21DLEdBQUcsQ0FBQ00sb0JBQW9CLENBQUMsRUFBQWdCLEVBQUEsR0FBQUMsWUFBQSxDQUFBbEQsTUFBQSxFQUFBaUQsRUFBQSxJQUFFO01BQXBELElBQU1FLEdBQUcsR0FBQUQsWUFBQSxDQUFBRCxFQUFBO01BQ1osSUFBSSxDQUFDLElBQUksQ0FBQ2xCLGFBQWEsQ0FBQzdDLGNBQWMsQ0FBQ2lFLEdBQUcsQ0FBQyxFQUFFO1FBQUU7UUFDN0MsSUFBSSxDQUFDcEIsYUFBYSxJQUFBSyxNQUFBLENBQUllLEdBQUcsRUFBRyxHQUFHeEIsR0FBRyxDQUFDTSxvQkFBb0IsSUFBQUcsTUFBQSxDQUFJZSxHQUFHLEVBQUc7TUFDbkU7SUFDRjs7SUFFQTtJQUNBLFNBQUFDLEdBQUEsTUFBQUMsYUFBQSxHQUFrQmpFLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDbUMsR0FBRyxDQUFDTSxvQkFBb0IsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLEVBQUFtQixHQUFBLEdBQUFDLGFBQUEsQ0FBQXJELE1BQUEsRUFBQW9ELEdBQUEsSUFBRTtNQUE1RSxJQUFNRCxJQUFHLEdBQUFFLGFBQUEsQ0FBQUQsR0FBQTtNQUNaLElBQUksQ0FBQyxJQUFJLENBQUNyQixhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQzdDLGNBQWMsQ0FBQ2lFLElBQUcsQ0FBQyxFQUFFO1FBQUU7UUFDckUsSUFBSSxDQUFDcEIsYUFBYSxDQUFDLHNCQUFzQixDQUFDLElBQUFLLE1BQUEsQ0FBSWUsSUFBRyxFQUFHLEdBQUd4QixHQUFHLENBQUNNLG9CQUFvQixDQUFDLHNCQUFzQixDQUFDLElBQUFHLE1BQUEsQ0FBSWUsSUFBRyxFQUFHO01BQ25IO0lBQ0Y7O0lBRUE7SUFDQSxJQUFRRyxTQUFTLEdBQUt6Qix3QkFBd0IsQ0FBdEN5QixTQUFTO0lBQ2pCLElBQUksQ0FBQ2xFLE1BQU0sQ0FBQ21FLE1BQU0sQ0FBQ0MsZ0JBQVMsQ0FBQyxDQUFDQyxRQUFRLENBQUNILFNBQXNCLENBQUMsRUFBRTtNQUM5RCxNQUFNLElBQUlJLEtBQUssb0JBQW9CLENBQUM7SUFDdEM7O0lBRUE7SUFDQSxJQUFNQyx5Q0FBeUMsR0FBR3ZFLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDcUMsd0JBQXdCLENBQUM7SUFBQyxJQUFBK0IsU0FBQSxHQUFBdkQsMEJBQUEsQ0FDdEV3RCxxQkFBUyxDQUFDQywwQ0FBMEM7TUFBQUMsS0FBQTtJQUFBO01BQXRFLEtBQUFILFNBQUEsQ0FBQS9DLENBQUEsTUFBQWtELEtBQUEsR0FBQUgsU0FBQSxDQUFBckYsQ0FBQSxJQUFBdUMsSUFBQSxHQUF3RTtRQUFBLElBQTdEcUMsS0FBRyxHQUFBWSxLQUFBLENBQUFoRCxLQUFBO1FBQ1osSUFBSSxDQUFDNEMseUNBQXlDLENBQUNGLFFBQVEsQ0FBQ04sS0FBRyxDQUFDLEVBQUU7VUFDNUQsTUFBTSxJQUFJTyxLQUFLLGFBQUF0QixNQUFBLENBQWFlLEtBQUcsa0NBQStCLENBQUM7UUFDakU7TUFDRjtJQUFDLFNBQUFhLEdBQUE7TUFBQUosU0FBQSxDQUFBekYsQ0FBQSxDQUFBNkYsR0FBQTtJQUFBO01BQUFKLFNBQUEsQ0FBQWpGLENBQUE7SUFBQTtJQUVELElBQUksQ0FBQ3NGLFdBQVcsR0FBRyxJQUFJLENBQUNsQyxhQUFhLENBQUNrQyxXQUFXO0lBQ2pELElBQUksQ0FBQ0MsZUFBZSxHQUFHQyxzQkFBZSxDQUFDQyxFQUFFO0VBQzNDOztFQUdBO0FBQ0Y7QUFDQTtFQUZFLFdBQUFDLGFBQUEsYUFBQTFDLEdBQUE7SUFBQXdCLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBdUQsaUJBQUEsT0FBQUMsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUdBLFNBQUFDLFFBQUE7UUFBQSxJQUFBQyxLQUFBLEVBQUFDLFdBQUEsRUFBQUMsTUFBQSxFQUFBQyxHQUFBLEVBQUFDLGFBQUEsRUFBQUMsY0FBQSxFQUFBQyxZQUFBLEVBQUFDLHFCQUFBLEVBQUFDLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQUMsSUFBQSxFQUFBQyx3QkFBQSxFQUFBQywwQkFBQSxFQUFBQyxFQUFBO1FBQUEsT0FBQWpCLFlBQUEsWUFBQWtCLElBQUEsV0FBQUMsUUFBQTtVQUFBLGtCQUFBQSxRQUFBLENBQUFDLElBQUEsR0FBQUQsUUFBQSxDQUFBeEUsSUFBQTtZQUFBO2NBQ1F3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDQyx1QkFBdUIsRUFBRSw2QkFBNkIsRUFBRSxFQUFFLENBQUM7Y0FFM0d2QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ0MsaUJBQWlCLE9BQUFqRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUs7Y0FDL0Z6QixNQUFNLEdBQUcsS0FBSztjQUNkQyxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RHLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQjRCLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ0M7Y0FDOUUsQ0FBQyxDQUFDO2NBRUkvQixjQUFjLEdBQUcsQ0FBQyxDQUFDO2NBQ3pCLElBQUFnQyxzQ0FBb0IsRUFBQyxJQUFJLENBQUMvQyxXQUFXLEVBQUVlLGNBQWMsQ0FBQztjQUVoREMsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQUFILFFBQUEsQ0FBQUMsSUFBQTtjQUFBRCxRQUFBLENBQUF4RSxJQUFBO2NBQUEsT0FFVDRELGFBQWEsQ0FBQ2hHLEdBQUcsQ0FBQytGLEdBQUcsRUFBRTtnQkFDNUN0QyxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QmlDLE9BQU8sR0FBQS9CLHFCQUFBLEdBQUUsSUFBSSxDQUFDbkQsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFoQyxxQkFBQSxjQUFBQSxxQkFBQSxHQUFJLElBQUksQ0FBQ25ELGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDSjtjQUMvRixDQUFDLENBQUM7WUFBQTtjQUhJNUIsUUFBUSxHQUFBUSxRQUFBLENBQUF5QixJQUFBO2NBSVJoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO2NBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjtjQUNuRC9CLElBQUksR0FBS0gsUUFBUSxDQUFqQkcsSUFBSTtjQUNaLElBQUksQ0FBQ1MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDb0IseUJBQXlCLEVBQUUsK0JBQStCLEVBQUUsRUFBRSxFQUFFbkMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7Y0FBQyxPQUFBTyxRQUFBLENBQUE0QixNQUFBLFdBQ3hPakMsSUFBSTtZQUFBO2NBQUFLLFFBQUEsQ0FBQUMsSUFBQTtjQUFBSCxFQUFBLEdBQUFFLFFBQUE7Y0FFTFAsd0JBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjtjQUMxRGhDLDBCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7Y0FDM0QsSUFBSSxDQUFDdEIsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUN1QixzQkFBc0IsRUFBRSw0QkFBNEIsRUFBRSxFQUFFLEVBQUV6RixTQUFTLEVBQUVxRCwwQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFZLEVBQUEsRUFBU3pELFNBQVMsRUFBRWdELGNBQWMsRUFBRUksd0JBQXVCLENBQUM7Y0FBQyxNQUFBSyxFQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUFFLFFBQUEsQ0FBQStCLElBQUE7VUFBQTtRQUFBLEdBQUFoRCxPQUFBO01BQUEsQ0FHMU87TUFBQSxTQWpDWWlELGdCQUFnQkEsQ0FBQTtRQUFBLE9BQUFyRCxpQkFBQSxDQUFBekUsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFoQjRILGdCQUFnQjtJQUFBO0lBbUM3QjtBQUNGO0FBQ0E7QUFDQTtJQUhFO0VBQUE7SUFBQXhFLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBNkcsY0FBQSxPQUFBckQsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUlBLFNBQUFvRCxTQUEyQi9FLFNBQWlCO1FBQUEsSUFBQWdGLFdBQUE7VUFBQW5ELEtBQUE7VUFBQUMsV0FBQTtVQUFBQyxNQUFBO1VBQUFDLEdBQUE7VUFBQUMsYUFBQTtVQUFBQyxjQUFBO1VBQUFDLFlBQUE7VUFBQThDLHNCQUFBO1VBQUE1QyxRQUFBO1VBQUFDLHVCQUFBO1VBQUFDLHlCQUFBO1VBQUFDLElBQUE7VUFBQTBDLHlCQUFBO1VBQUFDLDJCQUFBO1VBQUFDLFVBQUE7VUFBQUMsTUFBQSxHQUFBcEksU0FBQTtVQUFBcUksR0FBQTtRQUFBLE9BQUE1RCxZQUFBLFlBQUFrQixJQUFBLFdBQUEyQyxTQUFBO1VBQUEsa0JBQUFBLFNBQUEsQ0FBQXpDLElBQUEsR0FBQXlDLFNBQUEsQ0FBQWxILElBQUE7WUFBQTtjQUFFMkcsV0FBVyxHQUFBSyxNQUFBLENBQUFuSSxNQUFBLFFBQUFtSSxNQUFBLFFBQUFuRyxTQUFBLEdBQUFtRyxNQUFBLE1BQUcsS0FBSztjQUN6RHhELEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNvQyxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRXhGLFNBQVMsQ0FBQztjQUNsSCxJQUFJLENBQUNBLFNBQVMsRUFBRTtnQkFDZEEsU0FBUyxHQUFHLElBQUF5RixZQUFNLEVBQUMsQ0FBQztjQUN0QjtjQUVNM0QsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNvQyxrQkFBa0IsT0FBQXBHLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRLGlCQUFBckcsTUFBQSxDQUFjVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVM7Y0FDdE51QixNQUFNLEdBQUcsS0FBSztjQUNkQyxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RHLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQjRCLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REOEIsVUFBVSxFQUFFLElBQUksQ0FBQzNHLGFBQWEsQ0FBQzRHLHVCQUF1QjtnQkFDdEQ5QiwwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ0M7Y0FDOUUsQ0FBQyxDQUFDO2NBRUUvQixjQUFjLEdBQUcsQ0FBQyxDQUFDO2NBQ3ZCLElBQUksQ0FBQzRELGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRWpELElBQUk4QyxXQUFXLEVBQUU7Z0JBQ2Y5QyxjQUFjLEdBQUFsRixhQUFBLENBQUFBLGFBQUEsS0FBUStELHFCQUFTLENBQUNnRixrQkFBa0IsR0FBSzdELGNBQWMsQ0FBRTtjQUN6RTtjQUVNQyxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FBQXVDLFNBQUEsQ0FBQXpDLElBQUE7Y0FBQXlDLFNBQUEsQ0FBQWxILElBQUE7Y0FBQSxPQUVUNEQsYUFBYSxDQUFDaEcsR0FBRyxDQUFDK0YsR0FBRyxFQUFFO2dCQUM1Q3RDLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCaUMsT0FBTyxHQUFBYyxzQkFBQSxHQUFFLElBQUksQ0FBQ2hHLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBYSxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQ2hHLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDSjtjQUMvRixDQUFDLENBQUM7WUFBQTtjQUhJNUIsUUFBUSxHQUFBa0QsU0FBQSxDQUFBakIsSUFBQTtjQUlSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjtjQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7Y0FDbkQvQixJQUFJLEdBQUtILFFBQVEsQ0FBakJHLElBQUksRUFFWjtjQUNBLElBQUksSUFBQXRDLFFBQUEsYUFBT3NDLElBQUksTUFBSyxRQUFRLElBQUlBLElBQUksS0FBSyxJQUFJLEVBQUU7Z0JBQzdDLElBQUlBLElBQUksQ0FBQ25CLGVBQWUsRUFBRTtrQkFDeEIsSUFBSSxDQUFDRCxlQUFlLEdBQUdvQixJQUFJLENBQUNuQixlQUFlO2dCQUM3QztnQkFFQW1CLElBQUksQ0FBQzlDLE9BQU8sR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUkyQyxRQUFRLENBQUMzQyxPQUFPLElBQUkyQyxRQUFRLENBQUMzQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7a0JBQ2hEOEMsSUFBSSxDQUFDOUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHMkMsUUFBUSxDQUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQztnQkFDakQ7Y0FDRjtjQUNBLElBQUksQ0FBQ3VELGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQzRDLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFaEcsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLEVBQUUsSUFBQTJELGdDQUFhLEVBQUM1RCxRQUFRLGFBQVJBLFFBQVEsdUJBQVJBLFFBQVEsQ0FBRTZELE1BQU0sQ0FBQyxDQUFDO2NBQUMsT0FBQVgsU0FBQSxDQUFBZCxNQUFBLFdBRXpRakMsSUFBSTtZQUFBO2NBQUErQyxTQUFBLENBQUF6QyxJQUFBO2NBQUF3QyxHQUFBLEdBQUFDLFNBQUE7Y0FFTGpELHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7Y0FDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO2NBQ3JEYSxVQUFVLEdBQUcsSUFBQWEsZ0NBQWEsRUFBQVgsR0FBQSxhQUFBQSxHQUFBLHVCQUFDQSxHQUFBLENBQXVCWSxNQUFNLENBQUM7Y0FDL0QsSUFBSSxDQUFDakQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMrQyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRW5HLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBdUQsR0FBQSxFQUFTcEcsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsRUFBRThDLFVBQVUsQ0FBQztjQUFDLE9BQUFHLFNBQUEsQ0FBQWQsTUFBQSxXQUM1TzJCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFBZixHQUFNLENBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQUMsU0FBQSxDQUFBWCxJQUFBO1VBQUE7UUFBQSxHQUFBRyxRQUFBO01BQUEsQ0FFL0I7TUFBQSxTQXZEWWQsYUFBYUEsQ0FBQXFDLEVBQUE7UUFBQSxPQUFBeEIsY0FBQSxDQUFBL0gsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFiZ0gsYUFBYTtJQUFBO0lBeUQxQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBSkU7RUFBQTtJQUFBNUQsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFzSSxjQUFBLE9BQUE5RSxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBS0EsU0FBQTZFLFNBQTJCeEcsU0FBaUI7UUFBQSxJQUFBeUcsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLDJCQUFBO1VBQUE5RSxLQUFBO1VBQUFDLFdBQUE7VUFBQUcsYUFBQTtVQUFBMkUsc0JBQUE7VUFBQUMsV0FBQTtVQUFBM0UsY0FBQTtVQUFBNEUsc0JBQUE7VUFBQUMsTUFBQTtVQUFBL0UsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUFDLE1BQUEsR0FBQWhLLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBc0UsU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFwRSxJQUFBLEdBQUFvRSxTQUFBLENBQUE3SSxJQUFBO1lBQUE7Y0FBRXNJLDJCQUF5RCxHQUFBTSxNQUFBLENBQUEvSixNQUFBLFFBQUErSixNQUFBLFFBQUEvSCxTQUFBLEdBQUErSCxNQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQ3BHcEYsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQytELG1CQUFtQixFQUFFLHlCQUF5QixFQUFFbkgsU0FBUyxDQUFDO2NBRWhILElBQUksQ0FBQ0EsU0FBUyxFQUFFO2dCQUNkQSxTQUFTLEdBQUcsSUFBQXlGLFlBQU0sRUFBQyxDQUFDO2NBQ3RCOztjQUVBO2NBQ0kzRCxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQzhELCtCQUErQixPQUFBOUgsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSVUsU0FBUztjQUNsS2lDLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUEwRCxnREFBNkIsRUFBQ3BGLGFBQWEsRUFBRTtnQkFDM0NxRixnQkFBZ0IsRUFBRSxDQUFDeEgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUN1RDtjQUM5RSxDQUFDLENBQUM7O2NBRUY7Y0FDUVgsc0JBQXNCLEdBQWtCRCwyQkFBMkIsQ0FBbkVDLHNCQUFzQixFQUFFQyxXQUFXLEdBQUtGLDJCQUEyQixDQUEzQ0UsV0FBVztjQUNyQzNFLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYyxHQUUvRDtjQUNBLElBQUlaLHNCQUFzQixFQUFFO2dCQUMxQjlFLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDbUUsbUNBQW1DLE9BQUFuSSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTLENBQUU7Z0JBQzFLa0MsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBRUEsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7O2NBRWpEO2NBQ000RSxzQkFBc0IsR0FBRyxDQUFDRixzQkFBc0IsSUFBSSxJQUFJLENBQUMzSCxhQUFhLENBQUN5SSxpQ0FBaUMsS0FBSyxJQUFJO2NBQ3ZILElBQUliLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUNDLHNCQUFzQixFQUFFO2tCQUMzQmhGLFdBQVcsUUFBQXhDLE1BQUEsQ0FBUXVILFdBQVcsQ0FBRTtnQkFDbEM7Y0FDRjtjQUVNRSxNQUFpQyxHQUFHO2dCQUN4Q3ZHLFNBQVMsRUFBRSxJQUFJLENBQUN6Qix3QkFBd0IsQ0FBQ3lCO2NBQzNDLENBQUM7Y0FFRCxJQUFJcUcsV0FBVyxFQUFFO2dCQUNmLElBQUlDLHNCQUFzQixFQUFFO2tCQUMxQkMsTUFBTSxDQUFDWSxHQUFHLEdBQUdkLFdBQVc7Z0JBQzFCO2NBQ0Y7Y0FFTTdFLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZGlGLE9BQTJCLEdBQUc7Z0JBQ2xDdEgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIK0UsTUFBTSxFQUFOQSxNQUFNO2dCQUNONUMsT0FBTyxHQUFBc0Msc0JBQUEsR0FBRSxJQUFJLENBQUN4SCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQXFDLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDeEgsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNrRDtjQUMvRixDQUFDO2NBQUEsT0FBQUwsU0FBQSxDQUFBekMsTUFBQSxXQUVNLElBQUkyQixPQUFPO2dCQUFBLElBQUF3QixJQUFBLE9BQUFuRyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQWtHLFNBQU9DLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUFxSSx5QkFBQSxFQUFBQywyQkFBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUF2RyxZQUFBLFlBQUFrQixJQUFBLFdBQUFzRixTQUFBO29CQUFBLGtCQUFBQSxTQUFBLENBQUFwRixJQUFBLEdBQUFvRixTQUFBLENBQUE3SixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQWtGLFNBQUEsQ0FBQXBGLElBQUE7d0JBQUFvRixTQUFBLENBQUE3SixJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBNkYsU0FBQSxDQUFBNUQsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixJQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQmdILE1BQUksQ0FBQ3lCLGdCQUFnQixDQUFDekksT0FBTyxDQUFDO3dCQUU5QmdILE1BQUksQ0FBQ3pELGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2dGLHFCQUFxQixFQUFFLDJCQUEyQixFQUFFcEksU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzdPd0YsT0FBTyxDQUFDdEYsSUFBSSxDQUFDO3dCQUFDMEYsU0FBQSxDQUFBN0osSUFBQTt3QkFBQTtzQkFBQTt3QkFBQTZKLFNBQUEsQ0FBQXBGLElBQUE7d0JBQUFtRixHQUFBLEdBQUFDLFNBQUE7d0JBR1I1Rix5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDJCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEbUMsTUFBSSxDQUFDekQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNpRixrQkFBa0IsRUFBRSx3QkFBd0IsRUFBRXJJLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBa0csR0FBQSxFQUFTL0ksU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFDck8sSUFBSSxJQUFBZ0csZ0NBQW9CLEVBQUFMLEdBQUEsRUFBUWxILHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDOEYsTUFBSSxDQUFDOEIsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUE0QixHQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsU0FBQSxDQUFBdEQsSUFBQTtvQkFBQTtrQkFBQSxHQUFBaUQsUUFBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQVksR0FBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUFkLElBQUEsQ0FBQTdLLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQWlLLFNBQUEsQ0FBQXRDLElBQUE7VUFBQTtRQUFBLEdBQUE0QixRQUFBO01BQUEsQ0FDSDtNQUFBLFNBaEZZZSxhQUFhQSxDQUFBb0IsR0FBQTtRQUFBLE9BQUFwQyxjQUFBLENBQUF4SixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQWJzSyxhQUFhO0lBQUE7SUFpRjFCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7SUFKRTtFQUFBO0lBQUFsSCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQTJLLGFBQUEsT0FBQW5ILGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBa0gsU0FBMEI3SSxTQUFpQjtRQUFBLElBQUE4SSxzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsMEJBQUE7VUFBQUMsaUJBQUE7VUFBQXBILEtBQUE7VUFBQWdGLFdBQUE7VUFBQUQsc0JBQUE7VUFBQXNDLHNCQUFBO1VBQUFDLFlBQUE7VUFBQUMsb0JBQUE7VUFBQUMsUUFBQTtVQUFBbkgsY0FBQTtVQUFBb0gsUUFBQTtVQUFBeEgsV0FBQTtVQUFBZ0Ysc0JBQUE7VUFBQUMsTUFBQTtVQUFBL0UsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUEvRSxhQUFBO1VBQUFzSCxNQUFBLEdBQUF0TSxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQTRHLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBMUcsSUFBQSxHQUFBMEcsU0FBQSxDQUFBbkwsSUFBQTtZQUFBO2NBQUUySywwQkFBdUQsR0FBQU8sTUFBQSxDQUFBck0sTUFBQSxRQUFBcU0sTUFBQSxRQUFBckssU0FBQSxHQUFBcUssTUFBQSxNQUFHLENBQUMsQ0FBQztjQUFFTixpQkFBeUIsR0FBQU0sTUFBQSxDQUFBck0sTUFBQSxRQUFBcU0sTUFBQSxRQUFBckssU0FBQSxHQUFBcUssTUFBQSxNQUFHLENBQUM7Y0FBcUM7Y0FDcksxSCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQ25CNkQsV0FBVyxHQUF5Rm1DLDBCQUEwQixDQUE5SG5DLFdBQVcsRUFBRUQsc0JBQXNCLEdBQWlFb0MsMEJBQTBCLENBQWpIcEMsc0JBQXNCLEVBQUVzQyxzQkFBc0IsR0FBeUNGLDBCQUEwQixDQUF6RkUsc0JBQXNCLEVBQUVDLFlBQVksR0FBMkJILDBCQUEwQixDQUFqRUcsWUFBWSxFQUFFQyxvQkFBb0IsR0FBS0osMEJBQTBCLENBQW5ESSxvQkFBb0I7Y0FDakdDLFFBQVEsR0FBSUQsb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDbE0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUUsS0FBSztjQUN2RixJQUFJLENBQUMrRixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNxRyxtQkFBbUIsRUFBRSx3QkFBd0IsRUFBRXpKLFNBQVMsQ0FBQztjQUFDLE1BRTVHaUosaUJBQWlCLEdBQUcsQ0FBQztnQkFBQU8sU0FBQSxDQUFBbkwsSUFBQTtnQkFBQTtjQUFBO2NBQUEsTUFDakIsSUFBSXVDLEtBQUssNEJBQTRCLENBQUM7WUFBQTtjQUc5QyxJQUFJLENBQUNaLFNBQVMsRUFBRTtnQkFDZEEsU0FBUyxHQUFHLElBQUF5RixZQUFNLEVBQUMsQ0FBQztjQUN0QjtjQUVNdkQsY0FBeUIsR0FBQWxGLGFBQUEsS0FBUStELHFCQUFTLENBQUN5RyxjQUFjO2NBQy9ELElBQUksQ0FBQzFCLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDb0gsUUFBUSxHQUFHLElBQUFJLDZDQUEwQixFQUFDUixzQkFBc0IsSUFBdUIsSUFBSSxDQUFDOUgsZUFBZSxFQUFFd0Ysc0JBQXNCLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFBRXlDLFFBQVEsQ0FBQztjQUUvSixJQUFJekMsc0JBQXNCLEVBQUU7Z0JBQzFCMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBRUlrQyxXQUFXLE9BQUF4QyxNQUFBLENBQU9nSyxRQUFRLE9BQUFoSyxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTLEdBRTVIO2NBQ004RyxzQkFBc0IsR0FBRyxDQUFDRixzQkFBc0IsSUFBSSxJQUFJLENBQUMzSCxhQUFhLENBQUN5SSxpQ0FBaUMsS0FBSyxJQUFJO2NBQ3ZILElBQUliLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUNDLHNCQUFzQixFQUFFO2tCQUMzQmhGLFdBQVcsUUFBQXhDLE1BQUEsQ0FBUXVILFdBQVcsQ0FBRTtnQkFDbEM7Y0FDRjtjQUVNRSxNQUFpQyxHQUFHO2dCQUN4Q3ZHLFNBQVMsRUFBRSxJQUFJLENBQUN6Qix3QkFBd0IsQ0FBQ3lCO2NBQzNDLENBQUM7Y0FDRCxJQUFJNEksb0JBQW9CLElBQUlBLG9CQUFvQixDQUFDbE0sTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDM0Q2SixNQUFNLENBQUMsMEJBQTBCLENBQUMsR0FBR3FDLG9CQUFvQjtjQUMzRDtjQUVBLElBQUlELFlBQVksRUFBRTtnQkFDaEJwQyxNQUFNLENBQUNvQyxZQUFZLEdBQUcsTUFBTTtjQUM5QjtjQUVBLElBQUl0QyxXQUFXLEVBQUU7Z0JBQ2YsSUFBSUMsc0JBQXNCLEVBQUU7a0JBQzFCQyxNQUFNLENBQUNZLEdBQUcsR0FBR2QsV0FBVztnQkFDMUI7Y0FDRjtjQUVNN0UsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsS0FBSztjQUNkaUYsT0FBMkIsR0FBRztnQkFDbEN0SCxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0grRSxNQUFNLEVBQU5BLE1BQU07Z0JBQ041QyxPQUFPLEdBQUEyRSxzQkFBQSxHQUFFLElBQUksQ0FBQzdKLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBMEUsc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUM3SixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ3NGO2NBQy9GLENBQUM7Y0FFSzFILGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQnFGLGdCQUFnQixFQUFFLENBQUN4SCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBR29GLGlCQUFpQixHQUFHLElBQUksQ0FBQ2hLLGFBQWEsQ0FBQzZFLDBCQUEwQixHQUFJbUYsaUJBQWlCLEdBQUcsSUFBSSxDQUFDaEssYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUNoSjhCLFVBQVUsRUFBRSxJQUFJLENBQUMzRyxhQUFhLENBQUMySyxzQkFBc0I7Z0JBQ3JEN0YsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUMyRjtjQUM5RSxDQUFDLENBQUM7Y0FBQyxPQUFBSCxTQUFBLENBQUEvRSxNQUFBLFdBRUksSUFBSTJCLE9BQU87Z0JBQUEsSUFBQXlELEtBQUEsT0FBQXBJLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBbUksU0FBT2hDLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUFxSyx5QkFBQSxFQUFBQywyQkFBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUF2SSxZQUFBLFlBQUFrQixJQUFBLFdBQUFzSCxTQUFBO29CQUFBLGtCQUFBQSxTQUFBLENBQUFwSCxJQUFBLEdBQUFvSCxTQUFBLENBQUE3TCxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQWtILFNBQUEsQ0FBQXBILElBQUE7d0JBQUFvSCxTQUFBLENBQUE3TCxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBNkgsU0FBQSxDQUFBNUYsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixJQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQnFKLE1BQUksQ0FBQ1osZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRTlCLElBQUlBLE9BQU8sRUFBRTswQkFDWCxJQUFJQSxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUNvSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7NEJBQzdEcEIsTUFBSSxDQUFDbEosU0FBUyxHQUFHSCxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUNvSyxXQUFXLENBQUMsQ0FBQyxDQUFDOzBCQUM1RTt3QkFDRjs7d0JBRUE7d0JBQUEsTUFDSTNILElBQUksSUFBSWxHLE1BQU0sQ0FBQ0ksSUFBSSxDQUFDOEYsSUFBSSxDQUFDLENBQUN0RixNQUFNLEdBQUcsQ0FBQzswQkFBQWdOLFNBQUEsQ0FBQTdMLElBQUE7MEJBQUE7d0JBQUE7d0JBQ3RDbUUsSUFBSSxDQUFDeEMsU0FBUyxHQUFHQSxTQUFTO3dCQUMxQitJLE1BQUksQ0FBQzlGLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2dILHFCQUFxQixFQUFFLDBCQUEwQixFQUFFcEssU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzVPd0YsT0FBTyxDQUFDdEYsSUFBSSxDQUFDO3dCQUFDLE9BQUEwSCxTQUFBLENBQUF6RixNQUFBO3NCQUFBO3dCQUFBLE1BS1osQ0FBQ2pDLElBQUksSUFBSXFFLFdBQVcsSUFBSXhFLFFBQVEsQ0FBQ2dJLE1BQU0sS0FBS3RKLHFCQUFTLENBQUN1SixtQkFBbUI7MEJBQUFKLFNBQUEsQ0FBQTdMLElBQUE7MEJBQUE7d0JBQUE7d0JBQzNFZ0ksTUFBTSxDQUFDaEUsUUFBUSxDQUFDO3dCQUFDLE9BQUE2SCxTQUFBLENBQUF6RixNQUFBO3NCQUFBO3dCQUFBLE1BSWJuSSxNQUFNLENBQUNpTyxNQUFNLENBQUMsSUFBSTNKLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxFQUFFOzBCQUN0RXlCLFFBQVEsRUFBRTs0QkFBRWdJLE1BQU0sRUFBRWhJLFFBQVEsQ0FBQ2dJOzBCQUFPO3dCQUN0QyxDQUFDLENBQUM7c0JBQUE7d0JBQUFILFNBQUEsQ0FBQXBILElBQUE7d0JBQUFtSCxHQUFBLEdBQUFDLFNBQUE7d0JBR0k1SCx5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDJCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEd0UsTUFBSSxDQUFDOUYsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNvSCxrQkFBa0IsRUFBRSx1QkFBdUIsRUFBRXhLLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBa0ksR0FBQSxFQUFTL0ssU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFDcE8sSUFBSSxJQUFBZ0csZ0NBQW9CLEVBQUEyQixHQUFBLEVBQVFsSixxQkFBUyxDQUFDd0gscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXpGLEtBQUssQ0FBQ21JLE1BQUksQ0FBQ1AsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUE0RCxHQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsU0FBQSxDQUFBdEYsSUFBQTtvQkFBQTtrQkFBQSxHQUFBa0YsUUFBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQVcsR0FBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUFiLEtBQUEsQ0FBQTlNLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQXVNLFNBQUEsQ0FBQTVFLElBQUE7VUFBQTtRQUFBLEdBQUFpRSxRQUFBO01BQUEsQ0FDSDtNQUFBLFNBaEhZYyxZQUFZQSxDQUFBZ0IsR0FBQTtRQUFBLE9BQUEvQixhQUFBLENBQUE3TCxLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQVowTSxZQUFZO0lBQUE7SUFrSHpCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTkU7RUFBQTtJQUFBdEosR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUEyTSxlQUFBLE9BQUFuSixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBT0EsU0FBQWtKLFNBQTRCN0ssU0FBaUI7UUFBQSxJQUFBOEssc0JBQUE7VUFBQUMscUJBQUE7VUFBQUMsc0JBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFDLDRCQUFBO1VBQUFySixLQUFBO1VBQUErRSxzQkFBQTtVQUFBdUUsVUFBQTtVQUFBakosY0FBQTtVQUFBb0gsUUFBQTtVQUFBeEgsV0FBQTtVQUFBaUYsTUFBQTtVQUFBL0UsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUEvRSxhQUFBO1VBQUFtSixNQUFBLEdBQUFuTyxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQXlJLFNBQUE7VUFBQSxrQkFBQUEsU0FBQSxDQUFBdkksSUFBQSxHQUFBdUksU0FBQSxDQUFBaE4sSUFBQTtZQUFBO2NBQUU2TSw0QkFBMkQsR0FBQUUsTUFBQSxDQUFBbE8sTUFBQSxRQUFBa08sTUFBQSxRQUFBbE0sU0FBQSxHQUFBa00sTUFBQSxNQUFHLENBQUMsQ0FBQztjQUN2R3ZKLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDbkI0RCxzQkFBc0IsR0FBaUJzRSw0QkFBNEIsQ0FBbkV0RSxzQkFBc0IsRUFBRXVFLFVBQVUsR0FBS0QsNEJBQTRCLENBQTNDQyxVQUFVO2NBQzFDLElBQUksQ0FBQ2xJLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2tJLHFCQUFxQixFQUFFLDBCQUEwQixFQUFFdEwsU0FBUyxDQUFDO2NBQUMsSUFFL0dBLFNBQVM7Z0JBQUFxTCxTQUFBLENBQUFoTixJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUNOLElBQUl1QyxLQUFLLG9CQUFvQixDQUFDO1lBQUE7Y0FHaENzQixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FDL0QsSUFBSVosc0JBQXNCLEVBQUU7Z0JBQzFCMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBQ0EsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NvSCxRQUFRLEdBQUcxQyxzQkFBc0IsR0FBR3RELGdDQUFvQixDQUFDaUksZ0NBQWdDLEdBQUdqSSxnQ0FBb0IsQ0FBQ2tJLDRCQUE0QjtjQUM3STFKLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dLLFFBQVEsT0FBQWhLLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRLE9BQUFyRyxNQUFBLENBQUlVLFNBQVM7Y0FDeEgrRyxNQUFpQyxHQUFHO2dCQUN4Q3ZHLFNBQVMsRUFBRSxJQUFJLENBQUN6Qix3QkFBd0IsQ0FBQ3lCO2NBQzNDLENBQUM7Y0FFS3dCLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZGlGLE9BQTJCLEdBQUc7Z0JBQ2xDdEgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIK0UsTUFBTSxFQUFOQSxNQUFNO2dCQUNONUMsT0FBTyxHQUFBMkcsc0JBQUEsR0FBRSxJQUFJLENBQUM3TCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQTBHLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDN0wsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNvSDtjQUMvRixDQUFDO2NBRUt4SixhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0JxRixnQkFBZ0IsRUFBRSxDQUFDeEgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsT0FBT3NILFVBQVUsS0FBSyxRQUFRLElBQUlPLE1BQU0sQ0FBQ0MsU0FBUyxDQUFDUixVQUFVLENBQUMsSUFBSUEsVUFBVSxJQUFJLENBQUMsR0FDdEZBLFVBQVUsR0FBRyxJQUFJLENBQUNsTSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQzlEQywwQkFBMEIsR0FBQWdILHFCQUFBLElBQUFDLHNCQUFBLEdBQUUsSUFBSSxDQUFDL0wsYUFBYSxDQUFDK0UsNEJBQTRCLGNBQUFnSCxzQkFBQSx1QkFBL0NBLHNCQUFBLENBQWlEUyxjQUFjLGNBQUFWLHFCQUFBLGNBQUFBLHFCQUFBLEdBQUlhLDREQUE2QixDQUFDSDtjQUMvSCxDQUFDLENBQUM7Y0FBQyxPQUFBSixTQUFBLENBQUE1RyxNQUFBLFdBRUksSUFBSTJCLE9BQU87Z0JBQUEsSUFBQXlGLEtBQUEsT0FBQXBLLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBbUssU0FBT2hFLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUFxTSxLQUFBLEVBQUFDLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQXhLLFlBQUEsWUFBQWtCLElBQUEsV0FBQXVKLFNBQUE7b0JBQUEsa0JBQUFBLFNBQUEsQ0FBQXJKLElBQUEsR0FBQXFKLFNBQUEsQ0FBQTlOLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBbUosU0FBQSxDQUFBckosSUFBQTt3QkFBQXFKLFNBQUEsQ0FBQTlOLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUE4SixTQUFBLENBQUE3SCxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCdUwsTUFBSSxDQUFDOUMsZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBQUMsTUFFM0IsQ0FBQzhDLElBQUksSUFBSSxJQUFBdEMsUUFBQSxhQUFPc0MsSUFBSSxNQUFLLFFBQVEsSUFBSSxDQUFDQSxJQUFJLENBQUM0SixLQUFLOzBCQUFBRCxTQUFBLENBQUE5TixJQUFBOzBCQUFBO3dCQUFBO3dCQUM1QzBOLEtBQUssR0FBRyxJQUFJbkwsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLEVBQ3BFO3dCQUNBcUssTUFBSSxDQUFDaEksYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNpSixvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRXJNLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFZ0ssS0FBSyxFQUFFN00sU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDeE8rRCxNQUFNLENBQUMwRixLQUFLLENBQUM7d0JBQUMsT0FBQUksU0FBQSxDQUFBMUgsTUFBQTtzQkFBQTt3QkFJaEJqQyxJQUFJLENBQUN4QyxTQUFTLEdBQUdBLFNBQVM7d0JBQzFCaUwsTUFBSSxDQUFDaEksYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDa0osdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUV0TSxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDaFB3RixPQUFPLENBQUN0RixJQUFJLENBQUM7d0JBQUMySixTQUFBLENBQUE5TixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBOE4sU0FBQSxDQUFBckosSUFBQTt3QkFBQW9KLEdBQUEsR0FBQUMsU0FBQTt3QkFFUjdKLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QwRyxNQUFJLENBQUNoSSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ2lKLG9CQUFvQixFQUFFLHlCQUF5QixFQUFFck0sU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFtSyxHQUFBLEVBQVNoTixTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUFDLEtBQ3JPLElBQUFnRyxnQ0FBb0IsRUFBQTRELEdBQUEsRUFBUW5MLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQzswQkFBQTRELFNBQUEsQ0FBQTlOLElBQUE7MEJBQUE7d0JBQUE7d0JBQzlEZ0ksTUFBTSxDQUFDLElBQUl6RixLQUFLLENBQUNxSyxNQUFJLENBQUN6Qyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUFDLE9BQUEyRCxTQUFBLENBQUExSCxNQUFBO3NCQUFBO3dCQUdsRDRCLE1BQU0sQ0FBQTZGLEdBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxTQUFBLENBQUF2SCxJQUFBO29CQUFBO2tCQUFBLEdBQUFrSCxRQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBUyxHQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQVgsS0FBQSxDQUFBOU8sS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBb08sU0FBQSxDQUFBekcsSUFBQTtVQUFBO1FBQUEsR0FBQWlHLFFBQUE7TUFBQSxDQUNIO01BQUEsU0F2RVlZLGNBQWNBLENBQUFnQixHQUFBO1FBQUEsT0FBQTdCLGVBQUEsQ0FBQTdOLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBZHdPLGNBQWM7SUFBQTtJQXlFM0I7QUFDRjtBQUNBO0FBQ0E7SUFIRTtFQUFBO0lBQUFwTCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXlPLHNCQUFBLE9BQUFqTCxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBSUEsU0FBQWdMLFNBQW1DQyx3QkFBbUQ7UUFBQSxJQUFBQyxzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQWpMLEtBQUEsRUFBQStFLHNCQUFBLEVBQUE1RyxTQUFBLEVBQUE4QixXQUFBLEVBQUFJLGNBQUEsRUFBQUYsR0FBQSxFQUFBRCxNQUFBLEVBQUFpRixPQUFBLEVBQUEvRSxhQUFBO1FBQUEsT0FBQVAsWUFBQSxZQUFBa0IsSUFBQSxXQUFBbUssU0FBQTtVQUFBLGtCQUFBQSxTQUFBLENBQUFqSyxJQUFBLEdBQUFpSyxTQUFBLENBQUExTyxJQUFBO1lBQUE7Y0FDOUV3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQ25CNEQsc0JBQXNCLEdBQUtnRyx3QkFBd0IsQ0FBbkRoRyxzQkFBc0I7Y0FDOUIsSUFBSSxDQUFDM0QsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDNEosNEJBQTRCLEVBQUUsZ0NBQWdDLENBQUM7Y0FDL0doTixTQUFTLEdBQUc0TSx3QkFBd0IsYUFBeEJBLHdCQUF3Qix1QkFBeEJBLHdCQUF3QixDQUFFNU0sU0FBUztjQUUvQzhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDMkosaUNBQWlDLE9BQUEzTixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVM7Y0FDM04wQixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FDL0R0RixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQzhHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtjQUN0RjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtjQUV2RixJQUFJLENBQUNrRyxpQkFBaUIsQ0FBQzlGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUUzQ0YsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsS0FBSztjQUNkaUYsT0FBMkIsR0FBRztnQkFDbEN0SCxPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUEwSSxzQkFBQSxHQUFFLElBQUksQ0FBQzVOLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBeUksc0JBQUEsY0FBQUEsc0JBQUEsR0FBSSxJQUFJLENBQUM1TixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzZJO2NBQy9GLENBQUM7Y0FFS2pMLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQUEsT0FBQW9KLFNBQUEsQ0FBQXRJLE1BQUEsV0FFN0IsSUFBSTJCLE9BQU87Z0JBQUEsSUFBQStHLEtBQUEsT0FBQTFMLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBeUwsU0FBT3RGLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUE5QyxPQUFBLEVBQUEyTix5QkFBQSxFQUFBQywyQkFBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUE3TCxZQUFBLFlBQUFrQixJQUFBLFdBQUE0SyxTQUFBO29CQUFBLGtCQUFBQSxTQUFBLENBQUExSyxJQUFBLEdBQUEwSyxTQUFBLENBQUFuUCxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQXdLLFNBQUEsQ0FBQTFLLElBQUE7d0JBQUEwSyxTQUFBLENBQUFuUCxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBbUwsU0FBQSxDQUFBbEosSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixJQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQm9OLE1BQUksQ0FBQzNFLGdCQUFnQixDQUFDekksT0FBTyxDQUFDOzt3QkFFOUI7d0JBQUEsS0FDSThDLElBQUk7MEJBQUFnTCxTQUFBLENBQUFuUCxJQUFBOzBCQUFBO3dCQUFBO3dCQUNOeU8sTUFBSSxDQUFDN0osYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDcUssOEJBQThCLEVBQUUsNERBQTRELEVBQUV6TixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDdlJ3RixPQUFPLENBQUN0RixJQUFJLENBQUM7d0JBQUMsT0FBQWdMLFNBQUEsQ0FBQS9JLE1BQUE7c0JBQUE7d0JBR2hCO3dCQUNBcUQsT0FBTyxDQUFDLENBQUM7d0JBQUMsT0FBQTBGLFNBQUEsQ0FBQS9JLE1BQUE7c0JBQUE7d0JBQUErSSxTQUFBLENBQUExSyxJQUFBO3dCQUFBeUssR0FBQSxHQUFBQyxTQUFBO3dCQUdKbEwseUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHVJLE1BQUksQ0FBQzdKLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDc0ssMkJBQTJCLEVBQUUsZ0NBQWdDLEVBQUUxTixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQXdMLEdBQUEsRUFBU3JPLFNBQVMsRUFBRWdELGNBQWMsRUFBRUkseUJBQXVCLENBQUM7d0JBQ3RQLElBQUksSUFBQWdHLGdDQUFvQixFQUFBaUYsR0FBQSxFQUFReE0scUJBQVMsQ0FBQ3dILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUl6RixLQUFLLENBQUNrTSxNQUFJLENBQUN0RSx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFDQW5DLE1BQU0sQ0FBQWtILEdBQU0sQ0FBQzt3QkFBQyxPQUFBQyxTQUFBLENBQUEvSSxNQUFBO3NCQUFBO3NCQUFBO3dCQUFBLE9BQUErSSxTQUFBLENBQUE1SSxJQUFBO29CQUFBO2tCQUFBLEdBQUF3SSxRQUFBO2dCQUFBLENBR2pCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsS0FBQSxDQUFBcFEsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBOFAsU0FBQSxDQUFBbkksSUFBQTtVQUFBO1FBQUEsR0FBQStILFFBQUE7TUFBQSxDQUNIO01BQUEsU0FyRFlPLHFCQUFxQkEsQ0FBQVcsR0FBQTtRQUFBLE9BQUFuQixzQkFBQSxDQUFBM1AsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFyQmlRLHFCQUFxQjtJQUFBO0lBdURsQztBQUNGO0FBQ0E7QUFDQTtJQUhFO0VBQUE7SUFBQTdNLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBNlAseUJBQUEsT0FBQXJNLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FJQSxTQUFBb00sVUFBc0NsSCxXQUFtQjtRQUFBLElBQUFtSCxzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsY0FBQTtVQUFBck0sS0FBQTtVQUFBQyxXQUFBO1VBQUFJLGNBQUE7VUFBQUYsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUEvRSxhQUFBO1VBQUFrTSxPQUFBLEdBQUFsUixTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQXdMLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBdEwsSUFBQSxHQUFBc0wsVUFBQSxDQUFBL1AsSUFBQTtZQUFBO2NBQUU2UCxjQUFvRCxHQUFBQyxPQUFBLENBQUFqUixNQUFBLFFBQUFpUixPQUFBLFFBQUFqUCxTQUFBLEdBQUFpUCxPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQzVHdE0sS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2lMLCtCQUErQixFQUFFLHdDQUF3QyxDQUFDO2NBRTFIdk0sV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNnTCxpQ0FBaUMsT0FBQWhQLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRLE9BQUFyRyxNQUFBLENBQUl1SCxXQUFXO2NBQ3hLM0UsY0FBeUIsR0FBQWxGLGFBQUEsS0FBUStELHFCQUFTLENBQUN5RyxjQUFjO2NBRS9ELElBQUksQ0FBQzFCLGlCQUFpQixDQUFDb0ksY0FBYyxhQUFkQSxjQUFjLHVCQUFkQSxjQUFjLENBQUVsTyxTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0RGLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZGlGLE9BQTJCLEdBQUc7Z0JBQ2xDdEgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBNkosc0JBQUEsR0FBRSxJQUFJLENBQUMvTyxhQUFhLENBQUNtRixxQkFBcUIsY0FBQTRKLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDL08sYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNrSztjQUMvRixDQUFDO2NBRUt0TSxhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUFBLE9BQUF5SyxVQUFBLENBQUEzSixNQUFBLFdBQzdCLElBQUkyQixPQUFPO2dCQUFBLElBQUFvSSxLQUFBLE9BQUEvTSxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQThNLFNBQU8zRyxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUFsRSxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQUMsSUFBQSxFQUFBa00seUJBQUEsRUFBQUMsMkJBQUEsRUFBQUMsR0FBQTtrQkFBQSxPQUFBbE4sWUFBQSxZQUFBa0IsSUFBQSxXQUFBaU0sU0FBQTtvQkFBQSxrQkFBQUEsU0FBQSxDQUFBL0wsSUFBQSxHQUFBK0wsU0FBQSxDQUFBeFEsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUE2TCxTQUFBLENBQUEvTCxJQUFBO3dCQUFBK0wsU0FBQSxDQUFBeFEsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQXdNLFNBQUEsQ0FBQXZLLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQ25EL0IsSUFBSSxHQUFLSCxRQUFRLENBQWpCRyxJQUFJO3dCQUFBLEtBQ1JBLElBQUk7MEJBQUFxTSxTQUFBLENBQUF4USxJQUFBOzBCQUFBO3dCQUFBO3dCQUNONFAsTUFBSSxDQUFDaEwsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMEwsaUNBQWlDLEVBQUUsc0NBQXNDLEVBQUVaLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFbE8sU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBRXBSd0YsT0FBTyxDQUFDdEYsSUFBSSxDQUFDO3dCQUFDLE9BQUFxTSxTQUFBLENBQUFwSyxNQUFBO3NCQUFBO3dCQUdoQjt3QkFDQXdKLE1BQUksQ0FBQ2hMLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQzZMLElBQUksRUFBRTNMLDBCQUFtQixDQUFDMEwsaUNBQWlDLEVBQUUsdURBQXVELEVBQUVaLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFbE8sU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBRXJTd0YsT0FBTyxDQUFDLENBQUM7d0JBQUMsT0FBQStHLFNBQUEsQ0FBQXBLLE1BQUE7c0JBQUE7d0JBQUFvSyxTQUFBLENBQUEvTCxJQUFBO3dCQUFBOEwsR0FBQSxHQUFBQyxTQUFBO3dCQUdKdk0seUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDBKLE1BQUksQ0FBQ2hMLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDNEwsOEJBQThCLEVBQUUsbUNBQW1DLEVBQUVkLGNBQWMsYUFBZEEsY0FBYyx1QkFBZEEsY0FBYyxDQUFFbE8sU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE2TSxHQUFBLEVBQVMxUCxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUM1USxJQUFJLElBQUFnRyxnQ0FBb0IsRUFBQXNHLEdBQUEsRUFBUTdOLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDcU4sTUFBSSxDQUFDekYsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUF1SSxHQUFNLENBQUM7d0JBQUMsT0FBQUMsU0FBQSxDQUFBcEssTUFBQTtzQkFBQTtzQkFBQTt3QkFBQSxPQUFBb0ssU0FBQSxDQUFBakssSUFBQTtvQkFBQTtrQkFBQSxHQUFBNkosUUFBQTtnQkFBQSxDQUdqQjtnQkFBQSxpQkFBQVEsSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFWLEtBQUEsQ0FBQXpSLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQW1SLFVBQUEsQ0FBQXhKLElBQUE7VUFBQTtRQUFBLEdBQUFtSixTQUFBO01BQUEsQ0FDSDtNQUFBLFNBaERZUSx3QkFBd0JBLENBQUFZLElBQUE7UUFBQSxPQUFBckIseUJBQUEsQ0FBQS9RLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBeEJzUix3QkFBd0I7SUFBQTtJQWtEckM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtJQUpFO0VBQUE7SUFBQWxPLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBbVIscUJBQUEsT0FBQTNOLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBME4sVUFBa0NyUCxTQUFpQjtRQUFBLElBQUFzUCxzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsK0JBQUE7VUFBQTNOLEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUEyRSxzQkFBQTtVQUFBNkksV0FBQTtVQUFBQyxVQUFBO1VBQUF4TixjQUFBO1VBQUFNLElBQUE7VUFBQW1OLE9BQUE7VUFBQUMsT0FBQTtVQUFBNU4sR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUE2SSxPQUFBLEdBQUE1UyxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQWtOLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBaE4sSUFBQSxHQUFBZ04sVUFBQSxDQUFBelIsSUFBQTtZQUFBO2NBQUVtUiwrQkFBb0UsR0FBQUssT0FBQSxDQUFBM1MsTUFBQSxRQUFBMlMsT0FBQSxRQUFBM1EsU0FBQSxHQUFBMlEsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUN0SGhPLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUMyTSwyQkFBMkIsRUFBRSxnQ0FBZ0MsRUFBRS9QLFNBQVMsQ0FBQztjQUV6SDhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDME0sd0JBQXdCLE9BQUExUSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTO2NBQzdKaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDaU07Y0FDOUUsQ0FBQyxDQUFDO2NBRU1ySixzQkFBc0IsR0FBOEI0SSwrQkFBK0IsQ0FBbkY1SSxzQkFBc0IsRUFBRTZJLFdBQVcsR0FBaUJELCtCQUErQixDQUEzREMsV0FBVyxFQUFFQyxVQUFVLEdBQUtGLCtCQUErQixDQUE5Q0UsVUFBVTtjQUVqRHhOLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUUvRCxJQUFJWixzQkFBc0IsRUFBRTtnQkFDMUIxRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQzhHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEYxRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FDekY7Y0FFQSxJQUFJLENBQUNrRyxpQkFBaUIsQ0FBQzlGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUUzQ00sSUFBaUIsR0FBR2lOLFdBQVcsSUFBSSxDQUFDLENBQUM7Y0FFckNFLE9BQU8sR0FBRztnQkFDZCxPQUFPLEVBQUUsSUFBSSxDQUFDNVEsd0JBQXdCLENBQUN5RSxLQUFLO2dCQUM1QyxVQUFVLEVBQUUsSUFBSSxDQUFDekUsd0JBQXdCLENBQUM0RztjQUM1QyxDQUFDO2NBRUQsSUFBSW5ELElBQUksSUFBSUEsSUFBSSxDQUFDME4saUJBQWlCLEVBQUU7Z0JBQzVCTixPQUFPLEdBQUdPLG9DQUFpQixDQUFDQyxJQUFJLENBQUM1TixJQUFJLENBQUMwTixpQkFBaUIsQ0FBQztnQkFDOUQ1VCxNQUFNLENBQUNpTyxNQUFNLENBQUNvRixPQUFPLEVBQUU7a0JBQUUsZUFBZSxFQUFFQztnQkFBUSxDQUFDLENBQUM7Y0FDdEQ7Y0FFQSxJQUFJcE4sSUFBSSxDQUFDNk4sZUFBZSxFQUFFO2dCQUN4Qi9ULE1BQU0sQ0FBQ2lPLE1BQU0sQ0FBQ29GLE9BQU8sRUFBRTtrQkFBRSxpQkFBaUIsRUFBRW5OLElBQUksQ0FBQzZOO2dCQUFnQixDQUFDLENBQUM7Y0FDckU7O2NBRUE7Y0FDQTdOLElBQUksQ0FBQzhOLFFBQVEsR0FBRyxJQUFBQyxlQUFNLEVBQUNDLElBQUksQ0FBQ0MsU0FBUyxDQUFDZCxPQUFPLENBQUMsQ0FBQyxDQUFDcFIsUUFBUSxDQUFDbVMsa0JBQUcsQ0FBQztjQUFDLE1BRTFEaEIsVUFBVSxJQUFJLENBQUNpQixNQUFNLENBQUNDLFFBQVE7Z0JBQUFkLFVBQUEsQ0FBQXpSLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUF5UixVQUFBLENBQUFyTCxNQUFBLFdBQ3pCMkIsT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSXpGLEtBQUssK0NBQStDLENBQUMsQ0FBQztZQUFBO2NBR2xGLElBQUk4TyxVQUFVLEVBQUU7Z0JBQ2RsTixJQUFJLENBQUNxTyxPQUFPLEdBQUdDLHdCQUFXLENBQUNDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzQ3ZPLElBQUksQ0FBQ3dPLE1BQU0sR0FBR0Msc0JBQVUsQ0FBQ0MsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDMU8sSUFBSSxDQUFDMk8sU0FBUyxHQUFHUixNQUFNLENBQUNTLFFBQVEsQ0FBQ0MsSUFBSTtnQkFDckM3TyxJQUFJLENBQUM4TyxFQUFFLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUM7Y0FDOUI7Y0FFQSxJQUFJLENBQUNoUCxJQUFJLENBQUNpUCxNQUFNLEVBQUU7Z0JBQ2hCalAsSUFBSSxDQUFDaVAsTUFBTSxHQUFHMVEscUJBQVMsQ0FBQzJRLGFBQWE7Y0FDdkM7O2NBRUE7Y0FBQSxNQUNJbFAsSUFBSSxDQUFDaVAsTUFBTSxJQUFJLENBQUNFLG1CQUFPLENBQUNDLGdCQUFnQixDQUFDalIsUUFBUSxDQUFDNkIsSUFBSSxDQUFDaVAsTUFBTSxDQUFDO2dCQUFBM0IsVUFBQSxDQUFBelIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXlSLFVBQUEsQ0FBQXJMLE1BQUEsV0FDekQyQixPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJekYsS0FBSyx5QkFBQXRCLE1BQUEsQ0FBeUJrRCxJQUFJLENBQUNpUCxNQUFNLE1BQUcsQ0FBQyxDQUFDO1lBQUE7Y0FHcEV6UCxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBRWZpRixPQUEyQixHQUFHO2dCQUNsQ3hFLElBQUksRUFBSkEsSUFBSTtnQkFDSjlDLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQW1MLHNCQUFBLEdBQUUsSUFBSSxDQUFDclEsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFrTCxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQ3JRLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDNEw7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQXJMLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBeUwsS0FBQSxPQUFBcFEsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUFtUSxVQUFPaEssT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUF3UCxLQUFBLEVBQUFyUyxPQUFBLEVBQUFzUyx5QkFBQSxFQUFBQywyQkFBQSxFQUFBQyxHQUFBO2tCQUFBLE9BQUF4USxZQUFBLFlBQUFrQixJQUFBLFdBQUF1UCxVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUFyUCxJQUFBLEdBQUFxUCxVQUFBLENBQUE5VCxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQW1QLFVBQUEsQ0FBQXJQLElBQUE7d0JBQUFxUCxVQUFBLENBQUE5VCxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBOFAsVUFBQSxDQUFBN04sSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDbkQvQixLQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNyQjZQLE1BQUksQ0FBQ3BILGdCQUFnQixDQUFDekksT0FBTyxDQUFDO3dCQUFDLEtBRTNCOEMsS0FBSTswQkFBQTJQLFVBQUEsQ0FBQTlULElBQUE7MEJBQUE7d0JBQUE7d0JBQ05rUixNQUFJLENBQUN0TSxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNnUCw2QkFBNkIsRUFBRSxrQ0FBa0MsRUFBRXBTLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUU1UHdGLE9BQU8sQ0FBQ3RGLEtBQUksQ0FBQzt3QkFBQyxPQUFBMlAsVUFBQSxDQUFBMU4sTUFBQTtzQkFBQTt3QkFBQSxNQUdWbkksTUFBTSxDQUFDaU8sTUFBTSxDQUFDLElBQUkzSixLQUFLLENBQUMsK0NBQStDLENBQUMsRUFBRTswQkFDOUV5QixRQUFRLEVBQUU7NEJBQUVnSSxNQUFNLEVBQUVoSSxRQUFRLENBQUNnSTswQkFBTzt3QkFDdEMsQ0FBQyxDQUFDO3NCQUFBO3dCQUFBOEgsVUFBQSxDQUFBclAsSUFBQTt3QkFBQW9QLEdBQUEsR0FBQUMsVUFBQTt3QkFFSTdQLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsMkJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0RnTCxNQUFJLENBQUN0TSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQ2lQLDBCQUEwQixFQUFFLCtCQUErQixFQUFFclMsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCwyQkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFtUSxHQUFBLEVBQVNoVCxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHlCQUF1QixDQUFDO3dCQUFDLEtBRWpQLElBQUFnRyxnQ0FBb0IsRUFBQTRKLEdBQUEsRUFBUW5SLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQzswQkFBQTRKLFVBQUEsQ0FBQTlULElBQUE7MEJBQUE7d0JBQUE7d0JBQzlEZ0ksTUFBTSxDQUFFLElBQUl6RixLQUFLLENBQUMyTyxNQUFJLENBQUMvRyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUFDLE9BQUEySixVQUFBLENBQUExTixNQUFBO3NCQUFBO3dCQUduRDRCLE1BQU0sQ0FBQTZMLEdBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUF2TixJQUFBO29CQUFBO2tCQUFBLEdBQUFrTixTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBUSxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVYsS0FBQSxDQUFBOVUsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNlMsVUFBQSxDQUFBbEwsSUFBQTtVQUFBO1FBQUEsR0FBQXlLLFNBQUE7TUFBQSxDQUNIO01BQUEsU0F2R1lZLG9CQUFvQkEsQ0FBQXVDLElBQUE7UUFBQSxPQUFBcEQscUJBQUEsQ0FBQXJTLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBcEJnVCxvQkFBb0I7SUFBQTtJQXlHakM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtJQUpFO0VBQUE7SUFBQTVQLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBd1UsWUFBQSxPQUFBaFIsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUtBLFNBQUErUSxVQUF5QjFTLFNBQWlCO1FBQUEsSUFBQTJTLHNCQUFBO1VBQUFDLE1BQUE7UUFBQSxJQUFBQyx5QkFBQTtVQUFBaFIsS0FBQTtVQUFBSSxhQUFBO1VBQUEyRCxVQUFBO1VBQUFpQixXQUFBO1VBQUFELHNCQUFBO1VBQUE2SSxXQUFBO1VBQUFDLFVBQUE7VUFBQWxOLElBQUE7VUFBQU4sY0FBQTtVQUFBNFEsUUFBQTtVQUFBaFIsV0FBQTtVQUFBZ0Ysc0JBQUE7VUFBQUMsTUFBQTtVQUFBL0UsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUErTCxPQUFBLEdBQUE5VixTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQW9RLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBbFEsSUFBQSxHQUFBa1EsVUFBQSxDQUFBM1UsSUFBQTtZQUFBO2NBQUV3VSx5QkFBcUQsR0FBQUUsT0FBQSxDQUFBN1YsTUFBQSxRQUFBNlYsT0FBQSxRQUFBN1QsU0FBQSxHQUFBNlQsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUM5RmxSLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM2UCxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRWpULFNBQVMsQ0FBQztjQUN0R2lDLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQzlCaUMsVUFBVSxHQUFHLElBQUk7Y0FDdkIsSUFBQWhDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQjRCLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ2tQLFdBQVc7Z0JBQ3ZGQyxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBR3BILEtBQUs7a0JBQUEsT0FBSyxJQUFBcUgsbUNBQXVCLEVBQUNySCxLQUFLLEVBQUVuRyxVQUFVLENBQUM7Z0JBQUE7Z0JBQ2xFMEIsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhO2NBQ3pELENBQUMsQ0FBQztjQUVNaUgsV0FBVyxHQUFzRGdNLHlCQUF5QixDQUExRmhNLFdBQVcsRUFBRUQsc0JBQXNCLEdBQThCaU0seUJBQXlCLENBQTdFak0sc0JBQXNCLEVBQUU2SSxXQUFXLEdBQWlCb0QseUJBQXlCLENBQXJEcEQsV0FBVyxFQUFFQyxVQUFVLEdBQUttRCx5QkFBeUIsQ0FBeENuRCxVQUFVO2NBQzlEbE4sSUFBaUIsR0FBR2lOLFdBQVcsSUFBSSxDQUFDLENBQUM7Y0FDckN2TixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FFekRzTCxRQUFRLEdBQUdsTSxzQkFBc0IsR0FDbkN0RCxnQ0FBb0IsQ0FBQytQLDJCQUEyQixHQUNoRC9QLGdDQUFvQixDQUFDZ1EsdUJBQXVCO2NBRTVDeFIsV0FBVyxPQUFBeEMsTUFBQSxDQUFPd1QsUUFBUSxPQUFBeFQsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSVUsU0FBUztjQUU1SCxJQUFJNEcsc0JBQXNCLEVBQUU7Z0JBQzFCdEssTUFBTSxDQUFDaU8sTUFBTSxDQUFDckksY0FBYyxNQUFBOUUsZ0JBQUEsaUJBQUFBLGdCQUFBLGlCQUN6QjBDLGtDQUFzQixDQUFDOEcsc0JBQXNCLEVBQUdBLHNCQUFzQixHQUN0RTlHLGtDQUFzQixDQUFDRixhQUFhLEVBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWEsQ0FDekUsQ0FBQztjQUNKO2NBRUEsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FDakQsSUFBSSxDQUFDcVIsa0JBQWtCLENBQUN2VCxTQUFTLEVBQUVrQyxjQUFjLENBQUM7O2NBR2xEO2NBQ000RSxzQkFBc0IsR0FBRyxDQUFDRixzQkFBc0IsSUFBSSxJQUFJLENBQUMzSCxhQUFhLENBQUN5SSxpQ0FBaUMsS0FBSyxJQUFJO2NBQ3ZILElBQUliLFdBQVcsRUFBRTtnQkFDZixJQUFJLENBQUNDLHNCQUFzQixFQUFFO2tCQUMzQmhGLFdBQVcsUUFBQXhDLE1BQUEsQ0FBUXVILFdBQVcsQ0FBRTtnQkFDbEM7Y0FDRjtjQUVNRSxNQUFpQyxHQUFHO2dCQUN4Q3ZHLFNBQVMsRUFBRSxJQUFJLENBQUN6Qix3QkFBd0IsQ0FBQ3lCO2NBQzNDLENBQUM7Y0FFRCxJQUFJcUcsV0FBVyxJQUFJQyxzQkFBc0IsRUFBRTtnQkFDekNDLE1BQU0sQ0FBQ1ksR0FBRyxHQUFHZCxXQUFXO2NBQzFCO2NBQUMsTUFFRzZJLFVBQVUsSUFBSSxDQUFDaUIsTUFBTSxDQUFDQyxRQUFRO2dCQUFBb0MsVUFBQSxDQUFBM1UsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQTJVLFVBQUEsQ0FBQXZPLE1BQUEsV0FDekIyQixPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJekYsS0FBSywrQ0FBK0MsQ0FBQyxDQUFDO1lBQUE7Y0FHbEYsSUFBSThPLFVBQVUsRUFBRTtnQkFDZGxOLElBQUksQ0FBQ3FPLE9BQU8sR0FBR0Msd0JBQVcsQ0FBQ0MsY0FBYyxDQUFDLENBQUM7Z0JBQzNDdk8sSUFBSSxDQUFDd08sTUFBTSxHQUFHQyxzQkFBVSxDQUFDQyxhQUFhLENBQUMsQ0FBQztnQkFDeEMxTyxJQUFJLENBQUMyTyxTQUFTLEdBQUdSLE1BQU0sQ0FBQ1MsUUFBUSxDQUFDQyxJQUFJO2dCQUNyQzdPLElBQUksQ0FBQzhPLEVBQUUsR0FBR0MsY0FBTSxDQUFDQyxTQUFTLENBQUMsQ0FBQztjQUM5Qjs7Y0FFQTtjQUNBLElBQUksQ0FBQ2hQLElBQUksQ0FBQ2lQLE1BQU0sRUFBRTtnQkFDaEJqUCxJQUFJLENBQUNpUCxNQUFNLEdBQUcxUSxxQkFBUyxDQUFDMlEsYUFBYTtjQUN2Qzs7Y0FFQTtjQUFBLE1BQ0lsUCxJQUFJLENBQUNpUCxNQUFNLElBQUksQ0FBQ0UsbUJBQU8sQ0FBQ0MsZ0JBQWdCLENBQUNqUixRQUFRLENBQUM2QixJQUFJLENBQUNpUCxNQUFNLENBQUM7Z0JBQUF1QixVQUFBLENBQUEzVSxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxPQUFBMlUsVUFBQSxDQUFBdk8sTUFBQSxXQUN6RDJCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLElBQUl6RixLQUFLLHlCQUFBdEIsTUFBQSxDQUF5QmtELElBQUksQ0FBQ2lQLE1BQU0sTUFBRyxDQUFDLENBQUM7WUFBQTtjQUdwRXpQLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLE1BQU07Y0FDZmlGLE9BQTJCLEdBQUc7Z0JBQ2xDeEUsSUFBSSxFQUFKQSxJQUFJO2dCQUNKOUMsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIK0UsTUFBTSxFQUFOQSxNQUFNO2dCQUNONUMsT0FBTyxHQUFBd08sc0JBQUEsR0FBRSxJQUFJLENBQUMxVCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQXVPLHNCQUFBLGNBQUFBLHNCQUFBLEdBQUksSUFBSSxDQUFDMVQsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUM2TztjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBdk8sTUFBQSxXQUVNLElBQUkyQixPQUFPO2dCQUFBLElBQUFvTixLQUFBLE9BQUEvUixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQThSLFVBQU8zTCxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUFsRSxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQTdDLE9BQUEsRUFBQWdVLHlCQUFBLEVBQUFDLDJCQUFBLEVBQUFDLEdBQUE7a0JBQUEsT0FBQWxTLFlBQUEsWUFBQWtCLElBQUEsV0FBQWlSLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQS9RLElBQUEsR0FBQStRLFVBQUEsQ0FBQXhWLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBNlEsVUFBQSxDQUFBL1EsSUFBQTt3QkFBQStRLFVBQUEsQ0FBQXhWLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUF3UixVQUFBLENBQUF2UCxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNma1QsTUFBSSxDQUFDekssZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRTlCa1QsTUFBSSxDQUFDM1AsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMFEsb0JBQW9CLEVBQUUsd0JBQXdCLEVBQUU5VCxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRXNELElBQUksRUFBRU4sY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDcE93RixPQUFPLENBQUMsQ0FBQzt3QkFBQytMLFVBQUEsQ0FBQXhWLElBQUE7d0JBQUE7c0JBQUE7d0JBQUF3VixVQUFBLENBQUEvUSxJQUFBO3dCQUFBOFEsR0FBQSxHQUFBQyxVQUFBO3dCQUVKdlIseUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHFPLE1BQUksQ0FBQzNQLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDMlEsaUJBQWlCLEVBQUUscUJBQXFCLEVBQUUvVCxTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQTZSLEdBQUEsRUFBU3BSLElBQUksRUFBRU4sY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFBQyxLQUV6TixJQUFBZ0csZ0NBQW9CLEVBQUFzTCxHQUFBLEVBQVE3UyxxQkFBUyxDQUFDd0gscUJBQXFCLENBQUM7MEJBQUFzTCxVQUFBLENBQUF4VixJQUFBOzBCQUFBO3dCQUFBO3dCQUM5RGdJLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDZ1MsTUFBSSxDQUFDcEssdUJBQXVCLENBQUMsQ0FBQzt3QkFBQyxPQUFBcUwsVUFBQSxDQUFBcFAsTUFBQTtzQkFBQTt3QkFHbkQ0QixNQUFNLENBQUF1TixHQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBalAsSUFBQTtvQkFBQTtrQkFBQSxHQUFBNk8sU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULEtBQUEsQ0FBQXpXLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQStWLFVBQUEsQ0FBQXBPLElBQUE7VUFBQTtRQUFBLEdBQUE4TixTQUFBO01BQUEsQ0FDSDtNQUFBLFNBeEdZUSxXQUFXQSxDQUFBZ0IsSUFBQTtRQUFBLE9BQUF6QixZQUFBLENBQUExVixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQVhpVyxXQUFXO0lBQUE7RUFBQTtJQUFBN1MsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFrVyxtQkFBQSxPQUFBMVMsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQTBHeEIsU0FBQXlTLFVBQWdDcFUsU0FBaUI7UUFBQSxJQUFBcVUsc0JBQUE7UUFBQSxJQUFBeEIseUJBQUE7VUFBQWhSLEtBQUE7VUFBQUksYUFBQTtVQUFBMkQsVUFBQTtVQUFBaUIsV0FBQTtVQUFBRCxzQkFBQTtVQUFBNkksV0FBQTtVQUFBQyxVQUFBO1VBQUFsTixJQUFBO1VBQUFOLGNBQUE7VUFBQTRRLFFBQUE7VUFBQWhSLFdBQUE7VUFBQUUsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUE3RSxZQUFBO1VBQUFFLFFBQUE7VUFBQUMsdUJBQUE7VUFBQUMseUJBQUE7VUFBQStSLE1BQUE7VUFBQTVVLE9BQUE7VUFBQTZVLHlCQUFBO1VBQUFDLDJCQUFBO1VBQUFDLE9BQUEsR0FBQXhYLFNBQUE7VUFBQXlYLEdBQUE7UUFBQSxPQUFBaFQsWUFBQSxZQUFBa0IsSUFBQSxXQUFBK1IsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUE3UixJQUFBLEdBQUE2UixVQUFBLENBQUF0VyxJQUFBO1lBQUE7Y0FBRXdVLHlCQUFxRCxHQUFBNEIsT0FBQSxDQUFBdlgsTUFBQSxRQUFBdVgsT0FBQSxRQUFBdlYsU0FBQSxHQUFBdVYsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUNyRzVTLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUN3UixvQkFBb0IsRUFBRSxrQ0FBa0MsRUFBRTVVLFNBQVMsQ0FBQztjQUNwSGlDLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQzlCaUMsVUFBVSxHQUFHLElBQUk7Y0FDdkIsSUFBQWhDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQjRCLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ2tQLFdBQVc7Z0JBQ3ZGQyxXQUFXLEVBQUUsU0FBYkEsV0FBV0EsQ0FBR3BILEtBQUs7a0JBQUEsT0FBSyxJQUFBcUgsbUNBQXVCLEVBQUNySCxLQUFLLEVBQUVuRyxVQUFVLENBQUM7Z0JBQUE7Z0JBQ2xFMEIsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhO2NBQ3pELENBQUMsQ0FBQztjQUVNaUgsV0FBVyxHQUFzRGdNLHlCQUF5QixDQUExRmhNLFdBQVcsRUFBRUQsc0JBQXNCLEdBQThCaU0seUJBQXlCLENBQTdFak0sc0JBQXNCLEVBQUU2SSxXQUFXLEdBQWlCb0QseUJBQXlCLENBQXJEcEQsV0FBVyxFQUFFQyxVQUFVLEdBQUttRCx5QkFBeUIsQ0FBeENuRCxVQUFVO2NBQzlEbE4sSUFBaUIsR0FBR2lOLFdBQVcsSUFBSSxDQUFDLENBQUM7Y0FDckN2TixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FFekRzTCxRQUFRLEdBQUdsTSxzQkFBc0IsR0FDbkN0RCxnQ0FBb0IsQ0FBQ3VSLHlCQUF5QixHQUM5Q3ZSLGdDQUFvQixDQUFDd1IscUJBQXFCO2NBRXhDaFQsV0FBVyxPQUFBeEMsTUFBQSxDQUFPd1QsUUFBUSxPQUFBeFQsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLGlCQUFBbEUsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRO2NBRTNILElBQUlpQixzQkFBc0IsRUFBRTtnQkFDMUJ0SyxNQUFNLENBQUNpTyxNQUFNLENBQUNySSxjQUFjLE1BQUE5RSxnQkFBQSxpQkFBQUEsZ0JBQUEsaUJBQ3pCMEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsRUFBR0Esc0JBQXNCLEdBQ3RFOUcsa0NBQXNCLENBQUNGLGFBQWEsRUFBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYSxDQUN6RSxDQUFDO2NBQ0o7Y0FFQSxJQUFJLENBQUNrRyxpQkFBaUIsQ0FBQzlGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUNqRCxJQUFJLENBQUNxUixrQkFBa0IsQ0FBQ3ZULFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUVsRCxJQUFJMkUsV0FBVyxFQUFFO2dCQUNmckUsSUFBSSxDQUFDcUUsV0FBVyxHQUFHQSxXQUFXO2NBQ2hDO2NBRUFyRSxJQUFJLENBQUNoQyxTQUFTLEdBQUcsSUFBSSxDQUFDekIsd0JBQXdCLENBQUN5QixTQUFTO2NBQUMsTUFFckRrUCxVQUFVLElBQUksQ0FBQ2lCLE1BQU0sQ0FBQ0MsUUFBUTtnQkFBQStELFVBQUEsQ0FBQXRXLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE9BQUFzVyxVQUFBLENBQUFsUSxNQUFBLFdBQ3pCMkIsT0FBTyxDQUFDQyxNQUFNLENBQUMsSUFBSXpGLEtBQUssK0NBQStDLENBQUMsQ0FBQztZQUFBO2NBR2xGLElBQUk4TyxVQUFVLEVBQUU7Z0JBQ2RsTixJQUFJLENBQUNxTyxPQUFPLEdBQUdDLHdCQUFXLENBQUNDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzQ3ZPLElBQUksQ0FBQ3dPLE1BQU0sR0FBR0Msc0JBQVUsQ0FBQ0MsYUFBYSxDQUFDLENBQUM7Z0JBQ3hDMU8sSUFBSSxDQUFDMk8sU0FBUyxHQUFHUixNQUFNLENBQUNTLFFBQVEsQ0FBQ0MsSUFBSTtnQkFDckM3TyxJQUFJLENBQUM4TyxFQUFFLEdBQUdDLGNBQU0sQ0FBQ0MsU0FBUyxDQUFDLENBQUM7Y0FDOUI7O2NBRUE7Y0FDQSxJQUFJLENBQUNoUCxJQUFJLENBQUNpUCxNQUFNLEVBQUU7Z0JBQ2hCalAsSUFBSSxDQUFDaVAsTUFBTSxHQUFHMVEscUJBQVMsQ0FBQzJRLGFBQWE7Y0FDdkM7O2NBRUE7Y0FBQSxNQUNJbFAsSUFBSSxDQUFDaVAsTUFBTSxJQUFJLENBQUNFLG1CQUFPLENBQUNDLGdCQUFnQixDQUFDalIsUUFBUSxDQUFDNkIsSUFBSSxDQUFDaVAsTUFBTSxDQUFDO2dCQUFBa0QsVUFBQSxDQUFBdFcsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXNXLFVBQUEsQ0FBQWxRLE1BQUEsV0FDekQyQixPQUFPLENBQUNDLE1BQU0sQ0FBQyxJQUFJekYsS0FBSyx5QkFBQXRCLE1BQUEsQ0FBeUJrRCxJQUFJLENBQUNpUCxNQUFNLE1BQUcsQ0FBQyxDQUFDO1lBQUE7Y0FHcEV6UCxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3hFLElBQUksRUFBSkEsSUFBSTtnQkFDSjlDLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQWtRLHNCQUFBLEdBQUUsSUFBSSxDQUFDcFYsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFpUSxzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQ3BWLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDNk87Y0FDL0YsQ0FBQztjQUVLL1EsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQUEyUixVQUFBLENBQUE3UixJQUFBO2NBQUE2UixVQUFBLENBQUF0VyxJQUFBO2NBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztZQUFBO2NBQXZDM0UsUUFBUSxHQUFBc1MsVUFBQSxDQUFBclEsSUFBQTtjQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjtjQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7Y0FDbkQvQixNQUFJLEdBQWNILFFBQVEsQ0FBMUJHLElBQUksRUFBRTlDLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO2NBQ3JCLElBQUksQ0FBQ3lJLGdCQUFnQixDQUFDekksT0FBTyxDQUFDO2NBRTlCLElBQUlBLE9BQU8sRUFBRTtnQkFDWCxJQUFJQSxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUNvSyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUU7a0JBQzdELElBQUksQ0FBQ3RLLFNBQVMsR0FBR0gsT0FBTyxDQUFDSSxrQ0FBc0IsQ0FBQ0MsV0FBVyxDQUFDb0ssV0FBVyxDQUFDLENBQUMsQ0FBQztnQkFDNUU7Y0FDRjs7Y0FFQTtjQUFBLE1BQ0k3TixNQUFNLENBQUNJLElBQUksQ0FBQzhGLE1BQUksQ0FBQyxDQUFDdEYsTUFBTSxLQUFLLENBQUM7Z0JBQUF5WCxVQUFBLENBQUF0VyxJQUFBO2dCQUFBO2NBQUE7Y0FBQSxNQUMxQixJQUFJdUMsS0FBSyxDQUFDLHVDQUF1QyxDQUFDO1lBQUE7Y0FHMUQ0QixNQUFJLENBQUN4QyxTQUFTLEdBQUdBLFNBQVM7Y0FDMUIsSUFBSSxDQUFDaUQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMlIsc0JBQXNCLEVBQUUsbUNBQW1DLEVBQUUvVSxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQztjQUFDLE9BQUFxUyxVQUFBLENBQUFsUSxNQUFBLFdBQ2hQakMsTUFBSTtZQUFBO2NBQUFtUyxVQUFBLENBQUE3UixJQUFBO2NBQUE0UixHQUFBLEdBQUFDLFVBQUE7Y0FFTHJTLHlCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7Y0FDMURoQywyQkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO2NBQzNELElBQUksQ0FBQ3RCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDNFIsbUJBQW1CLEVBQUUsaUNBQWlDLEVBQUVoVixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDJCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQTJTLEdBQUEsRUFBU2xTLElBQUksRUFBRU4sY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQztjQUFDLEtBRXZPLElBQUFnRyxnQ0FBb0IsRUFBQW9NLEdBQUEsRUFBUTNULHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQztnQkFBQW9NLFVBQUEsQ0FBQXRXLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQ3hELElBQUl1QyxLQUFLLENBQUMsSUFBSSxDQUFDNEgsdUJBQXVCLENBQUM7WUFBQTtjQUFBLE1BQUFrTSxHQUFBO1lBQUE7WUFBQTtjQUFBLE9BQUFDLFVBQUEsQ0FBQS9QLElBQUE7VUFBQTtRQUFBLEdBQUF3UCxTQUFBO01BQUEsQ0FJbEQ7TUFBQSxTQXJHWWEsa0JBQWtCQSxDQUFBQyxJQUFBO1FBQUEsT0FBQWYsbUJBQUEsQ0FBQXBYLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbEJnWSxrQkFBa0I7SUFBQTtJQXVHL0I7QUFDRjtBQUNBO0FBQ0E7QUFDQTtFQUpFO0lBQUE1VSxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWtYLGFBQUEsT0FBQTFULGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBeVQsVUFBMEJwVixTQUFpQjtRQUFBLElBQUFxVixzQkFBQTtVQUFBQyxNQUFBO1FBQUEsSUFBQUMsMEJBQUE7VUFBQTFULEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUEyRSxzQkFBQTtVQUFBNE8sZUFBQTtVQUFBQyxnQkFBQTtVQUFBQyxNQUFBO1VBQUF4VCxjQUFBO1VBQUFNLElBQUE7VUFBQVIsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUEyTyxPQUFBLEdBQUExWSxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQWdULFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBOVMsSUFBQSxHQUFBOFMsVUFBQSxDQUFBdlgsSUFBQTtZQUFBO2NBQUVrWCwwQkFBdUQsR0FBQUksT0FBQSxDQUFBelksTUFBQSxRQUFBeVksT0FBQSxRQUFBelcsU0FBQSxHQUFBeVcsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUNqRzlULEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUN5UyxtQkFBbUIsRUFBRSx1QkFBdUIsRUFBRTdWLFNBQVMsQ0FBQztjQUUxRzhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDd1Msd0JBQXdCLE9BQUF4VyxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVM7Y0FDaE55QixhQUFhLEdBQUd5QixpQkFBSyxDQUFDQyxNQUFNLENBQUMsQ0FBQztjQUNwQyxJQUFBQyw2QkFBaUIsRUFBQzNCLGFBQWEsRUFBRTtnQkFDL0JxRixnQkFBZ0IsRUFBRSxDQUFDeEgsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQztnQkFDeERpRSxPQUFPLEVBQUUsSUFBSSxDQUFDNUUsYUFBYSxDQUFDNkUsMEJBQTBCO2dCQUN0REMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDOUUsYUFBYSxDQUFDK0UsNEJBQTRCLENBQUMrUjtjQUM5RSxDQUFDLENBQUM7Y0FFTW5QLHNCQUFzQixHQUFnRDJPLDBCQUEwQixDQUFoRzNPLHNCQUFzQixFQUFFNE8sZUFBZSxHQUErQkQsMEJBQTBCLENBQXhFQyxlQUFlLEVBQUVDLGdCQUFnQixHQUFhRiwwQkFBMEIsQ0FBdkRFLGdCQUFnQixFQUFFQyxNQUFNLEdBQUtILDBCQUEwQixDQUFyQ0csTUFBTTtjQUVuRXhULGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUN6RGhGLElBQVMsR0FBRyxDQUFDLENBQUMsRUFBRTtjQUN0QkEsSUFBSSxDQUFDa1QsTUFBTSxHQUFHQSxNQUFNO2NBRXBCLElBQUk5TyxzQkFBc0IsRUFBRTtnQkFDMUI5RSxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQzBTLDRCQUE0QixPQUFBMVcsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTLENBQUU7Z0JBQ3hOMEIsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBRUEsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFakQsSUFBSXNULGVBQWUsRUFBRTtnQkFDbkIxVCxXQUFXLDJCQUEyQjtjQUN4QztjQUVBLElBQUkyVCxnQkFBZ0IsRUFBRTtnQkFDcEIzVCxXQUFXLDRCQUE0QjtjQUN6QztjQUVNRSxHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3hFLElBQUksRUFBSkEsSUFBSTtnQkFDSjlDLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQWtSLHNCQUFBLEdBQUUsSUFBSSxDQUFDcFcsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFpUixzQkFBQSxjQUFBQSxzQkFBQSxHQUFJLElBQUksQ0FBQ3BXLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDMFI7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQW5SLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBNlAsS0FBQSxPQUFBeFUsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUF1VSxVQUFPcE8sT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUE1QyxPQUFBLEVBQUE2Qyx5QkFBQSxFQUFBNFQseUJBQUEsRUFBQUMsMkJBQUEsRUFBQUMsR0FBQTtrQkFBQSxPQUFBM1UsWUFBQSxZQUFBa0IsSUFBQSxXQUFBMFQsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBeFQsSUFBQSxHQUFBd1QsVUFBQSxDQUFBalksSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFzVCxVQUFBLENBQUF4VCxJQUFBO3dCQUFBd1QsVUFBQSxDQUFBalksSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQWlVLFVBQUEsQ0FBQWhTLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmNFYsTUFBSSxDQUFDbk4sZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRXhCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QrUSxNQUFJLENBQUNyUyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNtVCxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRXZXLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUUzT3dGLE9BQU8sQ0FBQyxDQUFDO3dCQUNUO3dCQUFBd08sVUFBQSxDQUFBalksSUFBQTt3QkFBQTtzQkFBQTt3QkFBQWlZLFVBQUEsQ0FBQXhULElBQUE7d0JBQUF1VCxHQUFBLEdBQUFDLFVBQUE7d0JBRU1oVSx5QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDJCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEK1EsTUFBSSxDQUFDclMsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNvVCxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRXhXLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsMkJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBc1UsR0FBQSxFQUFTblgsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx5QkFBdUIsQ0FBQzt3QkFDbk8sSUFBSStULEdBQUEsQ0FBTUksSUFBSSxLQUFLMVYscUJBQVMsQ0FBQ3dILHFCQUFxQixFQUFFOzBCQUNsRGxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDMFUsTUFBSSxDQUFDOU0sdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUFnUSxHQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBMVIsSUFBQTtvQkFBQTtrQkFBQSxHQUFBc1IsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQVEsSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFWLEtBQUEsQ0FBQWxaLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQTJZLFVBQUEsQ0FBQWhSLElBQUE7VUFBQTtRQUFBLEdBQUF3USxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBbkVZVyxZQUFZQSxDQUFBYSxJQUFBO1FBQUEsT0FBQXpCLGFBQUEsQ0FBQXBZLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBWjhZLFlBQVk7SUFBQTtJQXFFekI7QUFDRjtBQUNBO0FBQ0E7QUFDQTtJQUpFO0VBQUE7SUFBQTFWLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBNFksdUJBQUEsT0FBQXBWLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FLQSxTQUFBbVYsVUFBb0M5VyxTQUFpQixFQUFFK1csb0NBQTJFO1FBQUEsSUFBQUMsdUJBQUE7VUFBQUMsTUFBQTtRQUFBLElBQUFwVixLQUFBLEVBQUErRSxzQkFBQSxFQUFBOE8sTUFBQSxFQUFBNVQsV0FBQSxFQUFBRyxhQUFBLEVBQUFDLGNBQUEsRUFBQUYsR0FBQSxFQUFBRCxNQUFBLEVBQUFpRixPQUFBO1FBQUEsT0FBQXRGLFlBQUEsWUFBQWtCLElBQUEsV0FBQXNVLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBcFUsSUFBQSxHQUFBb1UsVUFBQSxDQUFBN1ksSUFBQTtZQUFBO2NBQzFId0QsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQytULDZCQUE2QixFQUFFLG1DQUFtQyxFQUFFblgsU0FBUyxDQUFDO2NBRTVINEcsc0JBQXNCLEdBQWFtUSxvQ0FBb0MsQ0FBdkVuUSxzQkFBc0IsRUFBRThPLE1BQU0sR0FBS3FCLG9DQUFvQyxDQUEvQ3JCLE1BQU07Y0FDaEM1VCxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQzhULHFDQUFxQyxPQUFBOVgsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSW9XLE1BQU0sT0FBQXBXLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTO2NBQ3pPeUIsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDcVQ7Y0FDOUUsQ0FBQyxDQUFDO2NBRUluVixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FDL0QsSUFBSVosc0JBQXNCLEVBQUU7Z0JBQzFCMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBQ3pGO2NBRUEsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NGLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZGlGLE9BQTJCLEdBQUc7Z0JBQ2xDdEgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBNlMsdUJBQUEsR0FBRSxJQUFJLENBQUMvWCxhQUFhLENBQUNtRixxQkFBcUIsY0FBQTRTLHVCQUFBLGNBQUFBLHVCQUFBLEdBQUksSUFBSSxDQUFDL1gsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUNpVDtjQUMvRixDQUFDO2NBQUEsT0FBQUosVUFBQSxDQUFBelMsTUFBQSxXQUVNLElBQUkyQixPQUFPO2dCQUFBLElBQUFtUixLQUFBLE9BQUE5VixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQTZWLFVBQU8xUCxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUFsRSxZQUFBLEVBQUFzVixjQUFBLEVBQUFwVixRQUFBLEVBQUFDLHVCQUFBLEVBQUE1QyxPQUFBLEVBQUE2Qyx5QkFBQSxFQUFBbVYsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBbFcsWUFBQSxZQUFBa0IsSUFBQSxXQUFBaVYsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBL1UsSUFBQSxHQUFBK1UsVUFBQSxDQUFBeFosSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUE2VSxVQUFBLENBQUEvVSxJQUFBO3dCQUFBK1UsVUFBQSxDQUFBeFosSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQXdWLFVBQUEsQ0FBQXZULElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmdVgsTUFBSSxDQUFDOU8sZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRXhCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QsSUFBSSxFQUFBa1QsY0FBQSxHQUFBcFYsUUFBUSxDQUFDRyxJQUFJLGNBQUFpVixjQUFBLHVCQUFiQSxjQUFBLENBQWVLLGFBQWEsTUFBSyxJQUFJLEVBQUU7MEJBQ3pDYixNQUFJLENBQUNoVSxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUMyVSwrQkFBK0IsRUFBRSxxQ0FBcUMsRUFBRS9YLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDOzBCQUVqUXdGLE9BQU8sQ0FBQ3pGLFFBQVEsQ0FBQ0csSUFBSSxDQUFDO3dCQUN4QixDQUFDLE1BQU07MEJBQ0x5VSxNQUFJLENBQUNoVSxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM0VSw0QkFBNEIsRUFBRSxvRkFBb0YsRUFBRWhZLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDOzBCQUU3UytELE1BQU0sQ0FBQyxJQUFJekYsS0FBSyxDQUFDLG9GQUFvRixDQUFDLENBQUM7d0JBQ3pHOzt3QkFFQTt3QkFBQWlYLFVBQUEsQ0FBQXhaLElBQUE7d0JBQUE7c0JBQUE7d0JBQUF3WixVQUFBLENBQUEvVSxJQUFBO3dCQUFBOFUsSUFBQSxHQUFBQyxVQUFBO3dCQUVNdlYsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUUzRDBTLE1BQUksQ0FBQ2hVLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDNFUsNEJBQTRCLEVBQUUsa0NBQWtDLEVBQUVoWSxTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQTZWLElBQUEsRUFBUzFZLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBRXpQLElBQUksSUFBQWdHLGdDQUFvQixFQUFBc1AsSUFBQSxFQUFRN1cscUJBQVMsQ0FBQ3dILHFCQUFxQixDQUFDLEVBQUU7MEJBQ2hFbEMsTUFBTSxDQUFFLElBQUl6RixLQUFLLENBQUNxVyxNQUFJLENBQUN6Tyx1QkFBdUIsQ0FBQyxDQUFDO3dCQUNsRDt3QkFFQSxJQUFJb1AsSUFBQSxDQUFNclosUUFBUSxDQUFDLENBQUMsS0FBSyw0Q0FBNEMsRUFBRTswQkFBRTswQkFDdkV1SixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ2IsQ0FBQyxNQUFNOzBCQUNMekIsTUFBTSxDQUFBdVIsSUFBTSxDQUFDO3dCQUNmO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQWpULElBQUE7b0JBQUE7a0JBQUEsR0FBQTRTLFNBQUE7Z0JBQUEsQ0FFSjtnQkFBQSxpQkFBQVMsSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFYLEtBQUEsQ0FBQXhhLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQWlhLFVBQUEsQ0FBQXRTLElBQUE7VUFBQTtRQUFBLEdBQUFrUyxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBbkVZTyxzQkFBc0JBLENBQUFjLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUF2Qix1QkFBQSxDQUFBOVosS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUF0Qm9hLHNCQUFzQjtJQUFBO0lBcUVuQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMRTtFQUFBO0lBQUFoWCxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQW9hLHVCQUFBLE9BQUE1VyxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBTUEsU0FBQTJXLFVBQW9DdFksU0FBaUIsRUFBRXVZLGdCQUF3QjtRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE1BQUE7UUFBQSxJQUFBQyxvQ0FBQTtVQUFBN1csS0FBQTtVQUFBQyxXQUFBO1VBQUFHLGFBQUE7VUFBQTJFLHNCQUFBO1VBQUExRSxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBaUYsT0FBQTtVQUFBMlIsT0FBQSxHQUFBMWIsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFnVyxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTlWLElBQUEsR0FBQThWLFVBQUEsQ0FBQXZhLElBQUE7WUFBQTtjQUFFcWEsb0NBQTJFLEdBQUFDLE9BQUEsQ0FBQXpiLE1BQUEsUUFBQXliLE9BQUEsUUFBQXpaLFNBQUEsR0FBQXlaLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FDeko5VyxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDeVYscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUU3WSxTQUFTLENBQUM7Y0FFL0c4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3dWLDBCQUEwQixPQUFBeFosTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTO2NBQ2xOeUIsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDK1U7Y0FDOUUsQ0FBQyxDQUFDO2NBRU1uUyxzQkFBc0IsR0FBSzhSLG9DQUFvQyxDQUEvRDlSLHNCQUFzQjtjQUN4QjFFLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRCxJQUFJLENBQUMxQixpQkFBaUIsQ0FBQzlGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUVqRCxJQUFJMEUsc0JBQXNCLEVBQUU7Z0JBQzFCOUUsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUMwViw4QkFBOEIsT0FBQTFaLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRLE9BQUFyRyxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUyxDQUFFO2dCQUMxTjBCLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtjQUN6RjtjQUVNb0MsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmaUYsT0FBMkIsR0FBRztnQkFDbEN4RSxJQUFJLEVBQUVnTyxJQUFJLENBQUNDLFNBQVMsQ0FBQzhILGdCQUFnQixDQUFDO2dCQUN0QzdZLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXFVLHVCQUFBLEdBQUUsSUFBSSxDQUFDdlosYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFvVSx1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ3ZaLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDMFU7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQW5VLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBNlMsS0FBQSxPQUFBeFgsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUF1WCxVQUFPcFIsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUE1QyxPQUFBLEVBQUE2Qyx5QkFBQSxFQUFBNFcsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBM1gsWUFBQSxZQUFBa0IsSUFBQSxXQUFBMFcsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBeFcsSUFBQSxHQUFBd1csVUFBQSxDQUFBamIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFzVyxVQUFBLENBQUF4VyxJQUFBO3dCQUFBd1csVUFBQSxDQUFBamIsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQWlYLFVBQUEsQ0FBQWhWLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmK1ksTUFBSSxDQUFDdFEsZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRXhCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0RrVSxNQUFJLENBQUN4VixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNtVyx1QkFBdUIsRUFBRSw0QkFBNEIsRUFBRXZaLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUVoUHdGLE9BQU8sQ0FBQyxDQUFDO3dCQUFDd1IsVUFBQSxDQUFBamIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQWliLFVBQUEsQ0FBQXhXLElBQUE7d0JBQUF1VyxJQUFBLEdBQUFDLFVBQUE7d0JBR0poWCwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEa1UsTUFBSSxDQUFDeFYsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNvVyxvQkFBb0IsRUFBRSx5QkFBeUIsRUFBRXhaLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBc1gsSUFBQSxFQUFTbmEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFDeE8sSUFBSSxJQUFBZ0csZ0NBQW9CLEVBQUErUSxJQUFBLEVBQVF0WSxxQkFBUyxDQUFDd0gscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXpGLEtBQUssQ0FBQzZYLE1BQUksQ0FBQ2pRLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBZ1QsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQTFVLElBQUE7b0JBQUE7a0JBQUEsR0FBQXNVLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxLQUFBLENBQUFsYyxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUEyYixVQUFBLENBQUFoVSxJQUFBO1VBQUE7UUFBQSxHQUFBMFQsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQXZEWVMsc0JBQXNCQSxDQUFBWSxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBdkIsdUJBQUEsQ0FBQXRiLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBdEI4YixzQkFBc0I7SUFBQTtJQXlEbkM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0lBTEU7RUFBQTtJQUFBMVksR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUE0YixvQkFBQSxPQUFBcFksa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQU1BLFNBQUFtWSxVQUFpQ0MsYUFBcUIsRUFBRUMsMEJBQWtDO1FBQUEsSUFBQUMsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUFDLGlDQUFBO1VBQUF0WSxLQUFBO1VBQUFDLFdBQUE7VUFBQUcsYUFBQTtVQUFBMkUsc0JBQUE7VUFBQTVHLFNBQUE7VUFBQWtDLGNBQUE7VUFBQUYsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUFvVCxPQUFBLEdBQUFuZCxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQXlYLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBdlgsSUFBQSxHQUFBdVgsVUFBQSxDQUFBaGMsSUFBQTtZQUFBO2NBQUU4YixpQ0FBcUUsR0FBQUMsT0FBQSxDQUFBbGQsTUFBQSxRQUFBa2QsT0FBQSxRQUFBbGIsU0FBQSxHQUFBa2IsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUM5SnZZLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxJQUFJLENBQUM1RCxNQUFNLEVBQUU7Z0JBQ2YsSUFBSSxDQUFDQSxNQUFNLENBQUNrYixHQUFHLENBQUNwWCxrQkFBUSxDQUFDQyxJQUFJLEVBQzNCQywwQkFBbUIsQ0FBQ21YLDBCQUEwQixFQUM5QztrQkFBRUMsYUFBYSxFQUFFVDtnQkFBYyxDQUFDLEVBQ2hDLGdDQUFnQyxDQUFDO2NBQ3JDO2NBQ0lqWSxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ21YLCtCQUErQixPQUFBbmIsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUl5YSxhQUFhO2NBQzVIOVgsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDMFc7Y0FDOUUsQ0FBQyxDQUFDO2NBRU05VCxzQkFBc0IsR0FBZ0J1VCxpQ0FBaUMsQ0FBdkV2VCxzQkFBc0IsRUFBRTVHLFNBQVMsR0FBS21hLGlDQUFpQyxDQUEvQ25hLFNBQVM7Y0FFbkNrQyxjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FFL0QsSUFBSVosc0JBQXNCLEVBQUU7Z0JBQzFCOUUsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNxWCxtQ0FBbUMsT0FBQXJiLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxPQUFBbEUsTUFBQSxDQUFJeWEsYUFBYSxDQUFFO2dCQUNwSTdYLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtnQkFDdkZzQyxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQzhhLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQzdiLHdCQUF3QixDQUFDNEcsUUFBUTtjQUM3RjtjQUVBLElBQUksQ0FBQ0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFakQsSUFBSWxDLFNBQVMsRUFBRTtnQkFDYmtDLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRSxTQUFTLENBQUMsR0FBR0EsU0FBUztjQUM5RDtjQUVNZ0MsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmaUYsT0FBMkIsR0FBRztnQkFDbEN4RSxJQUFJLEVBQUVnTyxJQUFJLENBQUNDLFNBQVMsQ0FBQ3VKLDBCQUEwQixDQUFDO2dCQUNoRHRhLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQThWLHVCQUFBLEdBQUUsSUFBSSxDQUFDaGIsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUE2Vix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ2hiLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDcVc7Y0FDL0YsQ0FBQztjQUFBLE9BQUFMLFVBQUEsQ0FBQTVWLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBeVUsS0FBQSxPQUFBcFosa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUFtWixVQUFPaFQsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFFLElBQUEsRUFBQTlDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUF3WSwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUF2WixZQUFBLFlBQUFrQixJQUFBLFdBQUFzWSxVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUFwWSxJQUFBLEdBQUFvWSxVQUFBLENBQUE3YyxJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQWtZLFVBQUEsQ0FBQXBZLElBQUE7d0JBQUFvWSxVQUFBLENBQUE3YyxJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBNlksVUFBQSxDQUFBNVcsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEL0IsSUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDckJ3YSxPQUFJLENBQUMvUixnQkFBZ0IsQ0FBQ3pJLE9BQU8sQ0FBQzt3QkFFeEI2Qyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDJWLE9BQUksQ0FBQ2pYLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQytYLDRCQUE0QixFQUFFLGtDQUFrQyxFQUFFbmIsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzNQd0YsT0FBTyxDQUFDdEYsSUFBSSxDQUFDO3dCQUFDMFksVUFBQSxDQUFBN2MsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQTZjLFVBQUEsQ0FBQXBZLElBQUE7d0JBQUFtWSxJQUFBLEdBQUFDLFVBQUE7d0JBRVI1WSwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEMlYsT0FBSSxDQUFDalgsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNnWSx5QkFBeUIsRUFBRSwrQkFBK0IsRUFBRXBiLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBa1osSUFBQSxFQUFTL2IsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFDblAsSUFBSSxJQUFBZ0csZ0NBQW9CLEVBQUEyUyxJQUFBLEVBQVFsYSxxQkFBUyxDQUFDd0gscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXpGLEtBQUssQ0FBQ3NaLE9BQUksQ0FBQzFSLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBNFUsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQXRXLElBQUE7b0JBQUE7a0JBQUEsR0FBQWtXLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxLQUFBLENBQUE5ZCxLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFvZCxVQUFBLENBQUF6VixJQUFBO1VBQUE7UUFBQSxHQUFBa1YsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQWhFWVksbUJBQW1CQSxDQUFBYSxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBM0Isb0JBQUEsQ0FBQTljLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbkJ5ZCxtQkFBbUI7SUFBQTtJQWtFaEM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFORTtFQUFBO0lBQUFyYSxHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXdkLG1CQUFBLE9BQUFoYSxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBT0EsU0FBQStaLFVBQWdDMWIsU0FBaUIsRUFBRTBWLE1BQWMsRUFBRWlHLEtBQWE7UUFBQSxJQUFBQyx1QkFBQTtVQUFBQyxPQUFBO1FBQUEsSUFBQUMsZ0NBQUE7VUFBQWphLEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUEyRSxzQkFBQTtVQUFBc0Msc0JBQUE7VUFBQWhILGNBQUE7VUFBQUYsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUErVSxPQUFBLEdBQUE5ZSxTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQW9aLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBbFosSUFBQSxHQUFBa1osVUFBQSxDQUFBM2QsSUFBQTtZQUFBO2NBQUV5ZCxnQ0FBbUUsR0FBQUMsT0FBQSxDQUFBN2UsTUFBQSxRQUFBNmUsT0FBQSxRQUFBN2MsU0FBQSxHQUFBNmMsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUNsSmxhLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM2WSx3QkFBd0IsRUFBRSw2QkFBNkIsRUFBRWpjLFNBQVMsQ0FBQztjQUVySDhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDNFksNkJBQTZCLE9BQUE1YyxNQUFBLENBQUlvVyxNQUFNLE9BQUFwVyxNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUM5SXlCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQnFGLGdCQUFnQixFQUFFLENBQUN4SCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ21ZO2NBQzlFLENBQUMsQ0FBQztjQUVNdlYsc0JBQXNCLEdBQTZCa1YsZ0NBQWdDLENBQW5GbFYsc0JBQXNCLEVBQUVzQyxzQkFBc0IsR0FBSzRTLGdDQUFnQyxDQUEzRDVTLHNCQUFzQjtjQUNoRGhILGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRHRGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDc2MsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDcmQsd0JBQXdCLENBQUN5RSxLQUFLO2NBQzNGdEIsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4YSxXQUFXLENBQUMsR0FBRyxJQUFJLENBQUM3Yix3QkFBd0IsQ0FBQzRHLFFBQVE7Y0FDM0Z6RCxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3VjLGFBQWEsQ0FBQyxHQUFHVixLQUFLO2NBRTVELElBQUksSUFBSSxDQUFDdmEsZUFBZSxLQUFLQyxzQkFBZSxDQUFDQyxFQUFFLElBQUs0SCxzQkFBc0IsSUFBSUEsc0JBQXNCLEtBQUs3SCxzQkFBZSxDQUFDQyxFQUFHLEVBQUU7Z0JBQzVIUSxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ2daLCtCQUErQixPQUFBaGQsTUFBQSxDQUFJb1csTUFBTSxPQUFBcFcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtnQkFDcEosSUFBSW9HLHNCQUFzQixFQUFFO2tCQUMxQjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2tCQUN0RjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtrQkFDdkZrQyxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ2laLG1DQUFtQyxPQUFBamQsTUFBQSxDQUFJb1csTUFBTSxPQUFBcFcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtnQkFDMUo7Y0FDRixDQUFDLE1BQ0ksSUFBSW9HLHNCQUFzQixFQUFFO2dCQUMvQjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2dCQUN0RjFFLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDRixhQUFhLENBQUMsR0FBRyxJQUFJLENBQUNYLGFBQWEsQ0FBQ1csYUFBYTtnQkFDdkZrQyxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ2taLGlDQUFpQyxPQUFBbGQsTUFBQSxDQUFJb1csTUFBTSxPQUFBcFcsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtjQUN4SjtjQUVBLElBQUksQ0FBQ3NGLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2RpRixPQUEyQixHQUFHO2dCQUNsQ3RILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXlYLHVCQUFBLEdBQUUsSUFBSSxDQUFDM2MsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUF3WCx1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQzNjLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDOFg7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQXZYLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBcVcsTUFBQSxPQUFBaGIsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUErYSxVQUFPNVUsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQTlDLE9BQUEsRUFBQWlkLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQW5iLFlBQUEsWUFBQWtCLElBQUEsV0FBQWthLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQWhhLElBQUEsR0FBQWdhLFVBQUEsQ0FBQXplLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBOFosVUFBQSxDQUFBaGEsSUFBQTt3QkFBQWdhLFVBQUEsQ0FBQXplLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUF5YSxVQUFBLENBQUF4WSxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBY0gsUUFBUSxDQUExQkcsSUFBSSxFQUFFOUMsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ3JCbWMsT0FBSSxDQUFDMVQsZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBQzlCbWMsT0FBSSxDQUFDNVksYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMlosMEJBQTBCLEVBQUUsK0JBQStCLEVBQUUvYyxTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDdFB3RixPQUFPLENBQUN0RixJQUFJLENBQUM7d0JBQUNzYSxVQUFBLENBQUF6ZSxJQUFBO3dCQUFBO3NCQUFBO3dCQUFBeWUsVUFBQSxDQUFBaGEsSUFBQTt3QkFBQStaLElBQUEsR0FBQUMsVUFBQTt3QkFFUnhhLDBCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBRTFEaEMsNEJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0RzWCxPQUFJLENBQUM1WSxhQUFhLENBQUNDLGtCQUFRLENBQUN3QixLQUFLLEVBQUV0QiwwQkFBbUIsQ0FBQzRaLHVCQUF1QixFQUFFLDRCQUE0QixFQUFFaGQsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE4YSxJQUFBLEVBQVMzZCxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUM5TyxJQUFJLElBQUFnRyxnQ0FBb0IsRUFBQXVVLElBQUEsRUFBUTliLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBQyxJQUFJekYsS0FBSyxDQUFDaWIsT0FBSSxDQUFDclQsdUJBQXVCLENBQUMsQ0FBQzt3QkFFakQ7d0JBQ0FuQyxNQUFNLENBQUF3VyxJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBbFksSUFBQTtvQkFBQTtrQkFBQSxHQUFBOFgsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQTFmLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQStlLFVBQUEsQ0FBQXBYLElBQUE7VUFBQTtRQUFBLEdBQUE4VyxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBakVZUyxrQkFBa0JBLENBQUFnQixJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUE1QixtQkFBQSxDQUFBMWUsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFsQmtmLGtCQUFrQjtJQUFBO0lBbUUvQjtBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBSkU7RUFBQTtJQUFBOWIsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUFxZix5QkFBQSxPQUFBN2Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUtBLFNBQUE0YixVQUFzQ3ZkLFNBQWlCO1FBQUEsSUFBQXdkLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyxzQ0FBQTtVQUFBN2IsS0FBQTtVQUFBK0Usc0JBQUE7VUFBQStXLFFBQUE7VUFBQUMsU0FBQTtVQUFBQyxZQUFBO1VBQUEvYixXQUFBO1VBQUFHLGFBQUE7VUFBQUMsY0FBQTtVQUFBNkUsTUFBQTtVQUFBL0UsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUE4VyxPQUFBLEdBQUE3Z0IsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUFtYixVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQWpiLElBQUEsR0FBQWliLFVBQUEsQ0FBQTFmLElBQUE7WUFBQTtjQUFFcWYsc0NBQStFLEdBQUFJLE9BQUEsQ0FBQTVnQixNQUFBLFFBQUE0Z0IsT0FBQSxRQUFBNWUsU0FBQSxHQUFBNGUsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUNySWpjLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDM0IsSUFBSSxDQUFDQyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM0YSwrQkFBK0IsRUFBRSxxQ0FBcUMsRUFBRWhlLFNBQVMsQ0FBQztjQUVoSTRHLHNCQUFzQixHQUEwQjhXLHNDQUFzQyxDQUF0RjlXLHNCQUFzQixFQUFFK1csUUFBUSxHQUFnQkQsc0NBQXNDLENBQTlEQyxRQUFRLEVBQUVDLFNBQVMsR0FBS0Ysc0NBQXNDLENBQXBERSxTQUFTO2NBQUEsSUFFOUNoWCxzQkFBc0I7Z0JBQUFtWCxVQUFBLENBQUExZixJQUFBO2dCQUFBO2NBQUE7Y0FDbkJ3ZixZQUFZLEdBQUcsa0VBQWtFO2NBQ3ZGLElBQUksQ0FBQzVhLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDNmEsOEJBQThCLEVBQUUsdUVBQXVFLEVBQUVqZSxTQUFTLENBQUM7Y0FBQyxPQUFBK2QsVUFBQSxDQUFBdFosTUFBQSxXQUNwSzJCLE9BQU8sQ0FBQ0MsTUFBTSxDQUFDLElBQUl6RixLQUFLLENBQUNpZCxZQUFZLENBQUMsQ0FBQztZQUFBO2NBRzFDL2IsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUM0YSx3Q0FBd0MsT0FBQTVlLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSyxpQkFBQWxFLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUTtjQUMxSzFELGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQnFGLGdCQUFnQixFQUFFLENBQUN4SCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ21hO2NBQzlFLENBQUMsQ0FBQztjQUVJamMsY0FBeUIsR0FBQWxGLGFBQUEsS0FBUStELHFCQUFTLENBQUN5RyxjQUFjO2NBQy9EdEYsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Y0FDdEYxRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Y0FFdkYsSUFBSSxDQUFDa0csaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0M2RSxNQUFpQyxHQUFHLENBQUMsQ0FBQztjQUU1QyxJQUFJNFcsUUFBUSxFQUFFO2dCQUNaNVcsTUFBTSxDQUFDNFcsUUFBUSxHQUFHQSxRQUFRLENBQUNwZixRQUFRLENBQUMsQ0FBQztjQUN2Qzs7Y0FFQTtjQUNBMkQsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4ZCxTQUFTLENBQUMsR0FBR0EsU0FBUyxJQUFJLEVBQUU7Y0FFNUQ1YixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2RpRixPQUEyQixHQUFHO2dCQUNsQ3RILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSCtFLE1BQU0sRUFBTkEsTUFBTTtnQkFDTjVDLE9BQU8sR0FBQXFaLHVCQUFBLEdBQUUsSUFBSSxDQUFDdmUsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFvWix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ3ZlLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDOFo7Y0FDL0YsQ0FBQztjQUFBLE9BQUFKLFVBQUEsQ0FBQXRaLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBZ1ksTUFBQSxPQUFBM2Msa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUEwYyxVQUFPdlcsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFDLHlCQUFBLEVBQUFDLElBQUEsRUFBQTlDLE9BQUEsRUFBQTRlLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQTljLFlBQUEsWUFBQWtCLElBQUEsV0FBQTZiLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQTNiLElBQUEsR0FBQTJiLFVBQUEsQ0FBQXBnQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQXliLFVBQUEsQ0FBQTNiLElBQUE7d0JBQUEyYixVQUFBLENBQUFwZ0IsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQW9jLFVBQUEsQ0FBQW5hLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQ25EL0IsSUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDckIrZCxPQUFJLENBQUN0VixnQkFBZ0IsQ0FBQ3pJLE9BQU8sQ0FBQzt3QkFFOUIrZCxPQUFJLENBQUN4YSxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNzYixpQ0FBaUMsRUFBRSx1Q0FBdUMsRUFBRTFlLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUNyUXdGLE9BQU8sQ0FBQ3RGLElBQUksQ0FBQzt3QkFBQ2ljLFVBQUEsQ0FBQXBnQixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBb2dCLFVBQUEsQ0FBQTNiLElBQUE7d0JBQUEwYixJQUFBLEdBQUFDLFVBQUE7d0JBRVJuYywwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEa1osT0FBSSxDQUFDeGEsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUM2YSw4QkFBOEIsRUFBRSxvQ0FBb0MsRUFBRWplLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBeWMsSUFBQSxFQUFTdGYsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSwwQkFBdUIsQ0FBQzt3QkFBQyxLQUUxUCxJQUFBZ0csZ0NBQW9CLEVBQUFrVyxJQUFBLEVBQVF6ZCxxQkFBUyxDQUFDd0gscUJBQXFCLENBQUM7MEJBQUFrVyxVQUFBLENBQUFwZ0IsSUFBQTswQkFBQTt3QkFBQTt3QkFDOURnSSxNQUFNLENBQUMsSUFBSXpGLEtBQUssQ0FBQzZjLE9BQUksQ0FBQ2pWLHVCQUF1QixDQUFDLENBQUM7d0JBQUMsT0FBQWlXLFVBQUEsQ0FBQWhhLE1BQUE7c0JBQUE7d0JBR2xENEIsTUFBTSxDQUFBbVksSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQTdaLElBQUE7b0JBQUE7a0JBQUEsR0FBQXlaLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFNLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBUixNQUFBLENBQUFyaEIsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBOGdCLFVBQUEsQ0FBQW5aLElBQUE7VUFBQTtRQUFBLEdBQUEyWSxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBcEVZWSx3QkFBd0JBLENBQUFVLElBQUE7UUFBQSxPQUFBdkIseUJBQUEsQ0FBQXZnQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQXhCa2hCLHdCQUF3QjtJQUFBO0lBc0VyQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQU5FO0VBQUE7SUFBQTlkLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBNmdCLGdCQUFBLE9BQUFyZCxrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBT0EsU0FBQW9kLFVBQTZCL2UsU0FBaUIsRUFBRTJiLEtBQWEsRUFBRXFELGdCQUF3QjtRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyw2QkFBQTtVQUFBdGQsS0FBQTtVQUFBQyxXQUFBO1VBQUFHLGFBQUE7VUFBQTJFLHNCQUFBO1VBQUExRSxjQUFBO1VBQUFGLEdBQUE7VUFBQUQsTUFBQTtVQUFBaUYsT0FBQTtVQUFBb1ksT0FBQSxHQUFBbmlCLFNBQUE7UUFBQSxPQUFBeUUsWUFBQSxZQUFBa0IsSUFBQSxXQUFBeWMsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF2YyxJQUFBLEdBQUF1YyxVQUFBLENBQUFoaEIsSUFBQTtZQUFBO2NBQUU4Z0IsNkJBQTZELEdBQUFDLE9BQUEsQ0FBQWxpQixNQUFBLFFBQUFraUIsT0FBQSxRQUFBbGdCLFNBQUEsR0FBQWtnQixPQUFBLE1BQUcsQ0FBQyxDQUFDO2NBQ25KdmQsS0FBSyxHQUFHa0IsWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQztjQUMzQixJQUFJLENBQUNDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2tjLHNCQUFzQixFQUFFLDBCQUEwQixFQUFFdGYsU0FBUyxDQUFDO2NBRWhIOEIsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNpYyxrQ0FBa0MsT0FBQWpnQixNQUFBLENBQUlVLFNBQVMsaUJBQUFWLE1BQUEsQ0FBYyxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUIsU0FBUztjQUN6SXlCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQnFGLGdCQUFnQixFQUFFLENBQUN4SCxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDO2dCQUN4RGlFLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQ3diO2NBQzlFLENBQUMsQ0FBQztjQUVNNVksc0JBQXNCLEdBQUt1WSw2QkFBNkIsQ0FBeER2WSxzQkFBc0I7Y0FDeEIxRSxjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FDL0R0RixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3NjLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQ3JkLHdCQUF3QixDQUFDeUUsS0FBSztjQUMzRnRCLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOGEsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDN2Isd0JBQXdCLENBQUM0RyxRQUFRO2NBQzNGekQsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUN1YyxhQUFhLENBQUMsR0FBR1YsS0FBSztjQUU1RCxJQUFJL1Usc0JBQXNCLEVBQUU7Z0JBQzFCMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUM4RyxzQkFBc0IsQ0FBQyxHQUFHQSxzQkFBc0I7Z0JBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2dCQUN2RmtDLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDbWMsc0NBQXNDLE9BQUFuZ0IsTUFBQSxDQUFJVSxTQUFTLGlCQUFBVixNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lCLFNBQVMsQ0FBRTtjQUNuSjtjQUVBLElBQUksQ0FBQ3NGLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3hFLElBQUksRUFBRWdPLElBQUksQ0FBQ0MsU0FBUyxDQUFDdU8sZ0JBQWdCLENBQUM7Z0JBQ3RDdGYsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBOGEsdUJBQUEsR0FBRSxJQUFJLENBQUNoZ0IsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUE2YSx1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ2hnQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ21iO2NBQy9GLENBQUM7Y0FBQSxPQUFBSCxVQUFBLENBQUE1YSxNQUFBLFdBRU0sSUFBSTJCLE9BQU87Z0JBQUEsSUFBQXNaLE1BQUEsT0FBQWplLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBZ2UsVUFBTzdYLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBNUMsT0FBQSxFQUFBNkMseUJBQUEsRUFBQXFkLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQXBlLFlBQUEsWUFBQWtCLElBQUEsV0FBQW1kLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQWpkLElBQUEsR0FBQWlkLFVBQUEsQ0FBQTFoQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQStjLFVBQUEsQ0FBQWpkLElBQUE7d0JBQUFpZCxVQUFBLENBQUExaEIsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQTBkLFVBQUEsQ0FBQXpiLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmd2YsT0FBSSxDQUFDL1csZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBRXhCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QyYSxPQUFJLENBQUNqYyxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUM0Yyx3QkFBd0IsRUFBRSw0QkFBNEIsRUFBRWhnQixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDalB3RixPQUFPLENBQUMsQ0FBQzt3QkFBQ2lZLFVBQUEsQ0FBQTFoQixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBMGhCLFVBQUEsQ0FBQWpkLElBQUE7d0JBQUFnZCxJQUFBLEdBQUFDLFVBQUE7d0JBRUp6ZCwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEMmEsT0FBSSxDQUFDamMsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUM2YyxxQkFBcUIsRUFBRSx5QkFBeUIsRUFBRWpnQixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQStkLElBQUEsRUFBUzVnQixTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUN6TyxJQUFJLElBQUFnRyxnQ0FBb0IsRUFBQXdYLElBQUEsRUFBUS9lLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDc2UsT0FBSSxDQUFDMVcsdUJBQXVCLENBQUMsQ0FBQzt3QkFDbEQ7d0JBQ0FuQyxNQUFNLENBQUF5WixJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBbmIsSUFBQTtvQkFBQTtrQkFBQSxHQUFBK2EsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQTNpQixLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFvaUIsVUFBQSxDQUFBemEsSUFBQTtVQUFBO1FBQUEsR0FBQW1hLFNBQUE7TUFBQSxDQUNIO01BQUEsU0F6RFlTLGVBQWVBLENBQUFZLElBQUEsRUFBQUMsSUFBQSxFQUFBQyxJQUFBO1FBQUEsT0FBQXhCLGdCQUFBLENBQUEvaEIsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFmdWlCLGVBQWU7SUFBQTtJQTJENUI7QUFDRjtBQUNBO0FBQ0E7SUFIRTtFQUFBO0lBQUFuZixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXNpQixxQkFBQSxPQUFBOWUsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUlBLFNBQUE2ZSxVQUFrQ3hnQixTQUFpQjtRQUFBLElBQUF5Z0IsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUE3ZSxLQUFBLEVBQUFDLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBaUYsT0FBQTtRQUFBLE9BQUF0RixZQUFBLFlBQUFrQixJQUFBLFdBQUErZCxVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQTdkLElBQUEsR0FBQTZkLFVBQUEsQ0FBQXRpQixJQUFBO1lBQUE7Y0FDM0N3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDd2QsdUJBQXVCLEVBQUUsNEJBQTRCLEVBQUU1Z0IsU0FBUyxDQUFDO2NBQ3ZILElBQUksQ0FBQ0EsU0FBUyxFQUFFO2dCQUNkQSxTQUFTLEdBQUcsSUFBQXlGLFlBQU0sRUFBQyxDQUFDO2NBQ3RCO2NBRU0zRCxXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3VkLGdDQUFnQyxPQUFBdmhCLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDeUUsS0FBSztjQUM5R3ZCLGFBQWEsR0FBR3lCLGlCQUFLLENBQUNDLE1BQU0sQ0FBQyxDQUFDO2NBQ3BDLElBQUFDLDZCQUFpQixFQUFDM0IsYUFBYSxFQUFFO2dCQUMvQjRCLE9BQU8sRUFBRSxJQUFJLENBQUM1RSxhQUFhLENBQUM2RSwwQkFBMEI7Z0JBQ3REQywwQkFBMEIsRUFBRSxJQUFJLENBQUM5RSxhQUFhLENBQUMrRSw0QkFBNEIsQ0FBQzhjO2NBQzlFLENBQUMsQ0FBQztjQUVJNWUsY0FBeUIsR0FBQWxGLGFBQUEsS0FBUStELHFCQUFTLENBQUN5RyxjQUFjO2NBQy9EdEYsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNzYyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUNyZCx3QkFBd0IsQ0FBQ3lFLEtBQUs7Y0FDM0Z0QixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0UsU0FBUyxDQUFDLEdBQUdBLFNBQVM7Y0FFNUQsSUFBSSxDQUFDOEYsaUJBQWlCLENBQUM5RixTQUFTLEVBQUVrQyxjQUFjLENBQUM7Y0FFM0NGLEdBQUcsTUFBQTFDLE1BQUEsQ0FBTSxJQUFJLENBQUNQLHdCQUF3QixDQUFDMEUsTUFBTSxFQUFBbkUsTUFBQSxDQUFHd0MsV0FBVztjQUMzREMsTUFBTSxHQUFHLEtBQUs7Y0FDZGlGLE9BQTJCLEdBQUc7Z0JBQ2xDdEgsT0FBTyxFQUFFd0MsY0FBYztnQkFDdkJILE1BQU0sRUFBTkEsTUFBTTtnQkFDTkMsR0FBRyxFQUFIQSxHQUFHO2dCQUNIbUMsT0FBTyxHQUFBc2MsdUJBQUEsR0FBRSxJQUFJLENBQUN4aEIsYUFBYSxDQUFDbUYscUJBQXFCLGNBQUFxYyx1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ3hoQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ3ljO2NBQy9GLENBQUM7Y0FBQSxPQUFBSCxVQUFBLENBQUFsYyxNQUFBLFdBRU0sSUFBSTJCLE9BQU87Z0JBQUEsSUFBQTJhLE1BQUEsT0FBQXRmLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBcWYsVUFBT2xaLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBQyxJQUFBLEVBQUF5ZSwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUF6ZixZQUFBLFlBQUFrQixJQUFBLFdBQUF3ZSxVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUF0ZSxJQUFBLEdBQUFzZSxVQUFBLENBQUEvaUIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFvZSxVQUFBLENBQUF0ZSxJQUFBO3dCQUFBc2UsVUFBQSxDQUFBL2lCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUErZSxVQUFBLENBQUE5YyxJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRC9CLElBQUksR0FBS0gsUUFBUSxDQUFqQkcsSUFBSTt3QkFDWmtlLE9BQUksQ0FBQ3pkLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ2llLHlCQUF5QixFQUFFLDhCQUE4QixFQUFFcmhCLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUNwUHdGLE9BQU8sQ0FBQ3RGLElBQUksQ0FBQzt3QkFBQzRlLFVBQUEsQ0FBQS9pQixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBK2lCLFVBQUEsQ0FBQXRlLElBQUE7d0JBQUFxZSxJQUFBLEdBQUFDLFVBQUE7d0JBRVI5ZSwwQkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUMxRGhDLDRCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNEbWMsT0FBSSxDQUFDemQsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNrZSxzQkFBc0IsRUFBRSwyQkFBMkIsRUFBRXRoQixTQUFTLEVBQUVkLFNBQVMsRUFBRXFELDRCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBQW9mLElBQUEsRUFBU2ppQixTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUM1TyxJQUFJLElBQUFnRyxnQ0FBb0IsRUFBQTZZLElBQUEsRUFBUXBnQixxQkFBUyxDQUFDd0gscUJBQXFCLENBQUMsRUFBRTswQkFDaEVsQyxNQUFNLENBQUUsSUFBSXpGLEtBQUssQ0FBQzhmLE9BQUksQ0FBQ2xZLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBOGEsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQXhjLElBQUE7b0JBQUE7a0JBQUEsR0FBQW9jLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxNQUFBLENBQUFoa0IsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBMGpCLFVBQUEsQ0FBQS9iLElBQUE7VUFBQTtRQUFBLEdBQUE0YixTQUFBO01BQUEsQ0FDSDtNQUFBLFNBaERZTSxvQkFBb0JBLENBQUFXLElBQUE7UUFBQSxPQUFBbEIscUJBQUEsQ0FBQXhqQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQXBCNmpCLG9CQUFvQjtJQUFBO0lBa0RqQztBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFMRTtFQUFBO0lBQUF6Z0IsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUF5akIsaUNBQUEsT0FBQWpnQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBTUEsU0FBQWdnQixVQUE4QzNoQixTQUFpQixFQUFFNGhCLGdDQUF3QztRQUFBLElBQUFDLHVCQUFBO1VBQUFDLE9BQUE7UUFBQSxJQUFBQyxtQ0FBQTtVQUFBbGdCLEtBQUE7VUFBQUMsV0FBQTtVQUFBRyxhQUFBO1VBQUEyRSxzQkFBQTtVQUFBMUUsY0FBQTtVQUFBRixHQUFBO1VBQUFELE1BQUE7VUFBQWlGLE9BQUE7VUFBQWdiLE9BQUEsR0FBQS9rQixTQUFBO1FBQUEsT0FBQXlFLFlBQUEsWUFBQWtCLElBQUEsV0FBQXFmLFVBQUE7VUFBQSxrQkFBQUEsVUFBQSxDQUFBbmYsSUFBQSxHQUFBbWYsVUFBQSxDQUFBNWpCLElBQUE7WUFBQTtjQUFFMGpCLG1DQUF5RSxHQUFBQyxPQUFBLENBQUE5a0IsTUFBQSxRQUFBOGtCLE9BQUEsUUFBQTlpQixTQUFBLEdBQUE4aUIsT0FBQSxNQUFHLENBQUMsQ0FBQztjQUNqTG5nQixLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDOGUsbUNBQW1DLEVBQUUseUNBQXlDLEVBQUVsaUIsU0FBUyxDQUFDO2NBRTVJOEIsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUM2ZSxpQ0FBaUMsT0FBQTdpQixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTO2NBQ3BLaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDb2U7Y0FDOUUsQ0FBQyxDQUFDO2NBRU14YixzQkFBc0IsR0FBS21iLG1DQUFtQyxDQUE5RG5iLHNCQUFzQjtjQUN4QjFFLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRHRGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDc2MsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDcmQsd0JBQXdCLENBQUN5RSxLQUFLO2NBRTNGLElBQUlvRCxzQkFBc0IsRUFBRTtnQkFDMUIxRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQzhHLHNCQUFzQixDQUFDLEdBQUdBLHNCQUFzQjtnQkFDdEYxRSxjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ0YsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDWCxhQUFhLENBQUNXLGFBQWE7Z0JBQ3ZGa0MsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUMrZSxxQ0FBcUMsT0FBQS9pQixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssT0FBQWxFLE1BQUEsQ0FBSSxJQUFJLENBQUNQLHdCQUF3QixDQUFDNEcsUUFBUSxPQUFBckcsTUFBQSxDQUFJVSxTQUFTLENBQUU7Y0FDOUs7Y0FFQSxJQUFJLENBQUM4RixpQkFBaUIsQ0FBQzlGLFNBQVMsRUFBRWtDLGNBQWMsQ0FBQztjQUVqREosV0FBVyxJQUFJLGFBQWEsR0FBR2YscUJBQVMsQ0FBQ3VoQixnQkFBZ0I7Y0FFbkR0Z0IsR0FBRyxNQUFBMUMsTUFBQSxDQUFNLElBQUksQ0FBQ1Asd0JBQXdCLENBQUMwRSxNQUFNLEVBQUFuRSxNQUFBLENBQUd3QyxXQUFXO2NBQzNEQyxNQUFNLEdBQUcsTUFBTTtjQUNmaUYsT0FBMkIsR0FBRztnQkFDbEN4RSxJQUFJLEVBQUVnTyxJQUFJLENBQUNDLFNBQVMsQ0FBQ21SLGdDQUFnQyxDQUFDO2dCQUN0RGxpQixPQUFPLEVBQUV3QyxjQUFjO2dCQUN2QkgsTUFBTSxFQUFOQSxNQUFNO2dCQUNOQyxHQUFHLEVBQUhBLEdBQUc7Z0JBQ0htQyxPQUFPLEdBQUEwZCx1QkFBQSxHQUFFLElBQUksQ0FBQzVpQixhQUFhLENBQUNtRixxQkFBcUIsY0FBQXlkLHVCQUFBLGNBQUFBLHVCQUFBLEdBQUksSUFBSSxDQUFDNWlCLGFBQWEsQ0FBQ29GLG9CQUFvQixDQUFDK2Q7Y0FDL0YsQ0FBQztjQUFBLE9BQUFILFVBQUEsQ0FBQXhkLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBbWMsTUFBQSxPQUFBOWdCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBNmdCLFVBQU8xYSxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUFsRSxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQTVDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUFrZ0IsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBamhCLFlBQUEsWUFBQWtCLElBQUEsV0FBQWdnQixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUE5ZixJQUFBLEdBQUE4ZixVQUFBLENBQUF2a0IsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUE0ZixVQUFBLENBQUE5ZixJQUFBO3dCQUFBOGYsVUFBQSxDQUFBdmtCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUF1Z0IsVUFBQSxDQUFBdGUsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEN0UsT0FBTyxHQUFLMkMsUUFBUSxDQUFwQjNDLE9BQU87d0JBQ2ZvaUIsT0FBSSxDQUFDM1osZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBQ3hCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0R1ZCxPQUFJLENBQUM3ZSxhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUN5ZixxQ0FBcUMsRUFBRSwyQ0FBMkMsRUFBRTdpQixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDN1F3RixPQUFPLENBQUMsQ0FBQzt3QkFBQzhhLFVBQUEsQ0FBQXZrQixJQUFBO3dCQUFBO3NCQUFBO3dCQUFBdWtCLFVBQUEsQ0FBQTlmLElBQUE7d0JBQUE2ZixJQUFBLEdBQUFDLFVBQUE7d0JBRUp0Z0IsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHVkLE9BQUksQ0FBQzdlLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDMGYsa0NBQWtDLEVBQUUsd0NBQXdDLEVBQUU5aUIsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE0Z0IsSUFBQSxFQUFTempCLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQ3JRLElBQUksSUFBQWdHLGdDQUFvQixFQUFBcWEsSUFBQSxFQUFRNWhCLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDa2hCLE9BQUksQ0FBQ3RaLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBc2MsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQWhlLElBQUE7b0JBQUE7a0JBQUEsR0FBQTRkLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxNQUFBLENBQUF4bEIsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBZ2xCLFVBQUEsQ0FBQXJkLElBQUE7VUFBQTtRQUFBLEdBQUErYyxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBeERZUyxnQ0FBZ0NBLENBQUFhLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUF4QixpQ0FBQSxDQUFBM2tCLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBaENtbEIsZ0NBQWdDO0lBQUE7SUEwRDdDO0FBQ0Y7QUFDQTtJQUZFO0VBQUE7SUFBQS9oQixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQWtsQixvQkFBQSxPQUFBMWhCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FHQSxTQUFBeWhCLFVBQWlDcGpCLFNBQWlCLEVBQUVrSixzQkFBOEI7UUFBQSxJQUFBbWEsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUFDLGlDQUFBO1VBQUExaEIsS0FBQTtVQUFBMmhCLG1CQUFBO1VBQUExaEIsV0FBQTtVQUFBRyxhQUFBO1VBQUFDLGNBQUE7VUFBQUYsR0FBQTtVQUFBRCxNQUFBO1VBQUFpRixPQUFBO1VBQUF5YyxPQUFBLEdBQUF4bUIsU0FBQTtRQUFBLE9BQUF5RSxZQUFBLFlBQUFrQixJQUFBLFdBQUE4Z0IsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUE1Z0IsSUFBQSxHQUFBNGdCLFVBQUEsQ0FBQXJsQixJQUFBO1lBQUE7Y0FBRWtsQixpQ0FBcUUsR0FBQUUsT0FBQSxDQUFBdm1CLE1BQUEsUUFBQXVtQixPQUFBLFFBQUF2a0IsU0FBQSxHQUFBdWtCLE9BQUEsTUFBRyxDQUFDLENBQUM7Y0FBQSxNQUV4SixDQUFDdmEsc0JBQXNCLElBQUlBLHNCQUFzQixLQUFLN0gsc0JBQWUsQ0FBQ0MsRUFBRTtnQkFBQW9pQixVQUFBLENBQUFybEIsSUFBQTtnQkFBQTtjQUFBO2NBQUEsT0FBQXFsQixVQUFBLENBQUFqZixNQUFBLFdBQ25FMkIsT0FBTyxDQUFDMEIsT0FBTyxDQUFDLENBQUM7WUFBQTtjQUVwQmpHLEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDbkJ3Z0IsbUJBQW1CLEdBQUtELGlDQUFpQyxDQUF6REMsbUJBQW1CO2NBQUEsTUFDdkIsQ0FBQ3RhLHNCQUFzQixJQUFJQSxzQkFBc0IsS0FBSzdILHNCQUFlLENBQUNDLEVBQUU7Z0JBQUFvaUIsVUFBQSxDQUFBcmxCLElBQUE7Z0JBQUE7Y0FBQTtjQUFBLE1BQVUsSUFBSXVDLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQztZQUFBO2NBQ3JJa0IsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUNxZ0IsdUJBQXVCLE9BQUFya0IsTUFBQSxDQUFJVSxTQUFTO2NBQzNFaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FFOUJ6QixjQUF5QixHQUFBbEYsYUFBQSxLQUFRK0QscUJBQVMsQ0FBQ3lHLGNBQWM7Y0FDL0R0RixjQUFjLENBQUNwQyxrQ0FBc0IsQ0FBQ3NjLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQ3JkLHdCQUF3QixDQUFDeUUsS0FBSztjQUMzRixJQUFJZ2dCLG1CQUFtQixFQUFFO2dCQUN2QnRoQixjQUFjLENBQUNuQixxQkFBUyxDQUFDeWlCLG1CQUFtQixDQUFDLEdBQUdBLG1CQUFtQjtjQUNyRTtjQUVBLElBQUksQ0FBQzFkLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3RILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQWtmLHVCQUFBLEdBQUUsSUFBSSxDQUFDcGtCLGFBQWEsQ0FBQ21GLHFCQUFxQixjQUFBaWYsdUJBQUEsY0FBQUEsdUJBQUEsR0FBSSxJQUFJLENBQUNwa0IsYUFBYSxDQUFDb0Ysb0JBQW9CLENBQUN1ZjtjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBamYsTUFBQSxXQUVNLElBQUkyQixPQUFPO2dCQUFBLElBQUF5ZCxNQUFBLE9BQUFwaUIsa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUFDLFNBQUFtaUIsVUFBT2hjLE9BQU8sRUFBRXpCLE1BQU07a0JBQUEsSUFBQWxFLFlBQUEsRUFBQUUsUUFBQSxFQUFBQyx1QkFBQSxFQUFBQyx5QkFBQSxFQUFBd2hCLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQXZpQixZQUFBLFlBQUFrQixJQUFBLFdBQUFzaEIsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBcGhCLElBQUEsR0FBQW9oQixVQUFBLENBQUE3bEIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUFraEIsVUFBQSxDQUFBcGhCLElBQUE7d0JBQUFvaEIsVUFBQSxDQUFBN2xCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUE2aEIsVUFBQSxDQUFBNWYsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QrZSxPQUFJLENBQUNyZ0IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDK2dCLDRCQUE0QixFQUFFLGlDQUFpQyxFQUFFbmtCLFNBQVMsRUFBRXFDLFFBQVEsRUFBRUUseUJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFFN0MsU0FBUyxFQUFFQSxTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLHVCQUF1QixDQUFDO3dCQUMxUHdGLE9BQU8sQ0FBQyxDQUFDO3dCQUFDb2MsVUFBQSxDQUFBN2xCLElBQUE7d0JBQUE7c0JBQUE7d0JBQUE2bEIsVUFBQSxDQUFBcGhCLElBQUE7d0JBQUFtaEIsSUFBQSxHQUFBQyxVQUFBO3dCQUVKNWhCLDBCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsNEJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QrZSxPQUFJLENBQUNyZ0IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUNnaEIseUJBQXlCLEVBQUUsOEJBQThCLEVBQUVwa0IsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUFraUIsSUFBQSxFQUFTL2tCLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBRWxQLElBQUksSUFBQWdHLGdDQUFvQixFQUFBMmIsSUFBQSxFQUFRbGpCLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQyxFQUFFOzBCQUNoRWxDLE1BQU0sQ0FBRSxJQUFJekYsS0FBSyxDQUFDMGlCLE9BQUksQ0FBQzlhLHVCQUF1QixDQUFDLENBQUM7d0JBQ2xEO3dCQUNBbkMsTUFBTSxDQUFBNGQsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQXRmLElBQUE7b0JBQUE7a0JBQUEsR0FBQWtmLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFPLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBVCxNQUFBLENBQUE5bUIsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBeW1CLFVBQUEsQ0FBQTllLElBQUE7VUFBQTtRQUFBLEdBQUF3ZSxTQUFBO01BQUEsQ0FDSDtNQUFBLFNBL0NZUSxtQkFBbUJBLENBQUFXLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFyQixvQkFBQSxDQUFBcG1CLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBbkIybUIsbUJBQW1CO0lBQUE7SUFpRGhDO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtJQUxFO0VBQUE7SUFBQXZqQixHQUFBO0lBQUFwQyxLQUFBO01BQUEsSUFBQXdtQixnQ0FBQSxPQUFBaGpCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FNQSxTQUFBK2lCLFVBQTZDMWtCLFNBQWlCLEVBQUUya0Isc0JBQTBFO1FBQUEsSUFBQUMsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUFoakIsS0FBQSxFQUFBNlQsTUFBQSxFQUFBOU8sc0JBQUEsRUFBQTlFLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBaUYsT0FBQTtRQUFBLE9BQUF0RixZQUFBLFlBQUFrQixJQUFBLFdBQUFraUIsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUFoaUIsSUFBQSxHQUFBZ2lCLFVBQUEsQ0FBQXptQixJQUFBO1lBQUE7Y0FDbEl3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDMmhCLDBCQUEwQixFQUFFLCtCQUErQixFQUFFL2tCLFNBQVMsQ0FBQztjQUVySDBWLE1BQU0sR0FBNkJpUCxzQkFBc0IsQ0FBekRqUCxNQUFNLEVBQUU5TyxzQkFBc0IsR0FBSytkLHNCQUFzQixDQUFqRC9kLHNCQUFzQjtjQUFBLE1BRWxDLENBQUM4TyxNQUFNLElBQUksQ0FBQzlPLHNCQUFzQjtnQkFBQWtlLFVBQUEsQ0FBQXptQixJQUFBO2dCQUFBO2NBQUE7Y0FDcEMsSUFBSSxDQUFDNEUsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUM0aEIseUJBQXlCLEVBQzlFLCtFQUErRSxFQUFFaGxCLFNBQVMsQ0FBQztjQUFDLE1BQ3hGLElBQUlZLEtBQUssQ0FBQyxnREFBZ0QsQ0FBQztZQUFBO2NBRzdEa0IsV0FBVyxPQUFBeEMsTUFBQSxDQUFPZ0UsZ0NBQW9CLENBQUMyaEIsK0JBQStCLE9BQUEzbEIsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLE9BQUFsRSxNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEsT0FBQXJHLE1BQUEsQ0FBSW9XLE1BQU0sT0FBQXBXLE1BQUEsQ0FBSVUsU0FBUyxpQkFBQVYsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5QixTQUFTO2NBQ25PeUIsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CcUYsZ0JBQWdCLEVBQUUsQ0FBQ3hILGtDQUFzQixDQUFDRixhQUFhLENBQUM7Z0JBQ3hEaUUsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDa2hCO2NBQzlFLENBQUMsQ0FBQztjQUVJaGpCLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRHRGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQ2tHLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBQ2pELElBQUksQ0FBQ3FSLGtCQUFrQixDQUFDdlQsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTVDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3RILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQXlnQix1QkFBQSxHQUFFLElBQUksQ0FBQzNsQixhQUFhLENBQUNtRixxQkFBcUIsY0FBQXdnQix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQzNsQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQzZnQjtjQUMvRixDQUFDO2NBQUEsT0FBQUosVUFBQSxDQUFBcmdCLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBK2UsTUFBQSxPQUFBMWpCLGtCQUFBLDBCQUFBQyxZQUFBLFlBQUFDLElBQUEsQ0FBQyxTQUFBeWpCLFVBQU90ZCxPQUFPLEVBQUV6QixNQUFNO2tCQUFBLElBQUFsRSxZQUFBLEVBQUFFLFFBQUEsRUFBQUMsdUJBQUEsRUFBQUMseUJBQUEsRUFBQTdDLE9BQUEsRUFBQTJsQiwwQkFBQSxFQUFBQyw0QkFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUE3akIsWUFBQSxZQUFBa0IsSUFBQSxXQUFBNGlCLFVBQUE7b0JBQUEsa0JBQUFBLFVBQUEsQ0FBQTFpQixJQUFBLEdBQUEwaUIsVUFBQSxDQUFBbm5CLElBQUE7c0JBQUE7d0JBQ2pDOEQsWUFBWSxHQUFHWSxZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO3dCQUFBd2lCLFVBQUEsQ0FBQTFpQixJQUFBO3dCQUFBMGlCLFVBQUEsQ0FBQW5uQixJQUFBO3dCQUFBLE9BRVQ0RCxhQUFhLENBQUMrRSxPQUFPLENBQUM7c0JBQUE7d0JBQXZDM0UsUUFBUSxHQUFBbWpCLFVBQUEsQ0FBQWxoQixJQUFBO3dCQUNSaEMsdUJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyx5QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUNuRDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmbWxCLE9BQUksQ0FBQzFjLGdCQUFnQixDQUFDekksT0FBTyxDQUFDO3dCQUU5QixJQUFJQSxPQUFPLElBQUlBLE9BQU8sQ0FBQ0ksa0NBQXNCLENBQUNDLFdBQVcsQ0FBQ29LLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTswQkFDeEUwYSxPQUFJLENBQUNobEIsU0FBUyxHQUFHSCxPQUFPLENBQUNJLGtDQUFzQixDQUFDQyxXQUFXLENBQUNvSyxXQUFXLENBQUMsQ0FBQyxDQUFDO3dCQUM1RTt3QkFFQTBhLE9BQUksQ0FBQzVoQixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUNxaUIsNEJBQTRCLEVBQUUsaUNBQWlDLEVBQUV6bEIsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQzFQd0YsT0FBTyxDQUFDLENBQUM7d0JBQUMwZCxVQUFBLENBQUFubkIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQW1uQixVQUFBLENBQUExaUIsSUFBQTt3QkFBQXlpQixJQUFBLEdBQUFDLFVBQUE7d0JBRUpsakIsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRHNnQixPQUFJLENBQUM1aEIsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUM0aEIseUJBQXlCLEVBQUUsOEJBQThCLEVBQUVobEIsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUF3akIsSUFBQSxFQUFTcm1CLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQUMsS0FFL08sSUFBQWdHLGdDQUFvQixFQUFBaWQsSUFBQSxFQUFReGtCLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQzswQkFBQWlkLFVBQUEsQ0FBQW5uQixJQUFBOzBCQUFBO3dCQUFBO3dCQUM5RGdJLE1BQU0sQ0FBQyxJQUFJekYsS0FBSyxDQUFDaWtCLE9BQUksQ0FBQ3JjLHVCQUF1QixDQUFDLENBQUM7d0JBQUMsT0FBQWdkLFVBQUEsQ0FBQS9nQixNQUFBO3NCQUFBO3dCQUdsRDRCLE1BQU0sQ0FBQWtmLElBQU0sQ0FBQztzQkFBQztzQkFBQTt3QkFBQSxPQUFBQyxVQUFBLENBQUE1Z0IsSUFBQTtvQkFBQTtrQkFBQSxHQUFBd2dCLFNBQUE7Z0JBQUEsQ0FFakI7Z0JBQUEsaUJBQUFNLElBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBUixNQUFBLENBQUFwb0IsS0FBQSxPQUFBRSxTQUFBO2dCQUFBO2NBQUEsSUFBQztZQUFBO1lBQUE7Y0FBQSxPQUFBNm5CLFVBQUEsQ0FBQWxnQixJQUFBO1VBQUE7UUFBQSxHQUFBOGYsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQS9EWVEsK0JBQStCQSxDQUFBVSxJQUFBLEVBQUFDLElBQUE7UUFBQSxPQUFBcEIsZ0NBQUEsQ0FBQTFuQixLQUFBLE9BQUFFLFNBQUE7TUFBQTtNQUFBLE9BQS9CaW9CLCtCQUErQjtJQUFBO0lBaUU1QztBQUNGO0FBQ0E7QUFDQTtBQUNBO0lBSkU7RUFBQTtJQUFBN2tCLEdBQUE7SUFBQXBDLEtBQUE7TUFBQSxJQUFBNm5CLHNCQUFBLE9BQUFya0Isa0JBQUEsMEJBQUFDLFlBQUEsWUFBQUMsSUFBQSxDQUtBLFNBQUFva0IsVUFBbUNuZixzQkFBOEI7UUFBQSxJQUFBb2YsdUJBQUE7VUFBQUMsT0FBQTtRQUFBLElBQUFwa0IsS0FBQSxFQUFBN0IsU0FBQSxFQUFBOEIsV0FBQSxFQUFBRyxhQUFBLEVBQUFDLGNBQUEsRUFBQUYsR0FBQSxFQUFBRCxNQUFBLEVBQUFpRixPQUFBO1FBQUEsT0FBQXRGLFlBQUEsWUFBQWtCLElBQUEsV0FBQXNqQixVQUFBO1VBQUEsa0JBQUFBLFVBQUEsQ0FBQXBqQixJQUFBLEdBQUFvakIsVUFBQSxDQUFBN25CLElBQUE7WUFBQTtjQUN6RHdELEtBQUssR0FBR2tCLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7Y0FDckJoRCxTQUFTLEdBQUcsSUFBQXlGLFlBQU0sRUFBQyxDQUFDO2NBQzFCLElBQUksQ0FBQ3hDLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQytpQiw0QkFBNEIsRUFBRSxrQ0FBa0MsRUFBRW5tQixTQUFTLENBQUM7Y0FFNUg4QixXQUFXLE9BQUF4QyxNQUFBLENBQU9nRSxnQ0FBb0IsQ0FBQ3VSLHlCQUF5QixPQUFBdlYsTUFBQSxDQUFJLElBQUksQ0FBQ1Asd0JBQXdCLENBQUN5RSxLQUFLLGlCQUFBbEUsTUFBQSxDQUFjLElBQUksQ0FBQ1Asd0JBQXdCLENBQUM0RyxRQUFRO2NBQzNKMUQsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDb2lCO2NBQzlFLENBQUMsQ0FBQztjQUVJbGtCLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRHRGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQ2tHLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxLQUFLO2NBQ2RpRixPQUEyQixHQUFHO2dCQUNsQ3RILE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQTZoQix1QkFBQSxHQUFFLElBQUksQ0FBQy9tQixhQUFhLENBQUNtRixxQkFBcUIsY0FBQTRoQix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQy9tQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQytoQjtjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBemhCLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBaWdCLE1BQUEsT0FBQTVrQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQTJrQixVQUFPeGUsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUFFLElBQUEsRUFBQTlDLE9BQUEsRUFBQTZDLHlCQUFBLEVBQUFna0IsMEJBQUEsRUFBQUMsNEJBQUEsRUFBQUMsSUFBQTtrQkFBQSxPQUFBL2tCLFlBQUEsWUFBQWtCLElBQUEsV0FBQThqQixVQUFBO29CQUFBLGtCQUFBQSxVQUFBLENBQUE1akIsSUFBQSxHQUFBNGpCLFVBQUEsQ0FBQXJvQixJQUFBO3NCQUFBO3dCQUNqQzhELFlBQVksR0FBR1ksWUFBSyxDQUFDQyxLQUFLLENBQUMsQ0FBQzt3QkFBQTBqQixVQUFBLENBQUE1akIsSUFBQTt3QkFBQTRqQixVQUFBLENBQUFyb0IsSUFBQTt3QkFBQSxPQUVUNEQsYUFBYSxDQUFDK0UsT0FBTyxDQUFDO3NCQUFBO3dCQUF2QzNFLFFBQVEsR0FBQXFrQixVQUFBLENBQUFwaUIsSUFBQTt3QkFDUmhDLHVCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQ3hEL0IsSUFBSSxHQUFjSCxRQUFRLENBQTFCRyxJQUFJLEVBQUU5QyxPQUFPLEdBQUsyQyxRQUFRLENBQXBCM0MsT0FBTzt3QkFDckJ1bUIsT0FBSSxDQUFDOWQsZ0JBQWdCLENBQUN6SSxPQUFPLENBQUM7d0JBQ3hCNkMseUJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QwaEIsT0FBSSxDQUFDaGpCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ0MsSUFBSSxFQUFFQywwQkFBbUIsQ0FBQ3VqQiw4QkFBOEIsRUFBRSxvQ0FBb0MsRUFBRTNtQixTQUFTLEVBQUVxQyxRQUFRLEVBQUVFLHlCQUF5QixFQUFFVCxXQUFXLEVBQUVDLE1BQU0sRUFBRTdDLFNBQVMsRUFBRUEsU0FBUyxFQUFFZ0QsY0FBYyxFQUFFSSx1QkFBdUIsQ0FBQzt3QkFDL1B3RixPQUFPLENBQUN0RixJQUFJLENBQUM7d0JBQUNra0IsVUFBQSxDQUFBcm9CLElBQUE7d0JBQUE7c0JBQUE7d0JBQUFxb0IsVUFBQSxDQUFBNWpCLElBQUE7d0JBQUEyakIsSUFBQSxHQUFBQyxVQUFBO3dCQUVScGtCLDBCQUF1QixHQUFHSCxZQUFZLENBQUNvQyxtQkFBbUI7d0JBQzFEaEMsNEJBQXlCLEdBQUdWLEtBQUssQ0FBQzBDLG1CQUFtQjt3QkFDM0QwaEIsT0FBSSxDQUFDaGpCLGFBQWEsQ0FBQ0Msa0JBQVEsQ0FBQ3dCLEtBQUssRUFBRXRCLDBCQUFtQixDQUFDd2pCLDJCQUEyQixFQUFFLGlDQUFpQyxFQUFFNW1CLFNBQVMsRUFBRWQsU0FBUyxFQUFFcUQsNEJBQXlCLEVBQUVULFdBQVcsRUFBRUMsTUFBTSxFQUFBMGtCLElBQUEsRUFBU3ZuQixTQUFTLEVBQUVnRCxjQUFjLEVBQUVJLDBCQUF1QixDQUFDO3dCQUFDLEtBQ3BQLElBQUFnRyxnQ0FBb0IsRUFBQW1lLElBQUEsRUFBUTFsQixxQkFBUyxDQUFDd0gscUJBQXFCLENBQUM7MEJBQUFtZSxVQUFBLENBQUFyb0IsSUFBQTswQkFBQTt3QkFBQTt3QkFDOURnSSxNQUFNLENBQUMsSUFBSXpGLEtBQUssQ0FBQ3FsQixPQUFJLENBQUN6ZCx1QkFBdUIsQ0FBQyxDQUFDO3dCQUFDLE9BQUFrZSxVQUFBLENBQUFqaUIsTUFBQTtzQkFBQTt3QkFHbEQ0QixNQUFNLENBQUFvZ0IsSUFBTSxDQUFDO3NCQUFDO3NCQUFBO3dCQUFBLE9BQUFDLFVBQUEsQ0FBQTloQixJQUFBO29CQUFBO2tCQUFBLEdBQUEwaEIsU0FBQTtnQkFBQSxDQUVqQjtnQkFBQSxpQkFBQU8sSUFBQSxFQUFBQyxJQUFBO2tCQUFBLE9BQUFULE1BQUEsQ0FBQXRwQixLQUFBLE9BQUFFLFNBQUE7Z0JBQUE7Y0FBQSxJQUFDO1lBQUE7WUFBQTtjQUFBLE9BQUFpcEIsVUFBQSxDQUFBdGhCLElBQUE7VUFBQTtRQUFBLEdBQUFtaEIsU0FBQTtNQUFBLENBQ0g7TUFBQSxTQWhEWUsscUJBQXFCQSxDQUFBVyxJQUFBO1FBQUEsT0FBQWpCLHNCQUFBLENBQUEvb0IsS0FBQSxPQUFBRSxTQUFBO01BQUE7TUFBQSxPQUFyQm1wQixxQkFBcUI7SUFBQTtJQWtEbEM7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFORTtFQUFBO0lBQUEvbEIsR0FBQTtJQUFBcEMsS0FBQTtNQUFBLElBQUErb0IsZ0JBQUEsT0FBQXZsQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBT0EsU0FBQXNsQixVQUE2QmpuQixTQUFpQixFQUFFa25CLFNBQWlCLEVBQUV0Z0Isc0JBQThCO1FBQUEsSUFBQXVnQix1QkFBQTtVQUFBQyxPQUFBO1FBQUEsSUFBQXZsQixLQUFBLEVBQUFDLFdBQUEsRUFBQUcsYUFBQSxFQUFBQyxjQUFBLEVBQUFGLEdBQUEsRUFBQUQsTUFBQSxFQUFBaUYsT0FBQTtRQUFBLE9BQUF0RixZQUFBLFlBQUFrQixJQUFBLFdBQUF5a0IsVUFBQTtVQUFBLGtCQUFBQSxVQUFBLENBQUF2a0IsSUFBQSxHQUFBdWtCLFVBQUEsQ0FBQWhwQixJQUFBO1lBQUE7Y0FDekZ3RCxLQUFLLEdBQUdrQixZQUFLLENBQUNDLEtBQUssQ0FBQyxDQUFDO2NBQzNCLElBQUksQ0FBQ0MsYUFBYSxDQUFDQyxrQkFBUSxDQUFDQyxJQUFJLEVBQUVDLDBCQUFtQixDQUFDa2tCLHNCQUFzQixFQUFFLDJCQUEyQixFQUFFdG5CLFNBQVMsQ0FBQztjQUUvRzhCLFdBQVcsT0FBQXhDLE1BQUEsQ0FBT2dFLGdDQUFvQixDQUFDdVIseUJBQXlCLE9BQUF2VixNQUFBLENBQUksSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQ3lFLEtBQUssaUJBQUFsRSxNQUFBLENBQWMsSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzRHLFFBQVEscUJBQUFyRyxNQUFBLENBQWtCVSxTQUFTO2NBQ3RMaUMsYUFBYSxHQUFHeUIsaUJBQUssQ0FBQ0MsTUFBTSxDQUFDLENBQUM7Y0FDcEMsSUFBQUMsNkJBQWlCLEVBQUMzQixhQUFhLEVBQUU7Z0JBQy9CNEIsT0FBTyxFQUFFLElBQUksQ0FBQzVFLGFBQWEsQ0FBQzZFLDBCQUEwQjtnQkFDdERDLDBCQUEwQixFQUFFLElBQUksQ0FBQzlFLGFBQWEsQ0FBQytFLDRCQUE0QixDQUFDdWpCO2NBQzlFLENBQUMsQ0FBQztjQUVJcmxCLGNBQXlCLEdBQUFsRixhQUFBLEtBQVErRCxxQkFBUyxDQUFDeUcsY0FBYztjQUMvRHRGLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsR0FBR0Esc0JBQXNCO2NBQ3RGMUUsY0FBYyxDQUFDcEMsa0NBQXNCLENBQUNGLGFBQWEsQ0FBQyxHQUFHLElBQUksQ0FBQ1gsYUFBYSxDQUFDVyxhQUFhO2NBRXZGLElBQUksQ0FBQ2tHLGlCQUFpQixDQUFDOUYsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO2NBRTNDRixHQUFHLE1BQUExQyxNQUFBLENBQU0sSUFBSSxDQUFDUCx3QkFBd0IsQ0FBQzBFLE1BQU0sRUFBQW5FLE1BQUEsQ0FBR3dDLFdBQVc7Y0FDM0RDLE1BQU0sR0FBRyxNQUFNO2NBQ2ZpRixPQUEyQixHQUFHO2dCQUNsQ3hFLElBQUksRUFBRWdPLElBQUksQ0FBQ0MsU0FBUyxDQUFDO2tCQUFFeVcsU0FBUyxFQUFUQTtnQkFBVSxDQUFDLENBQUM7Z0JBQ25DeG5CLE9BQU8sRUFBRXdDLGNBQWM7Z0JBQ3ZCSCxNQUFNLEVBQU5BLE1BQU07Z0JBQ05DLEdBQUcsRUFBSEEsR0FBRztnQkFDSG1DLE9BQU8sR0FBQWdqQix1QkFBQSxHQUFFLElBQUksQ0FBQ2xvQixhQUFhLENBQUNtRixxQkFBcUIsY0FBQStpQix1QkFBQSxjQUFBQSx1QkFBQSxHQUFJLElBQUksQ0FBQ2xvQixhQUFhLENBQUNvRixvQkFBb0IsQ0FBQ2tqQjtjQUMvRixDQUFDO2NBQUEsT0FBQUYsVUFBQSxDQUFBNWlCLE1BQUEsV0FFTSxJQUFJMkIsT0FBTztnQkFBQSxJQUFBb2hCLE1BQUEsT0FBQS9sQixrQkFBQSwwQkFBQUMsWUFBQSxZQUFBQyxJQUFBLENBQUMsU0FBQThsQixVQUFPM2YsT0FBTyxFQUFFekIsTUFBTTtrQkFBQSxJQUFBbEUsWUFBQSxFQUFBRSxRQUFBLEVBQUFDLHVCQUFBLEVBQUE1QyxPQUFBLEVBQUE2Qyx5QkFBQSxFQUFBbWxCLDBCQUFBLEVBQUFDLDRCQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQWxtQixZQUFBLFlBQUFrQixJQUFBLFdBQUFpbEIsVUFBQTtvQkFBQSxrQkFBQUEsVUFBQSxDQUFBL2tCLElBQUEsR0FBQStrQixVQUFBLENBQUF4cEIsSUFBQTtzQkFBQTt3QkFDakM4RCxZQUFZLEdBQUdZLFlBQUssQ0FBQ0MsS0FBSyxDQUFDLENBQUM7d0JBQUE2a0IsVUFBQSxDQUFBL2tCLElBQUE7d0JBQUEra0IsVUFBQSxDQUFBeHBCLElBQUE7d0JBQUEsT0FFVDRELGFBQWEsQ0FBQytFLE9BQU8sQ0FBQztzQkFBQTt3QkFBdkMzRSxRQUFRLEdBQUF3bEIsVUFBQSxDQUFBdmpCLElBQUE7d0JBQ1JoQyx1QkFBdUIsR0FBR0gsWUFBWSxDQUFDb0MsbUJBQW1CO3dCQUN4RDdFLE9BQU8sR0FBSzJDLFFBQVEsQ0FBcEIzQyxPQUFPO3dCQUNmMG5CLE9BQUksQ0FBQ2pmLGdCQUFnQixDQUFDekksT0FBTyxDQUFDO3dCQUN4QjZDLHlCQUF5QixHQUFHVixLQUFLLENBQUMwQyxtQkFBbUI7d0JBQzNENmlCLE9BQUksQ0FBQ25rQixhQUFhLENBQUNDLGtCQUFRLENBQUNDLElBQUksRUFBRUMsMEJBQW1CLENBQUMwa0Isd0JBQXdCLEVBQUUsNkJBQTZCLEVBQUU5bkIsU0FBUyxFQUFFcUMsUUFBUSxFQUFFRSx5QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUU3QyxTQUFTLEVBQUVBLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksdUJBQXVCLENBQUM7d0JBQ2xQd0YsT0FBTyxDQUFDLENBQUM7d0JBQUMrZixVQUFBLENBQUF4cEIsSUFBQTt3QkFBQTtzQkFBQTt3QkFBQXdwQixVQUFBLENBQUEva0IsSUFBQTt3QkFBQThrQixJQUFBLEdBQUFDLFVBQUE7d0JBRUp2bEIsMEJBQXVCLEdBQUdILFlBQVksQ0FBQ29DLG1CQUFtQjt3QkFDMURoQyw0QkFBeUIsR0FBR1YsS0FBSyxDQUFDMEMsbUJBQW1CO3dCQUMzRDZpQixPQUFJLENBQUNua0IsYUFBYSxDQUFDQyxrQkFBUSxDQUFDd0IsS0FBSyxFQUFFdEIsMEJBQW1CLENBQUMya0IscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUvbkIsU0FBUyxFQUFFZCxTQUFTLEVBQUVxRCw0QkFBeUIsRUFBRVQsV0FBVyxFQUFFQyxNQUFNLEVBQUE2bEIsSUFBQSxFQUFTMW9CLFNBQVMsRUFBRWdELGNBQWMsRUFBRUksMEJBQXVCLENBQUM7d0JBQUMsS0FDdk8sSUFBQWdHLGdDQUFvQixFQUFBc2YsSUFBQSxFQUFRN21CLHFCQUFTLENBQUN3SCxxQkFBcUIsQ0FBQzswQkFBQXNmLFVBQUEsQ0FBQXhwQixJQUFBOzBCQUFBO3dCQUFBO3dCQUM5RGdJLE1BQU0sQ0FBQyxJQUFJekYsS0FBSyxDQUFDd21CLE9BQUksQ0FBQzVlLHVCQUF1QixDQUFDLENBQUM7d0JBQUMsT0FBQXFmLFVBQUEsQ0FBQXBqQixNQUFBO3NCQUFBO3dCQUdsRDRCLE1BQU0sQ0FBQXVoQixJQUFNLENBQUM7c0JBQUM7c0JBQUE7d0JBQUEsT0FBQUMsVUFBQSxDQUFBampCLElBQUE7b0JBQUE7a0JBQUEsR0FBQTZpQixTQUFBO2dCQUFBLENBRWpCO2dCQUFBLGlCQUFBTyxJQUFBLEVBQUFDLElBQUE7a0JBQUEsT0FBQVQsTUFBQSxDQUFBenFCLEtBQUEsT0FBQUUsU0FBQTtnQkFBQTtjQUFBLElBQUM7WUFBQTtZQUFBO2NBQUEsT0FBQW9xQixVQUFBLENBQUF6aUIsSUFBQTtVQUFBO1FBQUEsR0FBQXFpQixTQUFBO01BQUEsQ0FDSDtNQUFBLFNBaERZTSxlQUFlQSxDQUFBVyxJQUFBLEVBQUFDLElBQUEsRUFBQUMsSUFBQTtRQUFBLE9BQUFwQixnQkFBQSxDQUFBanFCLEtBQUEsT0FBQUUsU0FBQTtNQUFBO01BQUEsT0FBZnNxQixlQUFlO0lBQUE7SUFrRDVCO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7SUFiRTtFQUFBO0lBQUFsbkIsR0FBQTtJQUFBcEMsS0FBQSxFQWNBLFNBQVFnRixhQUFhQSxDQUFDb2xCLFFBQWtCLEVBQUVDLGtCQUF1QyxFQUFFQyxXQUFtQixFQUFFdm9CLFNBQWtCLEVBQUVxQyxRQUE2QixFQUFFRSx5QkFBa0MsRUFBRVQsV0FBb0IsRUFBRUMsTUFBZSxFQUFFZ0ssS0FBZSxFQUFFeWMsY0FBb0IsRUFBRXRtQixjQUFvQixFQUFFSSx1QkFBZ0MsRUFBRThDLFVBQW1CLEVBQVE7TUFBQSxJQUFBcWpCLFNBQUEsRUFBQUMsVUFBQSxFQUFBQyxVQUFBO01BQUU7TUFDaFcsSUFBSSxDQUFDLElBQUksQ0FBQ3ZwQixNQUFNLEVBQUU7UUFDaEI7TUFDRjtNQUNBLElBQUkyTSxLQUFLLEVBQUU7UUFDVDZjLGtDQUFnQixDQUFDQyw2QkFBNkIsQ0FBQzljLEtBQUssQ0FBQztNQUN2RDtNQUVBLElBQUkrYyx1QkFBdUIsR0FBRzVwQixTQUFTO01BQ3ZDLElBQUlzcEIsY0FBYyxFQUFFO1FBQ2xCTSx1QkFBdUIsR0FBQTlyQixhQUFBLEtBQVF3ckIsY0FBYyxDQUFFO1FBQy9DLElBQUlNLHVCQUF1QixDQUFDNVksaUJBQWlCLEVBQUU7VUFDN0MwWSxrQ0FBZ0IsQ0FBQ0csNEJBQTRCLENBQUNELHVCQUF1QixDQUFDNVksaUJBQWlCLENBQUM7UUFDMUY7UUFDQSxJQUFJNFksdUJBQXVCLENBQUNFLGVBQWUsRUFBRTtVQUMzQ0osa0NBQWdCLENBQUNLLG9CQUFvQixDQUFDSCx1QkFBdUIsQ0FBQ0UsZUFBZSxDQUFDO1FBQ2hGO1FBQ0FKLGtDQUFnQixDQUFDTSxnQkFBZ0IsQ0FBQ0osdUJBQXVCLENBQUM7TUFDNUQ7TUFFQSxJQUFJSyx1QkFBdUIsR0FBR2pxQixTQUFTO01BQ3ZDLElBQUlrcUIsZ0JBQXFCLEdBQUdscUIsU0FBUyxDQUFDLENBQUM7TUFDdkMsSUFBSWdELGNBQWMsRUFBRTtRQUNsQmluQix1QkFBdUIsR0FBQW5zQixhQUFBLEtBQVFrRixjQUFjLENBQUU7UUFDL0MwbUIsa0NBQWdCLENBQUNTLHNDQUFzQyxDQUFDRix1QkFBdUIsQ0FBQztRQUVoRixJQUFJam5CLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUMsRUFBRTtVQUNqRSxJQUFJK0osTUFBTSxDQUFDQyxRQUFRLElBQUlELE1BQU0sQ0FBQzJZLElBQUksRUFBRTtZQUNsQyxJQUFJO2NBQ0YsSUFBTTNOLEtBQUssR0FBR3paLGNBQWMsQ0FBQ3BDLGtDQUFzQixDQUFDOEcsc0JBQXNCLENBQUM7Y0FDM0UsSUFBTTJpQixPQUFPLEdBQUc1TixLQUFLLENBQUM2TixLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2NBQ25DLElBQU1obkIsSUFBSSxHQUFHbU8sTUFBTSxDQUFDMlksSUFBSSxDQUFDQyxPQUFPLENBQUM7Y0FDakMsSUFBTUUsUUFBUSxHQUFHalosSUFBSSxDQUFDa1osS0FBSyxDQUFDbG5CLElBQUksQ0FBQztjQUNqQyxJQUFNbW5CLFdBQVcsR0FBR0YsUUFBUSxDQUFDLGFBQWEsQ0FBQztjQUMzQ0wsZ0JBQWdCLEdBQUc7Z0JBQ2pCUSxHQUFHLEVBQUVILFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3BCSSxHQUFHLEVBQUVKLFFBQVEsQ0FBQyxLQUFLO2NBQ3JCLENBQUM7Y0FFRCxJQUFJRSxXQUFXLEVBQUU7Z0JBQ2YsSUFBTUcsZUFBZSxHQUFHdFosSUFBSSxDQUFDa1osS0FBSyxDQUFDQyxXQUFXLENBQUM7Z0JBQy9DZixrQ0FBZ0IsQ0FBQ0csNEJBQTRCLENBQUNlLGVBQWUsQ0FBQztnQkFDOURWLGdCQUFnQixDQUFDTyxXQUFXLEdBQUdHLGVBQWU7Y0FDaEQ7WUFDRixDQUFDLENBQUMsT0FBQUMsT0FBQSxFQUFNO2NBQ047WUFBQTtVQUVKO1FBQ0Y7TUFDRjtNQUVBLElBQU1DLFVBQVUsR0FBRztRQUNqQkMsU0FBUyxFQUFFanFCLFNBQVM7UUFDcEJrcUIsTUFBTSxFQUFFN25CLFFBQVEsYUFBUkEsUUFBUSx1QkFBUkEsUUFBUSxDQUFFRyxJQUFJLENBQUMwbkIsTUFBTTtRQUM3QkMseUJBQXlCLEVBQUU1bkIseUJBQXlCO1FBQ3BENm5CLHVCQUF1QixFQUFFOW5CLHVCQUF1QjtRQUNoRCtuQixhQUFhLEVBQUVob0IsUUFBUSxhQUFSQSxRQUFRLHVCQUFSQSxRQUFRLENBQUUzQyxPQUFPLENBQUNxQixxQkFBUyxDQUFDdXBCLGFBQWEsQ0FBQztRQUN6REMsV0FBVyxFQUFFem9CLFdBQVc7UUFDeEIwb0IsYUFBYSxFQUFFem9CLE1BQU07UUFDckIwb0Isa0JBQWtCLEVBQUVwb0IsUUFBUSxHQUFHQSxRQUFRLENBQUNnSSxNQUFNLEdBQUcwQixLQUFLLElBQUEwYyxTQUFBLEdBQUkxYyxLQUFLLENBQVMxSixRQUFRLGNBQUFvbUIsU0FBQSx1QkFBdkJBLFNBQUEsQ0FBeUJwZSxNQUFNLEdBQUduTCxTQUFTO1FBQUU7O1FBRXRHd3JCLGdCQUFnQixFQUFFM2UsS0FBSyxHQUFHLEVBQUEyYyxVQUFBLEdBQUMzYyxLQUFLLENBQVMxSixRQUFRLGNBQUFxbUIsVUFBQSx1QkFBdkJBLFVBQUEsQ0FBeUJsbUIsSUFBSSxLQUFJdUosS0FBSyxHQUFHN00sU0FBUztRQUFFO1FBQzlFeXJCLGNBQWMsRUFBRTdCLHVCQUF1QjtRQUN2QzhCLGNBQWMsRUFBRXpCLHVCQUF1QjtRQUN2QzBCLGlCQUFpQixFQUFFOWUsS0FBSyxJQUFBNGMsVUFBQSxHQUFJNWMsS0FBSyxDQUFTMUosUUFBUSxjQUFBc21CLFVBQUEsZ0JBQUFBLFVBQUEsR0FBdkJBLFVBQUEsQ0FBeUJqcEIsT0FBTyxjQUFBaXBCLFVBQUEsdUJBQWhDQSxVQUFBLENBQWtDbUMsU0FBUyxHQUFHNXJCLFNBQVM7UUFBRTtRQUNwRjZyQixnQkFBZ0IsRUFBRTNCLGdCQUFnQjtRQUNsQzRCLFVBQVUsRUFBRTVsQjtNQUNkLENBQUM7TUFDRCxJQUFJLENBQUNoRyxNQUFNLENBQUNrYixHQUFHLENBQUMrTixRQUFRLEVBQUVDLGtCQUFrQixFQUFFMEIsVUFBVSxFQUFFekIsV0FBVyxDQUFDO0lBQ3hFO0VBQUM7SUFBQWxvQixHQUFBO0lBQUFwQyxLQUFBLEVBU0QsU0FBUTZILGlCQUFpQkEsQ0FBQzlGLFNBQTZCLEVBQUVrQyxjQUF5QixFQUFRO01BQ3hGLElBQUksQ0FBQytvQixrQkFBa0IsQ0FBQyxJQUFJLENBQUNwckIsU0FBUyxFQUFFcUMsY0FBYyxDQUFDO01BQ3ZELElBQUFnQyxzQ0FBb0IsRUFBQyxJQUFJLENBQUMvQyxXQUFXLEVBQUVlLGNBQWMsQ0FBQztNQUN0RCxJQUFJLENBQUNncEIsd0JBQXdCLENBQUNsckIsU0FBUyxFQUFFa0MsY0FBYyxDQUFDO0lBQzFEO0VBQUM7QUFBQTtBQUFBOUcsSUFBQSxHQTV6RGtCeUQsR0FBRztBQUFBLElBQUF6QixnQkFBQSxhQUFIeUIsR0FBRyxpQ0FDNkM7RUFDakVvRixhQUFhLEVBQUUsTUFBTTtFQUNyQnNELGFBQWEsRUFBRSxLQUFLO0VBQ3BCb0MsWUFBWSxFQUFFLEtBQUs7RUFDbkJ1SixXQUFXLEVBQUUsS0FBSztFQUNsQjZDLFlBQVksRUFBRSxLQUFLO0VBQ25CN0kscUJBQXFCLEVBQUUsS0FBSztFQUM1QnFCLHdCQUF3QixFQUFFLEtBQUs7RUFDL0J3SyxzQkFBc0IsRUFBRSxLQUFLO0VBQzdCMkIsbUJBQW1CLEVBQUUsS0FBSztFQUMxQnlCLGtCQUFrQixFQUFFLEtBQUs7RUFDekJxRCxlQUFlLEVBQUUsSUFBSTtFQUNyQnNCLG9CQUFvQixFQUFFLElBQUk7RUFDMUJzQixnQ0FBZ0MsRUFBRSxLQUFLO0VBQ3ZDblMsb0JBQW9CLEVBQUUsS0FBSztFQUMzQjJULG1CQUFtQixFQUFFLElBQUk7RUFDekJ0TSw2QkFBNkIsRUFBRSxLQUFLO0VBQ3BDNkcsd0JBQXdCLEVBQUUsS0FBSztFQUMvQitHLCtCQUErQixFQUFFLEtBQUs7RUFDdENrQixxQkFBcUIsRUFBRSxLQUFLO0VBQzVCbUIsZUFBZSxFQUFFLElBQUk7RUFDckI5YixjQUFjLEVBQUU7QUFDbEIsQ0FBQztBQUFBLElBQUFyTyxnQkFBQSxhQXZCa0J5QixHQUFHLDBCQXlCbUM7RUFDdkRlLGFBQWEsRUFBRSxJQUFBNkYsWUFBTSxFQUFDLENBQUMsQ0FBQzBsQixTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQztFQUN2Q0Msc0JBQXNCLEVBQUUsRUFBRTtFQUMxQkMsdUNBQXVDLEVBQUUsS0FBSztFQUM5Q3poQixzQkFBc0IsRUFBRSxJQUFJO0VBQzVCL0QsdUJBQXVCLEVBQUUsSUFBSTtFQUM3Qi9CLDBCQUEwQixFQUFFLENBQUM7RUFDN0JNLHFCQUFxQixFQUFFbEYsU0FBUztFQUNoQ21GLG9CQUFvQixFQUFFeEYsSUFBRyxDQUFDeXNCLDJCQUEyQjtFQUNyRDVqQixpQ0FBaUMsRUFBRSxLQUFLO0VBQ3hDMUQsNEJBQTRCLEVBQUU0SCw0REFBNkI7RUFDM0R6SyxXQUFXLEVBQUU7QUFDZixDQUFDIiwiaWdub3JlTGlzdCI6W119
|