@microsoft/ocsdk 0.5.6 → 0.5.7-main.8725895
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/CHANGELOG.md +11 -0
- package/dist/SDK.js +4 -4
- package/dist/SDK.min.js +4 -4
- package/lib/Common/Enums.d.ts +6 -2
- package/lib/Common/Enums.js +7 -3
- package/lib/Common/Enums.js.map +1 -1
- package/lib/SDK.js +8 -8
- package/lib/SDK.js.map +1 -1
- package/package.json +1 -1
package/lib/SDK.js
CHANGED
|
@@ -687,7 +687,7 @@ var SDK = /*#__PURE__*/function () {
|
|
|
687
687
|
case 0:
|
|
688
688
|
timer = _Timer.Timer.TIMER();
|
|
689
689
|
authenticatedUserToken = reconnectableChatsParams.authenticatedUserToken;
|
|
690
|
-
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
690
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSSTARTED, "Get Reconnectable chat Started");
|
|
691
691
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatGetReconnectableChatsPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(this.omnichannelConfiguration.orgId, "?channelId=").concat(this.omnichannelConfiguration.channelId);
|
|
692
692
|
requestHeaders = _Constants["default"].defaultHeaders;
|
|
693
693
|
requestHeaders[_OmnichannelHTTPHeaders["default"].authenticatedUserToken] = authenticatedUserToken;
|
|
@@ -729,7 +729,7 @@ var SDK = /*#__PURE__*/function () {
|
|
|
729
729
|
break;
|
|
730
730
|
}
|
|
731
731
|
|
|
732
|
-
_this4.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
732
|
+
_this4.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSSUCCEEDED, "Get Reconnectable Chats Succeeded and old session returned", requestId, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders);
|
|
733
733
|
|
|
734
734
|
resolve(data);
|
|
735
735
|
return _context7.abrupt("return");
|
|
@@ -744,7 +744,7 @@ var SDK = /*#__PURE__*/function () {
|
|
|
744
744
|
_context7.t0 = _context7["catch"](0);
|
|
745
745
|
_elapsedTimeInMilliseconds5 = timer.milliSecondsElapsed;
|
|
746
746
|
|
|
747
|
-
_this4.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.
|
|
747
|
+
_this4.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETRECONNECTABLECHATSFAILED, "Get Reconnectable Chats failed", requestId, undefined, _elapsedTimeInMilliseconds5, requestPath, method, _context7.t0, undefined, requestHeaders);
|
|
748
748
|
|
|
749
749
|
if ((0, _isExpectedAxiosError["default"])(_context7.t0, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
750
750
|
reject(new Error(_this4.HTTPTimeOutErrorMessage));
|
|
@@ -798,7 +798,7 @@ var SDK = /*#__PURE__*/function () {
|
|
|
798
798
|
switch (_context10.prev = _context10.next) {
|
|
799
799
|
case 0:
|
|
800
800
|
timer = _Timer.Timer.TIMER();
|
|
801
|
-
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
801
|
+
this.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSTARTED, "Get Reconnectable availability Started");
|
|
802
802
|
requestPath = "/".concat(_OmnichannelEndpoints["default"].LiveChatReconnectAvailabilityPath, "/").concat(this.omnichannelConfiguration.orgId, "/").concat(this.omnichannelConfiguration.widgetId, "/").concat(reconnectId);
|
|
803
803
|
requestHeaders = _Constants["default"].defaultHeaders;
|
|
804
804
|
this.setSessionIdHeader(this.sessionId, requestHeaders);
|
|
@@ -834,14 +834,14 @@ var SDK = /*#__PURE__*/function () {
|
|
|
834
834
|
break;
|
|
835
835
|
}
|
|
836
836
|
|
|
837
|
-
_this5.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.
|
|
837
|
+
_this5.logWithLogger(_LogLevel.LogLevel.INFO, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSUCCEEDED, "Get Reconnect availability succeeded", undefined, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders);
|
|
838
838
|
|
|
839
839
|
resolve(data);
|
|
840
840
|
return _context9.abrupt("return");
|
|
841
841
|
|
|
842
842
|
case 10:
|
|
843
843
|
// No data found so returning null
|
|
844
|
-
_this5.logWithLogger(_LogLevel.LogLevel.WARN, _Enums.OCSDKTelemetryEvent.
|
|
844
|
+
_this5.logWithLogger(_LogLevel.LogLevel.WARN, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYSUCCEEDED, "Get Reconnect availability didn't send any valid data", undefined, response, elapsedTimeInMilliseconds, requestPath, method, undefined, undefined, requestHeaders);
|
|
845
845
|
|
|
846
846
|
resolve();
|
|
847
847
|
return _context9.abrupt("return");
|
|
@@ -851,7 +851,7 @@ var SDK = /*#__PURE__*/function () {
|
|
|
851
851
|
_context9.t0 = _context9["catch"](0);
|
|
852
852
|
_elapsedTimeInMilliseconds6 = timer.milliSecondsElapsed;
|
|
853
853
|
|
|
854
|
-
_this5.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.
|
|
854
|
+
_this5.logWithLogger(_LogLevel.LogLevel.ERROR, _Enums.OCSDKTelemetryEvent.GETRECONNECTAVAILABILITYFAILED, "Get Reconnect Availability failed", undefined, undefined, _elapsedTimeInMilliseconds6, requestPath, method, _context9.t0, undefined, requestHeaders);
|
|
855
855
|
|
|
856
856
|
if ((0, _isExpectedAxiosError["default"])(_context9.t0, _Constants["default"].axiosTimeoutErrorCode)) {
|
|
857
857
|
reject(new Error(_this5.HTTPTimeOutErrorMessage));
|
|
@@ -2498,4 +2498,4 @@ exports["default"] = SDK;
|
|
|
2498
2498
|
waitTimeBetweenRetriesConfig: _waitTimeBetweenRetriesConfigs.waitTimeBetweenRetriesConfigs,
|
|
2499
2499
|
ocUserAgent: []
|
|
2500
2500
|
});
|
|
2501
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiU0RLRXJyb3IiLCJDbGllbnRIVFRQVGltZW91dEVycm9yTmFtZSIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwic2Vzc2lvbklkIiwiT21uaWNoYW5uZWxIVFRQSGVhZGVycyIsIm9jU2Vzc2lvbklkIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImtleSIsImhhc093blByb3BlcnR5IiwiY2hhbm5lbElkIiwidmFsdWVzIiwiQ2hhbm5lbElkIiwiaW5jbHVkZXMiLCJFcnJvciIsImN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwiQ29uc3RhbnRzIiwicmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwib2NVc2VyQWdlbnQiLCJsaXZlQ2hhdFZlcnNpb24iLCJMaXZlQ2hhdFZlcnNpb24iLCJWMiIsInRpbWVyIiwiVGltZXIiLCJUSU1FUiIsImxvZ1dpdGhMb2dnZXIiLCJMb2dMZXZlbCIsIklORk8iLCJPQ1NES1RlbGVtZXRyeUV2ZW50IiwiR0VUTENXRkNTREVUQUlMU1NUQVJURUQiLCJyZXF1ZXN0UGF0aCIsIk9tbmljaGFubmVsRW5kcG9pbnRzIiwiTGN3RmNzRGV0YWlsc1BhdGgiLCJvcmdJZCIsIm1ldGhvZCIsInVybCIsIm9yZ1VybCIsImF4aW9zSW5zdGFuY2UiLCJheGlvcyIsImNyZWF0ZSIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJyZXF1ZXN0SGVhZGVycyIsImdldCIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIm1pbGxpU2Vjb25kc0VsYXBzZWQiLCJkYXRhIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsInVuZGVmaW5lZCIsIkdFVExDV0ZDU0RFVEFJTFNGQUlMRUQiLCJyZXF1ZXN0SWQiLCJieXBhc3NDYWNoZSIsIkdFVENIQVRDT05GSUdGU1RBUlRFRCIsIkxpdmVDaGF0Q29uZmlnUGF0aCIsIndpZGdldElkIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCIsIkdFVENIQVRDT05GSUdGQUlMRUQiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiR0VUTFdJU1RBVFVTU1RBUlRFRCIsIkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJoZWFkZXJPdmVyd3JpdGVzIiwiZ2V0TFdJRGV0YWlscyIsImF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4iLCJyZWNvbm5lY3RJZCIsImRlZmF1bHRIZWFkZXJzIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzaG91bGRVc2VTaWdRdWVyeVBhcmFtIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwicGFyYW1zIiwic2lnIiwib3B0aW9ucyIsInJlc29sdmUiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsImdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwiY3VycmVudFJldHJ5Q291bnQiLCJjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIiwicmVmcmVzaFRva2VuIiwiR0VUQ0hBVFRPS0VOU1RBUlRFRCIsImVuZHBvaW50IiwiZ2V0Q2hhdFRva2VuIiwicmV0cnlPbjQyOSIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJ0b0xvd2VyQ2FzZSIsIkdFVENIQVRUT0tFTlNVQ0NFRURFRCIsInN0YXR1cyIsIm5vQ29udGVudFN0YXR1c0NvZGUiLCJHRVRDSEFUVE9LRU5GQUlMRUQiLCJyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFMiLCJMaXZlQ2hhdEdldFJlY29ubmVjdGFibGVDaGF0c1BhdGgiLCJnZXRSZWNvbm5lY3RhYmxlQ2hhdHMiLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFkiLCJMaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGgiLCJnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHkiLCJXQVJOIiwicXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCIsIkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aCIsImdldEFnZW50QXZhaWxhYmlsaXR5IiwiaW5pdENvbnRleHQiLCJnZXRDb250ZXh0IiwiY2FjaE9iaiIsImN1c3RvbUNvbnRleHREYXRhIiwidGVtcEFyciIsIkN1c3RvbUNvbnRleHREYXRhIiwic29ydCIsImFzc2lnbiIsInBvcnRhbGNvbnRhY3RpZCIsImNhY2hlS2V5IiwiaGFzaCIsImNyZWF0ZUhhc2giLCJ1cGRhdGUiLCJKU09OIiwic3RyaW5naWZ5IiwiZGlnZXN0IiwidG9TdHJpbmciLCJ3aW5kb3ciLCJkb2N1bWVudCIsImJyb3dzZXIiLCJCcm93c2VySW5mbyIsImdldEJyb3dzZXJOYW1lIiwiZGV2aWNlIiwiRGV2aWNlSW5mbyIsImdldERldmljZVR5cGUiLCJvcmlnaW51cmwiLCJsb2NhdGlvbiIsImhyZWYiLCJvcyIsIk9TSW5mbyIsImdldE9zVHlwZSIsImxvY2FsZSIsImRlZmF1bHRMb2NhbGUiLCJMb2NhbGVzIiwic3VwcG9ydGVkTG9jYWxlcyIsIkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVEIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQiLCJzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zIiwiU0VTU0lPTklOSVRTVEFSVEVEIiwic2Vzc2lvbkluaXQiLCJzaG91bGRSZXRyeSIsImVycm9yIiwiTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGgiLCJMaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGgiLCJTRVNTSU9OSU5JVFNVQ0NFRURFRCIsIlNFU1NJT05JTklURkFJTEVEIiwic2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OQ0xPU0VTVEFSVEVEIiwiTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRoIiwic2Vzc2lvbkNsb3NlIiwiaXNSZWNvbm5lY3RDaGF0IiwiaXNQZXJzaXN0ZW50Q2hhdCIsImNoYXRJZCIsIkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGgiLCJTRVNTSU9OQ0xPU0VTVUNDRUVERUQiLCJTRVNTSU9OQ0xPU0VGQUlMRUQiLCJjb2RlIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNUQVJURUQiLCJMaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRoIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZCIsInZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0IiwiYXV0aENoYXRFeGlzdCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVUNDRUVERUQiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVEIiwicG9zdENoYXRSZXNwb25zZSIsInN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyIsIlNVQk1JVFBPU1RDSEFUU1RBUlRFRCIsIkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRoIiwic3VibWl0UG9zdENoYXRSZXNwb25zZSIsIkxpdmVDaGF0QXV0aFN1Ym1pdFBvc3RDaGF0UGF0aCIsIlNVQk1JVFBPU1RDSEFUU1VDQ0VFREVEIiwiU1VCTUlUUE9TVENIQVRGQUlMRUQiLCJzdXJ2ZXlPd25lcklkIiwic3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkiLCJnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMiLCJsb2ciLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1RBUlRFRCIsIlN1cnZleU93bmVySWQiLCJMaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwiZ2V0U3VydmV5SW52aXRlTGluayIsIkxpdmVDaGF0QXV0aEdldFN1cnZleUludml0ZUxpbmtQYXRoIiwid2lkZ2V0QXBwSWQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVEIiwiR0VUU1VSVkVZSU5WSVRFTElOS0ZBSUxFRCIsInRva2VuIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMiLCJHRVRDSEFUVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aCIsImdldENoYXRUcmFuc2NyaXB0cyIsIm9yZ2FuaXphdGlvbklkIiwiYXV0aG9yaXphdGlvbiIsIkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGgiLCJMaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0QXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVEIiwiR0VUQ0hBVFRSQU5TQ1JJUFRGQUlMRUQiLCJlbWFpbFJlcXVlc3RCb2R5IiwiZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMiLCJFTUFJTFRSQU5TQ1JJUFRTVEFSVEVEIiwiTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aCIsImVtYWlsVHJhbnNjcmlwdCIsIkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiRU1BSUxUUkFOU0NSSVBUU1VDQ0VFREVEIiwiRU1BSUxUUkFOU0NSSVBURkFJTEVEIiwiRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQiLCJMaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aCIsImZldGNoRGF0YU1hc2tpbmdJbmZvIiwiRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCIsIkZFVENIREFUQU1BU0tJTkdGQUlMRUQiLCJzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSIsInNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNUQVJURUQiLCJMaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdCIsIkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGgiLCJkZWZhdWx0Q2hhbm5lbElkIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCIsIlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQiLCJzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMiLCJjdXN0b21lckRpc3BsYXlOYW1lIiwiU2VuZFR5cGluZ0luZGljYXRvclBhdGgiLCJzZW5kVHlwaW5nSW5kaWNhdG9yIiwiU0VORFRZUElOR0lORElDQVRPUlNVQ0NFRURFRCIsIlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQiLCJsb2dMZXZlbCIsInRlbGVtZXRyeUV2ZW50VHlwZSIsImRlc2NyaXB0aW9uIiwicmVxdWVzdFBheWxvYWQiLCJMb2dnaW5nU2FuaXRpemVyIiwic3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMiLCJzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCIsInN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMiLCJwcmVDaGF0UmVzcG9uc2UiLCJzdHJpcFByZUNoYXRSZXNwb25zZSIsInN0cmlwR2VvbG9jYXRpb24iLCJzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyIsInN0cmlwUmVxdWVzdEhlYWRlcnNTZW5zaXRpdmVQcm9wZXJ0aWVzIiwiY3VzdG9tRGF0YSIsIlJlcXVlc3RJZCIsIlJlZ2lvbiIsIkVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMiLCJUcmFuc2FjdGlvbklkIiwidHJhbnNhY3Rpb25pZCIsIlJlcXVlc3RQYXRoIiwiUmVxdWVzdE1ldGhvZCIsIlJlc3BvbnNlU3RhdHVzQ29kZSIsIkV4Y2VwdGlvbkRldGFpbHMiLCJSZXF1ZXN0UGF5bG9hZCIsIlJlcXVlc3RIZWFkZXJzIiwic3Vic3RyaW5nIiwiZ2V0Q2hhdFRva2VuUmV0cnlDb3VudCIsImdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZSIsImRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZyIsIndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOztBQUVBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQUNBOztBQW9CQTs7QUFDQTs7QUFDQTs7QUFFQTs7QUFDQTs7QUFDQTs7QUFPQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7OztJQUVxQkEsRztBQXVDbkIsZUFBMkJDLHdCQUEzQixFQUFtTDtBQUFBOztBQUFBLFFBQTNGQyxhQUEyRix1RUFBeERGLEdBQUcsQ0FBQ0csb0JBQW9EO0FBQUEsUUFBdEJDLE1BQXNCO0FBQUE7QUFBQSxTQUF4Skgsd0JBQXdKLEdBQXhKQSx3QkFBd0o7QUFBQSxTQUEzRkMsYUFBMkYsR0FBM0ZBLGFBQTJGO0FBQUEsU0FBdEJFLE1BQXNCLEdBQXRCQSxNQUFzQjtBQUFBO0FBQUE7QUFBQTtBQUFBLGdGQUh0SkMsZ0JBQVNDLDBCQUc2SSxlQUg5R0QsZ0JBQVNFLDZCQUdxRztBQUFBLCtEQXF2Q3hKLFVBQUNDLE9BQUQsRUFBa0I7QUFDM0MsVUFBSUEsT0FBSixhQUFJQSxPQUFKLGVBQUlBLE9BQU8sQ0FBRUMsYUFBYixFQUE0QjtBQUMxQixRQUFBLEtBQUksQ0FBQ1AsYUFBTCxDQUFtQlEsYUFBbkIsR0FBbUNGLE9BQW5DLGFBQW1DQSxPQUFuQyx1QkFBbUNBLE9BQU8sQ0FBRUMsYUFBNUM7QUFDRDtBQUNGLEtBenZDa0w7QUFBQSxpRUE0dkN0SixVQUFDRSxTQUFELEVBQWdDSCxPQUFoQyxFQUFpRDtBQUM1RSxVQUFJRyxTQUFKLEVBQWU7QUFDYkgsUUFBQUEsT0FBTyxDQUFDSSxtQ0FBdUJDLFdBQXhCLENBQVAsR0FBOENGLFNBQTlDO0FBQ0Q7QUFDRixLQWh3Q2tMOztBQUNqTDtBQUNBLFFBQUksQ0FBQ0csTUFBTSxDQUFDQyxJQUFQLENBQVksS0FBS2IsYUFBakIsRUFBZ0NjLE1BQWpDLElBQTJDLHlCQUFRZCxhQUFSLE1BQTJCLFFBQTFFLEVBQW9GO0FBQ2xGLFdBQUtBLGFBQUwsR0FBcUJGLEdBQUcsQ0FBQ0csb0JBQXpCO0FBQ0QsS0FKZ0wsQ0FNakw7OztBQUNBLG9DQUFrQlcsTUFBTSxDQUFDQyxJQUFQLENBQVlmLEdBQUcsQ0FBQ0csb0JBQWhCLENBQWxCLGtDQUF5RDtBQUFwRCxVQUFNYyxHQUFHLG1CQUFUOztBQUNILFVBQUksQ0FBQyxLQUFLZixhQUFMLENBQW1CZ0IsY0FBbkIsQ0FBa0NELEdBQWxDLENBQUwsRUFBNkM7QUFBRTtBQUM3QyxhQUFLZixhQUFMLFdBQXNCZSxHQUF0QixLQUErQmpCLEdBQUcsQ0FBQ0csb0JBQUosV0FBNEJjLEdBQTVCLEVBQS9CO0FBQ0Q7QUFDRixLQVhnTCxDQWFqTDs7O0FBQ0Esc0NBQWtCSCxNQUFNLENBQUNDLElBQVAsQ0FBWWYsR0FBRyxDQUFDRyxvQkFBSixDQUF5QixzQkFBekIsQ0FBWixDQUFsQixxQ0FBaUY7QUFBNUUsVUFBTWMsSUFBRyxxQkFBVDs7QUFDSCxVQUFJLENBQUMsS0FBS2YsYUFBTCxDQUFtQixzQkFBbkIsRUFBMkNnQixjQUEzQyxDQUEwREQsSUFBMUQsQ0FBTCxFQUFxRTtBQUFFO0FBQ3JFLGFBQUtmLGFBQUwsQ0FBbUIsc0JBQW5CLFlBQThDZSxJQUE5QyxLQUF1RGpCLEdBQUcsQ0FBQ0csb0JBQUosQ0FBeUIsc0JBQXpCLFlBQW9EYyxJQUFwRCxFQUF2RDtBQUNEO0FBQ0YsS0FsQmdMLENBb0JqTDs7O0FBQ0EsUUFBUUUsU0FBUixHQUFzQmxCLHdCQUF0QixDQUFRa0IsU0FBUjs7QUFDQSxRQUFJLENBQUNMLE1BQU0sQ0FBQ00sTUFBUCxDQUFjQyxnQkFBZCxFQUF5QkMsUUFBekIsQ0FBa0NILFNBQWxDLENBQUwsRUFBZ0U7QUFDOUQsWUFBTSxJQUFJSSxLQUFKLHFCQUFOO0FBQ0QsS0F4QmdMLENBMEJqTDs7O0FBQ0EsUUFBTUMseUNBQXlDLEdBQUdWLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZCx3QkFBWixDQUFsRDs7QUEzQmlMLCtDQTRCL0p3QixzQkFBVUMsMENBNUJxSjtBQUFBOztBQUFBO0FBNEJqTCwwREFBd0U7QUFBQSxZQUE3RFQsS0FBNkQ7O0FBQ3RFLFlBQUksQ0FBQ08seUNBQXlDLENBQUNGLFFBQTFDLENBQW1ETCxLQUFuRCxDQUFMLEVBQThEO0FBQzVELGdCQUFNLElBQUlNLEtBQUosb0JBQXNCTixLQUF0QixtQ0FBTjtBQUNEO0FBQ0Y7QUFoQ2dMO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBa0NqTCxTQUFLVSxXQUFMLEdBQW1CLEtBQUt6QixhQUFMLENBQW1CeUIsV0FBdEM7QUFDQSxTQUFLQyxlQUFMLEdBQXVCQyx1QkFBZ0JDLEVBQXZDO0FBQ0Q7QUFFRDtBQUNGO0FBQ0E7Ozs7Ozs0R0FDRTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQ1FDLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CQyx1QkFBdEQsRUFBK0UsNkJBQS9FLEVBQThHLEVBQTlHO0FBRU1DLGdCQUFBQSxXQUpSLGNBSTBCQyxpQ0FBcUJDLGlCQUovQyxjQUlvRSxLQUFLeEMsd0JBQUwsQ0FBOEJ5QyxLQUpsRztBQUtRQyxnQkFBQUEsTUFMUixHQUtpQixLQUxqQjtBQU1RQyxnQkFBQUEsR0FOUixhQU1pQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQU4vQyxTQU13RE4sV0FOeEQ7QUFPUU8sZ0JBQUFBLGFBUFIsR0FPd0JDLGtCQUFNQyxNQUFOLEVBUHhCO0FBUUUsbURBQWtCRixhQUFsQixFQUFpQztBQUMvQkcsa0JBQUFBLE9BQU8sRUFBRSxLQUFLL0MsYUFBTCxDQUFtQmdELDBCQURHO0FBRS9CQyxrQkFBQUEsMEJBQTBCLEVBQUUsS0FBS2pELGFBQUwsQ0FBbUJrRCw0QkFBbkIsQ0FBZ0RDO0FBRjdDLGlCQUFqQztBQUtNQyxnQkFBQUEsY0FiUixHQWF5QixFQWJ6QjtBQWNFLDREQUFxQixLQUFLM0IsV0FBMUIsRUFBdUMyQixjQUF2QztBQWRGO0FBQUE7QUFBQSx1QkFpQjJCUixhQUFhLENBQUNTLEdBQWQsQ0FBa0JYLEdBQWxCLEVBQXVCO0FBQzVDcEMsa0JBQUFBLE9BQU8sRUFBRThDLGNBRG1DO0FBRTVDRSxrQkFBQUEsT0FBTywyQkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQix5RUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0NMO0FBRmpELGlCQUF2QixDQWpCM0I7O0FBQUE7QUFpQlVNLGdCQUFBQSxRQWpCVjtBQXFCVUMsZ0JBQUFBLHlCQXJCVixHQXFCc0M3QixLQUFLLENBQUM4QixtQkFyQjVDO0FBc0JZQyxnQkFBQUEsSUF0QlosR0FzQnFCSCxRQXRCckIsQ0FzQllHLElBdEJaO0FBdUJJLHFCQUFLNUIsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0IwQix5QkFBdEQsRUFBaUYsK0JBQWpGLEVBQWtILEVBQWxILEVBQXNISixRQUF0SCxFQUFnSUMseUJBQWhJLEVBQTJKckIsV0FBM0osRUFBd0tJLE1BQXhLLEVBQWdMcUIsU0FBaEwsRUFBMkxBLFNBQTNMLEVBQXNNVixjQUF0TTtBQXZCSixpREF3QldRLElBeEJYOztBQUFBO0FBQUE7QUFBQTtBQTBCVUYsZ0JBQUFBLDBCQTFCVixHQTBCc0M3QixLQUFLLENBQUM4QixtQkExQjVDO0FBMkJJLHFCQUFLM0IsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0I0QixzQkFBdEQsRUFBOEUsNEJBQTlFLEVBQTRHLEVBQTVHLEVBQWdIRCxTQUFoSCxFQUEySEosMEJBQTNILEVBQXNKckIsV0FBdEosRUFBbUtJLE1BQW5LLGVBQWtMcUIsU0FBbEwsRUFBNkxWLGNBQTdMO0FBM0JKOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBZ0NBO0FBQ0Y7QUFDQTtBQUNBOzs7Ozt5R0FDRSxrQkFBMkJZLFNBQTNCO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBOENDLGdCQUFBQSxXQUE5Qyw4REFBNEQsS0FBNUQ7QUFDUXBDLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CK0IscUJBQXRELEVBQTZFLHlCQUE3RSxFQUF3R0YsU0FBeEc7O0FBQ0Esb0JBQUksQ0FBQ0EsU0FBTCxFQUFnQjtBQUNkQSxrQkFBQUEsU0FBUyxHQUFHLG1CQUFaO0FBQ0Q7O0FBRUszQixnQkFBQUEsV0FQUixjQU8wQkMsaUNBQXFCNkIsa0JBUC9DLGNBT3FFLEtBQUtwRSx3QkFBTCxDQUE4QnlDLEtBUG5HLGNBTzRHLEtBQUt6Qyx3QkFBTCxDQUE4QnFFLFFBUDFJLHdCQU9nS0osU0FQaEssd0JBT3VMLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBUHJOO0FBUVF3QixnQkFBQUEsTUFSUixHQVFpQixLQVJqQjtBQVNRQyxnQkFBQUEsR0FUUixhQVNpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQVQvQyxTQVN3RE4sV0FUeEQ7QUFVUU8sZ0JBQUFBLGFBVlIsR0FVd0JDLGtCQUFNQyxNQUFOLEVBVnhCO0FBV0UsbURBQWtCRixhQUFsQixFQUFpQztBQUMvQkcsa0JBQUFBLE9BQU8sRUFBRSxLQUFLL0MsYUFBTCxDQUFtQmdELDBCQURHO0FBRS9CQyxrQkFBQUEsMEJBQTBCLEVBQUUsS0FBS2pELGFBQUwsQ0FBbUJrRCw0QkFBbkIsQ0FBZ0RDO0FBRjdDLGlCQUFqQztBQUtJQyxnQkFBQUEsY0FoQk4sR0FnQnVCLEVBaEJ2QjtBQWlCRSw0REFBcUIsS0FBSzNCLFdBQTFCLEVBQXVDMkIsY0FBdkM7O0FBRUEsb0JBQUlhLFdBQUosRUFBaUI7QUFDZmIsa0JBQUFBLGNBQWMsbUNBQVE3QixzQkFBVThDLGtCQUFsQixHQUF5Q2pCLGNBQXpDLENBQWQ7QUFDRDs7QUFyQkg7QUFBQTtBQUFBLHVCQXdCMkJSLGFBQWEsQ0FBQ1MsR0FBZCxDQUFrQlgsR0FBbEIsRUFBdUI7QUFDNUNwQyxrQkFBQUEsT0FBTyxFQUFFOEMsY0FEbUM7QUFFNUNFLGtCQUFBQSxPQUFPLDRCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDJFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3Q0w7QUFGakQsaUJBQXZCLENBeEIzQjs7QUFBQTtBQXdCVU0sZ0JBQUFBLFFBeEJWO0FBNEJVQyxnQkFBQUEseUJBNUJWLEdBNEJzQzdCLEtBQUssQ0FBQzhCLG1CQTVCNUM7QUE2QllDLGdCQUFBQSxJQTdCWixHQTZCcUJILFFBN0JyQixDQTZCWUcsSUE3Qlo7O0FBK0JJLG9CQUFJQSxJQUFJLENBQUNqQyxlQUFULEVBQTBCO0FBQ3hCLHVCQUFLRCxlQUFMLEdBQXVCa0MsSUFBSSxDQUFDakMsZUFBNUI7QUFDRDs7QUFFRGlDLGdCQUFBQSxJQUFJLENBQUN0RCxPQUFMLEdBQWUsRUFBZjs7QUFDQSxvQkFBSW1ELFFBQVEsQ0FBQ25ELE9BQVQsSUFBb0JtRCxRQUFRLENBQUNuRCxPQUFULENBQWlCLE1BQWpCLENBQXhCLEVBQWtEO0FBQ2hEc0Qsa0JBQUFBLElBQUksQ0FBQ3RELE9BQUwsQ0FBYSxNQUFiLElBQXVCbUQsUUFBUSxDQUFDbkQsT0FBVCxDQUFpQixNQUFqQixDQUF2QjtBQUNEOztBQUNELHFCQUFLMEIsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0JtQyxzQkFBdEQsRUFBOEUsMkJBQTlFLEVBQTJHTixTQUEzRyxFQUFzSFAsUUFBdEgsRUFBZ0lDLHlCQUFoSSxFQUEySnJCLFdBQTNKLEVBQXdLSSxNQUF4SyxFQUFnTHFCLFNBQWhMLEVBQTJMQSxTQUEzTCxFQUFzTVYsY0FBdE07QUF2Q0osa0RBeUNXUSxJQXpDWDs7QUFBQTtBQUFBO0FBQUE7QUEyQ1VGLGdCQUFBQSwyQkEzQ1YsR0EyQ3NDN0IsS0FBSyxDQUFDOEIsbUJBM0M1QztBQTRDSSxxQkFBSzNCLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9Cb0MsbUJBQXRELEVBQTJFLHdCQUEzRSxFQUFxR1AsU0FBckcsRUFBZ0hGLFNBQWhILEVBQTJISiwyQkFBM0gsRUFBc0pyQixXQUF0SixFQUFtS0ksTUFBbkssZ0JBQWtMcUIsU0FBbEwsRUFBNkxWLGNBQTdMO0FBNUNKLGtEQTZDV29CLE9BQU8sQ0FBQ0MsTUFBUixjQTdDWDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQWlEQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozt5R0FDRSxrQkFBMkJULFNBQTNCO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQThDVSxnQkFBQUEsMkJBQTlDLDhEQUEwRyxFQUExRztBQUNRN0MsZ0JBQUFBLEtBRFIsR0FDZ0JDLGFBQU1DLEtBQU4sRUFEaEI7QUFFRSxxQkFBS0MsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0J3QyxtQkFBdEQsRUFBMkUseUJBQTNFLEVBQXNHWCxTQUF0Rzs7QUFFQSxvQkFBSSxDQUFDQSxTQUFMLEVBQWdCO0FBQ2RBLGtCQUFBQSxTQUFTLEdBQUcsbUJBQVo7QUFDRCxpQkFOSCxDQVFFOzs7QUFDSTNCLGdCQUFBQSxXQVROLGNBU3dCQyxpQ0FBcUJzQywrQkFUN0MsY0FTZ0YsS0FBSzdFLHdCQUFMLENBQThCeUMsS0FUOUcsY0FTdUgsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFUckosY0FTaUtKLFNBVGpLO0FBVVFwQixnQkFBQUEsYUFWUixHQVV3QkMsa0JBQU1DLE1BQU4sRUFWeEI7QUFXRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRDRCO0FBSDdDLGlCQUFqQyxFQVhGLENBaUJFOztBQUNRQyxnQkFBQUEsc0JBbEJWLEdBa0JrREwsMkJBbEJsRCxDQWtCVUssc0JBbEJWLEVBa0JrQ0MsV0FsQmxDLEdBa0JrRE4sMkJBbEJsRCxDQWtCa0NNLFdBbEJsQztBQW1CUTVCLGdCQUFBQSxjQW5CUixHQW1Cb0M3QixzQkFBVTBELGNBbkI5QyxFQXFCRTs7QUFDQSxvQkFBSUYsc0JBQUosRUFBNEI7QUFDMUIxQyxrQkFBQUEsV0FBVyxjQUFPQyxpQ0FBcUI0QyxtQ0FBNUIsY0FBbUUsS0FBS25GLHdCQUFMLENBQThCeUMsS0FBakcsY0FBMEcsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFBeEksY0FBb0pKLFNBQXBKLENBQVg7QUFDQVosa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QnFFLHNCQUF4QixDQUFkLEdBQWdFQSxzQkFBaEU7QUFDQTNCLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJGLGFBQXhCLENBQWQsR0FBdUQsS0FBS1IsYUFBTCxDQUFtQlEsYUFBMUU7QUFDRDs7QUFFRCw0REFBcUIsS0FBS2lCLFdBQTFCLEVBQXVDMkIsY0FBdkM7QUFDQSxxQkFBSytCLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDLEVBN0JGLENBK0JFOztBQUNNZ0MsZ0JBQUFBLHNCQWhDUixHQWdDaUMsQ0FBQ0wsc0JBQUQsSUFBMkIsS0FBSy9FLGFBQUwsQ0FBbUJxRixpQ0FBbkIsS0FBeUQsSUFoQ3JIOztBQWlDRSxvQkFBSUwsV0FBSixFQUFpQjtBQUNmLHNCQUFJLENBQUNJLHNCQUFMLEVBQTZCO0FBQzNCL0Msb0JBQUFBLFdBQVcsZUFBUTJDLFdBQVIsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUtNLGdCQUFBQSxNQXZDUixHQXVDNEM7QUFDeENyRSxrQkFBQUEsU0FBUyxFQUFFLEtBQUtsQix3QkFBTCxDQUE4QmtCO0FBREQsaUJBdkM1Qzs7QUEyQ0Usb0JBQUkrRCxXQUFKLEVBQWlCO0FBQ2Ysc0JBQUlJLHNCQUFKLEVBQTRCO0FBQzFCRSxvQkFBQUEsTUFBTSxDQUFDQyxHQUFQLEdBQWFQLFdBQWI7QUFDRDtBQUNGOztBQUVLdEMsZ0JBQUFBLEdBakRSLGFBaURpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQWpEL0MsU0FpRHdETixXQWpEeEQ7QUFrRFFJLGdCQUFBQSxNQWxEUixHQWtEaUIsS0FsRGpCO0FBbURRK0MsZ0JBQUFBLE9BbkRSLEdBbURzQztBQUNsQ2xGLGtCQUFBQSxPQUFPLEVBQUU4QyxjQUR5QjtBQUVsQ1gsa0JBQUFBLE1BQU0sRUFBTkEsTUFGa0M7QUFHbENDLGtCQUFBQSxHQUFHLEVBQUhBLEdBSGtDO0FBSWxDNEMsa0JBQUFBLE1BQU0sRUFBTkEsTUFKa0M7QUFLbENoQyxrQkFBQUEsT0FBTyw0QkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQiwyRUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0NzQjtBQUwzRCxpQkFuRHRDO0FBQUEsa0RBMkRTLElBQUlOLE9BQUo7QUFBQSwyR0FBWSxrQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHVEMsNEJBQUFBLHlCQUhTLEdBR21CN0IsS0FBSyxDQUFDOEIsbUJBSHpCO0FBSVBDLDRCQUFBQSxJQUpPLEdBSVdILFFBSlgsQ0FJUEcsSUFKTyxFQUlEdEQsT0FKQyxHQUlXbUQsUUFKWCxDQUlEbkQsT0FKQzs7QUFLZiw0QkFBQSxNQUFJLENBQUNvRixnQkFBTCxDQUFzQnBGLE9BQXRCOztBQUVBLDRCQUFBLE1BQUksQ0FBQzBCLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9Cd0QscUJBQXRELEVBQTZFLDJCQUE3RSxFQUEwRzNCLFNBQTFHLEVBQXFIUCxRQUFySCxFQUErSEMseUJBQS9ILEVBQTBKckIsV0FBMUosRUFBdUtJLE1BQXZLLEVBQStLcUIsU0FBL0ssRUFBMExBLFNBQTFMLEVBQXFNVixjQUFyTTs7QUFDQXFDLDRCQUFBQSxPQUFPLENBQUM3QixJQUFELENBQVA7QUFSZTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQVdURiw0QkFBQUEsMkJBWFMsR0FXbUI3QixLQUFLLENBQUM4QixtQkFYekI7O0FBWWYsNEJBQUEsTUFBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQjBELGtCQUF2RCxFQUEyRSx3QkFBM0UsRUFBcUc3QixTQUFyRyxFQUFnSEYsU0FBaEgsRUFBMkhKLDJCQUEzSCxFQUFzSnJCLFdBQXRKLEVBQW1LSSxNQUFuSyxnQkFBa0xxQixTQUFsTCxFQUE2TFYsY0FBN0w7O0FBQ0EsZ0NBQUksb0RBQTRCN0Isc0JBQVV1RSxxQkFBdEMsQ0FBSixFQUFrRTtBQUNoRXJCLDhCQUFBQSxNQUFNLENBQUUsSUFBSXBELEtBQUosQ0FBVSxNQUFJLENBQUMwRSx1QkFBZixDQUFGLENBQU47QUFDRDs7QUFDRHRCLDRCQUFBQSxNQUFNLGNBQU47O0FBaEJlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQTNEVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQStFQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozt3R0FDRSxrQkFBMEJULFNBQTFCO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkNnQyxnQkFBQUEsMEJBQTdDLDhEQUF1RyxFQUF2RztBQUEyR0MsZ0JBQUFBLGlCQUEzRyw4REFBdUksQ0FBdkk7QUFBNks7QUFDcktwRSxnQkFBQUEsS0FEUixHQUNnQkMsYUFBTUMsS0FBTixFQURoQjtBQUVVaUQsZ0JBQUFBLFdBRlYsR0FFd0ZnQiwwQkFGeEYsQ0FFVWhCLFdBRlYsRUFFdUJELHNCQUZ2QixHQUV3RmlCLDBCQUZ4RixDQUV1QmpCLHNCQUZ2QixFQUUrQ21CLHNCQUYvQyxHQUV3RkYsMEJBRnhGLENBRStDRSxzQkFGL0MsRUFFdUVDLFlBRnZFLEdBRXdGSCwwQkFGeEYsQ0FFdUVHLFlBRnZFO0FBR0UscUJBQUtuRSxhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQmlFLG1CQUF0RCxFQUEyRSx3QkFBM0UsRUFBcUdwQyxTQUFyRzs7QUFIRixzQkFLTWlDLGlCQUFpQixHQUFHLENBTDFCO0FBQUE7QUFBQTtBQUFBOztBQUFBLHNCQU1VLElBQUk1RSxLQUFKLDZCQU5WOztBQUFBO0FBU0Usb0JBQUksQ0FBQzJDLFNBQUwsRUFBZ0I7QUFDZEEsa0JBQUFBLFNBQVMsR0FBRyxtQkFBWjtBQUNEOztBQUVLWixnQkFBQUEsY0FiUixHQWFvQzdCLHNCQUFVMEQsY0FiOUM7QUFjRSw0REFBcUIsS0FBS3hELFdBQTFCLEVBQXVDMkIsY0FBdkM7QUFFTWlELGdCQUFBQSxRQWhCUixHQWdCbUIsbURBQTJCSCxzQkFBc0IsSUFBdUIsS0FBS3hFLGVBQTdFLEVBQThGcUQsc0JBQXNCLEdBQUcsSUFBSCxHQUFVLEtBQTlILENBaEJuQjs7QUFrQkUsb0JBQUlBLHNCQUFKLEVBQTRCO0FBQzFCM0Isa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QnFFLHNCQUF4QixDQUFkLEdBQWdFQSxzQkFBaEU7QUFDQTNCLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJGLGFBQXhCLENBQWQsR0FBdUQsS0FBS1IsYUFBTCxDQUFtQlEsYUFBMUU7QUFDRDs7QUFFRzZCLGdCQUFBQSxXQXZCTixjQXVCd0JnRSxRQXZCeEIsY0F1Qm9DLEtBQUt0Ryx3QkFBTCxDQUE4QnlDLEtBdkJsRSxjQXVCMkUsS0FBS3pDLHdCQUFMLENBQThCcUUsUUF2QnpHLGNBdUJxSEosU0F2QnJILEdBeUJFOztBQUNNb0IsZ0JBQUFBLHNCQTFCUixHQTBCaUMsQ0FBQ0wsc0JBQUQsSUFBMkIsS0FBSy9FLGFBQUwsQ0FBbUJxRixpQ0FBbkIsS0FBeUQsSUExQnJIOztBQTJCRSxvQkFBSUwsV0FBSixFQUFpQjtBQUNmLHNCQUFJLENBQUNJLHNCQUFMLEVBQTZCO0FBQzNCL0Msb0JBQUFBLFdBQVcsZUFBUTJDLFdBQVIsQ0FBWDtBQUNEO0FBQ0Y7O0FBRUtNLGdCQUFBQSxNQWpDUixHQWlDNEM7QUFDeENyRSxrQkFBQUEsU0FBUyxFQUFFLEtBQUtsQix3QkFBTCxDQUE4QmtCO0FBREQsaUJBakM1Qzs7QUFxQ0Usb0JBQUlrRixZQUFKLEVBQWtCO0FBQ2hCYixrQkFBQUEsTUFBTSxDQUFDYSxZQUFQLEdBQXNCLE1BQXRCO0FBQ0Q7O0FBRUQsb0JBQUluQixXQUFKLEVBQWlCO0FBQ2Ysc0JBQUlJLHNCQUFKLEVBQTRCO0FBQzFCRSxvQkFBQUEsTUFBTSxDQUFDQyxHQUFQLEdBQWFQLFdBQWI7QUFDRDtBQUNGOztBQUVLdEMsZ0JBQUFBLEdBL0NSLGFBK0NpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQS9DL0MsU0ErQ3dETixXQS9DeEQ7QUFnRFFJLGdCQUFBQSxNQWhEUixHQWdEaUIsS0FoRGpCO0FBaURRK0MsZ0JBQUFBLE9BakRSLEdBaURzQztBQUNsQ2xGLGtCQUFBQSxPQUFPLEVBQUU4QyxjQUR5QjtBQUVsQ1gsa0JBQUFBLE1BQU0sRUFBTkEsTUFGa0M7QUFHbENDLGtCQUFBQSxHQUFHLEVBQUhBLEdBSGtDO0FBSWxDNEMsa0JBQUFBLE1BQU0sRUFBTkEsTUFKa0M7QUFLbENoQyxrQkFBQUEsT0FBTyw0QkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQiwyRUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0M4QztBQUwzRCxpQkFqRHRDO0FBeURRMUQsZ0JBQUFBLGFBekRSLEdBeUR3QkMsa0JBQU1DLE1BQU4sRUF6RHhCO0FBMERFLG1EQUFrQkYsYUFBbEIsRUFBaUM7QUFDL0JpQyxrQkFBQUEsZ0JBQWdCLEVBQUUsQ0FBQ25FLG1DQUF1QkYsYUFBeEIsQ0FEYTtBQUUvQnVDLGtCQUFBQSxPQUFPLEVBQUdrRCxpQkFBaUIsR0FBRyxLQUFLakcsYUFBTCxDQUFtQmdELDBCQUF4QyxHQUFzRWlELGlCQUF0RSxHQUEwRixLQUFLakcsYUFBTCxDQUFtQmdELDBCQUZ2RjtBQUcvQnVELGtCQUFBQSxVQUFVLEVBQUUsS0FBS3ZHLGFBQUwsQ0FBbUJ3RyxzQkFIQTtBQUkvQnZELGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRG9EO0FBSjdDLGlCQUFqQztBQTFERixrREFpRVMsSUFBSTlCLE9BQUo7QUFBQSw0R0FBWSxrQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHVEMsNEJBQUFBLHlCQUhTLEdBR21CN0IsS0FBSyxDQUFDOEIsbUJBSHpCO0FBSVBDLDRCQUFBQSxJQUpPLEdBSVdILFFBSlgsQ0FJUEcsSUFKTyxFQUlEdEQsT0FKQyxHQUlXbUQsUUFKWCxDQUlEbkQsT0FKQzs7QUFLZiw0QkFBQSxNQUFJLENBQUNvRixnQkFBTCxDQUFzQnBGLE9BQXRCOztBQUVBLGdDQUFJQSxPQUFKLEVBQWE7QUFDWCxrQ0FBSUEsT0FBTyxDQUFDSSxtQ0FBdUJDLFdBQXZCLENBQW1DOEYsV0FBbkMsRUFBRCxDQUFYLEVBQStEO0FBQzdELGdDQUFBLE1BQUksQ0FBQ2hHLFNBQUwsR0FBaUJILE9BQU8sQ0FBQ0ksbUNBQXVCQyxXQUF2QixDQUFtQzhGLFdBQW5DLEVBQUQsQ0FBeEI7QUFDRDtBQUNGLDZCQVhjLENBYWY7OztBQWJlLGlDQWNYN0MsSUFkVztBQUFBO0FBQUE7QUFBQTs7QUFBQSxrQ0FpQlRoRCxNQUFNLENBQUNDLElBQVAsQ0FBWStDLElBQVosRUFBa0I5QyxNQUFsQixLQUE2QixDQWpCcEI7QUFBQTtBQUFBO0FBQUE7O0FBa0JYMkQsNEJBQUFBLE1BQU0sQ0FBQyxJQUFJcEQsS0FBSixDQUFVLHVDQUFWLENBQUQsQ0FBTjtBQWxCVzs7QUFBQTtBQXNCYnVDLDRCQUFBQSxJQUFJLENBQUNJLFNBQUwsR0FBaUJBLFNBQWpCOztBQUNBLDRCQUFBLE1BQUksQ0FBQ2hDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CdUUscUJBQXRELEVBQTZFLDBCQUE3RSxFQUF5RzFDLFNBQXpHLEVBQW9IUCxRQUFwSCxFQUE4SEMseUJBQTlILEVBQXlKckIsV0FBekosRUFBc0tJLE1BQXRLLEVBQThLcUIsU0FBOUssRUFBeUxBLFNBQXpMLEVBQW9NVixjQUFwTTs7QUFDQXFDLDRCQUFBQSxPQUFPLENBQUM3QixJQUFELENBQVA7QUF4QmE7O0FBQUE7QUFBQSxrQ0E2QlhvQixXQUFXLElBQUl2QixRQUFRLENBQUNrRCxNQUFULEtBQW9CcEYsc0JBQVVxRixtQkE3QmxDO0FBQUE7QUFBQTtBQUFBOztBQThCYm5DLDRCQUFBQSxNQUFNLENBQUNoQixRQUFELENBQU47QUE5QmE7O0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQW1DVEMsNEJBQUFBLDJCQW5DUyxHQW1DbUI3QixLQUFLLENBQUM4QixtQkFuQ3pCOztBQW9DZiw0QkFBQSxNQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CMEUsa0JBQXZELEVBQTJFLHVCQUEzRSxFQUFvRzdDLFNBQXBHLEVBQStHRixTQUEvRyxFQUEwSEosMkJBQTFILEVBQXFKckIsV0FBckosRUFBa0tJLE1BQWxLLGdCQUFpTHFCLFNBQWpMLEVBQTRMVixjQUE1TDs7QUFDQSxnQ0FBSSxvREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE1BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUNEdEIsNEJBQUFBLE1BQU0sY0FBTjs7QUF4Q2U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQVo7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBakVUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBOEdBO0FBQ0Y7QUFDQTtBQUNBOzs7OztpSEFDRSxrQkFBbUNxQyx3QkFBbkM7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDUWpGLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRVVnRCxnQkFBQUEsc0JBRlYsR0FFcUMrQix3QkFGckMsQ0FFVS9CLHNCQUZWO0FBR0UscUJBQUsvQyxhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjRFLHFCQUF0RCxFQUE2RSxnQ0FBN0U7QUFFTTFFLGdCQUFBQSxXQUxSLGNBSzBCQyxpQ0FBcUIwRSxpQ0FML0MsY0FLb0YsS0FBS2pILHdCQUFMLENBQThCeUMsS0FMbEgsY0FLMkgsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFMekosY0FLcUssS0FBS3JFLHdCQUFMLENBQThCeUMsS0FMbk0sd0JBS3NOLEtBQUt6Qyx3QkFBTCxDQUE4QmtCLFNBTHBQO0FBTVFtQyxnQkFBQUEsY0FOUixHQU1vQzdCLHNCQUFVMEQsY0FOOUM7QUFPRTdCLGdCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBRUEscUJBQUsyRSxrQkFBTCxDQUF3QixLQUFLMUUsU0FBN0IsRUFBd0MyQyxjQUF4QztBQUNBLDREQUFxQixLQUFLM0IsV0FBMUIsRUFBdUMyQixjQUF2QztBQUVNVixnQkFBQUEsR0FiUixhQWFpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQWIvQyxTQWF3RE4sV0FieEQ7QUFjUUksZ0JBQUFBLE1BZFIsR0FjaUIsS0FkakI7QUFlUStDLGdCQUFBQSxPQWZSLEdBZXNDO0FBQ2xDbEYsa0JBQUFBLE9BQU8sRUFBRThDLGNBRHlCO0FBRWxDWCxrQkFBQUEsTUFBTSxFQUFOQSxNQUZrQztBQUdsQ0Msa0JBQUFBLEdBQUcsRUFBSEEsR0FIa0M7QUFJbENZLGtCQUFBQSxPQUFPLDRCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDJFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3Q3lEO0FBSjNELGlCQWZ0QztBQXNCUXJFLGdCQUFBQSxhQXRCUixHQXNCd0JDLGtCQUFNQyxNQUFOLEVBdEJ4QjtBQXdCUWtCLGdCQUFBQSxTQXhCUixHQXdCb0IsS0FBS2pFLHdCQUFMLENBQThCeUMsS0F4QmxEO0FBQUEsa0RBMEJTLElBQUlnQyxPQUFKO0FBQUEsNEdBQVksa0JBQU9pQixPQUFQLEVBQWdCaEIsTUFBaEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FFUTdCLGFBQWEsQ0FBQzRDLE9BQUQsQ0FGckI7O0FBQUE7QUFFVC9CLDRCQUFBQSxRQUZTO0FBR1RDLDRCQUFBQSx5QkFIUyxHQUdtQjdCLEtBQUssQ0FBQzhCLG1CQUh6QjtBQUlQQyw0QkFBQUEsSUFKTyxHQUlXSCxRQUpYLENBSVBHLElBSk8sRUFJRHRELE9BSkMsR0FJV21ELFFBSlgsQ0FJRG5ELE9BSkM7O0FBS2YsNEJBQUEsTUFBSSxDQUFDb0YsZ0JBQUwsQ0FBc0JwRixPQUF0QixFQUxlLENBT2Y7OztBQVBlLGlDQVFYc0QsSUFSVztBQUFBO0FBQUE7QUFBQTs7QUFTYiw0QkFBQSxNQUFJLENBQUM1QixhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjRFLHFCQUF0RCxFQUE2RSw0REFBN0UsRUFBMkkvQyxTQUEzSSxFQUFzSlAsUUFBdEosRUFBZ0tDLHlCQUFoSyxFQUEyTHJCLFdBQTNMLEVBQXdNSSxNQUF4TSxFQUFnTnFCLFNBQWhOLEVBQTJOQSxTQUEzTixFQUFzT1YsY0FBdE87O0FBQ0FxQyw0QkFBQUEsT0FBTyxDQUFDN0IsSUFBRCxDQUFQO0FBVmE7O0FBQUE7QUFhZjtBQUNBNkIsNEJBQUFBLE9BQU87QUFkUTs7QUFBQTtBQUFBO0FBQUE7QUFpQlQvQiw0QkFBQUEsMkJBakJTLEdBaUJtQjdCLEtBQUssQ0FBQzhCLG1CQWpCekI7O0FBa0JmLDRCQUFBLE1BQUksQ0FBQzNCLGFBQUwsQ0FBbUJDLG1CQUFTMkQsS0FBNUIsRUFBbUN6RCwyQkFBb0I0RSxxQkFBdkQsRUFBOEUsZ0NBQTlFLEVBQWdIL0MsU0FBaEgsRUFBMkhGLFNBQTNILEVBQXNJSiwyQkFBdEksRUFBaUtyQixXQUFqSyxFQUE4S0ksTUFBOUssZ0JBQTZMcUIsU0FBN0wsRUFBd01WLGNBQXhNOztBQUNBLGdDQUFJLG9EQUE0QjdCLHNCQUFVdUUscUJBQXRDLENBQUosRUFBa0U7QUFDaEVyQiw4QkFBQUEsTUFBTSxDQUFFLElBQUlwRCxLQUFKLENBQVUsTUFBSSxDQUFDMEUsdUJBQWYsQ0FBRixDQUFOO0FBQ0Q7O0FBQ0R0Qiw0QkFBQUEsTUFBTSxjQUFOO0FBdEJlOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQTFCVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQXNEQTtBQUNGO0FBQ0E7QUFDQTs7Ozs7b0hBQ0UsbUJBQXNDTyxXQUF0QztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUNRbkQsZ0JBQUFBLEtBRFIsR0FDZ0JDLGFBQU1DLEtBQU4sRUFEaEI7QUFFRSxxQkFBS0MsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0IrRSx3QkFBdEQsRUFBZ0Ysd0NBQWhGO0FBRU03RSxnQkFBQUEsV0FKUixjQUkwQkMsaUNBQXFCNkUsaUNBSi9DLGNBSW9GLEtBQUtwSCx3QkFBTCxDQUE4QnlDLEtBSmxILGNBSTJILEtBQUt6Qyx3QkFBTCxDQUE4QnFFLFFBSnpKLGNBSXFLWSxXQUpySztBQUtRNUIsZ0JBQUFBLGNBTFIsR0FLb0M3QixzQkFBVTBELGNBTDlDO0FBT0UscUJBQUtFLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDO0FBQ0EsNERBQXFCLEtBQUszQixXQUExQixFQUF1QzJCLGNBQXZDO0FBRU1WLGdCQUFBQSxHQVZSLGFBVWlCLEtBQUszQyx3QkFBTCxDQUE4QjRDLE1BVi9DLFNBVXdETixXQVZ4RDtBQVdRSSxnQkFBQUEsTUFYUixHQVdpQixLQVhqQjtBQVlRK0MsZ0JBQUFBLE9BWlIsR0FZc0M7QUFDbENsRixrQkFBQUEsT0FBTyxFQUFFOEMsY0FEeUI7QUFFbENYLGtCQUFBQSxNQUFNLEVBQU5BLE1BRmtDO0FBR2xDQyxrQkFBQUEsR0FBRyxFQUFIQSxHQUhrQztBQUlsQ1ksa0JBQUFBLE9BQU8sNEJBQUUsS0FBS3RELGFBQUwsQ0FBbUJ1RCxxQkFBckIsMkVBQThDLEtBQUt2RCxhQUFMLENBQW1Cd0Qsb0JBQW5CLENBQXdDNEQ7QUFKM0QsaUJBWnRDO0FBbUJReEUsZ0JBQUFBLGFBbkJSLEdBbUJ3QkMsa0JBQU1DLE1BQU4sRUFuQnhCO0FBQUEsbURBb0JTLElBQUkwQixPQUFKO0FBQUEsNEdBQVksa0JBQU9pQixPQUFQLEVBQWdCaEIsTUFBaEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FFUTdCLGFBQWEsQ0FBQzRDLE9BQUQsQ0FGckI7O0FBQUE7QUFFVC9CLDRCQUFBQSxRQUZTO0FBR1RDLDRCQUFBQSx5QkFIUyxHQUdtQjdCLEtBQUssQ0FBQzhCLG1CQUh6QjtBQUlQQyw0QkFBQUEsSUFKTyxHQUlFSCxRQUpGLENBSVBHLElBSk87O0FBQUEsaUNBS1hBLElBTFc7QUFBQTtBQUFBO0FBQUE7O0FBTWIsNEJBQUEsTUFBSSxDQUFDNUIsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0IrRSx3QkFBdEQsRUFBZ0Ysc0NBQWhGLEVBQXdIcEQsU0FBeEgsRUFBbUlMLFFBQW5JLEVBQTZJQyx5QkFBN0ksRUFBd0tyQixXQUF4SyxFQUFxTEksTUFBckwsRUFBNkxxQixTQUE3TCxFQUF3TUEsU0FBeE0sRUFBbU5WLGNBQW5OOztBQUVBcUMsNEJBQUFBLE9BQU8sQ0FBQzdCLElBQUQsQ0FBUDtBQVJhOztBQUFBO0FBV2Y7QUFDQSw0QkFBQSxNQUFJLENBQUM1QixhQUFMLENBQW1CQyxtQkFBU29GLElBQTVCLEVBQWtDbEYsMkJBQW9CK0Usd0JBQXRELEVBQWdGLHVEQUFoRixFQUF5SXBELFNBQXpJLEVBQW9KTCxRQUFwSixFQUE4SkMseUJBQTlKLEVBQXlMckIsV0FBekwsRUFBc01JLE1BQXRNLEVBQThNcUIsU0FBOU0sRUFBeU5BLFNBQXpOLEVBQW9PVixjQUFwTzs7QUFFQXFDLDRCQUFBQSxPQUFPO0FBZFE7O0FBQUE7QUFBQTtBQUFBO0FBaUJUL0IsNEJBQUFBLDJCQWpCUyxHQWlCbUI3QixLQUFLLENBQUM4QixtQkFqQnpCOztBQWtCZiw0QkFBQSxNQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CK0Usd0JBQXZELEVBQWlGLG1DQUFqRixFQUFzSHBELFNBQXRILEVBQWlJQSxTQUFqSSxFQUE0SUosMkJBQTVJLEVBQXVLckIsV0FBdkssRUFBb0xJLE1BQXBMLGdCQUFtTXFCLFNBQW5NLEVBQThNVixjQUE5TTs7QUFDQSxnQ0FBSSxvREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE1BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUNEdEIsNEJBQUFBLE1BQU0sY0FBTjtBQXRCZTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBWjs7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFwQlQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTzs7Ozs7Ozs7QUFnREE7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7Z0hBQ0UsbUJBQWtDVCxTQUFsQztBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBcURzRCxnQkFBQUEsK0JBQXJELGlFQUE0SCxFQUE1SDtBQUNRekYsZ0JBQUFBLEtBRFIsR0FDZ0JDLGFBQU1DLEtBQU4sRUFEaEI7QUFFRSxxQkFBS0MsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0JvRiwyQkFBdEQsRUFBbUYsZ0NBQW5GLEVBQXFIdkQsU0FBckg7QUFFTTNCLGdCQUFBQSxXQUpSLGNBSTBCQyxpQ0FBcUJrRix3QkFKL0MsY0FJMkUsS0FBS3pILHdCQUFMLENBQThCeUMsS0FKekcsY0FJa0gsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFKaEosY0FJNEpKLFNBSjVKO0FBS1FwQixnQkFBQUEsYUFMUixHQUt3QkMsa0JBQU1DLE1BQU4sRUFMeEI7QUFNRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRHVFO0FBSDdDLGlCQUFqQztBQU1RMUMsZ0JBQUFBLHNCQVpWLEdBWThEdUMsK0JBWjlELENBWVV2QyxzQkFaVixFQVlrQzJDLFdBWmxDLEdBWThESiwrQkFaOUQsQ0FZa0NJLFdBWmxDLEVBWStDQyxVQVovQyxHQVk4REwsK0JBWjlELENBWStDSyxVQVovQztBQWNRdkUsZ0JBQUFBLGNBZFIsR0Fjb0M3QixzQkFBVTBELGNBZDlDOztBQWdCRSxvQkFBSUYsc0JBQUosRUFBNEI7QUFDMUIzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCcUUsc0JBQXhCLENBQWQsR0FBZ0VBLHNCQUFoRTtBQUNBM0Isa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QkYsYUFBeEIsQ0FBZCxHQUF1RCxLQUFLUixhQUFMLENBQW1CUSxhQUExRTtBQUNEOztBQUVELHFCQUFLMkUsa0JBQUwsQ0FBd0IsS0FBSzFFLFNBQTdCLEVBQXdDMkMsY0FBeEM7QUFDQSw0REFBcUIsS0FBSzNCLFdBQTFCLEVBQXVDMkIsY0FBdkM7QUFFTVEsZ0JBQUFBLElBeEJSLEdBd0I0QjhELFdBQVcsSUFBSSxFQXhCM0M7QUEwQlFFLGdCQUFBQSxPQTFCUixHQTBCa0I7QUFDZCwyQkFBUyxLQUFLN0gsd0JBQUwsQ0FBOEJ5QyxLQUR6QjtBQUVkLDhCQUFZLEtBQUt6Qyx3QkFBTCxDQUE4QnFFO0FBRjVCLGlCQTFCbEI7O0FBK0JFLG9CQUFJUixJQUFJLElBQUlBLElBQUksQ0FBQ2lFLGlCQUFqQixFQUFvQztBQUM1QkMsa0JBQUFBLE9BRDRCLEdBQ2xCQyxxQ0FBa0JDLElBQWxCLENBQXVCcEUsSUFBSSxDQUFDaUUsaUJBQTVCLENBRGtCO0FBRWxDakgsa0JBQUFBLE1BQU0sQ0FBQ3FILE1BQVAsQ0FBY0wsT0FBZCxFQUF1QjtBQUFFLHFDQUFpQkU7QUFBbkIsbUJBQXZCO0FBQ0Q7O0FBRUQsb0JBQUlsRSxJQUFJLENBQUNzRSxlQUFULEVBQTBCO0FBQ3hCdEgsa0JBQUFBLE1BQU0sQ0FBQ3FILE1BQVAsQ0FBY0wsT0FBZCxFQUF1QjtBQUFFLHVDQUFtQmhFLElBQUksQ0FBQ3NFO0FBQTFCLG1CQUF2QjtBQUNEOztBQUVEdEUsZ0JBQUFBLElBQUksQ0FBQ3VFLFFBQUwsR0FBZ0JDLElBQUksQ0FBQ0MsVUFBTCxDQUFnQixRQUFoQixFQUEwQkMsTUFBMUIsQ0FBaUNDLElBQUksQ0FBQ0MsU0FBTCxDQUFlWixPQUFmLENBQWpDLEVBQTBEYSxNQUExRCxDQUFpRSxLQUFqRSxFQUF3RUMsUUFBeEUsRUFBaEI7O0FBeENGLHNCQTBDTWYsVUFBVSxJQUFJLENBQUNnQixNQUFNLENBQUNDLFFBMUM1QjtBQUFBO0FBQUE7QUFBQTs7QUFBQSxtREEyQ1dwRSxPQUFPLENBQUNDLE1BQVIsQ0FBZSxJQUFJcEQsS0FBSixnREFBZixDQTNDWDs7QUFBQTtBQThDRSxvQkFBSXNHLFVBQUosRUFBZ0I7QUFDZC9ELGtCQUFBQSxJQUFJLENBQUNpRixPQUFMLEdBQWVDLHlCQUFZQyxjQUFaLEVBQWY7QUFDQW5GLGtCQUFBQSxJQUFJLENBQUNvRixNQUFMLEdBQWNDLHVCQUFXQyxhQUFYLEVBQWQ7QUFDQXRGLGtCQUFBQSxJQUFJLENBQUN1RixTQUFMLEdBQWlCUixNQUFNLENBQUNTLFFBQVAsQ0FBZ0JDLElBQWpDO0FBQ0F6RixrQkFBQUEsSUFBSSxDQUFDMEYsRUFBTCxHQUFVQyxlQUFPQyxTQUFQLEVBQVY7QUFDRDs7QUFFRCxvQkFBSSxDQUFDNUYsSUFBSSxDQUFDNkYsTUFBVixFQUFrQjtBQUNoQjdGLGtCQUFBQSxJQUFJLENBQUM2RixNQUFMLEdBQWNsSSxzQkFBVW1JLGFBQXhCO0FBQ0QsaUJBdkRILENBeURFOzs7QUF6REYsc0JBMERNOUYsSUFBSSxDQUFDNkYsTUFBTCxJQUFlLENBQUNFLG9CQUFRQyxnQkFBUixDQUF5QnhJLFFBQXpCLENBQWtDd0MsSUFBSSxDQUFDNkYsTUFBdkMsQ0ExRHRCO0FBQUE7QUFBQTtBQUFBOztBQUFBLG1EQTJEV2pGLE9BQU8sQ0FBQ0MsTUFBUixDQUFlLElBQUlwRCxLQUFKLGdDQUFrQ3VDLElBQUksQ0FBQzZGLE1BQXZDLE9BQWYsQ0EzRFg7O0FBQUE7QUE4RFEvRyxnQkFBQUEsR0E5RFIsYUE4RGlCLEtBQUszQyx3QkFBTCxDQUE4QjRDLE1BOUQvQyxTQThEd0ROLFdBOUR4RDtBQStEUUksZ0JBQUFBLE1BL0RSLEdBK0RpQixNQS9EakI7QUFpRVErQyxnQkFBQUEsT0FqRVIsR0FpRXNDO0FBQ2xDNUIsa0JBQUFBLElBQUksRUFBSkEsSUFEa0M7QUFFbEN0RCxrQkFBQUEsT0FBTyxFQUFFOEMsY0FGeUI7QUFHbENYLGtCQUFBQSxNQUFNLEVBQU5BLE1BSGtDO0FBSWxDQyxrQkFBQUEsR0FBRyxFQUFIQSxHQUprQztBQUtsQ1ksa0JBQUFBLE9BQU8sNEJBQUUsS0FBS3RELGFBQUwsQ0FBbUJ1RCxxQkFBckIsMkVBQThDLEtBQUt2RCxhQUFMLENBQW1Cd0Qsb0JBQW5CLENBQXdDaUU7QUFMM0QsaUJBakV0QztBQUFBLG1EQXlFUyxJQUFJakQsT0FBSjtBQUFBLDRHQUFZLG1CQUFPaUIsT0FBUCxFQUFnQmhCLE1BQWhCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBRVE3QixhQUFhLENBQUM0QyxPQUFELENBRnJCOztBQUFBO0FBRVQvQiw0QkFBQUEsUUFGUztBQUdUQyw0QkFBQUEseUJBSFMsR0FHbUI3QixLQUFLLENBQUM4QixtQkFIekI7QUFJUEMsNEJBQUFBLEtBSk8sR0FJV0gsUUFKWCxDQUlQRyxJQUpPLEVBSUR0RCxPQUpDLEdBSVdtRCxRQUpYLENBSURuRCxPQUpDOztBQUtmLDRCQUFBLE1BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBRUEsZ0NBQUlzRCxLQUFKLEVBQVU7QUFDUiw4QkFBQSxNQUFJLENBQUM1QixhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjBILDZCQUF0RCxFQUFxRixrQ0FBckYsRUFBeUg3RixTQUF6SCxFQUFvSVAsUUFBcEksRUFBOElDLHlCQUE5SSxFQUF5S3JCLFdBQXpLLEVBQXNMSSxNQUF0TCxFQUE4THFCLFNBQTlMLEVBQXlNQSxTQUF6TSxFQUFvTlYsY0FBcE47O0FBRUFxQyw4QkFBQUEsT0FBTyxDQUFDN0IsS0FBRCxDQUFQO0FBQ0Q7O0FBWGM7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFhVEYsNEJBQUFBLDJCQWJTLEdBYW1CN0IsS0FBSyxDQUFDOEIsbUJBYnpCOztBQWNmLDRCQUFBLE1BQUksQ0FBQzNCLGFBQUwsQ0FBbUJDLG1CQUFTMkQsS0FBNUIsRUFBbUN6RCwyQkFBb0IySCwwQkFBdkQsRUFBbUYsK0JBQW5GLEVBQW9IOUYsU0FBcEgsRUFBK0hGLFNBQS9ILEVBQTBJSiwyQkFBMUksRUFBcUtyQixXQUFySyxFQUFrTEksTUFBbEwsaUJBQWlNcUIsU0FBak0sRUFBNE1WLGNBQTVNOztBQUVBLGdDQUFJLHFEQUE0QjdCLHNCQUFVdUUscUJBQXRDLENBQUosRUFBa0U7QUFDaEVyQiw4QkFBQUEsTUFBTSxDQUFFLElBQUlwRCxLQUFKLENBQVUsTUFBSSxDQUFDMEUsdUJBQWYsQ0FBRixDQUFOO0FBQ0Q7O0FBQ0R0Qiw0QkFBQUEsTUFBTSxlQUFOOztBQW5CZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBWjs7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkF6RVQ7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTzs7Ozs7Ozs7QUFpR0E7QUFDRjtBQUNBO0FBQ0E7QUFDQTs7Ozs7dUdBQ0UsbUJBQXlCVCxTQUF6QjtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQTRDK0YsZ0JBQUFBLHlCQUE1QyxpRUFBb0csRUFBcEc7QUFDUWxJLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CNkgsa0JBQXRELEVBQTBFLHNCQUExRSxFQUFrR2hHLFNBQWxHO0FBQ01wQixnQkFBQUEsYUFIUixHQUd3QkMsa0JBQU1DLE1BQU4sRUFIeEI7QUFJUXlELGdCQUFBQSxVQUpSLEdBSXFCLElBSnJCO0FBS0UsbURBQWtCM0QsYUFBbEIsRUFBaUM7QUFDL0JHLGtCQUFBQSxPQUFPLEVBQUUsS0FBSy9DLGFBQUwsQ0FBbUJnRCwwQkFERztBQUUvQkMsa0JBQUFBLDBCQUEwQixFQUFFLEtBQUtqRCxhQUFMLENBQW1Ca0QsNEJBQW5CLENBQWdEK0csV0FGN0M7QUFHL0JDLGtCQUFBQSxXQUFXLEVBQUUscUJBQUNDLEtBQUQ7QUFBQSwyQkFBVyx5Q0FBd0JBLEtBQXhCLEVBQStCNUQsVUFBL0IsQ0FBWDtBQUFBLG1CQUhrQjtBQUkvQjFCLGtCQUFBQSxnQkFBZ0IsRUFBRSxDQUFDbkUsbUNBQXVCRixhQUF4QjtBQUphLGlCQUFqQztBQU9Rd0UsZ0JBQUFBLFdBWlYsR0FZMkUrRSx5QkFaM0UsQ0FZVS9FLFdBWlYsRUFZdUJELHNCQVp2QixHQVkyRWdGLHlCQVozRSxDQVl1QmhGLHNCQVp2QixFQVkrQzJDLFdBWi9DLEdBWTJFcUMseUJBWjNFLENBWStDckMsV0FaL0MsRUFZNERDLFVBWjVELEdBWTJFb0MseUJBWjNFLENBWTREcEMsVUFaNUQ7QUFhUXZFLGdCQUFBQSxjQWJSLEdBYW9DN0Isc0JBQVUwRCxjQWI5QztBQWNNNUMsZ0JBQUFBLFdBZE4sY0Fjd0JDLGlDQUFxQjhILHVCQWQ3QyxjQWN3RSxLQUFLckssd0JBQUwsQ0FBOEJ5QyxLQWR0RyxjQWMrRyxLQUFLekMsd0JBQUwsQ0FBOEJxRSxRQWQ3SSxjQWN5SkosU0Fkeko7O0FBZUUsb0JBQUllLHNCQUFKLEVBQTRCO0FBQzFCMUMsa0JBQUFBLFdBQVcsY0FBT0MsaUNBQXFCK0gsMkJBQTVCLGNBQTJELEtBQUt0Syx3QkFBTCxDQUE4QnlDLEtBQXpGLGNBQWtHLEtBQUt6Qyx3QkFBTCxDQUE4QnFFLFFBQWhJLGNBQTRJSixTQUE1SSxDQUFYO0FBQ0FaLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBQ0Q7O0FBRUQscUJBQUsyRSxrQkFBTCxDQUF3QixLQUFLMUUsU0FBN0IsRUFBd0MyQyxjQUF4QztBQUNBLDREQUFxQixLQUFLM0IsV0FBMUIsRUFBdUMyQixjQUF2QyxFQXRCRixDQXdCRTs7QUFDTWdDLGdCQUFBQSxzQkF6QlIsR0F5QmlDLENBQUNMLHNCQUFELElBQTJCLEtBQUsvRSxhQUFMLENBQW1CcUYsaUNBQW5CLEtBQXlELElBekJySDs7QUEwQkUsb0JBQUlMLFdBQUosRUFBaUI7QUFDZixzQkFBSSxDQUFDSSxzQkFBTCxFQUE2QjtBQUMzQi9DLG9CQUFBQSxXQUFXLGVBQVEyQyxXQUFSLENBQVg7QUFDRDtBQUNGOztBQUVLTSxnQkFBQUEsTUFoQ1IsR0FnQzRDO0FBQ3hDckUsa0JBQUFBLFNBQVMsRUFBRSxLQUFLbEIsd0JBQUwsQ0FBOEJrQjtBQURELGlCQWhDNUM7O0FBb0NFLG9CQUFJK0QsV0FBSixFQUFpQjtBQUNmLHNCQUFJSSxzQkFBSixFQUE0QjtBQUMxQkUsb0JBQUFBLE1BQU0sQ0FBQ0MsR0FBUCxHQUFhUCxXQUFiO0FBQ0Q7QUFDRjs7QUFFS3BCLGdCQUFBQSxJQTFDUixHQTBDNEI4RCxXQUFXLElBQUksRUExQzNDOztBQUFBLHNCQTRDTUMsVUFBVSxJQUFJLENBQUNnQixNQUFNLENBQUNDLFFBNUM1QjtBQUFBO0FBQUE7QUFBQTs7QUFBQSxtREE2Q1dwRSxPQUFPLENBQUNDLE1BQVIsQ0FBZSxJQUFJcEQsS0FBSixnREFBZixDQTdDWDs7QUFBQTtBQWdERSxvQkFBSXNHLFVBQUosRUFBZ0I7QUFDZC9ELGtCQUFBQSxJQUFJLENBQUNpRixPQUFMLEdBQWVDLHlCQUFZQyxjQUFaLEVBQWY7QUFDQW5GLGtCQUFBQSxJQUFJLENBQUNvRixNQUFMLEdBQWNDLHVCQUFXQyxhQUFYLEVBQWQ7QUFDQXRGLGtCQUFBQSxJQUFJLENBQUN1RixTQUFMLEdBQWlCUixNQUFNLENBQUNTLFFBQVAsQ0FBZ0JDLElBQWpDO0FBQ0F6RixrQkFBQUEsSUFBSSxDQUFDMEYsRUFBTCxHQUFVQyxlQUFPQyxTQUFQLEVBQVY7QUFDRCxpQkFyREgsQ0F1REU7OztBQUNBLG9CQUFJLENBQUM1RixJQUFJLENBQUM2RixNQUFWLEVBQWtCO0FBQ2hCN0Ysa0JBQUFBLElBQUksQ0FBQzZGLE1BQUwsR0FBY2xJLHNCQUFVbUksYUFBeEI7QUFDRCxpQkExREgsQ0E0REU7OztBQTVERixzQkE2RE05RixJQUFJLENBQUM2RixNQUFMLElBQWUsQ0FBQ0Usb0JBQVFDLGdCQUFSLENBQXlCeEksUUFBekIsQ0FBa0N3QyxJQUFJLENBQUM2RixNQUF2QyxDQTdEdEI7QUFBQTtBQUFBO0FBQUE7O0FBQUEsbURBOERXakYsT0FBTyxDQUFDQyxNQUFSLENBQWUsSUFBSXBELEtBQUosZ0NBQWtDdUMsSUFBSSxDQUFDNkYsTUFBdkMsT0FBZixDQTlEWDs7QUFBQTtBQWlFUS9HLGdCQUFBQSxHQWpFUixhQWlFaUIsS0FBSzNDLHdCQUFMLENBQThCNEMsTUFqRS9DLFNBaUV3RE4sV0FqRXhEO0FBa0VRSSxnQkFBQUEsTUFsRVIsR0FrRWlCLE1BbEVqQjtBQW1FUStDLGdCQUFBQSxPQW5FUixHQW1Fc0M7QUFDbEM1QixrQkFBQUEsSUFBSSxFQUFKQSxJQURrQztBQUVsQ3RELGtCQUFBQSxPQUFPLEVBQUU4QyxjQUZ5QjtBQUdsQ1gsa0JBQUFBLE1BQU0sRUFBTkEsTUFIa0M7QUFJbENDLGtCQUFBQSxHQUFHLEVBQUhBLEdBSmtDO0FBS2xDNEMsa0JBQUFBLE1BQU0sRUFBTkEsTUFMa0M7QUFNbENoQyxrQkFBQUEsT0FBTyw0QkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQiwyRUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0N5RztBQU4zRCxpQkFuRXRDO0FBQUEsbURBNEVTLElBQUl6RixPQUFKO0FBQUEsNEdBQVksbUJBQU9pQixPQUFQLEVBQWdCaEIsTUFBaEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FFUTdCLGFBQWEsQ0FBQzRDLE9BQUQsQ0FGckI7O0FBQUE7QUFFVC9CLDRCQUFBQSxRQUZTO0FBR1RDLDRCQUFBQSx5QkFIUyxHQUdtQjdCLEtBQUssQ0FBQzhCLG1CQUh6QjtBQUlQckQsNEJBQUFBLE9BSk8sR0FJS21ELFFBSkwsQ0FJUG5ELE9BSk87O0FBS2YsNEJBQUEsTUFBSSxDQUFDb0YsZ0JBQUwsQ0FBc0JwRixPQUF0Qjs7QUFFQSw0QkFBQSxNQUFJLENBQUMwQixhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQm1JLG9CQUF0RCxFQUE0RSx3QkFBNUUsRUFBc0d0RyxTQUF0RyxFQUFpSFAsUUFBakgsRUFBMkhDLHlCQUEzSCxFQUFzSnJCLFdBQXRKLEVBQW1LSSxNQUFuSyxFQUEyS3FCLFNBQTNLLEVBQXNMRixJQUF0TCxFQUE0TFIsY0FBNUw7O0FBQ0FxQyw0QkFBQUEsT0FBTztBQVJRO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBVVQvQiw0QkFBQUEsMkJBVlMsR0FVbUI3QixLQUFLLENBQUM4QixtQkFWekI7O0FBV2YsNEJBQUEsTUFBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQm9JLGlCQUF2RCxFQUEwRSxxQkFBMUUsRUFBaUd2RyxTQUFqRyxFQUE0R0YsU0FBNUcsRUFBdUhKLDJCQUF2SCxFQUFrSnJCLFdBQWxKLEVBQStKSSxNQUEvSixpQkFBOEttQixJQUE5SyxFQUFvTFIsY0FBcEw7O0FBRUEsZ0NBQUkscURBQTRCN0Isc0JBQVV1RSxxQkFBdEMsQ0FBSixFQUFrRTtBQUNoRXJCLDhCQUFBQSxNQUFNLENBQUUsSUFBSXBELEtBQUosQ0FBVSxNQUFJLENBQUMwRSx1QkFBZixDQUFGLENBQU47QUFDRDs7QUFDRHRCLDRCQUFBQSxNQUFNLGVBQU47O0FBaEJlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQTVFVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQWlHQTtBQUNGO0FBQ0E7QUFDQTtBQUNBOzs7Ozt3R0FDRSxtQkFBMEJULFNBQTFCO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBNkN3RyxnQkFBQUEsMEJBQTdDLGlFQUF1RyxFQUF2RztBQUNRM0ksZ0JBQUFBLEtBRFIsR0FDZ0JDLGFBQU1DLEtBQU4sRUFEaEI7QUFFRSxxQkFBS0MsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0JzSSxtQkFBdEQsRUFBMkUsdUJBQTNFLEVBQW9HekcsU0FBcEc7QUFFSTNCLGdCQUFBQSxXQUpOLGNBSXdCQyxpQ0FBcUJvSSx3QkFKN0MsY0FJeUUsS0FBSzNLLHdCQUFMLENBQThCeUMsS0FKdkcsY0FJZ0gsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFKOUksY0FJMEpKLFNBSjFKLHdCQUlpTCxLQUFLakUsd0JBQUwsQ0FBOEJrQixTQUovTTtBQUtRMkIsZ0JBQUFBLGFBTFIsR0FLd0JDLGtCQUFNQyxNQUFOLEVBTHhCO0FBTUUsbURBQWtCRixhQUFsQixFQUFpQztBQUMvQmlDLGtCQUFBQSxnQkFBZ0IsRUFBRSxDQUFDbkUsbUNBQXVCRixhQUF4QixDQURhO0FBRS9CdUMsa0JBQUFBLE9BQU8sRUFBRSxLQUFLL0MsYUFBTCxDQUFtQmdELDBCQUZHO0FBRy9CQyxrQkFBQUEsMEJBQTBCLEVBQUUsS0FBS2pELGFBQUwsQ0FBbUJrRCw0QkFBbkIsQ0FBZ0R5SDtBQUg3QyxpQkFBakM7QUFNUTVGLGdCQUFBQSxzQkFaVixHQVlnRnlGLDBCQVpoRixDQVlVekYsc0JBWlYsRUFZa0M2RixlQVpsQyxHQVlnRkosMEJBWmhGLENBWWtDSSxlQVpsQyxFQVltREMsZ0JBWm5ELEdBWWdGTCwwQkFaaEYsQ0FZbURLLGdCQVpuRCxFQVlxRUMsTUFackUsR0FZZ0ZOLDBCQVpoRixDQVlxRU0sTUFackU7QUFjUTFILGdCQUFBQSxjQWRSLEdBY29DN0Isc0JBQVUwRCxjQWQ5QztBQWVRckIsZ0JBQUFBLElBZlIsR0Flb0IsRUFmcEIsRUFld0I7O0FBQ3RCQSxnQkFBQUEsSUFBSSxDQUFDa0gsTUFBTCxHQUFjQSxNQUFkOztBQUVBLG9CQUFJL0Ysc0JBQUosRUFBNEI7QUFDMUIxQyxrQkFBQUEsV0FBVyxjQUFPQyxpQ0FBcUJ5SSw0QkFBNUIsY0FBNEQsS0FBS2hMLHdCQUFMLENBQThCeUMsS0FBMUYsY0FBbUcsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFBakksY0FBNklKLFNBQTdJLHdCQUFvSyxLQUFLakUsd0JBQUwsQ0FBOEJrQixTQUFsTSxDQUFYO0FBQ0FtQyxrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCcUUsc0JBQXhCLENBQWQsR0FBZ0VBLHNCQUFoRTtBQUNBM0Isa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QkYsYUFBeEIsQ0FBZCxHQUF1RCxLQUFLUixhQUFMLENBQW1CUSxhQUExRTtBQUNEOztBQUVELHFCQUFLMkUsa0JBQUwsQ0FBd0IsS0FBSzFFLFNBQTdCLEVBQXdDMkMsY0FBeEM7QUFDQSw0REFBcUIsS0FBSzNCLFdBQTFCLEVBQXVDMkIsY0FBdkM7O0FBRUEsb0JBQUl3SCxlQUFKLEVBQXFCO0FBQ25Cdkksa0JBQUFBLFdBQVcsMkJBQVg7QUFDRDs7QUFFRCxvQkFBSXdJLGdCQUFKLEVBQXNCO0FBQ3BCeEksa0JBQUFBLFdBQVcsNEJBQVg7QUFDRDs7QUFFS0ssZ0JBQUFBLEdBbkNSLGFBbUNpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQW5DL0MsU0FtQ3dETixXQW5DeEQ7QUFvQ1FJLGdCQUFBQSxNQXBDUixHQW9DaUIsTUFwQ2pCO0FBcUNRK0MsZ0JBQUFBLE9BckNSLEdBcUNzQztBQUNsQzVCLGtCQUFBQSxJQUFJLEVBQUpBLElBRGtDO0FBRWxDdEQsa0JBQUFBLE9BQU8sRUFBRThDLGNBRnlCO0FBR2xDWCxrQkFBQUEsTUFBTSxFQUFOQSxNQUhrQztBQUlsQ0Msa0JBQUFBLEdBQUcsRUFBSEEsR0FKa0M7QUFLbENZLGtCQUFBQSxPQUFPLDRCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDJFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3Q21IO0FBTDNELGlCQXJDdEM7QUFBQSxtREE2Q1MsSUFBSW5HLE9BQUo7QUFBQSw0R0FBWSxtQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHUG5ELDRCQUFBQSxPQUhPLEdBR0ttRCxRQUhMLENBR1BuRCxPQUhPOztBQUlmLDRCQUFBLE1BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBRU1vRCw0QkFBQUEseUJBTlMsR0FNbUI3QixLQUFLLENBQUM4QixtQkFOekI7O0FBT2YsNEJBQUEsTUFBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0I2SSxxQkFBdEQsRUFBNkUseUJBQTdFLEVBQXdHaEgsU0FBeEcsRUFBbUhQLFFBQW5ILEVBQTZIQyx5QkFBN0gsRUFBd0pyQixXQUF4SixFQUFxS0ksTUFBckssRUFBNktxQixTQUE3SyxFQUF3TEEsU0FBeEwsRUFBbU1WLGNBQW5NOztBQUVBcUMsNEJBQUFBLE9BQU8sR0FUUSxDQVVmOztBQVZlO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBWVQvQiw0QkFBQUEsMkJBWlMsR0FZbUI3QixLQUFLLENBQUM4QixtQkFaekI7O0FBYWYsNEJBQUEsTUFBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQjhJLGtCQUF2RCxFQUEyRSxzQkFBM0UsRUFBbUdqSCxTQUFuRyxFQUE4R0YsU0FBOUcsRUFBeUhKLDJCQUF6SCxFQUFvSnJCLFdBQXBKLEVBQWlLSSxNQUFqSyxpQkFBZ0xxQixTQUFoTCxFQUEyTFYsY0FBM0w7O0FBQ0EsZ0NBQUksY0FBTThILElBQU4sS0FBZTNKLHNCQUFVdUUscUJBQTdCLEVBQW9EO0FBQ2xEckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE1BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUNEdEIsNEJBQUFBLE1BQU0sZUFBTjs7QUFqQmU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQVo7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBN0NUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBbUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7Ozs7O2tIQUNFLG1CQUFvQ1QsU0FBcEMsRUFBdURtSCxvQ0FBdkQ7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDUXRKLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CaUosNkJBQXRELEVBQXFGLG1DQUFyRixFQUEwSHBILFNBQTFIO0FBRVFlLGdCQUFBQSxzQkFKVixHQUk2Q29HLG9DQUo3QyxDQUlVcEcsc0JBSlYsRUFJa0MrRixNQUpsQyxHQUk2Q0ssb0NBSjdDLENBSWtDTCxNQUpsQztBQUtRekksZ0JBQUFBLFdBTFIsY0FLMEJDLGlDQUFxQitJLHFDQUwvQyxjQUt3RixLQUFLdEwsd0JBQUwsQ0FBOEJ5QyxLQUx0SCxjQUsrSCxLQUFLekMsd0JBQUwsQ0FBOEJxRSxRQUw3SixjQUt5SzBHLE1BTHpLLGNBS21MOUcsU0FMbkwsd0JBSzBNLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBTHhPO0FBTVEyQixnQkFBQUEsYUFOUixHQU13QkMsa0JBQU1DLE1BQU4sRUFOeEI7QUFPRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRG9JO0FBSDdDLGlCQUFqQztBQU1NbEksZ0JBQUFBLGNBYlIsR0Fhb0M3QixzQkFBVTBELGNBYjlDOztBQWNFLG9CQUFJRixzQkFBSixFQUE0QjtBQUMxQjNCLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBQ0Q7O0FBRUQscUJBQUsyRSxrQkFBTCxDQUF3QixLQUFLMUUsU0FBN0IsRUFBd0MyQyxjQUF4QztBQUNBLDREQUFxQixLQUFLM0IsV0FBMUIsRUFBdUMyQixjQUF2QztBQUVNVixnQkFBQUEsR0F0QlIsYUFzQmlCLEtBQUszQyx3QkFBTCxDQUE4QjRDLE1BdEIvQyxTQXNCd0ROLFdBdEJ4RDtBQXVCUUksZ0JBQUFBLE1BdkJSLEdBdUJpQixLQXZCakI7QUF3QlErQyxnQkFBQUEsT0F4QlIsR0F3QnNDO0FBQ2xDbEYsa0JBQUFBLE9BQU8sRUFBRThDLGNBRHlCO0FBRWxDWCxrQkFBQUEsTUFBTSxFQUFOQSxNQUZrQztBQUdsQ0Msa0JBQUFBLEdBQUcsRUFBSEEsR0FIa0M7QUFJbENZLGtCQUFBQSxPQUFPLDZCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDZFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3QytIO0FBSjNELGlCQXhCdEM7QUFBQSxtREErQlMsSUFBSS9HLE9BQUo7QUFBQSw0R0FBWSxtQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHUG5ELDRCQUFBQSxPQUhPLEdBR0ttRCxRQUhMLENBR1BuRCxPQUhPOztBQUlmLDRCQUFBLE1BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBRU1vRCw0QkFBQUEseUJBTlMsR0FNbUI3QixLQUFLLENBQUM4QixtQkFOekI7O0FBT2YsZ0NBQUksbUJBQUFGLFFBQVEsQ0FBQ0csSUFBVCxrRUFBZTRILGFBQWYsTUFBaUMsSUFBckMsRUFBMkM7QUFDekMsOEJBQUEsTUFBSSxDQUFDeEosYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0JzSiwrQkFBdEQsRUFBdUYscUNBQXZGLEVBQThIekgsU0FBOUgsRUFBeUlQLFFBQXpJLEVBQW1KQyx5QkFBbkosRUFBOEtyQixXQUE5SyxFQUEyTEksTUFBM0wsRUFBbU1xQixTQUFuTSxFQUE4TUEsU0FBOU0sRUFBeU5WLGNBQXpOOztBQUVBcUMsOEJBQUFBLE9BQU8sQ0FBQ2hDLFFBQVEsQ0FBQ0csSUFBVixDQUFQO0FBQ0QsNkJBSkQsTUFJTztBQUNMLDhCQUFBLE1BQUksQ0FBQzVCLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CdUosNEJBQXRELEVBQW9GLG9GQUFwRixFQUEwSzFILFNBQTFLLEVBQXFMUCxRQUFyTCxFQUErTEMseUJBQS9MLEVBQTBOckIsV0FBMU4sRUFBdU9JLE1BQXZPLEVBQStPcUIsU0FBL08sRUFBMFBBLFNBQTFQLEVBQXFRVixjQUFyUTs7QUFFQXFCLDhCQUFBQSxNQUFNLENBQUMsSUFBSXBELEtBQUosQ0FBVSxvRkFBVixDQUFELENBQU47QUFDRCw2QkFmYyxDQWlCZjs7O0FBakJlO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBbUJUcUMsNEJBQUFBLDRCQW5CUyxHQW1CbUI3QixLQUFLLENBQUM4QixtQkFuQnpCOztBQXFCZiw0QkFBQSxNQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CdUosNEJBQXZELEVBQXFGLGtDQUFyRixFQUF5SDFILFNBQXpILEVBQW9JRixTQUFwSSxFQUErSUosNEJBQS9JLEVBQTBLckIsV0FBMUssRUFBdUxJLE1BQXZMLGlCQUFzTXFCLFNBQXRNLEVBQWlOVixjQUFqTjs7QUFFQSxnQ0FBSSxxREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE1BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUVELGdDQUFJLGNBQU0yQyxRQUFOLE9BQXFCLDRDQUF6QixFQUF1RTtBQUFFO0FBQ3ZFakQsOEJBQUFBLE9BQU8sQ0FBQyxFQUFELENBQVA7QUFDRCw2QkFGRCxNQUVPO0FBQ0xoQiw4QkFBQUEsTUFBTSxlQUFOO0FBQ0Q7O0FBL0JjO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQS9CVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQW1FQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7O2tIQUNFLG1CQUFvQ1QsU0FBcEMsRUFBdUQySCxnQkFBdkQ7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBaUZDLGdCQUFBQSxvQ0FBakYsaUVBQStKLEVBQS9KO0FBQ1EvSixnQkFBQUEsS0FEUixHQUNnQkMsYUFBTUMsS0FBTixFQURoQjtBQUVFLHFCQUFLQyxhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjBKLHFCQUF0RCxFQUE2RSwwQkFBN0UsRUFBeUc3SCxTQUF6RztBQUVJM0IsZ0JBQUFBLFdBSk4sY0FJd0JDLGlDQUFxQndKLDBCQUo3QyxjQUkyRSxLQUFLL0wsd0JBQUwsQ0FBOEJ5QyxLQUp6RyxjQUlrSCxLQUFLekMsd0JBQUwsQ0FBOEJxRSxRQUpoSixjQUk0SkosU0FKNUosd0JBSW1MLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBSmpOO0FBS1EyQixnQkFBQUEsYUFMUixHQUt3QkMsa0JBQU1DLE1BQU4sRUFMeEI7QUFNRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRDZJO0FBSDdDLGlCQUFqQztBQU1RaEgsZ0JBQUFBLHNCQVpWLEdBWXFDNkcsb0NBWnJDLENBWVU3RyxzQkFaVjtBQWFRM0IsZ0JBQUFBLGNBYlIsR0Fhb0M3QixzQkFBVTBELGNBYjlDOztBQWVFLG9CQUFJRixzQkFBSixFQUE0QjtBQUMxQjFDLGtCQUFBQSxXQUFXLGNBQU9DLGlDQUFxQjBKLDhCQUE1QixjQUE4RCxLQUFLak0sd0JBQUwsQ0FBOEJ5QyxLQUE1RixjQUFxRyxLQUFLekMsd0JBQUwsQ0FBOEJxRSxRQUFuSSxjQUErSUosU0FBL0ksd0JBQXNLLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBQXBNLENBQVg7QUFDQW1DLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBQ0Q7O0FBRUtrQyxnQkFBQUEsR0FyQlIsYUFxQmlCLEtBQUszQyx3QkFBTCxDQUE4QjRDLE1BckIvQyxTQXFCd0ROLFdBckJ4RDtBQXNCUUksZ0JBQUFBLE1BdEJSLEdBc0JpQixNQXRCakI7QUF1QlErQyxnQkFBQUEsT0F2QlIsR0F1QnNDO0FBQ2xDNUIsa0JBQUFBLElBQUksRUFBRTJFLElBQUksQ0FBQ0MsU0FBTCxDQUFlbUQsZ0JBQWYsQ0FENEI7QUFFbENyTCxrQkFBQUEsT0FBTyxFQUFFOEMsY0FGeUI7QUFHbENYLGtCQUFBQSxNQUFNLEVBQU5BLE1BSGtDO0FBSWxDQyxrQkFBQUEsR0FBRyxFQUFIQSxHQUprQztBQUtsQ1ksa0JBQUFBLE9BQU8sNkJBQUUsS0FBS3RELGFBQUwsQ0FBbUJ1RCxxQkFBckIsNkVBQThDLEtBQUt2RCxhQUFMLENBQW1Cd0Qsb0JBQW5CLENBQXdDdUk7QUFMM0QsaUJBdkJ0QztBQUFBLG1EQStCUyxJQUFJdkgsT0FBSjtBQUFBLDRHQUFZLG1CQUFPaUIsT0FBUCxFQUFnQmhCLE1BQWhCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBRVE3QixhQUFhLENBQUM0QyxPQUFELENBRnJCOztBQUFBO0FBRVQvQiw0QkFBQUEsUUFGUztBQUdQbkQsNEJBQUFBLE9BSE8sR0FHS21ELFFBSEwsQ0FHUG5ELE9BSE87O0FBSWYsNEJBQUEsT0FBSSxDQUFDb0YsZ0JBQUwsQ0FBc0JwRixPQUF0Qjs7QUFFTW9ELDRCQUFBQSx5QkFOUyxHQU1tQjdCLEtBQUssQ0FBQzhCLG1CQU56Qjs7QUFPZiw0QkFBQSxPQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjhKLHVCQUF0RCxFQUErRSw0QkFBL0UsRUFBNkdqSSxTQUE3RyxFQUF3SFAsUUFBeEgsRUFBa0lDLHlCQUFsSSxFQUE2SnJCLFdBQTdKLEVBQTBLSSxNQUExSyxFQUFrTHFCLFNBQWxMLEVBQTZMQSxTQUE3TCxFQUF3TVYsY0FBeE07O0FBRUFxQyw0QkFBQUEsT0FBTztBQVRRO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBWVQvQiw0QkFBQUEsNEJBWlMsR0FZbUI3QixLQUFLLENBQUM4QixtQkFaekI7O0FBYWYsNEJBQUEsT0FBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQitKLG9CQUF2RCxFQUE2RSx5QkFBN0UsRUFBd0dsSSxTQUF4RyxFQUFtSEYsU0FBbkgsRUFBOEhKLDRCQUE5SCxFQUF5SnJCLFdBQXpKLEVBQXNLSSxNQUF0SyxpQkFBcUxxQixTQUFyTCxFQUFnTVYsY0FBaE07O0FBQ0EsZ0NBQUkscURBQTRCN0Isc0JBQVV1RSxxQkFBdEMsQ0FBSixFQUFrRTtBQUNoRXJCLDhCQUFBQSxNQUFNLENBQUUsSUFBSXBELEtBQUosQ0FBVSxPQUFJLENBQUMwRSx1QkFBZixDQUFGLENBQU47QUFDRDs7QUFDRHRCLDRCQUFBQSxNQUFNLGVBQU47O0FBakJlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQS9CVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQXFEQTtBQUNGO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OytHQUNFLG1CQUFpQzBILGFBQWpDLEVBQXdEQywwQkFBeEQ7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUE0RkMsZ0JBQUFBLGlDQUE1RixpRUFBb0ssRUFBcEs7QUFDUXhLLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCOztBQUVFLG9CQUFJLEtBQUs3QixNQUFULEVBQWlCO0FBQ2YsdUJBQUtBLE1BQUwsQ0FBWW9NLEdBQVosQ0FBZ0JySyxtQkFBU0MsSUFBekIsRUFDRUMsMkJBQW9Cb0ssMEJBRHRCLEVBRUU7QUFBRUMsb0JBQUFBLGFBQWEsRUFBRUw7QUFBakIsbUJBRkYsRUFHRSxnQ0FIRjtBQUlEOztBQUNHOUosZ0JBQUFBLFdBUk4sY0FRd0JDLGlDQUFxQm1LLCtCQVI3QyxjQVFnRixLQUFLMU0sd0JBQUwsQ0FBOEJ5QyxLQVI5RyxjQVF1SDJKLGFBUnZIO0FBU1F2SixnQkFBQUEsYUFUUixHQVN3QkMsa0JBQU1DLE1BQU4sRUFUeEI7QUFVRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRHdKO0FBSDdDLGlCQUFqQztBQU1RM0gsZ0JBQUFBLHNCQWhCVixHQWdCZ0RzSCxpQ0FoQmhELENBZ0JVdEgsc0JBaEJWLEVBZ0JrQ2YsU0FoQmxDLEdBZ0JnRHFJLGlDQWhCaEQsQ0FnQmtDckksU0FoQmxDO0FBa0JRWixnQkFBQUEsY0FsQlIsR0FrQm9DN0Isc0JBQVUwRCxjQWxCOUM7O0FBb0JFLG9CQUFJRixzQkFBSixFQUE0QjtBQUMxQjFDLGtCQUFBQSxXQUFXLGNBQU9DLGlDQUFxQnFLLG1DQUE1QixjQUFtRSxLQUFLNU0sd0JBQUwsQ0FBOEJ5QyxLQUFqRyxjQUEwRzJKLGFBQTFHLENBQVg7QUFDQS9JLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBQ0E0QyxrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCa00sV0FBeEIsQ0FBZCxHQUFxRCxLQUFLN00sd0JBQUwsQ0FBOEJxRSxRQUFuRjtBQUNEOztBQUVELHFCQUFLZSxrQkFBTCxDQUF3QixLQUFLMUUsU0FBN0IsRUFBd0MyQyxjQUF4QztBQUNBLDREQUFxQixLQUFLM0IsV0FBMUIsRUFBdUMyQixjQUF2Qzs7QUFFQSxvQkFBSVksU0FBSixFQUFlO0FBQ2JaLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJzRCxTQUF4QixDQUFkLEdBQW1EQSxTQUFuRDtBQUNEOztBQUVLdEIsZ0JBQUFBLEdBbENSLGFBa0NpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQWxDL0MsU0FrQ3dETixXQWxDeEQ7QUFtQ1FJLGdCQUFBQSxNQW5DUixHQW1DaUIsTUFuQ2pCO0FBb0NRK0MsZ0JBQUFBLE9BcENSLEdBb0NzQztBQUNsQzVCLGtCQUFBQSxJQUFJLEVBQUUyRSxJQUFJLENBQUNDLFNBQUwsQ0FBZTRELDBCQUFmLENBRDRCO0FBRWxDOUwsa0JBQUFBLE9BQU8sRUFBRThDLGNBRnlCO0FBR2xDWCxrQkFBQUEsTUFBTSxFQUFOQSxNQUhrQztBQUlsQ0Msa0JBQUFBLEdBQUcsRUFBSEEsR0FKa0M7QUFLbENZLGtCQUFBQSxPQUFPLDZCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDZFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3Q2tKO0FBTDNELGlCQXBDdEM7QUFBQSxtREE0Q1MsSUFBSWxJLE9BQUo7QUFBQSw2R0FBWSxtQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHUEcsNEJBQUFBLElBSE8sR0FHV0gsUUFIWCxDQUdQRyxJQUhPLEVBR0R0RCxPQUhDLEdBR1dtRCxRQUhYLENBR0RuRCxPQUhDOztBQUlmLDRCQUFBLE9BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBRU1vRCw0QkFBQUEseUJBTlMsR0FNbUI3QixLQUFLLENBQUM4QixtQkFOekI7O0FBT2YsNEJBQUEsT0FBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0IwSyw0QkFBdEQsRUFBb0Ysa0NBQXBGLEVBQXdIN0ksU0FBeEgsRUFBbUlQLFFBQW5JLEVBQTZJQyx5QkFBN0ksRUFBd0tyQixXQUF4SyxFQUFxTEksTUFBckwsRUFBNkxxQixTQUE3TCxFQUF3TUEsU0FBeE0sRUFBbU5WLGNBQW5OOztBQUNBcUMsNEJBQUFBLE9BQU8sQ0FBQzdCLElBQUQsQ0FBUDtBQVJlO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBVVRGLDRCQUFBQSw0QkFWUyxHQVVtQjdCLEtBQUssQ0FBQzhCLG1CQVZ6Qjs7QUFXZiw0QkFBQSxPQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CMksseUJBQXZELEVBQWtGLCtCQUFsRixFQUFtSDlJLFNBQW5ILEVBQThIRixTQUE5SCxFQUF5SUosNEJBQXpJLEVBQW9LckIsV0FBcEssRUFBaUxJLE1BQWpMLGlCQUFnTXFCLFNBQWhNLEVBQTJNVixjQUEzTTs7QUFDQSxnQ0FBSSxxREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE9BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUNEdEIsNEJBQUFBLE1BQU0sZUFBTjs7QUFmZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBWjs7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkE1Q1Q7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTzs7Ozs7Ozs7QUFnRUE7QUFDRjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7OzhHQUNFLG1CQUFnQ1QsU0FBaEMsRUFBbUQ4RyxNQUFuRCxFQUFtRWlDLEtBQW5FO0FBQUE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBa0ZDLGdCQUFBQSxnQ0FBbEYsaUVBQXdKLEVBQXhKO0FBQ1FuTCxnQkFBQUEsS0FEUixHQUNnQkMsYUFBTUMsS0FBTixFQURoQjtBQUVFLHFCQUFLQyxhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQjhLLHdCQUF0RCxFQUFnRiw2QkFBaEYsRUFBK0dqSixTQUEvRztBQUVJM0IsZ0JBQUFBLFdBSk4sY0FJd0JDLGlDQUFxQjRLLDZCQUo3QyxjQUk4RXBDLE1BSjlFLGNBSXdGOUcsU0FKeEYsd0JBSStHLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBSjdJO0FBS1EyQixnQkFBQUEsYUFMUixHQUt3QkMsa0JBQU1DLE1BQU4sRUFMeEI7QUFNRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRGlLO0FBSDdDLGlCQUFqQztBQU1RcEksZ0JBQUFBLHNCQVpWLEdBWTZEaUksZ0NBWjdELENBWVVqSSxzQkFaVixFQVlrQ21CLHNCQVpsQyxHQVk2RDhHLGdDQVo3RCxDQVlrQzlHLHNCQVpsQztBQWFROUMsZ0JBQUFBLGNBYlIsR0Fhb0M3QixzQkFBVTBELGNBYjlDO0FBY0U3QixnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCME0sY0FBeEIsQ0FBZCxHQUF3RCxLQUFLck4sd0JBQUwsQ0FBOEJ5QyxLQUF0RjtBQUNBWSxnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCa00sV0FBeEIsQ0FBZCxHQUFxRCxLQUFLN00sd0JBQUwsQ0FBOEJxRSxRQUFuRjtBQUNBaEIsZ0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QjJNLGFBQXhCLENBQWQsR0FBdUROLEtBQXZEOztBQUVBLG9CQUFJLEtBQUtyTCxlQUFMLEtBQXlCQyx1QkFBZ0JDLEVBQXpDLElBQWdEc0Usc0JBQXNCLElBQUlBLHNCQUFzQixLQUFLdkUsdUJBQWdCQyxFQUF6SCxFQUE4SDtBQUM1SFMsa0JBQUFBLFdBQVcsY0FBT0MsaUNBQXFCZ0wsK0JBQTVCLGNBQStEeEMsTUFBL0QsY0FBeUU5RyxTQUF6RSx3QkFBZ0csS0FBS2pFLHdCQUFMLENBQThCa0IsU0FBOUgsQ0FBWDs7QUFDQSxzQkFBSThELHNCQUFKLEVBQTRCO0FBQzFCM0Isb0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QnFFLHNCQUF4QixDQUFkLEdBQWdFQSxzQkFBaEU7QUFDQTNCLG9CQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJGLGFBQXhCLENBQWQsR0FBdUQsS0FBS1IsYUFBTCxDQUFtQlEsYUFBMUU7QUFDQTZCLG9CQUFBQSxXQUFXLGNBQU9DLGlDQUFxQmlMLG1DQUE1QixjQUFtRXpDLE1BQW5FLGNBQTZFOUcsU0FBN0Usd0JBQW9HLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBQWxJLENBQVg7QUFDRDtBQUNGLGlCQVBELE1BUUssSUFBSThELHNCQUFKLEVBQTRCO0FBQy9CM0Isa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QnFFLHNCQUF4QixDQUFkLEdBQWdFQSxzQkFBaEU7QUFDQTNCLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJGLGFBQXhCLENBQWQsR0FBdUQsS0FBS1IsYUFBTCxDQUFtQlEsYUFBMUU7QUFDQTZCLGtCQUFBQSxXQUFXLGNBQU9DLGlDQUFxQmtMLGlDQUE1QixjQUFpRTFDLE1BQWpFLGNBQTJFOUcsU0FBM0Usd0JBQWtHLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBQWhJLENBQVg7QUFDRDs7QUFFRCxxQkFBS2tFLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDO0FBQ0EsNERBQXFCLEtBQUszQixXQUExQixFQUF1QzJCLGNBQXZDO0FBRU1WLGdCQUFBQSxHQW5DUixhQW1DaUIsS0FBSzNDLHdCQUFMLENBQThCNEMsTUFuQy9DLFNBbUN3RE4sV0FuQ3hEO0FBb0NRSSxnQkFBQUEsTUFwQ1IsR0FvQ2lCLEtBcENqQjtBQXFDUStDLGdCQUFBQSxPQXJDUixHQXFDc0M7QUFDbENsRixrQkFBQUEsT0FBTyxFQUFFOEMsY0FEeUI7QUFFbENYLGtCQUFBQSxNQUFNLEVBQU5BLE1BRmtDO0FBR2xDQyxrQkFBQUEsR0FBRyxFQUFIQSxHQUhrQztBQUlsQ1ksa0JBQUFBLE9BQU8sNkJBQUUsS0FBS3RELGFBQUwsQ0FBbUJ1RCxxQkFBckIsNkVBQThDLEtBQUt2RCxhQUFMLENBQW1Cd0Qsb0JBQW5CLENBQXdDMko7QUFKM0QsaUJBckN0QztBQUFBLG1EQTRDUyxJQUFJM0ksT0FBSjtBQUFBLDZHQUFZLG1CQUFPaUIsT0FBUCxFQUFnQmhCLE1BQWhCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBRVE3QixhQUFhLENBQUM0QyxPQUFELENBRnJCOztBQUFBO0FBRVQvQiw0QkFBQUEsUUFGUztBQUdUQyw0QkFBQUEseUJBSFMsR0FHbUI3QixLQUFLLENBQUM4QixtQkFIekI7QUFJUEMsNEJBQUFBLElBSk8sR0FJV0gsUUFKWCxDQUlQRyxJQUpPLEVBSUR0RCxPQUpDLEdBSVdtRCxRQUpYLENBSURuRCxPQUpDOztBQUtmLDRCQUFBLE9BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBQ0EsNEJBQUEsT0FBSSxDQUFDMEIsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0JzTCwwQkFBdEQsRUFBa0YsK0JBQWxGLEVBQW1IekosU0FBbkgsRUFBOEhQLFFBQTlILEVBQXdJQyx5QkFBeEksRUFBbUtyQixXQUFuSyxFQUFnTEksTUFBaEwsRUFBd0xxQixTQUF4TCxFQUFtTUEsU0FBbk0sRUFBOE1WLGNBQTlNOztBQUNBcUMsNEJBQUFBLE9BQU8sQ0FBQzdCLElBQUQsQ0FBUDtBQVBlO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBVVRGLDRCQUFBQSw0QkFWUyxHQVVtQjdCLEtBQUssQ0FBQzhCLG1CQVZ6Qjs7QUFXZiw0QkFBQSxPQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CdUwsdUJBQXZELEVBQWdGLDRCQUFoRixFQUE4RzFKLFNBQTlHLEVBQXlIRixTQUF6SCxFQUFvSUosNEJBQXBJLEVBQStKckIsV0FBL0osRUFBNEtJLE1BQTVLLGlCQUEyTHFCLFNBQTNMLEVBQXNNVixjQUF0TTs7QUFDQSxnQ0FBSSxxREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBQyxJQUFJcEQsS0FBSixDQUFVLE9BQUksQ0FBQzBFLHVCQUFmLENBQUQsQ0FBTjtBQUVEOztBQUNEdEIsNEJBQUFBLE1BQU0sZUFBTjs7QUFoQmU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQVo7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBNUNUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBaUVBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7OzsyR0FDRSxtQkFBNkJULFNBQTdCLEVBQWdEK0ksS0FBaEQsRUFBK0RZLGdCQUEvRDtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUF5RkMsZ0JBQUFBLDZCQUF6RixpRUFBeUosRUFBeko7QUFDUS9MLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CMEwsc0JBQXRELEVBQThFLDBCQUE5RSxFQUEwRzdKLFNBQTFHO0FBRUkzQixnQkFBQUEsV0FKTixjQUl3QkMsaUNBQXFCd0wsa0NBSjdDLGNBSW1GOUosU0FKbkYsd0JBSTBHLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBSnhJO0FBS1EyQixnQkFBQUEsYUFMUixHQUt3QkMsa0JBQU1DLE1BQU4sRUFMeEI7QUFNRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CaUMsa0JBQUFBLGdCQUFnQixFQUFFLENBQUNuRSxtQ0FBdUJGLGFBQXhCLENBRGE7QUFFL0J1QyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBRkc7QUFHL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRDZLO0FBSDdDLGlCQUFqQztBQU1RaEosZ0JBQUFBLHNCQVpWLEdBWXFDNkksNkJBWnJDLENBWVU3SSxzQkFaVjtBQWFRM0IsZ0JBQUFBLGNBYlIsR0Fhb0M3QixzQkFBVTBELGNBYjlDO0FBY0U3QixnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCME0sY0FBeEIsQ0FBZCxHQUF3RCxLQUFLck4sd0JBQUwsQ0FBOEJ5QyxLQUF0RjtBQUNBWSxnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCa00sV0FBeEIsQ0FBZCxHQUFxRCxLQUFLN00sd0JBQUwsQ0FBOEJxRSxRQUFuRjtBQUNBaEIsZ0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QjJNLGFBQXhCLENBQWQsR0FBdUROLEtBQXZEOztBQUVBLG9CQUFJaEksc0JBQUosRUFBNEI7QUFDMUIzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCcUUsc0JBQXhCLENBQWQsR0FBZ0VBLHNCQUFoRTtBQUNBM0Isa0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QkYsYUFBeEIsQ0FBZCxHQUF1RCxLQUFLUixhQUFMLENBQW1CUSxhQUExRTtBQUNBNkIsa0JBQUFBLFdBQVcsY0FBT0MsaUNBQXFCMEwsc0NBQTVCLGNBQXNFaEssU0FBdEUsd0JBQTZGLEtBQUtqRSx3QkFBTCxDQUE4QmtCLFNBQTNILENBQVg7QUFDRDs7QUFFRCxxQkFBS2tFLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDO0FBQ0EsNERBQXFCLEtBQUszQixXQUExQixFQUF1QzJCLGNBQXZDO0FBRU1WLGdCQUFBQSxHQTNCUixhQTJCaUIsS0FBSzNDLHdCQUFMLENBQThCNEMsTUEzQi9DLFNBMkJ3RE4sV0EzQnhEO0FBNEJRSSxnQkFBQUEsTUE1QlIsR0E0QmlCLE1BNUJqQjtBQTZCUStDLGdCQUFBQSxPQTdCUixHQTZCc0M7QUFDbEM1QixrQkFBQUEsSUFBSSxFQUFFMkUsSUFBSSxDQUFDQyxTQUFMLENBQWVtRixnQkFBZixDQUQ0QjtBQUVsQ3JOLGtCQUFBQSxPQUFPLEVBQUU4QyxjQUZ5QjtBQUdsQ1gsa0JBQUFBLE1BQU0sRUFBTkEsTUFIa0M7QUFJbENDLGtCQUFBQSxHQUFHLEVBQUhBLEdBSmtDO0FBS2xDWSxrQkFBQUEsT0FBTyw2QkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQiw2RUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0N1SztBQUwzRCxpQkE3QnRDO0FBQUEsbURBcUNTLElBQUl2SixPQUFKO0FBQUEsNkdBQVksbUJBQU9pQixPQUFQLEVBQWdCaEIsTUFBaEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FFUTdCLGFBQWEsQ0FBQzRDLE9BQUQsQ0FGckI7O0FBQUE7QUFFVC9CLDRCQUFBQSxRQUZTO0FBR1BuRCw0QkFBQUEsT0FITyxHQUdLbUQsUUFITCxDQUdQbkQsT0FITzs7QUFJZiw0QkFBQSxPQUFJLENBQUNvRixnQkFBTCxDQUFzQnBGLE9BQXRCOztBQUVNb0QsNEJBQUFBLHlCQU5TLEdBTW1CN0IsS0FBSyxDQUFDOEIsbUJBTnpCOztBQU9mLDRCQUFBLE9BQUksQ0FBQzNCLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9COEwsd0JBQXRELEVBQWdGLDRCQUFoRixFQUE4R2pLLFNBQTlHLEVBQXlIUCxRQUF6SCxFQUFtSUMseUJBQW5JLEVBQThKckIsV0FBOUosRUFBMktJLE1BQTNLLEVBQW1McUIsU0FBbkwsRUFBOExBLFNBQTlMLEVBQXlNVixjQUF6TTs7QUFDQXFDLDRCQUFBQSxPQUFPO0FBUlE7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFVVC9CLDRCQUFBQSw0QkFWUyxHQVVtQjdCLEtBQUssQ0FBQzhCLG1CQVZ6Qjs7QUFXZiw0QkFBQSxPQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBUzJELEtBQTVCLEVBQW1DekQsMkJBQW9CK0wscUJBQXZELEVBQThFLHlCQUE5RSxFQUF5R2xLLFNBQXpHLEVBQW9IRixTQUFwSCxFQUErSEosNEJBQS9ILEVBQTBKckIsV0FBMUosRUFBdUtJLE1BQXZLLGlCQUFzTHFCLFNBQXRMLEVBQWlNVixjQUFqTTs7QUFDQSxnQ0FBSSxxREFBNEI3QixzQkFBVXVFLHFCQUF0QyxDQUFKLEVBQWtFO0FBQ2hFckIsOEJBQUFBLE1BQU0sQ0FBRSxJQUFJcEQsS0FBSixDQUFVLE9BQUksQ0FBQzBFLHVCQUFmLENBQUYsQ0FBTjtBQUNEOztBQUNEdEIsNEJBQUFBLE1BQU0sZUFBTjs7QUFmZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQkFBWjs7QUFBQTtBQUFBO0FBQUE7QUFBQSxvQkFyQ1Q7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTzs7Ozs7Ozs7QUF5REE7QUFDRjtBQUNBO0FBQ0E7Ozs7O2dIQUNFLG1CQUFrQ1QsU0FBbEM7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFDUW5DLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CZ00sdUJBQXRELEVBQStFLDRCQUEvRSxFQUE2R25LLFNBQTdHOztBQUNBLG9CQUFJLENBQUNBLFNBQUwsRUFBZ0I7QUFDZEEsa0JBQUFBLFNBQVMsR0FBRyxtQkFBWjtBQUNEOztBQUVLM0IsZ0JBQUFBLFdBUFIsY0FPMEJDLGlDQUFxQjhMLGdDQVAvQyxjQU9tRixLQUFLck8sd0JBQUwsQ0FBOEJ5QyxLQVBqSDtBQVFRSSxnQkFBQUEsYUFSUixHQVF3QkMsa0JBQU1DLE1BQU4sRUFSeEI7QUFTRSxtREFBa0JGLGFBQWxCLEVBQWlDO0FBQy9CRyxrQkFBQUEsT0FBTyxFQUFFLEtBQUsvQyxhQUFMLENBQW1CZ0QsMEJBREc7QUFFL0JDLGtCQUFBQSwwQkFBMEIsRUFBRSxLQUFLakQsYUFBTCxDQUFtQmtELDRCQUFuQixDQUFnRG1MO0FBRjdDLGlCQUFqQztBQUtNakwsZ0JBQUFBLGNBZFIsR0Fjb0M3QixzQkFBVTBELGNBZDlDO0FBZUU3QixnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCME0sY0FBeEIsQ0FBZCxHQUF3RCxLQUFLck4sd0JBQUwsQ0FBOEJ5QyxLQUF0RjtBQUNBWSxnQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCc0QsU0FBeEIsQ0FBZCxHQUFtREEsU0FBbkQ7QUFFQSxxQkFBS21CLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDO0FBQ0EsNERBQXFCLEtBQUszQixXQUExQixFQUF1QzJCLGNBQXZDO0FBRU1WLGdCQUFBQSxHQXJCUixhQXFCaUIsS0FBSzNDLHdCQUFMLENBQThCNEMsTUFyQi9DLFNBcUJ3RE4sV0FyQnhEO0FBc0JRSSxnQkFBQUEsTUF0QlIsR0FzQmlCLEtBdEJqQjtBQXVCUStDLGdCQUFBQSxPQXZCUixHQXVCc0M7QUFDbENsRixrQkFBQUEsT0FBTyxFQUFFOEMsY0FEeUI7QUFFbENYLGtCQUFBQSxNQUFNLEVBQU5BLE1BRmtDO0FBR2xDQyxrQkFBQUEsR0FBRyxFQUFIQSxHQUhrQztBQUlsQ1ksa0JBQUFBLE9BQU8sNkJBQUUsS0FBS3RELGFBQUwsQ0FBbUJ1RCxxQkFBckIsNkVBQThDLEtBQUt2RCxhQUFMLENBQW1Cd0Qsb0JBQW5CLENBQXdDNks7QUFKM0QsaUJBdkJ0QztBQUFBLG1EQThCUyxJQUFJN0osT0FBSjtBQUFBLDZHQUFZLG1CQUFPaUIsT0FBUCxFQUFnQmhCLE1BQWhCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUNBRVE3QixhQUFhLENBQUM0QyxPQUFELENBRnJCOztBQUFBO0FBRVQvQiw0QkFBQUEsUUFGUztBQUdUQyw0QkFBQUEseUJBSFMsR0FHbUI3QixLQUFLLENBQUM4QixtQkFIekI7QUFJUEMsNEJBQUFBLElBSk8sR0FJRUgsUUFKRixDQUlQRyxJQUpPOztBQUtmLDRCQUFBLE9BQUksQ0FBQzVCLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CbU0seUJBQXRELEVBQWlGLDhCQUFqRixFQUFpSHRLLFNBQWpILEVBQTRIUCxRQUE1SCxFQUFzSUMseUJBQXRJLEVBQWlLckIsV0FBakssRUFBOEtJLE1BQTlLLEVBQXNMcUIsU0FBdEwsRUFBaU1BLFNBQWpNLEVBQTRNVixjQUE1TTs7QUFDQXFDLDRCQUFBQSxPQUFPLENBQUM3QixJQUFELENBQVA7QUFOZTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQVFURiw0QkFBQUEsNEJBUlMsR0FRbUI3QixLQUFLLENBQUM4QixtQkFSekI7O0FBU2YsNEJBQUEsT0FBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQm9NLHNCQUF2RCxFQUErRSwyQkFBL0UsRUFBNEd2SyxTQUE1RyxFQUF1SEYsU0FBdkgsRUFBa0lKLDRCQUFsSSxFQUE2SnJCLFdBQTdKLEVBQTBLSSxNQUExSyxpQkFBeUxxQixTQUF6TCxFQUFvTVYsY0FBcE07O0FBQ0EsZ0NBQUkscURBQTRCN0Isc0JBQVV1RSxxQkFBdEMsQ0FBSixFQUFrRTtBQUNoRXJCLDhCQUFBQSxNQUFNLENBQUUsSUFBSXBELEtBQUosQ0FBVSxPQUFJLENBQUMwRSx1QkFBZixDQUFGLENBQU47QUFDRDs7QUFDRHRCLDRCQUFBQSxNQUFNLGVBQU47O0FBYmU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQVo7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBOUJUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBZ0RBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7Ozs7NEhBQ0UsbUJBQThDVCxTQUE5QyxFQUFpRXdLLGdDQUFqRTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUEyR0MsZ0JBQUFBLG1DQUEzRyxpRUFBdUwsRUFBdkw7QUFDUTVNLGdCQUFBQSxLQURSLEdBQ2dCQyxhQUFNQyxLQUFOLEVBRGhCO0FBRUUscUJBQUtDLGFBQUwsQ0FBbUJDLG1CQUFTQyxJQUE1QixFQUFrQ0MsMkJBQW9CdU0sbUNBQXRELEVBQTJGLHlDQUEzRixFQUFzSTFLLFNBQXRJO0FBRUkzQixnQkFBQUEsV0FKTixjQUl3QkMsaUNBQXFCcU0saUNBSjdDLGNBSWtGLEtBQUs1Tyx3QkFBTCxDQUE4QnlDLEtBSmhILGNBSXlILEtBQUt6Qyx3QkFBTCxDQUE4QnFFLFFBSnZKLGNBSW1LSixTQUpuSztBQUtRcEIsZ0JBQUFBLGFBTFIsR0FLd0JDLGtCQUFNQyxNQUFOLEVBTHhCO0FBTUUsbURBQWtCRixhQUFsQixFQUFpQztBQUMvQmlDLGtCQUFBQSxnQkFBZ0IsRUFBRSxDQUFDbkUsbUNBQXVCRixhQUF4QixDQURhO0FBRS9CdUMsa0JBQUFBLE9BQU8sRUFBRSxLQUFLL0MsYUFBTCxDQUFtQmdELDBCQUZHO0FBRy9CQyxrQkFBQUEsMEJBQTBCLEVBQUUsS0FBS2pELGFBQUwsQ0FBbUJrRCw0QkFBbkIsQ0FBZ0QwTDtBQUg3QyxpQkFBakM7QUFNUTdKLGdCQUFBQSxzQkFaVixHQVlxQzBKLG1DQVpyQyxDQVlVMUosc0JBWlY7QUFhUTNCLGdCQUFBQSxjQWJSLEdBYW9DN0Isc0JBQVUwRCxjQWI5QztBQWNFN0IsZ0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QjBNLGNBQXhCLENBQWQsR0FBd0QsS0FBS3JOLHdCQUFMLENBQThCeUMsS0FBdEY7O0FBRUEsb0JBQUl1QyxzQkFBSixFQUE0QjtBQUMxQjNCLGtCQUFBQSxjQUFjLENBQUMxQyxtQ0FBdUJxRSxzQkFBeEIsQ0FBZCxHQUFnRUEsc0JBQWhFO0FBQ0EzQixrQkFBQUEsY0FBYyxDQUFDMUMsbUNBQXVCRixhQUF4QixDQUFkLEdBQXVELEtBQUtSLGFBQUwsQ0FBbUJRLGFBQTFFO0FBQ0E2QixrQkFBQUEsV0FBVyxjQUFPQyxpQ0FBcUJ1TSxxQ0FBNUIsY0FBcUUsS0FBSzlPLHdCQUFMLENBQThCeUMsS0FBbkcsY0FBNEcsS0FBS3pDLHdCQUFMLENBQThCcUUsUUFBMUksY0FBc0pKLFNBQXRKLENBQVg7QUFDRDs7QUFFRCxxQkFBS21CLGtCQUFMLENBQXdCLEtBQUsxRSxTQUE3QixFQUF3QzJDLGNBQXhDO0FBQ0EsNERBQXFCLEtBQUszQixXQUExQixFQUF1QzJCLGNBQXZDO0FBRUFmLGdCQUFBQSxXQUFXLElBQUksZ0JBQWdCZCxzQkFBVXVOLGdCQUF6QztBQUVNcE0sZ0JBQUFBLEdBM0JSLGFBMkJpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQTNCL0MsU0EyQndETixXQTNCeEQ7QUE0QlFJLGdCQUFBQSxNQTVCUixHQTRCaUIsTUE1QmpCO0FBNkJRK0MsZ0JBQUFBLE9BN0JSLEdBNkJzQztBQUNsQzVCLGtCQUFBQSxJQUFJLEVBQUUyRSxJQUFJLENBQUNDLFNBQUwsQ0FBZWdHLGdDQUFmLENBRDRCO0FBRWxDbE8sa0JBQUFBLE9BQU8sRUFBRThDLGNBRnlCO0FBR2xDWCxrQkFBQUEsTUFBTSxFQUFOQSxNQUhrQztBQUlsQ0Msa0JBQUFBLEdBQUcsRUFBSEEsR0FKa0M7QUFLbENZLGtCQUFBQSxPQUFPLDZCQUFFLEtBQUt0RCxhQUFMLENBQW1CdUQscUJBQXJCLDZFQUE4QyxLQUFLdkQsYUFBTCxDQUFtQndELG9CQUFuQixDQUF3Q29MO0FBTDNELGlCQTdCdEM7QUFBQSxtREFxQ1MsSUFBSXBLLE9BQUo7QUFBQSw2R0FBWSxtQkFBT2lCLE9BQVAsRUFBZ0JoQixNQUFoQjtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1DQUVRN0IsYUFBYSxDQUFDNEMsT0FBRCxDQUZyQjs7QUFBQTtBQUVUL0IsNEJBQUFBLFFBRlM7QUFHUG5ELDRCQUFBQSxPQUhPLEdBR0ttRCxRQUhMLENBR1BuRCxPQUhPOztBQUlmLDRCQUFBLE9BQUksQ0FBQ29GLGdCQUFMLENBQXNCcEYsT0FBdEI7O0FBRU1vRCw0QkFBQUEseUJBTlMsR0FNbUI3QixLQUFLLENBQUM4QixtQkFOekI7O0FBT2YsNEJBQUEsT0FBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVNDLElBQTVCLEVBQWtDQywyQkFBb0I0TSxxQ0FBdEQsRUFBNkYsMkNBQTdGLEVBQTBJL0ssU0FBMUksRUFBcUpQLFFBQXJKLEVBQStKQyx5QkFBL0osRUFBMExyQixXQUExTCxFQUF1TUksTUFBdk0sRUFBK01xQixTQUEvTSxFQUEwTkEsU0FBMU4sRUFBcU9WLGNBQXJPOztBQUNBcUMsNEJBQUFBLE9BQU87QUFSUTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQVVUL0IsNEJBQUFBLDRCQVZTLEdBVW1CN0IsS0FBSyxDQUFDOEIsbUJBVnpCOztBQVdmLDRCQUFBLE9BQUksQ0FBQzNCLGFBQUwsQ0FBbUJDLG1CQUFTMkQsS0FBNUIsRUFBbUN6RCwyQkFBb0I2TSxrQ0FBdkQsRUFBMkYsd0NBQTNGLEVBQXFJaEwsU0FBckksRUFBZ0pGLFNBQWhKLEVBQTJKSiw0QkFBM0osRUFBc0xyQixXQUF0TCxFQUFtTUksTUFBbk0saUJBQWtOcUIsU0FBbE4sRUFBNk5WLGNBQTdOOztBQUNBLGdDQUFJLHFEQUE0QjdCLHNCQUFVdUUscUJBQXRDLENBQUosRUFBa0U7QUFDaEVyQiw4QkFBQUEsTUFBTSxDQUFFLElBQUlwRCxLQUFKLENBQVUsT0FBSSxDQUFDMEUsdUJBQWYsQ0FBRixDQUFOO0FBQ0Q7O0FBQ0R0Qiw0QkFBQUEsTUFBTSxlQUFOOztBQWZlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLG1CQUFaOztBQUFBO0FBQUE7QUFBQTtBQUFBLG9CQXJDVDs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxPOzs7Ozs7OztBQXlEQTtBQUNGO0FBQ0E7Ozs7OytHQUNFLG1CQUFpQ1QsU0FBakMsRUFBb0RrQyxzQkFBcEQ7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBb0YrSSxnQkFBQUEsaUNBQXBGLGlFQUE0SixFQUE1Sjs7QUFBQSxzQkFFTSxDQUFDL0ksc0JBQUQsSUFBMkJBLHNCQUFzQixLQUFLdkUsdUJBQWdCQyxFQUY1RTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxtREFHVzRDLE9BQU8sQ0FBQ2lCLE9BQVIsRUFIWDs7QUFBQTtBQUtRNUQsZ0JBQUFBLEtBTFIsR0FLZ0JDLGFBQU1DLEtBQU4sRUFMaEI7QUFNVW1OLGdCQUFBQSxtQkFOVixHQU1rQ0QsaUNBTmxDLENBTVVDLG1CQU5WOztBQUFBLHNCQU9NLENBQUNoSixzQkFBRCxJQUEyQkEsc0JBQXNCLEtBQUt2RSx1QkFBZ0JDLEVBUDVFO0FBQUE7QUFBQTtBQUFBOztBQUFBLHNCQU93RixJQUFJUCxLQUFKLENBQVUsMENBQVYsQ0FQeEY7O0FBQUE7QUFRUWdCLGdCQUFBQSxXQVJSLGNBUTBCQyxpQ0FBcUI2TSx1QkFSL0MsY0FRMEVuTCxTQVIxRTtBQVNRcEIsZ0JBQUFBLGFBVFIsR0FTd0JDLGtCQUFNQyxNQUFOLEVBVHhCO0FBV1FNLGdCQUFBQSxjQVhSLEdBV29DN0Isc0JBQVUwRCxjQVg5QztBQVlFN0IsZ0JBQUFBLGNBQWMsQ0FBQzFDLG1DQUF1QjBNLGNBQXhCLENBQWQsR0FBd0QsS0FBS3JOLHdCQUFMLENBQThCeUMsS0FBdEY7O0FBQ0Esb0JBQUkwTSxtQkFBSixFQUF5QjtBQUN2QjlMLGtCQUFBQSxjQUFjLENBQUM3QixzQkFBVTJOLG1CQUFYLENBQWQsR0FBZ0RBLG1CQUFoRDtBQUNEOztBQUVELHFCQUFLL0osa0JBQUwsQ0FBd0IsS0FBSzFFLFNBQTdCLEVBQXdDMkMsY0FBeEM7QUFDQSw0REFBcUIsS0FBSzNCLFdBQTFCLEVBQXVDMkIsY0FBdkM7QUFFTVYsZ0JBQUFBLEdBcEJSLGFBb0JpQixLQUFLM0Msd0JBQUwsQ0FBOEI0QyxNQXBCL0MsU0FvQndETixXQXBCeEQ7QUFxQlFJLGdCQUFBQSxNQXJCUixHQXFCaUIsTUFyQmpCO0FBc0JRK0MsZ0JBQUFBLE9BdEJSLEdBc0JzQztBQUNsQ2xGLGtCQUFBQSxPQUFPLEVBQUU4QyxjQUR5QjtBQUVsQ1gsa0JBQUFBLE1BQU0sRUFBTkEsTUFGa0M7QUFHbENDLGtCQUFBQSxHQUFHLEVBQUhBLEdBSGtDO0FBSWxDWSxrQkFBQUEsT0FBTyw2QkFBRSxLQUFLdEQsYUFBTCxDQUFtQnVELHFCQUFyQiw2RUFBOEMsS0FBS3ZELGFBQUwsQ0FBbUJ3RCxvQkFBbkIsQ0FBd0M0TDtBQUozRCxpQkF0QnRDO0FBQUEsbURBNkJTLElBQUk1SyxPQUFKO0FBQUEsNkdBQVksbUJBQU9pQixPQUFQLEVBQWdCaEIsTUFBaEI7QUFBQTs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxtQ0FFUTdCLGFBQWEsQ0FBQzRDLE9BQUQsQ0FGckI7O0FBQUE7QUFFVC9CLDRCQUFBQSxRQUZTO0FBR1RDLDRCQUFBQSx5QkFIUyxHQUdtQjdCLEtBQUssQ0FBQzhCLG1CQUh6Qjs7QUFJZiw0QkFBQSxPQUFJLENBQUMzQixhQUFMLENBQW1CQyxtQkFBU0MsSUFBNUIsRUFBa0NDLDJCQUFvQmtOLDRCQUF0RCxFQUFvRixpQ0FBcEYsRUFBdUhyTCxTQUF2SCxFQUFrSVAsUUFBbEksRUFBNElDLHlCQUE1SSxFQUF1S3JCLFdBQXZLLEVBQW9MSSxNQUFwTCxFQUE0THFCLFNBQTVMLEVBQXVNQSxTQUF2TSxFQUFrTlYsY0FBbE47O0FBQ0FxQyw0QkFBQUEsT0FBTztBQUxRO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBT1QvQiw0QkFBQUEsNEJBUFMsR0FPbUI3QixLQUFLLENBQUM4QixtQkFQekI7O0FBUWYsNEJBQUEsT0FBSSxDQUFDM0IsYUFBTCxDQUFtQkMsbUJBQVMyRCxLQUE1QixFQUFtQ3pELDJCQUFvQm1OLHlCQUF2RCxFQUFrRiw4QkFBbEYsRUFBa0h0TCxTQUFsSCxFQUE2SEYsU0FBN0gsRUFBd0lKLDRCQUF4SSxFQUFtS3JCLFdBQW5LLEVBQWdMSSxNQUFoTCxpQkFBK0xxQixTQUEvTCxFQUEwTVYsY0FBMU07O0FBRUEsZ0NBQUkscURBQTRCN0Isc0JBQVV1RSxxQkFBdEMsQ0FBSixFQUFrRTtBQUNoRXJCLDhCQUFBQSxNQUFNLENBQUUsSUFBSXBELEtBQUosQ0FBVSxPQUFJLENBQUMwRSx1QkFBZixDQUFGLENBQU47QUFDRDs7QUFDRHRCLDRCQUFBQSxNQUFNLGVBQU47O0FBYmU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsbUJBQVo7O0FBQUE7QUFBQTtBQUFBO0FBQUEsb0JBN0JUOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE87Ozs7Ozs7O0FBK0NBO0FBQ0Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7V0FDRSx1QkFBc0I4SyxRQUF0QixFQUEwQ0Msa0JBQTFDLEVBQW1GQyxXQUFuRixFQUF3R3pMLFNBQXhHLEVBQTRIUCxRQUE1SCxFQUEySkMseUJBQTNKLEVBQStMckIsV0FBL0wsRUFBcU5JLE1BQXJOLEVBQXNPMEgsS0FBdE8sRUFBdVB1RixjQUF2UCxFQUE2UXRNLGNBQTdRLEVBQXlTO0FBQUE7O0FBQUU7QUFDelMsVUFBSSxDQUFDLEtBQUtsRCxNQUFWLEVBQWtCO0FBQ2hCO0FBQ0Q7O0FBQ0QsVUFBSWlLLEtBQUosRUFBVztBQUNUd0YsMkNBQWlCQyw2QkFBakIsQ0FBK0N6RixLQUEvQztBQUNEOztBQUVELFVBQUkwRix1QkFBdUIsR0FBRy9MLFNBQTlCOztBQUNBLFVBQUk0TCxjQUFKLEVBQW9CO0FBQ2xCRyxRQUFBQSx1QkFBdUIscUJBQVFILGNBQVIsQ0FBdkI7O0FBQ0EsWUFBSUcsdUJBQXVCLENBQUNoSSxpQkFBNUIsRUFBK0M7QUFDN0M4SCw2Q0FBaUJHLDRCQUFqQixDQUE4Q0QsdUJBQXVCLENBQUNoSSxpQkFBdEU7QUFDRDs7QUFDRCxZQUFJZ0ksdUJBQXVCLENBQUNFLGVBQTVCLEVBQTZDO0FBQzNDSiw2Q0FBaUJLLG9CQUFqQixDQUFzQ0gsdUJBQXVCLENBQUNFLGVBQTlEO0FBQ0Q7O0FBQ0RKLDJDQUFpQk0sZ0JBQWpCLENBQWtDSix1QkFBbEM7QUFDRDs7QUFFRCxVQUFJSyx1QkFBdUIsR0FBR3BNLFNBQTlCOztBQUNBLFVBQUlWLGNBQUosRUFBb0I7QUFDbEI4TSxRQUFBQSx1QkFBdUIscUJBQVE5TSxjQUFSLENBQXZCOztBQUNBdU0sMkNBQWlCUSxzQ0FBakIsQ0FBd0RELHVCQUF4RDtBQUNEOztBQUVELFVBQU1FLFVBQVUsR0FBRztBQUNqQkMsUUFBQUEsU0FBUyxFQUFFck0sU0FETTtBQUVqQnNNLFFBQUFBLE1BQU0sRUFBRTdNLFFBQUYsYUFBRUEsUUFBRix1QkFBRUEsUUFBUSxDQUFFRyxJQUFWLENBQWUwTSxNQUZOO0FBR2pCQyxRQUFBQSx5QkFBeUIsRUFBRTdNLHlCQUhWO0FBSWpCOE0sUUFBQUEsYUFBYSxFQUFFL00sUUFBRixhQUFFQSxRQUFGLHVCQUFFQSxRQUFRLENBQUVuRCxPQUFWLENBQWtCaUIsc0JBQVVrUCxhQUE1QixDQUpFO0FBS2pCQyxRQUFBQSxXQUFXLEVBQUVyTyxXQUxJO0FBTWpCc08sUUFBQUEsYUFBYSxFQUFFbE8sTUFORTtBQU9qQm1PLFFBQUFBLGtCQUFrQixFQUFFbk4sUUFBUSxHQUFHQSxRQUFRLENBQUNrRCxNQUFaLEdBQXFCd0QsS0FBSyxnQkFBSUEsS0FBRCxDQUFlMUcsUUFBbEIsOENBQUcsVUFBeUJrRCxNQUE1QixHQUFxQzdDLFNBUDFFO0FBT3FGO0FBQ3RHK00sUUFBQUEsZ0JBQWdCLEVBQUUxRyxLQVJEO0FBU2pCMkcsUUFBQUEsY0FBYyxFQUFFakIsdUJBVEM7QUFVakJrQixRQUFBQSxjQUFjLEVBQUViO0FBVkMsT0FBbkI7QUFZQSxXQUFLaFEsTUFBTCxDQUFZb00sR0FBWixDQUFnQmlELFFBQWhCLEVBQTBCQyxrQkFBMUIsRUFBOENZLFVBQTlDLEVBQTBEWCxXQUExRDtBQUNELEssQ0FFRDs7Ozs7OztpQ0EzeENtQjNQLEcsaUNBQ2dEO0FBQ2pFcUQsRUFBQUEsYUFBYSxFQUFFLEtBRGtEO0FBRWpFMkIsRUFBQUEsYUFBYSxFQUFFLEtBRmtEO0FBR2pFd0IsRUFBQUEsWUFBWSxFQUFFLEtBSG1EO0FBSWpFMkQsRUFBQUEsV0FBVyxFQUFFLEtBSm9EO0FBS2pFVSxFQUFBQSxZQUFZLEVBQUUsS0FMbUQ7QUFNakUxRCxFQUFBQSxxQkFBcUIsRUFBRSxLQU4wQztBQU9qRUcsRUFBQUEsd0JBQXdCLEVBQUUsS0FQdUM7QUFRakUyRSxFQUFBQSxzQkFBc0IsRUFBRSxLQVJ5QztBQVNqRVcsRUFBQUEsbUJBQW1CLEVBQUUsS0FUNEM7QUFVakVTLEVBQUFBLGtCQUFrQixFQUFFLEtBVjZDO0FBV2pFWSxFQUFBQSxlQUFlLEVBQUUsSUFYZ0Q7QUFZakVNLEVBQUFBLG9CQUFvQixFQUFFLElBWjJDO0FBYWpFTyxFQUFBQSxnQ0FBZ0MsRUFBRSxLQWIrQjtBQWNqRW5ILEVBQUFBLG9CQUFvQixFQUFFLEtBZDJDO0FBZWpFMkgsRUFBQUEsbUJBQW1CLEVBQUUsSUFmNEM7QUFnQmpFN0QsRUFBQUEsNkJBQTZCLEVBQUU7QUFoQmtDLEM7aUNBRGhEekwsRywwQkFvQnNDO0FBQ3ZEVSxFQUFBQSxhQUFhLEVBQUUsb0JBQVN3USxTQUFULENBQW1CLENBQW5CLEVBQXNCLENBQXRCLENBRHdDO0FBRXZEQyxFQUFBQSxzQkFBc0IsRUFBRSxFQUYrQjtBQUd2REMsRUFBQUEsdUNBQXVDLEVBQUUsS0FIYztBQUl2RDFLLEVBQUFBLHNCQUFzQixFQUFFLElBSitCO0FBS3ZEeEQsRUFBQUEsMEJBQTBCLEVBQUUsQ0FMMkI7QUFNdkRPLEVBQUFBLHFCQUFxQixFQUFFTyxTQU5nQztBQU92RE4sRUFBQUEsb0JBQW9CLEVBQUUxRCxHQUFHLENBQUNxUiwyQkFQNkI7QUFRdkQ5TCxFQUFBQSxpQ0FBaUMsRUFBRSxLQVJvQjtBQVN2RG5DLEVBQUFBLDRCQUE0QixFQUFFa08sNERBVHlCO0FBVXZEM1AsRUFBQUEsV0FBVyxFQUFFO0FBVjBDLEMiLCJzb3VyY2VSb290Ijoib2NzZGs6Ly8vIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgaGFzaCBmcm9tIFwiY3J5cHRvXCI7XG5cbmltcG9ydCB7IENoYW5uZWxJZCwgTGl2ZUNoYXRWZXJzaW9uLCBPQ1NES1RlbGVtZXRyeUV2ZW50LCBTREtFcnJvciB9IGZyb20gXCIuL0NvbW1vbi9FbnVtc1wiO1xuaW1wb3J0IGF4aW9zLCB7IEF4aW9zUmVxdWVzdENvbmZpZywgQXhpb3NSZXNwb25zZSB9IGZyb20gXCJheGlvc1wiO1xuXG5pbXBvcnQgeyBCcm93c2VySW5mbyB9IGZyb20gXCIuL1V0aWxzL0Jyb3dzZXJJbmZvXCI7XG5pbXBvcnQgQ29uc3RhbnRzIGZyb20gXCIuL0NvbW1vbi9Db25zdGFudHNcIjtcbmltcG9ydCB7IEN1c3RvbUNvbnRleHREYXRhIH0gZnJvbSBcIi4vVXRpbHMvQ3VzdG9tQ29udGV4dERhdGFcIjtcbmltcG9ydCB7IERldmljZUluZm8gfSBmcm9tIFwiLi9VdGlscy9EZXZpY2VJbmZvXCI7XG5pbXBvcnQgRmV0Y2hDaGF0VG9rZW5SZXNwb25zZSBmcm9tIFwiLi9Nb2RlbC9GZXRjaENoYXRUb2tlblJlc3BvbnNlXCI7XG5pbXBvcnQgSURhdGFNYXNraW5nSW5mbyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lEYXRhTWFza2luZ0luZm9cIjtcbmltcG9ydCBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSUdldFN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JT21uaWNoYW5uZWxDb25maWd1cmF0aW9uXCI7XG5pbXBvcnQgSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXNcIjtcbmltcG9ydCBJU0RLIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES1wiO1xuaW1wb3J0IElTREtDb25maWd1cmF0aW9uIGZyb20gXCIuL0ludGVyZmFjZXMvSVNES0NvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtc1wiXG5pbXBvcnQgSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJbml0Q29udGV4dCBmcm9tIFwiLi9Nb2RlbC9Jbml0Q29udGV4dFwiO1xuaW1wb3J0IExvY2FsZXMgZnJvbSBcIi4vQ29tbW9uL0xvY2FsZXNcIjtcbmltcG9ydCB7IExvZ0xldmVsIH0gZnJvbSBcIi4vTW9kZWwvTG9nTGV2ZWxcIjtcbmltcG9ydCB7IExvZ2dpbmdTYW5pdGl6ZXIgfSBmcm9tIFwiLi9VdGlscy9Mb2dnaW5nU2FuaXRpemVyXCI7XG5pbXBvcnQgT0NTREtMb2dnZXIgZnJvbSBcIi4vQ29tbW9uL09DU0RLTG9nZ2VyXCI7XG5pbXBvcnQgeyBPU0luZm8gfSBmcm9tIFwiLi9VdGlscy9PU0luZm9cIjtcbmltcG9ydCBPbW5pY2hhbm5lbEVuZHBvaW50cyBmcm9tIFwiLi9Db21tb24vT21uaWNoYW5uZWxFbmRwb2ludHNcIjtcbmltcG9ydCBPbW5pY2hhbm5lbEhUVFBIZWFkZXJzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEhUVFBIZWFkZXJzXCI7XG5pbXBvcnQgT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciBmcm9tIFwiLi9JbnRlcmZhY2VzL09tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXJcIjtcbmltcG9ydCBRdWV1ZUF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9RdWV1ZUF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdEF2YWlsYWJpbGl0eSBmcm9tIFwiLi9Nb2RlbC9SZWNvbm5lY3RBdmFpbGFiaWxpdHlcIjtcbmltcG9ydCBSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIGZyb20gXCIuL01vZGVsL1JlY29ubmVjdE1hcHBpbmdSZWNvcmRcIjtcbmltcG9ydCB7IFJlcXVlc3RUaW1lb3V0Q29uZmlnIH0gZnJvbSBcIi4vQ29tbW9uL1JlcXVlc3RUaW1lb3V0Q29uZmlnXCI7XG5pbXBvcnQgeyBTdHJpbmdNYXAgfSBmcm9tIFwiLi9Db21tb24vTWFwcGluZ3NcIjtcbmltcG9ydCB7IFRpbWVyIH0gZnJvbSBcIi4vVXRpbHMvVGltZXJcIjtcbmltcG9ydCB7IGFkZE9jVXNlckFnZW50SGVhZGVyIH0gZnJvbSBcIi4vVXRpbHMvaHR0cEhlYWRlcnNVdGlsc1wiO1xuaW1wb3J0IGF4aW9zUmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL2F4aW9zUmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyBjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludCB9IGZyb20gXCIuL1V0aWxzL2VuZHBvaW50c0NyZWF0b3JzXCI7XG5pbXBvcnQgaXNFeHBlY3RlZEF4aW9zRXJyb3IgZnJvbSBcIi4vVXRpbHMvaXNFeHBlY3RlZEF4aW9zRXJyb3JcIjtcbmltcG9ydCBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlciBmcm9tIFwiLi9VdGlscy9TZXNzaW9uSW5pdFJldHJ5SGFuZGxlclwiO1xuaW1wb3J0IHsgdXVpZHY0IH0gZnJvbSBcIi4vVXRpbHMvdXVpZFwiO1xuaW1wb3J0IHsgd2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MgfSBmcm9tIFwiLi9VdGlscy93YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnc1wiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTREsgaW1wbGVtZW50cyBJU0RLIHtcbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnOiBSZXF1ZXN0VGltZW91dENvbmZpZyA9IHtcbiAgICBnZXRDaGF0Q29uZmlnOiAzMDAwMCxcbiAgICBnZXRMV0lEZXRhaWxzOiAxNTAwMCxcbiAgICBnZXRDaGF0VG9rZW46IDE1MDAwLFxuICAgIHNlc3Npb25Jbml0OiAxNTAwMCxcbiAgICBzZXNzaW9uQ2xvc2U6IDE1MDAwLFxuICAgIGdldFJlY29ubmVjdGFibGVDaGF0czogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0QXZhaWxhYmlsaXR5OiAxNTAwMCxcbiAgICBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlOiAxNTAwMCxcbiAgICBnZXRTdXJ2ZXlJbnZpdGVMaW5rOiAxNTAwMCxcbiAgICBnZXRDaGF0VHJhbnNjcmlwdHM6IDMwMDAwLFxuICAgIGVtYWlsVHJhbnNjcmlwdDogNTAwMCxcbiAgICBmZXRjaERhdGFNYXNraW5nSW5mbzogNTAwMCxcbiAgICBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdDogMTUwMDAsXG4gICAgZ2V0QWdlbnRBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHNlbmRUeXBpbmdJbmRpY2F0b3I6IDUwMDAsXG4gICAgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQ6IDE1MDAwXG4gIH07XG5cbiAgcHJpdmF0ZSBzdGF0aWMgZGVmYXVsdENvbmZpZ3VyYXRpb246IElTREtDb25maWd1cmF0aW9uID0ge1xuICAgIGF1dGhDb2RlTm9uY2U6IHV1aWR2NCgpLnN1YnN0cmluZygwLCA4KSxcbiAgICBnZXRDaGF0VG9rZW5SZXRyeUNvdW50OiAxMCxcbiAgICBnZXRDaGF0VG9rZW5UaW1lQmV0d2VlblJldHJpZXNPbkZhaWx1cmU6IDEwMDAwLFxuICAgIGdldENoYXRUb2tlblJldHJ5T240Mjk6IHRydWUsXG4gICAgbWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmU6IDUsXG4gICAgZGVmYXVsdFJlcXVlc3RUaW1lb3V0OiB1bmRlZmluZWQsXG4gICAgcmVxdWVzdFRpbWVvdXRDb25maWc6IFNESy5kZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWcsXG4gICAgdXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtOiBmYWxzZSxcbiAgICB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnOiB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyxcbiAgICBvY1VzZXJBZ2VudDogW11cbiAgfTtcblxuICBsaXZlQ2hhdFZlcnNpb246IG51bWJlcjtcbiAgc2Vzc2lvbklkPzogc3RyaW5nO1xuICBvY1VzZXJBZ2VudDogc3RyaW5nW107XG4gIEhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlID0gYCR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck5hbWV9OiAke1NES0Vycm9yLkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlfWA7XG5cblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb246IElPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24sIHByaXZhdGUgY29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb24sIHByaXZhdGUgbG9nZ2VyPzogT0NTREtMb2dnZXIpIHtcbiAgICAvLyBTZXRzIHRvIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpZiBwYXNzZWQgY29uZmlndXJhdGlvbiBpcyBlbXB0eSBvciBpcyBub3QgYW4gb2JqZWN0XG4gICAgaWYgKCFPYmplY3Qua2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24pLmxlbmd0aCB8fCB0eXBlb2YgKGNvbmZpZ3VyYXRpb24pICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb247XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgU0RLIGNvbmZpZ1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbikpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW2Ake2tleX1gXSA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbltgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgaW5kaXZpZHVhbCBlbmRwb2ludFRpbWVvdXQgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0pKSB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlndXJhdGlvbltcInJlcXVlc3RUaW1lb3V0Q29uZmlnXCJdLmhhc093blByb3BlcnR5KGtleSkpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgICAgdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl1bYCR7a2V5fWBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGNoYW5uZWxJZFxuICAgIGNvbnN0IHsgY2hhbm5lbElkIH0gPSBvbW5pY2hhbm5lbENvbmZpZ3VyYXRpb247XG4gICAgaWYgKCFPYmplY3QudmFsdWVzKENoYW5uZWxJZCkuaW5jbHVkZXMoY2hhbm5lbElkIGFzIENoYW5uZWxJZCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjaGFubmVsSWRgKTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBPQyBjb25maWdcbiAgICBjb25zdCBjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycyA9IE9iamVjdC5rZXlzKG9tbmljaGFubmVsQ29uZmlndXJhdGlvbik7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgQ29uc3RhbnRzLnJlcXVpcmVkT21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycykge1xuICAgICAgaWYgKCFjdXJyZW50T21uaWNoYW5uZWxDb25maWd1cmF0aW9uUGFyYW1ldGVycy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyAnJHtrZXl9JyBpbiBPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9jVXNlckFnZW50ID0gdGhpcy5jb25maWd1cmF0aW9uLm9jVXNlckFnZW50O1xuICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gTGl2ZUNoYXRWZXJzaW9uLlYyO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTENXIEZDUyBEZXRhaWxzIG9mIHRoZSBPcmcuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0TGN3RmNzRGV0YWlscygpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU1NUQVJURUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdGFydGVkXCIsIFwiXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGN3RmNzRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1VDQ0VFREVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgc3VjY2VlZGVkXCIsIFwiXCIsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTENXRkNTREVUQUlMU0ZBSUxFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIGZhaWxlZFwiLCBcIlwiLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIGNoYXQgY29uZmlnLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIHRvIGdldCBjaGF0IGNvbmZpZyAoT3B0aW9uYWwpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRDb25maWcocmVxdWVzdElkOiBzdHJpbmcsIGJ5cGFzc0NhY2hlID0gZmFsc2UpOiBQcm9taXNlPG9iamVjdCB8IHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR0ZTVEFSVEVELCBcIkdldCBDaGF0IGNvbmZpZyBzdGFydGVkXCIsIHJlcXVlc3RJZCk7XG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0Q29uZmlnUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0/cmVxdWVzdElkPSR7cmVxdWVzdElkfSZjaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgfSk7XG5cbiAgICBsZXQgcmVxdWVzdEhlYWRlcnMgPSB7fTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAoYnlwYXNzQ2FjaGUpIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzID0geyAuLi5Db25zdGFudHMuYnlwYXNzQ2FjaGVIZWFkZXJzLCAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2UuZ2V0KHVybCwge1xuICAgICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdENvbmZpZ1xuICAgICAgfSk7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG5cbiAgICAgIGlmIChkYXRhLkxpdmVDaGF0VmVyc2lvbikge1xuICAgICAgICB0aGlzLmxpdmVDaGF0VmVyc2lvbiA9IGRhdGEuTGl2ZUNoYXRWZXJzaW9uO1xuICAgICAgfVxuXG4gICAgICBkYXRhLmhlYWRlcnMgPSB7fTtcbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzICYmIHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdKSB7XG4gICAgICAgIGRhdGEuaGVhZGVyc1tcImRhdGVcIl0gPSByZXNwb25zZS5oZWFkZXJzW1wiZGF0ZVwiXTtcbiAgICAgIH1cbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdTVUNDRUVERUQsIFwiR2V0IENoYXQgY29uZmlnIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRkFJTEVELCBcIkdldCBDaGF0IGNvbmZpZyBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgTFdJIGRldGFpbHMuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBMV0kgRGV0YWlscy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMV0lEZXRhaWxzKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM6IElHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU1NUQVJURUQsIFwiR2V0IExXSSBEZXRhaWxzIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICAvLyBjb25zdHJ1Y3QgYSBlbmRwb2ludCBmb3IgYW5vbnltb3VzIGNoYXRzIHRvIGdldCBMV0kgRGV0YWlsc1xuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRMV0lEZXRhaWxzXG4gICAgfSk7XG5cbiAgICAvLyBFeHRyYWN0IGF1dGggdG9rZW4gYW5kIHJlY29ubmVjdCBpZCBmcm9tIG9wdGlvbmFsIHBhcmFtXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZWNvbm5lY3RJZCB9ID0gZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICAvLyB1cGRhdGVkIGF1dGggZW5kcG9pbnQgZm9yIGF1dGhlbnRpY2F0ZWQgY2hhdHMgYW5kIGFkZCBhdXRoIHRva2VuIGluIGhlYWRlclxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhMaXZlV29ya0l0ZW1EZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH07XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRMV0lEZXRhaWxzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1VDQ0VFREVELCBcIkdldCBMV0kgRGV0YWlscyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNGQUlMRUQsIFwiR2V0IExXSSBEZXRhaWxzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEZldGNoZXMgdGhlIGNoYXQgdG9rZW4gZnJvbSBPbW5pY2hhbm5lbCB0byBqb2luIFQxIHRocmVhZC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3IgZ2V0Y2hhdHRva2VuIChPcHRpb25hbCkuXG4gICAqIEBwYXJhbSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IGNoYXQgdG9rZW4uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdFRva2VuKHJlcXVlc3RJZDogc3RyaW5nLCBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtczogSUdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zID0ge30sIGN1cnJlbnRSZXRyeUNvdW50OiBudW1iZXIgPSAwKTogUHJvbWlzZTxGZXRjaENoYXRUb2tlblJlc3BvbnNlPiB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWluZmVycmFibGUtdHlwZXNcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY3VycmVudExpdmVDaGF0VmVyc2lvbiwgcmVmcmVzaFRva2VuIH0gPSBnZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcztcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVEFSVEVELCBcIkdldCBDaGF0IFRva2VuIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGlmIChjdXJyZW50UmV0cnlDb3VudCA8IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjdXJyZW50UmV0cnlDb3VudGApO1xuICAgIH1cblxuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IGVuZHBvaW50ID0gY3JlYXRlR2V0Q2hhdFRva2VuRW5kcG9pbnQoY3VycmVudExpdmVDaGF0VmVyc2lvbiBhcyBMaXZlQ2hhdFZlcnNpb24gfHwgdGhpcy5saXZlQ2hhdFZlcnNpb24sIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gPyB0cnVlIDogZmFsc2UpO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtlbmRwb2ludH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG5cbiAgICBpZiAocmVmcmVzaFRva2VuKSB7XG4gICAgICBwYXJhbXMucmVmcmVzaFRva2VuID0gJ3RydWUnXG4gICAgfVxuXG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICBwYXJhbXMuc2lnID0gcmVjb25uZWN0SWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgcGFyYW1zLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IChjdXJyZW50UmV0cnlDb3VudCA+IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSkgPyBjdXJyZW50UmV0cnlDb3VudCA6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHJldHJ5T240Mjk6IHRoaXMuY29uZmlndXJhdGlvbi5nZXRDaGF0VG9rZW5SZXRyeU9uNDI5LFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUb2tlblxuICAgIH0pO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoaGVhZGVycykge1xuICAgICAgICAgIGlmIChoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgICAgIHRoaXMuc2Vzc2lvbklkID0gaGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9jU2Vzc2lvbklkLnRvTG93ZXJDYXNlKCldO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJlc29sdmVzIG9ubHkgaWYgaXQgY29udGFpbnMgY2hhdCB0b2tlbiByZXNwb25zZSB3aGljaCBvbmx5IGhhcHBlbnMgb24gc3RhdHVzIDIwMFxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIGNoZWNrIGlmIGRhdGEgaXMgZW1wdHksIGlmIHNvLCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJFbXB0eSBkYXRhIHJlY2VpdmVkIGZyb20gZ2V0Q2hhdFRva2VuXCIpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBkYXRhLnJlcXVlc3RJZCA9IHJlcXVlc3RJZDtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5TVUNDRUVERUQsIFwiR2V0IENoYXQgVG9rZW4gc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBObyBjb250ZW50IGZvciByZWNvbm5lY3QgY2hhdCBjYXNlIHNob3VsZG4ndCBiZSByZXRyaWVkLlxuICAgICAgICBpZiAocmVjb25uZWN0SWQgJiYgcmVzcG9uc2Uuc3RhdHVzID09PSBDb25zdGFudHMubm9Db250ZW50U3RhdHVzQ29kZSkge1xuICAgICAgICAgIHJlamVjdChyZXNwb25zZSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRPS0VORkFJTEVELCBcIkdldCBDaGF0IFRva2VuIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gICAqIEBwYXJhbSByZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMgTWFuZGF0ZSBwYXJhbWV0ZXJzIGZvciBnZXQgcmVjb25uZWN0YWJsZSBjaGF0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRSZWNvbm5lY3RhYmxlQ2hhdHMocmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zOiBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zKTogUHJvbWlzZTxSZWNvbm5lY3RNYXBwaW5nUmVjb3JkIHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcztcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFMsIFwiR2V0IFJlY29ubmVjdGFibGUgY2hhdCBTdGFydGVkXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIHJlY29ubmVjdGFibGUgY2hhdHMgcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFMsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgU3VjY2VlZGVkIGFuZCBvbGQgc2Vzc2lvbiByZXR1cm5lZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgaW4gdGhlIG9sZCBzZXNzaW9ucyBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTLCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdEF2YWlsYWJpbGl0eShyZWNvbm5lY3RJZDogc3RyaW5nKTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWSwgXCJHZXQgUmVjb25uZWN0YWJsZSBhdmFpbGFiaWxpdHkgU3RhcnRlZFwiKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZWNvbm5lY3RJZH1gO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFJlY29ubmVjdEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2U7XG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZLCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IHN1Y2NlZWRlZFwiLCB1bmRlZmluZWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgLy8gTm8gZGF0YSBmb3VuZCBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuV0FSTiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFksIFwiR2V0IFJlY29ubmVjdCBhdmFpbGFiaWxpdHkgZGlkbid0IHNlbmQgYW55IHZhbGlkIGRhdGFcIiwgdW5kZWZpbmVkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZLCBcIkdldCBSZWNvbm5lY3QgQXZhaWxhYmlsaXR5IGZhaWxlZFwiLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZXNzaW9uIGluaXQuXG4gICAqIEBwYXJhbSBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGluaXQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0QWdlbnRBdmFpbGFiaWxpdHkocmVxdWVzdElkOiBzdHJpbmcsIHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM6IElHZXRRdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPFF1ZXVlQXZhaWxhYmlsaXR5PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1RBUlRFRCwgXCJHZXQgYWdlbnQgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkdldEFnZW50QXZhaWxhYmlsaXR5UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD1sY3dgO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpbml0Q29udGV4dCwgZ2V0Q29udGV4dCB9ID0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgY29uc3QgY2FjaE9iaiA9IHtcbiAgICAgIFwib3JnSWRcIjogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQsXG4gICAgICBcIndpZGdldElkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkXG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgY29uc3QgdGVtcEFyciA9IEN1c3RvbUNvbnRleHREYXRhLnNvcnQoZGF0YS5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJjdXN0b21Db250ZXh0XCI6IHRlbXBBcnIgfSk7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEucG9ydGFsY29udGFjdGlkKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGNhY2hPYmosIHsgXCJwb3J0YWxjb250YWN0aWRcIjogZGF0YS5wb3J0YWxjb250YWN0aWQgfSk7XG4gICAgfVxuXG4gICAgZGF0YS5jYWNoZUtleSA9IGhhc2guY3JlYXRlSGFzaCgnc2hhMjU2JykudXBkYXRlKEpTT04uc3RyaW5naWZ5KGNhY2hPYmopKS5kaWdlc3QoJ2hleCcpLnRvU3RyaW5nKCk7XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICBpZiAoIWRhdGEubG9jYWxlKSB7XG4gICAgICBkYXRhLmxvY2FsZSA9IENvbnN0YW50cy5kZWZhdWx0TG9jYWxlO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIGxvY2FsZVxuICAgIGlmIChkYXRhLmxvY2FsZSAmJiAhTG9jYWxlcy5zdXBwb3J0ZWRMb2NhbGVzLmluY2x1ZGVzKGRhdGEubG9jYWxlKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbG9jYWxlOiAnJHtkYXRhLmxvY2FsZX0nYCkpO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG5cbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRBZ2VudEF2YWlsYWJpbGl0eVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQUdFTlRBVkFJTEFCSUxJVFlGQUlMRUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3RhcnRzIGEgc2Vzc2lvbiB0byBvbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25Jbml0KHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zOiBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1RBUlRFRCwgXCJTZXNzaW9uIEluaXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBjb25zdCByZXRyeU9uNDI5ID0gdHJ1ZTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkluaXQsXG4gICAgICBzaG91bGRSZXRyeTogKGVycm9yKSA9PiBzZXNzaW9uSW5pdFJldHJ5SGFuZGxlcihlcnJvciwgcmV0cnlPbjQyOSksXG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyByZWNvbm5lY3RJZCwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uSW5pdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGE6IEluaXRDb250ZXh0ID0gaW5pdENvbnRleHQgfHwge307XG5cbiAgICBpZiAoZ2V0Q29udGV4dCAmJiAhd2luZG93LmRvY3VtZW50KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBnZXRDb250ZXh0IGlzIG9ubHkgc3VwcG9ydGVkIG9uIHdlYiBicm93c2Vyc2ApKTtcbiAgICB9XG5cbiAgICBpZiAoZ2V0Q29udGV4dCkge1xuICAgICAgZGF0YS5icm93c2VyID0gQnJvd3NlckluZm8uZ2V0QnJvd3Nlck5hbWUoKTtcbiAgICAgIGRhdGEuZGV2aWNlID0gRGV2aWNlSW5mby5nZXREZXZpY2VUeXBlKCk7XG4gICAgICBkYXRhLm9yaWdpbnVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuICAgICAgZGF0YS5vcyA9IE9TSW5mby5nZXRPc1R5cGUoKTtcbiAgICB9XG5cbiAgICAvLyBTZXQgZGVmYXVsdCBsb2NhbGUgaWYgbG9jYWxlIGlzIGVtcHR5XG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25Jbml0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRTVUNDRUVERUQsIFwiU2Vzc2lvbiBJbml0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIGRhdGEsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVEZBSUxFRCwgXCJTZXNzaW9uIEluaXQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgZGF0YSwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBjbG9zZSAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gY2xvc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2Vzc2lvbkNsb3NlKHJlcXVlc3RJZDogc3RyaW5nLCBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtczogSVNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFU1RBUlRFRCwgXCJTZXNzaW9uIENsb3NlIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc2Vzc2lvbkNsb3NlXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGlzUmVjb25uZWN0Q2hhdCwgaXNQZXJzaXN0ZW50Q2hhdCwgY2hhdElkIH0gPSBzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgY29uc3QgZGF0YTogYW55ID0ge307IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGRhdGEuY2hhdElkID0gY2hhdElkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlc3Npb25DbG9zZVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKGlzUmVjb25uZWN0Q2hhdCkge1xuICAgICAgcmVxdWVzdFBhdGggKz0gYCZpc1JlY29ubmVjdENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgaWYgKGlzUGVyc2lzdGVudENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNQZXJzaXN0ZW50Q2hhdD10cnVlYDtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGEsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNVQ0NFRURFRCwgXCJTZXNzaW9uIENsb3NlIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VGQUlMRUQsIFwiU2Vzc2lvbiBjbG9zZSBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGVycm9yLmNvZGUgPT09IENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZSB0aGUgYXV0aCBjaGF0IHJlY29yZCBleGlzdHMgaW4gZGF0YWJhc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZCAoc2FtZSByZXF1ZXN0IGlkIGZvciBzZXNzaW9uIGluaXQpLlxuICAgKiBAcGFyYW0gdmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQocmVxdWVzdElkOiBzdHJpbmcsIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcyk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRTVEFSVEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjaGF0SWQgfSA9IHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFZhbGlkYXRlQXV0aENoYXRNYXBSZWNvcmRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnZhbGlkYXRlQXV0aENoYXRSZWNvcmRUaW1lb3V0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgaWYgKHJlc3BvbnNlLmRhdGE/LmF1dGhDaGF0RXhpc3QgPT09IHRydWUpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1VDQ0VFREVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZXNvbHZlKHJlc3BvbnNlLmRhdGEpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBGYWlsZWQuIFJlY29yZCBpcyBub3QgZm91bmQgb3IgcmVxdWVzdCBpcyBub3QgYXV0aG9yaXplZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIikpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG5cbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQsIFwiVmFsaWRhdGUgQXV0aCBDaGF0IFJlY29yZCBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVycm9yLnRvU3RyaW5nKCkgPT09IFwiRXJyb3I6IFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgNDA0XCIpIHsgLy8gYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuICAgICAgICAgIHJlc29sdmUoe30pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdWJtaXRzIHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBwb3N0Q2hhdFJlc3BvbnNlIFBvc3QgY2hhdCByZXNwb25zZSB0byBzdWJtaXQuXG4gICAqIEBwYXJhbSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHN1Ym1pdCBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc3VibWl0UG9zdENoYXRSZXNwb25zZShyZXF1ZXN0SWQ6IHN0cmluZywgcG9zdENoYXRSZXNwb25zZTogb2JqZWN0LCBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM6IElTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNUQVJURUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuc3VibWl0UG9zdENoYXRSZXNwb25zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuIH0gPSBzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTdWJtaXRQb3N0Q2hhdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkocG9zdENoYXRSZXNwb25zZSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVFNVQ0NFRURFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgIHJlc29sdmUoKTtcblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TVUJNSVRQT1NUQ0hBVEZBSUxFRCwgXCJTdWJtaXQgUG9zdCBDaGF0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcG9zdENoYXRSZXNwb25zZSBQb3N0IGNoYXQgcmVzcG9uc2UgdG8gc3VibWl0LlxuICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFN1cnZleUludml0ZUxpbmsoc3VydmV5T3duZXJJZDogc3RyaW5nLCBzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keTogb2JqZWN0LCBnZXRzdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXM6IElHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8b2JqZWN0PiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGlmICh0aGlzLmxvZ2dlcikge1xuICAgICAgdGhpcy5sb2dnZXIubG9nKExvZ0xldmVsLklORk8sXG4gICAgICAgIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NUQVJURUQsXG4gICAgICAgIHsgU3VydmV5T3duZXJJZDogc3VydmV5T3duZXJJZCB9LFxuICAgICAgICBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3RhcnRlZFwiKTtcbiAgICB9XG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlcXVlc3RJZCB9ID0gZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRTdXJ2ZXlJbnZpdGVMaW5rUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHtzdXJ2ZXlPd25lcklkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBpZiAocmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldFN1cnZleUludml0ZUxpbmtcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LU1VDQ0VFREVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgU3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktGQUlMRUQsIFwiR2V0IFN1cnZleSBJbnZpdGUgTGluayBmYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBjaGF0IHRyYW5zY3JpcHRzIGZvciBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSBjaGF0SWQgQ2hhdCB0aHJlYWQgSWQuXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGdldCBjaGF0IHRyYW5zY3JpcHRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldENoYXRUcmFuc2NyaXB0cyhyZXF1ZXN0SWQ6IHN0cmluZywgY2hhdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRyYW5zY3JpcHRzT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gfSA9IGdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmICh0aGlzLmxpdmVDaGF0VmVyc2lvbiA9PT0gTGl2ZUNoYXRWZXJzaW9uLlYyIHx8IChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICYmIGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMikpIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0djJHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyQXV0aEdldENoYXRUcmFuc2NyaXB0UGF0aH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgZWxzZSBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VHJhbnNjcmlwdHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIFxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBURkFJTEVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QobmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcblxuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRW1haWwgdHJhbnNjcmlwdCB0byBjdXN0b21lci5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSB0b2tlbiBTa3lwZSB0b2tlbi5cbiAgICogQHBhcmFtIGVtYWlsUmVxdWVzdEJvZHkgRW1haWwgcmVxdWVzdCBib2R5LlxuICAgKiBAcGFyYW0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZW1haWwgdHJhbnNjcmlwdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBlbWFpbFRyYW5zY3JpcHQocmVxdWVzdElkOiBzdHJpbmcsIHRva2VuOiBzdHJpbmcsIGVtYWlsUmVxdWVzdEJvZHk6IG9iamVjdCwgZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM6IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNUQVJURUQsIFwiRW1haWwgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRUcmFuc2NyaXB0RW1haWxSZXF1ZXN0UGF0aH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICBoZWFkZXJPdmVyd3JpdGVzOiBbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSxcbiAgICAgIHJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi5tYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSxcbiAgICAgIHdhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ud2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gZW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMud2lkZ2V0QXBwSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRob3JpemF0aW9uXSA9IHRva2VuO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoZW1haWxSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmVtYWlsVHJhbnNjcmlwdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVFNVQ0NFRURFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkVNQUlMVFJBTlNDUklQVEZBSUxFRCwgXCJFbWFpbCBUcmFuc2NyaXB0IEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGF0YSBtYXNraW5nIGluZm8gb2YgdGhlIG9yZy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24gKE9wdGlvbmFsKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBmZXRjaERhdGFNYXNraW5nSW5mbyhyZXF1ZXN0SWQ6IHN0cmluZyk6IFByb21pc2U8SURhdGFNYXNraW5nSW5mbz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1RBUlRFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuICAgIGlmICghcmVxdWVzdElkKSB7XG4gICAgICByZXF1ZXN0SWQgPSB1dWlkdjQoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEZldGNoRGF0YU1hc2tpbmdJbmZvUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcbiAgICBheGlvc1JldHJ5SGFuZGxlcihheGlvc0luc3RhbmNlLCB7XG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZmV0Y2hEYXRhTWFza2luZ0luZm9cbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLnJlcXVlc3RJZF0gPSByZXF1ZXN0SWQ7XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5GRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVELCBcIkZldGNoIERhdGEgTWFza2luZyBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlcyBhIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50IG5ldHdvcmsgY2FsbCB0byBPbW5pY2hhbm5lbC5cbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgdG8gdXNlIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudFxuICAgKiBAcGFyYW0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkgc2Vjb25kYXJ5Q2hhbm5lbCBldmVudCByZXF1ZXN0IGJvZHlcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlY29uZGFyeSBjaGFubmVsIGV2ZW50cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBtYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdChyZXF1ZXN0SWQ6IHN0cmluZywgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHk6IG9iamVjdCwgc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM6IElTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVEFSVEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcubWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtyZXF1ZXN0SWR9YDtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIHJlcXVlc3RQYXRoICs9IFwiP2NoYW5uZWxJZD1cIiArIENvbnN0YW50cy5kZWZhdWx0Q2hhbm5lbElkO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShzZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0Qm9keSksXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVFNVQ0NFRURFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RGQUlMRUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqIFNlbmQgdHlwaW5nIGluZGljYXRvclxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZW5kVHlwaW5nSW5kaWNhdG9yKHJlcXVlc3RJZDogc3RyaW5nLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uOiBudW1iZXIsIHNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtczogSVNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gYXZvaWRpbmcgbG9nZ2luZyBJbmZvIGZvciB0eXBpbmdpbmRpY2F0b3IgdG8gcmVkdWNlIGxvZyB0cmFmZmljXG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH1cbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgY29uc3QgeyBjdXN0b21lckRpc3BsYXlOYW1lIH0gPSBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM7XG4gICAgaWYgKCFjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIHx8IGN1cnJlbnRMaXZlQ2hhdFZlcnNpb24gIT09IExpdmVDaGF0VmVyc2lvbi5WMikgeyB0aHJvdyBuZXcgRXJyb3IoJ1R5cGluZyBpbmRpY2F0b3IgaXMgb25seSBzdXBwb3J0ZWQgb24gdjInKSB9XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuU2VuZFR5cGluZ0luZGljYXRvclBhdGh9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLm9yZ2FuaXphdGlvbklkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuICAgIGlmIChjdXN0b21lckRpc3BsYXlOYW1lKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tDb25zdGFudHMuY3VzdG9tZXJEaXNwbGF5TmFtZV0gPSBjdXN0b21lckRpc3BsYXlOYW1lO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLnNlbmRUeXBpbmdJbmRpY2F0b3JcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JTVUNDRUVERUQsIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKCk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFTkRUWVBJTkdJTkRJQ0FUT1JGQUlMRUQsIFwiU2VuZCBUeXBpbmcgSW5kaWNhdG9yIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGxvZ2dpbmcuXG4gICAqXG4gICAqIEBwYXJhbSBsb2dMZXZlbCBMb2cgbGV2ZWwgZm9yIGxvZ2dpbmcuXG4gICAqIEBwYXJhbSB0ZWxlbWV0cnlFdmVudFR5cGUgVGVsZW1ldHJ5IGV2ZW50IHR5cGUgaW4gd2hpY2ggZXZlbnQgd2lsbCBiZSBsb2dnZWQuXG4gICAqIEBwYXJhbSBkZXNjcmlwdGlvbiBEZXNjcmlwdGlvbiBvZiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdCBJRFxuICAgKiBAcGFyYW0gcmVzcG9uc2UgUmVzcG9uc2VcbiAgICogQHBhcmFtIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgRWxhcHNlZCB0aW1lIGluIG1zXG4gICAqIEBwYXJhbSByZXF1ZXN0UGF0aCBSZXF1ZXN0IHBhdGhcbiAgICogQHBhcmFtIG1ldGhvZCBNZXRob2RcbiAgICogQHBhcmFtIGVycm9yIEVycm9yXG4gICAqIEBwYXJhbSBkYXRhIERhdGFcbiAgICovXG4gIHByaXZhdGUgbG9nV2l0aExvZ2dlcihsb2dMZXZlbDogTG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZTogT0NTREtUZWxlbWV0cnlFdmVudCwgZGVzY3JpcHRpb246IHN0cmluZywgcmVxdWVzdElkPzogc3RyaW5nLCByZXNwb25zZT86IEF4aW9zUmVzcG9uc2U8YW55PiwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcz86IG51bWJlciwgcmVxdWVzdFBhdGg/OiBzdHJpbmcsIG1ldGhvZD86IHN0cmluZywgZXJyb3I/OiB1bmtub3duLCByZXF1ZXN0UGF5bG9hZD86IGFueSwgcmVxdWVzdEhlYWRlcnM/OiBhbnkpOiB2b2lkIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgaWYgKCF0aGlzLmxvZ2dlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBFcnJvclNlbnNpdGl2ZVByb3BlcnRpZXMoZXJyb3IpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVxdWVzdFBheWxvYWQpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RQYXlsb2FkID0geyAuLi5yZXF1ZXN0UGF5bG9hZCB9O1xuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLmN1c3RvbUNvbnRleHREYXRhKSB7XG4gICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyhzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSk7XG4gICAgICB9XG4gICAgICBpZiAoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQucHJlQ2hhdFJlc3BvbnNlKSB7XG4gICAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBQcmVDaGF0UmVzcG9uc2Uoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQucHJlQ2hhdFJlc3BvbnNlKTtcbiAgICAgIH1cbiAgICAgIExvZ2dpbmdTYW5pdGl6ZXIuc3RyaXBHZW9sb2NhdGlvbihzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCk7XG4gICAgfVxuXG4gICAgbGV0IHNhbml0aXplZFJlcXVlc3RIZWFkZXJzID0gdW5kZWZpbmVkO1xuICAgIGlmIChyZXF1ZXN0SGVhZGVycykge1xuICAgICAgc2FuaXRpemVkUmVxdWVzdEhlYWRlcnMgPSB7IC4uLnJlcXVlc3RIZWFkZXJzIH07XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwUmVxdWVzdEhlYWRlcnNTZW5zaXRpdmVQcm9wZXJ0aWVzKHNhbml0aXplZFJlcXVlc3RIZWFkZXJzKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21EYXRhID0ge1xuICAgICAgUmVxdWVzdElkOiByZXF1ZXN0SWQsXG4gICAgICBSZWdpb246IHJlc3BvbnNlPy5kYXRhLlJlZ2lvbixcbiAgICAgIEVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM6IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsXG4gICAgICBUcmFuc2FjdGlvbklkOiByZXNwb25zZT8uaGVhZGVyc1tDb25zdGFudHMudHJhbnNhY3Rpb25pZF0sXG4gICAgICBSZXF1ZXN0UGF0aDogcmVxdWVzdFBhdGgsXG4gICAgICBSZXF1ZXN0TWV0aG9kOiBtZXRob2QsXG4gICAgICBSZXNwb25zZVN0YXR1c0NvZGU6IHJlc3BvbnNlID8gcmVzcG9uc2Uuc3RhdHVzIDogZXJyb3IgPyAoZXJyb3IgYXMgYW55KS5yZXNwb25zZT8uc3RhdHVzIDogdW5kZWZpbmVkLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIEV4Y2VwdGlvbkRldGFpbHM6IGVycm9yLFxuICAgICAgUmVxdWVzdFBheWxvYWQ6IHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLFxuICAgICAgUmVxdWVzdEhlYWRlcnM6IHNhbml0aXplZFJlcXVlc3RIZWFkZXJzXG4gICAgfTtcbiAgICB0aGlzLmxvZ2dlci5sb2cobG9nTGV2ZWwsIHRlbGVtZXRyeUV2ZW50VHlwZSwgY3VzdG9tRGF0YSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBzZXRBdXRoQ29kZU5vbmNlID0gKGhlYWRlcnM6IGFueSkgPT4ge1xuICAgIGlmIChoZWFkZXJzPy5hdXRoY29kZW5vbmNlKSB7XG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZSA9IGhlYWRlcnM/LmF1dGhjb2Rlbm9uY2U7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSBzZXRTZXNzaW9uSWRIZWFkZXIgPSAoc2Vzc2lvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQsIGhlYWRlcnM6IGFueSkgPT4ge1xuICAgIGlmIChzZXNzaW9uSWQpIHtcbiAgICAgIGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZF0gPSBzZXNzaW9uSWQ7XG4gICAgfVxuICB9XG59Il19
|
|
2501
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TREsudHMiXSwibmFtZXMiOlsiU0RLIiwib21uaWNoYW5uZWxDb25maWd1cmF0aW9uIiwiY29uZmlndXJhdGlvbiIsImRlZmF1bHRDb25maWd1cmF0aW9uIiwibG9nZ2VyIiwiU0RLRXJyb3IiLCJDbGllbnRIVFRQVGltZW91dEVycm9yTmFtZSIsIkNsaWVudEhUVFBUaW1lb3V0RXJyb3JNZXNzYWdlIiwiaGVhZGVycyIsImF1dGhjb2Rlbm9uY2UiLCJhdXRoQ29kZU5vbmNlIiwic2Vzc2lvbklkIiwiT21uaWNoYW5uZWxIVFRQSGVhZGVycyIsIm9jU2Vzc2lvbklkIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImtleSIsImhhc093blByb3BlcnR5IiwiY2hhbm5lbElkIiwidmFsdWVzIiwiQ2hhbm5lbElkIiwiaW5jbHVkZXMiLCJFcnJvciIsImN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwiQ29uc3RhbnRzIiwicmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzIiwib2NVc2VyQWdlbnQiLCJsaXZlQ2hhdFZlcnNpb24iLCJMaXZlQ2hhdFZlcnNpb24iLCJWMiIsInRpbWVyIiwiVGltZXIiLCJUSU1FUiIsImxvZ1dpdGhMb2dnZXIiLCJMb2dMZXZlbCIsIklORk8iLCJPQ1NES1RlbGVtZXRyeUV2ZW50IiwiR0VUTENXRkNTREVUQUlMU1NUQVJURUQiLCJyZXF1ZXN0UGF0aCIsIk9tbmljaGFubmVsRW5kcG9pbnRzIiwiTGN3RmNzRGV0YWlsc1BhdGgiLCJvcmdJZCIsIm1ldGhvZCIsInVybCIsIm9yZ1VybCIsImF4aW9zSW5zdGFuY2UiLCJheGlvcyIsImNyZWF0ZSIsInJldHJpZXMiLCJtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZSIsIndhaXRUaW1lSW5Nc0JldHdlZW5SZXRyaWVzIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZyIsImdldENoYXRDb25maWciLCJyZXF1ZXN0SGVhZGVycyIsImdldCIsInRpbWVvdXQiLCJkZWZhdWx0UmVxdWVzdFRpbWVvdXQiLCJyZXF1ZXN0VGltZW91dENvbmZpZyIsInJlc3BvbnNlIiwiZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIm1pbGxpU2Vjb25kc0VsYXBzZWQiLCJkYXRhIiwiR0VUTENXRkNTREVUQUlMU1NVQ0NFRURFRCIsInVuZGVmaW5lZCIsIkdFVExDV0ZDU0RFVEFJTFNGQUlMRUQiLCJyZXF1ZXN0SWQiLCJieXBhc3NDYWNoZSIsIkdFVENIQVRDT05GSUdGU1RBUlRFRCIsIkxpdmVDaGF0Q29uZmlnUGF0aCIsIndpZGdldElkIiwiYnlwYXNzQ2FjaGVIZWFkZXJzIiwiR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCIsIkdFVENIQVRDT05GSUdGQUlMRUQiLCJQcm9taXNlIiwicmVqZWN0IiwiZ2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zIiwiR0VUTFdJU1RBVFVTU1RBUlRFRCIsIkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJoZWFkZXJPdmVyd3JpdGVzIiwiZ2V0TFdJRGV0YWlscyIsImF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4iLCJyZWNvbm5lY3RJZCIsImRlZmF1bHRIZWFkZXJzIiwiTGl2ZUNoYXRBdXRoTGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGgiLCJzZXRTZXNzaW9uSWRIZWFkZXIiLCJzaG91bGRVc2VTaWdRdWVyeVBhcmFtIiwidXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtIiwicGFyYW1zIiwic2lnIiwib3B0aW9ucyIsInJlc29sdmUiLCJzZXRBdXRoQ29kZU5vbmNlIiwiR0VUTFdJU1RBVFVTU1VDQ0VFREVEIiwiRVJST1IiLCJHRVRMV0lTVEFUVVNGQUlMRUQiLCJheGlvc1RpbWVvdXRFcnJvckNvZGUiLCJIVFRQVGltZU91dEVycm9yTWVzc2FnZSIsImdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zIiwiY3VycmVudFJldHJ5Q291bnQiLCJjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIiwicmVmcmVzaFRva2VuIiwiR0VUQ0hBVFRPS0VOU1RBUlRFRCIsImVuZHBvaW50IiwiZ2V0Q2hhdFRva2VuIiwicmV0cnlPbjQyOSIsImdldENoYXRUb2tlblJldHJ5T240MjkiLCJ0b0xvd2VyQ2FzZSIsIkdFVENIQVRUT0tFTlNVQ0NFRURFRCIsInN0YXR1cyIsIm5vQ29udGVudFN0YXR1c0NvZGUiLCJHRVRDSEFUVE9LRU5GQUlMRUQiLCJyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMiLCJHRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVEFSVEVEIiwiTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRoIiwiZ2V0UmVjb25uZWN0YWJsZUNoYXRzIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTU1VDQ0VFREVEIiwiR0VUUkVDT05ORUNUQUJMRUNIQVRTRkFJTEVEIiwiR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1RBUlRFRCIsIkxpdmVDaGF0UmVjb25uZWN0QXZhaWxhYmlsaXR5UGF0aCIsImdldFJlY29ubmVjdEF2YWlsYWJpbGl0eSIsIkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCIsIldBUk4iLCJHRVRSRUNPTk5FQ1RBVkFJTEFCSUxJVFlGQUlMRUQiLCJxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVEFSVEVEIiwiR2V0QWdlbnRBdmFpbGFiaWxpdHlQYXRoIiwiZ2V0QWdlbnRBdmFpbGFiaWxpdHkiLCJpbml0Q29udGV4dCIsImdldENvbnRleHQiLCJjYWNoT2JqIiwiY3VzdG9tQ29udGV4dERhdGEiLCJ0ZW1wQXJyIiwiQ3VzdG9tQ29udGV4dERhdGEiLCJzb3J0IiwiYXNzaWduIiwicG9ydGFsY29udGFjdGlkIiwiY2FjaGVLZXkiLCJoYXNoIiwiY3JlYXRlSGFzaCIsInVwZGF0ZSIsIkpTT04iLCJzdHJpbmdpZnkiLCJkaWdlc3QiLCJ0b1N0cmluZyIsIndpbmRvdyIsImRvY3VtZW50IiwiYnJvd3NlciIsIkJyb3dzZXJJbmZvIiwiZ2V0QnJvd3Nlck5hbWUiLCJkZXZpY2UiLCJEZXZpY2VJbmZvIiwiZ2V0RGV2aWNlVHlwZSIsIm9yaWdpbnVybCIsImxvY2F0aW9uIiwiaHJlZiIsIm9zIiwiT1NJbmZvIiwiZ2V0T3NUeXBlIiwibG9jYWxlIiwiZGVmYXVsdExvY2FsZSIsIkxvY2FsZXMiLCJzdXBwb3J0ZWRMb2NhbGVzIiwiR0VUQUdFTlRBVkFJTEFCSUxJVFlTVUNDRUVERUQiLCJHRVRBR0VOVEFWQUlMQUJJTElUWUZBSUxFRCIsInNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMiLCJTRVNTSU9OSU5JVFNUQVJURUQiLCJzZXNzaW9uSW5pdCIsInNob3VsZFJldHJ5IiwiZXJyb3IiLCJMaXZlQ2hhdFNlc3Npb25Jbml0UGF0aCIsIkxpdmVDaGF0QXV0aFNlc3Npb25Jbml0UGF0aCIsIlNFU1NJT05JTklUU1VDQ0VFREVEIiwiU0VTU0lPTklOSVRGQUlMRUQiLCJzZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyIsIlNFU1NJT05DTE9TRVNUQVJURUQiLCJMaXZlQ2hhdFNlc3Npb25DbG9zZVBhdGgiLCJzZXNzaW9uQ2xvc2UiLCJpc1JlY29ubmVjdENoYXQiLCJpc1BlcnNpc3RlbnRDaGF0IiwiY2hhdElkIiwiTGl2ZUNoYXRBdXRoU2Vzc2lvbkNsb3NlUGF0aCIsIlNFU1NJT05DTE9TRVNVQ0NFRURFRCIsIlNFU1NJT05DTE9TRUZBSUxFRCIsImNvZGUiLCJ2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMiLCJWQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCIsIkxpdmVDaGF0VmFsaWRhdGVBdXRoQ2hhdE1hcFJlY29yZFBhdGgiLCJ2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkIiwidmFsaWRhdGVBdXRoQ2hhdFJlY29yZFRpbWVvdXQiLCJhdXRoQ2hhdEV4aXN0IiwiVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCIsIlZBTElEQVRFQVVUSENIQVRSRUNPUkRGQUlMRUQiLCJwb3N0Q2hhdFJlc3BvbnNlIiwic3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zIiwiU1VCTUlUUE9TVENIQVRTVEFSVEVEIiwiTGl2ZUNoYXRTdWJtaXRQb3N0Q2hhdFBhdGgiLCJzdWJtaXRQb3N0Q2hhdFJlc3BvbnNlIiwiTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRoIiwiU1VCTUlUUE9TVENIQVRTVUNDRUVERUQiLCJTVUJNSVRQT1NUQ0hBVEZBSUxFRCIsInN1cnZleU93bmVySWQiLCJzdXJ2ZXlJbnZpdGVBUElSZXF1ZXN0Qm9keSIsImdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcyIsImxvZyIsIkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVEIiwiU3VydmV5T3duZXJJZCIsIkxpdmVDaGF0R2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJnZXRTdXJ2ZXlJbnZpdGVMaW5rIiwiTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGgiLCJ3aWRnZXRBcHBJZCIsIkdFVFNVUlZFWUlOVklURUxJTktTVUNDRUVERUQiLCJHRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVEIiwidG9rZW4iLCJnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyIsIkdFVENIQVRUUkFOU0NSSVBUU1RBUlRFRCIsIkxpdmVDaGF0R2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiZ2V0Q2hhdFRyYW5zY3JpcHRzIiwib3JnYW5pemF0aW9uSWQiLCJhdXRob3JpemF0aW9uIiwiTGl2ZUNoYXR2MkdldENoYXRUcmFuc2NyaXB0UGF0aCIsIkxpdmVDaGF0djJBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRoIiwiR0VUQ0hBVFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJHRVRDSEFUVFJBTlNDUklQVEZBSUxFRCIsImVtYWlsUmVxdWVzdEJvZHkiLCJlbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyIsIkVNQUlMVFJBTlNDUklQVFNUQVJURUQiLCJMaXZlQ2hhdFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRoIiwiZW1haWxUcmFuc2NyaXB0IiwiTGl2ZUNoYXRBdXRoVHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGgiLCJFTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQiLCJFTUFJTFRSQU5TQ1JJUFRGQUlMRUQiLCJGRVRDSERBVEFNQVNLSU5HU1RBUlRFRCIsIkxpdmVDaGF0RmV0Y2hEYXRhTWFza2luZ0luZm9QYXRoIiwiZmV0Y2hEYXRhTWFza2luZ0luZm8iLCJGRVRDSERBVEFNQVNLSU5HU1VDQ0VFREVEIiwiRkVUQ0hEQVRBTUFTS0lOR0ZBSUxFRCIsInNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5Iiwic2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCIsIkxpdmVDaGF0U2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsIm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0IiwiTGl2ZUNoYXRBdXRoU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UGF0aCIsImRlZmF1bHRDaGFubmVsSWQiLCJTRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1VDQ0VFREVEIiwiU0VDT05EQVJZQ0hBTk5FTEVWRU5UUkVRVUVTVEZBSUxFRCIsInNlbmRUeXBpbmdJbmRpY2F0b3JPcHRpb25hbFBhcmFtcyIsImN1c3RvbWVyRGlzcGxheU5hbWUiLCJTZW5kVHlwaW5nSW5kaWNhdG9yUGF0aCIsInNlbmRUeXBpbmdJbmRpY2F0b3IiLCJTRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVEIiwiU0VORFRZUElOR0lORElDQVRPUkZBSUxFRCIsImxvZ0xldmVsIiwidGVsZW1ldHJ5RXZlbnRUeXBlIiwiZGVzY3JpcHRpb24iLCJyZXF1ZXN0UGF5bG9hZCIsIkxvZ2dpbmdTYW5pdGl6ZXIiLCJzdHJpcEVycm9yU2Vuc2l0aXZlUHJvcGVydGllcyIsInNhbml0aXplZFJlcXVlc3RQYXlsb2FkIiwic3RyaXBDdXN0b21Db250ZXh0RGF0YVZhbHVlcyIsInByZUNoYXRSZXNwb25zZSIsInN0cmlwUHJlQ2hhdFJlc3BvbnNlIiwic3RyaXBHZW9sb2NhdGlvbiIsInNhbml0aXplZFJlcXVlc3RIZWFkZXJzIiwic3RyaXBSZXF1ZXN0SGVhZGVyc1NlbnNpdGl2ZVByb3BlcnRpZXMiLCJjdXN0b21EYXRhIiwiUmVxdWVzdElkIiwiUmVnaW9uIiwiRWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyIsIlRyYW5zYWN0aW9uSWQiLCJ0cmFuc2FjdGlvbmlkIiwiUmVxdWVzdFBhdGgiLCJSZXF1ZXN0TWV0aG9kIiwiUmVzcG9uc2VTdGF0dXNDb2RlIiwiRXhjZXB0aW9uRGV0YWlscyIsIlJlcXVlc3RQYXlsb2FkIiwiUmVxdWVzdEhlYWRlcnMiLCJzdWJzdHJpbmciLCJnZXRDaGF0VG9rZW5SZXRyeUNvdW50IiwiZ2V0Q2hhdFRva2VuVGltZUJldHdlZW5SZXRyaWVzT25GYWlsdXJlIiwiZGVmYXVsdFJlcXVlc3RUaW1lb3V0Q29uZmlnIiwid2FpdFRpbWVCZXR3ZWVuUmV0cmllc0NvbmZpZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7O0FBRUE7O0FBQ0E7O0FBRUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBb0JBOztBQUNBOztBQUNBOztBQUVBOztBQUNBOztBQUNBOztBQU9BOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0lBRXFCQSxHO0FBdUNuQixlQUEyQkMsd0JBQTNCLEVBQW1MO0FBQUE7O0FBQUEsUUFBM0ZDLGFBQTJGLHVFQUF4REYsR0FBRyxDQUFDRyxvQkFBb0Q7QUFBQSxRQUF0QkMsTUFBc0I7QUFBQTtBQUFBLFNBQXhKSCx3QkFBd0osR0FBeEpBLHdCQUF3SjtBQUFBLFNBQTNGQyxhQUEyRixHQUEzRkEsYUFBMkY7QUFBQSxTQUF0QkUsTUFBc0IsR0FBdEJBLE1BQXNCO0FBQUE7QUFBQTtBQUFB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Tyw0REFUeUI7QUFVdkQvUCxFQUFBQSxXQUFXLEVBQUU7QUFWMEMsQyIsInNvdXJjZVJvb3QiOiJvY3NkazovLy8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBoYXNoIGZyb20gXCJjcnlwdG9cIjtcblxuaW1wb3J0IHsgQ2hhbm5lbElkLCBMaXZlQ2hhdFZlcnNpb24sIE9DU0RLVGVsZW1ldHJ5RXZlbnQsIFNES0Vycm9yIH0gZnJvbSBcIi4vQ29tbW9uL0VudW1zXCI7XG5pbXBvcnQgYXhpb3MsIHsgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSBcImF4aW9zXCI7XG5cbmltcG9ydCB7IEJyb3dzZXJJbmZvIH0gZnJvbSBcIi4vVXRpbHMvQnJvd3NlckluZm9cIjtcbmltcG9ydCBDb25zdGFudHMgZnJvbSBcIi4vQ29tbW9uL0NvbnN0YW50c1wiO1xuaW1wb3J0IHsgQ3VzdG9tQ29udGV4dERhdGEgfSBmcm9tIFwiLi9VdGlscy9DdXN0b21Db250ZXh0RGF0YVwiO1xuaW1wb3J0IHsgRGV2aWNlSW5mbyB9IGZyb20gXCIuL1V0aWxzL0RldmljZUluZm9cIjtcbmltcG9ydCBGZXRjaENoYXRUb2tlblJlc3BvbnNlIGZyb20gXCIuL01vZGVsL0ZldGNoQ2hhdFRva2VuUmVzcG9uc2VcIjtcbmltcG9ydCBJRGF0YU1hc2tpbmdJbmZvIGZyb20gXCIuL0ludGVyZmFjZXMvSURhdGFNYXNraW5nSW5mb1wiO1xuaW1wb3J0IElFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lFbWFpbFRyYW5zY3JpcHRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRDaGF0VG9rZW5PcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lHZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0TFdJRGV0YWlsc09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSUdldFF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElHZXRTdXJ2ZXlJbnZpdGVMaW5rT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiBmcm9tIFwiLi9JbnRlcmZhY2VzL0lPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25cIjtcbmltcG9ydCBJUmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVJlY29ubmVjdGFibGVDaGF0c1BhcmFtc1wiO1xuaW1wb3J0IElTREsgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU0RLXCI7XG5pbXBvcnQgSVNES0NvbmZpZ3VyYXRpb24gZnJvbSBcIi4vSW50ZXJmYWNlcy9JU0RLQ29uZmlndXJhdGlvblwiO1xuaW1wb3J0IElTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IElTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zXCJcbmltcG9ydCBJU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXMgZnJvbSBcIi4vSW50ZXJmYWNlcy9JU2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJU2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zXCI7XG5pbXBvcnQgSVN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtcyBmcm9tIFwiLi9JbnRlcmZhY2VzL0lTdWJtaXRQb3N0Q2hhdFJlc3BvbnNlT3B0aW9uYWxQYXJhbXNcIjtcbmltcG9ydCBJVmFsaWRhdGVBdXRoQ2hhdFJlY29yZE9wdGlvbmFsUGFyYW1zIGZyb20gXCIuL0ludGVyZmFjZXMvSVZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtc1wiO1xuaW1wb3J0IEluaXRDb250ZXh0IGZyb20gXCIuL01vZGVsL0luaXRDb250ZXh0XCI7XG5pbXBvcnQgTG9jYWxlcyBmcm9tIFwiLi9Db21tb24vTG9jYWxlc1wiO1xuaW1wb3J0IHsgTG9nTGV2ZWwgfSBmcm9tIFwiLi9Nb2RlbC9Mb2dMZXZlbFwiO1xuaW1wb3J0IHsgTG9nZ2luZ1Nhbml0aXplciB9IGZyb20gXCIuL1V0aWxzL0xvZ2dpbmdTYW5pdGl6ZXJcIjtcbmltcG9ydCBPQ1NES0xvZ2dlciBmcm9tIFwiLi9Db21tb24vT0NTREtMb2dnZXJcIjtcbmltcG9ydCB7IE9TSW5mbyB9IGZyb20gXCIuL1V0aWxzL09TSW5mb1wiO1xuaW1wb3J0IE9tbmljaGFubmVsRW5kcG9pbnRzIGZyb20gXCIuL0NvbW1vbi9PbW5pY2hhbm5lbEVuZHBvaW50c1wiO1xuaW1wb3J0IE9tbmljaGFubmVsSFRUUEhlYWRlcnMgZnJvbSBcIi4vQ29tbW9uL09tbmljaGFubmVsSFRUUEhlYWRlcnNcIjtcbmltcG9ydCBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyIGZyb20gXCIuL0ludGVyZmFjZXMvT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlclwiO1xuaW1wb3J0IFF1ZXVlQXZhaWxhYmlsaXR5IGZyb20gXCIuL01vZGVsL1F1ZXVlQXZhaWxhYmlsaXR5XCI7XG5pbXBvcnQgUmVjb25uZWN0QXZhaWxhYmlsaXR5IGZyb20gXCIuL01vZGVsL1JlY29ubmVjdEF2YWlsYWJpbGl0eVwiO1xuaW1wb3J0IFJlY29ubmVjdE1hcHBpbmdSZWNvcmQgZnJvbSBcIi4vTW9kZWwvUmVjb25uZWN0TWFwcGluZ1JlY29yZFwiO1xuaW1wb3J0IHsgUmVxdWVzdFRpbWVvdXRDb25maWcgfSBmcm9tIFwiLi9Db21tb24vUmVxdWVzdFRpbWVvdXRDb25maWdcIjtcbmltcG9ydCB7IFN0cmluZ01hcCB9IGZyb20gXCIuL0NvbW1vbi9NYXBwaW5nc1wiO1xuaW1wb3J0IHsgVGltZXIgfSBmcm9tIFwiLi9VdGlscy9UaW1lclwiO1xuaW1wb3J0IHsgYWRkT2NVc2VyQWdlbnRIZWFkZXIgfSBmcm9tIFwiLi9VdGlscy9odHRwSGVhZGVyc1V0aWxzXCI7XG5pbXBvcnQgYXhpb3NSZXRyeUhhbmRsZXIgZnJvbSBcIi4vVXRpbHMvYXhpb3NSZXRyeUhhbmRsZXJcIjtcbmltcG9ydCB7IGNyZWF0ZUdldENoYXRUb2tlbkVuZHBvaW50IH0gZnJvbSBcIi4vVXRpbHMvZW5kcG9pbnRzQ3JlYXRvcnNcIjtcbmltcG9ydCBpc0V4cGVjdGVkQXhpb3NFcnJvciBmcm9tIFwiLi9VdGlscy9pc0V4cGVjdGVkQXhpb3NFcnJvclwiO1xuaW1wb3J0IHNlc3Npb25Jbml0UmV0cnlIYW5kbGVyIGZyb20gXCIuL1V0aWxzL1Nlc3Npb25Jbml0UmV0cnlIYW5kbGVyXCI7XG5pbXBvcnQgeyB1dWlkdjQgfSBmcm9tIFwiLi9VdGlscy91dWlkXCI7XG5pbXBvcnQgeyB3YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlncyB9IGZyb20gXCIuL1V0aWxzL3dhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNESyBpbXBsZW1lbnRzIElTREsge1xuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0UmVxdWVzdFRpbWVvdXRDb25maWc6IFJlcXVlc3RUaW1lb3V0Q29uZmlnID0ge1xuICAgIGdldENoYXRDb25maWc6IDMwMDAwLFxuICAgIGdldExXSURldGFpbHM6IDE1MDAwLFxuICAgIGdldENoYXRUb2tlbjogMTUwMDAsXG4gICAgc2Vzc2lvbkluaXQ6IDE1MDAwLFxuICAgIHNlc3Npb25DbG9zZTogMTUwMDAsXG4gICAgZ2V0UmVjb25uZWN0YWJsZUNoYXRzOiAxNTAwMCxcbiAgICBnZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHk6IDE1MDAwLFxuICAgIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2U6IDE1MDAwLFxuICAgIGdldFN1cnZleUludml0ZUxpbms6IDE1MDAwLFxuICAgIGdldENoYXRUcmFuc2NyaXB0czogMzAwMDAsXG4gICAgZW1haWxUcmFuc2NyaXB0OiA1MDAwLFxuICAgIGZldGNoRGF0YU1hc2tpbmdJbmZvOiA1MDAwLFxuICAgIG1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0OiAxNTAwMCxcbiAgICBnZXRBZ2VudEF2YWlsYWJpbGl0eTogMTUwMDAsXG4gICAgc2VuZFR5cGluZ0luZGljYXRvcjogNTAwMCxcbiAgICB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dDogMTUwMDBcbiAgfTtcblxuICBwcml2YXRlIHN0YXRpYyBkZWZhdWx0Q29uZmlndXJhdGlvbjogSVNES0NvbmZpZ3VyYXRpb24gPSB7XG4gICAgYXV0aENvZGVOb25jZTogdXVpZHY0KCkuc3Vic3RyaW5nKDAsIDgpLFxuICAgIGdldENoYXRUb2tlblJldHJ5Q291bnQ6IDEwLFxuICAgIGdldENoYXRUb2tlblRpbWVCZXR3ZWVuUmV0cmllc09uRmFpbHVyZTogMTAwMDAsXG4gICAgZ2V0Q2hhdFRva2VuUmV0cnlPbjQyOTogdHJ1ZSxcbiAgICBtYXhSZXF1ZXN0UmV0cmllc09uRmFpbHVyZTogNSxcbiAgICBkZWZhdWx0UmVxdWVzdFRpbWVvdXQ6IHVuZGVmaW5lZCxcbiAgICByZXF1ZXN0VGltZW91dENvbmZpZzogU0RLLmRlZmF1bHRSZXF1ZXN0VGltZW91dENvbmZpZyxcbiAgICB1c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW06IGZhbHNlLFxuICAgIHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWc6IHdhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWdzLFxuICAgIG9jVXNlckFnZW50OiBbXVxuICB9O1xuXG4gIGxpdmVDaGF0VmVyc2lvbjogbnVtYmVyO1xuICBzZXNzaW9uSWQ/OiBzdHJpbmc7XG4gIG9jVXNlckFnZW50OiBzdHJpbmdbXTtcbiAgSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UgPSBgJHtTREtFcnJvci5DbGllbnRIVFRQVGltZW91dEVycm9yTmFtZX06ICR7U0RLRXJyb3IuQ2xpZW50SFRUUFRpbWVvdXRFcnJvck1lc3NhZ2V9YDtcblxuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihwcml2YXRlIG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjogSU9tbmljaGFubmVsQ29uZmlndXJhdGlvbiwgcHJpdmF0ZSBjb25maWd1cmF0aW9uOiBJU0RLQ29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbiwgcHJpdmF0ZSBsb2dnZXI/OiBPQ1NES0xvZ2dlcikge1xuICAgIC8vIFNldHMgdG8gZGVmYXVsdCBjb25maWd1cmF0aW9uIGlmIHBhc3NlZCBjb25maWd1cmF0aW9uIGlzIGVtcHR5IG9yIGlzIG5vdCBhbiBvYmplY3RcbiAgICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuY29uZmlndXJhdGlvbikubGVuZ3RoIHx8IHR5cGVvZiAoY29uZmlndXJhdGlvbikgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgIHRoaXMuY29uZmlndXJhdGlvbiA9IFNESy5kZWZhdWx0Q29uZmlndXJhdGlvbjtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBTREsgY29uZmlnXG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uKSkge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZ3VyYXRpb24uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bYCR7a2V5fWBdID0gU0RLLmRlZmF1bHRDb25maWd1cmF0aW9uW2Ake2tleX1gXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBpbmRpdmlkdWFsIGVuZHBvaW50VGltZW91dCBjb25maWdcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXSkpIHtcbiAgICAgIGlmICghdGhpcy5jb25maWd1cmF0aW9uW1wicmVxdWVzdFRpbWVvdXRDb25maWdcIl0uaGFzT3duUHJvcGVydHkoa2V5KSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF0gPSBTREsuZGVmYXVsdENvbmZpZ3VyYXRpb25bXCJyZXF1ZXN0VGltZW91dENvbmZpZ1wiXVtgJHtrZXl9YF07XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgY2hhbm5lbElkXG4gICAgY29uc3QgeyBjaGFubmVsSWQgfSA9IG9tbmljaGFubmVsQ29uZmlndXJhdGlvbjtcbiAgICBpZiAoIU9iamVjdC52YWx1ZXMoQ2hhbm5lbElkKS5pbmNsdWRlcyhjaGFubmVsSWQgYXMgQ2hhbm5lbElkKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNoYW5uZWxJZGApO1xuICAgIH1cblxuICAgIC8vIFZhbGlkYXRlIE9DIGNvbmZpZ1xuICAgIGNvbnN0IGN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob21uaWNoYW5uZWxDb25maWd1cmF0aW9uKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBDb25zdGFudHMucmVxdWlyZWRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzKSB7XG4gICAgICBpZiAoIWN1cnJlbnRPbW5pY2hhbm5lbENvbmZpZ3VyYXRpb25QYXJhbWV0ZXJzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nICcke2tleX0nIGluIE9tbmljaGFubmVsQ29uZmlndXJhdGlvbmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMub2NVc2VyQWdlbnQgPSB0aGlzLmNvbmZpZ3VyYXRpb24ub2NVc2VyQWdlbnQ7XG4gICAgdGhpcy5saXZlQ2hhdFZlcnNpb24gPSBMaXZlQ2hhdFZlcnNpb24uVjI7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMQ1cgRkNTIERldGFpbHMgb2YgdGhlIE9yZy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRMY3dGY3NEZXRhaWxzKCk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTU1RBUlRFRCwgXCJHZXQgTENXIEZDUyBkZXRhaWxzIHN0YXJ0ZWRcIiwgXCJcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MY3dGY3NEZXRhaWxzUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0ge307XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExDV0ZDU0RFVEFJTFNTVUNDRUVERUQsIFwiR2V0IExDVyBGQ1MgZGV0YWlscyBzdWNjZWVkZWRcIiwgXCJcIiwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMQ1dGQ1NERVRBSUxTRkFJTEVELCBcIkdldCBMQ1cgRkNTIGRldGFpbHMgZmFpbGVkXCIsIFwiXCIsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoZXMgY2hhdCBjb25maWcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgdG8gZ2V0IGNoYXQgY29uZmlnIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZ2V0Q2hhdENvbmZpZyhyZXF1ZXN0SWQ6IHN0cmluZywgYnlwYXNzQ2FjaGUgPSBmYWxzZSk6IFByb21pc2U8b2JqZWN0IHwgdm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUQ09ORklHRlNUQVJURUQsIFwiR2V0IENoYXQgY29uZmlnIHN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRDb25maWdQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfT9yZXF1ZXN0SWQ9JHtyZXF1ZXN0SWR9JmNoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRDb25maWdcbiAgICB9KTtcblxuICAgIGxldCByZXF1ZXN0SGVhZGVycyA9IHt9O1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChieXBhc3NDYWNoZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnMgPSB7IC4uLkNvbnN0YW50cy5ieXBhc3NDYWNoZUhlYWRlcnMsIC4uLnJlcXVlc3RIZWFkZXJzIH07XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZS5nZXQodXJsLCB7XG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0Q29uZmlnXG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcblxuICAgICAgaWYgKGRhdGEuTGl2ZUNoYXRWZXJzaW9uKSB7XG4gICAgICAgIHRoaXMubGl2ZUNoYXRWZXJzaW9uID0gZGF0YS5MaXZlQ2hhdFZlcnNpb247XG4gICAgICB9XG5cbiAgICAgIGRhdGEuaGVhZGVycyA9IHt9O1xuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnMgJiYgcmVzcG9uc2UuaGVhZGVyc1tcImRhdGVcIl0pIHtcbiAgICAgICAgZGF0YS5oZWFkZXJzW1wiZGF0ZVwiXSA9IHJlc3BvbnNlLmhlYWRlcnNbXCJkYXRlXCJdO1xuICAgICAgfVxuICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUQ0hBVENPTkZJR1NVQ0NFRURFRCwgXCJHZXQgQ2hhdCBjb25maWcgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgIHJldHVybiBkYXRhO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRDT05GSUdGQUlMRUQsIFwiR2V0IENoYXQgY29uZmlnIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2hlcyBMV0kgZGV0YWlscy5cbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSB0byBnZXQgY2hhdCBjb25maWcgKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgZ2V0IExXSSBEZXRhaWxzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldExXSURldGFpbHMocmVxdWVzdElkOiBzdHJpbmcsIGdldExXSURldGFpbHNPcHRpb25hbFBhcmFtczogSUdldExXSURldGFpbHNPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxvYmplY3Q+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUTFdJU1RBVFVTU1RBUlRFRCwgXCJHZXQgTFdJIERldGFpbHMgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIC8vIGNvbnN0cnVjdCBhIGVuZHBvaW50IGZvciBhbm9ueW1vdXMgY2hhdHMgdG8gZ2V0IExXSSBEZXRhaWxzXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0TGl2ZVdvcmtJdGVtRGV0YWlsc1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldExXSURldGFpbHNcbiAgICB9KTtcblxuICAgIC8vIEV4dHJhY3QgYXV0aCB0b2tlbiBhbmQgcmVjb25uZWN0IGlkIGZyb20gb3B0aW9uYWwgcGFyYW1cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIHJlY29ubmVjdElkIH0gPSBnZXRMV0lEZXRhaWxzT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcblxuICAgIC8vIHVwZGF0ZWQgYXV0aCBlbmRwb2ludCBmb3IgYXV0aGVudGljYXRlZCBjaGF0cyBhbmQgYWRkIGF1dGggdG9rZW4gaW4gaGVhZGVyXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aExpdmVXb3JrSXRlbURldGFpbHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAvLyBJZiBzaG91bGQgb25seSBiZSBhcHBsaWNhYmxlIG9uIHVuYXV0aCBjaGF0ICYgdGhlIGZsYWcgZW5hYmxlZFxuICAgIGNvbnN0IHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0gPSAhYXV0aGVudGljYXRlZFVzZXJUb2tlbiAmJiB0aGlzLmNvbmZpZ3VyYXRpb24udXNlVW5hdXRoUmVjb25uZWN0SWRTaWdRdWVyeVBhcmFtID09PSB0cnVlO1xuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKCFzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHJlcXVlc3RQYXRoICs9IGAvJHtyZWNvbm5lY3RJZH1gO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBhcmFtczogT21uaWNoYW5uZWxRdWVyeVBhcmFtZXRlciA9IHtcbiAgICAgIGNoYW5uZWxJZDogdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkXG4gICAgfTtcblxuICAgIGlmIChyZWNvbm5lY3RJZCkge1xuICAgICAgaWYgKHNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcGFyYW1zLnNpZyA9IHJlY29ubmVjdElkO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJHRVRcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICAgIG1ldGhvZCxcbiAgICAgIHVybCxcbiAgICAgIHBhcmFtcyxcbiAgICAgIHRpbWVvdXQ6IHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0UmVxdWVzdFRpbWVvdXQgPz8gdGhpcy5jb25maWd1cmF0aW9uLnJlcXVlc3RUaW1lb3V0Q29uZmlnLmdldExXSURldGFpbHNcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRMV0lTVEFUVVNTVUNDRUVERUQsIFwiR2V0IExXSSBEZXRhaWxzIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVExXSVNUQVRVU0ZBSUxFRCwgXCJHZXQgTFdJIERldGFpbHMgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogRmV0Y2hlcyB0aGUgY2hhdCB0b2tlbiBmcm9tIE9tbmljaGFubmVsIHRvIGpvaW4gVDEgdGhyZWFkLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgdG8gdXNlIGZvciBnZXRjaGF0dG9rZW4gKE9wdGlvbmFsKS5cbiAgICogQHBhcmFtIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0b2tlbi5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VG9rZW4ocmVxdWVzdElkOiBzdHJpbmcsIGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zOiBJR2V0Q2hhdFRva2VuT3B0aW9uYWxQYXJhbXMgPSB7fSwgY3VycmVudFJldHJ5Q291bnQ6IG51bWJlciA9IDApOiBQcm9taXNlPEZldGNoQ2hhdFRva2VuUmVzcG9uc2U+IHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8taW5mZXJyYWJsZS10eXBlc1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBjb25zdCB7IHJlY29ubmVjdElkLCBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uLCByZWZyZXNoVG9rZW4gfSA9IGdldENoYXRUb2tlbk9wdGlvbmFsUGFyYW1zO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNUQVJURUQsIFwiR2V0IENoYXQgVG9rZW4gU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgaWYgKGN1cnJlbnRSZXRyeUNvdW50IDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGN1cnJlbnRSZXRyeUNvdW50YCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0SWQpIHtcbiAgICAgIHJlcXVlc3RJZCA9IHV1aWR2NCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgZW5kcG9pbnQgPSBjcmVhdGVHZXRDaGF0VG9rZW5FbmRwb2ludChjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIGFzIExpdmVDaGF0VmVyc2lvbiB8fCB0aGlzLmxpdmVDaGF0VmVyc2lvbiwgYXV0aGVudGljYXRlZFVzZXJUb2tlbiA/IHRydWUgOiBmYWxzZSk7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke2VuZHBvaW50fS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuXG4gICAgLy8gSWYgc2hvdWxkIG9ubHkgYmUgYXBwbGljYWJsZSBvbiB1bmF1dGggY2hhdCAmIHRoZSBmbGFnIGVuYWJsZWRcbiAgICBjb25zdCBzaG91bGRVc2VTaWdRdWVyeVBhcmFtID0gIWF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gJiYgdGhpcy5jb25maWd1cmF0aW9uLnVzZVVuYXV0aFJlY29ubmVjdElkU2lnUXVlcnlQYXJhbSA9PT0gdHJ1ZTtcbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmICghc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSkge1xuICAgICAgICByZXF1ZXN0UGF0aCArPSBgLyR7cmVjb25uZWN0SWR9YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBwYXJhbXM6IE9tbmljaGFubmVsUXVlcnlQYXJhbWV0ZXIgPSB7XG4gICAgICBjaGFubmVsSWQ6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZFxuICAgIH1cblxuICAgIGlmIChyZWZyZXNoVG9rZW4pIHtcbiAgICAgIHBhcmFtcy5yZWZyZXNoVG9rZW4gPSAndHJ1ZSdcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRDaGF0VG9rZW5cbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogKGN1cnJlbnRSZXRyeUNvdW50ID4gdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlKSA/IGN1cnJlbnRSZXRyeUNvdW50IDogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgcmV0cnlPbjQyOTogdGhpcy5jb25maWd1cmF0aW9uLmdldENoYXRUb2tlblJldHJ5T240MjksXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0Q2hhdFRva2VuXG4gICAgfSk7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhLCBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGlmIChoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKGhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vY1Nlc3Npb25JZC50b0xvd2VyQ2FzZSgpXSkge1xuICAgICAgICAgICAgdGhpcy5zZXNzaW9uSWQgPSBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWQudG9Mb3dlckNhc2UoKV07XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmVzb2x2ZXMgb25seSBpZiBpdCBjb250YWlucyBjaGF0IHRva2VuIHJlc3BvbnNlIHdoaWNoIG9ubHkgaGFwcGVucyBvbiBzdGF0dXMgMjAwXG4gICAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gY2hlY2sgaWYgZGF0YSBpcyBlbXB0eSwgaWYgc28sIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlXG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRhdGEpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihcIkVtcHR5IGRhdGEgcmVjZWl2ZWQgZnJvbSBnZXRDaGF0VG9rZW5cIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGRhdGEucmVxdWVzdElkID0gcmVxdWVzdElkO1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUT0tFTlNVQ0NFRURFRCwgXCJHZXQgQ2hhdCBUb2tlbiBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE5vIGNvbnRlbnQgZm9yIHJlY29ubmVjdCBjaGF0IGNhc2Ugc2hvdWxkbid0IGJlIHJldHJpZWQuXG4gICAgICAgIGlmIChyZWNvbm5lY3RJZCAmJiByZXNwb25zZS5zdGF0dXMgPT09IENvbnN0YW50cy5ub0NvbnRlbnRTdGF0dXNDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KHJlc3BvbnNlKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVE9LRU5GQUlMRUQsIFwiR2V0IENoYXQgVG9rZW4gZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaGVzIHRoZSByZWNvbm5lY3RhYmxlIGNoYXRzIGZyb20gb21uaWNoYW5uZWwgZnJvbSB0aGUgZ2l2ZW4gdXNlciBpbmZvcm1hdGlvbiBpbiBKV1QgdG9rZW4oY2xhaW0gbmFtZTogc3ViKS5cbiAgICogQHBhcmFtIHJlY29ubmVjdGFibGVDaGF0c1BhcmFtcyBNYW5kYXRlIHBhcmFtZXRlcnMgZm9yIGdldCByZWNvbm5lY3RhYmxlIGNoYXRzLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdGFibGVDaGF0cyhyZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXM6IElSZWNvbm5lY3RhYmxlQ2hhdHNQYXJhbXMpOiBQcm9taXNlPFJlY29ubmVjdE1hcHBpbmdSZWNvcmQgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFCTEVDSEFUU1NUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgY2hhdCBTdGFydGVkXCIpO1xuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRSZWNvbm5lY3RhYmxlQ2hhdHNQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0UmVjb25uZWN0YWJsZUNoYXRzXG4gICAgfTtcblxuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGNvbnN0IHJlcXVlc3RJZCA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICAvLyBSZXNvbHZlcyBvbmx5IGlmIGl0IGNvbnRhaW5zIHJlY29ubmVjdGFibGUgY2hhdHMgcmVzcG9uc2Ugd2hpY2ggb25seSBoYXBwZW5zIG9uIHN0YXR1cyAyMDBcbiAgICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRSRUNPTk5FQ1RBQkxFQ0hBVFNTVUNDRUVERUQsIFwiR2V0IFJlY29ubmVjdGFibGUgQ2hhdHMgU3VjY2VlZGVkIGFuZCBvbGQgc2Vzc2lvbiByZXR1cm5lZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgaW4gdGhlIG9sZCBzZXNzaW9ucyBzbyByZXR1cm5pbmcgbnVsbFxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQUJMRUNIQVRTRkFJTEVELCBcIkdldCBSZWNvbm5lY3RhYmxlIENoYXRzIGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICogRmV0Y2hlcyB0aGUgcmVjb25uZWN0YWJsZSBjaGF0cyBmcm9tIG9tbmljaGFubmVsIGZyb20gdGhlIGdpdmVuIHVzZXIgaW5mb3JtYXRpb24gaW4gSldUIHRva2VuKGNsYWltIG5hbWU6IHN1YikuXG4gKiBAcGFyYW0gcmVjb25uZWN0YWJsZUNoYXRzUGFyYW1zIE1hbmRhdGUgcGFyYW1ldGVycyBmb3IgZ2V0IHJlY29ubmVjdGFibGUgY2hhdHMuXG4gKi9cbiAgcHVibGljIGFzeW5jIGdldFJlY29ubmVjdEF2YWlsYWJpbGl0eShyZWNvbm5lY3RJZDogc3RyaW5nKTogUHJvbWlzZTxSZWNvbm5lY3RBdmFpbGFiaWxpdHkgfCB2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IFJlY29ubmVjdGFibGUgYXZhaWxhYmlsaXR5IFN0YXJ0ZWRcIik7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFJlY29ubmVjdEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVjb25uZWN0SWR9YDtcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRSZWNvbm5lY3RBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEgfSA9IHJlc3BvbnNlO1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWVNVQ0NFRURFRCwgXCJHZXQgUmVjb25uZWN0IGF2YWlsYWJpbGl0eSBzdWNjZWVkZWRcIiwgdW5kZWZpbmVkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIE5vIGRhdGEgZm91bmQgc28gcmV0dXJuaW5nIG51bGxcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLldBUk4sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUUkVDT05ORUNUQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBSZWNvbm5lY3QgYXZhaWxhYmlsaXR5IGRpZG4ndCBzZW5kIGFueSB2YWxpZCBkYXRhXCIsIHVuZGVmaW5lZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFJFQ09OTkVDVEFWQUlMQUJJTElUWUZBSUxFRCwgXCJHZXQgUmVjb25uZWN0IEF2YWlsYWJpbGl0eSBmYWlsZWRcIiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHJlcXVlc3RJZDogUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKiBAcGFyYW0gcXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc2Vzc2lvbiBpbml0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGdldEFnZW50QXZhaWxhYmlsaXR5KHJlcXVlc3RJZDogc3RyaW5nLCBxdWV1ZUF2YWlsYWJpbGl0eU9wdGlvbmFsUGFyYW1zOiBJR2V0UXVldWVBdmFpbGFiaWxpdHlPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTxRdWV1ZUF2YWlsYWJpbGl0eT4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRBR0VOVEFWQUlMQUJJTElUWVNUQVJURUQsIFwiR2V0IGFnZW50IGF2YWlsYWJpbGl0eSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBjb25zdCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5HZXRBZ2VudEF2YWlsYWJpbGl0eVBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9bGN3YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgaW5pdENvbnRleHQsIGdldENvbnRleHQgfSA9IHF1ZXVlQXZhaWxhYmlsaXR5T3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuXG4gICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgZGF0YTogSW5pdENvbnRleHQgPSBpbml0Q29udGV4dCB8fCB7fTtcblxuICAgIGNvbnN0IGNhY2hPYmogPSB7XG4gICAgICBcIm9yZ0lkXCI6IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkLFxuICAgICAgXCJ3aWRnZXRJZFwiOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZFxuICAgIH1cblxuICAgIGlmIChkYXRhICYmIGRhdGEuY3VzdG9tQ29udGV4dERhdGEpIHtcbiAgICAgIGNvbnN0IHRlbXBBcnIgPSBDdXN0b21Db250ZXh0RGF0YS5zb3J0KGRhdGEuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwiY3VzdG9tQ29udGV4dFwiOiB0ZW1wQXJyIH0pO1xuICAgIH1cblxuICAgIGlmIChkYXRhLnBvcnRhbGNvbnRhY3RpZCkge1xuICAgICAgT2JqZWN0LmFzc2lnbihjYWNoT2JqLCB7IFwicG9ydGFsY29udGFjdGlkXCI6IGRhdGEucG9ydGFsY29udGFjdGlkIH0pO1xuICAgIH1cblxuICAgIGRhdGEuY2FjaGVLZXkgPSBoYXNoLmNyZWF0ZUhhc2goJ3NoYTI1NicpLnVwZGF0ZShKU09OLnN0cmluZ2lmeShjYWNoT2JqKSkuZGlnZXN0KCdoZXgnKS50b1N0cmluZygpO1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgaWYgKCFkYXRhLmxvY2FsZSkge1xuICAgICAgZGF0YS5sb2NhbGUgPSBDb25zdGFudHMuZGVmYXVsdExvY2FsZTtcbiAgICB9XG5cbiAgICAvLyBWYWxpZGF0ZSBsb2NhbGVcbiAgICBpZiAoZGF0YS5sb2NhbGUgJiYgIUxvY2FsZXMuc3VwcG9ydGVkTG9jYWxlcy5pbmNsdWRlcyhkYXRhLmxvY2FsZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIGxvY2FsZTogJyR7ZGF0YS5sb2NhbGV9J2ApKTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuXG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YSxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0QWdlbnRBdmFpbGFiaWxpdHlcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZU1VDQ0VFREVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVEFHRU5UQVZBSUxBQklMSVRZRkFJTEVELCBcIkdldCBhZ2VudCBhdmFpbGFiaWxpdHkgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0YXJ0cyBhIHNlc3Npb24gdG8gb21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gaW5pdC5cbiAgICogQHBhcmFtIHNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXM6IE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIHNlc3Npb24gaW5pdC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBzZXNzaW9uSW5pdChyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkluaXRPcHRpb25hbFBhcmFtczogSVNlc3Npb25Jbml0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OSU5JVFNUQVJURUQsIFwiU2Vzc2lvbiBJbml0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgY29uc3QgcmV0cnlPbjQyOSA9IHRydWU7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25Jbml0LFxuICAgICAgc2hvdWxkUmV0cnk6IChlcnJvcikgPT4gc2Vzc2lvbkluaXRSZXRyeUhhbmRsZXIoZXJyb3IsIHJldHJ5T240MjkpLFxuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV1cbiAgICB9KTtcblxuICAgIGNvbnN0IHsgcmVjb25uZWN0SWQsIGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4sIGluaXRDb250ZXh0LCBnZXRDb250ZXh0IH0gPSBzZXNzaW9uSW5pdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U2Vzc2lvbkluaXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH1gO1xuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uSW5pdFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIC8vIElmIHNob3VsZCBvbmx5IGJlIGFwcGxpY2FibGUgb24gdW5hdXRoIGNoYXQgJiB0aGUgZmxhZyBlbmFibGVkXG4gICAgY29uc3Qgc2hvdWxkVXNlU2lnUXVlcnlQYXJhbSA9ICFhdXRoZW50aWNhdGVkVXNlclRva2VuICYmIHRoaXMuY29uZmlndXJhdGlvbi51c2VVbmF1dGhSZWNvbm5lY3RJZFNpZ1F1ZXJ5UGFyYW0gPT09IHRydWU7XG4gICAgaWYgKHJlY29ubmVjdElkKSB7XG4gICAgICBpZiAoIXNob3VsZFVzZVNpZ1F1ZXJ5UGFyYW0pIHtcbiAgICAgICAgcmVxdWVzdFBhdGggKz0gYC8ke3JlY29ubmVjdElkfWA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zOiBPbW5pY2hhbm5lbFF1ZXJ5UGFyYW1ldGVyID0ge1xuICAgICAgY2hhbm5lbElkOiB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWRcbiAgICB9XG5cbiAgICBpZiAocmVjb25uZWN0SWQpIHtcbiAgICAgIGlmIChzaG91bGRVc2VTaWdRdWVyeVBhcmFtKSB7XG4gICAgICAgIHBhcmFtcy5zaWcgPSByZWNvbm5lY3RJZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBkYXRhOiBJbml0Q29udGV4dCA9IGluaXRDb250ZXh0IHx8IHt9O1xuXG4gICAgaWYgKGdldENvbnRleHQgJiYgIXdpbmRvdy5kb2N1bWVudCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihgZ2V0Q29udGV4dCBpcyBvbmx5IHN1cHBvcnRlZCBvbiB3ZWIgYnJvd3NlcnNgKSk7XG4gICAgfVxuXG4gICAgaWYgKGdldENvbnRleHQpIHtcbiAgICAgIGRhdGEuYnJvd3NlciA9IEJyb3dzZXJJbmZvLmdldEJyb3dzZXJOYW1lKCk7XG4gICAgICBkYXRhLmRldmljZSA9IERldmljZUluZm8uZ2V0RGV2aWNlVHlwZSgpO1xuICAgICAgZGF0YS5vcmlnaW51cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICAgIGRhdGEub3MgPSBPU0luZm8uZ2V0T3NUeXBlKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGRlZmF1bHQgbG9jYWxlIGlmIGxvY2FsZSBpcyBlbXB0eVxuICAgIGlmICghZGF0YS5sb2NhbGUpIHtcbiAgICAgIGRhdGEubG9jYWxlID0gQ29uc3RhbnRzLmRlZmF1bHRMb2NhbGU7XG4gICAgfVxuXG4gICAgLy8gVmFsaWRhdGUgbG9jYWxlXG4gICAgaWYgKGRhdGEubG9jYWxlICYmICFMb2NhbGVzLnN1cHBvcnRlZExvY2FsZXMuaW5jbHVkZXMoZGF0YS5sb2NhbGUpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKGBVbnN1cHBvcnRlZCBsb2NhbGU6ICcke2RhdGEubG9jYWxlfSdgKSk7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBwYXJhbXMsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uSW5pdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05JTklUU1VDQ0VFREVELCBcIlNlc3Npb24gSW5pdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCBkYXRhLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTklOSVRGQUlMRUQsIFwiU2Vzc2lvbiBJbml0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIGRhdGEsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZXMgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQ6IFJlcXVlc3RJZCB0byB1c2UgZm9yIHNlc3Npb24gY2xvc2UgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHNlc3Npb25DbG9zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZXNzaW9uIGNsb3NlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHNlc3Npb25DbG9zZShyZXF1ZXN0SWQ6IHN0cmluZywgc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM6IElTZXNzaW9uQ2xvc2VPcHRpb25hbFBhcmFtcyA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFU1NJT05DTE9TRVNUQVJURUQsIFwiU2Vzc2lvbiBDbG9zZSBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnNlc3Npb25DbG9zZVxuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBpc1JlY29ubmVjdENoYXQsIGlzUGVyc2lzdGVudENoYXQsIGNoYXRJZCB9ID0gc2Vzc2lvbkNsb3NlT3B0aW9uYWxQYXJhbXM7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIGNvbnN0IGRhdGE6IGFueSA9IHt9OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhLmNoYXRJZCA9IGNoYXRJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEF1dGhTZXNzaW9uQ2xvc2VQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGlmIChpc1JlY29ubmVjdENoYXQpIHtcbiAgICAgIHJlcXVlc3RQYXRoICs9IGAmaXNSZWNvbm5lY3RDaGF0PXRydWVgO1xuICAgIH1cblxuICAgIGlmIChpc1BlcnNpc3RlbnRDaGF0KSB7XG4gICAgICByZXF1ZXN0UGF0aCArPSBgJmlzUGVyc2lzdGVudENoYXQ9dHJ1ZWA7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIlBPU1RcIjtcbiAgICBjb25zdCBvcHRpb25zOiBBeGlvc1JlcXVlc3RDb25maWcgPSB7XG4gICAgICBkYXRhLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZXNzaW9uQ2xvc2VcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRVNTSU9OQ0xPU0VTVUNDRUVERUQsIFwiU2Vzc2lvbiBDbG9zZSBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU0VTU0lPTkNMT1NFRkFJTEVELCBcIlNlc3Npb24gY2xvc2UgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChlcnJvci5jb2RlID09PSBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGUgdGhlIGF1dGggY2hhdCByZWNvcmQgZXhpc3RzIGluIGRhdGFiYXNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkOiBSZXF1ZXN0SWQgZm9yIHZhbGlkYXRlQXV0aENoYXRSZWNvcmQgKHNhbWUgcmVxdWVzdCBpZCBmb3Igc2Vzc2lvbiBpbml0KS5cbiAgICogQHBhcmFtIHZhbGlkYXRlQXV0aENoYXRSZWNvcmRPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3IgdmFsaWRhdGVBdXRoQ2hhdFJlY29yZC5cbiAgICovXG4gIHB1YmxpYyBhc3luYyB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkKHJlcXVlc3RJZDogc3RyaW5nLCB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM6IElWYWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXMpOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JEU1RBUlRFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiwgY2hhdElkIH0gPSB2YWxpZGF0ZUF1dGhDaGF0UmVjb3JkT3B0aW9uYWxQYXJhbXM7XG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRWYWxpZGF0ZUF1dGhDaGF0TWFwUmVjb3JkUGF0aH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZH0vJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZH0vJHtjaGF0SWR9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcudmFsaWRhdGVBdXRoQ2hhdFJlY29yZFxuICAgIH0pO1xuXG4gICAgY29uc3QgcmVxdWVzdEhlYWRlcnM6IFN0cmluZ01hcCA9IENvbnN0YW50cy5kZWZhdWx0SGVhZGVycztcbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy52YWxpZGF0ZUF1dGhDaGF0UmVjb3JkVGltZW91dFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhPy5hdXRoQ2hhdEV4aXN0ID09PSB0cnVlKSB7XG4gICAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuVkFMSURBVEVBVVRIQ0hBVFJFQ09SRFNVQ0NFRURFRCwgXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIHN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgICAgICAgcmVzb2x2ZShyZXNwb25zZS5kYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgRmFpbGVkLiBSZWNvcmQgaXMgbm90IGZvdW5kIG9yIHJlcXVlc3QgaXMgbm90IGF1dGhvcml6ZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoXCJWYWxpZGF0ZSBBdXRoIENoYXQgUmVjb3JkIEZhaWxlZC4gUmVjb3JkIGlzIG5vdCBmb3VuZCBvciByZXF1ZXN0IGlzIG5vdCBhdXRob3JpemVkXCIpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuXG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5WQUxJREFURUFVVEhDSEFUUkVDT1JERkFJTEVELCBcIlZhbGlkYXRlIEF1dGggQ2hhdCBSZWNvcmQgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlcnJvci50b1N0cmluZygpID09PSBcIkVycm9yOiBSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlIDQwNFwiKSB7IC8vIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICByZXNvbHZlKHt9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogU3VibWl0cyBwb3N0IGNoYXQgcmVzcG9uc2UuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gcG9zdENoYXRSZXNwb25zZSBQb3N0IGNoYXQgcmVzcG9uc2UgdG8gc3VibWl0LlxuICAgKiBAcGFyYW0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzdWJtaXQgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2UocmVxdWVzdElkOiBzdHJpbmcsIHBvc3RDaGF0UmVzcG9uc2U6IG9iamVjdCwgc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zOiBJU3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVEFSVEVELCBcIlN1Ym1pdCBQb3N0IENoYXQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0U3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLnN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VcbiAgICB9KTtcblxuICAgIGNvbnN0IHsgYXV0aGVudGljYXRlZFVzZXJUb2tlbiB9ID0gc3VibWl0UG9zdENoYXRSZXNwb25zZU9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoU3VibWl0UG9zdENoYXRQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICB9XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KHBvc3RDaGF0UmVzcG9uc2UpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zdWJtaXRQb3N0Q2hhdFJlc3BvbnNlXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRTVUNDRUVERUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICByZXNvbHZlKCk7XG5cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuRVJST1IsIE9DU0RLVGVsZW1ldHJ5RXZlbnQuU1VCTUlUUE9TVENIQVRGQUlMRUQsIFwiU3VibWl0IFBvc3QgQ2hhdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1Ym1pdHMgcG9zdCBjaGF0IHJlc3BvbnNlLlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3RJZCBvZiB0aGUgb21uaWNoYW5uZWwgc2Vzc2lvbi5cbiAgICogQHBhcmFtIHBvc3RDaGF0UmVzcG9uc2UgUG9zdCBjaGF0IHJlc3BvbnNlIHRvIHN1Ym1pdC5cbiAgICogQHBhcmFtIHN1Ym1pdFBvc3RDaGF0UmVzcG9uc2VPcHRpb25hbFBhcmFtczogT3B0aW9uYWwgcGFyYW1ldGVycyBmb3Igc3VibWl0IHBvc3QgY2hhdCByZXNwb25zZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRTdXJ2ZXlJbnZpdGVMaW5rKHN1cnZleU93bmVySWQ6IHN0cmluZywgc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHk6IG9iamVjdCwgZ2V0c3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zOiBJR2V0U3VydmV5SW52aXRlTGlua09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPG9iamVjdD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICBpZiAodGhpcy5sb2dnZXIpIHtcbiAgICAgIHRoaXMubG9nZ2VyLmxvZyhMb2dMZXZlbC5JTkZPLFxuICAgICAgICBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVFNVUlZFWUlOVklURUxJTktTVEFSVEVELFxuICAgICAgICB7IFN1cnZleU93bmVySWQ6IHN1cnZleU93bmVySWQgfSxcbiAgICAgICAgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN0YXJ0ZWRcIik7XG4gICAgfVxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdEdldFN1cnZleUludml0ZUxpbmtQYXRofS8ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ0lkfS8ke3N1cnZleU93bmVySWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZ2V0U3VydmV5SW52aXRlTGlua1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCByZXF1ZXN0SWQgfSA9IGdldHN1cnZleUludml0ZUxpbmtPcHRpb25hbFBhcmFtcztcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG5cbiAgICBpZiAoYXV0aGVudGljYXRlZFVzZXJUb2tlbikge1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0U3VydmV5SW52aXRlTGlua1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7c3VydmV5T3duZXJJZH1gO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdID0gdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2U7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgaWYgKHJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc3VydmV5SW52aXRlQVBJUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5nZXRTdXJ2ZXlJbnZpdGVMaW5rXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHsgZGF0YSwgaGVhZGVycyB9ID0gcmVzcG9uc2U7XG4gICAgICAgIHRoaXMuc2V0QXV0aENvZGVOb25jZShoZWFkZXJzKTtcblxuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuR0VUU1VSVkVZSU5WSVRFTElOS1NVQ0NFRURFRCwgXCJHZXQgU3VydmV5IEludml0ZSBMaW5rIFN1Y2NlZWRlZFwiLCByZXF1ZXN0SWQsIHJlc3BvbnNlLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICByZXNvbHZlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRTVVJWRVlJTlZJVEVMSU5LRkFJTEVELCBcIkdldCBTdXJ2ZXkgSW52aXRlIExpbmsgZmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgY2hhdCB0cmFuc2NyaXB0cyBmb3IgY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gY2hhdElkIENoYXQgdGhyZWFkIElkLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBnZXQgY2hhdCB0cmFuc2NyaXB0cy5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBnZXRDaGF0VHJhbnNjcmlwdHMocmVxdWVzdElkOiBzdHJpbmcsIGNoYXRJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtczogSUdldENoYXRUcmFuc2NyaXB0c09wdGlvbmFsUGFyYW1zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVFNUQVJURUQsIFwiR2V0IENoYXQgVHJhbnNjcmlwdCBTdGFydGVkXCIsIHJlcXVlc3RJZCk7XG5cbiAgICBsZXQgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmdldENoYXRUcmFuc2NyaXB0c1xuICAgIH0pO1xuXG4gICAgY29uc3QgeyBhdXRoZW50aWNhdGVkVXNlclRva2VuLCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uIH0gPSBnZXRDaGF0VHJhbnNjcmlwdHNPcHRpb25hbFBhcmFtcztcbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy53aWRnZXRBcHBJZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi53aWRnZXRJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhvcml6YXRpb25dID0gdG9rZW47XG5cbiAgICBpZiAodGhpcy5saXZlQ2hhdFZlcnNpb24gPT09IExpdmVDaGF0VmVyc2lvbi5WMiB8fCAoY3VycmVudExpdmVDaGF0VmVyc2lvbiAmJiBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uID09PSBMaXZlQ2hhdFZlcnNpb24uVjIpKSB7XG4gICAgICByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdHYyR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgICAgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoZW50aWNhdGVkVXNlclRva2VuXSA9IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW47XG4gICAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXR2MkF1dGhHZXRDaGF0VHJhbnNjcmlwdFBhdGh9LyR7Y2hhdElkfS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgICB9XG4gICAgfVxuICAgIGVsc2UgaWYgKGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4pIHtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aGVudGljYXRlZFVzZXJUb2tlbl0gPSBhdXRoZW50aWNhdGVkVXNlclRva2VuO1xuICAgICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5hdXRoQ29kZU5vbmNlXSA9IHRoaXMuY29uZmlndXJhdGlvbi5hdXRoQ29kZU5vbmNlO1xuICAgICAgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRBdXRoR2V0Q2hhdFRyYW5zY3JpcHRQYXRofS8ke2NoYXRJZH0vJHtyZXF1ZXN0SWR9P2NoYW5uZWxJZD0ke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLmNoYW5uZWxJZH1gO1xuICAgIH1cblxuICAgIHRoaXMuc2V0U2Vzc2lvbklkSGVhZGVyKHRoaXMuc2Vzc2lvbklkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgYWRkT2NVc2VyQWdlbnRIZWFkZXIodGhpcy5vY1VzZXJBZ2VudCwgcmVxdWVzdEhlYWRlcnMpO1xuXG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnVXJsfSR7cmVxdWVzdFBhdGh9YDtcbiAgICBjb25zdCBtZXRob2QgPSBcIkdFVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgbWV0aG9kLFxuICAgICAgdXJsLFxuICAgICAgdGltZW91dDogdGhpcy5jb25maWd1cmF0aW9uLmRlZmF1bHRSZXF1ZXN0VGltZW91dCA/PyB0aGlzLmNvbmZpZ3VyYXRpb24ucmVxdWVzdFRpbWVvdXRDb25maWcuZ2V0Q2hhdFRyYW5zY3JpcHRzXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICBjb25zdCB7IGRhdGEsIGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkdFVENIQVRUUkFOU0NSSVBUU1VDQ0VFREVELCBcIkdldCBDaGF0IFRyYW5zY3JpcHQgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5HRVRDSEFUVFJBTlNDUklQVEZBSUxFRCwgXCJHZXQgQ2hhdCBUcmFuc2NyaXB0IGZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG5cbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEVtYWlsIHRyYW5zY3JpcHQgdG8gY3VzdG9tZXIuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uLlxuICAgKiBAcGFyYW0gdG9rZW4gU2t5cGUgdG9rZW4uXG4gICAqIEBwYXJhbSBlbWFpbFJlcXVlc3RCb2R5IEVtYWlsIHJlcXVlc3QgYm9keS5cbiAgICogQHBhcmFtIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zIE9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGVtYWlsIHRyYW5zY3JpcHQuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZW1haWxUcmFuc2NyaXB0KHJlcXVlc3RJZDogc3RyaW5nLCB0b2tlbjogc3RyaW5nLCBlbWFpbFJlcXVlc3RCb2R5OiBvYmplY3QsIGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zOiBJRW1haWxUcmFuc2NyaXB0T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRTVEFSVEVELCBcIkVtYWlsIFRyYW5zY3JpcHQgU3RhcnRlZFwiLCByZXF1ZXN0SWQpO1xuXG4gICAgbGV0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0VHJhbnNjcmlwdEVtYWlsUmVxdWVzdFBhdGh9LyR7cmVxdWVzdElkfT9jaGFubmVsSWQ9JHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5jaGFubmVsSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgaGVhZGVyT3ZlcndyaXRlczogW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0sXG4gICAgICByZXRyaWVzOiB0aGlzLmNvbmZpZ3VyYXRpb24ubWF4UmVxdWVzdFJldHJpZXNPbkZhaWx1cmUsXG4gICAgICB3YWl0VGltZUluTXNCZXR3ZWVuUmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLndhaXRUaW1lQmV0d2VlblJldHJpZXNDb25maWcuZW1haWxUcmFuc2NyaXB0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IGVtYWlsVHJhbnNjcmlwdE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLndpZGdldEFwcElkXSA9IHRoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLndpZGdldElkO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aG9yaXphdGlvbl0gPSB0b2tlbjtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFRyYW5zY3JpcHRFbWFpbFJlcXVlc3RQYXRofS8ke3JlcXVlc3RJZH0/Y2hhbm5lbElkPSR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24uY2hhbm5lbElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiUE9TVFwiO1xuICAgIGNvbnN0IG9wdGlvbnM6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGVtYWlsUmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5lbWFpbFRyYW5zY3JpcHRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3NJbnN0YW5jZShvcHRpb25zKTtcbiAgICAgICAgY29uc3QgeyBoZWFkZXJzIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5zZXRBdXRoQ29kZU5vbmNlKGhlYWRlcnMpO1xuXG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRTVUNDRUVERUQsIFwiRW1haWwgVHJhbnNjcmlwdCBzdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5FTUFJTFRSQU5TQ1JJUFRGQUlMRUQsIFwiRW1haWwgVHJhbnNjcmlwdCBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgaWYgKGlzRXhwZWN0ZWRBeGlvc0Vycm9yKGVycm9yLCBDb25zdGFudHMuYXhpb3NUaW1lb3V0RXJyb3JDb2RlKSkge1xuICAgICAgICAgIHJlamVjdCggbmV3IEVycm9yKHRoaXMuSFRUUFRpbWVPdXRFcnJvck1lc3NhZ2UpKTtcbiAgICAgICAgfVxuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGRhdGEgbWFza2luZyBpbmZvIG9mIHRoZSBvcmcuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIG9mIHRoZSBvbW5pY2hhbm5lbCBzZXNzaW9uIChPcHRpb25hbCkuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgZmV0Y2hEYXRhTWFza2luZ0luZm8ocmVxdWVzdElkOiBzdHJpbmcpOiBQcm9taXNlPElEYXRhTWFza2luZ0luZm8+IHtcbiAgICBjb25zdCB0aW1lciA9IFRpbWVyLlRJTUVSKCk7XG4gICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NUQVJURUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcbiAgICBpZiAoIXJlcXVlc3RJZCkge1xuICAgICAgcmVxdWVzdElkID0gdXVpZHY0KCk7XG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdFBhdGggPSBgLyR7T21uaWNoYW5uZWxFbmRwb2ludHMuTGl2ZUNoYXRGZXRjaERhdGFNYXNraW5nSW5mb1BhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9YDtcbiAgICBjb25zdCBheGlvc0luc3RhbmNlID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgYXhpb3NSZXRyeUhhbmRsZXIoYXhpb3NJbnN0YW5jZSwge1xuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLmZldGNoRGF0YU1hc2tpbmdJbmZvXG4gICAgfSk7XG5cbiAgICBjb25zdCByZXF1ZXN0SGVhZGVyczogU3RyaW5nTWFwID0gQ29uc3RhbnRzLmRlZmF1bHRIZWFkZXJzO1xuICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub3JnYW5pemF0aW9uSWRdID0gdGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWQ7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5yZXF1ZXN0SWRdID0gcmVxdWVzdElkO1xuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdVcmx9JHtyZXF1ZXN0UGF0aH1gO1xuICAgIGNvbnN0IG1ldGhvZCA9IFwiR0VUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5mZXRjaERhdGFNYXNraW5nSW5mb1xuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgY29uc3QgeyBkYXRhIH0gPSByZXNwb25zZTtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLklORk8sIE9DU0RLVGVsZW1ldHJ5RXZlbnQuRkVUQ0hEQVRBTUFTS0lOR1NVQ0NFRURFRCwgXCJGZXRjaCBEYXRhIE1hc2tpbmcgc3VjY2VlZGVkXCIsIHJlcXVlc3RJZCwgcmVzcG9uc2UsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIHJlc29sdmUoZGF0YSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zdCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzID0gdGltZXIubWlsbGlTZWNvbmRzRWxhcHNlZDtcbiAgICAgICAgdGhpcy5sb2dXaXRoTG9nZ2VyKExvZ0xldmVsLkVSUk9SLCBPQ1NES1RlbGVtZXRyeUV2ZW50LkZFVENIREFUQU1BU0tJTkdGQUlMRUQsIFwiRmV0Y2ggRGF0YSBNYXNraW5nIEZhaWxlZFwiLCByZXF1ZXN0SWQsIHVuZGVmaW5lZCwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgZXJyb3IsIHVuZGVmaW5lZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTWFrZXMgYSBzZWNvbmRhcnkgY2hhbm5lbCBldmVudCBuZXR3b3JrIGNhbGwgdG8gT21uaWNoYW5uZWwuXG4gICAqIEBwYXJhbSByZXF1ZXN0SWQgUmVxdWVzdElkIHRvIHVzZSBmb3Igc2Vjb25kYXJ5IGNoYW5uZWwgZXZlbnRcbiAgICogQHBhcmFtIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5IHNlY29uZGFyeUNoYW5uZWwgZXZlbnQgcmVxdWVzdCBib2R5XG4gICAqIEBwYXJhbSBzZWNvbmRhcnlDaGFubmVsRXZlbnRPcHRpb25hbFBhcmFtcyBPcHRpb25hbCBwYXJhbWV0ZXJzIGZvciBzZWNvbmRhcnkgY2hhbm5lbCBldmVudHMuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgbWFrZVNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3QocmVxdWVzdElkOiBzdHJpbmcsIHNlY29uZGFyeUNoYW5uZWxFdmVudFJlcXVlc3RCb2R5OiBvYmplY3QsIHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zOiBJU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50T3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHRpbWVyID0gVGltZXIuVElNRVIoKTtcbiAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNUU1RBUlRFRCwgXCJTZWNvbmRhcnkgQ2hhbm5lbCBFdmVudCBSZXF1ZXN0IFN0YXJ0ZWRcIiwgcmVxdWVzdElkKTtcblxuICAgIGxldCByZXF1ZXN0UGF0aCA9IGAvJHtPbW5pY2hhbm5lbEVuZHBvaW50cy5MaXZlQ2hhdFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgY29uc3QgYXhpb3NJbnN0YW5jZSA9IGF4aW9zLmNyZWF0ZSgpO1xuICAgIGF4aW9zUmV0cnlIYW5kbGVyKGF4aW9zSW5zdGFuY2UsIHtcbiAgICAgIGhlYWRlck92ZXJ3cml0ZXM6IFtPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhDb2RlTm9uY2VdLFxuICAgICAgcmV0cmllczogdGhpcy5jb25maWd1cmF0aW9uLm1heFJlcXVlc3RSZXRyaWVzT25GYWlsdXJlLFxuICAgICAgd2FpdFRpbWVJbk1zQmV0d2VlblJldHJpZXM6IHRoaXMuY29uZmlndXJhdGlvbi53YWl0VGltZUJldHdlZW5SZXRyaWVzQ29uZmlnLm1ha2VTZWNvbmRhcnlDaGFubmVsRXZlbnRSZXF1ZXN0XG4gICAgfSk7XG5cbiAgICBjb25zdCB7IGF1dGhlbnRpY2F0ZWRVc2VyVG9rZW4gfSA9IHNlY29uZGFyeUNoYW5uZWxFdmVudE9wdGlvbmFsUGFyYW1zO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcblxuICAgIGlmIChhdXRoZW50aWNhdGVkVXNlclRva2VuKSB7XG4gICAgICByZXF1ZXN0SGVhZGVyc1tPbW5pY2hhbm5lbEhUVFBIZWFkZXJzLmF1dGhlbnRpY2F0ZWRVc2VyVG9rZW5dID0gYXV0aGVudGljYXRlZFVzZXJUb2tlbjtcbiAgICAgIHJlcXVlc3RIZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMuYXV0aENvZGVOb25jZV0gPSB0aGlzLmNvbmZpZ3VyYXRpb24uYXV0aENvZGVOb25jZTtcbiAgICAgIHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLkxpdmVDaGF0QXV0aFNlY29uZGFyeUNoYW5uZWxFdmVudFBhdGh9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ub3JnSWR9LyR7dGhpcy5vbW5pY2hhbm5lbENvbmZpZ3VyYXRpb24ud2lkZ2V0SWR9LyR7cmVxdWVzdElkfWA7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTZXNzaW9uSWRIZWFkZXIodGhpcy5zZXNzaW9uSWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICBhZGRPY1VzZXJBZ2VudEhlYWRlcih0aGlzLm9jVXNlckFnZW50LCByZXF1ZXN0SGVhZGVycyk7XG5cbiAgICByZXF1ZXN0UGF0aCArPSBcIj9jaGFubmVsSWQ9XCIgKyBDb25zdGFudHMuZGVmYXVsdENoYW5uZWxJZDtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgZGF0YTogSlNPTi5zdHJpbmdpZnkoc2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdEJvZHkpLFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5tYWtlU2Vjb25kYXJ5Q2hhbm5lbEV2ZW50UmVxdWVzdFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvc0luc3RhbmNlKG9wdGlvbnMpO1xuICAgICAgICBjb25zdCB7IGhlYWRlcnMgfSA9IHJlc3BvbnNlO1xuICAgICAgICB0aGlzLnNldEF1dGhDb2RlTm9uY2UoaGVhZGVycyk7XG5cbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5JTkZPLCBPQ1NES1RlbGVtZXRyeUV2ZW50LlNFQ09OREFSWUNIQU5ORUxFVkVOVFJFUVVFU1RTVUNDRUVERUQsIFwiU2Vjb25kYXJ5IENoYW5uZWwgRXZlbnQgUmVxdWVzdCBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRUNPTkRBUllDSEFOTkVMRVZFTlRSRVFVRVNURkFJTEVELCBcIlNlY29uZGFyeSBDaGFubmVsIEV2ZW50IFJlcXVlc3QgRmFpbGVkXCIsIHJlcXVlc3RJZCwgdW5kZWZpbmVkLCBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLCByZXF1ZXN0UGF0aCwgbWV0aG9kLCBlcnJvciwgdW5kZWZpbmVkLCByZXF1ZXN0SGVhZGVycyk7XG4gICAgICAgIGlmIChpc0V4cGVjdGVkQXhpb3NFcnJvcihlcnJvciwgQ29uc3RhbnRzLmF4aW9zVGltZW91dEVycm9yQ29kZSkpIHtcbiAgICAgICAgICByZWplY3QoIG5ldyBFcnJvcih0aGlzLkhUVFBUaW1lT3V0RXJyb3JNZXNzYWdlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBTZW5kIHR5cGluZyBpbmRpY2F0b3JcbiAgICogQHBhcmFtIHJlcXVlc3RJZCBSZXF1ZXN0SWQgb2YgdGhlIG9tbmljaGFubmVsIHNlc3Npb24uXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgc2VuZFR5cGluZ0luZGljYXRvcihyZXF1ZXN0SWQ6IHN0cmluZywgY3VycmVudExpdmVDaGF0VmVyc2lvbjogbnVtYmVyLCBzZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXM6IElTZW5kVHlwaW5nSW5kaWNhdG9yT3B0aW9uYWxQYXJhbXMgPSB7fSk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIGF2b2lkaW5nIGxvZ2dpbmcgSW5mbyBmb3IgdHlwaW5naW5kaWNhdG9yIHRvIHJlZHVjZSBsb2cgdHJhZmZpY1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9XG4gICAgY29uc3QgdGltZXIgPSBUaW1lci5USU1FUigpO1xuICAgIGNvbnN0IHsgY3VzdG9tZXJEaXNwbGF5TmFtZSB9ID0gc2VuZFR5cGluZ0luZGljYXRvck9wdGlvbmFsUGFyYW1zO1xuICAgIGlmICghY3VycmVudExpdmVDaGF0VmVyc2lvbiB8fCBjdXJyZW50TGl2ZUNoYXRWZXJzaW9uICE9PSBMaXZlQ2hhdFZlcnNpb24uVjIpIHsgdGhyb3cgbmV3IEVycm9yKCdUeXBpbmcgaW5kaWNhdG9yIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHYyJykgfVxuICAgIGNvbnN0IHJlcXVlc3RQYXRoID0gYC8ke09tbmljaGFubmVsRW5kcG9pbnRzLlNlbmRUeXBpbmdJbmRpY2F0b3JQYXRofS8ke3JlcXVlc3RJZH1gO1xuICAgIGNvbnN0IGF4aW9zSW5zdGFuY2UgPSBheGlvcy5jcmVhdGUoKTtcblxuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzOiBTdHJpbmdNYXAgPSBDb25zdGFudHMuZGVmYXVsdEhlYWRlcnM7XG4gICAgcmVxdWVzdEhlYWRlcnNbT21uaWNoYW5uZWxIVFRQSGVhZGVycy5vcmdhbml6YXRpb25JZF0gPSB0aGlzLm9tbmljaGFubmVsQ29uZmlndXJhdGlvbi5vcmdJZDtcbiAgICBpZiAoY3VzdG9tZXJEaXNwbGF5TmFtZSkge1xuICAgICAgcmVxdWVzdEhlYWRlcnNbQ29uc3RhbnRzLmN1c3RvbWVyRGlzcGxheU5hbWVdID0gY3VzdG9tZXJEaXNwbGF5TmFtZTtcbiAgICB9XG5cbiAgICB0aGlzLnNldFNlc3Npb25JZEhlYWRlcih0aGlzLnNlc3Npb25JZCwgcmVxdWVzdEhlYWRlcnMpO1xuICAgIGFkZE9jVXNlckFnZW50SGVhZGVyKHRoaXMub2NVc2VyQWdlbnQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgIGNvbnN0IHVybCA9IGAke3RoaXMub21uaWNoYW5uZWxDb25maWd1cmF0aW9uLm9yZ1VybH0ke3JlcXVlc3RQYXRofWA7XG4gICAgY29uc3QgbWV0aG9kID0gXCJQT1NUXCI7XG4gICAgY29uc3Qgb3B0aW9uczogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICB0aW1lb3V0OiB0aGlzLmNvbmZpZ3VyYXRpb24uZGVmYXVsdFJlcXVlc3RUaW1lb3V0ID8/IHRoaXMuY29uZmlndXJhdGlvbi5yZXF1ZXN0VGltZW91dENvbmZpZy5zZW5kVHlwaW5nSW5kaWNhdG9yXG4gICAgfTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zSW5zdGFuY2Uob3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMgPSB0aW1lci5taWxsaVNlY29uZHNFbGFwc2VkO1xuICAgICAgICB0aGlzLmxvZ1dpdGhMb2dnZXIoTG9nTGV2ZWwuSU5GTywgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SU1VDQ0VFREVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBTdWNjZWVkZWRcIiwgcmVxdWVzdElkLCByZXNwb25zZSwgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcywgcmVxdWVzdFBhdGgsIG1ldGhvZCwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc3QgZWxhcHNlZFRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVyLm1pbGxpU2Vjb25kc0VsYXBzZWQ7XG4gICAgICAgIHRoaXMubG9nV2l0aExvZ2dlcihMb2dMZXZlbC5FUlJPUiwgT0NTREtUZWxlbWV0cnlFdmVudC5TRU5EVFlQSU5HSU5ESUNBVE9SRkFJTEVELCBcIlNlbmQgVHlwaW5nIEluZGljYXRvciBGYWlsZWRcIiwgcmVxdWVzdElkLCB1bmRlZmluZWQsIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHMsIHJlcXVlc3RQYXRoLCBtZXRob2QsIGVycm9yLCB1bmRlZmluZWQsIHJlcXVlc3RIZWFkZXJzKTtcblxuICAgICAgICBpZiAoaXNFeHBlY3RlZEF4aW9zRXJyb3IoZXJyb3IsIENvbnN0YW50cy5heGlvc1RpbWVvdXRFcnJvckNvZGUpKSB7XG4gICAgICAgICAgcmVqZWN0KCBuZXcgRXJyb3IodGhpcy5IVFRQVGltZU91dEVycm9yTWVzc2FnZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIGZvciBsb2dnaW5nLlxuICAgKlxuICAgKiBAcGFyYW0gbG9nTGV2ZWwgTG9nIGxldmVsIGZvciBsb2dnaW5nLlxuICAgKiBAcGFyYW0gdGVsZW1ldHJ5RXZlbnRUeXBlIFRlbGVtZXRyeSBldmVudCB0eXBlIGluIHdoaWNoIGV2ZW50IHdpbGwgYmUgbG9nZ2VkLlxuICAgKiBAcGFyYW0gZGVzY3JpcHRpb24gRGVzY3JpcHRpb24gb2YgdGhlIGV2ZW50LlxuICAgKiBAcGFyYW0gcmVxdWVzdElkIFJlcXVlc3QgSURcbiAgICogQHBhcmFtIHJlc3BvbnNlIFJlc3BvbnNlXG4gICAqIEBwYXJhbSBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzIEVsYXBzZWQgdGltZSBpbiBtc1xuICAgKiBAcGFyYW0gcmVxdWVzdFBhdGggUmVxdWVzdCBwYXRoXG4gICAqIEBwYXJhbSBtZXRob2QgTWV0aG9kXG4gICAqIEBwYXJhbSBlcnJvciBFcnJvclxuICAgKiBAcGFyYW0gZGF0YSBEYXRhXG4gICAqL1xuICBwcml2YXRlIGxvZ1dpdGhMb2dnZXIobG9nTGV2ZWw6IExvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGU6IE9DU0RLVGVsZW1ldHJ5RXZlbnQsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIHJlcXVlc3RJZD86IHN0cmluZywgcmVzcG9uc2U/OiBBeGlvc1Jlc3BvbnNlPGFueT4sIGVsYXBzZWRUaW1lSW5NaWxsaXNlY29uZHM/OiBudW1iZXIsIHJlcXVlc3RQYXRoPzogc3RyaW5nLCBtZXRob2Q/OiBzdHJpbmcsIGVycm9yPzogdW5rbm93biwgcmVxdWVzdFBheWxvYWQ/OiBhbnksIHJlcXVlc3RIZWFkZXJzPzogYW55KTogdm9pZCB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGlmICghdGhpcy5sb2dnZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwRXJyb3JTZW5zaXRpdmVQcm9wZXJ0aWVzKGVycm9yKTtcbiAgICB9XG5cbiAgICBsZXQgc2FuaXRpemVkUmVxdWVzdFBheWxvYWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKHJlcXVlc3RQYXlsb2FkKSB7XG4gICAgICBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCA9IHsgLi4ucmVxdWVzdFBheWxvYWQgfTtcbiAgICAgIGlmIChzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZC5jdXN0b21Db250ZXh0RGF0YSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwQ3VzdG9tQ29udGV4dERhdGFWYWx1ZXMoc2FuaXRpemVkUmVxdWVzdFBheWxvYWQuY3VzdG9tQ29udGV4dERhdGEpO1xuICAgICAgfVxuICAgICAgaWYgKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSkge1xuICAgICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwUHJlQ2hhdFJlc3BvbnNlKHNhbml0aXplZFJlcXVlc3RQYXlsb2FkLnByZUNoYXRSZXNwb25zZSk7XG4gICAgICB9XG4gICAgICBMb2dnaW5nU2FuaXRpemVyLnN0cmlwR2VvbG9jYXRpb24oc2FuaXRpemVkUmVxdWVzdFBheWxvYWQpO1xuICAgIH1cblxuICAgIGxldCBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyA9IHVuZGVmaW5lZDtcbiAgICBpZiAocmVxdWVzdEhlYWRlcnMpIHtcbiAgICAgIHNhbml0aXplZFJlcXVlc3RIZWFkZXJzID0geyAuLi5yZXF1ZXN0SGVhZGVycyB9O1xuICAgICAgTG9nZ2luZ1Nhbml0aXplci5zdHJpcFJlcXVlc3RIZWFkZXJzU2Vuc2l0aXZlUHJvcGVydGllcyhzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVycyk7XG4gICAgfVxuXG4gICAgY29uc3QgY3VzdG9tRGF0YSA9IHtcbiAgICAgIFJlcXVlc3RJZDogcmVxdWVzdElkLFxuICAgICAgUmVnaW9uOiByZXNwb25zZT8uZGF0YS5SZWdpb24sXG4gICAgICBFbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzOiBlbGFwc2VkVGltZUluTWlsbGlzZWNvbmRzLFxuICAgICAgVHJhbnNhY3Rpb25JZDogcmVzcG9uc2U/LmhlYWRlcnNbQ29uc3RhbnRzLnRyYW5zYWN0aW9uaWRdLFxuICAgICAgUmVxdWVzdFBhdGg6IHJlcXVlc3RQYXRoLFxuICAgICAgUmVxdWVzdE1ldGhvZDogbWV0aG9kLFxuICAgICAgUmVzcG9uc2VTdGF0dXNDb2RlOiByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IGVycm9yID8gKGVycm9yIGFzIGFueSkucmVzcG9uc2U/LnN0YXR1cyA6IHVuZGVmaW5lZCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBFeGNlcHRpb25EZXRhaWxzOiBlcnJvcixcbiAgICAgIFJlcXVlc3RQYXlsb2FkOiBzYW5pdGl6ZWRSZXF1ZXN0UGF5bG9hZCxcbiAgICAgIFJlcXVlc3RIZWFkZXJzOiBzYW5pdGl6ZWRSZXF1ZXN0SGVhZGVyc1xuICAgIH07XG4gICAgdGhpcy5sb2dnZXIubG9nKGxvZ0xldmVsLCB0ZWxlbWV0cnlFdmVudFR5cGUsIGN1c3RvbURhdGEsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0QXV0aENvZGVOb25jZSA9IChoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoaGVhZGVycz8uYXV0aGNvZGVub25jZSkge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uLmF1dGhDb2RlTm9uY2UgPSBoZWFkZXJzPy5hdXRoY29kZW5vbmNlO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgc2V0U2Vzc2lvbklkSGVhZGVyID0gKHNlc3Npb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkLCBoZWFkZXJzOiBhbnkpID0+IHtcbiAgICBpZiAoc2Vzc2lvbklkKSB7XG4gICAgICBoZWFkZXJzW09tbmljaGFubmVsSFRUUEhlYWRlcnMub2NTZXNzaW9uSWRdID0gc2Vzc2lvbklkO1xuICAgIH1cbiAgfVxufSJdfQ==
|